Difference between revisions of "Lua API/ko:Interface"

From The Powder Toy
Jump to: navigation, search
(Created page with "- 이 페이지는 아직 완벽히 번역되지 않았습니다. 이 카테고리는 버튼, 레이블 그리고 체크박스와 같은 UI 컴포넌트를 포함합니다. 가...")
 
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
- 이 페이지는 아직 완벽히 번역되지 않았습니다.
 
- 이 페이지는 아직 완벽히 번역되지 않았습니다.
 +
 
이 카테고리는 버튼, 레이블 그리고 체크박스와 같은 UI 컴포넌트를 포함합니다. 가장 우선순위가 높은 창 관리자와 입력 이벤트에 관여할 수 있습니다.
 
이 카테고리는 버튼, 레이블 그리고 체크박스와 같은 UI 컴포넌트를 포함합니다. 가장 우선순위가 높은 창 관리자와 입력 이벤트에 관여할 수 있습니다.
  
Line 8: Line 9:
 
  boolean Component:visible()
 
  boolean Component:visible()
 
컴포넌트의 가시성을 반환합니다.
 
컴포넌트의 가시성을 반환합니다.
 +
 
반환 값 : 가시성 여부(true/false)
 
반환 값 : 가시성 여부(true/false)
  
 
  nil Component:visible(boolean visible)
 
  nil Component:visible(boolean visible)
 
컴포넌트의 가시성을 설정합니다.
 
컴포넌트의 가시성을 설정합니다.
 +
 
visible : 가시성 여부(true/false 또는 boolean 변수)
 
visible : 가시성 여부(true/false 또는 boolean 변수)
  
Line 17: Line 20:
 
  number, number Component:size()
 
  number, number Component:size()
 
컴포넌트의 너비와 높이를 반환합니다.
 
컴포넌트의 너비와 높이를 반환합니다.
 +
 
반환 값 : 순서대로 너비, 높이
 
반환 값 : 순서대로 너비, 높이
  
 
  nil Component:size(number width, number height)
 
  nil Component:size(number width, number height)
 
width와 height으로 컴포넌트의 크기를 설정합니다.
 
width와 height으로 컴포넌트의 크기를 설정합니다.
 +
 
width : 너비(정수)
 
width : 너비(정수)
 +
 
height : 높이(정수)
 
height : 높이(정수)
  
Line 27: Line 33:
 
  number, number Component:position()
 
  number, number Component:position()
 
컴포넌트의 x y 좌표를 반환합니다.
 
컴포넌트의 x y 좌표를 반환합니다.
 +
 
반환 값 : 순서대로 x, y(모두 정수)
 
반환 값 : 순서대로 x, y(모두 정수)
  
 
  nil Component:position(number x, number y)
 
  nil Component:position(number x, number y)
 
컴포넌트의 좌표를 설정합니다.
 
컴포넌트의 좌표를 설정합니다.
 +
 
x : x 좌표(정수)
 
x : x 좌표(정수)
 +
 
y : y 좌표(정수)
 
y : y 좌표(정수)
  
Line 37: Line 46:
 
  Button Button:new(number x, number y, number width, number height, [string text = "", [string tooltip = ""]])
 
  Button Button:new(number x, number y, number width, number height, [string text = "", [string tooltip = ""]])
 
Component 클래스를 상속받으며, 클릭하였을 때 "action"을 실행합니다.
 
Component 클래스를 상속받으며, 클릭하였을 때 "action"을 실행합니다.
 +
 
x, y : 순서대로 x, y 좌표(정수)
 
x, y : 순서대로 x, y 좌표(정수)
 +
 
width, height : 순서대로 너비, 높이(정수)
 
width, height : 순서대로 너비, 높이(정수)
 +
 
text : 버튼 안에 들어갈 문자열(문자열)
 
text : 버튼 안에 들어갈 문자열(문자열)
 +
 
tooltip : 버튼의 툴팁(문자열)
 
tooltip : 버튼의 툴팁(문자열)
  
 
==== Button:action ====
 
==== Button:action ====
 
  nil Button:action(function(sender) actionListener)
 
  nil Button:action(function(sender) actionListener)
