changeset 21:79f060db4d79

work
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 08 Apr 2025 19:43:16 -0600
parents 1bfd4a2d6d4e
children b2d9b3836c2b
files dev.sh editor.luan
diffstat 2 files changed, 137 insertions(+), 179 deletions(-) [+]
line wrap: on
line diff
--- a/dev.sh	Tue Apr 08 13:42:59 2025 -0600
+++ b/dev.sh	Tue Apr 08 19:43:16 2025 -0600
@@ -1,1 +1,1 @@
-java -Xdock:name="Luan Editor" -classpath $CLASSPATH luan.Luan editor.luan "$@" 2> >(grep --line-buffered -v 'openAndSavePanelService' >&2) 2>&1 | tee err
+java -Xdock:name="Luan Editor" -classpath $CLASSPATH luan.Luan editor.luan "$@" 2>&1 | grep --line-buffered -v 'openAndSavePanelService' | tee err
--- a/editor.luan	Tue Apr 08 13:42:59 2025 -0600
+++ b/editor.luan	Tue Apr 08 19:43:16 2025 -0600
@@ -19,7 +19,9 @@
 local new_scroll_pane = require("luan:swing/Scroll_pane.luan").new or error()
 local new_text_area_line_numbers = require("luan:swing/Text_area_line_numbers.luan").new or error()
 local new_menu_bar = require("luan:swing/Menu_bar.luan").new or error()
-local new_menu = require("luan:swing/Menu.luan").new or error()
+local Menu = require "luan:swing/Menu.luan"
+local new_menu = Menu.new or error()
+local separator = Menu.separator or error()
 local new_menu_item = require("luan:swing/Menu_item.luan").new or error()
 local new_check_box_menu_item = require("luan:swing/Check_box_menu_item.luan").new or error()
 local int_to_color = require("luan:swing/Color.luan").int_to_color or error()
@@ -48,187 +50,143 @@
 end
 
 local function make_menu_bar(window)
-	local menu_bar = new_menu_bar()
-	do
-		local file_menu = new_menu()
-		file_menu.text = "File"
-		do
-			local new_file = new_menu_item{
-				text = "New File"
-				accelerator = "meta N"
-				action_listener = function(_)
-					new_window()
-				end
-			}
-			file_menu.add(new_file)
-		end
-		do
-			local open = new_menu_item{
-				text = "Open..."
-				accelerator = "meta O"
-				action_listener = action_listener(window.open)
-			}
-			file_menu.add(open)
-		end
-		local revert
-		do
-			local save = new_menu_item{
-				text = "Save"
-				accelerator = "meta S"
-				action_listener = function(_)
-					if window.save() then
-						revert.set_enabled(true)
-					end
-				end
-			}
-			file_menu.add(save)
-		end
-		do
-			revert = new_menu_item{
-				text = "Revert"
-				enabled = window.has_file
-				action_listener = action_listener(window.revert)
-			}
-			file_menu.add(revert)
-		end
-		menu_bar.add(file_menu)
+	local document = window.text_area.document
+	local revert = new_menu_item{
+		text = "Revert"
+		enabled = window.has_file
+		action_listener = action_listener(window.revert)
+	}
+	local undo = new_menu_item{
+		text = "Undo"
+		accelerator = "meta Z"
+		action_listener = action_listener(document.undo)
+	}
+	local redo = new_menu_item{
+		text = "Redo"
+		accelerator = "meta shift Z"
+		action_listener = action_listener(document.redo)
+	}
+	local function update_undo_redo()
+		undo.set_enabled(document.can_undo())
+		redo.set_enabled(document.can_redo())
 	end
