mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-11 11:07:40 +00:00
ENH: support nozzle info, support new popup style
jira: [STUDIO-11974] Change-Id: I8d80338d5b90bcca824ea46be2066f1bfb7aa10a (cherry picked from commit 8c8b8d63b97e8f6a8423456f88e9a5e0e3d9f7ab)
This commit is contained in:
@@ -87,10 +87,17 @@ void ComboBox::SetSelection(int n)
|
||||
return;
|
||||
drop.SetSelection(n);
|
||||
SetLabel(drop.GetValue());
|
||||
if (drop.selection >= 0 && drop.iconSize.y > 0 && items[drop.selection].icon.IsOk())
|
||||
SetIcon(items[drop.selection].icon);
|
||||
if (drop.selection >= 0 && drop.iconSize.y > 0 && items[drop.selection].icon_textctrl.IsOk())
|
||||
SetIcon(items[drop.selection].icon_textctrl);
|
||||
else
|
||||
SetIcon("drop_down");
|
||||
|
||||
if (drop.selection >= 0) {
|
||||
SetStaticTips(items[drop.selection].text_static_tips, wxNullBitmap);
|
||||
} else {
|
||||
SetStaticTips(wxEmptyString, wxNullBitmap);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void ComboBox::SelectAndNotify(int n) {
|
||||
@@ -113,10 +120,16 @@ void ComboBox::SetValue(const wxString &value)
|
||||
{
|
||||
drop.SetValue(value);
|
||||
SetLabel(value);
|
||||
if (drop.selection >= 0 && drop.iconSize.y > 0 && items[drop.selection].icon.IsOk())
|
||||
SetIcon(items[drop.selection].icon);
|
||||
if (drop.selection >= 0 && drop.iconSize.y > 0 && items[drop.selection].icon_textctrl.IsOk())
|
||||
SetIcon(items[drop.selection].icon_textctrl);
|
||||
else
|
||||
SetIcon("drop_down");
|
||||
|
||||
if (drop.selection >= 0) {
|
||||
SetStaticTips(items[drop.selection].text_static_tips, wxNullBitmap);
|
||||
} else {
|
||||
SetStaticTips(wxEmptyString, wxNullBitmap);
|
||||
}
|
||||
}
|
||||
|
||||
void ComboBox::SetLabel(const wxString &value)
|
||||
@@ -191,13 +204,20 @@ int ComboBox::Append(const wxString &text,
|
||||
|
||||
int ComboBox::Append(const wxString &text, const wxBitmap &bitmap, const wxString &group, void *clientData)
|
||||
{
|
||||
Item item{text, bitmap, clientData, group};
|
||||
Item item{text, wxEmptyString, bitmap, bitmap, clientData, group};
|
||||
items.push_back(item);
|
||||
SetClientDataType(wxClientData_Void);
|
||||
drop.Invalidate();
|
||||
return items.size() - 1;
|
||||
}
|
||||
|
||||
int ComboBox::SetItems(const std::vector<DropDown::Item>& the_items)
|
||||
{
|
||||
items = the_items;
|
||||
drop.Invalidate();
|
||||
return items.size() - 1;
|
||||
}
|
||||
|
||||
void ComboBox::DoClear()
|
||||
{
|
||||
SetIcon("drop_down");
|
||||
@@ -260,7 +280,7 @@ int ComboBox::DoInsertItems(const wxArrayStringsAdapter &items,
|
||||
{
|
||||
if (pos > this->items.size()) return -1;
|
||||
for (int i = 0; i < items.GetCount(); ++i) {
|
||||
Item item { items[i], wxNullBitmap, clientData ? clientData[i] : NULL };
|
||||
Item item { items[i], wxEmptyString, wxNullBitmap, wxNullBitmap, clientData ? clientData[i] : NULL };
|
||||
this->items.insert(this->items.begin() + pos, item);
|
||||
++pos;
|
||||
}
|
||||
|
||||
@@ -40,6 +40,8 @@ public:
|
||||
|
||||
int Append(const wxString &item, const wxBitmap &bitmap, const wxString &group, void *clientData = nullptr);
|
||||
|
||||
int SetItems(const std::vector<DropDown::Item>& the_items);
|
||||
|
||||
void set_replace_text(wxString text, wxString image_name);
|
||||
unsigned int GetCount() const override;
|
||||
|
||||
|
||||
@@ -19,7 +19,9 @@ public:
|
||||
struct Item
|
||||
{
|
||||
wxString text;
|
||||
wxString text_static_tips;// display static tips for TextInput.eg.PrinterInfoBox
|
||||
wxBitmap icon;
|
||||
wxBitmap icon_textctrl;// display icon for TextInput.eg.PrinterInfoBox
|
||||
void * data{nullptr};
|
||||
wxString group{};
|
||||
wxString alias{};
|
||||
|
||||
@@ -96,6 +96,14 @@ void TextInput::SetLabel(const wxString& label)
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void TextInput::SetStaticTips(const wxString& tips, const wxBitmap& bitmap)
|
||||
{
|
||||
static_tips = tips;
|
||||
static_tips_icon = bitmap;
|
||||
messureSize();
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void TextInput::SetIcon(const wxBitmap &icon)
|
||||
{
|
||||
this->icon = ScalableBitmap();
|
||||
@@ -229,7 +237,7 @@ void TextInput::render(wxDC& dc)
|
||||
pt.x = (size.x - (szIcon.x + 0 + labelSize.x)) / 2;
|
||||
}
|
||||
dc.DrawBitmap(icon.bmp(), pt);
|
||||
pt.x += szIcon.x + 0;
|
||||
pt.x += (szIcon.x + szIcon.x * 0.2);
|
||||
}
|
||||
if (icon_1.bmp().IsOk()) {
|
||||
wxSize szIcon = icon_1.GetBmpSize();
|
||||
@@ -244,21 +252,57 @@ void TextInput::render(wxDC& dc)
|
||||
}
|
||||
auto text = wxWindow::GetLabel();
|
||||
if (!text.IsEmpty()) {
|
||||
wxSize textSize = text_ctrl->GetSize();
|
||||
if (align_right || align_center) {
|
||||
if (pt.x + labelSize.x + 5 > size.x)
|
||||
text = wxControl::Ellipsize(text, dc, wxELLIPSIZE_END, size.x - pt.x - 5);
|
||||
pt.y = (size.y - labelSize.y) / 2;
|
||||
if (static_tips.IsEmpty()) {
|
||||
wxSize textSize = text_ctrl->GetSize();
|
||||
if (align_right || align_center)
|
||||
{
|
||||
if (pt.x + labelSize.x + 5 > size.x)
|
||||
text = wxControl::Ellipsize(text, dc, wxELLIPSIZE_END, size.x - pt.x - 5);
|
||||
pt.y = (size.y - labelSize.y) / 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
pt.x += textSize.x;
|
||||
pt.y = (size.y + textSize.y) / 2 - labelSize.y;
|
||||
}
|
||||
dc.SetTextForeground(label_color.colorForStates(states));
|
||||
if(align_right)
|
||||
dc.SetFont(GetFont());
|
||||
else
|
||||
dc.SetFont(Label::Body_12);
|
||||
dc.DrawText(text, pt);
|
||||
} else {
|
||||
pt.x += textSize.x;
|
||||
pt.y = (size.y + textSize.y) / 2 - labelSize.y;
|
||||
}
|
||||
dc.SetTextForeground(label_color.colorForStates(states));
|
||||
if(align_right)
|
||||
wxSize textSize = text_ctrl->GetSize();
|
||||
if (align_right || align_center) {
|
||||
if (pt.x + labelSize.x + 5 > size.x)
|
||||
text = wxControl::Ellipsize(text, dc, wxELLIPSIZE_END, size.x - pt.x - 5);
|
||||
pt.y = (size.y - labelSize.y - static_tips_size.y - 8) / 2;
|
||||
} else {
|
||||
pt.x += textSize.x;
|
||||
pt.y = (size.y - labelSize.y - static_tips_size.y - 8) / 2;
|
||||
}
|
||||
dc.SetTextForeground(label_color.colorForStates(states));
|
||||
if(align_right)
|
||||
dc.SetFont(GetFont());
|
||||
else
|
||||
dc.SetFont(Label::Body_12);
|
||||
dc.DrawText(text, pt);
|
||||
|
||||
if (align_right || align_center) {
|
||||
if (pt.x + static_tips_size.x + 5 > size.x) {
|
||||
text = wxControl::Ellipsize(static_tips, dc, wxELLIPSIZE_END, size.x - pt.x - 5);
|
||||
}
|
||||
|
||||
pt.y += (labelSize.y + 8);
|
||||
} else {
|
||||
pt.x += static_tips_size.x;
|
||||
pt.y += (labelSize.y + 8);
|
||||
}
|
||||
|
||||
dc.SetTextForeground(wxColour(144, 144, 144));
|
||||
dc.SetFont(GetFont());
|
||||
else
|
||||
dc.SetFont(Label::Body_12);
|
||||
dc.DrawText(text, pt);
|
||||
dc.DrawText(static_tips, pt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -273,10 +317,19 @@ void TextInput::messureSize()
|
||||
dc.SetFont(Label::Body_12);
|
||||
labelSize = dc.GetTextExtent(wxWindow::GetLabel());
|
||||
wxSize textSize = text_ctrl->GetSize();
|
||||
|
||||
if (!static_tips.empty()) {
|
||||
static_tips_size = dc.GetTextExtent(static_tips);
|
||||
textSize.x = std::max(labelSize.GetWidth(), static_tips_size.GetWidth());
|
||||
textSize.y += static_tips_size.y;
|
||||
textSize.y += 8;
|
||||
}
|
||||
|
||||
int h = textSize.y + 8;
|
||||
if (size.y < h) {
|
||||
size.y = h;
|
||||
}
|
||||
|
||||
wxSize minSize = size;
|
||||
minSize.x = GetMinWidth();
|
||||
SetMinSize(minSize);
|
||||
|
||||
@@ -14,6 +14,10 @@ class TextInput : public wxNavigationEnabled<StaticBox>
|
||||
StateColor text_color;
|
||||
wxTextCtrl * text_ctrl;
|
||||
|
||||
wxString static_tips;
|
||||
wxSize static_tips_size;
|
||||
wxBitmap static_tips_icon;
|
||||
|
||||
static const int TextInputWidth = 200;
|
||||
static const int TextInputHeight = 50;
|
||||
|
||||
@@ -41,8 +45,9 @@ public:
|
||||
|
||||
void SetLabel(const wxString& label);
|
||||
|
||||
void SetIcon(const wxBitmap & icon);
|
||||
void SetStaticTips(const wxString& tips, const wxBitmap& bitmap);
|
||||
|
||||
void SetIcon(const wxBitmap & icon);
|
||||
void SetIcon(const wxString & icon);
|
||||
|
||||
void SetIcon_1(const wxString &icon);
|
||||
|
||||
Reference in New Issue
Block a user