Skip to content

Commit 4e516a9

Browse files
committed
Update project version to 0.2, enhance widget examples, and improve logging functionality
1 parent 1f85d06 commit 4e516a9

7 files changed

Lines changed: 368 additions & 34 deletions

File tree

CMakeLists.txt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
cmake_minimum_required(VERSION 3.15)
2-
project(TUIFramework VERSION 1.0.0 LANGUAGES CXX)
2+
project(TUIFramework VERSION 0.2 LANGUAGES CXX)
33

44
set(CMAKE_CXX_STANDARD 17)
55
set(CMAKE_CXX_STANDARD_REQUIRED ON)
66
set(CMAKE_CXX_EXTENSIONS OFF)
77

8-
# Options de compilation
98
if(MSVC)
109
add_compile_options(/W4)
1110
else()
@@ -18,7 +17,7 @@ else()
1817
endif()
1918

2019
# =============================================================================
21-
# DÉPENDANCES
20+
# DEPENDENCIES
2221
# =============================================================================
2322

2423
# FTXUI
@@ -36,7 +35,7 @@ if(NOT ftxui_POPULATED)
3635
endif()
3736

3837
# =============================================================================
39-
# STRUCTURE DU PROJET
38+
# PROJECT STRUCTURE
4039
# =============================================================================
4140

4241
# Headers

