Expended option for settings ui files: widths, sidetext, simple/advanced/export mode support for lines.

This commit is contained in:
supermerill 2020-01-15 03:03:58 +01:00 committed by supermerill
parent 885330d54b
commit 433bd46bee
13 changed files with 217 additions and 122 deletions

View File

@ -26,33 +26,39 @@ each parameter is separated by ':'
page:STR:STR
* first STR is for the label and the second for the icon, with or without the .svg / .png
* Group:
group[:nolabel][:label_width$INT][:EVENT]:STR
group[:nolabel][:title_width$INT][:label_width$INT][:sidetext_width$INT][:EVENT]:STR
* EVENT can be extruders_count_event if the group contains extruders_count and is a printer tab ; silent_mode_event if the group contains silent_mode and is a printer tab ; material_density_event if the group contains material_density.
* label_width$INT is used to set the size of the left column, where labels are draw.
* title_width$INT is used to set the size of the left column, where labels are draw.
* label_width$INT is used to set the size of the labels on lines.
* sidetext_width$INT is used to set the size of the suffix label (see sidetext in setting).
* EVENT can be extruders_count_event (TabPrinter only), silent_mode_event (TabPrinter only), material_density_event.
* nolabel is used to remove the left column, where labels are draw.
* Line:
line:STR
* setting:
setting[label$STR][:full_label][:full_width][:simple|advanced|expert][:width$INT][:width$INT][:id$INT]:STR
setting[label$STR][label_width$INT][:full_label][:full_width][:sidetext$STR][sidetext_width$INT][:simple|advanced|expert][:width$INT][:height$INT][:id$INT]:STR
* STR, the last parameter: the id name of the setting.
* label$STR : to override the label by this new one
* full_label: to override the label by the "full one"
* full_width: to tell to create a field that span the full width
* simple|advanced|expert: add one of these to modify the mode in which this setting appear. If it's inside a lien, the first setting of the line decide for all the line.
* width$INT: change the width of the field. Don't works (yet) with every type of setting.
* height$INT: change the height of the field. Don't works (yet) with every type of setting.
* label$STR : to override the label by this new one (if it ends with '_' it won't have a ':' ; if empty it won't have a length).
* label_width$INT: change the width of the label. Only works if it's in a line. Override the group one. 0 for auto.
* full_label: to override the label by the "full one".
* full_width: to tell to create a field that span the full width.
* sidetext$STR: the suffix at the right of the widget (like 'mm').
* sidetext_width$INT: the suffix label length (override the group one). 0 for auto.
* simple|advanced|expert: add one of these to modify the mode in which this setting appear.
* width$INT: change the width of the field. Shouod work on most type of settings.
* height$INT: change the height of the field. Don't works with every type of setting.
* id $INT : for setting only a single value of a setting array.
* recommended_thin_wall_thickness_description: create a text widget to explain recommended thin wall thickness (only in a fff print tab)
* parent_preset_description: create a text widget to explain parent preset
* cooling_description: create a text widget to explain cooling (only in a filament tab)
* volumetric_speed_description: create a text widget to explain volumetric speed (only in a filament tab)
* filament_ramming_parameters: create a widget for filament ramming
* filament_overrides_page: create a page for overrides (only in a filament tab)
* unregular_pages: create needed special pages for a fff printer tab
* printhost: create printhost settings for the group (only in a printer tab)
* bed_shape: create bed shape widget (only in a printer tab)
* extruders_count: create extruders_count setting (only in a fff printer tab)
* logs: activated logs
* recommended_thin_wall_thickness_description: create a text widget to explain recommended thin wall thickness (only in a fff print tab).
* parent_preset_description: create a text widget to explain parent preset.
* cooling_description: create a text widget to explain cooling (only in a filament tab).
* volumetric_speed_description: create a text widget to explain volumetric speed (only in a filament tab).
* filament_ramming_parameters: create a widget for filament ramming.
* filament_overrides_page: create a page for overrides (only in a filament tab).
* unregular_pages: create needed special pages for a fff printer tab.
* printhost: create printhost settings for the group (only in a printer tab).
* bed_shape: create bed shape widget (only in a printer tab).
* extruders_count: create extruders_count setting (only in a fff printer tab).
* logs: activated logs.
### ui file syntax
trailing & leading tabs & spaces are removed, so you can indent as you want.
If the first character is '#', then this line is ignored

