1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 03:47:34 +00:00

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.
This commit is contained in:
Tobias Christiansen 2021-08-01 17:19:10 +02:00 committed by Ali Mohammad Pur
parent a717caa4b7
commit 515bbd0b83
4 changed files with 170 additions and 0 deletions

View file

@ -6,10 +6,13 @@ serenity_component(
) )
compile_gml(PixelPaintWindow.gml PixelPaintWindowGML.h pixel_paint_window_gml) compile_gml(PixelPaintWindow.gml PixelPaintWindowGML.h pixel_paint_window_gml)
compile_gml(CreateNewGuideDialog.gml CreateNewGuideDialogGML.h create_new_guide_dialog_gml)
set(SOURCES set(SOURCES
BrushTool.cpp BrushTool.cpp
BucketTool.cpp BucketTool.cpp
CreateNewGuideDialog.cpp
CreateNewGuideDialogGML.h
CreateNewImageDialog.cpp CreateNewImageDialog.cpp
CreateNewLayerDialog.cpp CreateNewLayerDialog.cpp
EllipseTool.cpp EllipseTool.cpp

View file

@ -0,0 +1,65 @@
/*
* Copyright (c) 2021, Tobias Christiansen <tobi@tobyase.de>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include "CreateNewGuideDialog.h"
#include <Applications/PixelPaint/CreateNewGuideDialogGML.h>
#include <LibGUI/Button.h>
#include <LibGUI/RadioButton.h>
#include <LibGUI/TextBox.h>
#include <LibGUI/Widget.h>
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<GUI::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<GUI::RadioButton>("orientation_horizontal_radio");
auto vertical_radio = main_widget.find_descendant_of_type_named<GUI::RadioButton>("orientation_vertical_radio");
auto offset_text_box = main_widget.find_descendant_of_type_named<GUI::TextBox>("offset_text_box");
auto ok_button = main_widget.find_descendant_of_type_named<GUI::Button>("ok_button");
auto cancel_button = main_widget.find_descendant_of_type_named<GUI::Button>("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);
};
}
}

View file

@ -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
}
}
}

View file

@ -0,0 +1,31 @@
/*
* Copyright (c) 2021, Tobias Christiansen <tobi@tobyase.de>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include "Guide.h"
#include <LibGUI/Dialog.h>
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 };
};
}