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

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

Inheritance diagram for AuxiliaryList:
Collaboration diagram for AuxiliaryList:

Public Member Functions

 AuxiliaryList (wxWindow *parent)
 ~AuxiliaryList ()
wxSizer * get_top_sizer ()
void init_auxiliary ()
void reload (wxString aux_path)

Private Member Functions

void do_import_file (AuxiliaryModelNode *folder)
void on_create_folder (wxCommandEvent &evt)
void on_import_file (wxCommandEvent &evt)
void on_delete (wxCommandEvent &evt)
void on_context_menu (wxDataViewEvent &evt)
void on_begin_drag (wxDataViewEvent &evt)
void on_drop_possible (wxDataViewEvent &evt)
void on_drop (wxDataViewEvent &evt)
void on_editing_started (wxDataViewEvent &evt)
void on_editing_done (wxDataViewEvent &evt)
void on_left_dclick (wxMouseEvent &evt)
void create_new_folder ()
void handle_key_event (wxKeyEvent &evt)

Private Attributes

wxDataViewItem m_dragged_item
AuxiliaryModel * m_auxiliary_model
wxSizer * m_sizer
wxButton * m_if_btn
wxButton * m_of_btn
wxButton * m_del_btn

Detailed Description

Constructor & Destructor Documentation

◆ AuxiliaryList()

