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