From 856d7ff67f1946137cac0a99120ac8fdfcb2ebdc Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Tue, 17 May 2022 00:30:36 +0300 Subject: [PATCH] Adding plus button to headerbar --- gtkpp/Button.cpp | 10 ------- gtkpp/Button.h | 9 +----- gtkpp/Widget.cpp | 72 ++++++++++++++++++++++++++++++---------------- gtkpp/Widget.h | 12 ++++++++ gtkpp/Window.cpp | 8 ------ gui/MainWindow.cpp | 16 +++++------ gui/MainWindow.h | 2 ++ gui/MainWindow.xml | 6 ++++ 8 files changed, 76 insertions(+), 59 deletions(-) diff --git a/gtkpp/Button.cpp b/gtkpp/Button.cpp index db632ae..987646e 100644 --- a/gtkpp/Button.cpp +++ b/gtkpp/Button.cpp @@ -6,22 +6,12 @@ namespace gtkpp { - void clickedCallback(GtkButton*, void* data) { - auto button = reinterpret_cast(data); - button->_signalClicked.emit(); - } - Button::Button() : Widget() { _widget = gtk_button_new(); - g_signal_connect(_widget, "clicked", G_CALLBACK(clickedCallback), this); } void Button::setTitle(const std::string &title) { gtk_button_set_label(GTK_BUTTON(_widget), title.c_str()); } - void Button::onClick(const std::function &callback) { - _signalClicked.connect(callback); - } - } diff --git a/gtkpp/Button.h b/gtkpp/Button.h index 70139ed..84a34ba 100644 --- a/gtkpp/Button.h +++ b/gtkpp/Button.h @@ -7,21 +7,14 @@ #include "Widget.h" #include -#include namespace gtkpp { class Button: public Widget { - private: - sigc::signal _signalClicked; - - private: - friend void clickedCallback(GtkButton*, void* data); - public: + using Widget::Widget; Button(); void setTitle(const std::string& title); - void onClick(const std::function& callback); }; } diff --git a/gtkpp/Widget.cpp b/gtkpp/Widget.cpp index 33a213a..6b1607b 100644 --- a/gtkpp/Widget.cpp +++ b/gtkpp/Widget.cpp @@ -4,35 +4,57 @@ #include "Widget.h" -GtkWidget *gtkpp::Widget::gobj() const { - return _widget; -} +namespace gtkpp { -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 clickedCallback(GtkButton*, void* data) { + auto widget = reinterpret_cast(data); + widget->_signalClicked.emit(); + } -void gtkpp::Widget::setVAlign(GtkAlign align) { - gtk_widget_set_valign(_widget, align); -} + void Widget::onClick(const std::function &callback) { + _signalClicked.connect(callback); + } -void gtkpp::Widget::setVExpand(bool expand) { - gtk_widget_set_vexpand(_widget, expand); -} + Widget::Widget() { + _widget = nullptr; + } -void gtkpp::Widget::setHorizontalMargins(int margin) { - gtk_widget_set_margin_start(_widget, margin); - gtk_widget_set_margin_end(_widget, margin); -} + Widget::Widget(GtkBuilder *builder, const char *id) { + _widget = GTK_WIDGET(gtk_builder_get_object(builder, id)); + g_signal_connect(_widget, "clicked", G_CALLBACK(clickedCallback), this); + } -void gtkpp::Widget::setVerticalMargins(int margin) { - gtk_widget_set_margin_top(_widget, margin); - gtk_widget_set_margin_bottom(_widget, margin); -} + GtkWidget *Widget::gobj() const { + return _widget; + } + + void 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 Widget::setVAlign(GtkAlign align) { + gtk_widget_set_valign(_widget, align); + } + + void Widget::setVExpand(bool expand) { + gtk_widget_set_vexpand(_widget, expand); + } + + void Widget::setHorizontalMargins(int margin) { + gtk_widget_set_margin_start(_widget, margin); + gtk_widget_set_margin_end(_widget, margin); + } + + void Widget::setVerticalMargins(int margin) { + gtk_widget_set_margin_top(_widget, margin); + gtk_widget_set_margin_bottom(_widget, margin); + } + + void Widget::setEnabled(bool enabled) { + gtk_widget_set_sensitive(_widget, enabled); + } -void gtkpp::Widget::setEnabled(bool enabled) { - gtk_widget_set_sensitive(_widget, enabled); } diff --git a/gtkpp/Widget.h b/gtkpp/Widget.h index 8615f9c..23f08dd 100644 --- a/gtkpp/Widget.h +++ b/gtkpp/Widget.h @@ -6,6 +6,7 @@ #define AUTOCAT_GNOME_WIDGET_H #include +#include namespace gtkpp { @@ -13,7 +14,18 @@ namespace gtkpp { protected: GtkWidget* _widget; + private: + sigc::signal _signalClicked; + + private: + friend void clickedCallback(GtkButton*, void* data); + public: + void onClick(const std::function& callback); + + public: + Widget(); + Widget(GtkBuilder* builder, const char* id); [[nodiscard]] GtkWidget* gobj() const; void setMargins(int margin); void setVerticalMargins(int margin); diff --git a/gtkpp/Window.cpp b/gtkpp/Window.cpp index dfe5b7e..0ea0761 100644 --- a/gtkpp/Window.cpp +++ b/gtkpp/Window.cpp @@ -23,14 +23,6 @@ namespace gtkpp { Window::Window(std::shared_ptr app, const char* resourceName) { _app = app; -// _builder = gtk_builder_new(); -// -// GError* error = nullptr; -// gtk_builder_add_from_resource(_builder, resourceName, &error); -// if(error) { -// throw std::runtime_error(error->message); -// } - _builder = gtk_builder_new_from_resource(resourceName); _window = GTK_WINDOW(gtk_builder_get_object(_builder, "adw_main_window")); } diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp index af6887a..3c79cf4 100644 --- a/gui/MainWindow.cpp +++ b/gui/MainWindow.cpp @@ -3,15 +3,15 @@ // #include "MainWindow.h" -#include "../gtkpp/Box.h" #include "../gtkpp/HeaderBar.h" -MainWindow::MainWindow(std::shared_ptr app): gtkpp::Window(std::move(app), "/gui/MainWindow.xml") { +#include -// gtkpp::Box rootBox(GTK_ORIENTATION_VERTICAL, 0); -// rootBox.append(gtkpp::HeaderBar("Main")); -// -// _leaflet.append(&rootBox); -// -// adw_application_window_set_content(ADW_APPLICATION_WINDOW(_window), _leaflet.gobj()); +MainWindow::MainWindow(std::shared_ptr app): + gtkpp::Window(std::move(app), "/gui/MainWindow.xml"), + _addNumberButton(_builder, "add_number_button") { + + _addNumberButton.onClick([this] { + std::cout << "Add clicked" << std::endl; + }); } diff --git a/gui/MainWindow.h b/gui/MainWindow.h index aa87b5b..d32b82b 100644 --- a/gui/MainWindow.h +++ b/gui/MainWindow.h @@ -7,10 +7,12 @@ #include "../gtkpp/Window.h" #include "../gtkpp/Leaflet.h" +#include "../gtkpp/Button.h" class MainWindow: public gtkpp::Window { private: gtkpp::Leaflet _leaflet; + gtkpp::Button _addNumberButton; public: explicit MainWindow(std::shared_ptr app); diff --git a/gui/MainWindow.xml b/gui/MainWindow.xml index b3a5401..7848b18 100644 --- a/gui/MainWindow.xml +++ b/gui/MainWindow.xml @@ -31,6 +31,12 @@ + + + list-add + + + none