I am missing something fundamental. I apologise in advance for asking what has already been asked but my question is how can I reference a widget within a Tab Control when I have to keep recreating the widget every time I swap tabs.
This is a chunk of my code. I have two frames that swap between edit mode and view mode. In the editor I tried to add a tab control so that i can have tab one for current language and tab 2 for a second language.
The problem for me is in GSSE:SelectGroup(container, event, group). If I define the widgets outside functions then I can call them and adjust them (Widget:SetText()) but when I add them to a tab control unless I release (After which I cant access them locally) them I got tab windows stacking vertically down the page. For example from the below I can access nameeditbox:SetText("Stuff") from the callback from changing the drop down list.
Can I reference the tabs widgets via something like Container.Widget:SetText()?
Again apologies if this is something that I should just know or get. I'm trying to work backwards and figure things out.
--------------------
local sequenceboxtext = AceGUI:Create("MultiLineEditBox")
local remotesequenceboxtext = AceGUI:Create("MultiLineEditBox")
function GSSE:drawstandardwindow(container)
local sequencebox = AceGUI:Create("MultiLineEditBox")
sequencebox:SetLabel("Sequence")
sequencebox:SetNumLines(20)
sequencebox:DisableButton(true)
sequencebox:SetFullWidth(true)
sequencebox:SetText(sequenceboxtext:GetText())
container:AddChild(sequencebox)
local updbutton = AceGUI:Create("Button")
updbutton:SetText("Edit")
updbutton:SetWidth(200)
updbutton:SetCallback("OnClick", function() GSSE:updateSequence(currentSequence) end)
container:AddChild(updbutton)
sequenceboxtext = sequencebox
end
function GSSE:drawsecondarywindow(container)
local languages = GSTRListCachedLanguages()
local listbox = AceGUI:Create("Dropdown")
listbox:SetLabel("Choose Language")
listbox:SetWidth(250)
listbox:SetList(languages)
listbox:SetCallback("OnValueChanged", function (obj,event,key) GSSE:loadTranslatedSequence(GSTRListCachedLanguages()[key]) end)
container:AddChild(listbox)
local remotesequencebox = AceGUI:Create("MultiLineEditBox")
remotesequencebox:SetLabel("Translated Sequence")
remotesequencebox:SetText(remotesequenceboxtext:GetText())
remotesequencebox:SetNumLines(20)
remotesequencebox:DisableButton(true)
remotesequencebox:SetFullWidth(true)
container:AddChild(remotesequencebox)
remotesequenceboxtext = remotesequencebox
end
-- Callback function for OnGroupSelected
function GSSE:SelectGroup(container, event, group)
local tremote = remotesequenceboxtext:GetText()
local tlocal = sequenceboxtext:GetText()
container:ReleaseChildren()
GSPrintDebugMessage("Selecting tab: " .. group, GNOME)
if group == "localtab" then
GSSE:drawstandardwindow(container)
elseif group == "remotetab" then
GSSE:drawsecondarywindow(container)
end
remotesequenceboxtext:SetText(tremote)
sequenceboxtext:SetText(tlocal)
end
-- function that draws the widgets for the first tab
local frame = AceGUI:Create("Frame")
local curentSequence
frame:SetTitle("Sequence Viewer")
frame:SetStatusText("Gnome Sequencer: Sequence Viewer")
frame:SetCallback("OnClose", function(widget) frame:Hide() end)
frame:SetLayout("List")
local names = GSSE:getSequenceNames()
local listbox = AceGUI:Create("Dropdown")
listbox:SetLabel("Load Sequence")
listbox:SetWidth(250)
listbox:SetList(names)
listbox:SetCallback("OnValueChanged", function (obj,event,key) GSSE:loadSequence(key) currentSequence = key end)
frame:AddChild(listbox)
if GSTranslatorAvailable and GSMasterOptions.useTranslator then
local tab = AceGUI:Create("TabGroup")
tab:SetLayout("Flow")
-- Setup which tabs to show
tab:SetTabs({{text=GetLocale(), value="localtab"}, {text="Translate to", value="remotetab"}})
-- Register callback
tab:SetCallback("OnGroupSelected", function (container, event, group) GSSE:SelectGroup(container, event, group) end)
-- Set initial Tab (this will fire the OnGroupSelected callback)
tab:SelectTab("localtab")
tab:SetFullWidth(true)
-- add to the frame container
frame:AddChild(tab)
else
GSSE:drawstandardwindow(frame)
end
-------------end viewer-------------
-------------begin editor--------------------
local editframe = AceGUI:Create("Frame")
local stepvalue
local headerGroup = AceGUI:Create("SimpleGroup")
headerGroup:SetFullWidth(true)
headerGroup:SetLayout("Flow")
local firstheadercolumn = AceGUI:Create("SimpleGroup")
--firstheadercolumn:SetFullWidth(true)
firstheadercolumn:SetLayout("List")
editframe:SetTitle("Sequence Editor")
editframe:SetStatusText("Gnome Sequencer: Sequence Editor. Press the Close button to Save -->")
editframe:SetCallback("OnClose", function() GSSE:eupdateSequence(currentSequence, GSSequenceEditorLoaded) end)
editframe:SetLayout("List")
local nameeditbox = AceGUI:Create("EditBox")
nameeditbox:SetLabel("Sequence Name")
nameeditbox:SetWidth(250)
firstheadercolumn:AddChild(nameeditbox)
local stepdropdown = AceGUI:Create("Dropdown")
stepdropdown:SetLabel("Step Function")
stepdropdown:SetWidth(250)
stepdropdown:SetList({
["1"] = "Sequential (1 2 3 4)",
["2"] = "Priority List (1 12 123 1234)",
})
stepdropdown:SetCallback("OnValueChanged", function (obj,event,key) stepvalue = key end)
firstheadercolumn:AddChild(stepdropdown)
local specClassGroup = AceGUI:Create("SimpleGroup")
specClassGroup:SetFullWidth(true)
specClassGroup:SetLayout("Flow")
local specradio = AceGUI:Create("CheckBox")
specradio:SetType("radio")
specradio:SetLabel("Specialization Specific Macro")
specradio:SetValue(true)
specradio:SetWidth(250)
specradio:SetCallback("OnValueChanged", function (obj,event,key) GSSE:toggleClasses("spec") end)
local classradio = AceGUI:Create("CheckBox")
classradio:SetType("radio")
classradio:SetLabel("Classwide Macro")
classradio:SetValue(false)
classradio:SetWidth(250)
classradio:SetCallback("OnValueChanged", function (obj,event,key) GSSE:toggleClasses("class") end)
specClassGroup:AddChild(specradio)
specClassGroup:AddChild(classradio)
headerGroup:AddChild(firstheadercolumn)
local iconpicker = AceGUI:Create("Icon")
iconpicker:SetLabel("Macro Icon")
headerGroup:AddChild(iconpicker)
editframe:AddChild(headerGroup)
editframe:AddChild(specClassGroup)
local premacrobox = AceGUI:Create("MultiLineEditBox")
premacrobox:SetLabel("PreMacro")
premacrobox:SetNumLines(3)
premacrobox:DisableButton(true)
premacrobox:SetFullWidth(true)
editframe:AddChild(premacrobox)
local spellbox = AceGUI:Create("MultiLineEditBox")
spellbox:SetLabel("Sequence")
spellbox:SetNumLines(9)
spellbox:DisableButton(true)
spellbox:SetFullWidth(true)
editframe:AddChild(spellbox)
local postmacrobox = AceGUI:Create("MultiLineEditBox")
postmacrobox:SetLabel("PostMacro")
postmacrobox:SetNumLines(3)
postmacrobox:DisableButton(true)
postmacrobox:SetFullWidth(true)
editframe:AddChild(postmacrobox)
This is a chunk of my code. I have two frames that swap between edit mode and view mode. In the editor I tried to add a tab control so that i can have tab one for current language and tab 2 for a second language.
The problem for me is in GSSE:SelectGroup(container, event, group). If I define the widgets outside functions then I can call them and adjust them (Widget:SetText()) but when I add them to a tab control unless I release (After which I cant access them locally) them I got tab windows stacking vertically down the page. For example from the below I can access nameeditbox:SetText("Stuff") from the callback from changing the drop down list.
Can I reference the tabs widgets via something like Container.Widget:SetText()?
Again apologies if this is something that I should just know or get. I'm trying to work backwards and figure things out.
--------------------
Frame.tab.remotesequencebox:SetText("sometexthere")