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

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

Inheritance diagram for RammingPanel:
Collaboration diagram for RammingPanel:

Public Member Functions

 RammingPanel (wxWindow *parent)
 RammingPanel (wxWindow *parent, const std::string &data)
std::string get_parameters ()

Private Member Functions

void line_parameters_changed ()

Private Attributes

Chart * m_chart = nullptr
SpinInput * m_widget_volume = nullptr
SpinInput * m_widget_ramming_line_width_multiplicator = nullptr
SpinInput * m_widget_ramming_step_multiplicator = nullptr
SpinInput * m_widget_time = nullptr
int m_ramming_step_multiplicator
int m_ramming_line_width_multiplicator

Detailed Description

Constructor & Destructor Documentation

◆ RammingPanel() [1/2]

RammingPanel::RammingPanel ( wxWindow * parent)

◆ RammingPanel() [2/2]

RammingPanel::RammingPanel ( wxWindow * parent,
const std::string & data )
107: wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize/*,wxPoint(50,50), wxSize(800,350),wxBORDER_RAISED*/)
108{
109 SetBackgroundColour(*wxWHITE);
110 update_ui(this);
111 auto sizer_chart = new wxBoxSizer(wxVERTICAL);
112 auto sizer_param = new wxBoxSizer(wxVERTICAL);
113
114 std::stringstream stream{ parameters };
116 int ramming_speed_size = 0;
117 float dummy = 0.f;
118 while (stream >> dummy)
119 ++ramming_speed_size;
120 stream.clear();
121 stream.get();
122
123 std::vector<std::pair<float, float>> buttons;
124 float x = 0.f;
125 float y = 0.f;
126 while (stream >> x >> y)
127 buttons.push_back(std::make_pair(x, y));
128
129 m_chart = new Chart(this, wxRect(scale(10),scale(10),scale(480),scale(360)), buttons, ramming_speed_size, 0.25f, scale(10));
131 sizer_chart->Add(m_chart, 0, wxALL, 5);
132
133 // Create help text for constant flow rate dragging
134 std::string ctrl_str = GUI::shortkey_ctrl_prefix();
135 if (!ctrl_str.empty() && ctrl_str.back() == '+')
136 ctrl_str.pop_back(); // Remove trailing '+'
137 wxString message = format_wxstr(_L("For constant flow rate, hold %1% while dragging."), ctrl_str);
138 Label* label = new Label(this, wxEmptyString);
139 wxClientDC dc(label);
140 wxString multiline_message;
141 label->SetFont(Label::Body_14);
142 label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636")));
143 label->split_lines(dc, scale(470), message, multiline_message);
144 label->SetLabel(multiline_message);
145 sizer_chart->Add(label, 0, wxEXPAND | wxALL, 5);
146
147 m_widget_time = new SpinInput(this, wxEmptyString, _L("ms"), wxDefaultPosition, wxSize(scale(120), -1), wxSP_ARROW_KEYS, 0 , 5000 , 3000, 250);
148 m_widget_volume = new SpinInput(this, wxEmptyString, _L("mm³"), wxDefaultPosition, wxSize(scale(120), -1), wxSP_ARROW_KEYS, 0 , 10000, 0 );
149 m_widget_ramming_line_width_multiplicator = new SpinInput(this, wxEmptyString, "%" , wxDefaultPosition, wxSize(scale(120), -1), wxSP_ARROW_KEYS, 10, 300 , 100 );
150 m_widget_ramming_step_multiplicator = new SpinInput(this, wxEmptyString, "%" , wxDefaultPosition, wxSize(scale(120), -1), wxSP_ARROW_KEYS, 10, 300 , 100 );
151
152 auto add_title = [this, sizer_param](wxString label){
153 auto title = new StaticLine(this, 0, label);
154 title->SetFont(Label::Head_14);
155 title->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636")));
156 sizer_param->Add(title, 0, wxEXPAND | wxBOTTOM, scale(8));
157 };
158
159 SetFont(Label::Body_14);
160 wxSize col_size;
161 for(auto label : {"Time", "Volume", "Width", "Spacing"})
162 col_size.IncTo(GetTextExtent(_L(label)));
163 col_size = wxSize(col_size.x + scale(30) ,-1);
164
165 auto add_spin = [this, sizer_param, col_size](wxString label, SpinInput* spin){
166 spin->Bind(wxEVT_KILL_FOCUS, [this](auto &e) {
167 e.SetId(GetId());
168 ProcessEventLocally(e);
169 e.Skip();
170 });
171 auto h_sizer = new wxBoxSizer(wxHORIZONTAL);
172 auto text = new wxStaticText(this, wxID_ANY, label, wxDefaultPosition, col_size);
173 text->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636")));
174 h_sizer->Add(text, 0, wxALIGN_CENTER_VERTICAL);
175 h_sizer->Add(spin);
176 sizer_param->Add(h_sizer, 0, wxEXPAND | wxBOTTOM, scale(2));
177 };
178
179 add_title(_L("Total ramming"));
180 add_spin( _L("Time") , m_widget_time );
181 add_spin( _L("Volume"), m_widget_volume);
182
183 sizer_param->AddSpacer(10);
184
185 add_title(_L("Ramming line"));
186 add_spin( _L("Width") , m_widget_ramming_line_width_multiplicator);
187 add_spin( _L("Spacing"), m_widget_ramming_step_multiplicator );
188
189 m_widget_time->SetValue(int(m_chart->get_time() * 1000));
190 m_widget_volume->SetValue(m_chart->get_volume());
191 m_widget_volume->Disable();
194
195 m_widget_ramming_step_multiplicator->Bind(wxEVT_SPINCTRL,[this](wxCommandEvent&) { line_parameters_changed(); });
196 m_widget_ramming_line_width_multiplicator->Bind(wxEVT_SPINCTRL,[this](wxCommandEvent&) { line_parameters_changed(); });
197
198 auto sizer = new wxBoxSizer(wxHORIZONTAL);
199 sizer->Add(sizer_chart, 0, wxALL, 5);
200 sizer->Add(sizer_param, 0, wxALL, 10);
201
202 sizer->SetSizeHints(this);
203 SetSizer(sizer);
204
205 m_widget_time->Bind(wxEVT_SPINCTRL,[this](wxCommandEvent&) {
206 m_chart->set_xy_range(m_widget_time->GetValue() * 0.001,-1);
207 });
208 m_widget_time->Bind(wxEVT_CHAR,[](wxKeyEvent&){}); // do nothing - prevents the user to change the value
209 m_widget_volume->Bind(wxEVT_CHAR,[](wxKeyEvent&){}); // do nothing - prevents the user to change the value
210 Bind(EVT_WIPE_TOWER_CHART_CHANGED,[this](wxCommandEvent&) {
211 m_widget_volume->SetValue(m_chart->get_volume());
212 m_widget_time->SetValue(m_chart->get_time() * 1000);
213 });
214 Refresh(true); // erase background
215}
#define _L(s)
Definition OBJ.cpp:34
class WXDLLIMPEXP_FWD_CORE wxStaticText
Definition ProgressDialog.hpp:30
int scale(const int val)
Definition WipeTowerDialog.cpp:58
static void update_ui(wxWindow *window)
Definition WipeTowerDialog.cpp:60
void SetLabel(const wxString &label) override
Definition Label.cpp:322
static wxFont Head_14
Definition Label.hpp:45
static wxFont Body_14
Definition Label.hpp:53
static wxSize split_lines(wxDC &dc, int width, const wxString &text, wxString &multiline_text, int max_count=0)
Definition Label.cpp:293
Chart * m_chart
Definition WipeTowerDialog.hpp:27
SpinInput * m_widget_volume
Definition WipeTowerDialog.hpp:28
int m_ramming_line_width_multiplicator
Definition WipeTowerDialog.hpp:33
SpinInput * m_widget_ramming_line_width_multiplicator
Definition WipeTowerDialog.hpp:29
int m_ramming_step_multiplicator
Definition WipeTowerDialog.hpp:32
void line_parameters_changed()
Definition WipeTowerDialog.cpp:217
SpinInput * m_widget_ramming_step_multiplicator
Definition WipeTowerDialog.hpp:30
SpinInput * m_widget_time
Definition WipeTowerDialog.hpp:31
static wxColour darkModeColorFor(wxColour const &color)
Definition StateColor.cpp:219
wxString format_wxstr(const char *fmt, TArgs &&... args)
Definition format.hpp:22
const std::string & shortkey_ctrl_prefix()
Definition GUI.cpp:115

