#ifndef MENU_H #define MENU_H #include #include "UIWidgets.h" #include "MenuTypes.h" extern "C" { #include "defines.h" #include "main.h" #include "menus.h" #include "code_800029B0.h" } namespace Ship { uint32_t GetVectorIndexOf(std::vector& 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& GetDisabledMap(); protected: ImVec2 mOriginalSize; std::string mName; uint32_t mWindowFlags; std::unordered_map menuEntries; std::vector menuOrder; uint32_t DrawSearchResults(std::string& menuSearchText); ImGuiTextFilter menuSearch; uint8_t searchSidebarIndex; UIWidgets::Colors defaultThemeIndex; std::shared_ptr> availableWindowBackends; std::unordered_map availableWindowBackendsMap; Ship::WindowBackend configWindowBackend; std::unordered_map disabledMap; std::vector disabledVector; const SidebarEntry searchSidebarEntry = { .columnCount = 1, .columnWidgets = { { { .name = "Sidebar Search", .type = WIDGET_SEARCH, .options = std::make_shared(UIWidgets::WidgetOptions{}.Tooltip( "Searches all menus for the given text, including tooltips.")) } } } }; virtual void ProcessReset() { gGamestateNext = MAIN_MENU_FROM_QUIT; gIsGamePaused = 0; 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