Prototype of the hiding according to view mode
+ Added mode icon near option's label + Fixed segmentation fault on Linux
This commit is contained in:
parent
5d94e6adb8
commit
f47949504e
BIN
resources/icons/mode_expert.png
Normal file
BIN
resources/icons/mode_expert.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
BIN
resources/icons/mode_middle.png
Normal file
BIN
resources/icons/mode_middle.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
BIN
resources/icons/mode_simple.png
Normal file
BIN
resources/icons/mode_simple.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
@ -61,6 +61,12 @@ enum ConfigOptionType {
|
|||||||
coEnum = 8,
|
coEnum = 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum ConfigOptionMode {
|
||||||
|
comSimple,
|
||||||
|
comMiddle,
|
||||||
|
comExpert
|
||||||
|
};
|
||||||
|
|
||||||
// A generic value of a configuration option.
|
// A generic value of a configuration option.
|
||||||
class ConfigOption {
|
class ConfigOption {
|
||||||
public:
|
public:
|
||||||
@ -982,6 +988,7 @@ public:
|
|||||||
// By setting min=0, only nonnegative input is allowed.
|
// By setting min=0, only nonnegative input is allowed.
|
||||||
int min = INT_MIN;
|
int min = INT_MIN;
|
||||||
int max = INT_MAX;
|
int max = INT_MAX;
|
||||||
|
ConfigOptionMode mode = comSimple;
|
||||||
// Legacy names for this configuration option.
|
// Legacy names for this configuration option.
|
||||||
// Used when parsing legacy configuration file.
|
// Used when parsing legacy configuration file.
|
||||||
std::vector<t_config_option_key> aliases;
|
std::vector<t_config_option_key> aliases;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -482,7 +482,8 @@ ConfigMenuIDs GUI_App::get_view_mode()
|
|||||||
return ConfigMenuModeSimple;
|
return ConfigMenuModeSimple;
|
||||||
|
|
||||||
const auto mode = app_config->get("view_mode");
|
const auto mode = app_config->get("view_mode");
|
||||||
return mode == "expert" ? ConfigMenuModeExpert : ConfigMenuModeSimple;
|
return mode == "expert" ? ConfigMenuModeExpert :
|
||||||
|
mode == "simple" ? ConfigMenuModeSimple : ConfigMenuModeMiddle;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update view mode according to selected menu
|
// Update view mode according to selected menu
|
||||||
@ -500,6 +501,11 @@ void GUI_App::update_mode()
|
|||||||
|
|
||||||
sidebar().Layout();
|
sidebar().Layout();
|
||||||
mainframe->m_plater->Layout();
|
mainframe->m_plater->Layout();
|
||||||
|
|
||||||
|
ConfigOptionMode opt_mode = mode == ConfigMenuModeSimple ? comSimple :
|
||||||
|
mode == ConfigMenuModeExpert ? comExpert : comMiddle;
|
||||||
|
for (auto tab : tabs_list)
|
||||||
|
tab->update_visibility(opt_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GUI_App::add_config_menu(wxMenuBar *menu)
|
void GUI_App::add_config_menu(wxMenuBar *menu)
|
||||||
@ -519,6 +525,7 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
|
|||||||
local_menu->AppendSeparator();
|
local_menu->AppendSeparator();
|
||||||
auto mode_menu = new wxMenu();
|
auto mode_menu = new wxMenu();
|
||||||
mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeSimple, _(L("&Simple")), _(L("Simple View Mode")));
|
mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeSimple, _(L("&Simple")), _(L("Simple View Mode")));
|
||||||
|
mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeMiddle, _(L("&Middle")), _(L("Middle View Mode")));
|
||||||
mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeExpert, _(L("&Expert")), _(L("Expert View Mode")));
|
mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeExpert, _(L("&Expert")), _(L("Expert View Mode")));
|
||||||
mode_menu->Check(config_id_base + get_view_mode(), true);
|
mode_menu->Check(config_id_base + get_view_mode(), true);
|
||||||
local_menu->AppendSubMenu(mode_menu, _(L("&Mode")), _(L("Slic3r View Mode")));
|
local_menu->AppendSubMenu(mode_menu, _(L("&Mode")), _(L("Slic3r View Mode")));
|
||||||
@ -589,8 +596,9 @@ void GUI_App::add_config_menu(wxMenuBar *menu)
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
mode_menu->Bind(wxEVT_MENU, [this, config_id_base](wxEvent& event) {
|
mode_menu->Bind(wxEVT_MENU, [this, config_id_base](wxEvent& event) {
|
||||||
std::string mode = event.GetId() - config_id_base == ConfigMenuModeExpert ?
|
int id_mode = event.GetId() - config_id_base;
|
||||||
"expert" : "simple";
|
std::string mode = id_mode == ConfigMenuModeExpert ? "expert" :
|
||||||
|
id_mode == ConfigMenuModeSimple ? "simple" : "middle";
|
||||||
app_config->set("view_mode", mode);
|
app_config->set("view_mode", mode);
|
||||||
app_config->save();
|
app_config->save();
|
||||||
update_mode();
|
update_mode();
|
||||||
|
@ -51,6 +51,7 @@ enum ConfigMenuIDs {
|
|||||||
ConfigMenuUpdate,
|
ConfigMenuUpdate,
|
||||||
ConfigMenuPreferences,
|
ConfigMenuPreferences,
|
||||||
ConfigMenuModeSimple,
|
ConfigMenuModeSimple,
|
||||||
|
ConfigMenuModeMiddle,
|
||||||
ConfigMenuModeExpert,
|
ConfigMenuModeExpert,
|
||||||
ConfigMenuLanguage,
|
ConfigMenuLanguage,
|
||||||
ConfigMenuFlashFirmware,
|
ConfigMenuFlashFirmware,
|
||||||
|
@ -221,7 +221,7 @@ void ObjectManipulation::update_settings_list()
|
|||||||
if (cat.second.size() == 1 && cat.second[0] == "extruder")
|
if (cat.second.size() == 1 && cat.second[0] == "extruder")
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
auto optgroup = std::make_shared<ConfigOptionsGroup>(parent, cat.first, config, false, ogDEFAULT, extra_column);
|
auto optgroup = std::make_shared<ConfigOptionsGroup>(parent, cat.first, config, false, extra_column);
|
||||||
optgroup->label_width = 150;
|
optgroup->label_width = 150;
|
||||||
optgroup->sidetext_width = 70;
|
optgroup->sidetext_width = 70;
|
||||||
|
|
||||||
|
@ -156,16 +156,8 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** colored_Label/*
|
|||||||
#endif /* __WXGTK__ */
|
#endif /* __WXGTK__ */
|
||||||
|
|
||||||
// if we have an extra column, build it
|
// if we have an extra column, build it
|
||||||
if (extra_column) {
|
if (extra_column)
|
||||||
if (extra_column) {
|
|
||||||
grid_sizer->Add(extra_column(parent(), line), 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 3);
|
grid_sizer->Add(extra_column(parent(), line), 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 3);
|
||||||
}
|
|
||||||
else {
|
|
||||||
// if the callback provides no sizer for the extra cell, put a spacer
|
|
||||||
grid_sizer->AddSpacer(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Build a label if we have it
|
// Build a label if we have it
|
||||||
wxStaticText* label=nullptr;
|
wxStaticText* label=nullptr;
|
||||||
@ -182,16 +174,14 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** colored_Label/*
|
|||||||
label->SetFont(label_font);
|
label->SetFont(label_font);
|
||||||
label->Wrap(label_width); // avoid a Linux/GTK bug
|
label->Wrap(label_width); // avoid a Linux/GTK bug
|
||||||
if (!line.near_label_widget)
|
if (!line.near_label_widget)
|
||||||
grid_sizer->Add(label, 0, (staticbox ? 0 : wxALIGN_RIGHT | wxRIGHT) |
|
grid_sizer->Add(label, 0, (staticbox ? 0 : wxALIGN_RIGHT | wxRIGHT) | wxALIGN_CENTER_VERTICAL, 5);
|
||||||
(m_flag == ogSIDE_OPTIONS_VERTICAL ? wxTOP : wxALIGN_CENTER_VERTICAL), 5);
|
|
||||||
else {
|
else {
|
||||||
// If we're here, we have some widget near the label
|
// If we're here, we have some widget near the label
|
||||||
// so we need a horizontal sizer to arrange these things
|
// so we need a horizontal sizer to arrange these things
|
||||||
auto sizer = new wxBoxSizer(wxHORIZONTAL);
|
auto sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
grid_sizer->Add(sizer, 0, wxEXPAND | (staticbox ? wxALL : wxBOTTOM | wxTOP | wxLEFT), staticbox ? 0 : 1);
|
grid_sizer->Add(sizer, 0, wxEXPAND | (staticbox ? wxALL : wxBOTTOM | wxTOP | wxLEFT), staticbox ? 0 : 1);
|
||||||
sizer->Add(line.near_label_widget(parent()), 0, wxRIGHT, 7);
|
sizer->Add(line.near_label_widget(parent()), 0, wxRIGHT, 7);
|
||||||
sizer->Add(label, 0, (staticbox ? 0 : wxALIGN_RIGHT | wxRIGHT) |
|
sizer->Add(label, 0, (staticbox ? 0 : wxALIGN_RIGHT | wxRIGHT) | wxALIGN_CENTER_VERTICAL, 5);
|
||||||
(m_flag == ogSIDE_OPTIONS_VERTICAL ? wxTOP : wxALIGN_CENTER_VERTICAL), 5);
|
|
||||||
}
|
}
|
||||||
if (line.label_tooltip.compare("") != 0)
|
if (line.label_tooltip.compare("") != 0)
|
||||||
label->SetToolTip(line.label_tooltip);
|
label->SetToolTip(line.label_tooltip);
|
||||||
@ -208,7 +198,7 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** colored_Label/*
|
|||||||
|
|
||||||
// If we're here, we have more than one option or a single option with sidetext
|
// If we're here, we have more than one option or a single option with sidetext
|
||||||
// so we need a horizontal sizer to arrange these things
|
// so we need a horizontal sizer to arrange these things
|
||||||
auto sizer = new wxBoxSizer(m_flag == ogSIDE_OPTIONS_VERTICAL ? wxVERTICAL : wxHORIZONTAL);
|
auto sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
grid_sizer->Add(sizer, 0, wxEXPAND | (staticbox ? wxALL : wxBOTTOM | wxTOP | wxLEFT), staticbox ? 0 : 1);
|
grid_sizer->Add(sizer, 0, wxEXPAND | (staticbox ? wxALL : wxBOTTOM | wxTOP | wxLEFT), staticbox ? 0 : 1);
|
||||||
// If we have a single option with no sidetext just add it directly to the grid sizer
|
// If we have a single option with no sidetext just add it directly to the grid sizer
|
||||||
if (option_set.size() == 1 && option_set.front().opt.sidetext.size() == 0 &&
|
if (option_set.size() == 1 && option_set.front().opt.sidetext.size() == 0 &&
|
||||||
@ -227,14 +217,7 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** colored_Label/*
|
|||||||
|
|
||||||
for (auto opt : option_set) {
|
for (auto opt : option_set) {
|
||||||
ConfigOptionDef option = opt.opt;
|
ConfigOptionDef option = opt.opt;
|
||||||
wxSizer* sizer_tmp;
|
wxSizer* sizer_tmp = sizer;
|
||||||
if (m_flag == ogSIDE_OPTIONS_VERTICAL){
|
|
||||||
auto sz = new wxFlexGridSizer(1, 3, 2, 2);
|
|
||||||
sz->RemoveGrowableCol(2);
|
|
||||||
sizer_tmp = sz;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
sizer_tmp = sizer;
|
|
||||||
// add label if any
|
// add label if any
|
||||||
if (option.label != "") {
|
if (option.label != "") {
|
||||||
wxString str_label = _(option.label);
|
wxString str_label = _(option.label);
|
||||||
@ -260,7 +243,7 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** colored_Label/*
|
|||||||
auto sidetext = new wxStaticText( parent(), wxID_ANY, _(option.sidetext), wxDefaultPosition,
|
auto sidetext = new wxStaticText( parent(), wxID_ANY, _(option.sidetext), wxDefaultPosition,
|
||||||
wxSize(sidetext_width, -1)/*wxDefaultSize*/, wxALIGN_LEFT);
|
wxSize(sidetext_width, -1)/*wxDefaultSize*/, wxALIGN_LEFT);
|
||||||
sidetext->SetFont(sidetext_font);
|
sidetext->SetFont(sidetext_font);
|
||||||
sizer_tmp->Add(sidetext, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, m_flag == ogSIDE_OPTIONS_VERTICAL ? 0 : 4);
|
sizer_tmp->Add(sidetext, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 4);
|
||||||
field->set_side_text_ptr(sidetext);
|
field->set_side_text_ptr(sidetext);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,13 +252,10 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** colored_Label/*
|
|||||||
sizer_tmp->Add(opt.side_widget(parent())/*!.target<wxWindow>()*/, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 1); //! requires verification
|
sizer_tmp->Add(opt.side_widget(parent())/*!.target<wxWindow>()*/, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 1); //! requires verification
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt.opt_id != option_set.back().opt_id && m_flag != ogSIDE_OPTIONS_VERTICAL) //! istead of (opt != option_set.back())
|
if (opt.opt_id != option_set.back().opt_id) //! istead of (opt != option_set.back())
|
||||||
{
|
{
|
||||||
sizer_tmp->AddSpacer(6);
|
sizer_tmp->AddSpacer(6);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_flag == ogSIDE_OPTIONS_VERTICAL)
|
|
||||||
sizer->Add(sizer_tmp, 0, wxALIGN_RIGHT|wxALL, 0);
|
|
||||||
}
|
}
|
||||||
// add extra sizers if any
|
// add extra sizers if any
|
||||||
for (auto extra_widget : line.get_extra_widgets()) {
|
for (auto extra_widget : line.get_extra_widgets()) {
|
||||||
@ -403,6 +383,27 @@ void ConfigOptionsGroup::reload_config(){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConfigOptionsGroup::update_visibility(ConfigOptionMode mode) {
|
||||||
|
int rows = m_grid_sizer->GetEffectiveRowsCount();
|
||||||
|
if (rows != m_options.size())
|
||||||
|
return;
|
||||||
|
sizer->ShowItems(true);
|
||||||
|
|
||||||
|
int coef = 0;
|
||||||
|
const int cols = m_grid_sizer->GetCols();
|
||||||
|
for (std::map<t_config_option_key, Option>::iterator it = m_options.begin(); it != m_options.end(); ++it) {
|
||||||
|
const bool show = it->second.opt.mode <= mode;
|
||||||
|
if (!show) {
|
||||||
|
for (int i = 0; i < cols; ++i)
|
||||||
|
m_grid_sizer->Show(coef + i, show);
|
||||||
|
}
|
||||||
|
coef+= cols;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sizer->IsShown(m_grid_sizer))
|
||||||
|
sizer->ShowItems(false);
|
||||||
|
}
|
||||||
|
|
||||||
boost::any ConfigOptionsGroup::config_value(const std::string& opt_key, int opt_index, bool deserialize){
|
boost::any ConfigOptionsGroup::config_value(const std::string& opt_key, int opt_index, bool deserialize){
|
||||||
|
|
||||||
if (deserialize) {
|
if (deserialize) {
|
||||||
|
@ -27,11 +27,6 @@
|
|||||||
|
|
||||||
namespace Slic3r { namespace GUI {
|
namespace Slic3r { namespace GUI {
|
||||||
|
|
||||||
enum ogDrawFlag{
|
|
||||||
ogDEFAULT,
|
|
||||||
ogSIDE_OPTIONS_VERTICAL
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Widget type describes a function object that returns a wxWindow (our widget) and accepts a wxWidget (parent window).
|
/// Widget type describes a function object that returns a wxWindow (our widget) and accepts a wxWidget (parent window).
|
||||||
using widget_t = std::function<wxSizer*(wxWindow*)>;//!std::function<wxWindow*(wxWindow*)>;
|
using widget_t = std::function<wxSizer*(wxWindow*)>;//!std::function<wxWindow*(wxWindow*)>;
|
||||||
|
|
||||||
@ -151,7 +146,6 @@ public:
|
|||||||
|
|
||||||
inline void enable() { for (auto& field : m_fields) field.second->enable(); }
|
inline void enable() { for (auto& field : m_fields) field.second->enable(); }
|
||||||
inline void disable() { for (auto& field : m_fields) field.second->disable(); }
|
inline void disable() { for (auto& field : m_fields) field.second->disable(); }
|
||||||
void set_flag(ogDrawFlag flag) { m_flag = flag; }
|
|
||||||
void set_grid_vgap(int gap) { m_grid_sizer->SetVGap(gap); }
|
void set_grid_vgap(int gap) { m_grid_sizer->SetVGap(gap); }
|
||||||
|
|
||||||
void set_show_modified_btns_val(bool show) {
|
void set_show_modified_btns_val(bool show) {
|
||||||
@ -159,9 +153,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
OptionsGroup( wxWindow* _parent, const wxString& title, bool is_tab_opt = false,
|
OptionsGroup( wxWindow* _parent, const wxString& title, bool is_tab_opt = false,
|
||||||
ogDrawFlag flag = ogDEFAULT, column_t extra_clmn = nullptr) :
|
column_t extra_clmn = nullptr) :
|
||||||
m_parent(_parent), title(title), m_show_modified_btns(is_tab_opt),
|
m_parent(_parent), title(title),
|
||||||
staticbox(title!=""), m_flag(flag), extra_column(extra_clmn){
|
m_show_modified_btns(is_tab_opt),
|
||||||
|
staticbox(title!=""), extra_column(extra_clmn){
|
||||||
if (staticbox) {
|
if (staticbox) {
|
||||||
stb = new wxStaticBox(_parent, wxID_ANY, title);
|
stb = new wxStaticBox(_parent, wxID_ANY, title);
|
||||||
stb->SetFont(wxGetApp().bold_font());
|
stb->SetFont(wxGetApp().bold_font());
|
||||||
@ -172,7 +167,7 @@ public:
|
|||||||
if (extra_column != nullptr) num_columns++;
|
if (extra_column != nullptr) num_columns++;
|
||||||
m_grid_sizer = new wxFlexGridSizer(0, num_columns, 1,0);
|
m_grid_sizer = new wxFlexGridSizer(0, num_columns, 1,0);
|
||||||
static_cast<wxFlexGridSizer*>(m_grid_sizer)->SetFlexibleDirection(wxBOTH/*wxHORIZONTAL*/);
|
static_cast<wxFlexGridSizer*>(m_grid_sizer)->SetFlexibleDirection(wxBOTH/*wxHORIZONTAL*/);
|
||||||
static_cast<wxFlexGridSizer*>(m_grid_sizer)->AddGrowableCol(label_width != 0);
|
static_cast<wxFlexGridSizer*>(m_grid_sizer)->AddGrowableCol(label_width == 0 ? 0 : !extra_column ? 1 : 2 );
|
||||||
#ifdef __WXGTK__
|
#ifdef __WXGTK__
|
||||||
m_panel = new wxPanel( _parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
m_panel = new wxPanel( _parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||||
sizer->Fit(m_panel);
|
sizer->Fit(m_panel);
|
||||||
@ -197,8 +192,6 @@ protected:
|
|||||||
// "true" if option is created in preset tabs
|
// "true" if option is created in preset tabs
|
||||||
bool m_show_modified_btns{ false };
|
bool m_show_modified_btns{ false };
|
||||||
|
|
||||||
ogDrawFlag m_flag{ ogDEFAULT };
|
|
||||||
|
|
||||||
// This panel is needed for correct showing of the ToolTips for Button, StaticText and CheckBox
|
// This panel is needed for correct showing of the ToolTips for Button, StaticText and CheckBox
|
||||||
// Tooltips on GTK doesn't work inside wxStaticBoxSizer unless you insert a panel
|
// Tooltips on GTK doesn't work inside wxStaticBoxSizer unless you insert a panel
|
||||||
// inside it before you insert the other controls.
|
// inside it before you insert the other controls.
|
||||||
@ -223,8 +216,8 @@ protected:
|
|||||||
class ConfigOptionsGroup: public OptionsGroup {
|
class ConfigOptionsGroup: public OptionsGroup {
|
||||||
public:
|
public:
|
||||||
ConfigOptionsGroup( wxWindow* parent, const wxString& title, DynamicPrintConfig* _config = nullptr,
|
ConfigOptionsGroup( wxWindow* parent, const wxString& title, DynamicPrintConfig* _config = nullptr,
|
||||||
bool is_tab_opt = false, ogDrawFlag flag = ogDEFAULT, column_t extra_clmn = nullptr) :
|
bool is_tab_opt = false, column_t extra_clmn = nullptr) :
|
||||||
OptionsGroup(parent, title, is_tab_opt, flag, extra_clmn), m_config(_config) {}
|
OptionsGroup(parent, title, is_tab_opt, extra_clmn), m_config(_config) {}
|
||||||
|
|
||||||
/// reference to libslic3r config, non-owning pointer (?).
|
/// reference to libslic3r config, non-owning pointer (?).
|
||||||
DynamicPrintConfig* m_config {nullptr};
|
DynamicPrintConfig* m_config {nullptr};
|
||||||
@ -252,6 +245,7 @@ public:
|
|||||||
void back_to_config_value(const DynamicPrintConfig& config, const std::string& opt_key);
|
void back_to_config_value(const DynamicPrintConfig& config, const std::string& opt_key);
|
||||||
void on_kill_focus() override{ reload_config();}
|
void on_kill_focus() override{ reload_config();}
|
||||||
void reload_config();
|
void reload_config();
|
||||||
|
void update_visibility(ConfigOptionMode mode);
|
||||||
boost::any config_value(const std::string& opt_key, int opt_index, bool deserialize);
|
boost::any config_value(const std::string& opt_key, int opt_index, bool deserialize);
|
||||||
// return option value from config
|
// return option value from config
|
||||||
boost::any get_config_value(const DynamicPrintConfig& config, const std::string& opt_key, int opt_index = -1);
|
boost::any get_config_value(const DynamicPrintConfig& config, const std::string& opt_key, int opt_index = -1);
|
||||||
|
@ -632,6 +632,14 @@ void Tab::reload_config(){
|
|||||||
Thaw();
|
Thaw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Tab::update_visibility(ConfigOptionMode mode)
|
||||||
|
{
|
||||||
|
Freeze();
|
||||||
|
for (auto page : m_pages)
|
||||||
|
page->update_visibility(mode);
|
||||||
|
Thaw();
|
||||||
|
}
|
||||||
|
|
||||||
Field* Tab::get_field(const t_config_option_key& opt_key, int opt_index/* = -1*/) const
|
Field* Tab::get_field(const t_config_option_key& opt_key, int opt_index/* = -1*/) const
|
||||||
{
|
{
|
||||||
Field* field = nullptr;
|
Field* field = nullptr;
|
||||||
@ -1021,7 +1029,7 @@ void TabPrint::build()
|
|||||||
|
|
||||||
page = add_options_page(_(L("Dependencies")), "wrench.png");
|
page = add_options_page(_(L("Dependencies")), "wrench.png");
|
||||||
optgroup = page->new_optgroup(_(L("Profile dependencies")));
|
optgroup = page->new_optgroup(_(L("Profile dependencies")));
|
||||||
line = { _(L("Compatible printers")), "" };
|
line = optgroup->create_single_option_line("compatible_printers");//{ _(L("Compatible printers")), "" };
|
||||||
line.widget = [this](wxWindow* parent){
|
line.widget = [this](wxWindow* parent){
|
||||||
return compatible_printers_widget(parent, &m_compatible_printers_checkbox, &m_compatible_printers_btn);
|
return compatible_printers_widget(parent, &m_compatible_printers_checkbox, &m_compatible_printers_btn);
|
||||||
};
|
};
|
||||||
@ -1347,7 +1355,7 @@ void TabFilament::build()
|
|||||||
optgroup->append_single_option_line("filament_cooling_final_speed");
|
optgroup->append_single_option_line("filament_cooling_final_speed");
|
||||||
optgroup->append_single_option_line("filament_minimal_purge_on_wipe_tower");
|
optgroup->append_single_option_line("filament_minimal_purge_on_wipe_tower");
|
||||||
|
|
||||||
line = { _(L("Ramming")), "" };
|
line = optgroup->create_single_option_line("filament_ramming_parameters");// { _(L("Ramming")), "" };
|
||||||
line.widget = [this](wxWindow* parent){
|
line.widget = [this](wxWindow* parent){
|
||||||
auto ramming_dialog_btn = new wxButton(parent, wxID_ANY, _(L("Ramming settings"))+dots, wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT);
|
auto ramming_dialog_btn = new wxButton(parent, wxID_ANY, _(L("Ramming settings"))+dots, wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT);
|
||||||
auto sizer = new wxBoxSizer(wxHORIZONTAL);
|
auto sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
@ -1387,7 +1395,7 @@ void TabFilament::build()
|
|||||||
|
|
||||||
page = add_options_page(_(L("Dependencies")), "wrench.png");
|
page = add_options_page(_(L("Dependencies")), "wrench.png");
|
||||||
optgroup = page->new_optgroup(_(L("Profile dependencies")));
|
optgroup = page->new_optgroup(_(L("Profile dependencies")));
|
||||||
line = { _(L("Compatible printers")), "" };
|
line = optgroup->create_single_option_line("compatible_printers");//{ _(L("Compatible printers")), "" };
|
||||||
line.widget = [this](wxWindow* parent){
|
line.widget = [this](wxWindow* parent){
|
||||||
return compatible_printers_widget(parent, &m_compatible_printers_checkbox, &m_compatible_printers_btn);
|
return compatible_printers_widget(parent, &m_compatible_printers_checkbox, &m_compatible_printers_btn);
|
||||||
};
|
};
|
||||||
@ -1482,7 +1490,7 @@ void TabPrinter::build_fff()
|
|||||||
auto page = add_options_page(_(L("General")), "printer_empty.png");
|
auto page = add_options_page(_(L("General")), "printer_empty.png");
|
||||||
auto optgroup = page->new_optgroup(_(L("Size and coordinates")));
|
auto optgroup = page->new_optgroup(_(L("Size and coordinates")));
|
||||||
|
|
||||||
Line line{ _(L("Bed shape")), "" };
|
Line line = optgroup->create_single_option_line("bed_shape");//{ _(L("Bed shape")), "" };
|
||||||
line.widget = [this](wxWindow* parent){
|
line.widget = [this](wxWindow* parent){
|
||||||
auto btn = new wxButton(parent, wxID_ANY, _(L(" Set "))+dots, wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT);
|
auto btn = new wxButton(parent, wxID_ANY, _(L(" Set "))+dots, wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBU_EXACTFIT);
|
||||||
btn->SetFont(wxGetApp().small_font());
|
btn->SetFont(wxGetApp().small_font());
|
||||||
@ -1514,6 +1522,7 @@ void TabPrinter::build_fff()
|
|||||||
def.label = L("Extruders");
|
def.label = L("Extruders");
|
||||||
def.tooltip = L("Number of extruders of the printer.");
|
def.tooltip = L("Number of extruders of the printer.");
|
||||||
def.min = 1;
|
def.min = 1;
|
||||||
|
def.mode = comExpert;
|
||||||
Option option(def, "extruders_count");
|
Option option(def, "extruders_count");
|
||||||
optgroup->append_single_option_line(option);
|
optgroup->append_single_option_line(option);
|
||||||
optgroup->append_single_option_line("single_extruder_multi_material");
|
optgroup->append_single_option_line("single_extruder_multi_material");
|
||||||
@ -2681,6 +2690,12 @@ void Page::reload_config()
|
|||||||
group->reload_config();
|
group->reload_config();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Page::update_visibility(ConfigOptionMode mode)
|
||||||
|
{
|
||||||
|
for (auto group : m_optgroups)
|
||||||
|
group->update_visibility(mode);
|
||||||
|
}
|
||||||
|
|
||||||
Field* Page::get_field(const t_config_option_key& opt_key, int opt_index /*= -1*/) const
|
Field* Page::get_field(const t_config_option_key& opt_key, int opt_index /*= -1*/) const
|
||||||
{
|
{
|
||||||
Field* field = nullptr;
|
Field* field = nullptr;
|
||||||
@ -2704,8 +2719,22 @@ bool Page::set_value(const t_config_option_key& opt_key, const boost::any& value
|
|||||||
// package Slic3r::GUI::Tab::Page;
|
// package Slic3r::GUI::Tab::Page;
|
||||||
ConfigOptionsGroupShp Page::new_optgroup(const wxString& title, int noncommon_label_width /*= -1*/)
|
ConfigOptionsGroupShp Page::new_optgroup(const wxString& title, int noncommon_label_width /*= -1*/)
|
||||||
{
|
{
|
||||||
|
auto extra_column = [](wxWindow* parent, const Line& line)
|
||||||
|
{
|
||||||
|
std::string bmp_name;
|
||||||
|
if (line.get_options().size() == 0)
|
||||||
|
bmp_name = "error.png";
|
||||||
|
else {
|
||||||
|
auto mode = line.get_options()[0].opt.mode; //we assume that we have one option per line
|
||||||
|
bmp_name = mode == comExpert ? "mode_expert.png" :
|
||||||
|
mode == comMiddle ? "mode_middle.png" : "mode_simple.png";
|
||||||
|
}
|
||||||
|
auto bmp = new wxStaticBitmap(parent, wxID_ANY, wxBitmap(from_u8(var(bmp_name)), wxBITMAP_TYPE_PNG));
|
||||||
|
return bmp;
|
||||||
|
};
|
||||||
|
|
||||||
//! config_ have to be "right"
|
//! config_ have to be "right"
|
||||||
ConfigOptionsGroupShp optgroup = std::make_shared<ConfigOptionsGroup>(this, title, m_config, true);
|
ConfigOptionsGroupShp optgroup = std::make_shared<ConfigOptionsGroup>(this, title, m_config, true, extra_column);
|
||||||
if (noncommon_label_width >= 0)
|
if (noncommon_label_width >= 0)
|
||||||
optgroup->label_width = noncommon_label_width;
|
optgroup->label_width = noncommon_label_width;
|
||||||
|
|
||||||
@ -2844,7 +2873,7 @@ void TabSLAMaterial::build()
|
|||||||
|
|
||||||
page = add_options_page(_(L("Dependencies")), "wrench.png");
|
page = add_options_page(_(L("Dependencies")), "wrench.png");
|
||||||
optgroup = page->new_optgroup(_(L("Profile dependencies")));
|
optgroup = page->new_optgroup(_(L("Profile dependencies")));
|
||||||
auto line = Line { _(L("Compatible printers")), "" };
|
Line line = optgroup->create_single_option_line("compatible_printers");//Line { _(L("Compatible printers")), "" };
|
||||||
line.widget = [this](wxWindow* parent){
|
line.widget = [this](wxWindow* parent){
|
||||||
return compatible_printers_widget(parent, &m_compatible_printers_checkbox, &m_compatible_printers_btn);
|
return compatible_printers_widget(parent, &m_compatible_printers_checkbox, &m_compatible_printers_btn);
|
||||||
};
|
};
|
||||||
|
@ -73,6 +73,7 @@ public:
|
|||||||
size_t iconID() const { return m_iconID; }
|
size_t iconID() const { return m_iconID; }
|
||||||
void set_config(DynamicPrintConfig* config_in) { m_config = config_in; }
|
void set_config(DynamicPrintConfig* config_in) { m_config = config_in; }
|
||||||
void reload_config();
|
void reload_config();
|
||||||
|
void update_visibility(ConfigOptionMode mode);
|
||||||
Field* get_field(const t_config_option_key& opt_key, int opt_index = -1) const;
|
Field* get_field(const t_config_option_key& opt_key, int opt_index = -1) const;
|
||||||
bool set_value(const t_config_option_key& opt_key, const boost::any& value);
|
bool set_value(const t_config_option_key& opt_key, const boost::any& value);
|
||||||
ConfigOptionsGroupShp new_optgroup(const wxString& title, int noncommon_label_width = -1);
|
ConfigOptionsGroupShp new_optgroup(const wxString& title, int noncommon_label_width = -1);
|
||||||
@ -249,6 +250,7 @@ public:
|
|||||||
void update_tab_ui();
|
void update_tab_ui();
|
||||||
void load_config(const DynamicPrintConfig& config);
|
void load_config(const DynamicPrintConfig& config);
|
||||||
virtual void reload_config();
|
virtual void reload_config();
|
||||||
|
void update_visibility(ConfigOptionMode mode);
|
||||||
Field* get_field(const t_config_option_key& opt_key, int opt_index = -1) const;
|
Field* get_field(const t_config_option_key& opt_key, int opt_index = -1) const;
|
||||||
bool set_value(const t_config_option_key& opt_key, const boost::any& value);
|
bool set_value(const t_config_option_key& opt_key, const boost::any& value);
|
||||||
wxSizer* description_line_widget(wxWindow* parent, ogStaticText** StaticText);
|
wxSizer* description_line_widget(wxWindow* parent, ogStaticText** StaticText);
|
||||||
|
@ -262,6 +262,9 @@ public:
|
|||||||
}
|
}
|
||||||
else if (type == itInstanceRoot) {
|
else if (type == itInstanceRoot) {
|
||||||
m_name = "Instances";
|
m_name = "Instances";
|
||||||
|
#ifdef __WXGTK__
|
||||||
|
m_container = true;
|
||||||
|
#endif //__WXGTK__
|
||||||
}
|
}
|
||||||
else if (type == itInstance) {
|
else if (type == itInstance) {
|
||||||
m_idx = parent->GetChildCount();
|
m_idx = parent->GetChildCount();
|
||||||
|
Loading…
Reference in New Issue
Block a user