commit 90e44dd5cefc6b81f1f2e0bb00d67eb8c226d363
parent 22aca8e7bd373f02a9df827a8bf8e5f76f719726
Author: cfillion <cfillion@users.noreply.github.com>
Date: Mon, 6 Jun 2016 19:04:11 -0400
manager: disable apply button when config is unchanged
Diffstat:
2 files changed, 41 insertions(+), 11 deletions(-)
diff --git a/src/manager.cpp b/src/manager.cpp
@@ -36,7 +36,7 @@ enum { ACTION_ENABLE = 80, ACTION_DISABLE, ACTION_UNINSTALL, ACTION_ABOUT,
Manager::Manager(ReaPack *reapack)
: Dialog(IDD_CONFIG_DIALOG),
- m_reapack(reapack), m_config(reapack->config()), m_list(0)
+ m_reapack(reapack), m_config(reapack->config()), m_list(0), m_changes(0)
{
}
@@ -85,12 +85,10 @@ void Manager::onCommand(const int id, int)
uninstall();
break;
case ACTION_AUTOINSTALL:
- m_autoInstall = !m_autoInstall.value_or(m_config->install()->autoInstall);
- enable(m_apply);
+ toggle(m_autoInstall, m_config->install()->autoInstall);
break;
case ACTION_BLEEDINGEDGE:
- m_bleedingEdge = !m_bleedingEdge.value_or(m_config->install()->bleedingEdge);
- enable(m_apply);
+ toggle(m_bleedingEdge, m_config->install()->bleedingEdge);
break;
case ACTION_SELECT:
m_list->selectAll();
@@ -109,6 +107,7 @@ void Manager::onCommand(const int id, int)
// IDOK -> continue to next case (IDCANCEL)
}
else {
+ setChange(-m_uninstall.size());
m_uninstall.clear();
refresh();
break;
@@ -231,18 +230,21 @@ void Manager::setRemoteEnabled(const bool enabled)
auto it = m_enableOverrides.find(remote);
if(it == m_enableOverrides.end()) {
- if(remote.isEnabled() != enabled)
- m_enableOverrides.insert({remote, enabled});
+ if(remote.isEnabled() == enabled)
+ continue;
+
+ m_enableOverrides.insert({remote, enabled});
+ setChange(1);
}
- else if(remote.isEnabled() == enabled)
+ else if(remote.isEnabled() == enabled) {
m_enableOverrides.erase(it);
+ setChange(-1);
+ }
else
it->second = enabled;
m_list->replaceRow(index, makeRow(remote));
}
-
- enable(m_apply);
}
bool Manager::isRemoteEnabled(const Remote &remote) const
@@ -283,12 +285,31 @@ void Manager::uninstall()
}
m_uninstall.insert(remote);
- enable(m_apply);
+ setChange(1);
m_list->removeRow(index);
}
}
+void Manager::toggle(boost::optional<bool> &setting, const bool current)
+{
+ setting = !setting.value_or(current);
+ setChange(*setting == current ? -1 : 1);
+}
+
+void Manager::setChange(const int increment)
+{
+ if(!m_changes && increment < 0)
+ return;
+
+ m_changes += increment;
+
+ if(m_changes)
+ enable(m_apply);
+ else
+ disable(m_apply);
+}
+
void Manager::about(const int index)
{
m_reapack->about(getRemote(index), handle());
@@ -343,6 +364,9 @@ bool Manager::confirm() const
bool Manager::apply()
{
+ if(!m_changes)
+ return true;
+
Transaction *tx = m_reapack->setupTransaction();
if(!tx)
@@ -376,7 +400,10 @@ void Manager::reset()
{
m_enableOverrides.clear();
m_uninstall.clear();
+ m_autoInstall = boost::none;
+ m_bleedingEdge = boost::none;
+ m_changes = 0;
disable(m_apply);
}
diff --git a/src/manager.hpp b/src/manager.hpp
@@ -49,11 +49,13 @@ private:
void setRemoteEnabled(bool);
bool isRemoteEnabled(const Remote &) const;
void uninstall();
+ void toggle(boost::optional<bool> &, bool current);
void refreshIndex();
void about(int index);
void copyUrl(int index);
void options();
+ void setChange(int);
bool confirm() const;
bool apply();
void reset();
@@ -62,6 +64,7 @@ private:
ReaPack *m_reapack;
Config *m_config;
ListView *m_list;
+ size_t m_changes;
std::map<Remote, bool> m_enableOverrides;
std::set<Remote> m_uninstall;