Explorar o código

GTreeView: Make double-clicking toggle openable items

Andreas Kling %!s(int64=5) %!d(string=hai) anos
pai
achega
64b1e9deec
Modificáronse 2 ficheiros con 19 adicións e 0 borrados
  1. 18 0
      Libraries/LibGUI/GTreeView.cpp
  2. 1 0
      Libraries/LibGUI/GTreeView.h

+ 18 - 0
Libraries/LibGUI/GTreeView.cpp

@@ -77,6 +77,24 @@ void GTreeView::mousedown_event(GMouseEvent& event)
         toggle_index(index);
 }
 
+void GTreeView::doubleclick_event(GMouseEvent& event)
+{
+    if (!model())
+        return;
+    auto& model = *this->model();
+    auto adjusted_position = event.position().translated(horizontal_scrollbar().value() - frame_thickness(), vertical_scrollbar().value() - frame_thickness());
+    bool is_toggle;
+    auto index = index_at_content_position(adjusted_position, is_toggle);
+    if (!index.is_valid())
+        return;
+
+    if (selection().first() != index)
+        selection().set(index);
+
+    if (model.row_count(index))
+        toggle_index(index);
+}
+
 void GTreeView::toggle_index(const GModelIndex& index)
 {
     ASSERT(model()->row_count(index));

+ 1 - 0
Libraries/LibGUI/GTreeView.h

@@ -13,6 +13,7 @@ public:
 protected:
     virtual void paint_event(GPaintEvent&) override;
     virtual void mousedown_event(GMouseEvent&) override;
+    virtual void doubleclick_event(GMouseEvent&) override;
     virtual void keydown_event(GKeyEvent&) override;
     virtual void did_update_selection() override;
     virtual void did_update_model() override;