From e92304c6ebdc302a6b3287e65a1605aa40f8ba62 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Tue, 16 Jan 2024 14:33:49 +0100 Subject: [PATCH] TextInput: Added possibility to set function on DropDown icon --- src/slic3r/GUI/Search.cpp | 2 ++ src/slic3r/GUI/Widgets/TextInput.cpp | 7 +++++++ src/slic3r/GUI/Widgets/TextInput.hpp | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/src/slic3r/GUI/Search.cpp b/src/slic3r/GUI/Search.cpp index 1b0b854e58..e54e0430a4 100644 --- a/src/slic3r/GUI/Search.cpp +++ b/src/slic3r/GUI/Search.cpp @@ -533,6 +533,8 @@ void OptionsSearcher::set_search_input(TextInput* input_ctrl) event.Skip(); update_dialog_position(); }); + + search_input->SetOnDropDownIcon([](){ GUI::wxGetApp().show_search_dialog(); }); } void OptionsSearcher::add_key(const std::string& opt_key, Preset::Type type, const wxString& group, const wxString& category) diff --git a/src/slic3r/GUI/Widgets/TextInput.cpp b/src/slic3r/GUI/Widgets/TextInput.cpp index 7044ecdfdd..b8ca306db8 100644 --- a/src/slic3r/GUI/Widgets/TextInput.cpp +++ b/src/slic3r/GUI/Widgets/TextInput.cpp @@ -86,6 +86,12 @@ void TextInput::Create(wxWindow * parent, if (!icon.IsEmpty()) { this->drop_down_icon = ScalableBitmap(this, icon.ToStdString(), 16); + this->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& event) { + const wxPoint pos = event.GetLogicalPosition(wxClientDC(this)); + if (OnClickDropDownIcon && dd_icon_rect.Contains(pos)) + OnClickDropDownIcon(); + event.Skip(); + }); } messureSize(); } @@ -295,6 +301,7 @@ void TextInput::render(wxDC& dc) wxSize szIcon = drop_down_icon.GetSize(); pt_r.x -= szIcon.x + 2; pt_r.y = (size.y - szIcon.y) / 2; + dd_icon_rect = wxRect(pt_r, szIcon); dc.DrawBitmap(drop_down_icon.get_bitmap(), pt_r); } diff --git a/src/slic3r/GUI/Widgets/TextInput.hpp b/src/slic3r/GUI/Widgets/TextInput.hpp index 171ab3b80f..bcdd4e26a3 100644 --- a/src/slic3r/GUI/Widgets/TextInput.hpp +++ b/src/slic3r/GUI/Widgets/TextInput.hpp @@ -17,6 +17,9 @@ class TextInput : public wxNavigationEnabled static const int TextInputWidth = 200; static const int TextInputHeight = 50; + wxRect dd_icon_rect; + std::function OnClickDropDownIcon{ nullptr }; + public: TextInput(); @@ -73,6 +76,8 @@ public: void SysColorsChanged(); + void SetOnDropDownIcon(std::function click_drop_down_icon_fn) { OnClickDropDownIcon = click_drop_down_icon_fn; } + protected: virtual void OnEdit() {}