References _L, Label::Body_14, StateColor::darkModeColorFor(), Slic3r::GUI::format_wxstr(), Label::Head_14, line_parameters_changed(), m_chart, m_ramming_line_width_multiplicator, m_ramming_step_multiplicator, m_widget_ramming_line_width_multiplicator, m_widget_ramming_step_multiplicator, m_widget_time, m_widget_volume, scale(), Label::SetLabel(), Slic3r::GUI::shortkey_ctrl_prefix(), Label::split_lines(), update_ui(), and wxStaticText.

Here is the call graph for this function:

Member Function Documentation

◆ get_parameters()

std::string RammingPanel::get_parameters ( )
223{
224 std::vector<float> speeds = m_chart->get_ramming_speed(0.25f);
225 std::vector<std::pair<float,float>> buttons = m_chart->get_buttons();
226 std::stringstream stream;
228 for (const float& speed_value : speeds)
229 stream << " " << speed_value;
230 stream << "|";
231 for (const auto& button : buttons)
232 stream << " " << button.first << " " << button.second;
233 return stream.str();
234}
bool button(const IconManager::Icon &activ, const IconManager::Icon &hover, const IconManager::Icon &disable, bool disabled)
Use icon as button with 3 states activ hover and disabled.
Definition IconManager.cpp:418

References Slic3r::GUI::button(), m_chart, m_ramming_line_width_multiplicator, and m_ramming_step_multiplicator.

Here is the call graph for this function:

◆ line_parameters_changed()

void RammingPanel::line_parameters_changed ( )
private

References m_ramming_line_width_multiplicator, m_ramming_step_multiplicator, m_widget_ramming_line_width_multiplicator, and m_widget_ramming_step_multiplicator.

Referenced by RammingPanel().

Here is the caller graph for this function:

Member Data Documentation

◆ m_chart

Chart* RammingPanel::m_chart = nullptr
private

Referenced by RammingPanel(), and get_parameters().

◆ m_ramming_line_width_multiplicator

int RammingPanel::m_ramming_line_width_multiplicator
private

◆ m_ramming_step_multiplicator

int RammingPanel::m_ramming_step_multiplicator
private

◆ m_widget_ramming_line_width_multiplicator

SpinInput* RammingPanel::m_widget_ramming_line_width_multiplicator = nullptr
private

◆ m_widget_ramming_step_multiplicator

SpinInput* RammingPanel::m_widget_ramming_step_multiplicator = nullptr
private

◆ m_widget_time

SpinInput* RammingPanel::m_widget_time = nullptr
private

Referenced by RammingPanel().

◆ m_widget_volume

SpinInput* RammingPanel::m_widget_volume = nullptr
private

Referenced by RammingPanel().


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