ENH: support nozzle info, support new popup style

jira: [STUDIO-11974]
Change-Id: I8d80338d5b90bcca824ea46be2066f1bfb7aa10a
(cherry picked from commit 8c8b8d63b97e8f6a8423456f88e9a5e0e3d9f7ab)
This commit is contained in:
xin.zhang
2025-05-07 12:00:07 +08:00
committed by Noisyfox
parent 45936b6de8
commit 54c402aec6
15 changed files with 175 additions and 58 deletions

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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{};

View File

@@ -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);

View File

@@ -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);