]> git.sesse.net Git - vlc/commitdiff
Qt: separate speedLabel code from interface code
authorJean-Baptiste Kempf <jb@videolan.org>
Mon, 29 Dec 2008 19:03:21 +0000 (20:03 +0100)
committerJean-Baptiste Kempf <jb@videolan.org>
Tue, 30 Dec 2008 12:19:35 +0000 (13:19 +0100)
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
modules/gui/qt4/components/interface_widgets.cpp
modules/gui/qt4/components/interface_widgets.hpp
modules/gui/qt4/main_interface.cpp
modules/gui/qt4/main_interface.hpp

index c74188c1d9dd24b061feb7cbbd1d668fdad9f911..036a429cf8ebe7bc4851ca5d66ea0a95692a137b 100644 (file)
@@ -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 )
index f4c9f98c01efb36a7c98e8cb34d06a7b3b869903..8fa6f8ee3aa613593f2adccd5632014ff150fbde 100644 (file)
@@ -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 );
index 7ea23020d14dbe08f78a968f392b2ab38c699fe1..6de7b03360fbc26a5ed4db344cd700f3775d3828 100644 (file)
 #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
@@ -589,15 +571,6 @@ void MainInterface::debug()
 #endif
 }
 
-/****************************************************************************
- * 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
  *****************************************************************************/
index 290e187eb3db1a66d990b45eb4a9661bc4ab7b8c..f5b4ed35b7a61dd58fb9f5f2ee29cd6e3b781984 100644 (file)
@@ -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( );