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