4cdcfe6005
Added menu item "Window->Compare presets" to compare more than one type of presets. Code refactoring for PresetComboBox: Use suffix "modified" just for PlaterPresetComboBox and TabPresetComboBox Code refactoring. wxDataViewCtrl and related functions extracted from DiffPresetDialog and UnsavedChangesDialog to the separate class DiffViewCtrl Code refactoring, Tab.cpp: Build all unregular pages on a first build of the Printer Settings Squashed commit of the following: commit 91f45a8a2d97d252337c7306dd02db607fd79c00 Author: Vojtech Bubnik <bubnikv@gmail.com> Date: Thu Feb 4 09:34:29 2021 +0100 Fixed after merge commit 09aa502498b08c059ecdf334f5db1567739b4520 Merge: 6df8e83e10baa92fab
Author: Vojtech Bubnik <bubnikv@gmail.com> Date: Thu Feb 4 09:31:43 2021 +0100 Merge remote-tracking branch 'remotes/origin/master' into ys_diff_dlg commit 6df8e83e1af3ba096ac39d25985b6deb2e0a245b Author: Vojtech Bubnik <bubnikv@gmail.com> Date: Thu Feb 4 09:29:53 2021 +0100 Tiny beautification. commit e781ceaaf7c39bc073476409cc02918d9f182930 Author: Vojtech Bubnik <bubnikv@gmail.com> Date: Wed Feb 3 18:05:19 2021 +0100 Reworked copying of PresetBundles: 1) Simplified by using the default copy constructors and copy operators. 2) Made safer by not allowing PresetCollection and PhysicalPrinterPresetCollection to be copied or instantiated outside of PresetBundle. 3) Fixed Preset::vendor pointers after copying PresetBundle. commit a8f0b7aa5156465cdb3e3dbb86feb66a64bcebc0 Author: YuSanka <yusanka@gmail.com> Date: Mon Jan 25 16:13:53 2021 +0100 DiffPresetsDialog: Show compatibility to print/printer presets selected in DiffPresetDialog commit 597451f930a4330376966d8cf3350056d4f85a73 Merge: cce5b571059017a7da
Author: YuSanka <yusanka@gmail.com> Date: Thu Jan 21 12:14:48 2021 +0100 Merge remote-tracking branch 'origin/master' into ys_diff_dlg commit cce5b5710d1225c7eaa52d0abb4b3f66fbd3b6a1 Author: YuSanka <yusanka@gmail.com> Date: Thu Jan 21 12:11:40 2021 +0100 DiffPresetDialog: Fixed crash on ASAN build commit ad8d728d89d7a75c2ac136ea8cdbb730ab774cd9 Author: YuSanka <yusanka@gmail.com> Date: Wed Jan 20 16:38:28 2021 +0100 FullCompareDialog improvements commit 316bafbeec9bb63f731b653d296062d9e22dd02f Author: YuSanka <yusanka@gmail.com> Date: Wed Jan 20 09:25:46 2021 +0100 DiffPresetDialog improvements: * Update presets lists after save changes in edited preset or change printer_technology * Tab.cpp: Build all unregular pages on a first build of the Printer Settings commit 01171c8ef50389d0801b0ccc5746ab0c3b731b11 Author: YuSanka <yusanka@gmail.com> Date: Tue Jan 19 17:26:28 2021 +0100 DiffPresetDialog : improvements * This dialog is non-modal now * "Compare presets" menu item is moved from "View" to the "Window" menu group * Added info tooltips for the bitmap buttons between presets * Added "Show all presets" checkbox * Show full difference between printer presets with different count of extruders commit 3d38b62f3c9de8aab352ed3bcff297d5c0239b2e Merge: e50fe6de99a2310ae9
Author: YuSanka <yusanka@gmail.com> Date: Mon Jan 18 10:00:18 2021 +0100 Merge remote-tracking branch 'origin/master' into ys_diff_dlg commit e50fe6de984decadfef3d4b952f0eec8ab9e6670 Author: YuSanka <yusanka@gmail.com> Date: Sat Jan 16 02:27:24 2021 +0100 DiffPresetDialog improvements Added menu item "View->Compare presets" to compare more than one type of presets commit bf08b7c8c969ad0ca631b9eeac1bc231f474e72b Author: YuSanka <yusanka@gmail.com> Date: Sat Jan 16 00:28:39 2021 +0100 Code refactoring. wxDataViewCtrl and related functions extracted from DiffPresetDialog and UnsavedChangesDialog to the separate class DiffViewCtrl commit 7aeb63032b0bc2bd06e60990c060008660a5c44f Author: YuSanka <yusanka@gmail.com> Date: Fri Jan 15 21:35:43 2021 +0100 DiffPresetDialog: first implementation commit 2f23d5af9d6b5dd670dfb7d06eedbe0e6d2960c6 Author: YuSanka <yusanka@gmail.com> Date: Thu Jan 14 16:28:43 2021 +0100 Code refactoring for PresetComboBox. Use suffix "modified" just for PlaterPresetComboBox and TabPresetComboBox
206 lines
6.4 KiB
C++
206 lines
6.4 KiB
C++
#ifndef slic3r_PresetComboBoxes_hpp_
|
|
#define slic3r_PresetComboBoxes_hpp_
|
|
|
|
#include <wx/bmpcbox.h>
|
|
#include <wx/gdicmn.h>
|
|
|
|
#include "libslic3r/Preset.hpp"
|
|
#include "wxExtensions.hpp"
|
|
#include "GUI_Utils.hpp"
|
|
|
|
class wxString;
|
|
class wxTextCtrl;
|
|
class wxStaticText;
|
|
class ScalableButton;
|
|
class wxBoxSizer;
|
|
class wxComboBox;
|
|
class wxStaticBitmap;
|
|
class wxRadioBox;
|
|
|
|
namespace Slic3r {
|
|
|
|
namespace GUI {
|
|
|
|
class BitmapCache;
|
|
|
|
// ---------------------------------
|
|
// *** PresetComboBox ***
|
|
// ---------------------------------
|
|
|
|
// BitmapComboBox used to presets list on Sidebar and Tabs
|
|
class PresetComboBox : public wxBitmapComboBox
|
|
{
|
|
bool m_show_all { false };
|
|
public:
|
|
PresetComboBox(wxWindow* parent, Preset::Type preset_type, const wxSize& size = wxDefaultSize, PresetBundle* preset_bundle = nullptr);
|
|
~PresetComboBox();
|
|
|
|
enum LabelItemType {
|
|
LABEL_ITEM_PHYSICAL_PRINTER = 0xffffff01,
|
|
LABEL_ITEM_DISABLED,
|
|
LABEL_ITEM_MARKER,
|
|
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);
|
|
bool set_printer_technology(PrinterTechnology pt);
|
|
|
|
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(std::string select_preset);
|
|
// select preset which is selected in PreseBundle
|
|
void update_from_bundle();
|
|
|
|
void edit_physical_printer();
|
|
void add_physical_printer();
|
|
bool del_physical_printer(const wxString& note_string = wxEmptyString);
|
|
|
|
virtual wxString get_preset_name(const Preset& preset);
|
|
Preset::Type get_type() { return m_type; }
|
|
void show_all(bool show_all);
|
|
virtual void update();
|
|
virtual void msw_rescale();
|
|
|
|
protected:
|
|
typedef std::size_t Marker;
|
|
std::function<void(int)> on_selection_changed { nullptr };
|
|
|
|
Preset::Type m_type;
|
|
std::string m_main_bitmap_name;
|
|
|
|
PresetBundle* m_preset_bundle {nullptr};
|
|
PresetCollection* m_collection {nullptr};
|
|
|
|
// Caching bitmaps for the all bitmaps, used in preset comboboxes
|
|
static BitmapCache& bitmap_cache();
|
|
|
|
// 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;
|
|
bool m_suppress_change { true };
|
|
|
|
// 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;
|
|
|
|
PrinterTechnology printer_technology {ptAny};
|
|
|
|
void invalidate_selection();
|
|
void validate_selection(bool predicate = false);
|
|
void update_selection();
|
|
|
|
#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);
|
|
|
|
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);
|
|
|
|
#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.
|
|
**/
|
|
bool OnAddBitmap(const wxBitmap& bitmap) override;
|
|
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; }
|
|
|
|
bool switch_to_tab();
|
|
void show_add_menu();
|
|
void show_edit_menu();
|
|
|
|
wxString get_preset_name(const Preset& preset) override;
|
|
void update() override;
|
|
void msw_rescale() override;
|
|
|
|
private:
|
|
int m_extruder_idx = -1;
|
|
};
|
|
|
|
|
|
// ---------------------------------
|
|
// *** TabPresetComboBox ***
|
|
// ---------------------------------
|
|
|
|
class TabPresetComboBox : public PresetComboBox
|
|
{
|
|
bool show_incompatible {false};
|
|
bool m_enable_all {false};
|
|
|
|
public:
|
|
TabPresetComboBox(wxWindow *parent, Preset::Type preset_type);
|
|
~TabPresetComboBox() {}
|
|
void set_show_incompatible_presets(bool show_incompatible_presets) {
|
|
show_incompatible = show_incompatible_presets;
|
|
}
|
|
|
|
wxString get_preset_name(const Preset& preset) override;
|
|
void update() override;
|
|
void update_dirty();
|
|
void msw_rescale() override;
|
|
|
|
void set_enable_all(bool enable=true) { m_enable_all = enable; }
|
|
|
|
PresetCollection* presets() const { return m_collection; }
|
|
Preset::Type type() const { return m_type; }
|
|
};
|
|
|
|
} // namespace GUI
|
|
} // namespace Slic3r
|
|
|
|
#endif
|