[vlc-devel] commit: Qt: separate speedLabel code from interface code ( Jean-Baptiste Kempf )

git version control git at videolan.org
Tue Dec 30 13:21:09 CET 2008


vlc | branch: master | Jean-Baptiste Kempf <jb at videolan.org> | Mon Dec 29 20:03:21 2008 +0100| [f7a97201e9497e6f530b0c0a7a091bc8bb14afe9] | committer: Jean-Baptiste Kempf 

Qt: separate speedLabel code from interface code

Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f7a97201e9497e6f530b0c0a7a091bc8bb14afe9
---

 modules/gui/qt4/components/interface_widgets.cpp |   57 ++++++++++++++++++++--
 modules/gui/qt4/components/interface_widgets.hpp |   12 +++--
 modules/gui/qt4/main_interface.cpp               |   45 +----------------
 modules/gui/qt4/main_interface.hpp               |    4 --
 4 files changed, 63 insertions(+), 55 deletions(-)

diff --git a/modules/gui/qt4/components/interface_widgets.cpp b/modules/gui/qt4/components/interface_widgets.cpp
index c74188c..036a429 100644
--- a/modules/gui/qt4/components/interface_widgets.cpp
+++ b/modules/gui/qt4/components/interface_widgets.cpp
@@ -39,6 +39,8 @@
 #include <QPalette>
 #include <QResizeEvent>
 #include <QDate>
+#include <QMenu>
+#include <QWidgetAction>
 
 #ifdef Q_WS_X11
 # include <X11/Xlib.h>
@@ -280,6 +282,52 @@ void VisualSelector::next()
 }
 #endif
 
+SpeedLabel::SpeedLabel( intf_thread_t *_p_intf, const QString text )
+           : QLabel( text ), p_intf( _p_intf )
+{
+    setToolTip( qtr( "Current playback speed.\nRight click to adjust" ) );
+    setContextMenuPolicy ( Qt::CustomContextMenu );
+
+    /* Create the Speed Control Widget */
+    speedControl = new SpeedControlWidget( p_intf );
+    speedControlMenu = new QMenu( this );
+
+    QWidgetAction *widgetAction = new QWidgetAction( speedControl );
+    widgetAction->setDefaultWidget( speedControl );
+    speedControlMenu->addAction( widgetAction );
+
+    /* Speed Label behaviour:
+       - right click gives the vertical speed slider */
+    CONNECT( this, customContextMenuRequested( QPoint ),
+             this, showSpeedMenu( QPoint ) );
+
+    /* Change the SpeedRate in the Status Bar */
+    CONNECT( THEMIM->getIM(), rateChanged( int ), this, setRate( int ) );
+
+    // FIXME this is wrong but will work for some time.
+    CONNECT( THEMIM->getIM(), statusChanged( int ),
+             speedControl, activateOnState() );
+}
+
+/****************************************************************************
+ * Small right-click menu for rate control
+ ****************************************************************************/
+void SpeedLabel::showSpeedMenu( QPoint pos )
+{
+    speedControlMenu->exec( QCursor::pos() - pos
+                          + QPoint( 0, height() ) );
+}
+
+void SpeedLabel::setRate( int rate )
+{
+    QString str;
+    str.setNum( ( 1000 / (double)rate ), 'f', 2 );
+    str.append( "x" );
+    setText( str );
+    setToolTip( str );
+    speedControl->updateControls( rate );
+}
+
 /**********************************************************************
  * Speed control widget
  **********************************************************************/
@@ -317,14 +365,13 @@ SpeedControlWidget::SpeedControlWidget( intf_thread_t *_p_i ) :
     speedControlLayout->addWidget( speedSlider );
     speedControlLayout->addWidget( normalSpeedButton );
     setLayout( speedControlLayout );
-}
 
-SpeedControlWidget::~SpeedControlWidget()
-{}
+    activateOnState();
+}
 
-void SpeedControlWidget::setEnable( bool b_enable )
+void SpeedControlWidget::activateOnState()
 {
-    speedSlider->setEnabled( b_enable );
+    speedSlider->setEnabled( THEMIM->getIM()->hasInput() );
 }
 
 void SpeedControlWidget::updateControls( int rate )
diff --git a/modules/gui/qt4/components/interface_widgets.hpp b/modules/gui/qt4/components/interface_widgets.hpp
index f4c9f98..8fa6f8e 100644
--- a/modules/gui/qt4/components/interface_widgets.hpp
+++ b/modules/gui/qt4/components/interface_widgets.hpp
@@ -47,6 +47,7 @@ class ResizeEvent;
 class QPalette;
 class QPixmap;
 class QHBoxLayout;
+class QMenu;
 
 /******************** Video Widget ****************/
 class VideoWidget : public QFrame
@@ -153,16 +154,20 @@ class SpeedLabel : public QLabel
 {
     Q_OBJECT
 public:
-    SpeedLabel( intf_thread_t *_p_intf, const QString text ): QLabel( text )
-    { p_intf = _p_intf; }
+    SpeedLabel( intf_thread_t *, const QString );
 
 protected:
     virtual void mouseDoubleClickEvent ( QMouseEvent * event )
     {
         THEMIM->getIM()->setRate( INPUT_RATE_DEFAULT );
     }
+private slots:
+    void showSpeedMenu( QPoint );
+    void setRate( int );
 private:
     intf_thread_t *p_intf;
+    QMenu *speedControlMenu;
+    SpeedControlWidget *speedControl;
 };
 
 /******************** Speed Control Widgets ****************/
@@ -171,14 +176,13 @@ class SpeedControlWidget : public QFrame
     Q_OBJECT
 public:
     SpeedControlWidget( intf_thread_t *);
