From 7adc5725b8254de59e131a63d7c8d4b3ae58e063 Mon Sep 17 00:00:00 2001 From: sin-ack Date: Thu, 12 Aug 2021 19:55:17 +0000 Subject: [PATCH] Base: Add the serenity-application HackStudio template This is a template which instantiates into what you'd write to start out a basic Serenity GUI application. It contains a CMakeLists.txt file which describes what each declaration does, a simple GUI application which uses layouts, widgets and callbacks, and comes with a minimal set of pledges which the user can add to as necessary. --- .../devel/templates/serenity-application.ini | 5 +++ .../templates/serenity-application.postcreate | 28 ++++++++++++ .../templates/serenity-application/main.cpp | 40 ++++++++++++++++++ .../templates-32x32/serenity-application.png | Bin 0 -> 7874 bytes 4 files changed, 73 insertions(+) create mode 100644 Base/res/devel/templates/serenity-application.ini create mode 100644 Base/res/devel/templates/serenity-application.postcreate create mode 100644 Base/res/devel/templates/serenity-application/main.cpp create mode 100644 Base/res/icons/hackstudio/templates-32x32/serenity-application.png diff --git a/Base/res/devel/templates/serenity-application.ini b/Base/res/devel/templates/serenity-application.ini new file mode 100644 index 00000000000..fe3a281bc05 --- /dev/null +++ b/Base/res/devel/templates/serenity-application.ini @@ -0,0 +1,5 @@ +[HackStudioTemplate] +Name=SerenityOS GUI Application (C++) +Description=Template for creating a GUI-based SerenityOS application with CMake. +Priority=90 +IconName32x=serenity-application diff --git a/Base/res/devel/templates/serenity-application.postcreate b/Base/res/devel/templates/serenity-application.postcreate new file mode 100644 index 00000000000..d28ead888f0 --- /dev/null +++ b/Base/res/devel/templates/serenity-application.postcreate @@ -0,0 +1,28 @@ +#!/bin/sh + +echo > $2/CMakeLists.txt <<-EOF +# NOTE! Make sure to edit this file and remove the comments before submitting a +# PR for a new application. + +# Defines your application component. If the application is essential to the +# system's operation, add REQUIRED. If it would be beneficial for the user that +# this application is built by default, add RECOMMENDED. +serenity_component( + $1 + TARGETS $1 +) + +# Place source files here. You should also add auto-generated headers, if you +# have any. +set(SOURCES + main.cpp +) + +# Change this to something cool. :^) +serenity_app($1 ICON filetype-executable) + +# You should place all the libraries that your application uses here. You can +# identify each library by their include path. An exception is LibCore, which +# is linked to all components by default. +target_link_libraries($1 LibGUI LibGfx) +EOF diff --git a/Base/res/devel/templates/serenity-application/main.cpp b/Base/res/devel/templates/serenity-application/main.cpp new file mode 100644 index 00000000000..d3e728bc711 --- /dev/null +++ b/Base/res/devel/templates/serenity-application/main.cpp @@ -0,0 +1,40 @@ +#include +#include +#include +#include +#include +#include + +int main(int argc, char** argv) +{ + if (pledge("stdio recvfd sendfd rpath wpath cpath unix", nullptr) < 0) { + perror("pledge"); + return 1; + } + + auto app = GUI::Application::construct(argc, argv); + + if (pledge("stdio recvfd sendfd rpath", nullptr) < 0) { + perror("pledge"); + return 1; + } + + auto window = GUI::Window::construct(); + window->set_title("Form1"); + window->resize(96, 44); + window->set_resizable(false); + + auto& main_widget = window->set_main_widget(); + main_widget.set_fill_with_background_color(true); + + auto& layout = main_widget.set_layout(); + layout.set_margins({ 16, 16, 16, 16 }); + + auto& button = main_widget.add("Click me!"); + button.on_click = [&](auto) { + GUI::MessageBox::show(window, "Hello friends!", ":^)"); + }; + + window->show(); + return app->exec(); +} diff --git a/Base/res/icons/hackstudio/templates-32x32/serenity-application.png b/Base/res/icons/hackstudio/templates-32x32/serenity-application.png new file mode 100644 index 0000000000000000000000000000000000000000..2d85ff27292f2ea8774c2060a6fea164ec2aa406 GIT binary patch literal 7874 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 literal 0 HcmV?d00001