From 515bbd0b833f8fb9abbcc5e50d3d4318f25c2168 Mon Sep 17 00:00:00 2001 From: Tobias Christiansen Date: Sun, 1 Aug 2021 17:19:10 +0200 Subject: PixelPaint: Add a Dialog for the creation of a Guide You can select whether you want a horizontal or a vertical Guide and specify the offset you want it to be at. --- Userland/Applications/PixelPaint/CMakeLists.txt | 3 + .../PixelPaint/CreateNewGuideDialog.cpp | 65 ++++++++++++++++++++ .../PixelPaint/CreateNewGuideDialog.gml | 71 ++++++++++++++++++++++ .../Applications/PixelPaint/CreateNewGuideDialog.h | 31 ++++++++++ 4 files changed, 170 insertions(+) create mode 100644 Userland/Applications/PixelPaint/CreateNewGuideDialog.cpp create mode 100644 Userland/Applications/PixelPaint/CreateNewGuideDialog.gml create mode 100644 Userland/Applications/PixelPaint/CreateNewGuideDialog.h (limited to 'Userland') diff --git a/Userland/Applications/PixelPaint/CMakeLists.txt b/Userland/Applications/PixelPaint/CMakeLists.txt index 117dda935b..823ac3c4d1 100644 --- a/Userland/Applications/PixelPaint/CMakeLists.txt +++ b/Userland/Applications/PixelPaint/CMakeLists.txt @@ -6,10 +6,13 @@ serenity_component( ) compile_gml(PixelPaintWindow.gml PixelPaintWindowGML.h pixel_paint_window_gml) +compile_gml(CreateNewGuideDialog.gml CreateNewGuideDialogGML.h create_new_guide_dialog_gml) set(SOURCES BrushTool.cpp BucketTool.cpp + CreateNewGuideDialog.cpp + CreateNewGuideDialogGML.h CreateNewImageDialog.cpp CreateNewLayerDialog.cpp EllipseTool.cpp diff --git a/Userland/Applications/PixelPaint/CreateNewGuideDialog.cpp b/Userland/Applications/PixelPaint/CreateNewGuideDialog.cpp new file mode 100644 index 0000000000..c81e4e7d81 --- /dev/null +++ b/Userland/Applications/PixelPaint/CreateNewGuideDialog.cpp @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021, Tobias Christiansen + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include "CreateNewGuideDialog.h" +#include +#include +#include +#include +#include + +namespace PixelPaint { + +CreateNewGuideDialog::CreateNewGuideDialog(GUI::Window* parent_window) + : Dialog(parent_window) +{ + set_title("Create new Guide"); + set_icon(parent_window->icon()); + resize(200, 120); + set_resizable(false); + + auto& main_widget = set_main_widget(); + if (!main_widget.load_from_gml(create_new_guide_dialog_gml)) + VERIFY_NOT_REACHED(); + + auto horizontal_radio = main_widget.find_descendant_of_type_named("orientation_horizontal_radio"); + auto vertical_radio = main_widget.find_descendant_of_type_named("orientation_vertical_radio"); + auto offset_text_box = main_widget.find_descendant_of_type_named("offset_text_box"); + auto ok_button = main_widget.find_descendant_of_type_named("ok_button"); + auto cancel_button = main_widget.find_descendant_of_type_named("cancel_button"); + VERIFY(horizontal_radio); + VERIFY(ok_button); + VERIFY(offset_text_box); + VERIFY(vertical_radio); + VERIFY(cancel_button); + + horizontal_radio->on_checked = [this](bool checked) { m_is_horizontal_checked = checked; }; + vertical_radio->on_checked = [this](bool checked) { m_is_vertical_checked = checked; }; + + ok_button->on_click = [this, &offset_text_box](auto) { + if (m_is_vertical_checked) { + m_orientation = Guide::Orientation::Vertical; + } else if (m_is_horizontal_checked) { + m_orientation = Guide::Orientation::Horizontal; + } else { + done(ExecResult::ExecAborted); + return; + } + + if (offset_text_box->text().is_empty()) + done(ExecResult::ExecAborted); + + m_offset = offset_text_box->text(); + + done(ExecResult::ExecOK); + }; + + cancel_button->on_click = [this](auto) { + done(ExecResult::ExecCancel); + }; +} + +} diff --git a/Userland/Applications/PixelPaint/CreateNewGuideDialog.gml b/Userland/Applications/PixelPaint/CreateNewGuideDialog.gml new file mode 100644 index 0000000000..9dc7c5b957 --- /dev/null +++ b/Userland/Applications/PixelPaint/CreateNewGuideDialog.gml @@ -0,0 +1,71 @@ +@GUI::Frame { + fill_with_background_color: true + + layout: @GUI::VerticalBoxLayout { + } + + @GUI::Widget { + layout: @GUI::VerticalBoxLayout { + margins: [4,4,4,4] + } + + @GUI::GroupBox { + title: "Orientation" + shrink_to_fit: true + + layout: @GUI::HorizontalBoxLayout { + margins: [10,20,10,10] + } + + @GUI::RadioButton { + name: "orientation_horizontal_radio" + text: "Horizontal" + } + + @GUI::RadioButton { + name: "orientation_vertical_radio" + text: "Vertical" + } + } + } + + @GUI::Widget { + layout: @GUI::HorizontalBoxLayout { + margins: [4,4,4,4] + } + shrink_to_fit: true + + @GUI::Label { + text: "Offset" + text_alignment: "CenterLeft" + } + + @GUI::TextBox { + name: "offset_text_box" + } + } + + + @GUI::Widget { + max_height: 24 + + layout: @GUI::HorizontalBoxLayout { + margins: [4,4,4,4] + } + + @GUI::Widget { + } + + @GUI::Button { + name: "ok_button" + text: "OK" + max_width: 75 + } + + @GUI::Button { + name: "cancel_button" + text: "Cancel" + max_width: 75 + } + } +} diff --git a/Userland/Applications/PixelPaint/CreateNewGuideDialog.h b/Userland/Applications/PixelPaint/CreateNewGuideDialog.h new file mode 100644 index 0000000000..4355a19e89 --- /dev/null +++ b/Userland/Applications/PixelPaint/CreateNewGuideDialog.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021, Tobias Christiansen + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include "Guide.h" +#include + +namespace PixelPaint { + +class CreateNewGuideDialog final : public GUI::Dialog { + C_OBJECT(CreateNewGuideDialog); + +public: + String const offset() const { return m_offset; } + Guide::Orientation orientation() const { return m_orientation; } + +private: + CreateNewGuideDialog(GUI::Window* parent_window); + + String m_offset; + Guide::Orientation m_orientation; + + bool m_is_horizontal_checked { false }; + bool m_is_vertical_checked { false }; +}; + +} -- cgit v1.2.3