diff --git a/src/main.rs b/src/main.rs index e2cf6c1..b120a03 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,6 +28,7 @@ mod color; mod value; mod mode; mod ui_model; +mod plug_manager; #[macro_use] mod ui; mod nvim; diff --git a/src/plug_manager/mod.rs b/src/plug_manager/mod.rs new file mode 100644 index 0000000..8f153c6 --- /dev/null +++ b/src/plug_manager/mod.rs @@ -0,0 +1,3 @@ +mod ui; + +pub use self::ui::Ui; diff --git a/src/plug_manager/ui.rs b/src/plug_manager/ui.rs new file mode 100644 index 0000000..9159fc9 --- /dev/null +++ b/src/plug_manager/ui.rs @@ -0,0 +1,46 @@ +use gtk; +use gtk::prelude::*; + +pub struct Ui {} + +impl Ui { + pub fn new() -> Self { + Ui {} + } + + pub fn show>(&self, parent: &T) { + const OK_ID: i32 = 0; + + let dlg = gtk::Dialog::new_with_buttons( + Some("Plug"), + Some(parent), + gtk::DialogFlags::empty(), + &[("Ok", OK_ID)], + ); + + let content = dlg.get_content_area(); + let tabs = gtk::Notebook::new(); + + let get_plugins = gtk::Box::new(gtk::Orientation::Vertical, 0); + let get_plugins_lbl = gtk::Label::new("Get Plugins"); + tabs.append_page(&get_plugins, Some(&get_plugins_lbl)); + + let plugins = gtk::Box::new(gtk::Orientation::Vertical, 0); + let plugins_lbl = gtk::Label::new("Plugins"); + tabs.append_page(&plugins, Some(&plugins_lbl)); + + tabs.set_tab_pos(gtk::PositionType::Left); + content.add(&tabs); + content.show_all(); + + + match dlg.run() { + OK_ID => { + println!("TODO:"); + } + _ => (), + } + + dlg.destroy(); + } +} diff --git a/src/ui.rs b/src/ui.rs index 64c0906..e20a852 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -14,6 +14,7 @@ use settings::Settings; use shell::{Shell, ShellOptions}; use shell_dlg; use project::Projects; +use plug_manager; pub struct Ui { initialized: bool, @@ -30,8 +31,8 @@ pub struct Components { impl Components { fn new() -> Components { - let save_image = Image::new_from_icon_name("document-open", - gtk_sys::GTK_ICON_SIZE_SMALL_TOOLBAR as i32); + let save_image = + Image::new_from_icon_name("document-open", gtk_sys::GTK_ICON_SIZE_SMALL_TOOLBAR as i32); Components { open_btn: ToolButton::new(Some(&save_image), "Open"), @@ -96,24 +97,41 @@ impl Ui { let projects = self.projects.clone(); header_bar.pack_start(&comps.open_btn); - comps - .open_btn - .connect_clicked(move |_| projects.borrow_mut().show()); + comps.open_btn.connect_clicked( + move |_| projects.borrow_mut().show(), + ); - let save_image = Image::new_from_icon_name("document-save", - gtk_sys::GTK_ICON_SIZE_SMALL_TOOLBAR as i32); + let save_image = Image::new_from_icon_name( + "document-save", + gtk_sys::GTK_ICON_SIZE_SMALL_TOOLBAR as i32, + ); let save_btn = ToolButton::new(Some(&save_image), "Save"); let shell = self.shell.clone(); save_btn.connect_clicked(move |_| shell.borrow_mut().edit_save_all()); header_bar.pack_start(&save_btn); - let paste_image = Image::new_from_icon_name("edit-paste", - gtk_sys::GTK_ICON_SIZE_SMALL_TOOLBAR as i32); + let paste_image = Image::new_from_icon_name( + "edit-paste", + gtk_sys::GTK_ICON_SIZE_SMALL_TOOLBAR as i32, + ); let paste_btn = ToolButton::new(Some(&paste_image), "Paste"); let shell = self.shell.clone(); paste_btn.connect_clicked(move |_| shell.borrow_mut().edit_paste()); header_bar.pack_start(&paste_btn); + + let plug_image = Image::new_from_icon_name( + "system-software-install", + gtk_sys::GTK_ICON_SIZE_SMALL_TOOLBAR as i32, + ); + let plug_btn = ToolButton::new(Some(&plug_image), "Plug"); + + let comps_ref = self.comps.clone(); + plug_btn.connect_clicked(move |_| { + plug_manager::Ui::new().show(comps_ref.borrow().window.as_ref().unwrap()) + }); + header_bar.pack_start(&plug_btn); + header_bar.set_show_close_button(true); window.set_titlebar(Some(&header_bar)); @@ -134,7 +152,7 @@ impl Ui { shell.grab_focus(); let comps_ref = self.comps.clone(); - shell.set_detach_cb(Some(move || { + shell.set_detach_cb(Some(move || { let comps_ref = comps_ref.clone(); gtk::idle_add(move || { comps_ref.borrow().close_window(); @@ -178,13 +196,13 @@ fn gtk_delete(comps: &UiMutex, shell: &RefCell) -> Inhibit { } Inhibit(if shell_dlg::can_close_window(comps, shell) { - let comps = comps.borrow(); - comps.close_window(); - shell.borrow_mut().detach_ui(); - false - } else { - true - }) + let comps = comps.borrow(); + comps.close_window(); + shell.borrow_mut().detach_ui(); + false + } else { + true + }) } pub struct UiMutex {