diff --git a/plugins/builtin/include/content/views/view_bookmarks.hpp b/plugins/builtin/include/content/views/view_bookmarks.hpp index 9626eb252..e1dc48926 100644 --- a/plugins/builtin/include/content/views/view_bookmarks.hpp +++ b/plugins/builtin/include/content/views/view_bookmarks.hpp @@ -18,7 +18,6 @@ namespace hex::plugin::builtin { private: struct Bookmark { ImHexApi::Bookmarks::Entry entry; - TextEditor editor; bool highlightVisible; }; diff --git a/plugins/builtin/source/content/views/view_bookmarks.cpp b/plugins/builtin/source/content/views/view_bookmarks.cpp index b00ec5114..2a285165b 100644 --- a/plugins/builtin/source/content/views/view_bookmarks.cpp +++ b/plugins/builtin/source/content/views/view_bookmarks.cpp @@ -44,7 +44,7 @@ namespace hex::plugin::builtin { bookmarkId }; - m_bookmarks->emplace_back(std::move(bookmark), TextEditor(), true); + m_bookmarks->emplace_back(std::move(bookmark), true); ImHexApi::Provider::markDirty(); @@ -81,7 +81,7 @@ namespace hex::plugin::builtin { std::ignore = data; // Loop over all bookmarks - for (const auto &[bookmark, editor, highlightVisible] : *m_bookmarks) { + for (const auto &[bookmark, highlightVisible] : *m_bookmarks) { if (!highlightVisible) continue; @@ -179,7 +179,7 @@ namespace hex::plugin::builtin { result += "## Bookmarks\n\n"; - for (const auto &[bookmark, editor, highlightVisible] : bookmarks) { + for (const auto &[bookmark, highlightVisible] : bookmarks) { result += hex::format("### {} [0x{:04X} - 0x{:04X}]\n\n", hex::changeEndianness(bookmark.color, std::endian::big) >> 8, bookmark.name, bookmark.region.getStartAddress(), bookmark.region.getEndAddress()); for (const auto &line : hex::splitString(bookmark.comment, "\n")) @@ -309,7 +309,7 @@ namespace hex::plugin::builtin { // Draw all bookmarks for (auto it = m_bookmarks->begin(); it != m_bookmarks->end(); ++it) { - auto &[bookmark, editor, highlightVisible] = *it; + auto &[bookmark, highlightVisible] = *it; auto &[region, name, comment, color, locked, bookmarkId] = bookmark; // Apply filter @@ -368,15 +368,16 @@ namespace hex::plugin::builtin { ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetContentRegionAvail().x - 100_scaled); { + ImGui::PushStyleColor(ImGuiCol_Button, 0x00); // Draw jump to region button - if (ImGuiExt::DimmedIconButton(ICON_VS_DEBUG_STEP_BACK, ImGui::GetStyleColorVec4(ImGuiCol_Text))) + if (ImGuiExt::IconButton(ICON_VS_DEBUG_STEP_BACK, ImGui::GetStyleColorVec4(ImGuiCol_Text))) ImHexApi::HexEditor::setSelection(region); ImGui::SetItemTooltip("%s", "hex.builtin.view.bookmarks.tooltip.jump_to"_lang.get()); - ImGui::SameLine(0, 1_scaled); + ImGui::SameLine(0, 0); // Draw open in new view button - if (ImGuiExt::DimmedIconButton(ICON_VS_GO_TO_FILE, ImGui::GetStyleColorVec4(ImGuiCol_Text))) { + if (ImGuiExt::IconButton(ICON_VS_GO_TO_FILE, ImGui::GetStyleColorVec4(ImGuiCol_Text))) { auto provider = ImHexApi::Provider::get(); TaskManager::doLater([region, provider, name]{ auto newProvider = ImHexApi::Provider::createProvider("hex.builtin.provider.view", true); @@ -393,13 +394,15 @@ namespace hex::plugin::builtin { } ImGui::SetItemTooltip("%s", "hex.builtin.view.bookmarks.tooltip.open_in_view"_lang.get()); - ImGui::SameLine(0, 4_scaled); + ImGui::SameLine(0, 0); // Draw highlight visible toggle - if (ImGuiExt::DimmedIconButton(highlightVisible ? ICON_VS_EYE : ICON_VS_EYE_CLOSED, ImGui::GetStyleColorVec4(ImGuiCol_Text))) { + if (ImGuiExt::IconButton(highlightVisible ? ICON_VS_EYE : ICON_VS_EYE_CLOSED, ImGui::GetStyleColorVec4(ImGuiCol_Text))) { highlightVisible = !highlightVisible; EventHighlightingChanged::post(); } + + ImGui::PopStyleColor(); } ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2()); @@ -505,20 +508,15 @@ namespace hex::plugin::builtin { ImGui::EndTable(); } - // Draw comment if the bookmark is locked or an input text box if it's unlocked - editor.SetReadOnly(locked); - editor.SetShowLineNumbers(!locked); - editor.SetShowCursor(!locked); - editor.SetShowWhitespaces(false); - if (!locked || (locked && !comment.empty())) { if (ImGuiExt::BeginSubWindow("hex.builtin.view.bookmarks.header.comment"_lang)) { - editor.Render("##comment", ImVec2(ImGui::GetContentRegionAvail().x, 150_scaled), false); + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImGui::GetStyleColorVec4(ImGuiCol_ChildBg)); + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1_scaled); + ImGui::InputTextMultiline("##comment", comment, ImVec2(ImGui::GetContentRegionAvail().x, 150_scaled), locked ? ImGuiInputTextFlags_ReadOnly : ImGuiInputTextFlags_None); + ImGui::PopStyleVar(); + ImGui::PopStyleColor(); } ImGuiExt::EndSubWindow(); - - if (editor.IsTextChanged()) - comment = editor.GetText(); } ImGui::NewLine(); @@ -550,8 +548,6 @@ namespace hex::plugin::builtin { if (!region.contains("address") || !region.contains("size")) continue; - TextEditor editor; - editor.SetText(bookmark["comment"]); m_bookmarks.get(provider).push_back({ { .region = { region["address"], region["size"] }, @@ -561,7 +557,6 @@ namespace hex::plugin::builtin { .locked = bookmark["locked"], .id = bookmark.contains("id") ? bookmark["id"].get() : m_currBookmarkId.get(provider), }, - editor, bookmark.contains("highlightVisible") ? bookmark["highlightVisible"].get() : true, }); if (bookmark.contains("id")) @@ -576,10 +571,10 @@ namespace hex::plugin::builtin { bool ViewBookmarks::exportBookmarks(prv::Provider *provider, nlohmann::json &json) { json["bookmarks"] = nlohmann::json::array(); size_t index = 0; - for (const auto &[bookmark, editor, highlightVisible] : m_bookmarks.get(provider)) { + for (const auto &[bookmark, highlightVisible] : m_bookmarks.get(provider)) { json["bookmarks"][index] = { { "name", bookmark.name }, - { "comment", editor.GetText() }, + { "comment", bookmark.comment }, { "color", bookmark.color }, { "region", { { "address", bookmark.region.address },