macosx: decouple !video-deco from detached video window and allow changing this setti...
[vlc.git] / modules / gui / macosx / MainWindow.h
1 /*****************************************************************************
2  * MainWindow.h: MacOS X interface module
3  *****************************************************************************
4  * Copyright (C) 2002-2012 VLC authors and VideoLAN
5  * $Id$
6  *
7  * Authors: Felix Paul K├╝hne <fkuehne -at- videolan -dot- org>
8  *          Jon Lech Johansen <jon-vl@nanocrew.net>
9  *          Christophe Massiot <massiot@via.ecp.fr>
10  *          Derk-Jan Hartman <hartman at videolan.org>
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License as published by
14  * the Free Software Foundation; either version 2 of the License, or
15  * (at your option) any later version.
16  *
17  * This program is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License
23  * along with this program; if not, write to the Free Software
24  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
25  *****************************************************************************/
26
27 #import <Cocoa/Cocoa.h>
28 #import "CompatibilityFixes.h"
29 #import "PXSourceList.h"
30 #import "PXSourceListDataSource.h"
31 #import <vlc_input.h>
32 #import "misc.h"
33 #import "fspanel.h"
34 #import "MainWindowTitle.h"
35
36 @interface VLCMainWindow : NSWindow <PXSourceListDataSource, PXSourceListDelegate, NSWindowDelegate, NSAnimationDelegate, NSSplitViewDelegate> {
37     IBOutlet id o_play_btn;
38     IBOutlet id o_bwd_btn;
39     IBOutlet id o_fwd_btn;
40     IBOutlet id o_stop_btn;
41     IBOutlet id o_playlist_btn;
42     IBOutlet id o_repeat_btn;
43     IBOutlet id o_shuffle_btn;
44     IBOutlet id o_effects_btn;
45     IBOutlet id o_fullscreen_btn;
46     IBOutlet id o_search_fld;
47     IBOutlet id o_topbar_view;
48     IBOutlet id o_volume_sld;
49     IBOutlet id o_volume_track_view;
50     IBOutlet id o_volume_down_btn;
51     IBOutlet id o_volume_up_btn;
52     IBOutlet id o_time_sld;
53     IBOutlet id o_time_sld_fancygradient_view;
54     IBOutlet id o_time_fld;
55     IBOutlet id o_progress_bar;
56     IBOutlet id o_bottombar_view;
57     IBOutlet id o_time_sld_background;
58     IBOutlet id o_playlist_table;
59     IBOutlet id o_video_view;
60     IBOutlet id o_split_view;
61     IBOutlet id o_left_split_view;
62     IBOutlet id o_right_split_view;
63     IBOutlet id o_sidebar_view;
64     IBOutlet id o_sidebar_scrollview;
65     IBOutlet id o_chosen_category_lbl;
66
67     IBOutlet id o_dropzone_view;
68     IBOutlet id o_dropzone_btn;
69     IBOutlet id o_dropzone_lbl;
70     IBOutlet id o_dropzone_box;
71
72     IBOutlet VLCFSPanel *o_fspanel;
73     IBOutlet id o_titlebar_view;
74     IBOutlet id o_resize_view;
75     IBOutlet id o_detached_resize_view;
76
77     IBOutlet id o_detached_play_btn;
78     IBOutlet id o_detached_fwd_btn;
79     IBOutlet id o_detached_bwd_btn;
80     IBOutlet id o_detached_fullscreen_btn;
81     IBOutlet id o_detached_time_fld;
82     IBOutlet id o_detached_time_sld;
83     IBOutlet id o_detached_time_sld_background;
84     IBOutlet id o_detached_progress_bar;
85     IBOutlet id o_detached_time_sld_fancygradient_view;
86     IBOutlet id o_detached_bottombar_view;
87     IBOutlet id o_detached_titlebar_view;
88     IBOutlet id o_detached_video_window;
89
90     IBOutlet id o_podcast_view;
91     IBOutlet id o_podcast_add_btn;
92     IBOutlet id o_podcast_remove_btn;
93     IBOutlet id o_podcast_subscribe_window;
94     IBOutlet id o_podcast_subscribe_title_lbl;
95     IBOutlet id o_podcast_subscribe_subtitle_lbl;
96     IBOutlet id o_podcast_subscribe_url_fld;
97     IBOutlet id o_podcast_subscribe_cancel_btn;
98     IBOutlet id o_podcast_subscribe_ok_btn;
99     IBOutlet id o_podcast_unsubscribe_window;
100     IBOutlet id o_podcast_unsubscribe_title_lbl;
101     IBOutlet id o_podcast_unsubscribe_subtitle_lbl;
102     IBOutlet id o_podcast_unsubscribe_pop;
103     IBOutlet id o_podcast_unsubscribe_ok_btn;
104     IBOutlet id o_podcast_unsubscribe_cancel_btn;
105
106     BOOL b_dark_interface;
107     BOOL b_nativeFullscreenMode;
108     BOOL b_video_playback_enabled;
109     BOOL b_dropzone_active;
110     BOOL b_splitview_removed;
111     BOOL b_minimized_view;
112     BOOL b_show_jump_buttons;
113     BOOL b_show_playmode_buttons;
114     int i_lastSplitViewHeight;
115     input_state_e cachedInputState;
116
117     NSImage * o_pause_img;
118     NSImage * o_pause_pressed_img;
119     NSImage * o_play_img;
120     NSImage * o_play_pressed_img;
121     NSImage * o_repeat_img;
122     NSImage * o_repeat_pressed_img;
123     NSImage * o_repeat_all_img;
124     NSImage * o_repeat_all_pressed_img;
125     NSImage * o_repeat_one_img;
126     NSImage * o_repeat_one_pressed_img;
127     NSImage * o_shuffle_img;
128     NSImage * o_shuffle_pressed_img;
129     NSImage * o_shuffle_on_img;
130     NSImage * o_shuffle_on_pressed_img;
131
132     NSTimeInterval last_fwd_event;
133     NSTimeInterval last_bwd_event;
134     BOOL just_triggered_next;
135     BOOL just_triggered_previous;
136     NSButton * o_prev_btn;
137     NSButton * o_next_btn;
138
139     NSMutableArray *o_sidebaritems;
140
141     BOOL              b_nonembedded;
142     BOOL              b_podcastView_displayed;
143
144     VLCWindow       * o_fullscreen_window;
145     NSViewAnimation * o_fullscreen_anim1;
146     NSViewAnimation * o_fullscreen_anim2;
147     NSViewAnimation * o_makekey_anim;
148     NSView          * o_temp_view;
149     /* set to yes if we are fullscreen and all animations are over */
150     BOOL              b_fullscreen;
151     BOOL              b_window_is_invisible;
152     NSRecursiveLock * o_animation_lock;
153     NSSize nativeVideoSize;
154
155     NSTimer *t_hide_mouse_timer;
156
157     VLCColorView * o_color_backdrop;
158     NSInteger i_originalLevel;
159     NSRect previousSavedFrame;
160
161     VLCWindow *o_extra_video_window;
162     id o_current_video_window;
163
164     NSRect frameBeforePlayback;
165 }
166 + (VLCMainWindow *)sharedInstance;
167 @property (readonly) BOOL fullscreen;
168
169 - (IBAction)play:(id)sender;
170 - (IBAction)prev:(id)sender;
171 - (IBAction)backward:(id)sender;
172 - (IBAction)bwd:(id)sender;
173 - (IBAction)next:(id)sender;
174 - (IBAction)forward:(id)sender;
175 - (IBAction)fwd:(id)sender;
176 - (IBAction)stop:(id)sender;
177 - (IBAction)togglePlaylist:(id)sender;
178 - (IBAction)repeat:(id)sender;
179 - (IBAction)shuffle:(id)sender;
180 - (IBAction)timeSliderAction:(id)sender;
181 - (IBAction)volumeAction:(id)sender;
182 - (IBAction)effects:(id)sender;
183 - (IBAction)fullscreen:(id)sender;
184 - (IBAction)dropzoneButtonAction:(id)sender;
185
186 - (IBAction)addPodcast:(id)sender;
187 - (IBAction)addPodcastWindowAction:(id)sender;
188 - (IBAction)removePodcast:(id)sender;
189 - (IBAction)removePodcastWindowAction:(id)sender;
190
191 - (void)setTitle:(NSString *)title;
192 - (void)customZoom:(id)sender;
193 - (void)windowResizedOrMoved:(NSNotification *)notification;
194
195 - (void)showDropZone;
196 - (void)hideDropZone;
197 - (void)showSplitView;
198 - (void)hideSplitView;
199 - (void)updateTimeSlider;
200 - (void)updateVolumeSlider;
201 - (void)updateWindow;
202 - (void)updateName;
203 - (void)setPause;
204 - (void)setPlay;
205 - (void)setRepeatOne;
206 - (void)setRepeatAll;
207 - (void)setRepeatOff;
208 - (void)setShuffle;
209 - (void)toggleJumpButtons;
210 - (void)togglePlaymodeButtons;
211
212 - (void)drawFancyGradientEffectForTimeSlider;
213
214 - (id)videoView;
215 - (void)setupVideoView;
216 - (void)setVideoplayEnabled;
217 - (void)resizeWindow;
218 - (void)setNativeVideoSize:(NSSize)size;
219
220 - (void)hideMouseCursor:(NSTimer *)timer;
221 - (void)recreateHideMouseTimer;
222
223 /* fullscreen handling */
224 - (void)showFullscreenController;
225 - (void)lockFullscreenAnimation;
226 - (void)unlockFullscreenAnimation;
227 - (void)enterFullscreen;
228 - (void)leaveFullscreen;
229 - (void)leaveFullscreenAndFadeOut: (BOOL)fadeout;
230 - (void)hasEndedFullscreen;
231 - (void)hasBecomeFullscreen;
232
233 /* lion's native fullscreen handling */
234 - (void)windowWillEnterFullScreen:(NSNotification *)notification;
235 - (void)windowDidEnterFullScreen:(NSNotification *)notification;
236 - (void)windowWillExitFullScreen:(NSNotification *)notification;
237
238 - (id)detachedTitlebarView;
239 @end
240
241 @interface VLCDetachedVideoWindow : NSWindow
242 {
243     BOOL b_dark_interface;
244     NSRect previousSavedFrame;
245 }
246
247 - (void)customZoom:(id)sender;
248
249 @end