Mercurial Hosting > editor
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) |