Mercurial Hosting > editor
comparison editor.luan @ 5:57b4c281a03e
shared documents
| author | Franklin Schmidt <fschmidt@gmail.com> |
|---|---|
| date | Mon, 31 Mar 2025 21:01:25 -0600 |
| parents | 3d6414265959 |
| children | 524d6b1c26b4 |
comparison
equal
deleted
inserted
replaced
| 4:3d6414265959 | 5:57b4c281a03e |
|---|---|
| 27 file_menu.text = "File" | 27 file_menu.text = "File" |
| 28 do | 28 do |
| 29 local new_file = new_menu_item() | 29 local new_file = new_menu_item() |
| 30 new_file.text = "New File" | 30 new_file.text = "New File" |
| 31 new_file.accelerator = "meta N" | 31 new_file.accelerator = "meta N" |
| 32 new_file.add_action_listener(function() | 32 new_file.add_action_listener(new_window) |
| 33 new_window() | |
| 34 end) | |
| 35 file_menu.add(new_file) | 33 file_menu.add(new_file) |
| 36 end | 34 end |
| 37 do | 35 do |
| 38 local open = new_menu_item() | 36 local open = new_menu_item() |
| 39 open.text = "Open..." | 37 open.text = "Open..." |
| 40 open.accelerator = "meta O" | 38 open.accelerator = "meta O" |
| 41 open.add_action_listener(function() | 39 open.add_action_listener(window.open) |
| 42 local file_chooser = window.frame.file_chooser_load() | |
| 43 if window.file ~= nil then | |
| 44 file_chooser.directory = window.file.parent() | |
| 45 end | |
| 46 file_chooser.visible = true | |
| 47 local file = file_chooser.file | |
| 48 if file ~= nil then | |
| 49 new_window(file) | |
| 50 end | |
| 51 end) | |
| 52 file_menu.add(open) | 40 file_menu.add(open) |
| 53 end | 41 end |
| 54 do | 42 do |
| 55 local save = new_menu_item() | 43 local save = new_menu_item() |
| 56 save.text = "Save" | 44 save.text = "Save" |
| 57 save.accelerator = "meta S" | 45 save.accelerator = "meta S" |
| 58 save.add_action_listener(function() | 46 save.add_action_listener(window.save) |
| 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) | 47 file_menu.add(save) |
| 72 end | 48 end |
| 73 menu_bar.add(file_menu) | 49 menu_bar.add(file_menu) |
| 74 end | 50 end |
| 75 do | 51 do |
| 88 end | 64 end |
| 89 return menu_bar | 65 return menu_bar |
| 90 end | 66 end |
| 91 | 67 |
| 92 local n_windows = 0 | 68 local n_windows = 0 |
| 69 local documents = {} | |
| 93 | 70 |
| 94 function new_window(file) | 71 function new_window(file) |
| 72 local window = {} | |
| 95 local frame = new_frame() | 73 local frame = new_frame() |
| 96 frame.title = file and file.canonical().to_string() or "new" | 74 local title = file and file.canonical().to_string() or "new" |
| 75 frame.title = title | |
| 97 frame.add_close_listener(function() | 76 frame.add_close_listener(function() |
| 98 n_windows = n_windows - 1 | 77 n_windows = n_windows - 1 |
| 99 if n_windows == 0 then | 78 if n_windows == 0 then |
| 100 Luan.exit() | 79 Luan.exit() |
| 101 end | 80 end |
| 102 end) | 81 end) |
| 103 local text_area = new_text_area() | 82 local text_area = new_text_area() |
| 104 if file ~= nil and file.is_file() then | 83 window.text_area = text_area |
| 105 text_area.text = file.read_text() | 84 if file ~= nil then |
| 85 local document = documents[title] | |
| 86 if document == nil then | |
| 87 documents[title] = text_area.document | |
| 88 else | |
| 89 text_area.document = document | |
| 90 end | |
| 91 if file.is_file() then | |
| 92 text_area.text = file.read_text() | |
| 93 end | |
| 106 end | 94 end |
| 107 text_area.rows = 10 | 95 text_area.rows = 10 |
| 108 text_area.columns = 20 | 96 text_area.columns = 20 |
| 109 text_area.wrap_style_word = true | 97 text_area.wrap_style_word = true |
| 110 text_area.line_wrap = true | 98 text_area.line_wrap = true |
| 117 list.add_element("1") | 105 list.add_element("1") |
| 118 list.add_element("2") | 106 list.add_element("2") |
| 119 list.add_element("3") | 107 list.add_element("3") |
| 120 --scroll_pane.set_row_header_view(list) | 108 --scroll_pane.set_row_header_view(list) |
| 121 frame.add(scroll_pane) | 109 frame.add(scroll_pane) |
| 122 local window = { | 110 function window.open() |
| 123 frame = frame | 111 local file_chooser = frame.file_chooser_load() |
| 124 file = file | 112 if file ~= nil then |
| 125 text_area = text_area | 113 file_chooser.directory = file.parent() |
| 126 } | 114 end |
| 115 file_chooser.visible = true | |
| 116 local new_file = file_chooser.file | |
| 117 if new_file ~= nil then | |
| 118 new_window(new_file) | |
| 119 end | |
| 120 end | |
| 121 function window.save() | |
| 122 if file == nil then | |
| 123 local file_chooser = frame.file_chooser_save() | |
| 124 file_chooser.visible = true | |
| 125 file = file_chooser.file | |
| 126 if file == nil then | |
| 127 return | |
| 128 end | |
| 129 title = file.canonical().to_string() | |
| 130 frame.title = title | |
| 131 documents[title] = text_area.document | |
| 132 end | |
| 133 file.write_text(text_area.text) | |
| 134 end | |
| 127 local menu_bar = make_menu_bar(window) | 135 local menu_bar = make_menu_bar(window) |
| 128 frame.set_menu_bar(menu_bar) | 136 frame.set_menu_bar(menu_bar) |
| 129 frame.pack() | 137 frame.pack() |
| 130 frame.visible = true | 138 frame.visible = true |
| 131 text_area.request_focus_in_window() | 139 text_area.request_focus_in_window() |