debug_log.txt

Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
TUIResizableSplit: Constructor called.
2+
[TUIApp::exec] - Starting exec()
3+
[TUIApp::exec] - Using main_widget_.
4+
[TUIApp::exec] - Creating main_layout_component_ renderer.
5+
[TUIApp::exec] - Creating final_interactive_root.
6+
[TUIApp::exec] - Creating event_dispatcher.
7+
[TUIApp::exec] - Calling screen_.Loop().
8+
TUITreeView Node Event for Root: Event received.
9+
TUITreeView Node Event for Root: Event received.
10+
TUITreeView Node Event for Root: Event received.
11+
TUITreeView Node Event for Root: Event received.
12+
TUITreeView Node Event for Root: Event received.
13+
TUITreeView Node Event for Root: Event received.
14+
TUITreeView Node Event for Root: Event received.
15+
TUITreeView Node Event for Root: Event received.
16+
TUITreeView Node Event for Root: Event received.
17+
TUITreeView Node Event for Root: Event received.
18+
TUITreeView Node Event for Root: Event received.
19+
TUITreeView Node Event for Root: Event received.
20+
TUITreeView Node Event for Root: Event received.
21+
TUITreeView Node Event for Root: Event received.
22+
TUITreeView Node Event for Root: Event received.
23+
TUITreeView Node Event for Root: Event received.
24+
TUITreeView Node Event for Root: Event received.
25+
TUITreeView Node Event for Root: Event received.
26+
TUITreeView Node Event for Root: Event received.
27+
TUITreeView Node Event for Root: Event received.
28+
TUITreeView Node Event for Root: Event received.
29+
TUITreeView Node Event for Root: Event received.
30+
TUITreeView Node Event for Root: Event received.
31+
TUITreeView Node Event for Root: Event received.
32+
TUITreeView Node Event for Root: Event received.
33+
TUITreeView Node Event for Root: Event received.
34+
TUITreeView Node Event for Root: Event received.
35+
TUITreeView Node Event for Root: Event received.
36+
TUITreeView Node Event for Root: Event received.
37+
TUITreeView Node Event for Root: Event received.
38+
TUITreeView Node Event for Root: Event received.
39+
TUITreeView Node Event for Root: Event received.
40+
TUITreeView Node Event for Root: Event received.
41+
TUITreeView Node Event for Root: Event received.
42+
TUITreeView Node Event for Root: Event received.
43+
TUITreeView Node Event for Root: Event received.
44+
TUITreeView Node Event for Root: Event received.
45+
TUITreeView Node Event for Root: Event received.
46+
TUITreeView Node Event for Root: Event received.
47+
TUITreeView Node Event for Root: Event received.
48+
TUITreeView Node Event for Root: Event received.
49+
TUITreeView Node Event for Root: Event received.
50+
TUITreeView Node Event for Root: Event received.
51+
TUITreeView Node Event for Root: Event received.
52+
TUITreeView Node Event for Root: Event received.
53+
TUITreeView Node Event for Root: Event received.
54+
TUITreeView Node Event for Root: Event received.
55+
TUITreeView Node Event for Root: Event received.
56+
TUITreeView Node Event for Root: Event received.
57+
TUITreeView Node Event for Root: Event received.
58+
TUITreeView Node Event for Root: Event received.
59+
TUITreeView Node Event for Root: Event received.
60+
TUITreeView Node Event for Root: Event received.
61+
TUITreeView Node Event for Root: Event received.
62+
TUITreeView Node Event for Root: Event received.
63+
TUITreeView Node Event for Root: Event received.
64+
TUITreeView Node Event for Root: Event received.
65+
TUITreeView Node Event for Root: Event received.
66+
TUITreeView Node Event for Root: Event received.
67+
TUITreeView Node Event for Root: Event received.
68+
TUITreeView Node Event for Root: Event received.
69+
TUITreeView Node Event for Root: Event received.
70+
TUITreeView Node Event for Root: Event received.
71+
TUITreeView Node Event for Root: Event received.
72+
TUITreeView Node Event for Root: Event received.
73+
TUITreeView Node Event for Root: Event received.
74+
TUITreeView Node Event for Root: Event received.
75+
TUITreeView Node Event for Root: Event received.
76+
TUITreeView Node Event for Root: Event received.
77+
TUITreeView Node Event for Root: Event received.
78+
TUITreeView Node Event for Root: Event received.
79+
TUITreeView Node Event for Root: Event received.
80+
TUITreeView Node Event for Root: Event received.
81+
TUITreeView Node Event for Root: Event received.
82+
TUITreeView Node Event for Root: Event received.
83+
TUITreeView Node Event for Root: Event received.
84+
TUITreeView Node Event for Root: Event received.
85+
TUITreeView Node Event for Root: Event received.
86+
TUITreeView Node Event for Root: Event received.
87+
TUITreeView Node Event for Root: Event received.
88+
TUITreeView Node Event for Root: Event received.
89+
TUITreeView Node Event for Root: Event received.
90+
TUITreeView Node Event for Root: Event received.
91+
TUITreeView Node Event for Root: Event received.
92+
TUITreeView Node Event for Root: Event received.
93+
TUITreeView Node Event for Root: Event received.
94+
TUITreeView Node Event for Root: Event received.
95+
TUITreeView Node Event for Root: Event received.
96+
TUITreeView Node Event for Root: Event received.
97+
TUITreeView Node Event for Root: Event received.
98+
TUITreeView Node Event for Root: Event received.
99+
TUITreeView Node Event for Root: Event received.
100+
TUITreeView Node Event for Root: Event received.
101+
TUITreeView Node Event for Root: Event received.
102+
TUITreeView Node Event for Root: Event received.
103+
TUITreeView Node Event for Root: Event received.
104+
TUITreeView Node Event for Root: Event received.
105+
TUITreeView Node Event for Root: Event received.
106+
TUITreeView Node Event for Root: Event received.
107+
TUITreeView Node Event for Root: Event received.
108+
TUITreeView Node Event for Root: Event received.
109+
TUITreeView Node Event for Root: Event received.
110+
TUITreeView Node Event for Root: Event received.
111+
TUITreeView Node Event for Root: Event received.
112+
TUITreeView Node Event for Root: Event received.
113+
TUITreeView Node Event for Root: Event received.
114+
TUITreeView Node Event for Root: Event received.
115+
TUITreeView Node Event for Root: Event received.
116+
TUITreeView Node Event for Root: Event received.
117+
TUITreeView Node Event for Root: Event received.
118+
TUITreeView Node Event for Root: Event received.
119+
TUITreeView Node Event for Root: Event received.
120+
TUITreeView Node Event for Root: Event received.
121+
TUITreeView Node Event for Root: Event received.
122+
TUITreeView Node Event for Root: Event received.
123+
TUITreeView Node Event for Root: Event received.
124+
TUITreeView Node Event for Root: Event received.
125+
TUITreeView Node Event for Root: Event received.
126+
TUITreeView Node Event for Root: Event received.
127+
TUITreeView Node Event for Root: Event received.
128+
TUITreeView Node Event for Root: Event received.
129+
TUITreeView Node Event for Root: Event received.
130+
TUITreeView Node Event for Root: Event received.
131+
TUITreeView Node Event for Root: Event received.
132+
TUITreeView Node Event for Root: Event received.
133+
TUITreeView Node Event for Root: Event received.
134+
TUITreeView Node Event for Root: Event received.
135+
TUITreeView Node Event for Root: Event received.
136+
TUITreeView Node Event for Root: Event received.
137+
TUITreeView Node Event for Root: Event received.
138+
TUITreeView Node Event for Root: Event received.
139+
TUITreeView Node Event for Root: Event received.
140+
TUITreeView Node Event for Root: Event received.
141+
TUITreeView Node Event for Root: Event received.
142+
TUITreeView Node Event for Root: Event received.
143+
TUITreeView Node Event for Root: Event received.
144+
TUITreeView Node Event for Root: Event received.
145+
TUITreeView Node Event for Root: Event received.
146+
TUITreeView Node Event for Root: Event received.
147+
TUITreeView Node Event for Root: Event received.
148+
TUITreeView Node Event for Root: Event received.
149+
TUITreeView Node Event for Root: Event received.
150+
TUITreeView Node Event for Root: Event received.
151+
TUITreeView Node Event for Root: Event received.
152+
TUITreeView Node Event for Root: Event received.
153+
TUITreeView Node Event for Root: Event received.
154+
TUITreeView Node Event for Root: Event received.
155+
TUITreeView Node Event for Root: Event received.
156+
TUITreeView Node Event for Root: Event received.
157+
TUITreeView Node Event for Root: Event received.
158+
TUITreeView Node Event for Root: Event received.
159+
TUITreeView Node Event for Root: Event received.
160+
TUITreeView Node Event for Root: Event received.
161+
TUITreeView Node Event for Root: Event received.
162+
TUITreeView Node Event for Root: Event received.
163+
TUITreeView Node Event for Root: Event received.
164+
TUITreeView Node Event for Root: Event received.
165+
TUITreeView Node Event for Root: Event received.
166+
TUITreeView Node Event for Root: Event received.
167+
TUITreeView Node Event for Root: Event received.
168+
TUITreeView Node Event for Root: Event received.
169+
TUITreeView Node Event for Root: Event received.
170+
TUITreeView Node Event for Root: Event received.
171+
TUITreeView Node Event for Root: Event received.
172+
TUITreeView Node Event for Root: Event received.
173+
TUITreeView Node Event for Root: Event received.
174+
TUITreeView Node Event for Root: Event received.
175+
TUITreeView Node Event for Root: Event received.
176+
TUITreeView Node Event for Root: Event received.
177+
TUITreeView Node Event for Root: Event received.
178+
TUITreeView Node Event for Root: Event received.
179+
TUITreeView Node Event for Root: Event received.
180+
TUITreeView Node Event for Root: Event received.
181+
TUITreeView Node Event for Root: Event received.
182+
TUITreeView Node Event for Root: Event received.
183+
TUITreeView Node Event for Root: Event received.
184+
TUITreeView Node Event for Root: Event received.
185+
TUITreeView Node Event for Root: Event received.
186+
TUITreeView Node Event for Root: Event received.
187+
TUITreeView Node Event for Root: Event received.
188+
TUITreeView Node Event for Root: Event received.
189+
TUITreeView Node Event for Root: Event received.
190+
TUITreeView Node Event for Root: Event received.
191+
TUITreeView Node Event for Root: Event received.
192+
Load button clicked!
193+
Save button clicked!
194+
New button clicked!
195+
[TUIApp::exec] - screen_.Loop() returned.
196+
[TUIApp::exec] - Calling on_exit_ callback.
197+
Application is exiting. Goodbye!

