macosx: robustify playlist table columns initialization
[vlc.git] / modules / gui / macosx / MainMenu.h
1 /*****************************************************************************
2  * MainMenu.h: MacOS X interface module
3  *****************************************************************************
4  * Copyright (C) 2011-2013 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     BOOL b_nib_convertandsave_loaded;
38     BOOL b_nib_addonmanager_loaded;
39
40     id o_about;                 /* VLAboutBox     */
41     id o_videoeffects;          /* VLCVideoEffects */
42     id o_audioeffects;          /* VLCAudioEffects */
43     id o_trackSynchronization;  /* VLCTrackSynchronization */
44     id o_bookmarks;             /* VLCBookmarks */
45     id o_convertandsave;        /* VLCConvertAndSave */
46     id o_addonManager;          /* VLCAddonManager */
47
48     id o_extMgr;                /* Extensions Manager */
49
50     /* main menu */
51
52     IBOutlet NSMenuItem * o_mi_about;
53     IBOutlet NSMenuItem * o_mi_prefs;
54     IBOutlet NSMenuItem * o_mi_checkForUpdate;
55     IBOutlet NSMenuItem * o_mi_extensions;
56     IBOutlet NSMenu * o_mu_extensions;
57     IBOutlet NSMenuItem * o_mi_addonManager;
58     IBOutlet NSMenuItem * o_mi_add_intf;
59     IBOutlet NSMenu * o_mu_add_intf;
60     IBOutlet NSMenuItem * o_mi_services;
61     IBOutlet NSMenuItem * o_mi_hide;
62     IBOutlet NSMenuItem * o_mi_hide_others;
63     IBOutlet NSMenuItem * o_mi_show_all;
64     IBOutlet NSMenuItem * o_mi_quit;
65
66     IBOutlet NSMenu * o_mu_file;
67     IBOutlet NSMenuItem * o_mi_open_file;
68     IBOutlet NSMenuItem * o_mi_open_generic;
69     IBOutlet NSMenuItem * o_mi_open_disc;
70     IBOutlet NSMenuItem * o_mi_open_net;
71     IBOutlet NSMenuItem * o_mi_open_capture;
72     IBOutlet NSMenuItem * o_mi_open_recent;
73     IBOutlet NSMenuItem * o_mi_close_window;
74     IBOutlet NSMenuItem * o_mi_open_wizard;
75     IBOutlet NSMenuItem * o_mi_convertandsave;
76     IBOutlet NSMenuItem * o_mi_save_playlist;
77
78     IBOutlet NSMenu * o_mu_edit;
79     IBOutlet NSMenuItem * o_mi_cut;
80     IBOutlet NSMenuItem * o_mi_copy;
81     IBOutlet NSMenuItem * o_mi_paste;
82     IBOutlet NSMenuItem * o_mi_clear;
83     IBOutlet NSMenuItem * o_mi_select_all;
84
85     IBOutlet NSMenu * o_mu_view;
86     IBOutlet NSMenuItem * o_mi_toggleJumpButtons;
87     IBOutlet NSMenuItem * o_mi_togglePlaymodeButtons;
88     IBOutlet NSMenuItem * o_mi_toggleEffectsButton;
89     IBOutlet NSMenuItem * o_mi_toggleSidebar;
90     IBOutlet NSMenu * o_mu_playlistTableColumns;
91     IBOutlet NSMenuItem * o_mi_playlistTableColumns;
92     NSMenu * o_mu_playlistTableColumnsContextMenu;
93
94     IBOutlet NSMenu * o_mu_controls;
95     IBOutlet NSMenuItem * o_mi_play;
96     IBOutlet NSMenuItem * o_mi_stop;
97     IBOutlet NSMenuItem * o_mi_record;
98     IBOutlet NSMenuItem * o_mi_rate;
99     IBOutlet NSView * o_mi_rate_view;
100     IBOutlet id o_mi_rate_lbl;
101     IBOutlet id o_mi_rate_lbl_gray;
102     IBOutlet id o_mi_rate_slower_lbl;
103     IBOutlet id o_mi_rate_normal_lbl;
104     IBOutlet id o_mi_rate_faster_lbl;
105     IBOutlet id o_mi_rate_sld;
106     IBOutlet id o_mi_rate_fld;
107     IBOutlet NSMenuItem * o_mi_trackSynchronization;
108     IBOutlet NSMenuItem * o_mi_previous;
109     IBOutlet NSMenuItem * o_mi_next;
110     IBOutlet NSMenuItem * o_mi_random;
111     IBOutlet NSMenuItem * o_mi_repeat;
112     IBOutlet NSMenuItem * o_mi_loop;
113     IBOutlet NSMenuItem * o_mi_AtoBloop;
114     IBOutlet NSMenuItem * o_mi_quitAfterPB;
115     IBOutlet NSMenuItem * o_mi_fwd;
116     IBOutlet NSMenuItem * o_mi_bwd;
117     IBOutlet NSMenuItem * o_mi_program;
118     IBOutlet NSMenu * o_mu_program;
119     IBOutlet NSMenuItem * o_mi_title;
120     IBOutlet NSMenu * o_mu_title;
121     IBOutlet NSMenuItem * o_mi_chapter;
122     IBOutlet NSMenu * o_mu_chapter;
123
124     IBOutlet NSMenu * o_mu_audio;
125     IBOutlet NSMenuItem * o_mi_vol_up;
126     IBOutlet NSMenuItem * o_mi_vol_down;
127     IBOutlet NSMenuItem * o_mi_mute;
128     IBOutlet NSMenuItem * o_mi_audiotrack;
129     IBOutlet NSMenu * o_mu_audiotrack;
130     IBOutlet NSMenuItem * o_mi_channels;
131     IBOutlet NSMenu * o_mu_channels;
132     IBOutlet NSMenuItem * o_mi_device;
133     IBOutlet NSMenu * o_mu_device;
134     IBOutlet NSMenuItem * o_mi_visual;
135     IBOutlet NSMenu * o_mu_visual;
136
137     IBOutlet NSMenu * o_mu_video;
138     IBOutlet NSMenuItem * o_mi_half_window;
139     IBOutlet NSMenuItem * o_mi_normal_window;
140     IBOutlet NSMenuItem * o_mi_double_window;
141     IBOutlet NSMenuItem * o_mi_fittoscreen;
142     IBOutlet NSMenuItem * o_mi_fullscreen;
143     IBOutlet NSMenuItem * o_mi_floatontop;
144     IBOutlet NSMenuItem * o_mi_snapshot;
145     IBOutlet NSMenuItem * o_mi_videotrack;
146     IBOutlet NSMenu * o_mu_videotrack;
147     IBOutlet NSMenuItem * o_mi_screen;
148     IBOutlet NSMenu * o_mu_screen;
149     IBOutlet NSMenuItem * o_mi_aspect_ratio;
150     IBOutlet NSMenu * o_mu_aspect_ratio;
151     IBOutlet NSMenuItem * o_mi_crop;
152     IBOutlet NSMenu * o_mu_crop;
153     IBOutlet NSMenuItem * o_mi_deinterlace;
154     IBOutlet NSMenu * o_mu_deinterlace;
155     IBOutlet NSMenuItem * o_mi_deinterlace_mode;
156     IBOutlet NSMenu * o_mu_deinterlace_mode;
157     IBOutlet NSMenuItem * o_mi_ffmpeg_pp;
158     IBOutlet NSMenu * o_mu_ffmpeg_pp;
159
160     IBOutlet NSMenu * o_mu_subtitles;
161     IBOutlet NSMenuItem * o_mi_subtitle_track;
162     IBOutlet NSMenu * o_mu_subtitle_tracks;
163     IBOutlet NSMenuItem * o_mi_openSubtitleFile;
164     IBOutlet NSMenu * o_mu_subtitle_size;
165     IBOutlet NSMenuItem *o_mi_subtitle_size;
166     IBOutlet NSMenu * o_mu_subtitle_textcolor;
167     IBOutlet NSMenuItem *o_mi_subtitle_textcolor;
168     IBOutlet NSMenu * o_mu_subtitle_bgcolor;
169     IBOutlet NSMenuItem * o_mi_subtitle_bgcolor;
170     IBOutlet NSMenuItem * o_mi_subtitle_bgopacity;
171     IBOutlet NSView * o_mi_subtitle_bgopacity_view;
172     IBOutlet id o_mi_subtitle_bgopacity_lbl;
173     IBOutlet id o_mi_subtitle_bgopacity_lbl_gray;
174     IBOutlet id o_mi_subtitle_bgopacity_sld;
175     IBOutlet NSMenu * o_mu_subtitle_outlinethickness;
176     IBOutlet NSMenuItem * o_mi_subtitle_outlinethickness;
177     IBOutlet NSMenuItem * o_mi_teletext;
178     IBOutlet NSMenuItem * o_mi_teletext_transparent;
179     IBOutlet NSMenuItem * o_mi_teletext_index;
180     IBOutlet NSMenuItem * o_mi_teletext_red;
181     IBOutlet NSMenuItem * o_mi_teletext_green;
182     IBOutlet NSMenuItem * o_mi_teletext_yellow;
183     IBOutlet NSMenuItem * o_mi_teletext_blue;
184
185     IBOutlet NSMenu * o_mu_window;
186     IBOutlet NSMenuItem * o_mi_minimize;
187     IBOutlet NSMenuItem * o_mi_zoom_window;
188     IBOutlet NSMenuItem * o_mi_player;
189     IBOutlet NSMenuItem * o_mi_controller;
190     IBOutlet NSMenuItem * o_mi_audioeffects;
191     IBOutlet NSMenuItem * o_mi_videoeffects;
192     IBOutlet NSMenuItem * o_mi_bookmarks;
193     IBOutlet NSMenuItem * o_mi_playlist;
194     IBOutlet NSMenuItem * o_mi_info;
195     IBOutlet NSMenuItem * o_mi_messages;
196     IBOutlet NSMenuItem * o_mi_bring_atf;
197
198     IBOutlet NSMenu * o_mu_help;
199     IBOutlet NSMenuItem * o_mi_help;
200     IBOutlet NSMenuItem * o_mi_readme;
201     IBOutlet NSMenuItem * o_mi_documentation;
202     IBOutlet NSMenuItem * o_mi_license;
203     IBOutlet NSMenuItem * o_mi_website;
204     IBOutlet NSMenuItem * o_mi_donation;
205     IBOutlet NSMenuItem * o_mi_forum;
206     IBOutlet NSMenuItem * o_mi_errorsAndWarnings;
207
208     /* dock menu */
209     IBOutlet NSMenuItem * o_dmi_play;
210     IBOutlet NSMenuItem * o_dmi_stop;
211     IBOutlet NSMenuItem * o_dmi_next;
212     IBOutlet NSMenuItem * o_dmi_previous;
213     IBOutlet NSMenuItem * o_dmi_mute;
214
215     /* vout menu */
216     IBOutlet NSMenu * o_vout_menu;
217     IBOutlet NSMenuItem * o_vmi_play;
218     IBOutlet NSMenuItem * o_vmi_stop;
219     IBOutlet NSMenuItem * o_vmi_prev;
220     IBOutlet NSMenuItem * o_vmi_next;
221     IBOutlet NSMenuItem * o_vmi_volup;
222     IBOutlet NSMenuItem * o_vmi_voldown;
223     IBOutlet NSMenuItem * o_vmi_mute;
224     IBOutlet NSMenuItem * o_vmi_fullscreen;
225     IBOutlet NSMenuItem * o_vmi_snapshot;
226
227     // information for playlist table columns menu
228     NSDictionary * o_ptc_translation_dict;
229     NSArray * o_ptc_menuorder;
230 }
231 + (VLCMainMenu *)sharedInstance;
232
233 - (void)initStrings;
234 - (void)releaseRepresentedObjects:(NSMenu *)the_menu;
235
236 - (void)setupMenus;
237 - (void)refreshVoutDeviceMenu:(NSNotification *)o_notification;
238 - (void)setSubmenusEnabled:(BOOL)b_enabled;
239 - (void)setRateControlsEnabled:(BOOL)b_enabled;
240 - (void)setupExtensionsMenu;
241 - (void)updateSidebarMenuItem;
242
243 - (IBAction)openAddonManager:(id)sender;
244
245 - (IBAction)intfOpenFile:(id)sender;
246 - (IBAction)intfOpenFileGeneric:(id)sender;
247 - (IBAction)intfOpenDisc:(id)sender;
248 - (IBAction)intfOpenNet:(id)sender;
249 - (IBAction)intfOpenCapture:(id)sender;
250 - (IBAction)savePlaylist:(id)sender;
251
252 - (IBAction)toggleEffectsButton:(id)sender;
253 - (IBAction)toggleJumpButtons:(id)sender;
254 - (IBAction)togglePlaymodeButtons:(id)sender;
255 - (IBAction)toggleSidebar:(id)sender;
256 - (IBAction)togglePlaylistColumnTable:(id)sender;
257 - (BOOL)setPlaylistColumnTableState:(NSInteger)i_state forColumn:(NSString *)o_column;
258 - (NSMenu *)setupPlaylistTableColumnsMenu;
259
260 - (IBAction)quitAfterPlayback:(id)sender;
261 - (IBAction)toggleRecord:(id)sender;
262 - (void)updateRecordState:(BOOL)b_value;
263 - (IBAction)setPlaybackRate:(id)sender;
264 - (void)updatePlaybackRate;
265 - (IBAction)toggleAtoBloop:(id)sender;
266
267 - (IBAction)toggleAudioDevice:(id)sender;
268
269 - (IBAction)toggleFullscreen:(id)sender;
270 - (IBAction)resizeVideoWindow:(id)sender;
271 - (IBAction)floatOnTop:(id)sender;
272 - (IBAction)createVideoSnapshot:(id)sender;
273 - (IBAction)toggleFullscreenDevice:(id)sender;
274
275 - (IBAction)addSubtitleFile:(id)sender;
276 - (IBAction)switchSubtitleOption:(id)sender;
277 - (IBAction)switchSubtitleBackgroundOpacity:(id)sender;
278 - (IBAction)telxTransparent:(id)sender;
279 - (IBAction)telxNavLink:(id)sender;
280
281 - (IBAction)showWizard:(id)sender;
282 - (IBAction)showConvertAndSave:(id)sender;
283 - (IBAction)showVideoEffects:(id)sender;
284 - (IBAction)showAudioEffects:(id)sender;
285 - (IBAction)showTrackSynchronization:(id)sender;
286 - (IBAction)showBookmarks:(id)sender;
287 - (IBAction)showInformationPanel:(id)sender;
288
289 - (IBAction)viewAbout:(id)sender;
290 - (IBAction)showLicense:(id)sender;
291 - (IBAction)viewPreferences:(id)sender;
292 - (IBAction)viewHelp:(id)sender;
293 - (IBAction)openReadMe:(id)sender;
294 - (IBAction)openDocumentation:(id)sender;
295 - (IBAction)openWebsite:(id)sender;
296 - (IBAction)openForum:(id)sender;
297 - (IBAction)openDonate:(id)sender;
298 - (IBAction)viewErrorsAndWarnings:(id)sender;
299 - (IBAction)showMessagesPanel:(id)showMessagesPanel;
300 - (IBAction)showMainWindow:(id)sender;
301 - (IBAction)showPlaylist:(id)sender;
302
303 - (void)setPlay;
304 - (void)setPause;
305 - (void)setRepeatOne;
306 - (void)setRepeatAll;
307 - (void)setRepeatOff;
308 - (void)setShuffle;
309
310 - (IBAction)toggleVar:(id)sender;
311 - (int)toggleVarThread:(id)_o_data;
312 - (void)setupVarMenuItem:(NSMenuItem *)o_mi
313                   target:(vlc_object_t *)p_object
314                      var:(const char *)psz_variable
315                 selector:(SEL)pf_callback;
316 - (void)setupVarMenu:(NSMenu *)o_menu
317          forMenuItem: (NSMenuItem *)o_parent
318               target:(vlc_object_t *)p_object
319                  var:(const char *)psz_variable
320             selector:(SEL)pf_callback;
321
322 - (id)voutMenu;
323 @end
324
325 /*****************************************************************************
326  * VLCAutoGeneratedMenuContent interface
327  *****************************************************************************
328  * This holds our data for autogenerated menus
329  *****************************************************************************/
330 @interface VLCAutoGeneratedMenuContent : NSObject
331 {
332     char *psz_name;
333     vlc_object_t * _vlc_object;
334     vlc_value_t value;
335     int i_type;
336 }
337
338 - (id)initWithVariableName: (const char *)name
339                   ofObject: (vlc_object_t *)object
340                   andValue: (vlc_value_t)value
341                     ofType: (int)type;
342 - (const char *)name;
343 - (vlc_value_t)value;
344 - (vlc_object_t *)vlcObject;
345 - (int)type;
346
347 @end
348