Add sort menu, fixes #192
This commit is contained in:
parent
24a44c3b52
commit
76cf9865f0
4 changed files with 59 additions and 0 deletions
|
|
@ -202,3 +202,12 @@ show-hidden-files = Show hidden files
|
||||||
list-directories-first = List directories first
|
list-directories-first = List directories first
|
||||||
menu-settings = Settings...
|
menu-settings = Settings...
|
||||||
menu-about = About COSMIC Files...
|
menu-about = About COSMIC Files...
|
||||||
|
|
||||||
|
## Sort
|
||||||
|
sort = Sort
|
||||||
|
sort-a-z = A-Z
|
||||||
|
sort-z-a = Z-A
|
||||||
|
sort-newest-first = Newest first
|
||||||
|
sort-oldest-first = Oldest first
|
||||||
|
sort-smallest-to-largest = Smallest to largest
|
||||||
|
sort-largest-to-smallest = Largest to smallest
|
||||||
|
|
@ -115,6 +115,7 @@ pub enum Action {
|
||||||
RestoreFromTrash,
|
RestoreFromTrash,
|
||||||
SearchActivate,
|
SearchActivate,
|
||||||
SelectAll,
|
SelectAll,
|
||||||
|
SetSort(HeadingOptions, bool),
|
||||||
Settings,
|
Settings,
|
||||||
TabClose,
|
TabClose,
|
||||||
TabNew,
|
TabNew,
|
||||||
|
|
@ -166,6 +167,9 @@ impl Action {
|
||||||
Action::RestoreFromTrash => Message::RestoreFromTrash(entity_opt),
|
Action::RestoreFromTrash => Message::RestoreFromTrash(entity_opt),
|
||||||
Action::SearchActivate => Message::SearchActivate,
|
Action::SearchActivate => Message::SearchActivate,
|
||||||
Action::SelectAll => Message::TabMessage(entity_opt, tab::Message::SelectAll),
|
Action::SelectAll => Message::TabMessage(entity_opt, tab::Message::SelectAll),
|
||||||
|
Action::SetSort(sort, dir) => {
|
||||||
|
Message::TabMessage(entity_opt, tab::Message::SetSort(*sort, *dir))
|
||||||
|
}
|
||||||
Action::Settings => Message::ToggleContextPage(ContextPage::Settings),
|
Action::Settings => Message::ToggleContextPage(ContextPage::Settings),
|
||||||
Action::TabClose => Message::TabClose(entity_opt),
|
Action::TabClose => Message::TabClose(entity_opt),
|
||||||
Action::TabNew => Message::TabNew,
|
Action::TabNew => Message::TabNew,
|
||||||
|
|
|
||||||
41
src/menu.rs
41
src/menu.rs
|
|
@ -244,6 +244,16 @@ pub fn menu_bar<'a>(
|
||||||
tab_opt: Option<&Tab>,
|
tab_opt: Option<&Tab>,
|
||||||
key_binds: &HashMap<KeyBind, Action>,
|
key_binds: &HashMap<KeyBind, Action>,
|
||||||
) -> Element<'a, Message> {
|
) -> Element<'a, Message> {
|
||||||
|
let sort_item = |label, sort, dir| {
|
||||||
|
menu::Item::CheckBox(
|
||||||
|
label,
|
||||||
|
tab_opt.map_or(false, |tab| {
|
||||||
|
tab.config.sort_name == sort && tab.config.sort_direction == dir
|
||||||
|
}),
|
||||||
|
Action::SetSort(sort, dir),
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
MenuBar::new(vec![
|
MenuBar::new(vec![
|
||||||
menu::Tree::with_children(
|
menu::Tree::with_children(
|
||||||
menu::root(fl!("file")),
|
menu::root(fl!("file")),
|
||||||
|
|
@ -321,6 +331,37 @@ pub fn menu_bar<'a>(
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
menu::Tree::with_children(
|
||||||
|
menu::root(fl!("sort")),
|
||||||
|
menu::items(
|
||||||
|
key_binds,
|
||||||
|
vec![
|
||||||
|
sort_item(fl!("sort-a-z"), tab::HeadingOptions::Name, true),
|
||||||
|
sort_item(fl!("sort-z-a"), tab::HeadingOptions::Name, false),
|
||||||
|
sort_item(
|
||||||
|
fl!("sort-newest-first"),
|
||||||
|
tab::HeadingOptions::Modified,
|
||||||
|
false,
|
||||||
|
),
|
||||||
|
sort_item(
|
||||||
|
fl!("sort-oldest-first"),
|
||||||
|
tab::HeadingOptions::Modified,
|
||||||
|
true,
|
||||||
|
),
|
||||||
|
sort_item(
|
||||||
|
fl!("sort-smallest-to-largest"),
|
||||||
|
tab::HeadingOptions::Size,
|
||||||
|
true,
|
||||||
|
),
|
||||||
|
sort_item(
|
||||||
|
fl!("sort-largest-to-smallest"),
|
||||||
|
tab::HeadingOptions::Size,
|
||||||
|
false,
|
||||||
|
),
|
||||||
|
//TODO: sort by type
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
])
|
])
|
||||||
.item_height(ItemHeight::Dynamic(40))
|
.item_height(ItemHeight::Dynamic(40))
|
||||||
.item_width(ItemWidth::Uniform(240))
|
.item_width(ItemWidth::Uniform(240))
|
||||||
|
|
|
||||||
|
|
@ -797,6 +797,7 @@ pub enum Message {
|
||||||
MiddleClick(usize),
|
MiddleClick(usize),
|
||||||
Scroll(Viewport),
|
Scroll(Viewport),
|
||||||
SelectAll,
|
SelectAll,
|
||||||
|
SetSort(HeadingOptions, bool),
|
||||||
Thumbnail(PathBuf, ItemThumbnail),
|
Thumbnail(PathBuf, ItemThumbnail),
|
||||||
ToggleFoldersFirst,
|
ToggleFoldersFirst,
|
||||||
ToggleShowHidden,
|
ToggleShowHidden,
|
||||||
|
|
@ -2017,6 +2018,10 @@ impl Tab {
|
||||||
commands.push(Command::Iced(widget::button::focus(widget::Id::unique())));
|
commands.push(Command::Iced(widget::button::focus(widget::Id::unique())));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Message::SetSort(heading_option, dir) => {
|
||||||
|
self.config.sort_name = heading_option;
|
||||||
|
self.config.sort_direction = dir;
|
||||||
|
}
|
||||||
Message::Thumbnail(path, thumbnail) => {
|
Message::Thumbnail(path, thumbnail) => {
|
||||||
if let Some(ref mut items) = self.items_opt {
|
if let Some(ref mut items) = self.items_opt {
|
||||||
for item in items.iter_mut() {
|
for item in items.iter_mut() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue