Add dialog types

This commit is contained in:
Jeremy Soller 2024-02-15 15:03:01 -07:00
parent 91c4985d42
commit a24983ca7f
No known key found for this signature in database
GPG key ID: D02FD439211AF56F
4 changed files with 244 additions and 211 deletions

View file

@ -23,7 +23,7 @@ use std::{
time::{Duration, Instant},
};
use crate::{config::TabConfig, fl, mime_icon::mime_icon};
use crate::{config::TabConfig, dialog::DialogKind, fl, mime_icon::mime_icon};
const DOUBLE_CLICK_DURATION: Duration = Duration::from_millis(500);
//TODO: configurable
@ -522,7 +522,7 @@ pub struct Tab {
pub context_menu: Option<Point>,
pub items_opt: Option<Vec<Item>>,
pub view: View,
pub dialog: bool,
pub dialog: Option<DialogKind>,
pub edit_location: Option<Location>,
pub history_i: usize,
pub history: Vec<Location>,
@ -537,7 +537,7 @@ impl Tab {
context_menu: None,
items_opt: None,
view: View::List,
dialog: false,
dialog: None,
edit_location: None,
history_i: 0,
history,
@ -572,7 +572,7 @@ impl Tab {
Location::Path(_) => {
if item.path.is_dir() {
cd = Some(Location::Path(item.path.clone()));
} else if !self.dialog {
} else if !self.dialog.is_some() {
let mut command = open_command(&item.path);
match command.spawn() {
Ok(_) => (),
@ -594,7 +594,9 @@ impl Tab {
}
//TODO: prevent triple-click and beyond from opening file?
item.click_time = Some(Instant::now());
} else if modifiers.contains(Modifiers::CTRL) {
} else if modifiers.contains(Modifiers::CTRL)
&& self.dialog.map_or(true, |x| x.multiple())
{
// Holding control allows multiple selection
item.click_time = None;
} else {
@ -646,7 +648,9 @@ impl Tab {
for (i, item) in items.iter_mut().enumerate() {
if i == click_i {
item.selected = true;
} else if modifiers.contains(Modifiers::CTRL) {
} else if modifiers.contains(Modifiers::CTRL)
&& self.dialog.map_or(true, |x| x.multiple())
{
// Holding control allows multiple selection
} else {
item.selected = false;
@ -934,9 +938,7 @@ impl Tab {
widget::text::heading(fl!("modified"))
.width(modified_width)
.into(),
widget::text::heading(fl!("size"))
.width(size_width)
.into(),
widget::text::heading(fl!("size")).width(size_width).into(),
])
.align_items(Alignment::Center)
.padding(space_xxs)
@ -994,7 +996,7 @@ impl Tab {
//TODO: align columns
let button = widget::button(
widget::row::with_children(vec![
if self.dialog {
if self.dialog.is_some() {
widget::icon::icon(item.icon_handle_dialog.clone())
.size(ICON_SIZE_DIALOG)
.into()