comparison editor.luan @ 1:9aa38deb5883

add open
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 31 Mar 2025 13:49:21 -0600
parents 090f9b3bccf8
children f38f6e903369
comparison
equal deleted inserted replaced
0:090f9b3bccf8 1:9aa38deb5883
15 local logger = Logging.logger "editor" 15 local logger = Logging.logger "editor"
16 16
17 17
18 local new_window 18 local new_window
19 19
20 local function make_menu_bar() 20 local function make_menu_bar(window)
21 local menu_bar = new_menu_bar() 21 local menu_bar = new_menu_bar()
22 local file_menu = new_menu("File") 22 local file_menu = new_menu()
23 local new_file = new_menu_item() 23 file_menu.text = "File"
24 new_file.text = "New File" 24 local new_file = new_menu_item()
25 new_file.add_action_listener(function() 25 new_file.text = "New File"
26 new_window() 26 new_file.accelerator = "meta N"
27 end) 27 new_file.add_action_listener(function()
28 file_menu.add(new_file) 28 new_window()
29 menu_bar.add(file_menu) 29 end)
30 file_menu.add(new_file)
31 local open = new_menu_item()
32 open.text = "Open..."
33 open.accelerator = "meta O"
34 open.add_action_listener(function()
35 local file_chooser = window.frame.file_chooser_load()
36 if window.file ~= nil then
37 file_chooser.directory = window.file.parent()
38 end
39 file_chooser.visible = true
40 local file = file_chooser.file
41 if file ~= nil then
42 new_window(file)
43 end
44 end)
45 file_menu.add(open)
46 menu_bar.add(file_menu)
30 return menu_bar 47 return menu_bar
31 end 48 end
32 49
33 local n_windows = 0 50 local n_windows = 0
34 51
35 function new_window() 52 function new_window(file)
36 local frame = new_frame() 53 local frame = new_frame()
37 frame.title = "untitled" 54 frame.title = file and file.to_string() or "untitled"
38 frame.add_close_listener(function() 55 frame.add_close_listener(function()
39 n_windows = n_windows - 1 56 n_windows = n_windows - 1
40 if n_windows == 0 then 57 if n_windows == 0 then
41 Luan.exit() 58 Luan.exit()
42 end 59 end
43 end) 60 end)
44 local text_area = new_text_area() 61 local text_area = new_text_area()
62 if file ~= nil then
63 text_area.text = file.read_text()
64 end
45 text_area.rows = 10 65 text_area.rows = 10
46 text_area.columns = 20 66 text_area.columns = 20
47 text_area.wrap_style_word = true 67 text_area.wrap_style_word = true
48 text_area.line_wrap = true 68 text_area.line_wrap = true
49 text_area.tab_size = 4 69 text_area.tab_size = 4
50 text_area.set_font{ family="Monospaced", size=13 } 70 text_area.set_font{ family="Monospaced", size=13 }
71 text_area.select(0,0)
51 --print(text_area.line_count) 72 --print(text_area.line_count)
52 local scroll_pane = new_scroll_pane(text_area) 73 local scroll_pane = new_scroll_pane(text_area)
53 local list = new_list() 74 local list = new_list()
54 list.add_element("1") 75 list.add_element("1")
55 list.add_element("2") 76 list.add_element("2")
56 list.add_element("3") 77 list.add_element("3")
57 --scroll_pane.set_row_header_view(list) 78 --scroll_pane.set_row_header_view(list)
58 frame.add(scroll_pane) 79 frame.add(scroll_pane)
59 local menu_bar = make_menu_bar() 80 local window = {
81 frame = frame
82 file = file
83 }
84 local menu_bar = make_menu_bar(window)
60 frame.set_menu_bar(menu_bar) 85 frame.set_menu_bar(menu_bar)
61 frame.pack() 86 frame.pack()
62 frame.visible = true 87 frame.visible = true
63 text_area.request_focus_in_window() 88 text_area.request_focus_in_window()
64 n_windows = n_windows + 1 89 n_windows = n_windows + 1
65 end 90 end
66 91
67 Swing.run(new_window) 92 Swing.run(function()
93 new_window()
94 end)