From 417bfa9c32645cf5584aea626b8b8f721627e10b Mon Sep 17 00:00:00 2001 From: hex Date: Sat, 8 Feb 2025 13:28:45 +0000 Subject: [PATCH 1/3] feat: create base class for xmpp connections --- App.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/App.h b/App.h index 4c75c69..961acee 100644 --- a/App.h +++ b/App.h @@ -3,6 +3,8 @@ #include #include +#include +#include #define APP_NAME "Renga" #define APP_AUTHOR "hex_andre" @@ -11,6 +13,10 @@ const uint32 msgConnectButtonClicked = 'mCBC'; #include +class Client : public gloox::ConnectionListener, gloox::PresenceHandler { + +}; + class App : public BApplication { public: @@ -18,7 +24,7 @@ class App : public BApplication virtual void MessageReceived(BMessage *msg); BWindow *ConnectWindow; BWindow *ContactsWindow; + Client *client; }; - #endif From 43deda8646fe497449b0d5c39fbb3dc57701cdde Mon Sep 17 00:00:00 2001 From: hex Date: Sat, 8 Feb 2025 15:16:28 +0000 Subject: [PATCH 2/3] temp --- App.cpp | 32 +++++++++++++++++++++++++------- App.h | 2 +- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/App.cpp b/App.cpp index b725e5a..4f8f2e9 100644 --- a/App.cpp +++ b/App.cpp @@ -1,5 +1,6 @@ #include "App.h" #include +#include #include #include #include @@ -8,13 +9,14 @@ #include #include #include -#include #include +#include +#include #include #include #include -#include #include "Contacts.h" +#include // quick and dirty function to quickly make text labels BStringView *MakeText(const char* text) @@ -24,18 +26,21 @@ BStringView *MakeText(const char* text) App::App(void) : BApplication(std::format("application/x-vnd.{}-{}", APP_AUTHOR, APP_NAME).c_str()) { - std::cout << "hello world!!\n"; // Initialize BRect frame for window BRect frame(100, 100, 500, 400); - + // Initialize parent group for all UI elements to sit in. This is so they all get grouped nicely together BGroupLayout *pGroup = new BGroupLayout(B_HORIZONTAL); + // Create window - BWindow *window = new BWindow(frame, std::format("{} by {}", APP_NAME, APP_AUTHOR).c_str(), B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS); + BWindow *window = new BWindow(frame, std::format("{}", APP_NAME).c_str(), B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS); // Set window layout to parent group created earlier window->SetLayout(pGroup); + pGroup->View()->AdoptSystemColors(); + + /* // Initialize special UI group for all of our "real" elements BGroupLayout *uGroup = new BGroupLayout(B_HORIZONTAL, 100); // Add label group to parent group @@ -45,10 +50,23 @@ App::App(void) : BApplication(std::format("application/x-vnd.{}-{}", APP_AUTHOR, uGroup->SetExplicitAlignment(BAlignment(B_ALIGN_HORIZONTAL_CENTER, B_ALIGN_VERTICAL_CENTER)); // And finally, add a button!! - BButton *connectButton = new BButton(frame, "connect", "Connect to XMPP", new BMessage(msgConnectButtonClicked)); - connectButton->SetTarget(this); uGroup->AddView(connectButton); + */ + BGridLayout *uiElems = new BGridLayout(10, 0); + pGroup->AddItem(uiElems); + uiElems->SetExplicitAlignment(BAlignment(B_ALIGN_HORIZONTAL_CENTER, B_ALIGN_VERTICAL_CENTER)); + + BButton *connectButton = new BButton(frame, "connect", "Connect!", new BMessage(msgConnectButtonClicked)); + connectButton->SetTarget(this); + + BTextControl *jidInput = new BTextControl("jidinput", "JID:", "Placeholder", new BMessage(msgConnectButtonClicked)); + BTextControl *pwInput = new BTextControl("jidinput", "JID:", "Placeholder", new BMessage(msgConnectButtonClicked)); + + uiElems->AddView(jidInput, 0, 0); + uiElems->AddView(MakeText("Password placeholder"), 0, 1); + uiElems->AddView(connectButton, 0, 2); + uiElems->SetMinRowHeight(2, 75); window->Show(); diff --git a/App.h b/App.h index 961acee..92db1db 100644 --- a/App.h +++ b/App.h @@ -7,7 +7,7 @@ #include #define APP_NAME "Renga" -#define APP_AUTHOR "hex_andre" +#define APP_AUTHOR "hex&andre" const uint32 msgConnectButtonClicked = 'mCBC'; From f33e0aca06a988fcd5eaecfe9a8644ec7e649010 Mon Sep 17 00:00:00 2001 From: hex Date: Sat, 8 Feb 2025 20:48:05 +0000 Subject: [PATCH 3/3] feat: finish UI + chore: organize all windows into separate files --- App.cpp | 102 ----------------------------------------- Contacts.cpp | 14 ------ Contacts.h | 3 -- Makefile | 2 +- src/App.cpp | 17 +++++++ App.h => src/App.h | 11 +---- src/gui/Contacts.cpp | 11 +++++ src/gui/Contacts.h | 12 +++++ src/gui/MainWindow.cpp | 87 +++++++++++++++++++++++++++++++++++ src/gui/MainWindow.h | 19 ++++++++ 10 files changed, 149 insertions(+), 129 deletions(-) delete mode 100644 App.cpp delete mode 100644 Contacts.cpp delete mode 100644 Contacts.h create mode 100644 src/App.cpp rename App.h => src/App.h (61%) create mode 100644 src/gui/Contacts.cpp create mode 100644 src/gui/Contacts.h create mode 100644 src/gui/MainWindow.cpp create mode 100644 src/gui/MainWindow.h diff --git a/App.cpp b/App.cpp deleted file mode 100644 index 4f8f2e9..0000000 --- a/App.cpp +++ /dev/null @@ -1,102 +0,0 @@ -#include "App.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "Contacts.h" -#include - -// quick and dirty function to quickly make text labels -BStringView *MakeText(const char* text) -{ - return new BStringView("rstr", text); -} - -App::App(void) : BApplication(std::format("application/x-vnd.{}-{}", APP_AUTHOR, APP_NAME).c_str()) -{ - // Initialize BRect frame for window - BRect frame(100, 100, 500, 400); - - // Initialize parent group for all UI elements to sit in. This is so they all get grouped nicely together - BGroupLayout *pGroup = new BGroupLayout(B_HORIZONTAL); - - // Create window - BWindow *window = new BWindow(frame, std::format("{}", APP_NAME).c_str(), B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS); - - // Set window layout to parent group created earlier - window->SetLayout(pGroup); - - pGroup->View()->AdoptSystemColors(); - - /* - // Initialize special UI group for all of our "real" elements - BGroupLayout *uGroup = new BGroupLayout(B_HORIZONTAL, 100); - // Add label group to parent group - pGroup->AddItem(uGroup); - - // Center label group - uGroup->SetExplicitAlignment(BAlignment(B_ALIGN_HORIZONTAL_CENTER, B_ALIGN_VERTICAL_CENTER)); - - // And finally, add a button!! - - uGroup->AddView(connectButton); - */ - BGridLayout *uiElems = new BGridLayout(10, 0); - pGroup->AddItem(uiElems); - uiElems->SetExplicitAlignment(BAlignment(B_ALIGN_HORIZONTAL_CENTER, B_ALIGN_VERTICAL_CENTER)); - - BButton *connectButton = new BButton(frame, "connect", "Connect!", new BMessage(msgConnectButtonClicked)); - connectButton->SetTarget(this); - - BTextControl *jidInput = new BTextControl("jidinput", "JID:", "Placeholder", new BMessage(msgConnectButtonClicked)); - BTextControl *pwInput = new BTextControl("jidinput", "JID:", "Placeholder", new BMessage(msgConnectButtonClicked)); - - uiElems->AddView(jidInput, 0, 0); - uiElems->AddView(MakeText("Password placeholder"), 0, 1); - uiElems->AddView(connectButton, 0, 2); - uiElems->SetMinRowHeight(2, 75); - - window->Show(); - - App::ConnectWindow = window; -} - -void App::MessageReceived(BMessage *msg) -{ - switch(msg->what) { - case msgConnectButtonClicked: - { - printf("Connect button clicked...\n"); - App::ConnectWindow->Hide(); - App::ContactsWindow = ShowContacts(); - break; - } - default: - { - printf("Unknown message received: %d\n", msg->what); - BApplication::MessageReceived(msg); - break; - } - } -} - -int main(void) -{ - App *app = new App(); - app->Run(); - - delete app; - return 0; -} diff --git a/Contacts.cpp b/Contacts.cpp deleted file mode 100644 index 587ea3f..0000000 --- a/Contacts.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "Contacts.h" -#include "App.h" -#include -#include -#include - -BWindow *ShowContacts() -{ - // POS W H - BRect frame(200,200,600,400); - BWindow *window = new BWindow(frame, "Contacts List", B_TITLED_WINDOW, B_NOT_MINIMIZABLE | B_QUIT_ON_WINDOW_CLOSE); - window->Show(); - return window; -} diff --git a/Contacts.h b/Contacts.h deleted file mode 100644 index fc892f5..0000000 --- a/Contacts.h +++ /dev/null @@ -1,3 +0,0 @@ -#include "App.h" -#include -extern BWindow *ShowContacts(); diff --git a/Makefile b/Makefile index ac34d7b..de29a3a 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ FLAGS=-lbe -std=c++20 -lstdc++ all: build build: - $(CPP) *.cpp -o $(BINARY) $(FLAGS) + $(CPP) $(shell find ./src | grep cpp) -o $(BINARY) $(FLAGS) test: build ./renga diff --git a/src/App.cpp b/src/App.cpp new file mode 100644 index 0000000..e06bb8b --- /dev/null +++ b/src/App.cpp @@ -0,0 +1,17 @@ +#include "App.h" +#include "gui/MainWindow.h" + +App::App(void) : BApplication(kSignature) +{ + MainWindow *mainWindow = new MainWindow(); + mainWindow->Show(); +} + +int main(void) +{ + App *app = new App(); + app->Run(); + + delete app; + return 0; +} diff --git a/App.h b/src/App.h similarity index 61% rename from App.h rename to src/App.h index 92db1db..462a3a2 100644 --- a/App.h +++ b/src/App.h @@ -5,14 +5,10 @@ #include #include #include - -#define APP_NAME "Renga" -#define APP_AUTHOR "hex&andre" - -const uint32 msgConnectButtonClicked = 'mCBC'; - #include +#define kSignature "application/x-vnd.iwakura-Renga" + class Client : public gloox::ConnectionListener, gloox::PresenceHandler { }; @@ -21,9 +17,6 @@ class App : public BApplication { public: App(void); - virtual void MessageReceived(BMessage *msg); - BWindow *ConnectWindow; - BWindow *ContactsWindow; Client *client; }; diff --git a/src/gui/Contacts.cpp b/src/gui/Contacts.cpp new file mode 100644 index 0000000..3276cb6 --- /dev/null +++ b/src/gui/Contacts.cpp @@ -0,0 +1,11 @@ +#include "Contacts.h" +#include +#include +#include +#include + +Contacts::Contacts(void) + : BWindow(BRect(200,200,600,400), TITLE, B_TITLED_WINDOW, B_NOT_MINIMIZABLE | B_QUIT_ON_WINDOW_CLOSE) +{ + AddChild(new BStringView("label", "Placeholder label (contact list to be added)")); +} diff --git a/src/gui/Contacts.h b/src/gui/Contacts.h new file mode 100644 index 0000000..21ac43d --- /dev/null +++ b/src/gui/Contacts.h @@ -0,0 +1,12 @@ +#ifndef CONTACTS_H +#define CONTACTS_H + +#include +#define TITLE "Contact List" + +class Contacts : public BWindow { + public: + Contacts(void); +}; + +#endif diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp new file mode 100644 index 0000000..8ef0143 --- /dev/null +++ b/src/gui/MainWindow.cpp @@ -0,0 +1,87 @@ +#include "MainWindow.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Contacts.h" +#include + +MainWindow::MainWindow(void) + : BWindow(BRect(100, 100, 500, 400), "Renga", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) +{ + // parent layout (defines the entire window layout) + BGroupLayout *pGroup = new BGroupLayout(B_HORIZONTAL); + SetLayout(pGroup); + + // make sure window uses window colors set in haiku preferences (equivelant to system themes) + pGroup->View()->AdoptSystemColors(); + + // prepare "renga" text banner + BStringView *banner = new BStringView("banner", "Renga"); + + banner->SetHighColor(135,1,1); + banner->SetFontSize(28.0); + + // ui layout (parent of all UI elements visible to the user) + BGridLayout *uiElems = new BGridLayout(10, 0); + + pGroup->AddItem(uiElems); + + // center the entire UI + uiElems->SetExplicitAlignment(BAlignment(B_ALIGN_HORIZONTAL_CENTER, B_ALIGN_VERTICAL_CENTER)); + + BButton *connectButton = new BButton(Frame(), "connect", "Connect!", new BMessage(msgConnectButtonClicked)); + connectButton->SetTarget(this); + + BTextControl *jidInput = new BTextControl("jidinput", "JID:", "Placeholder", new BMessage(msgConnectButtonClicked)); + BTextControl *pwInput = new BTextControl("pwinput", "Password:", "Placeholder", new BMessage(msgConnectButtonClicked)); + + pwInput->TextView()->HideTyping(true); + + jidInput->SetExplicitSize(BSize(200,23)); + pwInput->SetExplicitSize(BSize(200,23)); + + uiElems->AddView(banner, 0, 0); + uiElems->AddView(jidInput, 0, 1); + uiElems->AddView(pwInput, 0, 2); + uiElems->AddView(connectButton, 0, 3); + uiElems->SetMinRowHeight(3, 75); + uiElems->SetMinRowHeight(0, 25); + + Show(); +} + + +void MainWindow::MessageReceived(BMessage *msg) +{ + switch(msg->what) { + case msgConnectButtonClicked: + { + printf("Connect button clicked...\n"); + + Hide(); + Contacts *contacts = new Contacts(); + contacts->Show(); + break; + } + default: + { + printf("Unknown message received: %d\n", msg->what); + break; + } + } +} diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h new file mode 100644 index 0000000..0af4989 --- /dev/null +++ b/src/gui/MainWindow.h @@ -0,0 +1,19 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include +#include + +const uint32 msgConnectButtonClicked = 'mCBC'; + +class MainWindow : public BWindow +{ + public: + MainWindow(void); + virtual void MessageReceived(BMessage *msg); +}; + +#endif