From 0ed253c70ca07c8c386e82cf47fae7f8a19b1fbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20R=C4=99bacz?= Date: Fri, 9 Jan 2026 00:28:03 +0100 Subject: [PATCH] CtrlLib, Doc: Added tutorial about using Key function to handle keyboard keys + alligning directory structure for tutorials. --- .../{Gui05/Gui05.upp => Gui05a/Gui05a.upp} | 0 tutorial/{Gui05 => Gui05a}/main.cpp | 3 +- .../{Gui07/Gui07.upp => Gui05b/Gui05b.upp} | 20 +++-- tutorial/Gui05b/main.cpp | 45 +++++++++++ tutorial/Gui07/main.cpp | 32 -------- tutorial/Gui07a/Gui07a.upp | 2 +- tutorial/Gui07a/main.cpp | 64 +++++++-------- tutorial/Gui07b/Gui07b.upp | 11 +++ tutorial/Gui07b/main.cpp | 32 ++++++++ uppsrc/CtrlLib/srcdoc.tpp/Tutorial_en-us.tpp | 81 +++++++++++++++++-- 10 files changed, 207 insertions(+), 83 deletions(-) rename tutorial/{Gui05/Gui05.upp => Gui05a/Gui05a.upp} (100%) rename tutorial/{Gui05 => Gui05a}/main.cpp (94%) rename tutorial/{Gui07/Gui07.upp => Gui05b/Gui05b.upp} (69%) create mode 100644 tutorial/Gui05b/main.cpp delete mode 100644 tutorial/Gui07/main.cpp create mode 100644 tutorial/Gui07b/Gui07b.upp create mode 100644 tutorial/Gui07b/main.cpp diff --git a/tutorial/Gui05/Gui05.upp b/tutorial/Gui05a/Gui05a.upp similarity index 100% rename from tutorial/Gui05/Gui05.upp rename to tutorial/Gui05a/Gui05a.upp diff --git a/tutorial/Gui05/main.cpp b/tutorial/Gui05a/main.cpp similarity index 94% rename from tutorial/Gui05/main.cpp rename to tutorial/Gui05a/main.cpp index aa09f1cd7..fd79a9e66 100644 --- a/tutorial/Gui05/main.cpp +++ b/tutorial/Gui05a/main.cpp @@ -29,6 +29,5 @@ struct MyAppWindow : TopWindow { GUI_APP_MAIN { - MyAppWindow app; - app.Run(); + MyAppWindow().Run(); } diff --git a/tutorial/Gui07/Gui07.upp b/tutorial/Gui05b/Gui05b.upp similarity index 69% rename from tutorial/Gui07/Gui07.upp rename to tutorial/Gui05b/Gui05b.upp index 9b8c16af3..5c4f53e15 100644 --- a/tutorial/Gui07/Gui07.upp +++ b/tutorial/Gui05b/Gui05b.upp @@ -1,11 +1,9 @@ -description "Menu\377"; - -uses - CtrlLib; - -file - main.cpp; - -mainconfig - "" = "GUI"; - +uses + CtrlLib; + +file + main.cpp; + +mainconfig + "" = "GUI"; + diff --git a/tutorial/Gui05b/main.cpp b/tutorial/Gui05b/main.cpp new file mode 100644 index 000000000..19eb2795a --- /dev/null +++ b/tutorial/Gui05b/main.cpp @@ -0,0 +1,45 @@ +#include + +using namespace Upp; + +struct MyAppWindow : TopWindow { + String text = "Press any arrow key..."; + + bool Key(dword key, int count) override { + switch(key) { + case K_UP: + text = "Up ⬆"; + Refresh(); + return true; + case K_DOWN: + text = "Down ⬇"; + Refresh(); + return true; + case K_LEFT: + text = "Left ⬅"; + Refresh(); + return true; + case K_RIGHT: + text = "Right ⮕"; + Refresh(); + return true; + default: + return TopWindow::Key(key, count); + } + } + + void Paint(Draw& w) override { + w.DrawRect(GetSize(), SWhite); + w.DrawText(45, 20, text, Arial(20), Magenta); + } + + MyAppWindow() { + Title("My application").Zoomable(); + SetRect(0, 0, 400, 100); + } +}; + +GUI_APP_MAIN +{ + MyAppWindow().Run(); +} diff --git a/tutorial/Gui07/main.cpp b/tutorial/Gui07/main.cpp deleted file mode 100644 index 9c8466ce8..000000000 --- a/tutorial/Gui07/main.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include - -using namespace Upp; - -struct MyAppWindow : TopWindow { - MenuBar menu; - - void Exit() { - if(PromptOKCancel("Exit MyApp?")) - Break(); - } - - void SubMenu(Bar& bar) { - bar.Add("Exit", [=] { Exit(); }); - } - - void MainMenu(Bar& bar) { - bar.Sub("Menu", [=](Bar& bar) { SubMenu(bar); }); - } - - MyAppWindow() { - Title("My application with menu").Sizeable(); - AddFrame(menu); - menu.Set([=](Bar& bar) { MainMenu(bar); }); - } -}; - -GUI_APP_MAIN -{ - MyAppWindow app; - app.Run(); -} diff --git a/tutorial/Gui07a/Gui07a.upp b/tutorial/Gui07a/Gui07a.upp index 7e42bf965..9b8c16af3 100644 --- a/tutorial/Gui07a/Gui07a.upp +++ b/tutorial/Gui07a/Gui07a.upp @@ -1,4 +1,4 @@ -description "Menu - as single lambda\377"; +description "Menu\377"; uses CtrlLib; diff --git a/tutorial/Gui07a/main.cpp b/tutorial/Gui07a/main.cpp index 93c045db2..9c8466ce8 100644 --- a/tutorial/Gui07a/main.cpp +++ b/tutorial/Gui07a/main.cpp @@ -1,32 +1,32 @@ -#include - -using namespace Upp; - -struct MyAppWindow : TopWindow { - MenuBar menu; - - MyAppWindow() { - Title("My application with menu").Sizeable(); - AddFrame(menu); - menu.Set( - [=](Bar& bar) { - bar.Sub("Menu", - [=](Bar& bar) { - bar.Add("Exit", - [=] { - if(PromptOKCancel("Exit MyApp?")) - Break(); - } - ); - } - ); - } - ); - } -}; - -GUI_APP_MAIN -{ - MyAppWindow app; - app.Run(); -} +#include + +using namespace Upp; + +struct MyAppWindow : TopWindow { + MenuBar menu; + + void Exit() { + if(PromptOKCancel("Exit MyApp?")) + Break(); + } + + void SubMenu(Bar& bar) { + bar.Add("Exit", [=] { Exit(); }); + } + + void MainMenu(Bar& bar) { + bar.Sub("Menu", [=](Bar& bar) { SubMenu(bar); }); + } + + MyAppWindow() { + Title("My application with menu").Sizeable(); + AddFrame(menu); + menu.Set([=](Bar& bar) { MainMenu(bar); }); + } +}; + +GUI_APP_MAIN +{ + MyAppWindow app; + app.Run(); +} diff --git a/tutorial/Gui07b/Gui07b.upp b/tutorial/Gui07b/Gui07b.upp new file mode 100644 index 000000000..7e42bf965 --- /dev/null +++ b/tutorial/Gui07b/Gui07b.upp @@ -0,0 +1,11 @@ +description "Menu - as single lambda\377"; + +uses + CtrlLib; + +file + main.cpp; + +mainconfig + "" = "GUI"; + diff --git a/tutorial/Gui07b/main.cpp b/tutorial/Gui07b/main.cpp new file mode 100644 index 000000000..93c045db2 --- /dev/null +++ b/tutorial/Gui07b/main.cpp @@ -0,0 +1,32 @@ +#include + +using namespace Upp; + +struct MyAppWindow : TopWindow { + MenuBar menu; + + MyAppWindow() { + Title("My application with menu").Sizeable(); + AddFrame(menu); + menu.Set( + [=](Bar& bar) { + bar.Sub("Menu", + [=](Bar& bar) { + bar.Add("Exit", + [=] { + if(PromptOKCancel("Exit MyApp?")) + Break(); + } + ); + } + ); + } + ); + } +}; + +GUI_APP_MAIN +{ + MyAppWindow app; + app.Run(); +} diff --git a/uppsrc/CtrlLib/srcdoc.tpp/Tutorial_en-us.tpp b/uppsrc/CtrlLib/srcdoc.tpp/Tutorial_en-us.tpp index e35f7e38b..0ea82fd97 100644 --- a/uppsrc/CtrlLib/srcdoc.tpp/Tutorial_en-us.tpp +++ b/uppsrc/CtrlLib/srcdoc.tpp/Tutorial_en-us.tpp @@ -265,9 +265,9 @@ KDE.&] [s3;:5: 5. Reacting to input events&] [s5; In order to react to user actions like mouse clicks or keyboard events, you have to override appropriate virtual methods for -example [* LeftDown ]and [* MouseMove]. To issue the repainting of -view area, use the [* Refresh] method.&] -[s5; &] +example [* LeftDown, MouseMove] and [* Key]. To issue the repainting +of view area, use the [* Refresh] method.&] +[s5; The following example demonstrates how to handle mouse events:&] [s0;l320;%- [C@(128.0.255)+75 #include][C+75 ][C@(0.0.255)+75 <][C+75 CtrlLib][C@(0.0.255)+75 / ][C+75 CtrlLib][C@(0.0.255)+75 .][C+75 h][C@(0.0.255)+75 >]&] [s0;l320;C+75%- &] @@ -313,8 +313,7 @@ p][C@(0.0.255)+75 .][C+75 y ][C@(0.0.255)+75 `=][C+75 ][C@3+75 0][C+75 ;]&] [s0;l320;C+75%- &] [s0;l320;%- [C+75 GUI`_APP`_MAIN]&] [s0;l320;%- [C+75 `{]&] -[s0;l320;%- [C+75 MyAppWindow app;]&] -[s0;l320;%- [C+75 app][C@(0.0.255)+75 .][C+75 Run();]&] +[s0;l320;%- [C+75 MyAppWindow().Run();]&] [s0;l320;%- [+75 `}]&] [s5; &] [s0;= @@ -322,6 +321,78 @@ p][C@(0.0.255)+75 .][C+75 y ][C@(0.0.255)+75 `=][C+75 ][C@3+75 0][C+75 ;]&] (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) &] [s5; &] +[s5; The following example demonstrates how to handle keyboard events:&] +[s0;l320;%- [C@(128.0.255)+75 #include][C+75 ][C@(0.0.255)+75 <][C+75 CtrlLib][C@(0.0.255)+75 / +][C+75 CtrlLib][C@(0.0.255)+75 .][C+75 h][C@(0.0.255)+75 >]&] +[s0;l320;C+75%- &] +[s0;l320;%- [*C@(0.0.255)+75 using][C+75 ][*C@(0.0.255)+75 namespace][C+75 +Upp;]&] +[s0;l320;C+75%- &] +[s0;l320;%- [*C@(0.0.255)+75 struct][C+75 MyAppWindow ][C@(0.0.255)+75 :][C+75 +TopWindow `{]&] +[s0;l320;%- [C+75 String text ][C@(0.0.255)+75 `=][C+75 ][C@3+75 `"Press +any arrow key...`"][C+75 ;]&] +[s0;l320;C+75%- &] +[s0;l320;%- [C+75 ][*_C@(0.0.255)+75 bool][*_C+75 Key(][*_C@(0.128.128)+75 dword][*_C+75 +key, ][*_C@(0.0.255)+75 int][*_C+75 count) ][*_C@(0.0.255)+75 override][*_C+75 +`{]&] +[s0;l320;%- [C+75 ][*_C@(0.0.255)+75 switch][*_C+75 (key) `{]&] +[s0;l320;%- [C+75 ][*_C@(0.0.255)+75 case][*_C+75 K`_UP][*_C@(0.0.255)+75 :]&] +[s0;l320;%- [C+75 text ][C@(0.0.255)+75 `=][C+75 ][C@3+75 `"Up +⬆`"][C+75 ;]&] +[s0;l320;%- [C+75 ][*_C+75 Refresh();]&] +[s0;l320;%- [C+75 ][*_C@(128.0.255)+75 return][*_C+75 ][*_C@(0.0.255)+75 true][*_C+75 ; +]&] +[s0;l320;%- [C+75 ][*_C@(0.0.255)+75 case][*_C+75 K`_DOWN][*_C@(0.0.255)+75 :]&] +[s0;l320;%- [C+75 text ][C@(0.0.255)+75 `=][C+75 ][C@3+75 `"Down +⬇`"][C+75 ;]&] +[s0;l320;%- [C+75 ][*_C+75 Refresh();]&] +[s0;l320;%- [C+75 ][*_C@(128.0.255)+75 return][*_C+75 ][*_C@(0.0.255)+75 true][*_C+75 ; +]&] +[s0;l320;%- [C+75 ][*_C@(0.0.255)+75 case][*_C+75 K`_LEFT][*_C@(0.0.255)+75 :]&] +[s0;l320;%- [C+75 text ][C@(0.0.255)+75 `=][C+75 ][C@3+75 `"Left +⬅`"][C+75 ;]&] +[s0;l320;%- [C+75 ][*_C+75 Refresh();]&] +[s0;l320;%- [C+75 ][*_C@(128.0.255)+75 return][*_C+75 ][*_C@(0.0.255)+75 true][*_C+75 ; +]&] +[s0;l320;%- [C+75 ][*_C@(0.0.255)+75 case][*_C+75 K`_RIGHT][*_C@(0.0.255)+75 :]&] +[s0;l320;%- [C+75 text ][C@(0.0.255)+75 `=][C+75 ][C@3+75 `"Right +⮕`"][C+75 ;]&] +[s0;l320;%- [C+75 ][*_C+75 Refresh();]&] +[s0;l320;%- [C+75 ][*_C@(128.0.255)+75 return][*_C+75 ][*_C@(0.0.255)+75 true][*_C+75 ; +]&] +[s0;l320;%- [C+75 ][*_C@(0.0.255)+75 default:]&] +[s0;l320;%- [C+75 ][*_C@(128.0.255)+75 return][*_C+75 TopWindow][*_C@(0.0.255)+75 `: +:][*_C+75 Key(key, count);]&] +[s0;l320;%- [C+75 `}]&] +[s0;l320;%- [C+75 `}]&] +[s0;l320;C+75%- &] +[s0;l320;%- [C+75 ][*C@(0.0.255)+75 void][C+75 Paint(Draw][C@(0.0.255)+75 `&][C+75 +w) ][*C@(0.0.255)+75 override][C+75 `{]&] +[s0;l320;%- [C+75 w][C@(0.0.255)+75 .][C+75 DrawRect(GetSize(), +SWhite);]&] +[s0;l320;%- [C+75 w][C@(0.0.255)+75 .][C+75 DrawText(][C@3+75 45][C+75 , +][C@3+75 20][C+75 , text, Arial(][C@3+75 20][C+75 ), Magenta);]&] +[s0;l320;%- [C+75 `}]&] +[s0;l320;C+75%- &] +[s0;l320;%- [C+75 MyAppWindow() `{]&] +[s0;l320;%- [C+75 Title(][C@3+75 `"My application`"][C+75 )][C@(0.0.255)+75 .][C+75 Zoo +mable();]&] +[s0;l320;%- [C+75 SetRect(][C@3+75 0][C+75 , ][C@3+75 0][C+75 , ][C@3+75 400][C+75 , +][C@3+75 100][C+75 );]&] +[s0;l320;%- [C+75 `}]&] +[s0;l320;%- [C+75 `};]&] +[s0;l320;C+75%- &] +[s0;l320;%- [C+75 GUI`_APP`_MAIN]&] +[s0;l320;%- [C+75 `{]&] +[s0;l320;%- [C+75 MyAppWindow()][C@(0.0.255)+75 .][C+75 Run();]&] +[s0;l320;%- [C+75 `}]&] +[s5; &] +[s0;= +@@rawimage:1350&460 +(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) +&] +[s5; &] [s3;:6: 6. Multiple main windows&] [s5; If you application uses multiple top`-level peer windows, you cannot use the [* Run] method as it runs the modal loop for just