ConfigWizard: Set enable conditions for "Finish" and "Select all standard" buttons

* Disable "Finish" button, when no one printer is selected or "Configuration Manager" page is active
* Disable "Select all standard" button, when no one printer page is added or "Configuration Manager" page is active
+ Check and install missing materials after reload configurations from archive
+ Activate Vendor page, if no one printer is selected from loaded archive
This commit is contained in:
YuSanka 2024-06-04 15:40:52 +02:00 committed by David Kocik
parent 4b7b5e4643
commit 7c315dc60d
2 changed files with 45 additions and 9 deletions

View File

@ -678,6 +678,9 @@ PageUpdateManager::PageUpdateManager(ConfigWizard* parent_in)
is_active = true;
else if (is_active && parent_in->IsShown()) {
if (manager->has_selections()) {
if (wizard_p()->is_first_start)
wizard_p()->is_first_start = false;
wxBusyCursor wait;
if (manager->set_selected_repositories())
wizard_p()->set_config_updated_from_archive(true);
@ -2619,13 +2622,12 @@ void ConfigWizard::priv::load_pages()
}
if (former_active != page_update_manager)
index->go_to(former_active); // Will restore the active item/page if possible
// set visibility for "Select all..."
btn_sel_all->Show(!pages_fff.empty() || !pages_msla.empty());
// Set enabling fo "Finish" button -> there should to be selected at least one printer
btn_finish->Enable(any_fff_selected || any_sla_selected || custom_printer_selected || custom_printer_in_bundle);
if (former_active != page_update_manager) {
if (pages_fff.empty() && pages_msla.empty() && !repositories.empty())
index->go_to(repositories[0].vendors_page); // Activate Vendor page, if no one printer is selected
else
index->go_to(former_active); // Will restore the active item/page if possible
}
q->Layout();
// This Refresh() is needed to avoid ugly artifacts after printer selection, when no one vendor was selected from the very beginnig
@ -3050,6 +3052,22 @@ void ConfigWizard::priv::on_3rdparty_install(const VendorProfile *vendor, bool i
load_pages();
}
bool ConfigWizard::priv::can_finish()
{
if (index->active_page() == page_update_manager)
return false;
// Set enabling fo "Finish" button -> there should to be selected at least one printer
return any_fff_selected || any_sla_selected || custom_printer_selected || custom_printer_in_bundle;
}
bool ConfigWizard::priv::can_select_all()
{
if (index->active_page() == page_update_manager)
return false;
// set enabling for "Select all..." -> there should to be exist at least one printer page
return !pages_fff.empty() || !pages_msla.empty();
}
bool ConfigWizard::priv::on_bnt_finish()
{
wxBusyCursor wait;
@ -3746,6 +3764,10 @@ void ConfigWizard::priv::load_pages_from_archive()
}
}
if (only_sla_mode && !repositories.empty()) {
only_sla_mode = false;
}
if (!only_sla_mode) {
add_page(page_custom = new PageCustom(q));
custom_printer_selected = page_custom->custom_wanted();
@ -3754,7 +3776,9 @@ void ConfigWizard::priv::load_pages_from_archive()
any_sla_selected = check_sla_selected();
any_fff_selected = !only_sla_mode && check_fff_selected();
check_and_install_missing_materials(T_ANY);
update_materials(T_ANY);
if (!page_filaments && !only_sla_mode) {
add_page(page_filaments = new PageMaterials(q, &filaments,
_L("Filament Profiles Selection"), _L("Filaments"), _L("Type:")));
@ -3891,6 +3915,11 @@ ConfigWizard::ConfigWizard(wxWindow *parent)
this->EndModal(wxID_OK);
});
p->btn_finish->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt)
{
evt.Enable(p->can_finish());
});
p->btn_sel_all->Bind(wxEVT_BUTTON, [this](const wxCommandEvent &) {
// p->any_sla_selected = true;
p->load_pages();
@ -3903,6 +3932,11 @@ ConfigWizard::ConfigWizard(wxWindow *parent)
p->index->go_to(p->page_mode);
});
p->btn_sel_all->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt)
{
evt.Enable(p->can_select_all());
});
p->index->Bind(EVT_INDEX_PAGE, [this](const wxCommandEvent &) {
const bool is_last = p->index->active_is_last();
p->btn_next->Show(! is_last || p->is_first_start);

View File

@ -611,8 +611,8 @@ struct ConfigWizard::priv
PresetAliases aliases_fff; // Map of alias to material presets
PresetAliases aliases_sla; // Map of alias to material presets
std::unique_ptr<DynamicPrintConfig> custom_config; // Backing for custom printer definition
bool any_fff_selected; // Used to decide whether to display Filaments page
bool any_sla_selected; // Used to decide whether to display SLA Materials page
bool any_fff_selected { false }; // Used to decide whether to display Filaments page
bool any_sla_selected { false }; // Used to decide whether to display SLA Materials page
bool custom_printer_selected { false }; // New custom printer is requested
bool custom_printer_in_bundle { false }; // Older custom printer already exists when wizard starts
// Set to true if there are none FFF printers on the main FFF page. If true, only SLA printers are shown (not even custom printers)
@ -691,6 +691,8 @@ struct ConfigWizard::priv
void select_default_materials_for_printer_models(Technology technology, const std::set<const VendorProfile::PrinterModel*> &printer_models);
void on_3rdparty_install(const VendorProfile *vendor, bool install);
bool can_finish();
bool can_select_all();
bool on_bnt_finish();
bool check_and_install_missing_materials(Technology technology, const std::string &only_for_model_id = std::string());
bool apply_config(AppConfig *app_config, PresetBundle *preset_bundle, const PresetUpdater *updater, bool& apply_keeped_changes);