diff --git a/core/plugins_statusbar.lua b/core/plugins_statusbar.lua index ca886533..995f21f4 100644 --- a/core/plugins_statusbar.lua +++ b/core/plugins_statusbar.lua @@ -1,30 +1,28 @@ - ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - local _detalhes = _G.Details - local Loc = LibStub("AceLocale-3.0"):GetLocale ( "Details" ) - local SharedMedia = LibStub:GetLibrary ("LibSharedMedia-3.0") - + local Details = _G.Details + local Loc = LibStub("AceLocale-3.0"):GetLocale( "Details" ) + local SharedMedia = LibStub:GetLibrary("LibSharedMedia-3.0") + local detailsFramework = _G.DetailsFramework + local DEFAULT_CHILD_WIDTH = 60 local DEFAULT_CHILD_HEIGHT = 16 local DEFAULT_CHILD_FONTFACE = "Friz Quadrata TT" local DEFAULT_CHILD_FONTCOLOR = {1, 0.733333, 0, 1} local DEFAULT_CHILD_FONTSIZE = 10 local _ - + + local unpack = unpack + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --local pointers - - local _math_floor = math.floor --api local local ipairs = ipairs --api local - local UnitGroupRolesAssigned = DetailsFramework.UnitGroupRolesAssigned - + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --status bar core functions --hida all micro frames - function _detalhes.StatusBar:Hide (instance, side) + function Details.StatusBar:Hide(instance, side) if (not side) then if (instance.StatusBar.center and instance.StatusBar.left and instance.StatusBar.right) then instance.StatusBar.center.frame:Hide() @@ -33,8 +31,8 @@ end end end - - function _detalhes.StatusBar:Show (instance, side) + + function Details.StatusBar:Show(instance, side) if (not side) then if (instance.StatusBar.center and instance.StatusBar.left and instance.StatusBar.right) then instance.StatusBar.center.frame:Show() @@ -43,8 +41,8 @@ end end end - - function _detalhes.StatusBar:LockDisplays (instance, locked) + + function Details.StatusBar:LockDisplays(instance, locked) if (instance.StatusBar.center and instance.StatusBar.left and instance.StatusBar.right) then if (locked) then instance.StatusBar.center.frame:EnableMouse(false) @@ -57,125 +55,127 @@ end end end - + --create a plugin child for an instance - function _detalhes.StatusBar:CreateStatusBarChildForInstance (instance, pluginName) - local PluginObject = _detalhes.StatusBar.NameTable [pluginName] + function Details.StatusBar:CreateStatusBarChildForInstance(instance, pluginName) + local PluginObject = Details.StatusBar.NameTable[pluginName] if (PluginObject) then - local new_child = PluginObject:CreateChildObject (instance) - if (new_child) then - instance.StatusBar [#instance.StatusBar+1] = new_child - new_child.enabled = false - return new_child + local newChild = PluginObject:CreateChildObject(instance) + if (newChild) then + instance.StatusBar[#instance.StatusBar+1] = newChild + newChild.enabled = false + return newChild end end return nil end - + --functions to set the three statusbar places: left, center and right - function _detalhes.StatusBar:SetCenterPlugin (instance, childObject, fromStartup) + function Details.StatusBar:SetCenterPlugin(instance, childObject, fromStartup) childObject.frame:Show() childObject.frame:ClearAllPoints() - + childObject.options.textAlign = 2 if (instance.micro_displays_side == 2) then --default - bottom childObject.frame:SetPoint("center", instance.baseframe.rodape.StatusBarCenterAnchor, "center") + elseif (instance.micro_displays_side == 1) then --top side childObject.frame:SetPoint("center", instance.baseframe.cabecalho.StatusBarCenterAnchor, "center") end childObject.text:ClearAllPoints() childObject.text:SetPoint("center", childObject.frame, "center", childObject.options.textXMod, childObject.options.textYMod) - + instance.StatusBar.center = childObject childObject.anchor = "center" childObject.enabled = true if (childObject.OnEnable) then childObject:OnEnable() end - + if (fromStartup and childObject.options.isHidden) then childObject.frame.text:Hide() if (childObject.frame.texture) then childObject.frame.texture:Hide() end end - + return true end - function _detalhes.StatusBar:SetLeftPlugin (instance, childObject, fromStartup) - + function Details.StatusBar:SetLeftPlugin(instance, childObject, fromStartup) if (not childObject) then return end - + childObject.frame:Show() childObject.frame:ClearAllPoints() childObject.options.textAlign = 1 - + if (instance.micro_displays_side == 2) then --default - bottom childObject.frame:SetPoint("left", instance.baseframe.rodape.StatusBarLeftAnchor, "left") + elseif (instance.micro_displays_side == 1) then --top side childObject.frame:SetPoint("left", instance.baseframe.cabecalho.StatusBarLeftAnchor, "left") end - + childObject.text:ClearAllPoints() childObject.text:SetPoint("left", childObject.frame, "left", childObject.options.textXMod, childObject.options.textYMod) - + instance.StatusBar.left = childObject childObject.anchor = "left" childObject.enabled = true if (childObject.OnEnable) then childObject:OnEnable() end - + if (fromStartup and childObject.options.isHidden) then childObject.frame.text:Hide() if (childObject.frame.texture) then childObject.frame.texture:Hide() end end - + return true end - function _detalhes.StatusBar:SetRightPlugin (instance, childObject, fromStartup) + function Details.StatusBar:SetRightPlugin(instance, childObject, fromStartup) childObject.frame:Show() childObject.frame:ClearAllPoints() - + childObject.options.textAlign = 3 if (instance.micro_displays_side == 2) then --default - bottom childObject.frame:SetPoint("right", instance.baseframe.rodape.direita, "right", -20, 10) + elseif (instance.micro_displays_side == 1) then --top side childObject.frame:SetPoint("right", instance.baseframe.cabecalho.StatusBarRightAnchor, "right") end - + childObject.text:ClearAllPoints() childObject.text:SetPoint("right", childObject.frame, "right", childObject.options.textXMod, childObject.options.textYMod) - + instance.StatusBar.right = childObject childObject.anchor = "right" childObject.enabled = true if (childObject.OnEnable) then childObject:OnEnable() end - + if (fromStartup and childObject.options.isHidden) then childObject.frame.text:Hide() if (childObject.frame.texture) then childObject.frame.texture:Hide() end end - + return true end --disable all plugin childs attached to an specified instance and reactive the childs taking the instance statusbar anchors - function _detalhes.StatusBar:ReloadAnchors (instance) + function Details.StatusBar:ReloadAnchors(instance) for _, child in ipairs(instance.StatusBar) do child.frame:ClearAllPoints() child.frame:Hide() @@ -185,137 +185,127 @@ child:OnDisable() end end + --enable only needed plugins if (instance.StatusBar.right) then - _detalhes.StatusBar:SetRightPlugin (instance, instance.StatusBar.right) + Details.StatusBar:SetRightPlugin(instance, instance.StatusBar.right) end if (instance.StatusBar.center) then - _detalhes.StatusBar:SetCenterPlugin (instance, instance.StatusBar.center) + Details.StatusBar:SetCenterPlugin(instance, instance.StatusBar.center) end if (instance.StatusBar.left) then - _detalhes.StatusBar:SetLeftPlugin (instance, instance.StatusBar.left) + Details.StatusBar:SetLeftPlugin(instance, instance.StatusBar.left) end - + if (not instance.show_statusbar and instance.micro_displays_side == 2) then - _detalhes.StatusBar:Hide (instance) + Details.StatusBar:Hide(instance) end end - - --select a new plugin in for an instance anchor - local ChoosePlugin = function(_, _, index, current_child, anchor) - + local ChoosePlugin = function(_, _, index, childObject, anchor) GameCooltip:Close() - - local byuser = false - + if (type(index) == "table") then - index, current_child, anchor = unpack(index) - byuser = true + index, childObject, anchor = unpack(index) end - + if (index and index == -1) then --hide - _detalhes.StatusBar:ApplyOptions (current_child, "hidden", true) + Details.StatusBar:ApplyOptions(childObject, "hidden", true) return else - _detalhes.StatusBar:ApplyOptions (current_child, "hidden", false) - current_child.frame.text:Show() - if (current_child.frame.texture) then - current_child.frame.texture:Show() + Details.StatusBar:ApplyOptions(childObject, "hidden", false) + childObject.frame.text:Show() + if (childObject.frame.texture) then + childObject.frame.texture:Show() end end - - local pluginMestre = _detalhes.StatusBar.Plugins [index] + + local pluginMestre = Details.StatusBar.Plugins[index] if (not pluginMestre) then if (anchor == "left") then - pluginMestre = _detalhes.StatusBar.Plugins [2] + pluginMestre = Details.StatusBar.Plugins[2] + elseif (anchor == "center") then - pluginMestre = _detalhes.StatusBar.Plugins [4] + pluginMestre = Details.StatusBar.Plugins[4] + elseif (anchor == "right") then - pluginMestre = _detalhes.StatusBar.Plugins [1] + pluginMestre = Details.StatusBar.Plugins[1] end end - - local instance = current_child.instance -- instance que estamos usando agora - + + local instance = childObject.instance --instance que estamos usando agora + local chosenChild = nil - + --procura pra ver se ja tem uma criada - for _, child_created in ipairs(instance.StatusBar) do - if (child_created.mainPlugin == pluginMestre) then - chosenChild = child_created + for _, childCreated in ipairs(instance.StatusBar) do + if (childCreated.mainPlugin == pluginMestre) then + chosenChild = childCreated break end end - + --se nao tiver cria uma if (not chosenChild) then - chosenChild = _detalhes.StatusBar:CreateStatusBarChildForInstance (current_child.instance, pluginMestre.real_name) + chosenChild = Details.StatusBar:CreateStatusBarChildForInstance(childObject.instance, pluginMestre.real_name) end - instance.StatusBar [anchor] = chosenChild + instance.StatusBar[anchor] = chosenChild --copia os atributos do current para o chosen - local options_current = Details.CopyTable(current_child.options) - - if (chosenChild.anchor) then - --o widget escolhido ja estava sendo mostrado... - -- copia os atributos do chosen para o current - - current_child.options = Details.CopyTable(chosenChild.options) - instance.StatusBar [chosenChild.anchor] = current_child - end - - chosenChild.options = options_current - - _detalhes.StatusBar:ReloadAnchors (instance) + local optionsTable = Details.CopyTable(childObject.options) - _detalhes.StatusBar:UpdateOptions (instance) - + if (chosenChild and chosenChild.anchor) then + --o widget escolhido ja estava sendo mostrado... + --copia os atributos do chosen para o current + childObject.options = Details.CopyTable(chosenChild.options) + instance.StatusBar[chosenChild.anchor] = childObject + end + + chosenChild.options = optionsTable + + Details.StatusBar:ReloadAnchors(instance) + Details.StatusBar:UpdateOptions(instance) end - function _detalhes.StatusBar:SetPlugin (instance, absolute_name, anchor) - if (absolute_name == -1) then --none + function Details.StatusBar:SetPlugin(instance, absoluteName, anchor) + if (absoluteName == -1) then --none anchor = string.lower(anchor) - ChoosePlugin (nil, nil, -1, instance.StatusBar [anchor], anchor) + ChoosePlugin(nil, nil, -1, instance.StatusBar[anchor], anchor) else - local index = _detalhes.StatusBar:GetIndexFromAbsoluteName (absolute_name) + local index = Details.StatusBar:GetIndexFromAbsoluteName(absoluteName) if (index and anchor) then anchor = string.lower(anchor) - ChoosePlugin (nil, nil, index, instance.StatusBar [anchor], anchor) + ChoosePlugin(nil, nil, index, instance.StatusBar[anchor], anchor) end end end - + --on enter - local onEnterCooltipTexts = { - {text = "|TInterface\\TUTORIALFRAME\\UI-TUTORIAL-FRAME:14:14:0:1:512:512:8:70:224:306|t " .. Loc ["STRING_PLUGIN_TOOLTIP_LEFTBUTTON"]}, - {text = "|TInterface\\TUTORIALFRAME\\UI-TUTORIAL-FRAME:14:14:0:1:512:512:8:70:328:409|t " .. Loc ["STRING_PLUGIN_TOOLTIP_RIGHTBUTTON"]}} - + local onEnterCooltipTexts = { + {text = "|TInterface\\TUTORIALFRAME\\UI-TUTORIAL-FRAME:14:14:0:1:512:512:8:70:224:306|t " .. Loc ["STRING_PLUGIN_TOOLTIP_LEFTBUTTON"]}, + {text = "|TInterface\\TUTORIALFRAME\\UI-TUTORIAL-FRAME:14:14:0:1:512:512:8:70:328:409|t " .. Loc ["STRING_PLUGIN_TOOLTIP_RIGHTBUTTON"]} + } local on_enter_backdrop = {bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16} - + local OnEnter = function(frame) - - --|TTexturePath: size X: size Y: point offset Y X : texture size : coordx1 L : coordx2 R : coordy1 T : coordy2 B |t - -- left click: 0.0019531:0.1484375:0.4257813:0.6210938 right click: 0.0019531:0.1484375:0.6269531:0.8222656 - local instance = frame.child.instance - - _detalhes.OnEnterMainWindow(instance) - + + Details.OnEnterMainWindow(instance) + frame:SetBackdrop(on_enter_backdrop) frame:SetBackdropColor(0.7, 0.7, 0.7, 0.6) GameCooltip:Reset() GameCooltip:AddFromTable(onEnterCooltipTexts) GameCooltip:SetOption("TextSize", 9) - GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true) - + GameCooltip:SetWallpaper(1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true) + GameCooltip:SetOption("ButtonHeightMod", -4) GameCooltip:SetOption("ButtonsYMod", -4) GameCooltip:SetOption("YSpacingMod", -4) GameCooltip:SetOption("FixedHeight", 46) - + GameCooltip:ShowCooltip(frame, "tooltip") return true @@ -323,18 +313,13 @@ --on leave local OnLeave = function(frame) - frame:SetBackdrop(nil) - - _detalhes.OnLeaveMainWindow(frame.child.instance) - - _detalhes.popup:Hide() - + Details.OnLeaveMainWindow(frame.child.instance) + Details.popup:Hide() return true end local OnMouseUp = function(frame, mouse) - if (mouse == "LeftButton") then if (not frame.child.Setup) then print(Loc ["STRING_STATUSBAR_NOOPTIONS"]) @@ -343,142 +328,140 @@ frame.child:Setup() else GameCooltip:Reset() - GameCooltip:SetType ("menu") - - GameCooltip:AddMenu (1, ChoosePlugin, -1, frame.child, frame.child.anchor, Loc ["STRING_PLUGIN_CLEAN"], [[Interface\Buttons\UI-GroupLoot-Pass-Down]], true) - - local current - - for index, _name_and_icon in ipairs(_detalhes.StatusBar.Menu) do - GameCooltip:AddMenu (1, ChoosePlugin, {index, frame.child, frame.child.anchor}, nil, nil, _name_and_icon [1], _name_and_icon [2], true) - - local pluginMestre = _detalhes.StatusBar.Plugins [index] - + GameCooltip:SetType("menu") + + GameCooltip:AddMenu(1, ChoosePlugin, -1, frame.child, frame.child.anchor, Loc ["STRING_PLUGIN_CLEAN"], [[Interface\Buttons\UI-GroupLoot-Pass-Down]], true) + + local currentIndex + + for index, thisNameIconTable in ipairs(Details.StatusBar.Menu) do + GameCooltip:AddMenu(1, ChoosePlugin, {index, frame.child, frame.child.anchor}, nil, nil, thisNameIconTable[1], thisNameIconTable[2], true) + local pluginMestre = Details.StatusBar.Plugins[index] if (pluginMestre and pluginMestre.real_name == frame.child.mainPlugin.real_name) then - current = index+1 + currentIndex = index + 1 end end - - if (current) then - GameCooltip:SetLastSelected (1, current) + + if (currentIndex) then + GameCooltip:SetLastSelected(1, currentIndex) else GameCooltip:SetOption("NoLastSelectedBar", true) end - GameCooltip:SetOption("HeightAnchorMod", -12) - GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true) + GameCooltip:SetWallpaper(1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true) GameCooltip:ShowCooltip(frame, "menu") end + return true end --reset micro frames - function _detalhes.StatusBar:Reset (instance) - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "textcolor", {1, 0.82, 0, 1}) - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "textcolor", {1, 0.82, 0, 1}) - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "textcolor", {1, 0.82, 0, 1}) + function Details.StatusBar:Reset(instance) + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "textcolor", {1, 0.82, 0, 1}) + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "textcolor", {1, 0.82, 0, 1}) + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "textcolor", {1, 0.82, 0, 1}) - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "textface", "Friz Quadrata TT") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "textface", "Friz Quadrata TT") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "textface", "Friz Quadrata TT") + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "textface", "Friz Quadrata TT") + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "textface", "Friz Quadrata TT") + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "textface", "Friz Quadrata TT") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "textsize", 9) - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "textsize", 9) - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "textsize", 9) + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "textsize", 9) + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "textsize", 9) + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "textsize", 9) end - - function _detalhes.StatusBar:GetIndexFromAbsoluteName (AbsName) - for index, object in ipairs(_detalhes.StatusBar.Plugins) do - if (object.real_name == AbsName) then + + function Details.StatusBar:GetIndexFromAbsoluteName(absoluteName) + for index, object in ipairs(Details.StatusBar.Plugins) do + if (object.real_name == absoluteName) then return index end end end - - function _detalhes.StatusBar:UpdateOptions (instance) - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "textcolor") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "textsize") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "textface") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "textxmod") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "textymod") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "hidden") - - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "textcolor") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "textsize") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "textface") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "textxmod") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "textymod") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "hidden") - - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "textcolor") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "textsize") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "textface") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "textxmod") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "textymod") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "hidden") + + function Details.StatusBar:UpdateOptions(instance) + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "textcolor") + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "textsize") + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "textface") + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "textxmod") + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "textymod") + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "hidden") + + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "textcolor") + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "textsize") + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "textface") + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "textxmod") + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "textymod") + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "hidden") + + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "textcolor") + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "textsize") + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "textface") + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "textxmod") + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "textymod") + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "hidden") end - - function _detalhes.StatusBar:UpdateChilds (instance) - + + function Details.StatusBar:UpdateChilds(instance) local left = instance.StatusBarSaved.left local center = instance.StatusBarSaved.center local right = instance.StatusBarSaved.right - local left_index = _detalhes.StatusBar:GetIndexFromAbsoluteName (left) - ChoosePlugin (nil, nil, left_index, instance.StatusBar.left, "left") - - local center_index = _detalhes.StatusBar:GetIndexFromAbsoluteName (center) - ChoosePlugin (nil, nil, center_index, instance.StatusBar.center, "center") - - local right_index = _detalhes.StatusBar:GetIndexFromAbsoluteName (right) - ChoosePlugin (nil, nil, right_index, instance.StatusBar.right, "right") - - if (instance.StatusBarSaved.options and instance.StatusBarSaved.options [left]) then - instance.StatusBar.left.options = Details.CopyTable(instance.StatusBarSaved.options [left]) - end - if (instance.StatusBarSaved.options and instance.StatusBarSaved.options [center]) then - instance.StatusBar.center.options = Details.CopyTable(instance.StatusBarSaved.options [center]) - end - if (instance.StatusBarSaved.options and instance.StatusBarSaved.options [right]) then - instance.StatusBar.right.options = Details.CopyTable(instance.StatusBarSaved.options [right]) - end - - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "textcolor") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "textsize") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "textface") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "textxmod") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "textymod") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.left, "hidden") - - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "textcolor") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "textsize") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "textface") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "textxmod") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "textymod") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.center, "hidden") - - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "textcolor") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "textsize") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "textface") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "textxmod") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "textymod") - _detalhes.StatusBar:ApplyOptions (instance.StatusBar.right, "hidden") + local left_index = Details.StatusBar:GetIndexFromAbsoluteName(left) + ChoosePlugin(nil, nil, left_index, instance.StatusBar.left, "left") + local center_index = Details.StatusBar:GetIndexFromAbsoluteName(center) + ChoosePlugin(nil, nil, center_index, instance.StatusBar.center, "center") + + local right_index = Details.StatusBar:GetIndexFromAbsoluteName(right) + ChoosePlugin(nil, nil, right_index, instance.StatusBar.right, "right") + + if (instance.StatusBarSaved.options and instance.StatusBarSaved.options[left]) then + instance.StatusBar.left.options = Details.CopyTable(instance.StatusBarSaved.options[left]) + end + + if (instance.StatusBarSaved.options and instance.StatusBarSaved.options[center]) then + instance.StatusBar.center.options = Details.CopyTable(instance.StatusBarSaved.options[center]) + end + + if (instance.StatusBarSaved.options and instance.StatusBarSaved.options[right]) then + instance.StatusBar.right.options = Details.CopyTable(instance.StatusBarSaved.options[right]) + end + + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "textcolor") + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "textsize") + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "textface") + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "textxmod") + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "textymod") + Details.StatusBar:ApplyOptions(instance.StatusBar.left, "hidden") + + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "textcolor") + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "textsize") + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "textface") + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "textxmod") + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "textymod") + Details.StatusBar:ApplyOptions(instance.StatusBar.center, "hidden") + + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "textcolor") + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "textsize") + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "textface") + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "textxmod") + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "textymod") + Details.StatusBar:ApplyOptions(instance.StatusBar.right, "hidden") end - + --build-in function for create a frame for an plugin child - function _detalhes.StatusBar:CreateChildFrame (instance, name, w, h) + function Details.StatusBar:CreateChildFrame(instance, frameName, width, height) --local frame = _detalhes.gump:NewPanel(instance.baseframe.cabecalho.fechar, nil, name..instance:GetInstanceId(), nil, w or DEFAULT_CHILD_WIDTH, h or DEFAULT_CHILD_HEIGHT, false) - local frame = _detalhes.gump:NewPanel(instance.baseframe, nil, name..instance:GetInstanceId(), nil, w or DEFAULT_CHILD_WIDTH, h or DEFAULT_CHILD_HEIGHT, false) - frame:SetFrameLevel(instance.baseframe:GetFrameLevel()+4) + local frame = detailsFramework:NewPanel(instance.baseframe, nil, frameName .. instance:GetInstanceId(), nil, width or DEFAULT_CHILD_WIDTH, height or DEFAULT_CHILD_HEIGHT, false) + frame:SetFrameLevel(instance.baseframe:GetFrameLevel() + 4) --create widgets - local text = _detalhes.gump:NewLabel(frame, nil, "$parentText", "text", "0") - text:SetPoint("right", frame, "right", 0, 0) - text:SetJustifyH("right") - _detalhes:SetFontSize(text, 9.8) - + local newLabel = detailsFramework:NewLabel(frame, nil, "$parentText", "text", "0") + newLabel:SetPoint("right", frame, "right", 0, 0) + newLabel:SetJustifyH("right") + Details:SetFontSize(newLabel, 9.8) + frame:SetHook("OnEnter", OnEnter) frame:SetHook("OnLeave", OnLeave) frame:SetHook("OnMouseUp", OnMouseUp) @@ -486,23 +469,22 @@ end --built-in function for create an table for the plugin child - function _detalhes.StatusBar:CreateChildTable (instance, mainObject, frame) - - local _table = {} - + function Details.StatusBar:CreateChildTable(instance, mainObject, frame) + local childTable = {} + --treat as a class - setmetatable(_table, mainObject) - + setmetatable(childTable, mainObject) + --default members - _table.instance = instance - _table.frame = frame - _table.text = frame.text - _table.mainPlugin = mainObject - + childTable.instance = instance + childTable.frame = frame + childTable.text = frame.text + childTable.mainPlugin = mainObject + --options table - _table.options = instance.StatusBar.options [mainObject.real_name] - if (not _table.options) then - _table.options = { + childTable.options = instance.StatusBar.options[mainObject.real_name] + if (not childTable.options) then + childTable.options = { textStyle = 2, textColor = {unpack(DEFAULT_CHILD_FONTCOLOR)}, textSize = DEFAULT_CHILD_FONTSIZE, @@ -510,82 +492,69 @@ textXMod = 0, textYMod = 0, textFace = DEFAULT_CHILD_FONTFACE} - instance.StatusBar.options [mainObject.real_name] = _table.options + instance.StatusBar.options[mainObject.real_name] = childTable.options end - - _detalhes.StatusBar:ApplyOptions (_table, "textcolor") - _detalhes.StatusBar:ApplyOptions (_table, "textsize") - _detalhes.StatusBar:ApplyOptions (_table, "textface") - - _detalhes.StatusBar:ReloadAnchors (instance) - + + Details.StatusBar:ApplyOptions(childTable, "textcolor") + Details.StatusBar:ApplyOptions(childTable, "textsize") + Details.StatusBar:ApplyOptions(childTable, "textface") + + Details.StatusBar:ReloadAnchors(instance) + --table reference on frame widget - frame.frame.child = _table - + frame.frame.child = childTable + --adds this new child to parent child container - mainObject.childs [#mainObject.childs+1] = _table - - return _table + mainObject.childs[#mainObject.childs+1] = childTable + + return childTable end - function _detalhes.StatusBar:ApplyOptions (child, option, value) - + function Details.StatusBar:ApplyOptions(child, option, value) option = string.lower(option) - + if (option == "textxmod") then - if (value == nil) then value = child.options.textXMod end - child.options.textXMod = value - _detalhes.StatusBar:ReloadAnchors (child.instance) - + Details.StatusBar:ReloadAnchors(child.instance) + elseif (option == "textymod") then - if (value == nil) then value = child.options.textYMod end - child.options.textYMod = value - _detalhes.StatusBar:ReloadAnchors (child.instance) - + Details.StatusBar:ReloadAnchors(child.instance) + elseif (option == "textcolor") then - if (value == nil) then value = child.options.textColor end - child.options.textColor = value - local r, g, b, a = _detalhes.gump:ParseColors(child.options.textColor) + local r, g, b, a = detailsFramework:ParseColors(child.options.textColor) child.text:SetTextColor(r, g, b, a) - + elseif (option == "textsize") then - if (value == nil) then value = child.options.textSize end - child.options.textSize = value or 9 child:SetFontSize(child.text, child.options.textSize) - + elseif (option == "textface") then - if (value == nil) then value = child.options.textFace end - child.options.textFace = value - child:SetFontFace (child.text, SharedMedia:Fetch ("font", child.options.textFace)) - + child:SetFontFace(child.text, SharedMedia:Fetch("font", child.options.textFace)) + elseif (option == "hidden") then - if (value == nil) then value = child.options.isHidden end - child.options.isHidden = value - + if (value) then child.frame.text:Hide() if (child.frame.texture) then @@ -598,8 +567,8 @@ end end else - if (child [option] and type(child [option]) == "function") then - child [option] (nil, child, value) + if (child[option] and type(child[option]) == "function") then + child[option](nil, child, value) end end end @@ -607,936 +576,893 @@ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --BUILT-IN DPS PLUGIN do + --Create the plugin Object[1] = frame name on _G[2] options[3] plugin type + local PDps = Details:NewPluginObject("Details_StatusBarDps", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") - --Create the plugin Object [1] = frame name on _G [2] options [3] plugin type - local PDps = _detalhes:NewPluginObject ("Details_StatusBarDps", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") - - --[[ Note: Declare all functions using : not . if you use . make sure to ignore first parameter and move all parameters 1 position to right ]] - - -- handle event "COMBAT_PLAYER_ENTER" - function PDps:PlayerEnterCombat() - for index, child in ipairs(PDps.childs) do - if (child.enabled and child.instance:GetSegment() == 0) then - child.tick = _detalhes:ScheduleRepeatingTimer ("PluginDpsUpdate", 1, child) - end + --handle event "COMBAT_PLAYER_ENTER" + function PDps:PlayerEnterCombat() + for index, child in ipairs(PDps.childs) do + if (child.enabled and child.instance:GetSegment() == 0) then + child.tick = Details:ScheduleRepeatingTimer("PluginDpsUpdate", 1, child) end end - - -- handle event "COMBAT_PLAYER_LEAVE" - function PDps:PlayerLeaveCombat() - for index, child in ipairs(PDps.childs) do - if (child.tick) then - _detalhes:CancelTimer(child.tick) - child.tick = nil - end + end + + --handle event "COMBAT_PLAYER_LEAVE" + function PDps:PlayerLeaveCombat() + for index, child in ipairs(PDps.childs) do + if (child.tick) then + Details:CancelTimer(child.tick) + child.tick = nil end end + end - -- handle event "DETAILS_INSTANCE_CHANGESEGMENT" - function PDps:ChangeSegment (instance, segment) - for index, child in ipairs(PDps.childs) do - if (child.enabled and child.instance == instance) then - _detalhes:PluginDpsUpdate (child) - end + --handle event "DETAILS_INSTANCE_CHANGESEGMENT" + function PDps:ChangeSegment(instance, segment) + for index, child in ipairs(PDps.childs) do + if (child.enabled and child.instance == instance) then + Details:PluginDpsUpdate(child) end end - - --handle event "DETAILS_DATA_RESET" - function PDps:DataReset() - for index, child in ipairs(PDps.childs) do - if (child.enabled) then - child.text:SetText("0") - end + end + + --handle event "DETAILS_DATA_RESET" + function PDps:DataReset() + for index, child in ipairs(PDps.childs) do + if (child.enabled) then + child.text:SetText("0") end end + end - function PDps:Refresh (child) - _detalhes:PluginDpsUpdate (child) - end - - --still a little buggy, working on - function _detalhes:PluginDpsUpdate (child) - - --showing is the combat table which is current shown on instance - if (child.instance.showing) then - - --GetCombatTime() return the time length of combat - local combatTime = child.instance.showing:GetCombatTime() - if (combatTime < 1) then - return child.text:SetText("0") - end - - --GetTotal (attribute, sub attribute, onlyGroup) return the total of requested attribute - local total = child.instance.showing:GetTotal (child.instance.atributo, child.instance.sub_atributo, true) - - local dps = _math_floor(total / combatTime) - - local textStyle = child.options.textStyle - if (textStyle == 1) then - child.text:SetText(_detalhes:ToK (dps)) - elseif (textStyle == 2) then - child.text:SetText(_detalhes:comma_value (dps)) - else - child.text:SetText(dps) - end + function PDps:Refresh(child) + Details:PluginDpsUpdate(child) + end + + --still a little buggy, working on + function Details:PluginDpsUpdate(child) + --showing is the combat table which is current shown on instance + if (child.instance.showing and not child.instance.showing.__destroyed) then + --GetCombatTime() return the time length of combat + local combatTime = child.instance.showing:GetCombatTime() + if (combatTime < 1) then + return child.text:SetText("0") + end + + --GetTotal(attribute, sub attribute, onlyGroup) return the total of requested attribute + local total = child.instance.showing:GetTotal(child.instance.atributo, child.instance.sub_atributo, true) + + local dps = math.floor(total / combatTime) + + local textStyle = child.options.textStyle + if (textStyle == 1) then + child.text:SetText(Details:ToK(dps)) + + elseif (textStyle == 2) then + child.text:SetText(Details:CommaValue(dps)) + + else + child.text:SetText(dps) end end - - --Create Plugin Frames - function PDps:CreateChildObject (instance) - --create main frame and widgets - --a statusbar frame is made of a panel with a member called 'text' which is a label - local myframe = _detalhes.StatusBar:CreateChildFrame (instance, "DetailsStatusBarDps", DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) - local new_child = _detalhes.StatusBar:CreateChildTable (instance, PDps, myframe) - - return new_child - end - - --Handle events (must have, we'll use direct call to functions) - function PDps:OnDetailsEvent (event) - return - end + end - --Install - -- _detalhes:InstallPlugin ( Plugin Type | Plugin Display Name | Plugin Icon | Plugin Object | Plugin Real Name ) - local install = _detalhes:InstallPlugin ("STATUSBAR", Loc ["STRING_PLUGIN_PDPSNAME"], "Interface\\Icons\\Achievement_brewery_3", PDps, "DETAILS_STATUSBAR_PLUGIN_PDPS") - if (type(install) == "table" and install.error) then - print(install.errortext) - return - end - - --Register needed events - -- here we are redirecting the event to an specified function, otherwise events need to be handle inside "PDps:OnDetailsEvent (event)" - _detalhes:RegisterEvent(PDps, "DETAILS_INSTANCE_CHANGESEGMENT", PDps.ChangeSegment) - _detalhes:RegisterEvent(PDps, "DETAILS_DATA_RESET", PDps.DataReset) - _detalhes:RegisterEvent(PDps, "COMBAT_PLAYER_ENTER", PDps.PlayerEnterCombat) - _detalhes:RegisterEvent(PDps, "COMBAT_PLAYER_LEAVE", PDps.PlayerLeaveCombat) + --Create Plugin Frames + function PDps:CreateChildObject(instance) + --create main frame and widgets + --a statusbar frame is made of a panel with a member called 'text' which is a label + local childFrame = Details.StatusBar:CreateChildFrame(instance, "DetailsStatusBarDps", DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) + local newChild = Details.StatusBar:CreateChildTable(instance, PDps, childFrame) + return newChild + end + --Handle events(must have, we'll use direct call to functions) + function PDps:OnDetailsEvent(event) + return + end + + --Install + --_detalhes:InstallPlugin( Plugin Type | Plugin Display Name | Plugin Icon | Plugin Object | Plugin Real Name ) + local install = Details:InstallPlugin("STATUSBAR", Loc ["STRING_PLUGIN_PDPSNAME"], "Interface\\Icons\\Achievement_brewery_3", PDps, "DETAILS_STATUSBAR_PLUGIN_PDPS") + if (type(install) == "table" and install.error) then + print(install.errortext) + return + end + + --Register needed events + --here we are redirecting the event to an specified function, otherwise events need to be handle inside "PDps:OnDetailsEvent(event)" + Details:RegisterEvent(PDps, "DETAILS_INSTANCE_CHANGESEGMENT", PDps.ChangeSegment) + Details:RegisterEvent(PDps, "DETAILS_DATA_RESET", PDps.DataReset) + Details:RegisterEvent(PDps, "COMBAT_PLAYER_ENTER", PDps.PlayerEnterCombat) + Details:RegisterEvent(PDps, "COMBAT_PLAYER_LEAVE", PDps.PlayerLeaveCombat) end ---------BUILT-IN SEGMENT PLUGIN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- do - --Create the plugin Object - local PSegment = _detalhes:NewPluginObject ("Details_Segmenter", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") - --Handle events (must have) - function PSegment:OnDetailsEvent (event) - return - end - - --initialize and reset 'can_schedule' variable - function PSegment:NewCombat() - PSegment.can_schedule = 1 - PSegment:Change() - end - function PSegment:OnSegmentChange() - PSegment.can_schedule = 1 - PSegment:Change() - end + --Create the plugin Object + local PSegment = Details:NewPluginObject("Details_Segmenter", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") + --Handle events(must have) + function PSegment:OnDetailsEvent(event) + return + end - --on 'can_schedule' timeout, re-run the Change() function - function PSegment:SchduleGetName() - PSegment:Change() - end - - function PSegment:Change() - - for index, child in ipairs(PSegment.childs) do - - if (child.enabled and child.instance:IsEnabled()) then - - child.options.segmentType = child.options.segmentType or 2 + --initialize and reset 'can_schedule' variable + function PSegment:NewCombat() + PSegment.can_schedule = 1 + PSegment:Change() + end - if (not child.instance.showing) then - return child.text:SetText(Loc ["STRING_EMPTY_SEGMENT"]) - end - - if (child.instance.segmento == -1) then --overall - child.text:SetText(Loc ["STRING_OVERALL"]) - - elseif (child.instance.segmento == 0) then --combate atual + function PSegment:OnSegmentChange() + PSegment.can_schedule = 1 + PSegment:Change() + end - if (child.options.segmentType == 1) then - child.text:SetText(Loc ["STRING_CURRENT"]) + --on 'can_schedule' timeout, re-run the Change() function + function PSegment:SchduleGetName() + PSegment:Change() + end + + function PSegment:Change() + for index, child in ipairs(PSegment.childs) do + if (child.enabled and child.instance:IsEnabled()) then + child.options.segmentType = child.options.segmentType or 2 + + if (not child.instance.showing) then + return child.text:SetText(Loc ["STRING_EMPTY_SEGMENT"]) + end + + if (child.instance:GetSegmentId() == DETAILS_SEGMENTID_OVERALL) then + child.text:SetText(Loc ["STRING_OVERALL"]) + + elseif (child.instance:GetSegmentId() == DETAILS_SEGMENTID_CURRENT) then + if (child.options.segmentType == 1) then + child.text:SetText(Loc ["STRING_CURRENT"]) + else + local combatName = Details.tabela_vigente:GetCombatName(true) + + if (combatName and combatName ~= Loc ["STRING_UNKNOW"]) then + if (child.options.segmentType == 2) then + child.text:SetText(combatName) + + elseif (child.options.segmentType == 3) then + child.text:SetText(combatName) + end else - local name = _detalhes.tabela_vigente:GetCombatName(true) - - if (name and name ~= Loc ["STRING_UNKNOW"]) then - if (child.options.segmentType == 2) then - child.text:SetText(name) - elseif (child.options.segmentType == 3) then - child.text:SetText(name) - end - else - child.text:SetText(Loc ["STRING_CURRENT"]) - if (_detalhes.in_combat and PSegment.can_schedule <= 2) then - PSegment:ScheduleTimer("SchduleGetName", 2) - PSegment.can_schedule = PSegment.can_schedule + 1 - return - end + child.text:SetText(Loc ["STRING_CURRENT"]) + if (Details.in_combat and PSegment.can_schedule <= 2) then + PSegment:ScheduleTimer("SchduleGetName", 2) + PSegment.can_schedule = PSegment.can_schedule + 1 + return end end - - else --alguma tabela do hist�rico - - if (child.options.segmentType == 1) then - child.text:SetText(Loc ["STRING_FIGHTNUMBER"] .. child.instance.segmento) - + end + + else --some other segment in the segment container + if (child.options.segmentType == 1) then + child.text:SetText(Loc ["STRING_FIGHTNUMBER"] .. child.instance:GetSegmentId()) + + else + local combatName = child.instance.showing:GetCombatName(true) + if (combatName ~= Loc ["STRING_UNKNOW"]) then + if (child.options.segmentType == 2) then + child.text:SetText(combatName) + + elseif (child.options.segmentType == 3) then + child.text:SetText(combatName .. " #" .. child.instance:GetSegmentId()) + end else - local name = child.instance.showing:GetCombatName(true) - if (name ~= Loc ["STRING_UNKNOW"]) then - if (child.options.segmentType == 2) then - child.text:SetText(name) - elseif (child.options.segmentType == 3) then - child.text:SetText(name .. " #" .. child.instance.segmento) - end - else - if (child.options.segmentType == 2) then - child.text:SetText(Loc ["STRING_UNKNOW"]) - elseif (child.options.segmentType == 3) then - child.text:SetText(Loc ["STRING_UNKNOW"] .. " #" .. child.instance.segmento) - end + if (child.options.segmentType == 2) then + child.text:SetText(Loc ["STRING_UNKNOW"]) + + elseif (child.options.segmentType == 3) then + child.text:SetText(Loc ["STRING_UNKNOW"] .. " #" .. child.instance:GetSegmentId()) end end end end end end - - function PSegment:ExtraOptions() - - --all widgets need to be placed on a table - local widgets = {} - --reference of extra window for custom options - local window = _G.DetailsStatusBarOptions2.MyObject - - --build all your widgets ----------------------------------------------------------------------------------------------------------------------------- - _detalhes.gump:NewLabel(window, nil, "$parentSegmentOptionLabel", "segmentOptionLabel", Loc ["STRING_PLUGIN_SEGMENTTYPE"]) - window.segmentOptionLabel:SetPoint(10, -15) - - local onSelectSegmentType = function(_, child, thistype) - child.options.segmentType = thistype - PSegment:Change() - end - - local segmentTypes = { - {value = 1, label = Loc ["STRING_PLUGIN_SEGMENTTYPE_1"], onclick = onSelectSegmentType, icon = [[Interface\ICONS\Ability_Rogue_KidneyShot]]}, - {value = 2, label = Loc ["STRING_PLUGIN_SEGMENTTYPE_2"], onclick = onSelectSegmentType, icon = [[Interface\ICONS\Achievement_Boss_Ra_Den]]}, - {value = 3, label = Loc ["STRING_PLUGIN_SEGMENTTYPE_3"], onclick = onSelectSegmentType, icon = [[Interface\ICONS\Achievement_Boss_Durumu]]}, - } - - _detalhes.gump:NewDropDown (window, nil, "$parentSegmentTypeDropdown", "segmentTypeDropdown", 200, 20, function() return segmentTypes end, 1) -- func, default - window.segmentTypeDropdown:SetPoint("left", window.segmentOptionLabel, "right", 2) - ----------------------------------------------------------------------------------------------------------------------------- - - --now we insert all widgets created on widgets table - table.insert(widgets, window.segmentOptionLabel) - table.insert(widgets, window.segmentTypeDropdown) + end - --after first call we replace this function with widgets table - PSegment.ExtraOptions = widgets + function PSegment:ExtraOptions() + --all widgets need to be placed on a table + local widgets = {} + --reference of extra window for custom options + local window = _G.DetailsStatusBarOptions2.MyObject + + --build widgets + detailsFramework:NewLabel(window, nil, "$parentSegmentOptionLabel", "segmentOptionLabel", Loc ["STRING_PLUGIN_SEGMENTTYPE"]) + window.segmentOptionLabel:SetPoint(10, -15) + + local onSelectSegmentType = function(_, childObject, thisType) + childObject.options.segmentType = thisType + PSegment:Change() end - - --ExtraOptionsOnOpen is called when options are opened and plugin have custom options - --here we setup options widgets for get the values of clicked child and also for tell options window what child we are configuring - function PSegment:ExtraOptionsOnOpen (child) - _G.DetailsStatusBarOptions2SegmentTypeDropdown.MyObject:SetFixedParameter(child) - _G.DetailsStatusBarOptions2SegmentTypeDropdown.MyObject:Select(child.options.segmentType, true) - end - - --Create Plugin Frames (must have) - function PSegment:CreateChildObject (instance) - local myframe = _detalhes.StatusBar:CreateChildFrame (instance, "DetailsPSegmentInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) - local new_child = _detalhes.StatusBar:CreateChildTable (instance, PSegment, myframe) - new_child.options.segmentType = new_child.options.segmentType or 2 - return new_child - end - - --Install - local install = _detalhes:InstallPlugin ("STATUSBAR", Loc ["STRING_PLUGIN_PSEGMENTNAME"], "Interface\\Icons\\inv_misc_enchantedscroll", PSegment, "DETAILS_STATUSBAR_PLUGIN_PSEGMENT") - if (type(install) == "table" and install.error) then - print(install.errortext) - return - end - - --Register needed events - _detalhes:RegisterEvent(PSegment, "DETAILS_INSTANCE_CHANGESEGMENT", PSegment.OnSegmentChange) - _detalhes:RegisterEvent(PSegment, "DETAILS_DATA_RESET", PSegment.Change) - _detalhes:RegisterEvent(PSegment, "COMBAT_PLAYER_ENTER", PSegment.NewCombat) - + + local segmentTypes = { + {value = 1, label = Loc ["STRING_PLUGIN_SEGMENTTYPE_1"], onclick = onSelectSegmentType, icon = [[Interface\ICONS\Ability_Rogue_KidneyShot]]}, + {value = 2, label = Loc ["STRING_PLUGIN_SEGMENTTYPE_2"], onclick = onSelectSegmentType, icon = [[Interface\ICONS\Achievement_Boss_Ra_Den]]}, + {value = 3, label = Loc ["STRING_PLUGIN_SEGMENTTYPE_3"], onclick = onSelectSegmentType, icon = [[Interface\ICONS\Achievement_Boss_Durumu]]}, + } + + detailsFramework:NewDropDown(window, nil, "$parentSegmentTypeDropdown", "segmentTypeDropdown", 200, 20, function() return segmentTypes end, 1) --func, default + window.segmentTypeDropdown:SetPoint("left", window.segmentOptionLabel, "right", 2) + + --insert all widgets created on widgets table + table.insert(widgets, window.segmentOptionLabel) + table.insert(widgets, window.segmentTypeDropdown) + + --after first call, replace this function with widgets table + PSegment.ExtraOptions = widgets + end + + --ExtraOptionsOnOpen is called when options are opened and plugin have custom options + --here we setup options widgets for get the values of clicked child and also for tell options window what child we are configuring + function PSegment:ExtraOptionsOnOpen(child) + _G.DetailsStatusBarOptions2SegmentTypeDropdown.MyObject:SetFixedParameter(child) + _G.DetailsStatusBarOptions2SegmentTypeDropdown.MyObject:Select(child.options.segmentType, true) + end + + --Create Plugin Frames(must have) + function PSegment:CreateChildObject(instance) + local childFrame = Details.StatusBar:CreateChildFrame(instance, "DetailsPSegmentInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) + local newChild = Details.StatusBar:CreateChildTable(instance, PSegment, childFrame) + newChild.options.segmentType = newChild.options.segmentType or 2 + return newChild + end + + --Install + local install = Details:InstallPlugin("STATUSBAR", Loc ["STRING_PLUGIN_PSEGMENTNAME"], "Interface\\Icons\\inv_misc_enchantedscroll", PSegment, "DETAILS_STATUSBAR_PLUGIN_PSEGMENT") + if (type(install) == "table" and install.error) then + print(install.errortext) + return + end + + --Register needed events + Details:RegisterEvent(PSegment, "DETAILS_INSTANCE_CHANGESEGMENT", PSegment.OnSegmentChange) + Details:RegisterEvent(PSegment, "DETAILS_DATA_RESET", PSegment.Change) + Details:RegisterEvent(PSegment, "COMBAT_PLAYER_ENTER", PSegment.NewCombat) end ---------BUILT-IN ATTRIBUTE PLUGIN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - do - --Create the plugin Object - local PAttribute = _detalhes:NewPluginObject ("Details_Attribute", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") - --Handle events (must have) - function PAttribute:OnDetailsEvent (event) - return + --Create the plugin Object + local PAttribute = Details:NewPluginObject("Details_Attribute", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") + --Handle events(must have) + function PAttribute:OnDetailsEvent(event) + return + end + + function PAttribute:Change(instance) + if (not instance) then + instance = self.instance end - function PAttribute:Change (instance, attribute, subAttribute) - if (not instance) then - instance, attribute, subAttribute = self.instance, self.instance.atributo, self.instance.sub_atributo - end - - for index, child in ipairs(PAttribute.childs) do - if (child.instance == instance and child.enabled and child.instance:IsEnabled()) then - local sName = child.instance:GetInstanceAttributeText() - child.text:SetText(sName) - end + for index, child in ipairs(PAttribute.childs) do + if (child.instance == instance and child.enabled and child.instance:IsEnabled()) then + local sName = child.instance:GetInstanceAttributeText() + child.text:SetText(sName) end end - - function PAttribute:OnEnable() - self:Change() - end - - --Create Plugin Frames (must have) - function PAttribute:CreateChildObject (instance) - local myframe = _detalhes.StatusBar:CreateChildFrame (instance, "DetailsPAttributeInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) - local new_child = _detalhes.StatusBar:CreateChildTable (instance, PAttribute, myframe) - return new_child - end - - --Install - local install = _detalhes:InstallPlugin ("STATUSBAR", Loc ["STRING_PLUGIN_PATTRIBUTENAME"], "Interface\\Icons\\inv_misc_emberclothbolt", PAttribute, "DETAILS_STATUSBAR_PLUGIN_PATTRIBUTE") - if (type(install) == "table" and install.error) then - print(install.errortext) - return - end - - --Register needed events - _detalhes:RegisterEvent(PAttribute, "DETAILS_INSTANCE_CHANGEATTRIBUTE", PAttribute.Change) - + end + + function PAttribute:OnEnable() + self:Change() + end + + --Create Plugin Frames(must have) + function PAttribute:CreateChildObject(instance) + local childFrame = Details.StatusBar:CreateChildFrame(instance, "DetailsPAttributeInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) + local newChild = Details.StatusBar:CreateChildTable(instance, PAttribute, childFrame) + return newChild + end + + --Install + local install = Details:InstallPlugin("STATUSBAR", Loc ["STRING_PLUGIN_PATTRIBUTENAME"], "Interface\\Icons\\inv_misc_emberclothbolt", PAttribute, "DETAILS_STATUSBAR_PLUGIN_PATTRIBUTE") + if (type(install) == "table" and install.error) then + print(install.errortext) + return + end + + --Register needed events + Details:RegisterEvent(PAttribute, "DETAILS_INSTANCE_CHANGEATTRIBUTE", PAttribute.Change) end ---------BUILT-IN CLOCK PLUGIN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - do + --Create the plugin Object + local Clock = Details:NewPluginObject("Details_Clock", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") + --Handle events --must have this function + function Clock:OnDetailsEvent(event) + return + end - --Create the plugin Object - local Clock = _detalhes:NewPluginObject ("Details_Clock", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") - --Handle events --must have this function - function Clock:OnDetailsEvent (event) - return - end + --enter combat + function Clock:PlayerEnterCombat() + Clock.tick = Details:ScheduleRepeatingTimer("ClockPluginTick", 1) + end - --enter combat - function Clock:PlayerEnterCombat() - Clock.tick = _detalhes:ScheduleRepeatingTimer ("ClockPluginTick", 1) - end - --leave combat - function Clock:PlayerLeaveCombat() - _detalhes:CancelTimer(Clock.tick) - end - - function _detalhes:ClockPluginTickOnSegment() - _detalhes:ClockPluginTick (true) - end - - --1 sec tick - function _detalhes:ClockPluginTick (force) + --leave combat + function Clock:PlayerLeaveCombat() + Details:CancelTimer(Clock.tick) + end - for index, child in ipairs(Clock.childs) do - local instance = child.instance - if (child.enabled and instance:IsEnabled()) then - if (instance.showing and ( (instance.segmento ~= -1) or (instance.segmento == -1 and not _detalhes.in_combat) or force) ) then - - local timeType = child.options.timeType - if (timeType == 1) then - local combatTime = instance.showing:GetCombatTime() - local minutos, segundos = _math_floor(combatTime/60), _math_floor(combatTime%60) - child.text:SetText(minutos .. "m " .. segundos .. "s") - - elseif (timeType == 2) then - local combatTime = instance.showing:GetCombatTime() - child.text:SetText(combatTime .. "s") - - elseif (timeType == 3) then - - local getSegment = instance.segmento - - if (getSegment < 1) then - getSegment = 1 - elseif (getSegment > _detalhes.segments_amount) then - getSegment = _detalhes.segments_amount - else - getSegment = getSegment+1 - end - - local lastFight = _detalhes:GetCombat(getSegment) - local currentCombatTime = instance.showing:GetCombatTime() - - if (lastFight) then - child.text:SetText(currentCombatTime - lastFight:GetCombatTime() .. "s") - else - child.text:SetText(currentCombatTime .. "s") - end + function Details:ClockPluginTickOnSegment() + Details:ClockPluginTick(true) + end + + --1 sec tick + function Details:ClockPluginTick(force) + for index, childObject in ipairs(Clock.childs) do + local instance = childObject.instance + if (childObject.enabled and instance:IsEnabled()) then + if (instance.showing and ((instance:GetSegmentId() ~= DETAILS_SEGMENTID_OVERALL) or (instance:GetSegmentId() == DETAILS_SEGMENTID_OVERALL and not Details.in_combat) or force)) then + + local timeType = childObject.options.timeType + if (timeType == 1) then + local combatTime = instance.showing:GetCombatTime() + local minutos, segundos = math.floor(combatTime/60), math.floor(combatTime%60) + childObject.text:SetText(minutos .. "m " .. segundos .. "s") + + elseif (timeType == 2) then + local combatTime = instance.showing:GetCombatTime() + childObject.text:SetText(combatTime .. "s") + + elseif (timeType == 3) then + local segmentId = instance:GetSegmentId() + + if (segmentId < 1) then + segmentId = 1 + elseif (segmentId > Details.segments_amount) then + segmentId = Details.segments_amount + else + segmentId = segmentId + 1 end + local lastFight = Details:GetCombat(segmentId) + local currentCombatTime = instance.showing:GetCombatTime() + + if (lastFight) then + childObject.text:SetText(currentCombatTime - lastFight:GetCombatTime() .. "s") + else + childObject.text:SetText(currentCombatTime .. "s") + end end end end end - - --on reset - function Clock:DataReset() - for index, child in ipairs(Clock.childs) do - if (child.enabled and child.instance:IsEnabled()) then - child.text:SetText("0m 0s") - end + end + + --on reset + function Clock:DataReset() + for index, child in ipairs(Clock.childs) do + if (child.enabled and child.instance:IsEnabled()) then + child.text:SetText("0m 0s") end end - - --this is a fixed member, put all your widgets for custom options inside this function - --if ExtraOptions isn't preset, secondary options box will be hided and only default options will be show - function Clock:ExtraOptions() - - --all widgets need to be placed on a table - local widgets = {} - --reference of extra window for custom options - local window = _G.DetailsStatusBarOptions2.MyObject - - --build all your widgets ----------------------------------------------------------------------------------------------------------------------------- - _detalhes.gump:NewLabel(window, nil, "$parentClockTypeLabel", "ClockTypeLabel", Loc ["STRING_PLUGIN_CLOCKTYPE"]) - window.ClockTypeLabel:SetPoint(10, -15) - - local onSelectClockType = function(_, child, thistype) - child.options.timeType = thistype - _detalhes:ClockPluginTick() - end - - local clockTypes = {{value = 1, label = Loc ["STRING_PLUGIN_MINSEC"], onclick = onSelectClockType}, - {value = 2, label = Loc ["STRING_PLUGIN_SECONLY"], onclick = onSelectClockType}, - {value = 3, label = Loc ["STRING_PLUGIN_TIMEDIFF"], onclick = onSelectClockType}} - - _detalhes.gump:NewDropDown (window, nil, "$parentClockTypeDropdown", "ClockTypeDropdown", 200, 20, function() return clockTypes end, 1) -- func, default - window.ClockTypeDropdown:SetPoint("left", window.ClockTypeLabel, "right", 2) - ----------------------------------------------------------------------------------------------------------------------------- - - --now we insert all widgets created on widgets table - table.insert(widgets, window.ClockTypeLabel) - table.insert(widgets, window.ClockTypeDropdown) + end - --after first call we replace this function with widgets table - Clock.ExtraOptions = widgets - end - - --ExtraOptionsOnOpen is called when options are opened and plugin have custom options - --here we setup options widgets for get the values of clicked child and also for tell options window what child we are configuring - function Clock:ExtraOptionsOnOpen (child) - _G.DetailsStatusBarOptions2ClockTypeDropdown.MyObject:SetFixedParameter(child) - _G.DetailsStatusBarOptions2ClockTypeDropdown.MyObject:Select(child.options.timeType, true) - end - - --Create Plugin Frames - function Clock:CreateChildObject (instance) + --this is a fixed member, put all your widgets for custom options inside this function + --if ExtraOptions isn't preset, secondary options box will be hided and only default options will be show + function Clock:ExtraOptions() + --all widgets need to be placed on a table + local widgets = {} + --reference of extra window for custom options + local window = _G.DetailsStatusBarOptions2.MyObject - local myframe = _detalhes.StatusBar:CreateChildFrame (instance, "DetailsClockInstance"..instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) - - --we place custom frame, widgets inside this function - --local texture = myframe:CreateTexture(nil, "overlay") - --texture:SetTexture("Interface\\AddOns\\Details\\images\\clock") - --texture:SetPoint("right", myframe.text.widget, "left") - --myframe.texture = texture + --build all your widgets + detailsFramework:NewLabel(window, nil, "$parentClockTypeLabel", "ClockTypeLabel", Loc ["STRING_PLUGIN_CLOCKTYPE"]) + window.ClockTypeLabel:SetPoint(10, -15) - local new_child = _detalhes.StatusBar:CreateChildTable (instance, Clock, myframe) - - --default text - new_child.text:SetText("0m 0s") - - --some changes from default options - if (new_child.options.textXMod == 0) then - new_child.options.textXMod = 6 - end - - --here we are adding a new option member - new_child.options.timeType = new_child.options.timeType or 1 - - return new_child + local onSelectClockType = function(_, child, thistype) + child.options.timeType = thistype + Details:ClockPluginTick() end - --Install - local install = _detalhes:InstallPlugin ("STATUSBAR", Loc ["STRING_PLUGIN_CLOCKNAME"], "Interface\\Icons\\Achievement_BG_grab_cap_flagunderXseconds", Clock, "DETAILS_STATUSBAR_PLUGIN_CLOCK") - if (type(install) == "table" and install.error) then - print(install.errortext) - return - end - - --Register needed events - _detalhes:RegisterEvent(Clock, "COMBAT_PLAYER_ENTER", Clock.PlayerEnterCombat) - _detalhes:RegisterEvent(Clock, "COMBAT_PLAYER_LEAVE", Clock.PlayerLeaveCombat) - _detalhes:RegisterEvent(Clock, "DETAILS_INSTANCE_CHANGESEGMENT", _detalhes.ClockPluginTickOnSegment) - _detalhes:RegisterEvent(Clock, "DETAILS_DATA_SEGMENTREMOVED", _detalhes.ClockPluginTick) - _detalhes:RegisterEvent(Clock, "DETAILS_DATA_RESET", Clock.DataReset) + local clockTypes = { + {value = 1, label = Loc ["STRING_PLUGIN_MINSEC"], onclick = onSelectClockType}, + {value = 2, label = Loc ["STRING_PLUGIN_SECONLY"], onclick = onSelectClockType}, + {value = 3, label = Loc ["STRING_PLUGIN_TIMEDIFF"], onclick = onSelectClockType} + } + detailsFramework:NewDropDown(window, nil, "$parentClockTypeDropdown", "ClockTypeDropdown", 200, 20, function() return clockTypes end, 1) --func, default + window.ClockTypeDropdown:SetPoint("left", window.ClockTypeLabel, "right", 2) + + --insert all widgets created on widgets table + table.insert(widgets, window.ClockTypeLabel) + table.insert(widgets, window.ClockTypeDropdown) + + --after first call we replace this function with widgets table + Clock.ExtraOptions = widgets + end + + --ExtraOptionsOnOpen is called when options are opened and plugin have custom options + --here we setup options widgets for get the values of clicked child and also for tell options window what child we are configuring + function Clock:ExtraOptionsOnOpen(child) + _G.DetailsStatusBarOptions2ClockTypeDropdown.MyObject:SetFixedParameter(child) + _G.DetailsStatusBarOptions2ClockTypeDropdown.MyObject:Select(child.options.timeType, true) + end + + --Create Plugin Frames + function Clock:CreateChildObject(instance) + local childFrame = Details.StatusBar:CreateChildFrame(instance, "DetailsClockInstance"..instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) + local newChild = Details.StatusBar:CreateChildTable(instance, Clock, childFrame) + + --default text + newChild.text:SetText("0m 0s") + + --some changes from default options + if (newChild.options.textXMod == 0) then + newChild.options.textXMod = 6 + end + + --here we are adding a new option member + newChild.options.timeType = newChild.options.timeType or 1 + + return newChild + end + + --Install + local install = Details:InstallPlugin("STATUSBAR", Loc ["STRING_PLUGIN_CLOCKNAME"], "Interface\\Icons\\Achievement_BG_grab_cap_flagunderXseconds", Clock, "DETAILS_STATUSBAR_PLUGIN_CLOCK") + if (type(install) == "table" and install.error) then + print(install.errortext) + return + end + + --Register needed events + Details:RegisterEvent(Clock, "COMBAT_PLAYER_ENTER", Clock.PlayerEnterCombat) + Details:RegisterEvent(Clock, "COMBAT_PLAYER_LEAVE", Clock.PlayerLeaveCombat) + Details:RegisterEvent(Clock, "DETAILS_INSTANCE_CHANGESEGMENT", Details.ClockPluginTickOnSegment) + Details:RegisterEvent(Clock, "DETAILS_DATA_SEGMENTREMOVED", Details.ClockPluginTick) + Details:RegisterEvent(Clock, "DETAILS_DATA_RESET", Clock.DataReset) end ---------BUILT-IN THREAT PLUGIN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - do + local _UnitDetailedThreatSituation = UnitDetailedThreatSituation --wow api - local _UnitDetailedThreatSituation = UnitDetailedThreatSituation --wow api - local _cstr = string.format --lua api - local abs = math.abs --lua api - - --Create the plugin Object - local Threat = _detalhes:NewPluginObject ("Details_TargetThreat", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") - --Handle events - function Threat:OnDetailsEvent (event) - return - end + --Create the plugin Object + local Threat = Details:NewPluginObject("Details_TargetThreat", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") + --Handle events + function Threat:OnDetailsEvent(event) + return + end - Threat.isTank = nil + Threat.isTank = nil - function Threat:PlayerEnterCombat() - local role = UnitGroupRolesAssigned("player") - if (role == "TANK") then - Threat.isTank = true - else - Threat.isTank = nil - end - Threat.tick = _detalhes:ScheduleRepeatingTimer ("ThreatPluginTick", 1) + function Threat:PlayerEnterCombat() + local role = UnitGroupRolesAssigned("player") + if (role == "TANK") then + Threat.isTank = true + else + Threat.isTank = nil end - - function Threat:PlayerLeaveCombat() - _detalhes:CancelTimer(Threat.tick) - end - - function _detalhes:ThreatPluginTick() - for index, child in ipairs(Threat.childs) do - local instance = child.instance - if (child.enabled and instance:IsEnabled()) then - -- atualiza a threat - if (not DetailsFramework.IsClassicWow()) then - local isTanking, status, threatpct, rawthreatpct, threatvalue = _UnitDetailedThreatSituation ("player", "target") - if (threatpct) then - child.text:SetText(_math_floor(threatpct).."%") - if (Threat.isTank) then - child.text:SetTextColor(abs(threatpct-100)*0.01, threatpct*0.01, 0, 1) - else - child.text:SetTextColor(threatpct*0.01, abs(threatpct-100)*0.01, 0, 1) - end + Threat.tick = Details:ScheduleRepeatingTimer("ThreatPluginTick", 1) + end + + function Threat:PlayerLeaveCombat() + Details:CancelTimer(Threat.tick) + end + + function Details:ThreatPluginTick() + for index, child in ipairs(Threat.childs) do + local instance = child.instance + if (child.enabled and instance:IsEnabled()) then + if (not DetailsFramework.IsClassicWow()) then + local isTanking, status, threatPercent, rawthreatpct, threatvalue = _UnitDetailedThreatSituation("player", "target") + if (threatPercent) then + child.text:SetText(math.floor(threatPercent).."%") + if (Threat.isTank) then + child.text:SetTextColor(math.abs(threatPercent - 100) * 0.01, threatPercent * 0.01, 0, 1) else - child.text:SetText("0%") - child.text:SetTextColor(1, 1, 1, 1) + child.text:SetTextColor(threatPercent * 0.01, math.abs(threatPercent - 100) * 0.01, 0, 1) end else child.text:SetText("0%") child.text:SetTextColor(1, 1, 1, 1) end + else + child.text:SetText("0%") + child.text:SetTextColor(1, 1, 1, 1) end end end - - --Create Plugin Frames - function Threat:CreateChildObject (instance) + end - local myframe = _detalhes.StatusBar:CreateChildFrame (instance, "DetailsThreatInstance"..instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) - - local new_child = _detalhes.StatusBar:CreateChildTable (instance, Threat, myframe) + --Create Plugin Frames + function Threat:CreateChildObject(instance) + local childFrame = Details.StatusBar:CreateChildFrame(instance, "DetailsThreatInstance"..instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) + local newChild = Details.StatusBar:CreateChildTable(instance, Threat, childFrame) - myframe.widget:RegisterEvent("PLAYER_TARGET_CHANGED") - myframe.widget:SetScript("OnEvent", function() - _detalhes:ThreatPluginTick() - end) - - return new_child - end + childFrame.widget:RegisterEvent("PLAYER_TARGET_CHANGED") + childFrame.widget:SetScript("OnEvent", function() + Details:ThreatPluginTick() + end) - --Install - local install = _detalhes:InstallPlugin ("STATUSBAR", Loc ["STRING_PLUGIN_THREATNAME"], "Interface\\Icons\\Ability_Hunter_ResistanceIsFutile", Threat, "DETAILS_STATUSBAR_PLUGIN_THREAT") - if (type(install) == "table" and install.error) then - print(install.errortext) - return - end - - --Register needed events - _detalhes:RegisterEvent(Threat, "COMBAT_PLAYER_ENTER", Threat.PlayerEnterCombat) - _detalhes:RegisterEvent(Threat, "COMBAT_PLAYER_LEAVE", Threat.PlayerLeaveCombat) + return newChild + end + --Install + local install = Details:InstallPlugin("STATUSBAR", Loc ["STRING_PLUGIN_THREATNAME"], "Interface\\Icons\\Ability_Hunter_ResistanceIsFutile", Threat, "DETAILS_STATUSBAR_PLUGIN_THREAT") + if (type(install) == "table" and install.error) then + print(install.errortext) + return + end + --Register needed events + Details:RegisterEvent(Threat, "COMBAT_PLAYER_ENTER", Threat.PlayerEnterCombat) + Details:RegisterEvent(Threat, "COMBAT_PLAYER_LEAVE", Threat.PlayerLeaveCombat) end ---------BUILT-IN PFS PLUGIN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- do - --Create the plugin Object - local PFps = _detalhes:NewPluginObject ("Details_Statusbar_Fps", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") - --Handle events (must have) - function PFps:OnDetailsEvent (event) - return - end - - function PFps:UpdateFps() - self.text:SetText(_math_floor(GetFramerate()) .. " fps") - end - - function PFps:OnDisable() - self:CancelTimer(self.srt, true) - end + --Create the plugin Object + local PFps = Details:NewPluginObject("Details_Statusbar_Fps", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") + --Handle events(must have) + function PFps:OnDetailsEvent(event) + return + end - function PFps:OnEnable() - self.srt = self:ScheduleRepeatingTimer ("UpdateFps", 1, self) - self:UpdateFps() - end - - function PFps:CreateChildObject (instance) - local myframe = _detalhes.StatusBar:CreateChildFrame (instance, "DetailsPFpsInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) - local new_child = _detalhes.StatusBar:CreateChildTable (instance, PFps, myframe) - return new_child - end - - --Install - local install = _detalhes:InstallPlugin ("STATUSBAR", Loc ["STRING_PLUGIN_FPS"], "Interface\\Icons\\Spell_Shadow_MindTwisting", PFps, "DETAILS_STATUSBAR_PLUGIN_PFPS") - if (type(install) == "table" and install.error) then - print(install.errortext) - return - end + function PFps:UpdateFps() + self.text:SetText(math.floor(GetFramerate()) .. " fps") + end + function PFps:OnDisable() + self:CancelTimer(self.srt, true) + end + + function PFps:OnEnable() + self.srt = self:ScheduleRepeatingTimer("UpdateFps", 1, self) + self:UpdateFps() + end + + function PFps:CreateChildObject(instance) + local childFrame = Details.StatusBar:CreateChildFrame(instance, "DetailsPFpsInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) + local newChild = Details.StatusBar:CreateChildTable(instance, PFps, childFrame) + return newChild + end + + --Install + local install = Details:InstallPlugin("STATUSBAR", Loc ["STRING_PLUGIN_FPS"], "Interface\\Icons\\Spell_Shadow_MindTwisting", PFps, "DETAILS_STATUSBAR_PLUGIN_PFPS") + if (type(install) == "table" and install.error) then + print(install.errortext) + return + end end ---------BUILT-IN LATENCY PLUGIN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - do - --Create the plugin Object - local PLatency = _detalhes:NewPluginObject ("Details_Statusbar_Latency", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") - --Handle events (must have) - function PLatency:OnDetailsEvent (event) - return - end - - function PLatency:UpdateLatency() - local _, _, _, lagWorld = GetNetStats() - self.text:SetText(_math_floor(lagWorld) .. " ms") - end - - function PLatency:OnDisable() - self:CancelTimer(self.srt, true) - end + --Create the plugin Object + local PLatency = Details:NewPluginObject("Details_Statusbar_Latency", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") + --Handle events(must have) + function PLatency:OnDetailsEvent(event) + return + end - function PLatency:OnEnable() - self.srt = self:ScheduleRepeatingTimer ("UpdateLatency", 30, self) - self:UpdateLatency() - end - - function PLatency:CreateChildObject (instance) - local myframe = _detalhes.StatusBar:CreateChildFrame (instance, "DetailsPLatencyInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) - local new_child = _detalhes.StatusBar:CreateChildTable (instance, PLatency, myframe) - return new_child - end - - --Install - local install = _detalhes:InstallPlugin ("STATUSBAR", Loc ["STRING_PLUGIN_LATENCY"], "Interface\\FriendsFrame\\PlusManz-BattleNet", PLatency, "DETAILS_STATUSBAR_PLUGIN_PLATENCY") - if (type(install) == "table" and install.error) then - print(install.errortext) - return - end + function PLatency:UpdateLatency() + local _, _, _, lagWorld = GetNetStats() + self.text:SetText(math.floor(lagWorld) .. " ms") + end + function PLatency:OnDisable() + self:CancelTimer(self.srt, true) + end + + function PLatency:OnEnable() + self.srt = self:ScheduleRepeatingTimer("UpdateLatency", 30, self) + self:UpdateLatency() + end + + function PLatency:CreateChildObject(instance) + local childFrame = Details.StatusBar:CreateChildFrame(instance, "DetailsPLatencyInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) + local newChild = Details.StatusBar:CreateChildTable(instance, PLatency, childFrame) + return newChild + end + + --Install + local install = Details:InstallPlugin("STATUSBAR", Loc ["STRING_PLUGIN_LATENCY"], "Interface\\FriendsFrame\\PlusManz-BattleNet", PLatency, "DETAILS_STATUSBAR_PLUGIN_PLATENCY") + if (type(install) == "table" and install.error) then + print(install.errortext) + return + end end ---------BUILT-IN DURABILITY PLUGIN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - do + local _GetInventoryItemDurability = GetInventoryItemDurability - local _GetInventoryItemDurability = GetInventoryItemDurability + --Create the plugin Object + local PDurability = Details:NewPluginObject("Details_Statusbar_Latency", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") + --Handle events(must have) + function PDurability:OnDetailsEvent(event) + return + end - --Create the plugin Object - local PDurability = _detalhes:NewPluginObject ("Details_Statusbar_Latency", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") - --Handle events (must have) - function PDurability:OnDetailsEvent (event) - return - end - - function PDurability:UpdateDurability() - local percent, items = 0, 0 - for i = INVSLOT_FIRST_EQUIPPED, INVSLOT_LAST_EQUIPPED do - local durability, maxdurability = _GetInventoryItemDurability (i) - if (durability and maxdurability) then - local p = durability / maxdurability * 100 - percent = percent + p - items = items + 1 - end + function PDurability:UpdateDurability() + local percent, items = 0, 0 + for i = INVSLOT_FIRST_EQUIPPED, INVSLOT_LAST_EQUIPPED do + local durability, maxdurability = _GetInventoryItemDurability(i) + if (durability and maxdurability) then + local durabilityPercent = durability / maxdurability * 100 + percent = percent + durabilityPercent + items = items + 1 end - - if (items == 0) then - self.text:SetText(Loc ["STRING_UPTADING"]) - return self:ScheduleTimer("UpdateDurability", 5, self) - end - - percent = percent / items - self.text:SetText(_math_floor(percent) .. "%") - end - - function PDurability:OnDisable() - self.frame.widget:UnregisterEvent ("PLAYER_DEAD") - self.frame.widget:UnregisterEvent ("PLAYER_UNGHOST") - self.frame.widget:UnregisterEvent ("UPDATE_INVENTORY_DURABILITY") - self.frame.widget:UnregisterEvent ("MERCHANT_SHOW") - self.frame.widget:UnregisterEvent ("MERCHANT_CLOSED") - self.frame.widget:UnregisterEvent ("ZONE_CHANGED_NEW_AREA") end - function PDurability:OnEnable() - self.frame.widget:RegisterEvent("PLAYER_DEAD") - self.frame.widget:RegisterEvent("PLAYER_UNGHOST") - self.frame.widget:RegisterEvent("UPDATE_INVENTORY_DURABILITY") - self.frame.widget:RegisterEvent("MERCHANT_SHOW") - self.frame.widget:RegisterEvent("MERCHANT_CLOSED") - self.frame.widget:RegisterEvent("ZONE_CHANGED_NEW_AREA") - self:UpdateDurability() + if (items == 0) then + self.text:SetText(Loc ["STRING_UPTADING"]) + return self:ScheduleTimer("UpdateDurability", 5, self) end - - function PDurability:CreateChildObject (instance) - local myframe = _detalhes.StatusBar:CreateChildFrame (instance, "DetailsPDurabilityInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) - local new_child = _detalhes.StatusBar:CreateChildTable (instance, PDurability, myframe) - - local texture = myframe:CreateTexture(nil, "overlay") - texture:SetTexture("Interface\\AddOns\\Details\\images\\icons") - texture:SetPoint("right", myframe.text.widget, "left", -2, -1) - texture:SetWidth(10) - texture:SetHeight(10) - texture:SetTexCoord(0.216796875, 0.26171875, 0.0078125, 0.052734375) - myframe.texture = texture - - myframe.widget:SetScript("OnEvent", function() - new_child:UpdateDurability() - end) - - return new_child - end - - --Install - local install = _detalhes:InstallPlugin ("STATUSBAR", Loc ["STRING_PLUGIN_DURABILITY"], "Interface\\ICONS\\INV_Chest_Chain_10", PDurability, "DETAILS_STATUSBAR_PLUGIN_PDURABILITY") - if (type(install) == "table" and install.error) then - print(install.errortext) - return - end + percent = percent / items + self.text:SetText(math.floor(percent) .. "%") + end + + function PDurability:OnDisable() + self.frame.widget:UnregisterEvent("PLAYER_DEAD") + self.frame.widget:UnregisterEvent("PLAYER_UNGHOST") + self.frame.widget:UnregisterEvent("UPDATE_INVENTORY_DURABILITY") + self.frame.widget:UnregisterEvent("MERCHANT_SHOW") + self.frame.widget:UnregisterEvent("MERCHANT_CLOSED") + self.frame.widget:UnregisterEvent("ZONE_CHANGED_NEW_AREA") + end + + function PDurability:OnEnable() + self.frame.widget:RegisterEvent("PLAYER_DEAD") + self.frame.widget:RegisterEvent("PLAYER_UNGHOST") + self.frame.widget:RegisterEvent("UPDATE_INVENTORY_DURABILITY") + self.frame.widget:RegisterEvent("MERCHANT_SHOW") + self.frame.widget:RegisterEvent("MERCHANT_CLOSED") + self.frame.widget:RegisterEvent("ZONE_CHANGED_NEW_AREA") + self:UpdateDurability() + end + + function PDurability:CreateChildObject(instance) + local childFrame = Details.StatusBar:CreateChildFrame(instance, "DetailsPDurabilityInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) + local newChild = Details.StatusBar:CreateChildTable(instance, PDurability, childFrame) + + local durabilityTexture = childFrame:CreateTexture(nil, "overlay") + durabilityTexture:SetTexture("Interface\\AddOns\\Details\\images\\icons") + durabilityTexture:SetPoint("right", childFrame.text.widget, "left", -2, -1) + durabilityTexture:SetWidth(10) + durabilityTexture:SetHeight(10) + durabilityTexture:SetTexCoord(0.216796875, 0.26171875, 0.0078125, 0.052734375) + childFrame.texture = durabilityTexture + + childFrame.widget:SetScript("OnEvent", function() + newChild:UpdateDurability() + end) + + return newChild + end + + --Install + local install = Details:InstallPlugin("STATUSBAR", Loc ["STRING_PLUGIN_DURABILITY"], "Interface\\ICONS\\INV_Chest_Chain_10", PDurability, "DETAILS_STATUSBAR_PLUGIN_PDURABILITY") + if (type(install) == "table" and install.error) then + print(install.errortext) + return + end end - ---------BUILT-IN GOLD PLUGIN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - do - --Create the plugin Object - local PGold = _detalhes:NewPluginObject ("Details_Statusbar_Gold", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") - --Handle events (must have) - function PGold:OnDetailsEvent (event) - return - end - - function PGold:GoldPluginTick() - for index, child in ipairs(PGold.childs) do - local instance = child.instance - if (child.enabled and instance:IsEnabled()) then - child:UpdateGold() - end + --Create the plugin Object + local PGold = Details:NewPluginObject("Details_Statusbar_Gold", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") + --Handle events(must have) + function PGold:OnDetailsEvent(event) + return + end + + function PGold:GoldPluginTick() + for index, child in ipairs(PGold.childs) do + local instance = child.instance + if (child.enabled and instance:IsEnabled()) then + child:UpdateGold() end end - - function PGold:UpdateGold() - self.text:SetText(_math_floor(GetMoney() / 100 / 100)) - end + end - function PGold:OnEnable() - self:UpdateGold() - end - - function PGold:CreateChildObject (instance) - local myframe = _detalhes.StatusBar:CreateChildFrame (instance, "DetailsPGoldInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) - local new_child = _detalhes.StatusBar:CreateChildTable (instance, PGold, myframe) - - local texture = myframe:CreateTexture(nil, "overlay") - texture:SetTexture("Interface\\MONEYFRAME\\UI-GoldIcon") - texture:SetPoint("right", myframe.text.widget, "left") - texture:SetWidth(12) - texture:SetHeight(12) - myframe.texture = texture - - myframe.widget:RegisterEvent("PLAYER_MONEY") - myframe.widget:RegisterEvent("PLAYER_ENTERING_WORLD") - myframe.widget:SetScript("OnEvent", function(event) - if (event == "PLAYER_ENTERING_WORLD") then - return PGold:ScheduleTimer("GoldPluginTick", 10) - end - PGold:GoldPluginTick() - end) - - return new_child - end - - --Install - local install = _detalhes:InstallPlugin ("STATUSBAR", Loc ["STRING_PLUGIN_GOLD"], "Interface\\Icons\\INV_Ore_Gold_01", PGold, "DETAILS_STATUSBAR_PLUGIN_PGold") - if (type(install) == "table" and install.error) then - print(install.errortext) - return - end + function PGold:UpdateGold() + self.text:SetText(math.floor(GetMoney() / 100 / 100)) + end + function PGold:OnEnable() + self:UpdateGold() + end + + function PGold:CreateChildObject(instance) + local childFrame = Details.StatusBar:CreateChildFrame(instance, "DetailsPGoldInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) + local newChild = Details.StatusBar:CreateChildTable(instance, PGold, childFrame) + + local coinTexture = childFrame:CreateTexture(nil, "overlay") + coinTexture:SetTexture("Interface\\MONEYFRAME\\UI-GoldIcon") + coinTexture:SetPoint("right", childFrame.text.widget, "left") + coinTexture:SetWidth(12) + coinTexture:SetHeight(12) + childFrame.texture = coinTexture + + childFrame.widget:RegisterEvent("PLAYER_MONEY") + childFrame.widget:RegisterEvent("PLAYER_ENTERING_WORLD") + childFrame.widget:SetScript("OnEvent", function(event) + if (event == "PLAYER_ENTERING_WORLD") then + return PGold:ScheduleTimer("GoldPluginTick", 10) + end + PGold:GoldPluginTick() + end) + + return newChild + end + + --Install + local install = Details:InstallPlugin("STATUSBAR", Loc ["STRING_PLUGIN_GOLD"], "Interface\\Icons\\INV_Ore_Gold_01", PGold, "DETAILS_STATUSBAR_PLUGIN_PGold") + if (type(install) == "table" and install.error) then + print(install.errortext) + return + end end ---------BUILT-IN TIME PLUGIN ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - do - --Create the plugin Object - local PTime = _detalhes:NewPluginObject ("Details_Statusbar_Time", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") - --Handle events (must have) - function PTime:OnDetailsEvent (event) - return + --Create the plugin Object + local PTime = Details:NewPluginObject("Details_Statusbar_Time", DETAILSPLUGIN_ALWAYSENABLED, "STATUSBAR") + --Handle events(must have) + function PTime:OnDetailsEvent(event) + return + end + + function PTime:UpdateClock() + if (self.options.timeType == 1) then + self.text:SetText(date("%I:%M %p")) + + elseif (self.options.timeType == 2) then + self.text:SetText(date("%H:%M")) end - - function PTime:UpdateClock() - - if (self.options.timeType == 1) then - self.text:SetText(date ("%I:%M %p")) - elseif (self.options.timeType == 2) then - self.text:SetText(date ("%H:%M")) - end - - end - - function PTime:OnDisable() - self:CancelTimer(self.srt, true) + end + + function PTime:OnDisable() + self:CancelTimer(self.srt, true) + end + + function PTime:OnEnable() + self.srt = self:ScheduleRepeatingTimer("UpdateClock", 60, self) + self:UpdateClock() + end + + function PTime:ExtraOptions() + --all widgets need to be placed on a table + local widgets = {} + --reference of extra window for custom options + local window = _G.DetailsStatusBarOptions2.MyObject + + --build all your widgets + detailsFramework:NewLabel(window, _, "$parentTimeTypeLabel", "TimeTypeLabel", Loc ["STRING_PLUGIN_CLOCKTYPE"]) + window.TimeTypeLabel:SetPoint(10, -15) + + local onSelectClockType = function(_, childObject, thisType) + childObject.options.timeType = thisType + childObject:UpdateClock() end - function PTime:OnEnable() - self.srt = self:ScheduleRepeatingTimer ("UpdateClock", 60, self) - self:UpdateClock() - end - - function PTime:ExtraOptions() - - --all widgets need to be placed on a table - local widgets = {} - --reference of extra window for custom options - local window = _G.DetailsStatusBarOptions2.MyObject - - --build all your widgets ----------------------------------------------------------------------------------------------------------------------------- - _detalhes.gump:NewLabel(window, _, "$parentTimeTypeLabel", "TimeTypeLabel", Loc ["STRING_PLUGIN_CLOCKTYPE"]) - window.TimeTypeLabel:SetPoint(10, -15) - - local onSelectClockType = function(_, child, thistype) - child.options.timeType = thistype - child:UpdateClock() - end - - local clockTypes = {{value = 1, label = date ("%I:%M %p"), onclick = onSelectClockType}, - {value = 2, label = date ("%H:%M"), onclick = onSelectClockType} - } - - _detalhes.gump:NewDropDown (window, _, "$parentTimeTypeDropdown", "TimeTypeDropdown", 200, 20, function() return clockTypes end, 1) -- func, default - window.TimeTypeDropdown:SetPoint("left", window.TimeTypeLabel, "right", 2) - ----------------------------------------------------------------------------------------------------------------------------- - - --now we insert all widgets created on widgets table - table.insert(widgets, window.TimeTypeLabel) - table.insert(widgets, window.TimeTypeDropdown) + local clockTypes = { + {value = 1, label = date("%I:%M %p"), onclick = onSelectClockType}, + {value = 2, label = date("%H:%M"), onclick = onSelectClockType} + } - --after first call we replace this function with widgets table - PTime.ExtraOptions = widgets - end - - --ExtraOptionsOnOpen is called when options are opened and plugin have custom options - --here we setup options widgets for get the values of clicked child and also for tell options window what child we are configuring - function PTime:ExtraOptionsOnOpen (child) - _G.DetailsStatusBarOptions2TimeTypeDropdown.MyObject:SetFixedParameter(child) - _G.DetailsStatusBarOptions2TimeTypeDropdown.MyObject:Select(child.options.timeType, true) - end - - --Create Plugin Frames (must have) - function PTime:CreateChildObject (instance) - local myframe = _detalhes.StatusBar:CreateChildFrame (instance, "DetailsPTimeInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) - local new_child = _detalhes.StatusBar:CreateChildTable (instance, PTime, myframe) - new_child.options.timeType = new_child.options.timeType or 1 - return new_child - end - - --Install - local install = _detalhes:InstallPlugin ("STATUSBAR", Loc ["STRING_PLUGIN_TIME"], "Interface\\Icons\\Spell_Shadow_LastingAfflictions", PTime, "DETAILS_STATUSBAR_PLUGIN_PTIME") - if (type(install) == "table" and install.error) then - print(install.errortext) - return - end - + detailsFramework:NewDropDown(window, _, "$parentTimeTypeDropdown", "TimeTypeDropdown", 200, 20, function() return clockTypes end, 1) --func, default + window.TimeTypeDropdown:SetPoint("left", window.TimeTypeLabel, "right", 2) + + --now we insert all widgets created on widgets table + table.insert(widgets, window.TimeTypeLabel) + table.insert(widgets, window.TimeTypeDropdown) + + --after first call we replace this function with widgets table + PTime.ExtraOptions = widgets + end + + --ExtraOptionsOnOpen is called when options are opened and plugin have custom options + --here we setup options widgets for get the values of clicked child and also for tell options window what child we are configuring + function PTime:ExtraOptionsOnOpen(child) + _G.DetailsStatusBarOptions2TimeTypeDropdown.MyObject:SetFixedParameter(child) + _G.DetailsStatusBarOptions2TimeTypeDropdown.MyObject:Select(child.options.timeType, true) + end + + --Create Plugin Frames(must have) + function PTime:CreateChildObject(instance) + local childFrame = Details.StatusBar:CreateChildFrame(instance, "DetailsPTimeInstance" .. instance:GetInstanceId(), DEFAULT_CHILD_WIDTH, DEFAULT_CHILD_HEIGHT) + local newChild = Details.StatusBar:CreateChildTable(instance, PTime, childFrame) + newChild.options.timeType = newChild.options.timeType or 1 + return newChild + end + + --Install + local install = Details:InstallPlugin("STATUSBAR", Loc ["STRING_PLUGIN_TIME"], "Interface\\Icons\\Spell_Shadow_LastingAfflictions", PTime, "DETAILS_STATUSBAR_PLUGIN_PTIME") + if (type(install) == "table" and install.error) then + print(install.errortext) + return + end end ---------default options panel ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +--create the options window + local window = detailsFramework:NewPanel(UIParent, nil, "DetailsStatusBarOptions", nil, 300, 180) + tinsert(UISpecialFrames, "DetailsStatusBarOptions") + window:SetPoint("center", UIParent, "center") + window.locked = false + window.close_with_right = true + window.child = nil + window.instance = nil + window:SetFrameStrata("FULLSCREEN") + DetailsFramework:ApplyStandardBackdrop(window) -local window = _detalhes.gump:NewPanel(UIParent, nil, "DetailsStatusBarOptions", nil, 300, 180) -tinsert(UISpecialFrames, "DetailsStatusBarOptions") -window:SetPoint("center", UIParent, "center") -window.locked = false -window.close_with_right = true -window.child = nil -window.instance = nil -window:SetFrameStrata("FULLSCREEN") -DetailsFramework:ApplyStandardBackdrop(window) + local extraWindow = detailsFramework:NewPanel(window, nil, "DetailsStatusBarOptions2", "extra", 300, 180) + extraWindow:SetPoint("left", window, "right") + extraWindow.close_with_right = true + extraWindow.locked = false + extraWindow:Hide() + DetailsFramework:ApplyStandardBackdrop(extraWindow) ---window:SetBackdrop({bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16, edgeFile = [[Interface\AddOns\Details\images\border_2]], edgeSize=12}) ---window:SetBackdropColor(0, 0, 0, 0.9) - -local extraWindow = _detalhes.gump:NewPanel(window, nil, "DetailsStatusBarOptions2", "extra", 300, 180) -extraWindow:SetPoint("left", window, "right") -extraWindow.close_with_right = true -extraWindow.locked = false -extraWindow:Hide() -DetailsFramework:ApplyStandardBackdrop(extraWindow) - -extraWindow:SetHook("OnHide", function() - window:Hide() -end) + extraWindow:SetHook("OnHide", function() + window:Hide() + end) --text style - _detalhes.gump:NewLabel(window, _, "$parentTextStyleLabel", "textstyle", Loc ["STRING_PLUGINOPTIONS_TEXTSTYLE"]) + detailsFramework:NewLabel(window, _, "$parentTextStyleLabel", "textstyle", Loc ["STRING_PLUGINOPTIONS_TEXTSTYLE"]) window.textstyle:SetPoint(10, -15) - + local onSelectTextStyle = function(_, child, style) - window.instance.StatusBar.left.options.textStyle = style window.instance.StatusBar.center.options.textStyle = style window.instance.StatusBar.right.options.textStyle = style if (window.instance.StatusBar.left.Refresh and type(window.instance.StatusBar.left.Refresh) == "function") then - window.instance.StatusBar.left:Refresh (window.instance.StatusBar.left) + window.instance.StatusBar.left:Refresh(window.instance.StatusBar.left) end + if (window.instance.StatusBar.center.Refresh and type(window.instance.StatusBar.center.Refresh) == "function") then - window.instance.StatusBar.center:Refresh (window.instance.StatusBar.center) + window.instance.StatusBar.center:Refresh(window.instance.StatusBar.center) end + if (window.instance.StatusBar.right.Refresh and type(window.instance.StatusBar.right.Refresh) == "function") then - window.instance.StatusBar.right:Refresh (window.instance.StatusBar.right) + window.instance.StatusBar.right:Refresh(window.instance.StatusBar.right) end - end - local textStyle = {{value = 1, label = Loc ["STRING_PLUGINOPTIONS_ABBREVIATE"] .. " (105.5K)", onclick = onSelectTextStyle}, - {value = 2, label = Loc ["STRING_PLUGINOPTIONS_COMMA"] .. " (105.500)", onclick = onSelectTextStyle}, - {value = 3, label = Loc ["STRING_PLUGINOPTIONS_NOFORMAT"] .. " (105500)", onclick = onSelectTextStyle}} - - _detalhes.gump:NewDropDown (window, _, "$parentTextStyleDropdown", "textstyleDropdown", 200, 20, function() return textStyle end, 1) -- func, default + + local textStyle = { + {value = 1, label = Loc ["STRING_PLUGINOPTIONS_ABBREVIATE"] .. "(105.5K)", onclick = onSelectTextStyle}, + {value = 2, label = Loc ["STRING_PLUGINOPTIONS_COMMA"] .. "(105.500)", onclick = onSelectTextStyle}, + {value = 3, label = Loc ["STRING_PLUGINOPTIONS_NOFORMAT"] .. "(105500)", onclick = onSelectTextStyle} + } + + detailsFramework:NewDropDown(window, _, "$parentTextStyleDropdown", "textstyleDropdown", 200, 20, function() return textStyle end, 1) --func, default window.textstyleDropdown:SetPoint("left", window.textstyle, "right", 2) --text color - _detalhes.gump:NewLabel(window, _, "$parentTextColorLabel", "textcolor", Loc ["STRING_PLUGINOPTIONS_TEXTCOLOR"]) + detailsFramework:NewLabel(window, _, "$parentTextColorLabel", "textcolor", Loc ["STRING_PLUGINOPTIONS_TEXTCOLOR"]) window.textcolor:SetPoint(10, -35) + local selectedColor = function() local r, g, b, a = ColorPickerFrame:GetColorRGB() window.textcolortexture:SetTexture(r, g, b, a) - --_detalhes.StatusBar:ApplyOptions (window.child, "textcolor", {r, g, b, a}) - + --_detalhes.StatusBar:ApplyOptions(window.child, "textcolor", {r, g, b, a}) + local color = {r, g, b, a} - _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.left, "textcolor", color) - _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.center, "textcolor", color) - _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.right, "textcolor", color) + Details.StatusBar:ApplyOptions(window.instance.StatusBar.left, "textcolor", color) + Details.StatusBar:ApplyOptions(window.instance.StatusBar.center, "textcolor", color) + Details.StatusBar:ApplyOptions(window.instance.StatusBar.right, "textcolor", color) end + local canceledColor = function() local r, g, b, a = unpack(ColorPickerFrame.previousValues) window.textcolortexture:SetTexture(r, g, b, a) local color = {r, g, b, a} - _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.left, "textcolor", color) - _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.center, "textcolor", color) - _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.right, "textcolor", color) + Details.StatusBar:ApplyOptions(window.instance.StatusBar.left, "textcolor", color) + Details.StatusBar:ApplyOptions(window.instance.StatusBar.center, "textcolor", color) + Details.StatusBar:ApplyOptions(window.instance.StatusBar.right, "textcolor", color) end + local colorpick = function() ColorPickerFrame.func = selectedColor ColorPickerFrame.cancelFunc = canceledColor @@ -1544,126 +1470,119 @@ end) ColorPickerFrame.hasOpacity = false ColorPickerFrame.previousValues = window.child.options.textColor ColorPickerFrame:SetParent(window.widget) - ColorPickerFrame:SetColorRGB (unpack(window.child.options.textColor)) + ColorPickerFrame:SetColorRGB(unpack(window.child.options.textColor)) ColorPickerFrame:Show() end - _detalhes.gump:NewImage(window, nil, 160, 16, nil, nil, "textcolortexture", "$parentTextColorTexture") + detailsFramework:NewImage(window, nil, 160, 16, nil, nil, "textcolortexture", "$parentTextColorTexture") window.textcolortexture:SetPoint("left", window.textcolor, "right", 2) window.textcolortexture:SetTexture(1, 1, 1) - - _detalhes.gump:NewButton(window, _, "$parentTextColorButton", "textcolorbutton", 160, 20, colorpick) + + detailsFramework:NewButton(window, _, "$parentTextColorButton", "textcolorbutton", 160, 20, colorpick) window.textcolorbutton:SetPoint("left", window.textcolor, "right", 2) - --window.textcolorbutton:InstallCustomTexture() - + --text size - _detalhes.gump:NewLabel(window, _, "$parentFontSizeLabel", "fonsizeLabel", Loc ["STRING_PLUGINOPTIONS_TEXTSIZE"]) + detailsFramework:NewLabel(window, _, "$parentFontSizeLabel", "fonsizeLabel", Loc ["STRING_PLUGINOPTIONS_TEXTSIZE"]) window.fonsizeLabel:SetPoint(10, -55) - -- - _detalhes.gump:NewSlider (window, _, "$parentSliderFontSize", "fonsizeSlider", 170, 20, 7, 20, 1, 1) + + detailsFramework:NewSlider(window, _, "$parentSliderFontSize", "fonsizeSlider", 170, 20, 7, 20, 1, 1) window.fonsizeSlider:SetPoint("left", window.fonsizeLabel, "right", 2) - window.fonsizeSlider:SetThumbSize (50) - --window.fonsizeSlider.useDecimals = true - window.fonsizeSlider:SetHook("OnValueChange", function(self, child, amount) - --_detalhes.StatusBar:ApplyOptions (child, "textsize", amount) - _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.left, "textsize", amount) - _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.center, "textsize", amount) - _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.right, "textsize", amount) + window.fonsizeSlider:SetThumbSize(50) + + window.fonsizeSlider:SetHook("OnValueChange", function(self, child, amount) + Details.StatusBar:ApplyOptions(window.instance.StatusBar.left, "textsize", amount) + Details.StatusBar:ApplyOptions(window.instance.StatusBar.center, "textsize", amount) + Details.StatusBar:ApplyOptions(window.instance.StatusBar.right, "textsize", amount) end) - + --text font local onSelectFont = function(_, child, fontName) - --_detalhes.StatusBar:ApplyOptions (child, "textface", fontName) - - _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.left, "textface", fontName) - _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.center, "textface", fontName) - _detalhes.StatusBar:ApplyOptions (window.instance.StatusBar.right, "textface", fontName) - + Details.StatusBar:ApplyOptions(window.instance.StatusBar.left, "textface", fontName) + Details.StatusBar:ApplyOptions(window.instance.StatusBar.center, "textface", fontName) + Details.StatusBar:ApplyOptions(window.instance.StatusBar.right, "textface", fontName) end - local buildFontMenu = function() - local fontObjects = SharedMedia:HashTable ("font") + local buildFontMenu = function() + local fontObjects = SharedMedia:HashTable("font") local fontTable = {} - for name, fontPath in pairs(fontObjects) do + for name, fontPath in pairs(fontObjects) do fontTable[#fontTable+1] = {value = name, label = name, onclick = onSelectFont, font = fontPath} end return fontTable end - - _detalhes.gump:NewLabel(window, _, "$parentFontFaceLabel", "fontfaceLabel", Loc ["STRING_PLUGINOPTIONS_FONTFACE"]) + + detailsFramework:NewLabel(window, _, "$parentFontFaceLabel", "fontfaceLabel", Loc ["STRING_PLUGINOPTIONS_FONTFACE"]) window.fontfaceLabel:SetPoint(10, -75) - -- - _detalhes.gump:NewDropDown (window, _, "$parentFontDropdown", "fontDropdown", 170, 20, buildFontMenu, nil) + + detailsFramework:NewDropDown(window, _, "$parentFontDropdown", "fontDropdown", 170, 20, buildFontMenu, nil) window.fontDropdown:SetPoint("left", window.fontfaceLabel, "right", 2) - + window:Hide() - + --align mod X - _detalhes.gump:NewLabel(window, _, "$parentAlignXLabel", "alignXLabel", Loc ["STRING_PLUGINOPTIONS_TEXTALIGN_X"]) + detailsFramework:NewLabel(window, _, "$parentAlignXLabel", "alignXLabel", Loc ["STRING_PLUGINOPTIONS_TEXTALIGN_X"]) window.alignXLabel:SetPoint(10, -115) - -- - _detalhes.gump:NewSlider (window, _, "$parentSliderAlignX", "alignXSlider", 160, 20, -20, 20, 1, 0) + + detailsFramework:NewSlider(window, _, "$parentSliderAlignX", "alignXSlider", 160, 20, -20, 20, 1, 0) window.alignXSlider:SetPoint("left", window.alignXLabel, "right", 2) - window.alignXSlider:SetThumbSize (40) - window.alignXSlider:SetHook("OnValueChange", function(self, child, amount) - _detalhes.StatusBar:ApplyOptions (child, "textxmod", amount) + window.alignXSlider:SetThumbSize(40) + window.alignXSlider:SetHook("OnValueChange", function(self, child, amount) + Details.StatusBar:ApplyOptions(child, "textxmod", amount) end) - + --align modY - _detalhes.gump:NewLabel(window, _, "$parentAlignYLabel", "alignYLabel", Loc ["STRING_PLUGINOPTIONS_TEXTALIGN_Y"]) + detailsFramework:NewLabel(window, _, "$parentAlignYLabel", "alignYLabel", Loc ["STRING_PLUGINOPTIONS_TEXTALIGN_Y"]) window.alignYLabel:SetPoint(10, -135) - -- - _detalhes.gump:NewSlider (window, _, "$parentSliderAlignY", "alignYSlider", 160, 20, -10, 10, 1, 0) + + detailsFramework:NewSlider(window, _, "$parentSliderAlignY", "alignYSlider", 160, 20, -10, 10, 1, 0) window.alignYSlider:SetPoint("left", window.alignYLabel, "right", 2) - window.alignYSlider:SetThumbSize (40) - window.alignYSlider:SetHook("OnValueChange", function(self, child, amount) - _detalhes.StatusBar:ApplyOptions (child, "textymod", amount) + window.alignYSlider:SetThumbSize(40) + window.alignYSlider:SetHook("OnValueChange", function(self, child, amount) + Details.StatusBar:ApplyOptions(child, "textymod", amount) end) - + --right click to close - local c = window:CreateRightClickLabel ("short") - c:SetPoint("bottomleft", window, "bottomleft", 8, 5) - + local rightClickLabel = window:CreateRightClickLabel("short") + rightClickLabel:SetPoint("bottomleft", window, "bottomleft", 8, 5) + --open options - function _detalhes.StatusBar:OpenOptionsForChild (child) - - window.child = child - window.instance = child.instance - - _G.DetailsStatusBarOptionsTextStyleDropdown.MyObject:Select(child.options.textStyle, true) - - _G.DetailsStatusBarOptionsTextColorTexture:SetColorTexture(child.options.textColor[1], child.options.textColor[2], child.options.textColor[3], child.options.textColor[4]) +function Details.StatusBar:OpenOptionsForChild(child) + window.child = child + window.instance = child.instance - _G.DetailsStatusBarOptionsSliderFontSize.MyObject:SetFixedParameter(child) - _G.DetailsStatusBarOptionsSliderFontSize.MyObject:SetValue(child.options.textSize) + _G.DetailsStatusBarOptionsTextStyleDropdown.MyObject:Select(child.options.textStyle, true) - _G.DetailsStatusBarOptionsFontDropdown.MyObject:SetFixedParameter(child) - _G.DetailsStatusBarOptionsFontDropdown.MyObject:Select(child.options.textFace) - - _G.DetailsStatusBarOptionsSliderAlignX.MyObject:SetFixedParameter(child) - _G.DetailsStatusBarOptionsSliderAlignX.MyObject:SetValue(child.options.textXMod) - - _G.DetailsStatusBarOptionsSliderAlignY.MyObject:SetFixedParameter(child) - _G.DetailsStatusBarOptionsSliderAlignY.MyObject:SetValue(child.options.textYMod) - - _G.DetailsStatusBarOptions:Show() - - if (child.ExtraOptions) then - - if (type(child.ExtraOptions) == "function") then - child.ExtraOptions() - end - - extraWindow:HideWidgets() - - for _, widget in pairs(child.ExtraOptions) do - widget:Show() - end - - child:ExtraOptionsOnOpen (child) - - extraWindow:Show() - else - extraWindow:Hide() + _G.DetailsStatusBarOptionsTextColorTexture:SetColorTexture(child.options.textColor[1], child.options.textColor[2], child.options.textColor[3], child.options.textColor[4]) + + _G.DetailsStatusBarOptionsSliderFontSize.MyObject:SetFixedParameter(child) + _G.DetailsStatusBarOptionsSliderFontSize.MyObject:SetValue(child.options.textSize) + + _G.DetailsStatusBarOptionsFontDropdown.MyObject:SetFixedParameter(child) + _G.DetailsStatusBarOptionsFontDropdown.MyObject:Select(child.options.textFace) + + _G.DetailsStatusBarOptionsSliderAlignX.MyObject:SetFixedParameter(child) + _G.DetailsStatusBarOptionsSliderAlignX.MyObject:SetValue(child.options.textXMod) + + _G.DetailsStatusBarOptionsSliderAlignY.MyObject:SetFixedParameter(child) + _G.DetailsStatusBarOptionsSliderAlignY.MyObject:SetValue(child.options.textYMod) + + _G.DetailsStatusBarOptions:Show() + + if (child.ExtraOptions) then + if (type(child.ExtraOptions) == "function") then + child.ExtraOptions() end + + extraWindow:HideWidgets() + + for _, widget in pairs(child.ExtraOptions) do + widget:Show() + end + + child:ExtraOptionsOnOpen(child) + + extraWindow:Show() + else + extraWindow:Hide() end +end \ No newline at end of file