OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
CheckList Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Widgets/CheckList.hpp>

Inheritance diagram for CheckList:
Collaboration diagram for CheckList:

Public Member Functions

 CheckList (wxWindow *parent, const wxArrayString &choices=wxArrayString(), long scroll_style=wxVSCROLL)
wxArrayInt GetSelections ()
void SetSelections (wxArrayInt sel_array)
void Check (int i, bool checked)
bool IsChecked (int i)
void Filter (const wxString &filterText)
void SelectAll (bool value)
void SelectVisible (bool value)

Private Member Functions

void ShowMenu (wxMouseEvent &e)

Private Attributes

std::vector< wxCheckBox * > m_checks
int m_list_size
bool m_first_load
wxBoxSizer * w_sizer
wxPanel * f_bar
wxBoxSizer * f_sizer
TextInput * m_filter_box
wxTextCtrl * m_filter_ctrl
wxBoxSizer * fb_sizer
wxStaticBitmap * m_menu_button
wxScrolledWindow * m_scroll_area
wxBoxSizer * s_sizer
wxStaticText * m_info
wxString m_info_nonsel
wxString m_info_allsel
wxString m_info_empty
ScalableBitmap m_search
ScalableBitmap m_menu

Detailed Description

Constructor & Destructor Documentation

◆ CheckList()

