Selaa lähdekoodia

LibGUI: Teach ColumnsView where indexes are placed (and scroll to them)

This makes the view to scroll when pressing arrow keys! :^)
Karol Kosek 2 vuotta sitten
vanhempi
commit
35e3df7f13

+ 19 - 0
Userland/Libraries/LibGUI/ColumnsView.cpp

@@ -435,6 +435,25 @@ void ColumnsView::move_cursor(CursorMovement movement, SelectionUpdate selection
         set_cursor(new_index, selection_update);
 }
 
+Gfx::IntRect ColumnsView::index_content_rect(ModelIndex const& index)
+{
+    int column_x = 0;
+    for (auto const& column : m_columns) {
+        if (column.parent_index == index.parent())
+            return { column_x, index.row() * item_height(), column.width, item_height() };
+
+        column_x += column.width + column_separator_width();
+    }
+    return {};
+}
+
+void ColumnsView::scroll_into_view(ModelIndex const& index, bool scroll_horizontally, bool scroll_vertically)
+{
+    if (!model())
+        return;
+    AbstractScrollableWidget::scroll_into_view(index_content_rect(index), scroll_horizontally, scroll_vertically);
+}
+
 Gfx::IntRect ColumnsView::content_rect(ModelIndex const& index) const
 {
     if (!index.is_valid())

+ 3 - 0
Userland/Libraries/LibGUI/ColumnsView.h

@@ -22,6 +22,8 @@ public:
     virtual Gfx::IntRect content_rect(ModelIndex const&) const override;
     virtual Gfx::IntRect paint_invalidation_rect(ModelIndex const&) const override;
 
+    virtual void scroll_into_view(ModelIndex const&, bool scroll_horizontally, bool scroll_vertically) override;
+
 private:
     ColumnsView();
     virtual ~ColumnsView() override = default;
@@ -54,6 +56,7 @@ private:
 
     Optional<Column> column_at_event_position(Gfx::IntPoint) const;
     ModelIndex index_at_event_position_in_column(Gfx::IntPoint, Column const&) const;
+    Gfx::IntRect index_content_rect(ModelIndex const&);
 
     bool m_rubber_banding { false };
     int m_rubber_band_origin { 0 };