+- (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 */
+ if ( o_size_with_playlist.height > 200 )
+ {
+ o_rect.size.height = o_size_with_playlist.height;
+ } else {
+ o_rect.size.height = 500;
+ }
+
+ if ( o_size_with_playlist.width > [o_window minSize].width )
+ {
+ o_rect.size.width = o_size_with_playlist.width;
+ } else {
+ o_rect.size.width = 500;
+ }
+
+ o_rect.size.height = (o_size_with_playlist.height > 200) ?
+ o_size_with_playlist.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 = [o_window minSize].height;
+ o_rect.size.width = [o_window minSize].width;
+ 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 */
+
+ /*Stores the size the controller one resize, to be able to restore it when
+ toggling the playlist*/
+ o_size_with_playlist = proposedFrameSize;
+
+ if( proposedFrameSize.height <= 200 )
+ {
+ if( b_small_window == NO )
+ {
+ /* 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, [o_window minSize].height);
+ }
+ return proposedFrameSize;
+}
+
+- (void)windowDidResize:(NSNotification *)notif
+{
+ if( [o_window frame].size.height > 200 && b_small_window )
+ {
+ /* 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 - [o_window minSize].height - 10 )];
+ [o_playlist_view setNeedsDisplay:YES];
+ [[o_window contentView] addSubview: o_playlist_view];
+ b_small_window = NO;
+ }
+ [self updateTogglePlaylistState];
+}
+