#5333 - Reworked navigation of preview's sliders using the keyboard

This commit is contained in:
enricoturri1966 2020-12-01 08:33:06 +01:00
parent 982e6eb55b
commit 6ae1a10614
8 changed files with 102 additions and 2 deletions

View file

@ -83,4 +83,12 @@
#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_

View file

@ -1519,6 +1519,10 @@ void Control::move_current_thumb(const bool condition)
if (accelerator > 0)
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) {
m_lower_value -= delta;
correct_lower_value();
@ -1579,13 +1583,26 @@ void Control::OnKeyDown(wxKeyEvent &event)
if (key == WXK_LEFT || key == WXK_RIGHT)
move_current_thumb(key == WXK_LEFT);
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)
m_selection = ssHigher;
else if (key == WXK_DOWN && is_lower_thumb_editable())
m_selection = ssLower;
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
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 {
if (m_is_focused) {
@ -1599,6 +1616,12 @@ void Control::OnKeyDown(wxKeyEvent &event)
else if (key == WXK_UP || key == WXK_DOWN)
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

View file

@ -1078,7 +1078,11 @@ wxDEFINE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent);
wxDEFINE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
wxDEFINE_EVENT(EVT_GLCANVAS_TAB, 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);
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
wxDEFINE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent);
wxDEFINE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent);
wxDEFINE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent);
@ -2818,7 +2822,11 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
keyCode == WXK_UP ||
keyCode == WXK_DOWN) {
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));
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
}
}
}

View file

@ -103,7 +103,11 @@ wxDECLARE_EVENT(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED, SimpleEvent);
wxDECLARE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent);
wxDECLARE_EVENT(EVT_GLCANVAS_TAB, 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);
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
wxDECLARE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent);
wxDECLARE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent);
wxDECLARE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent);

View file

@ -460,6 +460,13 @@ void Preview::unbind_event_handlers()
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()
{
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();
#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') {
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);
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')
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
m_layers_slider->ChangeOneLayerLock();
else if (key == WXK_SHIFT)
m_layers_slider->UseDefaultColors(false);

View file

@ -157,6 +157,9 @@ public:
void update_bottom_toolbar();
void update_moves_slider();
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();
private:

View file

@ -203,22 +203,48 @@ void KBShortcutsDialog::fill_shortcuts()
}
Shortcuts preview_shortcuts = {
{ L("Arrow Up"), L("Upper Layer") },
{ L("Arrow Down"), L("Lower Layer") },
#if ENABLE_ARROW_KEYS_WITH_SLIDERS
{ 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") },
{ "D", L("Lower Layer") },
{ "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));
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 Down"), L("Move current slider thumb Down") },
{ L("Arrow Left"), L("Set upper 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("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") },
{ ctrl, L("Press to speed up 5 times while moving thumb\nwith arrow keys or mouse wheel") },
};

View file

@ -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_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); });
#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); });
#endif // ENABLE_ARROW_KEYS_WITH_SLIDERS
preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_EDIT_COLOR_CHANGE, [this](wxKeyEvent& evt) { preview->edit_layers_slider(evt); });
if (wxGetApp().is_editor()) {