Disable addExt/delExt buttons based on context

This commit is contained in:
xiota 2024-06-17 01:25:06 +00:00
parent cffba6c3b0
commit 6eb191c5e5
2 changed files with 56 additions and 27 deletions

View File

@ -1566,8 +1566,10 @@ Gtk::Widget* Preferences::getFileBrowserPanel()
delExt = Gtk::manage(new Gtk::Button());
moveExtUp = Gtk::manage(new Gtk::Button());
moveExtDown = Gtk::manage(new Gtk::Button());
addExt->set_tooltip_text(M("PREFERENCES_PARSEDEXTADDHINT"));
delExt->set_tooltip_text(M("PREFERENCES_PARSEDEXTDELHINT"));
addExt->set_sensitive(false);
delExt->set_sensitive(false);
addExt->set_tooltip_markup(M("PREFERENCES_PARSEDEXTADDHINT"));
delExt->set_tooltip_markup(M("PREFERENCES_PARSEDEXTDELHINT"));
moveExtUp->set_tooltip_text(M("PREFERENCES_PARSEDEXTUPHINT"));
moveExtDown->set_tooltip_text(M("PREFERENCES_PARSEDEXTDOWNHINT"));
Gtk::Image* addExtImg = Gtk::manage ( new RTImage ("add-small", Gtk::ICON_SIZE_BUTTON) );
@ -1672,11 +1674,14 @@ Gtk::Widget* Preferences::getFileBrowserPanel()
vbFileBrowser->pack_start (*hb6, Gtk::PACK_SHRINK, 4);
extensions->signal_cursor_changed().connect(sigc::mem_fun(*this, &Preferences::extensionsChanged));
extension->signal_changed().connect(sigc::mem_fun(*this, &Preferences::extensionChanged));
addExt->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::addExtPressed));
delExt->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::delExtPressed));
moveExtUp->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::moveExtUpPressed));
moveExtDown->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::moveExtDownPressed));
extension->signal_activate().connect(sigc::mem_fun(*this, &Preferences::addExtPressed));
clearThumbsBtn->signal_clicked().connect ( sigc::mem_fun (*this, &Preferences::clearThumbImagesPressed) );
if (moptions.saveParamsCache) {
clearProfilesBtn->signal_clicked().connect(sigc::mem_fun(*this, &Preferences::clearProfilesPressed));
@ -2670,9 +2675,50 @@ void Preferences::workflowUpdate()
}
}
void Preferences::extensionsChanged()
{
const Glib::RefPtr<Gtk::TreeSelection> selection = extensions->get_selection();
if (!selection) {
delExt->set_sensitive(false);
return;
}
const Gtk::TreeModel::iterator selected = selection->get_selected();
if (!selected) {
delExt->set_sensitive(false);
return;
}
bool delOkay = true;
for (auto const &x : moptions.knownExtensions) {
if (x == (*selected)[extensionColumns.ext]) {
delOkay = false;
break;
}
}
delExt->set_sensitive(delOkay);
}
void Preferences::extensionChanged()
{
if (extension->get_text()[0] == '\0') {
addExt->set_sensitive(false);
return;
}
Gtk::TreeNodeChildren c = extensionModel->children();
for (size_t i = 0; i < c.size(); i++) {
if (c[i][extensionColumns.ext] == extension->get_text()) {
addExt->set_sensitive(false);
return;
}
}
addExt->set_sensitive(true);
}
void Preferences::addExtPressed()
{
Gtk::TreeNodeChildren c = extensionModel->children();
for (size_t i = 0; i < c.size(); i++) {
@ -2685,33 +2731,14 @@ void Preferences::addExtPressed()
row[extensionColumns.enabled] = true;
row[extensionColumns.ext] = extension->get_text();
extension->set_text("");
addExt->set_sensitive(false);
}
void Preferences::delExtPressed()
{
const Glib::RefPtr<Gtk::TreeSelection> selection = extensions->get_selection();
if (!selection) {
return;
}
const Gtk::TreeModel::iterator selected = selection->get_selected();
if (!selected) {
return;
}
bool delOkay = true;
for (auto const &x : moptions.knownExtensions) {
if (x == (*selected)[extensionColumns.ext]) {
delOkay = false;
break;
}
}
if (delOkay) {
extensionModel->erase(selected);
}
extensionModel->erase(extensions->get_selection()->get_selected());
}
void Preferences::moveExtUpPressed()

View File

@ -323,6 +323,8 @@ public:
void observer10Toggled ();
void selectStartupDir ();
void extensionsChanged ();
void extensionChanged ();
void addExtPressed ();
void delExtPressed ();
void moveExtUpPressed ();