2020-06-16 10:57:49 +00:00
|
|
|
#ifndef slic3r_PresetComboBoxes_hpp_
|
|
|
|
#define slic3r_PresetComboBoxes_hpp_
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
#include <wx/panel.h>
|
|
|
|
#include <wx/bmpcbox.h>
|
|
|
|
#include <wx/gdicmn.h>
|
|
|
|
|
2020-06-16 14:58:41 +00:00
|
|
|
#include "libslic3r/Preset.hpp"
|
2020-06-16 10:57:49 +00:00
|
|
|
#include "wxExtensions.hpp"
|
|
|
|
#include "GUI_Utils.hpp"
|
2020-07-20 14:27:39 +00:00
|
|
|
//#include "BitmapCache.hpp"
|
2020-06-16 10:57:49 +00:00
|
|
|
|
|
|
|
class wxString;
|
|
|
|
class wxTextCtrl;
|
2020-06-26 14:58:53 +00:00
|
|
|
class wxStaticText;
|
2020-06-24 06:50:01 +00:00
|
|
|
class ScalableButton;
|
2020-07-14 13:34:08 +00:00
|
|
|
class wxBoxSizer;
|
2020-06-16 10:57:49 +00:00
|
|
|
|
|
|
|
namespace Slic3r {
|
|
|
|
|
|
|
|
namespace GUI {
|
|
|
|
|
2020-07-20 14:27:39 +00:00
|
|
|
class BitmapCache;
|
2020-06-16 10:57:49 +00:00
|
|
|
// ---------------------------------
|
|
|
|
// *** PresetComboBox ***
|
|
|
|
// ---------------------------------
|
|
|
|
|
|
|
|
// BitmapComboBox used to presets list on Sidebar and Tabs
|
|
|
|
class PresetComboBox : public wxBitmapComboBox
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
PresetComboBox(wxWindow* parent, Preset::Type preset_type, const wxSize& size = wxDefaultSize);
|
|
|
|
~PresetComboBox();
|
|
|
|
|
|
|
|
enum LabelItemType {
|
2020-06-24 06:50:01 +00:00
|
|
|
LABEL_ITEM_PHYSICAL_PRINTER = 0xffffff01,
|
2020-06-26 07:58:39 +00:00
|
|
|
LABEL_ITEM_DISABLED,
|
2020-06-24 06:50:01 +00:00
|
|
|
LABEL_ITEM_MARKER,
|
2020-06-16 10:57:49 +00:00
|
|
|
LABEL_ITEM_PHYSICAL_PRINTERS,
|
|
|
|
LABEL_ITEM_WIZARD_PRINTERS,
|
|
|
|
LABEL_ITEM_WIZARD_FILAMENTS,
|
|
|
|
LABEL_ITEM_WIZARD_MATERIALS,
|
|
|
|
|
|
|
|
LABEL_ITEM_MAX,
|
|
|
|
};
|
|
|
|
|
|
|
|
void set_label_marker(int item, LabelItemType label_item_type = LABEL_ITEM_MARKER);
|
|
|
|
|
2020-07-17 12:32:38 +00:00
|
|
|
void set_selection_changed_function(std::function<void(int)> sel_changed) { on_selection_changed = sel_changed; }
|
|
|
|
|
|
|
|
bool is_selected_physical_printer();
|
|
|
|
|
|
|
|
// Return true, if physical printer was selected
|
|
|
|
// and next internal selection was accomplished
|
|
|
|
bool selection_is_changed_according_to_physical_printers();
|
|
|
|
|
|
|
|
void update(const std::string& select_preset);
|
|
|
|
|
|
|
|
virtual void update(){};
|
2020-06-16 10:57:49 +00:00
|
|
|
virtual void msw_rescale();
|
|
|
|
|
|
|
|
protected:
|
|
|
|
typedef std::size_t Marker;
|
2020-07-17 12:32:38 +00:00
|
|
|
std::function<void(int)> on_selection_changed { nullptr };
|
2020-06-16 10:57:49 +00:00
|
|
|
|
|
|
|
Preset::Type m_type;
|
|
|
|
std::string m_main_bitmap_name;
|
|
|
|
|
|
|
|
PresetBundle* m_preset_bundle {nullptr};
|
|
|
|
PresetCollection* m_collection {nullptr};
|
|
|
|
|
2020-07-17 12:32:38 +00:00
|
|
|
// Caching bitmaps for the all bitmaps, used in preset comboboxes
|
2020-07-20 14:27:39 +00:00
|
|
|
static BitmapCache& bitmap_cache();
|
2020-07-17 12:32:38 +00:00
|
|
|
|
2020-06-16 10:57:49 +00:00
|
|
|
// Indicator, that the preset is compatible with the selected printer.
|
|
|
|
ScalableBitmap m_bitmapCompatible;
|
|
|
|
// Indicator, that the preset is NOT compatible with the selected printer.
|
|
|
|
ScalableBitmap m_bitmapIncompatible;
|
|
|
|
|
|
|
|
int m_last_selected;
|
|
|
|
int m_em_unit;
|
|
|
|
|
|
|
|
// parameters for an icon's drawing
|
|
|
|
int icon_height;
|
|
|
|
int norm_icon_width;
|
|
|
|
int thin_icon_width;
|
|
|
|
int wide_icon_width;
|
|
|
|
int space_icon_width;
|
|
|
|
int thin_space_icon_width;
|
|
|
|
int wide_space_icon_width;
|
|
|
|
|
2020-07-22 11:23:44 +00:00
|
|
|
void invalidate_selection();
|
|
|
|
void validate_selection(bool predicate = false);
|
|
|
|
void update_selection();
|
|
|
|
|
2020-06-16 10:57:49 +00:00
|
|
|
#ifdef __linux__
|
|
|
|
static const char* separator_head() { return "------- "; }
|
|
|
|
static const char* separator_tail() { return " -------"; }
|
|
|
|
#else // __linux__
|
|
|
|
static const char* separator_head() { return "————— "; }
|
|
|
|
static const char* separator_tail() { return " —————"; }
|
|
|
|
#endif // __linux__
|
|
|
|
static wxString separator(const std::string& label);
|
|
|
|
|
2020-07-17 12:32:38 +00:00
|
|
|
wxBitmap* get_bmp( std::string bitmap_key, bool wide_icons, const std::string& main_icon_name,
|
|
|
|
bool is_compatible = true, bool is_system = false, bool is_single_bar = false,
|
|
|
|
std::string filament_rgb = "", std::string extruder_rgb = "");
|
|
|
|
|
|
|
|
wxBitmap* get_bmp( std::string bitmap_key, const std::string& main_icon_name, const std::string& next_icon_name,
|
|
|
|
bool is_enabled = true, bool is_compatible = true, bool is_system = false);
|
|
|
|
|
2020-06-16 10:57:49 +00:00
|
|
|
#ifdef __APPLE__
|
|
|
|
/* For PresetComboBox we use bitmaps that are created from images that are already scaled appropriately for Retina
|
|
|
|
* (Contrary to the intuition, the `scale` argument for Bitmap's constructor doesn't mean
|
|
|
|
* "please scale this to such and such" but rather
|
|
|
|
* "the wxImage is already sized for backing scale such and such". )
|
|
|
|
* Unfortunately, the constructor changes the size of wxBitmap too.
|
|
|
|
* Thus We need to use unscaled size value for bitmaps that we use
|
|
|
|
* to avoid scaled size of control items.
|
|
|
|
* For this purpose control drawing methods and
|
|
|
|
* control size calculation methods (virtual) are overridden.
|
|
|
|
**/
|
|
|
|
virtual bool OnAddBitmap(const wxBitmap& bitmap) override;
|
|
|
|
virtual void OnDrawItem(wxDC& dc, const wxRect& rect, int item, int flags) const override;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
private:
|
|
|
|
void fill_width_height();
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// ---------------------------------
|
|
|
|
// *** PlaterPresetComboBox ***
|
|
|
|
// ---------------------------------
|
|
|
|
|
|
|
|
class PlaterPresetComboBox : public PresetComboBox
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
PlaterPresetComboBox(wxWindow *parent, Preset::Type preset_type);
|
|
|
|
~PlaterPresetComboBox();
|
|
|
|
|
|
|
|
ScalableButton* edit_btn { nullptr };
|
|
|
|
|
|
|
|
void set_extruder_idx(const int extr_idx) { m_extruder_idx = extr_idx; }
|
|
|
|
int get_extruder_idx() const { return m_extruder_idx; }
|
|
|
|
|
2020-06-24 10:28:00 +00:00
|
|
|
bool switch_to_tab();
|
2020-06-26 07:58:39 +00:00
|
|
|
void show_add_menu();
|
2020-06-24 10:28:00 +00:00
|
|
|
void show_edit_menu();
|
2020-06-24 06:50:01 +00:00
|
|
|
|
2020-06-16 10:57:49 +00:00
|
|
|
void update() override;
|
|
|
|
void msw_rescale() override;
|
|
|
|
|
|
|
|
private:
|
2020-06-24 06:50:01 +00:00
|
|
|
int m_extruder_idx = -1;
|
2020-06-16 10:57:49 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// ---------------------------------
|
2020-06-18 09:39:25 +00:00
|
|
|
// *** TabPresetComboBox ***
|
2020-06-16 10:57:49 +00:00
|
|
|
// ---------------------------------
|
|
|
|
|
|
|
|
class TabPresetComboBox : public PresetComboBox
|
|
|
|
{
|
2020-06-24 06:50:01 +00:00
|
|
|
bool show_incompatible {false};
|
2020-06-26 07:58:39 +00:00
|
|
|
bool m_enable_all {false};
|
2020-07-17 12:32:38 +00:00
|
|
|
|
2020-07-20 12:56:09 +00:00
|
|
|
bool m_allow_to_update_physical_printers {false};
|
2020-06-24 06:50:01 +00:00
|
|
|
|
2020-06-16 10:57:49 +00:00
|
|
|
public:
|
2020-06-24 06:50:01 +00:00
|
|
|
TabPresetComboBox(wxWindow *parent, Preset::Type preset_type);
|
2020-06-16 10:57:49 +00:00
|
|
|
~TabPresetComboBox() {}
|
|
|
|
void set_show_incompatible_presets(bool show_incompatible_presets) {
|
|
|
|
show_incompatible = show_incompatible_presets;
|
|
|
|
}
|
2020-07-20 12:56:09 +00:00
|
|
|
void allow_to_update_physical_printers() {
|
|
|
|
m_allow_to_update_physical_printers = m_type == Preset::TYPE_PRINTER;
|
2020-07-17 12:32:38 +00:00
|
|
|
}
|
2020-06-16 10:57:49 +00:00
|
|
|
|
|
|
|
void update() override;
|
|
|
|
void update_dirty();
|
2020-07-17 12:32:38 +00:00
|
|
|
void update_physical_printers(const std::string& preset_name);
|
2020-06-16 10:57:49 +00:00
|
|
|
void msw_rescale() override;
|
|
|
|
|
2020-06-26 07:58:39 +00:00
|
|
|
void set_enable_all(bool enable=true) { m_enable_all = enable; }
|
2020-06-16 10:57:49 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2020-06-30 12:12:47 +00:00
|
|
|
//------------------------------------------
|
|
|
|
// PresetForPrinter
|
|
|
|
//------------------------------------------
|
2020-07-14 13:34:08 +00:00
|
|
|
static std::string g_info_string = " (modified)";
|
2020-06-30 12:12:47 +00:00
|
|
|
class PhysicalPrinterDialog;
|
|
|
|
class PresetForPrinter
|
|
|
|
{
|
|
|
|
PhysicalPrinterDialog* m_parent { nullptr };
|
|
|
|
|
2020-07-17 12:32:38 +00:00
|
|
|
PresetComboBox* m_presets_list { nullptr };
|
2020-06-30 12:12:47 +00:00
|
|
|
ScalableButton* m_delete_preset_btn { nullptr };
|
2020-07-14 13:34:08 +00:00
|
|
|
wxStaticText* m_info_line { nullptr };
|
2020-06-30 12:12:47 +00:00
|
|
|
wxStaticText* m_full_printer_name { nullptr };
|
|
|
|
|
|
|
|
wxBoxSizer* m_sizer { nullptr };
|
|
|
|
|
|
|
|
void DeletePreset(wxEvent& event);
|
|
|
|
|
|
|
|
public:
|
2020-07-17 12:32:38 +00:00
|
|
|
PresetForPrinter(PhysicalPrinterDialog* parent, const std::string& preset_name = "");
|
2020-06-30 12:12:47 +00:00
|
|
|
~PresetForPrinter();
|
|
|
|
|
|
|
|
wxBoxSizer* sizer() { return m_sizer; }
|
|
|
|
void update_full_printer_name();
|
2020-07-14 13:34:08 +00:00
|
|
|
std::string get_preset_name();
|
|
|
|
void DisableDeleteBtn();
|
|
|
|
void EnableDeleteBtn();
|
2020-06-30 12:12:47 +00:00
|
|
|
|
|
|
|
void msw_rescale();
|
|
|
|
void on_sys_color_changed() {};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2020-06-16 10:57:49 +00:00
|
|
|
//------------------------------------------
|
|
|
|
// PhysicalPrinterDialog
|
|
|
|
//------------------------------------------
|
2020-06-30 12:12:47 +00:00
|
|
|
|
2020-06-24 06:50:01 +00:00
|
|
|
class ConfigOptionsGroup;
|
2020-06-16 10:57:49 +00:00
|
|
|
class PhysicalPrinterDialog : public DPIDialog
|
|
|
|
{
|
2020-06-24 06:50:01 +00:00
|
|
|
PhysicalPrinter m_printer;
|
2020-07-17 12:32:38 +00:00
|
|
|
wxString m_default_name;
|
2020-06-24 06:50:01 +00:00
|
|
|
DynamicPrintConfig* m_config { nullptr };
|
|
|
|
|
|
|
|
wxTextCtrl* m_printer_name { nullptr };
|
2020-06-30 12:12:47 +00:00
|
|
|
std::vector<PresetForPrinter*> m_presets;
|
|
|
|
|
2020-06-24 06:50:01 +00:00
|
|
|
ConfigOptionsGroup* m_optgroup { nullptr };
|
|
|
|
|
2020-06-30 12:12:47 +00:00
|
|
|
ScalableButton* m_add_preset_btn {nullptr};
|
|
|
|
ScalableButton* m_printhost_browse_btn {nullptr};
|
|
|
|
ScalableButton* m_printhost_test_btn {nullptr};
|
|
|
|
ScalableButton* m_printhost_cafile_browse_btn {nullptr};
|
2020-06-16 10:57:49 +00:00
|
|
|
|
2020-07-14 13:34:08 +00:00
|
|
|
wxBoxSizer* m_presets_sizer {nullptr};
|
|
|
|
|
2020-06-24 06:50:01 +00:00
|
|
|
void build_printhost_settings(ConfigOptionsGroup* optgroup);
|
|
|
|
void OnOK(wxEvent& event);
|
2020-06-30 12:12:47 +00:00
|
|
|
void AddPreset(wxEvent& event);
|
2020-06-16 10:57:49 +00:00
|
|
|
|
|
|
|
public:
|
2020-06-24 06:50:01 +00:00
|
|
|
PhysicalPrinterDialog(wxString printer_name);
|
2020-06-30 12:12:47 +00:00
|
|
|
~PhysicalPrinterDialog();
|
|
|
|
|
|
|
|
void update();
|
|
|
|
wxString get_printer_name();
|
|
|
|
void update_full_printer_names();
|
|
|
|
PhysicalPrinter* get_printer() {return &m_printer; }
|
2020-06-16 10:57:49 +00:00
|
|
|
|
2020-07-14 13:34:08 +00:00
|
|
|
void DeletePreset(PresetForPrinter* preset_for_printer);
|
|
|
|
|
2020-06-16 10:57:49 +00:00
|
|
|
protected:
|
|
|
|
void on_dpi_changed(const wxRect& suggested_rect) override;
|
|
|
|
void on_sys_color_changed() override {};
|
|
|
|
};
|
|
|
|
|
2020-07-20 12:56:09 +00:00
|
|
|
|
|
|
|
//------------------------------------------------
|
|
|
|
// ChangePresetForPhysicalPrinterDialog
|
|
|
|
//------------------------------------------------
|
|
|
|
|
|
|
|
class ChangePresetForPhysicalPrinterDialog : public DPIDialog
|
|
|
|
{
|
|
|
|
void OnOK(wxEvent& event);
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
enum SelectionType
|
|
|
|
{
|
|
|
|
Switch,
|
|
|
|
ChangePreset,
|
|
|
|
AddPreset
|
|
|
|
} m_selection {Switch};
|
|
|
|
|
|
|
|
ChangePresetForPhysicalPrinterDialog(const std::string& preset_name);
|
|
|
|
~ChangePresetForPhysicalPrinterDialog() {}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void on_dpi_changed(const wxRect& suggested_rect) override;
|
|
|
|
void on_sys_color_changed() override {};
|
|
|
|
};
|
|
|
|
|
2020-06-16 10:57:49 +00:00
|
|
|
} // namespace GUI
|
|
|
|
} // namespace Slic3r
|
|
|
|
|
|
|
|
#endif
|