CheckList::CheckList ( wxWindow * parent,
const wxArrayString & choices = wxArrayString(),
long scroll_style = wxVSCROLL )
25 : wxWindow(parent, wxID_ANY)
26 , m_search(this, "search", 16)
27 , m_menu(this, "filter", 16)
28 , m_first_load(true)
29{
30 Freeze();
31 w_sizer = new wxBoxSizer(wxVERTICAL);
32
33 f_sizer = new wxBoxSizer(wxHORIZONTAL);
34 f_bar = new wxPanel(this, wxID_ANY);
35 f_bar->SetBackgroundColour(parent->GetBackgroundColour());
36 m_filter_box = new TextInput(f_bar, "", "", "", wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER);
37 m_filter_box->SetIcon(m_search.bmp());
38 m_filter_box->SetMinSize(FromDIP(wxSize(200,24)));
39 m_filter_box->SetSize(FromDIP(wxSize(-1,24)));
40 m_filter_box->SetFocus();
41 m_filter_ctrl = m_filter_box->GetTextCtrl();
43 m_filter_ctrl->SetSize(wxSize(-1, FromDIP(16))); // Centers text vertically
44 m_filter_ctrl->SetHint(_L("Type to filter..."));
45 m_filter_ctrl->Bind(wxEVT_TEXT, [this](auto &e) {Filter(m_filter_ctrl->GetValue());});
46 m_filter_ctrl->Bind(wxEVT_TEXT_ENTER, [this](auto &e) {Filter(m_filter_ctrl->GetValue());});
47 m_filter_ctrl->Bind(wxEVT_SET_FOCUS, [this](auto &e) {Filter(m_filter_ctrl->GetValue());e.Skip();});
48 m_filter_ctrl->Bind(wxEVT_KILL_FOCUS, [this](auto &e) {Filter(m_filter_ctrl->GetValue());e.Skip();});
49 f_sizer->Add(m_filter_box, 1, wxEXPAND);
50 Bind(wxEVT_SET_FOCUS, [this](auto &e) {m_filter_box->SetFocus();});
51
52 fb_sizer = new wxBoxSizer(wxHORIZONTAL);
53 auto create_btn = [this] (wxString title, bool select){
54 auto btn = new wxStaticText(f_bar, wxID_ANY, title);
55 btn->SetForegroundColour("#009687");
56 btn->SetCursor(wxCURSOR_HAND);
57 btn->SetFont(Label::Body_13);
58 btn->Bind(wxEVT_LEFT_DOWN, [this, select](wxMouseEvent &e) {SelectAll(select);});
59 fb_sizer->Add(btn, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10));
60 };
61 f_sizer->Add(fb_sizer,0 ,wxALIGN_CENTER_VERTICAL);
62 create_btn(_L("All") , true);
63 create_btn(_L("None"), false);
64
65 m_menu_button = new wxStaticBitmap(f_bar, wxID_ANY, m_menu.bmp());
66 m_menu_button->SetCursor(wxCURSOR_HAND);
67 m_menu_button->Bind(wxEVT_LEFT_DOWN, &CheckList::ShowMenu, this);
68 f_sizer->Add(m_menu_button,0 ,wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10));
69
70 f_bar->SetSizerAndFit(f_sizer);
71 w_sizer->Add(f_bar, 0, wxEXPAND);
72
73 auto spacer = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, FromDIP(3)));
74 spacer->SetBackgroundColour(parent->GetBackgroundColour());
75 w_sizer->Add(spacer, 0, wxEXPAND);
76
77 s_sizer = new wxBoxSizer(wxVERTICAL);
78 m_scroll_area = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, scroll_style);
79 m_scroll_area->SetScrollRate(0, FromDIP(20));
80 m_scroll_area->SetSizer(s_sizer);
81 m_scroll_area->SetBackgroundColour(parent->GetBackgroundColour());
82 m_scroll_area->Bind(wxEVT_RIGHT_DOWN, &CheckList::ShowMenu, this);
83 m_scroll_area->DisableFocusFromKeyboard();
84
85 m_info = new wxStaticText(m_scroll_area, wxID_ANY, "");
86 m_info->SetFont(Label::Body_13);
87 s_sizer->Add(m_info, 1, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(10));
88 m_info->Hide();
89
90 m_info_nonsel = _L("No selected items...");
91 m_info_allsel = _L("All items selected...");
92 m_info_empty = _L("No matching items...");
93
94 SetBackgroundColour(StateColor::darkModeColorFor("#DBDBDB")); // draws border on wxScrolledWindow
95
96 w_sizer->Add(m_scroll_area, 1, wxEXPAND | wxALL, FromDIP(1)); // 1 for border
97 s_sizer->Layout();
98
99 m_list_size = choices.size();
100
101 m_checks.reserve(m_list_size);
102
103 auto margin = FromDIP(2);
104 wxCheckBox* cb;
105
106 for (size_t i = 0; i < m_list_size; ++i){
107 cb = new wxCheckBox(m_scroll_area, wxID_ANY, choices[i]);
108 m_checks.emplace_back(cb);
109 s_sizer->Add(cb, 0, wxALL, margin);
110 }
111
112 m_scroll_area->FitInside();
113 s_sizer->Layout();
114
115 SetSizer(w_sizer);
116 Layout();
117 Thaw();
118}
#define _L(s)
Definition OBJ.cpp:34
class WXDLLIMPEXP_FWD_CORE wxStaticText
Definition ProgressDialog.hpp:30
std::vector< wxCheckBox * > m_checks
Definition CheckList.hpp:43
void ShowMenu(wxMouseEvent &e)
Definition CheckList.cpp:208
TextInput * m_filter_box
Definition CheckList.hpp:50
wxBoxSizer * s_sizer
Definition CheckList.hpp:56
wxStaticText * m_info
Definition CheckList.hpp:58
wxTextCtrl * m_filter_ctrl
Definition CheckList.hpp:51
bool m_first_load
Definition CheckList.hpp:45
wxStaticBitmap * m_menu_button
Definition CheckList.hpp:53
wxString m_info_allsel
Definition CheckList.hpp:60
wxBoxSizer * f_sizer
Definition CheckList.hpp:49
wxString m_info_empty
Definition CheckList.hpp:61
wxBoxSizer * w_sizer
Definition CheckList.hpp:46
int m_list_size
Definition CheckList.hpp:44
ScalableBitmap m_menu
Definition CheckList.hpp:64
wxString m_info_nonsel
Definition CheckList.hpp:59
ScalableBitmap m_search
Definition CheckList.hpp:63
wxPanel * f_bar
Definition CheckList.hpp:48
void Filter(const wxString &filterText)
Definition CheckList.cpp:169
void SelectAll(bool value)
Definition CheckList.cpp:146
wxScrolledWindow * m_scroll_area
Definition CheckList.hpp:55
wxBoxSizer * fb_sizer
Definition CheckList.hpp:52
static wxFont Body_13
Definition Label.hpp:54
static wxColour darkModeColorFor(wxColour const &color)
Definition StateColor.cpp:219

