#pragma once #include #include #include namespace hex::plugin::builtin { class ViewCommandPalette : public View::Special { public: ViewCommandPalette(); ~ViewCommandPalette() override = default; void drawContent() override {} void drawAlwaysVisibleContent() override; [[nodiscard]] bool shouldDraw() const override { return false; } [[nodiscard]] bool shouldProcess() const override { return true; } [[nodiscard]] bool hasViewMenuItemEntry() const override { return false; } [[nodiscard]] ImVec2 getMinSize() const override { return ImVec2(std::min(ImHexApi::System::getMainWindowSize().x, 600_scaled), 150_scaled); } [[nodiscard]] ImVec2 getMaxSize() const override { return this->getMinSize(); } private: enum class MatchType { NoMatch, InfoMatch, PartialMatch, PerfectMatch }; struct CommandResult { std::string displayResult; std::string matchedCommand; std::function executeCallback; }; bool m_commandPaletteOpen = false; bool m_justOpened = false; bool m_focusInputTextBox = false; bool m_moveCursorToEnd = false; std::string m_commandBuffer; std::vector m_lastResults; std::string m_exactResult; void focusInputTextBox() { this->m_focusInputTextBox = true; } std::vector getCommandResults(const std::string &input); }; }