Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVojtech Kral <vojtech@kral.hk>2019-06-11 13:44:12 +0300
committerVojtech Kral <vojtech@kral.hk>2019-06-20 12:17:35 +0300
commit8208da0a7b844dd74775c5029b2f097363db5233 (patch)
tree9429504b5d4a70411dd3483bb50ea91222e082ea /src/slic3r/GUI/FirmwareDialog.cpp
parent09da7a84b5c1e338b81c1435f7cb69b96fc785e1 (diff)
Firmware updater: Fix MMU flashing in GUI
Diffstat (limited to 'src/slic3r/GUI/FirmwareDialog.cpp')
-rw-r--r--src/slic3r/GUI/FirmwareDialog.cpp34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/slic3r/GUI/FirmwareDialog.cpp b/src/slic3r/GUI/FirmwareDialog.cpp
index 9e209faed..15a09aa71 100644
--- a/src/slic3r/GUI/FirmwareDialog.cpp
+++ b/src/slic3r/GUI/FirmwareDialog.cpp
@@ -107,7 +107,7 @@ struct FirmwareDialog::priv
// GUI elements
wxComboBox *port_picker;
- wxStaticText *port_autodetect;
+ wxStaticText *txt_port_autodetect;
wxFilePickerCtrl *hex_picker;
wxStaticText *txt_status;
wxGauge *progressbar;
@@ -134,6 +134,7 @@ struct FirmwareDialog::priv
// Data
std::vector<SerialPortInfo> ports;
optional<SerialPortInfo> port;
+ bool port_autodetect;
HexFile hex_file;
// This is a shared pointer holding the background AvrDude task
@@ -150,6 +151,7 @@ struct FirmwareDialog::priv
btn_flash_label_flashing(_(L("Cancel"))),
label_status_flashing(_(L("Flashing in progress. Please do not disconnect the printer!"))),
timer_pulse(q),
+ port_autodetect(false),
progress_tasks_done(0),
progress_tasks_bar(0),
user_cancelled(false),
@@ -161,7 +163,7 @@ struct FirmwareDialog::priv
void set_txt_status(const wxString &label);
void flashing_start(unsigned tasks);
void flashing_done(AvrDudeComplete complete);
- void enable_port_picker(bool enable);
+ void set_autodetect(bool autodetect);
void update_flash_enabled();
void load_hex_file(const wxString &path);
void queue_event(AvrdudeEvent aevt, wxString message);
@@ -216,8 +218,10 @@ void FirmwareDialog::priv::find_serial_ports()
idx = i;
break;
}
- if (idx != -1)
+ if (idx != -1) {
port_picker->SetSelection(idx);
+ update_flash_enabled();
+ }
}
}
}
@@ -282,11 +286,13 @@ void FirmwareDialog::priv::flashing_done(AvrDudeComplete complete)
}
}
-void FirmwareDialog::priv::enable_port_picker(bool enable)
+void FirmwareDialog::priv::set_autodetect(bool autodetect)
{
- port_picker->Show(enable);
- btn_rescan->Show(enable);
- port_autodetect->Show(! enable);
+ port_autodetect = autodetect;
+
+ port_picker->Show(!autodetect);
+ btn_rescan->Show(!autodetect);
+ txt_port_autodetect->Show(autodetect);
q->Layout();
fit_no_shrink();
}
@@ -294,7 +300,7 @@ void FirmwareDialog::priv::enable_port_picker(bool enable)
void FirmwareDialog::priv::update_flash_enabled()
{
const bool hex_exists = wxFileExists(hex_picker->GetPath());
- const bool port_valid = get_serial_port();
+ const bool port_valid = port_autodetect || get_serial_port();
btn_flash->Enable(hex_exists && port_valid);
}
@@ -302,8 +308,8 @@ void FirmwareDialog::priv::update_flash_enabled()
void FirmwareDialog::priv::load_hex_file(const wxString &path)
{
hex_file = HexFile(path.wx_str());
- const bool auto_lookup = hex_file.device == HexFile::DEV_MM_CONTROL || hex_file.device == HexFile::DEV_CW1;
- enable_port_picker(! auto_lookup);
+ const bool autodetect = hex_file.device == HexFile::DEV_MM_CONTROL || hex_file.device == HexFile::DEV_CW1;
+ set_autodetect(autodetect);
}
void FirmwareDialog::priv::queue_event(AvrdudeEvent aevt, wxString message)
@@ -598,7 +604,7 @@ void FirmwareDialog::priv::perform_upload()
load_hex_file(filename); // Might already be loaded, but we want to make sure it's fresh
- if (! get_serial_port()) {
+ if (!port_autodetect && !get_serial_port()) {
return;
}
@@ -801,13 +807,13 @@ FirmwareDialog::FirmwareDialog(wxWindow *parent) :
auto *label_port_picker = new wxStaticText(panel, wxID_ANY, _(L("Serial port:")));
p->port_picker = new wxComboBox(panel, wxID_ANY);
- p->port_autodetect = new wxStaticText(panel, wxID_ANY, _(L("Autodetected")));
+ p->txt_port_autodetect = new wxStaticText(panel, wxID_ANY, _(L("Autodetected")));
p->btn_rescan = new wxButton(panel, wxID_ANY, _(L("Rescan")));
auto *port_sizer = new wxBoxSizer(wxHORIZONTAL);
port_sizer->Add(p->port_picker, 1, wxEXPAND | wxRIGHT, SPACING);
port_sizer->Add(p->btn_rescan, 0);
- port_sizer->Add(p->port_autodetect, 1, wxEXPAND);
- p->enable_port_picker(true);
+ port_sizer->Add(p->txt_port_autodetect, 1, wxEXPAND);
+ p->set_autodetect(false);
auto *label_progress = new wxStaticText(panel, wxID_ANY, _(L("Progress:")));
p->progressbar = new wxGauge(panel, wxID_ANY, 1, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL | wxGA_SMOOTH);