References _L, Label::Body_13, StateColor::darkModeColorFor(), f_bar, f_sizer, fb_sizer, Filter(), m_checks, m_filter_box, m_filter_ctrl, m_first_load, m_info, m_info_allsel, m_info_empty, m_info_nonsel, m_list_size, m_menu, m_menu_button, m_scroll_area, m_search, s_sizer, SelectAll(), ShowMenu(), w_sizer, and wxStaticText.

Here is the call graph for this function:

Member Function Documentation

◆ Check()

void CheckList::Check ( int i,
bool checked )
141{
142 if (i > -1 && i < m_list_size)
143 m_checks[i]->SetValue(checked);
144}

References m_checks, and m_list_size.

Referenced by SelectAll(), SelectVisible(), and SetSelections().

Here is the caller graph for this function:

◆ Filter()

void CheckList::Filter ( const wxString & filterText)
170{
171 Freeze();
172 auto filter = filterText.Lower();
173 auto c_text = m_filter_ctrl->GetValue().Lower();
174
175 if(filter == "::sel" || filter == "::nonsel"){
176 if(c_text != filter){ // not text input
177 m_filter_ctrl->SetValue(filter);
178 m_filter_ctrl->SetSelection(0,-1);
179 }
180 fb_sizer->Show(false);
181 if (filter == "::sel")
182 for (auto& cb : m_checks) cb->Show(cb->GetValue());
183 else
184 for (auto& cb : m_checks) cb->Show(!cb->GetValue());
185 }
186 else{
187 bool clear = filterText.IsEmpty();
188 fb_sizer->Show(clear);
189 for (auto& cb : m_checks)
190 cb->Show(clear || cb->GetLabel().Lower().Contains(filter));
191 }
192
193 m_info->Show();
194 for (size_t i = 0; i < m_list_size; ++i) {
195 if (m_checks[i]->IsShown()){
196 m_info->Hide();
197 break;
198 }
199 }
200 if (m_info->IsShown())
201 m_info->SetLabel(filter == "::sel" ? m_info_nonsel : filter == "::nonsel" ? m_info_allsel : m_info_empty);
202
203 m_scroll_area->FitInside();
204 f_sizer->Layout();
205 Thaw();
206}

References f_sizer, fb_sizer, m_checks, m_filter_ctrl, m_info, m_info_allsel, m_info_empty, m_info_nonsel, m_list_size, and m_scroll_area.

Referenced by CheckList(), and ShowMenu().

Here is the caller graph for this function:

◆ GetSelections()

wxArrayInt CheckList::GetSelections ( )
132{
133 wxArrayInt checks;
134 for (size_t i = 0; i < m_list_size; ++i)
135 if (m_checks[i]->GetValue())
136 checks.push_back(i);
137 return checks;
138}

References m_checks, and m_list_size.

◆ IsChecked()

bool CheckList::IsChecked ( int i)
163{
164 if (i > -1 && i < m_list_size)
165 return false;
166 return m_checks[i]->GetValue();
167}

References m_checks, and m_list_size.

◆ SelectAll()

void CheckList::SelectAll ( bool value)
147{
148 for (size_t i = 0; i < m_list_size; ++i)
149 Check(i, value);
150}
void Check(int i, bool checked)
Definition CheckList.cpp:140

References Check(), and m_list_size.

Referenced by CheckList(), and ShowMenu().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SelectVisible()

void CheckList::SelectVisible ( bool value)
153{
154 auto filter = m_filter_ctrl->GetValue().Lower();
155 if((!value && filter == "::unsel") || (value && filter == "::sel"))
156 m_filter_ctrl->SetValue("");
157 for (size_t i = 0; i < m_list_size; ++i)
158 if(m_checks[i]->IsShown())
159 Check(i, value);
160}

References Check(), m_checks, m_filter_ctrl, and m_list_size.

Referenced by ShowMenu().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetSelections()

void CheckList::SetSelections ( wxArrayInt sel_array)
120 {
121 if(!m_first_load){
122 for (size_t i = 0; i < m_list_size; ++i)
123 Check(i, false);
124 m_first_load = false;
125 }
126
127 for (int i : sel_array)
128 Check(i, true);
129}