AuxiliaryList::AuxiliaryList ( wxWindow * parent)
31 : wxDataViewCtrl(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxDV_NO_HEADER)
32{
33 wxDataViewTextRenderer* tr = new wxDataViewTextRenderer("string", wxDATAVIEW_CELL_INERT);
34 wxDataViewColumn* column0 = new wxDataViewColumn("", tr, 0, 200, wxALIGN_LEFT,
35 wxDATAVIEW_COL_SORTABLE | wxDATAVIEW_COL_RESIZABLE);
36 this->AppendColumn(column0);
37
38 m_auxiliary_model = new AuxiliaryModel();
39 this->AssociateModel(m_auxiliary_model);
40 m_sizer = new wxBoxSizer(wxVERTICAL);
41 m_sizer->Add(this, 1, wxEXPAND | wxALL, 0);
42
43 wxPanel* panel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, FromDIP(21)));
44 //panel->SetBackgroundColour(*wxLIGHT_GREY);
45
46#if 0
47 wxBitmap if_bitmap = create_scaled_bitmap("import_file.png", nullptr, FromDIP(21));
48 wxBitmap nf_bitmap = create_scaled_bitmap("new_folder.png", nullptr, FromDIP(21));
49 wxBitmap del_bitmap = create_scaled_bitmap("delete.png", nullptr, FromDIP(21));
50
51 wxBitmapButton* m_if_btn = new wxBitmapButton(panel, wxID_OPEN, if_bitmap);
52 wxBitmapButton* m_nf_btn = new wxBitmapButton(panel, wxID_NEW, nf_bitmap);
53 wxBitmapButton* m_del_btn = new wxBitmapButton(panel, wxID_DELETE, del_bitmap);
54#endif
55
56 //m_nf_btn = new wxButton(panel, wxID_NEW, _L("New Folder"));
57 m_if_btn = new wxButton(panel, wxID_ADD, _L("Import File"));
58 m_of_btn = new wxButton(panel, wxID_OPEN, _("Open File"));
59 m_del_btn = new wxButton(panel, wxID_DELETE, _L("Delete"));
60
61 wxBoxSizer* hsizer = new wxBoxSizer(wxHORIZONTAL);
62 //hsizer->Add(m_nf_btn, 0, wxRIGHT, 5);
63 hsizer->Add(m_if_btn, 0, wxLEFT | wxRIGHT, 5);
64 hsizer->Add(m_of_btn, 0, wxLEFT | wxRIGHT, 5);
65 hsizer->Add(m_del_btn, 0, wxLEFT | wxRIGHT, 5);
66 panel->SetSizer(hsizer);
67
68 m_sizer->Add(panel, 0, wxEXPAND | wxALL, 5);
69
70 EnableDragSource(wxDF_UNICODETEXT);
71 EnableDropTarget(wxDF_UNICODETEXT);
72
73 // Keyboard events
74 Bind(wxEVT_CHAR, [this](wxKeyEvent& event) { this->handle_key_event(event); });
75
76 // Button events
77 //m_nf_btn->Bind(wxEVT_BUTTON, &AuxiliaryList::on_create_folder, this, wxID_NEW);
78 m_if_btn->Bind(wxEVT_BUTTON, &AuxiliaryList::on_import_file, this, wxID_ADD);
79 m_del_btn->Bind(wxEVT_BUTTON, &AuxiliaryList::on_delete, this, wxID_DELETE);
80 m_of_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) {
81 wxDataViewItem sel_item = this->GetSelection();
82 AuxiliaryModelNode* sel = (AuxiliaryModelNode*)sel_item.GetID();
83 if (sel != nullptr && !sel->IsContainer()) {
84 wxLaunchDefaultApplication(sel->path, 0);
85 }
86 else {
87 evt.Skip();
88 }
89 }, wxID_OPEN);
90
91 // Dataview events
92 this->Bind(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU, &AuxiliaryList::on_context_menu, this);
93 this->Bind(wxEVT_DATAVIEW_ITEM_BEGIN_DRAG, &AuxiliaryList::on_begin_drag, this);
94 this->Bind(wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, &AuxiliaryList::on_drop_possible, this);
95 this->Bind(wxEVT_DATAVIEW_ITEM_DROP, &AuxiliaryList::on_drop, this);
96 this->Bind(wxEVT_DATAVIEW_ITEM_EDITING_STARTED, &AuxiliaryList::on_editing_started, this);
97 this->Bind(wxEVT_DATAVIEW_ITEM_EDITING_DONE, &AuxiliaryList::on_editing_done, this);
98
99 // Mouse events
100 wxWindow* win = this->GetMainWindow();
101 win->Bind(wxEVT_LEFT_DCLICK, &AuxiliaryList::on_left_dclick, this);
102
103 Bind(wxEVT_DATAVIEW_SELECTION_CHANGED, [this](wxDataViewEvent& event) {
104 wxDataViewItem sel_item = event.GetItem();
105 AuxiliaryModelNode* sel_node = (AuxiliaryModelNode*)sel_item.GetID();
106 if (sel_node == nullptr)
107 return;
108
109 m_del_btn->Enable(!sel_node->IsContainer());
110 });
111}
#define _(s)
Definition 3mf.cpp:306
#define _L(s)
Definition OBJ.cpp:34
class WXDLLIMPEXP_FWD_CORE wxButton
Definition ProgressDialog.hpp:27
void on_drop_possible(wxDataViewEvent &evt)
Definition GUI_AuxiliaryList.cpp:273
void handle_key_event(wxKeyEvent &evt)
Definition GUI_AuxiliaryList.cpp:310
wxButton * m_del_btn
Definition GUI_AuxiliaryList.hpp:60
AuxiliaryModel * m_auxiliary_model
Definition GUI_AuxiliaryList.hpp:54
void on_left_dclick(wxMouseEvent &evt)
Definition GUI_AuxiliaryList.cpp:298
wxButton * m_of_btn
Definition GUI_AuxiliaryList.hpp:59
void on_delete(wxCommandEvent &evt)
Definition GUI_AuxiliaryList.cpp:204
void on_editing_started(wxDataViewEvent &evt)
Definition GUI_AuxiliaryList.cpp:287
void on_import_file(wxCommandEvent &evt)
Definition GUI_AuxiliaryList.cpp:185
wxSizer * m_sizer
Definition GUI_AuxiliaryList.hpp:55
void on_editing_done(wxDataViewEvent &evt)
Definition GUI_AuxiliaryList.cpp:291
wxButton * m_if_btn
Definition GUI_AuxiliaryList.hpp:58
void on_begin_drag(wxDataViewEvent &evt)
Definition GUI_AuxiliaryList.cpp:258
void on_context_menu(wxDataViewEvent &evt)
Definition GUI_AuxiliaryList.cpp:209
void on_drop(wxDataViewEvent &evt)
Definition GUI_AuxiliaryList.cpp:278
bool IsContainer() const
Definition AuxiliaryDataViewModel.hpp:55
wxString path
Definition AuxiliaryDataViewModel.hpp:93
wxBitmap create_scaled_bitmap(const std::string &bmp_name_in, wxWindow *win, const int px_cnt, const bool grayscale, const std::string &new_color, const bool menu_bitmap, const bool resize, const bool bitmap2, const std::vector< std::string > &array_new_color)
Definition wxExtensions.cpp:448

