Custom control : Fixed color of the colored label, associated with option, which doesn't have a corresponded field
This commit is contained in:
parent
7022fb0891
commit
534a2f5d33
@ -32,7 +32,6 @@ OG_CustomCtrl::OG_CustomCtrl( wxWindow* parent,
|
|||||||
m_bmp_mode_expert = ScalableBitmap(this, "mode_expert" , wxOSX ? 10 : 12);
|
m_bmp_mode_expert = ScalableBitmap(this, "mode_expert" , wxOSX ? 10 : 12);
|
||||||
m_bmp_blinking = ScalableBitmap(this, "search_blink");
|
m_bmp_blinking = ScalableBitmap(this, "search_blink");
|
||||||
|
|
||||||
m_border = lround(0.2 * wxGetApp().em_unit());
|
|
||||||
m_v_gap = lround(1.0 * wxGetApp().em_unit());
|
m_v_gap = lround(1.0 * wxGetApp().em_unit());
|
||||||
m_h_gap = lround(0.2 * wxGetApp().em_unit());
|
m_h_gap = lround(0.2 * wxGetApp().em_unit());
|
||||||
|
|
||||||
@ -115,7 +114,7 @@ wxPoint OG_CustomCtrl::get_pos(const Line& line, Field* field_in/* = nullptr*/)
|
|||||||
|
|
||||||
wxString label = line.label;
|
wxString label = line.label;
|
||||||
if (m_og->label_width != 0 && !label.IsEmpty())
|
if (m_og->label_width != 0 && !label.IsEmpty())
|
||||||
h_pos += m_og->label_width * wxGetApp().em_unit();
|
h_pos += m_og->label_width * wxGetApp().em_unit() + m_h_gap;
|
||||||
|
|
||||||
if (line.widget)
|
if (line.widget)
|
||||||
break;
|
break;
|
||||||
@ -140,7 +139,9 @@ wxPoint OG_CustomCtrl::get_pos(const Line& line, Field* field_in/* = nullptr*/)
|
|||||||
_CTX(option.label, "Layers") : _(option.label);
|
_CTX(option.label, "Layers") : _(option.label);
|
||||||
label += ":";
|
label += ":";
|
||||||
|
|
||||||
h_pos += GetTextExtent(label).x + m_h_gap;
|
wxPaintDC dc(this);
|
||||||
|
dc.SetFont(m_font);
|
||||||
|
h_pos += dc.GetMultiLineTextExtent(label).x + m_h_gap;
|
||||||
}
|
}
|
||||||
h_pos += 3 * (m_bmp_blinking.bmp().GetWidth() + m_h_gap);
|
h_pos += 3 * (m_bmp_blinking.bmp().GetWidth() + m_h_gap);
|
||||||
|
|
||||||
@ -153,7 +154,7 @@ wxPoint OG_CustomCtrl::get_pos(const Line& line, Field* field_in/* = nullptr*/)
|
|||||||
|
|
||||||
// add sidetext if any
|
// add sidetext if any
|
||||||
if (!option.sidetext.empty() || m_og->sidetext_width > 0)
|
if (!option.sidetext.empty() || m_og->sidetext_width > 0)
|
||||||
h_pos += m_og->sidetext_width * wxGetApp().em_unit();
|
h_pos += m_og->sidetext_width * wxGetApp().em_unit() + m_h_gap;
|
||||||
|
|
||||||
if (opt.opt_id != option_set.back().opt_id) //! istead of (opt != option_set.back())
|
if (opt.opt_id != option_set.back().opt_id) //! istead of (opt != option_set.back())
|
||||||
h_pos += lround(0.6 * wxGetApp().em_unit());
|
h_pos += lround(0.6 * wxGetApp().em_unit());
|
||||||
@ -255,8 +256,10 @@ void OG_CustomCtrl::CtrlLine::render(wxDC& dc, wxCoord v_pos)
|
|||||||
const std::vector<Option>& option_set = m_og_line.get_options();
|
const std::vector<Option>& option_set = m_og_line.get_options();
|
||||||
|
|
||||||
wxString label = m_og_line.label;
|
wxString label = m_og_line.label;
|
||||||
if (m_ctrl->m_og->label_width != 0 && !label.IsEmpty())
|
if (m_ctrl->m_og->label_width != 0 && !label.IsEmpty()) {
|
||||||
h_pos = draw_text(dc, wxPoint(h_pos, v_pos), label+":", (option_set.size() == 1 && field ? field->label_color() : m_og_line.full_Label_color), m_ctrl->m_og->label_width*wxGetApp().em_unit());
|
const wxColour* text_clr = (option_set.size() == 1 && field ? field->label_color() : m_og_line.full_Label_color);
|
||||||
|
h_pos = draw_text(dc, wxPoint(h_pos, v_pos), label + ":", text_clr, m_ctrl->m_og->label_width * wxGetApp().em_unit());
|
||||||
|
}
|
||||||
|
|
||||||
// If there's a widget, build it and add the result to the sizer.
|
// If there's a widget, build it and add the result to the sizer.
|
||||||
if (m_og_line.widget != nullptr)
|
if (m_og_line.widget != nullptr)
|
||||||
@ -322,9 +325,9 @@ wxCoord OG_CustomCtrl::CtrlLine::draw_mode_bmp(wxDC& dc, wxCoord v_pos)
|
|||||||
|
|
||||||
wxCoord y_draw = v_pos + lround((m_height - bmp.GetHeight()) / 2);
|
wxCoord y_draw = v_pos + lround((m_height - bmp.GetHeight()) / 2);
|
||||||
|
|
||||||
dc.DrawBitmap(bmp, m_ctrl->m_border, y_draw);
|
dc.DrawBitmap(bmp, 0, y_draw);
|
||||||
|
|
||||||
return m_ctrl->m_border + bmp.GetWidth() + m_ctrl->m_h_gap;
|
return bmp.GetWidth() + m_ctrl->m_h_gap;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxCoord OG_CustomCtrl::CtrlLine::draw_text(wxDC& dc, wxPoint pos, const wxString& text, const wxColour* color, int width)
|
wxCoord OG_CustomCtrl::CtrlLine::draw_text(wxDC& dc, wxPoint pos, const wxString& text, const wxColour* color, int width)
|
||||||
|
@ -79,7 +79,6 @@ public:
|
|||||||
int get_height(const Line& line);
|
int get_height(const Line& line);
|
||||||
|
|
||||||
OptionsGroup* m_og;
|
OptionsGroup* m_og;
|
||||||
int m_border;
|
|
||||||
int m_v_gap;
|
int m_v_gap;
|
||||||
int m_h_gap;
|
int m_h_gap;
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ public:
|
|||||||
wxString label_tooltip {wxString("")};
|
wxString label_tooltip {wxString("")};
|
||||||
size_t full_width {0};
|
size_t full_width {0};
|
||||||
wxStaticText** full_Label {nullptr};
|
wxStaticText** full_Label {nullptr};
|
||||||
wxColor* full_Label_color {nullptr};
|
wxColour* full_Label_color {nullptr};
|
||||||
widget_t widget {nullptr};
|
widget_t widget {nullptr};
|
||||||
std::function<wxWindow*(wxWindow*)> near_label_widget{ nullptr };
|
std::function<wxWindow*(wxWindow*)> near_label_widget{ nullptr };
|
||||||
|
|
||||||
|
@ -492,6 +492,10 @@ void Tab::update_labels_colour()
|
|||||||
label->SetForegroundColour(*color);
|
label->SetForegroundColour(*color);
|
||||||
label->Refresh(true);
|
label->Refresh(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_colored_Label_colors.find(opt.first) != m_colored_Label_colors.end())
|
||||||
|
*m_colored_Label_colors.at(opt.first) = *color;
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -528,13 +532,17 @@ void Tab::decorate()
|
|||||||
wxStaticText* label = nullptr;
|
wxStaticText* label = nullptr;
|
||||||
Field* field = nullptr;
|
Field* field = nullptr;
|
||||||
|
|
||||||
if (opt.first == "bed_shape" || opt.first == "filament_ramming_parameters" ||
|
wxColour* colored_label_clr = nullptr;
|
||||||
opt.first == "compatible_prints" || opt.first == "compatible_printers")
|
|
||||||
label = (m_colored_Labels.find(opt.first) == m_colored_Labels.end()) ? nullptr : m_colored_Labels.at(opt.first);
|
|
||||||
|
|
||||||
if (!label)
|
if (opt.first == "bed_shape" || opt.first == "filament_ramming_parameters" ||
|
||||||
|
opt.first == "compatible_prints" || opt.first == "compatible_printers") {
|
||||||
|
label = (m_colored_Labels.find(opt.first) == m_colored_Labels.end()) ? nullptr : m_colored_Labels.at(opt.first);
|
||||||
|
colored_label_clr = (m_colored_Label_colors.find(opt.first) == m_colored_Label_colors.end()) ? nullptr : m_colored_Label_colors.at(opt.first);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!label && !colored_label_clr)
|
||||||
field = get_field(opt.first);
|
field = get_field(opt.first);
|
||||||
if (!label && !field)
|
if (!label && !colored_label_clr && !field)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
bool is_nonsys_value = false;
|
bool is_nonsys_value = false;
|
||||||
@ -572,6 +580,11 @@ void Tab::decorate()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (colored_label_clr) {
|
||||||
|
*colored_label_clr = *color;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
field->m_is_nonsys_value = is_nonsys_value;
|
field->m_is_nonsys_value = is_nonsys_value;
|
||||||
field->m_is_modified_value = is_modified_value;
|
field->m_is_modified_value = is_modified_value;
|
||||||
field->set_undo_bitmap(icon);
|
field->set_undo_bitmap(icon);
|
||||||
@ -3498,6 +3511,10 @@ void Tab::create_line_with_widget(ConfigOptionsGroup* optgroup, const std::strin
|
|||||||
|
|
||||||
m_colored_Labels[opt_key] = nullptr;
|
m_colored_Labels[opt_key] = nullptr;
|
||||||
line.full_Label = &m_colored_Labels[opt_key];
|
line.full_Label = &m_colored_Labels[opt_key];
|
||||||
|
|
||||||
|
m_colored_Label_colors[opt_key] = &m_default_text_clr;
|
||||||
|
line.full_Label_color = m_colored_Label_colors[opt_key];
|
||||||
|
|
||||||
optgroup->append_line(line);
|
optgroup->append_line(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,6 +255,10 @@ public:
|
|||||||
// Used for options which don't have corresponded field
|
// Used for options which don't have corresponded field
|
||||||
std::map<std::string, wxStaticText*> m_colored_Labels;
|
std::map<std::string, wxStaticText*> m_colored_Labels;
|
||||||
|
|
||||||
|
// map of option name -> wxColour (color of the colored label, associated with option)
|
||||||
|
// Used for options which don't have corresponded field
|
||||||
|
std::map<std::string, wxColour*> m_colored_Label_colors;
|
||||||
|
|
||||||
// map of option name -> BlinkingBitmap (blinking ikon, associated with option)
|
// map of option name -> BlinkingBitmap (blinking ikon, associated with option)
|
||||||
// Used for options which don't have corresponded field
|
// Used for options which don't have corresponded field
|
||||||
std::map<std::string, BlinkingBitmap*> m_blinking_ikons;
|
std::map<std::string, BlinkingBitmap*> m_blinking_ikons;
|
||||||
|
Loading…
Reference in New Issue
Block a user