1 /*****************************************************************************
2 * menus.hpp : Menus handling
3 ****************************************************************************
4 * Copyright (C) 2006 the VideoLAN team
7 * Authors: Clément Stenac <zorglub@videolan.org>
8 * Jean-Baptiste Kempf <jb@videolan.org>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23 *****************************************************************************/
38 class QSystemTrayIcon
;
40 class MenuItemData
: public QObject
45 MenuItemData( QObject
* parent
, vlc_object_t
*_p_obj
, int _i_type
,
46 vlc_value_t _val
, const char *_var
) : QObject( parent
)
50 vlc_object_hold( p_obj
);
53 psz_var
= strdup( _var
);
55 virtual ~MenuItemData()
58 if( ( i_val_type
& VLC_VAR_TYPE
) == VLC_VAR_STRING
)
59 free( val
.psz_string
);
61 vlc_object_release( p_obj
);
72 class QVLCMenu
: public QObject
75 friend class MenuFunc
;
78 /* Main bar creation */
79 static void createMenuBar( MainInterface
*mi
, intf_thread_t
* );
82 static void PopupMenu( intf_thread_t
*, bool );
83 static void AudioPopupMenu( intf_thread_t
*, bool );
84 static void VideoPopupMenu( intf_thread_t
*, bool );
85 static void MiscPopupMenu( intf_thread_t
*, bool );
88 static void updateSystrayMenu( MainInterface
*, intf_thread_t
*,
89 bool b_force_visible
= false);
92 static void DoAction( QObject
* );
96 static QMenu
*FileMenu( intf_thread_t
*, QWidget
*, MainInterface
* mi
= NULL
);
98 static QMenu
*ToolsMenu( QMenu
* );
99 static QMenu
*ToolsMenu( QWidget
*parent
) { return ToolsMenu( new QMenu( parent
) ); }
101 static QMenu
*ViewMenu( intf_thread_t
*, QMenu
*, MainInterface
* mi
= NULL
);
103 static QMenu
*InterfacesMenu( intf_thread_t
*p_intf
, QMenu
* );
104 static void ExtensionsMenu( intf_thread_t
*p_intf
, QMenu
* );
106 static QMenu
*NavigMenu( intf_thread_t
*, QMenu
* );
107 static QMenu
*NavigMenu( intf_thread_t
*p_intf
, QWidget
*parent
) {
108 return NavigMenu( p_intf
, new QMenu( parent
) );
110 static QMenu
*RebuildNavigMenu( intf_thread_t
*, QMenu
*);
112 static QMenu
*VideoMenu( intf_thread_t
*, QMenu
*, bool b_subtitle
= true );
113 static QMenu
*VideoMenu( intf_thread_t
*p_intf
, QWidget
*parent
) {
114 return VideoMenu( p_intf
, new QMenu( parent
) );
116 static QMenu
*SubtitleMenu( QMenu
*current
);
118 static QMenu
*AudioMenu( intf_thread_t
*, QMenu
* );
119 static QMenu
*AudioMenu( intf_thread_t
*p_intf
, QWidget
*parent
) {
120 return AudioMenu( p_intf
, new QMenu( parent
) );
123 static QMenu
*HelpMenu( QWidget
* );
126 static void PopupMenuStaticEntries( QMenu
*menu
);
127 static void PopupPlayEntries( QMenu
*menu
, intf_thread_t
*p_intf
,
128 input_thread_t
*p_input
);
129 static void PopupMenuControlEntries( QMenu
*menu
, intf_thread_t
*p_intf
);
130 static void PopupMenuPlaylistControlEntries( QMenu
*menu
, intf_thread_t
*p_intf
);
132 /* Generic automenu methods */
133 static QMenu
* Populate( intf_thread_t
*, QMenu
*current
,
134 vector
<const char*>&, vector
<vlc_object_t
*>& );
136 static void CreateAndConnect( QMenu
*, const char *, const QString
&,
137 const QString
&, int, vlc_object_t
*,
138 vlc_value_t
, int, bool c
= false );
139 static void UpdateItem( intf_thread_t
*, QMenu
*, const char *,
140 vlc_object_t
*, bool );
141 static int CreateChoicesMenu( QMenu
*,const char *, vlc_object_t
*, bool );
144 static QMenu
*recentsMenu
;
147 static void updateRecents( intf_thread_t
* );
150 class MenuFunc
: public QObject
155 MenuFunc( QMenu
*_menu
, int _id
) : QObject( (QObject
*)_menu
),
156 menu( _menu
), id( _id
){}
158 void doFunc( intf_thread_t
*p_intf
)
162 case 1: QVLCMenu::AudioMenu( p_intf
, menu
); break;
163 case 2: QVLCMenu::VideoMenu( p_intf
, menu
); break;
164 case 3: QVLCMenu::RebuildNavigMenu( p_intf
, menu
); break;
165 case 4: QVLCMenu::ViewMenu( p_intf
, menu
); break;