PageRenderTime 31ms CodeModel.GetById 16ms app.highlight 10ms RepoModel.GetById 1ms app.codeStats 0ms

/xbmc/guilib/Key.h

http://github.com/xbmc/xbmc
C++ Header | 530 lines | 364 code | 90 blank | 76 comment | 2 complexity | 1d3b1a77f5fd81cb87b3b66fcceb14d8 MD5 | raw file
  1/*!
  2 \file Key.h
  3 \brief
  4 */
  5
  6#ifndef GUILIB_KEY
  7#define GUILIB_KEY
  8
  9#pragma once
 10
 11/*
 12 *      Copyright (C) 2005-2013 Team XBMC
 13 *      http://xbmc.org
 14 *
 15 *  This Program is free software; you can redistribute it and/or modify
 16 *  it under the terms of the GNU General Public License as published by
 17 *  the Free Software Foundation; either version 2, or (at your option)
 18 *  any later version.
 19 *
 20 *  This Program is distributed in the hope that it will be useful,
 21 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 22 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 23 *  GNU General Public License for more details.
 24 *
 25 *  You should have received a copy of the GNU General Public License
 26 *  along with XBMC; see the file COPYING.  If not, see
 27 *  <http://www.gnu.org/licenses/>.
 28 *
 29 */
 30
 31#include "utils/StdString.h"
 32
 33// Reserved 0 - 255
 34//  XBIRRemote.h
 35//  XINPUT_IR_REMOTE-*
 36
 37// Analogue - don't change order
 38#define KEY_BUTTON_A                        256
 39#define KEY_BUTTON_B                        257
 40#define KEY_BUTTON_X                        258
 41#define KEY_BUTTON_Y                        259
 42#define KEY_BUTTON_BLACK                    260
 43#define KEY_BUTTON_WHITE                    261
 44#define KEY_BUTTON_LEFT_TRIGGER             262
 45#define KEY_BUTTON_RIGHT_TRIGGER            263
 46
 47#define KEY_BUTTON_LEFT_THUMB_STICK         264
 48#define KEY_BUTTON_RIGHT_THUMB_STICK        265
 49
 50#define KEY_BUTTON_RIGHT_THUMB_STICK_UP     266 // right thumb stick directions
 51#define KEY_BUTTON_RIGHT_THUMB_STICK_DOWN   267 // for defining different actions per direction
 52#define KEY_BUTTON_RIGHT_THUMB_STICK_LEFT   268
 53#define KEY_BUTTON_RIGHT_THUMB_STICK_RIGHT  269
 54
 55// Digital - don't change order
 56#define KEY_BUTTON_DPAD_UP                  270
 57#define KEY_BUTTON_DPAD_DOWN                271
 58#define KEY_BUTTON_DPAD_LEFT                272
 59#define KEY_BUTTON_DPAD_RIGHT               273
 60
 61#define KEY_BUTTON_START                    274
 62#define KEY_BUTTON_BACK                     275
 63
 64#define KEY_BUTTON_LEFT_THUMB_BUTTON        276
 65#define KEY_BUTTON_RIGHT_THUMB_BUTTON       277
 66
 67#define KEY_BUTTON_LEFT_ANALOG_TRIGGER      278
 68#define KEY_BUTTON_RIGHT_ANALOG_TRIGGER     279
 69
 70#define KEY_BUTTON_LEFT_THUMB_STICK_UP      280 // left thumb stick directions
 71#define KEY_BUTTON_LEFT_THUMB_STICK_DOWN    281 // for defining different actions per direction
 72#define KEY_BUTTON_LEFT_THUMB_STICK_LEFT    282
 73#define KEY_BUTTON_LEFT_THUMB_STICK_RIGHT   283
 74
 75#define KEY_VMOUSE          0xEFFF
 76
 77// 0xF000 -> 0xF200 is reserved for the keyboard; a keyboard press is either
 78#define KEY_VKEY            0xF000 // a virtual key/functional key e.g. cursor left
 79#define KEY_ASCII           0xF100 // a printable character in the range of TRUE ASCII (from 0 to 127) // FIXME make it clean and pure unicode! remove the need for KEY_ASCII
 80#define KEY_UNICODE         0xF200 // another printable character whose range is not included in this KEY code
 81
 82// 0xE000 -> 0xE0FF is reserved for mouse actions
 83#define KEY_MOUSE           0xE000
 84
 85// 0xD000 -> 0xD0FF is reserved for WM_APPCOMMAND messages
 86#define KEY_APPCOMMAND      0xD000
 87
 88// 0xF000 -> 0xF0FF is reserved for mouse actions
 89#define KEY_TOUCH           0xF000
 90
 91#define KEY_INVALID         0xFFFF
 92
 93// actions that we have defined...
 94#define ACTION_NONE                    0
 95#define ACTION_MOVE_LEFT               1
 96#define ACTION_MOVE_RIGHT              2
 97#define ACTION_MOVE_UP                 3
 98#define ACTION_MOVE_DOWN               4
 99#define ACTION_PAGE_UP                 5
