Add label_left option for setting ui to print the label aligned to the left instead of the right

Better spacing for infill lines, allowing larger infill % field
fix supermerill/SuperSlicer#1573
This commit is contained in:
supermerill 2021-09-26 21:09:13 +02:00
parent 51d5b71509
commit 30c380c70f
12 changed files with 59 additions and 39 deletions

View File

@ -27,13 +27,13 @@ each parameter is separated by ':'
* first STR is for the label and the second for the icon, with or without the .svg / .png * first STR is for the label and the second for the icon, with or without the .svg / .png
* idx: append the index of the page (for extruder ui) to the name * idx: append the index of the page (for extruder ui) to the name
* Group: * Group:
group[:nolabel][:title_width$INT][:label_width$INT][:sidetext_width$INT][:EVENT][:id$INT][:idx]:STR group[:no_title][:title_width$INT][:label_width$INT][:sidetext_width$INT][:EVENT][:id$INT][:idx]: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. * 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.
* title_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 titles are draw.
* label_width$INT is used to set the size of the labels on lines. * 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). * 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. * 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. * no_title is used to remove the left column, where titles are draw.
* Line: * Line:
line:STR* line:STR*
* setting: * setting:
@ -41,6 +41,7 @@ each parameter is separated by ':'
* STR, the last parameter: the id name of the setting. * STR, the last parameter: the id name of the 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$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. -1 for auto. * label_width$INT: change the width of the label. Only works if it's in a line. Override the group one. -1 for auto.
* label_left: Draw the label aligned to the left instead of the right.
* full_label$STR: to override the full_label by this new one (full_label is used on modifiers). * full_label$STR: to override the full_label by this new one (full_label is used on modifiers).
* full_label: to override the label by the "full one". * full_label: to override the label by the "full one".
* full_width: to tell to create a field that span the full width. * full_width: to tell to create a field that span the full width.

View File

@ -86,9 +86,9 @@ group:Toolchange parameters with single extruder MM printers
filament_overrides_page filament_overrides_page
page:Custom G-code:cog page:Custom G-code:cog
group:nolabel:Start G-code group:no_title:Start G-code
setting:full_width:height$35:start_filament_gcode setting:full_width:height$35:start_filament_gcode
group:nolabel:End G-code group:no_title:End G-code
setting:full_width:height$35:end_filament_gcode setting:full_width:height$35:end_filament_gcode
page:Notes:note.png page:Notes:note.png

View File

@ -114,26 +114,26 @@ group:Other
setting:allow_empty_layers setting:allow_empty_layers
page:Infill:infill page:Infill:infill
group:title_width$8:Infill group:title_width$0:Infill
line:Sparse line:_
setting:width$5:label$_:sidetext_width$1:fill_density setting:label_left:label_width$6:label$Sparse:width$8:sidetext_width$1:fill_density
setting:label_width$1:label$_:fill_pattern setting:label_width$0:label$_:fill_pattern
setting:label$_:width$18:infill_connection setting:label$_:width$18:infill_connection
end_line end_line
line:_ line:_
setting:label$Connection length:label_width$20:sidetext_width$7:width$12:infill_anchor_max setting:label$Connection length:label_width$25:sidetext_width$7:width$12:infill_anchor_max
setting:label$Perimeter anchor:sidetext_width$7:width$12:infill_anchor setting:label$Perimeter anchor:sidetext_width$7:width$12:infill_anchor
end_line end_line
line:Solid line:_
setting:label_width$11:label$_:solid_fill_pattern setting:label_left:label_width$20:label$Solid:solid_fill_pattern
setting:label$_:width$18:infill_connection_solid setting:label$_:width$18:infill_connection_solid
end_line end_line
line:Top line:_
setting:label_width$11:label$_:top_fill_pattern setting:label_left:label_width$20:label$Top:top_fill_pattern
setting:label$_:width$18:infill_connection_top setting:label$_:width$18:infill_connection_top
end_line end_line
line:Bottom line:_
setting:label_width$11:label$_:bottom_fill_pattern setting:label_left:label_width$20:label$Bottom:bottom_fill_pattern
setting:label$_:width$18:infill_connection_bottom setting:label$_:width$18:infill_connection_bottom
end_line end_line
group:Reducing printing time group:Reducing printing time
@ -382,7 +382,7 @@ group:Post-processing script
setting:full_width:height$5:post_process setting:full_width:height$5:post_process
page:Notes:note page:Notes:note
group:nolabel:Notes group:no_title:Notes
setting:full_width:height$25:notes setting:full_width:height$25:notes
page:Dependencies:wrench page:Dependencies:wrench

View File

@ -226,7 +226,7 @@ group:Post-processing scripts
setting:full_width:height$5:post_process setting:full_width:height$5:post_process
page:Notes:note page:Notes:note
group:nolabel:Notes group:no_title:Notes
setting:full_width:height$25:notes setting:full_width:height$25:notes
page:Dependencies:wrench page:Dependencies:wrench

View File