examples/main.cpp

Lines changed: 102 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
#include "tuikit.h"
22
#include "tuikit/core/TUIIcons.h"
3+
#include "tuikit/widgets/Notification.h"
4+
#include "tuikit/widgets/TUITreeView.h"
5+
#include "tuikit/widgets/TUIProgressBar.h"
6+
#include "tuikit/widgets/TUIScrollableContainer.h"
7+
#include "tuikit/widgets/TUIResizableSplit.h"
38
#include <iostream>
49
#include <string>
510
#include <memory> // Required for std::shared_ptr
11+
#include <fstream> // Required for file redirection
612

713
int main() {
14+
// Redirect std::cerr to a file
15+
std::ofstream cerr_log("debug_log.txt");
16+
std::streambuf* old_cerr_buf = std::cerr.rdbuf();
17+
std::cerr.rdbuf(cerr_log.rdbuf());
18+
819
TUIKIT::TUIApp app("My TUIKIT Application");
920

1021
// Labels for displaying widget states
@@ -37,6 +48,14 @@ int main() {
3748
input_button_group->addWidget(input_button_layout);
3849
input_button_group->addWidget(input_label);
3950
input_button_group->addWidget(button_label);
51+
52+
// Notification Example (placed in Main Widgets tab for easy access)
53+
auto show_notification_button = std::make_shared<TUIKIT::TUIButton>("Show Notification");
54+
show_notification_button->onClick([&app] {
55+
TUIKIT::Notification::show(app, "Hello from TUIKIT!", "Info", 3000);
56+
});
57+
input_button_group->addWidget(show_notification_button);
58+
4059
auto input_button_group_box = std::make_shared<TUIKIT::TUIGroupBox>("Input & Button", input_button_group);
4160
main_widgets_content->addWidget(input_button_group_box);
4261

@@ -161,7 +180,7 @@ int main() {
161180
status_group->addWidget(status_bar);
162181
status_group->addWidget(update_status_button);
163182
auto status_group_box = std::make_shared<TUIKIT::TUIGroupBox>("Application Status", status_group);
164-
form_status_tab_content->addWidget(status_group_box);
183+
form_status_tab_content->addWidget(form_group_box);
165184

166185
// --- Toolbar Tab Content ---
167186
auto toolbar_tab_content = std::make_shared<TUIKIT::TUIVBoxLayout>();
@@ -173,23 +192,103 @@ int main() {
173192
auto toolbar_group_box = std::make_shared<TUIKIT::TUIGroupBox>("Application Toolbar", toolbar);
174193
toolbar_tab_content->addWidget(toolbar_group_box);
175194

195+
// --- Advanced Widgets Tab Content ---
196+
auto advanced_widgets_content = std::make_shared<TUIKIT::TUIVBoxLayout>();
197+
198+
// TUITreeView Example
199+
auto tree_view_group = std::make_shared<TUIKIT::TUIVBoxLayout>();
200+
TUIKIT::TreeNode root_tree_node = {"Root", {
201+
{"Child 1", {}},
202+
{"Child 2", {
203+
{"Grandchild 2.1", {}},
204+
{"Grandchild 2.2", {}}
205+
}},
206+
{"Child 3", {}}
207+
}};
208+
auto tree_view = std::make_shared<TUIKIT::TUITreeView>(root_tree_node);
209+
auto tree_view_label = std::make_shared<TUIKIT::TUILabel>("Selected Tree Item: None");
210+
tree_view->onSelect([&](const std::string& selected_node_text) {
211+
tree_view_label->setText("Selected Tree Item: " + selected_node_text);
212+
});
213+
tree_view_group->addWidget(tree_view);
214+
tree_view_group->addWidget(tree_view_label);
215+
auto tree_view_group_box = std::make_shared<TUIKIT::TUIGroupBox>("Tree View", tree_view_group);
216+
advanced_widgets_content->addWidget(tree_view_group_box);
217+
218+
// TUIProgressBar Example
219+
auto progress_bar_group = std::make_shared<TUIKIT::TUIVBoxLayout>();
220+
float progress_value = 0.0f;
221+
auto progress_bar = std::make_shared<TUIKIT::TUIProgressBar>(progress_value / 100.0f); // Normalized value
222+
auto progress_label = std::make_shared<TUIKIT::TUILabel>("Progress: 0%");
223+
auto increment_progress_button = std::make_shared<TUIKIT::TUIButton>("Increment Progress");
224+
increment_progress_button->onClick([&] {
225+
progress_value += 10.0f; // Increment by 10%
226+
if (progress_value > 100.0f) progress_value = 0.0f;
227+
progress_bar->setValue(progress_value / 100.0f); // Normalized value
228+
progress_label->setText("Progress: " + std::to_string(static_cast<int>(progress_value)) + "%");
229+
app.request_redraw();
230+
});
231+
progress_bar_group->addWidget(progress_bar);
232+
progress_bar_group->addWidget(progress_label);
233+
progress_bar_group->addWidget(increment_progress_button);
234+
auto progress_bar_group_box = std::make_shared<TUIKIT::TUIGroupBox>("Progress Bar", progress_bar_group);
235+
// advanced_widgets_content->addWidget(progress_bar_group_box); // Commented out for isolation
236+
237+
// TUIScrollableContainer Example
238+
auto scrollable_content_layout = std::make_shared<TUIKIT::TUIVBoxLayout>();
239+
scrollable_content_layout->addWidget(std::make_shared<TUIKIT::TUILabel>("This is a long text content inside a scrollable container."));
240+
scrollable_content_layout->addWidget(std::make_shared<TUIKIT::TUILabel>("You can scroll down to see more."));
241+
scrollable_content_layout->addWidget(std::make_shared<TUIKIT::TUILabel>("Line 1"));
242+
scrollable_content_layout->addWidget(std::make_shared<TUIKIT::TUILabel>("Line 2"));
243+
scrollable_content_layout->addWidget(std::make_shared<TUIKIT::TUILabel>("Line 3"));
244+
scrollable_content_layout->addWidget(std::make_shared<TUIKIT::TUILabel>("Line 4"));
245+
scrollable_content_layout->addWidget(std::make_shared<TUIKIT::TUILabel>("Line 5"));
246+
scrollable_content_layout->addWidget(std::make_shared<TUIKIT::TUILabel>("Line 6"));
247+
scrollable_content_layout->addWidget(std::make_shared<TUIKIT::TUILabel>("Line 7"));
248+
scrollable_content_layout->addWidget(std::make_shared<TUIKIT::TUILabel>("Line 8"));
249+
scrollable_content_layout->addWidget(std::make_shared<TUIKIT::TUILabel>("Line 9"));
250+
scrollable_content_layout->addWidget(std::make_shared<TUIKIT::TUILabel>("Line 10"));
251+
auto scrollable_container = std::make_shared<TUIKIT::TUIScrollableContainer>(scrollable_content_layout, 10);
252+
auto scrollable_group_box = std::make_shared<TUIKIT::TUIGroupBox>("Scrollable Container", scrollable_container);
253+
// advanced_widgets_content->addWidget(scrollable_group_box); // Commented out for isolation
254+
255+
// TUIResizableSplit Example
256+
auto split_left_content = std::make_shared<TUIKIT::TUIVBoxLayout>();
257+
split_left_content->addWidget(std::make_shared<TUIKIT::TUILabel>("Left Panel"));
258+
split_left_content->addWidget(std::make_shared<TUIKIT::TUIButton>("Button A"));
259+
auto split_right_content = std::make_shared<TUIKIT::TUIVBoxLayout>();
260+
split_right_content->addWidget(std::make_shared<TUIKIT::TUILabel>("Right Panel"));
261+
split_right_content->addWidget(std::make_shared<TUIKIT::TUIButton>("Button B"));
262+
auto resizable_split = std::make_shared<TUIKIT::TUIResizableSplit>(split_left_content, split_right_content, TUIKIT::TUIResizableSplit::Horizontal);
263+
resizable_split->setMinimumSizes(20, 20);
264+
auto resizable_split_group_box = std::make_shared<TUIKIT::TUIGroupBox>("Resizable Split", resizable_split);
265+
// advanced_widgets_content->addWidget(resizable_split_group_box); // Commented out for isolation
266+
176267
// --- Tab Widget ---
177268
auto tab_widget = std::make_shared<TUIKIT::TUITabWidget>();
178269
tab_widget->addTab("Main Widgets", main_widgets_content, TUIKIT::ICON::Home);
179270
tab_widget->addTab("Collapsible", collapsible_tab_content, TUIKIT::ICON::Collapsible);
180271
tab_widget->addTab("Themes", theme_tab_content, TUIKIT::ICON::Themes);
181272
tab_widget->addTab("Form & Status", form_status_tab_content, TUIKIT::ICON::Tasks);
182273
tab_widget->addTab("Toolbar", toolbar_tab_content, TUIKIT::ICON::NewFile);
274+
tab_widget->addTab("Advanced Widgets", advanced_widgets_content, TUIKIT::ICON::Tasks);
183275

184276
// --- Main Layout ---
185277
auto main_layout = std::make_shared<TUIKIT::TUIVBoxLayout>();
186278
main_layout->addWidget(tab_widget);
187279

188280
app.setMainWidget(main_layout);
189281

190-
app.setOnExit([] {
282+
app.setOnExit([&] {
191283
std::cerr << "Application is exiting. Goodbye!" << std::endl;
284+
// Restore original cerr buffer
285+
std::cerr.rdbuf(old_cerr_buf);
192286
});
193287

194-
return app.exec();
288+
int result = app.exec();
289+
290+
// Restore original cerr buffer before exiting
291+
std::cerr.rdbuf(old_cerr_buf);
292+
293+
return result;
195294
}

0 commit comments

Comments
 (0)