Plutonium framework API 0.3.0
UI framework libraries for libnx
ui_Dialog.hpp
Go to the documentation of this file.
1
2/*
3
4 Plutonium library
5
6 @file ui_Dialog.hpp
7 @brief A Dialog is an easy way to ask the user to choose between several options.
8 @author XorTroll
9
10 @copyright Plutonium project - an easy-to-use UI framework for Nintendo Switch homebrew
11
12*/
13
14#pragma once
16#include <vector>
17
18namespace pu::ui {
19
20 class Application;
21
22 class Dialog {
23 public:
24 static constexpr Color DefaultTitleColor = { 0xA, 0xA, 0xA, 0xFF };
25 static constexpr Color DefaultContentColor = { 0x14, 0x14, 0x14, 0xFF };
26 static constexpr Color DefaultOptionColor = { 0xA, 0xA, 0xA, 0xFF };
27
28 static constexpr u32 DialogExtraBaseWidth = 250;
29 static constexpr u32 DialogBorderRadius = 35;
30
31 static constexpr u32 SpaceBetweenOptions = 20;
32
33 static constexpr u32 TitleExtraWidth = 90;
34 static constexpr u32 ContentExtraWidth = 90;
35 static constexpr u32 SpaceBetweenContentAndOptions = 140;
36 static constexpr u32 TitleTopMargin = 20;
37
38 static constexpr u32 TitleX = 45;
39 static constexpr u32 TitleY = 55;
40 static constexpr u32 ContentX = 45;
41 static constexpr u32 ContentY = 140;
42
43 static constexpr u32 IconExtraHeight = 25;
44
45 static constexpr u32 OptionsBaseHorizontalMargin = 45;
46 static constexpr u32 OptionHeight = 60;
47 static constexpr u32 OptionHorizontalMargin = 30;
48 static constexpr u32 OptionBorderRadius = OptionHeight / 3;
49 static constexpr u32 OptionBottomMargin = 25;
50
51 static constexpr u8 MaxScreenFadeAlpha = 125;
52
53 static constexpr u32 IconMargin = 30;
54
55 static inline constexpr Color MakeDialogColor(const u8 alpha) {
56 return { 0xE1, 0xE1, 0xE1, alpha };
57 }
58
59 static inline constexpr Color MakeOverColor(const u8 alpha) {
60 return { 0xB4, 0xB4, 0xC8, alpha };
61 }
62
63 static constexpr u8 OverAlphaIncrement = 48;
64 static constexpr u8 FadeAlphaIncrement = 25;
65
66 private:
67 std::string title_font_name;
68 std::string cnt_font_name;
69 std::string opt_font_name;
70 std::string title;
71 std::string cnt;
72 sdl2::Texture title_tex;
73 sdl2::Texture cnt_tex;
74 std::vector<std::string> opts;
75 std::vector<sdl2::Texture> opt_texs;
76 std::string cancel_opt;
77 i32 selected_opt_idx;
78 i32 selected_opt_over_alpha;
79 i32 prev_selected_opt_idx;
80 i32 prev_selected_opt_over_alpha;
81 bool user_cancelled;
82 sdl2::Texture icon_tex;
83
84 public:
85 Dialog(const std::string &title, const std::string &content);
88
89 void AddOption(const std::string &opt_name);
90
91 inline void SetCancelOption(const std::string &opt_name) {
92 this->cancel_opt = opt_name;
93 }
94
95 inline void RemoveCancelOption() {
96 this->SetCancelOption("");
97 }
98
99 inline bool HasCancelOption() {
100 return !this->cancel_opt.empty();
101 }
102
103 void SetIcon(const std::string &icon_path);
104
105 inline constexpr bool HasIcon() {
106 return this->icon_tex != nullptr;
107 }
108
110
111 inline constexpr bool UserCancelled() {
112 return this->user_cancelled;
113 }
114
115 inline bool IsOk() {
116 if(this->user_cancelled) {
117 return false;
118 }
119
120 if(this->HasCancelOption() && (this->selected_opt_idx == (this->opt_texs.size() - 1))) {
121 return false;
122 }
123
124 return true;
125 }
126 };
127
128}
Definition: ui_Application.hpp:22
Definition: ui_Dialog.hpp:22
static constexpr u8 MaxScreenFadeAlpha
Definition: ui_Dialog.hpp:51
static constexpr Color DefaultTitleColor
Definition: ui_Dialog.hpp:24
constexpr bool UserCancelled()
Definition: ui_Dialog.hpp:111
static constexpr u32 ContentY
Definition: ui_Dialog.hpp:41
void SetCancelOption(const std::string &opt_name)
Definition: ui_Dialog.hpp:91
bool HasCancelOption()
Definition: ui_Dialog.hpp:99
static constexpr Color MakeOverColor(const u8 alpha)
Definition: ui_Dialog.hpp:59
static constexpr u32 IconMargin
Definition: ui_Dialog.hpp:53
static constexpr u32 OptionHorizontalMargin
Definition: ui_Dialog.hpp:47
static constexpr u32 OptionBorderRadius
Definition: ui_Dialog.hpp:48
static constexpr Color DefaultContentColor
Definition: ui_Dialog.hpp:25
static constexpr u32 TitleExtraWidth
Definition: ui_Dialog.hpp:33
static constexpr u32 TitleTopMargin
Definition: ui_Dialog.hpp:36
i32 Show(Application *app_ref)
static constexpr u32 DialogExtraBaseWidth
Definition: ui_Dialog.hpp:28
static constexpr u32 OptionBottomMargin
Definition: ui_Dialog.hpp:49
static constexpr u32 OptionHeight
Definition: ui_Dialog.hpp:46
static constexpr u32 SpaceBetweenContentAndOptions
Definition: ui_Dialog.hpp:35
static constexpr u32 OptionsBaseHorizontalMargin
Definition: ui_Dialog.hpp:45
static constexpr u32 TitleY
Definition: ui_Dialog.hpp:39
void RemoveCancelOption()
Definition: ui_Dialog.hpp:95
static constexpr u8 OverAlphaIncrement
Definition: ui_Dialog.hpp:63
void AddOption(const std::string &opt_name)
static constexpr u32 SpaceBetweenOptions
Definition: ui_Dialog.hpp:31
static constexpr Color MakeDialogColor(const u8 alpha)
Definition: ui_Dialog.hpp:55
constexpr bool HasIcon()
Definition: ui_Dialog.hpp:105
static constexpr u32 IconExtraHeight
Definition: ui_Dialog.hpp:43
static constexpr u32 TitleX
Definition: ui_Dialog.hpp:38
static constexpr u32 DialogBorderRadius
Definition: ui_Dialog.hpp:29
static constexpr u32 ContentX
Definition: ui_Dialog.hpp:40
static constexpr Color DefaultOptionColor
Definition: ui_Dialog.hpp:26
static constexpr u8 FadeAlphaIncrement
Definition: ui_Dialog.hpp:64
static constexpr u32 ContentExtraWidth
Definition: ui_Dialog.hpp:34
bool IsOk()
Definition: ui_Dialog.hpp:115
void SetIcon(const std::string &icon_path)
Dialog(const std::string &title, const std::string &content)
SDL_Texture * Texture
Definition: sdl2_Types.hpp:11
Definition: elm_Button.hpp:18
s32 i32
Definition: pu_Include.hpp:28
#define PU_SMART_CTOR(type)
Definition: pu_Include.hpp:19
Definition: ui_Types.hpp:44