Qt: Allow fullscreen controller to be stacked at the bottom
authorEdward Wang <edward.c.wang@compdigitec.com>
Thu, 24 Nov 2011 00:30:46 +0000 (01:30 +0100)
committerJean-Baptiste Kempf <jb@videolan.org>
Thu, 24 Nov 2011 00:37:39 +0000 (01:37 +0100)
Close #3120

Modified-by: Jean-Baptiste Kempf <jb@videolan.org>
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
modules/gui/qt4/actions_manager.cpp
modules/gui/qt4/actions_manager.hpp
modules/gui/qt4/components/controller.cpp
modules/gui/qt4/components/controller.hpp
modules/gui/qt4/main_interface.hpp

index 401ef30..7cca077 100644 (file)
@@ -34,6 +34,7 @@
 #include "dialogs_provider.hpp" /* Opening Dialogs */
 #include "input_manager.hpp"
 #include "main_interface.hpp" /* Show playlist */
+#include "components/controller.hpp" /* Toggle FSC controller width */
 
 ActionsManager * ActionsManager::instance = NULL;
 
@@ -93,6 +94,10 @@ void ActionsManager::doAction( int id_action )
             THEDP->mediaInfoDialog(); break;
         case OPEN_SUB_ACTION:
             THEDP->loadSubtitlesFile(); break;
+        case FULLWIDTH_ACTION:
+            if( p_intf->p_sys->p_mi )
+                p_intf->p_sys->p_mi->getFullscreenControllerWidget()->toggleFullwidth();
+            break;
         default:
             msg_Dbg( p_intf, "Action: %i", id_action );
             break;
index d73c811..602d8df 100644 (file)
@@ -41,6 +41,7 @@ typedef enum actionType_e
     SLOWER_ACTION,
     FASTER_ACTION,
     FULLSCREEN_ACTION,
+    FULLWIDTH_ACTION,
     EXTENDED_ACTION,
     PLAYLIST_ACTION,
     SNAPSHOT_ACTION,
index 2de9480..5960dc1 100644 (file)
@@ -137,7 +137,8 @@ void AbstractController::parseAndCreate( const QString& config,
             {
                 msg_Warn( p_intf, "Parsing error 3. Please, report this." );
                 continue;
-            }        }
+            }
+        }
 
         createAndAddWidget( controlLayout, -1, i_type, i_option );
     }
@@ -303,6 +304,10 @@ QWidget *AbstractController::createWidget( buttonType_e button, int options )
         ENABLE_ON_VIDEO( FULLSCREENButton );
         }
         break;
+    case FULLWIDTH_BUTTON: {
+            NORMAL_BUTTON( FULLWIDTH );
+        }
+        break;
     case EXTENDED_BUTTON:{
         NORMAL_BUTTON( EXTENDED );
         }
@@ -719,6 +724,8 @@ FullscreenControllerWidget::FullscreenControllerWidget( intf_thread_t *_p_i, QWi
 
     setWindowFlags( Qt::ToolTip );
     setMinimumWidth( 600 );
+    setMinimumHeight( 72 );
+    isWideFSC = false;
 
     setFrameShape( QFrame::StyledPanel );
     setFrameStyle( QFrame::Sunken );
@@ -875,6 +882,23 @@ void FullscreenControllerWidget::slowHideFSC()
 #endif
 }
 
