-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcontrols.cpp
More file actions
150 lines (133 loc) · 6.18 KB
/
controls.cpp
File metadata and controls
150 lines (133 loc) · 6.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include "pstack/gui/constants.hpp"
#include "pstack/gui/controls.hpp"
#include "pstack/gui/main_window.hpp"
#include <array>
namespace pstack::gui {
namespace {
std::pair<wxNotebook*, std::vector<wxPanel*>> make_tab_panels(wxWindow* parent, const std::vector<const char*> labels) {
wxNotebook* const notebook = new wxNotebook(parent, wxID_ANY);
std::vector<wxPanel*> panels;
for (std::size_t i = 0; i != labels.size(); ++i) {
wxPanel* const panel_base = new wxPanel(notebook);
wxBoxSizer* const panel_base_sizer = new wxBoxSizer(wxVERTICAL);
panel_base->SetSizer(panel_base_sizer);
notebook->InsertPage(i, panel_base, labels[i]);
wxPanel* const panel = new wxPanel(panel_base);
panel_base_sizer->Add(panel, 1, wxEXPAND | wxALL, notebook->FromDIP(constants::tab_padding));
panels.push_back(panel);
}
return { notebook, std::move(panels) };
}
} // namespace
void controls::initialize(main_window* parent) {
section_view_text = new wxStaticText(parent, wxID_ANY, "Section view:");
section_view_checkbox = new wxCheckBox(parent, wxID_ANY, "");
progress_bar = new wxGauge(parent, wxID_ANY, 100);
stack_button = new wxButton(parent, wxID_ANY, "Stack");
std::tie(notebook, notebook_panels) = make_tab_panels(parent, {
"Parts",
"Stack Settings",
"Results",
});
{
const auto panel = notebook_panels[0];
import_part_button = new wxButton(panel, wxID_ANY, "Import");
delete_part_button = new wxButton(panel, wxID_ANY, "Delete");
delete_part_button->Disable();
reload_part_button = new wxButton(panel, wxID_ANY, "Reload");
reload_part_button->Disable();
copy_part_button = new wxButton(panel, wxID_ANY, "Copy");
copy_part_button->Disable();
mirror_part_button = new wxButton(panel, wxID_ANY, "Mirror");
mirror_part_button->Disable();
quantity_text = new wxStaticText(panel, wxID_ANY, "Quantity:");
min_hole_text = new wxStaticText(panel, wxID_ANY, "Minimum hole:");
minimize_text = new wxStaticText(panel, wxID_ANY, "Minimize box:");
quantity_spinner = new wxSpinCtrl(panel);
quantity_spinner->SetRange(0, 200);
quantity_spinner->Disable();
min_hole_spinner = new wxSpinCtrl(panel);
min_hole_spinner->SetRange(0, 100);
min_hole_spinner->Disable();
minimize_checkbox = new wxCheckBox(panel, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxCHK_3STATE);
minimize_checkbox->Disable();
wxArrayString rotation_choices;
rotation_choices.Add("None");
rotation_choices.Add("Cubic");
rotation_choices.Add("Arbitrary");
rotation_text = new wxStaticText(panel, wxID_ANY, "Rotations:");
rotation_dropdown = new wxChoice(panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, rotation_choices);
rotation_dropdown->Disable();
preview_voxelization_button = new wxButton(panel, wxID_ANY, "Preview voxelization");
preview_voxelization_button->Disable();
preview_bounding_box_button = new wxButton(panel, wxID_ANY, "Preview bounding box");
preview_bounding_box_button->Disable();
}
{
const auto panel = notebook_panels[1];
initial_x_text = new wxStaticText(panel, wxID_ANY, "Initial X:");
initial_y_text = new wxStaticText(panel, wxID_ANY, "Initial Y:");
initial_z_text = new wxStaticText(panel, wxID_ANY, "Initial Z:");
maximum_x_text = new wxStaticText(panel, wxID_ANY, "Maximum X:");
maximum_y_text = new wxStaticText(panel, wxID_ANY, "Maximum Y:");
maximum_z_text = new wxStaticText(panel, wxID_ANY, "Maximum Z:");
const auto make_spinner = [panel] {
auto spinner = new wxSpinCtrl(panel);
spinner->SetRange(10, 250);
return spinner;
};
initial_x_spinner = make_spinner();
initial_y_spinner = make_spinner();
initial_z_spinner = make_spinner();
maximum_x_spinner = make_spinner();
maximum_y_spinner = make_spinner();
maximum_z_spinner = make_spinner();
min_clearance_text = new wxStaticText(panel, wxID_ANY, "Minimum clearance:");
min_clearance_spinner = new wxSpinCtrlDouble(panel);
min_clearance_spinner->SetDigits(2);
min_clearance_spinner->SetIncrement(0.05);
min_clearance_spinner->SetRange(0.5, 2);
}
{
const auto panel = notebook_panels[2];
export_result_button = new wxButton(panel, wxID_ANY, "Export");
export_result_button->Disable();
delete_result_button = new wxButton(panel, wxID_ANY, "Delete");
delete_result_button->Disable();
sinterbox_result_button = new wxButton(panel, wxID_ANY, "Add sinterbox");
sinterbox_result_button->Disable();
clearance_text = new wxStaticText(panel, wxID_ANY, "Clearance:");
spacing_text = new wxStaticText(panel, wxID_ANY, "Spacing:");
thickness_text = new wxStaticText(panel, wxID_ANY, "Thickness:");
width_text = new wxStaticText(panel, wxID_ANY, "Width:");
const auto make_spinner = [&panel](double minimum, double maximum, double increment) {
auto spinner = new wxSpinCtrlDouble(panel);
spinner->SetIncrement(increment);
spinner->SetRange(minimum, maximum);
return spinner;
};
clearance_spinner = make_spinner(0.1, 4, 0.1);
spacing_spinner = make_spinner(1, 20, 0.5);
thickness_spinner = make_spinner(0.1, 4, 0.1);
width_spinner = make_spinner(0.1, 4, 0.1);
}
reset_values();
}
void controls::reset_values() {
min_clearance_spinner->SetValue(1);
quantity_spinner->SetValue(1);
min_hole_spinner->SetValue(1);
minimize_checkbox->SetValue(false);
rotation_dropdown->SetSelection(1);
clearance_spinner->SetValue(0.8);
spacing_spinner->SetValue(6.0);
thickness_spinner->SetValue(0.8);
width_spinner->SetValue(1.1);
initial_x_spinner->SetValue(150);
initial_y_spinner->SetValue(150);
initial_z_spinner->SetValue(30);
maximum_x_spinner->SetValue(156);
maximum_y_spinner->SetValue(156);
maximum_z_spinner->SetValue(90);
}
} // namespace pstack::gui