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
|
#ifndef MENU_H
#define MENU_H
#include <libultraship/libultraship.h>
#include "UIWidgets.h"
#include "MenuTypes.h"
extern "C" {
#include "defines.h"
#include "main.h"
#include "menus.h"
}
namespace Ship {
uint32_t GetVectorIndexOf(std::vector<std::string>& vector, std::string value);
class Menu : public GuiWindow {
public:
using GuiWindow::GuiWindow;
Menu(const std::string& cVar, const std::string& name, uint8_t searchSidebarIndex_ = 0,
UIWidgets::Colors menuThemeIndex_ = UIWidgets::Colors::LightBlue);
virtual ~Menu() {}
void InitElement() override;
void DrawElement() override;
void UpdateElement() override;
void Draw() override;
void InsertSidebarSearch();
void RemoveSidebarSearch();
void UpdateWindowBackendObjects();
void MenuDrawItem(WidgetInfo& widget, uint32_t width, UIWidgets::Colors menuThemeIndex);
void AddMenuEntry(std::string entryName, const char* entryCvar);
std::unordered_map<uint32_t, disabledInfo>& GetDisabledMap();
protected:
ImVec2 mOriginalSize;
std::string mName;
uint32_t mWindowFlags;
std::unordered_map<std::string, MainMenuEntry> menuEntries;
std::vector<std::string> menuOrder;
uint32_t DrawSearchResults(std::string& menuSearchText);
ImGuiTextFilter menuSearch;
uint8_t searchSidebarIndex;
UIWidgets::Colors defaultThemeIndex;
std::shared_ptr<std::vector<Ship::WindowBackend>> availableWindowBackends;
std::unordered_map<Ship::WindowBackend, const char*> availableWindowBackendsMap;
Ship::WindowBackend configWindowBackend;
std::unordered_map<uint32_t, disabledInfo> disabledMap;
std::vector<disabledInfo> disabledVector;
const SidebarEntry searchSidebarEntry = {
.columnCount = 1,
.columnWidgets = { { { .name = "Sidebar Search",
.type = WIDGET_SEARCH,
.options = std::make_shared<UIWidgets::WidgetOptions>(UIWidgets::WidgetOptions{}.Tooltip(
"Searches all menus for the given text, including tooltips.")) } } }
};
virtual void ProcessReset() {
gGamestateNext = MAIN_MENU_FROM_QUIT;
if (CVarGetInteger("gEnableDebugMode", 0) == true) {
gMenuSelection = START_MENU;
} else {
gMenuSelection = LOGO_INTRO_MENU;
}
}
private:
bool allowPopout = true; // PortNote: should be set to false on small screen ports
bool popped;
ImVec2 poppedSize;
ImVec2 poppedPos;
float windowHeight;
float windowWidth;
};
} // namespace Ship
#endif // MENU_H
|