06/29/24, 04:06 AM | #1 | |
Join Date: Mar 2023
Posts: 20
|
I have a problem with displaying the menu in TLC
Hello people
I wrote two codes here one contains TLC named TMA_Menu and with the second one, I'm trying to get the content into it (the second file is called TMA_Settings), both codes are attached below. The problem is that the TMA_Menu menu is displayed correctly, but the content from the TMA_Setting is no longer filled in, and I really don't know what to do with it, could someone give me some advice? Thank you very much to everyone who can give me advice TMA_Menu: Code:
local TMA_Menu = {} local wm = WINDOW_MANAGER -- Utility Functions local function CreateControl(parent, controlType, controlName) if not wm then d("Error: WINDOW_MANAGER is not available.") return nil end parent = parent or GuiRoot return wm:CreateControl(controlName or nil, parent, controlType) end local function InitializeTooltip(control, text) control:SetHandler("OnMouseEnter", function(self) InitializeTooltip(InformationTooltip, self, BOTTOM, 0, 0) SetTooltipText(InformationTooltip, text) end) control:SetHandler("OnMouseExit", function(self) ClearTooltip(InformationTooltip) end) end -- Panel Functions function TMA_Menu.CreateSettingWindows() local wm = WINDOW_MANAGER if not wm then d("Error: WINDOW_MANAGER is nil") return end local windowName = "TMA_Menu" local dark = wm:CreateTopLevelWindow(windowName) dark:SetDimensions(1010, 914) dark:SetHidden(true) ZO_ReanchorControlForLeftSidePanel(dark) local bgLeft = wm:CreateControl("$(parent)BackgroundLeft", dark, CT_TEXTURE) bgLeft:SetTexture("EsoUI/Art/Miscellaneous/centerscreen_left.dds") bgLeft:SetDimensions(1024, 1024) bgLeft:SetAnchor(TOPLEFT, nil, TOPLEFT) bgLeft:SetDrawLayer(DL_BACKGROUND) bgLeft:SetExcludeFromResizeToFitExtents(true) local bgRight = wm:CreateControl("$(parent)BackgroundRight", dark, CT_TEXTURE) bgRight:SetTexture("EsoUI/Art/Miscellaneous/centerscreen_right.dds") bgRight:SetDimensions(64, 1024) bgRight:SetAnchor(TOPLEFT, bgLeft, TOPRIGHT) bgRight:SetDrawLayer(DL_BACKGROUND) bgRight:SetExcludeFromResizeToFitExtents(true) local underlayLeft = wm:CreateControl("$(parent)UnderlayLeft", dark, CT_TEXTURE) underlayLeft:SetTexture("EsoUI/Art/Miscellaneous/centerscreen_indexArea_left.dds") underlayLeft:SetDimensions(256, 1024) underlayLeft:SetAnchor(TOPLEFT, bgLeft, TOPLEFT) underlayLeft:SetDrawLayer(DL_BACKGROUND) underlayLeft:SetExcludeFromResizeToFitExtents(true) local underlayRight = wm:CreateControl("$(parent)UnderlayRight", dark, CT_TEXTURE) underlayRight:SetTexture("EsoUI/Art/Miscellaneous/centerscreen_indexArea_right.dds") underlayRight:SetDimensions(128, 1024) underlayRight:SetAnchor(TOPLEFT, underlayLeft, TOPRIGHT) underlayRight:SetDrawLayer(DL_BACKGROUND) underlayRight:SetExcludeFromResizeToFitExtents(true) local title = wm:CreateControl("$(parent)Title", dark, CT_LABEL) title:SetAnchor(TOPLEFT, nil, TOPLEFT, 65, 70) title:SetText(TMA.NameS) title:SetFont("ZoFontWinH1") title:SetModifyTextType(TEXT_MODIFY_TYPE_UPPERCASE) local author = wm:CreateControl("$(parent)Author", dark, CT_LABEL) author:SetAnchor(TOPRIGHT, title, TOPLEFT, 770, 15) author:SetText(" Author: " .. TMA.Autor .. " Version: " .. TMA.Version .. " ") author:SetFont("ZoFontWinT2") local divider = wm:CreateControlFromVirtual("$(parent)Divider", dark, "ZO_Options_Divider") divider:SetAnchor(TOPLEFT, nil, TOPLEFT, 65, 108) local addonList = wm:CreateControlFromVirtual("$(parent)AddonList", dark, "ZO_ScrollList") addonList:SetAnchor(TOPLEFT, nil, TOPLEFT, 65, 160) addonList:SetDimensions(285, 665) local panelContainer = wm:CreateControl("$(parent)PanelContainer", dark, CT_CONTROL) panelContainer:SetAnchor(TOPLEFT, nil, TOPLEFT, 365, 120) panelContainer:SetDimensions(645, 675) local scene = ZO_FadeSceneFragment:New(dark) local leftFragment = ZO_FadeSceneFragment:New(bgLeft) local rightFragment = ZO_FadeSceneFragment:New(bgRight) scene:RegisterCallback("StateChange", function(oldState, newState) if newState == SCENE_FRAGMENT_SHOWING then PushActionLayerByName("OptionsWindow") elseif newState == SCENE_FRAGMENT_HIDDEN then RemoveActionLayerByName("OptionsWindow") end end) leftFragment:RegisterCallback("StateChange", function(oldState, newState) if newState == SCENE_FRAGMENT_SHOWING then PushActionLayerByName("OptionsWindow") elseif newState == SCENE_FRAGMENT_HIDDEN then RemoveActionLayerByName("OptionsWindow") end end) rightFragment:RegisterCallback("StateChange", function(oldState, newState) if newState == SCENE_FRAGMENT_SHOWING then PushActionLayerByName("OptionsWindow") elseif newState == SCENE_FRAGMENT_HIDDEN then RemoveActionLayerByName("OptionsWindow") end end) return dark, scene, leftFragment, rightFragment end function TMA_Menu:CreateSettingsWindow(panelName) local panelData = self.panelData[panelName] if not panelData then d("Error: No panel data found for " .. panelName) return end local control = CreateControl(panelName .. "_SettingsWindow", GuiRoot, CT_CONTROL) if not control then d("Error: Unable to create control for " .. panelName) return end control:SetDimensions(600, 400) control:SetAnchor(CENTER, GuiRoot, CENTER, 0, 0) control:SetHidden(true) local bg = CreateControlFromVirtual("$parentBG", control, "ZO_Options_Background") bg:SetAnchorFill(control) local header = CreateControl(control:GetName() .. "_Header", control, CT_LABEL) header:SetFont("ZoFontHeader") header:SetText(panelData.displayName) header:SetAnchor(TOP, control, TOP, 0, 10) local version = CreateControl(control:GetName() .. "_Version", control, CT_LABEL) version:SetFont("ZoFontWinH3") version:SetText("Version: " .. panelData.version) version:SetAnchor(TOP, header, BOTTOM, 0, 5) local author = CreateControl(control:GetName() .. "_Author", control, CT_LABEL) author:SetFont("ZoFontWinH3") author:SetText("Author: " .. panelData.author) author:SetAnchor(TOP, version, BOTTOM, 0, 0) self.panelControl = control return control end function TMA_Menu:RegisterAddonPanel(panelName, panelData) if not self.panelData then self.panelData = {} end self.panelData[panelName] = panelData end function TMA_Menu:RegisterOptionControls(panelName, optionsTable) local panel = self.panelData[panelName] if not panel then d("Error: No panel data found for " .. panelName) return end local parent = self.panelControl if not parent then d("Error: Panel control not found for " .. panelName) return end for index, optionData in ipairs(optionsTable) do local optionControl = self["Create" .. optionData.type](self, parent, optionData) if optionControl then optionControl:SetAnchor(TOPLEFT, parent, TOPLEFT, 20, 50 + 40 * index) else d("Error: Unable to create option control for " .. optionData.type) end end local control = self.panelControl for _, option in ipairs(optionsTable) do local optionControl = CreateControlFromVirtual("$parent" .. option.type, control, option.type) optionControl:SetAnchor(TOP, control, TOP, 0, 100 * _) optionControl:SetText(option.name) end end function TMA_Menu:HideSettingsWindow() if self.panelControl and not self.panelControl:IsHidden() then self.panelControl:SetHidden(false) end end -- Control Creation Functions (continued) function TMA_Menu:CreateDescription(parent, data) local control = CreateControl(parent, CT_LABEL) control:SetFont("ZoFontWinH3") control:SetText(data.text) control:SetAnchor(TOPLEFT, parent, TOPLEFT, 10, 10) control:SetDimensions(parent:GetWidth() - 20, 30) InitializeTooltip(control, data.tooltip) return control end function TMA_Menu:CreateDropdown(parent, data) local control = CreateControlFromVirtual("$parentDropdown", parent, "ZO_ComboBox") local dropdown = ZO_ComboBox_ObjectFromContainer(control) dropdown:SetSortsItems(false) dropdown:ClearItems() for _, choice in ipairs(data.choices) do local entry = dropdown:CreateItemEntry(choice, function() data.setFunc(choice) end) dropdown:AddItem(entry) end dropdown:SelectItemByIndex(1) control:SetAnchor(TOPLEFT, parent, TOPLEFT, 10, 10) InitializeTooltip(control, data.tooltip) return control end function TMA_Menu:CreateSlider(parent, data) local control = CreateControlFromVirtual("$parentSlider", parent, "ZO_DefaultSlider") control:SetMinMax(data.min, data.max) control:SetValueStep(data.step) control:SetValue(data.getFunc()) control:SetHandler("OnValueChanged", function(_, value, eventReason) if eventReason == EVENT_REASON_SOFTWARE then return end data.setFunc(value) end) control:SetAnchor(TOPLEFT, parent, TOPLEFT, 10, 10) InitializeTooltip(control, data.tooltip) return control end function TMA_Menu:CreateButton(parent, data) local control = CreateControlFromVirtual("$parentButton", parent, "ZO_DefaultButton") control:SetText(data.name) control:SetHandler("OnClicked", data.func) control:SetAnchor(TOPLEFT, parent, TOPLEFT, 10, 10) InitializeTooltip(control, data.tooltip) return control end function TMA_Menu:CreateCheckbox(parent, data) local control = CreateControl(parent, CT_CHECKBOX) control:SetText(data.name) control:SetAnchor(TOPLEFT, parent, TOPLEFT, 10, 10) control:SetDimensions(200, 30) control:SetHandler("OnClicked", function() data.setFunc(not data.getFunc()) end) InitializeTooltip(control, data.tooltip) return control end function TMA_Menu:CreateColorPicker(parent, data) local control = CreateControl(parent, CT_COLORSELECT) control:SetColor(data.getFunc()) control:SetAnchor(TOPLEFT, parent, TOPLEFT, 10, 10) control:SetDimensions(50, 50) control:SetHandler("OnColorSelected", function(_, r, g, b, a) data.setFunc(r, g, b, a) end) InitializeTooltip(control, data.tooltip) return control end function TMA_Menu:CreateEditBox(parent, data) local control = CreateControl(parent, CT_EDITBOX) control:SetText(data.getFunc()) control:SetAnchor(TOPLEFT, parent, TOPLEFT, 10, 10) control:SetDimensions(parent:GetWidth() - 20, 30) control:SetHandler("OnTextChanged", function(_, text) data.setFunc(text) end) InitializeTooltip(control, data.tooltip) return control end function TMA_Menu:CreateSubmenu(parent, data) local control = CreateControl(parent, CT_CONTROL) control:SetAnchor(TOPLEFT, parent, TOPLEFT, 10, 10) control:SetDimensions(parent:GetWidth() - 20, 200) local label = CreateControl(control, CT_LABEL) label:SetFont("ZoFontWinH2") label:SetText(data.name) label:SetAnchor(TOPLEFT, control, TOPLEFT, 10, 10) local submenuControl = CreateControl(control, CT_CONTROL) submenuControl:SetAnchor(TOPLEFT, label, BOTTOMLEFT, 0, 10) submenuControl:SetDimensions(parent:GetWidth() - 40, 180) for _, subData in ipairs(data.controls) do local subControl = self["Create" .. subData.type](self, submenuControl, subData) if subControl then subControl:SetAnchor(TOPLEFT, submenuControl, TOPLEFT, 0, 40 * _) else d("Error: Unable to create submenu control for " .. subData.type) end end return control end -- Register Settings function TMA_Menu.RegisterSettings() EVENT_MANAGER:RegisterForEvent("TMA_Menu", EVENT_PLAYER_ACTIVATED, function() local dark, scene, leftFragment, rightFragment = TMA_Menu.CreateSettingWindows() settingsWindow = dark local data = { id = "TMAMenu", name = TMA.DisplayName, longname = TMA.NameS, callback = function() SCENE_MANAGER:AddFragment(scene) SCENE_MANAGER:AddFragment(leftFragment) SCENE_MANAGER:AddFragment(rightFragment) end, unselectedCallback = function() SCENE_MANAGER:RemoveFragment(scene) SCENE_MANAGER:RemoveFragment(leftFragment) SCENE_MANAGER:RemoveFragment(rightFragment) end, } TMA_Menu:RegisterAddonPanel("TMAMenu", data) ZO_GameMenu_AddSettingPanel(data) end) end -- Register settings when the addon is loaded EVENT_MANAGER:RegisterForEvent("TMA_Menu_Load", EVENT_ADD_ON_LOADED, function(event, addonName) if addonName == "TealkeMultiAddons" then TMA_Menu.RegisterSettings() TMA_Menu:HideSettingsWindow() end end) -- Register TMA_Menu with the global environment or addon framework -- Return TMA_Menu table to be assigned to global _G _G["TMA_Menu"] = TMA_Menu return TMA_Menu Code:
local TMA_Menu = _G["TMA_Menu"] if not TMA_Menu then return end -- Sample panel data and option controls local function AddMenuContents() -- Sample panel data local panelData = { panelName = "TealkeMultiAddonsPanel", displayName = "Tealke Multi Addons", version = "1.0", author = "Tealke", } -- Register the panel TMA_Menu:RegisterAddonPanel("TealkeMultiAddonsPanel", panelData) -- Sample option controls local optionsTable = { { type = "Description", text = "This is a description for the Tealke Multi Addons panel.", tooltip = "This is a tooltip for the description." }, { type = "Dropdown", name = "Select an Option", choices = {"Option 1", "Option 2", "Option 3"}, tooltip = "Select an option from the dropdown.", setFunc = function(value) d("Dropdown selected: " .. value) end, }, { type = "Slider", name = "Adjust the Slider", min = 0, max = 100, step = 1, getFunc = function() return 50 end, setFunc = function(value) d("Slider value: " .. value) end, tooltip = "Adjust the slider between 0 and 100.", }, { type = "Button", name = "Click Me", func = function() d("Button clicked") end, tooltip = "Click this button.", }, { type = "Checkbox", name = "Enable Feature", getFunc = function() return true end, setFunc = function(value) d("Checkbox state: " .. tostring(value)) end, tooltip = "Check or uncheck this box.", }, { type = "ColorPicker", name = "Pick a Color", getFunc = function() return 1, 0, 0, 1 end, setFunc = function(r, g, b, a) d("Color selected: ", r, g, b, a) end, tooltip = "Pick a color.", }, { type = "EditBox", name = "Enter Text", getFunc = function() return "Sample text" end, setFunc = function(text) d("EditBox text: " .. text) end, tooltip = "Enter some text.", }, { type = "Submenu", name = "Submenu", controls = { { type = "Checkbox", name = "Submenu Checkbox", getFunc = function() return false end, setFunc = function(value) d("Submenu checkbox state: " .. tostring(value)) end, tooltip = "This is a checkbox in a submenu.", }, }, }, } -- Create the settings window and register option controls TMA_Menu:CreateSettingsWindow("TealkeMultiAddonsPanel_SettingsWindow") TMA_Menu:RegisterOptionControls("TealkeMultiAddonsPanel", optionsTable) end -- Register the settings and add menu contents on addon load EVENT_MANAGER:RegisterForEvent("TMA_Menu_Load", EVENT_ADD_ON_LOADED, function(event, addonName) if addonName == "TealkeMultiAddons" then TMA_Menu.RegisterSettings() TMA_Menu:HideSettingsWindow() AddMenuContents() end end) -- Return TMA_Menu with the global environment or addon framework return TMA_Menu |
|
ESOUI » Developer Discussions » Lua/XML Help » I have a problem with displaying the menu in TLC |
«
Previous Thread
|
Next Thread
»
|
Thread Tools | |
Display Modes | |
|
|