[Test] Added tests for CUtil::SplitParams
[xbmc.git] / xbmc / guilib / GUIAction.h
blob71a8f0e6733c8fd9c143377f39d728cf6083caa1
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 #include <memory>
12 #include <string>
13 #include <vector>
15 class CGUIControl;
16 class CGUIListItem;
18 /**
19 * Class containing vector of condition->(action/navigation route) and handling its execution.
21 class CGUIAction
23 public:
24 /**
25 * Class which defines an executable action
27 class CExecutableAction
29 public:
30 /**
31 * Executable action constructor (without conditional execution)
32 * @param action - The action to be executed
34 explicit CExecutableAction(const std::string& action);
35 /**
36 * Executable action constructor (providing the condition and the action)
37 * @param condition - The condition that dictates the action execution
38 * @param action - The actual action
40 CExecutableAction(const std::string& condition, const std::string& action);
42 /**
43 * Get the condition of this executable action (may be empty)
44 * @return condition - The condition that dictates the action execution (or an empty string)
46 std::string GetCondition() const;
48 /**
49 * Checks if the executable action has any condition
50 * @return true if the executable action has any condition, else false
52 bool HasCondition() const;
54 /**
55 * Get the action string of this executable action
56 * @return action - The action string
58 std::string GetAction() const;
60 /**
61 * Sets/Replaces the action string of this executable action
62 * @param action - The action string
64 void SetAction(const std::string& action);
66 private:
67 /**
68 * Executable action default constructor
70 CExecutableAction() = delete;
71 /* The condition that dictates the action execution */
72 std::string m_condition;
73 /* The actual action */
74 std::string m_action;
77 CGUIAction() = default;
78 explicit CGUIAction(int controlID);
79 /**
80 * Execute actions without specifying any target control or parent control. Action will use the default focused control.
82 bool ExecuteActions() const;
83 /**
84 * Execute actions (no navigation paths); if action is paired with condition - evaluate condition first
86 bool ExecuteActions(int controlID,
87 int parentID,
88 const std::shared_ptr<CGUIListItem>& item = nullptr) const;
89 /**
90 * Check if there are any conditional actions
92 bool HasConditionalActions() const;
93 /**
94 * Check if there is any action that meet its condition
96 bool HasActionsMeetingCondition() const;
97 /**
98 * Check if there is any action
100 bool HasAnyActions() const;
102 * Get the total number of actions
104 size_t GetActionCount() const;
106 * Get navigation route that meet its conditions first
108 int GetNavigation() const;
110 * Set navigation route
112 void SetNavigation(int id);
114 * Configure CGUIAction to send threaded messages
116 void EnableSendThreadMessageMode();
118 * Add an executable action to the CGUIAction container
120 void Append(const CExecutableAction& action);
122 * Prune any executable actions stored in the CGUIAction
124 void Reset();
126 private:
127 std::vector<CExecutableAction> m_actions;
128 bool m_sendThreadMessages = false;