@ -51,24 +51,24 @@ page:Custom G-code:cog
group: group:
setting:start_gcode_manual setting:start_gcode_manual
height:15 height:15
group:nolabel:Start G-code group:no_title:Start G-code
setting:full_width:start_gcode setting:full_width:start_gcode
group:nolabel:End G-code group:no_title:End G-code
setting:full_width:end_gcode setting:full_width:end_gcode
group:nolabel:Before layer change G-code group:no_title:Before layer change G-code
setting:full_width:before_layer_gcode setting:full_width:before_layer_gcode
group:nolabel:After layer change G-code group:no_title:After layer change G-code
setting:full_width:layer_gcode setting:full_width:layer_gcode
group:nolabel:Tool change G-code group:no_title:Tool change G-code
setting:full_width:toolchange_gcode setting:full_width:toolchange_gcode
group:nolabel:Between objects G-code (for sequential printing) group:no_title:Between objects G-code (for sequential printing)
setting:full_width:between_objects_gcode setting:full_width:between_objects_gcode
group:nolabel:Between extrusion role change G-code group:no_title:Between extrusion role change G-code
setting:full_width:feature_gcode setting:full_width:feature_gcode
height:0 height:0
page:Notes:note.png page:Notes:note.png
group:nolabel:Notes group:no_title:Notes
setting:full_width:height$25:printer_notes setting:full_width:height$25:printer_notes
page:Dependencies:wrench.png page:Dependencies:wrench.png

View File

@ -55,7 +55,7 @@ group:Print Host upload
build_printhost build_printhost
page:Notes:note.png page:Notes:note.png
group:nolabel:Notes group:no_title:Notes
setting:full_width:height$25:printer_notes setting:full_width:height$25:printer_notes
page:Dependencies:wrench.png page:Dependencies:wrench.png

View File

@ -20,7 +20,7 @@ group:label_width$19:Corrections
end_line end_line
page:Notes:note page:Notes:note
group:label_width$0:nolabel:Notes group:label_width$0:no_title:Notes
setting:full_width:height$25:material_notes setting:full_width:height$25:material_notes
page:Dependencies:wrench page:Dependencies:wrench

View File

@ -1828,6 +1828,8 @@ public:
int width = -1; int width = -1;
// Optional label width of the label (if in a line). // Optional label width of the label (if in a line).
int label_width = -1; int label_width = -1;
// Optional label alignement to the left instead of the right
bool aligned_label_left = false;
// Optional label width of the sidetext (if in a line). // Optional label width of the sidetext (if in a line).
int sidetext_width = -1; int sidetext_width = -1;
// <min, max> limit of a numeric input. // <min, max> limit of a numeric input.

View File

@ -98,7 +98,10 @@ void OG_CustomCtrl::init_ctrl_lines()
ctrl_lines.emplace_back(CtrlLine(height, this, line, false, opt_group->staticbox)); ctrl_lines.emplace_back(CtrlLine(height, this, line, false, opt_group->staticbox));
} }
else else
int i = 0; {
height = m_bmp_blinking_sz.GetHeight() + m_v_gap;
ctrl_lines.emplace_back(CtrlLine(height, this, line, opt_group->no_title, opt_group->staticbox));
}
} }
} }
@ -135,6 +138,9 @@ wxPoint OG_CustomCtrl::get_pos(const Line& line, Field* field_in/* = nullptr*/)
break; break;
} }
//round it to next m_em_unit
h_pos += (h_pos % m_em_unit == 0) ? 0 : m_em_unit - (h_pos % m_em_unit);
wxString label = line.label; wxString label = line.label;
if (opt_group->title_width != 0) if (opt_group->title_width != 0)
h_pos += opt_group->title_width * m_em_unit + m_h_gap; h_pos += opt_group->title_width * m_em_unit + m_h_gap;
@ -556,6 +562,9 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord v_pos)
const std::vector<Option>& option_set = og_line.get_options(); const std::vector<Option>& option_set = og_line.get_options();
//round it to next m_em_unit
h_pos += (h_pos % ctrl->m_em_unit == 0) ? 0 : ctrl->m_em_unit - (h_pos % ctrl->m_em_unit);
bool is_url_string = false; bool is_url_string = false;
if (ctrl->opt_group->title_width != 0 && !og_line.label.IsEmpty()) { if (ctrl->opt_group->title_width != 0 && !og_line.label.IsEmpty()) {
const wxColour* text_clr = (option_set.size() == 1 && field ? field->label_color() : og_line.full_Label_color); const wxColour* text_clr = (option_set.size() == 1 && field ? field->label_color() : og_line.full_Label_color);
@ -626,7 +635,7 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord v_pos)
is_url_string = false; is_url_string = false;
else if (opt == option_set.front()) else if (opt == option_set.front())
is_url_string = !suppress_hyperlinks && !og_line.label_path.IsEmpty(); is_url_string = !suppress_hyperlinks && !og_line.label_path.IsEmpty();
h_pos = draw_text(dc, wxPoint(h_pos, v_pos), label, field ? field->label_color() : nullptr, width, is_url_string, true); h_pos = draw_text(dc, wxPoint(h_pos, v_pos), label, field ? field->label_color() : nullptr, width, is_url_string, !field->m_opt.aligned_label_left);
} }
} }

