DDNet documentation
Loading...
Searching...
No Matches
menus_ingame_touch_controls.h
Go to the documentation of this file.
1#ifndef GAME_CLIENT_COMPONENTS_MENUS_INGAME_TOUCH_CONTROLS_H
2#define GAME_CLIENT_COMPONENTS_MENUS_INGAME_TOUCH_CONTROLS_H
5#include <game/client/ui.h>
6
7#include <memory>
8
10{
11public:
12 static constexpr const float BUTTON_EDITOR_WIDTH = 700.0f;
13 enum class EBehaviorType
14 {
15 BIND,
16 BIND_TOGGLE,
17 PREDEFINED,
18 NUM_BEHAVIORS
19 };
20
21 enum class EPredefinedType
22 {
23 INGAME_MENU,
24 EXTRA_MENU,
25 EMOTICON,
26 SPECTATE,
27 SWAP_ACTION,
28 USE_ACTION,
29 JOYSTICK_ACTION,
30 JOYSTICK_AIM,
31 JOYSTICK_AIM_RELATIVE,
32 JOYSTICK_FIRE,
33 JOYSTICK_HOOK,
34 NUM_PREDEFINEDTYPES
35 };
36
37 // Which menu is selected.
38 enum class EMenuType
39 {
40 MENU_FILE,
41 MENU_BUTTONS,
42 MENU_SETTINGS,
43 MENU_PREVIEW,
44 NUM_MENUS
45 };
47
48 enum class ESortType
49 {
50 LABEL,
51 X,
52 Y,
53 W,
54 H,
55 NUM_SORTS
56 };
58
59 enum class EElementType
60 {
61 LAYOUT,
62 VISIBILITY,
63 BEHAVIOR,
64 NUM_ELEMENTS
65 };
67
68 enum class EVisibilityType
69 {
70 EXCLUDE,
71 INCLUDE,
72 IGNORE,
73 NUM_VISIBILITIES
74 };
76
77 // Mainly for passing values in popups.
80
81 // Storing everything you are editing.
87
91
116 std::vector<std::unique_ptr<CBehaviorElements>> m_vBehaviorElements;
117
118 unsigned m_ColorActive = 0;
119 unsigned m_ColorInactive = 0;
120
121 // Used for creating ui elements.
125
126 // Functional variables.
127 bool m_FirstEnter = true; // Execute something when first opening the editor.
128 bool m_CloseMenu = false; // Decide if closing menu after the popup confirm.
129 bool m_NeedUpdatePreview = true; // Whether to reload the button being previewed.
130 bool m_NeedSort = true; // Whether to sort all previewed buttons.
131 bool m_NeedFilter = false; // Whether to exclude some buttons from preview.
132 std::vector<CTouchControls::CTouchButton *> m_vpButtons;
133 std::vector<CTouchControls::CTouchButton *> m_vpMutableButtons;
136
137 void RenderTouchButtonEditor(CUIRect MainView);
141 void RenderTouchButtonBrowser(CUIRect MainView);
143
144 void RenderSelectingTab(CUIRect SelectingTab);
145 void RenderConfigSettings(CUIRect MainView);
146 void RenderPreviewSettings(CUIRect MainView);
147 void RenderTouchControlsEditor(CUIRect MainView);
148
149 // Confirm, Cancel only decide if saving cached settings.
152 void NoSpaceForOverlappingButton() const;
154
155 // Getter and setters.
156 bool UnsavedChanges() const;
158
159 // Convenient functions.
160 bool CheckCachedSettings() const;
161 void ResetCachedSettings();
167 void UpdateSampleButton();
168 void ResetButtonPointers();
170 void ResolveIssues();
171 int CalculatePredefinedType(const char *pType) const;
173 const char **VisibilityNames() const;
174 const char **PredefinedNames() const;
175 const char *HelpMessageForBehaviorType(EBehaviorType Type) const;
176 const char *HelpMessageForPredefinedType(EPredefinedType Type) const;
178
180 {
181 public:
182 const char *m_pId;
183 std::function<std::unique_ptr<CTouchControls::CPredefinedTouchButtonBehavior>()> m_Factory;
184 };
185
187};
188
189#endif
Definition ui.h:269
Definition component.h:15
Definition lineinput.h:202
Definition lineinput.h:215
const char * GetString() const
Definition lineinput.h:133
void UpdateCommand()
Definition menus_ingame_touch_controls.h:113
std::string ParseLabel(const char *pLabel) const
Definition menus_ingame_touch_controls.cpp:1475
CButtonContainer m_aLabelTypeRadios[(int) CTouchControls::CButtonLabel::EType::NUM_TYPES]
Definition menus_ingame_touch_controls.h:100
CButtonContainer m_BindToggleDeleteButtons
Definition menus_ingame_touch_controls.h:99
CBehaviorElements() noexcept
Definition menus_ingame_touch_controls.cpp:1492
CButtonContainer m_BindToggleAddButtons
Definition menus_ingame_touch_controls.h:98
void Reset()
Definition menus_ingame_touch_controls.cpp:1526
CLineInputBuffered< 1024 > m_InputLabel
Definition menus_ingame_touch_controls.h:96
void UpdateLabel()
Definition menus_ingame_touch_controls.h:112
CLineInputBuffered< 1024 > m_InputCommand
Definition menus_ingame_touch_controls.h:95
void UpdateInputs()
Definition menus_ingame_touch_controls.cpp:1520
CTouchControls::CBindToggleTouchButtonBehavior::CCommand m_CachedCommands
Definition menus_ingame_touch_controls.h:97
Definition menus_ingame_touch_controls.h:180
const char * m_pId
Definition menus_ingame_touch_controls.h:182
std::function< std::unique_ptr< CTouchControls::CPredefinedTouchButtonBehavior >()> m_Factory
Definition menus_ingame_touch_controls.h:183
Definition menus_ingame_touch_controls.h:10
void DoPopupType(CTouchControls::CPopupParam PopupParam)
Definition menus_ingame_touch_controls.cpp:1137
void ResetButtonPointers()
Definition menus_ingame_touch_controls.cpp:1383
int m_SelectedPreviewButtonIndex
Definition menus_ingame_touch_controls.h:135
void ResetCachedSettings()
Definition menus_ingame_touch_controls.cpp:1220
CLineInputNumber m_InputX
Definition menus_ingame_touch_controls.h:82
EElementType m_EditElement
Definition menus_ingame_touch_controls.h:66
CTouchControls::CTouchButton * m_pNewSelectedButton
Definition menus_ingame_touch_controls.h:79
std::vector< CTouchControls::CTouchButton * > m_vpButtons
Definition menus_ingame_touch_controls.h:132
void InputPosFunction(CLineInputNumber *pInput)
Definition menus_ingame_touch_controls.cpp:1365
bool CheckCachedSettings() const
Definition menus_ingame_touch_controls.cpp:1182
CLineInputNumber m_InputH
Definition menus_ingame_touch_controls.h:85
void RenderTouchButtonEditor(CUIRect MainView)
Definition menus_ingame_touch_controls.cpp:48
CTouchControls::EButtonShape m_CachedShape
Definition menus_ingame_touch_controls.h:86
void SetUnsavedChanges(bool UnsavedChanges)
Definition menus_ingame_touch_controls.cpp:1176
EMenuType m_CurrentMenu
Definition menus_ingame_touch_controls.h:46
EBehaviorType m_EditBehaviorType
Definition menus_ingame_touch_controls.h:88
std::array< CButtonContainer,(unsigned) EElementType::NUM_ELEMENTS > m_aEditElementIds
Definition menus_ingame_touch_controls.h:124
bool m_NeedFilter
Definition menus_ingame_touch_controls.h:131
bool m_NeedSort
Definition menus_ingame_touch_controls.h:130
bool m_NeedUpdatePreview
Definition menus_ingame_touch_controls.h:129
void RenderTouchControlsEditor(CUIRect MainView)
Definition menus_ingame_touch_controls.cpp:1043
CTouchControls::CUnitRect GetPosInputs() const
Definition menus_ingame_touch_controls.cpp:1359
CLineInputNumber m_InputY
Definition menus_ingame_touch_controls.h:83
void UpdateSampleButton()
Definition menus_ingame_touch_controls.cpp:1375
bool m_CloseMenu
Definition menus_ingame_touch_controls.h:128
CTouchControls::CTouchButton * m_pOldSelectedButton
Definition menus_ingame_touch_controls.h:78
unsigned m_ColorActive
Definition menus_ingame_touch_controls.h:118
std::array< EVisibilityType,(size_t) CTouchControls::EButtonVisibility::NUM_VISIBILITIES > m_aCachedVisibilities
Definition menus_ingame_touch_controls.h:75
const char * HelpMessageForPredefinedType(EPredefinedType Type) const
Definition menus_ingame_touch_controls.cpp:1578
CLineInputNumber m_InputW
Definition menus_ingame_touch_controls.h:84
void SelectedButtonNotVisible()
Definition menus_ingame_touch_controls.cpp:1164
std::array< CButtonContainer,(unsigned) ESortType::NUM_SORTS > m_aSortHeaderIds
Definition menus_ingame_touch_controls.h:123
unsigned m_ColorInactive
Definition menus_ingame_touch_controls.h:119
const char ** PredefinedNames() const
Definition menus_ingame_touch_controls.cpp:1548
EBehaviorType
Definition menus_ingame_touch_controls.h:14
@ BIND
Definition menus_ingame_touch_controls.h:15
void CacheAllSettingsFromTarget(CTouchControls::CTouchButton *pTargetButton)
Definition menus_ingame_touch_controls.cpp:1237
bool RenderVisibilitySettingBlock(CUIRect Block)
Definition menus_ingame_touch_controls.cpp:559
void RenderConfigSettings(CUIRect MainView)
Definition menus_ingame_touch_controls.cpp:921
EMenuType
Definition menus_ingame_touch_controls.h:39
@ MENU_FILE
Definition menus_ingame_touch_controls.h:40
void RenderTouchButtonBrowser(CUIRect MainView)
Definition menus_ingame_touch_controls.cpp:634
bool NewButton(CTouchControls::CUnitRect Rect, CTouchControls::EButtonShape Shape)
Definition menus_ingame_touch_controls.cpp:1389
ESortType
Definition menus_ingame_touch_controls.h:49
@ NUM_SORTS
Definition menus_ingame_touch_controls.h:55
@ LABEL
Definition menus_ingame_touch_controls.h:50
void ResolveIssues()
Definition menus_ingame_touch_controls.cpp:1404
void RenderPreviewButton(CUIRect MainView)
std::array< CButtonContainer,(unsigned) CTouchControls::EButtonVisibility::NUM_VISIBILITIES > m_aVisibilityIds
Definition menus_ingame_touch_controls.h:122
int m_CachedExtraMenuNumber
Definition menus_ingame_touch_controls.h:90
CLineInputBuffered< 1024 > m_FilterInput
Definition menus_ingame_touch_controls.h:134
std::vector< std::unique_ptr< CBehaviorElements > > m_vBehaviorElements
Definition menus_ingame_touch_controls.h:116
bool RenderBehaviorSettingBlock(CUIRect Block)
Definition menus_ingame_touch_controls.cpp:276
void SaveCachedSettingsToTarget(CTouchControls::CTouchButton *pTargetButton) const
Definition menus_ingame_touch_controls.cpp:1304
void ChangeSelectedButtonWhileHavingUnsavedChanges() const
Definition menus_ingame_touch_controls.cpp:1152
ESortType m_SortType
Definition menus_ingame_touch_controls.h:57
const char * HelpMessageForBehaviorType(EBehaviorType Type) const
Definition menus_ingame_touch_controls.cpp:1566
static const CBehaviorFactoryEditor BEHAVIOR_FACTORIES_EDITOR[11]
Definition menus_ingame_touch_controls.h:35
bool m_FirstEnter
Definition menus_ingame_touch_controls.h:127
std::vector< CTouchControls::CTouchButton * > m_vpMutableButtons
Definition menus_ingame_touch_controls.h:133
void SetPosInputs(CTouchControls::CUnitRect MyRect)
Definition menus_ingame_touch_controls.cpp:1351
int CalculatePredefinedType(const char *pType) const
Definition menus_ingame_touch_controls.cpp:1430
bool RenderLayoutSettingBlock(CUIRect Block)
Definition menus_ingame_touch_controls.cpp:195
void NoSpaceForOverlappingButton() const
Definition menus_ingame_touch_controls.cpp:1159
void RenderSelectingTab(CUIRect SelectingTab)
Definition menus_ingame_touch_controls.cpp:900
EElementType
Definition menus_ingame_touch_controls.h:60
@ NUM_ELEMENTS
Definition menus_ingame_touch_controls.h:64
@ LAYOUT
Definition menus_ingame_touch_controls.h:61
static constexpr const float BUTTON_EDITOR_WIDTH
Definition menus_ingame_touch_controls.h:12
bool UnsavedChanges() const
Definition menus_ingame_touch_controls.cpp:1171
EVisibilityType
Definition menus_ingame_touch_controls.h:69
const char * HelpMessageForVisibilityType(CTouchControls::EButtonVisibility Type) const
Definition menus_ingame_touch_controls.cpp:1598
const char ** VisibilityNames() const
Definition menus_ingame_touch_controls.cpp:1533
EPredefinedType m_PredefinedBehaviorType
Definition menus_ingame_touch_controls.h:89
void RenderPreviewSettings(CUIRect MainView)
Definition menus_ingame_touch_controls.cpp:983
EPredefinedType
Definition menus_ingame_touch_controls.h:22
@ EXTRA_MENU
Definition menus_ingame_touch_controls.h:24
std::string DetermineTouchButtonCommandLabel(CTouchControls::CTouchButton *pButton) const
Definition menus_ingame_touch_controls.cpp:1442
std::string m_Label
Definition touch_controls.h:476
std::string m_Command
Definition touch_controls.h:478
@ NUM_TYPES
Definition touch_controls.h:139
Definition touch_controls.h:690
Definition touch_controls.h:184
Definition touch_controls.h:76
EButtonShape
Definition touch_controls.h:112
EButtonVisibility
Definition touch_controls.h:94
@ NUM_VISIBILITIES
Definition touch_controls.h:107
Definition ui_rect.h:12