diff --git a/rtgui/guiutils.h b/rtgui/guiutils.h index 126cf672b..21e775c36 100644 --- a/rtgui/guiutils.h +++ b/rtgui/guiutils.h @@ -20,6 +20,7 @@ #include #include +#include #include @@ -74,6 +75,17 @@ private: MyMutex mutex; }; +struct ScopedEnumHash { + template::value && !std::is_convertible::value, int>::type = 0> + size_t operator ()(T val) const noexcept + { + using type = typename std::underlying_type::type; + + return std::hash{}(static_cast(val)); + } +}; + + // TODO: The documentation says gdk_threads_enter and gdk_threads_leave should be replaced // by g_main_context_invoke(), g_idle_add() and related functions, but this will require more extensive changes. // We silence those warnings until then so that we notice the others. diff --git a/rtgui/toollocationpref.cc b/rtgui/toollocationpref.cc index ccbc9310a..c0bb6bea3 100644 --- a/rtgui/toollocationpref.cc +++ b/rtgui/toollocationpref.cc @@ -24,6 +24,7 @@ #include "toolpanelcoord.h" using Tool = ToolPanelCoordinator::Tool; +using Favorites = std::unordered_set; std::string getToolName(Tool tool) { @@ -200,7 +201,7 @@ struct ToolLocationPreference::Impl { void addToolListRowGroup( const std::vector &tools, const Gtk::TreeIter &parentRowIter, - const std::unordered_set &favorites); + const Favorites &favorites); void favoriteToggled(const Glib::ustring &row_path); Tool getToolFromName(const std::string &name) const; void initFavoritesRows(const std::vector &favorites); @@ -477,7 +478,7 @@ void ToolLocationPreference::Impl::initFavoritesRows( void ToolLocationPreference::Impl::addToolListRowGroup( const std::vector &tools, const Gtk::TreeIter &parentRowIter, - const std::unordered_set &favorites) + const Favorites &favorites) { for (const ToolPanelCoordinator::ToolTree &tool : tools) { auto tool_row_iter = toolListModelPtr->append(parentRowIter->children()); @@ -498,7 +499,7 @@ void ToolLocationPreference::Impl::addToolListRowGroup( void ToolLocationPreference::Impl::initToolListRows(const std::vector &favorites) { const auto panel_tools = ToolPanelCoordinator::getDefaultToolLayout(); - std::unordered_set favorites_set; + Favorites favorites_set; for (const auto &tool : favorites) { favorites_set.insert(tool); diff --git a/rtgui/toolpanelcoord.cc b/rtgui/toolpanelcoord.cc index 23b297d20..fa2203958 100644 --- a/rtgui/toolpanelcoord.cc +++ b/rtgui/toolpanelcoord.cc @@ -236,7 +236,7 @@ const std::vector RAW_PANEL_TOOLS = { }, }; -const std::unordered_map> PANEL_TOOLS = { +const ToolPanelCoordinator::ToolLayout PANEL_TOOLS = { { ToolPanelCoordinator::Panel::EXPOSURE, EXPOSURE_PANEL_TOOLS @@ -378,7 +378,7 @@ ToolPanelCoordinator::ToolPanelCoordinator (bool batch) : ipc (nullptr), favorit addfavoritePanel (detailsPanel, dehaze); addfavoritePanel (advancedPanel, wavelet); addfavoritePanel(locallabPanel, locallab); - + addfavoritePanel (transformPanel, crop); addfavoritePanel (transformPanel, resize); addPanel (resize->getPackBox(), prsharpening, 2); @@ -424,7 +424,7 @@ ToolPanelCoordinator::ToolPanelCoordinator (bool batch) : ipc (nullptr), favorit transformPanelSW = Gtk::manage (new MyScrolledWindow ()); rawPanelSW = Gtk::manage (new MyScrolledWindow ()); advancedPanelSW = Gtk::manage (new MyScrolledWindow ()); - locallabPanelSW = Gtk::manage(new MyScrolledWindow()); + locallabPanelSW = Gtk::manage(new MyScrolledWindow()); // load panel endings for (int i = 0; i < 8; i++) { @@ -455,7 +455,7 @@ ToolPanelCoordinator::ToolPanelCoordinator (bool batch) : ipc (nullptr), favorit locallabPanelSW->add(*locallabPanel); locallabPanel->pack_start(*vbPanelEnd[7], Gtk::PACK_SHRINK, 4); - + transformPanelSW->add (*transformPanel); transformPanel->pack_start (*vbPanelEnd[4], Gtk::PACK_SHRINK, 4); @@ -523,7 +523,7 @@ ToolPanelCoordinator::ToolPanelCoordinator (bool batch) : ipc (nullptr), favorit prevPage = toolPanelNotebook->get_nth_page(0); } -const std::unordered_map> ToolPanelCoordinator::getDefaultToolLayout() +const ToolPanelCoordinator::ToolLayout& ToolPanelCoordinator::getDefaultToolLayout() { return PANEL_TOOLS; } diff --git a/rtgui/toolpanelcoord.h b/rtgui/toolpanelcoord.h index c4215ee2a..94e5a8717 100644 --- a/rtgui/toolpanelcoord.h +++ b/rtgui/toolpanelcoord.h @@ -298,13 +298,15 @@ public: std::vector children; }; + using ToolLayout = std::unordered_map, ScopedEnumHash>; + CoarsePanel* coarse; Gtk::Notebook* toolPanelNotebook; ToolPanelCoordinator(bool batch = false); ~ToolPanelCoordinator () override; - static const std::unordered_map> getDefaultToolLayout(); + static const ToolLayout& getDefaultToolLayout(); static bool isFavoritable(Tool tool); bool getChangedState()