macosx: prepared fullscreen support and clean-up
[vlc.git] / modules / gui / macosx / MainMenu.h
1 /*****************************************************************************
2  * MainMenu.h: MacOS X interface module
3  *****************************************************************************
4  * Copyright (C) 2011 Felix Paul Kühne
5  * $Id$
6  *
7  * Authors: Felix Paul Kühne <fkuehne -at- videolan -dot- org>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22  *****************************************************************************/
23
24 #import <Cocoa/Cocoa.h>
25 #import <vlc_common.h>
26 #import <vlc_interface.h>
27
28 @interface VLCMainMenu : NSObject
29 {
30     intf_thread_t *p_intf;
31     BOOL b_mainMenu_setup;
32     BOOL b_nib_about_loaded;
33     BOOL b_nib_videoeffects_loaded;
34     BOOL b_nib_audioeffects_loaded;
35     BOOL b_nib_tracksynchro_loaded;
36     BOOL b_nib_bookmarks_loaded;
37
38     id o_about;                 /* VLAboutBox     */
39     id o_videoeffects;          /* VLCVideoEffects */
40     id o_audioeffects;          /* VLCAudioEffects */
41     id o_trackSynchronization;  /* VLCTrackSynchronization */
42     id o_bookmarks;             /* VLCBookmarks */
43
44     /* main menu */
45
46     IBOutlet NSMenuItem * o_mi_about;
47     IBOutlet NSMenuItem * o_mi_prefs;
48     IBOutlet NSMenuItem * o_mi_checkForUpdate;
49     IBOutlet NSMenuItem * o_mi_add_intf;
50     IBOutlet NSMenu * o_mu_add_intf;
51     IBOutlet NSMenuItem * o_mi_services;
52     IBOutlet NSMenuItem * o_mi_hide;
53     IBOutlet NSMenuItem * o_mi_hide_others;
54     IBOutlet NSMenuItem * o_mi_show_all;
55     IBOutlet NSMenuItem * o_mi_quit;
56
57     IBOutlet NSMenu * o_mu_file;
58     IBOutlet NSMenuItem * o_mi_open_file;
59     IBOutlet NSMenuItem * o_mi_open_generic;
60     IBOutlet NSMenuItem * o_mi_open_disc;
61     IBOutlet NSMenuItem * o_mi_open_net;
62     IBOutlet NSMenuItem * o_mi_open_capture;
63     IBOutlet NSMenuItem * o_mi_open_recent;
64     IBOutlet NSMenuItem * o_mi_open_recent_cm;
65     IBOutlet NSMenuItem * o_mi_open_wizard;
66
67     IBOutlet NSMenu * o_mu_edit;
68     IBOutlet NSMenuItem * o_mi_cut;
69     IBOutlet NSMenuItem * o_mi_copy;
70     IBOutlet NSMenuItem * o_mi_paste;
71     IBOutlet NSMenuItem * o_mi_clear;
72     IBOutlet NSMenuItem * o_mi_select_all;
73
74     IBOutlet NSMenu * o_mu_controls;
75     IBOutlet NSMenuItem * o_mi_play;
76     IBOutlet NSMenuItem * o_mi_stop;
77     IBOutlet NSMenuItem * o_mi_rate;
78     IBOutlet NSView * o_mi_rate_view;
79     IBOutlet id o_mi_rate_lbl;
80     IBOutlet id o_mi_rate_lbl_gray;
81     IBOutlet id o_mi_rate_slower_lbl;
82     IBOutlet id o_mi_rate_normal_lbl;
83     IBOutlet id o_mi_rate_faster_lbl;
84     IBOutlet id o_mi_rate_sld;
85     IBOutlet id o_mi_rate_fld;
86     IBOutlet NSMenuItem * o_mi_trackSynchronization;
87     IBOutlet NSMenuItem * o_mi_previous;
88     IBOutlet NSMenuItem * o_mi_next;
89     IBOutlet NSMenuItem * o_mi_random;
90     IBOutlet NSMenuItem * o_mi_repeat;
91     IBOutlet NSMenuItem * o_mi_loop;
92     IBOutlet NSMenuItem * o_mi_quitAfterPB;
93     IBOutlet NSMenuItem * o_mi_fwd;
94     IBOutlet NSMenuItem * o_mi_bwd;
95     IBOutlet NSMenuItem * o_mi_program;
96     IBOutlet NSMenu * o_mu_program;
97     IBOutlet NSMenuItem * o_mi_title;
98     IBOutlet NSMenu * o_mu_title;
99     IBOutlet NSMenuItem * o_mi_chapter;
100     IBOutlet NSMenu * o_mu_chapter;
101
102     IBOutlet NSMenu * o_mu_audio;
103     IBOutlet NSMenuItem * o_mi_vol_up;
104     IBOutlet NSMenuItem * o_mi_vol_down;
105     IBOutlet NSMenuItem * o_mi_mute;
106     IBOutlet NSMenuItem * o_mi_audiotrack;
107     IBOutlet NSMenu * o_mu_audiotrack;
108     IBOutlet NSMenuItem * o_mi_channels;
109     IBOutlet NSMenu * o_mu_channels;
110     IBOutlet NSMenuItem * o_mi_device;
111     IBOutlet NSMenu * o_mu_device;
112     IBOutlet NSMenuItem * o_mi_visual;
113     IBOutlet NSMenu * o_mu_visual;
114
115     IBOutlet NSMenu * o_mu_video;
116     IBOutlet NSMenuItem * o_mi_half_window;
117     IBOutlet NSMenuItem * o_mi_normal_window;
118     IBOutlet NSMenuItem * o_mi_double_window;
119     IBOutlet NSMenuItem * o_mi_fittoscreen;
120     IBOutlet NSMenuItem * o_mi_fullscreen;
121     IBOutlet NSMenuItem * o_mi_floatontop;
122     IBOutlet NSMenuItem * o_mi_snapshot;
123     IBOutlet NSMenuItem * o_mi_videotrack;
124     IBOutlet NSMenu * o_mu_videotrack;
125     IBOutlet NSMenuItem * o_mi_screen;
126     IBOutlet NSMenu * o_mu_screen;
127     IBOutlet NSMenuItem * o_mi_aspect_ratio;
128     IBOutlet NSMenu * o_mu_aspect_ratio;
129     IBOutlet NSMenuItem * o_mi_crop;
130     IBOutlet NSMenu * o_mu_crop;
131     IBOutlet NSMenuItem * o_mi_subtitle;
132     IBOutlet NSMenu * o_mu_subtitle;
133     IBOutlet NSMenuItem * o_mi_addSub;
134     IBOutlet NSMenuItem * o_mi_deinterlace;
135     IBOutlet NSMenu * o_mu_deinterlace;
136     IBOutlet NSMenuItem * o_mi_deinterlace_mode;
137     IBOutlet NSMenu * o_mu_deinterlace_mode;
138     IBOutlet NSMenuItem * o_mi_ffmpeg_pp;
139     IBOutlet NSMenu * o_mu_ffmpeg_pp;
140     IBOutlet NSMenuItem * o_mi_teletext;
141     IBOutlet NSMenuItem * o_mi_teletext_transparent;
142     IBOutlet NSMenuItem * o_mi_teletext_index;
143     IBOutlet NSMenuItem * o_mi_teletext_red;
144     IBOutlet NSMenuItem * o_mi_teletext_green;
145     IBOutlet NSMenuItem * o_mi_teletext_yellow;
146     IBOutlet NSMenuItem * o_mi_teletext_blue;
147
148     IBOutlet NSMenu * o_mu_window;
149     IBOutlet NSMenuItem * o_mi_minimize;
150     IBOutlet NSMenuItem * o_mi_close_window;
151     IBOutlet NSMenuItem * o_mi_player;
152     IBOutlet NSMenuItem * o_mi_controller;
153     IBOutlet NSMenuItem * o_mi_audioeffects;
154     IBOutlet NSMenuItem * o_mi_videoeffects;
155     IBOutlet NSMenuItem * o_mi_bookmarks;
156     IBOutlet NSMenuItem * o_mi_playlist;
157     IBOutlet NSMenuItem * o_mi_info;
158     IBOutlet NSMenuItem * o_mi_messages;
159     IBOutlet NSMenuItem * o_mi_bring_atf;
160
161     IBOutlet NSMenu * o_mu_help;
162     IBOutlet NSMenuItem * o_mi_help;
163     IBOutlet NSMenuItem * o_mi_readme;
164     IBOutlet NSMenuItem * o_mi_documentation;
165     IBOutlet NSMenuItem * o_mi_license;
166     IBOutlet NSMenuItem * o_mi_website;
167     IBOutlet NSMenuItem * o_mi_donation;
168     IBOutlet NSMenuItem * o_mi_forum;
169     IBOutlet NSMenuItem * o_mi_errorsAndWarnings;
170
171     /* dock menu */
172     IBOutlet NSMenuItem * o_dmi_play;
173     IBOutlet NSMenuItem * o_dmi_stop;
174     IBOutlet NSMenuItem * o_dmi_next;
175     IBOutlet NSMenuItem * o_dmi_previous;
176     IBOutlet NSMenuItem * o_dmi_mute;
177
178     /* vout menu */
179     IBOutlet NSMenu * o_vout_menu;
180     IBOutlet NSMenuItem * o_vmi_play;
181     IBOutlet NSMenuItem * o_vmi_stop;
182     IBOutlet NSMenuItem * o_vmi_prev;
183     IBOutlet NSMenuItem * o_vmi_next;
184     IBOutlet NSMenuItem * o_vmi_volup;
185     IBOutlet NSMenuItem * o_vmi_voldown;
186     IBOutlet NSMenuItem * o_vmi_mute;
187     IBOutlet NSMenuItem * o_vmi_fullscreen;
188     IBOutlet NSMenuItem * o_vmi_snapshot;
189 }
190 + (VLCMainMenu *)sharedInstance;
191
192 - (void)initStrings;
193 - (void)releaseRepresentedObjects:(NSMenu *)the_menu;
194
195 - (void)setupMenus;
196 - (void)refreshVoutDeviceMenu:(NSNotification *)o_notification;
197 - (void)setSubmenusEnabled:(BOOL)b_enabled;
198 - (void)setRateControlsEnabled:(BOOL)b_enabled;
199
200 - (IBAction)clearRecentItems:(id)sender;
201 - (void)openRecentItem:(id)item;
202
203 - (IBAction)intfOpenFile:(id)sender;
204 - (IBAction)intfOpenFileGeneric:(id)sender;
205 - (IBAction)intfOpenDisc:(id)sender;
206 - (IBAction)intfOpenNet:(id)sender;
207 - (IBAction)intfOpenCapture:(id)sender;
208
209 - (IBAction)setPlaybackRate:(id)sender;
210 - (void)updatePlaybackRate;
211
212 - (IBAction)toggleFullscreen:(id)sender;
213 - (IBAction)resizeVideoWindow:(id)sender;
214 - (IBAction)floatOnTop:(id)sender;
215 - (IBAction)createVideoSnapshot:(id)sender;
216
217 - (IBAction)showWizard:(id)sender;
218 - (IBAction)showVideoEffects:(id)sender;
219 - (IBAction)showAudioEffects:(id)sender;
220 - (IBAction)showTrackSynchronization:(id)sender;
221 - (IBAction)showBookmarks:(id)sender;
222 - (IBAction)showInformationPanel:(id)sender;
223
224 - (IBAction)viewAbout:(id)sender;
225 - (IBAction)showLicense:(id)sender;
226 - (IBAction)viewPreferences:(id)sender;
227 - (IBAction)viewHelp:(id)sender;
228 - (IBAction)openReadMe:(id)sender;
229 - (IBAction)openDocumentation:(id)sender;
230 - (IBAction)openWebsite:(id)sender;
231 - (IBAction)openForum:(id)sender;
232 - (IBAction)openDonate:(id)sender;
233 - (IBAction)viewErrorsAndWarnings:(id)sender;
234
235 - (void)setPlay;
236 - (void)setPause;
237 - (void)setRepeatOne;
238 - (void)setRepeatAll;
239 - (void)setRepeatOff;
240 - (void)setShuffle;
241
242 - (IBAction)toggleVar:(id)sender;
243 - (int)toggleVarThread:(id)_o_data;
244 - (void)setupVarMenuItem:(NSMenuItem *)o_mi
245                   target:(vlc_object_t *)p_object
246                      var:(const char *)psz_variable
247                 selector:(SEL)pf_callback;
248 - (void)setupVarMenu:(NSMenu *)o_menu
249          forMenuItem: (NSMenuItem *)o_parent
250               target:(vlc_object_t *)p_object
251                  var:(const char *)psz_variable
252             selector:(SEL)pf_callback;
253
254 @end
255
256 /*****************************************************************************
257  * VLCAutoGeneratedMenuContent interface
258  *****************************************************************************
259  * This holds our data for autogenerated menus
260  *****************************************************************************/
261 @interface VLCAutoGeneratedMenuContent : NSObject
262 {
263     char *psz_name;
264     vlc_object_t * _vlc_object;
265     vlc_value_t value;
266     int i_type;
267 }
268
269 - (id)initWithVariableName: (const char *)name
270                   ofObject: (vlc_object_t *)object
271                   andValue: (vlc_value_t)value
272                     ofType: (int)type;
273 - (const char *)name;
274 - (vlc_value_t)value;
275 - (vlc_object_t *)vlcObject;
276 - (int)type;
277
278 @end
279