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