Prechádzať zdrojové kódy

LibGUI: Add optional "tab key navigation" to AbstractView

If enabled, the view cursor will move right/left when pressing
tab/shift+tab.
Andreas Kling 5 rokov pred
rodič
commit
6316525d50

+ 13 - 0
Libraries/LibGUI/AbstractTableView.cpp

@@ -378,6 +378,19 @@ void AbstractTableView::keydown_event(KeyEvent& event)
         selection_update = SelectionUpdate::Shift;
     }
 
+    if (is_tab_key_navigation_enabled()) {
+        if (event.modifiers() == KeyModifier::Mod_Shift && event.key() == KeyCode::Key_Tab) {
+            move_cursor(CursorMovement::Left, SelectionUpdate::Set);
+            event.accept();
+            return;
+        }
+        if (!event.modifiers() && event.key() == KeyCode::Key_Tab) {
+            move_cursor(CursorMovement::Right, SelectionUpdate::Set);
+            event.accept();
+            return;
+        }
+    }
+
     if (event.key() == KeyCode::Key_Left) {
         move_cursor(CursorMovement::Left, selection_update);
         event.accept();

+ 4 - 0
Libraries/LibGUI/AbstractView.h

@@ -116,6 +116,9 @@ public:
     const ModelIndex& cursor_index() const { return m_cursor_index; }
     void set_cursor(ModelIndex, SelectionUpdate);
 
+    bool is_tab_key_navigation_enabled() const { return m_tab_key_navigation_enabled; }
+    void set_tab_key_navigation_enabled(bool enabled) { m_tab_key_navigation_enabled = enabled; }
+
 protected:
     AbstractView();
     virtual ~AbstractView() override;
@@ -162,6 +165,7 @@ private:
     unsigned m_edit_triggers { EditTrigger::DoubleClicked | EditTrigger::EditKeyPressed };
     bool m_activates_on_selection { false };
     bool m_multi_select { true };
+    bool m_tab_key_navigation_enabled { false };
 };
 
 }