display home icons in folder chooser

This commit is contained in:
ochibani 2022-09-29 16:03:42 +02:00
parent 3c0ea6eb37
commit 78d3fb64e5
2 changed files with 29 additions and 2 deletions

View File

@ -1,8 +1,10 @@
extern crate glib;
extern crate ini;
extern crate dirs;
use glib::get_user_data_dir;
use ini::Ini;
use dirs::home_dir;
use std::ops::Add;
use std::path::{Path, PathBuf};
@ -91,3 +93,24 @@ pub fn set(selection: &str, key: &str, value: &str) -> bool {
pub fn set_bool(selection: &str, key: &str, value: bool) -> bool {
set(&selection, &key, if value { "1" } else { "0" })
}
pub fn folder_icon(folder_chooser_name: Option<&str>) -> &str {
let home_folder = dirs::home_dir().unwrap();
if folder_chooser_name == home_folder.as_path().file_name().unwrap().to_str(){
"user-home"
}
else {
match folder_chooser_name {
Some("/") => "drive-harddisk",
Some("Desktop") => "user-desktop",
Some("Documents") => "folder-documents",
Some("Downloads") => "folder-download",
Some("Music") => "folder-music",
Some("Pictures") => "folder-pictures",
Some("Public") => "folder-publicshare",
Some("Templates") => "folder-templates",
Some("Videos") => "folder-videos",
_ => "folder",
}
}
}

View File

@ -73,6 +73,7 @@ pub fn build_ui(application: &Application) {
let delay_spin: SpinButton = builder.object("delay").unwrap();
let filename_entry: Entry = builder.object("filename").unwrap();
let folder_chooser_button: Button = builder.object("folderchooser").unwrap();
let folder_chooser_image: Image = builder.object("folderchooserimage").unwrap();
let folder_chooser_label: Label = builder.object("folderchooserlabel").unwrap();
let follow_mouse_switch: CheckButton = builder.object("followmouseswitch").unwrap();
let format_chooser_combobox: ComboBoxText = builder.object("comboboxtext1").unwrap();
@ -250,14 +251,17 @@ pub fn build_ui(application: &Application) {
let mut folder_chooser = Some(gio::File::for_uri(&config_management::get("default", "folder"))).unwrap();
let mut folder_chooser_name = folder_chooser.basename().unwrap();
folder_chooser_label.set_label(&folder_chooser_name.to_string_lossy());
let mut folder_chooser_icon = config_management::folder_icon(folder_chooser_name.to_str());
folder_chooser_image.set_icon_name(Some(folder_chooser_icon));
// show file chooser dialog
folder_chooser_button.connect_clicked(glib::clone!(@strong folder_chooser_native => move |_| {
folder_chooser_native.connect_response(glib::clone!(@strong folder_chooser_native, @strong folder_chooser_label => move |_, response| {
folder_chooser_native.connect_response(glib::clone!(@strong folder_chooser_native, @strong folder_chooser_label, @strong folder_chooser_image => move |_, response| {
if response == gtk::ResponseType::Accept {
let folder_chooser = folder_chooser_native.file().unwrap();
let folder_chooser_name = folder_chooser.basename().unwrap();
folder_chooser_label.set_label(&folder_chooser_name.to_string_lossy());
// TODO: change folder icon
let mut folder_chooser_icon = config_management::folder_icon(folder_chooser_name.to_str());
folder_chooser_image.set_icon_name(Some(folder_chooser_icon));
};
folder_chooser_native.destroy();
}));