References Check(), m_first_load, and m_list_size.

Here is the call graph for this function:

◆ ShowMenu()

void CheckList::ShowMenu ( wxMouseEvent & e)
private
209{
210 bool filtering = !m_filter_ctrl->GetValue().IsEmpty();
211 bool list_empty = m_info->IsShown();
212
213 wxMenu m;
214 m.Append(wxID_FILE1, _L("Select All" ))->Enable(!filtering);
215 m.Append(wxID_FILE2, _L("Deselect All"))->Enable(!filtering);
216 m.AppendSeparator();
217 m.Append(wxID_FILE3, _L("Select visible" ))->Enable(!list_empty && filtering);
218 m.Append(wxID_FILE4, _L("Deselect visible"))->Enable(!list_empty && filtering);
219 m.AppendSeparator();
220 m.Append(wxID_FILE5, _L("Filter selected" ));
221 m.Append(wxID_FILE6, _L("Filter nonSelected"));
222
223 m.Bind(wxEVT_MENU, [this](wxCommandEvent& e) {
224 switch (e.GetId()){
225 case wxID_FILE1: SelectAll(true) ; break;
226 case wxID_FILE2: SelectAll(false) ; break;
227 case wxID_FILE3: SelectVisible(true) ; break;
228 case wxID_FILE4: SelectVisible(false); break;
229 case wxID_FILE5: Filter("::sel") ; break;
230 case wxID_FILE6: Filter("::nonsel") ; break;
231 default: break;
232 }
233 },wxID_FILE1, wxID_FILE6);
234
235 wxWindow* src = dynamic_cast<wxWindow*>(evt.GetEventObject());
236 if (!src) return;
237 wxPoint screen_pos = src->ClientToScreen(evt.GetPosition());
238 wxPoint local_pos = ScreenToClient(screen_pos);
239 PopupMenu(&m, local_pos);
240}
void SelectVisible(bool value)
Definition CheckList.cpp:152

References _L, Filter(), m_filter_ctrl, m_info, SelectAll(), and SelectVisible().

Referenced by CheckList().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ f_bar

wxPanel* CheckList::f_bar
private

Referenced by CheckList().

◆ f_sizer

wxBoxSizer* CheckList::f_sizer
private

Referenced by CheckList(), and Filter().

◆ fb_sizer

wxBoxSizer* CheckList::fb_sizer
private

Referenced by CheckList(), and Filter().

◆ m_checks

std::vector<wxCheckBox*> CheckList::m_checks
private

◆ m_filter_box

TextInput* CheckList::m_filter_box
private

Referenced by CheckList().

◆ m_filter_ctrl

wxTextCtrl* CheckList::m_filter_ctrl
private

◆ m_first_load

bool CheckList::m_first_load
private

Referenced by CheckList(), and SetSelections().

◆ m_info

wxStaticText* CheckList::m_info
private

Referenced by CheckList(), Filter(), and ShowMenu().

◆ m_info_allsel

wxString CheckList::m_info_allsel
private

Referenced by CheckList(), and Filter().

◆ m_info_empty

wxString CheckList::m_info_empty
private

Referenced by CheckList(), and Filter().

◆ m_info_nonsel

wxString CheckList::m_info_nonsel
private

Referenced by CheckList(), and Filter().

◆ m_list_size

int CheckList::m_list_size
private

◆ m_menu

ScalableBitmap CheckList::m_menu
private

Referenced by CheckList().

◆ m_menu_button

wxStaticBitmap* CheckList::m_menu_button
private

Referenced by CheckList().

◆ m_scroll_area

wxScrolledWindow* CheckList::m_scroll_area
private

Referenced by CheckList(), and Filter().

◆ m_search

ScalableBitmap CheckList::m_search
private

Referenced by CheckList().

◆ s_sizer

wxBoxSizer* CheckList::s_sizer
private

Referenced by CheckList().

◆ w_sizer

wxBoxSizer* CheckList::w_sizer
private

Referenced by CheckList().


The documentation for this class was generated from the following files:
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Widgets/CheckList.hpp
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Widgets/CheckList.cpp