| 
									
										
										
										
											2020-09-28 15:02:19 +02:00
										 |  |  | use super::database::*;
 | 
					
						
							|  |  |  | use super::dialogs::*;
 | 
					
						
							| 
									
										
										
										
											2020-09-27 21:58:42 +02:00
										 |  |  | use gio::prelude::*;
 | 
					
						
							| 
									
										
										
										
											2020-09-28 15:02:19 +02:00
										 |  |  | use glib::clone;
 | 
					
						
							| 
									
										
										
										
											2020-09-27 21:58:42 +02:00
										 |  |  | use gtk::prelude::*;
 | 
					
						
							|  |  |  | use gtk_macros::{action, get_widget};
 | 
					
						
							| 
									
										
										
										
											2020-09-28 15:02:19 +02:00
										 |  |  | use std::cell::RefCell;
 | 
					
						
							|  |  |  | use std::rc::Rc;
 | 
					
						
							| 
									
										
										
										
											2020-09-27 21:58:42 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | pub struct Window {
 | 
					
						
							|  |  |  |     window: gtk::ApplicationWindow,
 | 
					
						
							| 
									
										
										
										
											2020-09-28 15:02:19 +02:00
										 |  |  |     db: Rc<Database>,
 | 
					
						
							| 
									
										
										
										
											2020-09-27 21:58:42 +02:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | impl Window {
 | 
					
						
							| 
									
										
										
										
											2020-09-28 15:02:19 +02:00
										 |  |  |     pub fn new(app: >k::Application) -> Rc<Self> {
 | 
					
						
							| 
									
										
										
										
											2020-09-27 21:58:42 +02:00
										 |  |  |         let builder = gtk::Builder::from_resource("/de/johrpan/musicus_editor/ui/window.ui");
 | 
					
						
							|  |  |  |         get_widget!(builder, gtk::ApplicationWindow, window);
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-28 15:02:19 +02:00
										 |  |  |         let db = Rc::new(Database::new("test.sqlite"));
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         let result = Rc::new(Window {
 | 
					
						
							|  |  |  |             window: window,
 | 
					
						
							|  |  |  |             db: db,
 | 
					
						
							| 
									
										
										
										
											2020-09-27 21:58:42 +02:00
										 |  |  |         });
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-28 15:02:19 +02:00
										 |  |  |         action!(
 | 
					
						
							|  |  |  |             result.window,
 | 
					
						
							|  |  |  |             "add-person",
 | 
					
						
							|  |  |  |             clone!(@strong result => move |_, _| {
 | 
					
						
							|  |  |  |                 PersonEditor::new(result.db.clone(), &result.window, None, |person| {
 | 
					
						
							|  |  |  |                     println!("{:?}", person);
 | 
					
						
							|  |  |  |                 }).show();
 | 
					
						
							|  |  |  |             })
 | 
					
						
							|  |  |  |         );
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-28 15:08:24 +02:00
										 |  |  |         action!(
 | 
					
						
							|  |  |  |             result.window,
 | 
					
						
							|  |  |  |             "add-instrument",
 | 
					
						
							|  |  |  |             clone!(@strong result => move |_, _| {
 | 
					
						
							|  |  |  |                 InstrumentEditor::new(result.db.clone(), &result.window, None, |instrument| {
 | 
					
						
							|  |  |  |                     println!("{:?}", instrument);
 | 
					
						
							|  |  |  |                 }).show();
 | 
					
						
							|  |  |  |             })
 | 
					
						
							|  |  |  |         );
 | 
					
						
							| 
									
										
										
										
											2020-09-27 21:58:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-28 15:02:19 +02:00
										 |  |  |         action!(result.window, "add-work", |_, _| {
 | 
					
						
							| 
									
										
										
										
											2020-09-27 21:58:42 +02:00
										 |  |  |             println!("TODO: Add work.");
 | 
					
						
							|  |  |  |         });
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-28 15:14:05 +02:00
										 |  |  |         action!(
 | 
					
						
							|  |  |  |             result.window,
 | 
					
						
							|  |  |  |             "add-ensemble",
 | 
					
						
							|  |  |  |             clone!(@strong result => move |_, _| {
 | 
					
						
							|  |  |  |                 EnsembleEditor::new(result.db.clone(), &result.window, None, |ensemble| {
 | 
					
						
							|  |  |  |                     println!("{:?}", ensemble);
 | 
					
						
							|  |  |  |                 }).show();
 | 
					
						
							|  |  |  |             })
 | 
					
						
							|  |  |  |         );
 | 
					
						
							| 
									
										
										
										
											2020-09-27 21:58:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-28 15:02:19 +02:00
										 |  |  |         action!(result.window, "add-recording", |_, _| {
 | 
					
						
							| 
									
										
										
										
											2020-09-27 21:58:42 +02:00
										 |  |  |             println!("TODO: Add recording.");
 | 
					
						
							|  |  |  |         });
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-28 15:02:19 +02:00
										 |  |  |         result.window.set_application(Some(app));
 | 
					
						
							| 
									
										
										
										
											2020-09-27 21:58:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-28 15:02:19 +02:00
										 |  |  |         result
 | 
					
						
							| 
									
										
										
										
											2020-09-27 21:58:42 +02:00
										 |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     pub fn present(&self) {
 | 
					
						
							|  |  |  |         self.window.present();
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | }
 |