69 lines
2.7 KiB
C++
69 lines
2.7 KiB
C++
#ifndef slic3r_GUI_wxExtensions_hpp_
|
|
#define slic3r_GUI_wxExtensions_hpp_
|
|
|
|
#include <wx/checklst.h>
|
|
#include <wx/combo.h>
|
|
#include <wx/dataview.h>
|
|
|
|
class wxCheckListBoxComboPopup : public wxCheckListBox, public wxComboPopup
|
|
{
|
|
static const unsigned int DefaultWidth;
|
|
static const unsigned int DefaultHeight;
|
|
static const unsigned int DefaultItemHeight;
|
|
|
|
wxString m_text;
|
|
|
|
// Events sent on mouseclick are quite complex. Function OnListBoxSelection is supposed to pass the event to the checkbox, which works fine on
|
|
// Win. On OSX and Linux the events are generated differently - clicking on the checkbox square generates the event twice (and the square
|
|
// therefore seems not to respond).
|
|
// This enum is meant to save current state of affairs, i.e., if the event forwarding is ok to do or not. It is only used on Linux
|
|
// and OSX by some #ifdefs. It also stores information whether OnListBoxSelection is supposed to change the checkbox status,
|
|
// or if it changed status on its own already (which happens when the square is clicked). More comments in OnCheckListBox(...)
|
|
// There indeed is a better solution, maybe making a custom event used for the event passing to distinguish the original and passed message
|
|
// and blocking one of them on OSX and Linux. Feel free to refactor, but carefully test on all platforms.
|
|
enum class OnCheckListBoxFunction{
|
|
FreeToProceed,
|
|
RefuseToProceed,
|
|
WasRefusedLastTime
|
|
} m_check_box_events_status = OnCheckListBoxFunction::FreeToProceed;
|
|
|
|
|
|
public:
|
|
virtual bool Create(wxWindow* parent);
|
|
virtual wxWindow* GetControl();
|
|
virtual void SetStringValue(const wxString& value);
|
|
virtual wxString GetStringValue() const;
|
|
virtual wxSize GetAdjustedSize(int minWidth, int prefHeight, int maxHeight);
|
|
|
|
virtual void OnKeyEvent(wxKeyEvent& evt);
|
|
|
|
void OnCheckListBox(wxCommandEvent& evt);
|
|
void OnListBoxSelection(wxCommandEvent& evt);
|
|
};
|
|
|
|
|
|
// *** wxDataViewTreeCtrlComboBox ***
|
|
|
|
class wxDataViewTreeCtrlComboPopup: public wxDataViewTreeCtrl, public wxComboPopup
|
|
{
|
|
static const unsigned int DefaultWidth;
|
|
static const unsigned int DefaultHeight;
|
|
static const unsigned int DefaultItemHeight;
|
|
|
|
wxString m_text;
|
|
int m_cnt_open_items{0};
|
|
|
|
public:
|
|
virtual bool Create(wxWindow* parent);
|
|
virtual wxWindow* GetControl() { return this; }
|
|
virtual void SetStringValue(const wxString& value) { m_text = value; }
|
|
virtual wxString GetStringValue() const { return m_text; }
|
|
// virtual wxSize GetAdjustedSize(int minWidth, int prefHeight, int maxHeight);
|
|
|
|
virtual void OnKeyEvent(wxKeyEvent& evt);
|
|
void OnDataViewTreeCtrlSelection(wxCommandEvent& evt);
|
|
void SetItemsCnt(int cnt) { m_cnt_open_items = cnt; }
|
|
};
|
|
|
|
#endif // slic3r_GUI_wxExtensions_hpp_
|