References _, _L, create_scaled_bitmap(), handle_key_event(), AuxiliaryModelNode::IsContainer(), m_auxiliary_model, m_del_btn, m_if_btn, m_of_btn, m_sizer, on_begin_drag(), on_context_menu(), on_delete(), on_drop(), on_drop_possible(), on_editing_done(), on_editing_started(), on_import_file(), on_left_dclick(), AuxiliaryModelNode::path, and wxButton.

Here is the call graph for this function:

◆ ~AuxiliaryList()

AuxiliaryList::~AuxiliaryList ( )
114{
115 this->AssociateModel(nullptr);
116 delete m_auxiliary_model;
117}

References m_auxiliary_model.

Member Function Documentation

◆ create_new_folder()

void AuxiliaryList::create_new_folder ( )
private
138{
139 wxDataViewItem folder_item = m_auxiliary_model->CreateFolder(wxEmptyString);
140 AuxiliaryModelNode* folder = (AuxiliaryModelNode*)folder_item.GetID();
141 if (folder == nullptr)
142 return;
143
144 Select(folder_item);
145
146 wxDataViewColumn* col = GetColumn(0);
147 wxDataViewCellMode mode = col->GetRenderer()->GetMode();
148 col->GetRenderer()->SetMode(wxDATAVIEW_CELL_EDITABLE);
149 EditItem(folder_item, col);
150 col->GetRenderer()->SetMode(mode);
151}

References m_auxiliary_model.

Referenced by on_context_menu(), and on_create_folder().

Here is the caller graph for this function:

◆ do_import_file()

void AuxiliaryList::do_import_file ( AuxiliaryModelNode * folder)
private
154{
155 if (folder == nullptr || !folder->IsContainer())
156 return;
157
158 wxString src_path;
159 wxString dst_path;
160 wxFileDialog dialog(this, _L("Choose files"), wxEmptyString, wxEmptyString,
161 wxFileSelectorDefaultWildcardStr, wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_MULTIPLE);
162 if (dialog.ShowModal() == wxID_OK) {
163 wxArrayString sel_paths;
164 dialog.GetPaths(sel_paths);
165 wxDataViewItemArray file_items = m_auxiliary_model->ImportFile(folder, sel_paths);
166 if (!file_items.empty()) {
167 wxDataViewItem file_item = file_items[0];
168 AuxiliaryModelNode* file_node = (AuxiliaryModelNode*)file_item.GetID();
169 if (file_node != nullptr) {
170 if (!m_auxiliary_model->IsOrphan(file_item)) {
171 Expand(wxDataViewItem(file_node->GetParent()));
172 }
173 Select(file_item);
174 m_del_btn->Enable(true);
175 }
176 }
177 }
178}
AuxiliaryModelNode * GetParent()
Definition AuxiliaryDataViewModel.hpp:60

References _L, AuxiliaryModelNode::GetParent(), AuxiliaryModelNode::IsContainer(), m_auxiliary_model, and m_del_btn.

Referenced by on_context_menu(), and on_import_file().

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

◆ get_top_sizer()

wxSizer * AuxiliaryList::get_top_sizer ( )
inline
33{ return m_sizer; }

References m_sizer.

◆ handle_key_event()

void AuxiliaryList::handle_key_event ( wxKeyEvent & evt)
private
311{
312 if (evt.GetKeyCode() == WXK_DELETE || evt.GetKeyCode() == WXK_BACK)
313 m_auxiliary_model->Delete(this->GetSelection());
314}

References m_auxiliary_model.

Referenced by AuxiliaryList().

Here is the caller graph for this function:

◆ init_auxiliary()

