parent
18be235628
commit
04c354584d
3 changed files with 42 additions and 3 deletions
|
|
@ -26,6 +26,7 @@ light = Light
|
||||||
file = File
|
file = File
|
||||||
open-media = Open media...
|
open-media = Open media...
|
||||||
open-recent-media = Open recent media
|
open-recent-media = Open recent media
|
||||||
|
clear-recent = Clear recent list
|
||||||
close-file = Close file
|
close-file = Close file
|
||||||
open-media-folder = Open media folder...
|
open-media-folder = Open media folder...
|
||||||
open-recent-media-folder = Open recent media folder
|
open-recent-media-folder = Open recent media folder
|
||||||
|
|
|
||||||
14
src/main.rs
14
src/main.rs
|
|
@ -158,9 +158,11 @@ fn main() -> Result<(), Box<dyn Error>> {
|
||||||
pub enum Action {
|
pub enum Action {
|
||||||
FileClose,
|
FileClose,
|
||||||
FileOpen,
|
FileOpen,
|
||||||
|
FileClearRecents,
|
||||||
FileOpenRecent(usize),
|
FileOpenRecent(usize),
|
||||||
FolderClose(usize),
|
FolderClose(usize),
|
||||||
FolderOpen,
|
FolderOpen,
|
||||||
|
FolderClearRecents,
|
||||||
FolderOpenRecent(usize),
|
FolderOpenRecent(usize),
|
||||||
Fullscreen,
|
Fullscreen,
|
||||||
PlayPause,
|
PlayPause,
|
||||||
|
|
@ -176,9 +178,11 @@ impl MenuAction for Action {
|
||||||
match self {
|
match self {
|
||||||
Self::FileClose => Message::FileClose,
|
Self::FileClose => Message::FileClose,
|
||||||
Self::FileOpen => Message::FileOpen,
|
Self::FileOpen => Message::FileOpen,
|
||||||
|
Self::FileClearRecents => Message::FileClearRecents,
|
||||||
Self::FileOpenRecent(index) => Message::FileOpenRecent(*index),
|
Self::FileOpenRecent(index) => Message::FileOpenRecent(*index),
|
||||||
Self::FolderClose(index) => Message::FolderClose(*index),
|
Self::FolderClose(index) => Message::FolderClose(*index),
|
||||||
Self::FolderOpen => Message::FolderOpen,
|
Self::FolderOpen => Message::FolderOpen,
|
||||||
|
Self::FolderClearRecents => Message::FolderClearRecents,
|
||||||
Self::FolderOpenRecent(index) => Message::FolderOpenRecent(*index),
|
Self::FolderOpenRecent(index) => Message::FolderOpenRecent(*index),
|
||||||
Self::Fullscreen => Message::Fullscreen,
|
Self::Fullscreen => Message::Fullscreen,
|
||||||
Self::PlayPause => Message::PlayPause,
|
Self::PlayPause => Message::PlayPause,
|
||||||
|
|
@ -256,10 +260,12 @@ pub enum Message {
|
||||||
FileClose,
|
FileClose,
|
||||||
FileLoad(url::Url),
|
FileLoad(url::Url),
|
||||||
FileOpen,
|
FileOpen,
|
||||||
|
FileClearRecents,
|
||||||
FileOpenRecent(usize),
|
FileOpenRecent(usize),
|
||||||
FolderClose(usize),
|
FolderClose(usize),
|
||||||
FolderLoad(PathBuf),
|
FolderLoad(PathBuf),
|
||||||
FolderOpen,
|
FolderOpen,
|
||||||
|
FolderClearRecents,
|
||||||
FolderOpenRecent(usize),
|
FolderOpenRecent(usize),
|
||||||
MultipleLoad(Vec<url::Url>),
|
MultipleLoad(Vec<url::Url>),
|
||||||
Fullscreen,
|
Fullscreen,
|
||||||
|
|
@ -1065,6 +1071,10 @@ impl Application for App {
|
||||||
|x| x,
|
|x| x,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Message::FileClearRecents => {
|
||||||
|
self.flags.config_state.recent_files.clear();
|
||||||
|
self.save_config_state();
|
||||||
|
}
|
||||||
Message::FileOpenRecent(index) => {
|
Message::FileOpenRecent(index) => {
|
||||||
if let Some(url) = self.flags.config_state.recent_files.get(index) {
|
if let Some(url) = self.flags.config_state.recent_files.get(index) {
|
||||||
return self.update(Message::FileLoad(url.clone()));
|
return self.update(Message::FileLoad(url.clone()));
|
||||||
|
|
@ -1137,6 +1147,10 @@ impl Application for App {
|
||||||
return self.update(Message::FolderLoad(path.clone()));
|
return self.update(Message::FolderLoad(path.clone()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Message::FolderClearRecents => {
|
||||||
|
self.flags.config_state.recent_projects.clear();
|
||||||
|
self.save_config_state();
|
||||||
|
}
|
||||||
Message::MultipleLoad(urls) => {
|
Message::MultipleLoad(urls) => {
|
||||||
log::trace!("Loading multiple URLs: {urls:?}");
|
log::trace!("Loading multiple URLs: {urls:?}");
|
||||||
let paths: Vec<_> = urls
|
let paths: Vec<_> = urls
|
||||||
|
|
|
||||||
28
src/menu.rs
28
src/menu.rs
|
|
@ -31,21 +31,45 @@ pub fn menu_bar<'a>(
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut recent_files = Vec::with_capacity(config_state.recent_files.len());
|
let files_len = if config_state.recent_files.is_empty() {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
config_state.recent_files.len() + 2
|
||||||
|
};
|
||||||
|
let mut recent_files = Vec::with_capacity(files_len);
|
||||||
for (i, path) in config_state.recent_files.iter().enumerate() {
|
for (i, path) in config_state.recent_files.iter().enumerate() {
|
||||||
recent_files.push(menu::Item::Button(
|
recent_files.push(menu::Item::Button(
|
||||||
format_url(path),
|
format_url(path),
|
||||||
Action::FileOpenRecent(i),
|
Action::FileOpenRecent(i),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
if files_len > 0 {
|
||||||
|
recent_files.push(menu::Item::Divider);
|
||||||
|
recent_files.push(menu::Item::Button(
|
||||||
|
fl!("clear-recent"),
|
||||||
|
Action::FileClearRecents,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
let mut recent_projects = Vec::with_capacity(config_state.recent_projects.len());
|
let projects_len = if config_state.recent_projects.is_empty() {
|
||||||
|
0
|
||||||
|
} else {
|
||||||
|
config_state.recent_projects.len() + 2
|
||||||
|
};
|
||||||
|
let mut recent_projects = Vec::with_capacity(projects_len);
|
||||||
for (i, path) in config_state.recent_projects.iter().enumerate() {
|
for (i, path) in config_state.recent_projects.iter().enumerate() {
|
||||||
recent_projects.push(menu::Item::Button(
|
recent_projects.push(menu::Item::Button(
|
||||||
format_path(path),
|
format_path(path),
|
||||||
Action::FolderOpenRecent(i),
|
Action::FolderOpenRecent(i),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
if projects_len > 0 {
|
||||||
|
recent_projects.push(menu::Item::Divider);
|
||||||
|
recent_projects.push(menu::Item::Button(
|
||||||
|
fl!("clear-recent"),
|
||||||
|
Action::FolderClearRecents,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
let mut close_projects = Vec::with_capacity(projects.len());
|
let mut close_projects = Vec::with_capacity(projects.len());
|
||||||
for (folder_i, (name, _path)) in projects.iter().enumerate() {
|
for (folder_i, (name, _path)) in projects.iter().enumerate() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue