From 7c07687a585668e65bf68a0d320011dac5650cdc Mon Sep 17 00:00:00 2001 From: Derk-Jan Hartman Date: Thu, 17 Feb 2005 01:53:50 +0000 Subject: [PATCH] * Finally fixed the issue with resizing the controller and the broken playlist view that was the result of this resize. Estimated 60 hours spent to work around a stupid autoresize bug in the AppKit of Cocoa. --- .../English.lproj/MainMenu.nib/classes.nib | 7 +- .../English.lproj/MainMenu.nib/info.nib | 13 +-- .../English.lproj/MainMenu.nib/objects.nib | Bin 36321 -> 33637 bytes modules/gui/macosx/intf.h | 13 ++- modules/gui/macosx/intf.m | 98 +++++++++++++++--- modules/gui/macosx/misc.m | 6 +- modules/gui/macosx/playlist.h | 6 +- modules/gui/macosx/playlist.m | 81 +-------------- 8 files changed, 109 insertions(+), 115 deletions(-) diff --git a/extras/MacOSX/Resources/English.lproj/MainMenu.nib/classes.nib b/extras/MacOSX/Resources/English.lproj/MainMenu.nib/classes.nib index bffb82d835..2513faeab3 100644 --- a/extras/MacOSX/Resources/English.lproj/MainMenu.nib/classes.nib +++ b/extras/MacOSX/Resources/English.lproj/MainMenu.nib/classes.nib @@ -112,6 +112,7 @@ openWebsite = id; reportABug = id; timesliderUpdate = id; + togglePlaylist = id; viewAbout = id; viewPreferences = id; }; @@ -122,10 +123,10 @@ "o_btn_fullscreen" = id; "o_btn_next" = id; "o_btn_play" = id; + "o_btn_playlist" = id; "o_btn_prev" = id; "o_btn_rewind" = id; "o_btn_stop" = id; - "o_clip_view" = id; "o_controls" = id; "o_dmi_mute" = id; "o_dmi_next" = id; @@ -229,6 +230,7 @@ "o_mu_visual" = id; "o_mu_window" = id; "o_playlist" = id; + "o_playlist_view" = id; "o_scrollfield" = id; "o_timefield" = id; "o_timeslider" = id; @@ -248,12 +250,10 @@ selectAll = id; sortNodeByAuthor = id; sortNodeByName = id; - toggleWindow = id; }; CLASS = VLCPlaylist; LANGUAGE = ObjC; OUTLETS = { - "o_btn_playlist" = id; "o_controller" = id; "o_ctx_menu" = id; "o_loop_popup" = id; @@ -267,6 +267,7 @@ "o_mi_sort_name" = id; "o_mu_services" = id; "o_outline_view" = id; + "o_playlist_view" = id; "o_random_ckb" = id; "o_search_field" = id; "o_status_field" = id; diff --git a/extras/MacOSX/Resources/English.lproj/MainMenu.nib/info.nib b/extras/MacOSX/Resources/English.lproj/MainMenu.nib/info.nib index b4641d6652..8f99c874d6 100644 --- a/extras/MacOSX/Resources/English.lproj/MainMenu.nib/info.nib +++ b/extras/MacOSX/Resources/English.lproj/MainMenu.nib/info.nib @@ -3,13 +3,13 @@ IBDocumentLocation - 16 61 505 517 0 0 800 578 + 78 314 505 517 0 0 1280 938 IBEditorPositions 1617 542 480 104 149 0 0 1024 746 2197 - 195 211 596 367 0 0 1280 938 + 342 573 596 143 0 0 1280 938 29 132 749 419 44 0 0 1280 938 915 @@ -18,12 +18,13 @@ IBFramework Version 364.0 IBLockedObjects + + IBOpenObjects - 2203 - 2208 - 2206 + 2197 + 21 IBSystem Version - 7S215 + 7U16 diff --git a/extras/MacOSX/Resources/English.lproj/MainMenu.nib/objects.nib b/extras/MacOSX/Resources/English.lproj/MainMenu.nib/objects.nib index 5d23ed890a964f20b55bb08b55d91e9864ffbb89..7b7a090abf06a8ba9acffa2d3c709aa6ab7078f6 100644 GIT binary patch literal 33637 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 z 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 diff --git a/modules/gui/macosx/intf.h b/modules/gui/macosx/intf.h index 094be51cd9..d1f552a417 100644 --- a/modules/gui/macosx/intf.h +++ b/modules/gui/macosx/intf.h @@ -1,7 +1,7 @@ /***************************************************************************** * intf.h: MacOS X interface module ***************************************************************************** - * Copyright (C) 2002-2004 VideoLAN + * Copyright (C) 2002-2005 VideoLAN * $Id$ * * Authors: Jon Lech Johansen @@ -87,7 +87,7 @@ struct intf_sys_t BOOL nib_open_loaded; /* reference to the open-nib */ IBOutlet id o_window; /* main window */ - IBOutlet id o_clip_view; /* playlist clipview */ + IBOutlet id o_playlist_view;/* playlist view */ IBOutlet id o_scrollfield; /* info field */ IBOutlet id o_timefield; /* time field */ IBOutlet id o_timeslider; /* time slider */ @@ -102,6 +102,7 @@ struct intf_sys_t IBOutlet id o_btn_ff; /* btn fast forward */ IBOutlet id o_btn_next; /* btn next */ IBOutlet id o_btn_fullscreen;/* btn fullscreen */ + IBOutlet id o_btn_playlist; /* btn playlist */ NSImage * o_img_play; /* btn play img */ NSImage * o_img_pause; /* btn pause img */ @@ -234,9 +235,8 @@ struct intf_sys_t IBOutlet id o_dmi_previous; IBOutlet id o_dmi_mute; - /* stupid outline views .... */ - NSRect rect_remember; - NSView *o_document_view; + bool b_small_window; + } + (VLCMain *)sharedInstance; @@ -283,6 +283,9 @@ struct intf_sys_t - (IBAction)openLicense:(id)sender; - (IBAction)openCrashLog:(id)sender; +- (IBAction)togglePlaylist:(id)sender; +- (void)updateTogglePlaylistState; + - (void)windowDidBecomeKey:(NSNotification *)o_notification; @end diff --git a/modules/gui/macosx/intf.m b/modules/gui/macosx/intf.m index 80680ff95f..f4defeced0 100644 --- a/modules/gui/macosx/intf.m +++ b/modules/gui/macosx/intf.m @@ -1,7 +1,7 @@ /***************************************************************************** * intf.m: MacOS X interface module ***************************************************************************** - * Copyright (C) 2002-2004 VideoLAN + * Copyright (C) 2002-2005 VideoLAN * $Id$ * * Authors: Jon Lech Johansen @@ -378,6 +378,22 @@ static VLCMain *_o_sharedMainInstance = nil; [self setSubmenusEnabled: FALSE]; [self manageVolumeSlider]; [o_window setDelegate: self]; + + if( [o_window frame].size.height <= 200 ) + { + b_small_window = YES; + [o_window setFrame: NSMakeRect( [o_window frame].origin.x, [o_window frame].origin.y, [o_window frame].size.width, 95 ) display: YES animate:YES]; + [o_playlist_view setAutoresizesSubviews: NO]; + } + else + { + b_small_window = NO; + [o_playlist_view setFrame: NSMakeRect( 10, 10, [o_window frame].size.width - 20, [o_window frame].size.height - 105 )]; + [o_playlist_view setNeedsDisplay:YES]; + [o_playlist_view setAutoresizesSubviews: YES]; + [[o_window contentView] addSubview: o_playlist_view]; + } + [self updateTogglePlaylistState]; p_playlist = (playlist_t *) vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); @@ -413,6 +429,7 @@ static VLCMain *_o_sharedMainInstance = nil; [o_btn_fullscreen setToolTip: _NS("Fullscreen")]; [o_volumeslider setToolTip: _NS("Volume")]; [o_timeslider setToolTip: _NS("Position")]; + [o_btn_playlist setToolTip: _NS("Playlist")]; /* messages panel */ [o_msgs_panel setTitle: _NS("Messages")]; @@ -1438,31 +1455,80 @@ static VLCMain *_o_sharedMainInstance = nil; } } +- (IBAction)togglePlaylist:(id)sender +{ + NSRect o_rect = [o_window frame]; + /*First, check if the playlist is visible*/ + if( o_rect.size.height <= 200 ) + { + b_small_window = YES; /* we know we are small, make sure this is actually set (see case below) */ + /* make large */ + o_rect.size.height = 500; + + o_rect.origin.x = [o_window frame].origin.x; + o_rect.origin.y = [o_window frame].origin.y - o_rect.size.height + + [o_window minSize].height; + [o_btn_playlist setState: YES]; + } + else + { + /* make small */ + o_rect.size.height = 95; + o_rect.origin.x = [o_window frame].origin.x; + /* Calculate the position of the lower right corner after resize */ + o_rect.origin.y = [o_window frame].origin.y + + [o_window frame].size.height - [o_window minSize].height; + + [o_playlist_view setAutoresizesSubviews: NO]; + [o_playlist_view removeFromSuperview]; + [o_btn_playlist setState: NO]; + b_small_window = NO; /* we aren't small here just yet. we are doing an animated resize after this */ + } + + [o_window setFrame: o_rect display:YES animate: YES]; +} + +- (void)updateTogglePlaylistState +{ + if( [o_window frame].size.height <= 200 ) + { + [o_btn_playlist setState: NO]; + } + else + { + [o_btn_playlist setState: YES]; + } +} + - (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)proposedFrameSize { + /* Not triggered on a window resize or maxification of the window. only by window mouse dragging resize */ if( proposedFrameSize.height <= 200 ) { - if( [sender frame].size.height > 200 ) + if( b_small_window == NO ) { - //rect_remember = [[o_playlist playlistView] frame]; - o_document_view = [o_clip_view documentView]; - [o_document_view retain]; - [o_clip_view setDocumentView: NULL]; + /* if large and going to small then hide */ + b_small_window = YES; + [o_playlist_view setAutoresizesSubviews: NO]; + [o_playlist_view removeFromSuperview]; } return NSMakeSize( proposedFrameSize.width, 95 ); } - else + return proposedFrameSize; +} + +- (void)windowDidResize:(NSNotification *)notif +{ + if( [o_window frame].size.height > 200 && b_small_window ) { - if( [sender frame].size.height <= 200 ) - { - [o_clip_view setDocumentView: o_document_view]; - [o_document_view release]; - [o_document_view setFrameSize: NSMakeSize( proposedFrameSize.width - 22, proposedFrameSize.height - 120 )]; - //[[o_playlist playlistView] setFrame: rect_remember]; - } - return proposedFrameSize; + /* If large and coming from small then show */ + [o_playlist_view setAutoresizesSubviews: YES]; + [o_playlist_view setFrame: NSMakeRect( 10, 10, [o_window frame].size.width - 20, [o_window frame].size.height - 95 - 10 )]; + [o_playlist_view setNeedsDisplay:YES]; + [[o_window contentView] addSubview: o_playlist_view]; + b_small_window = NO; } - return proposedFrameSize; + [self updateTogglePlaylistState]; } @end diff --git a/modules/gui/macosx/misc.m b/modules/gui/macosx/misc.m index 946495b0e0..f4c2f7181c 100644 --- a/modules/gui/macosx/misc.m +++ b/modules/gui/macosx/misc.m @@ -1,7 +1,7 @@ /***************************************************************************** * misc.m: code not specific to vlc ***************************************************************************** - * Copyright (C) 2003-2004 VideoLAN + * Copyright (C) 2003-2005 VideoLAN * $Id$ * * Authors: Jon Lech Johansen @@ -41,7 +41,7 @@ o_size_with_playlist = [self frame].size; - [[[VLCMain sharedInstance] getPlaylist] updateTogglePlaylistState]; + [[VLCMain sharedInstance] updateTogglePlaylistState]; return( self ); } @@ -59,7 +59,7 @@ o_size_with_playlist = proposedFrameSize; /*Callback to update the state of Playlist Toggle Button*/ - [[[VLCMain sharedInstance] getPlaylist] updateTogglePlaylistState]; + [[VLCMain sharedInstance] updateTogglePlaylistState]; return proposedFrameSize; } diff --git a/modules/gui/macosx/playlist.h b/modules/gui/macosx/playlist.h index 81b325666b..6fee48cf36 100644 --- a/modules/gui/macosx/playlist.h +++ b/modules/gui/macosx/playlist.h @@ -1,7 +1,7 @@ /***************************************************************************** * playlist.h: MacOS X interface module ***************************************************************************** - * Copyright (C) 2002-2004 VideoLAN + * Copyright (C) 2002-2005 VideoLAN * $Id$ * * Authors: Jon Lech Johansen @@ -39,6 +39,7 @@ IBOutlet id o_controller; IBOutlet id o_btn_playlist; + IBOutlet id o_playlist_view; IBOutlet id o_outline_view; IBOutlet id o_tc_name; IBOutlet id o_tc_author; @@ -73,12 +74,11 @@ - (void)initStrings; - (NSMenu *)menuForEvent:(NSEvent *)o_event; -- (NSOutlineView *)playlistView; +- (NSOutlineView *)outlineView; - (IBAction)handlePopUp:(id)sender; - (IBAction)searchItem:(id)sender; -- (void)updateTogglePlaylistState; - (void)playlistUpdated; - (void)sortNode:(int)i_mode; - (void)updateRowSelection; diff --git a/modules/gui/macosx/playlist.m b/modules/gui/macosx/playlist.m index d25fc93b56..4fb380cbc8 100644 --- a/modules/gui/macosx/playlist.m +++ b/modules/gui/macosx/playlist.m @@ -1,7 +1,7 @@ /***************************************************************************** * playlist.m: MacOS X interface module ***************************************************************************** - * Copyright (C) 2002-2004 VideoLAN + * Copyright (C) 2002-2005 VideoLAN * $Id$ * * Authors: Jon Lech Johansen @@ -25,7 +25,6 @@ /* TODO * add 'icons' for different types of nodes? (http://www.cocoadev.com/index.pl?IconAndTextInTableCell) - * create a new 'playlist toggle' that hides the playlist and in effect give you the old controller * create a new search field build with pictures from the 'regular' search field, so it can be emulated on 10.2 * create toggle buttons for the shuffle, repeat one, repeat all functions. * implement drag and drop and item reordering. @@ -51,9 +50,6 @@ #include "osd.h" #include "misc.h" -#define REF_HEIGHT 500 -#define REF_WIDTH 500 - /***************************************************************************** * VLCPlaylistView implementation *****************************************************************************/ @@ -199,75 +195,16 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/ #if 0 [o_search_button setTitle: _NS("Search")]; #endif - [o_btn_playlist setToolTip: _NS("Playlist")]; [[o_loop_popup itemAtIndex:0] setTitle: _NS("Standard Play")]; [[o_loop_popup itemAtIndex:1] setTitle: _NS("Repeat One")]; [[o_loop_popup itemAtIndex:2] setTitle: _NS("Repeat All")]; } -- (NSOutlineView *)playlistView +- (NSOutlineView *)outlineView { return o_outline_view; } -- (IBAction)toggleWindow:(id)sender -{ - NSRect o_rect; - /*First, check if the playlist is visible*/ - if ( [o_controller frame].size.height == [o_controller minSize].height ) - { - /*Check if the stored heigth of the controller is usable (!= minSize)*/ - if ([o_controller getSizeWithPlaylist].height != - [o_controller minSize].height) - { - o_rect.size.height = [o_controller getSizeWithPlaylist].height; - } - else - { - /*If the stored height is not usable, use a reference one*/ - o_rect.size.height = REF_HEIGHT; - } - - /*Check if the controller width is the minimum one*/ - if ( [o_controller frame].size.width == [o_controller minSize].width) - { - /*If the controller width is minimum, check if the stored height - of the playlist makes it visible*/ - if ([o_controller getSizeWithPlaylist].height != - [o_controller minSize].height) - { - o_rect.size.width = [o_controller getSizeWithPlaylist].width; - } - else - { - /*If not, use a reference width*/ - o_rect.size.width = REF_WIDTH; - } - } - else - { - o_rect.size.width = [o_controller frame].size.width; - } - o_rect.origin.x = [o_controller frame].origin.x; - o_rect.origin.y = [o_controller frame].origin.y - o_rect.size.height + - [o_controller minSize].height; - - [o_btn_playlist setState: YES]; - } - else - { - o_rect.size = [o_controller minSize]; - o_rect.origin.x = [o_controller frame].origin.x; - /*Calculate the position of the lower right corner after resize*/ - o_rect.origin.y = [o_controller frame].origin.y + - [o_controller frame].size.height - [o_controller minSize].height; - - [o_btn_playlist setState: NO]; - } - - [o_controller setFrame: o_rect display:YES animate: YES]; -} - - (void)playlistUpdated { unsigned int i; @@ -286,20 +223,6 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/ [o_outline_view reloadData]; } - -- (void)updateTogglePlaylistState -{ - if( [o_controller getSizeWithPlaylist].height == - [o_controller minSize].height ) - { - [o_btn_playlist setState: NO]; - } - else - { - [o_btn_playlist setState: YES]; - } -} - - (void)updateRowSelection { int i,i_row; -- 2.39.5