changeset 1894:801e1fe227f9

swing
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 13 Apr 2025 16:01:33 -0600
parents 0170d482b5d5
children 091b503f511c
files src/luan/modules/String.luan src/luan/modules/StringLuan.java src/luan/modules/swing/Abstract_button.luan src/luan/modules/swing/TextAreaLuan.java
diffstat 4 files changed, 29 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/luan/modules/String.luan	Sun Apr 13 12:25:08 2025 -0600
+++ b/src/luan/modules/String.luan	Sun Apr 13 16:01:33 2025 -0600
@@ -6,6 +6,7 @@
 local String = {}
 
 String.char = StringLuan.char_
+String.char_to_int = StringLuan.char_to_int
 String.contains = StringLuan.contains
 String.digest_message = StringLuan.digest_message
 String.encode = StringLuan.encode
--- a/src/luan/modules/StringLuan.java	Sun Apr 13 12:25:08 2025 -0600
+++ b/src/luan/modules/StringLuan.java	Sun Apr 13 16:01:33 2025 -0600
@@ -164,4 +164,10 @@
 		return GoodUtils.replace(s,target,replacement);
 	}
 
+	public static int char_to_int(String s,Integer index) throws LuanException {
+		Utils.checkNotNull(s);
+		int i = index==null ? 0 : index-1;
+		return s.codePointAt(i);
+	}
+
 }
--- a/src/luan/modules/swing/Abstract_button.luan	Sun Apr 13 12:25:08 2025 -0600
+++ b/src/luan/modules/swing/Abstract_button.luan	Sun Apr 13 16:01:33 2025 -0600
@@ -1,5 +1,7 @@
 local Luan = require "luan:Luan.luan"
 local error = Luan.error
+local String = require "luan:String.luan"
+local char_to_int = String.char_to_int or error()
 local Utils = require "luan:swing/Utils.luan"
 local fail = Utils.fail or error()
 local make_metatable = Utils.make_metatable or error()
@@ -9,6 +11,7 @@
 local super__new_index = Component.__new_index or error()
 local super_construct = Component.construct or error()
 require "java"
+local KeyEvent = require "java:java.awt.event.KeyEvent"
 local SwingLuan = require "java:luan.modules.swing.SwingLuan"
 local newActionListener = SwingLuan.newActionListener
 local Logging = require "luan:logging/Logging.luan"
@@ -49,6 +52,9 @@
 	if margin~=nil then jbutton.setMargin(margin) end
 	local action = delete(props,"action")
 	if action~=nil then jbutton.setActionCommand(action) end
+	-- mnemonic doesn't work on Mac
+	local mnemonic = delete(props,"mnemonic")
+	if mnemonic~=nil then jbutton.setMnemonic(KeyEvent.getExtendedKeyCodeForChar(char_to_int(mnemonic))) end
 	local action_listener = delete(props,"action_listener")
 	if action_listener~=nil then jbutton.addActionListener(newActionListener(action_listener)) end
 	function button.add_action_listener(action_listener)
--- a/src/luan/modules/swing/TextAreaLuan.java	Sun Apr 13 12:25:08 2025 -0600
+++ b/src/luan/modules/swing/TextAreaLuan.java	Sun Apr 13 16:01:33 2025 -0600
@@ -4,6 +4,8 @@
 import java.awt.Graphics;
 import java.awt.Color;
 import javax.swing.JTextArea;
+import javax.swing.UIManager;
+import javax.swing.text.DefaultCaret;
 import javax.swing.text.BadLocationException;
 import goodjava.logging.Logger;
 import goodjava.logging.LoggerFactory;
@@ -12,8 +14,22 @@
 public class TextAreaLuan extends JTextArea {
 	private static final Logger logger = LoggerFactory.getLogger(TextAreaLuan.class);
 
+	private static final DefaultCaret flatLafCaret = new DefaultCaret() {
+		@Override public void setSelectionVisible(boolean visible) {
+			super.setSelectionVisible(true);
+		}
+	};
+
 	private boolean showWhitespace = false;
 
+	public TextAreaLuan() {
+		super();
+		//logger.info(UIManager.getLookAndFeel().getName());
+		if( UIManager.getLookAndFeel().getName().startsWith("FlatLaf") ) {
+			setCaret(flatLafCaret);
+		}
+	}
+
 	public int getLineHeight(int line) throws BadLocationException {
 		if( !getLineWrap() )
 			return getRowHeight();