Merge pull request #26350 from jjd-uk/estuary_media_align
[xbmc.git] / xbmc / guilib / GUIMessage.h
blob18e605c81122b6c8ea2b8f5a05888c57fe45762a
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #pragma once
11 /*!
12 \file GUIMessage.h
13 \brief
16 constexpr const int GUI_MSG_WINDOW_INIT = 1; // initialize window
17 constexpr const int GUI_MSG_WINDOW_DEINIT = 2; // deinit window
18 constexpr const int GUI_MSG_WINDOW_RESET = 27; // reset window to initial state
20 constexpr const int GUI_MSG_SETFOCUS = 3; // set focus to control param1=up/down/left/right
21 constexpr const int GUI_MSG_LOSTFOCUS = 4; // control lost focus
23 constexpr const int GUI_MSG_CLICKED = 5; // control has been clicked
25 constexpr const int GUI_MSG_VISIBLE = 6; // set control visible
26 constexpr const int GUI_MSG_HIDDEN = 7; // set control hidden
28 constexpr const int GUI_MSG_ENABLED = 8; // enable control
29 constexpr const int GUI_MSG_DISABLED = 9; // disable control
31 constexpr const int GUI_MSG_SET_SELECTED = 10; // control = selected
32 constexpr const int GUI_MSG_SET_DESELECTED = 11; // control = not selected
34 constexpr const int GUI_MSG_LABEL_ADD = 12; // add label control (for controls supporting more then 1 label)
36 constexpr const int GUI_MSG_LABEL_SET = 13; // set the label of a control
38 constexpr const int GUI_MSG_LABEL_RESET = 14; // clear all labels of a control // add label control (for controls supporting more then 1 label)
40 constexpr const int GUI_MSG_ITEM_SELECTED = 15; // ask control 2 return the selected item
41 constexpr const int GUI_MSG_ITEM_SELECT = 16; // ask control 2 select a specific item
42 constexpr const int GUI_MSG_LABEL2_SET = 17;
43 constexpr const int GUI_MSG_SHOWRANGE = 18;
45 constexpr const int GUI_MSG_FULLSCREEN = 19; // should go to fullscreen window (vis or video)
46 constexpr const int GUI_MSG_EXECUTE = 20; // user has clicked on a button with <execute> tag
48 constexpr const int GUI_MSG_NOTIFY_ALL = 21; // message will be send to all active and inactive(!) windows, all active modal and modeless dialogs
49 // dwParam1 must contain an additional message the windows should react on
51 constexpr const int GUI_MSG_REFRESH_THUMBS = 22; // message is sent to all windows to refresh all thumbs
53 constexpr const int GUI_MSG_MOVE = 23; // message is sent to the window from the base control class when it's
54 // been asked to move. dwParam1 contains direction.
56 constexpr const int GUI_MSG_LABEL_BIND = 24; // bind label control (for controls supporting more then 1 label)
58 constexpr const int GUI_MSG_FOCUSED = 26; // a control has become focused
60 constexpr const int GUI_MSG_PAGE_CHANGE = 28; // a page control has changed the page number
62 constexpr const int GUI_MSG_REFRESH_LIST = 29; // message sent to all listing controls telling them to refresh their item layouts
64 constexpr const int GUI_MSG_PAGE_UP = 30; // page up
65 constexpr const int GUI_MSG_PAGE_DOWN = 31; // page down
66 constexpr const int GUI_MSG_MOVE_OFFSET = 32; // Instruct the control to MoveUp or MoveDown by offset amount
68 constexpr const int GUI_MSG_SET_TYPE = 33; ///< Instruct a control to set it's type appropriately
70 /*!
71 \brief Message indicating the window has been resized
72 Any controls that keep stored sizing information based on aspect ratio or window size should
73 recalculate sizing information
75 constexpr const int GUI_MSG_WINDOW_RESIZE = 34;
77 /*!
78 \brief Message indicating loss of renderer, prior to reset
79 Any controls that keep shared resources should free them on receipt of this message, as the renderer
80 is about to be reset.
82 constexpr const int GUI_MSG_RENDERER_LOST = 35;
84 /*!
85 \brief Message indicating regain of renderer, after reset
86 Any controls that keep shared resources may reallocate them now that the renderer is back
88 constexpr const int GUI_MSG_RENDERER_RESET = 36;
90 /*!
91 \brief A control wishes to have (or release) exclusive access to mouse actions
93 constexpr const int GUI_MSG_EXCLUSIVE_MOUSE = 37;
95 /*!
96 \brief A request for supported gestures is made
98 constexpr const int GUI_MSG_GESTURE_NOTIFY = 38;
101 \brief A request to add a control
103 constexpr const int GUI_MSG_ADD_CONTROL = 39;
106 \brief A request to remove a control
108 constexpr const int GUI_MSG_REMOVE_CONTROL = 40;
111 \brief A request to unfocus all currently focused controls
113 constexpr const int GUI_MSG_UNFOCUS_ALL = 41;
115 constexpr const int GUI_MSG_SET_TEXT = 42;
117 constexpr const int GUI_MSG_WINDOW_LOAD = 43;
119 constexpr const int GUI_MSG_VALIDITY_CHANGED = 44;
122 \brief Check whether a button is selected
124 constexpr const int GUI_MSG_IS_SELECTED = 45;
127 \brief Bind a set of labels to a spin (or similar) control
129 constexpr const int GUI_MSG_SET_LABELS = 46;
132 \brief Set the filename for an image control
134 constexpr const int GUI_MSG_SET_FILENAME = 47;
137 \brief Get the filename of an image control
140 constexpr const int GUI_MSG_GET_FILENAME = 48;
143 \brief The user interface is ready for usage
145 constexpr const int GUI_MSG_UI_READY = 49;
148 \brief Called every 500ms to allow time dependent updates
150 constexpr const int GUI_MSG_REFRESH_TIMER = 50;
153 \brief Called if state has changed which could lead to GUI changes
155 constexpr const int GUI_MSG_STATE_CHANGED = 51;
158 \brief Called when a subtitle download has finished
160 constexpr const int GUI_MSG_SUBTITLE_DOWNLOADED = 52;
163 * \brief Reset a multiimage to its initial state
165 constexpr const int GUI_MSG_RESET_MULTI_IMAGE = 53;
167 constexpr const int GUI_MSG_USER = 1000;
170 \brief Complete to get codingtable page
172 constexpr const int GUI_MSG_CODINGTABLE_LOOKUP_COMPLETED = 65000;
175 \ingroup winmsg
176 \brief
178 #define CONTROL_SELECT(controlID) \
179 do \
181 CGUIMessage _msg(GUI_MSG_SET_SELECTED, GetID(), controlID); \
182 OnMessage(_msg); \
183 } while (0)
186 \ingroup winmsg
187 \brief
189 #define CONTROL_DESELECT(controlID) \
190 do \
192 CGUIMessage _msg(GUI_MSG_SET_DESELECTED, GetID(), controlID); \
193 OnMessage(_msg); \
194 } while (0)
198 \ingroup winmsg
199 \brief
201 #define CONTROL_ENABLE(controlID) \
202 do \
204 CGUIMessage _msg(GUI_MSG_ENABLED, GetID(), controlID); \
205 OnMessage(_msg); \
206 } while (0)
209 \ingroup winmsg
210 \brief
212 #define CONTROL_DISABLE(controlID) \
213 do \
215 CGUIMessage _msg(GUI_MSG_DISABLED, GetID(), controlID); \
216 OnMessage(_msg); \
217 } while (0)
221 \ingroup winmsg
222 \brief
224 #define CONTROL_ENABLE_ON_CONDITION(controlID, bCondition) \
225 do \
227 CGUIMessage _msg(bCondition ? GUI_MSG_ENABLED : GUI_MSG_DISABLED, GetID(), controlID); \
228 OnMessage(_msg); \
229 } while (0)
233 \ingroup winmsg
234 \brief
236 #define CONTROL_SELECT_ITEM(controlID, iItem) \
237 do \
239 CGUIMessage _msg(GUI_MSG_ITEM_SELECT, GetID(), controlID, iItem); \
240 OnMessage(_msg); \
241 } while (0)
244 \ingroup winmsg
245 \brief Set the label of the current control
247 #define SET_CONTROL_LABEL(controlID, label) \
248 do \
250 CGUIMessage _msg(GUI_MSG_LABEL_SET, GetID(), controlID); \
251 _msg.SetLabel(label); \
252 OnMessage(_msg); \
253 } while (0)
256 \ingroup winmsg
257 \brief Set the label of the current control
259 #define SET_CONTROL_LABEL_THREAD_SAFE(controlID, label) \
261 CGUIMessage _msg(GUI_MSG_LABEL_SET, GetID(), controlID); \
262 _msg.SetLabel(label); \
263 if (CServiceBroker::GetAppMessenger()->IsProcessThread()) \
264 OnMessage(_msg); \
265 else \
266 CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(_msg, GetID()); \
270 \ingroup winmsg
271 \brief Set the second label of the current control
273 #define SET_CONTROL_LABEL2(controlID, label) \
274 do \
276 CGUIMessage _msg(GUI_MSG_LABEL2_SET, GetID(), controlID); \
277 _msg.SetLabel(label); \
278 OnMessage(_msg); \
279 } while (0)
282 \ingroup winmsg
283 \brief Set a bunch of labels on the given control
285 #define SET_CONTROL_LABELS(controlID, defaultValue, labels) \
286 do \
288 CGUIMessage _msg(GUI_MSG_SET_LABELS, GetID(), controlID, defaultValue); \
289 _msg.SetPointer(labels); \
290 OnMessage(_msg); \
291 } while (0)
294 \ingroup winmsg
295 \brief Set the label of the current control
297 #define SET_CONTROL_FILENAME(controlID, label) \
298 do \
300 CGUIMessage _msg(GUI_MSG_SET_FILENAME, GetID(), controlID); \
301 _msg.SetLabel(label); \
302 OnMessage(_msg); \
303 } while (0)
306 \ingroup winmsg
307 \brief
309 #define SET_CONTROL_HIDDEN(controlID) \
310 do \
312 CGUIMessage _msg(GUI_MSG_HIDDEN, GetID(), controlID); \
313 OnMessage(_msg); \
314 } while (0)
317 \ingroup winmsg
318 \brief
320 #define SET_CONTROL_FOCUS(controlID, dwParam) \
321 do \
323 CGUIMessage _msg(GUI_MSG_SETFOCUS, GetID(), controlID, dwParam); \
324 OnMessage(_msg); \
325 } while (0)
328 \ingroup winmsg
329 \brief
331 #define SET_CONTROL_VISIBLE(controlID) \
332 do \
334 CGUIMessage _msg(GUI_MSG_VISIBLE, GetID(), controlID); \
335 OnMessage(_msg); \
336 } while (0)
338 #define SET_CONTROL_SELECTED(dwSenderId, controlID, bSelect) \
339 do \
341 CGUIMessage _msg(bSelect ? GUI_MSG_SET_SELECTED : GUI_MSG_SET_DESELECTED, dwSenderId, \
342 controlID); \
343 OnMessage(_msg); \
344 } while (0)
347 \ingroup winmsg
348 \brief Click message sent from controls to windows.
350 #define SEND_CLICK_MESSAGE(id, parentID, action) \
351 do \
353 CGUIMessage _msg(GUI_MSG_CLICKED, id, parentID, action); \
354 SendWindowMessage(_msg); \
355 } while (0)
357 #include <string>
358 #include <vector>
359 #include <memory>
361 // forwards
362 class CGUIListItem;
363 class CFileItemList;
366 \ingroup winmsg
367 \brief
369 class CGUIMessage final
371 public:
372 CGUIMessage(int dwMsg, int senderID, int controlID, int64_t param1 = 0, int64_t param2 = 0);
373 CGUIMessage(
374 int msg, int senderID, int controlID, int64_t param1, int64_t param2, CFileItemList* item);
375 CGUIMessage(int msg,
376 int senderID,
377 int controlID,
378 int64_t param1,
379 int64_t param2,
380 const std::shared_ptr<CGUIListItem>& item);
381 CGUIMessage(const CGUIMessage& msg);
382 ~CGUIMessage(void);
383 CGUIMessage& operator = (const CGUIMessage& msg);
385 int GetControlId() const ;
386 int GetMessage() const;
387 void* GetPointer() const;
388 std::shared_ptr<CGUIListItem> GetItem() const;
389 int GetParam1() const;
390 int64_t GetParam1AsI64() const;
391 int GetParam2() const;
392 int64_t GetParam2AsI64() const;
393 int GetSenderId() const;
394 void SetParam1(int64_t param1);
395 void SetParam2(int64_t param2);
396 void SetPointer(void* pointer);
397 void SetLabel(const std::string& strLabel);
398 void SetLabel(int iString); // for convenience - looks up in strings.po
399 const std::string& GetLabel() const;
400 void SetStringParam(const std::string &strParam);
401 void SetStringParams(const std::vector<std::string> &params);
402 const std::string& GetStringParam(size_t param = 0) const;
403 size_t GetNumStringParams() const;
404 void SetItem(std::shared_ptr<CGUIListItem> item);
406 private:
407 std::string m_strLabel;
408 std::vector<std::string> m_params;
409 int m_senderID;
410 int m_controlID;
411 int m_message;
412 void* m_pointer;
413 int64_t m_param1;
414 int64_t m_param2;
415 std::shared_ptr<CGUIListItem> m_item;
417 static std::string empty_string;