Parcourir la source

LibGUI: Add GAboutDialog, a simple way to show a nice about box in apps

Andreas Kling il y a 5 ans
Parent
commit
5e34e43b0f
3 fichiers modifiés avec 85 ajouts et 0 suppressions
  1. 64 0
      Libraries/LibGUI/GAboutDialog.cpp
  2. 20 0
      Libraries/LibGUI/GAboutDialog.h
  3. 1 0
      Libraries/LibGUI/Makefile

+ 64 - 0
Libraries/LibGUI/GAboutDialog.cpp

@@ -0,0 +1,64 @@
+#include <LibGUI/GAboutDialog.h>
+#include <LibGUI/GBoxLayout.h>
+#include <LibGUI/GButton.h>
+#include <LibGUI/GLabel.h>
+#include <LibGUI/GWidget.h>
+
+GAboutDialog::GAboutDialog(const StringView& name, const GraphicsBitmap* icon, CObject* parent)
+    : GDialog(parent)
+    , m_name(name)
+    , m_icon(icon)
+{
+    resize(230, 120);
+    set_title(String::format("About %s", m_name.characters()));
+    set_resizable(false);
+
+    auto* widget = new GWidget;
+    set_main_widget(widget);
+    widget->set_fill_with_background_color(true);
+    widget->set_layout(make<GBoxLayout>(Orientation::Horizontal));
+
+    auto* left_container = new GWidget(widget);
+    left_container->set_size_policy(SizePolicy::Fixed, SizePolicy::Fill);
+    left_container->set_preferred_size(48, 0);
+    left_container->set_layout(make<GBoxLayout>(Orientation::Vertical));
+    auto* icon_label = new GLabel(left_container);
+    icon_label->set_icon(m_icon);
+    icon_label->set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed);
+    icon_label->set_preferred_size(40, 40);
+    left_container->layout()->add_spacer();
+
+    auto* right_container = new GWidget(widget);
+    right_container->set_layout(make<GBoxLayout>(Orientation::Vertical));
+    right_container->layout()->set_margins({ 0, 4, 4, 4 });
+
+    auto make_label = [&](const StringView& text, bool bold = false) {
+        auto* label = new GLabel(text, right_container);
+        label->set_text_alignment(TextAlignment::CenterLeft);
+        label->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed);
+        label->set_preferred_size(0, 14);
+        if (bold)
+            label->set_font(Font::default_bold_font());
+    };
+    make_label(m_name, true);
+    make_label("Serenity Operating System");
+    make_label("(C) The Serenity Developers");
+
+    right_container->layout()->add_spacer();
+
+    auto* button_container = new GWidget(right_container);
+    button_container->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed);
+    button_container->set_preferred_size(0, 20);
+    button_container->set_layout(make<GBoxLayout>(Orientation::Horizontal));
+    button_container->layout()->add_spacer();
+    auto* ok_button = new GButton("OK", button_container);
+    ok_button->set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed);
+    ok_button->set_preferred_size(80, 20);
+    ok_button->on_click = [this](auto&) {
+        done(GDialog::ExecOK);
+    };
+}
+
+GAboutDialog::~GAboutDialog()
+{
+}

+ 20 - 0
Libraries/LibGUI/GAboutDialog.h

@@ -0,0 +1,20 @@
+#pragma once
+
+#include <LibGUI/GDialog.h>
+
+class GAboutDialog final : public GDialog {
+    C_OBJECT(GAboutDialog)
+public:
+    GAboutDialog(const StringView& name, const GraphicsBitmap* icon = nullptr, CObject* parent = nullptr);
+    virtual ~GAboutDialog() override;
+
+    static void show(const StringView& name, const GraphicsBitmap* icon = nullptr, CObject* parent = nullptr)
+    {
+        GAboutDialog dialog(name, icon, parent);
+        dialog.exec();
+    }
+
+private:
+    String m_name;
+    RefPtr<GraphicsBitmap> m_icon;
+};

+ 1 - 0
Libraries/LibGUI/Makefile

@@ -53,6 +53,7 @@ OBJS = \
     GListView.o \
     GListView.o \
     GComboBox.o \
     GComboBox.o \
     GJsonArrayModel.o \
     GJsonArrayModel.o \
+    GAboutDialog.o \
     GWindow.o
     GWindow.o
 
 
 LIBRARY = libgui.a
 LIBRARY = libgui.a