Sets the listener for button actions
+
버튼을 클릭했을 때의 액션을 설정합니다.
 +
 
 
'''Example:'''
 
'''Example:'''
 
<syntaxhighlight lang="lua">
 
<syntaxhighlight lang="lua">
local newButton = Button:new(10, 10, 100, 17, "Press to change text")
+
--실제로는 한글로 사용하면 안됩니다.
newButton:action(function(sender) sender:text("Text changed") end)
+
local newButton = Button:new(10, 10, 100, 17, "누르면 텍스트가 바뀝니다")
 +
newButton:action(function(sender) sender:text("텍스트가 바뀌었습니다") end)
 
interface.addComponent(newButton)
 
interface.addComponent(newButton)
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 54: Line 69:
 
==== Button:text ====
 
==== Button:text ====
 
  string Button:text()
 
  string Button:text()
Returns the button text
+
버튼의 텍스트를 반환합니다.
 +
 
 +
반환 값 : 버튼의 텍스트
  
 
  nil Button:text(string text)
 
  nil Button:text(string text)
Sets the text of the button
+
버튼의 텍스트를 설정합니다.
 +
 
 +
text : 버튼의 텍스트(문자열)
  
 
==== Button:enabled ====
 
==== Button:enabled ====
 
  boolean Button:enabled()
 
  boolean Button:enabled()
Returns the enabled state of the button
+
버튼의 활성화 여부를 반환합니다.
 +
 
 +
반환 값 : 버튼의 활성화 여부
  
 
  nil Button:enabled(boolean enabled)
 
  nil Button:enabled(boolean enabled)
Sets the enabled state of the button
+
버튼의 활성화 여부를 설정합니다.
 +
 
 +
enabled : 버튼의 활성화 여부(true/false)
  
=== ProgressBar ===
+
=== ProgressBar 클래스 ===
 
  ProgressBar ProgressBar:new(number x, number y, number width, number height, number progress, string status)
 
  ProgressBar ProgressBar:new(number x, number y, number width, number height, number progress, string status)
Extends Component, used to indicate progress for long running tasks
+
Component 클래스를 상속받으며, 작업을 진행하는 과정을 보여주기 위해 사용됩니다.
 +
 
 +
x, y : 순서대로 x, y 좌표(정수)
 +
 
 +
width, height : 순서대로 너비, 높이(정수)
 +
 
 +
progress : ProgressBar의 길이(1~100)
 +
 
 +
status : ProgressBar의 상태(문자열)
  
 
==== ProgressBar:progress ====
 
==== ProgressBar:progress ====
 
  number ProgressBar:progress()
 
  number ProgressBar:progress()
Returns the progress value
+
진행 상태의 값을 반환합니다.
 +
 
 +
반환 값 : 진행 상태(1~100)
  
 
  nil ProgressBar:progress(number progress)
 
  nil ProgressBar:progress(number progress)
Sets the progress value
+
진행 상태를 설정합니다.
 +
 
 +
progress : 진행 상태로 설정할 값(1~100)
  
Progress ranges from 0 to 100, but a special case of <tt>-1</tt> will change the behaviour of the progress bar to intermediate (constantly scrolling to indicate progress)
+
ProgressBar의 범위는 0부터 최대 100까지이지만, -1의 경우에는 ProgressBar의 진행 상태를 중간으로 설정하게 됩니다.
 +
(constantly scrolling to indicate progress)
  
 
==== ProgressBar:status ====
 
==== ProgressBar:status ====
 
  string ProgressBar:status()
 
  string ProgressBar:status()
Returns the progress bar status
+
ProgressBar의 상태를 반환합니다.
 +
 
 +
반환 값 : ProgressBar의 상태
  
 
  nil ProgressBar:status(string status)
 
  nil ProgressBar:status(string status)
Sets the progress bar status
+
ProgressBar의 상태를 설정합니다.
 +
 
 +
status : ProgressBar의 상태로 설정할 값(문자열)
  
 
Status is simple a text representation of the current action being performed, for example "Working" or just a percentage
 
Status is simple a text representation of the current action being performed, for example "Working" or just a percentage
 +