void AuxiliaryList::init_auxiliary ( )
120{
121 Model& model = wxGetApp().plater()->model();
122 std::string aux_path = encode_path(model.get_auxiliary_file_temp_path().c_str());
123 m_auxiliary_model->Init(aux_path);
124}
std::string get_auxiliary_file_temp_path()
Definition Model.cpp:1099
std::string encode_path(const char *src)
Definition utils.cpp:1382

References Slic3r::encode_path(), Slic3r::Model::get_auxiliary_file_temp_path(), and m_auxiliary_model.

Here is the call graph for this function:

◆ on_begin_drag()

void AuxiliaryList::on_begin_drag ( wxDataViewEvent & evt)
private
259{
260 wxDataViewItem sel_item = evt.GetItem();
261 AuxiliaryModelNode* sel = (AuxiliaryModelNode*)sel_item.GetID();
262 if (sel == nullptr || sel->IsContainer())
263 return;
264
265 m_dragged_item = sel_item;
266
267 wxTextDataObject* obj = new wxTextDataObject;
268 obj->SetText("Some text");
269 evt.SetDataObject(obj);
270 evt.SetDragFlags(wxDrag_DefaultMove);
271}
wxDataViewItem m_dragged_item
Definition GUI_AuxiliaryList.hpp:53

References AuxiliaryModelNode::IsContainer(), and m_dragged_item.

Referenced by AuxiliaryList().

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

◆ on_context_menu()

void AuxiliaryList::on_context_menu ( wxDataViewEvent & evt)
private
210{
211 wxMenu* menu = new wxMenu();
212 wxDataViewItem item = evt.GetItem();
213 AuxiliaryModelNode* node = (AuxiliaryModelNode*)item.GetID();
214 if (node == nullptr) {
215 append_menu_item(menu, wxID_ANY, _L("New Folder"), wxEmptyString,
216 [this](wxCommandEvent&)
217 {
219 });
220 }
221 else if (node->IsContainer()) {
222 append_menu_item(menu, wxID_ANY, _L("Import File"), wxEmptyString,
223 [this, node](wxCommandEvent&)
224 {
225 do_import_file(node);
226 });
227 append_menu_item(menu, wxID_ANY, _L("Delete"), wxEmptyString,
228 [this, item](wxCommandEvent&)
229 {
230 m_auxiliary_model->Delete(item);
231 });
232 }
233 else {
234 append_menu_item(menu, wxID_ANY, _L("Open"), wxEmptyString,
235 [node](wxCommandEvent&)
236 {
237 wxLaunchDefaultApplication(node->path, 0);
238 });
239 append_menu_item(menu, wxID_ANY, _L("Delete"), wxEmptyString,
240 [this, item](wxCommandEvent&)
241 {
242 m_auxiliary_model->Delete(item);
243 });
244 append_menu_item(menu, wxID_ANY, _L("Rename"), wxEmptyString,
245 [this, item](wxCommandEvent&)
246 {
247 wxDataViewColumn* col = this->GetColumn(0);
248 wxDataViewCellMode mode = col->GetRenderer()->GetMode();
249 col->GetRenderer()->SetMode(wxDATAVIEW_CELL_EDITABLE);
250 this->EditItem(item, col);
251 col->GetRenderer()->SetMode(mode);
252 });
253 }
254
255 PopupMenu(menu);
256}
void create_new_folder()
Definition GUI_AuxiliaryList.cpp:137
void do_import_file(AuxiliaryModelNode *folder)
Definition GUI_AuxiliaryList.cpp:153
wxMenuItem * append_menu_item(wxMenu *menu, int id, const wxString &string, const wxString &description, std::function< void(wxCommandEvent &event)> cb, const wxBitmap &icon, wxEvtHandler *event_handler, std::function< bool()> const cb_condition, wxWindow *parent, int insert_pos)
Definition wxExtensions.cpp:89

References _L, append_menu_item(), create_new_folder(), do_import_file(), AuxiliaryModelNode::IsContainer(), m_auxiliary_model, and AuxiliaryModelNode::path.

Referenced by AuxiliaryList().

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

◆ on_create_folder()

void AuxiliaryList::on_create_folder ( wxCommandEvent & evt)
private
181{
183}

References create_new_folder().

Here is the call graph for this function:

◆ on_delete()

