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