diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2024-07-13 16:14:36 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2024-07-13 16:14:36 +0200 |
| commit | f8bfd268523ff5abd3cf5490d5b892ff49954f47 (patch) | |
| tree | 2af1079ec797c1617f1d88b43a847f7ce28cecdb | |
| parent | e4130ea27cc3a13780e95bd0654675336fa564ec (diff) | |
| download | turns-f8bfd268523ff5abd3cf5490d5b892ff49954f47.tar.xz turns-f8bfd268523ff5abd3cf5490d5b892ff49954f47.zip | |
app/ui: make list entry title editable
| -rw-r--r-- | app/include/turns/app/widgets/participant_list_row.hpp | 6 | ||||
| -rw-r--r-- | app/src/widgets/participant_list_row.cpp | 10 | ||||
| -rw-r--r-- | res/widgets/participant_list_row.ui | 20 | ||||
| -rw-r--r-- | res/widgets/widgets.cmb | 28 |
4 files changed, 42 insertions, 22 deletions
diff --git a/app/include/turns/app/widgets/participant_list_row.hpp b/app/include/turns/app/widgets/participant_list_row.hpp index b9efbd6..172e9ac 100644 --- a/app/include/turns/app/widgets/participant_list_row.hpp +++ b/app/include/turns/app/widgets/participant_list_row.hpp @@ -7,15 +7,18 @@ #include <glibmm/ustring.h> #include <gtkmm/box.h> +#include <gtkmm/editablelabel.h> #include <gtkmm/image.h> #include <gtkmm/label.h> #include <gtkmm/listboxrow.h> +#include <gtkmm/togglebutton.h> namespace turns::app::widgets { struct participant_list_row : template_widget<participant_list_row, Gtk::ListBoxRow> { auto constexpr inline static children = std::array{ + "edit", "header", "prefixes", "image", @@ -31,12 +34,13 @@ namespace turns::app::widgets auto set_title(Glib::ustring const & value) -> void; private: + Gtk::ToggleButton * m_edit; Gtk::Box * m_header; Gtk::Image * m_image; Gtk::Box * m_prefixes; Gtk::Label * m_subtitle; Gtk::Box * m_suffixes; - Gtk::Label * m_title; + Gtk::EditableLabel * m_title; Gtk::Box * m_title_box; }; } // namespace turns::app::widgets diff --git a/app/src/widgets/participant_list_row.cpp b/app/src/widgets/participant_list_row.cpp index bc3108e..10bcc2d 100644 --- a/app/src/widgets/participant_list_row.cpp +++ b/app/src/widgets/participant_list_row.cpp @@ -14,13 +14,21 @@ namespace turns::app::widgets : Glib::ObjectBase(TYPE_NAME) , template_widget<participant_list_row, Gtk::ListBoxRow>{TEMPLATE} { + m_edit = get_widget<Gtk::ToggleButton>("edit"); m_header = get_widget<Gtk::Box>("header"); m_image = get_widget<Gtk::Image>("image"); m_prefixes = get_widget<Gtk::Box>("prefixes"); m_subtitle = get_widget<Gtk::Label>("subtitle"); m_suffixes = get_widget<Gtk::Box>("suffixes"); - m_title = get_widget<Gtk::Label>("title"); + m_title = get_widget<Gtk::EditableLabel>("title"); m_title_box = get_widget<Gtk::Box>("title_box"); + + m_edit->signal_clicked().connect([this]{ + if(m_edit->get_active()) + { + m_title->start_editing(); + } + }); } auto participant_list_row::set_subtitle(Glib::ustring const & value) -> void diff --git a/res/widgets/participant_list_row.ui b/res/widgets/participant_list_row.ui index 66506c8..c0e3895 100644 --- a/res/widgets/participant_list_row.ui +++ b/res/widgets/participant_list_row.ui @@ -32,15 +32,14 @@ <property name="orientation">vertical</property> <property name="valign">center</property> <child> - <object class="GtkLabel" id="title"> - <property name="lines">0</property> + <object class="GtkEditableLabel" id="title"> + <property name="editable">False</property> <property name="visible">False</property> - <property name="wrap">True</property> - <property name="wrap-mode">word-char</property> - <property name="xalign">0.0</property> <style> <class name="title"/> </style> + <!-- Custom object fragments --> + <property name="editable" bind-source="edit" bind-property="active" bind-flags="sync-create"/> </object> </child> <child> @@ -64,7 +63,16 @@ <object class="GtkBox" id="suffixes"> <property name="valign">center</property> <child> - <object class="GtkSwitch"/> + <object class="GtkToggleButton" id="edit"> + <property name="icon-name">document-edit-symbolic</property> + <!-- Custom object fragments --> + <property name="active" bind-source="title" bind-property="editing" bind-flags="sync-create"/> + </object> + </child> + <child> + <object class="GtkSwitch"> + <property name="valign">center</property> + </object> </child> <style> <class name="suffixes"/> diff --git a/res/widgets/widgets.cmb b/res/widgets/widgets.cmb index ce44dd0..a61fa4d 100644 --- a/res/widgets/widgets.cmb +++ b/res/widgets/widgets.cmb @@ -13,10 +13,11 @@ (1,3,"GtkBox","prefixes",2,None,None,None,-1,None,None), (1,4,"GtkImage","image",2,None,None,None,-1,None,None), (1,5,"GtkBox","title_box",2,None,None,None,-1,None,None), - (1,6,"GtkLabel","title",5,None,None,None,-1,None,None), - (1,7,"GtkLabel","subtitle",5,None,None,None,-1,None,None), + (1,7,"GtkLabel","subtitle",5,None,None,None,1,None,None), (1,8,"GtkBox","suffixes",2,None,None,None,-1,None,None), - (1,9,"GtkSwitch",None,8,None,None,None,-1,None,None) + (1,9,"GtkSwitch",None,8,None,None,None,1,None,None), + (1,10,"GtkEditableLabel","title",5,None,None,None,None,"<property name=\"editable\"\n bind-source=\"edit\"\n bind-property=\"active\"\n bind-flags=\"sync-create\" />",None), + (1,11,"GtkToggleButton","edit",8,None,None,None,None,"<property name=\"active\"\n bind-source=\"title\"\n bind-property=\"editing\"\n bind-flags=\"sync-create\" />",None) </object> <object_property> (1,1,"GtkListBoxRow","child",None,None,None,None,None,2,None,None,None,None), @@ -29,21 +30,18 @@ (1,5,"GtkOrientable","orientation","vertical",None,None,None,None,None,None,None,None,None), (1,5,"GtkWidget","hexpand","True",None,None,None,None,None,None,None,None,None), (1,5,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), - (1,6,"GtkLabel","lines","0",None,None,None,None,None,None,None,None,None), - (1,6,"GtkLabel","wrap","True",None,None,None,None,None,None,None,None,None), - (1,6,"GtkLabel","wrap-mode","word-char",None,None,None,None,None,None,None,None,None), - (1,6,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None), - (1,6,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None), (1,7,"GtkLabel","lines","0",None,None,None,None,None,None,None,None,None), (1,7,"GtkLabel","wrap","True",None,None,None,None,None,None,None,None,None), (1,7,"GtkLabel","wrap-mode","word-char",None,None,None,None,None,None,None,None,None), (1,7,"GtkLabel","xalign","0.0",None,None,None,None,None,None,None,None,None), (1,7,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None), - (1,8,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None) + (1,8,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), + (1,9,"GtkWidget","valign","center",None,None,None,None,None,None,None,None,None), + (1,10,"GtkEditable","editable","False",None,None,None,None,None,None,None,None,None), + (1,10,"GtkWidget","visible","False",None,None,None,None,None,None,None,None,None), + (1,11,"GtkButton","icon-name","document-edit-symbolic",None,None,None,None,None,None,None,None,None) </object_property> <object_data> - (1,6,"GtkWidget",1,1,None,None,None,None,None,None), - (1,6,"GtkWidget",2,2,None,1,None,None,None,None), (1,5,"GtkWidget",1,1,None,None,None,None,None,None), (1,5,"GtkWidget",2,2,None,1,None,None,None,None), (1,4,"GtkWidget",1,1,None,None,None,None,None,None), @@ -56,16 +54,18 @@ (1,8,"GtkWidget",2,2,None,1,None,None,None,None), (1,1,"GtkWidget",2,2,None,1,None,None,None,None), (1,1,"GtkWidget",1,3,None,None,None,None,None,None), - (1,1,"GtkWidget",2,4,None,3,None,None,None,None) + (1,1,"GtkWidget",2,4,None,3,None,None,None,None), + (1,10,"GtkWidget",1,1,None,None,None,None,None,None), + (1,10,"GtkWidget",2,2,None,1,None,None,None,None) </object_data> <object_data_arg> - (1,6,"GtkWidget",2,2,"name","title"), (1,5,"GtkWidget",2,2,"name","title"), (1,4,"GtkWidget",2,2,"name","icon"), (1,3,"GtkWidget",2,2,"name","prefixes"), (1,7,"GtkWidget",2,2,"name","subtitle"), (1,8,"GtkWidget",2,2,"name","suffixes"), (1,1,"GtkWidget",2,2,"name","property"), - (1,1,"GtkWidget",2,4,"name","view") + (1,1,"GtkWidget",2,4,"name","view"), + (1,10,"GtkWidget",2,2,"name","title") </object_data_arg> </cambalache-project> |
