Bladeren bron

LibGUI: Allow TabWidget to remove all tabs except one

TheFightingCatfish 4 jaren geleden
bovenliggende
commit
8a0d465fbc
2 gewijzigde bestanden met toevoegingen van 17 en 0 verwijderingen
  1. 16 0
      Userland/Libraries/LibGUI/TabWidget.cpp
  2. 1 0
      Userland/Libraries/LibGUI/TabWidget.h

+ 16 - 0
Userland/Libraries/LibGUI/TabWidget.cpp

@@ -64,6 +64,22 @@ void TabWidget::remove_widget(Widget& widget)
         on_tab_count_change(m_tabs.size());
 }
 
+void TabWidget::remove_all_tabs_except(Widget& widget)
+{
+    VERIFY(widget.parent() == this);
+    set_active_widget(&widget);
+    m_tabs.remove_all_matching([this, &widget](auto& entry) {
+        bool is_other = &widget != entry.widget;
+        if (is_other)
+            remove_child(*entry.widget);
+        return is_other;
+    });
+    VERIFY(m_tabs.size() == 1);
+    update_focus_policy();
+    if (on_tab_count_change)
+        on_tab_count_change(1);
+}
+
 void TabWidget::update_focus_policy()
 {
     FocusPolicy policy;

+ 1 - 0
Userland/Libraries/LibGUI/TabWidget.h

@@ -48,6 +48,7 @@ public:
     }
 
     void remove_tab(Widget& tab) { remove_widget(tab); }
+    void remove_all_tabs_except(Widget& tab);
 
     void set_tab_title(Widget& tab, const StringView& title);
     void set_tab_icon(Widget& tab, const Gfx::Bitmap*);