Add base code for add plugin dialog

This commit is contained in:
daa 2017-10-29 23:45:05 +03:00
parent 4aec520746
commit 0a7edbc602
3 changed files with 72 additions and 13 deletions

View File

@ -2,6 +2,7 @@ mod ui;
mod vim_plug;
mod store;
mod manager;
mod plugin_settings_dlg;
pub use self::ui::Ui;
pub use self::manager::{Manager, PlugManagerConfigSource};

View File

@ -0,0 +1,44 @@
use gtk;
use gtk::prelude::*;
use super::store;
pub struct Builder<'a> {
title: &'a str
}
impl <'a> Builder <'a> {
pub fn new(title: &'a str) -> Self {
Builder { title }
}
pub fn show<F: IsA<gtk::Window>>(&self, parent: &F) -> Option<store::PlugInfo> {
let dlg = gtk::Dialog::new_with_buttons(
Some(self.title),
Some(parent),
gtk::DIALOG_USE_HEADER_BAR | gtk::DIALOG_DESTROY_WITH_PARENT,
&[("Cancel", gtk::ResponseType::Cancel.into()),
("Ok", gtk::ResponseType::Accept.into())],
);
let content = dlg.get_content_area();
let grid = gtk::Grid::new();
let label = gtk::Label::new("Path:");
let entry = gtk::Entry::new();
grid.attach(&label, 0, 0, 1, 1);
grid.attach(&entry, 1, 0, 1, 1);
content.add(&grid);
content.show_all();
if dlg.run() == gtk::ResponseType::Ok.into() {
}
dlg.destroy();
None
}
}

View File

@ -10,6 +10,7 @@ use gtk::prelude::*;
use super::manager;
use super::store::{Store, PlugInfo};
use super::plugin_settings_dlg;
pub struct Ui<'a> {
manager: &'a Arc<UiMutex<manager::Manager>>,
@ -23,13 +24,11 @@ impl<'a> Ui<'a> {
}
pub fn show<T: IsA<gtk::Window>>(&mut 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)],
gtk::DIALOG_DESTROY_WITH_PARENT,
&[("Ok", gtk::ResponseType::Ok.into())],
);
dlg.set_default_size(800, 600);
@ -37,6 +36,14 @@ impl<'a> Ui<'a> {
let header_bar = gtk::HeaderBar::new();
let add_plug_btn = gtk::Button::new_with_label("Add..");
header_bar.pack_end(&add_plug_btn);
let manager_ref = self.manager.clone();
add_plug_btn.connect_clicked(clone!(dlg => move |_| {
add_plugin(&dlg, &manager_ref);
}));
let enable_swc = gtk::Switch::new();
enable_swc.set_valign(gtk::Align::Center);
@ -49,7 +56,11 @@ impl<'a> Ui<'a> {
dlg.set_titlebar(&header_bar);
let pages = SettingsPages::new();
let pages = SettingsPages::new(move |row_name| if row_name == "plugins" {
add_plug_btn.show();
} else {
add_plug_btn.hide();
});
match self.manager.borrow_mut().plug_manage_state {
manager::PlugManageState::Unknown => {
@ -91,13 +102,10 @@ impl<'a> Ui<'a> {
content.show_all();
match dlg.run() {
OK_ID => {
let mut manager = self.manager.borrow_mut();
manager.clear_removed();
manager.save();
}
_ => (),
if dlg.run() == gtk::ResponseType::Ok.into() {
let mut manager = self.manager.borrow_mut();
manager.clear_removed();
manager.save();
}
dlg.destroy();
@ -172,6 +180,10 @@ impl<'a> Ui<'a> {
}
}
fn add_plugin<F: IsA<gtk::Window>>(parent: &F, manager: &Arc<UiMutex<manager::Manager>>) {
plugin_settings_dlg::Builder::new("Add plugin").show(parent);
}
fn create_plug_label(plug_info: &PlugInfo) -> gtk::Box {
let label_box = gtk::Box::new(gtk::Orientation::Vertical, 5);
@ -202,10 +214,11 @@ struct SettingsPages {
stack: gtk::Stack,
content: gtk::Box,
rows: Rc<RefCell<Vec<(gtk::ListBoxRow, &'static str)>>>,
row_selected: Box<FnMut(&str)>,
}
impl SettingsPages {
pub fn new() -> Self {
pub fn new<F: FnMut(&str) + 'static>(row_selected: F) -> Self {
let content = gtk::Box::new(gtk::Orientation::Horizontal, 5);
let categories = gtk::ListBox::new();
categories.get_style_context().map(|c| c.add_class("view"));
@ -233,6 +246,7 @@ impl SettingsPages {
stack,
content,
rows,
row_selected: Box::new(row_selected),
}
}