Updated qt4 to use intf-event.
[vlc.git] / modules / gui / qt4 / input_manager.hpp
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$
6  *
7  * Authors: ClĂ©ment Stenac <zorglub@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
24 #ifndef _INPUT_MANAGER_H_
25 #define _INPUT_MANAGER_H_
26
27 #ifdef HAVE_CONFIG_H
28 # include "config.h"
29 #endif
30
31 #include <vlc_common.h>
32 #include <vlc_input.h>
33
34 #include "qt4.hpp"
35
36 #include <QObject>
37 #include <QEvent>
38
39 enum {
40     PositionUpdate_Type = QEvent::User + IMEventType + 1,
41     ItemChanged_Type,
42     ItemStateChanged_Type,
43     ItemTitleChanged_Type,
44     ItemRateChanged_Type,
45     VolumeChanged_Type,
46     ItemEsChanged_Type,
47     ItemTeletextChanged_Type,
48     InterfaceVoutUpdate_Type,
49     StatisticsUpdate_Type,
50     MetaChanged_Type,
51
52     FullscreenControlToggle_Type = QEvent::User + IMEventType + 20,
53     FullscreenControlShow_Type,
54     FullscreenControlHide_Type,
55     FullscreenControlPlanHide_Type,
56 };
57
58 class IMEvent : public QEvent
59 {
60 friend class InputManager;
61     public:
62     IMEvent( int type, int id ) : QEvent( (QEvent::Type)(type) )
63     { i_id = id ; } ;
64     virtual ~IMEvent() {};
65
66 private:
67     int i_id;
68 };
69
70 class InputManager : public QObject
71 {
72     Q_OBJECT;
73     friend class MainInputManager;
74
75 public:
76     InputManager( QObject *, intf_thread_t * );
77     virtual ~InputManager();
78
79     void delInput();
80     bool hasInput() { return p_input && !p_input->b_dead
81                             && vlc_object_alive (p_input); }
82     bool hasAudio();
83     bool hasVideo() { return hasInput() && b_video; }
84
85     QString getName() { return oldName; }
86
87 private:
88     intf_thread_t  *p_intf;
89     input_thread_t *p_input;
90     int             i_input_id;
91     int             i_old_playing_status;
92     QString         oldName;
93     QString         artUrl;
94     int             i_rate;
95     bool            b_video;
96     mtime_t         timeA, timeB;
97
98     void customEvent( QEvent * );
99
100     void addCallbacks();
101     void delCallbacks();
102
103     void UpdateRate();
104     void UpdateMeta();
105     void UpdateStatus();
106     void UpdateNavigation();
107     void UpdatePosition();
108     void UpdateSPU();
109     void UpdateTeletext();
110     void UpdateArt();
111     void UpdateVout();
112     void UpdateStats();
113
114     void AtoBLoop( int );
115
116 public slots:
117     void setInput( input_thread_t * ); ///< Our controlled input changed
118     void sliderUpdate( float ); ///< User dragged the slider. We get new pos
119     /* SpeedRate Rate Management */
120     void reverse();
121     void slower();
122     void faster();
123     void normalRate();
124     void setRate( int );
125     /* Menus */
126     void sectionNext();
127     void sectionPrev();
128     void sectionMenu();
129     /* Teletext */
130     void telexSetPage( int );          ///< Goto teletext page
131     void telexSetTransparency( bool ); ///< Transparency on teletext background
132     void telexActivation( bool );      ///< Enable disable teletext buttons
133     void activateTeletext( bool );     ///< Toggle buttons after click
134     /* A to B Loop */
135     void setAtoB();
136
137 private slots:
138     void togglePlayPause();
139
140 signals:
141     /// Send new position, new time and new length
142     void positionUpdated( float , int, int );
143     void rateChanged( int );
144     void nameChanged( QString );
145     /// Used to signal whether we should show navigation buttons
146     void titleChanged( bool );
147     void chapterChanged( bool );
148     /// Statistics are updated
149     void statisticsUpdated( input_item_t* );
150     /// Play/pause status
151     void statusChanged( int );
152     void artChanged( input_item_t* );
153     /// Teletext
154     void teletextPossible( bool );
155     void teletextActivated( bool );
156     void teletextTransparencyActivated( bool );
157     void newTelexPageSet( int );
158     /// Advanced buttons
159     void AtoBchanged( bool, bool );
160     /// Vout
161     void voutChanged( bool );
162 };
163
164 class MainInputManager : public QObject
165 {
166     Q_OBJECT;
167 public:
168     static MainInputManager *getInstance( intf_thread_t *_p_intf )
169     {
170         if( !instance )
171             instance = new MainInputManager( _p_intf );
172         return instance;
173     }
174     static void killInstance()
175     {
176         if( instance ) delete instance;
177     }
178     virtual ~MainInputManager();
179
180     input_thread_t *getInput() { return p_input; };
181     InputManager *getIM() { return im; };
182
183 private:
184     MainInputManager( intf_thread_t * );
185     static MainInputManager *instance;
186
187     void customEvent( QEvent * );
188
189     InputManager            *im;
190     input_thread_t          *p_input;
191     intf_thread_t           *p_intf;
192
193 public slots:
194     void togglePlayPause();
195     void stop();
196     void next();
197     void prev();
198
199 signals:
200     void inputChanged( input_thread_t * );
201     void volumeChanged();
202 };
203
204 #endif