View File

@ -1,7 +1,7 @@
#logs
page:Perimeters & Shell:shell
group:Vertical shells
setting:label$perimeters:perimeters
setting:width$6:perimeters
setting:spiral_vase
recommended_thin_wall_thickness_description
group:Horizontal shells
@ -55,32 +55,38 @@ group:Filtering
setting:resolution
setting:model_precision
setting:slice_closing_radius
group:Modifying slices
group:label_width$8:Modifying slices
line:Curve smoothing
setting:width$6:curve_smoothing_precision
setting:width$6:curve_smoothing_angle_convex
setting:width$6:curve_smoothing_angle_concave
setting:width$6:curve_smoothing_cutoff_dist
end_line
setting:hole_to_polyhole
line:XY compensation
setting:width$6:xy_size_compensation
setting:width$6:elefant_foot_compensation
setting:width$6:hole_size_compensation
end_line
setting:hole_to_polyhole
group:Other
setting:clip_multipart_objects
page:Infill:infill
group:Infill
setting:fill_density
setting:fill_pattern
line:External patterns
setting:top_fill_pattern
setting:bottom_fill_pattern
line:Fill density
setting:label_width$5:label$_:fill_density
end_line
line:Pattern
setting:label_width$5:label$_:fill_pattern
setting:label$don't connect:infill_not_connected
end_line
line:External patterns
setting:label_width$5:top_fill_pattern
setting:label_width$5:bottom_fill_pattern
end_line
line:Solid pattern
setting:label_width$5:label$_:solid_fill_pattern
end_line
setting:solid_fill_pattern
setting:infill_not_connected
group:Reducing printing time
setting:infill_every_layers
setting:infill_only_where_needed
@ -88,23 +94,23 @@ group:Reducing printing time
setting:infill_dense
setting:infill_dense_algo
end_line
group:Advanced
group:sidetext_width$3:Advanced
setting:solid_infill_every_layers
setting:solid_infill_below_area
line:Angle
setting:fill_angle
setting:bridge_angle
setting:label_width$6:width$5:fill_angle
setting:label_width$6:width$5:bridge_angle
end_line
line:Anchor solid infill by X mm
setting:external_infill_margin
setting:bridged_infill_margin
setting:label_width$6:width$5:external_infill_margin
setting:label_width$6:width$5:bridged_infill_margin
end_line
setting:only_retract_when_crossing_perimeters
setting:infill_first
group:Advanced Infill
line:Ironing tuning
setting:fill_smooth_width
setting:fill_smooth_distribution
setting:label_width$6:width$5:fill_smooth_width
setting:label_width$9:width$5:fill_smooth_distribution
end_line
page:Skirt & Brim:skirt+brim
@ -119,7 +125,7 @@ group:Brim
setting:brim_width_interior
line:Brim ears
setting:brim_ears
setting:brim_ears_max_angle
setting:width$3:brim_ears_max_angle
end_line
page:Support material:support
@ -152,29 +158,33 @@ group:Options for support material interface
setting:support_material_interface_contact_loops
page:Speed:time
group:Speed for print moves
group:label_width$8:Speed for print moves
line:Perimeter speed
setting:perimeter_speed
setting:external_perimeter_speed
setting:small_perimeter_speed
setting:width$4:perimeter_speed
setting:width$4:external_perimeter_speed
setting:width$4:small_perimeter_speed
end_line
line:Infill speed
setting:infill_speed
setting:solid_infill_speed
setting:top_solid_infill_speed
setting:width$4:infill_speed
setting:width$4:solid_infill_speed
setting:width$4:top_solid_infill_speed
end_line
line:Support speed
setting:support_material_speed
setting:support_material_interface_speed
setting:width$4:support_material_speed
setting:width$4:support_material_interface_speed
end_line
line:Bridge speed
setting:label$_:width$4:bridge_speed
end_line
line:Gap fill speed
setting:label$_:width$4:gap_fill_speed
end_line
setting:bridge_speed
setting:gap_fill_speed
group:Speed for non-print moves
setting:travel_speed
group:Modifiers
line:First layer speed
setting:first_layer_speed
setting:first_layer_infill_speed
setting:label_width$8:width$4:first_layer_speed
setting:label_width$8:width$4:first_layer_infill_speed
end_line
group:Acceleration control (advanced)
setting:perimeter_acceleration
@ -219,8 +229,8 @@ group:Ooze prevention
group:Wipe tower
setting:wipe_tower
line:Wipe tower position
setting:wipe_tower_x
setting:wipe_tower_y
setting:label_width$3:width$5:sidetext$mm:wipe_tower_x
setting:label_width$3:width$5:sidetext$mm:wipe_tower_y
end_line
setting:wipe_tower_width
setting:wipe_tower_rotation_angle

