From 88d112682252db9c92e8bfc6e2401c1a44c58226 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Wed, 11 May 2022 00:09:04 +0300 Subject: [PATCH] new wrappers for GTK widgets --- CMakeLists.txt | 2 +- gtkpp/Box.cpp | 17 +++++++++++++++++ gtkpp/Box.h | 23 +++++++++++++++++++++++ gtkpp/Entry.cpp | 21 +++++++++++++++++++++ gtkpp/Entry.h | 25 +++++++++++++++++++++++++ gtkpp/Widget.cpp | 24 ++++++++++++++++++++++++ gtkpp/Widget.h | 25 +++++++++++++++++++++++++ gui/LoginWindow.cpp | 43 ++++++++++++++++++++----------------------- gui/LoginWindow.h | 7 +++++++ 9 files changed, 163 insertions(+), 24 deletions(-) create mode 100644 gtkpp/Box.cpp create mode 100644 gtkpp/Box.h create mode 100644 gtkpp/Entry.cpp create mode 100644 gtkpp/Entry.h create mode 100644 gtkpp/Widget.cpp create mode 100644 gtkpp/Widget.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 5bbe0ab..cc39cda 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -49,7 +49,7 @@ add_executable(autocat_gnome main.cpp gtkpp/Application.cpp gtkpp/Application.h gtkpp/Window.cpp - gtkpp/Window.h) + gtkpp/Window.h gtkpp/Box.cpp gtkpp/Box.h gtkpp/Widget.cpp gtkpp/Widget.h gtkpp/Entry.cpp gtkpp/Entry.h) target_link_libraries(autocat_gnome ${GTKMM_LIBRARIES} ${GLIBMM_LIBRARIES} diff --git a/gtkpp/Box.cpp b/gtkpp/Box.cpp new file mode 100644 index 0000000..af791d1 --- /dev/null +++ b/gtkpp/Box.cpp @@ -0,0 +1,17 @@ +// +// Created by selim on 10.05.2022. +// + +#include "Box.h" + +gtkpp::Box::Box(GtkOrientation orientation, int spacing) { + _widget = gtk_box_new(orientation, spacing); +} + +void gtkpp::Box::append(const gtkpp::Widget& widget) { + gtk_box_append(GTK_BOX(_widget), widget.gobj()); +} + +void gtkpp::Box::append(GtkWidget *widget) { + gtk_box_append(GTK_BOX(_widget), widget); +} diff --git a/gtkpp/Box.h b/gtkpp/Box.h new file mode 100644 index 0000000..95eeb48 --- /dev/null +++ b/gtkpp/Box.h @@ -0,0 +1,23 @@ +// +// Created by selim on 10.05.2022. +// + +#ifndef AUTOCAT_GNOME_BOX_H +#define AUTOCAT_GNOME_BOX_H + +#include "Widget.h" +#include +#include + +namespace gtkpp { + + class Box: public Widget{ + public: + Box(GtkOrientation orientation, int spacing); + void append(const Widget& widget); + void append(GtkWidget* widget); + }; + +} + +#endif //AUTOCAT_GNOME_BOX_H diff --git a/gtkpp/Entry.cpp b/gtkpp/Entry.cpp new file mode 100644 index 0000000..a79321a --- /dev/null +++ b/gtkpp/Entry.cpp @@ -0,0 +1,21 @@ +// +// Created by selim on 10.05.2022. +// + +#include "Entry.h" + +gtkpp::Entry::Entry() { + _widget = gtk_entry_new(); +} + +void gtkpp::Entry::setPlaceholder(const std::string &placeholder) { + gtk_entry_set_placeholder_text(GTK_ENTRY(_widget), placeholder.c_str()); +} + +void gtkpp::Entry::setPurpose(GtkInputPurpose purpose) { + gtk_entry_set_input_purpose(GTK_ENTRY(_widget), purpose); +} + +void gtkpp::Entry::setVisibility(bool visibility) { + gtk_entry_set_visibility(GTK_ENTRY(_widget), visibility); +} diff --git a/gtkpp/Entry.h b/gtkpp/Entry.h new file mode 100644 index 0000000..8df3d98 --- /dev/null +++ b/gtkpp/Entry.h @@ -0,0 +1,25 @@ +// +// Created by selim on 10.05.2022. +// + +#ifndef AUTOCAT_GNOME_ENTRY_H +#define AUTOCAT_GNOME_ENTRY_H + +#include "Widget.h" +#include + +namespace gtkpp { + + class Entry: public Widget { + private: + + public: + Entry(); + void setPlaceholder(const std::string& placeholder); + void setPurpose(GtkInputPurpose purpose); + void setVisibility(bool visibility); + }; + +} + +#endif //AUTOCAT_GNOME_ENTRY_H diff --git a/gtkpp/Widget.cpp b/gtkpp/Widget.cpp new file mode 100644 index 0000000..ef7e091 --- /dev/null +++ b/gtkpp/Widget.cpp @@ -0,0 +1,24 @@ +// +// Created by selim on 10.05.2022. +// + +#include "Widget.h" + +GtkWidget *gtkpp::Widget::gobj() const { + return _widget; +} + +void gtkpp::Widget::setMargins(int margin) { + gtk_widget_set_margin_top(_widget, margin); + gtk_widget_set_margin_bottom(_widget, margin); + gtk_widget_set_margin_start(_widget, margin); + gtk_widget_set_margin_end(_widget, margin); +} + +void gtkpp::Widget::setVAlign(GtkAlign align) { + gtk_widget_set_valign(_widget, align); +} + +void gtkpp::Widget::setVExpand(bool expand) { + gtk_widget_set_vexpand(_widget, expand); +} diff --git a/gtkpp/Widget.h b/gtkpp/Widget.h new file mode 100644 index 0000000..79f8124 --- /dev/null +++ b/gtkpp/Widget.h @@ -0,0 +1,25 @@ +// +// Created by selim on 10.05.2022. +// + +#ifndef AUTOCAT_GNOME_WIDGET_H +#define AUTOCAT_GNOME_WIDGET_H + +#include + +namespace gtkpp { + + class Widget { + protected: + GtkWidget* _widget; + + public: + [[nodiscard]] GtkWidget* gobj() const; + void setMargins(int margin); + void setVAlign(GtkAlign align); + void setVExpand(bool expand); + }; + +} + +#endif //AUTOCAT_GNOME_WIDGET_H diff --git a/gui/LoginWindow.cpp b/gui/LoginWindow.cpp index 645573a..c5bd8e5 100644 --- a/gui/LoginWindow.cpp +++ b/gui/LoginWindow.cpp @@ -11,21 +11,14 @@ #include #include -LoginWindow::LoginWindow() { +LoginWindow::LoginWindow(): _rootBox(GTK_ORIENTATION_VERTICAL, 0), + _contentBox(GTK_ORIENTATION_VERTICAL, 8) { + setDefaultSize(640, 480); auto header = adw_header_bar_new(); adw_header_bar_set_title_widget(ADW_HEADER_BAR(header), gtk_label_new("Login")); - auto loginField = gtk_entry_new(); - gtk_entry_set_placeholder_text(GTK_ENTRY(loginField), "Email"); - gtk_entry_set_input_purpose(GTK_ENTRY(loginField), GTK_INPUT_PURPOSE_EMAIL); - - auto passwordField = gtk_entry_new(); - gtk_entry_set_placeholder_text(GTK_ENTRY(passwordField), "Password"); - gtk_entry_set_input_purpose(GTK_ENTRY(passwordField), GTK_INPUT_PURPOSE_PASSWORD); - gtk_entry_set_visibility(GTK_ENTRY(passwordField), false); - auto loginButton = gtk_button_new(); gtk_button_set_label(GTK_BUTTON(loginButton), "Log in"); gtk_widget_set_margin_top(loginButton, 8); @@ -34,21 +27,25 @@ LoginWindow::LoginWindow() { auto spinner = gtk_spinner_new(); - auto contentBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8); - gtk_box_append(GTK_BOX(contentBox), loginField); - gtk_box_append(GTK_BOX(contentBox), passwordField); - gtk_box_append(GTK_BOX(contentBox), loginButton); - gtk_box_append(GTK_BOX(contentBox), spinner); - gtk_widget_set_margin_start(contentBox, 48); - gtk_widget_set_margin_end(contentBox, 48); - gtk_widget_set_valign(contentBox, GTK_ALIGN_CENTER); - gtk_widget_set_vexpand(contentBox, true); + _loginEntry.setPlaceholder("Email"); + _loginEntry.setPurpose(GTK_INPUT_PURPOSE_EMAIL); - auto rootBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); - gtk_box_append(GTK_BOX(rootBox), header); - gtk_box_append(GTK_BOX(rootBox), contentBox); + _passwordEntry.setPlaceholder("Password"); + _passwordEntry.setPurpose(GTK_INPUT_PURPOSE_PASSWORD); + _passwordEntry.setVisibility(false); - adw_window_set_content(ADW_WINDOW(_window), rootBox); + _contentBox.append(_loginEntry); + _contentBox.append(_passwordEntry); + _contentBox.append(loginButton); + _contentBox.append(spinner); + _contentBox.setMargins(48); + _contentBox.setVAlign(GTK_ALIGN_CENTER); + _contentBox.setVExpand(true); + + _rootBox.append(header); + _rootBox.append(_contentBox); + + adw_window_set_content(ADW_WINDOW(_window), _rootBox.gobj()); // _emailField.set_placeholder_text("Email"); // _passwordField.set_placeholder_text("Password"); diff --git a/gui/LoginWindow.h b/gui/LoginWindow.h index 5f6bdc2..bcb67f8 100644 --- a/gui/LoginWindow.h +++ b/gui/LoginWindow.h @@ -7,6 +7,8 @@ #include #include "../gtkpp/Window.h" +#include "../gtkpp/Box.h" +#include "../gtkpp/Entry.h" class LoginWindow: public gtkpp::Window { private: @@ -16,6 +18,11 @@ private: // Gtk::Spinner _spinner; // std::unique_ptr _dialog; + gtkpp::Box _rootBox; + gtkpp::Box _contentBox; + gtkpp::Entry _loginEntry; + gtkpp::Entry _passwordEntry; + public: LoginWindow();