]> git.sesse.net Git - vlc/blobdiff - modules/gui/macosx/MainMenu.m
macosx: do not allow playlist item deletion for sd modules
[vlc] / modules / gui / macosx / MainMenu.m
index 5331b2bc53d4edeee0a4d009919513c095c188b8..2fda43e98586e745e27d4e2f68ea1ef82e911ab6 100644 (file)
@@ -1,7 +1,7 @@
 /*****************************************************************************
  * MainMenu.m: MacOS X interface module
  *****************************************************************************
- * Copyright (C) 2011-2013 Felix Paul Kühne
+ * Copyright (C) 2011-2014 Felix Paul Kühne
  * $Id$
  *
  * Authors: Felix Paul Kühne <fkuehne -at- videolan -dot- org>
  *****************************************************************************/
 
 #import "MainMenu.h"
+#import "intf.h"
+
 #import <vlc_common.h>
 #import <vlc_playlist.h>
 #import <vlc_input.h>
 
-#import "intf.h"
 #import "open.h"
 #import "wizard.h"
 #import "about.h"
@@ -56,8 +57,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
     return _o_sharedInstance ? _o_sharedInstance : [[self alloc] init];
 }
 
-#pragma mark -
-#pragma mark Initialization
+#pragma mark - Initialization
 
 - (id)init
 {
@@ -265,8 +265,16 @@ static VLCMainMenu *_o_sharedInstance = nil;
     [self setupVarMenuItem: o_mi_add_intf target: (vlc_object_t *)p_intf
                              var: "intf-add" selector: @selector(toggleVar:)];
 
-    [self setupExtensionsMenu];
+    /* setup extensions menu */
+    // FIXME: Implement preference for autoloading extensions on mac
+    if (![o_extMgr isLoaded] && ![o_extMgr cannotLoad])
+        [o_extMgr loadExtensions];
+
+    /* Let the ExtensionsManager itself build the menu */
+    [o_extMgr buildMenu:o_mu_extensions];
+    [o_mi_extensions setEnabled: ([o_mu_extensions numberOfItems] > 0)];
 
+    /* setup post-proc menu */
     NSUInteger count = (NSUInteger) [o_mu_ffmpeg_pp numberOfItems];
     if (count > 0)
         [o_mu_ffmpeg_pp removeAllItems];
@@ -278,18 +286,18 @@ static VLCMainMenu *_o_sharedInstance = nil;
     [o_mitem setTag: -1];
     [o_mitem setEnabled: YES];
     [o_mitem setTarget: self];
-    for (NSUInteger x = 0; x < 7; x++) {
+    for (NSUInteger x = 1; x < 7; x++) {
         [o_mu_ffmpeg_pp addItemWithTitle:[NSString stringWithFormat:_NS("Level %i"), x]
                                                action:@selector(togglePostProcessing:)
                                         keyEquivalent:@""];
-        o_mitem = [o_mu_ffmpeg_pp itemAtIndex:x+1];
-        [o_mitem setEnabled: YES];
+        o_mitem = [o_mu_ffmpeg_pp itemAtIndex:x];
+        [o_mitem setEnabled:YES];
         [o_mitem setTag:x];
-        [o_mitem setTarget: self];
+        [o_mitem setTarget:self];
     }
     char *psz_config = config_GetPsz(p_intf, "video-filter");
     if (psz_config) {
-        if (!strstr(psz_config, "postprocess"))
+        if (!strstr(psz_config, "postproc"))
             [[o_mu_ffmpeg_pp itemAtIndex:0] setState:NSOnState];
         else
             [[o_mu_ffmpeg_pp itemWithTag:config_GetInt(p_intf, "postproc-q")] setState:NSOnState];
@@ -543,8 +551,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
     return [o_context_menu autorelease];
 }
 
-#pragma mark -
-#pragma mark Termination
+#pragma mark - Termination
 
 - (void)releaseRepresentedObjects:(NSMenu *)the_menu
 {
@@ -561,8 +568,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
     }
 }
 
-#pragma mark -
-#pragma mark Interface update
+#pragma mark - Interface update
 
 - (void)setupMenus
 {
@@ -705,31 +711,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
     [o_pool release];
 }
 
-#pragma mark -
-#pragma mark Extensions
-
-- (void)setupExtensionsMenu
-{
-    /* Load extensions if needed */
-    // TODO: Implement preference for autoloading extensions on mac
-
-    // if (!var_InheritBool(p_intf, "qt-autoload-extensions")
-    //     && ![o_extMgr isLoaded])
-    // {
-    //     return;
-    // }
-
-    if (![o_extMgr isLoaded] && ![o_extMgr cannotLoad]) {
-        [o_extMgr loadExtensions];
-    }
-
-    /* Let the ExtensionsManager itself build the menu */
-    [o_extMgr buildMenu:o_mu_extensions];
-    [o_mi_extensions setEnabled: ([o_mu_extensions numberOfItems] > 0)];
-}
-
-#pragma mark -
-#pragma mark View
+#pragma mark - View
 
 - (IBAction)toggleEffectsButton:(id)sender
 {
@@ -795,8 +777,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
     return YES;
 }
 
-#pragma mark -
-#pragma mark Playback
+#pragma mark - Playback
 
 - (IBAction)quitAfterPlayback:(id)sender
 {
@@ -837,8 +818,8 @@ static VLCMainMenu *_o_sharedInstance = nil;
     [[VLCCoreInteraction sharedInstance] setAtoB];
 }
 
-#pragma mark -
-#pragma mark audio menu
+#pragma mark - audio menu
+
 - (void)refreshAudioDeviceList
 {
     char **ids, **names;
@@ -901,8 +882,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
     [self refreshAudioDeviceList];
 }
 
-#pragma mark -
-#pragma mark video menu
+#pragma mark - video menu
 
 - (IBAction)toggleFullscreen:(id)sender
 {
@@ -961,65 +941,17 @@ static VLCMainMenu *_o_sharedInstance = nil;
 
 - (void)_disablePostProcessing
 {
-    char *psz_name = "postprocess";
-    char *psz_string, *psz_parser;
-    psz_string = config_GetPsz(p_intf, "video-filter");
-
-    if (!psz_string)
-        return;
-
-    psz_parser = strstr(psz_string, psz_name);
-    if (psz_parser) {
-        if (*(psz_parser + strlen(psz_name)) == ':') {
-            memmove(psz_parser, psz_parser + strlen(psz_name) + 1,
-                    strlen(psz_parser + strlen(psz_name) + 1) + 1);
-        } else
-            *psz_parser = '\0';
-
-        /* Remove trailing : : */
-        if (strlen(psz_string) > 0 && *(psz_string + strlen(psz_string) -1) == ':')
-            *(psz_string + strlen(psz_string) -1) = '\0';
-    } else {
-        free(psz_string);
-        return;
-    }
-    config_PutPsz(p_intf, "video-filter", psz_string);
-
-    /* Try to set on the fly */
-    vout_thread_t *p_vout = getVout();
-    if (p_vout) {
-        var_SetString(p_vout, "video-filter", psz_string);
-        vlc_object_release(p_vout);
-    }
+    [[VLCCoreInteraction sharedInstance] setVideoFilter:"postproc" on:false];
 }
 
 - (void)_enablePostProcessing
 {
-    char *psz_name = "postprocess";
-    char *psz_string, *psz_parser;
-    psz_string = config_GetPsz(p_intf, "video-filter");
-
-    if (psz_string == NULL)
-        psz_string = psz_name;
-    else if (strstr(psz_string, psz_name) == NULL) {
-        char *psz_tmp = strdup([[NSString stringWithFormat: @"%s:%s", psz_string, psz_name] UTF8String]);
-        free(psz_string);
-        psz_string = psz_tmp;
-    }
-
-    config_PutPsz(p_intf, "video-filter", psz_string);
-
-    /* Try to set on the fly */
-    vout_thread_t *p_vout = getVout();
-    if (p_vout) {
-        var_SetString(p_vout, "video-filter", psz_string);
-        vlc_object_release(p_vout);
-    }
+    [[VLCCoreInteraction sharedInstance] setVideoFilter:"postproc" on:true];
 }
 
 - (IBAction)togglePostProcessing:(id)sender
 {
-    char *psz_name = "postprocess";
+    char *psz_name = "postproc";
     NSInteger count = [o_mu_ffmpeg_pp numberOfItems];
     for (NSUInteger x = 0; x < count; x++)
         [[o_mu_ffmpeg_pp itemAtIndex:x] setState:NSOffState];
@@ -1031,23 +963,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
         [self _enablePostProcessing];
         [sender setState:NSOnState];
 
-        vout_thread_t *p_vout = getVout();
-        vlc_object_t *p_filter;
-
-        config_PutInt(p_intf, "postproc-q", [sender tag]);
-
-        if (p_vout) {
-            p_filter = vlc_object_find_name(pl_Get(p_intf), psz_name);
-
-            if (!p_filter) {
-                msg_Warn(p_intf, "filter '%s' isn't enabled", psz_name);
-                vlc_object_release(p_vout);
-                return;
-            }
-            var_SetInteger(p_filter, "postproc-q", [sender tag]);
-            vlc_object_release(p_vout);
-            vlc_object_release(p_filter);
-        }
+        [[VLCCoreInteraction sharedInstance] setVideoFilterProperty:"postproc-q" forFilter:"postproc" integer:[sender tag]];
     }
 }
 
@@ -1063,6 +979,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
 }
 
 #pragma mark - Subtitles Menu
