mirror of
				https://github.com/johrpan/musicus.git
				synced 2025-10-26 11:47:25 +01:00 
			
		
		
		
	Replace all entries with AdwEntryRow
This commit is contained in:
		
							parent
							
								
									fe83811a8a
								
							
						
					
					
						commit
						1db96062fb
					
				
					 13 changed files with 67 additions and 138 deletions
				
			
		|  | @ -68,16 +68,8 @@ | |||
|                           <object class="GtkListBox"> | ||||
|                             <property name="selection-mode">none</property> | ||||
|                             <child> | ||||
|                               <object class="AdwActionRow" id="name_row"> | ||||
|                                 <property name="focusable">False</property> | ||||
|                               <object class="AdwEntryRow" id="name_row"> | ||||
|                                 <property name="title" translatable="yes">Name of the medium</property> | ||||
|                                 <property name="activatable-widget">name_entry</property> | ||||
|                                 <child> | ||||
|                                   <object class="GtkEntry" id="name_entry"> | ||||
|                                     <property name="valign">center</property> | ||||
|                                     <property name="hexpand">True</property> | ||||
|                                   </object> | ||||
|                                 </child> | ||||
|                               </object> | ||||
|                             </child> | ||||
|                             <style> | ||||
|  |  | |||
|  | @ -85,16 +85,8 @@ | |||
|                               </object> | ||||
|                             </child> | ||||
|                             <child> | ||||
|                               <object class="AdwActionRow"> | ||||
|                                 <property name="focusable">False</property> | ||||
|                               <object class="AdwEntryRow" id="comment_row"> | ||||
|                                 <property name="title" translatable="yes">Comment</property> | ||||
|                                 <property name="activatable-widget">comment_entry</property> | ||||
|                                 <child> | ||||
|                                   <object class="GtkEntry" id="comment_entry"> | ||||
|                                     <property name="valign">center</property> | ||||
|                                     <property name="hexpand">True</property> | ||||
|                                   </object> | ||||
|                                 </child> | ||||
|                               </object> | ||||
|                             </child> | ||||
|                             <style> | ||||
|  |  | |||
|  | @ -85,16 +85,8 @@ | |||
|                               </object> | ||||
|                             </child> | ||||
|                             <child> | ||||
|                               <object class="AdwActionRow"> | ||||
|                                 <property name="focusable">False</property> | ||||
|                               <object class="AdwEntryRow" id="title_row"> | ||||
|                                 <property name="title" translatable="yes">Title</property> | ||||
|                                 <property name="activatable-widget">title_entry</property> | ||||
|                                 <child> | ||||
|                                   <object class="GtkEntry" id="title_entry"> | ||||
|                                     <property name="valign">center</property> | ||||
|                                     <property name="hexpand">True</property> | ||||
|                                   </object> | ||||
|                                 </child> | ||||
|                               </object> | ||||
|                             </child> | ||||
|                             <style> | ||||
|  |  | |||
|  | @ -50,17 +50,10 @@ | |||
|             <child> | ||||
|               <object class="GtkListBox"> | ||||
|                 <property name="selection-mode">none</property> | ||||
|                 <property name="valign">start</property> | ||||
|                 <child> | ||||
|                   <object class="AdwActionRow"> | ||||
|                     <property name="focusable">False</property> | ||||
|                   <object class="AdwEntryRow" id="title_row"> | ||||
|                     <property name="title" translatable="yes">Title</property> | ||||
|                     <property name="activatable-widget">title_entry</property> | ||||
|                     <child> | ||||
|                       <object class="GtkEntry" id="title_entry"> | ||||
|                         <property name="valign">center</property> | ||||
|                         <property name="hexpand">True</property> | ||||
|                       </object> | ||||
|                     </child> | ||||
|                   </object> | ||||
|                 </child> | ||||
|                 <style> | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| use crate::navigator::{NavigationHandle, Screen}; | ||||
| use crate::widgets::{Editor, EntryRow, Section, Widget}; | ||||
| use crate::widgets::{Editor, Section, Widget}; | ||||
| use anyhow::Result; | ||||
| use gettextrs::gettext; | ||||
| use gtk::{builders::ListBoxBuilder, glib::clone, prelude::*}; | ||||
|  | @ -14,7 +14,7 @@ pub struct EnsembleEditor { | |||
|     id: String, | ||||
| 
 | ||||
|     editor: Editor, | ||||
|     name: EntryRow, | ||||
|     name: adw::EntryRow, | ||||
| } | ||||
| 
 | ||||