100#define ACTION_PAGE_DOWN               6
101#define ACTION_SELECT_ITEM             7
102#define ACTION_HIGHLIGHT_ITEM          8
103#define ACTION_PARENT_DIR              9
104#define ACTION_PREVIOUS_MENU          10
105#define ACTION_SHOW_INFO              11
106
107#define ACTION_PAUSE                  12
108#define ACTION_STOP                   13
109#define ACTION_NEXT_ITEM              14
110#define ACTION_PREV_ITEM              15
111#define ACTION_FORWARD                16 // Can be used to specify specific action in a window, Playback control is handled in ACTION_PLAYER_*
112#define ACTION_REWIND                 17 // Can be used to specify specific action in a window, Playback control is handled in ACTION_PLAYER_*
113
114#define ACTION_SHOW_GUI               18 // toggle between GUI and movie or GUI and visualisation.
115#define ACTION_ASPECT_RATIO           19 // toggle quick-access zoom modes. Can b used in videoFullScreen.zml window id=2005
116#define ACTION_STEP_FORWARD           20 // seek +1% in the movie. Can b used in videoFullScreen.xml window id=2005
117#define ACTION_STEP_BACK              21 // seek -1% in the movie. Can b used in videoFullScreen.xml window id=2005
118#define ACTION_BIG_STEP_FORWARD       22 // seek +10% in the movie. Can b used in videoFullScreen.xml window id=2005
119#define ACTION_BIG_STEP_BACK          23 // seek -10% in the movie. Can b used in videoFullScreen.xml window id=2005
120#define ACTION_SHOW_OSD               24 // show/hide OSD. Can b used in videoFullScreen.xml window id=2005
121#define ACTION_SHOW_SUBTITLES         25 // turn subtitles on/off. Can b used in videoFullScreen.xml window id=2005
122#define ACTION_NEXT_SUBTITLE          26 // switch to next subtitle of movie. Can b used in videoFullScreen.xml window id=2005
123#define ACTION_SHOW_CODEC             27 // show information about file. Can b used in videoFullScreen.xml window id=2005 and in slideshow.xml window id=2007
124#define ACTION_NEXT_PICTURE           28 // show next picture of slideshow. Can b used in slideshow.xml window id=2007
125#define ACTION_PREV_PICTURE           29 // show previous picture of slideshow. Can b used in slideshow.xml window id=2007
126#define ACTION_ZOOM_OUT               30 // zoom in picture during slideshow. Can b used in slideshow.xml window id=2007
127#define ACTION_ZOOM_IN                31 // zoom out picture during slideshow. Can b used in slideshow.xml window id=2007
128#define ACTION_TOGGLE_SOURCE_DEST     32 // used to toggle between source view and destination view. Can be used in myfiles.xml window id=3
129#define ACTION_SHOW_PLAYLIST          33 // used to toggle between current view and playlist view. Can b used in all mymusic xml files
130#define ACTION_QUEUE_ITEM             34 // used to queue a item to the playlist. Can b used in all mymusic xml files
131#define ACTION_REMOVE_ITEM            35 // not used anymore
132#define ACTION_SHOW_FULLSCREEN        36 // not used anymore
133#define ACTION_ZOOM_LEVEL_NORMAL      37 // zoom 1x picture during slideshow. Can b used in slideshow.xml window id=2007
134#define ACTION_ZOOM_LEVEL_1           38 // zoom 2x picture during slideshow. Can b used in slideshow.xml window id=2007
135#define ACTION_ZOOM_LEVEL_2           39 // zoom 3x picture during slideshow. Can b used in slideshow.xml window id=2007
136#define ACTION_ZOOM_LEVEL_3           40 // zoom 4x picture during slideshow. Can b used in slideshow.xml window id=2007
137#define ACTION_ZOOM_LEVEL_4           41 // zoom 5x picture during slideshow. Can b used in slideshow.xml window id=2007
138#define ACTION_ZOOM_LEVEL_5           42 // zoom 6x picture during slideshow. Can b used in slideshow.xml window id=2007
139#define ACTION_ZOOM_LEVEL_6           43 // zoom 7x picture during slideshow. Can b used in slideshow.xml window id=2007
140#define ACTION_ZOOM_LEVEL_7           44 // zoom 8x picture during slideshow. Can b used in slideshow.xml window id=2007
141#define ACTION_ZOOM_LEVEL_8           45 // zoom 9x picture during slideshow. Can b used in slideshow.xml window id=2007
142#define ACTION_ZOOM_LEVEL_9           46 // zoom 10x picture during slideshow. Can b used in slideshow.xml window id=2007
143
144#define ACTION_CALIBRATE_SWAP_ARROWS  47 // select next arrow. Can b used in: settingsScreenCalibration.xml windowid=11
145#define ACTION_CALIBRATE_RESET        48 // reset calibration to defaults. Can b used in: settingsScreenCalibration.xml windowid=11/settingsUICalibration.xml windowid=10
146#define ACTION_ANALOG_MOVE            49 // analog thumbstick move. Can b used in: slideshow.xml window id=2007/settingsScreenCalibration.xml windowid=11/settingsUICalibration.xml windowid=10
147#define ACTION_ROTATE_PICTURE_CW      50 // rotate current picture clockwise during slideshow. Can be used in slideshow.xml window id=2007
148#define ACTION_ROTATE_PICTURE_CCW     51 // rotate current picture counterclockwise during slideshow. Can be used in slideshow.xml window id=2007
149
150#define ACTION_SUBTITLE_DELAY_MIN     52 // Decrease subtitle/movie Delay.  Can b used in videoFullScreen.xml window id=2005
151#define ACTION_SUBTITLE_DELAY_PLUS    53 // Increase subtitle/movie Delay.  Can b used in videoFullScreen.xml window id=2005
152#define ACTION_AUDIO_DELAY_MIN        54 // Increase avsync delay.  Can b used in videoFullScreen.xml window id=2005
153#define ACTION_AUDIO_DELAY_PLUS       55 // Decrease avsync delay.  Can b used in videoFullScreen.xml window id=2005
154#define ACTION_AUDIO_NEXT_LANGUAGE    56 // Select next language in movie.  Can b used in videoFullScreen.xml window id=2005
155#define ACTION_CHANGE_RESOLUTION      57 // switch 2 next resolution. Can b used during screen calibration settingsScreenCalibration.xml windowid=11
156
157#define REMOTE_0                    58  // remote keys 0-9. are used by multiple windows
158#define REMOTE_1                    59  // for example in videoFullScreen.xml window id=2005 you can
159#define REMOTE_2                    60  // enter time (mmss) to jump to particular point in the movie
160#define REMOTE_3                    61
161#define REMOTE_4                    62  // with spincontrols you can enter 3digit number to quickly set
162#define REMOTE_5                    63  // spincontrol to desired value
163#define REMOTE_6                    64
164#define REMOTE_7                    65
165#define REMOTE_8                    66
166#define REMOTE_9                    67
167
168#define ACTION_PLAY                 68  // Unused at the moment
169#define ACTION_OSD_SHOW_LEFT        69  // Move left in OSD. Can b used in videoFullScreen.xml window id=2005
170#define ACTION_OSD_SHOW_RIGHT       70  // Move right in OSD. Can b used in videoFullScreen.xml window id=2005
171#define ACTION_OSD_SHOW_UP          71  // Move up in OSD. Can b used in videoFullScreen.xml window id=2005
172#define ACTION_OSD_SHOW_DOWN        72  // Move down in OSD. Can b used in videoFullScreen.xml window id=2005
173#define ACTION_OSD_SHOW_SELECT      73  // toggle/select option in OSD. Can b used in videoFullScreen.xml window id=2005
174#define ACTION_OSD_SHOW_VALUE_PLUS  74  // increase value of current option in OSD. Can b used in videoFullScreen.xml window id=2005
175#define ACTION_OSD_SHOW_VALUE_MIN   75  // decrease value of current option in OSD. Can b used in videoFullScreen.xml window id=2005
176#define ACTION_SMALL_STEP_BACK      76  // jumps a few seconds back during playback of movie. Can b used in videoFullScreen.xml window id=2005
177
178#define ACTION_PLAYER_FORWARD        77  // FF in current file played. global action, can be used anywhere
179#define ACTION_PLAYER_REWIND         78  // RW in current file played. global action, can be used anywhere
180#define ACTION_PLAYER_PLAY           79  // Play current song. Unpauses song and sets playspeed to 1x. global action, can be used anywhere
181
182#define ACTION_DELETE_ITEM          80  // delete current selected item. Can be used in myfiles.xml window id=3 and in myvideoTitle.xml window id=25
183#define ACTION_COPY_ITEM            81  // copy current selected item. Can be used in myfiles.xml window id=3
184#define ACTION_MOVE_ITEM            82  // move current selected item. Can be used in myfiles.xml window id=3
185#define ACTION_SHOW_MPLAYER_OSD     83  // toggles mplayers OSD. Can be used in videofullscreen.xml window id=2005
186#define ACTION_OSD_HIDESUBMENU      84  // removes an OSD sub menu. Can be used in videoOSD.xml window id=2901
187#define ACTION_TAKE_SCREENSHOT      85  // take a screenshot
188#define ACTION_RENAME_ITEM          87  // rename item
189
190#define ACTION_VOLUME_UP            88
191#define ACTION_VOLUME_DOWN          89
192#define ACTION_MUTE                 91
193#define ACTION_NAV_BACK             92
194#define ACTION_VOLAMP_UP            93
195#define ACTION_VOLAMP_DOWN          94
196
197#define ACTION_CREATE_EPISODE_BOOKMARK 95 //Creates an episode bookmark on the currently playing video file containing more than one episode
198#define ACTION_CREATE_BOOKMARK         96 //Creates a bookmark of the currently playing video file
199
200#define ACTION_CHAPTER_OR_BIG_STEP_FORWARD       97 // Goto the next chapter, if not available perform a big step forward
201#define ACTION_CHAPTER_OR_BIG_STEP_BACK          98 // Goto the previous chapter, if not available perform a big step back
202
203#define ACTION_MOUSE_START            100
204#define ACTION_MOUSE_LEFT_CLICK       100
205#define ACTION_MOUSE_RIGHT_CLICK      101
206#define ACTION_MOUSE_MIDDLE_CLICK     102
207#define ACTION_MOUSE_DOUBLE_CLICK     103
208#define ACTION_MOUSE_WHEEL_UP         104
209#define ACTION_MOUSE_WHEEL_DOWN       105
210#define ACTION_MOUSE_DRAG             106
211#define ACTION_MOUSE_MOVE             107
212#define ACTION_MOUSE_END              109
213
214#define ACTION_BACKSPACE          110
215#define ACTION_SCROLL_UP          111
216#define ACTION_SCROLL_DOWN        112
217#define ACTION_ANALOG_FORWARD     113
218#define ACTION_ANALOG_REWIND      114
219
220#define ACTION_MOVE_ITEM_UP       115  // move item up in playlist
221#define ACTION_MOVE_ITEM_DOWN     116  // move item down in playlist
222#define ACTION_CONTEXT_MENU       117  // pops up the context menu
223
224
225// stuff for virtual keyboard shortcuts
226#define ACTION_SHIFT              118
227#define ACTION_SYMBOLS            119
228#define ACTION_CURSOR_LEFT        120
229#define ACTION_CURSOR_RIGHT       121
230
231#define ACTION_BUILT_IN_FUNCTION  122
232
233#define ACTION_SHOW_OSD_TIME      123 // displays current time, can be used in videoFullScreen.xml window id=2005
234#define ACTION_ANALOG_SEEK_FORWARD  124 // seeks forward, and displays the seek bar.
235#define ACTION_ANALOG_SEEK_BACK     125 // seeks backward, and displays the seek bar.
236
237#define ACTION_VIS_PRESET_SHOW        126
238#define ACTION_VIS_PRESET_LIST        127
239#define ACTION_VIS_PRESET_NEXT        128
240#define ACTION_VIS_PRESET_PREV        129
241#define ACTION_VIS_PRESET_LOCK        130
242#define ACTION_VIS_PRESET_RANDOM      131
243#define ACTION_VIS_RATE_PRESET_PLUS   132
244#define ACTION_VIS_RATE_PRESET_MINUS  133
245
246#define ACTION_SHOW_VIDEOMENU         134
247#define ACTION_ENTER                  135
248
249#define ACTION_INCREASE_RATING        136
250#define ACTION_DECREASE_RATING        137
251
252#define ACTION_NEXT_SCENE             138 // switch to next scene/cutpoint in movie
253#define ACTION_PREV_SCENE             139 // switch to previous scene/cutpoint in movie
254
255#define ACTION_NEXT_LETTER            140 // jump through a list or container by letter
256#define ACTION_PREV_LETTER            141
257
258#define ACTION_JUMP_SMS2              142 // jump direct to a particular letter using SMS-style input
259#define ACTION_JUMP_SMS3              143
260#define ACTION_JUMP_SMS4              144
261#define ACTION_JUMP_SMS5              145
262#define ACTION_JUMP_SMS6              146
263#define ACTION_JUMP_SMS7              147
264#define ACTION_JUMP_SMS8              148
265#define ACTION_JUMP_SMS9              149
266
267#define ACTION_FILTER_CLEAR           150
268#define ACTION_FILTER_SMS2            151
269#define ACTION_FILTER_SMS3            152
270#define ACTION_FILTER_SMS4            153
271#define ACTION_FILTER_SMS5            154
272#define ACTION_FILTER_SMS6            155
273#define ACTION_FILTER_SMS7            156
274#define ACTION_FILTER_SMS8            157
275#define ACTION_FILTER_SMS9            158
276
277#define ACTION_FIRST_PAGE             159
278#define ACTION_LAST_PAGE              160
279
280#define ACTION_AUDIO_DELAY            161
281#define ACTION_SUBTITLE_DELAY         162
282
283#define ACTION_RECORD                 170
284
285#define ACTION_PASTE                  180
286#define ACTION_NEXT_CONTROL           181
287#define ACTION_PREV_CONTROL           182
288#define ACTION_CHANNEL_SWITCH         183
289#define ACTION_CHANNEL_UP             184
290#define ACTION_CHANNEL_DOWN           185
291#define ACTION_NEXT_CHANNELGROUP      186
292#define ACTION_PREVIOUS_CHANNELGROUP  187
293#define ACTION_PVR_PLAY               188
294#define ACTION_PVR_PLAY_TV            189
295#define ACTION_PVR_PLAY_RADIO         190
296
297#define ACTION_TOGGLE_FULLSCREEN      199 // switch 2 desktop resolution
298#define ACTION_TOGGLE_WATCHED         200 // Toggle watched status (videos)
299#define ACTION_SCAN_ITEM              201 // scan item
300#define ACTION_TOGGLE_DIGITAL_ANALOG  202 // switch digital <-> analog
301#define ACTION_RELOAD_KEYMAPS         203 // reloads CButtonTranslator's keymaps
302#define ACTION_GUIPROFILE_BEGIN       204 // start the GUIControlProfiler running
303
304#define ACTION_TELETEXT_RED           215 // Teletext Color buttons to control TopText
305#define ACTION_TELETEXT_GREEN         216 //    "       "      "    "     "       "
306#define ACTION_TELETEXT_YELLOW        217 //    "       "      "    "     "       "
307#define ACTION_TELETEXT_BLUE          218 //    "       "      "    "     "       "
308
309#define ACTION_INCREASE_PAR           219
310#define ACTION_DECREASE_PAR           220
311
312#define ACTION_VSHIFT_UP              227 // shift up video image in DVDPlayer
313#define ACTION_VSHIFT_DOWN            228 // shift down video image in DVDPlayer
314
315#define ACTION_PLAYER_PLAYPAUSE       229 // Play/pause. If playing it pauses, if paused it plays.
316
317#define ACTION_SUBTITLE_VSHIFT_UP     230 // shift up subtitles in DVDPlayer
318#define ACTION_SUBTITLE_VSHIFT_DOWN   231 // shift down subtitles in DVDPlayer
319#define ACTION_SUBTITLE_ALIGN         232 // toggle vertical alignment of subtitles
320
321#define ACTION_FILTER                 233
322
323#define ACTION_SWITCH_PLAYER          234
324
325#define ACTION_STEREOMODE_NEXT        235
326#define ACTION_STEREOMODE_PREVIOUS    236
327#define ACTION_STEREOMODE_TOGGLE      237 // turns 3d mode on/off
328#define ACTION_STEREOMODE_SELECT      238
329#define ACTION_STEREOMODE_TOMONO      239
330
331#define ACTION_SETTINGS_RESET         240
332#define ACTION_SETTINGS_LEVEL_CHANGE  241
333
334// touch actions
335#define ACTION_TOUCH_TAP              401
336#define ACTION_TOUCH_TAP_TEN          410
337#define ACTION_TOUCH_LONGPRESS        411
338#define ACTION_TOUCH_LONGPRESS_TEN    420
339
340#define ACTION_GESTURE_NOTIFY         500
341#define ACTION_GESTURE_BEGIN          501
342#define ACTION_GESTURE_ZOOM           502 //sendaction with point and currentPinchScale (fingers together < 1.0 -> fingers apart > 1.0)
343#define ACTION_GESTURE_ROTATE         503
344#define ACTION_GESTURE_PAN            504
345
346#define ACTION_GESTURE_SWIPE_LEFT       511
347#define ACTION_GESTURE_SWIPE_LEFT_TEN   520
348#define ACTION_GESTURE_SWIPE_RIGHT      521
349#define ACTION_GESTURE_SWIPE_RIGHT_TEN  530
350#define ACTION_GESTURE_SWIPE_UP         531
351#define ACTION_GESTURE_SWIPE_UP_TEN     540
352#define ACTION_GESTURE_SWIPE_DOWN       541
353#define ACTION_GESTURE_SWIPE_DOWN_TEN   550
354// 5xx is reserved for additional gesture actions
355#define ACTION_GESTURE_END            599
356
357// The NOOP action can be specified to disable an input event. This is
358// useful in user keyboard.xml etc to disable actions specified in the
359// system mappings.
360#define ACTION_NOOP                   999
361
362#define ICON_TYPE_NONE          101
363#define ICON_TYPE_PROGRAMS      102
364#define ICON_TYPE_MUSIC         103
365#define ICON_TYPE_PICTURES      104
366#define ICON_TYPE_VIDEOS        105
367#define ICON_TYPE_FILES         106
368#define ICON_TYPE_WEATHER       107
369#define ICON_TYPE_SETTINGS      109
370
371#ifndef SWIG
372
373class CKey;
374
375/*!
376  \ingroup actionkeys
377  \brief class encapsulating information regarding a particular user action to be sent to windows and controls
378  */
379class CAction
380{
381public:
382  CAction(int actionID, float amount1 = 1.0f, float amount2 = 0.0f, const CStdString &name = "", unsigned int holdTime = 0);
383  CAction(int actionID, wchar_t unicode);
384  CAction(int actionID, unsigned int state, float posX, float posY, float offsetX, float offsetY, const CStdString &name = "");
385  CAction(int actionID, const CStdString &name, const CKey &key);
386
387  /*! \brief Identifier of the action
388   \return id of the action
389   */
390  int GetID() const { return m_id; };
391
392  /*! \brief Is this an action from the mouse
393   \return true if this is a mouse action, false otherwise
394   */
395  bool IsMouse() const { return (m_id >= ACTION_MOUSE_START && m_id <= ACTION_MOUSE_END); };
396
397  bool IsGesture() const { return (m_id >= ACTION_GESTURE_NOTIFY && m_id <= ACTION_GESTURE_END); };
398
399  /*! \brief Human-readable name of the action
400   \return name of the action
401   */
402  const CStdString &GetName() const { return m_name; };
403
404  /*! \brief Get an amount associated with this action
405   \param zero-based index of amount to retrieve, defaults to 0
406   \return an amount associated with this action
407   */
408  float GetAmount(unsigned int index = 0) const { return (index < max_amounts) ? m_amount[index] : 0; };
409
410  /*! \brief Unicode value associated with this action
411   \return unicode value associated with this action, for keyboard input.
412   */
413  wchar_t GetUnicode() const { return m_unicode; };
414
415  /*! \brief Time in ms that the key has been held
416   \return time that the key has been held down in ms.
417   */
418  unsigned int GetHoldTime() const { return m_holdTime; };
419
420  /*! \brief Time since last repeat in ms
421   \return time since last repeat in ms. Returns 0 if unknown.
422   */
423  float GetRepeat() const { return m_repeat; };
424
425  /*! \brief Button code that triggered this action
426   \return button code
427   */
428  unsigned int GetButtonCode() const { return m_buttonCode; };
429
430private:
431  int          m_id;
432  CStdString   m_name;
433
434  static const unsigned int max_amounts = 4; // Must be at least 4.
435  float        m_amount[max_amounts];
436
437  float        m_repeat;
438  unsigned int m_holdTime;
439  unsigned int m_buttonCode;
440  wchar_t      m_unicode;
441};
442
443/*!
444  \ingroup actionkeys, mouse
445  \brief Simple class for mouse events
446  */
447class CMouseEvent
448{
449public:
450  CMouseEvent(int actionID, int state = 0, float offsetX = 0, float offsetY = 0)
451  {
452    m_id = actionID;
453    m_state = state;
454    m_offsetX = offsetX;
455    m_offsetY = offsetY;
456  };
457
458  int    m_id;
459  int    m_state;
460  float  m_offsetX;
461  float  m_offsetY;
462};
463
464/*!
465  \ingroup actionkeys
466  \brief
467  */
468class CKey
469{
470public:
471  CKey(void);
472  CKey(uint32_t buttonCode, uint8_t leftTrigger = 0, uint8_t rightTrigger = 0, float leftThumbX = 0.0f, float leftThumbY = 0.0f, float rightThumbX = 0.0f, float rightThumbY = 0.0f, float repeat = 0.0f);
473  CKey(uint32_t buttonCode, unsigned int held);
474  CKey(uint8_t vkey, wchar_t unicode, char ascii, uint32_t modifiers, unsigned int held);
475  CKey(const CKey& key);
476
477  virtual ~CKey(void);
478  CKey& operator=(const CKey& key);
479  uint8_t GetLeftTrigger() const;
480  uint8_t GetRightTrigger() const;
481  float GetLeftThumbX() const;
482  float GetLeftThumbY() const;
483  float GetRightThumbX() const;
484  float GetRightThumbY() const;
485  float GetRepeat() const;
486  bool FromKeyboard() const;
487  bool IsAnalogButton() const;
488  bool IsIRRemote() const;
489  void SetFromService(bool fromService);
490  bool GetFromService() const { return m_fromService; }
491
492  inline uint32_t GetButtonCode() const { return m_buttonCode; }
493  inline uint8_t  GetVKey() const       { return m_vkey; }
494  inline wchar_t  GetUnicode() const    { return m_unicode; }
495  inline char     GetAscii() const      { return m_ascii; }
496  inline uint32_t GetModifiers() const  { return m_modifiers; };
497  inline unsigned int GetHeld() const   { return m_held; }
498
499  enum Modifier {
500    MODIFIER_CTRL  = 0x00010000,
501    MODIFIER_SHIFT = 0x00020000,
502    MODIFIER_ALT   = 0x00040000,
503    MODIFIER_RALT  = 0x00080000,
504    MODIFIER_SUPER = 0x00100000,
505    MODIFIER_META  = 0X00200000
506  };
507
508private:
509  void Reset();
510
511  uint32_t m_buttonCode;
512  uint8_t  m_vkey;
513  wchar_t  m_unicode;
514  char     m_ascii;
515  uint32_t m_modifiers;
516  unsigned int m_held;
517
518  uint8_t m_leftTrigger;
519  uint8_t m_rightTrigger;
520  float m_leftThumbX;
521  float m_leftThumbY;
522  float m_rightThumbX;
523  float m_rightThumbY;
524  float m_repeat; // time since last keypress
525  bool m_fromService;
526};
527#endif //undef SWIG
528
529#endif
530