ConfigWizard and ManageUpdatesDialog: Enable "confirm" buttons in respect to the changed selections

This commit is contained in:
YuSanka 2024-05-13 11:12:43 +02:00 committed by David Kocik
parent 944e5f6d79
commit c325bb0629
4 changed files with 43 additions and 1 deletions

View File

@ -648,6 +648,12 @@ PageUpdateManager::PageUpdateManager(ConfigWizard* parent_in)
if (m_manager->set_selected_repositories())
wizard_p()->set_config_updated_from_archive(true);
});
btn->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& event) {
const bool is_actual_archive_selection = wizard_p()->is_actual_archive_selection;
const bool is_selection_changed = m_manager->is_selection_changed();
const bool has_selections = m_manager->has_selections();
event.Enable(!is_actual_archive_selection || (is_selection_changed && has_selections));
});
sizer->Add(btn, 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM, em);
@ -3583,6 +3589,8 @@ void ConfigWizard::priv::load_pages_from_archive()
only_sla_mode = true;
bool is_primary_printer_page_set = false;
is_actual_archive_selection = true;
for (const auto& archive : archs) {
const auto& data = archive->get_manifest();
const bool is_selected_arch = pad->is_selected_repository_by_uuid(archive->get_uuid());
@ -3595,6 +3603,11 @@ void ConfigWizard::priv::load_pages_from_archive()
if (is_already_added_repo || (!is_selected_arch && !any_installed_vendor))
continue;
if (!is_selected_arch && any_installed_vendor) {
// ys/dkFIXME - There is a case, when local and web archives have a same repo_id and
// some of them isn't selected but is processed as first
is_actual_archive_selection = false;
}
Pages3rdparty pages;

View File

@ -662,6 +662,7 @@ struct ConfigWizard::priv
std::vector<Repository> repositories;
bool is_config_from_archive{ false };
bool is_actual_archive_selection{ true };
// Pointers to all pages (regardless or whether currently part of the ConfigWizardIndex)
std::vector<ConfigWizardPage*> all_pages;

View File

@ -113,6 +113,7 @@ void RepositoryUpdateUIManager::fill_grids()
m_selected_uuids.emplace(entry.id);
else
m_selected_uuids.erase(entry.id);
check_selection();
});
add(chb);
@ -153,6 +154,7 @@ void RepositoryUpdateUIManager::fill_grids()
m_selected_uuids.emplace(entry.id);
else
m_selected_uuids.erase(entry.id);
check_selection();
});
add(chb);
@ -211,6 +213,7 @@ void RepositoryUpdateUIManager::remove_offline_repos(const std::string& id)
{
m_pad->remove_local_archive(id);
m_selected_uuids.erase(id);
check_selection();
if (wxDialog* dlg = dynamic_cast<wxDialog*>(m_parent)) {
// Invalidate min_size for correct next Layout()
@ -245,6 +248,7 @@ void RepositoryUpdateUIManager::load_offline_repos()
}
else {
m_selected_uuids.emplace(uuid);
check_selection();
update();
}
}
@ -260,15 +264,30 @@ bool RepositoryUpdateUIManager::set_selected_repositories()
std::copy(m_selected_uuids.begin(), m_selected_uuids.end(), std::back_inserter(used_ids));
std::string msg;
if (m_pad->set_selected_repositories(used_ids, msg))
if (m_pad->set_selected_repositories(used_ids, msg)) {
check_selection();
return true;
}
ErrorDialog(m_parent, msg, false).ShowModal();
// update selection on UI
update();
check_selection();
return false;
}
void RepositoryUpdateUIManager::check_selection()
{
for (const auto& [uuid, is_selected] : m_pad->get_selected_repositories_uuid() )
if (is_selected && m_selected_uuids.find(uuid) == m_selected_uuids.end() ||
!is_selected && m_selected_uuids.find(uuid) != m_selected_uuids.end()) {
m_is_selection_changed = true;
return;
}
m_is_selection_changed = false;
}
ManagePresetRepositoriesDialog::ManagePresetRepositoriesDialog(PresetArchiveDatabase* pad)
: DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY,
@ -290,6 +309,11 @@ ManagePresetRepositoriesDialog::ManagePresetRepositoriesDialog(PresetArchiveData
this->Bind(wxEVT_BUTTON, &ManagePresetRepositoriesDialog::onOkDialog, this, wxID_OK);
sizer->Add(buttons, 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM, em);
buttons->GetAffirmativeButton()->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& event) {
event.Enable(m_manager->is_selection_changed() && m_manager->has_selections());
});
SetSizer(sizer);
sizer->SetSizeHints(this);
}

View File

@ -51,6 +51,7 @@ class RepositoryUpdateUIManager
std::vector<OfflineEntry> m_offline_entries;
std::set<std::string> m_selected_uuids;
bool m_is_selection_changed{false};
void fill_entries(bool init_selection = false);
void fill_grids();
@ -59,6 +60,7 @@ class RepositoryUpdateUIManager
void remove_offline_repos(const std::string& id);
void load_offline_repos();
void check_selection();
public:
RepositoryUpdateUIManager() {}
@ -67,6 +69,8 @@ public:
wxSizer* get_sizer() { return m_main_sizer; }
bool set_selected_repositories();
bool is_selection_changed() const { return m_is_selection_changed; }
bool has_selections() const { return !m_selected_uuids.empty(); }
};
class ManagePresetRepositoriesDialog : public DPIDialog