View File

@ -1475,8 +1475,10 @@ public:
int height = -1;
// Optional width of an input field.
int width = -1;
// Optional label width of an input field (if in a line).
// Optional label width of the label (if in a line).
int label_width = -1;
// Optional label width of the sidetext (if in a line).
int sidetext_width = -1;
// <min, max> limit of a numeric input.
// If not set, the <min, max> is set to <INT_MIN, INT_MAX>
// By setting min=0, only nonnegative input is allowed.

View File

@ -154,7 +154,7 @@ ConfigOptionsGroupShp BedShapePanel::init_shape_options_page(const wxString& tit
wxPanel* panel = new wxPanel(m_shape_options_book);
ConfigOptionsGroupShp optgroup = std::make_shared<ConfigOptionsGroup>(panel, _(L("Settings")));
optgroup->label_width = 10;
optgroup->title_width = 10;
optgroup->m_on_change = [this](t_config_option_key opt_key, boost::any value) {
update_shape();
};
@ -171,7 +171,7 @@ wxPanel* BedShapePanel::init_texture_panel()
wxPanel* panel = new wxPanel(this);
ConfigOptionsGroupShp optgroup = std::make_shared<ConfigOptionsGroup>(panel, _(L("Texture")));
optgroup->label_width = 10;
optgroup->title_width = 10;
optgroup->m_on_change = [this](t_config_option_key opt_key, boost::any value) {
update_shape();
};
@ -250,7 +250,7 @@ wxPanel* BedShapePanel::init_model_panel()
wxPanel* panel = new wxPanel(this);
ConfigOptionsGroupShp optgroup = std::make_shared<ConfigOptionsGroup>(panel, _(L("Model")));
optgroup->label_width = 10;
optgroup->title_width = 10;
optgroup->m_on_change = [this](t_config_option_key opt_key, boost::any value) {
update_shape();
};

View File

@ -693,6 +693,9 @@ void SpinCtrl::propagate_value()
void SpinCtrl::msw_rescale()
{
Field::msw_rescale();
auto size = wxSize(wxDefaultSize);
if (m_opt.height >= 0) size.SetHeight(m_opt.height * m_em_unit);
if (m_opt.width >= 0) size.SetWidth(m_opt.width * m_em_unit);
wxSpinCtrl* field = dynamic_cast<wxSpinCtrl*>(window);
field->SetMinSize(wxSize(-1, int(1.9f*field->GetFont().GetPixelSize().y)));

View File

@ -121,7 +121,7 @@ bool ObjectSettings::update_settings_list()
categories.push_back(cat.first);
auto optgroup = std::make_shared<ConfigOptionsGroup>(m_og->ctrl_parent(), _(toString(cat.first)), config, false, extra_column);
optgroup->label_width = 15;
optgroup->title_width = 15;
optgroup->sidetext_width = 5;
optgroup->m_on_change = [this, config](const t_config_option_key& opt_id, const boost::any& value) {

View File

@ -181,7 +181,7 @@ ConfigOptionsGroupShp LambdaObjectDialog::init_modificator_options_page(const wx
ConfigOptionsGroupShp optgroup;
optgroup = std::make_shared<ConfigOptionsGroup>(panel, _(L("Add")) + " " +title + " " +dots);
optgroup->label_width = 100;
optgroup->title_width = 100;
m_optgroups.push_back(optgroup);

View File

@ -100,7 +100,7 @@ const t_field& OptionsGroup::build_field(const t_config_option_key& id, const Co
return field;
}
void OptionsGroup::add_undo_buttuns_to_sizer(wxSizer* sizer, const t_field& field)
void OptionsGroup::add_undo_buttuns_to_sizer(wxSizer* sizer, const t_field& field, std::vector<size_t>* widget_idx_in_sizer)
{
if (!m_show_modified_btns) {
field->m_Undo_btn->set_as_hidden();
@ -108,7 +108,12 @@ void OptionsGroup::add_undo_buttuns_to_sizer(wxSizer* sizer, const t_field& fiel
return;
}
if(widget_idx_in_sizer)
widget_idx_in_sizer->push_back(sizer->GetItemCount());
sizer->Add(field->m_Undo_to_sys_btn, 0, wxALIGN_CENTER_VERTICAL);
if (widget_idx_in_sizer)
widget_idx_in_sizer->push_back(sizer->GetItemCount());
sizer->Add(field->m_Undo_btn, 0, wxALIGN_CENTER_VERTICAL);
}
@ -129,11 +134,14 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n
m_options.emplace(opt.opt_id, opt);
// add mode value for current line to m_options_mode
if (!option_set.empty())
m_options_mode.push_back(option_set[0].opt.mode);
m_options_mode.emplace_back();
m_line_sizer.emplace_back();
if (!option_set.empty()) {
m_options_mode.back()[option_set[0].opt.mode].push_back(-1);
}
// if we have a single option with no label, no sidetext just add it directly to sizer
if (option_set.size() == 1 && label_width == 0 && option_set.front().opt.full_width &&
if (option_set.size() == 1 && title_width == 0 && option_set.front().opt.full_width &&
option_set.front().opt.label.empty() &&
option_set.front().opt.sidetext.size() == 0 && option_set.front().side_widget == nullptr &&
line.get_extra_widgets().size() == 0) {
@ -174,7 +182,7 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n
// Build a label if we have it
wxStaticText* label=nullptr;
if (label_width != 0) {
if (title_width != 0) {
if (! line.near_label_widget || ! line.label.IsEmpty()) {
// Only create the label if it is going to be displayed.
long label_style = staticbox ? 0 : wxALIGN_RIGHT;
@ -185,10 +193,10 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n
label_style |= staticbox ? 0 : wxST_ELLIPSIZE_END;
#endif /* __WXGTK__ */
label = new wxStaticText(this->ctrl_parent(), wxID_ANY, line.label + (line.label.IsEmpty() ? "" : ": "),
wxDefaultPosition, wxSize(label_width*wxGetApp().em_unit(), -1), label_style);
wxDefaultPosition, wxSize(title_width*wxGetApp().em_unit(), -1), label_style);
label->SetBackgroundStyle(wxBG_STYLE_PAINT);
label->SetFont(wxGetApp().normal_font());
label->Wrap(label_width*wxGetApp().em_unit()); // avoid a Linux/GTK bug
label->Wrap(title_width*wxGetApp().em_unit()); // avoid a Linux/GTK bug
}
if (!line.near_label_widget)
grid_sizer->Add(label, 0, (staticbox ? 0 : wxALIGN_RIGHT | wxRIGHT) | wxALIGN_CENTER_VERTICAL, line.label.IsEmpty() ? 0 : 5);
@ -240,28 +248,39 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n
return;
}
m_line_sizer.back() = sizer;
wxSizer* sizer_tmp = sizer;
for (auto opt : option_set) {
ConfigOptionDef option = opt.opt;
wxSizer* sizer_tmp = sizer;
// add label if any
if (option.label != "") {
if (!option.label.empty()) {
//! To correct translation by context have to use wxGETTEXT_IN_CONTEXT macro from wxWidget 3.1.1
wxString str_label = (option.label == L_CONTEXT("Top", "Layers") || option.label == L_CONTEXT("Bottom", "Layers")) ?
_CTX(option.label, "Layers") :
_(option.label);
label = new wxStaticText(this->ctrl_parent(), wxID_ANY, str_label + ":", wxDefaultPosition, wxDefaultSize);
std::string opt_label = (option.label.at(option.label.size() - 1) != '_') ? option.label : option.label.substr(0, option.label.size() - 1);
wxString str_label = (opt_label == L_CONTEXT("Top", "Layers") || opt_label == L_CONTEXT("Bottom", "Layers")) ?
_CTX(opt_label, "Layers") :
_(opt_label);
label = new wxStaticText(this->ctrl_parent(), wxID_ANY,
(str_label.empty() ? "" : (str_label + ":")), wxDefaultPosition, //wxDefaultSize);
(option.label_width >= 0) ? ((option.label_width != 0) ? wxSize(option.label_width*wxGetApp().em_unit(), -1) : wxDefaultSize) :
((label_width > 0) ? wxSize(label_width * wxGetApp().em_unit(), -1) : (wxDefaultSize))
, wxALIGN_RIGHT);
label->SetBackgroundStyle(wxBG_STYLE_PAINT);
label->SetFont(wxGetApp().normal_font());
if (option.label_width > 0 || label_width >0) {
label->Wrap((option.label_width > 0 ? option.label_width : label_width)* wxGetApp().em_unit()); // avoid a Linux/GTK bug
}
m_options_mode.back()[opt.opt.mode].push_back(sizer_tmp->GetItemCount());
sizer_tmp->Add(label, 0, /*wxALIGN_RIGHT |*/ wxALIGN_CENTER_VERTICAL, 0);
}
// add field
const Option& opt_ref = opt;
auto& field = build_field(opt_ref, label);
add_undo_buttuns_to_sizer(sizer_tmp, field);
add_undo_buttuns_to_sizer(sizer_tmp, field, &(m_options_mode.back()[opt.opt.mode]));
if (option_set.size() == 1 && option_set.front().opt.full_width)
{
const auto v_sizer = new wxBoxSizer(wxVERTICAL);
m_options_mode.back()[opt.opt.mode].push_back(sizer_tmp->GetItemCount());
sizer_tmp->Add(v_sizer, 1, wxEXPAND);
is_sizer_field(field) ?
v_sizer->Add(field->getSizer(), 0, wxEXPAND) :
@ -269,27 +288,35 @@ void OptionsGroup::append_line(const Line& line, wxStaticText** full_Label/* = n
break;//return;
}
m_options_mode.back()[opt.opt.mode].push_back(sizer_tmp->GetItemCount());
is_sizer_field(field) ?
sizer_tmp->Add(field->getSizer(), 0, wxALIGN_CENTER_VERTICAL, 0) :
sizer_tmp->Add(field->getWindow(), 0, wxALIGN_CENTER_VERTICAL, 0);
// add sidetext if any
if (option.sidetext != "") {
auto sidetext = new wxStaticText( this->ctrl_parent(), wxID_ANY, _(option.sidetext), wxDefaultPosition,
wxSize(sidetext_width != -1 ? sidetext_width*wxGetApp().em_unit() : -1, -1) /*wxDefaultSize*/, wxALIGN_LEFT);
auto sidetext = new wxStaticText( this->ctrl_parent(), wxID_ANY,
((option.sidetext.at(option.sidetext.size() - 1) != '_') ? _(option.sidetext) : option.sidetext.substr(0, option.sidetext.size() - 1)),
wxDefaultPosition,
wxSize( ( option.sidetext_width >= 0 ? (option.sidetext_width != 0 ? option.sidetext_width * wxGetApp().em_unit() : -1) :
(sidetext_width > 0 ? sidetext_width * wxGetApp().em_unit() : -1) ), -1)
/*wxDefaultSize*/, wxALIGN_LEFT);
sidetext->SetBackgroundStyle(wxBG_STYLE_PAINT);
sidetext->SetFont(wxGetApp().normal_font());
m_options_mode.back()[opt.opt.mode].push_back(sizer_tmp->GetItemCount());
sizer_tmp->Add(sidetext, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 4);
field->set_side_text_ptr(sidetext);
}
// add side widget if any
if (opt.side_widget != nullptr) {
m_options_mode.back()[opt.opt.mode].push_back(sizer_tmp->GetItemCount());
sizer_tmp->Add(opt.side_widget(this->ctrl_parent())/*!.target<wxWindow>()*/, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 1); //! requires verification
}
if (opt.opt_id != option_set.back().opt_id) //! istead of (opt != option_set.back())
{
m_options_mode.back()[opt.opt.mode].push_back(sizer_tmp->GetItemCount());
sizer_tmp->AddSpacer(6);
}
}
@ -454,27 +481,56 @@ void ConfigOptionsGroup::Show(const bool show)
#endif /* __WXGTK__ */
}
std::vector<size_t> get_visible_idx(const std::map<ConfigOptionMode, std::vector<size_t>>& map, ConfigOptionMode mode) {
std::vector<size_t> ret;
for (const auto& entry : map) {
if (entry.first <= mode)
ret.insert(ret.end(), entry.second.begin(), entry.second.end());
}
return ret;
}
std::vector<size_t> get_invisible_idx(const std::map<ConfigOptionMode, std::vector<size_t>>& map, ConfigOptionMode mode) {
std::vector<size_t> ret;
for (const auto& entry : map) {
if (entry.first > mode)
ret.insert(ret.end(), entry.second.begin(), entry.second.end());
}
return ret;
}
bool ConfigOptionsGroup::update_visibility(ConfigOptionMode mode) {
if (m_options_mode.empty())
return true;
int opt_mode_size = m_options_mode.size();
const int opt_mode_size = m_options_mode.size();
if (m_grid_sizer->GetEffectiveRowsCount() != opt_mode_size &&
opt_mode_size == 1)
return m_options_mode[0] <= mode;
opt_mode_size == 1 && m_options_mode[0].size() == 1 && m_options_mode[0].begin()->second.size() == 1)
return get_invisible_idx(m_options_mode[0], mode).empty();
Show(true);
int coef = 0;
ConfigOptionMode best_mode = ConfigOptionMode::comExpert;
for (const auto& map : m_options_mode)
for (const auto& entry : map)
if (entry.first <= best_mode)
best_mode = entry.first;
int idx_item = 0;
int hidden_row_cnt = 0;
const int cols = m_grid_sizer->GetCols();
for (auto opt_mode : m_options_mode) {
const bool show = opt_mode <= mode;
if (!show) {
assert(opt_mode_size == m_line_sizer.size());
for (int i = 0; i < opt_mode_size; i++) {
if ((m_options_mode[i].size() == 1
&& m_options_mode[i].begin()->second.size() == 1
&& m_options_mode[i].begin()->second[0] == (size_t)-1
&& m_options_mode[i].begin()->first > mode)
|| get_visible_idx(m_options_mode[i], mode).empty()) {
hidden_row_cnt++;
for (int i = 0; i < cols; ++i)
m_grid_sizer->Show(coef + i, show);
}
coef+= cols;
for (size_t idx =0; idx < cols; idx++)
m_grid_sizer->Show(idx_item + idx, false);
}else
for (size_t idx : get_invisible_idx(m_options_mode[i], mode))
if(idx != (size_t)-1) m_line_sizer[i]->Show(idx, false);
idx_item += cols;
}
if (hidden_row_cnt == opt_mode_size) {
@ -503,7 +559,7 @@ void ConfigOptionsGroup::msw_rescale()
const int em = em_unit(parent());
// rescale width of label column
if (!m_options_mode.empty() && label_width > 1)
if (!m_options_mode.empty() && title_width > 1)
{
const int cols = m_grid_sizer->GetCols();
const int rows = m_grid_sizer->GetEffectiveRowsCount();
@ -516,7 +572,7 @@ void ConfigOptionsGroup::msw_rescale()
{
auto label = dynamic_cast<wxStaticText*>(label_item->GetWindow());
if (label != nullptr) {
label->SetMinSize(wxSize(label_width*em, -1));
label->SetMinSize(wxSize(title_width*em, -1));
}
}
else if (label_item->IsSizer()) // case when we have near_label_widget
@ -526,7 +582,7 @@ void ConfigOptionsGroup::msw_rescale()
{
auto label = dynamic_cast<wxStaticText*>(l_item->GetWindow());
if (label != nullptr) {
label->SetMinSize(wxSize(label_width*em, -1));
label->SetMinSize(wxSize(title_width*em, -1));
}
}
}

View File

@ -79,7 +79,7 @@ class OptionsGroup {
public:
const bool staticbox {true};
const wxString title {wxString("")};
size_t label_width = 20 ;// {200};
size_t title_width = 20;// {200};
wxSizer* sizer {nullptr};
column_t extra_column {nullptr};
t_change m_on_change { nullptr };
@ -97,6 +97,7 @@ public:
wxFont sidetext_font {wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT) };
wxFont label_font {wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT) };
int sidetext_width{ -1 };
int label_width{ -1 };
/// Returns a copy of the pointer of the parent wxWindow.
/// Accessor function is because users are not allowed to change the parent
@ -163,7 +164,7 @@ public:
void clear_fields_except_of(const std::vector<std::string> left_fields);
void hide_labels() {
label_width = 0;
title_width = 0;
m_grid_sizer->SetCols(m_grid_sizer->GetEffectiveColsCount()-1);
static_cast<wxFlexGridSizer*>(m_grid_sizer)->AddGrowableCol(!extra_column ? 0 : 1);
}
@ -181,11 +182,11 @@ public:
stb = nullptr;
sizer = (staticbox ? new wxStaticBoxSizer(stb, wxVERTICAL) : new wxBoxSizer(wxVERTICAL));
auto num_columns = 1U;
if (label_width != 0) num_columns++;
if (title_width != 0) num_columns++;
if (extra_column != nullptr) num_columns++;
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)->AddGrowableCol(label_width == 0 ? 0 : !extra_column ? 1 : 2 );
static_cast<wxFlexGridSizer*>(m_grid_sizer)->AddGrowableCol(title_width == 0 ? 0 : !extra_column ? 1 : 2 );
#if 0//#ifdef __WXGTK__
m_panel = new wxPanel( _parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
sizer->Fit(m_panel);
@ -200,7 +201,8 @@ public:
protected:
std::map<t_config_option_key, Option> m_options;
wxWindow* m_parent {nullptr};
std::vector<ConfigOptionMode> m_options_mode;
std::vector<std::map<ConfigOptionMode, std::vector<size_t>>> m_options_mode;
std::vector<wxSizer*> m_line_sizer;
std::vector<wxWindow*> m_extra_column_item_ptrs;
std::vector<wxWindow*> m_near_label_widget_ptrs;
@ -226,7 +228,7 @@ protected:
const t_field& build_field(const t_config_option_key& id, const ConfigOptionDef& opt, wxStaticText* label = nullptr);
const t_field& build_field(const t_config_option_key& id, wxStaticText* label = nullptr);
const t_field& build_field(const Option& opt, wxStaticText* label = nullptr);
void add_undo_buttuns_to_sizer(wxSizer* sizer, const t_field& field);
void add_undo_buttuns_to_sizer(wxSizer* sizer, const t_field& field, std::vector<size_t> *widget_idx_in_sizer = nullptr);
virtual void on_kill_focus(const std::string& opt_key) {};
virtual void on_set_focus(const std::string& opt_key);

View File

@ -20,7 +20,7 @@ void PreferencesDialog::build()
{
auto app_config = get_app_config();
m_optgroup = std::make_shared<ConfigOptionsGroup>(this, _(L("General")));
m_optgroup->label_width = 40;
m_optgroup->title_width = 40;
m_optgroup->m_on_change = [this](t_config_option_key opt_key, boost::any value) {
m_values[opt_key] = boost::any_cast<bool>(value) ? "1" : "0";

View File

@ -1114,9 +1114,17 @@ bool Tab::create_pages(std::string setting_type_name)
current_group = current_page->new_optgroup(_(L(params.back())), nolabel?0:-1);
for (int i = 1; i < params.size() - 1; i++) {
if (boost::starts_with(params[i], "label_width$")) {
if (boost::starts_with(params[i], "title_width$")) {
current_group->title_width = atoi(params[i].substr(12, params[i].size() - 12).c_str());
}
else if (params[i].find("label_width$") != std::string::npos)
{
current_group->label_width = atoi(params[i].substr(12, params[i].size() - 12).c_str());
}
else if (params[i].find("sidetext_width$") != std::string::npos)
{
current_group->sidetext_width = atoi(params[i].substr(15, params[i].size() - 15).c_str());
}
else if (params[i] == "extruders_count_event") {
TabPrinter* tab = nullptr;
if ((tab = dynamic_cast<TabPrinter*>(this)) == nullptr) continue;
@ -1314,15 +1322,23 @@ bool Tab::create_pages(std::string setting_type_name)
{
option.opt.label = params[i].substr(6, params[i].size() - 6);
}
else if (boost::starts_with(params[i], "label_width$")) {
option.opt.label_width = atoi(params[i].substr(12, params[i].size() - 12).c_str());
}
else if (params[i].find("sidetext$") != std::string::npos)
{
option.opt.sidetext = params[i].substr(9, params[i].size() - 9);
}
else if (params[i].find("sidetext_width$") != std::string::npos)
{
option.opt.sidetext_width = atoi(params[i].substr(15, params[i].size() - 15).c_str());
}
else if (params[i] == "full_width") {
option.opt.full_width = true;
}
else if (boost::starts_with(params[i], "width$")) {
option.opt.width = atoi(params[i].substr(6, params[i].size() - 6).c_str());
}
else if (boost::starts_with(params[i], "label_width$")) {
option.opt.label_width = atoi(params[i].substr(12, params[i].size() - 12).c_str());
}
else if (boost::starts_with(params[i], "height$")) {
option.opt.height = atoi(params[i].substr(7, params[i].size() - 7).c_str());
}
@ -2087,7 +2103,7 @@ void TabFilament::build()
page = add_options_page(_(L("Notes")), "note.png");
optgroup = page->new_optgroup(_(L("Notes")), 0);
optgroup->label_width = 0;
optgroup->title_width = 0;
option = optgroup->get_option("filament_notes");
option.opt.full_width = true;
option.opt.height = notes_field_height;// 250;
@ -2746,7 +2762,7 @@ PageShp TabPrinter::build_kinematics_page()
// Legend for OptionsGroups
auto optgroup = page->new_optgroup("");
optgroup->set_show_modified_btns_val(false);
optgroup->label_width = 23;// 230;
optgroup->title_width = 23;// 230;
auto line = Line{ "", "" };
ConfigOptionDef def;
@ -3904,7 +3920,7 @@ bool Page::set_value(const t_config_option_key& opt_key, const boost::any& value
}
// 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_title_width /*= -1*/)
{
auto extra_column = [this](wxWindow* parent, const Line& line)
{
@ -3922,8 +3938,8 @@ ConfigOptionsGroupShp Page::new_optgroup(const wxString& title, int noncommon_la
//! config_ have to be "right"
ConfigOptionsGroupShp optgroup = std::make_shared<ConfigOptionsGroup>(this, title, m_config, true, extra_column);
if (noncommon_label_width >= 0)
optgroup->label_width = noncommon_label_width;
if (noncommon_title_width >= 0)
optgroup->title_width = noncommon_title_width;
#ifdef __WXOSX__
auto tab = GetParent()->GetParent();
@ -4078,7 +4094,7 @@ void TabSLAMaterial::build()
optgroup->append_single_option_line("initial_exposure_time");
optgroup = page->new_optgroup(_(L("Corrections")));
optgroup->label_width = 19;//190;
optgroup->title_width = 19;//190;
std::vector<std::string> corrections = {"material_correction"};
// std::vector<std::string> axes{ "X", "Y", "Z" };
std::vector<std::string> axes{ "XY", "Z" };
@ -4097,7 +4113,7 @@ void TabSLAMaterial::build()
page = add_options_page(_(L("Notes")), "note");
optgroup = page->new_optgroup(_(L("Notes")), 0);
optgroup->label_width = 0;
optgroup->title_width = 0;
Option option = optgroup->get_option("material_notes");
option.opt.full_width = true;
option.opt.height = 25;//250;

View File

@ -83,7 +83,7 @@ public:
void msw_rescale();
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);
ConfigOptionsGroupShp new_optgroup(const wxString& title, int noncommon_label_width = -1);
ConfigOptionsGroupShp new_optgroup(const wxString& title, int noncommon_title_width = -1);
bool set_item_colour(const wxColour *clr) {
if (m_item_color != clr) {