mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 06:02:44 +00:00 
			
		
		
		
	LibGUI: Add GAboutDialog, a simple way to show a nice about box in apps
This commit is contained in:
		
							parent
							
								
									c82627aae2
								
							
						
					
					
						commit
						5e34e43b0f
					
				
					 3 changed files with 85 additions and 0 deletions
				
			
		
							
								
								
									
										64
									
								
								Libraries/LibGUI/GAboutDialog.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								Libraries/LibGUI/GAboutDialog.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -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
									
								
								Libraries/LibGUI/GAboutDialog.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Libraries/LibGUI/GAboutDialog.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -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; | ||||
| }; | ||||
|  | @ -53,6 +53,7 @@ OBJS = \ | |||
|     GListView.o \
 | ||||
|     GComboBox.o \
 | ||||
|     GJsonArrayModel.o \
 | ||||
|     GAboutDialog.o \
 | ||||
|     GWindow.o | ||||
| 
 | ||||
| LIBRARY = libgui.a | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling