Use sliders for icon size

This commit is contained in:
Jeremy Soller 2024-02-29 20:18:34 -07:00
parent f8521d5b0d
commit 4266bb9eb3
No known key found for this signature in database
GPG key ID: D02FD439211AF56F
4 changed files with 63 additions and 68 deletions

14
Cargo.lock generated
View file

@ -2853,9 +2853,9 @@ checksum = "029d73f573d8e8d63e6d5020011d3255b28c3ba85d6cf870a07184ed23de9284"
[[package]] [[package]]
name = "indexmap" name = "indexmap"
version = "2.2.4" version = "2.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "967d6dd42f16dbf0eb8040cb9e477933562684d3918f7d253f2ff9087fb3e7a3" checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4"
dependencies = [ dependencies = [
"equivalent", "equivalent",
"hashbrown", "hashbrown",
@ -5397,7 +5397,7 @@ dependencies = [
"serde", "serde",
"serde_spanned", "serde_spanned",
"toml_datetime", "toml_datetime",
"winnow 0.6.3", "winnow 0.6.5",
] ]
[[package]] [[package]]
@ -6504,9 +6504,9 @@ dependencies = [
[[package]] [[package]]
name = "winnow" name = "winnow"
version = "0.6.3" version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44e19b97e00a4d3db3cdb9b53c8c5f87151b5689b82cc86c2848cbdcccb2689b" checksum = "dffa400e67ed5a4dd237983829e66475f0a4a26938c4b04c21baede6262215b8"
dependencies = [ dependencies = [
"memchr", "memchr",
] ]
@ -6679,9 +6679,9 @@ dependencies = [
[[package]] [[package]]
name = "zbus_names" name = "zbus_names"
version = "2.6.0" version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9" checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d"
dependencies = [ dependencies = [
"serde", "serde",
"static_assertions", "static_assertions",

View file

@ -57,11 +57,9 @@ properties = Properties
## Settings ## Settings
settings = Settings settings = Settings
settings-tab = Tab settings-tab = Tab
settings-hidden = Hidden files
settings-show-hidden = Show hidden files settings-show-hidden = Show hidden files
icon-size-list = Icon size (list) icon-size-list = Icon size (list)
icon-size-grid = Icon size (grid) icon-size-grid = Icon size (grid)
icon-zoom = Zoom
### Appearance ### Appearance
appearance = Appearance appearance = Appearance

View file

@ -32,7 +32,7 @@ rename-folder = フォルダ名を変更
# Replace Dialog # Replace Dialog
replace = 置き換える replace = 置き換える
replace-title = {$filename}はすでにこの場所に存在します。 replace-title = {$filename}はすでにこの場所に存在します。
replace-warning = 保存するファイルで置き換えますか?置き換えると、内容を上書きます。 replace-warning = 保存するファイルで置き換えますか?置き換えると、内容を上書きます。
# List view # List view
@ -57,11 +57,9 @@ properties = プロパティ
## Settings ## Settings
settings = 設定 settings = 設定
settings-tab = タブ settings-tab = タブ
settings-hidden = 隠しファイル
settings-show-hidden = 隠しファイルを表示 settings-show-hidden = 隠しファイルを表示
icon-size-list = アイコンサイズ(リスト) icon-size-list = アイコンサイズ(リスト)
icon-size-grid = アイコンサイズ(グリッド) icon-size-grid = アイコンサイズ(グリッド)
icon-zoom = ズーム
### Appearance ### Appearance
appearance = 外観 appearance = 外観

View file

@ -21,6 +21,7 @@ use std::{
any::TypeId, any::TypeId,
collections::{BTreeMap, HashMap, HashSet, VecDeque}, collections::{BTreeMap, HashMap, HashSet, VecDeque},
env, fs, env, fs,
num::NonZeroU16,
path::PathBuf, path::PathBuf,
process, time, process, time,
}; };
@ -444,17 +445,15 @@ impl App {
} }
fn settings(&self) -> Element<Message> { fn settings(&self) -> Element<Message> {
let app_theme_selected = match self.config.app_theme {
AppTheme::Dark => 1,
AppTheme::Light => 2,
AppTheme::System => 0,
};
let hidden_selected = self.config.tab.show_hidden;
// TODO: Should dialog be updated here too? // TODO: Should dialog be updated here too?
let IconSizes { list, grid, .. } = self.config.tab.icon_sizes;
widget::settings::view_column(vec![ widget::settings::view_column(vec![
widget::settings::view_section(fl!("appearance")) widget::settings::view_section(fl!("appearance"))
.add( .add({
let app_theme_selected = match self.config.app_theme {
AppTheme::Dark => 1,
AppTheme::Light => 2,
AppTheme::System => 0,
};
widget::settings::item::builder(fl!("theme")).control(widget::dropdown( widget::settings::item::builder(fl!("theme")).control(widget::dropdown(
&self.app_themes, &self.app_themes,
Some(app_theme_selected), Some(app_theme_selected),
@ -465,58 +464,58 @@ impl App {
_ => AppTheme::System, _ => AppTheme::System,
}) })
}, },
)), ))
) })
.add( .add({
widget::settings::item::builder(fl!("icon-size-list")).control( let tab_config = self.config.tab.clone();
widget::text_input(fl!("icon-zoom"), list.to_string()).on_input(|s| { let list: u16 = tab_config.icon_sizes.list.into();
s.parse() widget::settings::item::builder(fl!("icon-size-list"))
.map(|list_next| { .description(format!("{}%", list))
Message::TabConfig(TabConfig { .control(
icon_sizes: IconSizes { widget::slider(100..=500, list, move |list| {
list: list_next, Message::TabConfig(TabConfig {
..self.config.tab.icon_sizes icon_sizes: IconSizes {
}, list: NonZeroU16::new(list).unwrap(),
..self.config.tab ..tab_config.icon_sizes
}) },
..tab_config
}) })
.unwrap_or_else(|_| Message::TabConfig(self.config.tab)) })
}), .width(Length::Fixed(100.0)),
), )
) })
.add( .add({
widget::settings::item::builder(fl!("icon-size-grid")).control( let tab_config = self.config.tab.clone();
widget::text_input(fl!("icon-zoom"), grid.to_string()).on_input(|s| { let grid: u16 = tab_config.icon_sizes.grid.into();
s.parse() widget::settings::item::builder(fl!("icon-size-grid"))
.map(|grid_next| { .description(format!("{}%", grid))
Message::TabConfig(TabConfig { .control(
icon_sizes: IconSizes { widget::slider(100..=500, grid, move |grid| {
grid: grid_next, Message::TabConfig(TabConfig {
..self.config.tab.icon_sizes icon_sizes: IconSizes {
}, grid: NonZeroU16::new(grid).unwrap(),
..self.config.tab ..tab_config.icon_sizes
}) },
..tab_config
}) })
.unwrap_or_else(|_| Message::TabConfig(self.config.tab)) })
}), .width(Length::Fixed(100.0)),
), )
) })
.into(), .into(),
widget::settings::view_section(fl!("settings-tab")) widget::settings::view_section(fl!("settings-tab"))
.add( .add({
widget::settings::item::builder(fl!("settings-hidden")).control( let tab_config = self.config.tab.clone();
widget::checkbox( widget::settings::item::builder(fl!("settings-show-hidden")).toggler(
fl!("settings-show-hidden"), tab_config.show_hidden,
hidden_selected, move |show_hidden| {
|show_hidden| { Message::TabConfig(TabConfig {
Message::TabConfig(TabConfig { show_hidden,
show_hidden, ..tab_config
..self.config.tab })
}) },
}, )
), })
),
)
.into(), .into(),
]) ])
.into() .into()