瀏覽代碼

LibGUI: Add remove_tab and on_change to TabWidget

Oriko 5 年之前
父節點
當前提交
12c7375cdd
共有 2 個文件被更改,包括 15 次插入0 次删除
  1. 10 0
      Libraries/LibGUI/TabWidget.cpp
  2. 5 0
      Libraries/LibGUI/TabWidget.h

+ 10 - 0
Libraries/LibGUI/TabWidget.cpp

@@ -47,6 +47,12 @@ void TabWidget::add_widget(const StringView& title, Widget& widget)
     add_child(widget);
 }
 
+void TabWidget::remove_widget(Widget& widget)
+{
+    m_tabs.remove_first_matching([&widget](auto& entry) { return &widget == entry.widget; });
+    remove_child(widget);
+}
+
 void TabWidget::set_active_widget(Widget* widget)
 {
     if (widget == m_active_widget)
@@ -58,6 +64,10 @@ void TabWidget::set_active_widget(Widget* widget)
     if (m_active_widget) {
         m_active_widget->set_relative_rect(child_rect_for_size(size()));
         m_active_widget->set_visible(true);
+        deferred_invoke([this](auto&) {
+            if (on_change)
+                on_change(*m_active_widget);
+        });
     }
 
     update_bar();

+ 5 - 0
Libraries/LibGUI/TabWidget.h

@@ -53,6 +53,7 @@ public:
     int container_padding() const { return 2; }
 
     void add_widget(const StringView&, Widget&);
+    void remove_widget(Widget&);
 
     template<class T, class... Args>
     T& add_tab(const StringView& title, Args&&... args)
@@ -62,6 +63,10 @@ public:
         return *t;
     }
 
+    void remove_tab(Widget& tab) { remove_widget(tab); }
+
+    Function<void(const Widget&)> on_change;
+
 protected:
     TabWidget();