1 /* 2 * Copyright (C) 2005-2018 Team Kodi 3 * This file is part of Kodi - https://kodi.tv 4 * 5 * SPDX-License-Identifier: GPL-2.0-or-later 6 * See LICENSES/README.md for more information. 7 */ 8 9 #pragma once 10 11 /*! 12 \file GUIMessage.h 13 \brief 14 */ 15 16 #define GUI_MSG_WINDOW_INIT 1 // initialize window 17 #define GUI_MSG_WINDOW_DEINIT 2 // deinit window 18 #define GUI_MSG_WINDOW_RESET 27 // reset window to initial state 19 20 #define GUI_MSG_SETFOCUS 3 // set focus to control param1=up/down/left/right 21 #define GUI_MSG_LOSTFOCUS 4 // control lost focus 22 23 #define GUI_MSG_CLICKED 5 // control has been clicked 24 25 #define GUI_MSG_VISIBLE 6 // set control visible 26 #define GUI_MSG_HIDDEN 7 // set control hidden 27 28 #define GUI_MSG_ENABLED 8 // enable control 29 #define GUI_MSG_DISABLED 9 // disable control 30 31 #define GUI_MSG_SET_SELECTED 10 // control = selected 32 #define GUI_MSG_SET_DESELECTED 11 // control = not selected 33 34 #define GUI_MSG_LABEL_ADD 12 // add label control (for controls supporting more then 1 label) 35 36 #define GUI_MSG_LABEL_SET 13 // set the label of a control 37 38 #define GUI_MSG_LABEL_RESET 14 // clear all labels of a control // add label control (for controls supporting more then 1 label) 39 40 #define GUI_MSG_ITEM_SELECTED 15 // ask control 2 return the selected item 41 #define GUI_MSG_ITEM_SELECT 16 // ask control 2 select a specific item 42 #define GUI_MSG_LABEL2_SET 17 43 #define GUI_MSG_SHOWRANGE 18 44 45 #define GUI_MSG_FULLSCREEN 19 // should go to fullscreen window (vis or video) 46 #define GUI_MSG_EXECUTE 20 // user has clicked on a button with <execute> tag 47 48 #define 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 50 51 #define GUI_MSG_REFRESH_THUMBS 22 // message is sent to all windows to refresh all thumbs 52 53 #define 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. 55 56 #define GUI_MSG_LABEL_BIND 24 // bind label control (for controls supporting more then 1 label) 57 58 #define GUI_MSG_FOCUSED 26 // a control has become focused 59 60 #define GUI_MSG_PAGE_CHANGE 28 // a page control has changed the page number 61 62 #define GUI_MSG_REFRESH_LIST 29 // message sent to all listing controls telling them to refresh their item layouts 63 64 #define GUI_MSG_PAGE_UP 30 // page up 65 #define GUI_MSG_PAGE_DOWN 31 // page down 66 #define GUI_MSG_MOVE_OFFSET 32 // Instruct the control to MoveUp or MoveDown by offset amount 67 68 #define GUI_MSG_SET_TYPE 33 ///< Instruct a control to set it's type appropriately 69 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 74 */ 75 #define GUI_MSG_WINDOW_RESIZE 34 76 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. 81 */ 82 #define GUI_MSG_RENDERER_LOST 35 83 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 87 */ 88 #define GUI_MSG_RENDERER_RESET 36 89 90 /*! 91 \brief A control wishes to have (or release) exclusive access to mouse actions 92 */ 93 #define GUI_MSG_EXCLUSIVE_MOUSE 37 94 95 /*! 96 \brief A request for supported gestures is made 97 */ 98 #define GUI_MSG_GESTURE_NOTIFY 38 99 100 /*! 101 \brief A request to add a control 102 */ 103 #define GUI_MSG_ADD_CONTROL 39 104 105 /*! 106 \brief A request to remove a control 107 */ 108 #define GUI_MSG_REMOVE_CONTROL 40 109 110 /*! 111 \brief A request to unfocus all currently focused controls 112 */ 113 #define GUI_MSG_UNFOCUS_ALL 41 114 115 #define GUI_MSG_SET_TEXT 42 116 117 #define GUI_MSG_WINDOW_LOAD 43 118 119 #define GUI_MSG_VALIDITY_CHANGED 44 120 121 /*! 122 \brief Check whether a button is selected 123 */ 124 #define GUI_MSG_IS_SELECTED 45 125 126 /*! 127 \brief Bind a set of labels to a spin (or similar) control 128 */ 129 #define GUI_MSG_SET_LABELS 46 130 131 /*! 132 \brief Set the filename for an image control 133 */ 134 #define GUI_MSG_SET_FILENAME 47 135 136 /*! 137 \brief Get the filename of an image control 138 */ 139 140 #define GUI_MSG_GET_FILENAME 48 141 142 /*! 143 \brief The user interface is ready for usage 144 */ 145 #define GUI_MSG_UI_READY 49 146 147 /*! 148 \brief Called every 500ms to allow time dependent updates 149 */ 150 #define GUI_MSG_REFRESH_TIMER 50 151 152 /*! 153 \brief Called if state has changed wich could lead to GUI changes 154 */ 155 #define GUI_MSG_STATE_CHANGED 51 156 157 /*! 158 \brief Called when a subtitle download has finished 159 */ 160 #define GUI_MSG_SUBTITLE_DOWNLOADED 52 161 162 163 #define GUI_MSG_USER 1000 164 165 /*! 166 \brief Complete to get codingtable page 167 */ 168 #define GUI_MSG_CODINGTABLE_LOOKUP_COMPLETED 65000 169 170 /*! 171 \ingroup winmsg 172 \brief 173 */ 174 #define CONTROL_SELECT(controlID) \ 175 do { \ 176 CGUIMessage msg(GUI_MSG_SET_SELECTED, GetID(), controlID); \ 177 OnMessage(msg); \ 178 } while(0) 179 180 /*! 181 \ingroup winmsg 182 \brief 183 */ 184 #define CONTROL_DESELECT(controlID) \ 185 do { \ 186 CGUIMessage msg(GUI_MSG_SET_DESELECTED, GetID(), controlID); \ 187 OnMessage(msg); \ 188 } while(0) 189 190 191 /*! 192 \ingroup winmsg 193 \brief 194 */ 195 #define CONTROL_ENABLE(controlID) \ 196 do { \ 197 CGUIMessage msg(GUI_MSG_ENABLED, GetID(), controlID); \ 198 OnMessage(msg); \ 199 } while(0) 200 201 /*! 202 \ingroup winmsg 203 \brief 204 */ 205 #define CONTROL_DISABLE(controlID) \ 206 do { \ 207 CGUIMessage msg(GUI_MSG_DISABLED, GetID(), controlID); \ 208 OnMessage(msg); \ 209 } while(0) 210 211 212 /*! 213 \ingroup winmsg 214 \brief 215 */ 216 #define CONTROL_ENABLE_ON_CONDITION(controlID, bCondition) \ 217 do { \ 218 CGUIMessage msg(bCondition ? GUI_MSG_ENABLED:GUI_MSG_DISABLED, GetID(), controlID); \ 219 OnMessage(msg); \ 220 } while(0) 221 222 223 /*! 224 \ingroup winmsg 225 \brief 226 */ 227 #define CONTROL_SELECT_ITEM(controlID,iItem) \ 228 do { \ 229 CGUIMessage msg(GUI_MSG_ITEM_SELECT, GetID(), controlID,iItem); \ 230 OnMessage(msg); \ 231 } while(0) 232 233 /*! 234 \ingroup winmsg 235 \brief Set the label of the current control 236 */ 237 #define SET_CONTROL_LABEL(controlID,label) \ 238 do { \ 239 CGUIMessage msg(GUI_MSG_LABEL_SET, GetID(), controlID); \ 240 msg.SetLabel(label); \ 241 OnMessage(msg); \ 242 } while(0) 243 244 /*! 245 \ingroup winmsg 246 \brief Set the label of the current control 247 */ 248 #define SET_CONTROL_LABEL_THREAD_SAFE(controlID,label) \ 249 { \ 250 CGUIMessage msg(GUI_MSG_LABEL_SET, GetID(), controlID); \ 251 msg.SetLabel(label); \ 252 if(g_application.IsCurrentThread()) \ 253 OnMessage(msg); \ 254 else \ 255 CServiceBroker::GetGUI()->GetWindowManager().SendThreadMessage(msg, GetID()); \ 256 } 257 258 /*! 259 \ingroup winmsg 260 \brief Set the second label of the current control 261 */ 262 #define SET_CONTROL_LABEL2(controlID,label) \ 263 do { \ 264 CGUIMessage msg(GUI_MSG_LABEL2_SET, GetID(), controlID); \ 265 msg.SetLabel(label); \ 266 OnMessage(msg); \ 267 } while(0) 268 269 /*! 270 \ingroup winmsg 271 \brief Set a bunch of labels on the given control 272 */ 273 #define SET_CONTROL_LABELS(controlID, defaultValue, labels) \ 274 do { \ 275 CGUIMessage msg(GUI_MSG_SET_LABELS, GetID(), controlID, defaultValue); \ 276 msg.SetPointer(labels); \ 277 OnMessage(msg); \ 278 } while(0) 279 280 /*! 281 \ingroup winmsg 282 \brief Set the label of the current control 283 */ 284 #define SET_CONTROL_FILENAME(controlID,label) \ 285 do { \ 286 CGUIMessage msg(GUI_MSG_SET_FILENAME, GetID(), controlID); \ 287 msg.SetLabel(label); \ 288 OnMessage(msg); \ 289 } while(0) 290 291 /*! 292 \ingroup winmsg 293 \brief 294 */ 295 #define SET_CONTROL_HIDDEN(controlID) \ 296 do { \ 297 CGUIMessage msg(GUI_MSG_HIDDEN, GetID(), controlID); \ 298 OnMessage(msg); \ 299 } while(0) 300 301 /*! 302 \ingroup winmsg 303 \brief 304 */ 305 #define SET_CONTROL_FOCUS(controlID, dwParam) \ 306 do { \ 307 CGUIMessage msg(GUI_MSG_SETFOCUS, GetID(), controlID, dwParam); \ 308 OnMessage(msg); \ 309 } while(0) 310 311 /*! 312 \ingroup winmsg 313 \brief 314 */ 315 #define SET_CONTROL_VISIBLE(controlID) \ 316 do { \ 317 CGUIMessage msg(GUI_MSG_VISIBLE, GetID(), controlID); \ 318 OnMessage(msg); \ 319 } while(0) 320 321 #define SET_CONTROL_SELECTED(dwSenderId, controlID, bSelect) \ 322 do { \ 323 CGUIMessage msg(bSelect?GUI_MSG_SET_SELECTED:GUI_MSG_SET_DESELECTED, dwSenderId, controlID); \ 324 OnMessage(msg); \ 325 } while(0) 326 327 /*! 328 \ingroup winmsg 329 \brief Click message sent from controls to windows. 330 */ 331 #define SEND_CLICK_MESSAGE(id, parentID, action) \ 332 do { \ 333 CGUIMessage msg(GUI_MSG_CLICKED, id, parentID, action); \ 334 SendWindowMessage(msg); \ 335 } while(0) 336 337 #include <string> 338 #include <vector> 339 #include <memory> 340 341 // forwards 342 class CGUIListItem; typedef std::shared_ptr<CGUIListItem> CGUIListItemPtr; 343 class CFileItemList; 344 345 /*! 346 \ingroup winmsg 347 \brief 348 */ 349 class CGUIMessage final 350 { 351 public: 352 CGUIMessage(int dwMsg, int senderID, int controlID, int param1 = 0, int param2 = 0); 353 CGUIMessage(int msg, int senderID, int controlID, int param1, int param2, CFileItemList* item); 354 CGUIMessage(int msg, int senderID, int controlID, int param1, int param2, const CGUIListItemPtr &item); 355 CGUIMessage(const CGUIMessage& msg); 356 ~CGUIMessage(void); 357 CGUIMessage& operator = (const CGUIMessage& msg); 358 359 int GetControlId() const ; 360 int GetMessage() const; 361 void* GetPointer() const; 362 CGUIListItemPtr GetItem() const; 363 int GetParam1() const; 364 int GetParam2() const; 365 int GetSenderId() const; 366 void SetParam1(int param1); 367 void SetParam2(int param2); 368 void SetPointer(void* pointer); 369 void SetLabel(const std::string& strLabel); 370 void SetLabel(int iString); // for convenience - looks up in strings.po 371 const std::string& GetLabel() const; 372 void SetStringParam(const std::string &strParam); 373 void SetStringParams(const std::vector<std::string> ¶ms); 374 const std::string& GetStringParam(size_t param = 0) const; 375 size_t GetNumStringParams() const; 376 377 private: 378 std::string m_strLabel; 379 std::vector<std::string> m_params; 380 int m_senderID; 381 int m_controlID; 382 int m_message; 383 void* m_pointer; 384 int m_param1; 385 int m_param2; 386 CGUIListItemPtr m_item; 387 388 static std::string empty_string; 389 }; 390 391