mirror of
https://github.com/QIDITECH/QIDIStudio.git
synced 2026-02-03 18:38:42 +03:00
298 lines
11 KiB
C++
298 lines
11 KiB
C++
#include <wx/dcgraph.h>
|
|
#include "GUI.hpp"
|
|
#include "GUI_App.hpp"
|
|
#include "MainFrame.hpp"
|
|
#include "CalibrationPanel.hpp"
|
|
#include "I18N.hpp"
|
|
#include "Tab.hpp"
|
|
|
|
namespace Slic3r { namespace GUI {
|
|
|
|
#define REFRESH_INTERVAL 1000
|
|
|
|
#define INITIAL_NUMBER_OF_MACHINES 0
|
|
#define LIST_REFRESH_INTERVAL 200
|
|
#define MACHINE_LIST_REFRESH_INTERVAL 2000
|
|
wxDEFINE_EVENT(EVT_FINISHED_UPDATE_MLIST, wxCommandEvent);
|
|
wxDEFINE_EVENT(EVT_UPDATE_USER_MLIST, wxCommandEvent);
|
|
|
|
wxString get_calibration_type_name(CalibMode cali_mode)
|
|
{
|
|
switch (cali_mode) {
|
|
case CalibMode::Calib_PA_Line:
|
|
//w29
|
|
return _L("Pressure Advance");
|
|
case CalibMode::Calib_Flow_Rate:
|
|
return _L("Flow Rate");
|
|
case CalibMode::Calib_Vol_speed_Tower:
|
|
return _L("Max Volumetric Speed");
|
|
case CalibMode::Calib_Temp_Tower:
|
|
return _L("Temperature");
|
|
case CalibMode::Calib_Retraction_tower:
|
|
return _L("Retraction");
|
|
default:
|
|
return "";
|
|
}
|
|
}
|
|
//w29
|
|
|
|
|
|
CalibrationPanel::CalibrationPanel(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style)
|
|
//w29
|
|
: wxPanel(parent, id, pos, size, style)
|
|
{
|
|
SetBackgroundColour(*wxWHITE);
|
|
|
|
init_tabpanel();
|
|
|
|
wxBoxSizer* sizer_main = new wxBoxSizer(wxVERTICAL);
|
|
sizer_main->Add(m_tabpanel, 1, wxEXPAND, 0);
|
|
|
|
SetSizerAndFit(sizer_main);
|
|
Layout();
|
|
|
|
init_timer();
|
|
//w29
|
|
}
|
|
|
|
//w29
|
|
void CalibrationPanel::create_preset_box(wxWindow* parent, wxBoxSizer* sizer_side_tools) {
|
|
PresetBundle* m_preset_bundle = wxGetApp().preset_bundle;
|
|
auto panel = this;
|
|
m_printer_choice = new TabPresetComboBox(panel, Slic3r::Preset::TYPE_PRINTER);
|
|
m_printer_choice->set_selection_changed_function([this](int selection) {
|
|
if (!m_printer_choice->selection_is_changed_according_to_physical_printers())
|
|
{
|
|
if (!m_printer_choice->is_selected_physical_printer())
|
|
wxGetApp().preset_bundle->physical_printers.unselect_printer();
|
|
std::string preset_name = m_printer_choice->GetString(selection).ToUTF8().data();
|
|
Slic3r::GUI::Tab* printer_tab = Slic3r::GUI::wxGetApp().get_tab(Preset::Type::TYPE_PRINTER);
|
|
printer_tab->select_preset(Preset::remove_suffix_modified(preset_name));
|
|
m_filament_choice->update();
|
|
m_print_choice->update();
|
|
}
|
|
});
|
|
|
|
|
|
m_filament_choice = new TabPresetComboBox(panel, Slic3r::Preset::TYPE_FILAMENT);
|
|
m_filament_choice->set_selection_changed_function([this](int selection) {
|
|
if (!m_filament_choice->selection_is_changed_according_to_physical_printers())
|
|
{
|
|
if (!m_filament_choice->is_selected_physical_printer())
|
|
wxGetApp().preset_bundle->physical_printers.unselect_printer();
|
|
std::string preset_name = m_filament_choice->GetString(selection).ToUTF8().data();
|
|
if (preset_name.find("PETG") != std::string::npos && m_tabpanel->GetSelection() == 1) {
|
|
wxMessageBox("PETG filaments are not suitable for pressure advance calibration", "Warning", wxOK | wxICON_ERROR);
|
|
}
|
|
Slic3r::GUI::Tab* filament_tab = Slic3r::GUI::wxGetApp().get_tab(Preset::Type::TYPE_FILAMENT);
|
|
|
|
filament_tab->select_preset(preset_name);
|
|
const std::string& name = wxGetApp().preset_bundle->filaments.get_selected_preset_name();
|
|
{
|
|
Preset* preset = wxGetApp().preset_bundle->filaments.find_preset(name, false);
|
|
if (preset)
|
|
{
|
|
if (preset->is_compatible) wxGetApp().preset_bundle->set_filament_preset(0, name);
|
|
}
|
|
wxGetApp().sidebar().combos_filament()[0]->update();
|
|
}
|
|
}
|
|
});
|
|
|
|
m_print_choice = new TabPresetComboBox(panel, Slic3r::Preset::TYPE_PRINT);
|
|
m_print_choice->set_selection_changed_function([this](int selection) {
|
|
if (!m_print_choice->selection_is_changed_according_to_physical_printers())
|
|
{
|
|
if (!m_print_choice->is_selected_physical_printer())
|
|
wxGetApp().preset_bundle->physical_printers.unselect_printer();
|
|
std::string preset_name = m_print_choice->GetString(selection).ToUTF8().data();
|
|
Slic3r::GUI::Tab* print_tab = Slic3r::GUI::wxGetApp().get_tab(Preset::Type::TYPE_PRINT);
|
|
|
|
print_tab->select_preset(Preset::remove_suffix_modified(preset_name));
|
|
}
|
|
});
|
|
|
|
wxPanel* m_printer_panel = new wxPanel(parent);
|
|
ScalableButton* m_printer_icon = new ScalableButton(m_printer_panel, wxID_ANY, "printer");
|
|
Label* m_printer_title = new Label(m_printer_panel, _L("Printer"), LB_PROPAGATE_MOUSE_EVENT);
|
|
m_printer_icon->SetForegroundColour(m_printer_icon->GetForegroundColour());
|
|
wxBoxSizer* h_printer_sizer = new wxBoxSizer(wxHORIZONTAL);
|
|
m_printer_panel->SetSizer(h_printer_sizer);
|
|
h_printer_sizer->Add(FromDIP(10), 0, 0, 0, 0);
|
|
h_printer_sizer->Add(m_printer_icon, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
|
|
h_printer_sizer->Add(m_printer_title, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT, 5);
|
|
h_printer_sizer->AddStretchSpacer(1);
|
|
|
|
|
|
|
|
wxPanel* m_filament_panel = new wxPanel(parent);
|
|
ScalableButton* m_filament_icon = new ScalableButton(m_filament_panel, wxID_ANY, "filament");
|
|
Label* m_filament_title = new Label(m_filament_panel, _L("Filament"), LB_PROPAGATE_MOUSE_EVENT);
|
|
m_filament_icon->SetForegroundColour(m_filament_icon->GetForegroundColour());
|
|
wxBoxSizer* h_filament_sizer = new wxBoxSizer(wxHORIZONTAL);
|
|
m_filament_panel->SetSizer(h_filament_sizer);
|
|
h_filament_sizer->Add(FromDIP(10), 0, 0, 0, 0);
|
|
h_filament_sizer->Add(m_filament_icon, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
|
|
h_filament_sizer->Add(m_filament_title, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT, 5);
|
|
h_filament_sizer->AddStretchSpacer(1);
|
|
|
|
|
|
wxPanel* m_process_panel = new wxPanel(parent);
|
|
ScalableButton* m_process_icon = new ScalableButton(m_process_panel, wxID_ANY, "process");
|
|
Label* m_process_title = new Label(m_process_panel, _L("Process"), LB_PROPAGATE_MOUSE_EVENT);
|
|
m_process_icon->SetForegroundColour(m_process_icon->GetForegroundColour());
|
|
wxBoxSizer* h_process_sizer = new wxBoxSizer(wxHORIZONTAL);
|
|
m_process_panel->SetSizer(h_process_sizer);
|
|
h_process_sizer->Add(FromDIP(10), 0, 0, 0, 0);
|
|
h_process_sizer->Add(m_process_icon, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
|
|
h_process_sizer->Add(m_process_title, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxLEFT, 5);
|
|
h_process_sizer->AddStretchSpacer(1);
|
|
|
|
wxColour bg(241, 241, 241);
|
|
m_printer_icon->SetBackgroundColour(bg);
|
|
m_filament_icon->SetBackgroundColour(bg);
|
|
m_process_icon->SetBackgroundColour(bg);
|
|
m_printer_title->SetBackgroundColour(bg);
|
|
m_filament_title->SetBackgroundColour(bg);
|
|
m_process_title->SetBackgroundColour(bg);
|
|
m_printer_panel->SetBackgroundColour(bg);
|
|
m_filament_panel->SetBackgroundColour(bg);
|
|
m_process_panel->SetBackgroundColour(bg);
|
|
|
|
sizer_side_tools->Add(m_printer_panel, 0, wxEXPAND);
|
|
sizer_side_tools->AddSpacer(10);
|
|
sizer_side_tools->Add(m_printer_choice, 0, wxEXPAND | wxLEFT | wxRIGHT, 5);
|
|
sizer_side_tools->Add(m_filament_panel, 0, wxEXPAND | wxTOP | wxBottom, 10);
|
|
sizer_side_tools->AddSpacer(10);
|
|
sizer_side_tools->Add(m_filament_choice, 0, wxEXPAND | wxLEFT | wxRIGHT, 5);
|
|
sizer_side_tools->Add(m_process_panel, 0, wxEXPAND | wxTOP | wxBottom, 10);
|
|
sizer_side_tools->AddSpacer(10);
|
|
sizer_side_tools->Add(m_print_choice, 0, wxEXPAND | wxLEFT | wxRIGHT, 5);
|
|
|
|
wxStaticLine* line = new wxStaticLine(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL);
|
|
line->SetForegroundColour(bg);
|
|
line->SetBackgroundColour(bg);
|
|
|
|
sizer_side_tools->Add(line, 0, wxEXPAND | wxTOP, 10);
|
|
|
|
sizer_side_tools->Layout();
|
|
this->Layout();
|
|
this->Refresh();
|
|
|
|
m_printer_choice->update();
|
|
m_filament_choice->update();
|
|
m_print_choice->update();
|
|
Layout();
|
|
Refresh();
|
|
}
|
|
|
|
void CalibrationPanel::init_tabpanel() {
|
|
//w29
|
|
|
|
wxBoxSizer* sizer_side_tools = new wxBoxSizer(wxVERTICAL);
|
|
sizer_side_tools->SetMinSize(wxSize(250, -1));
|
|
//w29
|
|
create_preset_box(this, sizer_side_tools);
|
|
|
|
m_tabpanel = new Tabbook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, sizer_side_tools, wxNB_LEFT | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME);
|
|
m_printer_choice->update();
|
|
m_filament_choice->update();
|
|
m_print_choice->update();
|
|
//w29
|
|
m_tabpanel->SetBackgroundColour(*wxWHITE);
|
|
m_cali_panels[0] = new FlowRateWizard(m_tabpanel);
|
|
m_cali_panels[1] = new PressureAdvanceWizard(m_tabpanel);
|
|
//w29
|
|
m_cali_panels[2] = new MaxVolumetricSpeedWizard(m_tabpanel);
|
|
for (int i = 0; i < (int)CALI_MODE_COUNT; i++) {
|
|
bool selected = false;
|
|
if (i == 0)
|
|
selected = true;
|
|
//w29
|
|
/*m_tabpanel->AddPage(m_cali_panels[i],
|
|
get_calibration_type_name(m_cali_panels[i]->get_calibration_mode()),
|
|
"",
|
|
selected);*/
|
|
if (i == 1) {
|
|
m_tabpanel->AddPage(m_cali_panels[i],
|
|
get_calibration_type_name(CalibMode::Calib_PA_Line),
|
|
"",
|
|
selected);
|
|
}
|
|
else if( i == 0){
|
|
selected = true;
|
|
m_tabpanel->AddPage(m_cali_panels[i],
|
|
get_calibration_type_name(CalibMode::Calib_Flow_Rate),
|
|
"",
|
|
selected);
|
|
}
|
|
else {
|
|
m_tabpanel->AddPage(m_cali_panels[i],
|
|
get_calibration_type_name(m_cali_panels[i]->get_calibration_mode()),
|
|
"",
|
|
selected);
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < (int)CALI_MODE_COUNT; i++)
|
|
m_tabpanel->SetPageImage(i, "");
|
|
|
|
auto padding_size = m_tabpanel->GetBtnsListCtrl()->GetPaddingSize(0);
|
|
m_tabpanel->GetBtnsListCtrl()->SetPaddingSize({ FromDIP(15), padding_size.y });
|
|
|
|
m_initialized = true;
|
|
}
|
|
|
|
void CalibrationPanel::init_timer()
|
|
{
|
|
m_refresh_timer = new wxTimer();
|
|
m_refresh_timer->SetOwner(this);
|
|
m_refresh_timer->Start(REFRESH_INTERVAL);
|
|
wxPostEvent(this, wxTimerEvent());
|
|
}
|
|
//w29
|
|
|
|
bool CalibrationPanel::Show(bool show) {
|
|
if (show) {
|
|
m_refresh_timer->Stop();
|
|
m_refresh_timer->SetOwner(this);
|
|
m_refresh_timer->Start(REFRESH_INTERVAL);
|
|
wxPostEvent(this, wxTimerEvent());
|
|
|
|
DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager();
|
|
if (dev) {
|
|
//set a default machine when obj is null
|
|
obj = dev->get_selected_machine();
|
|
if (obj == nullptr) {
|
|
dev->load_last_machine();
|
|
obj = dev->get_selected_machine();
|
|
if (obj)
|
|
GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj);
|
|
}
|
|
else {
|
|
obj->reset_update_time();
|
|
}
|
|
}
|
|
|
|
}
|
|
else {
|
|
m_refresh_timer->Stop();
|
|
}
|
|
return wxPanel::Show(show);
|
|
}
|
|
//w29
|
|
|
|
void CalibrationPanel::msw_rescale()
|
|
{
|
|
for (int i = 0; i < (int)CALI_MODE_COUNT; i++) {
|
|
m_cali_panels[i]->msw_rescale();
|
|
}
|
|
}
|
|
|
|
CalibrationPanel::~CalibrationPanel() {
|
|
if (m_refresh_timer)
|
|
m_refresh_timer->Stop();
|
|
delete m_refresh_timer;
|
|
}
|
|
|
|
}} |