mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-05-24 13:38:14 +08:00
#5333 - Reworked navigation of preview's sliders using the keyboard
This commit is contained in:
parent
982e6eb55b
commit
6ae1a10614
@ -83,4 +83,12 @@
|
|||||||
#define ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN (1 && ENABLE_2_3_0_BETA1)
|
#define ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN (1 && ENABLE_2_3_0_BETA1)
|
||||||
|
|
||||||
|
|
||||||
|
//===================
|
||||||
|
// 2.3.0.beta2 techs
|
||||||
|
//===================
|
||||||
|
#define ENABLE_2_3_0_BETA2 1
|
||||||
|
|
||||||
|
#define ENABLE_ARROW_KEYS_WITH_SLIDERS (1 && ENABLE_2_3_0_BETA2)
|
||||||
|
|
||||||
|
|
||||||
#endif // _prusaslicer_technologies_h_
|
#endif // _prusaslicer_technologies_h_
|
||||||
|
@ -1519,6 +1519,10 @@ void Control::move_current_thumb(const bool condition)
|
|||||||
if (accelerator > 0)
|
if (accelerator > 0)
|
||||||
delta *= accelerator;
|
delta *= accelerator;
|
||||||
|
|
||||||
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
if (m_selection == ssUndef) m_selection = ssHigher;
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
|
||||||
if (m_selection == ssLower) {
|
if (m_selection == ssLower) {
|
||||||
m_lower_value -= delta;
|
m_lower_value -= delta;
|
||||||
correct_lower_value();
|
correct_lower_value();
|
||||||
@ -1579,13 +1583,26 @@ void Control::OnKeyDown(wxKeyEvent &event)
|
|||||||
if (key == WXK_LEFT || key == WXK_RIGHT)
|
if (key == WXK_LEFT || key == WXK_RIGHT)
|
||||||
move_current_thumb(key == WXK_LEFT);
|
move_current_thumb(key == WXK_LEFT);
|
||||||
else if (key == WXK_UP || key == WXK_DOWN) {
|
else if (key == WXK_UP || key == WXK_DOWN) {
|
||||||
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
if (key == WXK_DOWN)
|
||||||
|
m_selection = ssHigher;
|
||||||
|
else if (key == WXK_UP && is_lower_thumb_editable())
|
||||||
|
m_selection = ssLower;
|
||||||
|
#else
|
||||||
if (key == WXK_UP)
|
if (key == WXK_UP)
|
||||||
m_selection = ssHigher;
|
m_selection = ssHigher;
|
||||||
else if (key == WXK_DOWN && is_lower_thumb_editable())
|
else if (key == WXK_DOWN && is_lower_thumb_editable())
|
||||||
m_selection = ssLower;
|
m_selection = ssLower;
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
else {
|
||||||
|
if (key == WXK_LEFT || key == WXK_RIGHT)
|
||||||
|
move_current_thumb(key == WXK_LEFT);
|
||||||
|
}
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (m_is_focused) {
|
if (m_is_focused) {
|
||||||
@ -1599,6 +1616,12 @@ void Control::OnKeyDown(wxKeyEvent &event)
|
|||||||
else if (key == WXK_UP || key == WXK_DOWN)
|
else if (key == WXK_UP || key == WXK_DOWN)
|
||||||
move_current_thumb(key == WXK_UP);
|
move_current_thumb(key == WXK_UP);
|
||||||
}
|
}
|
||||||
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
else {
|
||||||
|
if (key == WXK_UP || key == WXK_DOWN)
|
||||||
|
move_current_thumb(key == WXK_UP);
|
||||||
|
}
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
}
|
}
|
||||||
|
|
||||||
event.Skip(); // !Needed to have EVT_CHAR generated as well
|
event.Skip(); // !Needed to have EVT_CHAR generated as well
|
||||||
|
@ -1078,7 +1078,11 @@ wxDEFINE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent);
|
|||||||
wxDEFINE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
|
wxDEFINE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
|
||||||
wxDEFINE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
|
wxDEFINE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
|
||||||
wxDEFINE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent);
|
wxDEFINE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent);
|
||||||
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
wxDEFINE_EVENT(EVT_GLCANVAS_MOVE_SLIDERS, wxKeyEvent);
|
||||||
|
#else
|
||||||
wxDEFINE_EVENT(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, wxKeyEvent);
|
wxDEFINE_EVENT(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, wxKeyEvent);
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
wxDEFINE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent);
|
wxDEFINE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent);
|
||||||
wxDEFINE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent);
|
wxDEFINE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent);
|
||||||
wxDEFINE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent);
|
wxDEFINE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent);
|
||||||
@ -2818,7 +2822,11 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
|
|||||||
keyCode == WXK_UP ||
|
keyCode == WXK_UP ||
|
||||||
keyCode == WXK_DOWN) {
|
keyCode == WXK_DOWN) {
|
||||||
if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
|
if (dynamic_cast<Preview*>(m_canvas->GetParent()) != nullptr)
|
||||||
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
post_event(wxKeyEvent(EVT_GLCANVAS_MOVE_SLIDERS, evt));
|
||||||
|
#else
|
||||||
post_event(wxKeyEvent(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, evt));
|
post_event(wxKeyEvent(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, evt));
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,7 +103,11 @@ wxDECLARE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent);
|
|||||||
wxDECLARE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
|
wxDECLARE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
|
||||||
wxDECLARE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
|
wxDECLARE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent);
|
||||||
wxDECLARE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent);
|
wxDECLARE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent);
|
||||||
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
wxDECLARE_EVENT(EVT_GLCANVAS_MOVE_SLIDERS, wxKeyEvent);
|
||||||
|
#else
|
||||||
wxDECLARE_EVENT(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, wxKeyEvent);
|
wxDECLARE_EVENT(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, wxKeyEvent);
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
wxDECLARE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent);
|
wxDECLARE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent);
|
||||||
wxDECLARE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent);
|
wxDECLARE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent);
|
||||||
wxDECLARE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent);
|
wxDECLARE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent);
|
||||||
|
@ -460,6 +460,13 @@ void Preview::unbind_event_handlers()
|
|||||||
m_moves_slider->Unbind(wxEVT_SCROLL_CHANGED, &Preview::on_moves_slider_scroll_changed, this);
|
m_moves_slider->Unbind(wxEVT_SCROLL_CHANGED, &Preview::on_moves_slider_scroll_changed, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
void Preview::move_moves_slider(wxKeyEvent& evt)
|
||||||
|
{
|
||||||
|
if (m_moves_slider != nullptr) m_moves_slider->OnKeyDown(evt);
|
||||||
|
}
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
|
||||||
void Preview::hide_layers_slider()
|
void Preview::hide_layers_slider()
|
||||||
{
|
{
|
||||||
m_layers_slider_sizer->Hide((size_t)0);
|
m_layers_slider_sizer->Hide((size_t)0);
|
||||||
@ -765,12 +772,26 @@ void Preview::update_layers_slider_from_canvas(wxKeyEvent& event)
|
|||||||
|
|
||||||
const auto key = event.GetKeyCode();
|
const auto key = event.GetKeyCode();
|
||||||
|
|
||||||
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
if (key == 'S' || key == 'W') {
|
||||||
|
const int new_pos = key == 'W' ? m_layers_slider->GetHigherValue() + 1 : m_layers_slider->GetHigherValue() - 1;
|
||||||
|
#else
|
||||||
if (key == 'U' || key == 'D') {
|
if (key == 'U' || key == 'D') {
|
||||||
const int new_pos = key == 'U' ? m_layers_slider->GetHigherValue() + 1 : m_layers_slider->GetHigherValue() - 1;
|
const int new_pos = key == 'U' ? m_layers_slider->GetHigherValue() + 1 : m_layers_slider->GetHigherValue() - 1;
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
m_layers_slider->SetHigherValue(new_pos);
|
m_layers_slider->SetHigherValue(new_pos);
|
||||||
if (event.ShiftDown() || m_layers_slider->is_one_layer()) m_layers_slider->SetLowerValue(m_layers_slider->GetHigherValue());
|
if (event.ShiftDown() || m_layers_slider->is_one_layer()) m_layers_slider->SetLowerValue(m_layers_slider->GetHigherValue());
|
||||||
}
|
}
|
||||||
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
else if (key == 'A' || key == 'D') {
|
||||||
|
const int new_pos = key == 'D' ? m_moves_slider->GetHigherValue() + 1 : m_moves_slider->GetHigherValue() - 1;
|
||||||
|
m_moves_slider->SetHigherValue(new_pos);
|
||||||
|
if (event.ShiftDown() || m_moves_slider->is_one_layer()) m_moves_slider->SetLowerValue(m_moves_slider->GetHigherValue());
|
||||||
|
}
|
||||||
|
else if (key == 'X')
|
||||||
|
#else
|
||||||
else if (key == 'S')
|
else if (key == 'S')
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
m_layers_slider->ChangeOneLayerLock();
|
m_layers_slider->ChangeOneLayerLock();
|
||||||
else if (key == WXK_SHIFT)
|
else if (key == WXK_SHIFT)
|
||||||
m_layers_slider->UseDefaultColors(false);
|
m_layers_slider->UseDefaultColors(false);
|
||||||
|
@ -157,6 +157,9 @@ public:
|
|||||||
void update_bottom_toolbar();
|
void update_bottom_toolbar();
|
||||||
void update_moves_slider();
|
void update_moves_slider();
|
||||||
void enable_moves_slider(bool enable);
|
void enable_moves_slider(bool enable);
|
||||||
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
void move_moves_slider(wxKeyEvent& evt);
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
void hide_layers_slider();
|
void hide_layers_slider();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -203,22 +203,48 @@ void KBShortcutsDialog::fill_shortcuts()
|
|||||||
}
|
}
|
||||||
|
|
||||||
Shortcuts preview_shortcuts = {
|
Shortcuts preview_shortcuts = {
|
||||||
{ L("Arrow Up"), L("Upper Layer") },
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
{ L("Arrow Down"), L("Lower Layer") },
|
{ L("Arrow Up"), L("Move vertical slider current thumb Up") },
|
||||||
|
{ L("Arrow Down"), L("Move vertical slider current thumb Down") },
|
||||||
|
{ L("Arrow Left"), L("Move horizontal slider current thumb Left") },
|
||||||
|
{ L("Arrow Right"), L("Move horizontal slider current thumb Right") },
|
||||||
|
{ "W", L("Move vertical slider current thumb Up") },
|
||||||
|
{ "S", L("Move vertical slider current thumb Down") },
|
||||||
|
{ "A", L("Move horizontal slider current thumb Left") },
|
||||||
|
{ "D", L("Move horizontal slider current thumb Right") },
|
||||||
|
{ "O", L("Toggle vertical slider one layer mode ON/OFF") },
|
||||||
|
{ "L", L("Show/Hide Legend and Estimated printing time") },
|
||||||
|
#else
|
||||||
|
{ L("Arrow Up"), L("Upper layer") },
|
||||||
|
{ L("Arrow Down"), L("Lower layer") },
|
||||||
{ "U", L("Upper Layer") },
|
{ "U", L("Upper Layer") },
|
||||||
{ "D", L("Lower Layer") },
|
{ "D", L("Lower Layer") },
|
||||||
{ "L", L("Show/Hide Legend & Estimated printing time") },
|
{ "L", L("Show/Hide Legend & Estimated printing time") },
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
};
|
};
|
||||||
|
|
||||||
m_full_shortcuts.push_back(std::make_pair(_L("Preview"), preview_shortcuts));
|
m_full_shortcuts.push_back(std::make_pair(_L("Preview"), preview_shortcuts));
|
||||||
|
|
||||||
Shortcuts layers_slider_shortcuts = {
|
Shortcuts layers_slider_shortcuts = {
|
||||||
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
{ L("Arrow Up"), L("Vertical slider - Move current thumb Up") },
|
||||||
|
{ L("Arrow Down"), L("Vertical slider - Move current thumb Down") },
|
||||||
|
{ L("Arrow Left"), L("Vertical slider - Set upper thumb to current thumb") },
|
||||||
|
{ L("Arrow Right"), L("Vertical slider - Set lower thumb to current thumb") },
|
||||||
|
{ "+", L("Vertical slider - Add color change marker for current layer") },
|
||||||
|
{ "-", L("Vertical slider - Delete color change marker for current layer") },
|
||||||
|
{ L("Arrow Up"), L("Horizontal slider - Set left thumb to current thumb") },
|
||||||
|
{ L("Arrow Down"), L("Horizontal slider - Set right thumb to current thumb") },
|
||||||
|
{ L("Arrow Left"), L("Horizontal slider - Move current thumb Left") },
|
||||||
|
{ L("Arrow Right"), L("Horizontal slider - Move current thumb Right") },
|
||||||
|
#else
|
||||||
{ L("Arrow Up"), L("Move current slider thumb Up") },
|
{ L("Arrow Up"), L("Move current slider thumb Up") },
|
||||||
{ L("Arrow Down"), L("Move current slider thumb Down") },
|
{ L("Arrow Down"), L("Move current slider thumb Down") },
|
||||||
{ L("Arrow Left"), L("Set upper thumb to current slider thumb") },
|
{ L("Arrow Left"), L("Set upper thumb to current slider thumb") },
|
||||||
{ L("Arrow Right"), L("Set lower thumb to current slider thumb") },
|
{ L("Arrow Right"), L("Set lower thumb to current slider thumb") },
|
||||||
{ "+", L("Add color change marker for current layer") },
|
{ "+", L("Add color change marker for current layer") },
|
||||||
{ "-", L("Delete color change marker for current layer") },
|
{ "-", L("Delete color change marker for current layer") },
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
{ "Shift+", L("Press to speed up 5 times while moving thumb\nwith arrow keys or mouse wheel") },
|
{ "Shift+", L("Press to speed up 5 times while moving thumb\nwith arrow keys or mouse wheel") },
|
||||||
{ ctrl, L("Press to speed up 5 times while moving thumb\nwith arrow keys or mouse wheel") },
|
{ ctrl, L("Press to speed up 5 times while moving thumb\nwith arrow keys or mouse wheel") },
|
||||||
};
|
};
|
||||||
|
@ -2055,7 +2055,14 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
|||||||
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_TAB, [this](SimpleEvent&) { select_next_view_3D(); });
|
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_TAB, [this](SimpleEvent&) { select_next_view_3D(); });
|
||||||
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_COLLAPSE_SIDEBAR, [this](SimpleEvent&) { this->q->collapse_sidebar(!this->q->is_sidebar_collapsed()); });
|
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_COLLAPSE_SIDEBAR, [this](SimpleEvent&) { this->q->collapse_sidebar(!this->q->is_sidebar_collapsed()); });
|
||||||
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_JUMP_TO, [this](wxKeyEvent& evt) { preview->jump_layers_slider(evt); });
|
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_JUMP_TO, [this](wxKeyEvent& evt) { preview->jump_layers_slider(evt); });
|
||||||
|
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
|
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_MOVE_SLIDERS, [this](wxKeyEvent& evt) {
|
||||||
|
preview->move_layers_slider(evt);
|
||||||
|
preview->move_moves_slider(evt);
|
||||||
|
});
|
||||||
|
#else
|
||||||
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, [this](wxKeyEvent& evt) { preview->move_layers_slider(evt); });
|
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_MOVE_LAYERS_SLIDER, [this](wxKeyEvent& evt) { preview->move_layers_slider(evt); });
|
||||||
|
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
|
||||||
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_EDIT_COLOR_CHANGE, [this](wxKeyEvent& evt) { preview->edit_layers_slider(evt); });
|
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_EDIT_COLOR_CHANGE, [this](wxKeyEvent& evt) { preview->edit_layers_slider(evt); });
|
||||||
|
|
||||||
if (wxGetApp().is_editor()) {
|
if (wxGetApp().is_editor()) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user