Mercurial Hosting > editor
comparison src/luan_editor/menu.luan @ 58:7e2d6426c155
cross-platform accelerators
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Fri, 30 May 2025 13:17:51 -0600 |
| parents | 6059b4e22d47 |
| children | 1c68552e8ac2 |
comparison
equal
deleted
inserted
replaced
| 57:f91c336cdde5 | 58:7e2d6426c155 |
|---|---|
| 42 status_bar.text = window.title() | 42 status_bar.text = window.title() |
| 43 end | 43 end |
| 44 } | 44 } |
| 45 local undo = new_menu_item{ | 45 local undo = new_menu_item{ |
| 46 text = "Undo" | 46 text = "Undo" |
| 47 accelerator = "meta Z" | 47 accelerator = "Z" |
| 48 action_listener = action_listener(document.undo) | 48 action_listener = action_listener(document.undo) |
| 49 } | 49 } |
| 50 local redo = new_menu_item{ | 50 local redo = new_menu_item{ |
| 51 text = "Redo" | 51 text = "Redo" |
| 52 accelerator = "meta shift Z" | 52 accelerator = "shift Z" |
| 53 action_listener = action_listener(document.redo) | 53 action_listener = action_listener(document.redo) |
| 54 } | 54 } |
| 55 local function update_undo_redo() | 55 local function update_undo_redo() |
| 56 undo.set_enabled(document.can_undo()) | 56 undo.set_enabled(document.can_undo()) |
| 57 redo.set_enabled(document.can_redo()) | 57 redo.set_enabled(document.can_redo()) |
| 60 update_undo_redo() | 60 update_undo_redo() |
| 61 document.add_undo_listener(update_undo_redo) | 61 document.add_undo_listener(update_undo_redo) |
| 62 | 62 |
| 63 local find_menu_item = new_check_box_menu_item{ | 63 local find_menu_item = new_check_box_menu_item{ |
| 64 text = "Find and Replace" | 64 text = "Find and Replace" |
| 65 accelerator = "meta F" | 65 accelerator = "F" |
| 66 action_listener = function(event) | 66 action_listener = function(event) |
| 67 window.show_find_panel(event.source.state) | 67 window.show_find_panel(event.source.state) |
| 68 end | 68 end |
| 69 } | 69 } |
| 70 window.find_menu_item = find_menu_item | 70 window.find_menu_item = find_menu_item |
| 74 new_menu{ | 74 new_menu{ |
| 75 text = "File" | 75 text = "File" |
| 76 menu_items = { | 76 menu_items = { |
| 77 new_menu_item{ | 77 new_menu_item{ |
| 78 text = "New File" | 78 text = "New File" |
| 79 accelerator = "meta N" | 79 accelerator = "N" |
| 80 action_listener = action_listener(window.new) | 80 action_listener = action_listener(window.new) |
| 81 } | 81 } |
| 82 new_menu_item{ | 82 new_menu_item{ |
| 83 text = "Open..." | 83 text = "Open..." |
| 84 accelerator = "meta O" | 84 accelerator = "O" |
| 85 action_listener = action_listener(window.open) | 85 action_listener = action_listener(window.open) |
| 86 } | 86 } |
| 87 new_menu_item{ | 87 new_menu_item{ |
| 88 text = "Save" | 88 text = "Save" |
| 89 accelerator = "meta S" | 89 accelerator = "S" |
| 90 action_listener = function(_) | 90 action_listener = function(_) |
| 91 if window.save() then | 91 if window.save() then |
| 92 revert.set_enabled(true) | 92 revert.set_enabled(true) |
| 93 view_file_path.set_enabled(true) | 93 view_file_path.set_enabled(true) |
| 94 end | 94 end |
| 125 undo | 125 undo |
| 126 redo | 126 redo |
| 127 separator | 127 separator |
| 128 new_menu_item{ | 128 new_menu_item{ |
| 129 text = "Cut" | 129 text = "Cut" |
| 130 accelerator = "meta X" | 130 accelerator = "X" |
| 131 action_listener = action_listener(text_area.cut) | 131 action_listener = action_listener(text_area.cut) |
| 132 } | 132 } |
| 133 new_menu_item{ | 133 new_menu_item{ |
| 134 text = "Copy" | 134 text = "Copy" |
| 135 accelerator = "meta C" | 135 accelerator = "C" |
| 136 action_listener = action_listener(text_area.copy) | 136 action_listener = action_listener(text_area.copy) |
| 137 } | 137 } |
| 138 new_menu_item{ | 138 new_menu_item{ |
| 139 text = "Paste" | 139 text = "Paste" |
| 140 accelerator = "meta V" | 140 accelerator = "V" |
| 141 action_listener = action_listener(text_area.paste) | 141 action_listener = action_listener(text_area.paste) |
| 142 } | 142 } |
| 143 separator | 143 separator |
| 144 new_menu_item{ | 144 new_menu_item{ |
| 145 text = "Indent" | 145 text = "Indent" |
| 146 accelerator = "meta CLOSE_BRACKET" | 146 accelerator = "CLOSE_BRACKET" |
| 147 action_listener = action_listener(window.indent) | 147 action_listener = action_listener(window.indent) |
| 148 } | 148 } |
| 149 new_menu_item{ | 149 new_menu_item{ |
| 150 text = "Unindent" | 150 text = "Unindent" |
| 151 accelerator = "meta OPEN_BRACKET" | 151 accelerator = "OPEN_BRACKET" |
| 152 action_listener = action_listener(window.unindent) | 152 action_listener = action_listener(window.unindent) |
| 153 } | 153 } |
| 154 separator | 154 separator |
| 155 new_menu_item{ | 155 new_menu_item{ |
| 156 text = "Select All" | 156 text = "Select All" |
| 157 accelerator = "meta A" | 157 accelerator = "A" |
| 158 action_listener = action_listener(text_area.select_all) | 158 action_listener = action_listener(text_area.select_all) |
| 159 } | 159 } |
| 160 } | 160 } |
| 161 } | 161 } |
| 162 new_menu{ | 162 new_menu{ |
| 187 window.set_line_wrap(event.source.state) | 187 window.set_line_wrap(event.source.state) |
| 188 end | 188 end |
| 189 } | 189 } |
| 190 new_check_box_menu_item{ | 190 new_check_box_menu_item{ |
| 191 text = "Show Whitespace" | 191 text = "Show Whitespace" |
| 192 accelerator = "meta W" | 192 accelerator = "W" |
| 193 state = text_area.whitespace_visible | 193 state = text_area.whitespace_visible |
| 194 action_listener = function(event) | 194 action_listener = function(event) |
| 195 window.set_whitespace_visible(event.source.state) | 195 window.set_whitespace_visible(event.source.state) |
| 196 end | 196 end |
| 197 } | 197 } |
| 198 new_check_box_menu_item{ | 198 new_check_box_menu_item{ |
| 199 text = "Spell Check" | 199 text = "Spell Check" |
| 200 accelerator = "meta SEMICOLON" | 200 accelerator = "SEMICOLON" |
| 201 action_listener = function(event) | 201 action_listener = function(event) |
| 202 spell_check(text_area,event.source.state) | 202 spell_check(text_area,event.source.state) |
| 203 end | 203 end |
| 204 } | 204 } |
| 205 new_menu_item{ | 205 new_menu_item{ |
| 206 text = "Cursor Column" | 206 text = "Cursor Column" |
| 207 accelerator = "meta B" | 207 accelerator = "B" |
| 208 action_listener = function(_) | 208 action_listener = function(_) |
| 209 status_bar.text = "Cursor Column: "..window.cursor_column() | 209 status_bar.text = "Cursor Column: "..window.cursor_column() |
| 210 end | 210 end |
| 211 } | 211 } |
| 212 new_menu_item{ | 212 new_menu_item{ |
| 213 text = "Goto Line" | 213 text = "Goto Line" |
| 214 accelerator = "meta G" | 214 accelerator = "G" |
| 215 action_listener = function(_) | 215 action_listener = function(_) |
| 216 local input = show_input_dialog( window.frame, "Goto line" ) | 216 local input = show_input_dialog( window.frame, "Goto line" ) |
| 217 if input == nil then | 217 if input == nil then |
| 218 return | 218 return |
| 219 end | 219 end |
| 264 end | 264 end |
| 265 end | 265 end |
| 266 } | 266 } |
| 267 new_menu_item{ | 267 new_menu_item{ |
| 268 text = "List Windows" | 268 text = "List Windows" |
| 269 accelerator = "meta L" | 269 accelerator = "L" |
| 270 action_listener = action_listener(show_list_window) | 270 action_listener = action_listener(show_list_window) |
| 271 } | 271 } |
| 272 } | 272 } |
| 273 } | 273 } |
| 274 } | 274 } |