| impl Screen<Option<Ensemble>, Ensemble> for EnsembleEditor { | ||||
|  | @ -28,8 +28,8 @@ impl Screen<Option<Ensemble>, Ensemble> for EnsembleEditor { | |||
|             .css_classes(vec![String::from("boxed-list")]) | ||||
|             .build(); | ||||
| 
 | ||||
|         let name = EntryRow::new(&gettext("Name")); | ||||
|         list.append(&name.widget); | ||||
|         let name = adw::EntryRow::builder().title(&gettext("Name")).build(); | ||||
|         list.append(&name); | ||||
| 
 | ||||
|         let section = Section::new(&gettext("General"), &list); | ||||
|         editor.add_content(§ion.widget); | ||||
|  | @ -68,7 +68,6 @@ impl Screen<Option<Ensemble>, Ensemble> for EnsembleEditor { | |||
|         })); | ||||
| 
 | ||||
|         this.name | ||||
|             .entry | ||||
|             .connect_changed(clone!(@weak this => move |_| this.validate())); | ||||
| 
 | ||||
|         this.validate(); | ||||
|  | @ -80,14 +79,14 @@ impl Screen<Option<Ensemble>, Ensemble> for EnsembleEditor { | |||
| impl EnsembleEditor { | ||||
|     /// Validate inputs and enable/disable saving.
 | ||||
|     fn validate(&self) { | ||||
|         self.editor.set_may_save(!self.name.get_text().is_empty()); | ||||
|         self.editor.set_may_save(!self.name.text().is_empty()); | ||||
|     } | ||||
| 
 | ||||
|     /// Save the ensemble.
 | ||||
|     fn save(&self) -> Result<Ensemble> { | ||||
|         let name = self.name.get_text(); | ||||
|         let name = self.name.text(); | ||||
| 
 | ||||
|         let ensemble = Ensemble::new(self.id.clone(), name); | ||||
|         let ensemble = Ensemble::new(self.id.clone(), name.to_string()); | ||||
| 
 | ||||
|         self.handle.backend.db().update_ensemble(ensemble.clone())?; | ||||
|         self.handle.backend.library_changed(); | ||||
|  |  | |||
|  | @ -1,8 +1,8 @@ | |||
| use crate::navigator::{NavigationHandle, Screen}; | ||||
| use crate::widgets::{Editor, EntryRow, Section, Widget}; | ||||
| use crate::widgets::{Editor, Section, Widget}; | ||||
| use anyhow::Result; | ||||
| use gettextrs::gettext; | ||||
| use gtk::{glib::clone, prelude::*, builders::ListBoxBuilder}; | ||||
| use gtk::{builders::ListBoxBuilder, glib::clone, prelude::*}; | ||||
| use musicus_backend::db::{generate_id, Instrument}; | ||||
| use std::rc::Rc; | ||||
| 
 | ||||
|  | @ -14,7 +14,7 @@ pub struct InstrumentEditor { | |||
|     id: String, | ||||
| 
 | ||||
|     editor: Editor, | ||||
|     name: EntryRow, | ||||
|     name: adw::EntryRow, | ||||
| } | ||||
| 
 | ||||
| impl Screen<Option<Instrument>, Instrument> for InstrumentEditor { | ||||
|  | @ -28,8 +28,8 @@ impl Screen<Option<Instrument>, Instrument> for InstrumentEditor { | |||
|             .css_classes(vec![String::from("boxed-list")]) | ||||
|             .build(); | ||||
| 
 | ||||
|         let name = EntryRow::new(&gettext("Name")); | ||||
|         list.append(&name.widget); | ||||
|         let name = adw::EntryRow::builder().title(&gettext("Name")).build(); | ||||
|         list.append(&name); | ||||
| 
 | ||||
|         let section = Section::new(&gettext("General"), &list); | ||||
|         editor.add_content(§ion.widget); | ||||
|  | @ -68,7 +68,6 @@ impl Screen<Option<Instrument>, Instrument> for InstrumentEditor { | |||
|         })); | ||||
| 
 | ||||
|         this.name | ||||
|             .entry | ||||
|             .connect_changed(clone!(@weak this => move |_| this.validate())); | ||||
| 
 | ||||
|         this.validate(); | ||||
|  | @ -80,14 +79,14 @@ impl Screen<Option<Instrument>, Instrument> for InstrumentEditor { | |||
| impl InstrumentEditor { | ||||
|     /// Validate inputs and enable/disable saving.
 | ||||
|     fn validate(&self) { | ||||
|         self.editor.set_may_save(!self.name.get_text().is_empty()); | ||||
|         self.editor.set_may_save(!self.name.text().is_empty()); | ||||
|     } | ||||
| 
 | ||||
|     /// Save the instrument.
 | ||||
|     fn save(&self) -> Result<Instrument> { | ||||
|         let name = self.name.get_text(); | ||||
|         let name = self.name.text(); | ||||
| 
 | ||||
|         let instrument = Instrument::new(self.id.clone(), name); | ||||
|         let instrument = Instrument::new(self.id.clone(), name.to_string()); | ||||
| 
 | ||||
|         self.handle | ||||
|             .backend | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| use crate::navigator::{NavigationHandle, Screen}; | ||||
| use crate::widgets::{Editor, EntryRow, Section, Widget}; | ||||
| use crate::widgets::{Editor, Section, Widget}; | ||||
| use anyhow::Result; | ||||
| use gettextrs::gettext; | ||||
| use glib::clone; | ||||
|  | @ -15,8 +15,8 @@ pub struct PersonEditor { | |||
|     id: String, | ||||
| 
 | ||||
|     editor: Editor, | ||||
|     first_name: EntryRow, | ||||
|     last_name: EntryRow, | ||||
|     first_name: adw::EntryRow, | ||||
|     last_name: adw::EntryRow, | ||||
| } | ||||
| 
 | ||||
| impl Screen<Option<Person>, Person> for PersonEditor { | ||||
|  | @ -30,11 +30,16 @@ impl Screen<Option<Person>, Person> for PersonEditor { | |||
|             .css_classes(vec![String::from("boxed-list")]) | ||||
|             .build(); | ||||
| 
 | ||||
|         let first_name = EntryRow::new(&gettext("First name")); | ||||
|         let last_name = EntryRow::new(&gettext("Last name")); | ||||
|         let first_name = adw::EntryRow::builder() | ||||
|             .title(&gettext("First name")) | ||||
|             .build(); | ||||
| 
 | ||||
|         list.append(&first_name.widget); | ||||
|         list.append(&last_name.widget); | ||||
|         let last_name = adw::EntryRow::builder() | ||||
|             .title(&gettext("Last name")) | ||||
|             .build(); | ||||
| 
 | ||||
|         list.append(&first_name); | ||||
|         list.append(&last_name); | ||||
| 
 | ||||
|         let section = Section::new(&gettext("General"), &list); | ||||
|         editor.add_content(§ion.widget); | ||||
|  | @ -76,11 +81,9 @@ impl Screen<Option<Person>, Person> for PersonEditor { | |||
|         })); | ||||
| 
 | ||||
|         this.first_name | ||||
|             .entry | ||||
|             .connect_changed(clone!(@weak this =>  move |_| this.validate())); | ||||
| 
 | ||||
|         this.last_name | ||||
|             .entry | ||||
|             .connect_changed(clone!(@weak this =>  move |_| this.validate())); | ||||
| 
 | ||||
|         this.validate(); | ||||
|  | @ -92,17 +95,20 @@ impl Screen<Option<Person>, Person> for PersonEditor { | |||
| impl PersonEditor { | ||||
|     /// Validate inputs and enable/disable saving.
 | ||||
|     fn validate(&self) { | ||||
|         self.editor.set_may_save( | ||||
|             !self.first_name.get_text().is_empty() && !self.last_name.get_text().is_empty(), | ||||
|         ); | ||||
|         self.editor | ||||
|             .set_may_save(!self.first_name.text().is_empty() && !self.last_name.text().is_empty()); | ||||
|     } | ||||
| 
 | ||||
|     /// Save the person.
 | ||||
|     fn save(self: &Rc<Self>) -> Result<Person> { | ||||
|         let first_name = self.first_name.get_text(); | ||||
|         let last_name = self.last_name.get_text(); | ||||
|         let first_name = self.first_name.text(); | ||||
|         let last_name = self.last_name.text(); | ||||
| 
 | ||||
|         let person = Person::new(self.id.clone(), first_name, last_name); | ||||
|         let person = Person::new( | ||||
|             self.id.clone(), | ||||
|             first_name.to_string(), | ||||
|             last_name.to_string(), | ||||
|         ); | ||||
| 
 | ||||
|         self.handle.backend.db().update_person(person.clone())?; | ||||
|         self.handle.backend.library_changed(); | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ pub struct RecordingEditor { | |||
|     save_button: gtk::Button, | ||||
|     info_bar: gtk::InfoBar, | ||||
|     work_row: adw::ActionRow, | ||||
|     comment_entry: gtk::Entry, | ||||
|     comment_row: adw::EntryRow, | ||||
|     performance_list: Rc<List>, | ||||
|     id: String, | ||||
|     work: RefCell<Option<Work>>, | ||||
|  | @ -39,7 +39,7 @@ impl Screen<Option<Recording>, Recording> for RecordingEditor { | |||
|         get_widget!(builder, gtk::InfoBar, info_bar); | ||||
|         get_widget!(builder, adw::ActionRow, work_row); | ||||
|         get_widget!(builder, gtk::Button, work_button); | ||||
|         get_widget!(builder, gtk::Entry, comment_entry); | ||||
|         get_widget!(builder, adw::EntryRow, comment_row); | ||||
|         get_widget!(builder, gtk::Frame, performance_frame); | ||||
|         get_widget!(builder, gtk::Button, add_performer_button); | ||||
| 
 | ||||
|  | @ -48,7 +48,7 @@ impl Screen<Option<Recording>, Recording> for RecordingEditor { | |||
| 
 | ||||
|         let (id, work, performances) = match recording { | ||||
|             Some(recording) => { | ||||
|                 comment_entry.set_text(&recording.comment); | ||||
|                 comment_row.set_text(&recording.comment); | ||||
|                 (recording.id, Some(recording.work), recording.performances) | ||||
|             } | ||||
|             None => (generate_id(), None, Vec::new()), | ||||
|  | @ -60,7 +60,7 @@ impl Screen<Option<Recording>, Recording> for RecordingEditor { | |||
|             save_button, | ||||
|             info_bar, | ||||
|             work_row, | ||||
|             comment_entry, | ||||
|             comment_row, | ||||
|             performance_list, | ||||
|             id, | ||||
|             work: RefCell::new(work), | ||||
|  | @ -184,7 +184,7 @@ impl RecordingEditor { | |||
|                 .borrow() | ||||
|                 .clone() | ||||
|                 .expect("Tried to create recording without work!"), | ||||
|             self.comment_entry.text().to_string(), | ||||
|             self.comment_row.text().to_string(), | ||||
|             self.performances.borrow().clone(), | ||||
|         ); | ||||
| 
 | ||||
|  |  | |||
|  | @ -17,7 +17,7 @@ pub struct WorkEditor { | |||
|     handle: NavigationHandle<Work>, | ||||
|     widget: gtk::Stack, | ||||
|     save_button: gtk::Button, | ||||
|     title_entry: gtk::Entry, | ||||
|     title_row: adw::EntryRow, | ||||
|     info_bar: gtk::InfoBar, | ||||
|     composer_row: adw::ActionRow, | ||||
|     instrument_list: Rc<List>, | ||||
|  | @ -39,7 +39,7 @@ impl Screen<Option<Work>, Work> for WorkEditor { | |||
|         get_widget!(builder, gtk::Button, back_button); | ||||
|         get_widget!(builder, gtk::Button, save_button); | ||||
|         get_widget!(builder, gtk::InfoBar, info_bar); | ||||
|         get_widget!(builder, gtk::Entry, title_entry); | ||||
|         get_widget!(builder, adw::EntryRow, title_row); | ||||
|         get_widget!(builder, gtk::Button, composer_button); | ||||
|         get_widget!(builder, adw::ActionRow, composer_row); | ||||
|         get_widget!(builder, gtk::Frame, instrument_frame); | ||||
|  | @ -56,7 +56,7 @@ impl Screen<Option<Work>, Work> for WorkEditor { | |||
| 
 | ||||
|         let (id, composer, instruments, structure) = match work { | ||||
|             Some(work) => { | ||||
|                 title_entry.set_text(&work.title); | ||||
|                 title_row.set_text(&work.title); | ||||
|                 (work.id, Some(work.composer), work.instruments, work.parts) | ||||
|             } | ||||
|             None => (generate_id(), None, Vec::new(), Vec::new()), | ||||
|  | @ -68,7 +68,7 @@ impl Screen<Option<Work>, Work> for WorkEditor { | |||
|             save_button, | ||||
|             id, | ||||
|             info_bar, | ||||
|             title_entry, | ||||
|             title_row, | ||||
|             composer_row, | ||||
|             instrument_list, | ||||
|             part_list, | ||||
|  | @ -105,7 +105,7 @@ impl Screen<Option<Work>, Work> for WorkEditor { | |||
|             }); | ||||
|         })); | ||||
| 
 | ||||
|         this.title_entry | ||||
|         this.title_row | ||||
|             .connect_changed(clone!(@weak this =>  move |_| this.validate())); | ||||
| 
 | ||||
|         this.instrument_list.set_make_widget_cb( | ||||
|  | @ -245,14 +245,14 @@ impl WorkEditor { | |||
|     /// Validate inputs and enable/disable saving.
 | ||||
|     fn validate(&self) { | ||||
|         self.save_button | ||||
|             .set_sensitive(!self.title_entry.text().is_empty() && self.composer.borrow().is_some()); | ||||
|             .set_sensitive(!self.title_row.text().is_empty() && self.composer.borrow().is_some()); | ||||
|     } | ||||
| 
 | ||||
|     /// Save the work.
 | ||||
|     fn save(self: &Rc<Self>) -> Result<Work> { | ||||
|         let work = Work::new( | ||||
|             self.id.clone(), | ||||
|             self.title_entry.text().to_string(), | ||||
|             self.title_row.text().to_string(), | ||||
|             self.composer | ||||
|                 .borrow() | ||||
|                 .clone() | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ pub struct WorkPartEditor { | |||
|     handle: NavigationHandle<WorkPart>, | ||||
|     widget: gtk::Box, | ||||
|     save_button: gtk::Button, | ||||
|     title_entry: gtk::Entry, | ||||
|     title_row: adw::EntryRow, | ||||
| } | ||||
| 
 | ||||
| impl Screen<Option<WorkPart>, WorkPart> for WorkPartEditor { | ||||
|  | @ -24,17 +24,17 @@ impl Screen<Option<WorkPart>, WorkPart> for WorkPartEditor { | |||
|         get_widget!(builder, gtk::Box, widget); | ||||
|         get_widget!(builder, gtk::Button, back_button); | ||||
|         get_widget!(builder, gtk::Button, save_button); | ||||
|         get_widget!(builder, gtk::Entry, title_entry); | ||||
|         get_widget!(builder, adw::EntryRow, title_row); | ||||
| 
 | ||||
|         if let Some(section) = section { | ||||
|             title_entry.set_text(§ion.title); | ||||
|             title_row.set_text(§ion.title); | ||||
|         } | ||||
| 
 | ||||
|         let this = Rc::new(Self { | ||||
|             handle, | ||||
|             widget, | ||||
|             save_button, | ||||
|             title_entry, | ||||
|             title_row, | ||||
|         }); | ||||
| 
 | ||||
|         // Connect signals and callbacks
 | ||||
|  | @ -46,13 +46,13 @@ impl Screen<Option<WorkPart>, WorkPart> for WorkPartEditor { | |||
|         this.save_button | ||||
|             .connect_clicked(clone!(@weak this =>  move |_| { | ||||
|                 let section = WorkPart { | ||||
|                     title: this.title_entry.text().to_string(), | ||||
|                     title: this.title_row.text().to_string(), | ||||
|                 }; | ||||
| 
 | ||||
|                 this.handle.pop(Some(section)); | ||||
|             })); | ||||
| 
 | ||||
|         this.title_entry | ||||
|         this.title_row | ||||
|             .connect_changed(clone!(@weak this =>  move |_| this.validate())); | ||||
| 
 | ||||
|         this.validate(); | ||||
|  | @ -65,7 +65,7 @@ impl WorkPartEditor { | |||
|     /// Validate inputs and enable/disable saving.
 | ||||
|     fn validate(&self) { | ||||
|         self.save_button | ||||
|             .set_sensitive(!self.title_entry.text().is_empty()); | ||||
|             .set_sensitive(!self.title_row.text().is_empty()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -18,7 +18,7 @@ pub struct MediumEditor { | |||
|     session: Arc<ImportSession>, | ||||
|     widget: gtk::Stack, | ||||
|     done_button: gtk::Button, | ||||
|     name_entry: gtk::Entry, | ||||
|     name_row: adw::EntryRow, | ||||
|     status_page: adw::StatusPage, | ||||
|     track_set_list: Rc<List>, | ||||
|     track_sets: RefCell<Vec<TrackSetData>>, | ||||
|  | @ -37,7 +37,7 @@ impl Screen<(Arc<ImportSession>, Option<Medium>), Medium> for MediumEditor { | |||
|         get_widget!(builder, gtk::Stack, widget); | ||||
|         get_widget!(builder, gtk::Button, back_button); | ||||
|         get_widget!(builder, gtk::Button, done_button); | ||||
|         get_widget!(builder, gtk::Entry, name_entry); | ||||
|         get_widget!(builder, adw::EntryRow, name_row); | ||||
|         get_widget!(builder, gtk::Button, add_button); | ||||
|         get_widget!(builder, gtk::Frame, frame); | ||||
|         get_widget!(builder, adw::StatusPage, status_page); | ||||
|  | @ -52,7 +52,7 @@ impl Screen<(Arc<ImportSession>, Option<Medium>), Medium> for MediumEditor { | |||
|             session, | ||||
|             widget, | ||||
|             done_button, | ||||
|             name_entry, | ||||
|             name_row, | ||||
|             status_page, | ||||
|             track_set_list: list, | ||||
|             track_sets: RefCell::new(Vec::new()), | ||||
|  | @ -78,7 +78,7 @@ impl Screen<(Arc<ImportSession>, Option<Medium>), Medium> for MediumEditor { | |||
|                 }); | ||||
|             })); | ||||
| 
 | ||||
|         this.name_entry | ||||
|         this.name_row | ||||
|             .connect_changed(clone!(@weak this =>  move |_| this.validate())); | ||||
| 
 | ||||
|         add_button.connect_clicked(clone!(@weak this =>  move |_| { | ||||
|  | @ -137,7 +137,7 @@ impl Screen<(Arc<ImportSession>, Option<Medium>), Medium> for MediumEditor { | |||
|         // Initialize, if necessary.
 | ||||
| 
 | ||||
|         if let Some(medium) = medium { | ||||
|             this.name_entry.set_text(&medium.name); | ||||
|             this.name_row.set_text(&medium.name); | ||||
| 
 | ||||
|             let mut track_sets: Vec<TrackSetData> = Vec::new(); | ||||
| 
 | ||||
|  | @ -175,7 +175,7 @@ impl MediumEditor { | |||
|     /// Validate inputs and enable/disable saving.
 | ||||
|     fn validate(&self) { | ||||
|         self.done_button.set_sensitive( | ||||
|             !self.name_entry.text().is_empty() && !self.track_sets.borrow().is_empty(), | ||||
|             !self.name_row.text().is_empty() && !self.track_sets.borrow().is_empty(), | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|  | @ -200,7 +200,7 @@ impl MediumEditor { | |||
| 
 | ||||
|         let medium = Medium::new( | ||||
|             generate_id(), | ||||
|             self.name_entry.text().to_string(), | ||||
|             self.name_row.text().to_string(), | ||||
|             Some(self.session.source_id().to_owned()), | ||||
|             tracks, | ||||
|         ); | ||||
|  |  | |||
|  | @ -1,41 +0,0 @@ | |||
| use adw::{prelude::*, builders::ActionRowBuilder}; | ||||
| use gtk::builders::EntryBuilder; | ||||
| 
 | ||||
| /// A list box row with an entry.
 | ||||
| pub struct EntryRow { | ||||
|     /// The actual GTK widget.
 | ||||
|     pub widget: adw::ActionRow, | ||||
| 
 | ||||
|     /// The managed entry.
 | ||||
|     pub entry: gtk::Entry, | ||||
| } | ||||
| 
 | ||||
| impl EntryRow { | ||||
|     /// Create a new entry row.
 | ||||
|     pub fn new(title: &str) -> Self { | ||||
|         let entry = EntryBuilder::new() | ||||
|             .hexpand(true) | ||||
|             .valign(gtk::Align::Center) | ||||
|             .build(); | ||||
| 
 | ||||
|         let widget = ActionRowBuilder::new() | ||||
|             .focusable(false) | ||||
|             .activatable_widget(&entry) | ||||
|             .title(title) | ||||
|             .build(); | ||||
| 
 | ||||
|         widget.add_suffix(&entry); | ||||
| 
 | ||||
|         Self { widget, entry } | ||||
|     } | ||||
| 
 | ||||
|     /// Set the text of the entry.
 | ||||
|     pub fn set_text(&self, text: &str) { | ||||
|         self.entry.set_text(text); | ||||
|     } | ||||
| 
 | ||||
|     /// Get the text that was entered by the user.
 | ||||
|     pub fn get_text(&self) -> String { | ||||
|         self.entry.text().to_string() | ||||
|     } | ||||
| } | ||||
|  | @ -6,9 +6,6 @@ pub use button_row::*; | |||
| pub mod editor; | ||||
| pub use editor::*; | ||||
| 
 | ||||
| pub mod entry_row; | ||||
| pub use entry_row::*; | ||||
| 
 | ||||
| pub mod list; | ||||
| pub use list::*; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue