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() |