-	do
-		local edit_menu = new_menu()
-		edit_menu.text = "Edit"
-		local document = window.text_area.document
-		local undo, redo
-		do
-			undo = new_menu_item{
-				text = "Undo"
-				accelerator = "meta Z"
-				action_listener = action_listener(document.undo)
-			}
-			edit_menu.add(undo)
-		end
-		do
-			redo = new_menu_item{
-				text = "Redo"
-				accelerator = "meta shift Z"
-				action_listener = action_listener(document.redo)
-			}
-			edit_menu.add(redo)
-		end
-		local function update_undo_redo()
-			undo.set_enabled(document.can_undo())
-			redo.set_enabled(document.can_redo())
-		end
-		edit_menu.dont_gc(update_undo_redo)
-		update_undo_redo()
-		document.add_undo_listener(update_undo_redo)
-		edit_menu.add_separator()
-		do
-			local cut = new_menu_item{
-				text = "Cut"
-				accelerator = "meta X"
-				action_listener = action_listener(window.text_area.cut)
-			}
-			edit_menu.add(cut)
-		end
-		do
-			local copy = new_menu_item{
-				text = "Copy"
-				accelerator = "meta C"
-				action_listener = action_listener(window.text_area.copy)
+	window.update_undo_redo = update_undo_redo  -- dont gc
+	update_undo_redo()
+	document.add_undo_listener(update_undo_redo)
+
+	return new_menu_bar{
+		menus = {
+			new_menu{
+				text = "File"
+				menu_items = {
+					new_menu_item{
+						text = "New File"
+						accelerator = "meta N"
+						action_listener = function(_)
+							new_window()
+						end
+					}
+					new_menu_item{
+						text = "Open..."
+						accelerator = "meta O"
+						action_listener = action_listener(window.open)
+					}
+					new_menu_item{
+						text = "Save"
+						accelerator = "meta S"
+						action_listener = function(_)
+							if window.save() then
+								revert.set_enabled(true)
+							end
+						end
+					}
+					revert
+				}
 			}
-			edit_menu.add(copy)
-		end
-		do
-			local paste = new_menu_item{
-				text = "Paste"
-				accelerator = "meta V"
-				action_listener = action_listener(window.text_area.paste)
-			}
-			edit_menu.add(paste)
-		end
-		edit_menu.add_separator()
-		do
-			local indent = new_menu_item{
-				text = "Indent"
-				accelerator = "meta CLOSE_BRACKET"
-				action_listener = action_listener(window.indent)
-			}
-			edit_menu.add(indent)
-		end
-		do
-			local unindent = new_menu_item{
-				text = "Unindent"
-				accelerator = "meta OPEN_BRACKET"
-				action_listener = action_listener(window.unindent)
-			}
-			edit_menu.add(unindent)
-		end
-		edit_menu.add_separator()
-		do
-			local select_all = new_menu_item{
-				text = "Select All"
-				accelerator = "meta A"
-				action_listener = action_listener(window.text_area.select_all)
-			}
-			edit_menu.add(select_all)
-		end
-		edit_menu.add_separator()
-		do
-			local find = new_menu_item{
-				text = "Find and Replace"
-				accelerator = "meta F"
-				action_listener = action_listener(window.show_find_dialog)
+			new_menu{
+				text = "Edit"
+				menu_items = {
+					undo
+					redo
+					separator
+					new_menu_item{
+						text = "Cut"
+						accelerator = "meta X"
+						action_listener = action_listener(window.text_area.cut)
+					}
+					new_menu_item{
+						text = "Copy"
+						accelerator = "meta C"
+						action_listener = action_listener(window.text_area.copy)
+					}
+					new_menu_item{
+						text = "Paste"
+						accelerator = "meta V"
+						action_listener = action_listener(window.text_area.paste)
+					}
+					separator
+					new_menu_item{
+						text = "Indent"
+						accelerator = "meta CLOSE_BRACKET"
+						action_listener = action_listener(window.indent)
+					}
+					new_menu_item{
+						text = "Unindent"
+						accelerator = "meta OPEN_BRACKET"
+						action_listener = action_listener(window.unindent)
+					}
+					separator
+					new_menu_item{
+						text = "Select All"
+						accelerator = "meta A"
+						action_listener = action_listener(window.text_area.select_all)
+					}
+					separator
+					new_menu_item{
+						text = "Find and Replace"
+						accelerator = "meta F"
+						action_listener = action_listener(window.show_find_dialog)
+					}
+				}
 			}
-			edit_menu.add(find)
-		end
-		menu_bar.add(edit_menu)
-	end
-	do
-		local view_menu = new_menu()
-		view_menu.text = "View"
-		do
-			local word_wrap = new_check_box_menu_item{
-				text = "Word Wrap"
-				state = window.text_area.line_wrap
-				action_listener = function(event)
-					window.text_area.line_wrap = event.source.state
-				end
+			new_menu{
+				text = "View"
+				menu_items = {
+					new_check_box_menu_item{
+						text = "Word Wrap"
+						state = window.text_area.line_wrap
+						action_listener = function(event)
+							window.text_area.line_wrap = event.source.state
+						end
+					}
+					new_check_box_menu_item{
+						text = "Show Whitespace"
+						action_listener = function(event)
+							window.text_area.show_whitespace(event.source.state)
+						end
+					}
+					new_menu_item{
+						text = "Show Cursor Column"
+						action_listener = function(_)
+							show_message_dialog( window.frame, "Cursor Column: "..window.cursor_column() )
+						end
+					}
+					new_menu_item{
+						text = "Goto Line"
+						accelerator = "meta G"
+						action_listener = function(_)
+							local input = show_input_dialog( window.frame, "Goto line" )
+							--logger.info("input "..input)
+							local line = input and to_number(input)
+							if line ~= nil then
+								window.goto(line)
+							end
+						end
+					}
+				}
 			}
-			view_menu.add(word_wrap)
-		end
-		do
-			local show_whitespace = new_check_box_menu_item()
-			show_whitespace.text = "Show Whitespace"
-			show_whitespace.add_action_listener(function(_)
-				window.text_area.show_whitespace(show_whitespace.state)
-			end)
-			view_menu.add(show_whitespace)
-		end
-		do
-			local show_column = new_menu_item()
-			show_column.text = "Show Cursor Column"
-			show_column.add_action_listener(function(_)
-				show_message_dialog( window.frame, "Cursor Column: "..window.cursor_column() )
-			end)
-			view_menu.add(show_column)
-		end
-		do
-			local goto = new_menu_item()
-			goto.text = "Goto Line"
-			goto.accelerator = "meta G"
-			goto.add_action_listener(function(_)
-				local input = show_input_dialog( window.frame, "Goto line" )
-				--logger.info("input "..input)
-				local line = input and to_number(input)
-				if line ~= nil then
-					window.goto(line)
-				end
-			end)
-			view_menu.add(goto)
-		end
-		menu_bar.add(view_menu)
-	end
-	return menu_bar
+		}
+	}
 end
 
 local function make_find_dialog(window)