1
0
mirror of synced 2024-12-01 10:47:19 +01:00

hex-editor: Fixed open file shortcut, improved find/goto popup position

This commit is contained in:
WerWolv 2021-09-28 12:34:55 +02:00
parent 7978964995
commit 334ba3ede2
3 changed files with 24 additions and 14 deletions

View File

@ -71,6 +71,7 @@ namespace ImGui {
Texture LoadImageFromMemory(ImU8 *buffer, int size); Texture LoadImageFromMemory(ImU8 *buffer, int size);
void UnloadImage(Texture &texture); void UnloadImage(Texture &texture);
void OpenPopupInWindow(const char *window_name, const char *popup_name);
struct ImHexCustomData { struct ImHexCustomData {
ImVec4 Colors[ImGuiCustomCol_COUNT]; ImVec4 Colors[ImGuiCustomCol_COUNT];

View File

@ -357,6 +357,13 @@ namespace ImGui {
texture = { nullptr, 0, 0 }; texture = { nullptr, 0, 0 };
} }
void OpenPopupInWindow(const char *window_name, const char *popup_name) {
if (ImGui::Begin(window_name)) {
ImGui::OpenPopup(popup_name);
}
ImGui::End();
}
bool TitleBarButton(const char* label, ImVec2 size_arg) { bool TitleBarButton(const char* label, ImVec2 size_arg) {
ImGuiWindow* window = GetCurrentWindow(); ImGuiWindow* window = GetCurrentWindow();

View File

@ -309,11 +309,11 @@ namespace hex {
} }
} }
}
ImGui::End();
this->drawSearchPopup(); this->drawSearchPopup();
this->drawGotoPopup(); this->drawGotoPopup();
}
ImGui::End();
} }
} }
@ -596,12 +596,12 @@ namespace hex {
if (ImGui::MenuItem("hex.view.hexeditor.menu.file.search"_lang, "CTRL + F")) { if (ImGui::MenuItem("hex.view.hexeditor.menu.file.search"_lang, "CTRL + F")) {
this->getWindowOpenState() = true; this->getWindowOpenState() = true;
View::doLater([]{ ImGui::OpenPopup("hex.view.hexeditor.menu.file.search"_lang); }); ImGui::OpenPopupInWindow(View::toWindowName("hex.view.hexeditor.name").c_str(), "hex.view.hexeditor.menu.file.search"_lang);
} }
if (ImGui::MenuItem("hex.view.hexeditor.menu.file.goto"_lang, "CTRL + G")) { if (ImGui::MenuItem("hex.view.hexeditor.menu.file.goto"_lang, "CTRL + G")) {
this->getWindowOpenState() = true; this->getWindowOpenState() = true;
View::doLater([]{ ImGui::OpenPopup("hex.view.hexeditor.menu.file.goto"_lang); }); ImGui::OpenPopupInWindow(View::toWindowName("hex.view.hexeditor.name").c_str(), "hex.view.hexeditor.menu.file.goto"_lang);
} }
ImGui::EndMenu(); ImGui::EndMenu();
@ -634,13 +634,15 @@ namespace hex {
if (ImHexApi::Provider::isValid()) if (ImHexApi::Provider::isValid())
ImHexApi::Provider::get()->redo(); ImHexApi::Provider::get()->redo();
} else if (ctrl && keys['F']) { } else if (ctrl && keys['F']) {
View::doLater([]{ ImGui::OpenPopup("hex.view.hexeditor.menu.file.search"_lang); }); ImGui::OpenPopupInWindow(View::toWindowName("hex.view.hexeditor.name").c_str(), "hex.view.hexeditor.menu.file.search"_lang);
return true; return true;
} else if (ctrl && keys['G']) { } else if (ctrl && keys['G']) {
View::doLater([]{ ImGui::OpenPopup("hex.view.hexeditor.menu.file.goto"_lang); }); ImGui::OpenPopupInWindow(View::toWindowName("hex.view.hexeditor.name").c_str(), "hex.view.hexeditor.menu.file.goto"_lang);
return true; return true;
} else if (ctrl && keys['O']) { } else if (ctrl && keys['O']) {
View::doLater([]{ ImGui::OpenPopup("hex.view.hexeditor.open_file"_lang); }); hex::openFileBrowser("hex.view.hexeditor.open_file"_lang, DialogMode::Open, { }, [](auto path) {
EventManager::post<RequestOpenFile>(path);
});
return true; return true;
} else if (ctrl && keys['C']) { } else if (ctrl && keys['C']) {
this->copyBytes(); this->copyBytes();
@ -1043,7 +1045,7 @@ R"(
foundCharacters = 0; foundCharacters = 0;
if (foundCharacters == string.size()) { if (foundCharacters == string.size()) {
results.emplace_back(offset + i - foundCharacters + 1, offset + i + 1); results.emplace_back(offset + i - foundCharacters + 1, offset + i);
foundCharacters = 0; foundCharacters = 0;
} }
} }
@ -1081,7 +1083,7 @@ R"(
foundCharacters = 0; foundCharacters = 0;
if (foundCharacters == hex.size()) { if (foundCharacters == hex.size()) {
results.emplace_back(offset + i - foundCharacters + 1, offset + i + 1); results.emplace_back(offset + i - foundCharacters + 1, offset + i);
foundCharacters = 0; foundCharacters = 0;
} }
} }
@ -1137,8 +1139,9 @@ R"(
} }
}; };
if (ImGui::BeginPopupContextVoid("hex.view.hexeditor.menu.file.search"_lang)) {
ImGui::TextUnformatted("hex.view.hexeditor.menu.file.search"_lang); ImGui::SetNextWindowPos(ImGui::GetWindowPos() + ImGui::GetWindowContentRegionMin() - ImGui::GetStyle().WindowPadding);
if (ImGui::BeginPopup("hex.view.hexeditor.menu.file.search"_lang)) {
if (ImGui::BeginTabBar("searchTabs")) { if (ImGui::BeginTabBar("searchTabs")) {
std::vector<char> *currBuffer = nullptr; std::vector<char> *currBuffer = nullptr;
if (ImGui::BeginTabItem("hex.view.hexeditor.search.string"_lang)) { if (ImGui::BeginTabItem("hex.view.hexeditor.search.string"_lang)) {
@ -1180,7 +1183,6 @@ R"(
ImGui::EndTabBar(); ImGui::EndTabBar();
} }
ImGui::EndPopup(); ImGui::EndPopup();
} }
} }
@ -1190,8 +1192,8 @@ R"(
auto baseAddress = provider->getBaseAddress(); auto baseAddress = provider->getBaseAddress();
auto dataSize = provider->getActualSize(); auto dataSize = provider->getActualSize();
ImGui::SetNextWindowPos(ImGui::GetWindowPos() + ImGui::GetWindowContentRegionMin() - ImGui::GetStyle().WindowPadding);
if (ImGui::BeginPopup("hex.view.hexeditor.menu.file.goto"_lang)) { if (ImGui::BeginPopup("hex.view.hexeditor.menu.file.goto"_lang)) {
ImGui::TextUnformatted("hex.view.hexeditor.menu.file.goto"_lang);
if (ImGui::BeginTabBar("gotoTabs")) { if (ImGui::BeginTabBar("gotoTabs")) {
u64 newOffset = 0; u64 newOffset = 0;
if (ImGui::BeginTabItem("hex.view.hexeditor.goto.offset.absolute"_lang)) { if (ImGui::BeginTabItem("hex.view.hexeditor.goto.offset.absolute"_lang)) {