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

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * input_manager.hpp : Manage an input and interact with its GUI elements
  3.  ****************************************************************************
  4.  * Copyright (C) 2006-2008 the VideoLAN team
  5.  * $Id: d9b6630b28691648fc51c2120268ce0034b90e82 $
  6.  *
  7.  * Authors: Clément Stenac <zorglub@videolan.org>
  8.  *          Jean-Baptiste <jb@videolan.org>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  23.  *****************************************************************************/
  24. #ifndef QVLC_INPUT_MANAGER_H_
  25. #define QVLC_INPUT_MANAGER_H_
  26. #ifdef HAVE_CONFIG_H
  27. # include "config.h"
  28. #endif
  29. #include <vlc_input.h>
  30. #include <vlc_vout.h>
  31. #include <vlc_aout.h>
  32. #include "qt4.hpp"
  33. #include <QObject>
  34. #include <QEvent>
  35. enum {
  36.     PositionUpdate_Type = QEvent::User + IMEventType + 1,
  37.     ItemChanged_Type,
  38.     ItemStateChanged_Type,
  39.     ItemTitleChanged_Type,
  40.     ItemRateChanged_Type,
  41.     VolumeChanged_Type,
  42.     ItemEsChanged_Type,
  43.     ItemTeletextChanged_Type,
  44.     InterfaceVoutUpdate_Type,
  45.     StatisticsUpdate_Type, /*10*/
  46.     InterfaceAoutUpdate_Type,
  47.     MetaChanged_Type,
  48.     NameChanged_Type,
  49.     InfoChanged_Type,
  50.     SynchroChanged_Type,
  51.     CachingEvent_Type,
  52.     BookmarksChanged_Type,
  53.     RecordingEvent_Type,
  54.     ProgramChanged_Type,
  55. /*    SignalChanged_Type, */
  56.     FullscreenControlToggle_Type = QEvent::User + IMEventType + 20,
  57.     FullscreenControlShow_Type,
  58.     FullscreenControlHide_Type,
  59.     FullscreenControlPlanHide_Type,
  60. };
  61. class IMEvent : public QEvent
  62. {
  63. friend class InputManager;
  64.     public:
  65.     IMEvent( int type, int id ) : QEvent( (QEvent::Type)(type) )
  66.     { i_id = id ; }
  67.     virtual ~IMEvent() {}
  68. private:
  69.     int i_id;
  70. };
  71. class InputManager : public QObject
  72. {
  73.     Q_OBJECT;
  74.     friend class MainInputManager;
  75. public:
  76.     InputManager( QObject *, intf_thread_t * );
  77.     virtual ~InputManager();
  78.     void delInput();
  79.     bool hasInput()
  80.     {
  81.         return p_input /* We have an input */
  82.             && !p_input->b_dead /* not dead yet, */
  83.             && !p_input->b_eof  /* not EOF either, */
  84.             && vlc_object_alive (p_input); /* and the VLC object is alive */
  85.     }
  86.     bool hasAudio();
  87.     bool hasVideo() { return hasInput() && b_video; }
  88.     void requestArtUpdate();
  89.     QString getName() { return oldName; }
  90. private:
  91.     intf_thread_t  *p_intf;
  92.     input_thread_t *p_input;
  93.     int             i_input_id;
  94.     int             i_old_playing_status;
  95.     QString         oldName;
  96.     QString         artUrl;
  97.     int             i_rate;
  98.     float           f_cache;
  99.     bool            b_video;
  100.     mtime_t         timeA, timeB;
  101.     void customEvent( QEvent * );
  102.     void addCallbacks();
  103.     void delCallbacks();
  104.     void UpdateRate();
  105.     void UpdateName();
  106.     void UpdateStatus();
  107.     void UpdateNavigation();
  108.     void UpdatePosition();
  109.     void UpdateTeletext();
  110.     void UpdateArt();
  111.     void UpdateInfo();
  112.     void UpdateMeta();
  113.     void UpdateMeta(int);
  114.     void UpdateVout();
  115.     void UpdateAout();
  116.     void UpdateStats();
  117.     void UpdateCaching();
  118.     void UpdateRecord();
  119.     void UpdateProgramEvent();
  120. public slots:
  121.     void setInput( input_thread_t * ); ///< Our controlled input changed
  122.     void sliderUpdate( float ); ///< User dragged the slider. We get new pos
  123.     /* SpeedRate Rate Management */
  124.     void reverse();
  125.     void slower();
  126.     void faster();
  127.     void littlefaster();
  128.     void littleslower();
  129.     void normalRate();
  130.     void setRate( int );
  131.     /* Jumping */
  132.     void jumpFwd();
  133.     void jumpBwd();
  134.     /* Menus */
  135.     void sectionNext();
  136.     void sectionPrev();
  137.     void sectionMenu();
  138.     /* Teletext */
  139.     void telexSetPage( int );          ///< Goto teletext page
  140.     void telexSetTransparency( bool ); ///< Transparency on teletext background
  141.     void activateTeletext( bool );     ///< Toggle buttons after click
  142.     /* A to B Loop */
  143.     void setAtoB();
  144. private slots:
  145.     void togglePlayPause();
  146.     void AtoBLoop( float, int, int );
  147. signals:
  148.     /// Send new position, new time and new length
  149.     void positionUpdated( float , int, int );
  150.     void rateChanged( int );
  151.     void nameChanged( QString );
  152.     /// Used to signal whether we should show navigation buttons
  153.     void titleChanged( bool );
  154.     void chapterChanged( bool );
  155.     /// Statistics are updated
  156.     void statisticsUpdated( input_item_t* );
  157.     void infoChanged( input_item_t* );
  158.     void metaChanged( input_item_t* );
  159.     void metaChanged( int );
  160.     void artChanged( QString );
  161.     /// Play/pause status
  162.     void statusChanged( int );
  163.     void recordingStateChanged( bool );
  164.     /// Teletext
  165.     void teletextPossible( bool );
  166.     void teletextActivated( bool );
  167.     void teletextTransparencyActivated( bool );
  168.     void newTelexPageSet( int );
  169.     /// Advanced buttons
  170.     void AtoBchanged( bool, bool );
  171.     /// Vout
  172.     void voutChanged( bool );
  173.     void voutListChanged( vout_thread_t **pp_vout, int i_vout );
  174.     /// Other
  175.     void synchroChanged();
  176.     void bookmarksChanged();
  177.     void cachingChanged( float );
  178.     /// Program Event changes
  179.     void encryptionChanged( bool );
  180. };
  181. class MainInputManager : public QObject
  182. {
  183.     Q_OBJECT;
  184. public:
  185.     static MainInputManager *getInstance( intf_thread_t *_p_intf )
  186.     {
  187.         if( !instance )
  188.             instance = new MainInputManager( _p_intf );
  189.         return instance;
  190.     }
  191.     static void killInstance()
  192.     {
  193.         delete instance;
  194.         instance = NULL;
  195.     }
  196.     input_thread_t *getInput() { return p_input; };
  197.     InputManager *getIM() { return im; };
  198.     vout_thread_t* getVout();
  199.     aout_instance_t *getAout();
  200. private:
  201.     MainInputManager( intf_thread_t * );
  202.     virtual ~MainInputManager();
  203.     static MainInputManager *instance;
  204.     void customEvent( QEvent * );
  205.     InputManager            *im;
  206.     input_thread_t          *p_input;
  207.     intf_thread_t           *p_intf;
  208. public slots:
  209.     void togglePlayPause();
  210.     void stop();
  211.     void next();
  212.     void prev();
  213.     void activatePlayQuit( bool );
  214. signals:
  215.     void inputChanged( input_thread_t * );
  216.     void volumeChanged();
  217. };
  218. #endif