ArcdpsExtension
 
Loading...
Searching...
No Matches
MainWindow.h
Go to the documentation of this file.
1#pragma once
2
3#include "ComponentBase.h"
4
5#include "../arcdps_structs.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 <vector>
14
15namespace ArcdpsExtension {
16 enum MainWindowFlags_ : int {
18 MainWindowFlags_NoStyleMenu = 1 << 0, // Do NOT show the Style submenu in the context menu
19 };
20 typedef int MainWindowFlags; // -> enum MainWindowFlags_
21
22 class MainWindow {
23 public:
24 MainWindow() = default;
25
26 virtual ~MainWindow();
27
28 // delete copy/move
29 MainWindow(const MainWindow& other) = delete;
30 MainWindow(MainWindow&& other) noexcept = delete;
31 MainWindow& operator=(const MainWindow& other) = delete;
32 MainWindow& operator=(MainWindow&& other) noexcept = delete;
33
38 virtual void Draw(ImGuiWindowFlags imGuiWindowFlags = 0, MainWindowFlags mainWindowFlags = 0);
39
43 virtual void Init();
44
50 void DrawOptionCheckbox();
51
61 virtual void SetMaxHeightCursorPos(float pNewCursorPos = ImGui::GetCursorPosY());
62
63 virtual bool& GetOpenVar() = 0;
64
65 ImGuiWindow* GetInnerWindow();
66
67 template<typename T>
68 requires std::is_base_of_v<ComponentBase, T>
70 mComponents.emplace_back(new T(this));
71 }
72
73 typedef std::function<void(ImGuiWindowFlags&)> PreDrawHookFunction;
75
76 typedef std::function<void()> ContextMenuHookFunction;
78
79 typedef std::function<void()> DrawContentHookFunction;
81
82 typedef std::function<void()> InitHookFunction;
84
85 typedef std::function<void()> DrawStyleSubMenuHookFunction;
87
93 virtual bool& GetShowScrollbar() = 0;
94
95 float GetMaxCursorPos();
96
97 protected:
98 ImGuiWindow* mThisWindow = nullptr;
99
104 virtual void DrawContextMenu() = 0;
105
110 virtual void DrawContent() = 0;
111
116 virtual void DrawSizingPolicySubSettings(SizingPolicy sizingPolicy) {}
117
119
124 virtual bool& getShowTitleBar() = 0;
125
129 virtual std::optional<std::string>& getTitle() = 0;
133 virtual const std::string& getTitleDefault() = 0;
138 virtual const std::string& getWindowID() = 0;
139
145 virtual std::optional<std::string>& getAppearAsInOption() = 0;
146
150 virtual const std::string& getAppearAsInOptionDefault() = 0;
151
156 virtual bool& getShowBackground() = 0;
157
162 virtual std::optional<ImVec2>& getPadding() = 0;
163
169 virtual bool getMaxHeightActive() { return false; }
170
177
185 virtual void DrawStyleSettingsSubMenu();
186
191 virtual bool KeyBindPressed();
192
193 private:
194 bool mPaddingActive = false;
195 float mPaddingBuffer[2]{};
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:22
std::function< void()> DrawStyleSubMenuHookFunction
Definition MainWindow.h:85
void CreateComponent()
Definition MainWindow.h:69
virtual bool getMaxHeightActive()
Definition MainWindow.h:169
virtual void Draw(ImGuiWindowFlags imGuiWindowFlags=0, MainWindowFlags mainWindowFlags=0)
Definition MainWindow.cpp:14
void RegisterPreDrawHook(PreDrawHookFunction pFun)
Definition MainWindow.cpp:144
void RegisterContentHook(DrawContentHookFunction pFun)
Definition MainWindow.cpp:152
MainWindow & operator=(MainWindow &&other) noexcept=delete
virtual const std::string & getAppearAsInOptionDefault()=0
virtual bool KeyBindPressed()
Definition MainWindow.cpp:243
virtual void DrawContent()=0
MainWindow & operator=(const MainWindow &other)=delete
ImGuiWindow * GetInnerWindow()
Definition MainWindow.cpp:140
float GetMaxCursorPos()
Definition MainWindow.cpp:164
virtual gwlanguage getCurrentLanguage()
Definition MainWindow.h:176
virtual bool & GetShowScrollbar()=0
void RegisterInitHook(InitHookFunction pFun)
Definition MainWindow.cpp:156
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:136
virtual SizingPolicy & getSizingPolicy()=0
virtual void DrawStyleSettingsSubMenu()
Definition MainWindow.cpp:168
std::function< void()> InitHookFunction
Definition MainWindow.h:82
virtual void DrawSizingPolicySubSettings(SizingPolicy sizingPolicy)
Definition MainWindow.h:116
virtual std::optional< std::string > & getAppearAsInOption()=0
ImGuiWindow * mThisWindow
Definition MainWindow.h:98
virtual void DrawContextMenu()=0
virtual bool & getShowTitleBar()=0
void DrawOptionCheckbox()
Definition MainWindow.cpp:130
std::function< void()> ContextMenuHookFunction
Definition MainWindow.h:76
void RegisterDrawStyleSubMenuHook(DrawStyleSubMenuHookFunction pFun)
Definition MainWindow.cpp:160
virtual std::optional< std::string > & getTitle()=0
virtual bool & GetOpenVar()=0
std::function< void()> DrawContentHookFunction
Definition MainWindow.h:79
void RegisterContextMenuHook(ContextMenuHookFunction pFun)
Definition MainWindow.cpp:148
virtual const std::string & getTitleDefault()=0
virtual void Init()
Definition MainWindow.cpp:124
std::function< void(ImGuiWindowFlags &)> PreDrawHookFunction
Definition MainWindow.h:73
virtual const std::string & getWindowID()=0
virtual ~MainWindow()
Definition MainWindow.cpp:10
Definition ArcdpsExtension.h:10
MainWindowFlags_
Definition MainWindow.h:16
@ MainWindowFlags_None
Definition MainWindow.h:17
@ MainWindowFlags_NoStyleMenu
Definition MainWindow.h:18
int MainWindowFlags
Definition MainWindow.h:20