Close app if no config is selected

This commit is contained in:
Piyush मिश्रः 2022-01-24 23:23:09 +05:30
parent 729c8082c2
commit 5e602d1540
2 changed files with 26 additions and 18 deletions

View File

@ -160,11 +160,15 @@ impl ConfigFile {
};
let default_config = (&*globals::CONFIG_NAME.read().unwrap()).to_string();
let config_name =
if (map.len() > 1 || !map.contains_key(&default_config)) && map.len() != 0 {
ConfigPicker::new(map.keys().map(|a| a.to_owned()).collect())
.selected()
.unwrap_or(default_config)
let config_name = if (map.len() > 1 || !map.contains_key(&default_config))
&& map.len() != 0
{
let picked = ConfigPicker::new(map.keys().map(|a| a.to_owned()).collect()).selected;
let picked = picked.borrow();
match &*picked {
Some(v) => v.to_owned(),
None => std::process::exit(0),
}
} else {
default_config
};

View File

@ -12,6 +12,8 @@
along with Post Maker. If not, see <https://www.gnu.org/licenses/>
*/
use std::{cell::RefCell, rc::Rc};
use crate::globals;
use fltk::{
app,
@ -26,9 +28,9 @@ use fltk::{
pub(crate) struct ConfigPicker {
pub(crate) win: Window,
pub(crate) selected: Rc<RefCell<Option<String>>>,
pub(crate) browse: Browser,
pub(crate) apply_btn: Button,
pub(crate) configs: Vec<String>,
}
impl ConfigPicker {
@ -72,9 +74,9 @@ impl ConfigPicker {
let mut config_picker = Self {
win,
selected: Rc::new(RefCell::new(browse.selected_text())),
browse,
apply_btn,
configs,
};
config_picker.event();
@ -90,14 +92,16 @@ impl ConfigPicker {
self.apply_btn.set_callback(move |_| {
win.hide();
});
}
pub(crate) fn selected(&self) -> Option<String> {
let idx = self.browse.value();
if idx == 0 {
None
} else {
self.configs.get(idx as usize - 1).map(|a| a.to_owned())
}
let selected = Rc::clone(&self.selected);
self.browse.set_callback(move |f| {
*selected.borrow_mut() = f.selected_text();
});
let selected = Rc::clone(&self.selected);
self.win.set_callback(move |f| {
*selected.borrow_mut() = None;
f.hide();
});
}
}