From ea6466d4fad249712a7203da6d4c00a9c0dea630 Mon Sep 17 00:00:00 2001 From: theastrowander Date: Mon, 29 Aug 2022 17:19:41 +0400 Subject: [PATCH 1/3] fix preset combo --- source/MRViewer/ImGuiHelpers.cpp | 4 ++-- source/MRViewer/MRPalette.cpp | 11 ++++++++++- source/MRViewer/MRPalette.h | 8 ++++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/source/MRViewer/ImGuiHelpers.cpp b/source/MRViewer/ImGuiHelpers.cpp index 79344d7772fe..7b2fc1589464 100644 --- a/source/MRViewer/ImGuiHelpers.cpp +++ b/source/MRViewer/ImGuiHelpers.cpp @@ -660,11 +660,11 @@ PaletteChanges Palette( if ( !presets.empty() ) { ImGui::SetNextItemWidth( scaledWidth ); - int presetIndex = -1; + int presetIndex = PalettePresets::getSelectedIndex(); if ( RibbonButtonDrawer::CustomCombo( "Load preset", &presetIndex, presets ) ) { if ( presetIndex != -1 ) - PalettePresets::loadPreset( presets[presetIndex], palette ); + PalettePresets::loadPreset( presetIndex, palette ); if ( fixZero ) *fixZero = false; diff --git a/source/MRViewer/MRPalette.cpp b/source/MRViewer/MRPalette.cpp index d2ef9ad6da18..a11c4195438a 100644 --- a/source/MRViewer/MRPalette.cpp +++ b/source/MRViewer/MRPalette.cpp @@ -528,8 +528,11 @@ const std::vector& PalettePresets::getPresetNames() return instance_().names_; } -bool PalettePresets::loadPreset( const std::string& name, Palette& palette ) +bool PalettePresets::loadPreset( int index, Palette& palette ) { + assert( index >= 0 && index < instance_().names_.size() ); + instance_().selected_ = index; + std::error_code ec; auto path = getPalettePresetsFolder(); if ( !std::filesystem::is_directory( path, ec ) ) @@ -540,6 +543,7 @@ bool PalettePresets::loadPreset( const std::string& name, Palette& palette ) return false; } + const auto& name = instance_().names_[index]; path /= name + ".json"; if ( !std::filesystem::is_regular_file( path, ec ) ) { @@ -594,6 +598,11 @@ std::filesystem::path PalettePresets::getPalettePresetsFolder() return getUserConfigDir() / "PalettePresets"; } +MRVIEWER_API int PalettePresets::getSelectedIndex() +{ + return instance_().selected_; +} + PalettePresets::PalettePresets() { update_(); diff --git a/source/MRViewer/MRPalette.h b/source/MRViewer/MRPalette.h index b454f924fd22..76bac85391d6 100644 --- a/source/MRViewer/MRPalette.h +++ b/source/MRViewer/MRPalette.h @@ -151,17 +151,21 @@ class PalettePresets MRVIEWER_API static const std::vector& getPresetNames(); /// loads existing preset to given palette \n /// returns true if load was succeed - MRVIEWER_API static bool loadPreset( const std::string& name, Palette& palette ); + MRVIEWER_API static bool loadPreset( int index, Palette& palette ); /// saves given palette to preset with given name MRVIEWER_API static void savePreset( const std::string& name, const Palette& palette ); /// returns path to presets folder MRVIEWER_API static std::filesystem::path getPalettePresetsFolder(); + /// returns index of selected preset + MRVIEWER_API static int getSelectedIndex(); + private: PalettePresets(); ~PalettePresets() = default; std::vector names_; - + int selected_ = -1; + void update_(); static PalettePresets& instance_(); From 2b46141831075365b160dd843ecf735ce4482763 Mon Sep 17 00:00:00 2001 From: theastrowander Date: Mon, 29 Aug 2022 17:40:17 +0400 Subject: [PATCH 2/3] Revert "fix preset combo" This reverts commit ea6466d4fad249712a7203da6d4c00a9c0dea630. --- source/MRViewer/ImGuiHelpers.cpp | 4 ++-- source/MRViewer/MRPalette.cpp | 11 +---------- source/MRViewer/MRPalette.h | 8 ++------ 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/source/MRViewer/ImGuiHelpers.cpp b/source/MRViewer/ImGuiHelpers.cpp index 7b2fc1589464..79344d7772fe 100644 --- a/source/MRViewer/ImGuiHelpers.cpp +++ b/source/MRViewer/ImGuiHelpers.cpp @@ -660,11 +660,11 @@ PaletteChanges Palette( if ( !presets.empty() ) { ImGui::SetNextItemWidth( scaledWidth ); - int presetIndex = PalettePresets::getSelectedIndex(); + int presetIndex = -1; if ( RibbonButtonDrawer::CustomCombo( "Load preset", &presetIndex, presets ) ) { if ( presetIndex != -1 ) - PalettePresets::loadPreset( presetIndex, palette ); + PalettePresets::loadPreset( presets[presetIndex], palette ); if ( fixZero ) *fixZero = false; diff --git a/source/MRViewer/MRPalette.cpp b/source/MRViewer/MRPalette.cpp index a11c4195438a..d2ef9ad6da18 100644 --- a/source/MRViewer/MRPalette.cpp +++ b/source/MRViewer/MRPalette.cpp @@ -528,11 +528,8 @@ const std::vector& PalettePresets::getPresetNames() return instance_().names_; } -bool PalettePresets::loadPreset( int index, Palette& palette ) +bool PalettePresets::loadPreset( const std::string& name, Palette& palette ) { - assert( index >= 0 && index < instance_().names_.size() ); - instance_().selected_ = index; - std::error_code ec; auto path = getPalettePresetsFolder(); if ( !std::filesystem::is_directory( path, ec ) ) @@ -543,7 +540,6 @@ bool PalettePresets::loadPreset( int index, Palette& palette ) return false; } - const auto& name = instance_().names_[index]; path /= name + ".json"; if ( !std::filesystem::is_regular_file( path, ec ) ) { @@ -598,11 +594,6 @@ std::filesystem::path PalettePresets::getPalettePresetsFolder() return getUserConfigDir() / "PalettePresets"; } -MRVIEWER_API int PalettePresets::getSelectedIndex() -{ - return instance_().selected_; -} - PalettePresets::PalettePresets() { update_(); diff --git a/source/MRViewer/MRPalette.h b/source/MRViewer/MRPalette.h index 76bac85391d6..b454f924fd22 100644 --- a/source/MRViewer/MRPalette.h +++ b/source/MRViewer/MRPalette.h @@ -151,21 +151,17 @@ class PalettePresets MRVIEWER_API static const std::vector& getPresetNames(); /// loads existing preset to given palette \n /// returns true if load was succeed - MRVIEWER_API static bool loadPreset( int index, Palette& palette ); + MRVIEWER_API static bool loadPreset( const std::string& name, Palette& palette ); /// saves given palette to preset with given name MRVIEWER_API static void savePreset( const std::string& name, const Palette& palette ); /// returns path to presets folder MRVIEWER_API static std::filesystem::path getPalettePresetsFolder(); - /// returns index of selected preset - MRVIEWER_API static int getSelectedIndex(); - private: PalettePresets(); ~PalettePresets() = default; std::vector names_; - int selected_ = -1; - + void update_(); static PalettePresets& instance_(); From a649e174003e6dbe89c182e49c952e7f4c59a51b Mon Sep 17 00:00:00 2001 From: theastrowander Date: Mon, 29 Aug 2022 17:45:53 +0400 Subject: [PATCH 3/3] fix arrow position --- source/MRViewer/ImGuiHelpers.cpp | 2 +- source/MRViewer/MRRibbonButtonDrawer.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/MRViewer/ImGuiHelpers.cpp b/source/MRViewer/ImGuiHelpers.cpp index 79344d7772fe..f710d88e9408 100644 --- a/source/MRViewer/ImGuiHelpers.cpp +++ b/source/MRViewer/ImGuiHelpers.cpp @@ -661,7 +661,7 @@ PaletteChanges Palette( { ImGui::SetNextItemWidth( scaledWidth ); int presetIndex = -1; - if ( RibbonButtonDrawer::CustomCombo( "Load preset", &presetIndex, presets ) ) + if ( RibbonButtonDrawer::CustomCombo( "Load preset", &presetIndex, presets, false ) ) { if ( presetIndex != -1 ) PalettePresets::loadPreset( presets[presetIndex], palette ); diff --git a/source/MRViewer/MRRibbonButtonDrawer.cpp b/source/MRViewer/MRRibbonButtonDrawer.cpp index 2ce915d8fda4..2e0b8ef1a806 100644 --- a/source/MRViewer/MRRibbonButtonDrawer.cpp +++ b/source/MRViewer/MRRibbonButtonDrawer.cpp @@ -332,7 +332,7 @@ bool RibbonButtonDrawer::CustomCombo( const char* label, int* v, const std::vect const ImVec2 pos = window->DC.CursorPos; const float arrowSize = 2 * style.FramePadding.y + ImGui::GetTextLineHeight(); if ( !showPreview ) - ImGui::PushItemWidth( arrowSize ); + ImGui::PushItemWidth( arrowSize + style.FramePadding.x * 0.5f ); float itemWidth = ( context->NextItemData.Flags & ImGuiNextItemDataFlags_HasWidth ) ? context->NextItemData.Width : window->DC.ItemWidth;