From 9e3d6d161b5d377b291f2ce6d5d2d455f952c752 Mon Sep 17 00:00:00 2001 From: Peter Elliott Date: Sat, 9 Oct 2021 21:17:42 -0600 Subject: [PATCH] LoginServer: Layout a basic login window --- Userland/Services/CMakeLists.txt | 1 + Userland/Services/LoginServer/CMakeLists.txt | 15 ++++++++ Userland/Services/LoginServer/LoginWindow.cpp | 36 ++++++++++++++++++ Userland/Services/LoginServer/LoginWindow.gml | 38 +++++++++++++++++++ Userland/Services/LoginServer/LoginWindow.h | 35 +++++++++++++++++ Userland/Services/LoginServer/main.cpp | 18 +++++++++ 6 files changed, 143 insertions(+) create mode 100644 Userland/Services/LoginServer/CMakeLists.txt create mode 100644 Userland/Services/LoginServer/LoginWindow.cpp create mode 100644 Userland/Services/LoginServer/LoginWindow.gml create mode 100644 Userland/Services/LoginServer/LoginWindow.h create mode 100644 Userland/Services/LoginServer/main.cpp diff --git a/Userland/Services/CMakeLists.txt b/Userland/Services/CMakeLists.txt index 6e4237f7cd..0667caa276 100644 --- a/Userland/Services/CMakeLists.txt +++ b/Userland/Services/CMakeLists.txt @@ -11,6 +11,7 @@ add_subdirectory(ImageDecoder) add_subdirectory(InspectorServer) add_subdirectory(KeyboardPreferenceLoader) add_subdirectory(LaunchServer) +add_subdirectory(LoginServer) add_subdirectory(LookupServer) add_subdirectory(NotificationServer) add_subdirectory(RequestServer) diff --git a/Userland/Services/LoginServer/CMakeLists.txt b/Userland/Services/LoginServer/CMakeLists.txt new file mode 100644 index 0000000000..b43f3bcccd --- /dev/null +++ b/Userland/Services/LoginServer/CMakeLists.txt @@ -0,0 +1,15 @@ +serenity_component( + LoginServer + TARGETS LoginServer +) + +compile_gml(LoginWindow.gml LoginWindowGML.h login_window_gml) + +set(SOURCES + LoginWindowGML.h + LoginWindow.cpp + main.cpp +) + +serenity_bin(LoginServer) +target_link_libraries(LoginServer LibGUI) diff --git a/Userland/Services/LoginServer/LoginWindow.cpp b/Userland/Services/LoginServer/LoginWindow.cpp new file mode 100644 index 0000000000..592e53c721 --- /dev/null +++ b/Userland/Services/LoginServer/LoginWindow.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021, Peter Elliott . + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include + +LoginWindow::LoginWindow(GUI::Window* parent) + : GUI::Window(parent) +{ + set_title("Login to SerenityOS"); + resize(413, 170); + center_on_screen(); + set_resizable(false); + set_icon(GUI::Icon::default_icon("ladyball").bitmap_for_size(16)); + + auto& widget = set_main_widget(); + widget.load_from_gml(login_window_gml); + m_banner = *widget.find_descendant_of_type_named("banner"); + m_banner->load_from_file("/res/graphics/brand-banner.png"); + m_banner->set_auto_resize(true); + + m_username = *widget.find_descendant_of_type_named("username"); + m_username->set_focus(true); + m_password = *widget.find_descendant_of_type_named("password"); + + m_ok_button = *widget.find_descendant_of_type_named("ok"); + m_ok_button->on_click = [&](auto) { + if (on_submit) + on_submit(); + }; +} diff --git a/Userland/Services/LoginServer/LoginWindow.gml b/Userland/Services/LoginServer/LoginWindow.gml new file mode 100644 index 0000000000..cc841e4953 --- /dev/null +++ b/Userland/Services/LoginServer/LoginWindow.gml @@ -0,0 +1,38 @@ +@GUI::Widget { + fill_with_background_color: true + + layout: @GUI::VerticalBoxLayout + + @GUI::ImageWidget { + name: "banner" + auto_resie: true + } + + @GUI::Widget { + layout: @GUI::VerticalBoxLayout { + margins: [8, 8, 8, 8] + } + + @GUI::TextBox { + name: "username" + placeholder: "username" + } + + @GUI::PasswordBox { + name: "password" + placeholder: "password" + } + + @GUI::Widget { + layout: @GUI::HorizontalBoxLayout + + @GUI::Widget + + @GUI::Button { + name: "ok" + text: "Ok" + fixed_width: 60 + } + } + } +} diff --git a/Userland/Services/LoginServer/LoginWindow.h b/Userland/Services/LoginServer/LoginWindow.h new file mode 100644 index 0000000000..ef706adb6b --- /dev/null +++ b/Userland/Services/LoginServer/LoginWindow.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021, Peter Elliott . + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include + +#pragma once + +class LoginWindow final : public GUI::Window { + C_OBJECT(LoginWindow); + +public: + virtual ~LoginWindow() override { } + + Function on_submit; + + String username() const { return m_username->text(); } + void set_username(StringView const& username) { m_username->set_text(username); } + + String password() const { return m_password->text(); } + void set_password(StringView const& password) { m_password->set_text(password); } + +private: + LoginWindow(GUI::Window* parent = nullptr); + + RefPtr m_banner; + RefPtr m_username; + RefPtr m_password; + RefPtr m_ok_button; +}; diff --git a/Userland/Services/LoginServer/main.cpp b/Userland/Services/LoginServer/main.cpp new file mode 100644 index 0000000000..a7329568e9 --- /dev/null +++ b/Userland/Services/LoginServer/main.cpp @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2021, Peter Elliott . + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +int main(int argc, char** argv) +{ + auto app = GUI::Application::construct(argc, argv); + + auto window = LoginWindow::construct(); + window->show(); + + return app->exec(); +}