--[[-- All the world's a stage, And all the men and women merely players; They have their exits and their entrances... -- As You Like It (Act 2, Scene 7, Page 6) William Shakespeare --]]-- ESOTheatreII.ESOFavoritesGUI = {} local ETII = ESOTheatreII local maxButtons = 10 local StageIsActive = false function ETII.ESOFavoritesGUI:Initialize() local control = GetControl("TheatreFrame") local quickbtns = CreateControlFromVirtual("TheatreFrameButtonGroup", control, "ButtonPanelTemplate", 1) quickbtns:ClearAnchors() quickbtns:SetAnchor(CENTER, control, TOP, 0, 10) quickbtns:SetHidden( true ) local BtnClose = control:GetNamedChild( "ButtonClose" ) BtnClose:SetHandler( 'OnClicked', function() self:Hide() StageIsActive = false end ) local BtnMinimize = control:GetNamedChild( "ButtonMinimize" ) BtnMinimize:SetHandler( 'OnClicked', function() ESOTheatreII.ESOFavoritesGUI:MinimizeWindowToggle() end ) local BtnTest = control:GetNamedChild( "ButtonTesting" ) BtnTest:SetHidden(true) local checkboxcontrol = GetControl("TheatreFrameCheckbox") checkboxcontrol.checkedText = "Off" checkboxcontrol.uncheckedText = "On" checkboxcontrol:SetText("Off") --checkboxcontrol:SetState(BSTATE_NORMAL, true) ZO_PreHookHandler(checkboxcontrol, "OnClicked", function() ESOTheatreII.SetTransparentFlag(not ESOTheatreII.GetTransparentFlag()) end ) end function ETII.ESOFavoritesGUI:Show() local control = GetControl("TheatreFrame") if StageIsActive then control:SetHidden( false ) end end function ETII.ESOFavoritesGUI:Hide() local control = GetControl("TheatreFrame") control:SetHidden( true ) end function ETII.ESOFavoritesGUI:ToggleWindow() local control = GetControl("TheatreFrame") if ( control:IsHidden() ) then StageIsActive = true control:SetHidden( false ) else StageIsActive = false control:SetHidden( true ) end end function ETII.ESOFavoritesGUI:LoadFavoriteButtons() local control = GetControl("TheatreFrame") local x = 0 local y = 0 local uielements = ETII.TweaksUI.MainWindow control:SetWidth(uielements.WindowWidth) control:SetHeight(uielements.WindowHeight) local xOffsetbase = uielements.ButtonBaseOffsetX local yOffsetbase = uielements.ButtonBaseOffsetY local xOffsetRelative = uielements.ButtonRelativeOffsetX local yOffsetRelative = uielements.ButtonRelativeOffsetY local btnWidth = uielements.ButtonSize for i, v in pairs(ETII.CurrentSVars.FavoriteTable) do if (y < 5) then y = y + 1 else y = 1 x = x + 1 end local itemcontrol = CreateControlFromVirtual("TheatreFrameButtonFavorite", control, "ButtonFavoriteTemplate", i) itemcontrol:ClearAnchors() itemcontrol:SetAnchor(TOPLEFT, nul, nul, xOffsetbase + (xOffsetRelative * x), yOffsetbase + (yOffsetRelative * y)) local favbtncontrol = itemcontrol:GetNamedChild( "ButtonFavorite" ) favbtncontrol:SetHandler( 'OnClicked', function() ESOTheatreII.PlayEmoteByID( v["ID"] ) end ) favbtncontrol:SetWidth(btnWidth) local favbtnLabel = favbtncontrol:GetLabelControl() favbtnLabel:SetText(string.format("%s", v["EmoteName"] )) local cfgbtncontrol = itemcontrol:GetNamedChild( "ButtonCfgFavorite" ) cfgbtncontrol:SetHandler( 'OnClicked', function() ESOTheatreII.ESOEmotesListGUI:Show( itemcontrol:GetName() ) end ) if ( i <= 5 ) then local btncontrol = GetControl("TheatreFrameButtonGroup1Panel"..i.."Button" ) btncontrol:SetHandler( 'OnClicked', function() ESOTheatreII.PlayEmoteByID( v["ID"] ) end ) end if ( x > 0) then cfgbtncontrol:ClearAnchors() cfgbtncontrol:SetAnchor(TOPLEFT, favbtncontrol, TOPRIGHT, - 10, 0) end end end function ETII.ESOFavoritesGUI:ReLoadFavoriteButtons() for i, v in pairs(ETII.CurrentSVars.FavoriteTable) do local favbtncontrol = GetControl( "TheatreFrameButtonFavorite"..i.."ButtonFavorite" ) favbtncontrol:SetHandler( 'OnClicked', function() ESOTheatreII.PlayEmoteByID( v["ID"] ) end ) local favbtnLabel = favbtncontrol:GetLabelControl() favbtnLabel:SetText(string.format("%s", v["EmoteName"] )) local cfgbtncontrol = GetControl( "TheatreFrameButtonFavorite"..i.."ButtonCfgFavorite" ) cfgbtncontrol:SetHandler( 'OnClicked', function() ESOTheatreII.ESOEmotesListGUI:Show( "TheatreFrameButtonFavorite"..i ) end ) end end function ETII.ESOFavoritesGUI:FavoriteButtonOnChange(aname, emoteid) --Change the Stage button local control = GetControl("TheatreFrame") local favbtncontrol = control:GetNamedChild( aname.."ButtonFavorite" ) favbtncontrol:SetHandler( 'OnClicked', function() ESOTheatreII.PlayEmoteByID( emoteid ) end ) local favbtnLabel = favbtncontrol:GetLabelControl() local oldemote = favbtnLabel:GetText() favbtnLabel:SetText(string.format("%s", ETII.EmoteNameByID(emoteid))) --Update the SavedVariables --Using table index in-case someone wants an emote more than once local tableindex = 0 tableindex = tonumber(string.sub(aname, 15)) for i, v in pairs(ETII.CurrentSVars.FavoriteTable) do if ( i == tableindex ) then --[[-- if ETII.IsVerbose() then ETII.PrintSystemChat( string.format("%d %s", i, v["ID"])) ETII.PrintSystemChat( string.format("%d %s", i, v["EmoteName"])) end --]]-- v["ID"] = emoteid v["EmoteName"] = string.format("%s", ETII.EmoteNameByID(emoteid)) end end end function ETII.ESOFavoritesGUI:ButtonStateToggle() --Used when the configuration window shown/hidden for i = 1, maxButtons do local cfgbtncontrol = GetControl("TheatreFrameButtonFavorite"..i.."ButtonCfgFavorite") local btnstatus = cfgbtncontrol:GetState() if (btnstatus == BSTATE_DISABLED) then cfgbtncontrol:SetState(BSTATE_NORMAL, false) else cfgbtncontrol:SetState(BSTATE_DISABLED, true) end end end function ETII.ESOFavoritesGUI:MinimizeWindowToggle() local control = GetControl("TheatreFrame") local btncontrol = control:GetNamedChild("ButtonGroup1" ) if (btncontrol:IsHidden()) then btncontrol:SetHidden( false ) else btncontrol:SetHidden( true ) end --Quick way to appear to be minimizing window for i = 1, maxButtons do local cfgbtncontrol = GetControl("TheatreFrameButtonFavorite"..i.."ButtonCfgFavorite") local favbtncontrol = GetControl( "TheatreFrameButtonFavorite"..i.."ButtonFavorite" ) if cfgbtncontrol:IsHidden() then cfgbtncontrol:SetHidden( false ) favbtncontrol:SetHidden( false ) control:SetHeight(215) else cfgbtncontrol:SetHidden( true ) favbtncontrol:SetHidden( true ) control:SetHeight(25) end end end function ETII.ESOFavoritesGUI:MoveWindow( x, y ) local mainFrame = GetControl("TheatreFrame") mainFrame:ClearAnchors() mainFrame:SetAnchor( TOPLEFT, GetControl("GuiRoot"), TOPLEFT, x, y) end function ETII.ESOFavoritesGUI:SaveWindowPosition() local mainFrame = GetControl("TheatreFrame") local _, a, _, b, x, y = mainFrame:GetAnchor() local x2 = mainFrame:GetLeft() local y2 = mainFrame:GetTop() if ETII.IsVerbose() then ETII.PrintSystemChat( string.format("Anchor location returned= %d : %d", x, y )) ETII.PrintSystemChat( string.format("Top and Left inside GuiRoot= %d : %d", x2, y2 )) end --I'm going with Top and Left :D --Anchor appears to be influenced by other controls on the screen? ETII.CurrentSVars.UserSettings.StageLocation.Xoffset = x2 ETII.CurrentSVars.UserSettings.StageLocation.Yoffset = y2 end function ETII.ESOFavoritesGUI:GetFavoriteButtonEmote( btnnumber ) local buttonid = tonumber(btnnumber) or 0 if (buttonid > 0) and (buttonid <= maxButtons) then local favbtncontrol = GetControl( "TheatreFrameButtonFavorite"..buttonid.."ButtonFavorite" ) local favbtnLabel = favbtncontrol:GetLabelControl() emotename = favbtnLabel:GetText() return emotename end return end function ETII.ESOFavoritesGUI:OnSlashCommand() local control = GetControl("TheatreFrame") StageIsActive = true ETII.ESOFavoritesGUI:Show() if ETII.IsVerbose() then ETII.PrintSystemChat(ETII.Name.." "..ETII.Version.." Loaded.") end end