Just before one of those menus are aboutToShow(), they are rebuild.
*/
+#define STATIC_ENTRY "__static__"
+#define ENTRY_ALWAYS_ENABLED "__ignore__"
+
enum
{
ITEM_NORMAL,
const char *shortcut = NULL )
{
QAction *action = NULL;
- if( !EMPTY_STR( icon ) > 0 )
+ if( !EMPTY_STR( icon ) )
{
- if( !EMPTY_STR( shortcut ) > 0 )
+ if( !EMPTY_STR( shortcut ) )
action = menu->addAction( QIcon( icon ), text, THEDP,
member, qtr( shortcut ) );
else
}
else
{
- if( !EMPTY_STR( shortcut ) > 0 )
+ if( !EMPTY_STR( shortcut ) )
action = menu->addAction( text, THEDP, member, qtr( shortcut ) );
else
action = menu->addAction( text, THEDP, member );
}
- action->setData( true );
+ action->setData( STATIC_ENTRY );
}
/***
* Same for MIM
***/
-void addMIMStaticEntry( intf_thread_t *p_intf,
- QMenu *menu,
- const QString text,
- const char *icon,
- const char *member )
+QAction* addMIMStaticEntry( intf_thread_t *p_intf,
+ QMenu *menu,
+ const QString text,
+ const char *icon,
+ const char *member,
+ bool bStatic = false )
{
QAction *action;
if( strlen( icon ) > 0 )
}
else
{
- menu->addAction( text, THEMIM, member );
+ action = menu->addAction( text, THEMIM, member );
}
- action->setData( "ignore" );
+ action->setData( bStatic ? STATIC_ENTRY : ENTRY_ALWAYS_ENABLED );
+ return action;
}
/**
QList< QAction* > actions = menu->actions();
for( int i = 0; i < actions.size(); ++i )
{
- actions[i]->setEnabled( actions[i]->data().toString() == "ignore" ||
- /* Be careful here, because data("string").toBool is true */
- ( enable && (actions[i]->data().toString() == "true" ) ) );
+ actions[i]->setEnabled( actions[i]->data().toString()
+ == ENTRY_ALWAYS_ENABLED ||
+ /* Be careful here, because data("string").toBool is true */
+ ( enable && (actions[i]->data().toString() == STATIC_ENTRY ) ) );
}
}
QList< QAction* > actions = menu->actions();
for( int i = 0; i < actions.size(); ++i )
{
- if( !actions[i]->data().toBool() )
+ if( actions[i]->data().toString() != STATIC_ENTRY )
delete actions[i];
else
i_ret++;
QAction *action = current->addAction( qtr( "Increase Volume" ),
ActionsManager::getInstance( p_intf ), SLOT( AudioUp() ) );
- action->setData( true );
+ action->setData( STATIC_ENTRY );
action = current->addAction( qtr( "Decrease Volume" ),
ActionsManager::getInstance( p_intf ), SLOT( AudioDown() ) );
- action->setData( true );
+ action->setData( STATIC_ENTRY );
action = current->addAction( qtr( "Mute" ),
ActionsManager::getInstance( p_intf ), SLOT( toggleMuteAudio() ) );
- action->setData( true );
+ action->setData( STATIC_ENTRY );
}
p_input = THEMIM->getInput();
PopupMenuPlaylistControlEntries( menu, p_intf );
PopupMenuControlEntries( menu, p_intf );
- return menu;
+ EnableStaticEntries( menu, ( THEMIM->getInput() != NULL ) );
+ return RebuildNavigMenu( p_intf, menu );
}
QMenu *QVLCMenu::RebuildNavigMenu( intf_thread_t *p_intf, QMenu *menu )
action = menu->addAction( qtr( "&Faster" ), THEMIM->getIM(),
SLOT( faster() ) );
action->setIcon( QIcon( ":/faster") );
- action->setData( true );
+ action->setData( STATIC_ENTRY );
action = menu->addAction( qtr( "Faster (fine)" ), THEMIM->getIM(),
SLOT( littlefaster() ) );
- action->setData( true );
+ action->setData( STATIC_ENTRY );
action = menu->addAction( qtr( "N&ormal Speed" ), THEMIM->getIM(),
SLOT( normalRate() ) );
- action->setData( true );
+ action->setData( STATIC_ENTRY );
action = menu->addAction( qtr( "Slower (fine)" ), THEMIM->getIM(),
SLOT( littleslower() ) );
- action->setData( true );
+ action->setData( STATIC_ENTRY );
action = menu->addAction( qtr( "Slo&wer" ), THEMIM->getIM(),
SLOT( slower() ) );
action->setIcon( QIcon( ":/slower") );
- action->setData( true );
+ action->setData( STATIC_ENTRY );
menu->addSeparator();
action = menu->addAction( qtr( "&Jump Forward" ), THEMIM->getIM(),
SLOT( jumpFwd() ) );
action->setIcon( QIcon( ":/skip_fw") );
- action->setData( true );
+ action->setData( STATIC_ENTRY );
action = menu->addAction( qtr( "Jump Bac&kward" ), THEMIM->getIM(),
SLOT( jumpBwd() ) );
action->setIcon( QIcon( ":/skip_back") );
- action->setData( true );
+ action->setData( STATIC_ENTRY );
addDPStaticEntry( menu, qtr( I_MENU_GOTOTIME ),"",
SLOT( gotoTimeDialog() ), "Ctrl+T" );
menu->addSeparator();
void QVLCMenu::PopupMenuPlaylistControlEntries( QMenu *menu,
intf_thread_t *p_intf )
{
- addMIMStaticEntry( p_intf, menu, qtr( "&Stop" ), ":/stop", SLOT( stop() ) );
+ bool bEnable = THEMIM->getInput() != NULL;
+ QAction *action =
+ addMIMStaticEntry( p_intf, menu, qtr( "&Stop" ), ":/stop",
+ SLOT( stop() ), true );
+ /* Disable Stop in the right-click popup menu */
+ if( !bEnable )
+ action->setEnabled( false );
/* Next / Previous */
addMIMStaticEntry( p_intf, menu, qtr( "Pre&vious" ),
- ":/previous", SLOT( prev() ) );
+ ":/previous", SLOT( prev() ) );
addMIMStaticEntry( p_intf, menu, qtr( "Ne&xt" ),
- ":/next", SLOT( next() ) );
+ ":/next", SLOT( next() ) );
menu->addSeparator();
}
/* Main Menu that sticks everything together */
void QVLCMenu::PopupMenu( intf_thread_t *p_intf, bool show )
{
- /* Destroy popup menu if there is one */
+ /* Delete old popup if there is one */
+ if( p_intf->p_sys->p_popup_menu )
+ delete p_intf->p_sys->p_popup_menu;
+
if( !show )
{
- delete p_intf->p_sys->p_popup_menu;
p_intf->p_sys->p_popup_menu = NULL;
return;
}
- /* Delete and recreate a popup if there is one */
- if( p_intf->p_sys->p_popup_menu )
- delete p_intf->p_sys->p_popup_menu;
-
/* */
QMenu *menu = new QMenu();
- QMenu *submenu;
QAction *action;
bool b_isFullscreen = false;
MainInterface *mi = p_intf->p_sys->p_mi;
if( p_input )
{
+ QMenu *submenu;
vout_thread_t *p_vout = THEMIM->getVout();
/* Add a fullscreen switch button, since it is the most used function */
/* Add some special entries for windowed mode: Interface Menu */
if( !b_isFullscreen )
{
- submenu = new QMenu( qtr( "Interface" ), menu );
+ QMenu *submenu = new QMenu( qtr( "Interface" ), menu );
QMenu *tools = ToolsMenu( submenu );
submenu->addSeparator();
/* In skins interface, append some items */
if( !mi )
{
- objects.clear(); varnames.clear();
vlc_object_t *p_object = ( vlc_object_t* )
vlc_object_find_name( p_intf, "skins2", FIND_PARENT );
if( p_object )
{
+ objects.clear(); varnames.clear();
objects.push_back( p_object );
varnames.push_back( "intf-skins" );
Populate( p_intf, submenu, varnames, objects );
+
+ objects.clear(); varnames.clear();
+ objects.push_back( p_object );
+ varnames.push_back( "intf-skins-interactive" );
+ Populate( p_intf, submenu, varnames, objects );
+
vlc_object_release( p_object );
}
else
mi->getSysTray()->setContextMenu( sysMenu );
}
+#undef CREATE_POPUP
+#undef POPUP_BOILERPLATE
+
#undef PUSH_VAR
#undef PUSH_SEPARATOR
FREENULL( text.psz_string );
}
+#undef TEXT_OR_VAR
+
int QVLCMenu::CreateChoicesMenu( QMenu *submenu, const char *psz_var,
vlc_object_t *p_object, bool b_root )
QList<QString> l = rmrl->recents();
recentsMenu->clear();
+
if( !l.size() )
{
action = recentsMenu->addAction( qtr(" - Empty - ") );