GUI명령을 이용해 window타입의 창을 띄워보았다. 이제 이 창에 내가 필요한 정보들을 출력해야 했다. 위젯을 생성하고 출력하는 과정을 진행해보았다.
AceGUI-3.0 Widgets
해당 페이지에 기본적인 위젯의 타입들이 설명되어 있었다.
Button, CheckBox, ColorPicker ...등 많은 타입이 있었다. 여러 타입들을 테스트 해보았고 지금 나에게 필요한건 단순한 아이콘을 출력할 수 있는 Icon, 값을 입력할 수 있는 상자인 EditBox, 새로고침 혹은 초기화를 위해 설치할 Button정도가 있었다.
editbox = GUI:Create("EditBox")
editbox:SetCallback("OnEnterPressed",
function(widget, event, text)
~~
end)
Parent:AddChild(editbox)
이전 포스트의 window와 같은 방식으로 만들 수 있었다.
위젯별로 이벤트에 대한 callback을 설정할 수 있었다.
나는 editbox에 값이 입력되고 확인을 입력하면 동작하는 이벤트인 OnEnterPressed를 선언했다.
Addchild 메서드를 통해 방금 만든 editbox를 Parent의 자식으로 선언했다.
GUI에 내가 설정한 editbox가 출력되는것을 확인했고 위 방식으로 MainPanel의 틀을 만들어나가기 시작했다.
처음 계획은 Main / Remote 정도로만 크게 구분했지만 자세히 들어가보면 Main에는 통계창, 거래내역을 나누어야했고 Remote는 보스별로 테이블을 정리해야했다.
TabGroup은 프레임에 서로 다른 그룹을 여러개 표시할 수 있는 타입으로 위 역할을 수행하기에 적절했다.
-- Callback function for OnGroupSelected
local function SelectGroup(container, event, group)
container:ReleaseChildren()
if group == "tab1" then
DrawGroup1(container)
elseif group == "tab2" then
DrawGroup2(container)
end
end
-- Create the frame container
local frame = AceGUI:Create("Frame")
frame:SetTitle("Example Frame")
frame:SetStatusText("AceGUI-3.0 Example Container Frame")
frame:SetCallback("OnClose", function(widget) AceGUI:Release(widget) end)
-- Fill Layout - the TabGroup widget will fill the whole frame
frame:SetLayout("Fill")
-- Create the TabGroup
local tab = AceGUI:Create("TabGroup")
tab:SetLayout("Flow")
-- Setup which tabs to show
tab:SetTabs({{text="Tab 1", value="tab1"}, {text="Tab 2", value="tab2"}})
-- Register callback
tab:SetCallback("OnGroupSelected", SelectGroup)
-- Set initial Tab (this will fire the OnGroupSelected callback)
tab:SelectTab("tab1")
-- add to the frame container
frame:AddChild(tab)
Ace3.0 Tutorial 페이지에서 제공하는 TabGroup의 사용 예시.
위 예시만으로도 충분히 내 코드에 적용할 수 있었다.