"상태"는 ProgressBar이 실행하는 액션 또는 현재 상태를 간단히 나타내는 텍스트입니다. 예를 들어 "작동 중"이라거나, 또는 간단히 백분율로 표시할 수도 있습니다.
  
=== Slider ===
+
=== Slider 클래스 ===
 
  Slider Slider:new(number x, number y, number width, number height, [string steps = ""])
 
  Slider Slider:new(number x, number y, number width, number height, [string steps = ""])
Extends Component, fires "onValueChanged" when the value is changed (i.e used by the user)
+
Component 클래스를 상속받으며, 값이 바뀌었을 때 "onValueChanged"를 작동시킵니다.
 +
 
 +
x, y : 순서대로 x, y 좌표(정수)
 +
 
 +
width, height : 순서대로 너비, 높이(정수)
 +
 
 +
steps : 슬라이더의 최대값(정수)
  
 
==== Slider:action ====
 
==== Slider:action ====
 
  nil Slider:onValueChanged(function(sender, value) actionListener)
 
  nil Slider:onValueChanged(function(sender, value) actionListener)
Sets the listener for slider actions
+
슬라이더의 값이 바뀌었을 때 실행할 메소드를 설정합니다.
 +
 
 +
function(sender, value) actionListener : 슬라이더의 값이 바뀌었을 때 실행할 메소드
  
 
==== Slider:value ====
 
==== Slider:value ====
Line 195: Line 244:
 
Pop a Window off the top of the modal stack. If the given Window is not the top item in the stack, this will have no effect,
 
Pop a Window off the top of the modal stack. If the given Window is not the top item in the stack, this will have no effect,
  
== Example ==
+
== 예제 코드 ==
This code has examples of some of the features of the interface API, it shows a window with various components with some testing behaviour.
+
이 코드는 interface API의 몇몇 기능에 대한 예제로, 테스트를 위한 기능을 가진 다양한 컴포넌트를 포함하는 창을 띄웁니다.
 +
 
 
<syntaxhighlight lang="lua">
 
<syntaxhighlight lang="lua">
-- Test Window
+
-- 아래에 나오는 한글은 모두 영어로 바꿔주십시오.
 +
-- 파우더 토이에서는 한글이 정상적으로 출력되지 않습니다.
 +
 
 +
-- 테스트 창
 
local testWindow = Window:new(-1, -1, 300, 200)
 
local testWindow = Window:new(-1, -1, 300, 200)
  
 
local currentY = 10
 
local currentY = 10
  
--Example label
+
--레이블 예제
local testLabel = Label:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, "This is a test label")
+
local testLabel = Label:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, "이것은 테스트용 레이블입니다")
  
--Example button
+
--버튼 예제
 
local buttonPresses = 1
 
local buttonPresses = 1
 
currentY = currentY + 20
 
currentY = currentY + 20
local testButton = Button:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, "This is a test button")
+
local testButton = Button:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, "이것은 테스트 버튼입니다")
 
testButton:enabled(false)
 
testButton:enabled(false)
 
testButton:action(
 
testButton:action(
 
function(sender)
 
function(sender)
sender:text("Pressed " .. buttonPresses .. " times")
+
sender:text(buttonPresses .. " 번 눌렸습니다")
 
buttonPresses = buttonPresses + 1
 
buttonPresses = buttonPresses + 1
 
end
 
end
 
)
 
)
  
--Example Textbox
+
--텍스트박스 예제
 
currentY = currentY + 20
 
currentY = currentY + 20
local textboxInfo = Label:new(10+((select(1, testWindow:size())/2)-20), currentY, (select(1, testWindow:size())/2)-20, 16, "0 characters")
+
local textboxInfo = Label:new(10+((select(1, testWindow:size())/2)-20), currentY, (select(1, testWindow:size())/2)-20, 16, "문자 0개")
local testTextbox = Textbox:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, "", "[place text here]")
+
local testTextbox = Textbox:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, "", "[여기에 입력을 해주세요]")
 
testTextbox:onTextChanged(
 
testTextbox:onTextChanged(
 
function(sender)
 
function(sender)
textboxInfo:text(sender:text():len().." characters");
+
textboxInfo:text("문자 "..sender:text():len().."");
 
end
 
end
 
)
 
)
  
--Example Checkbox
+
--체크박스 예제
 
currentY = currentY + 20
 
currentY = currentY + 20
local testCheckbox = Checkbox:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, "Unchecked");
+
local testCheckbox = Checkbox:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, "체크되지 않음");
 
testCheckbox:action(
 
testCheckbox:action(
 
function(sender, checked)
 
function(sender, checked)
 
if(checked) then
 
if(checked) then
sender:text("Checked")
+
sender:text("체크됨")
 
else
 
else
sender:text("Unchecked")
+
sender:text("체크되지 않음")
 
end
 
end
 
testButton:enabled(checked);
 
testButton:enabled(checked);
Line 242: Line 295:
 
)
 
)
  
--Example progress bar
+
--Progress Bar 예제
 
currentY = currentY + 20
 
currentY = currentY + 20
local testProgressBar = ProgressBar:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, 0, "Slider: 0");
+
local testProgressBar = ProgressBar:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, 0, "슬라이더: 0");
  
--Example slider
+
--슬라이더 예제
 
currentY = currentY + 20
 
currentY = currentY + 20
 
local testSlider = Slider:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, 10);
 
local testSlider = Slider:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, 10);
Line 252: Line 305:
 
function(sender, value)
 
function(sender, value)
 
testProgressBar:progress(value * 10)
 
testProgressBar:progress(value * 10)
testProgressBar:status("Slider: " .. value)
+
testProgressBar:status("슬라이더: " .. value)
 
end
 
end
 
)
 
)
  
-- Close button
+
-- 닫기 버튼
local closeButton = Button:new(10, select(2, testWindow:size())-26, 100, 16, "Close")
+
local closeButton = Button:new(10, select(2, testWindow:size())-26, 100, 16, "닫기")
  
 
closeButton:action(function() interface.closeWindow(testWindow) end)
 
closeButton:action(function() interface.closeWindow(testWindow) end)
Line 264: Line 317:
 
testWindow:onMouseMove(
 
testWindow:onMouseMove(
 
function(x, y, dx, dy)
 
function(x, y, dx, dy)
testLabel:text("Mouse: "..x..", "..y)
+
testLabel:text("마우스 위치: "..x..", "..y)
 
end
 
end
 
)
 
)

Latest revision as of 12:00, 20 August 2015

- 이 페이지는 아직 완벽히 번역되지 않았습니다.

이 카테고리는 버튼, 레이블 그리고 체크박스와 같은 UI 컴포넌트를 포함합니다. 가장 우선순위가 높은 창 관리자와 입력 이벤트에 관여할 수 있습니다.

클래스

Component 클래스

추상 클래스로, 생성자가 없습니다

Component:visible

boolean Component:visible()

컴포넌트의 가시성을 반환합니다.

반환 값 : 가시성 여부(true/false)

nil Component:visible(boolean visible)

컴포넌트의 가시성을 설정합니다.

visible : 가시성 여부(true/false 또는 boolean 변수)

Component:size

number, number Component:size()

컴포넌트의 너비와 높이를 반환합니다.

반환 값 : 순서대로 너비, 높이

nil Component:size(number width, number height)

width와 height으로 컴포넌트의 크기를 설정합니다.

width : 너비(정수)

height : 높이(정수)

Component:position

number, number Component:position()

컴포넌트의 x y 좌표를 반환합니다.

반환 값 : 순서대로 x, y(모두 정수)

nil Component:position(number x, number y)

컴포넌트의 좌표를 설정합니다.

x : x 좌표(정수)

y : y 좌표(정수)

Button 클래스

Button Button:new(number x, number y, number width, number height, [string text = "", [string tooltip = ""]])

Component 클래스를 상속받으며, 클릭하였을 때 "action"을 실행합니다.

x, y : 순서대로 x, y 좌표(정수)

width, height : 순서대로 너비, 높이(정수)

text : 버튼 안에 들어갈 문자열(문자열)

tooltip : 버튼의 툴팁(문자열)

Button:action

nil Button:action(function(sender) actionListener)

버튼을 클릭했을 때의 액션을 설정합니다.

Example:

--실제로는 한글로 사용하면 안됩니다.
local newButton = Button:new(10, 10, 100, 17, "누르면 텍스트가 바뀝니다")
newButton:action(function(sender) sender:text("텍스트가 바뀌었습니다") end)
interface.addComponent(newButton)

Button:text

string Button:text()

버튼의 텍스트를 반환합니다.

반환 값 : 버튼의 텍스트

nil Button:text(string text)

버튼의 텍스트를 설정합니다.

text : 버튼의 텍스트(문자열)

Button:enabled

boolean Button:enabled()

버튼의 활성화 여부를 반환합니다.

반환 값 : 버튼의 활성화 여부

nil Button:enabled(boolean enabled)

버튼의 활성화 여부를 설정합니다.

enabled : 버튼의 활성화 여부(true/false)

ProgressBar 클래스

ProgressBar ProgressBar:new(number x, number y, number width, number height, number progress, string status)

Component 클래스를 상속받으며, 작업을 진행하는 과정을 보여주기 위해 사용됩니다.

x, y : 순서대로 x, y 좌표(정수)

width, height : 순서대로 너비, 높이(정수)

progress : ProgressBar의 길이(1~100)

status : ProgressBar의 상태(문자열)

ProgressBar:progress

number ProgressBar:progress()

진행 상태의 값을 반환합니다.

반환 값 : 진행 상태(1~100)

nil ProgressBar:progress(number progress)

진행 상태를 설정합니다.

progress : 진행 상태로 설정할 값(1~100)

ProgressBar의 범위는 0부터 최대 100까지이지만, -1의 경우에는 ProgressBar의 진행 상태를 중간으로 설정하게 됩니다. (constantly scrolling to indicate progress)

ProgressBar:status

string ProgressBar:status()

ProgressBar의 상태를 반환합니다.

반환 값 : ProgressBar의 상태

nil ProgressBar:status(string status)

ProgressBar의 상태를 설정합니다.

status : ProgressBar의 상태로 설정할 값(문자열)

Status is simple a text representation of the current action being performed, for example "Working" or just a percentage "상태"는 ProgressBar이 실행하는 액션 또는 현재 상태를 간단히 나타내는 텍스트입니다. 예를 들어 "작동 중"이라거나, 또는 간단히 백분율로 표시할 수도 있습니다.

Slider 클래스

Slider Slider:new(number x, number y, number width, number height, [string steps = ""])

Component 클래스를 상속받으며, 값이 바뀌었을 때 "onValueChanged"를 작동시킵니다.

x, y : 순서대로 x, y 좌표(정수)

width, height : 순서대로 너비, 높이(정수)

steps : 슬라이더의 최대값(정수)

Slider:action

nil Slider:onValueChanged(function(sender, value) actionListener)

슬라이더의 값이 바뀌었을 때 실행할 메소드를 설정합니다.

function(sender, value) actionListener : 슬라이더의 값이 바뀌었을 때 실행할 메소드

Slider:value

number Slider:value()

Returns the value of the slider

nil Slider:value(number value)

Sets the value of the slider

Slider:steps

number Slider:steps()

Returns the number of steps the slider has

nil Slider:steps(number steps)

Sets the number of steps for the slider

Checkbox

Checkbox Checkbox:new(number x, number y, number width, number height, [string text = ""])

Extends Component, fires "onValueChanged" when the checkbox is checked or unchecked

Checkbox:action

nil Checkbox:action(function(sender, checked) actionListener)

Sets the listener for checkbox actions

Checkbox:text

string Checkbox:text()

Returns the checkbox text

nil Checkbox:text(string text)

Sets the text of the checkbox

Checkbox:checked

boolean Checkbox:checked()

Returns the checked state of the checkbox

nil Checkbox:checked(boolean checked)

Sets the checked state of the checkbox

Label

Label Label:new(number x, number y, number width, number height, [string text = ""])

Extends Component, is a simple selectable, readonly text field

Label:text

string Label:text()

Returns the label text

nil Label:text(string text)

Sets the text of the label

Textbox

Textbox Textbox:new(number x, number y, number width, number height [, string text = "" [, string placeholder = "" ]])

Extends Component, is a text input field, the placeholder text is shown if the component is no focused and contains no text

