Kaynağa Gözat

LibGUI: Add GUI::TabWidget::try_add_tab<T>(...)

This is a fallible variant of add_tab<T>(...) that returns ErrorOr.
Andreas Kling 3 yıl önce
ebeveyn
işleme
47b6339025

+ 7 - 1
Userland/Libraries/LibGUI/TabWidget.cpp

@@ -44,13 +44,19 @@ TabWidget::~TabWidget()
 {
 }
 
-void TabWidget::add_widget(StringView title, Widget& widget)
+ErrorOr<void> TabWidget::try_add_widget(StringView title, Widget& widget)
 {
     m_tabs.append({ title, nullptr, &widget });
     add_child(widget);
     update_focus_policy();
     if (on_tab_count_change)
         on_tab_count_change(m_tabs.size());
+    return {};
+}
+
+void TabWidget::add_widget(StringView title, Widget& widget)
+{
+    MUST(try_add_widget(title, widget));
 }
 
 void TabWidget::remove_widget(Widget& widget)

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

@@ -36,9 +36,19 @@ public:
     GUI::Margins const& container_margins() const { return m_container_margins; }
     void set_container_margins(GUI::Margins const&);
 
+    ErrorOr<void> try_add_widget(StringView, Widget&);
+
     void add_widget(StringView, Widget&);
     void remove_widget(Widget&);
 
+    template<class T, class... Args>
+    ErrorOr<NonnullRefPtr<T>> try_add_tab(StringView title, Args&&... args)
+    {
+        auto t = TRY(T::try_create(forward<Args>(args)...));
+        TRY(try_add_widget(title, *t));
+        return *t;
+    }
+
     template<class T, class... Args>
     T& add_tab(StringView title, Args&&... args)
     {