From 2e6b21143cb6747ed2cb62ec5a1f025dbd6ebb0b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Cl=C3=A9ment=20Stenac?= Date: Sat, 23 Sep 2006 13:16:33 +0000 Subject: [PATCH] Advanced controls bar Make some sttings persistent --- modules/gui/qt4/Modules.am | 8 +- .../{equalizer.cpp => extended_panels.cpp} | 21 +++- .../{equalizer.hpp => extended_panels.hpp} | 16 +++ .../gui/qt4/components/interface_widgets.cpp | 110 ++++++++++++++++ .../gui/qt4/components/interface_widgets.hpp | 26 ++++ modules/gui/qt4/dialogs/extended.cpp | 2 +- modules/gui/qt4/input_manager.cpp | 25 +++- modules/gui/qt4/input_manager.hpp | 5 + modules/gui/qt4/main_interface.cpp | 118 +++++++++++------- modules/gui/qt4/main_interface.hpp | 4 + modules/gui/qt4/menus.cpp | 22 ++-- modules/gui/qt4/menus.hpp | 5 +- modules/gui/qt4/qt4.hpp | 16 +++ 13 files changed, 318 insertions(+), 60 deletions(-) rename modules/gui/qt4/components/{equalizer.cpp => extended_panels.cpp} (91%) rename modules/gui/qt4/components/{equalizer.hpp => extended_panels.hpp} (85%) diff --git a/modules/gui/qt4/Modules.am b/modules/gui/qt4/Modules.am index 3e38bb5251..3863561fe0 100644 --- a/modules/gui/qt4/Modules.am +++ b/modules/gui/qt4/Modules.am @@ -30,7 +30,7 @@ TOMOC = main_interface \ dialogs/streaminfo \ dialogs/extended \ dialogs/interaction \ - components/equalizer \ + components/extended_panels \ components/infopanels \ components/preferences_widgets \ components/preferences \ @@ -56,7 +56,7 @@ nodist_SOURCES_qt4 = \ dialogs/errors.moc.cpp \ dialogs/prefs_dialog.moc.cpp \ dialogs/interaction.moc.cpp \ - components/equalizer.moc.cpp \ + components/extended_panels.moc.cpp \ components/infopanels.moc.cpp \ components/preferences_widgets.moc.cpp \ components/preferences.moc.cpp \ @@ -102,7 +102,7 @@ SOURCES_qt4 = qt4.cpp \ dialogs/messages.cpp \ dialogs/errors.cpp \ dialogs/interaction.cpp \ - components/equalizer.cpp \ + components/extended_panels.cpp \ components/infopanels.cpp \ components/preferences_widgets.cpp \ components/preferences.cpp \ @@ -130,7 +130,7 @@ EXTRA_DIST += \ dialogs/errors.hpp \ dialogs/prefs_dialog.hpp \ dialogs/interaction.hpp \ - components/equalizer.hpp \ + components/extended_panels.hpp \ components/infopanels.hpp \ components/preferences_widgets.hpp \ components/preferences.hpp \ diff --git a/modules/gui/qt4/components/equalizer.cpp b/modules/gui/qt4/components/extended_panels.cpp similarity index 91% rename from modules/gui/qt4/components/equalizer.cpp rename to modules/gui/qt4/components/extended_panels.cpp index 664cf0eac1..272151978c 100644 --- a/modules/gui/qt4/components/equalizer.cpp +++ b/modules/gui/qt4/components/extended_panels.cpp @@ -1,5 +1,5 @@ /***************************************************************************** - * equalizer.cpp : Equalizer + * extended_panels.cpp : Extended controls panels **************************************************************************** * Copyright (C) 2006 the VideoLAN team * $Id: preferences.cpp 16643 2006-09-13 12:45:46Z zorglub $ @@ -27,7 +27,7 @@ #include #include -#include "components/equalizer.hpp" +#include "components/extended_panels.hpp" #include "qt4.hpp" #include "../../audio_filter/equalizer_presets.h" @@ -36,6 +36,10 @@ #include #include +/********************************************************************** + * Equalizer + **********************************************************************/ + static const QString band_frequencies[] = { " 60Hz ", " 170 Hz " , " 310 Hz ", " 600 Hz ", " 1 kHz ", @@ -257,3 +261,16 @@ void Equalizer::addCallbacks( aout_instance_t *p_aout ) // var_AddCallback( p_aout, "equalizer-bands", EqzCallback, this ); // var_AddCallback( p_aout, "equalizer-preamp", EqzCallback, this ); } + + +/********************************************************************** + * Video filters / Adjust + **********************************************************************/ + +/********************************************************************** + * Audio filters + **********************************************************************/ + +/********************************************************************** + * Extended playbak controls + **********************************************************************/ diff --git a/modules/gui/qt4/components/equalizer.hpp b/modules/gui/qt4/components/extended_panels.hpp similarity index 85% rename from modules/gui/qt4/components/equalizer.hpp rename to modules/gui/qt4/components/extended_panels.hpp index 99130bc963..de5e25b57d 100644 --- a/modules/gui/qt4/components/equalizer.hpp +++ b/modules/gui/qt4/components/extended_panels.hpp @@ -56,4 +56,20 @@ private slots: void setPreset(int); }; +class ExtendedControls: public QWidget +{ + Q_OBJECT +public: + ExtendedControls( intf_thread_t *, QWidget * ) {}; + virtual ~ExtendedControls() {}; + +private: + intf_thread_t *p_intf; +private slots: + void slower() {}; + void faster() {}; + void normal() {}; + void snapshot() {}; +}; + #endif diff --git a/modules/gui/qt4/components/interface_widgets.cpp b/modules/gui/qt4/components/interface_widgets.cpp index 5de3633382..c0fb11fa77 100644 --- a/modules/gui/qt4/components/interface_widgets.cpp +++ b/modules/gui/qt4/components/interface_widgets.cpp @@ -30,6 +30,8 @@ #include "pixmaps/art.xpm" #include +#include +#include #include #include #include @@ -154,6 +156,17 @@ VisualSelector::VisualSelector( intf_thread_t *_p_i ) : QPushButton *nextButton = new QPushButton( "Next"); layout->addWidget( prevButton ); layout->addWidget( nextButton ); + + layout->addItem( new QSpacerItem( 40,20, + QSizePolicy::Expanding, QSizePolicy::Minimum) ); + layout->addWidget( new QLabel( qtr("Current visualization:") ) ); + + current = new QLabel( qtr( "None" ) ); + layout->addWidget( current ); + + BUTTONACT( prevButton, prev() ); + BUTTONACT( nextButton, next() ); + setLayout( layout ); setMaximumHeight( 35 ); } @@ -162,6 +175,103 @@ VisualSelector::~VisualSelector() { } +void VisualSelector::prev() +{ + char *psz_new = aout_VisualPrev( p_intf ); + if( psz_new ) + { + current->setText( qfu( psz_new ) ); + free( psz_new ); + } +} + +void VisualSelector::next() +{ + char *psz_new = aout_VisualNext( p_intf ); + if( psz_new ) + { + current->setText( qfu( psz_new ) ); + free( psz_new ); + } +} + +/********************************************************************** + * More controls + **********************************************************************/ +ControlsWidget::ControlsWidget( intf_thread_t *_p_i ) : + QFrame( NULL ), p_intf( _p_i ) +{ + QHBoxLayout *layout = new QHBoxLayout( this ); + layout->setMargin( 0 ); + + slowerButton = new QPushButton( "S" ); + BUTTON_SET_ACT( slowerButton, "S", qtr("Slower" ), slower() ); + layout->addWidget( slowerButton ); + slowerButton->setMaximumWidth( 35 ); + + normalButton = new QPushButton( "N" ); + BUTTON_SET_ACT( normalButton, "N", qtr("Normal rate"), normal() ); + layout->addWidget( normalButton ); + normalButton->setMaximumWidth( 35 ); + + fasterButton = new QPushButton( "F" ); + BUTTON_SET_ACT( fasterButton, "F", qtr("Faster" ), faster() ); + layout->addWidget( fasterButton ); + fasterButton->setMaximumWidth( 35 ); + + layout->addItem( new QSpacerItem( 100,20, + QSizePolicy::Expanding, QSizePolicy::Minimum) ); + + snapshotButton = new QPushButton( "S" ); + BUTTON_SET_ACT( snapshotButton, "S", qtr("Take a snapshot"), snapshot() ); + layout->addWidget( snapshotButton ); + snapshotButton->setMaximumWidth( 35 ); + + fullscreenButton = new QPushButton( "F" ); + BUTTON_SET_ACT( fullscreenButton, "F", qtr("Fullscreen"), fullscreen() ); + layout->addWidget( fullscreenButton ); + fullscreenButton->setMaximumWidth( 35 ); +} + +ControlsWidget::~ControlsWidget() +{ +} + +void ControlsWidget::enableInput( bool enable ) +{ + slowerButton->setEnabled( enable ); + normalButton->setEnabled( enable ); + fasterButton->setEnabled( enable ); +} +void ControlsWidget::enableVideo( bool enable ) +{ + snapshotButton->setEnabled( enable ); + fullscreenButton->setEnabled( enable ); +} + +void ControlsWidget::slower() +{ + THEMIM->getIM()->slower(); +} + +void ControlsWidget::faster() +{ + THEMIM->getIM()->faster(); +} + +void ControlsWidget::normal() +{ + THEMIM->getIM()->normalRate(); +} + +void ControlsWidget::snapshot() +{ +} + +void ControlsWidget::fullscreen() +{ +} + /********************************************************************** * Playlist Widget. The embedded playlist **********************************************************************/ diff --git a/modules/gui/qt4/components/interface_widgets.hpp b/modules/gui/qt4/components/interface_widgets.hpp index fd894685a2..04b476f5bc 100644 --- a/modules/gui/qt4/components/interface_widgets.hpp +++ b/modules/gui/qt4/components/interface_widgets.hpp @@ -89,8 +89,34 @@ public: virtual ~VisualSelector(); private: intf_thread_t *p_intf; + QLabel *current; +private slots: + void prev(); + void next(); }; +class QPushButton; +class ControlsWidget : public QFrame +{ + Q_OBJECT +public: + ControlsWidget( intf_thread_t *); + virtual ~ControlsWidget(); + void enableInput( bool ); + void enableVideo( bool ); +private: + intf_thread_t *p_intf; + QPushButton *slowerButton, *normalButton, *fasterButton; + QPushButton *fullscreenButton, *snapshotButton; +private slots: + void faster(); + void slower(); + void normal(); + void snapshot(); + void fullscreen(); +}; + + /******************** Playlist Widgets ****************/ #include class QSignalMapper; diff --git a/modules/gui/qt4/dialogs/extended.cpp b/modules/gui/qt4/dialogs/extended.cpp index a1b88c3100..4f8ec7b2ba 100644 --- a/modules/gui/qt4/dialogs/extended.cpp +++ b/modules/gui/qt4/dialogs/extended.cpp @@ -26,7 +26,7 @@ #include "dialogs/extended.hpp" #include "dialogs_provider.hpp" #include "util/qvlcframe.hpp" -#include "components/equalizer.hpp" +#include "components/extended_panels.hpp" #include "qt4.hpp" ExtendedDialog *ExtendedDialog::instance = NULL; diff --git a/modules/gui/qt4/input_manager.cpp b/modules/gui/qt4/input_manager.cpp index 6b2ed82de0..305fa77c73 100644 --- a/modules/gui/qt4/input_manager.cpp +++ b/modules/gui/qt4/input_manager.cpp @@ -55,6 +55,11 @@ void InputManager::setInput( input_thread_t *_p_input ) b_had_audio = b_had_video = b_has_audio = b_has_video = false; if( p_input ) { + vlc_value_t val; + var_Change( p_input, "video-es", VLC_VAR_CHOICESCOUNT, &val, NULL ); + b_has_video = val.i_int > 0; + var_Change( p_input, "audio-es", VLC_VAR_CHOICESCOUNT, &val, NULL ); + b_has_audio = val.i_int > 0; var_AddCallback( p_input, "audio-es", ChangeAudio, this ); var_AddCallback( p_input, "video-es", ChangeVideo, this ); } @@ -139,7 +144,7 @@ void InputManager::update() void InputManager::sliderUpdate( float new_pos ) { - if( p_input && !p_input->b_die && !p_input->b_dead ) + if( hasInput() ) var_SetFloat( p_input, "position", new_pos ); } @@ -161,6 +166,24 @@ void InputManager::togglePlayPause() emit statusChanged( state.i_int ); } +void InputManager::slower() +{ + if( hasInput() ) + var_SetVoid( p_input, "rate-slower" ); +} + +void InputManager::faster() +{ + if( hasInput() ) + var_SetVoid( p_input, "rate-faster" ); +} + +void InputManager::normalRate() +{ + if( hasInput() ) + var_SetInteger( p_input, "rate", INPUT_RATE_DEFAULT ); +} + /********************************************************************** * MainInputManager implementation. Wrap an input manager and * take care of updating the main playlist input diff --git a/modules/gui/qt4/input_manager.hpp b/modules/gui/qt4/input_manager.hpp index 0f9427bf28..e0197b925f 100644 --- a/modules/gui/qt4/input_manager.hpp +++ b/modules/gui/qt4/input_manager.hpp @@ -26,6 +26,7 @@ #include #include +#include class InputManager : public QObject { @@ -35,6 +36,7 @@ public: virtual ~InputManager(); void delInput(); + bool hasInput() { return p_input && !p_input->b_dead && !p_input->b_die; } bool hasAudio() { return b_has_audio; } bool hasVideo() { return b_has_video; } bool b_has_audio, b_has_video, b_had_audio, b_had_video; @@ -48,6 +50,9 @@ public slots: void update(); ///< Periodic updates void setInput( input_thread_t * ); ///< Our controlled input changed void sliderUpdate( float ); ///< User dragged the slider. We get new pos + void slower(); + void faster(); + void normalRate(); signals: /// Send new position, new time and new length void positionUpdated( float , int, int ); diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp index 9fe6506546..ac792669d6 100644 --- a/modules/gui/qt4/main_interface.cpp +++ b/modules/gui/qt4/main_interface.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #ifdef WIN32 #define PREF_W 410 @@ -48,10 +49,6 @@ #define PREF_H 125 #endif -#define BUTTON_SET( button, image, tooltip ) ui.button##Button->setText(""); \ - ui.button##Button->setIcon( QIcon( ":/pixmaps/"#image ) ); \ - ui.button##Button->setToolTip( tooltip ); - #define VISIBLE(i) (i && i->isVisible()) #define SET_WIDTH(i,j) i->widgetSize.setWidth(j) @@ -90,10 +87,24 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) bgWidget = NULL; videoWidget = NULL; playlistWidget = NULL; embeddedPlaylistWasActive = videoIsActive = false; + /* Fetch configuration from settings and vlc config */ + videoEmbeddedFlag = false; + if( config_GetInt( p_intf, "embedded-video" ) ) + videoEmbeddedFlag = true; + + alwaysVideoFlag = false; + if( videoEmbeddedFlag && config_GetInt( p_intf, "qt-always-video" )) + alwaysVideoFlag = true; + + playlistEmbeddedFlag = settings->value( "playlist-embedded", true ). + toBool(); + advControlsEnabled= settings->value( "adv-controls", false ).toBool(); + setWindowTitle( QString::fromUtf8( _("VLC media player") ) ); handleMainUi( settings ); - QVLCMenu::createMenuBar( this, p_intf, playlistEmbeddedFlag ); + QVLCMenu::createMenuBar( this, p_intf, playlistEmbeddedFlag, + advControlsEnabled ); /* Status bar */ timeLabel = new QLabel( 0 ); @@ -126,7 +137,11 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) MainInterface::~MainInterface() { - /// \todo Save everything + settings->setValue( "playlist-embedded", playlistEmbeddedFlag ); + settings->setValue( "adv-controls", advControlsEnabled ); + settings->setValue( "pos", pos() ); + settings->endGroup(); + delete settings; p_intf->b_interaction = VLC_FALSE; var_DelCallback( p_intf, "interaction", InteractCallback, this ); @@ -144,17 +159,13 @@ void MainInterface::handleMainUi( QSettings *settings ) slider = new InputSlider( Qt::Horizontal, NULL ); ui.hboxLayout->insertWidget( 0, slider ); - BUTTON_SET( prev, previous.png, qtr( "Previous" ) ); - BUTTONACT( ui.prevButton, prev() ); - BUTTON_SET( next, next.png , qtr( "Next" ) ); - BUTTONACT( ui.nextButton, next() ); - BUTTON_SET( play, play.png , qtr( "Play" ) ); - BUTTONACT( ui.playButton, play() ); - BUTTON_SET( stop, stop.png , qtr( "Stop" ) ); - BUTTONACT( ui.stopButton, stop() ); - - BUTTON_SET( visual, stop.png, qtr( "Audio visualizations" ) ); - BUTTONACT( ui.visualButton, visual() ); + BUTTON_SET_ACT_I( ui.prevButton, "" , previous.png, + qtr("Previous"), prev() ); + BUTTON_SET_ACT_I( ui.nextButton, "", next.png, qtr("Next"), next() ); + BUTTON_SET_ACT_I( ui.playButton, "", play.png, qtr("Play"), play() ); + BUTTON_SET_ACT_I( ui.stopButton, "", stop.png, qtr("Stop"), stop() ); + BUTTON_SET_ACT_I( ui.visualButton, "", stop.png, + qtr( "Audio visualizations" ), visual() ); /* Volume */ ui.volMuteLabel->setPixmap( QPixmap( ":/pixmaps/volume-low.png" ) ); @@ -164,20 +175,8 @@ void MainInterface::handleMainUi( QSettings *settings ) ui.volMuteLabel->installEventFilter(h); ui.volumeSlider->setFocusPolicy( Qt::NoFocus ); - /* Fetch configuration from settings and vlc config */ - videoEmbeddedFlag = false; - if( config_GetInt( p_intf, "embedded-video" ) ) - videoEmbeddedFlag = true; - - alwaysVideoFlag = false; - if( videoEmbeddedFlag && config_GetInt( p_intf, "qt-always-video" )) - alwaysVideoFlag = true; - - playlistEmbeddedFlag = true; - /// \todo fetch playlist settings - - BUTTON_SET( playlist, volume-low.png, playlistEmbeddedFlag ? - qtr( "Show playlist" ) : + BUTTON_SET_IMG( ui.playlistButton, "" ,volume-low.png, + playlistEmbeddedFlag ? qtr( "Show playlist" ) : qtr( "Open playlist" ) ); BUTTONACT( ui.playlistButton, playlist() ); @@ -186,6 +185,12 @@ void MainInterface::handleMainUi( QSettings *settings ) addSize = QSize( ui.vboxLayout->margin() * 2, PREF_H ); + advControls = new ControlsWidget( p_intf ); + ui.vboxLayout->insertWidget( 0, advControls ); + advControls->updateGeometry(); + if( !advControlsEnabled ) advControls->hide(); + need_components_update = true; + visualSelector = new VisualSelector( p_intf ); ui.vboxLayout->insertWidget( 0, visualSelector ); visualSelector->hide(); @@ -211,10 +216,6 @@ void MainInterface::handleMainUi( QSettings *settings ) p_intf->pf_release_window = ::DoRelease; p_intf->pf_control_window = ::DoControl; } - - calculateInterfaceSize(); - resize( mainSize ); - setMinimumSize( PREF_W, addSize.height() ); } @@ -249,7 +250,14 @@ void MainInterface::calculateInterfaceSize() } if( VISIBLE( visualSelector ) ) height += visualSelector->height(); + fprintf( stderr, "Adv %p - visible %i\n", advControls, advControls->isVisible() ); + if( VISIBLE( advControls) ) + { + fprintf( stderr, "visible\n" ); + height += advControls->sizeHint().height(); + } + fprintf( stderr, "Adv height %i\n", advControls->sizeHint().height() ); fprintf( stderr, "Setting to %ix%i\n", width + addSize.width() , height + addSize.height() ); @@ -265,14 +273,12 @@ void MainInterface::resizeEvent( QResizeEvent *e ) SET_WH( videoWidget, e->size().width() - addSize.width(), e->size().height() - addSize.height() ); videoWidget->updateGeometry(); - fprintf( stderr, "Video set to %ix%i\n", DS( videoWidget->widgetSize) ); } if( VISIBLE( playlistWidget ) ) { SET_WH( playlistWidget , e->size().width() - addSize.width(), e->size().height() - addSize.height() ); playlistWidget->updateGeometry(); - fprintf( stderr, "PL set to %ix%i\n",DS(playlistWidget->widgetSize ) ); } } @@ -361,6 +367,21 @@ int MainInterface::controlVideo( void *p_window, int i_query, va_list args ) return i_ret; } +void MainInterface::advanced() +{ + if( !VISIBLE( advControls ) ) + { + advControls->show(); + advControlsEnabled = true; + } + else + { + advControls->hide(); + advControlsEnabled = false; + } + doComponentsUpdate(); +} + void MainInterface::visual() { if( !VISIBLE( visualSelector) ) @@ -404,7 +425,6 @@ void MainInterface::playlist() /// Todo, reset its size ? if( VISIBLE( playlistWidget) ) { - fprintf( stderr, "hiding playlist\n" ); playlistWidget->hide(); if( videoIsActive ) { @@ -415,7 +435,6 @@ void MainInterface::playlist() } else { - fprintf( stderr, "showing playlist\n" ); playlistWidget->show(); if( videoIsActive ) { @@ -448,7 +467,7 @@ void MainInterface::undockPlaylist() playlistEmbeddedFlag = false; menuBar()->clear(); - QVLCMenu::createMenuBar( this, p_intf, false ); + QVLCMenu::createMenuBar( this, p_intf, false, advControlsEnabled ); if( videoIsActive ) { @@ -469,7 +488,7 @@ void MainInterface::customEvent( QEvent *event ) PlaylistDialog::killInstance(); playlistEmbeddedFlag = true; menuBar()->clear(); - QVLCMenu::createMenuBar(this, p_intf, true ); + QVLCMenu::createMenuBar(this, p_intf, true, advControlsEnabled ); playlist(); } } @@ -587,6 +606,21 @@ static bool b_my_volume; void MainInterface::updateOnTimer() { + aout_instance_t *p_aout = (aout_instance_t *)vlc_object_find( p_intf, + VLC_OBJECT_AOUT, FIND_ANYWHERE ); + /* Todo: make this event-driven */ + if( p_aout ) + { + ui.visualButton->setEnabled( true ); + vlc_object_release( p_aout ); + } + else + ui.visualButton->setEnabled( false ); + + /* And this too */ + advControls->enableInput( THEMIM->getIM()->hasInput() ); + advControls->enableVideo( THEMIM->getIM()->hasVideo() ); + if( p_intf->b_die ) { QApplication::closeAllWindows(); @@ -634,8 +668,6 @@ static int InteractCallback( vlc_object_t *p_this, { intf_dialog_args_t *p_arg = new intf_dialog_args_t; p_arg->p_dialog = (interaction_dialog_t *)(new_val.p_address); - - MainInterface *p_interface = (MainInterface*)param; DialogEvent *event = new DialogEvent( INTF_DIALOG_INTERACTION, 0, p_arg ); QApplication::postEvent( THEDP, static_cast(event) ); return VLC_SUCCESS; diff --git a/modules/gui/qt4/main_interface.hpp b/modules/gui/qt4/main_interface.hpp index 2cfb0ac8ba..cbece4bb99 100644 --- a/modules/gui/qt4/main_interface.hpp +++ b/modules/gui/qt4/main_interface.hpp @@ -42,6 +42,7 @@ class BackgroundWidget; class PlaylistWidget; class VolumeClickHandler; class VisualSelector; +class ControlsWidget; class MainInterface : public QVLCMW { @@ -74,11 +75,13 @@ private: BackgroundWidget *bgWidget; VisualSelector *visualSelector; + ControlsWidget *advControls; PlaylistWidget *playlistWidget; bool playlistEmbeddedFlag; bool videoEmbeddedFlag; bool alwaysVideoFlag; + bool advControlsEnabled; InputManager *main_input_manager; InputSlider *slider; @@ -101,6 +104,7 @@ private slots: void next(); void playlist(); void visual(); + void advanced(); void updateVolume( int sliderVolume ); }; diff --git a/modules/gui/qt4/menus.cpp b/modules/gui/qt4/menus.cpp index f814834b32..f00454417e 100644 --- a/modules/gui/qt4/menus.cpp +++ b/modules/gui/qt4/menus.cpp @@ -120,15 +120,15 @@ static int AudioAutoMenuBuilder( vlc_object_t *p_object, THEDP->menusUpdateMapper->setMapping( menu, f ); } void QVLCMenu::createMenuBar( MainInterface *mi, intf_thread_t *p_intf, - bool playlist ) + bool playlist, bool adv_controls_enabled ) { QMenuBar *bar = mi->menuBar(); - BAR_ADD( FileMenu(), qtr("File") ); + BAR_ADD( FileMenu(), qtr("Media") ); if( playlist ) { BAR_ADD( PlaylistMenu( mi,p_intf ), qtr("Playlist" ) ); } - BAR_ADD( ToolsMenu( p_intf ), qtr("Tools") ); + BAR_ADD( ToolsMenu( p_intf, mi, adv_controls_enabled ), qtr("Tools") ); BAR_DADD( VideoMenu( p_intf, NULL ), qtr("Video"), 1 ); BAR_DADD( AudioMenu( p_intf, NULL ), qtr("Audio"), 2 ); BAR_DADD( NavigMenu( p_intf, NULL ), qtr("Navigation"), 3 ); @@ -161,7 +161,8 @@ QMenu *QVLCMenu::PlaylistMenu( MainInterface *mi, intf_thread_t *p_intf ) return menu; } -QMenu *QVLCMenu::ToolsMenu( intf_thread_t *p_intf, bool with_intf ) +QMenu *QVLCMenu::ToolsMenu( intf_thread_t *p_intf, MainInterface *mi, + bool adv_controls_enabled, bool with_intf ) { QMenu *menu = new QMenu(); if( with_intf ) @@ -169,15 +170,22 @@ QMenu *QVLCMenu::ToolsMenu( intf_thread_t *p_intf, bool with_intf ) QMenu *intfmenu = InterfacesMenu( p_intf, NULL ); intfmenu->setTitle( qtr("Interfaces" ) ); menu->addMenu( intfmenu ); - /** \todo ADD EXT GUI HERE */ menu->addSeparator(); } DP_SADD( qtr("Messages" ), "", "", messagesDialog() ); DP_SADD( qtr("Information") , "", "", streaminfoDialog() ); DP_SADD( qtr("Bookmarks"), "", "", bookmarksDialog() ); + DP_SADD( qtr("Extended settings"), "","",extendedDialog() ); + if( mi ) + { + menu->addSeparator(); + QAction *adv = menu->addAction( qtr("Advanced controls" ), + mi, SLOT( advanced() ) ); + adv->setCheckable( true ); + if( adv_controls_enabled ) adv->setChecked( true ); + } menu->addSeparator(); DP_SADD( qtr("Preferences"), "", "", prefsDialog() ); - DP_SADD( qtr("Extended"), "","",extendedDialog() ); return menu; } @@ -340,7 +348,7 @@ QMenu *QVLCMenu::SDMenu( intf_thread_t *p_intf ) intfmenu->setTitle( qtr("Interfaces" ) ); \ menu->addMenu( intfmenu ); \ \ - QMenu *toolsmenu = ToolsMenu( p_intf, false ); \ + QMenu *toolsmenu = ToolsMenu( p_intf, NULL, false, false ); \ toolsmenu->setTitle( qtr("Tools" ) ); \ menu->addMenu( toolsmenu ); \ diff --git a/modules/gui/qt4/menus.hpp b/modules/gui/qt4/menus.hpp index 8929c6da57..f50f18ecbf 100644 --- a/modules/gui/qt4/menus.hpp +++ b/modules/gui/qt4/menus.hpp @@ -58,13 +58,14 @@ class QVLCMenu : public QObject { Q_OBJECT; public: - static void createMenuBar( MainInterface *mi, intf_thread_t *, bool ); + static void createMenuBar( MainInterface *mi, intf_thread_t *, bool, bool ); /* Menus */ static QMenu *FileMenu(); static QMenu *SDMenu( intf_thread_t * ); static QMenu *PlaylistMenu( MainInterface *, intf_thread_t *); - static QMenu *ToolsMenu( intf_thread_t *, bool with_intf = true ); + static QMenu *ToolsMenu( intf_thread_t *, MainInterface *, bool, + bool with = true ); static QMenu *NavigMenu( intf_thread_t * , QMenu * ); static QMenu *VideoMenu( intf_thread_t * , QMenu * ); static QMenu *AudioMenu( intf_thread_t * , QMenu * ); diff --git a/modules/gui/qt4/qt4.hpp b/modules/gui/qt4/qt4.hpp index fe66a737e5..5d1a48979f 100644 --- a/modules/gui/qt4/qt4.hpp +++ b/modules/gui/qt4/qt4.hpp @@ -62,6 +62,22 @@ struct intf_sys_t #define BUTTONACT( b, a ) connect( b, SIGNAL( clicked() ), this, SLOT(a) ) #define ON_TIMEOUT( act ) CONNECT( THEDP->fixed_timer, timeout(), this, act ) +#define BUTTON_SET( button, text, tooltip ) \ + button->setText( text ); \ + button->setToolTip( tooltip ); + +#define BUTTON_SET_ACT( button, text, tooltip, thisslot ) \ + BUTTON_SET( button, text, tooltip ); \ + BUTTONACT( button, thisslot ); + +#define BUTTON_SET_IMG( button, text, image, tooltip ) \ + BUTTON_SET( button, text, tooltip ); \ + button->setIcon( QIcon( ":/pixmaps/"#image ) ); + +#define BUTTON_SET_ACT_I( button, text, image, tooltip, thisslot ) \ + BUTTON_SET_IMG( button, text, image, tooltip ); \ + BUTTONACT( button, thisslot ); + static int DialogEvent_Type = QEvent::User + 1; static int PLUndockEvent_Type = QEvent::User + 2; static int PLDockEvent_Type = QEvent::User + 3; -- 2.39.2