-    virtual ~SpeedControlWidget();
     void updateControls( int );
 private:
     intf_thread_t *p_intf;
     QSlider *speedSlider;
 
 public slots:
-    void setEnable( bool );
+    void activateOnState();
 
 private slots:
     void updateRate( int );
diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp
index 7ea2302..6de7b03 100644
--- a/modules/gui/qt4/main_interface.cpp
+++ b/modules/gui/qt4/main_interface.cpp
@@ -49,12 +49,12 @@
 #include <QSize>
 #include <QDate>
 
+#include <QMenu>
 #include <QMenuBar>
 #include <QStatusBar>
 #include <QLabel>
 #include <QGroupBox>
 #include <QPushButton>
-#include <QWidgetAction>
 
 #include <assert.h>
 
@@ -151,8 +151,6 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
      **************************/
     /* Connect the input manager to the GUI elements it manages */
 
-    /* Change the SpeedRate in the Status Bar */
-    CONNECT( THEMIM->getIM(), rateChanged( int ), this, setRate( int ) );
 
     /**
      * Connects on nameChanged()
@@ -291,14 +289,11 @@ inline void MainInterface::createStatusBar()
      *  Status Bar  *
      ****************/
     /* Widgets Creation*/
-    timeLabel = new TimeLabel( p_intf );
+    TimeLabel *timeLabel = new TimeLabel( p_intf );
     nameLabel = new QLabel;
     nameLabel->setTextInteractionFlags( Qt::TextSelectableByMouse
                                       | Qt::TextSelectableByKeyboard );
-    speedLabel = new SpeedLabel( p_intf, "1.00x" );
-    speedLabel->setToolTip(
-            qtr( "Current playback speed.\nRight click to adjust" ) );
-    speedLabel->setContextMenuPolicy ( Qt::CustomContextMenu );
+    SpeedLabel *speedLabel = new SpeedLabel( p_intf, "1.00x" );
 
     /* Styling those labels */
     timeLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel );
@@ -315,11 +310,6 @@ inline void MainInterface::createStatusBar()
        - right-clicking and clicking just toggle between remaining and
          elapsed time.*/
     CONNECT( timeLabel, timeLabelDoubleClicked(), THEDP, gotoTimeDialog() );
-
-    /* Speed Label behaviour:
-       - right click gives the vertical speed slider */
-    CONNECT( speedLabel, customContextMenuRequested( QPoint ),
-             this, showSpeedMenu( QPoint ) );
 }
 
 inline void MainInterface::initSystray()
@@ -383,14 +373,6 @@ void MainInterface::handleMainUi( QSettings *settings )
     mainLayout->insertWidget( 0, controls, 0, Qt::AlignBottom );
     mainLayout->insertWidget( 0, inputC, 0, Qt::AlignBottom );
 
-    /* Create the Speed Control Widget */
-    speedControl = new SpeedControlWidget( p_intf );
-    speedControlMenu = new QMenu( this );
-
-    QWidgetAction *widgetAction = new QWidgetAction( speedControl );
-    widgetAction->setDefaultWidget( speedControl );
-    speedControlMenu->addAction( widgetAction );
-
     /* Visualisation */
     /* Disabled for now, they SUCK */
     #if 0
@@ -590,15 +572,6 @@ void MainInterface::debug()
 }
 
 /****************************************************************************
- * Small right-click menu for rate control
- ****************************************************************************/
-void MainInterface::showSpeedMenu( QPoint pos )
-{
-    speedControlMenu->exec( QCursor::pos() - pos
-                          + QPoint( 0, speedLabel->height() ) );
-}
-
-/****************************************************************************
  * Video Handling
  ****************************************************************************/
 
@@ -859,23 +832,11 @@ void MainInterface::setStatus( int status )
 {
     msg_Dbg( p_intf, "Updating the stream status: %i", status );
 
-    speedControl->setEnable( THEMIM->getIM()->hasInput() );
-
     /* And in the systray for the menu */
     if( sysTray )
         QVLCMenu::updateSystrayMenu( this, p_intf );
 }
 
-void MainInterface::setRate( int rate )
-{
-    QString str;
-    str.setNum( ( 1000 / (double)rate ), 'f', 2 );
-    str.append( "x" );
-    speedLabel->setText( str );
-    speedLabel->setToolTip( str );
-    speedControl->updateControls( rate );
-}
-
 /*****************************************************************************
  * Systray Icon and Systray Menu
  *****************************************************************************/
diff --git a/modules/gui/qt4/main_interface.hpp b/modules/gui/qt4/main_interface.hpp
index 290e187..f5b4ed3 100644
--- a/modules/gui/qt4/main_interface.hpp
+++ b/modules/gui/qt4/main_interface.hpp
@@ -139,8 +139,6 @@ private:
     input_thread_t      *p_input;    ///< Main input associated to the playlist
 
     /* Status Bar */
-    QLabel              *timeLabel;
-    QLabel              *speedLabel;
     QLabel              *nameLabel;
 
     virtual void customEvent( QEvent *);
@@ -164,7 +162,6 @@ private slots:
     void debug();
     void doComponentsUpdate();
     void setStatus( int );
-    void setRate( int );
     void setName( QString );
     void setVLCWindowsTitle( QString title = "" );
 #if 0
@@ -173,7 +170,6 @@ private slots:
     void handleSystrayClick( QSystemTrayIcon::ActivationReason );
     void updateSystrayTooltipName( QString );
     void updateSystrayTooltipStatus( int );
-    void showSpeedMenu( QPoint );
     void updateRecentsMenu();
 signals:
     void askReleaseVideo( );




More information about the vlc-devel mailing list