]> git.sesse.net Git - vlc/blobdiff - modules/gui/macosx/controls.m
macosx: merge Eric Dudiak's code from GSoC 2008
[vlc] / modules / gui / macosx / controls.m
index b2a0e5f89fa9304a83b09b1d6f60a6e6925b7e58..b0aea74328193724cc1ea00ed15ccd8cb341bd40 100644 (file)
 #include <vlc_osd.h>
 #include <vlc_keys.h>
 
-/*****************************************************************************
- * VLCAutoGeneratedMenuContent interface
- *****************************************************************************
- * This holds our data for autogenerated menus
- *****************************************************************************/
-@interface VLCAutoGeneratedMenuContent : NSObject
-{
-    char *psz_name;
-    vlc_object_t * _vlc_object;
-    vlc_value_t value;
-    int i_type;
-}
-
-- (id)initWithVariableName: (const char *)name 
-           ofObject: (vlc_object_t *)object
-           andValue: (vlc_value_t)value 
-           ofType: (int)type;
-- (const char *)name;
-- (vlc_value_t)value;
-- (vlc_object_t *)vlcObject;
-- (int)type;
-
-@end
-
 #pragma mark -
 /*****************************************************************************
  * VLCControls implementation
 
 - (id)voutView
 {
-    id window;
-    id voutView = nil;
-    id embeddedViewList = [[VLCMain sharedInstance] getEmbeddedList];
-    NSEnumerator *enumerator = [[NSApp orderedWindows] objectEnumerator];
-    while( !voutView && ( window = [enumerator nextObject] ) )
+    id o_window;
+    id o_voutView = nil;
+    id o_embeddedViewList = [[VLCMain sharedInstance] embeddedList];
+    NSEnumerator *o_enumerator = [[NSApp orderedWindows] objectEnumerator];
+    while( !o_voutView && ( o_window = [o_enumerator nextObject] ) )
     {
         /* We have an embedded vout */
-        if( [embeddedViewList windowContainsEmbedded: window] )
+        if( [o_embeddedViewList windowContainsEmbedded: o_window] )
         {
-            voutView = [embeddedViewList getViewForWindow: window];
+            o_voutView = [o_embeddedViewList viewForWindow: o_window];
         }
         /* We have a detached vout */
-        else if( [[window className] isEqualToString: @"VLCVoutWindow"] )
+        else if( [[o_window className] isEqualToString: @"VLCVoutWindow"] )
         {
-            voutView = [window voutView];
+            o_voutView = [o_window voutView];
         }
     }
-    return [[voutView retain] autorelease];
+    return [[o_voutView retain] autorelease];
 }
 
 - (IBAction)stop:(id)sender
 
     p_intf->p_sys->b_playmode_update = true;
     p_intf->p_sys->b_intf_update = true;
-    vlc_object_release( p_playlist );
+    pl_Release( p_intf );
 }
 
 /* three little ugly helpers */
 {
     [o_btn_repeat setImage: o_repeat_single];
     [o_btn_repeat setAlternateImage: o_repeat_all];
+    [o_btn_repeat_embed setImage: [NSImage imageNamed:@"sidebarRepeatOneOn"]];
 }
 - (void)repeatAll
 {
     [o_btn_repeat setImage: o_repeat_all];
     [o_btn_repeat setAlternateImage: o_repeat_off];
+    [o_btn_repeat_embed setImage: [NSImage imageNamed:@"sidebarRepeatOn"]];
 }
 - (void)repeatOff
 {
     [o_btn_repeat setImage: o_repeat_off];
     [o_btn_repeat setAlternateImage: o_repeat_single];
+    [o_btn_repeat_embed setImage: [NSImage imageNamed:@"sidebarRepeat"]];
 }
 - (void)shuffle
 {
     playlist_t *p_playlist = pl_Hold( VLCIntf );
     var_Get( p_playlist, "random", &val );
     [o_btn_shuffle setState: val.b_bool];
-    vlc_object_release( p_playlist );
+       if(val.b_bool)
+        [o_btn_shuffle_embed setImage: [NSImage imageNamed:@"sidebarShuffleOn"]];
+       else
+        [o_btn_shuffle_embed setImage: [NSImage imageNamed:@"sidebarShuffle"]];    
+    pl_Release( VLCIntf );
 }
 
 - (IBAction)repeatButtonAction:(id)sender
     p_intf->p_sys->b_playmode_update = true;
     p_intf->p_sys->b_intf_update = true;
 
-    vlc_object_release( p_playlist );
+    pl_Release( p_intf );
 }
 
 
  
     p_intf->p_sys->b_playmode_update = true;
     p_intf->p_sys->b_intf_update = true;
-    vlc_object_release( p_playlist );
+    pl_Release( p_intf );
 }
 
 - (IBAction)loop:(id)sender
 
     p_intf->p_sys->b_playmode_update = true;
     p_intf->p_sys->b_intf_update = true;
