ConfigWizard refactoring
This commit is contained in:
parent
f0cee79170
commit
b0f54e5709
9 changed files with 1065 additions and 818 deletions
Binary file not shown.
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 55 KiB |
File diff suppressed because it is too large
Load diff
|
@ -16,30 +16,30 @@ namespace GUI {
|
||||||
class ConfigWizard: public wxDialog
|
class ConfigWizard: public wxDialog
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Why is the Wizard run
|
// Why is the Wizard run
|
||||||
enum RunReason {
|
enum RunReason {
|
||||||
RR_DATA_EMPTY, // No or empty datadir
|
RR_DATA_EMPTY, // No or empty datadir
|
||||||
RR_DATA_LEGACY, // Pre-updating datadir
|
RR_DATA_LEGACY, // Pre-updating datadir
|
||||||
RR_DATA_INCOMPAT, // Incompatible datadir - Slic3r downgrade situation
|
RR_DATA_INCOMPAT, // Incompatible datadir - Slic3r downgrade situation
|
||||||
RR_USER, // User requested the Wizard from the menus
|
RR_USER, // User requested the Wizard from the menus
|
||||||
};
|
};
|
||||||
|
|
||||||
ConfigWizard(wxWindow *parent, RunReason run_reason);
|
ConfigWizard(wxWindow *parent, RunReason run_reason);
|
||||||
ConfigWizard(ConfigWizard &&) = delete;
|
ConfigWizard(ConfigWizard &&) = delete;
|
||||||
ConfigWizard(const ConfigWizard &) = delete;
|
ConfigWizard(const ConfigWizard &) = delete;
|
||||||
ConfigWizard &operator=(ConfigWizard &&) = delete;
|
ConfigWizard &operator=(ConfigWizard &&) = delete;
|
||||||
ConfigWizard &operator=(const ConfigWizard &) = delete;
|
ConfigWizard &operator=(const ConfigWizard &) = delete;
|
||||||
~ConfigWizard();
|
~ConfigWizard();
|
||||||
|
|
||||||
// Run the Wizard. Return whether it was completed.
|
// Run the Wizard. Return whether it was completed.
|
||||||
bool run(PresetBundle *preset_bundle, const PresetUpdater *updater);
|
bool run(PresetBundle *preset_bundle, const PresetUpdater *updater);
|
||||||
|
|
||||||
static const wxString& name(const bool from_menu = false);
|
static const wxString& name(const bool from_menu = false);
|
||||||
private:
|
private:
|
||||||
struct priv;
|
struct priv;
|
||||||
std::unique_ptr<priv> p;
|
std::unique_ptr<priv> p;
|
||||||
|
|
||||||
friend struct ConfigWizardPage;
|
friend struct ConfigWizardPage;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
#include <functional>
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
|
|
||||||
#include <wx/sizer.h>
|
#include <wx/sizer.h>
|
||||||
|
@ -13,6 +14,7 @@
|
||||||
#include <wx/button.h>
|
#include <wx/button.h>
|
||||||
#include <wx/choice.h>
|
#include <wx/choice.h>
|
||||||
#include <wx/spinctrl.h>
|
#include <wx/spinctrl.h>
|
||||||
|
#include <wx/textctrl.h>
|
||||||
|
|
||||||
#include "libslic3r/PrintConfig.hpp"
|
#include "libslic3r/PrintConfig.hpp"
|
||||||
#include "slic3r/Utils/PresetUpdater.hpp"
|
#include "slic3r/Utils/PresetUpdater.hpp"
|
||||||
|
@ -26,211 +28,270 @@ namespace Slic3r {
|
||||||
namespace GUI {
|
namespace GUI {
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
WRAP_WIDTH = 500,
|
WRAP_WIDTH = 500,
|
||||||
MODEL_MIN_WRAP = 150,
|
MODEL_MIN_WRAP = 150,
|
||||||
|
|
||||||
DIALOG_MARGIN = 15,
|
DIALOG_MARGIN = 15,
|
||||||
INDEX_MARGIN = 40,
|
INDEX_MARGIN = 40,
|
||||||
BTN_SPACING = 10,
|
BTN_SPACING = 10,
|
||||||
INDENT_SPACING = 30,
|
INDENT_SPACING = 30,
|
||||||
VERTICAL_SPACING = 10,
|
VERTICAL_SPACING = 10,
|
||||||
|
|
||||||
|
MAX_COLS = 4,
|
||||||
|
ROW_SPACING = 75,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef std::function<bool(const VendorProfile::PrinterModel&)> ModelFilter;
|
||||||
|
|
||||||
struct PrinterPicker: wxPanel
|
struct PrinterPicker: wxPanel
|
||||||
{
|
{
|
||||||
struct Checkbox : wxCheckBox
|
struct Checkbox : wxCheckBox
|
||||||
{
|
{
|
||||||
Checkbox(wxWindow *parent, const wxString &label, const std::string &model, const std::string &variant) :
|
Checkbox(wxWindow *parent, const wxString &label, const std::string &model, const std::string &variant) :
|
||||||
wxCheckBox(parent, wxID_ANY, label),
|
wxCheckBox(parent, wxID_ANY, label),
|
||||||
model(model),
|
model(model),
|
||||||
variant(variant)
|
variant(variant)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
std::string model;
|
std::string model;
|
||||||
std::string variant;
|
std::string variant;
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::string vendor_id;
|
const std::string vendor_id;
|
||||||
std::vector<Checkbox*> cboxes;
|
std::vector<Checkbox*> cboxes;
|
||||||
unsigned variants_checked;
|
std::vector<Checkbox*> cboxes_alt;
|
||||||
|
|
||||||
PrinterPicker(wxWindow *parent, const VendorProfile &vendor, const AppConfig &appconfig_vendors);
|
PrinterPicker(wxWindow *parent, const VendorProfile &vendor, wxString title, size_t max_cols, const AppConfig &appconfig_vendors, const ModelFilter &filter);
|
||||||
|
PrinterPicker(wxWindow *parent, const VendorProfile &vendor, wxString title, size_t max_cols, const AppConfig &appconfig_vendors);
|
||||||
|
|
||||||
void select_all(bool select);
|
void select_all(bool select);
|
||||||
void select_one(size_t i, bool select);
|
void select_one(size_t i, bool select);
|
||||||
void on_checkbox(const Checkbox *cbox, bool checked);
|
void on_checkbox(const Checkbox *cbox, bool checked);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ConfigWizardPage: wxPanel
|
struct ConfigWizardPage: wxPanel
|
||||||
{
|
{
|
||||||
ConfigWizard *parent;
|
ConfigWizard *parent;
|
||||||
const wxString shortname;
|
const wxString shortname;
|
||||||
wxBoxSizer *content;
|
wxBoxSizer *content;
|
||||||
|
const unsigned indent;
|
||||||
|
|
||||||
ConfigWizardPage(ConfigWizard *parent, wxString title, wxString shortname);
|
ConfigWizardPage(ConfigWizard *parent, wxString title, wxString shortname, unsigned indent = 0);
|
||||||
|
virtual ~ConfigWizardPage();
|
||||||
|
|
||||||
virtual ~ConfigWizardPage();
|
template<class T>
|
||||||
|
void append(T *thing, int proportion = 0, int flag = wxEXPAND|wxTOP|wxBOTTOM, int border = 10)
|
||||||
|
{
|
||||||
|
content->Add(thing, proportion, flag, border);
|
||||||
|
}
|
||||||
|
|
||||||
ConfigWizardPage* page_prev() const { return p_prev; }
|
void append_text(wxString text);
|
||||||
ConfigWizardPage* page_next() const { return p_next; }
|
void append_spacer(int space);
|
||||||
ConfigWizardPage* chain(ConfigWizardPage *page);
|
|
||||||
|
|
||||||
template<class T>
|
ConfigWizard::priv *wizard_p() const { return parent->p.get(); }
|
||||||
void append(T *thing, int proportion = 0, int flag = wxEXPAND|wxTOP|wxBOTTOM, int border = 10)
|
|
||||||
{
|
|
||||||
content->Add(thing, proportion, flag, border);
|
|
||||||
}
|
|
||||||
|
|
||||||
void append_text(wxString text);
|
virtual bool Show(bool show = true);
|
||||||
void append_spacer(int space);
|
virtual bool Hide() { return Show(false); }
|
||||||
|
virtual wxPanel* extra_buttons() { return nullptr; } // XXX
|
||||||
ConfigWizard::priv *wizard_p() const { return parent->p.get(); }
|
virtual void apply_custom_config(DynamicPrintConfig &config) {}
|
||||||
|
|
||||||
virtual bool Show(bool show = true);
|
|
||||||
virtual bool Hide() { return Show(false); }
|
|
||||||
virtual wxPanel* extra_buttons() { return nullptr; }
|
|
||||||
virtual void on_page_set() {}
|
|
||||||
virtual void apply_custom_config(DynamicPrintConfig &config) {}
|
|
||||||
|
|
||||||
void enable_next(bool enable);
|
|
||||||
private:
|
|
||||||
ConfigWizardPage *p_prev;
|
|
||||||
ConfigWizardPage *p_next;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PageWelcome: ConfigWizardPage
|
struct PageWelcome: ConfigWizardPage
|
||||||
{
|
{
|
||||||
PrinterPicker *printer_picker;
|
wxCheckBox *cbox_reset;
|
||||||
wxPanel *others_buttons;
|
|
||||||
wxCheckBox *cbox_reset;
|
|
||||||
|
|
||||||
PageWelcome(ConfigWizard *parent, bool check_first_variant);
|
PageWelcome(ConfigWizard *parent);
|
||||||
|
|
||||||
virtual wxPanel* extra_buttons() { return others_buttons; }
|
bool reset_user_profile() const { return cbox_reset != nullptr ? cbox_reset->GetValue() : false; }
|
||||||
virtual void on_page_set();
|
};
|
||||||
|
|
||||||
|
struct PagePrinters: ConfigWizardPage
|
||||||
|
{
|
||||||
|
enum Technology {
|
||||||
|
// Bitflag equivalent of PrinterTechnology
|
||||||
|
T_FFF = 0x1,
|
||||||
|
T_SLA = 0x2,
|
||||||
|
T_Any = ~0,
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<PrinterPicker *> printer_pickers;
|
||||||
|
|
||||||
|
PagePrinters(ConfigWizard *parent, wxString title, wxString shortname, const VendorProfile &vendor, unsigned indent, Technology technology);
|
||||||
|
|
||||||
|
void select_all(bool select);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct PageCustom: ConfigWizardPage
|
||||||
|
{
|
||||||
|
PageCustom(ConfigWizard *parent);
|
||||||
|
|
||||||
|
bool custom_wanted() const { return cb_custom->GetValue(); }
|
||||||
|
std::string profile_name() const { return into_u8(tc_profile_name->GetValue()); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxCheckBox *cb_custom;
|
||||||
|
wxTextCtrl *tc_profile_name;
|
||||||
|
|
||||||
bool reset_user_profile() const { return cbox_reset != nullptr ? cbox_reset->GetValue() : false; }
|
|
||||||
void on_variant_checked();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PageUpdate: ConfigWizardPage
|
struct PageUpdate: ConfigWizardPage
|
||||||
{
|
{
|
||||||
bool version_check;
|
bool version_check;
|
||||||
bool preset_update;
|
bool preset_update;
|
||||||
|
|
||||||
PageUpdate(ConfigWizard *parent);
|
PageUpdate(ConfigWizard *parent);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PageVendors: ConfigWizardPage
|
struct PageVendors: ConfigWizardPage
|
||||||
{
|
{
|
||||||
std::vector<PrinterPicker*> pickers;
|
std::vector<PrinterPicker*> pickers;
|
||||||
|
|
||||||
PageVendors(ConfigWizard *parent);
|
PageVendors(ConfigWizard *parent);
|
||||||
|
|
||||||
virtual void on_page_set();
|
void on_vendor_pick(size_t i);
|
||||||
|
|
||||||
void on_vendor_pick(size_t i);
|
|
||||||
void on_variant_checked();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PageFirmware: ConfigWizardPage
|
struct PageFirmware: ConfigWizardPage
|
||||||
{
|
{
|
||||||
const ConfigOptionDef &gcode_opt;
|
const ConfigOptionDef &gcode_opt;
|
||||||
wxChoice *gcode_picker;
|
wxChoice *gcode_picker;
|
||||||
|
|
||||||
PageFirmware(ConfigWizard *parent);
|
PageFirmware(ConfigWizard *parent);
|
||||||
virtual void apply_custom_config(DynamicPrintConfig &config);
|
virtual void apply_custom_config(DynamicPrintConfig &config);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PageBedShape: ConfigWizardPage
|
struct PageBedShape: ConfigWizardPage
|
||||||
{
|
{
|
||||||
BedShapePanel *shape_panel;
|
BedShapePanel *shape_panel;
|
||||||
|
|
||||||
PageBedShape(ConfigWizard *parent);
|
PageBedShape(ConfigWizard *parent);
|
||||||
virtual void apply_custom_config(DynamicPrintConfig &config);
|
virtual void apply_custom_config(DynamicPrintConfig &config);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PageDiameters: ConfigWizardPage
|
struct PageDiameters: ConfigWizardPage
|
||||||
{
|
{
|
||||||
wxSpinCtrlDouble *spin_nozzle;
|
wxSpinCtrlDouble *spin_nozzle;
|
||||||
wxSpinCtrlDouble *spin_filam;
|
wxSpinCtrlDouble *spin_filam;
|
||||||
|
|
||||||
PageDiameters(ConfigWizard *parent);
|
PageDiameters(ConfigWizard *parent);
|
||||||
virtual void apply_custom_config(DynamicPrintConfig &config);
|
virtual void apply_custom_config(DynamicPrintConfig &config);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PageTemperatures: ConfigWizardPage
|
struct PageTemperatures: ConfigWizardPage
|
||||||
{
|
{
|
||||||
wxSpinCtrlDouble *spin_extr;
|
wxSpinCtrlDouble *spin_extr;
|
||||||
wxSpinCtrlDouble *spin_bed;
|
wxSpinCtrlDouble *spin_bed;
|
||||||
|
|
||||||
PageTemperatures(ConfigWizard *parent);
|
PageTemperatures(ConfigWizard *parent);
|
||||||
virtual void apply_custom_config(DynamicPrintConfig &config);
|
virtual void apply_custom_config(DynamicPrintConfig &config);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class ConfigWizardIndex: public wxPanel
|
class ConfigWizardIndex: public wxPanel
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ConfigWizardIndex(wxWindow *parent);
|
ConfigWizardIndex(wxWindow *parent);
|
||||||
|
|
||||||
void load_items(ConfigWizardPage *firstpage);
|
void add_page(ConfigWizardPage *page);
|
||||||
void set_active(ConfigWizardPage *page);
|
void add_label(wxString label, unsigned indent = 0);
|
||||||
|
|
||||||
|
size_t active_item() const { return item_active; }
|
||||||
|
ConfigWizardPage* active_page() const;
|
||||||
|
bool active_is_last() const { return item_active < items.size() && item_active == last_page; }
|
||||||
|
|
||||||
|
void go_prev();
|
||||||
|
void go_next();
|
||||||
|
void go_to(size_t i);
|
||||||
|
void go_to(ConfigWizardPage *page);
|
||||||
|
|
||||||
|
void clear();
|
||||||
|
|
||||||
|
// XXX
|
||||||
|
// void load_items(ConfigWizardPage *firstpage);
|
||||||
|
// void set_active(ConfigWizardPage *page);
|
||||||
private:
|
private:
|
||||||
const wxBitmap bg;
|
// enum {
|
||||||
const wxBitmap bullet_black;
|
// // Units in em
|
||||||
const wxBitmap bullet_blue;
|
// MARGIN = 1,
|
||||||
const wxBitmap bullet_white;
|
// SPACING = 1,
|
||||||
int text_height;
|
// };
|
||||||
|
|
||||||
std::vector<wxString> items;
|
struct Item
|
||||||
std::vector<wxString>::const_iterator item_active;
|
{
|
||||||
|
wxString label;
|
||||||
|
unsigned indent;
|
||||||
|
ConfigWizardPage *page; // nullptr page => label-only item
|
||||||
|
|
||||||
void on_paint(wxPaintEvent &evt);
|
// bool operator==(const wxString &label) const { return this->label == label; }
|
||||||
|
bool operator==(ConfigWizardPage *page) const { return this->page == page; }
|
||||||
|
};
|
||||||
|
|
||||||
|
int em;
|
||||||
|
int em_h;
|
||||||
|
|
||||||
|
const wxBitmap bg;
|
||||||
|
const wxBitmap bullet_black;
|
||||||
|
const wxBitmap bullet_blue;
|
||||||
|
const wxBitmap bullet_white;
|
||||||
|
|
||||||
|
std::vector<Item> items;
|
||||||
|
// std::vector<Item>::const_iterator item_active;
|
||||||
|
size_t item_active;
|
||||||
|
ssize_t item_hover;
|
||||||
|
size_t last_page;
|
||||||
|
|
||||||
|
int item_height() const { return std::max(bullet_black.GetSize().GetHeight(), em) + em; }
|
||||||
|
|
||||||
|
void on_paint(wxPaintEvent &evt);
|
||||||
|
void on_mouse_move(wxMouseEvent &evt);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
wxDEFINE_EVENT(EVT_INDEX_PAGE, wxCommandEvent);
|
||||||
|
|
||||||
struct ConfigWizard::priv
|
struct ConfigWizard::priv
|
||||||
{
|
{
|
||||||
ConfigWizard *q;
|
ConfigWizard *q;
|
||||||
ConfigWizard::RunReason run_reason;
|
ConfigWizard::RunReason run_reason;
|
||||||
AppConfig appconfig_vendors;
|
AppConfig appconfig_vendors;
|
||||||
std::unordered_map<std::string, VendorProfile> vendors;
|
std::unordered_map<std::string, VendorProfile> vendors;
|
||||||
std::unordered_map<std::string, std::string> vendors_rsrc;
|
std::unordered_map<std::string, std::string> vendors_rsrc;
|
||||||
std::unique_ptr<DynamicPrintConfig> custom_config;
|
std::unique_ptr<DynamicPrintConfig> custom_config;
|
||||||
|
|
||||||
wxScrolledWindow *hscroll = nullptr;
|
wxScrolledWindow *hscroll = nullptr;
|
||||||
wxBoxSizer *hscroll_sizer = nullptr;
|
wxBoxSizer *hscroll_sizer = nullptr;
|
||||||
wxBoxSizer *btnsizer = nullptr;
|
wxBoxSizer *btnsizer = nullptr;
|
||||||
ConfigWizardPage *page_current = nullptr;
|
ConfigWizardPage *page_current = nullptr;
|
||||||
ConfigWizardIndex *index = nullptr;
|
ConfigWizardIndex *index = nullptr;
|
||||||
wxButton *btn_prev = nullptr;
|
wxButton *btn_prev = nullptr;
|
||||||
wxButton *btn_next = nullptr;
|
wxButton *btn_next = nullptr;
|
||||||
wxButton *btn_finish = nullptr;
|
wxButton *btn_finish = nullptr;
|
||||||
wxButton *btn_cancel = nullptr;
|
wxButton *btn_cancel = nullptr;
|
||||||
|
|
||||||
PageWelcome *page_welcome = nullptr;
|
PageWelcome *page_welcome = nullptr;
|
||||||
PageUpdate *page_update = nullptr;
|
PagePrinters *page_fff = nullptr;
|
||||||
PageVendors *page_vendors = nullptr;
|
PagePrinters *page_msla = nullptr;
|
||||||
PageFirmware *page_firmware = nullptr;
|
PageCustom *page_custom = nullptr;
|
||||||
PageBedShape *page_bed = nullptr;
|
PageUpdate *page_update = nullptr;
|
||||||
PageDiameters *page_diams = nullptr;
|
PageVendors *page_vendors = nullptr; // XXX: ?
|
||||||
PageTemperatures *page_temps = nullptr;
|
|
||||||
|
|
||||||
priv(ConfigWizard *q) : q(q) {}
|
// Custom setup pages
|
||||||
|
PageFirmware *page_firmware = nullptr;
|
||||||
|
PageBedShape *page_bed = nullptr;
|
||||||
|
PageDiameters *page_diams = nullptr;
|
||||||
|
PageTemperatures *page_temps = nullptr;
|
||||||
|
|
||||||
void load_vendors();
|
priv(ConfigWizard *q) : q(q) {}
|
||||||
void add_page(ConfigWizardPage *page);
|
|
||||||
void index_refresh();
|
|
||||||
void set_page(ConfigWizardPage *page);
|
|
||||||
void layout_fit();
|
|
||||||
void go_prev() { if (page_current != nullptr) { set_page(page_current->page_prev()); } }
|
|
||||||
void go_next() { if (page_current != nullptr) { set_page(page_current->page_next()); } }
|
|
||||||
void enable_next(bool enable);
|
|
||||||
|
|
||||||
void on_other_vendors();
|
void load_pages(bool custom_setup);
|
||||||
void on_custom_setup();
|
|
||||||
|
|
||||||
void apply_config(AppConfig *app_config, PresetBundle *preset_bundle, const PresetUpdater *updater);
|
bool check_first_variant() const;
|
||||||
|
void load_vendors();
|
||||||
|
void add_page(ConfigWizardPage *page);
|
||||||
|
void enable_next(bool enable);
|
||||||
|
|
||||||
|
void on_custom_setup(bool custom_wanted);
|
||||||
|
|
||||||
|
void apply_config(AppConfig *app_config, PresetBundle *preset_bundle, const PresetUpdater *updater);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -355,21 +355,6 @@ boost::filesystem::path into_path(const wxString &str)
|
||||||
return boost::filesystem::path(str.wx_str());
|
return boost::filesystem::path(str.wx_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get_current_screen_size(wxWindow *window, unsigned &width, unsigned &height)
|
|
||||||
{
|
|
||||||
const auto idx = wxDisplay::GetFromWindow(window);
|
|
||||||
if (idx == wxNOT_FOUND) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
wxDisplay display(idx);
|
|
||||||
const auto disp_size = display.GetClientArea();
|
|
||||||
width = disp_size.GetWidth();
|
|
||||||
height = disp_size.GetHeight();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void about()
|
void about()
|
||||||
{
|
{
|
||||||
AboutDialog dlg;
|
AboutDialog dlg;
|
||||||
|
|
|
@ -71,9 +71,6 @@ wxString from_path(const boost::filesystem::path &path);
|
||||||
// boost path from wxString
|
// boost path from wxString
|
||||||
boost::filesystem::path into_path(const wxString &str);
|
boost::filesystem::path into_path(const wxString &str);
|
||||||
|
|
||||||
// Returns the dimensions of the screen on which the main frame is displayed
|
|
||||||
bool get_current_screen_size(wxWindow *window, unsigned &width, unsigned &height);
|
|
||||||
|
|
||||||
// Display an About dialog
|
// Display an About dialog
|
||||||
extern void about();
|
extern void about();
|
||||||
// Ask the destop to open the datadir using the default file explorer.
|
// Ask the destop to open the datadir using the default file explorer.
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
|
|
||||||
#include <wx/sizer.h>
|
#include <wx/sizer.h>
|
||||||
#include <wx/stattext.h>
|
#include <wx/stattext.h>
|
||||||
#include <wx/notebook.h>
|
|
||||||
#include <wx/button.h>
|
#include <wx/button.h>
|
||||||
#include <wx/bmpcbox.h>
|
#include <wx/bmpcbox.h>
|
||||||
#include <wx/statbox.h>
|
#include <wx/statbox.h>
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#endif /* _MSC_VER */
|
#endif /* _MSC_VER */
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
#include <boost/format.hpp>
|
#include <boost/format.hpp>
|
||||||
|
@ -128,11 +129,14 @@ VendorProfile VendorProfile::from_ini(const ptree &tree, const boost::filesystem
|
||||||
VendorProfile::PrinterModel model;
|
VendorProfile::PrinterModel model;
|
||||||
model.id = section.first.substr(printer_model_key.size());
|
model.id = section.first.substr(printer_model_key.size());
|
||||||
model.name = section.second.get<std::string>("name", model.id);
|
model.name = section.second.get<std::string>("name", model.id);
|
||||||
|
|
||||||
auto technology_field = section.second.get<std::string>("technology", "FFF");
|
auto technology_field = section.second.get<std::string>("technology", "FFF");
|
||||||
if (! ConfigOptionEnum<PrinterTechnology>::from_string(technology_field, model.technology)) {
|
if (! ConfigOptionEnum<PrinterTechnology>::from_string(technology_field, model.technology)) {
|
||||||
BOOST_LOG_TRIVIAL(error) << boost::format("Vendor bundle: `%1%`: Invalid printer technology field: `%2%`") % id % technology_field;
|
BOOST_LOG_TRIVIAL(error) << boost::format("Vendor bundle: `%1%`: Invalid printer technology field: `%2%`") % id % technology_field;
|
||||||
model.technology = ptFFF;
|
model.technology = ptFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
model.family = section.second.get<std::string>("family", model.id);
|
||||||
#if 0
|
#if 0
|
||||||
// Remove SLA printers from the initial alpha.
|
// Remove SLA printers from the initial alpha.
|
||||||
if (model.technology == ptSLA)
|
if (model.technology == ptSLA)
|
||||||
|
@ -157,6 +161,20 @@ VendorProfile VendorProfile::from_ini(const ptree &tree, const boost::filesystem
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> VendorProfile::families() const
|
||||||
|
{
|
||||||
|
std::vector<std::string> res;
|
||||||
|
unsigned num_familiies = 0;
|
||||||
|
|
||||||
|
for (auto &model : models) {
|
||||||
|
if (!model.family.empty() && std::find(res.begin(), res.end(), model.family) == res.end()) {
|
||||||
|
res.push_back(model.family);
|
||||||
|
num_familiies++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
// Suffix to be added to a modified preset name in the combo box.
|
// Suffix to be added to a modified preset name in the combo box.
|
||||||
static std::string g_suffix_modified = " (modified)";
|
static std::string g_suffix_modified = " (modified)";
|
||||||
|
|
|
@ -54,13 +54,16 @@ public:
|
||||||
std::string id;
|
std::string id;
|
||||||
std::string name;
|
std::string name;
|
||||||
PrinterTechnology technology;
|
PrinterTechnology technology;
|
||||||
|
std::string family;
|
||||||
std::vector<PrinterVariant> variants;
|
std::vector<PrinterVariant> variants;
|
||||||
|
|
||||||
PrinterVariant* variant(const std::string &name) {
|
PrinterVariant* variant(const std::string &name) {
|
||||||
for (auto &v : this->variants)
|
for (auto &v : this->variants)
|
||||||
if (v.name == name)
|
if (v.name == name)
|
||||||
return &v;
|
return &v;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const PrinterVariant* variant(const std::string &name) const { return const_cast<PrinterModel*>(this)->variant(name); }
|
const PrinterVariant* variant(const std::string &name) const { return const_cast<PrinterModel*>(this)->variant(name); }
|
||||||
};
|
};
|
||||||
std::vector<PrinterModel> models;
|
std::vector<PrinterModel> models;
|
||||||
|
@ -72,6 +75,7 @@ public:
|
||||||
static VendorProfile from_ini(const boost::property_tree::ptree &tree, const boost::filesystem::path &path, bool load_all=true);
|
static VendorProfile from_ini(const boost::property_tree::ptree &tree, const boost::filesystem::path &path, bool load_all=true);
|
||||||
|
|
||||||
size_t num_variants() const { size_t n = 0; for (auto &model : models) n += model.variants.size(); return n; }
|
size_t num_variants() const { size_t n = 0; for (auto &model : models) n += model.variants.size(); return n; }
|
||||||
|
std::vector<std::string> families() const;
|
||||||
|
|
||||||
bool operator< (const VendorProfile &rhs) const { return this->id < rhs.id; }
|
bool operator< (const VendorProfile &rhs) const { return this->id < rhs.id; }
|
||||||
bool operator==(const VendorProfile &rhs) const { return this->id == rhs.id; }
|
bool operator==(const VendorProfile &rhs) const { return this->id == rhs.id; }
|
||||||
|
|
Loading…
Reference in a new issue