Clean up favorites preferences code
This commit is contained in:
parent
80944d6c9b
commit
546c99d276
@ -199,7 +199,7 @@ private:
|
|||||||
Gtk::Button buttonDown;
|
Gtk::Button buttonDown;
|
||||||
Gtk::Button buttonRemove;
|
Gtk::Button buttonRemove;
|
||||||
|
|
||||||
sigc::signal<void, const std::vector<Gtk::TreeModel::Path>> signalRowsPreErase;
|
sigc::signal<void, const std::vector<Gtk::TreeModel::Path> &> signalRowsPreErase;
|
||||||
|
|
||||||
void onButtonDownPressed();
|
void onButtonDownPressed();
|
||||||
void onButtonRemovePressed();
|
void onButtonRemovePressed();
|
||||||
@ -224,7 +224,7 @@ public:
|
|||||||
* The signal contains a vector of tree model paths of the rows that will be
|
* The signal contains a vector of tree model paths of the rows that will be
|
||||||
* erased.
|
* erased.
|
||||||
*/
|
*/
|
||||||
sigc::signal<void, const std::vector<Gtk::TreeModel::Path>> getSignalRowsPreErase();
|
sigc::signal<void, const std::vector<Gtk::TreeModel::Path> &> getSignalRowsPreErase() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -319,7 +319,7 @@ void ListEditButtons::onButtonDownPressed()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the selected row and next row.
|
// Get the selected row and next row.
|
||||||
auto selected_row_iter = listStore->get_iter(selected[0]);
|
const auto selected_row_iter = listStore->get_iter(selected[0]);
|
||||||
auto next_row_iter = selected_row_iter;
|
auto next_row_iter = selected_row_iter;
|
||||||
next_row_iter++;
|
next_row_iter++;
|
||||||
|
|
||||||
@ -336,17 +336,21 @@ void ListEditButtons::onButtonRemovePressed()
|
|||||||
{
|
{
|
||||||
const std::vector<Gtk::TreeModel::Path> selected_paths =
|
const std::vector<Gtk::TreeModel::Path> selected_paths =
|
||||||
list.get_selection()->get_selected_rows();
|
list.get_selection()->get_selected_rows();
|
||||||
std::vector<Gtk::TreeModel::RowReference> selected;
|
std::vector<Gtk::TreeModel::RowReference> selected(selected_paths.size());
|
||||||
|
|
||||||
// Get row references, which are valid until the row is removed.
|
// Get row references, which are valid until the row is removed.
|
||||||
for (const auto & row_path : selected_paths) {
|
std::transform(
|
||||||
selected.push_back(Gtk::TreeModel::RowReference(listStore, row_path));
|
selected_paths.begin(),
|
||||||
}
|
selected_paths.end(),
|
||||||
|
selected.begin(),
|
||||||
|
[this](const Gtk::TreeModel::Path &row_path) {
|
||||||
|
return Gtk::TreeModel::RowReference(listStore, row_path);
|
||||||
|
});
|
||||||
|
|
||||||
signalRowsPreErase.emit(selected_paths);
|
signalRowsPreErase.emit(selected_paths);
|
||||||
|
|
||||||
// Remove the selected rows.
|
// Remove the selected rows.
|
||||||
for (const auto & row_ref : selected) {
|
for (const auto &row_ref : selected) {
|
||||||
const auto row_path = row_ref.get_path();
|
const auto row_path = row_ref.get_path();
|
||||||
if (row_path) {
|
if (row_path) {
|
||||||
listStore->erase(listStore->get_iter(row_path));
|
listStore->erase(listStore->get_iter(row_path));
|
||||||
@ -368,7 +372,7 @@ void ListEditButtons::onButtonUpPressed()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto selected_row_iter = listStore->get_iter(selected[0]);
|
const auto selected_row_iter = listStore->get_iter(selected[0]);
|
||||||
|
|
||||||
if (selected_row_iter == list_children.begin()) { // Can't be first row.
|
if (selected_row_iter == list_children.begin()) { // Can't be first row.
|
||||||
return;
|
return;
|
||||||
@ -411,8 +415,8 @@ void ListEditButtons::updateButtonSensitivity()
|
|||||||
buttonRemove.set_sensitive(selected.size() > 0);
|
buttonRemove.set_sensitive(selected.size() > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
sigc::signal<void, const std::vector<Gtk::TreeModel::Path>>
|
sigc::signal<void, const std::vector<Gtk::TreeModel::Path> &>
|
||||||
ListEditButtons::getSignalRowsPreErase()
|
ListEditButtons::getSignalRowsPreErase() const
|
||||||
{
|
{
|
||||||
return signalRowsPreErase;
|
return signalRowsPreErase;
|
||||||
}
|
}
|
||||||
@ -420,8 +424,6 @@ ListEditButtons::getSignalRowsPreErase()
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct ToolLocationPreference::Impl {
|
struct ToolLocationPreference::Impl {
|
||||||
static std::unordered_map<std::string, Tool> toolNamesReverseMap;
|
|
||||||
|
|
||||||
Options &options;
|
Options &options;
|
||||||
|
|
||||||
// General options.
|
// General options.
|
||||||
@ -488,7 +490,7 @@ struct ToolLocationPreference::Impl {
|
|||||||
* @param paths Paths in the favorites list pointing to the rows that are
|
* @param paths Paths in the favorites list pointing to the rows that are
|
||||||
* about to be removed.
|
* about to be removed.
|
||||||
*/
|
*/
|
||||||
void onFavoritesRowsPreRemove(const std::vector<Gtk::TreeModel::Path> paths);
|
void onFavoritesRowsPreRemove(const std::vector<Gtk::TreeModel::Path> &paths);
|
||||||
/**
|
/**
|
||||||
* Converts tool names to their corresponding tools.
|
* Converts tool names to their corresponding tools.
|
||||||
*
|
*
|
||||||
@ -504,9 +506,6 @@ struct ToolLocationPreference::Impl {
|
|||||||
void updateOptions();
|
void updateOptions();
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unordered_map<std::string, Tool>
|
|
||||||
ToolLocationPreference::Impl::toolNamesReverseMap;
|
|
||||||
|
|
||||||
ToolLocationPreference::Impl::Impl(Options &options) :
|
ToolLocationPreference::Impl::Impl(Options &options) :
|
||||||
options(options),
|
options(options),
|
||||||
|
|
||||||
@ -577,7 +576,7 @@ void ToolLocationPreference::Impl::favoriteToggled(const Glib::ustring &row_path
|
|||||||
// Update the favorites list.
|
// Update the favorites list.
|
||||||
if (is_favorite) {
|
if (is_favorite) {
|
||||||
// Add to favorites list.
|
// Add to favorites list.
|
||||||
auto new_favorite_row_iter = favoritesModelPtr->append();
|
const auto new_favorite_row_iter = favoritesModelPtr->append();
|
||||||
new_favorite_row_iter->set_value(
|
new_favorite_row_iter->set_value(
|
||||||
favoritesColumns.toolName,
|
favoritesColumns.toolName,
|
||||||
M(getToolTitleKey(tool)));
|
M(getToolTitleKey(tool)));
|
||||||
@ -602,7 +601,7 @@ void ToolLocationPreference::Impl::initFavoritesRows(
|
|||||||
{
|
{
|
||||||
// Add the favorites to the favorites list store.
|
// Add the favorites to the favorites list store.
|
||||||
for (const auto tool : favorites) {
|
for (const auto tool : favorites) {
|
||||||
auto favorite_row_iter = favoritesModelPtr->append();
|
const auto favorite_row_iter = favoritesModelPtr->append();
|
||||||
favorite_row_iter->set_value(
|
favorite_row_iter->set_value(
|
||||||
favoritesColumns.toolName,
|
favoritesColumns.toolName,
|
||||||
M(getToolTitleKey(tool)));
|
M(getToolTitleKey(tool)));
|
||||||
@ -617,7 +616,8 @@ void ToolLocationPreference::Impl::addToolListRowGroup(
|
|||||||
{
|
{
|
||||||
// Recursively add the tool and its children to the tool list tree store.
|
// Recursively add the tool and its children to the tool list tree store.
|
||||||
for (const ToolPanelCoordinator::ToolTree &tool : tools) {
|
for (const ToolPanelCoordinator::ToolTree &tool : tools) {
|
||||||
auto tool_row_iter = toolListModelPtr->append(parentRowIter->children());
|
const auto tool_row_iter =
|
||||||
|
toolListModelPtr->append(parentRowIter->children());
|
||||||
tool_row_iter->set_value(
|
tool_row_iter->set_value(
|
||||||
toolListColumns.toolName,
|
toolListColumns.toolName,
|
||||||
M(getToolTitleKey(tool.id)));
|
M(getToolTitleKey(tool.id)));
|
||||||
@ -653,7 +653,7 @@ void ToolLocationPreference::Impl::initToolListRows(const std::vector<Tool> &fav
|
|||||||
ToolPanelCoordinator::Panel::TRANSFORM_PANEL,
|
ToolPanelCoordinator::Panel::TRANSFORM_PANEL,
|
||||||
ToolPanelCoordinator::Panel::RAW,
|
ToolPanelCoordinator::Panel::RAW,
|
||||||
}) {
|
}) {
|
||||||
auto tool_group_iter = toolListModelPtr->append();
|
const auto tool_group_iter = toolListModelPtr->append();
|
||||||
tool_group_iter->set_value(
|
tool_group_iter->set_value(
|
||||||
toolListColumns.toolName,
|
toolListColumns.toolName,
|
||||||
M(getToolPanelTitleKey(panel)));
|
M(getToolPanelTitleKey(panel)));
|
||||||
@ -662,7 +662,7 @@ void ToolLocationPreference::Impl::initToolListRows(const std::vector<Tool> &fav
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ToolLocationPreference::Impl::onFavoritesRowsPreRemove(
|
void ToolLocationPreference::Impl::onFavoritesRowsPreRemove(
|
||||||
const std::vector<Gtk::TreeModel::Path> paths)
|
const std::vector<Gtk::TreeModel::Path> &paths)
|
||||||
{
|
{
|
||||||
// Unset the favorite column in the tools list for tools about to be removed
|
// Unset the favorite column in the tools list for tools about to be removed
|
||||||
// from the favorites list.
|
// from the favorites list.
|
||||||
@ -678,13 +678,15 @@ std::vector<Tool> ToolLocationPreference::Impl::toolNamesToTools(
|
|||||||
{
|
{
|
||||||
std::vector<Tool> tool_set;
|
std::vector<Tool> tool_set;
|
||||||
|
|
||||||
for (auto &&tool_name : tool_names) {
|
for (const auto &tool_name : tool_names) {
|
||||||
Tool tool;
|
Tool tool;
|
||||||
try {
|
try {
|
||||||
tool = ToolPanelCoordinator::getToolFromName(tool_name);
|
tool = ToolPanelCoordinator::getToolFromName(tool_name);
|
||||||
} catch (const std::exception &e) {
|
} catch (const std::out_of_range &e) {
|
||||||
if (rtengine::settings->verbose) {
|
if (rtengine::settings->verbose) {
|
||||||
std::cerr << "Unrecognized tool name \"" << tool_name << "\"." << std::endl;
|
std::cerr
|
||||||
|
<< "Unrecognized tool name \"" << tool_name << "\"."
|
||||||
|
<< std::endl;
|
||||||
}
|
}
|
||||||
assert(false);
|
assert(false);
|
||||||
continue;
|
continue;
|
||||||
@ -701,7 +703,7 @@ void ToolLocationPreference::Impl::updateOptions()
|
|||||||
|
|
||||||
const auto favorites_rows = favoritesModelPtr->children();
|
const auto favorites_rows = favoritesModelPtr->children();
|
||||||
options.favorites.resize(favorites_rows.size());
|
options.favorites.resize(favorites_rows.size());
|
||||||
for (unsigned i = 0; i < favorites_rows.size(); i++) {
|
for (Gtk::TreeNodeChildren::size_type i = 0; i < favorites_rows.size(); i++) {
|
||||||
const Tool tool = favorites_rows[i].get_value(favoritesColumns.tool);
|
const Tool tool = favorites_rows[i].get_value(favoritesColumns.tool);
|
||||||
options.favorites[i] = ToolPanelCoordinator::getToolName(tool);
|
options.favorites[i] = ToolPanelCoordinator::getToolName(tool);
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with RawTherapee. If not, see <https://www.gnu.org/licenses/>.
|
* along with RawTherapee. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include "multilangmgr.h"
|
#include "multilangmgr.h"
|
||||||
#include "toolpanelcoord.h"
|
#include "toolpanelcoord.h"
|
||||||
#include "metadatapanel.h"
|
#include "metadatapanel.h"
|
||||||
@ -350,12 +352,14 @@ ToolPanelCoordinator::ToolPanelCoordinator (bool batch) : ipc (nullptr), favorit
|
|||||||
|
|
||||||
for (const auto &panel_tool_layout : getDefaultToolLayout()) {
|
for (const auto &panel_tool_layout : getDefaultToolLayout()) {
|
||||||
const auto &panel_tools = panel_tool_layout.second;
|
const auto &panel_tools = panel_tool_layout.second;
|
||||||
std::vector<const ToolTree *> unprocessed_tools;
|
std::vector<const ToolTree *> unprocessed_tools(panel_tools.size());
|
||||||
|
|
||||||
// Start with the root tools for every panel.
|
// Start with the root tools for every panel.
|
||||||
for (const auto &tool_tree : panel_tools) {
|
std::transform(
|
||||||
unprocessed_tools.push_back(&tool_tree);
|
panel_tools.begin(),
|
||||||
}
|
panel_tools.end(),
|
||||||
|
unprocessed_tools.begin(),
|
||||||
|
[](const ToolTree &tool_tree) { return &tool_tree; });
|
||||||
|
|
||||||
// Process each tool.
|
// Process each tool.
|
||||||
while (!unprocessed_tools.empty()) {
|
while (!unprocessed_tools.empty()) {
|
||||||
@ -363,7 +367,7 @@ ToolPanelCoordinator::ToolPanelCoordinator (bool batch) : ipc (nullptr), favorit
|
|||||||
const ToolTree *cur_tool = unprocessed_tools.back();
|
const ToolTree *cur_tool = unprocessed_tools.back();
|
||||||
unprocessed_tools.pop_back();
|
unprocessed_tools.pop_back();
|
||||||
// Add tool to list of expanders and tool panels.
|
// Add tool to list of expanders and tool panels.
|
||||||
FoldableToolPanel *tool_panel = getFoldableToolPanel(*cur_tool);
|
FoldableToolPanel *const tool_panel = getFoldableToolPanel(*cur_tool);
|
||||||
expList.push_back(tool_panel->getExpander());
|
expList.push_back(tool_panel->getExpander());
|
||||||
toolPanels.push_back(tool_panel);
|
toolPanels.push_back(tool_panel);
|
||||||
expanderToToolPanelMap[tool_panel->getExpander()] = tool_panel;
|
expanderToToolPanelMap[tool_panel->getExpander()] = tool_panel;
|
||||||
@ -514,7 +518,7 @@ ToolPanelCoordinator::ToolPanelCoordinator (bool batch) : ipc (nullptr), favorit
|
|||||||
prevPage = toolPanelNotebook->get_nth_page(0);
|
prevPage = toolPanelNotebook->get_nth_page(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
const ToolPanelCoordinator::ToolLayout& ToolPanelCoordinator::getDefaultToolLayout()
|
const ToolPanelCoordinator::ToolLayout &ToolPanelCoordinator::getDefaultToolLayout()
|
||||||
{
|
{
|
||||||
return PANEL_TOOLS;
|
return PANEL_TOOLS;
|
||||||
}
|
}
|
||||||
@ -708,10 +712,22 @@ void ToolPanelCoordinator::updateFavoritesPanel(
|
|||||||
std::vector<std::reference_wrapper<const ToolTree>> favorites_tool_tree;
|
std::vector<std::reference_wrapper<const ToolTree>> favorites_tool_tree;
|
||||||
|
|
||||||
for (const auto &tool_name : favoritesNames) {
|
for (const auto &tool_name : favoritesNames) {
|
||||||
Tool tool = getToolFromName(tool_name.raw());
|
Tool tool;
|
||||||
|
try {
|
||||||
|
tool = getToolFromName(tool_name.raw());
|
||||||
|
} catch (const std::out_of_range &e) {
|
||||||
|
if (rtengine::settings->verbose) {
|
||||||
|
std::cerr
|
||||||
|
<< "Unrecognized favorite tool \"" << tool_name << "\""
|
||||||
|
<< std::endl;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (isFavoritable(tool)) {
|
||||||
favorites_set.insert(tool);
|
favorites_set.insert(tool);
|
||||||
favorites_tool_tree.push_back(
|
favorites_tool_tree.push_back(
|
||||||
std::ref(*(toolToDefaultToolTreeMap.at(tool))));
|
std::ref(*(toolToDefaultToolTreeMap.at(tool))));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateToolPanel(
|
updateToolPanel(
|
||||||
@ -758,7 +774,20 @@ void ToolPanelCoordinator::updatePanelTools(
|
|||||||
|
|
||||||
std::unordered_set<Tool, ScopedEnumHash> favoriteTools;
|
std::unordered_set<Tool, ScopedEnumHash> favoriteTools;
|
||||||
for (const auto &tool_name : favorites) {
|
for (const auto &tool_name : favorites) {
|
||||||
favoriteTools.insert(getToolFromName(tool_name.raw()));
|
Tool tool;
|
||||||
|
try {
|
||||||
|
tool = getToolFromName(tool_name.raw());
|
||||||
|
} catch (const std::out_of_range &e) {
|
||||||
|
if (rtengine::settings->verbose) {
|
||||||
|
std::cerr
|
||||||
|
<< "Unrecognized favorite tool \"" << tool_name << "\""
|
||||||
|
<< std::endl;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (isFavoritable(tool)) {
|
||||||
|
favoriteTools.insert(tool);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateToolPanel(panel, *default_panel_tools, 1, favoriteTools, cloneFavoriteTools);
|
updateToolPanel(panel, *default_panel_tools, 1, favoriteTools, cloneFavoriteTools);
|
||||||
@ -770,7 +799,7 @@ ToolPanelCoordinator::updateToolPanel(
|
|||||||
Gtk::Box *panelBox,
|
Gtk::Box *panelBox,
|
||||||
const std::vector<T> &children,
|
const std::vector<T> &children,
|
||||||
int level,
|
int level,
|
||||||
std::unordered_set<Tool, ScopedEnumHash> favorites,
|
const std::unordered_set<Tool, ScopedEnumHash> &favorites,
|
||||||
bool cloneFavoriteTools)
|
bool cloneFavoriteTools)
|
||||||
{
|
{
|
||||||
const bool is_favorite_panel = panelBox == favoritePanel;
|
const bool is_favorite_panel = panelBox == favoritePanel;
|
||||||
@ -1646,8 +1675,20 @@ void ToolPanelCoordinator::updateToolLocations(
|
|||||||
// Update favorite tool panels list.
|
// Update favorite tool panels list.
|
||||||
favoritesToolPanels.clear();
|
favoritesToolPanels.clear();
|
||||||
for (const auto &favorite_name : favorites) {
|
for (const auto &favorite_name : favorites) {
|
||||||
favoritesToolPanels.push_back(
|
Tool tool;
|
||||||
getFoldableToolPanel(getToolFromName(favorite_name)));
|
try {
|
||||||
|
tool = getToolFromName(favorite_name.raw());
|
||||||
|
} catch (const std::out_of_range &e) {
|
||||||
|
if (rtengine::settings->verbose) {
|
||||||
|
std::cerr
|
||||||
|
<< "Unrecognized favorite tool \"" << favorite_name << "\""
|
||||||
|
<< std::endl;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (isFavoritable(tool)) {
|
||||||
|
favoritesToolPanels.push_back(getFoldableToolPanel(tool));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int cur_page_num = toolPanelNotebook->get_current_page();
|
int cur_page_num = toolPanelNotebook->get_current_page();
|
||||||
@ -1948,6 +1989,7 @@ FoldableToolPanel *ToolPanelCoordinator::getFoldableToolPanel(Tool tool) const
|
|||||||
case Tool::PD_SHARPENING:
|
case Tool::PD_SHARPENING:
|
||||||
return pdSharpening;
|
return pdSharpening;
|
||||||
};
|
};
|
||||||
|
assert(false);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,7 +305,7 @@ public:
|
|||||||
std::vector<ToolTree> children;
|
std::vector<ToolTree> children;
|
||||||
};
|
};
|
||||||
|
|
||||||
using ToolLayout = std::unordered_map<Panel, const std::vector<ToolTree>, ScopedEnumHash>;
|
using ToolLayout = std::unordered_map<Panel, const std::vector<ToolTree> &, ScopedEnumHash>;
|
||||||
|
|
||||||
CoarsePanel* coarse;
|
CoarsePanel* coarse;
|
||||||
Gtk::Notebook* toolPanelNotebook;
|
Gtk::Notebook* toolPanelNotebook;
|
||||||
@ -313,12 +313,13 @@ public:
|
|||||||
ToolPanelCoordinator(bool batch = false);
|
ToolPanelCoordinator(bool batch = false);
|
||||||
~ToolPanelCoordinator () override;
|
~ToolPanelCoordinator () override;
|
||||||
|
|
||||||
static const ToolLayout& getDefaultToolLayout();
|
static const ToolLayout &getDefaultToolLayout();
|
||||||
/**
|
/**
|
||||||
* Gets the tool with the provided tool name.
|
* Gets the tool with the provided tool name.
|
||||||
*
|
*
|
||||||
* @param name The tool name as a raw string.
|
* @param name The tool name as a raw string.
|
||||||
* @return The tool.
|
* @return The tool.
|
||||||
|
* @throws std::out_of_range If the name is not recognized.
|
||||||
*/
|
*/
|
||||||
static Tool getToolFromName(const std::string &name);
|
static Tool getToolFromName(const std::string &name);
|
||||||
/**
|
/**
|
||||||
@ -472,7 +473,7 @@ protected:
|
|||||||
Gtk::Box *panelBox,
|
Gtk::Box *panelBox,
|
||||||
const std::vector<T> &children,
|
const std::vector<T> &children,
|
||||||
int level,
|
int level,
|
||||||
std::unordered_set<Tool, ScopedEnumHash> favorites,
|
const std::unordered_set<Tool, ScopedEnumHash> &favorites,
|
||||||
bool cloneFavoriteTools);
|
bool cloneFavoriteTools);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user