changeset 18:fd6d0162e924

start find
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 07 Apr 2025 21:15:38 -0600
parents 273aebbcf90b
children ba59fdcf41f3
files editor.luan
diffstat 1 files changed, 51 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
diff -r 273aebbcf90b -r fd6d0162e924 editor.luan
--- a/editor.luan	Sun Apr 06 19:21:25 2025 -0600
+++ b/editor.luan	Mon Apr 07 21:15:38 2025 -0600
@@ -17,16 +17,24 @@
 local new_label = require("luan:swing/Label.luan").new or error()
 local new_text_area = require("luan:swing/Text_area.luan").new or error()
 local new_scroll_pane = require("luan:swing/Scroll_pane.luan").new or error()
-local new_text_area_line_numbers = require("luan:swing/TextAreaLineNumbers.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 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()
-local create_empty_border = require("luan:swing/Border.luan").create_empty_border or error()
+local Border = require "luan:swing/Border.luan"
+local create_empty_border = Border.create_empty_border or error()
+local create_line_border = Border.create_line_border or error()
+local Layout = require "luan:swing/Layout.luan"
+local new_flow_layout = Layout.new_flow_layout or error()
+local new_box_layout = Layout.new_box_layout or error()
 local Option_pane = require "luan:swing/Option_pane.luan"
 local show_message_dialog = Option_pane.show_message_dialog or error()
 local show_input_dialog = Option_pane.show_input_dialog or error()
+local new_dialog = require("luan:swing/Dialog.luan").new or error()
+local new_panel = require("luan:swing/Component.luan").new_panel or error()
+local new_button = require("luan:swing/Button.luan").new or error()
 local Logging = require "luan:logging/Logging.luan"
 local logger = Logging.logger "editor"
 
@@ -144,6 +152,14 @@
 			select_all.add_action_listener(window.text_area.select_all)
 			edit_menu.add(select_all)
 		end
+		edit_menu.add_separator()
+		do
+			local find = new_menu_item()
+			find.text = "Find and Replace"
+			find.accelerator = "meta F"
+			find.add_action_listener(window.show_find_dialog)
+			edit_menu.add(find)
+		end
 		menu_bar.add(edit_menu)
 	end
 	do
@@ -179,7 +195,7 @@
 			goto.text = "Goto Line"
 			goto.accelerator = "meta G"
 			goto.add_action_listener(function()
-				local input = show_input_dialog( window.frame, "Cursor Column: "..window.cursor_column() )
+				local input = show_input_dialog( window.frame, "Goto line" )
 				--logger.info("input "..input)
 				local line = input and to_number(input)
 				if line ~= nil then
@@ -193,6 +209,37 @@
 	return menu_bar
 end
 
+local function make_find_dialog(window)
+	local dialog = new_dialog(window.frame)
+	local root = dialog.component
+	root.set_layout(new_box_layout(root,"y_axis"))
+	do
+		local buttons = new_panel()
+		buttons.set_layout(new_flow_layout("left"))
+		--buttons.border = create_empty_border(8,8,8,8)
+		buttons.border = create_line_border(int_to_color(0))
+
+		local find_next = new_button()
+		find_next.text = "Find Next"
+		buttons.add(find_next)
+
+		local find_prev = new_button()
+		find_prev.text = "Find Previous"
+		buttons.add(find_prev)
+
+		root.add(buttons)
+	end
+	dialog.pack()
+	local was_shown = false
+	function window.show_find_dialog()
+		if not was_shown then
+			was_shown = true
+			dialog.move_into_owner()
+		end
+		dialog.visible = true
+	end
+end
+
 local n_windows = 0
 local documents = {}
 
@@ -332,6 +379,7 @@
 		local pos = text_area.get_line_start_position(line)
 		text_area.set_selection(pos)
 	end
+	make_find_dialog(window)
 	local menu_bar = make_menu_bar(window)
 	frame.set_menu_bar(menu_bar)
 	frame.pack()