-
Notifications
You must be signed in to change notification settings - Fork 1
/
UserInterface.h
209 lines (187 loc) · 6.17 KB
/
UserInterface.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
/*
* MainMenuFunc.h
*
* Created on: 18 Dec 2023
* Author: Andy E
*/
#ifndef JNI_UI_USERINTERFACE_HPP_
#define JNI_UI_USERINTERFACE_HPP_
#include "activity/mainActivity.h"
#include "control/ZKBase.h"
#include "control/ZKEditText.h"
#include "control/ZKListView.h"
#include "control/ZKSeekBar.h"
#include "control/ZKTextView.h"
#include "std_fixed/functional.h"
#include "window/ZKWindow.h"
#include <string>
#include <sys/types.h>
#include <vector>
#include "Comm/FileInfo.h"
#include "Configuration.h"
#include "Duet3D/General/CircularBuffer.h"
#include "Duet3D/General/String.h"
#include "Duet3D/General/StringRef.h"
#include "Duet3D/General/Vector.h"
#include "ObjectModel/BedOrChamber.h"
#include "ObjectModel/Files.h"
#include "ObjectModel/Tool.h"
#include "UI/Popup.h"
namespace UI
{
/// @brief Used to display an item in a list view and a callback for when the item is selected
/// @param id The name of the item. The string will be used to look up the translation
/// @param callback The function to call when the item is selected
struct WindowSelectItem
{
const char* id; // name of the window. The string will be used to look up the translation
function<void()> callback; // function to call when the item is selected
};
class Window
{
public:
static Window& GetInstance();
void AddHome(ZKBase* home);
void ClearHome();
void OpenWindow(const int windowId);
void OpenWindow(ZKBase* window);
void OpenOverlay(const int windowId, bool closeAlreadyOpened = true);
void OpenOverlay(ZKBase* window, bool closeAlreadyOpened = true);
bool IsOverlayOpened();
bool CloseOverlay();
size_t ReOpenLastWindow(size_t numWindows);
void CloseLastWindow();
void CloseWindow(ZKBase* window, const bool returnable = true);
void Back();
void Home();
void Clear();
private:
std::vector<ZKBase*> m_openedWindows;
std::vector<ZKBase*> m_closedWindows;
std::vector<ZKBase*> m_homeWindows;
std::vector<ZKBase*> m_overlayWindows;
};
enum class HeaterType
{
tool = 0,
bed,
chamber
};
class ToolsList
{
public:
struct ToolListItemData
{
OM::Tool* tool;
int8_t toolHeaterIndex;
OM::ToolHeater* toolHeater;
OM::Spindle* spindle;
ToolListItemData()
{
tool = nullptr;
toolHeaterIndex = -1;
toolHeater = nullptr;
spindle = nullptr;
}
};
struct NumPadData
{
HeaterType heaterType;
bool active;
ToolListItemData toolData; // Tool control
size_t bedOrChamberIndex; // bed or chamber control
};
ToolsList();
void Init(ZKListView* toolListView);
void CalculateTotalHeaterCount();
size_t GetTotalHeaterCount(const bool calculate, const bool addTools = true, const bool addBeds = true,
const bool addChambers = true);
void ObtainListItemData(ZKListView::ZKListItem* pListItem,
int index,
const int nameId,
const int statusId,
const int currentId,
const int activeId,
const int standbyId);
void OnListItemClick(int index, int id, const int nameId, int statusId, int activeId, int standbyId);
void RefreshToolList(const bool lengthChanged = true);
static void RefreshAllToolLists(const bool lengthChanged = true);
void OpenNumPad(const NumPadData data);
bool SendTempTarget(int value);
bool SendSpindleTarget(int value);
ToolListItemData GetToolListItemDataBySlot(const size_t listIndex);
private:
size_t m_toolCount, m_bedCount, m_chamberCount;
NumPadData m_numPadData;
ZKListView* m_pToolListView = nullptr;
};
class Console
{
public:
Console() {}
static Console& GetInstance()
{
static Console console;
return console;
}
void Init(ZKListView* console, ZKEditText* input);
void AddCommand(const std::string& command);
void AddResponse(const char* str);
void AddResponse(const StringRef& ref);
void AddLineBreak();
size_t GetItemCount() const { return m_buffer.GetFilled(); }
String<MAX_RESPONSE_LINE_LENGTH> GetItem(size_t index) { return m_buffer.GetItem(index); }
void Refresh();
void Clear();
private:
void AddMessage(const StringRef& ref);
void AddMessage(const char* str);
CircularBuffer<String<MAX_RESPONSE_LINE_LENGTH>, MAX_RESPONSE_LINES> m_buffer;
ZKListView* m_console = nullptr;
ZKEditText* m_input = nullptr;
};
void Init(ZKWindow* root);
ZKWindow* GetRootWindow();
ZKBase* GetUIControl(int id);
template <typename T>
T* GetUIControl(int id)
{
ZKBase* control = GetUIControl(id);
if (control == nullptr)
{
return nullptr;
}
return dynamic_cast<T*>(control);
}
/**
* Sets the relative position of an icon within a ZKButton control.
*
* @param control The ZKButton control.
* @param xPos The x-position of the icon center as a percentage of the control's width.
* Relative to the control's top-left corner. 0.0 is the left edge, 1.0 is the right edge.
* @param yPos The y-position of the icon center as a percentage of the control's height.
* Relative to the control's top-left corner. 0.0 is the top edge, 1.0 is the bottom edge.
* @param scale The scale factor to apply to the icon's size. Scaled based on the smallest of the control's width or
* height.
*/
void SetIconRelativePosition(ZKButton* control, float xPos, float yPos, float scale);
/**
* Sets the relative position of an icon within a ZKButton control.
*
* @param control The ZKButton control.
* @param xPos The x-position of the icon center as a percentage of the control's width.
* Relative to the control's top-left corner. 0.0 is the left edge, 1.0 is the right edge.
* @param yPos The y-position of the icon center as a percentage of the control's height.
* Relative to the control's top-left corner. 0.0 is the top edge, 1.0 is the bottom edge.
* @param xScale The scale factor to apply to the icon's width.
* @param yScale The scale factor to apply to the icon's height.
*/
void SetIconRelativePosition(ZKButton* control, float xPos, float yPos, float xScale, float yScale);
void SetM291Popup(OM::Alert alert);
#define WINDOW Window::GetInstance()
#define NUMPAD_WINDOW NumPadWindow::GetInstance()
#define POPUP_WINDOW PopupWindow::GetInstance()
#define SLIDER_WINDOW SliderWindow::GetInstance()
#define CONSOLE Console::GetInstance()
} // namespace UI
#endif /* JNI_UI_USERINTERFACE_HPP_ */