+void FullscreenControllerWidget::toggleFullwidth() {
+    int fswidth = QApplication::desktop()->screenGeometry( var_InheritInteger( p_intf, "qt-fullscreen-screennumber" ) ).width();
+    int fsheight = QApplication::desktop()->screenGeometry( var_InheritInteger( p_intf, "qt-fullscreen-screennumber" ) ).height();
+    if( !isWideFSC ) {
+        /* Dock at the bottom of the screen */
+        setMinimumWidth( fswidth );
+        setGeometry(0, fsheight-72, fswidth, 72);
+    } else {
+        /* Restore half-bar and re-centre */
+        setMinimumWidth( 600 );
+        setGeometry(fswidth/2 - 300, fsheight-72, 600, 72);
+    }
+
+    /* Toggle isWideFSC switch */
+    isWideFSC = !isWideFSC;
+}
+
 /**
  * event handling
  * events: show, hide, start timer for hiding
@@ -953,6 +977,7 @@ void FullscreenControllerWidget::mouseMoveEvent( QMouseEvent *event )
  */
 void FullscreenControllerWidget::mousePressEvent( QMouseEvent *event )
 {
+    if( isWideFSC ) return;
     i_mouse_last_x = event->globalX();
     i_mouse_last_y = event->globalY();
     event->accept();
@@ -960,6 +985,7 @@ void FullscreenControllerWidget::mousePressEvent( QMouseEvent *event )
 
 void FullscreenControllerWidget::mouseReleaseEvent( QMouseEvent *event )
 {
+    if( isWideFSC ) return;
     i_mouse_last_x = -1;
     i_mouse_last_y = -1;
     event->accept();
index 5f9ca15..1b796b7 100644 (file)
@@ -38,7 +38,7 @@
 #define MAIN_TB2_DEFAULT "0-2;64;3;1;4;64;7;9;64;10;20;19;64-4;37;65;35-4"
 #define ADV_TB_DEFAULT "12;11;13;14"
 #define INPT_TB_DEFAULT "5-1;15-1;33;6-1"
-#define FSC_TB_DEFAULT "0-2;64;3;1;4;64;37;64;38;64;8;65;35-4;34"
+#define FSC_TB_DEFAULT "0-2;64;3;1;4;64;37;64;38;64;8;65;25;35-4;34"
 
 #define I_PLAY_TOOLTIP N_("Play\nIf the playlist is empty, open a medium")
 
@@ -87,6 +87,7 @@ typedef enum buttonType_e
     PREVIOUS_BUTTON,
     NEXT_BUTTON,
     OPEN_SUB_BUTTON,
+    FULLWIDTH_BUTTON,
     BUTTON_MAX,
 
     SPLITTER = 0x20,
@@ -108,11 +109,12 @@ typedef enum buttonType_e
 
 static const char* const nameL[BUTTON_MAX] = { N_("Play"), N_("Stop"), N_("Open"),
     N_("Previous/Backward"), N_("Next/Forward"), N_("Slower"), N_("Faster"), N_("Fullscreen"),
-   N_("De-Fullscreen"), N_("Extended panel"), N_("Playlist"), N_("Snapshot"),
-   N_("Record"), N_("A->B Loop"), N_("Frame By Frame"), N_("Trickplay Reverse"),
-   N_("Step backward" ), N_("Step forward"), N_("Quit"), N_("Random"),
-   N_("Loop/Repeat mode"), N_("Information"), N_("Previous"), N_("Next"),
-   N_("Open subtitles file")};
+    N_("De-Fullscreen"), N_("Extended panel"), N_("Playlist"), N_("Snapshot"),
+    N_("Record"), N_("A->B Loop"), N_("Frame By Frame"), N_("Trickplay Reverse"),
+    N_("Step backward" ), N_("Step forward"), N_("Quit"), N_("Random"),
+    N_("Loop/Repeat mode"), N_("Information"), N_("Previous"), N_("Next"),
+    N_("Open subtitles file"), N_("Fullscreen controller width toggle")
+};
 static const char* const tooltipL[BUTTON_MAX] = { I_PLAY_TOOLTIP,
     N_("Stop playback"), N_("Open a medium"),
     N_("Previous media in the playlist, skip backward when keep-pressed"),
@@ -124,7 +126,9 @@ static const char* const tooltipL[BUTTON_MAX] = { I_PLAY_TOOLTIP,
     N_("Reverse"), N_("Step backward"), N_("Step forward"), N_("Quit"),
     N_("Random"), N_("Change the loop and repeat modes"), N_("Information"),
     N_("Previous media in the playlist"), N_("Next media in the playlist"),
-    N_("Open subtitles file")};
+    N_("Open subtitles file"),
+    N_("Dock/undock fullscreen controller to/from bottom of screen")
+};
 static const QString iconL[BUTTON_MAX] ={ ":/toolbar/play_b", ":/toolbar/stop_b",
     ":/toolbar/eject", ":/toolbar/previous_b", ":/toolbar/next_b",
     ":/toolbar/slower", ":/toolbar/faster", ":/toolbar/fullscreen",
@@ -133,7 +137,8 @@ static const QString iconL[BUTTON_MAX] ={ ":/toolbar/play_b", ":/toolbar/stop_b"
     ":/toolbar/frame", ":/toolbar/reverse", ":/toolbar/skip_back",
     ":/toolbar/skip_fw", ":/toolbar/clear", ":/buttons/playlist/shuffle_on",
     ":/buttons/playlist/repeat_all", ":/menu/info",
-    ":/toolbar/previous_b", ":/toolbar/next_b", "" };
+    ":/toolbar/previous_b", ":/toolbar/next_b", "", ":/toolbar/space"
+};
 
 enum
 {
@@ -249,6 +254,7 @@ public:
     /* Vout */
     void fullscreenChanged( vout_thread_t *, bool b_fs, int i_timeout );
     void mouseChanged( vout_thread_t *, int i_mousex, int i_mousey );
+    void toggleFullwidth();
 
 signals:
     void keyPressed( QKeyEvent * );
@@ -298,6 +304,8 @@ private:
     int         i_hide_timeout;  /* FSC hiding timeout, same as mouse hiding timeout */
     int i_mouse_last_move_x;
     int i_mouse_last_move_y;
+
+    bool isWideFSC;
 };
 
 #endif
index fe1fe68..87e04d5 100644 (file)
@@ -82,6 +82,7 @@ public:
     /* Getters */
     QSystemTrayIcon *getSysTray() { return sysTray; }
     QMenu *getSysTrayMenu() { return systrayMenu; }
+    FullscreenControllerWidget* getFullscreenControllerWidget() { return fullscreenControls; }
     int getControlsVisibilityStatus();
     bool isPlDocked() { return ( b_plDocked != false ); }
     bool isInterfaceFullScreen() { return b_interfaceFullScreen; }