View File

@ -91,7 +91,8 @@ class OptionsGroup {
public: public:
const bool staticbox {true}; const bool staticbox {true};
const wxString title; const wxString title;
size_t title_width = 20;// {200}; int title_width = 20;// {200};
bool no_title = false;
wxSizer* sizer {nullptr}; wxSizer* sizer {nullptr};
OG_CustomCtrl* custom_ctrl{ nullptr }; OG_CustomCtrl* custom_ctrl{ nullptr };
column_t extra_column {nullptr}; column_t extra_column {nullptr};

View File

@ -1592,15 +1592,18 @@ bool Tab::create_pages(std::string setting_type_name, int idx_page)
while (str.size() > 1 && (str.front() == ' ' || str.front() == '\t')) str = str.substr(1, str.size() - 1); while (str.size() > 1 && (str.front() == ' ' || str.front() == '\t')) str = str.substr(1, str.size() - 1);
while (str.size() > 1 && (str.back() == ' ' || str.back() == '\t')) str = str.substr(0, str.size() - 1); while (str.size() > 1 && (str.back() == ' ' || str.back() == '\t')) str = str.substr(0, str.size() - 1);
} }
bool nolabel = false; bool no_title = false;
for (int i = 1; i < params.size() - 1; i++) { for (int i = 1; i < params.size() - 1; i++) {
if (params[i] == "nolabel") if (params[i] == "nolabel")
{ {
nolabel = true; no_title = true;
std::cerr << "Warning: 'nolabel' is deprecated, please replace it by 'no_title' in your " << setting_type_name << " ui file";
} }
if (params[i] == "no_title")
no_title = true;
} }
current_group = current_page->new_optgroup(_(params.back()), nolabel?0:-1); current_group = current_page->new_optgroup(_(params.back()), no_title);
for (int i = 1; i < params.size() - 1; i++) { for (int i = 1; i < params.size() - 1; i++) {
if (boost::starts_with(params[i], "title_width$")) { if (boost::starts_with(params[i], "title_width$")) {
current_group->title_width = atoi(params[i].substr(12, params[i].size() - 12).c_str()); current_group->title_width = atoi(params[i].substr(12, params[i].size() - 12).c_str());
@ -1835,6 +1838,9 @@ bool Tab::create_pages(std::string setting_type_name, int idx_page)
else if (boost::starts_with(params[i], "label_width$")) { else if (boost::starts_with(params[i], "label_width$")) {
option.opt.label_width = atoi(params[i].substr(12, params[i].size() - 12).c_str()); option.opt.label_width = atoi(params[i].substr(12, params[i].size() - 12).c_str());
} }
else if (boost::starts_with(params[i], "label_left")) {
option.opt.aligned_label_left = true;
}
else if (boost::starts_with(params[i], "sidetext$")) else if (boost::starts_with(params[i], "sidetext$"))
{ {
option.opt.sidetext = (params[i].substr(9, params[i].size() - 9)); option.opt.sidetext = (params[i].substr(9, params[i].size() - 9));
@ -4179,13 +4185,14 @@ 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_title_width /*= -1*/) ConfigOptionsGroupShp Page::new_optgroup(const wxString& title, bool no_title /*= false*/)
{ {
//! config_ have to be "right" //! config_ have to be "right"
ConfigOptionsGroupShp optgroup = std::make_shared<ConfigOptionsGroup>(m_parent, title, m_config, true); ConfigOptionsGroupShp optgroup = std::make_shared<ConfigOptionsGroup>(m_parent, title, m_config, true);
optgroup->set_config_category(m_title.ToStdString()); optgroup->set_config_category(m_title.ToStdString());
if (noncommon_title_width >= 0) optgroup->no_title = no_title;
optgroup->title_width = noncommon_title_width; if (no_title)
optgroup->title_width = 0;
#ifdef __WXOSX__ #ifdef __WXOSX__
auto tab = parent()->GetParent()->GetParent();// GetParent()->GetParent(); auto tab = parent()->GetParent()->GetParent();// GetParent()->GetParent();
@ -4294,7 +4301,7 @@ void TabSLAMaterial::build()
} }
page = add_options_page(L("Notes"), "note"); page = add_options_page(L("Notes"), "note");
optgroup = page->new_optgroup(L("Notes"), 0); optgroup = page->new_optgroup(L("Notes"), true);
optgroup->title_width = 0; optgroup->title_width = 0;
Option option = optgroup->get_option("material_notes"); Option option = optgroup->get_option("material_notes");
option.opt.full_width = true; option.opt.full_width = true;

View File

@ -78,7 +78,7 @@ public:
void refresh(); void refresh();
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_title_width = -1); ConfigOptionsGroupShp new_optgroup(const wxString& title, bool no_title = false);
bool set_item_colour(const wxColour *clr) { bool set_item_colour(const wxColour *clr) {
if (m_item_color != clr) { if (m_item_color != clr) {