Elaztek Developer Hub
Blamite Game Engine - blam!  00406.12.10.23.1457.blamite
The core library for the Blamite Game Engine.
menubar.hpp
Go to the documentation of this file.
1 #pragma once
2 
4 
5 #include <Strings/components/utils/io/io.h>
6 #include <Strings/components/utils/web/web.h>
7 
8 #include "devtools_bar.hpp"
15 #include "components/ui/blam/ui.h"
16 #include "version_data.h"
17 
24 {
25 private:
26  BlamImGuiWindow_DevToolsBar* old_menu;
27 
28  bool old_devtools_bar = false;
29  bool show_menubar = true;
30 
31  int commit_hash_label = 0;
32 
33  bool show_imgui_font_picker = false;
34  bool show_imgui_metrics = false;
35  bool show_imgui_style_picker = false;
36  bool show_imgui_style_editor = false;
37 
38  bool main_menu = true;
39 
40 public:
47  BlamImGuiWindow_MenuBar(bool show_in_window)
48  {
49  if (show_in_window)
50  {
51  main_menu = false;
52  }
53  else
54  {
55  main_menu = true;
56 
57  old_menu = new BlamImGuiWindow_DevToolsBar(false);
58  old_menu->SetDrawModeNotMainMenu();
59  }
60  }
61 
66  {
67  if (old_menu)
68  {
69  delete(old_menu);
70  }
71  }
72 
79  void Draw()
80  {
81  show_menubar = show;
82 
83  // Main Menu (titlebar)
84  if (show_menubar)
85  {
86  //if (ImGui::BeginMainMenuBar())
87  {
88  if (main_menu)
89  {
91  }
92  else
93  {
96  }
97 
98  if (ImGui::BeginMenu("File"))
99  {
100  ImGui::MenuItem("Open .map file", NULL, false, false); Blam::UI::ImGUI::Widgets::ShowNYITooltip();
101  ImGui::MenuItem("Return to mainmenu", NULL, false, false); Blam::UI::ImGUI::Widgets::ShowNYITooltip();
102  if (ImGui::MenuItem("Open game dir", NULL)) BlamStrings::Utils::IO::OpenGameDirectory();
104  if (ImGui::MenuItem("Open Report Viewer", NULL))
105  {
106  std::string report_viewer_page = *ENGINE_CFG->GetString("paths", "game_data_root") + "./"
107  + *ENGINE_CFG->GetString("paths", "reports_dir") + "./index.html";
108 
109  BlamStrings::Utils::Web::OpenLocalWebURL(report_viewer_page);
110  }
112  ImGui::MenuItem("Exit", NULL, duigvs("exit_via_menu"));
113  ImGui::EndMenu();
114  }
115  if (ImGui::BeginMenu("Tools"))
116  {
119  if (ImGui::BeginMenu("Network"))
120  {
121  ImGui::MenuItem("Show Network Info", NULL, duigvs("network_stats"));
122  ImGui::MenuItem("Discord Rich Presence", NULL, duigvs("discord_rpc_ui"));
123  ImGui::EndMenu();
124  }
125 
126  if (ImGui::BeginMenu("Rendering"))
127  {
128  ImGui::MenuItem("Render Stack Editor", NULL, duigvs("render_stack_editor"));
129  ImGui::MenuItem("Font Editor", NULL, duigvs("font_editor"));
130 
131  ImGui::EndMenu();
132  }
133 
134  if (ImGui::BeginMenu("Test"))
135  {
136  if (ImGui::BeginMenu("Deprecated"))
137  {
138  ImGui::TextColored(ImVec4(1, 0, 0, 1), ENGINE_TEXT("imgui_menu_deprecated_warning").c_str());
140  ImGui::MenuItem("Crash Test", NULL, duigvs("crash_test_ui"));
141  ImGui::MenuItem("Access Key Dialog", NULL, duigvs("license_startup_prompt"));
142  ImGui::MenuItem("Old Menu", NULL, &old_devtools_bar);
143 
144  ImGui::EndMenu();
145  }
146 
147  if (ImGui::BeginMenu("Rendering"))
148  {
149  ImGui::MenuItem("Direct2D Test Window", NULL, duigvs("d2d_test"));
150  ImGui::MenuItem("bgfx Test Window", NULL, duigvs("bgfx_test"));
151  ImGui::MenuItem("Geometry Test", NULL, duigvs("geometry_test"));
153  ImGui::MenuItem("Toggle Render Target Clearing", "F3 + R", nullptr);
154 
155  ImGui::EndMenu();
156  }
157  ImGui::MenuItem("Default Example Window", NULL, duigvs("dx11_window"));
158  ImGui::MenuItem("ImGui Demo Window", NULL, ((BlamImGuiWindow_DirectX11Window*)Blam::UI::ImGUI::GetImGuiWindow("dx11_window"))->show_test_window);
159 
160  ImGui::EndMenu();
161  }
162 
163  if (ImGui::BeginMenu("ImGUI"))
164  {
165  ImGui::MenuItem("Font Selector", NULL, &show_imgui_font_picker);
166  ImGui::MenuItem("Metrics", NULL, &show_imgui_metrics);
167  ImGui::MenuItem("Style Selector", NULL, &show_imgui_style_picker);
168  ImGui::MenuItem("Style Editor", NULL, &show_imgui_style_editor);
169 
170  ImGui::EndMenu();
171  }
172 
174  if (ImGui::MenuItem("Take Screenshot", "F2")) Blam::Rendering::TakeScreenshot();
175 
177 
178  ImGui::MenuItem("Engine Text Viewer", NULL, duigvs("engine_text_viewer"));
179 
181 
182  ImGui::MenuItem("Tag Editor", NULL, duigvs("tag_editor"));
183  ImGui::MenuItem("Globals Editor", NULL, duigvs("globals_editor"));
184 
186 
187  ImGui::MenuItem("Director Debug", NULL, duigvs("director_tool"));
188  ImGui::MenuItem("Execute Command", NULL, duigvs("imgui_console"));
189 
190  ImGui::EndMenu();
191  }
192  if (ImGui::BeginMenu("Network Tools"))
193  {
194  ImGui::MenuItem(ENGINE_TEXT("imgui_menu_placeholder_notice").c_str(), NULL, false, false); Blam::UI::ImGUI::Widgets::ShowNYITooltip();
195  ImGui::EndMenu();
196  }
197  if (ImGui::BeginMenu("Debug"))
198  {
199  if (ImGui::MenuItem("Debug Menu", "PgUp"))
200  {
201  bool found_debug_menu = false;
202  BlamUIWidget* debug_menu = nullptr;
203 
205 
206  if (ui_root)
207  {
208  for (BlamUIWidget* widget : ui_root->children)
209  {
210  if (widget->GetType() == BlamWidgetType::DebugMenu)
211  {
212  debug_menu = widget;
213  found_debug_menu = true;
214  break;
215  }
216  }
217  }
218 
219  if (found_debug_menu)
220  {
221  debug_menu->SetHidden(!debug_menu->IsHidden());
222  }
223  else
224  {
225  Blam::Logger::LogEventForce("failed to find debug menu in ui root!", WSV_ERROR);
226  }
227  }
228  ImGui::MenuItem("Debug Menu (imgui)", "Shift + PgUp", duigvs("debug_menu"));
229  ImGui::EndMenu();
230  }
231  if (ImGui::BeginMenu("Settings"))
232  {
233  ImGui::MenuItem("Configuration Editor", NULL, false, false); Blam::UI::ImGUI::Widgets::ShowNYITooltip();
234  ImGui::MenuItem("Theme Selector", NULL, duigvs("theme_selector"));
235  ImGui::MenuItem("Theme Editor", NULL, duigvs("theme_editor"));
236  ImGui::EndMenu();
237  }
238  if (ImGui::BeginMenu("Monitoring"))
239  {
240  ImGui::MenuItem("Show FPS", NULL, false, false); Blam::UI::ImGUI::Widgets::ShowNYITooltip();
242  ImGui::MenuItem("Show Usage Info", NULL, false, false); Blam::UI::ImGUI::Widgets::ShowNYITooltip();
243  ImGui::EndMenu();
244  }
245  if (ImGui::BeginMenu("Help"))
246  {
247  ImGui::MenuItem("ImGui User Guide", NULL, duigvs("imgui_user_guide"));
249  ImGui::MenuItem("About ImGui", NULL, duigvs("imgui_info"));
250  ImGui::MenuItem("About Blamite", NULL, duigvs("engine_info_new"));
251  ImGui::EndMenu();
252  }
253 
254  if (main_menu)
255  {
256  ImGui::SameLine(ImGui::GetWindowWidth() - (commit_hash_label + 15));
257  }
258 
260  if (ImGui::IsItemHovered())
261  {
263  ImGui::PushTextWrapPos(450.0f);
264  ImGui::TextUnformatted(ENGINE_TEXT("imgui_menu_commit_tooltip_title").c_str());
265 
267 
268  ImGui::TextUnformatted(ENGINE_TEXT("imgui_menu_commit_tooltip_text").c_str());
269 
270 
273  }
274 
275  ImVec2 commit_label_size = ImGui::GetItemRectSize();
276 
277  commit_hash_label = commit_label_size.x;
278 
279  if (main_menu)
280  {
282  }
283  else
284  {
286 
287  ImGui::Text("this is the final iteration of the hardcoded menu bar");
288  ImGui::Text("all newer menu bar changes are controlled by menu_bar_init.xml");
289 
290  ImGui::End();
291  }
292  }
293  }
294 
295  if (old_devtools_bar)
296  {
298 
299  old_menu->Draw();
300 
301  ImGui::Text("can't imagine why you'd need it, but here it is");
302 
303  ImGui::End();
304  }
305 
306  if (show_imgui_font_picker)
307  {
308  ImGui::ShowFontSelector("Choose Font");
309  }
310 
311  if (show_imgui_metrics)
312  {
313  ImGui::ShowMetricsWindow(&show_imgui_metrics);
314  }
315 
316  if (show_imgui_style_picker)
317  {
318  ImGui::ShowStyleSelector("Choose Style");
319  }
320 
321  if (show_imgui_style_editor)
322  {
323  if (ImGui::Begin("ImGui Style Editor", &show_imgui_style_editor))
324  {
326  }
327  ImGui::End();
328  }
329  }
330 };
ui.h
BlamWidgetType::DebugMenu
@ DebugMenu
Special widget. Used for the in-game debug menu.
BlamImGuiWindow_MenuBar
Class for the main ImGUI menu bar.
Definition: menubar.hpp:23
duigvs
#define duigvs(x)
Macro for Blam::DebugUI::GetVisibility().
Definition: imgui.h:18
Blam::UI::ImGUI::Widgets::ShowNYITooltip
BLAM void ShowNYITooltip()
Shows a tooltip with the text Not yet implemented upon hovered.
Definition: widgets.cpp:20
ImGui::ShowMetricsWindow
IMGUI_API void ShowMetricsWindow(bool *p_open=NULL)
Definition: imgui.cpp:9780
BlamUIWidget_Group
Class representing a Group widget.
Definition: ui.h:263
ImGui::EndMenu
IMGUI_API void EndMenu()
Definition: imgui_widgets.cpp:6224
ImGui::BeginTooltip
IMGUI_API void BeginTooltip()
Definition: imgui.cpp:7362
ImGui::EndMainMenuBar
IMGUI_API void EndMainMenuBar()
Definition: imgui_widgets.cpp:5995
logger.h
Blam::UI::GetUIRoot
BLAM BlamUIWidget_Group * GetUIRoot()
Retrieves the root UI group widget.
Definition: ui.cpp:64
BlamImGuiWindow::show
bool show
Controls whether or not the group should be shown. May not be used in all groups.
Definition: imgui.h:34
version_data.h
ImVec4
Definition: imgui.h:192
ImGui::End
IMGUI_API void End()
Definition: imgui.cpp:6016
Blam::Rendering::TakeScreenshot
BLAM void TakeScreenshot()
Instructs OGRE to save a screenshot on the next frame.
Definition: ogre.cpp:383
BlamUIWidget::GetType
BlamWidgetType GetType()
Retrieves the type of this widget.
Definition: BlamUIWidget.cpp:207
engine_text.h
BlamImGuiWindow_MenuBar::Draw
void Draw()
Draws the menu bar contents and calculates the size of the commit hash text size.
Definition: menubar.hpp:79
ImGui::BeginMainMenuBar
IMGUI_API bool BeginMainMenuBar()
Definition: imgui_widgets.cpp:5975
ImVec2::x
float x
Definition: imgui.h:181
BlamImGuiWindow_DevToolsBar::Draw
void Draw()
Draws the menu bar contents.
Definition: devtools_bar.hpp:46
ImGui::SameLine
IMGUI_API void SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f)
Definition: imgui.cpp:7147
BlamImGuiWindow
Class representing an ImGUI window.
Definition: imgui.h:31
dx11_window.hpp
ImGui::MenuItem
IMGUI_API bool MenuItem(const char *label, const char *shortcut=NULL, bool selected=false, bool enabled=true)
Definition: imgui_widgets.cpp:6240
ImVec2
Definition: imgui.h:179
NULL
Add a fourth parameter to bake specific font ranges NULL
Definition: README.txt:57
ImGui::IsItemHovered
IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags=0)
Definition: imgui.cpp:3061
ImGui::ShowStyleSelector
IMGUI_API bool ShowStyleSelector(const char *label)
Definition: imgui_demo.cpp:3123
ImGui::Begin
IMGUI_API bool Begin(const char *name, bool *p_open=NULL, ImGuiWindowFlags flags=0)
Definition: imgui.cpp:5397
BlamImGuiWindow_DevToolsBar
Class for the original menu bar shown with ImGUI.
Definition: devtools_bar.hpp:16
BlamUIWidget_Group::children
std::vector< BlamUIWidget * > children
The list of child widgets within this group.
Definition: ui.h:270
ENGINE_CFG
#define ENGINE_CFG
Macro to allow quicker access to the main configuration file.
Definition: config.h:20
ImGui::BeginMenuBar
IMGUI_API bool BeginMenuBar()
Definition: imgui_widgets.cpp:6012
ImGui::GetItemRectSize
IMGUI_API ImVec2 GetItemRectSize()
Definition: imgui.cpp:4689
BlamUIWidget::SetHidden
virtual void SetHidden(bool new_hidden)
Sets the hidden state of the widget.
Definition: BlamUIWidget.cpp:415
BlamImGuiWindow_MenuBar::~BlamImGuiWindow_MenuBar
~BlamImGuiWindow_MenuBar()
Cleans up the legacy menu bar data.
Definition: menubar.hpp:65
ImGui::Text
IMGUI_API void Text(const char *fmt,...) IM_FMTARGS(1)
Definition: imgui_widgets.cpp:238
ImGui::PopTextWrapPos
IMGUI_API void PopTextWrapPos()
Definition: imgui.cpp:6313
ImGui::EndTooltip
IMGUI_API void EndTooltip()
Definition: imgui.cpp:7402
main_menu
BlamDebugMenu * main_menu
The current debug menu information.
Definition: debug_menu.cpp:15
BlamImGuiWindow_MenuBar::BlamImGuiWindow_MenuBar
BlamImGuiWindow_MenuBar(bool show_in_window)
Initializes data for the legacy menu bar and instructs it to draw as a standard menu rather than the ...
Definition: menubar.hpp:47
ImGui::BeginMenu
IMGUI_API bool BeginMenu(const char *label, bool enabled=true)
Definition: imgui_widgets.cpp:6081
utilities.h
CURRENT_COMMIT
#define CURRENT_COMMIT
Definition: version_data.h:14
BlamUIWidget
Base class for a UI widget.
Definition: ui.h:87
engine_definitions.h
ImGui::EndMenuBar
IMGUI_API void EndMenuBar()
Definition: imgui_widgets.cpp:6040
ui_root
BlamUIWidget_Group * ui_root
The UI root widget.
Definition: ui.cpp:13
ImGui::ShowStyleEditor
IMGUI_API void ShowStyleEditor(ImGuiStyle *ref=NULL)
Definition: imgui_demo.cpp:3165
ImGuiWindowFlags_AlwaysAutoResize
@ ImGuiWindowFlags_AlwaysAutoResize
Definition: imgui.h:720
ENGINE_TEXT
#define ENGINE_TEXT(string_id)
Definition: engine_text.h:7
ImGuiWindowFlags_MenuBar
@ ImGuiWindowFlags_MenuBar
Definition: imgui.h:724
imgui.h
BlamUIWidget::IsHidden
bool IsHidden()
Checks whether or not the widget is hidden.
Definition: BlamUIWidget.cpp:420
Blam::Logger::LogEventForce
BLAM void LogEventForce(std::string message)
Forcibly logs a message to the log and/or console.
Definition: aliases.cpp:262
Blam::UI::ImGUI::GetImGuiWindow
BLAM BlamImGuiWindow * GetImGuiWindow(std::string key)
Retrieves a drawing group with the specified ID.
Definition: debug_ui.cpp:194
ImGui::Separator
IMGUI_API void Separator()
Definition: imgui_widgets.cpp:1284
config.h
BlamImGuiWindow_DevToolsBar::SetDrawModeNotMainMenu
void SetDrawModeNotMainMenu()
Instructs the menu to draw as a menu bar within a window, rather than as part of the main menu bar.
Definition: devtools_bar.hpp:38
ImGuiWindowFlags_NoResize
@ ImGuiWindowFlags_NoResize
Definition: imgui.h:715
ImGui::ShowFontSelector
IMGUI_API void ShowFontSelector(const char *label)
Definition: imgui_demo.cpp:3141
ImGui::TextUnformatted
IMGUI_API void TextUnformatted(const char *text, const char *text_end=NULL)
Definition: imgui_widgets.cpp:233
BlamImGuiWindow_DirectX11Window
Class for the default ImGUI DX11 sample window.
Definition: dx11_window.hpp:11
ImGui::PushTextWrapPos
IMGUI_API void PushTextWrapPos(float wrap_local_pos_x=0.0f)
Definition: imgui.cpp:6306
ImGui::GetWindowWidth
IMGUI_API float GetWindowWidth()
Definition: imgui.cpp:6580
ImGui::TextColored
IMGUI_API void TextColored(const ImVec4 &col, const char *fmt,...) IM_FMTARGS(2)
Definition: imgui_widgets.cpp:257
ImGui::TextDisabled
IMGUI_API void TextDisabled(const char *fmt,...) IM_FMTARGS(1)
Definition: imgui_widgets.cpp:272
devtools_bar.hpp