diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2024-07-14 01:41:14 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2024-07-14 01:41:14 +0200 |
| commit | ec3fa197624cea242b05303461e6fece78d78009 (patch) | |
| tree | 11e0c48443f160d252cabd9adcba20c78675b9e2 | |
| parent | 695ece2c35491a509c70ef710bd0419d67b8fd0f (diff) | |
| download | turns-ec3fa197624cea242b05303461e6fece78d78009.tar.xz turns-ec3fa197624cea242b05303461e6fece78d78009.zip | |
app/ui: layout basic participant creation dialog
| -rw-r--r-- | app/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | app/include/turns/app/windows/create_participant.hpp | 32 | ||||
| -rw-r--r-- | app/include/turns/app/windows/main.hpp | 1 | ||||
| -rw-r--r-- | app/src/windows/create_participant.cpp | 31 | ||||
| -rw-r--r-- | app/src/windows/main.cpp | 10 | ||||
| -rw-r--r-- | res/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | res/windows/create_participant.ui | 74 | ||||
| -rw-r--r-- | res/windows/windows.cmb | 59 |
8 files changed, 203 insertions, 6 deletions
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 4746fee..ac7da67 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -3,6 +3,7 @@ add_library("app" "src/application.cpp" "src/widgets/participant_list_row.cpp" + "src/windows/create_participant.cpp" "src/windows/main.cpp" ) diff --git a/app/include/turns/app/windows/create_participant.hpp b/app/include/turns/app/windows/create_participant.hpp new file mode 100644 index 0000000..856c1dc --- /dev/null +++ b/app/include/turns/app/windows/create_participant.hpp @@ -0,0 +1,32 @@ +#ifndef TURNS_APP_WINDOWS_CREATE_PARTICIPANT_HPP +#define TURNS_APP_WINDOWS_CREATE_PARTICIPANT_HPP + +#include <adwaita.h> +#include <glibmm/refptr.h> +#include <gtkmm/builder.h> +#include <gtkmm/widget.h> +#include <gtkmm/button.h> + +namespace turns::app::windows +{ + + struct create_participant : Gtk::Widget + { + create_participant(BaseObjectType * base, Glib::RefPtr<Gtk::Builder> const builder); + + auto present(Gtk::Widget * parent) -> void; + + private: + auto handle_finish_clicked() -> void; + + AdwDialog * m_adw; + Gtk::Button * m_finish; + + AdwComboRow * m_disposition{}; + AdwEntryRow * m_name{}; + AdwSpinRow * m_order{}; + }; + +} // namespace turns::app::windows + +#endif
\ No newline at end of file diff --git a/app/include/turns/app/windows/main.hpp b/app/include/turns/app/windows/main.hpp index c047867..a73c966 100644 --- a/app/include/turns/app/windows/main.hpp +++ b/app/include/turns/app/windows/main.hpp @@ -23,6 +23,7 @@ namespace turns::app::windows private: auto handle_create_list_row(Glib::RefPtr<Glib::Object> const item) -> Gtk::Widget *; + auto handle_create_participant() -> void; Gtk::Button * m_add_participant; AdwApplicationWindow * m_adw; diff --git a/app/src/windows/create_participant.cpp b/app/src/windows/create_participant.cpp new file mode 100644 index 0000000..b6d674f --- /dev/null +++ b/app/src/windows/create_participant.cpp @@ -0,0 +1,31 @@ +#include "turns/app/windows/create_participant.hpp" + +#include <print> + +#include <gtkmm/listboxrow.h> + +namespace turns::app::windows +{ + + create_participant::create_participant(BaseObjectType * base, Glib::RefPtr<Gtk::Builder> const builder) + : Gtk::Widget{base} + , m_adw{ADW_DIALOG(gobj())} + , m_finish{builder->get_widget<Gtk::Button>("finish")} + { + m_disposition = ADW_COMBO_ROW(builder->get_widget<Gtk::ListBoxRow>("disposition")->gobj()); + m_name = ADW_ENTRY_ROW(builder->get_widget<Gtk::ListBoxRow>("name")->gobj()); + m_order = ADW_SPIN_ROW(builder->get_widget<Gtk::ListBoxRow>("order")->gobj()); + + m_finish->signal_clicked().connect(sigc::mem_fun(*this, &create_participant::handle_finish_clicked)); + } + + auto create_participant::present(Gtk::Widget * parent) -> void + { + adw_dialog_present(m_adw, parent->gobj()); + } + + auto create_participant::handle_finish_clicked() -> void + { + adw_dialog_close(m_adw); + } +} // namespace turns::app::windows
\ No newline at end of file diff --git a/app/src/windows/main.cpp b/app/src/windows/main.cpp index f25b220..d4c3015 100644 --- a/app/src/windows/main.cpp +++ b/app/src/windows/main.cpp @@ -1,6 +1,7 @@ #include "turns/app/windows/main.hpp" #include "turns/app/widgets/participant_list_row.hpp" +#include "turns/app/windows/create_participant.hpp" #include "turns/lang/messages.hpp" #include <format> @@ -28,6 +29,8 @@ namespace turns::app::windows m_open_main_menu->set_tooltip_text(_(tooltips::main_menu)); adw_window_title_set_subtitle(m_title, _(labels::no_active_turn_order)); + m_add_participant->signal_clicked().connect(sigc::mem_fun(*this, &main::handle_create_participant)); + for (auto n : std::views::iota(0, 32)) { auto name = std::format("Participant #{}", n); @@ -46,4 +49,11 @@ namespace turns::app::windows return widget; } + auto main::handle_create_participant() -> void + { + auto builder = Gtk::Builder::create_from_resource("/ch/arknet/Turns/windows/create_participant.ui"); + auto dialog = Gtk::Builder::get_widget_derived<windows::create_participant>(builder, "create_participant_dialog"); + dialog->present(this); + } + } // namespace turns::app::windows diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt index cc3ff8b..dd5b139 100644 --- a/res/CMakeLists.txt +++ b/res/CMakeLists.txt @@ -6,6 +6,7 @@ target_add_glib_resources("res" PREFIX "ch/arknet/Turns" UI_FILES "widgets/participant_list_row.ui" + "windows/create_participant.ui" "windows/main_window.ui" CSS_FILES "style.css" diff --git a/res/windows/create_participant.ui b/res/windows/create_participant.ui new file mode 100644 index 0000000..aa3d093 --- /dev/null +++ b/res/windows/create_participant.ui @@ -0,0 +1,74 @@ +<?xml version='1.0' encoding='UTF-8'?> +<!-- Created with Cambalache 0.90.4 --> +<interface> + <requires lib="gtk" version="4.14"/> + <requires lib="libadwaita" version="1.5"/> + <object class="AdwDialog" id="create_participant_dialog"> + <property name="child"> + <object class="AdwToolbarView"> + <property name="content"> + <object class="AdwClamp"> + <property name="child"> + <object class="GtkBox"> + <property name="hexpand">True</property> + <property name="margin-bottom">18</property> + <property name="margin-end">12</property> + <property name="margin-start">12</property> + <property name="margin-top">18</property> + <property name="orientation">vertical</property> + <property name="spacing">18</property> + <property name="valign">start</property> + <child> + <object class="GtkListBox"> + <child> + <object class="AdwEntryRow" id="name"> + <property name="title">Name</property> + </object> + </child> + <child> + <object class="AdwSpinRow" id="order"> + <property name="adjustment"> + <object class="GtkAdjustment"> + <property name="lower">-1000.0</property> + <property name="step-increment">1.0</property> + <property name="upper">1000.0</property> + </object> + </property> + <property name="digits">1</property> + <property name="numeric">True</property> + <property name="title">Order</property> + </object> + </child> + <child> + <object class="AdwComboRow" id="disposition"> + <property name="title">Disposition</property> + </object> + </child> + <style> + <class name="boxed-list"/> + </style> + </object> + </child> + <child> + <object class="GtkButton" id="finish"> + <property name="hexpand">True</property> + <property name="label">Finish</property> + <style> + <class name="pill"/> + <class name="suggested-action"/> + </style> + </object> + </child> + </object> + </property> + </object> + </property> + <child type="top"> + <object class="AdwHeaderBar"/> + </child> + </object> + </property> + <property name="hexpand">True</property> + <property name="title">Add Participant</property> + </object> +</interface> diff --git a/res/windows/windows.cmb b/res/windows/windows.cmb index 9cb6417..1679737 100644 --- a/res/windows/windows.cmb +++ b/res/windows/windows.cmb @@ -2,11 +2,14 @@ <!DOCTYPE cambalache-project SYSTEM "cambalache-project.dtd"> <cambalache-project version="0.17.3" target_tk="gtk-4.0"> <ui> - (1,None,"main_window.ui","main_window.ui",None,None,None,None,None,None,None) + (1,None,"main_window.ui","main_window.ui",None,None,None,None,None,None,None), + (2,None,None,"create_participant.ui",None,None,None,None,None,None,None) </ui> <ui_library> (1,"gtk","4.14",None), - (1,"libadwaita","1.5",None) + (1,"libadwaita","1.5",None), + (2,"gtk","4.14",None), + (2,"libadwaita","1.5",None) </ui_library> <object> (1,1,"AdwApplicationWindow","main_window",None,None,None,None,-1,None,None), @@ -19,7 +22,18 @@ (1,9,"(menu)","main_menu",None,None,None,None,-1,None,None), (1,10,"(item)",None,9,None,None,None,-1,None,None), (1,11,"AdwClamp",None,4,None,None,None,-1,None,None), - (1,12,"GtkListBox","participant_list",11,None,None,None,-1,None,None) + (1,12,"GtkListBox","participant_list",11,None,None,None,-1,None,None), + (2,1,"AdwDialog","create_participant_dialog",None,None,None,None,-1,None,None), + (2,2,"AdwToolbarView",None,1,None,None,None,-1,None,None), + (2,3,"AdwHeaderBar",None,2,None,"top",None,-1,None,None), + (2,4,"AdwClamp",None,2,None,None,None,-1,None,None), + (2,5,"GtkBox",None,4,None,None,None,-1,None,None), + (2,6,"GtkListBox",None,5,None,None,None,None,None,None), + (2,7,"AdwEntryRow","name",6,None,None,None,None,None,None), + (2,9,"GtkButton","finish",5,None,None,None,1,None,None), + (2,10,"AdwSpinRow","order",6,None,None,None,1,None,None), + (2,11,"AdwComboRow","disposition",6,None,None,None,2,None,None), + (2,12,"GtkAdjustment",None,10,None,None,None,-1,None,None) </object> <object_property> (1,1,"AdwApplicationWindow","content",None,None,None,None,None,2,None,None,None,None), @@ -42,7 +56,32 @@ (1,12,"GtkWidget","margin-end","12",None,None,None,None,None,None,None,None,None), (1,12,"GtkWidget","margin-start","12",None,None,None,None,None,None,None,None,None), (1,12,"GtkWidget","margin-top","18",None,None,None,None,None,None,None,None,None), - (1,12,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None) + (1,12,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None), + (2,1,"AdwDialog","child",None,None,None,None,None,2,None,None,None,None), + (2,1,"AdwDialog","default-widget",None,None,None,None,None,None,None,None,None,None), + (2,1,"AdwDialog","title","Add Participant",None,None,None,None,None,None,None,None,None), + (2,1,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (2,2,"AdwToolbarView","content",None,None,None,None,None,4,None,None,None,None), + (2,4,"AdwClamp","child",None,None,None,None,None,5,None,None,None,None), + (2,5,"GtkBox","spacing","18",None,None,None,None,None,None,None,None,None), + (2,5,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), + (2,5,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (2,5,"GtkWidget","margin-bottom","18",None,None,None,None,None,None,None,None,None), + (2,5,"GtkWidget","margin-end","12",None,None,None,None,None,None,None,None,None), + (2,5,"GtkWidget","margin-start","12",None,None,None,None,None,None,None,None,None), + (2,5,"GtkWidget","margin-top","18",None,None,None,None,None,None,None,None,None), + (2,5,"GtkWidget","valign","start",None,None,None,None,None,None,None,None,None), + (2,7,"AdwPreferencesRow","title","Name",None,None,None,None,None,None,None,None,None), + (2,9,"GtkButton","label","Finish",None,None,None,None,None,None,None,None,None), + (2,9,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), + (2,10,"AdwPreferencesRow","title","Order",None,None,None,None,None,None,None,None,None), + (2,10,"AdwSpinRow","adjustment",None,None,None,None,None,12,None,None,None,None), + (2,10,"AdwSpinRow","digits","1",None,None,None,None,None,None,None,None,None), + (2,10,"AdwSpinRow","numeric","True",None,None,None,None,None,None,None,None,None), + (2,11,"AdwPreferencesRow","title","Disposition",None,None,None,None,None,None,None,None,None), + (2,12,"GtkAdjustment","lower","-1000.0",None,None,None,None,None,None,None,None,None), + (2,12,"GtkAdjustment","step-increment","1.0",None,None,None,None,None,None,None,None,None), + (2,12,"GtkAdjustment","upper","1000.0",None,None,None,None,None,None,None,None,None) </object_property> <object_data> (1,1,"GtkWidget",2,2,None,1,None,None,None,None), @@ -50,11 +89,19 @@ (1,3,"GtkWidget",1,1,None,None,None,None,None,None), (1,2,"GtkWidget",1,1,None,None,None,None,None,None), (1,12,"GtkWidget",1,1,None,None,None,None,None,None), - (1,12,"GtkWidget",2,2,None,1,None,None,None,None) + (1,12,"GtkWidget",2,2,None,1,None,None,None,None), + (2,6,"GtkWidget",1,1,None,None,None,None,None,None), + (2,6,"GtkWidget",2,2,None,1,None,None,None,None), + (2,9,"GtkWidget",1,1,None,None,None,None,None,None), + (2,9,"GtkWidget",2,2,None,1,None,None,None,None), + (2,9,"GtkWidget",2,3,None,1,None,None,None,None) </object_data> <object_data_arg> (1,1,"GtkWidget",2,2,"name","background"), (1,4,"GtkWidget",2,2,"name","boxed-list"), - (1,12,"GtkWidget",2,2,"name","boxed-list") + (1,12,"GtkWidget",2,2,"name","boxed-list"), + (2,6,"GtkWidget",2,2,"name","boxed-list"), + (2,9,"GtkWidget",2,2,"name","pill"), + (2,9,"GtkWidget",2,3,"name","suggested-action") </object_data_arg> </cambalache-project> |