-    vlc_object_release( p_playlist );
+    pl_Release( p_intf );
 }
 
 - (IBAction)forward:(id)sender
                 [o_vout_view toggleFloatOnTop];
             else if( [o_title isEqualToString: _NS("Fit to Screen") ] )
             {
-                id o_window = [o_vout_view getWindow];
+                id o_window = [o_vout_view voutWindow];
                 if( ![o_window isZoomed] )
                     [o_window performZoom:self];
             }
     case VLC_VAR_VOID:
         o_data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: psz_variable ofObject: p_object
                 andValue: val ofType: i_type];
-        [o_mi setRepresentedObject: [NSValue valueWithPointer:[o_data retain]]];
+        [o_mi setRepresentedObject: [o_data autorelease]];
         break;
 
     case VLC_VAR_BOOL:
         o_data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: psz_variable ofObject: p_object
                 andValue: val ofType: i_type];
-        [o_mi setRepresentedObject: [NSValue valueWithPointer:[o_data retain]]];
+        [o_mi setRepresentedObject: [o_data autorelease]];
         if( !( i_type & VLC_VAR_ISCOMMAND ) )
             [o_mi setState: val.b_bool ? TRUE : FALSE ];
         break;
             o_lmi = [o_menu addItemWithTitle: o_title action: pf_callback keyEquivalent: @""];
             o_data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: strdup(psz_variable) ofObject: p_object
                     andValue: another_val ofType: i_type];
-            [o_lmi setRepresentedObject: [NSValue valueWithPointer:[o_data retain]]];
+            [o_lmi setRepresentedObject: [o_data autorelease]];
             [o_lmi setTarget: self];
 
             if( !strcmp( val.psz_string, val_list.p_list->p_values[i].psz_string ) && !( i_type & VLC_VAR_ISCOMMAND ) )
                                  [NSString stringWithFormat: @"%d",
                                  val_list.p_list->p_values[i].i_int];
 
-            o_lmi = [[o_menu addItemWithTitle: o_title action: pf_callback keyEquivalent: @""] retain ];
+            o_lmi = [o_menu addItemWithTitle: o_title action: pf_callback keyEquivalent: @""];
             o_data = [[VLCAutoGeneratedMenuContent alloc] initWithVariableName: strdup(psz_variable) ofObject: p_object
                     andValue: val_list.p_list->p_values[i] ofType: i_type];
-            [o_lmi setRepresentedObject: [NSValue valueWithPointer:[ o_data retain]]];
+            [o_lmi setRepresentedObject: [o_data autorelease]];
             [o_lmi setTarget: self];
 
             if( val_list.p_list->p_values[i].i_int == val.i_int && !( i_type & VLC_VAR_ISCOMMAND ) )
 
     /* clean up everything */
     if( (i_type & VLC_VAR_TYPE) == VLC_VAR_STRING ) free( val.psz_string );
-    var_Change( p_object, psz_variable, VLC_VAR_FREELIST, &val_list, &text_list );
+    var_FreeList( &val_list, &text_list );
 }
 
 - (IBAction)toggleVar:(id)sender
 {
     NSMenuItem *o_mi = (NSMenuItem *)sender;
-    VLCAutoGeneratedMenuContent *o_data = [[o_mi representedObject] pointerValue];
+    VLCAutoGeneratedMenuContent *o_data = [o_mi representedObject];
     [NSThread detachNewThreadSelector: @selector(toggleVarThread:)
         toTarget: self withObject: o_data];
 
     }
 }
 
-- (id)getFSPanel
+- (id)fspanel
 {
     if( o_fs_panel )
         return o_fs_panel;
             while( (o_window = [o_enumerator nextObject]))
             {
                 if( [[o_window className] isEqualToString: @"VLCVoutWindow"] ||
-                            [[[VLCMain sharedInstance] getEmbeddedList]
+                            [[[VLCMain sharedInstance] embeddedList]
                             windowContainsEmbedded: o_window])
                 {
                     bEnabled = TRUE;
     }
 
     /* Special case for telx menu */
-    if( [[o_mi title] isEqualToString: _NS("Normal Size")] );
+    if( [[o_mi title] isEqualToString: _NS("Normal Size")] )
     {
         NSMenuItem *item = [[o_mi menu] itemWithTitle:_NS("Teletext")];
                bool b_telx = p_input && var_GetInteger( p_input, "teletext-es" ) >= 0;
     }
 
     if( p_input ) vlc_object_release( p_input );
-    vlc_object_release( p_playlist );
+    pl_Release( p_intf );
 
     return( bEnabled );
 }
 - (void)mouseDown: (NSEvent *)ourEvent
 {
     if( [ourEvent clickCount] > 1 )
-        [[[VLCMain sharedInstance] getControls] goToSpecificTime: nil];
+        [[[VLCMain sharedInstance] controls] goToSpecificTime: nil];
     else
         [[VLCMain sharedInstance] timeFieldWasClicked: self];
 }