1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#include "Toolbox.hpp"
void clear() {
// Clears console on Linux
// Source: https://stackoverflow.com/a/52895729/12036073
std::cout << u8"\033[2J\033[1;1H";
}
void _printSubBoxSpacing() {
std::cout << " ";
}
/* Title boxes */
void titleBox(const char* title) {
std::cout << std::endl << "=== " << title << " ===" << std::endl;
}
void subTitleBox(const char* title) {
std::cout << std::endl << "--- " << title << " ---" << std::endl;
}
/* Status boxes */
void successBox(const char* message) {
std::cout << "<S> " << message << std::endl;
}
void successSubBox(const char* message) {
_printSubBoxSpacing();
successBox(message);
}
void warningBox(const char* message) {
std::cout << "<W> " << message << std::endl;
}
void warningSubBox(const char* message) {
_printSubBoxSpacing();
warningBox(message);
}
void errorBox(const char* message) {
std::cout << "<E> " << message << std::endl;
}
void errorSubBox(const char* message) {
_printSubBoxSpacing();
errorBox(message);
}
/* Input line boxes */
void _printInputBoxLabel(const char* label) {
std::cout << "(+) " << label;
}
void __inputLineBoxGetInput(char* output, unsigned maxWidth, bool ignore) {
if (ignore)
std::cin.ignore();
std::cin.getline(output, maxWidth);
}
void inputLineBox(const char* label, char* output, unsigned maxWidth, bool ignore) {
_printInputBoxLabel(label);
__inputLineBoxGetInput(output, maxWidth, ignore);
}
void inputLineSubBox(const char* label, char* output, unsigned maxWidth, bool ignore) {
_printSubBoxSpacing();
_printInputBoxLabel(label);
__inputLineBoxGetInput(output, maxWidth, ignore);
}
void pressEnterToContinue(bool ignore) {
char tmp;
inputLineBox("[Press enter to continue]", &tmp, 1, ignore);
}
/* Ordered list */
int orderedListIndex = 1;
void _printOrderedListBeginning() {
std::cout << "[" << orderedListIndex++ << "] ";
}
void resetOrderedList(int starter) {
orderedListIndex = starter;
}
/* Table */
void __printTableHeaderNumber(unsigned number) {
std::cout << ":" << ((number < 100) ? " " : "") << number << ((number < 10) ? " " : "");
}
void __printTableColumnHeader(unsigned start, unsigned count) {
std::cout << ": ";
for (unsigned i = 0; i < count; i++)
__printTableHeaderNumber(start++);
std::cout << ":" << std::endl;
for (unsigned i = 0; i <= count; i++)
std::cout << "====";
std::cout << "=" << std::endl;
}
void __printTableLine(unsigned columns) {
std::cout << ":===";
for (unsigned i = 0; i < columns; i++)
std::cout << "+---";
std::cout << ":" << std::endl;
}
void table(unsigned startNumber, unsigned columns, const char* items) {
__printTableColumnHeader(startNumber, columns);
__printTableHeaderNumber(startNumber);
for (unsigned i = 0, colInd = 0, rowInd = 0; items[i] != '\0'; i++, (++colInd) %= columns) {
if (colInd == 0 && i != 0) {
std::cout << ":" << std::endl;
__printTableLine(columns);
__printTableHeaderNumber((++rowInd) + startNumber);
}
std::cout << ((colInd == 0) ? "║ " : "| ") << items[rowInd * columns + colInd] << " ";
}
std::cout << ":" << std::endl;
}
|