ArcdpsExtension
 
Loading...
Searching...
No Matches
MainWindow.h
Go to the documentation of this file.
1#pragma once
2
3#include "ComponentBase.h"
4#include "../arcdps_structs.h"
5#include "../arcdps_structs_slim.h"
6
7#include <functional>
8#include <imgui/imgui.h>
9#include <imgui/imgui_internal.h>
10#include <memory>
11#include <optional>
12#include <string>
13#include <type_traits>
14#include <vector>
15
16namespace ArcdpsExtension {
17 enum MainWindowFlags_ : int {
19 MainWindowFlags_NoStyleMenu = 1 << 0, // Do NOT show the Style submenu in the context menu
20 };
21 typedef int MainWindowFlags; // -> enum MainWindowFlags_
22
23 class MainWindow {
24 public:
25 MainWindow() = default;
26
27 virtual ~MainWindow();
28
29 // delete copy/move
30 MainWindow(const MainWindow& other) = delete;
31 MainWindow(MainWindow&& other) noexcept = delete;
32 MainWindow& operator=(const MainWindow& other) = delete;
33 MainWindow& operator=(MainWindow&& other) noexcept = delete;
34
39 virtual void Draw(ImGuiWindowFlags imGuiWindowFlags = 0, MainWindowFlags mainWindowFlags = 0);
40
44 virtual void Init();
45
51 void DrawOptionCheckbox();
52
62 virtual void SetMaxHeightCursorPos(float pNewCursorPos = ImGui::GetCursorPosY());
63
64 virtual bool& GetOpenVar() = 0;
65
66 ImGuiWindow* GetInnerWindow();
67
68 template<typename T>
69 requires std::is_base_of_v<ComponentBase, T>
71 mComponents.emplace_back(new T(this));
72 }
73
74 typedef std::function<void(ImGuiWindowFlags&)> PreDrawHookFunction;
76
77 typedef std::function<void()> ContextMenuHookFunction;
79
80 typedef std::function<void()> DrawContentHookFunction;
82
83 typedef std::function<void()> InitHookFunction;
85
86 typedef std::function<void()> DrawStyleSubMenuHookFunction;
88
94 virtual bool& GetShowScrollbar() = 0;
95
96 float GetMaxCursorPos();
97
98 protected:
99 ImGuiWindow* mThisWindow = nullptr;
100
105 virtual void DrawContextMenu() = 0;
106
111 virtual void DrawContent() = 0;
112
117 virtual void DrawSizingPolicySubSettings(SizingPolicy sizingPolicy) {}
118
120
125 virtual bool& getShowTitleBar() = 0;
126
130 virtual std::optional<std::string>& getTitle() = 0;
134 virtual std::string_view getTitleDefault() = 0;
139 virtual std::string_view getWindowID() = 0;
140
146 virtual std::optional<std::string>& getAppearAsInOption() = 0;
147
151 virtual std::string_view getAppearAsInOptionDefault() = 0;
152
157 virtual bool& getShowBackground() = 0;
158
163 virtual std::optional<ImVec2>& getPadding() = 0;
164
170 virtual bool getMaxHeightActive() { return false; }
171
178
186 virtual void DrawStyleSettingsSubMenu();
187
192 virtual bool KeyBindPressed();
193
194 private:
195 bool mPaddingActive = false;
196 float mMaxHeightCursorPos = 0.f;
197 std::string mAppearAsInOptionTextBuffer;
198 std::string mTitleBuffer;
199
200 std::vector<PreDrawHookFunction> mPreDrawHooks;
201 std::vector<ContextMenuHookFunction> mContextMenuHooks;
202 std::vector<DrawContentHookFunction> mDrawContentHooks;
203 std::vector<InitHookFunction> mInitHooks;
204 std::vector<DrawStyleSubMenuHookFunction> mDrawStyleSubMenuHooks;
205
206 std::vector<std::unique_ptr<ComponentBase>> mComponents;
207 };
208} // namespace ArcdpsExtension
SizingPolicy
Definition arcdps_structs.h:90
gwlanguage
Definition arcdps_structs_slim.h:162
@ GWL_ENG
Definition arcdps_structs_slim.h:163
Definition MainWindow.h:23
std::function< void()> DrawStyleSubMenuHookFunction
Definition MainWindow.h:86
void CreateComponent()
Definition MainWindow.h:70
virtual bool getMaxHeightActive()
Definition MainWindow.h:170
virtual void Draw(ImGuiWindowFlags imGuiWindowFlags=0, MainWindowFlags mainWindowFlags=0)
Definition MainWindow.cpp:24
void RegisterPreDrawHook(PreDrawHookFunction pFun)
Definition MainWindow.cpp:155
void RegisterContentHook(DrawContentHookFunction pFun)
Definition MainWindow.cpp:163
virtual std::string_view getAppearAsInOptionDefault()=0
MainWindow & operator=(MainWindow &&other) noexcept=delete
virtual bool KeyBindPressed()
Definition MainWindow.cpp:230
virtual void DrawContent()=0
MainWindow & operator=(const MainWindow &other)=delete
ImGuiWindow * GetInnerWindow()
Definition MainWindow.cpp:151
float GetMaxCursorPos()
Definition MainWindow.cpp:175
virtual gwlanguage getCurrentLanguage()
Definition MainWindow.h:177
virtual bool & GetShowScrollbar()=0
void RegisterInitHook(InitHookFunction pFun)
Definition MainWindow.cpp:167
virtual std::optional< ImVec2 > & getPadding()=0
MainWindow(const MainWindow &other)=delete
MainWindow(MainWindow &&other) noexcept=delete
virtual bool & getShowBackground()=0
virtual void SetMaxHeightCursorPos(float pNewCursorPos=ImGui::GetCursorPosY())
Definition MainWindow.cpp:147
virtual SizingPolicy & getSizingPolicy()=0
virtual std::string_view getWindowID()=0
virtual void DrawStyleSettingsSubMenu()
Definition MainWindow.cpp:179
std::function< void()> InitHookFunction
Definition MainWindow.h:83
virtual void DrawSizingPolicySubSettings(SizingPolicy sizingPolicy)
Definition MainWindow.h:117
virtual std::optional< std::string > & getAppearAsInOption()=0
ImGuiWindow * mThisWindow
Definition MainWindow.h:99
virtual void DrawContextMenu()=0
virtual bool & getShowTitleBar()=0
void DrawOptionCheckbox()
Definition MainWindow.cpp:138
std::function< void()> ContextMenuHookFunction
Definition MainWindow.h:77
void RegisterDrawStyleSubMenuHook(DrawStyleSubMenuHookFunction pFun)
Definition MainWindow.cpp:171
virtual std::optional< std::string > & getTitle()=0
virtual bool & GetOpenVar()=0
std::function< void()> DrawContentHookFunction
Definition MainWindow.h:80
void RegisterContextMenuHook(ContextMenuHookFunction pFun)
Definition MainWindow.cpp:159
virtual std::string_view getTitleDefault()=0
virtual void Init()
Definition MainWindow.cpp:132
std::function< void(ImGuiWindowFlags &)> PreDrawHookFunction
Definition MainWindow.h:74
virtual ~MainWindow()
Definition MainWindow.cpp:20
Definition ArcdpsExtension.h:10
MainWindowFlags_
Definition MainWindow.h:17
@ MainWindowFlags_None
Definition MainWindow.h:18
@ MainWindowFlags_NoStyleMenu
Definition MainWindow.h:19
int MainWindowFlags
Definition MainWindow.h:21