Mercurial Hosting > editor
comparison editor.luan @ 4:3d6414265959
add save
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Mon, 31 Mar 2025 19:14:04 -0600 |
| parents | a79a840691b1 |
| children | 57b4c281a03e |
comparison
equal
deleted
inserted
replaced
| 3:a79a840691b1 | 4:3d6414265959 |
|---|---|
| 20 | 20 |
| 21 local new_window | 21 local new_window |
| 22 | 22 |
| 23 local function make_menu_bar(window) | 23 local function make_menu_bar(window) |
| 24 local menu_bar = new_menu_bar() | 24 local menu_bar = new_menu_bar() |
| 25 do | |
| 25 local file_menu = new_menu() | 26 local file_menu = new_menu() |
| 26 file_menu.text = "File" | 27 file_menu.text = "File" |
| 28 do | |
| 27 local new_file = new_menu_item() | 29 local new_file = new_menu_item() |
| 28 new_file.text = "New File" | 30 new_file.text = "New File" |
| 29 new_file.accelerator = "meta N" | 31 new_file.accelerator = "meta N" |
| 30 new_file.add_action_listener(function() | 32 new_file.add_action_listener(function() |
| 31 new_window() | 33 new_window() |
| 32 end) | 34 end) |
| 33 file_menu.add(new_file) | 35 file_menu.add(new_file) |
| 36 end | |
| 37 do | |
| 34 local open = new_menu_item() | 38 local open = new_menu_item() |
| 35 open.text = "Open..." | 39 open.text = "Open..." |
| 36 open.accelerator = "meta O" | 40 open.accelerator = "meta O" |
| 37 open.add_action_listener(function() | 41 open.add_action_listener(function() |
| 38 local file_chooser = window.frame.file_chooser_load() | 42 local file_chooser = window.frame.file_chooser_load() |
| 44 if file ~= nil then | 48 if file ~= nil then |
| 45 new_window(file) | 49 new_window(file) |
| 46 end | 50 end |
| 47 end) | 51 end) |
| 48 file_menu.add(open) | 52 file_menu.add(open) |
| 53 end | |
| 54 do | |
| 55 local save = new_menu_item() | |
| 56 save.text = "Save" | |
| 57 save.accelerator = "meta S" | |
| 58 save.add_action_listener(function() | |
| 59 if window.file == nil then | |
| 60 local file_chooser = window.frame.file_chooser_save() | |
| 61 file_chooser.visible = true | |
| 62 local file = file_chooser.file | |
| 63 if file == nil then | |
| 64 return | |
| 65 end | |
| 66 window.file = file | |
| 67 window.frame.title = file.canonical().to_string() | |
| 68 end | |
| 69 window.file.write_text(window.text_area.text) | |
| 70 end) | |
| 71 file_menu.add(save) | |
| 72 end | |
| 49 menu_bar.add(file_menu) | 73 menu_bar.add(file_menu) |
| 74 end | |
| 75 do | |
| 50 local view_menu = new_menu() | 76 local view_menu = new_menu() |
| 51 view_menu.text = "View" | 77 view_menu.text = "View" |
| 78 do | |
| 52 local word_wrap = new_check_box_menu_item() | 79 local word_wrap = new_check_box_menu_item() |
| 53 word_wrap.text = "Word Wrap" | 80 word_wrap.text = "Word Wrap" |
| 54 word_wrap.state = window.text_area.line_wrap | 81 word_wrap.state = window.text_area.line_wrap |
| 55 word_wrap.add_action_listener(function() | 82 word_wrap.add_action_listener(function() |
| 56 window.text_area.line_wrap = word_wrap.state | 83 window.text_area.line_wrap = word_wrap.state |
| 57 end) | 84 end) |
| 58 view_menu.add(word_wrap) | 85 view_menu.add(word_wrap) |
| 86 end | |
| 59 menu_bar.add(view_menu) | 87 menu_bar.add(view_menu) |
| 88 end | |
| 60 return menu_bar | 89 return menu_bar |
| 61 end | 90 end |
| 62 | 91 |
| 63 local n_windows = 0 | 92 local n_windows = 0 |
| 64 | 93 |
| 65 function new_window(file) | 94 function new_window(file) |
| 66 local frame = new_frame() | 95 local frame = new_frame() |
| 67 frame.title = file and file.canonical().to_string() or "untitled" | 96 frame.title = file and file.canonical().to_string() or "new" |
| 68 frame.add_close_listener(function() | 97 frame.add_close_listener(function() |
| 69 n_windows = n_windows - 1 | 98 n_windows = n_windows - 1 |
| 70 if n_windows == 0 then | 99 if n_windows == 0 then |
| 71 Luan.exit() | 100 Luan.exit() |
| 72 end | 101 end |
