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
|
||||
menu-settings = Settings...
|
||||
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,
|
||||
SearchActivate,
|
||||
SelectAll,
|
||||
SetSort(HeadingOptions, bool),
|
||||
Settings,
|
||||
TabClose,
|
||||
TabNew,
|
||||
|
|
@ -166,6 +167,9 @@ impl Action {
|
|||
Action::RestoreFromTrash => Message::RestoreFromTrash(entity_opt),
|
||||
Action::SearchActivate => Message::SearchActivate,
|
||||
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::TabClose => Message::TabClose(entity_opt),
|
||||
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>,
|
||||
key_binds: &HashMap<KeyBind, Action>,
|
||||
) -> 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![
|
||||
menu::Tree::with_children(
|
||||
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_width(ItemWidth::Uniform(240))
|
||||
|
|
|
|||
|
|
@ -797,6 +797,7 @@ pub enum Message {
|
|||
MiddleClick(usize),
|
||||
Scroll(Viewport),
|
||||
SelectAll,
|
||||
SetSort(HeadingOptions, bool),
|
||||
Thumbnail(PathBuf, ItemThumbnail),
|
||||
ToggleFoldersFirst,
|
||||
ToggleShowHidden,
|
||||
|
|
@ -2017,6 +2018,10 @@ impl Tab {
|
|||
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) => {
|
||||
if let Some(ref mut items) = self.items_opt {
|
||||
for item in items.iter_mut() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue