* Added use of channel server for skins: still experimental
[vlc.git] / modules / gui / skins / src / event.h
1 /*****************************************************************************
2  * event.h: Event class
3  *****************************************************************************
4  * Copyright (C) 2003 VideoLAN
5  * $Id: event.h,v 1.6 2003/04/14 10:00:38 karibu Exp $
6  *
7  * Authors: Olivier Teulière <ipkiss@via.ecp.fr>
8  *          Emmanuel Puig    <karibu@via.ecp.fr>
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., 59 Temple Place - Suite 330, Boston, MA  02111,
23  * USA.
24  *****************************************************************************/
25
26
27 #ifndef VLC_SKIN_EVENT
28 #define VLC_SKIN_EVENT
29
30 //--- GENERAL ---------------------------------------------------------------
31 #include <string>
32 #include <list>
33 using namespace std;
34
35
36
37 //---------------------------------------------------------------------------
38 // VLC specific messages
39 //---------------------------------------------------------------------------
40
41 #define MAX_EVENT_SIZE 30
42 #define MAX_PARAM_SIZE 20
43 #define EVENT_MAX_BUFFER_SIZE 20
44
45 #if !defined _WIN32
46 #define WM_APP 0x8000
47 #endif
48
49 #define VLC_MESSAGE         (WM_APP)
50 #define VLC_WINDOW          (WM_APP + 1000)
51 #define VLC_CONTROL         (WM_APP + 2000)
52
53 // VLC messages
54 #define VLC_NOTHING         (VLC_MESSAGE + 1)
55 #define VLC_SHOW            (VLC_MESSAGE + 2)
56 #define VLC_HIDE            (VLC_MESSAGE + 3)
57
58 #define VLC_QUIT            (VLC_MESSAGE + 4)
59 #define VLC_OPEN            (VLC_MESSAGE + 5)
60 #define VLC_LOAD_SKIN       (VLC_MESSAGE + 6)
61 #define VLC_DROP            (VLC_MESSAGE + 7)
62
63 #define VLC_LOG_SHOW        (VLC_MESSAGE + 20)
64 #define VLC_LOG_CLEAR       (VLC_MESSAGE + 22)
65
66 #define VLC_INTF_REFRESH    (VLC_MESSAGE + 30)
67 #define VLC_CHANGE_TRAY     (VLC_MESSAGE + 31)
68 #define VLC_CHANGE_TASKBAR  (VLC_MESSAGE + 32)
69
70 #define VLC_FULLSCREEN      (VLC_MESSAGE + 40)
71
72 // Stream control
73 #define VLC_PLAY            (VLC_MESSAGE + 101)
74 #define VLC_STOP            (VLC_MESSAGE + 102)
75 #define VLC_PAUSE           (VLC_MESSAGE + 103)
76 #define VLC_NEXT            (VLC_MESSAGE + 104)
77 #define VLC_PREV            (VLC_MESSAGE + 105)
78 #define VLC_STREAMPOS       (VLC_MESSAGE + 106)
79 #define VLC_ENDSTREAMPOS    (VLC_MESSAGE + 107)
80 #define VLC_TOTALSTREAMPOS  (VLC_MESSAGE + 108)
81 #define VLC_STREAMNAME      (VLC_MESSAGE + 109)
82 #define VLC_HELP_TEXT       (VLC_MESSAGE + 110)
83
84 // Volume control
85 #define VLC_VOLUME_CHANGE   (VLC_MESSAGE + 201)
86 #define VLC_VOLUME_MUTE     (VLC_MESSAGE + 202)
87 #define VLC_VOLUME_UP       (VLC_MESSAGE + 203)
88 #define VLC_VOLUME_DOWN     (VLC_MESSAGE + 204)
89 #define VLC_VOLUME_SET      (VLC_MESSAGE + 205)
90
91 // Playlist events
92 #define VLC_PLAYLIST_ADD_FILE (VLC_MESSAGE + 301)
93 #define VLC_TEST_ALL_CLOSED (VLC_MESSAGE + 600)
94
95 // Network events
96 #define VLC_NET_ADDUDP      (VLC_MESSAGE + 701)
97 #define VLC_NET_ADDCS       (VLC_MESSAGE + 703)
98
99 // Window event
100 #define WINDOW_MOVE         (VLC_WINDOW + 1)
101 #define WINDOW_OPEN         (VLC_WINDOW + 2)
102 #define WINDOW_CLOSE        (VLC_WINDOW + 3)
103 #define WINDOW_SHOW         (VLC_WINDOW + 4)
104 #define WINDOW_HIDE         (VLC_WINDOW + 5)
105 #define WINDOW_FADE         (VLC_WINDOW + 6)
106 #define WINDOW_LEAVE        (VLC_WINDOW + 7)
107 #define WINDOW_REFRESH      (VLC_WINDOW + 8)
108
109 // Control event
110 #define CTRL_ENABLED        (VLC_CONTROL + 1)
111 #define CTRL_VISIBLE        (VLC_CONTROL + 2)
112 #define CTRL_SYNCHRO        (VLC_CONTROL + 3)
113
114 #define CTRL_SET_SLIDER     (VLC_CONTROL + 10)
115 #define CTRL_SET_TEXT       (VLC_CONTROL + 11)
116
117 // Control event by ID
118 #define CTRL_ID_VISIBLE     (VLC_CONTROL + 100)
119 #define CTRL_ID_ENABLED     (VLC_CONTROL + 101)
120 #define CTRL_ID_MOVE        (VLC_CONTROL + 102)
121
122 // Control definition
123 #define CTRL_SLIDER         (VLC_CONTROL + 301)
124 #define CTRL_TIME           (VLC_CONTROL + 302)
125 #define CTRL_PLAYLIST       (VLC_CONTROL + 303)
126
127 // Playlist
128 #define PLAYLIST_ID_DEL     (VLC_CONTROL + 400)
129
130 //---------------------------------------------------------------------------
131 struct intf_thread_t;
132 class GenericControl;
133 class Window;
134 class Event;
135
136
137
138 //---------------------------------------------------------------------------
139 // EVENT CLASS
140 //---------------------------------------------------------------------------
141 class Event
142 {
143     protected:
144         string          EventDesc;
145         unsigned int    Message;
146         unsigned int    Param1;
147         long            Param2;
148         unsigned int    GetMessageType( string desc );
149         string          Shortcut;
150         int             KeyModifier;
151         int             Key;
152         intf_thread_t * p_intf;
153
154         // Transform expr to special boolean :
155         //   0 = false
156         //   1 = true
157         //   2 = change boolean
158         int GetBool( string expr );
159
160     public:
161         // Constructor
162         Event( intf_thread_t *_p_intf, string Desc, string shortcut );
163         Event( intf_thread_t *_p_intf, unsigned int msg, unsigned int par1,
164                long par2 );
165
166         // Destructor
167         virtual ~Event();
168         void DestructParameters( bool force = false );
169
170         // General operations on events
171         GenericControl * FindControl( string id );
172         void CreateEvent();
173         virtual void CreateOSEvent( string para1, string para2,
174                                     string para3 ) = 0;
175         virtual bool IsEqual( Event *evt );
176
177         // Event sending
178         virtual bool SendEvent() = 0;
179         void PostTextMessage( string text );
180         void PostSynchroMessage( bool autodelete = false );
181
182         // Shortcuts methods
183         bool MatchShortcut( int key, int mod );
184         void CreateShortcut();
185
186         // Getters
187         unsigned int GetMessage()   { return Message; }
188         unsigned int GetParam1()    { return Param1; }
189         long         GetParam2()    { return Param2; }
190
191         // Setters
192         void SetParam1( unsigned int p1 )    { Param1 = p1; }
193         void SetParam2( unsigned int p2 )    { Param2 = p2; }
194 };
195 //---------------------------------------------------------------------------
196
197 #define ACTION_MATCH_ALL    0
198 #define ACTION_MATCH_FIRST  1
199 #define ACTION_MATCH_ONE    2
200
201 //---------------------------------------------------------------------------
202 class Action
203 {
204     private:
205         list<Event *> EventList;
206         int GetBool( string expr );
207         intf_thread_t * p_intf;
208
209     public:
210         // Constructor
211         Action::Action( intf_thread_t *_p_intf, string code );
212
213         // Destructor
214         Action::~Action();
215
216         // Send event
217         bool SendEvent();
218         bool MatchEvent( Event *evt, int flag = ACTION_MATCH_ALL );
219 };
220 //---------------------------------------------------------------------------
221
222 #endif