Use actions for all menu items
This commit is contained in:
parent
869999919c
commit
f48ec227dd
2 changed files with 63 additions and 60 deletions
14
src/main.rs
14
src/main.rs
|
|
@ -164,6 +164,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||
|
||||
#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, Ord, PartialEq, PartialOrd, Serialize)]
|
||||
pub enum Action {
|
||||
Todo,
|
||||
CloseFile,
|
||||
CloseProject,
|
||||
Copy,
|
||||
|
|
@ -190,7 +191,11 @@ pub enum Action {
|
|||
TabActivate8,
|
||||
TabNext,
|
||||
TabPrev,
|
||||
TabWidth(u16),
|
||||
ToggleAutoIndent,
|
||||
ToggleDocumentStatistics,
|
||||
ToggleGitManagement,
|
||||
ToggleLineNumbers,
|
||||
ToggleProjectSearch,
|
||||
ToggleSettingsPage,
|
||||
ToggleWordWrap,
|
||||
|
|
@ -200,6 +205,7 @@ pub enum Action {
|
|||
impl Action {
|
||||
pub fn message(&self) -> Message {
|
||||
match self {
|
||||
Self::Todo => Message::Todo,
|
||||
Self::CloseFile => Message::CloseFile,
|
||||
Self::CloseProject => Message::CloseProject,
|
||||
Self::Copy => Message::Copy,
|
||||
|
|
@ -226,7 +232,13 @@ impl Action {
|
|||
Self::TabActivate8 => Message::TabActivateJump(8),
|
||||
Self::TabNext => Message::TabNext,
|
||||
Self::TabPrev => Message::TabPrev,
|
||||
Self::TabWidth(tab_width) => Message::TabWidth(*tab_width),
|
||||
Self::ToggleAutoIndent => Message::ToggleAutoIndent,
|
||||
Self::ToggleDocumentStatistics => {
|
||||
Message::ToggleContextPage(ContextPage::DocumentStatistics)
|
||||
}
|
||||
Self::ToggleGitManagement => Message::ToggleContextPage(ContextPage::GitManagement),
|
||||
Self::ToggleLineNumbers => Message::ToggleLineNumbers,
|
||||
Self::ToggleProjectSearch => Message::ToggleContextPage(ContextPage::ProjectSearch),
|
||||
Self::ToggleSettingsPage => Message::ToggleContextPage(ContextPage::Settings),
|
||||
Self::ToggleWordWrap => Message::ToggleWordWrap,
|
||||
|
|
@ -259,7 +271,7 @@ impl PartialEq for WatcherWrapper {
|
|||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum Message {
|
||||
AppTheme(AppTheme),
|
||||
Config(Config),
|
||||
|
|
|
|||
109
src/menu.rs
109
src/menu.rs
|
|
@ -16,7 +16,7 @@ use cosmic::{
|
|||
};
|
||||
use std::collections::HashMap;
|
||||
|
||||
use crate::{fl, icon_cache_get, Action, Config, ContextPage, KeyBind, Message};
|
||||
use crate::{fl, icon_cache_get, Action, Config, KeyBind, Message};
|
||||
|
||||
macro_rules! menu_button {
|
||||
($($x:expr),+ $(,)?) => (
|
||||
|
|
@ -91,10 +91,10 @@ pub fn menu_bar<'a>(config: &Config, key_binds: &HashMap<KeyBind, Action>) -> El
|
|||
let menu_folder =
|
||||
|label| menu_button!(widget::text(label), horizontal_space(Length::Fill), ">");
|
||||
|
||||
let find_key = |message: &Message| -> String {
|
||||
let find_key = |action: &Action| -> String {
|
||||
let mut key = String::new();
|
||||
for (key_bind, action) in key_binds.iter() {
|
||||
if &action.message() == message {
|
||||
for (key_bind, key_action) in key_binds.iter() {
|
||||
if action == key_action {
|
||||
key = key_bind.to_string();
|
||||
break;
|
||||
}
|
||||
|
|
@ -102,26 +102,26 @@ pub fn menu_bar<'a>(config: &Config, key_binds: &HashMap<KeyBind, Action>) -> El
|
|||
key
|
||||
};
|
||||
|
||||
let menu_item = |label, message| {
|
||||
let key = find_key(&message);
|
||||
let menu_item = |label, action| {
|
||||
let key = find_key(&action);
|
||||
MenuTree::new(
|
||||
menu_button!(
|
||||
widget::text(label),
|
||||
horizontal_space(Length::Fill),
|
||||
widget::text(key)
|
||||
)
|
||||
.on_press(message),
|
||||
.on_press(action.message()),
|
||||
)
|
||||
};
|
||||
|
||||
//TODO: support key lookup?
|
||||
let menu_checkbox = |label, value, message| {
|
||||
let menu_checkbox = |label, value, action| {
|
||||
let check: Element<_> = if value {
|
||||
icon_cache_get("object-select-symbolic", 16).into()
|
||||
} else {
|
||||
widget::Space::with_width(Length::Fixed(16.0)).into()
|
||||
};
|
||||
let key = find_key(&message);
|
||||
let key = find_key(&action);
|
||||
MenuTree::new(
|
||||
menu_button!(
|
||||
check,
|
||||
|
|
@ -130,14 +130,14 @@ pub fn menu_bar<'a>(config: &Config, key_binds: &HashMap<KeyBind, Action>) -> El
|
|||
horizontal_space(Length::Fill),
|
||||
widget::text(key)
|
||||
)
|
||||
.on_press(message),
|
||||
.on_press(action.message()),
|
||||
)
|
||||
};
|
||||
|
||||
let menu_key = |label, key, message| {
|
||||
let menu_key = |label, key, action: Action| {
|
||||
MenuTree::new(
|
||||
menu_button!(widget::text(label), horizontal_space(Length::Fill), key)
|
||||
.on_press(message),
|
||||
.on_press(action.message()),
|
||||
)
|
||||
};
|
||||
|
||||
|
|
@ -145,7 +145,7 @@ pub fn menu_bar<'a>(config: &Config, key_binds: &HashMap<KeyBind, Action>) -> El
|
|||
menu_checkbox(
|
||||
fl!("tab-width", tab_width = tab_width),
|
||||
config.tab_width == tab_width,
|
||||
Message::TabWidth(tab_width),
|
||||
Action::TabWidth(tab_width),
|
||||
)
|
||||
};
|
||||
|
||||
|
|
@ -153,62 +153,56 @@ pub fn menu_bar<'a>(config: &Config, key_binds: &HashMap<KeyBind, Action>) -> El
|
|||
MenuTree::with_children(
|
||||
menu_root(fl!("file")),
|
||||
vec![
|
||||
menu_item(fl!("new-file"), Message::NewFile),
|
||||
menu_item(fl!("new-window"), Message::NewWindow),
|
||||
menu_item(fl!("new-file"), Action::NewFile),
|
||||
menu_item(fl!("new-window"), Action::NewWindow),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(fl!("open-file"), Message::OpenFileDialog),
|
||||
menu_item(fl!("open-file"), Action::OpenFileDialog),
|
||||
MenuTree::with_children(
|
||||
menu_folder(fl!("open-recent-file")),
|
||||
vec![menu_item(fl!("todo"), Message::Todo)],
|
||||
vec![menu_item(fl!("todo"), Action::Todo)],
|
||||
),
|
||||
menu_item(fl!("close-file"), Message::CloseFile),
|
||||
menu_item(fl!("close-file"), Action::CloseFile),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(fl!("menu-open-project"), Message::OpenProjectDialog),
|
||||
menu_item(fl!("menu-open-project"), Action::OpenProjectDialog),
|
||||
MenuTree::with_children(
|
||||
menu_folder(fl!("open-recent-project")),
|
||||
vec![menu_item(fl!("todo"), Message::Todo)],
|
||||
vec![menu_item(fl!("todo"), Action::Todo)],
|
||||
),
|
||||
menu_item(fl!("close-project"), Message::CloseProject),
|
||||
menu_item(fl!("close-project"), Action::CloseProject),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(fl!("save"), Message::Save),
|
||||
menu_key(fl!("save-as"), "Ctrl + Shift + S", Message::Todo),
|
||||
menu_item(fl!("save"), Action::Save),
|
||||
menu_key(fl!("save-as"), "Ctrl + Shift + S", Action::Todo),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(fl!("revert-all-changes"), Message::Todo),
|
||||
menu_item(fl!("revert-all-changes"), Action::Todo),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(
|
||||
fl!("menu-document-statistics"),
|
||||
Message::ToggleContextPage(ContextPage::DocumentStatistics),
|
||||
Action::ToggleDocumentStatistics,
|
||||
),
|
||||
menu_item(fl!("document-type"), Message::Todo),
|
||||
menu_item(fl!("encoding"), Message::Todo),
|
||||
menu_item(
|
||||
fl!("menu-git-management"),
|
||||
Message::ToggleContextPage(ContextPage::GitManagement),
|
||||
),
|
||||
menu_item(fl!("print"), Message::Todo),
|
||||
menu_item(fl!("document-type"), Action::Todo),
|
||||
menu_item(fl!("encoding"), Action::Todo),
|
||||
menu_item(fl!("menu-git-management"), Action::ToggleGitManagement),
|
||||
menu_item(fl!("print"), Action::Todo),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(fl!("quit"), Message::Quit),
|
||||
menu_item(fl!("quit"), Action::Quit),
|
||||
],
|
||||
),
|
||||
MenuTree::with_children(
|
||||
menu_root(fl!("edit")),
|
||||
vec![
|
||||
menu_item(fl!("undo"), Message::Undo),
|
||||
menu_item(fl!("redo"), Message::Redo),
|
||||
menu_item(fl!("undo"), Action::Undo),
|
||||
menu_item(fl!("redo"), Action::Redo),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(fl!("cut"), Message::Cut),
|
||||
menu_item(fl!("copy"), Message::Copy),
|
||||
menu_item(fl!("paste"), Message::Paste),
|
||||
menu_item(fl!("select-all"), Message::SelectAll),
|
||||
menu_item(fl!("cut"), Action::Cut),
|
||||
menu_item(fl!("copy"), Action::Copy),
|
||||
menu_item(fl!("paste"), Action::Paste),
|
||||
menu_item(fl!("select-all"), Action::SelectAll),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(fl!("find"), Message::Find(Some(false))),
|
||||
menu_item(fl!("replace"), Message::Find(Some(true))),
|
||||
menu_item(
|
||||
fl!("find-in-project"),
|
||||
Message::ToggleContextPage(ContextPage::ProjectSearch),
|
||||
),
|
||||
menu_item(fl!("find"), Action::Find),
|
||||
menu_item(fl!("replace"), Action::FindAndReplace),
|
||||
menu_item(fl!("find-in-project"), Action::ToggleProjectSearch),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(fl!("spell-check"), Message::Todo),
|
||||
menu_item(fl!("spell-check"), Action::Todo),
|
||||
],
|
||||
),
|
||||
MenuTree::with_children(
|
||||
|
|
@ -220,7 +214,7 @@ pub fn menu_bar<'a>(config: &Config, key_binds: &HashMap<KeyBind, Action>) -> El
|
|||
menu_checkbox(
|
||||
fl!("automatic-indentation"),
|
||||
config.auto_indent,
|
||||
Message::ToggleAutoIndent,
|
||||
Action::ToggleAutoIndent,
|
||||
),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_tab_width(1),
|
||||
|
|
@ -232,28 +226,25 @@ pub fn menu_bar<'a>(config: &Config, key_binds: &HashMap<KeyBind, Action>) -> El
|
|||
menu_tab_width(7),
|
||||
menu_tab_width(8),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(fl!("convert-indentation-to-spaces"), Message::Todo),
|
||||
menu_item(fl!("convert-indentation-to-tabs"), Message::Todo),
|
||||
menu_item(fl!("convert-indentation-to-spaces"), Action::Todo),
|
||||
menu_item(fl!("convert-indentation-to-tabs"), Action::Todo),
|
||||
],
|
||||
),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_checkbox(fl!("word-wrap"), config.word_wrap, Message::ToggleWordWrap),
|
||||
menu_checkbox(fl!("word-wrap"), config.word_wrap, Action::ToggleWordWrap),
|
||||
menu_checkbox(
|
||||
fl!("show-line-numbers"),
|
||||
config.line_numbers,
|
||||
Message::ToggleLineNumbers,
|
||||
Action::ToggleLineNumbers,
|
||||
),
|
||||
menu_checkbox(fl!("highlight-current-line"), false, Message::Todo),
|
||||
menu_item(fl!("syntax-highlighting"), Message::Todo),
|
||||
menu_checkbox(fl!("highlight-current-line"), false, Action::Todo),
|
||||
menu_item(fl!("syntax-highlighting"), Action::Todo),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(
|
||||
fl!("menu-settings"),
|
||||
Message::ToggleContextPage(ContextPage::Settings),
|
||||
),
|
||||
menu_item(fl!("menu-settings"), Action::ToggleSettingsPage),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(fl!("menu-keyboard-shortcuts"), Message::Todo),
|
||||
menu_item(fl!("menu-keyboard-shortcuts"), Action::Todo),
|
||||
MenuTree::new(horizontal_rule(1)),
|
||||
menu_item(fl!("about-cosmic-text-editor"), Message::Todo),
|
||||
menu_item(fl!("about-cosmic-text-editor"), Action::Todo),
|
||||
],
|
||||
),
|
||||
])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue