controller.hpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:8k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * Controller.hpp : Controller for the main interface
  3.  ****************************************************************************
  4.  * Copyright (C) 2006-2008 the VideoLAN team
  5.  * $Id: 9e0aa9a9235e4b7a16490435ff65ee6ea2769e8d $
  6.  *
  7.  * Authors: Jean-Baptiste Kempf <jb@videolan.org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. #ifndef QVLC_CONTROLLER_H_
  24. #define QVLC_CONTROLLER_H_
  25. #ifdef HAVE_CONFIG_H
  26. # include "config.h"
  27. #endif
  28. #include "qt4.hpp"
  29. #include <QFrame>
  30. #include <QString>
  31. #define MAIN_TB1_DEFAULT "64;39;64;38;65"
  32. #define MAIN_TB2_DEFAULT "0-2;64;3;1;4;64;7;10;9;64-4;37;65;35-4"
  33. #define ADV_TB_DEFAULT "12;11;13;14"
  34. #define INPT_TB_DEFAULT "5-1;15-1;33;6-1"
  35. #define FSC_TB_DEFAULT "0-2;64;3;1;4;64;37;64;38;64;8;65;35-4;34"
  36. #define I_PLAY_TOOLTIP N_("PlaynIf the playlist is empty, open a medium")
  37. class QPixmap;
  38. class QLabel;
  39. class QGridLayout;
  40. class QHBoxLayout;
  41. class QBoxLayout;
  42. class QAbstractSlider;
  43. class QAbstractButton;
  44. class InputSlider;
  45. class QToolButton;
  46. class VolumeClickHandler;
  47. class WidgetListing;
  48. class QSignalMapper;
  49. class QTimer;
  50. typedef enum buttonType_e
  51. {
  52.     PLAY_BUTTON,
  53.     STOP_BUTTON,
  54.     OPEN_BUTTON,
  55.     PREVIOUS_BUTTON,
  56.     NEXT_BUTTON,
  57.     SLOWER_BUTTON,
  58.     FASTER_BUTTON,
  59.     FULLSCREEN_BUTTON,
  60.     DEFULLSCREEN_BUTTON,
  61.     EXTENDED_BUTTON,
  62.     PLAYLIST_BUTTON,
  63.     SNAPSHOT_BUTTON,
  64.     RECORD_BUTTON,
  65.     ATOB_BUTTON,
  66.     FRAME_BUTTON,
  67.     REVERSE_BUTTON,
  68.     SKIP_BACK_BUTTON,
  69.     SKIP_FW_BUTTON,
  70.     QUIT_BUTTON,
  71.     BUTTON_MAX,
  72.     SPLITTER = 0x20,
  73.     INPUT_SLIDER,
  74.     TIME_LABEL,
  75.     VOLUME,
  76.     VOLUME_SPECIAL,
  77.     MENU_BUTTONS,
  78.     TELETEXT_BUTTONS,
  79.     ADVANCED_CONTROLLER,
  80.     SPECIAL_MAX,
  81.     WIDGET_SPACER = 0x40,
  82.     WIDGET_SPACER_EXTEND,
  83.     WIDGET_MAX,
  84. } buttonType_e;
  85. static const char* const nameL[BUTTON_MAX] = { N_("Play"), N_("Stop"), N_("Open"),
  86.     N_("Previous"), N_("Next"), N_("Slower"), N_("Faster"), N_("Fullscreen"),
  87.    N_("De-Fullscreen"), N_("Extended panel"), N_("Playlist"), N_("Snapshot"),
  88.    N_("Record"), N_("A->B Loop"), N_("Frame By Frame"), N_("Trickplay Reverse"),
  89.    N_("Step backward" ), N_("Step forward"), N_("Quit") };
  90. static const char* const tooltipL[BUTTON_MAX] = { I_PLAY_TOOLTIP,
  91.     N_("Stop playback"), N_("Open a medium"),
  92.     N_("Previous media in the playlist"),
  93.     N_("Next media in the playlist"), N_("Slower"), N_("Faster"),
  94.     N_("Toggle the video in fullscreen"), N_("Toggle the video out fullscreen"),
  95.     N_("Show extended settings" ), N_( "Show playlist" ),
  96.     N_( "Take a snapshot" ), N_( "Record" ),
  97.     N_( "Loop from point A to point B continuously." ), N_("Frame by frame"),
  98.     N_("Reverse"), N_("Step backward"), N_("Step forward"), N_("Quit") };
  99. static const QString iconL[BUTTON_MAX] ={ ":/play_b", ":/stop_b", ":/eject",
  100.     ":/previous_b", ":/next_b", ":/slower", ":/faster", ":/fullscreen",
  101.     ":/defullscreen", ":/extended", ":/playlist", ":/snapshot", ":/record",
  102.     ":/atob_nob", ":/frame", ":/reverse", ":/skip_back", ":/skip_fw",
  103.     ":/clear" };
  104. enum
  105. {
  106.    WIDGET_NORMAL = 0x0,
  107.    WIDGET_FLAT   = 0x1,
  108.    WIDGET_BIG    = 0x2,
  109.    WIDGET_SHINY  = 0x4,
  110. };
  111. class AdvControlsWidget;
  112. class AbstractController : public QFrame
  113. {
  114.     friend class WidgetListing; /* For ToolBar Edition HACKS */
  115.     Q_OBJECT
  116. public:
  117.     AbstractController( intf_thread_t  *_p_i, QWidget *_parent = 0 );
  118. protected:
  119.     intf_thread_t       *p_intf;
  120.     QSignalMapper       *toolbarActionsMapper;
  121.     QHBoxLayout         *controlLayout;
  122.     /* Change to BoxLayout if both dir are needed */
  123.     AdvControlsWidget   *advControls;
  124.     void parseAndCreate( const QString& config, QBoxLayout *controlLayout );
  125.     virtual void createAndAddWidget( QBoxLayout *controlLayout, int i_index,
  126.                                      buttonType_e i_type, int i_option );
  127.     QWidget *createWidget( buttonType_e, int options = WIDGET_NORMAL );
  128. private:
  129.     static void setupButton( QAbstractButton * );
  130.     QFrame *discFrame();
  131.     QFrame *telexFrame();
  132.     void applyAttributes( QToolButton *, bool b_flat, bool b_big );
  133. protected slots:
  134.     virtual void setStatus( int );
  135. signals:
  136.     void inputExists( bool ); /// This might be usefull in the IM ?
  137.     void inputPlaying( bool ); /// This might be usefull in the IM ?
  138.     void inputIsRecordable( bool ); /// same ?
  139.     void inputIsTrickPlayable( bool ); /// same ?
  140.     void sizeChanged();
  141. };
  142. /* Advanced Button Bar */
  143. class AdvControlsWidget : public AbstractController
  144. {
  145.     Q_OBJECT
  146. public:
  147.     AdvControlsWidget( intf_thread_t *, QWidget *_parent = 0 );
  148. };
  149. /* Slider Bar */
  150. class InputControlsWidget : public AbstractController
  151. {
  152.     Q_OBJECT
  153. public:
  154.     InputControlsWidget( intf_thread_t * , QWidget *_parent = 0 );
  155. };
  156. /* Button Bar */
  157. class ControlsWidget : public AbstractController
  158. {
  159.     Q_OBJECT
  160. public:
  161.     /* p_intf, advanced control visible or not, blingbling or not */
  162.     ControlsWidget( intf_thread_t *_p_i, bool b_advControls,
  163.                     QWidget *_parent = 0 );
  164.     virtual ~ControlsWidget();
  165. protected:
  166.     friend class MainInterface;
  167.     bool                 b_advancedVisible;
  168. protected slots:
  169.     void toggleAdvanced();
  170. signals:
  171.     void advancedControlsToggled( bool );
  172. };
  173. /* to trying transparency with fullscreen controller on windows enable that */
  174. /* it can be enabled on-non windows systems,
  175.    but it will be transparent only with composite manager */
  176. #define HAVE_TRANSPARENCY 1
  177. /* Default value of opacity for FS controller */
  178. #define DEFAULT_OPACITY 0.70
  179. /***********************************
  180.  * Fullscreen controller
  181.  ***********************************/
  182. class FullscreenControllerWidget : public AbstractController
  183. {
  184.     Q_OBJECT
  185. public:
  186.     FullscreenControllerWidget( intf_thread_t *, QWidget *_parent = 0  );
  187.     virtual ~FullscreenControllerWidget();
  188.     /* Vout */
  189.     void fullscreenChanged( vout_thread_t *, bool b_fs, int i_timeout );
  190.     void mouseChanged( vout_thread_t *, int i_mousex, int i_mousey );
  191. public slots:
  192.     void setVoutList( vout_thread_t **, int );
  193. protected:
  194.     friend class MainInterface;
  195.     virtual void mouseMoveEvent( QMouseEvent *event );
  196.     virtual void mousePressEvent( QMouseEvent *event );
  197.     virtual void mouseReleaseEvent( QMouseEvent *event );
  198.     virtual void enterEvent( QEvent *event );
  199.     virtual void leaveEvent( QEvent *event );
  200.     virtual void keyPressEvent( QKeyEvent *event );
  201. private slots:
  202.     void showFSC();
  203.     void planHideFSC();
  204.     void hideFSC() { hide(); }
  205.     void slowHideFSC();
  206.     void centerFSC( int );
  207. private:
  208.     virtual void customEvent( QEvent *event );
  209.     QTimer *p_hideTimer;
  210. #if HAVE_TRANSPARENCY
  211.     QTimer *p_slowHideTimer;
  212.     bool b_slow_hide_begin;
  213.     int  i_slow_hide_timeout;
  214. #endif
  215.     int i_mouse_last_x, i_mouse_last_y;
  216.     bool b_mouse_over;
  217.     int i_screennumber;
  218.     QRect screenRes;
  219.     /* List of vouts currently tracked */
  220.     QList<vout_thread_t *> vout;
  221.     /* Shared variable between FSC and VLC (protected by a lock) */
  222.     vlc_mutex_t lock;
  223.     bool        b_fullscreen;
  224.     int         i_hide_timeout;  /* FSC hiding timeout, same as mouse hiding timeout */
  225.     int i_mouse_last_move_x;
  226.     int i_mouse_last_move_y;
  227. };
  228. #endif