#pragma once #include #include #include #include #include #include #include #include #include #include namespace hex { class View { public: explicit View(std::string unlocalizedViewName); virtual ~View() = default; virtual void drawContent() = 0; virtual void drawAlwaysVisible() { } virtual void drawMenu(); virtual bool handleShortcut(bool keys[512], bool ctrl, bool shift, bool alt); virtual bool isAvailable(); virtual bool shouldProcess() { return this->isAvailable() && this->getWindowOpenState(); } enum class DialogMode { Open, Save, Folder }; static void openFileBrowser(std::string_view title, DialogMode mode, const std::vector &validExtensions, const std::function &callback); static void doLater(std::function &&function); static std::vector>& getDeferedCalls(); static void drawCommonInterfaces(); static void showErrorPopup(std::string_view errorMessage); virtual bool hasViewMenuItemEntry(); virtual ImVec2 getMinSize(); virtual ImVec2 getMaxSize(); bool& getWindowOpenState(); std::string_view getUnlocalizedName() const; protected: void discardNavigationRequests(); void confirmButtons(const char *textLeft, const char *textRight, const std::function &leftButtonFn, const std::function &rightButtonFn); static inline std::string toWindowName(std::string_view unlocalizedName) { return LangEntry(unlocalizedName) + "##" + std::string(unlocalizedName); } private: std::string m_unlocalizedViewName; bool m_windowOpen = false; }; }