Textbox:onTextChanged

nil Textbox:onTextChanged(function(sender) textChangedListener)

Sets the listener for text changed actions

Textbox:text

string Textbox:text()

Returns the text in the field

nil Textbox:text(string text)

Sets the text of the field

Textbox:readonly

boolean Textbox:readonly()

Returns the readonly status of the field.

nil Textbox:readonly(boolean readonly)

Sets the readonly status of the field.

Window

Window Window:new(number x, number y, number width, number height)

A modal form to display components, using -1 for either x or y values will centre the Window on that axis.

Window:addComponent

nil Window:addComponent(Component newComponent)

Add a component to the window (The component must not have already been added to another Window object)

Window:removeComponent

nil Window:removeComponent(Component newComponent)

Remove a component from the window

Methods

interface.addComponent

nil interface.addComponent(Component newComponent)

Add a component to master game window.

interface.removeComponent

nil interface.removeComponent(Component newComponent)

Remove a component from the master game window.

interface.showWindow

nil interface.showWindow(Window newWindow)

Push a Window into the top of the modal stack

interface.closeWindow

nil interface.closeWindow(Window newWindow)

Pop a Window off the top of the modal stack. If the given Window is not the top item in the stack, this will have no effect,

예제 코드

이 코드는 interface API의 몇몇 기능에 대한 예제로, 테스트를 위한 기능을 가진 다양한 컴포넌트를 포함하는 창을 띄웁니다.

-- 아래에 나오는 한글은 모두 영어로 바꿔주십시오.
-- 파우더 토이에서는 한글이 정상적으로 출력되지 않습니다.

-- 테스트 창
local testWindow = Window:new(-1, -1, 300, 200)

local currentY = 10

--레이블 예제
local testLabel = Label:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, "이것은 테스트용 레이블입니다")

--버튼 예제
local buttonPresses = 1
currentY = currentY + 20
local testButton = Button:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, "이것은 테스트 버튼입니다")
testButton:enabled(false)
testButton:action(
	function(sender)
		sender:text(buttonPresses .. " 번 눌렸습니다")
		buttonPresses = buttonPresses + 1
	end
)

--텍스트박스 예제
currentY = currentY + 20
local textboxInfo = Label:new(10+((select(1, testWindow:size())/2)-20), currentY, (select(1, testWindow:size())/2)-20, 16, "문자 0개")
local testTextbox = Textbox:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, "", "[여기에 입력을 해주세요]")
testTextbox:onTextChanged(
	function(sender)
		textboxInfo:text("문자 "..sender:text():len().."개");
	end
)

--체크박스 예제
currentY = currentY + 20
local testCheckbox = Checkbox:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, "체크되지 않음");
testCheckbox:action(
	function(sender, checked)
		if(checked) then
			sender:text("체크됨")
		else
			sender:text("체크되지 않음")
		end
		testButton:enabled(checked);
	end
)

--Progress Bar 예제
currentY = currentY + 20
local testProgressBar = ProgressBar:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, 0, "슬라이더: 0");

--슬라이더 예제
currentY = currentY + 20
local testSlider = Slider:new(10, currentY, (select(1, testWindow:size())/2)-20, 16, 10);
testSlider:onValueChanged(
	function(sender, value)
		testProgressBar:progress(value * 10)
		testProgressBar:status("슬라이더: " .. value)
	end
)

-- 닫기 버튼
local closeButton = Button:new(10, select(2, testWindow:size())-26, 100, 16, "닫기")

closeButton:action(function() interface.closeWindow(testWindow) end)

testWindow:onTryExit(function() interface.closeWindow(testWindow) end) -- Allow the default exit events
testWindow:onMouseMove(
	function(x, y, dx, dy)
		testLabel:text("마우스 위치: "..x..", "..y)
	end
)

testWindow:addComponent(testLabel)
testWindow:addComponent(testButton)
testWindow:addComponent(testTextbox)
testWindow:addComponent(testCheckbox)
testWindow:addComponent(testProgressBar)
testWindow:addComponent(testSlider)
testWindow:addComponent(textboxInfo)
testWindow:addComponent(closeButton)

interface.showWindow(testWindow)