Open configured vault folders
This commit is contained in:
@@ -7,6 +7,7 @@ pub enum UiAction {
|
||||
About,
|
||||
Settings,
|
||||
NewEntry,
|
||||
OpenFolder,
|
||||
OpenEntry,
|
||||
Save,
|
||||
CloseWindow,
|
||||
@@ -34,6 +35,7 @@ impl UiAction {
|
||||
Self::About => "about",
|
||||
Self::Settings => "settings",
|
||||
Self::NewEntry => "new-entry",
|
||||
Self::OpenFolder => "open-folder",
|
||||
Self::OpenEntry => "open-entry",
|
||||
Self::Save => "save",
|
||||
Self::CloseWindow => "close-window",
|
||||
@@ -104,6 +106,7 @@ pub struct ActionContext {
|
||||
pub editing: bool,
|
||||
pub dirty: bool,
|
||||
pub saving: bool,
|
||||
pub switching_vault: bool,
|
||||
pub focused_field: bool,
|
||||
pub focused_sensitive: bool,
|
||||
pub entry_path: bool,
|
||||
@@ -127,7 +130,13 @@ pub const ACTIONS: &[ActionSpec] = &[
|
||||
Some("⌘Q"),
|
||||
),
|
||||
spec(UiAction::NewEntry, MenuGroup::File, "New Entry", Some("⌘N")),
|
||||
spec(UiAction::OpenEntry, MenuGroup::File, "Open", Some("⌘O")),
|
||||
spec(
|
||||
UiAction::OpenFolder,
|
||||
MenuGroup::File,
|
||||
"Open Folder…",
|
||||
Some("⌘O"),
|
||||
),
|
||||
spec(UiAction::OpenEntry, MenuGroup::Entry, "Open Entry", None),
|
||||
spec(UiAction::Save, MenuGroup::File, "Save", Some("⌘S")),
|
||||
spec(
|
||||
UiAction::CloseWindow,
|
||||
@@ -221,20 +230,53 @@ pub fn enabled(action: UiAction, context: ActionContext) -> bool {
|
||||
UiAction::About | UiAction::Settings | UiAction::Help => true,
|
||||
// Entry creation is not valid until the dedicated workflow exists.
|
||||
UiAction::NewEntry => false,
|
||||
UiAction::OpenEntry => context.storage_ready && context.entry_path && !context.saving,
|
||||
UiAction::Save => context.unlocked && context.editing && context.dirty && !context.saving,
|
||||
UiAction::CloseWindow | UiAction::Quit | UiAction::Minimize => true,
|
||||
UiAction::OpenFolder => {
|
||||
context.storage_ready && !context.saving && !context.switching_vault
|
||||
}
|
||||
UiAction::OpenEntry => {
|
||||
context.storage_ready
|
||||
&& context.entry_path
|
||||
&& !context.saving
|
||||
&& !context.switching_vault
|
||||
}
|
||||
UiAction::Save => {
|
||||
context.unlocked
|
||||
&& context.editing
|
||||
&& context.dirty
|
||||
&& !context.saving
|
||||
&& !context.switching_vault
|
||||
}
|
||||
UiAction::CloseWindow | UiAction::Quit => !context.switching_vault,
|
||||
UiAction::Minimize => true,
|
||||
UiAction::Undo | UiAction::Redo | UiAction::Cut | UiAction::Paste | UiAction::Find => false,
|
||||
UiAction::CopyField => {
|
||||
context.unlocked && context.document_open && !context.editing && context.focused_field
|
||||
context.unlocked
|
||||
&& context.document_open
|
||||
&& !context.editing
|
||||
&& !context.switching_vault
|
||||
&& context.focused_field
|
||||
}
|
||||
UiAction::CopyEditedField => {
|
||||
context.unlocked && context.editing && !context.switching_vault && context.focused_field
|
||||
}
|
||||
UiAction::CopyEditedField => context.unlocked && context.editing && context.focused_field,
|
||||
UiAction::TogglePaneFocus => true,
|
||||
UiAction::Refresh => context.storage_ready && !context.tree_loading,
|
||||
UiAction::ReloadEntry => context.unlocked && context.document_open && !context.saving,
|
||||
UiAction::EditEntry => context.unlocked && context.document_open && !context.editing,
|
||||
UiAction::Refresh => {
|
||||
context.storage_ready && !context.tree_loading && !context.switching_vault
|
||||
}
|
||||
UiAction::ReloadEntry => {
|
||||
context.unlocked && context.document_open && !context.saving && !context.switching_vault
|
||||
}
|
||||
UiAction::EditEntry => {
|
||||
context.unlocked
|
||||
&& context.document_open
|
||||
&& !context.editing
|
||||
&& !context.switching_vault
|
||||
}
|
||||
UiAction::ToggleReveal => {
|
||||
context.unlocked && context.document_open && context.focused_sensitive
|
||||
context.unlocked
|
||||
&& context.document_open
|
||||
&& !context.switching_vault
|
||||
&& context.focused_sensitive
|
||||
}
|
||||
UiAction::Lock => context.unlocked,
|
||||
}
|
||||
@@ -253,7 +295,7 @@ pub fn shortcut_action(key: &keyboard::Key, modifiers: keyboard::Modifiers) -> O
|
||||
match key.as_ref() {
|
||||
keyboard::Key::Character(",") => Some(UiAction::Settings),
|
||||
keyboard::Key::Character("n" | "N") => Some(UiAction::NewEntry),
|
||||
keyboard::Key::Character("o" | "O") => Some(UiAction::OpenEntry),
|
||||
keyboard::Key::Character("o" | "O") => Some(UiAction::OpenFolder),
|
||||
keyboard::Key::Character("s" | "S") => Some(UiAction::Save),
|
||||
keyboard::Key::Character("w" | "W") => Some(UiAction::CloseWindow),
|
||||
keyboard::Key::Character("q" | "Q") => Some(UiAction::Quit),
|
||||
@@ -285,6 +327,7 @@ mod tests {
|
||||
editing: true,
|
||||
dirty: true,
|
||||
saving: false,
|
||||
switching_vault: false,
|
||||
focused_field: true,
|
||||
focused_sensitive: true,
|
||||
entry_path: true,
|
||||
@@ -350,13 +393,37 @@ mod tests {
|
||||
..ready
|
||||
}
|
||||
));
|
||||
assert!(!enabled(
|
||||
UiAction::OpenFolder,
|
||||
ActionContext {
|
||||
switching_vault: true,
|
||||
..ready
|
||||
}
|
||||
));
|
||||
let switching = ActionContext {
|
||||
switching_vault: true,
|
||||
..ready
|
||||
};
|
||||
for action in [
|
||||
UiAction::Save,
|
||||
UiAction::CloseWindow,
|
||||
UiAction::Quit,
|
||||
UiAction::CopyField,
|
||||
UiAction::CopyEditedField,
|
||||
UiAction::Refresh,
|
||||
UiAction::ReloadEntry,
|
||||
UiAction::EditEntry,
|
||||
UiAction::ToggleReveal,
|
||||
] {
|
||||
assert!(!enabled(action, switching), "{action:?}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn conventional_shortcuts_resolve_to_the_registered_actions() {
|
||||
let primary = keyboard::Modifiers::COMMAND;
|
||||
for (key, expected) in [
|
||||
("o", UiAction::OpenEntry),
|
||||
("o", UiAction::OpenFolder),
|
||||
("s", UiAction::Save),
|
||||
("f", UiAction::Find),
|
||||
("n", UiAction::NewEntry),
|
||||
|
||||
Reference in New Issue
Block a user