+
 - (IBAction)addSubtitleFile:(id)sender
 {
     NSInteger i_returnValue = 0;
@@ -1154,8 +1071,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
     }
 }
 
-#pragma mark -
-#pragma mark Panels
+#pragma mark - Panels
 
 - (IBAction)intfOpenFile:(id)sender
 {
@@ -1244,7 +1160,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
 
 - (IBAction)viewPreferences:(id)sender
 {
-    NSInteger i_level = [[[VLCMain sharedInstance] voutController] currentWindowLevel];
+    NSInteger i_level = [[[VLCMain sharedInstance] voutController] currentStatusWindowLevel];
     [[[VLCMain sharedInstance] simplePreferences] showSimplePrefsWithLevel:i_level];
 }
 
@@ -1274,8 +1190,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
     [[VLCMainWindow sharedInstance] changePlaylistState: psUserMenuEvent];
 }
 
-#pragma mark -
-#pragma mark Help and Docs
+#pragma mark - Help and Docs
 
 - (void)initAbout
 {
@@ -1339,8 +1254,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
     [[NSWorkspace sharedWorkspace] openURL: o_url];
 }
 
-#pragma mark -
-#pragma mark Errors, warnings and messages
+#pragma mark - Errors, warnings and messages
 
 - (IBAction)viewErrorsAndWarnings:(id)sender
 {
@@ -1352,8 +1266,8 @@ static VLCMainMenu *_o_sharedInstance = nil;
     [[[VLCMain sharedInstance] info] initPanel];
 }
 
-#pragma mark -
-#pragma mark convinience stuff for other objects
+#pragma mark - convinience stuff for other objects
+
 - (void)setPlay
 {
     [o_mi_play setTitle: _NS("Play")];
@@ -1395,8 +1309,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
     [o_mi_random setState: b_value];
 }
 
-#pragma mark -
-#pragma mark Dynamic menu creation and validation
+#pragma mark - Dynamic menu creation and validation
 
 - (void)setupVarMenuItem:(NSMenuItem *)o_mi
                   target:(vlc_object_t *)p_object
@@ -1517,7 +1430,7 @@ static VLCMainMenu *_o_sharedInstance = nil;
         return;
     }
 
-    if (var_Change(p_object, psz_variable, VLC_VAR_GETLIST,
+    if (var_Change(p_object, psz_variable, VLC_VAR_GETCHOICES,
                    &val_list, &text_list) < 0) {
         if ((i_type & VLC_VAR_TYPE) == VLC_VAR_STRING) free(val.psz_string);
         return;