Serenity Operating System
1/*
2 * Copyright (c) 2021, Nick Vella <nick@nxk.io>
3 * Copyright (c) 2022, the SerenityOS developers.
4 *
5 * SPDX-License-Identifier: BSD-2-Clause
6 */
7
8#pragma once
9
10#include "ProjectTemplatesModel.h"
11#include <DevTools/HackStudio/ProjectTemplate.h>
12
13#include <AK/Result.h>
14#include <LibGUI/Button.h>
15#include <LibGUI/Dialog.h>
16#include <LibGUI/Label.h>
17#include <LibGUI/TextBox.h>
18
19namespace HackStudio {
20
21class NewProjectDialog : public GUI::Dialog {
22 C_OBJECT(NewProjectDialog);
23
24public:
25 static ExecResult show(GUI::Window* parent_window);
26
27 Optional<DeprecatedString> created_project_path() const { return m_created_project_path; }
28
29private:
30 NewProjectDialog(GUI::Window* parent);
31 virtual ~NewProjectDialog() override = default;
32
33 void update_dialog();
34 Optional<DeprecatedString> get_available_project_name();
35 Optional<DeprecatedString> get_project_full_path();
36
37 void do_create_project();
38
39 RefPtr<ProjectTemplate> selected_template();
40
41 NonnullRefPtr<ProjectTemplatesModel> m_model;
42 bool m_input_valid { false };
43
44 RefPtr<GUI::Widget> m_icon_view_container;
45 RefPtr<GUI::IconView> m_icon_view;
46
47 RefPtr<GUI::Label> m_description_label;
48 RefPtr<GUI::TextBox> m_name_input;
49 RefPtr<GUI::TextBox> m_create_in_input;
50 RefPtr<GUI::Label> m_full_path_label;
51
52 RefPtr<GUI::Button> m_ok_button;
53 RefPtr<GUI::Button> m_cancel_button;
54 RefPtr<GUI::Button> m_browse_button;
55
56 Optional<DeprecatedString> m_created_project_path;
57};
58
59}