#ifndef slic3r_GUI_DropDown_hpp_ #define slic3r_GUI_DropDown_hpp_ #include #include #include "../wxExtensions.hpp" #include "StateHandler.hpp" #include "PopupWindow.hpp" #define DD_NO_CHECK_ICON 0x0001 #define DD_NO_TEXT 0x0002 #define DD_STYLE_MASK 0x0003 wxDECLARE_EVENT(EVT_DISMISS, wxCommandEvent); class DropDown : public PopupWindow { std::vector & texts; std::vector & tips; std::vector & icons; bool need_sync = false; int selection = -1; int hover_item = -1; double radius = 0; bool use_content_width = false; bool limit_max_content_width = false; bool align_icon = false; bool text_off = false; wxSize textSize; wxSize iconSize; wxSize rowSize; StateHandler state_handler; StateColor text_color; StateColor border_color; StateColor selector_border_color; StateColor selector_background_color; ScalableBitmap check_bitmap; bool pressedDown = false; boost::posix_time::ptime dismissTime; wxPoint offset; // x not used wxPoint dragStart; public: DropDown(std::vector &texts, std::vector &tips, std::vector &icons); DropDown(wxWindow * parent, std::vector &texts, std::vector &tips, std::vector &icons, long style = 0); void Create(wxWindow * parent, long style = 0); public: void Invalidate(bool clear = false); int GetSelection() const { return selection; } void SetSelection(int n); wxString GetValue() const; void SetValue(const wxString &value); public: void SetCornerRadius(double radius); void SetBorderColor(StateColor const & color); void SetSelectorBorderColor(StateColor const & color); void SetTextColor(StateColor const &color); void SetSelectorBackgroundColor(StateColor const &color); void SetUseContentWidth(bool use, bool limit_max_content_width = false); void SetAlignIcon(bool align); public: void Rescale(); bool HasDismissLongTime(); protected: void OnDismiss() override; private: void paintEvent(wxPaintEvent& evt); void paintNow(); void render(wxDC& dc); friend class ComboBox; void messureSize(); void autoPosition(); // some useful events void mouseDown(wxMouseEvent& event); void mouseReleased(wxMouseEvent &event); void mouseCaptureLost(wxMouseCaptureLostEvent &event); void mouseMove(wxMouseEvent &event); void mouseWheelMoved(wxMouseEvent &event); void sendDropDownEvent(); DECLARE_EVENT_TABLE() }; #endif // !slic3r_GUI_DropDown_hpp_