view src/luan/modules/swing/Text_area.luan @ 1885:d1708f8d4923

swing
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 08 Apr 2025 23:02:14 -0600
parents 708e7f047c59
children bea843af3422
line wrap: on
line source

local Luan = require "luan:Luan.luan"
local error = Luan.error
local set_metatable = Luan.set_metatable or error()
local Utils = require "luan:swing/Utils.luan"
local fail = Utils.fail or error()
local make_metatable = Utils.make_metatable or error()
local check_empty = Utils.check_empty or error()
local Text_component = require("luan:swing/Text_component.luan")
local super__index = Text_component.__index or error()
local super__new_index = Text_component.__new_index or error()
local super_construct = Text_component.construct or error()
require "java"
local TextAreaLuan = require "java:luan.modules.swing.TextAreaLuan"


local Text_area = {}

function Text_area.__index(text_area,key)
	local rtn = super__index(text_area,key)
	if rtn ~= fail then return rtn end
	if key == "line_wrap" then
		return text_area.java.getLineWrap()
	end
	if key == "wrap_style_word" then
		return text_area.java.getWrapStyleWord()
	end
	if key == "tab_size" then
		return text_area.java.getTabSize()
	end
	if key == "rows" then
		return text_area.java.getRows()
	end
	if key == "columns" then
		return text_area.java.getColumns()
	end
	if key == "line_count" then
		return text_area.java.getLineCount()
	end
	return fail
end

function Text_area.__new_index(text_area,key,value)
	local rtn = super__new_index(text_area,key,value)
	if rtn ~= fail then return end
	if key == "line_wrap" then
		text_area.java.setLineWrap(value)
		return
	end
	if key == "wrap_style_word" then
		text_area.java.setWrapStyleWord(value)
		return
	end
	if key == "tab_size" then
		text_area.java.setTabSize(value)
		return
	end
	if key == "rows" then
		text_area.java.setRows(value)
		return
	end
	if key == "columns" then
		text_area.java.setColumns(value)
		return
	end
	return fail
end

local mt = make_metatable(Text_area)

function Text_area.new(props)
	local jtext_area = TextAreaLuan.new()
	local text_area = { java = jtext_area }
	super_construct(text_area,props)
	check_empty(props)
	text_area.show_whitespace = jtext_area.showWhitespace
	function text_area.get_line_from_position(pos)
		return jtext_area.getLineOfOffset(pos-1) + 1
	end
	function text_area.get_line_start_position(line)
		return jtext_area.getLineStartOffset(line-1) + 1
	end
	function text_area.get_line_end_position(line)
		return jtext_area.getLineEndOffset(line-1) + 1
	end
	function text_area.insert(text,pos)
		return jtext_area.insert(text,pos-1)
	end
	function text_area.replace(start_pos,length,text)
		return jtext_area.getDocument().replace(start_pos-1,length,text)
	end
	set_metatable(text_area,mt)
	return text_area
end

return Text_area