changeset 1:9aa38deb5883

add open
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 31 Mar 2025 13:49:21 -0600
parents 090f9b3bccf8
children f38f6e903369
files dev.sh editor.luan
diffstat 2 files changed, 41 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/dev.sh	Sun Mar 30 13:17:48 2025 -0600
+++ b/dev.sh	Mon Mar 31 13:49:21 2025 -0600
@@ -1,1 +1,1 @@
-java -Xdock:name="Luan Editor" -classpath $CLASSPATH luan.Luan editor.luan
+java -Xdock:name="Luan Editor" -classpath $CLASSPATH luan.Luan editor.luan 2> >(grep -v 'openAndSavePanelService' >&2)
--- a/editor.luan	Sun Mar 30 13:17:48 2025 -0600
+++ b/editor.luan	Mon Mar 31 13:49:21 2025 -0600
@@ -17,24 +17,41 @@
 
 local new_window
 
-local function make_menu_bar()
+local function make_menu_bar(window)
 	local menu_bar = new_menu_bar()
-	local file_menu = new_menu("File")
-	local new_file = new_menu_item()
-	new_file.text = "New File"
-	new_file.add_action_listener(function()
-		new_window()
-	end)
-	file_menu.add(new_file)
-	menu_bar.add(file_menu)
+		local file_menu = new_menu()
+		file_menu.text = "File"
+			local new_file = new_menu_item()
+			new_file.text = "New File"
+			new_file.accelerator = "meta N"
+			new_file.add_action_listener(function()
+				new_window()
+			end)
+			file_menu.add(new_file)
+			local open = new_menu_item()
+			open.text = "Open..."
+			open.accelerator = "meta O"
+			open.add_action_listener(function()
+				local file_chooser = window.frame.file_chooser_load()
+				if window.file ~= nil then
+					file_chooser.directory = window.file.parent()
+				end
+				file_chooser.visible = true
+				local file = file_chooser.file
+				if file ~= nil then
+					new_window(file)
+				end
+			end)
+			file_menu.add(open)
+		menu_bar.add(file_menu)
 	return menu_bar
 end
 
 local n_windows = 0
 
-function new_window()
+function new_window(file)
 	local frame = new_frame()
-	frame.title = "untitled"
+	frame.title = file and file.to_string() or "untitled"
 	frame.add_close_listener(function()
 		n_windows = n_windows - 1
 		if n_windows == 0 then
@@ -42,12 +59,16 @@
 		end
 	end)
 	local text_area = new_text_area()
+	if file ~= nil then
+		text_area.text = file.read_text()
+	end
 	text_area.rows = 10
 	text_area.columns = 20
 	text_area.wrap_style_word = true
 	text_area.line_wrap = true
 	text_area.tab_size = 4
 	text_area.set_font{ family="Monospaced", size=13 }
+	text_area.select(0,0)
 	--print(text_area.line_count)
 	local scroll_pane = new_scroll_pane(text_area)
 	local list = new_list()
@@ -56,7 +77,11 @@
 	list.add_element("3")
 	--scroll_pane.set_row_header_view(list)
 	frame.add(scroll_pane)
-	local menu_bar = make_menu_bar()
+	local window = {
+		frame = frame
+		file = file
+	}
+	local menu_bar = make_menu_bar(window)
 	frame.set_menu_bar(menu_bar)
 	frame.pack()
 	frame.visible = true
@@ -64,4 +89,6 @@
 	n_windows = n_windows + 1
 end
 
-Swing.run(new_window)
+Swing.run(function()
+	new_window()
+end)