void AuxiliaryList::on_delete ( wxCommandEvent & evt)
private
205{
206 m_auxiliary_model->Delete(this->GetSelection());
207}

References m_auxiliary_model.

Referenced by AuxiliaryList().

Here is the caller graph for this function:

◆ on_drop()

void AuxiliaryList::on_drop ( wxDataViewEvent & evt)
private
279{
280 m_auxiliary_model->MoveItem(evt.GetItem(), m_dragged_item);
281
282 Expand(evt.GetItem());
283 Select(m_dragged_item);
284 m_dragged_item = wxDataViewItem(nullptr);
285}

References m_auxiliary_model, and m_dragged_item.

Referenced by AuxiliaryList().

Here is the caller graph for this function:

◆ on_drop_possible()

void AuxiliaryList::on_drop_possible ( wxDataViewEvent & evt)
private
274{
275 evt.Allow();
276}

Referenced by AuxiliaryList().

Here is the caller graph for this function:

◆ on_editing_done()

void AuxiliaryList::on_editing_done ( wxDataViewEvent & evt)
private
292{
293 bool is_done = m_auxiliary_model->Rename(evt.GetItem(), evt.GetValue().GetString());
294 if (!is_done)
295 evt.Veto();
296}

References m_auxiliary_model.

Referenced by AuxiliaryList().

Here is the caller graph for this function:

◆ on_editing_started()

void AuxiliaryList::on_editing_started ( wxDataViewEvent & evt)
private
288{
289}

Referenced by AuxiliaryList().

Here is the caller graph for this function:

◆ on_import_file()

void AuxiliaryList::on_import_file ( wxCommandEvent & evt)
private
186{
187 wxDataViewItem sel_item = this->GetSelection();
188 AuxiliaryModelNode* sel_node = (AuxiliaryModelNode*)sel_item.GetID();
189 if (sel_node == nullptr)
190 return;
191
192 AuxiliaryModelNode* folder_node = sel_node;
193 if (!folder_node->IsContainer()) {
194 wxDataViewItem folder_item = m_auxiliary_model->GetParent(sel_item);
195 folder_node = (AuxiliaryModelNode*)folder_item.GetID();
196
197 if (folder_node == nullptr)
198 return;
199 }
200
201 do_import_file(folder_node);
202}

References do_import_file(), AuxiliaryModelNode::IsContainer(), and m_auxiliary_model.

Referenced by AuxiliaryList().

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

◆ on_left_dclick()

void AuxiliaryList::on_left_dclick ( wxMouseEvent & evt)
private
299{
300 wxDataViewItem sel_item = this->GetSelection();
301 AuxiliaryModelNode* sel = (AuxiliaryModelNode*)sel_item.GetID();
302 if (sel != nullptr && !sel->IsContainer()) {
303 wxLaunchDefaultApplication(sel->path, 0);
304 }
305 else {
306 evt.Skip();
307 }
308}

References AuxiliaryModelNode::IsContainer(), AuxiliaryModelNode::path, and Slic3r::GUI::wxMouseEvent.

Referenced by AuxiliaryList().

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

◆ reload()

void AuxiliaryList::reload ( wxString aux_path)
127{
128 m_auxiliary_model->Reload(aux_path);
129
130 wxDataViewItemArray items;
131 m_auxiliary_model->GetChildren(wxDataViewItem(nullptr), items);
132 for (wxDataViewItem item : items) {
133 Expand(item);
134 }
135}

References m_auxiliary_model.

Member Data Documentation

◆ m_auxiliary_model

◆ m_del_btn

wxButton* AuxiliaryList::m_del_btn
private

Referenced by AuxiliaryList(), and do_import_file().

◆ m_dragged_item

wxDataViewItem AuxiliaryList::m_dragged_item
private

Referenced by on_begin_drag(), and on_drop().

◆ m_if_btn

wxButton* AuxiliaryList::m_if_btn
private

Referenced by AuxiliaryList().

◆ m_of_btn

wxButton* AuxiliaryList::m_of_btn
private

Referenced by AuxiliaryList().

◆ m_sizer

wxSizer* AuxiliaryList::m_sizer
private

Referenced by AuxiliaryList(), and get_top_sizer().


The documentation for this class was generated from the following files: