You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1874 lines
74 KiB
1874 lines
74 KiB
--custom window
|
|
local _detalhes = _G.Details
|
|
local gump = _detalhes.gump
|
|
local _
|
|
local Loc = LibStub("AceLocale-3.0"):GetLocale( "Details" )
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
--local pointers
|
|
local ipairs = ipairs --lua local
|
|
local pairs = pairs --lua local
|
|
local tinsert = table.insert --lua local
|
|
local setmetatable = setmetatable --lua local
|
|
local _GetSpellInfo = _detalhes.getspellinfo --api local
|
|
local CreateFrame = CreateFrame --api local
|
|
local UIParent = UIParent --api local
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
--constants
|
|
local CONST_MENU_X_POSITION = 10
|
|
local CONST_MENU_Y_POSITION = -40
|
|
local CONST_MENU_WIDTH = 160
|
|
local CONST_MENU_HEIGHT = 20
|
|
|
|
local CONST_INFOBOX_X_POSITION = 220
|
|
local CONST_EDITBUTTONS_X_POSITION = 560
|
|
|
|
local CONST_EDITBOX_Y_POSITION = -200
|
|
local CONST_EDITBOX_WIDTH = 893
|
|
local CONST_EDITBOX_HEIGHT = 370
|
|
|
|
local CONST_EDITBOX_BUTTON_WIDTH = 80
|
|
local CONST_EDITBOX_BUTTON_HEIGHT = 20
|
|
|
|
local CONST_BUTTON_TEMPLATE = gump:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE")
|
|
local CONST_TEXTENTRY_TEMPLATE = gump:GetTemplate("button", "OPTIONS_BUTTON_TEMPLATE")
|
|
|
|
gump:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BUTTONS",
|
|
{
|
|
icon = {texture = [[Interface\BUTTONS\UI-GuildButton-PublicNote-Up]]},
|
|
width = 160,
|
|
},
|
|
"DETAILS_PLUGIN_BUTTON_TEMPLATE"
|
|
)
|
|
|
|
gump:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_REGULAR_BUTTON",
|
|
{
|
|
width = 130,
|
|
},
|
|
"DETAILS_PLUGIN_BUTTON_TEMPLATE"
|
|
)
|
|
|
|
gump:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX", {
|
|
backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true},
|
|
backdropcolor = {.2, .2, .2, 0.6},
|
|
backdropbordercolor = {0, 0, 0, 1},
|
|
})
|
|
gump:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_EXPANDED", {
|
|
backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true},
|
|
backdropcolor = {.2, .2, .2, 1},
|
|
backdropbordercolor = {0, 0, 0, 1},
|
|
})
|
|
gump:InstallTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_BUTTON", {
|
|
backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 64, tile = true},
|
|
backdropcolor = {.2, .2, .2, 1},
|
|
backdropbordercolor = {0, 0, 0, 1},
|
|
})
|
|
|
|
gump:NewColor("DETAILS_CUSTOMDISPLAY_ICON", .7, .6, .5, 1)
|
|
|
|
local CONST_CODETEXTENTRY_TEMPLATE = gump:GetTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX")
|
|
local CONST_CODETEXTENTRYEXPANDED_TEMPLATE = gump:GetTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_EXPANDED")
|
|
local CONST_CODETEXTENTRYBUTTON_TEMPLATE = gump:GetTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BOX_BUTTON")
|
|
local CONST_CODETEXTENTRY_OPENCODEBUTTONS_TEMPLATE = gump:GetTemplate("button", "DETAILS_CUSTOMDISPLAY_CODE_BUTTONS")
|
|
local CONST_REGULAR_BUTTON_TEMPLATE = gump:GetTemplate("button", "DETAILS_CUSTOMDISPLAY_REGULAR_BUTTON")
|
|
|
|
local object_keys = {
|
|
["name"] = true,
|
|
["icon"] = true,
|
|
["attribute"] = true,
|
|
["spellid"] = true,
|
|
["author"] = true,
|
|
["desc"] = true,
|
|
["source"] = true,
|
|
["target"] = true,
|
|
["script"] = true,
|
|
["tooltip"] = true,
|
|
["total_script"] = true,
|
|
["percent_script"] = true,
|
|
}
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
--create the window
|
|
|
|
function _detalhes:CloseCustomDisplayWindow()
|
|
--cancel editing or creation
|
|
if (DetailsCustomPanel.CodeEditing) then
|
|
DetailsCustomPanel:CancelFunc()
|
|
end
|
|
if (DetailsCustomPanel.IsEditing) then
|
|
DetailsCustomPanel:CancelFunc()
|
|
end
|
|
|
|
DetailsCustomPanel:Reset()
|
|
DetailsCustomPanel:ClearFocus()
|
|
|
|
--hide the frame
|
|
_G.DetailsCustomPanel:Hide()
|
|
end
|
|
|
|
function _detalhes:InitializeCustomDisplayWindow()
|
|
local DetailsCustomPanel = CreateFrame("frame", "DetailsCustomPanel", UIParent,"BackdropTemplate")
|
|
DetailsCustomPanel.Frame = DetailsCustomPanel
|
|
DetailsCustomPanel.__name = Loc ["STRING_SCRIPTS_TITLE"]
|
|
DetailsCustomPanel.real_name = "DETAILS_CUSTOMDISPLAY"
|
|
--DetailsCustomPanel.__icon = [[Interface\FriendsFrame\UI-FriendsList-Small-Up]]
|
|
DetailsCustomPanel.__icon = [[Interface\AddOns\Details\images\icons]]
|
|
DetailsCustomPanel.__iconcoords = {412/512, 441/512, 43/512, 79/512}
|
|
DetailsCustomPanel.__iconcolor = "DETAILS_CUSTOMDISPLAY_ICON"
|
|
DetailsPluginContainerWindow.EmbedPlugin (DetailsCustomPanel, DetailsCustomPanel, true)
|
|
|
|
function DetailsCustomPanel.RefreshWindow()
|
|
_detalhes:OpenCustomDisplayWindow()
|
|
end
|
|
end
|
|
|
|
function _detalhes:OpenCustomDisplayWindow()
|
|
if (not _G.DetailsCustomPanel or not DetailsCustomPanel.Initialized) then
|
|
|
|
DetailsPluginContainerWindow.OpenPlugin(DetailsCustomPanel)
|
|
|
|
local GameCooltip = GameCooltip
|
|
DetailsCustomPanel.Initialized = true
|
|
|
|
--main frame
|
|
local customWindow = DetailsCustomPanel or CreateFrame("frame", "DetailsCustomPanel", UIParent, "BackdropTemplate")
|
|
customWindow:SetPoint("center", UIParent, "center")
|
|
customWindow:SetSize(850, 500)
|
|
customWindow:EnableMouse(true)
|
|
customWindow:SetMovable(true)
|
|
customWindow:SetScript("OnMouseDown", function(self, button)
|
|
if (button == "LeftButton") then
|
|
if (not self.moving) then
|
|
self.moving = true
|
|
self:StartMoving()
|
|
end
|
|
elseif (button == "RightButton") then
|
|
if (not self.moving) then
|
|
_detalhes:CloseCustomDisplayWindow()
|
|
end
|
|
end
|
|
end)
|
|
|
|
customWindow:SetScript("OnMouseUp", function(self)
|
|
if (self.moving) then
|
|
self.moving = false
|
|
self:StopMovingOrSizing()
|
|
end
|
|
end)
|
|
|
|
customWindow:SetScript("OnShow", function()
|
|
GameCooltip:Hide()
|
|
end)
|
|
|
|
tinsert(UISpecialFrames, "DetailsCustomPanel")
|
|
|
|
--menu title bar
|
|
local titlebar = CreateFrame("frame", nil, customWindow,"BackdropTemplate")
|
|
titlebar:SetPoint("topleft", customWindow, "topleft", 2, -3)
|
|
titlebar:SetPoint("topright", customWindow, "topright", -2, -3)
|
|
titlebar:SetHeight(20)
|
|
titlebar:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]], tileSize = 64, tile = true})
|
|
titlebar:SetBackdropColor(.5, .5, .5, 1)
|
|
titlebar:SetBackdropBorderColor(0, 0, 0, 1)
|
|
|
|
--menu title
|
|
local titleLabel = _detalhes.gump:NewLabel(titlebar, titlebar, nil, "titulo", "Details! Custom Displays", "GameFontNormal", 12)
|
|
titleLabel:SetPoint("center", titlebar , "center")
|
|
titleLabel:SetPoint("top", titlebar , "top", 0, -4)
|
|
|
|
--close button
|
|
customWindow.Close = CreateFrame("button", "$parentCloseButton", customWindow)
|
|
customWindow.Close:SetPoint("right", titlebar, "right", -2, 0)
|
|
customWindow.Close:SetSize(16, 16)
|
|
|
|
customWindow.Close:SetNormalTexture([[Interface\GLUES\LOGIN\Glues-CheckBox-Check]])
|
|
customWindow.Close:SetHighlightTexture([[Interface\GLUES\LOGIN\Glues-CheckBox-Check]])
|
|
customWindow.Close:SetPushedTexture([[Interface\GLUES\LOGIN\Glues-CheckBox-Check]])
|
|
customWindow.Close:GetNormalTexture():SetDesaturated(true)
|
|
customWindow.Close:GetHighlightTexture():SetDesaturated(true)
|
|
customWindow.Close:GetPushedTexture():SetDesaturated(true)
|
|
|
|
customWindow.Close:SetAlpha(0.7)
|
|
customWindow.Close:SetScript("OnClick", function() _detalhes:CloseCustomDisplayWindow() end)
|
|
customWindow.Close:SetScript("OnHide", function()
|
|
_detalhes:CloseCustomDisplayWindow()
|
|
end)
|
|
|
|
--background
|
|
customWindow.bg1 = customWindow:CreateTexture(nil, "background")
|
|
customWindow.bg1:SetTexture([[Interface\AddOns\Details\images\background]], true)
|
|
customWindow.bg1:SetAlpha(0.7)
|
|
customWindow.bg1:SetVertexColor(0.27, 0.27, 0.27)
|
|
customWindow.bg1:SetVertTile(true)
|
|
customWindow.bg1:SetHorizTile(true)
|
|
customWindow.bg1:SetAllPoints()
|
|
|
|
customWindow:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]], tileSize = 64, tile = true})
|
|
customWindow:SetBackdropColor(.5, .5, .5, .5)
|
|
customWindow:SetBackdropBorderColor(0, 0, 0, 1)
|
|
|
|
DetailsCustomPanel.BoxType = 1
|
|
DetailsCustomPanel.IsEditing = false
|
|
DetailsCustomPanel.IsImporting = false
|
|
DetailsCustomPanel.CodeEditing = false
|
|
DetailsCustomPanel.current_attribute = "damagedone"
|
|
|
|
DetailsCustomPanel.code1_default = [[
|
|
--get the parameters passed
|
|
local Combat, CustomContainer, Instance = ...
|
|
--declade the values to return
|
|
local total, top, amount = 0, 0, 0
|
|
|
|
--do the loop
|
|
--CustomContainer:AddValue (actor, actor.value)
|
|
--loop end
|
|
|
|
--if not managed inside the loop, get the values of total, top and amount
|
|
total, top = CustomContainer:GetTotalAndHighestValue()
|
|
amount = CustomContainer:GetNumActors()
|
|
|
|
--return the values
|
|
return total, top, amount
|
|
]]
|
|
|
|
DetailsCustomPanel.code1 = DetailsCustomPanel.code1_default
|
|
|
|
DetailsCustomPanel.code2_default = [[
|
|
--get the parameters passed
|
|
local actor, combat, instance = ...
|
|
|
|
--get the cooltip object (we dont use the convencional GameTooltip here)
|
|
local GameCooltip = GameCooltip
|
|
|
|
--Cooltip code
|
|
]]
|
|
|
|
DetailsCustomPanel.code2 = DetailsCustomPanel.code2_default
|
|
|
|
DetailsCustomPanel.code3_default = [[
|
|
local value, top, total, combat, instance = ...
|
|
return math.floor(value)
|
|
]]
|
|
|
|
DetailsCustomPanel.code3 = DetailsCustomPanel.code3_default
|
|
|
|
DetailsCustomPanel.code4_default = [[
|
|
local value, top, total, combat, instance = ...
|
|
return string.format("%.1f", value/total*100)
|
|
]]
|
|
|
|
DetailsCustomPanel.code4 = DetailsCustomPanel.code4_default
|
|
|
|
function DetailsCustomPanel:ClearFocus()
|
|
customWindow.desc_field:ClearFocus()
|
|
customWindow.name_field:ClearFocus()
|
|
customWindow.author_field:ClearFocus()
|
|
end
|
|
|
|
function DetailsCustomPanel:Reset()
|
|
self.name_field:SetText("")
|
|
self.icon_image:SetTexture([[Interface\ICONS\TEMP]])
|
|
self.desc_field:SetText("")
|
|
|
|
self.author_field:SetText(UnitName ("player") .. "-" .. GetRealmName())
|
|
self.author_field:Enable()
|
|
|
|
self.source_dropdown:Select(1, true)
|
|
self.source_field:SetText("")
|
|
|
|
self.target_dropdown:Select(1, true)
|
|
self.target_field:SetText("")
|
|
|
|
self.spellid_entry:SetText("")
|
|
|
|
DetailsCustomPanel.code1 = DetailsCustomPanel.code1_default
|
|
DetailsCustomPanel.code2 = DetailsCustomPanel.code2_default
|
|
DetailsCustomPanel.code3 = DetailsCustomPanel.code3_default
|
|
DetailsCustomPanel.code4 = DetailsCustomPanel.code4_default
|
|
|
|
DetailsCustomPanel.current_attribute = "damagedone"
|
|
DetailsCustomPanelAttributeMenu1:Click()
|
|
|
|
DetailsCustomPanel:ClearFocus()
|
|
end
|
|
|
|
function DetailsCustomPanel:RemoveDisplay (custom_object, index)
|
|
table.remove (_detalhes.custom, index)
|
|
|
|
for _, instance in ipairs(_detalhes.tabela_instancias) do
|
|
if (instance.atributo == 5 and instance.sub_atributo == index) then
|
|
instance:ResetAttribute()
|
|
elseif (instance.atributo == 5 and instance.sub_atributo > index) then
|
|
instance.sub_atributo = instance.sub_atributo - 1
|
|
instance.sub_atributo_last [5] = 1
|
|
else
|
|
instance.sub_atributo_last [5] = 1
|
|
end
|
|
end
|
|
|
|
_detalhes.switch:OnRemoveCustom (index)
|
|
_detalhes:ResetCustomFunctionsCache()
|
|
end
|
|
|
|
function DetailsCustomPanel:StartEdit (custom_object, import)
|
|
DetailsCustomPanel:Reset()
|
|
DetailsCustomPanel:ClearFocus()
|
|
|
|
DetailsCustomPanel.IsEditing = custom_object
|
|
DetailsCustomPanel.IsImporting = import
|
|
|
|
self.name_field:SetText(custom_object:GetName())
|
|
self.desc_field:SetText(custom_object:GetDesc())
|
|
self.icon_image:SetTexture(custom_object:GetIcon())
|
|
|
|
self.author_field:SetText(custom_object:GetAuthor())
|
|
self.author_field:Disable()
|
|
|
|
customWindow.codeeditor:SetText("")
|
|
|
|
if (custom_object:IsScripted()) then
|
|
|
|
customWindow.script_button_attribute:Click()
|
|
|
|
DetailsCustomPanel.code1 = custom_object:GetScript()
|
|
DetailsCustomPanel.code2 = custom_object:GetScriptToolip()
|
|
DetailsCustomPanel.code3 = custom_object:GetScriptTotal() or DetailsCustomPanel.code3_default
|
|
DetailsCustomPanel.code4 = custom_object:GetScriptPercent() or DetailsCustomPanel.code4_default
|
|
|
|
else
|
|
|
|
local attribute = custom_object:GetAttribute()
|
|
if (attribute == "damagedone") then
|
|
DetailsCustomPanelAttributeMenu1:Click()
|
|
elseif (attribute == "healdone") then
|
|
DetailsCustomPanelAttributeMenu2:Click()
|
|
end
|
|
|
|
local source = custom_object:GetSource()
|
|
if (source == "[all]") then
|
|
self.source_dropdown:Select(1, true)
|
|
self.source_field:SetText("")
|
|
self.source_field:Disable()
|
|
elseif (source == "[raid]") then
|
|
self.source_dropdown:Select(2, true)
|
|
self.source_field:SetText("")
|
|
self.source_field:Disable()
|
|
elseif (source == "[player]") then
|
|
self.source_dropdown:Select(3, true)
|
|
self.source_field:SetText("")
|
|
self.source_field:Disable()
|
|
else
|
|
self.source_dropdown:Select(4, true)
|
|
self.source_field:SetText(source)
|
|
self.source_field:Enable()
|
|
end
|
|
|
|
local target = custom_object:GetTarget()
|
|
|
|
if (not target) then
|
|
self.target_dropdown:Select(5, true)
|
|
self.target_field:SetText("")
|
|
self.target_field:Disable()
|
|
elseif (target == "[all]") then
|
|
self.target_dropdown:Select(1, true)
|
|
self.target_field:SetText("")
|
|
self.target_field:Disable()
|
|
elseif (target == "[raid]") then
|
|
self.target_dropdown:Select(2, true)
|
|
self.target_field:SetText("")
|
|
self.target_field:Disable()
|
|
elseif (target == "[player]") then
|
|
self.target_dropdown:Select(3, true)
|
|
self.target_field:SetText("")
|
|
self.target_field:Disable()
|
|
else
|
|
self.target_dropdown:Select(4, true)
|
|
self.target_field:SetText(target)
|
|
self.target_field:Enable()
|
|
end
|
|
|
|
self.spellid_entry:SetText(custom_object:GetSpellId() or "")
|
|
|
|
end
|
|
|
|
if (import) then
|
|
DetailsCustomPanel:SetAcceptButtonText (Loc ["STRING_CUSTOM_IMPORT_BUTTON"])
|
|
else
|
|
DetailsCustomPanel:SetAcceptButtonText (Loc ["STRING_CUSTOM_SAVE"])
|
|
end
|
|
end
|
|
|
|
function DetailsCustomPanel:CreateNewCustom()
|
|
local name = self.name_field:GetText()
|
|
DetailsCustomPanel:ClearFocus()
|
|
_detalhes.MicroButtonAlert:Hide()
|
|
|
|
if (string.len(name) < 5) then
|
|
return false, _detalhes:Msg(Loc ["STRING_CUSTOM_SHORTNAME"])
|
|
elseif (string.len(name) > 32) then
|
|
return false, _detalhes:Msg(Loc ["STRING_CUSTOM_LONGNAME"])
|
|
end
|
|
|
|
_detalhes:ResetCustomFunctionsCache()
|
|
|
|
local icon = self.icon_image:GetTexture()
|
|
local desc = self.desc_field:GetText()
|
|
local author = self.author_field:GetText()
|
|
|
|
if (DetailsCustomPanel.BoxType == 1) then
|
|
local source = self.source_dropdown:GetValue()
|
|
local target = self.target_dropdown:GetValue()
|
|
local spellid = self.spellid_entry:GetText()
|
|
|
|
if (not source) then
|
|
source = self.source_field:GetText()
|
|
end
|
|
|
|
if (not target) then
|
|
target = self.target_field:GetText()
|
|
elseif (target == "[none]") then
|
|
target = false
|
|
end
|
|
|
|
if (spellid == "") then
|
|
spellid = false
|
|
end
|
|
|
|
if (DetailsCustomPanel.IsEditing) then
|
|
local object = DetailsCustomPanel.IsEditing
|
|
object.name = name
|
|
object.icon = icon
|
|
object.desc = desc
|
|
object.author = author
|
|
object.attribute = DetailsCustomPanel.current_attribute
|
|
object.source = source
|
|
object.target = target
|
|
object.spellid = tonumber(spellid)
|
|
object.script = false
|
|
object.tooltip = false
|
|
|
|
if (DetailsCustomPanel.IsImporting) then
|
|
_detalhes:Msg(Loc ["STRING_CUSTOM_IMPORTED"])
|
|
else
|
|
_detalhes:Msg(Loc ["STRING_CUSTOM_SAVED"])
|
|
end
|
|
|
|
if (DetailsCustomPanel.IsImporting) then
|
|
tinsert(_detalhes.custom, object)
|
|
end
|
|
|
|
DetailsCustomPanel.IsEditing = false
|
|
DetailsCustomPanel.IsImporting = false
|
|
self.author_field:Enable()
|
|
return true
|
|
else
|
|
local new_custom_object = {
|
|
["name"] = name,
|
|
["icon"] = icon,
|
|
["desc"] = desc,
|
|
["author"] = author,
|
|
["attribute"] = DetailsCustomPanel.current_attribute,
|
|
["source"] = source,
|
|
["target"] = target,
|
|
["spellid"] = tonumber(spellid),
|
|
["script"] = false,
|
|
["tooltip"] = false,
|
|
}
|
|
|
|
tinsert(_detalhes.custom, new_custom_object)
|
|
setmetatable(new_custom_object, _detalhes.atributo_custom)
|
|
new_custom_object.__index = _detalhes.atributo_custom
|
|
_detalhes:Msg(Loc ["STRING_CUSTOM_CREATED"])
|
|
end
|
|
|
|
DetailsCustomPanel:Reset()
|
|
|
|
elseif (DetailsCustomPanel.BoxType == 2) then
|
|
|
|
local main_code = DetailsCustomPanel.code1
|
|
local tooltip_code = DetailsCustomPanel.code2
|
|
local total_code = DetailsCustomPanel.code3
|
|
local percent_code = DetailsCustomPanel.code4
|
|
|
|
if (DetailsCustomPanel.IsEditing) then
|
|
local object = DetailsCustomPanel.IsEditing
|
|
object.name = name
|
|
object.icon = icon
|
|
object.desc = desc
|
|
object.author = author
|
|
object.attribute = false
|
|
object.source = false
|
|
object.target = false
|
|
object.spellid = false
|
|
object.script = main_code
|
|
object.tooltip = tooltip_code
|
|
|
|
if (total_code ~= DetailsCustomPanel.code3_default) then
|
|
object.total_script = total_code
|
|
else
|
|
object.total_script = false
|
|
end
|
|
|
|
if (percent_code ~= DetailsCustomPanel.code4_default) then
|
|
object.percent_script = percent_code
|
|
else
|
|
object.percent_script = false
|
|
end
|
|
|
|
if (DetailsCustomPanel.IsImporting) then
|
|
_detalhes:Msg(Loc ["STRING_CUSTOM_IMPORTED"])
|
|
else
|
|
_detalhes:Msg(Loc ["STRING_CUSTOM_SAVED"])
|
|
end
|
|
|
|
if (DetailsCustomPanel.IsImporting) then
|
|
tinsert(_detalhes.custom, object)
|
|
end
|
|
|
|
DetailsCustomPanel.IsEditing = false
|
|
DetailsCustomPanel.IsImporting = false
|
|
self.author_field:Enable()
|
|
return true
|
|
else
|
|
local new_custom_object = {
|
|
["name"] = name,
|
|
["icon"] = icon,
|
|
["desc"] = desc,
|
|
["author"] = author,
|
|
["attribute"] = false,
|
|
["source"] = false,
|
|
["target"] = false,
|
|
["spellid"] = false,
|
|
["script"] = main_code,
|
|
["tooltip"] = tooltip_code,
|
|
}
|
|
|
|
local total_code = DetailsCustomPanel.code3
|
|
local percent_code = DetailsCustomPanel.code4
|
|
|
|
if (total_code ~= DetailsCustomPanel.code3_default) then
|
|
new_custom_object.total_script = total_code
|
|
else
|
|
new_custom_object.total_script = false
|
|
end
|
|
|
|
if (percent_code ~= DetailsCustomPanel.code4_default) then
|
|
new_custom_object.percent_script = percent_code
|
|
else
|
|
new_custom_object.percent_script = false
|
|
end
|
|
|
|
tinsert(_detalhes.custom, new_custom_object)
|
|
setmetatable(new_custom_object, _detalhes.atributo_custom)
|
|
new_custom_object.__index = _detalhes.atributo_custom
|
|
_detalhes:Msg(Loc ["STRING_CUSTOM_CREATED"])
|
|
end
|
|
|
|
DetailsCustomPanel:Reset()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
function DetailsCustomPanel:AcceptFunc()
|
|
|
|
_detalhes.MicroButtonAlert:Hide()
|
|
|
|
if (DetailsCustomPanel.CodeEditing) then
|
|
--close the edit box saving the text
|
|
if (DetailsCustomPanel.CodeEditing == 1) then
|
|
DetailsCustomPanel.code1 = customWindow.codeeditor:GetText()
|
|
elseif (DetailsCustomPanel.CodeEditing == 2) then
|
|
DetailsCustomPanel.code2 = customWindow.codeeditor:GetText()
|
|
elseif (DetailsCustomPanel.CodeEditing == 3) then
|
|
DetailsCustomPanel.code3 = customWindow.codeeditor:GetText()
|
|
elseif (DetailsCustomPanel.CodeEditing == 4) then
|
|
DetailsCustomPanel.code4 = customWindow.codeeditor:GetText()
|
|
end
|
|
|
|
DetailsCustomPanel.CodeEditing = false
|
|
|
|
if (DetailsCustomPanel.IsImporting) then
|
|
DetailsCustomPanel:SetAcceptButtonText (Loc ["STRING_CUSTOM_IMPORT_BUTTON"])
|
|
elseif (DetailsCustomPanel.IsEditing) then
|
|
DetailsCustomPanel:SetAcceptButtonText (Loc ["STRING_CUSTOM_SAVE"])
|
|
else
|
|
DetailsCustomPanel:SetAcceptButtonText (Loc ["STRING_CUSTOM_CREATE"])
|
|
end
|
|
customWindow.codeeditor:Hide()
|
|
|
|
elseif (DetailsCustomPanel.IsEditing) then
|
|
|
|
local succesful_edit = DetailsCustomPanel:CreateNewCustom()
|
|
if (succesful_edit) then
|
|
DetailsCustomPanel.IsEditing = false
|
|
DetailsCustomPanel.IsImporting = false
|
|
DetailsCustomPanel:SetAcceptButtonText (Loc ["STRING_CUSTOM_CREATE"])
|
|
DetailsCustomPanel:Reset()
|
|
end
|
|
else
|
|
DetailsCustomPanel:CreateNewCustom()
|
|
end
|
|
|
|
end
|
|
|
|
function DetailsCustomPanel:CancelFunc()
|
|
|
|
DetailsCustomPanel:ClearFocus()
|
|
_detalhes.MicroButtonAlert:Hide()
|
|
|
|
if (DetailsCustomPanel.CodeEditing) then
|
|
--close the edit box without save
|
|
customWindow.codeeditor:Hide()
|
|
DetailsCustomPanel.CodeEditing = false
|
|
|
|
if (DetailsCustomPanel.IsImporting) then
|
|
DetailsCustomPanel:SetAcceptButtonText (Loc ["STRING_CUSTOM_IMPORT_BUTTON"])
|
|
elseif (DetailsCustomPanel.IsEditing) then
|
|
DetailsCustomPanel:SetAcceptButtonText (Loc ["STRING_CUSTOM_SAVE"])
|
|
else
|
|
DetailsCustomPanel:SetAcceptButtonText (Loc ["STRING_CUSTOM_CREATE"])
|
|
end
|
|
|
|
elseif (DetailsCustomPanel.IsEditing) then
|
|
DetailsCustomPanel.IsEditing = false
|
|
DetailsCustomPanel.IsImporting = false
|
|
DetailsCustomPanel:SetAcceptButtonText (Loc ["STRING_CUSTOM_CREATE"])
|
|
DetailsCustomPanel:Reset()
|
|
|
|
else
|
|
_detalhes:CloseCustomDisplayWindow()
|
|
end
|
|
|
|
end
|
|
|
|
function DetailsCustomPanel:SetAcceptButtonText (text)
|
|
customWindow.box0.acceptbutton:SetText(text)
|
|
end
|
|
|
|
function select_attribute (self)
|
|
|
|
if (not self.attribute_table) then
|
|
return
|
|
end
|
|
|
|
DetailsCustomPanel:ClearFocus()
|
|
|
|
customWindow.selected_left:SetPoint("topleft", self, "topleft")
|
|
customWindow.selected_right:SetPoint("topright", self, "topright")
|
|
|
|
DetailsCustomPanel.current_attribute = self.attribute_table.attribute
|
|
|
|
if (not self.attribute_table.attribute) then
|
|
--is scripted
|
|
DetailsCustomPanel.BoxType = 2
|
|
customWindow.box1:Hide()
|
|
customWindow.box2:Show()
|
|
|
|
else
|
|
--no scripted
|
|
--check if is editing the code
|
|
if (DetailsCustomPanel.CodeEditing) then
|
|
DetailsCustomPanel.AcceptFunc()
|
|
end
|
|
|
|
DetailsCustomPanel.BoxType = 1
|
|
customWindow.box1:Show()
|
|
customWindow.box2:Hide()
|
|
customWindow.codeeditor:Hide()
|
|
end
|
|
end
|
|
|
|
function DetailsCustomPanel.StartEditCode (_, _, code)
|
|
if (code == 1) then --edit main code
|
|
|
|
customWindow.codeeditor:SetText(DetailsCustomPanel.code1)
|
|
|
|
elseif (code == 2) then --edit tooltip code
|
|
|
|
customWindow.codeeditor:SetText(DetailsCustomPanel.code2)
|
|
|
|
elseif (code == 3) then --edit total code
|
|
|
|
customWindow.codeeditor:SetText(DetailsCustomPanel.code3)
|
|
|
|
elseif (code == 4) then --edit percent code
|
|
|
|
customWindow.codeeditor:SetText(DetailsCustomPanel.code4)
|
|
|
|
end
|
|
|
|
customWindow.codeeditor:Show()
|
|
DetailsCustomPanel.CodeEditing = code
|
|
|
|
DetailsCustomPanel:SetAcceptButtonText ("Save Code") --Loc ["STRING_CUSTOM_DONE"]
|
|
end
|
|
|
|
--left menu
|
|
customWindow.menu = {}
|
|
local menu_start = -50
|
|
local menu_up_frame = CreateFrame("frame", nil, customWindow)
|
|
menu_up_frame:SetFrameLevel(customWindow:GetFrameLevel()+2)
|
|
|
|
local onenter = function(self)
|
|
--self.icontexture:SetVertexColor(1, 1, 1, 1)
|
|
end
|
|
local onleave = function(self)
|
|
--self.icontexture:SetVertexColor(.9, .9, .9, 1)
|
|
end
|
|
|
|
function customWindow:CreateMenuButton (label, icon, clickfunc, param1, param2, tooltip, name, coords)
|
|
local index = #customWindow.menu+1
|
|
|
|
local button = gump:NewButton(self, nil, "$parent" .. name, nil, CONST_MENU_WIDTH, CONST_MENU_HEIGHT, clickfunc, param1, param2, nil, label)
|
|
button:SetPoint("topleft", self, "topleft", CONST_MENU_X_POSITION, CONST_MENU_Y_POSITION + ((index-1)*-23))
|
|
|
|
--button:SetTemplate(CONST_BUTTON_TEMPLATE)
|
|
button:SetTemplate(gump:GetTemplate("button", "DETAILS_PLUGIN_BUTTON_TEMPLATE"))
|
|
button:SetWidth(160)
|
|
button:SetIcon (icon, CONST_MENU_HEIGHT-4, CONST_MENU_HEIGHT-4, "overlay", {.1, .9, .1, .9}, nil, 4)
|
|
|
|
button:SetHook("OnEnter", onenter)
|
|
button:SetHook("OnLeave", onleave)
|
|
button.widget.icontexture = texture
|
|
button.tooltip = tooltip
|
|
|
|
customWindow.menu [index] = {circle = circle, icon = texture, button = button}
|
|
end
|
|
|
|
local build_menu = function(self, button, func, param2)
|
|
GameCooltip:Reset()
|
|
|
|
for index, custom_object in ipairs(_detalhes.custom) do
|
|
GameCooltip:AddLine(custom_object:GetName())
|
|
GameCooltip:AddIcon (custom_object:GetIcon())
|
|
GameCooltip:AddMenu (1, func, custom_object, index, true)
|
|
end
|
|
|
|
GameCooltip:SetOption("ButtonsYMod", -2)
|
|
GameCooltip:SetOption("YSpacingMod", 0)
|
|
GameCooltip:SetOption("TextHeightMod", 0)
|
|
GameCooltip:SetOption("IgnoreButtonAutoHeight", false)
|
|
GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true)
|
|
|
|
GameCooltip:SetBackdrop(1, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
|
|
GameCooltip:SetBackdrop(2, _detalhes.tooltip_backdrop, nil, _detalhes.tooltip_border_color)
|
|
|
|
GameCooltip:SetType ("menu")
|
|
GameCooltip:SetHost (self, "left", "right", -7, 0)
|
|
GameCooltip:Show()
|
|
end
|
|
|
|
--edit button
|
|
local start_edit = function(_, _, custom_object, index)
|
|
GameCooltip:Hide()
|
|
DetailsCustomPanel:StartEdit (custom_object)
|
|
end
|
|
customWindow:CreateMenuButton (Loc ["STRING_CUSTOM_EDIT"], "Interface\\ICONS\\INV_Inscription_RunescrollOfFortitude_Red", build_menu, start_edit, nil, nil, "Edit", {0.07, 0.93, 0.07, 0.93})
|
|
|
|
--remove button
|
|
local remove_display = function(_, _, custom_object, index)
|
|
GameCooltip:Hide()
|
|
DetailsCustomPanel:RemoveDisplay (custom_object, index)
|
|
end
|
|
customWindow:CreateMenuButton (Loc ["STRING_CUSTOM_REMOVE"], "Interface\\ICONS\\Spell_BrokenHeart", build_menu, remove_display, nil, nil, "Remove", {1, 0, 0, 1})
|
|
|
|
--export button
|
|
local export_display = function(_, _, custom_object, index)
|
|
GameCooltip:Hide()
|
|
|
|
local export_object = {}
|
|
|
|
for key, value in pairs(custom_object) do
|
|
if (object_keys [key]) then
|
|
if (type(value) == "table") then
|
|
export_object [key] = Details.CopyTable(value)
|
|
else
|
|
export_object [key] = value
|
|
end
|
|
end
|
|
end
|
|
|
|
local encoded = Details:CompressData (export_object, "print")
|
|
|
|
if (not customWindow.ExportBox) then
|
|
local editbox = _detalhes.gump:NewTextEntry(customWindow, nil, "$parentExportBox", "ExportBox", CONST_EDITBOX_WIDTH, 20)
|
|
editbox:SetPoint("bottomleft", customWindow, "bottomleft", 10, 6)
|
|
editbox:SetAutoFocus(false)
|
|
editbox:SetTemplate(CONST_TEXTENTRY_TEMPLATE)
|
|
editbox:SetHook("OnEditFocusLost", function()
|
|
editbox:Hide()
|
|
end)
|
|
editbox:SetHook("OnChar", function()
|
|
editbox:Hide()
|
|
end)
|
|
|
|
local flashTexture = editbox:CreateTexture(nil, "overlay")
|
|
flashTexture:SetColorTexture(1, 1, 1)
|
|
flashTexture:SetAllPoints()
|
|
flashTexture:SetAlpha(0)
|
|
|
|
local flashAnimHub = DetailsFramework:CreateAnimationHub (flashTexture)
|
|
DetailsFramework:CreateAnimation(flashAnimHub, "alpha", 1, 0.2, 0, 1)
|
|
DetailsFramework:CreateAnimation(flashAnimHub, "alpha", 2, 0.2, 1, 0)
|
|
editbox.FlashAnimation = flashAnimHub
|
|
end
|
|
|
|
if (customWindow.ImportBox) then
|
|
customWindow.ImportBox:Hide()
|
|
customWindow.exportLabel:Hide()
|
|
customWindow.ImportConfirm:Hide()
|
|
end
|
|
|
|
customWindow.ExportBox:Show()
|
|
customWindow.ExportBox:SetText(encoded)
|
|
customWindow.ExportBox:HighlightText()
|
|
customWindow.ExportBox:SetFocus()
|
|
|
|
customWindow.ExportBox.FlashAnimation:Play()
|
|
|
|
end
|
|
customWindow:CreateMenuButton (Loc ["STRING_CUSTOM_EXPORT"], "Interface\\ICONS\\INV_Misc_Gift_01", build_menu, export_display, nil, nil, "Export", {0.00, 0.9, 0.07, 0.93}) --localize
|
|
|
|
--import buttonRaceChange
|
|
local import_display = function(_, _, custom_object, index)
|
|
GameCooltip:Hide()
|
|
|
|
if (not customWindow.ImportBox) then
|
|
|
|
local export_string = gump:NewLabel(customWindow, customWindow, "$parenImportLabel", "exportLabel", "Import String:", "GameFontNormal") --Loc ["STRING_CUSTOM_PASTE"]
|
|
export_string:SetPoint("bottomleft", DetailsCustomPanel, "bottomleft", 10, 8)
|
|
|
|
local editbox = _detalhes.gump:NewTextEntry(customWindow, nil, "$parentImportBox", "ImportBox", CONST_EDITBOX_WIDTH - export_string.width - CONST_EDITBOX_BUTTON_WIDTH - 4, 20)
|
|
editbox:SetPoint("left", export_string, "right", 2, 0)
|
|
editbox:SetAutoFocus(false)
|
|
editbox:SetTemplate(CONST_TEXTENTRY_TEMPLATE)
|
|
|
|
local import = function()
|
|
local text = editbox:GetText()
|
|
|
|
local deserialized_object = Details:DecompressData (text, "print")
|
|
|
|
if (not deserialized_object) then
|
|
_detalhes:Msg(Loc ["STRING_CUSTOM_IMPORT_ERROR"])
|
|
return
|
|
end
|
|
|
|
if (DetailsCustomPanel.CodeEditing) then
|
|
DetailsCustomPanel:CancelFunc()
|
|
end
|
|
|
|
setmetatable(deserialized_object, _detalhes.atributo_custom)
|
|
deserialized_object.__index = _detalhes.atributo_custom
|
|
|
|
_detalhes.MicroButtonAlert.Text:SetText(Loc ["STRING_CUSTOM_IMPORT_ALERT"])
|
|
_detalhes.MicroButtonAlert:SetPoint("bottom", customWindow.box0.acceptbutton.widget, "top", 0, 20)
|
|
_detalhes.MicroButtonAlert:SetHeight(200)
|
|
_detalhes.MicroButtonAlert:Show()
|
|
|
|
DetailsCustomPanel:StartEdit (deserialized_object, true)
|
|
|
|
customWindow.ImportBox:ClearFocus()
|
|
customWindow.ImportBox:Hide()
|
|
customWindow.exportLabel:Hide()
|
|
customWindow.ImportConfirm:Hide()
|
|
end
|
|
|
|
local okey_button = gump:NewButton(customWindow, nil, "$parentImportConfirm", "ImportConfirm", CONST_EDITBOX_BUTTON_WIDTH, CONST_EDITBOX_BUTTON_HEIGHT, import, nil, nil, nil, Loc ["STRING_CUSTOM_IMPORT_BUTTON"])
|
|
okey_button:SetTemplate(CONST_BUTTON_TEMPLATE)
|
|
okey_button:SetPoint("left", editbox, "right", 2, 0)
|
|
end
|
|
|
|
if (customWindow.ExportBox) then
|
|
customWindow.ExportBox:Hide()
|
|
end
|
|
|
|
customWindow.ImportBox:SetText("")
|
|
customWindow.ImportBox:Show()
|
|
customWindow.exportLabel:Show()
|
|
customWindow.ImportConfirm:Show()
|
|
customWindow.ImportBox:SetFocus()
|
|
|
|
end
|
|
customWindow:CreateMenuButton (Loc ["STRING_CUSTOM_IMPORT"], "Interface\\ICONS\\INV_MISC_NOTE_02", import_display, nil, nil, nil, "Import", {0.00, 0.9, 0.07, 0.93}) --localize
|
|
|
|
local box_types = {
|
|
{}, --normal
|
|
{}, --custom script
|
|
}
|
|
|
|
local attributes = {
|
|
--{icon = [[Interface\ICONS\Spell_Fire_Fireball02]], label = Loc ["STRING_CUSTOM_ATTRIBUTE_DAMAGE"], box = 1, attribute = "damagedone", boxtype = 1},
|
|
--{icon = [[Interface\ICONS\SPELL_NATURE_HEALINGTOUCH]], label = Loc ["STRING_CUSTOM_ATTRIBUTE_HEAL"], box = 1, attribute = "healdone", boxtype = 1},
|
|
{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = Loc ["STRING_CUSTOM_ATTRIBUTE_SCRIPT"], box = 2, attribute = false, boxtype = 2},
|
|
|
|
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
|
|
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
|
|
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
|
|
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
|
|
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
|
|
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
|
|
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
|
|
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
|
|
--{icon = [[Interface\ICONS\INV_Inscription_Scroll]], label = "Custom Script", box = 2, attribute = false, boxtype = 2},
|
|
}
|
|
|
|
--create box
|
|
local attribute_box = CreateFrame("frame", nil, customWindow)
|
|
attribute_box:SetPoint("topleft", customWindow, "topleft", 200, -60)
|
|
attribute_box:SetSize(180, 260)
|
|
attribute_box:Hide()
|
|
|
|
local button_onenter = function(self)
|
|
self:SetBackdropColor(.3, .3, .3, .3)
|
|
self.icon:SetBlendMode("ADD")
|
|
end
|
|
local button_onleave = function(self)
|
|
self:SetBackdropColor(0, 0, 0, .2)
|
|
self.icon:SetBlendMode("BLEND")
|
|
end
|
|
|
|
local selected_left = attribute_box:CreateTexture(nil, "overlay")
|
|
selected_left:SetTexture([[Interface\Store\Store-Main]])
|
|
selected_left:SetSize(50, 20)
|
|
selected_left:SetVertexColor(1, .8, 0, 1)
|
|
selected_left:SetTexCoord(960/1024, 1020/1024, 68/1024, 101/1024)
|
|
customWindow.selected_left = selected_left
|
|
|
|
local selected_right = attribute_box:CreateTexture(nil, "overlay")
|
|
selected_right:SetTexture([[Interface\Store\Store-Main]])
|
|
selected_right:SetSize(31, 20)
|
|
selected_right:SetVertexColor(1, .8, 0, 1)
|
|
selected_right:SetTexCoord(270/1024, 311/1024, 873/1024, 906/1024)
|
|
customWindow.selected_right = selected_right
|
|
|
|
local selected_center = attribute_box:CreateTexture(nil, "overlay")
|
|
selected_center:SetTexture([[Interface\Store\Store-Main]])
|
|
selected_center:SetSize(49, 20)
|
|
selected_center:SetVertexColor(1, .8, 0, 1)
|
|
selected_center:SetTexCoord(956/1024, 1004/1024, 164/1024, 197/1024)
|
|
|
|
selected_center:SetPoint("left", selected_left, "right")
|
|
selected_center:SetPoint("right", selected_right, "left")
|
|
|
|
local p = 0.0625 --32/512
|
|
|
|
for i = 1, 10 do
|
|
|
|
if (attributes [i]) then
|
|
|
|
local button = CreateFrame("button", "DetailsCustomPanelAttributeMenu" .. i, attribute_box, "BackdropTemplate")
|
|
button:SetPoint("topleft", attribute_box, "topleft", 2, ((i-1)*23*-1) + (-26))
|
|
button:SetPoint("topright", attribute_box, "topright", 2, ((i-1)*23*-1) + (-26))
|
|
button:SetHeight(20)
|
|
|
|
button:SetBackdrop({bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tile = true, tileSize = 16})
|
|
button:SetBackdropColor(0, 0, 0, .2)
|
|
|
|
button:SetScript("OnEnter", button_onenter)
|
|
button:SetScript("OnLeave", button_onleave)
|
|
|
|
button.attribute_table = attributes [i]
|
|
|
|
if (attributes [i] and not attributes [i].attribute) then
|
|
customWindow.script_button_attribute = button
|
|
end
|
|
|
|
button:SetScript("OnClick", select_attribute)
|
|
|
|
button.icon = button:CreateTexture(nil, "overlay")
|
|
button.icon:SetPoint("left", button, "left", 6, 0)
|
|
button.icon:SetSize(22, 22)
|
|
button.icon:SetTexture([[Interface\AddOns\Details\images\custom_icones]])
|
|
button.icon:SetTexCoord(p*(i-1), p*(i), 0, 1)
|
|
|
|
button.text = button:CreateFontString(nil, "overlay", "GameFontHighlightSmall")
|
|
button.text:SetPoint("left", button.icon, "right", 4, 0)
|
|
button.text:SetText(attributes [i] and attributes [i].label or "")
|
|
button.text:SetTextColor(.9, .9, .9, 1)
|
|
|
|
end
|
|
end
|
|
|
|
--create box 0, holds the name, author, desc and icon
|
|
local box0 = CreateFrame("frame", "DetailsCustomPanelBox0", customWindow)
|
|
customWindow.box0 = box0
|
|
box0:SetSize(450, 360)
|
|
|
|
box0:SetPoint("topleft", customWindow, "topleft", CONST_INFOBOX_X_POSITION, CONST_MENU_Y_POSITION-4)
|
|
|
|
--name
|
|
local name_label = gump:NewLabel(box0, box0, "$parenNameLabel", "name", Loc ["STRING_CUSTOM_NAME"], "GameFontHighlightLeft") --localize-me
|
|
name_label:SetPoint("topleft", box0, "topleft", 10, 0)
|
|
|
|
local name_field = gump:NewTextEntry(box0, nil, "$parentNameEntry", "nameentry", 200, 20)
|
|
name_field:SetPoint("left", name_label, "left", 62, 0)
|
|
name_field:SetTemplate(CONST_TEXTENTRY_TEMPLATE)
|
|
name_field.tooltip = Loc ["STRING_CUSTOM_NAME_DESC"]
|
|
customWindow.name_field = name_field
|
|
|
|
--author
|
|
local author_label = gump:NewLabel(box0, box0, "$parenAuthorLabel", "author", Loc ["STRING_CUSTOM_AUTHOR"], "GameFontHighlightLeft") --localize-me
|
|
author_label:SetPoint("topleft", name_label, "bottomleft", 0, -12)
|
|
|
|
local author_field = gump:NewTextEntry(box0, nil, "$parentAuthorEntry", "authorentry", 200, 20)
|
|
author_field:SetPoint("left", author_label, "left", 62, 0)
|
|
author_field:SetTemplate(CONST_TEXTENTRY_TEMPLATE)
|
|
author_field.tooltip = Loc ["STRING_CUSTOM_AUTHOR_DESC"]
|
|
author_field:SetText(UnitName ("player") .. "-" .. GetRealmName())
|
|
customWindow.author_field = author_field
|
|
|
|
--description
|
|
local desc_label = gump:NewLabel(box0, box0, "$parenDescLabel", "desc", Loc ["STRING_CUSTOM_DESCRIPTION"], "GameFontHighlightLeft") --localize-me
|
|
desc_label:SetPoint("topleft", author_label, "bottomleft", 0, -12)
|
|
|
|
local desc_field = gump:NewTextEntry(box0, nil, "$parentDescEntry", "descentry", 200, 20)
|
|
desc_field:SetPoint("left", desc_label, "left", 62, 0)
|
|
desc_field:SetTemplate(CONST_TEXTENTRY_TEMPLATE)
|
|
desc_field.tooltip = Loc ["STRING_CUSTOM_DESCRIPTION_DESC"]
|
|
customWindow.desc_field = desc_field
|
|
|
|
--icon
|
|
local icon_label = gump:NewLabel(box0, box0, "$parenIconLabel", "icon", Loc ["STRING_CUSTOM_ICON"], "GameFontHighlightLeft") --localize-me
|
|
icon_label:SetPoint("topleft", desc_label, "bottomleft", 0, -12)
|
|
|
|
local pickicon_callback = function(texture)
|
|
box0.icontexture:SetTexture(texture)
|
|
|
|
end
|
|
local pickicon = function()
|
|
gump:IconPick (pickicon_callback, true)
|
|
end
|
|
local icon_image = gump:NewImage(box0, [[Interface\ICONS\TEMP]], 20, 20, nil, nil, "icontexture", "$parentIconTexture")
|
|
local icon_button = gump:NewButton(box0, nil, "$parentIconButton", "IconButton", 20, 20, pickicon)
|
|
icon_button:InstallCustomTexture()
|
|
icon_button:SetPoint("left", icon_label, "left", 64, 0)
|
|
icon_image:SetPoint("left", icon_label, "left", 64, 0)
|
|
customWindow.icon_image = icon_image
|
|
|
|
--cancel
|
|
local cancel_button = gump:NewButton(box0, nil, "$parentCancelButton", "cancelbutton", 130, 20, DetailsCustomPanel.CancelFunc, nil, nil, nil, Loc ["STRING_CUSTOM_CANCEL"])
|
|
--cancel_button:SetPoint("bottomleft", attribute_box, "bottomleft", 2, 0)
|
|
cancel_button:SetPoint("topleft", icon_label, "bottomleft", 0, -10)
|
|
cancel_button:SetTemplate(CONST_REGULAR_BUTTON_TEMPLATE)
|
|
|
|
--accept
|
|
local accept_button = gump:NewButton(box0, nil, "$parentAcceptButton", "acceptbutton", 130, 20, DetailsCustomPanel.AcceptFunc, nil, nil, nil, Loc ["STRING_CUSTOM_CREATE"])
|
|
accept_button:SetPoint("left", cancel_button, "right", 2, 0)
|
|
accept_button:SetTemplate(CONST_REGULAR_BUTTON_TEMPLATE)
|
|
|
|
cancel_button:SetFrameLevel(500)
|
|
accept_button:SetFrameLevel(500)
|
|
|
|
--create box type 1
|
|
local box1 = CreateFrame("frame", "DetailsCustomPanelBox1", customWindow)
|
|
customWindow.box1 = box1
|
|
box1:SetSize(450, 180)
|
|
box1:SetPoint("topleft", icon_label.widget, "bottomleft", -10, -20)
|
|
box1:SetFrameLevel(box0:GetFrameLevel()+1)
|
|
|
|
--source
|
|
local source_label = gump:NewLabel(box1, box1, "$parenSourceLabel", "source", Loc ["STRING_CUSTOM_SOURCE"], "GameFontHighlightLeft") --localize-me
|
|
source_label:SetPoint("topleft", box1, "topleft", 10, 0)
|
|
|
|
local disable_source_field = function()
|
|
box1.sourceentry:Disable()
|
|
end
|
|
local enable_source_field = function()
|
|
box1.sourceentry:Enable()
|
|
box1.sourceentry:SetFocus(true)
|
|
end
|
|
|
|
local source_icon = [[Interface\COMMON\Indicator-Yellow]]
|
|
|
|
local targeting_options = {
|
|
{value = "[all]", label = "All Characters", desc = "Search for matches in all characters.", onclick = disable_source_field, icon = source_icon},
|
|
{value = "[raid]", label = "Raid or Party Group", desc = "Search for matches in all characters which is part of your party or raid group.", onclick = disable_source_field, icon = source_icon},
|
|
{value = "[player]", label = "Only You", desc = "Search for matches only in your character.", onclick = disable_source_field, icon = source_icon},
|
|
{value = false, label = "Specific Character", desc = "Type the name of the character used to search.", onclick = enable_source_field, icon = source_icon},
|
|
}
|
|
local build_source_list = function() return targeting_options end
|
|
local source_dropdown = gump:NewDropDown (box1, nil, "$parentSourceDropdown", "sourcedropdown", 178, 20, build_source_list, 1)
|
|
source_dropdown:SetPoint("left", source_label, "left", 62, 0)
|
|
source_dropdown.tooltip = Loc ["STRING_CUSTOM_SOURCE_DESC"]
|
|
customWindow.source_dropdown = source_dropdown
|
|
|
|
local source_field = gump:NewTextEntry(box1, nil, "$parentSourceEntry", "sourceentry", 201, 20)
|
|
source_field:SetPoint("topleft", source_dropdown, "bottomleft", 0, -2)
|
|
source_field:Disable()
|
|
customWindow.source_field = source_field
|
|
|
|
local adds_boss = CreateFrame("frame", nil, box1)
|
|
adds_boss:SetPoint("left", source_dropdown.widget, "right", 2, 0)
|
|
adds_boss:SetSize(20, 20)
|
|
|
|
local adds_boss_image = adds_boss:CreateTexture(nil, "overlay")
|
|
adds_boss_image:SetPoint("center", adds_boss)
|
|
adds_boss_image:SetTexture("Interface\\Buttons\\UI-MicroButton-Raid-Up")
|
|
adds_boss_image:SetTexCoord(0.046875, 0.90625, 0.40625, 0.953125)
|
|
adds_boss_image:SetWidth(20)
|
|
adds_boss_image:SetHeight(16)
|
|
|
|
local actorsFrame = gump:NewPanel(customWindow, _, "DetailsCustomActorsFrame2", "actorsFrame", 1, 1)
|
|
actorsFrame:SetPoint("topleft", customWindow, "topright", 5, -60)
|
|
actorsFrame:Hide()
|
|
|
|
local modelFrame = CreateFrame("playermodel", "DetailsCustomActorsFrame2Model", customWindow)
|
|
modelFrame:SetSize(138, 261)
|
|
modelFrame:SetPoint("topright", actorsFrame.widget, "topleft", -15, -8)
|
|
modelFrame:Hide()
|
|
local modelFrameTexture = modelFrame:CreateTexture(nil, "background")
|
|
modelFrameTexture:SetAllPoints()
|
|
|
|
local modelFrameBackground = customWindow:CreateTexture(nil, "artwork")
|
|
modelFrameBackground:SetSize(138, 261)
|
|
modelFrameBackground:SetPoint("topright", actorsFrame.widget, "topleft", -15, -8)
|
|
modelFrameBackground:SetTexture([[Interface\ACHIEVEMENTFRAME\UI-GuildAchievement-Parchment-Horizontal-Desaturated]])
|
|
modelFrameBackground:SetRotation (90)
|
|
modelFrameBackground:SetVertexColor(.5, .5, .5, 0.5)
|
|
|
|
local modelFrameBackgroundIcon = customWindow:CreateTexture(nil, "overlay")
|
|
modelFrameBackgroundIcon:SetPoint("center", modelFrameBackground, "center")
|
|
modelFrameBackgroundIcon:SetTexture([[Interface\CHARACTERFRAME\Disconnect-Icon]])
|
|
modelFrameBackgroundIcon:SetVertexColor(.5, .5, .5, 0.7)
|
|
modelFrameBackground:Hide()
|
|
modelFrameBackgroundIcon:Hide()
|
|
|
|
local selectedEncounterActor = function(actorName, model)
|
|
source_field:SetText(actorName)
|
|
source_dropdown:Select(4, true)
|
|
box1.sourceentry:Enable()
|
|
actorsFrame:Hide()
|
|
GameCooltip:Hide()
|
|
end
|
|
|
|
local actorsFrameButtons = {}
|
|
|
|
local buttonMouseOver = function(button)
|
|
button.MyObject.image:SetBlendMode("ADD")
|
|
button.MyObject.line:SetBlendMode("ADD")
|
|
button.MyObject.label:SetTextColor(1, 1, 1, 1)
|
|
GameTooltip:SetOwner(button, "ANCHOR_TOPLEFT")
|
|
GameTooltip:AddLine(button.MyObject.actor)
|
|
GameTooltip:Show()
|
|
|
|
local name, description, bgImage, buttonImage, loreImage, dungeonAreaMapID, link = DetailsFramework.EncounterJournal.EJ_GetInstanceInfo (button.MyObject.ej_id)
|
|
|
|
modelFrameTexture:SetTexture(bgImage)
|
|
modelFrameTexture:SetTexCoord(3/512, 370/512, 5/512, 429/512)
|
|
modelFrame:Show()
|
|
|
|
modelFrame:SetDisplayInfo (button.MyObject.model)
|
|
end
|
|
local buttonMouseOut = function(button)
|
|
button.MyObject.image:SetBlendMode("BLEND")
|
|
button.MyObject.line:SetBlendMode("BLEND")
|
|
button.MyObject.label:SetTextColor(.8, .8, .8, .8)
|
|
GameTooltip:Hide()
|
|
modelFrame:Hide()
|
|
end
|
|
|
|
local EncounterSelect = function(_, _, instanceId, bossIndex, ej_id)
|
|
|
|
DetailsCustomSpellsFrame:Hide()
|
|
DetailsCustomActorsFrame:Hide()
|
|
DetailsCustomActorsFrame2:Show()
|
|
GameCooltip:Hide()
|
|
|
|
local encounterID = _detalhes:GetEncounterIdFromBossIndex (instanceId, bossIndex)
|
|
|
|
if (encounterID) then
|
|
local actors = _detalhes:GetEncounterActorsName (encounterID)
|
|
|
|
local x = 10
|
|
local y = 10
|
|
local i = 1
|
|
|
|
for actor, actorTable in pairs(actors) do
|
|
|
|
local thisButton = actorsFrameButtons [i]
|
|
|
|
if (not thisButton) then
|
|
thisButton = gump:NewButton(actorsFrame.frame, actorsFrame.frame, "DetailsCustomActorsFrame2Button"..i, "button"..i, 130, 20, selectedEncounterSpell)
|
|
thisButton:SetPoint("topleft", "DetailsCustomActorsFrame2", "topleft", x, -y)
|
|
thisButton:SetHook("OnEnter", buttonMouseOver)
|
|
thisButton:SetHook("OnLeave", buttonMouseOut)
|
|
|
|
local t = gump:NewImage(thisButton, nil, 20, 20, nil, nil, "image", "DetailsCustomActors2EncounterImageButton"..i)
|
|
t:SetPoint("left", thisButton)
|
|
t:SetTexture([[Interface\MINIMAP\TRACKING\Target]])
|
|
t:SetDesaturated(true)
|
|
t:SetSize(20, 20)
|
|
t:SetAlpha(0.7)
|
|
|
|
local text = gump:NewLabel(thisButton, nil, "DetailsCustomActorsFrame2Button"..i.."Label", "label", "Spell", nil, 9.5, {.8, .8, .8, .8})
|
|
text:SetPoint("left", t.image, "right", 2, 0)
|
|
text:SetWidth(123)
|
|
text:SetHeight(10)
|
|
|
|
local border = gump:NewImage(thisButton, "Interface\\SPELLBOOK\\Spellbook-Parts", 40, 38, nil, nil, "border", "DetailsCustomActors2EncounterBorderButton"..i)
|
|
border:SetTexCoord(0.00390625, 0.27734375, 0.44140625,0.69531250)
|
|
border:SetDrawLayer("background")
|
|
border:SetPoint("topleft", thisButton.button, "topleft", -9, 9)
|
|
|
|
local line = gump:NewImage(thisButton, "Interface\\SPELLBOOK\\Spellbook-Parts", 134, 25, nil, nil, "line", "DetailsCustomActors2EncounterLineButton"..i)
|
|
line:SetTexCoord(0.31250000, 0.96484375, 0.37109375, 0.52343750)
|
|
line:SetDrawLayer("background")
|
|
line:SetPoint("left", thisButton.button, "right", -110, -3)
|
|
|
|
table.insert(actorsFrameButtons, #actorsFrameButtons+1, thisButton)
|
|
end
|
|
|
|
y = y + 20
|
|
if (y >= 260) then
|
|
y = 10
|
|
x = x + 150
|
|
end
|
|
|
|
thisButton.label:SetText(actor)
|
|
thisButton:SetClickFunction(selectedEncounterActor, actor, actorTable.model)
|
|
thisButton.actor = actor
|
|
thisButton.ej_id = ej_id
|
|
thisButton.model = actorTable.model
|
|
thisButton:Show()
|
|
i = i + 1
|
|
end
|
|
|
|
for maxIndex = i, #actorsFrameButtons do
|
|
actorsFrameButtons [maxIndex]:Hide()
|
|
end
|
|
|
|
i = i-1
|
|
actorsFrame:SetSize(math.ceil (i/13)*160, math.min (i*20 + 20, 280))
|
|
|
|
end
|
|
end
|
|
|
|
local BuildEncounterMenu = function()
|
|
|
|
GameCooltip:Reset()
|
|
GameCooltip:SetType ("menu")
|
|
GameCooltip:SetOwner(adds_boss)
|
|
|
|
for instanceId, instanceTable in pairs(_detalhes.EncounterInformation) do
|
|
|
|
if (_detalhes:InstanceIsRaid (instanceId)) then
|
|
|
|
GameCooltip:AddLine(instanceTable.name, _, 1, "white")
|
|
GameCooltip:AddIcon (instanceTable.icon, 1, 1, 64, 32)
|
|
|
|
for index, encounterName in ipairs(instanceTable.boss_names) do
|
|
GameCooltip:AddMenu (2, EncounterSelect, instanceId, index, instanceTable.ej_id, encounterName, nil, true)
|
|
local L, R, T, B, Texture = _detalhes:GetBossIcon (instanceId, index)
|
|
GameCooltip:AddIcon (Texture, 2, 1, 20, 20, L, R, T, B)
|
|
end
|
|
|
|
GameCooltip:SetWallpaper (2, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true)
|
|
|
|
end
|
|
end
|
|
|
|
GameCooltip:SetOption("HeightAnchorMod", -10)
|
|
GameCooltip:SetOption("ButtonsYMod", -2)
|
|
GameCooltip:SetOption("YSpacingMod", 0)
|
|
GameCooltip:SetOption("TextHeightMod", 0)
|
|
GameCooltip:SetOption("IgnoreButtonAutoHeight", false)
|
|
GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true)
|
|
|
|
GameCooltip:ShowCooltip()
|
|
end
|
|
|
|
adds_boss:SetScript("OnEnter", function()
|
|
adds_boss_image:SetBlendMode("ADD")
|
|
BuildEncounterMenu()
|
|
end)
|
|
|
|
adds_boss:SetScript("OnLeave", function()
|
|
adds_boss_image:SetBlendMode("BLEND")
|
|
end)
|
|
|
|
--target
|
|
local target_label = gump:NewLabel(box1, box1, "$parenTargetLabel", "target", Loc ["STRING_CUSTOM_TARGET"], "GameFontHighlightLeft")
|
|
target_label:SetPoint("topleft", source_label, "bottomleft", 0, -40)
|
|
|
|
local disable_target_field = function()
|
|
box1.targetentry:Disable()
|
|
end
|
|
local enable_target_field = function()
|
|
box1.targetentry:Enable()
|
|
box1.targetentry:SetFocus(true)
|
|
end
|
|
|
|
local target_icon = [[Interface\COMMON\Indicator-Yellow]]
|
|
local target_icon2 = [[Interface\COMMON\Indicator-Gray]]
|
|
|
|
local targeting_options = {
|
|
{value = "[all]", label = "All Characters", desc = "Search for matches in all characters.", onclick = disable_target_field, icon = target_icon},
|
|
{value = "[raid]", label = "Raid or Party Group", desc = "Search for matches in all characters which is part of your party or raid group.", onclick = disable_target_field, icon = target_icon},
|
|
{value = "[player]", label = "Only You", desc = "Search for matches only in your character.", onclick = disable_target_field, icon = target_icon},
|
|
{value = false, label = "Specific Character", desc = "Type the name of the character used to search.", onclick = enable_target_field, icon = target_icon},
|
|
{value = "[none]", label = "No Target", desc = "Do not search for targets.", onclick = disable_target_field, icon = target_icon2},
|
|
}
|
|
local build_target_list = function() return targeting_options end
|
|
local target_dropdown = gump:NewDropDown (box1, nil, "$parentTargetDropdown", "targetdropdown", 178, 20, build_target_list, 1)
|
|
target_dropdown:SetPoint("left", target_label, "left", 62, 0)
|
|
target_dropdown.tooltip = Loc ["STRING_CUSTOM_TARGET_DESC"]
|
|
customWindow.target_dropdown = target_dropdown
|
|
|
|
local target_field = gump:NewTextEntry(box1, nil, "$parentTargetEntry", "targetentry", 201, 20)
|
|
target_field:SetPoint("topleft", target_dropdown, "bottomleft", 0, -2)
|
|
target_field:Disable()
|
|
customWindow.target_field = target_field
|
|
--
|
|
|
|
local adds_boss = CreateFrame("frame", nil, box1)
|
|
adds_boss:SetPoint("left", target_dropdown.widget, "right", 2, 0)
|
|
adds_boss:SetSize(20, 20)
|
|
local adds_boss_image = adds_boss:CreateTexture(nil, "overlay")
|
|
adds_boss_image:SetPoint("center", adds_boss)
|
|
adds_boss_image:SetTexture("Interface\\Buttons\\UI-MicroButton-Raid-Up")
|
|
adds_boss_image:SetTexCoord(0.046875, 0.90625, 0.40625, 0.953125)
|
|
adds_boss_image:SetWidth(20)
|
|
adds_boss_image:SetHeight(16)
|
|
|
|
local actorsFrame = gump:NewPanel(customWindow, _, "DetailsCustomActorsFrame", "actorsFrame", 1, 1)
|
|
actorsFrame:SetPoint("topleft", customWindow, "topright", 5, -60)
|
|
actorsFrame:Hide()
|
|
|
|
local modelFrame = CreateFrame("playermodel", "DetailsCustomActorsFrameModel", customWindow)
|
|
modelFrame:SetSize(138, 261)
|
|
modelFrame:SetPoint("topright", actorsFrame.widget, "topleft", -15, -8)
|
|
modelFrame:Hide()
|
|
local modelFrameTexture = modelFrame:CreateTexture(nil, "background")
|
|
modelFrameTexture:SetAllPoints()
|
|
|
|
local selectedEncounterActor = function(actorName)
|
|
target_field:SetText(actorName)
|
|
target_dropdown:Select(4, true)
|
|
box1.targetentry:Enable()
|
|
actorsFrame:Hide()
|
|
GameCooltip:Hide()
|
|
end
|
|
|
|
local actorsFrameButtons = {}
|
|
|
|
local buttonMouseOver = function(button)
|
|
button.MyObject.image:SetBlendMode("ADD")
|
|
button.MyObject.line:SetBlendMode("ADD")
|
|
button.MyObject.label:SetTextColor(1, 1, 1, 1)
|
|
GameTooltip:SetOwner(button, "ANCHOR_TOPLEFT")
|
|
GameTooltip:AddLine(button.MyObject.actor)
|
|
GameTooltip:Show()
|
|
|
|
local name, description, bgImage, buttonImage, loreImage, dungeonAreaMapID, link = DetailsFramework.EncounterJournal.EJ_GetInstanceInfo (button.MyObject.ej_id)
|
|
|
|
modelFrameTexture:SetTexture(bgImage)
|
|
modelFrameTexture:SetTexCoord(3/512, 370/512, 5/512, 429/512)
|
|
modelFrame:Show()
|
|
|
|
modelFrame:SetDisplayInfo (button.MyObject.model)
|
|
end
|
|
local buttonMouseOut = function(button)
|
|
button.MyObject.image:SetBlendMode("BLEND")
|
|
button.MyObject.line:SetBlendMode("BLEND")
|
|
button.MyObject.label:SetTextColor(.8, .8, .8, .8)
|
|
GameTooltip:Hide()
|
|
|
|
modelFrame:Hide()
|
|
end
|
|
|
|
local EncounterSelect = function(_, _, instanceId, bossIndex, ej_id)
|
|
|
|
DetailsCustomSpellsFrame:Hide()
|
|
DetailsCustomActorsFrame:Show()
|
|
DetailsCustomActorsFrame2:Hide()
|
|
GameCooltip:Hide()
|
|
|
|
local encounterID = _detalhes:GetEncounterIdFromBossIndex (instanceId, bossIndex)
|
|
if (encounterID) then
|
|
local actors = _detalhes:GetEncounterActorsName (encounterID)
|
|
|
|
local x = 10
|
|
local y = 10
|
|
local i = 1
|
|
|
|
for actor, actorTable in pairs(actors) do
|
|
|
|
local thisButton = actorsFrameButtons [i]
|
|
|
|
if (not thisButton) then
|
|
thisButton = gump:NewButton(actorsFrame.frame, actorsFrame.frame, "DetailsCustomActorsFrameButton"..i, "button"..i, 130, 20, selectedEncounterSpell)
|
|
thisButton:SetPoint("topleft", "DetailsCustomActorsFrame", "topleft", x, -y)
|
|
thisButton:SetHook("OnEnter", buttonMouseOver)
|
|
thisButton:SetHook("OnLeave", buttonMouseOut)
|
|
|
|
local t = gump:NewImage(thisButton, nil, 20, 20, nil, nil, "image", "DetailsCustomActorsEncounterImageButton"..i)
|
|
t:SetPoint("left", thisButton)
|
|
t:SetTexture([[Interface\MINIMAP\TRACKING\Target]])
|
|
t:SetDesaturated(true)
|
|
t:SetSize(20, 20)
|
|
t:SetAlpha(0.7)
|
|
|
|
local text = gump:NewLabel(thisButton, nil, "DetailsCustomActorsFrameButton"..i.."Label", "label", "Spell", nil, 9.5, {.8, .8, .8, .8})
|
|
text:SetPoint("left", t.image, "right", 2, 0)
|
|
text:SetWidth(123)
|
|
text:SetHeight(10)
|
|
|
|
local border = gump:NewImage(thisButton, "Interface\\SPELLBOOK\\Spellbook-Parts", 40, 38, nil, nil, "border", "DetailsCustomActorsEncounterBorderButton"..i)
|
|
border:SetTexCoord(0.00390625, 0.27734375, 0.44140625,0.69531250)
|
|
border:SetDrawLayer("background")
|
|
border:SetPoint("topleft", thisButton.button, "topleft", -9, 9)
|
|
|
|
local line = gump:NewImage(thisButton, "Interface\\SPELLBOOK\\Spellbook-Parts", 84, 25, nil, nil, "line", "DetailsCustomActorsEncounterLineButton"..i)
|
|
line:SetTexCoord(0.31250000, 0.96484375, 0.37109375, 0.52343750)
|
|
line:SetDrawLayer("background")
|
|
line:SetPoint("left", thisButton.button, "right", -110, -3)
|
|
|
|
table.insert(actorsFrameButtons, #actorsFrameButtons+1, thisButton)
|
|
end
|
|
|
|
y = y + 20
|
|
if (y >= 260) then
|
|
y = 10
|
|
x = x + 150
|
|
end
|
|
|
|
thisButton.label:SetText(actor)
|
|
thisButton:SetClickFunction(selectedEncounterActor, actor)
|
|
thisButton.actor = actor
|
|
thisButton.ej_id = ej_id
|
|
thisButton.model = actorTable.model
|
|
thisButton:Show()
|
|
i = i + 1
|
|
end
|
|
|
|
for maxIndex = i, #actorsFrameButtons do
|
|
actorsFrameButtons [maxIndex]:Hide()
|
|
end
|
|
|
|
i = i-1
|
|
actorsFrame:SetSize(math.ceil (i/13)*160, math.min (i*20 + 20, 280))
|
|
|
|
end
|
|
end
|
|
|
|
local BuildEncounterMenu = function()
|
|
|
|
GameCooltip:Reset()
|
|
GameCooltip:SetType ("menu")
|
|
GameCooltip:SetOwner(adds_boss)
|
|
|
|
for instanceId, instanceTable in pairs(_detalhes.EncounterInformation) do
|
|
|
|
if (_detalhes:InstanceIsRaid (instanceId)) then
|
|
|
|
GameCooltip:AddLine(instanceTable.name, _, 1, "white")
|
|
GameCooltip:AddIcon (instanceTable.icon, 1, 1, 64, 32)
|
|
|
|
for index, encounterName in ipairs(instanceTable.boss_names) do
|
|
GameCooltip:AddMenu (2, EncounterSelect, instanceId, index, instanceTable.ej_id, encounterName, nil, true)
|
|
local L, R, T, B, Texture = _detalhes:GetBossIcon (instanceId, index)
|
|
GameCooltip:AddIcon (Texture, 2, 1, 20, 20, L, R, T, B)
|
|
end
|
|
|
|
GameCooltip:SetWallpaper (2, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true)
|
|
|
|
end
|
|
end
|
|
|
|
GameCooltip:SetOption("HeightAnchorMod", -10)
|
|
GameCooltip:SetOption("ButtonsYMod", -2)
|
|
GameCooltip:SetOption("YSpacingMod", 0)
|
|
GameCooltip:SetOption("TextHeightMod", 0)
|
|
GameCooltip:SetOption("IgnoreButtonAutoHeight", false)
|
|
GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true)
|
|
GameCooltip:ShowCooltip()
|
|
end
|
|
|
|
adds_boss:SetScript("OnEnter", function()
|
|
adds_boss_image:SetBlendMode("ADD")
|
|
BuildEncounterMenu()
|
|
end)
|
|
|
|
adds_boss:SetScript("OnLeave", function()
|
|
adds_boss_image:SetBlendMode("BLEND")
|
|
end)
|
|
|
|
--spellid
|
|
local spellid_label = gump:NewLabel(box1, box1, "$parenSpellidLabel", "spellid", Loc ["STRING_CUSTOM_SPELLID"], "GameFontHighlightLeft") --localize-me
|
|
spellid_label:SetPoint("topleft", target_label, "bottomleft", 0, -40)
|
|
|
|
local spellid_entry = gump:NewSpellEntry (box1, function()end, 178, 20, nil, nil, "spellidentry", "$parentSpellIdEntry")
|
|
spellid_entry:SetPoint("left", spellid_label, "left", 62, 0)
|
|
spellid_entry.tooltip = Loc ["STRING_CUSTOM_SPELLID_DESC"]
|
|
customWindow.spellid_entry = spellid_entry
|
|
|
|
local spell_id_boss = CreateFrame("frame", nil, box1)
|
|
spell_id_boss:SetPoint("left", spellid_entry.widget, "right", 2, 0)
|
|
spell_id_boss:SetSize(20, 20)
|
|
local spell_id_boss_image = spell_id_boss:CreateTexture(nil, "overlay")
|
|
spell_id_boss_image:SetPoint("center", spell_id_boss)
|
|
spell_id_boss_image:SetTexture("Interface\\Buttons\\UI-MicroButton-Raid-Up")
|
|
spell_id_boss_image:SetTexCoord(0.046875, 0.90625, 0.40625, 0.953125)
|
|
spell_id_boss_image:SetWidth(20)
|
|
spell_id_boss_image:SetHeight(16)
|
|
|
|
local spellsFrame = gump:NewPanel(customWindow, _, "DetailsCustomSpellsFrame", "spellsFrame", 1, 1)
|
|
spellsFrame:SetPoint("topleft", customWindow, "topright", 5, 0)
|
|
spellsFrame:Hide()
|
|
|
|
local selectedEncounterSpell = function(spellId)
|
|
local _, _, icon = _GetSpellInfo(spellId)
|
|
spellid_entry:SetText(spellId)
|
|
box0.icontexture:SetTexture(icon)
|
|
spellsFrame:Hide()
|
|
GameCooltip:Hide()
|
|
end
|
|
|
|
local spellsFrameButtons = {}
|
|
|
|
local buttonMouseOver = function(button)
|
|
button.MyObject.image:SetBlendMode("ADD")
|
|
button.MyObject.line:SetBlendMode("ADD")
|
|
button.MyObject.label:SetTextColor(1, 1, 1, 1)
|
|
|
|
GameTooltip:SetOwner(button, "ANCHOR_TOPLEFT")
|
|
_detalhes:GameTooltipSetSpellByID (button.MyObject.spellid)
|
|
GameTooltip:Show()
|
|
end
|
|
local buttonMouseOut = function(button)
|
|
button.MyObject.image:SetBlendMode("BLEND")
|
|
button.MyObject.line:SetBlendMode("BLEND")
|
|
button.MyObject.label:SetTextColor(.8, .8, .8, .8)
|
|
GameTooltip:Hide()
|
|
end
|
|
|
|
local EncounterSelect = function(_, _, instanceId, bossIndex)
|
|
|
|
DetailsCustomSpellsFrame:Show()
|
|
DetailsCustomActorsFrame:Hide()
|
|
DetailsCustomActorsFrame2:Hide()
|
|
|
|
GameCooltip:Hide()
|
|
|
|
local spells = _detalhes:GetEncounterSpells (instanceId, bossIndex)
|
|
|
|
local x = 10
|
|
local y = 10
|
|
local i = 1
|
|
|
|
for spell, _ in pairs(spells) do
|
|
|
|
local thisButton = spellsFrameButtons [i]
|
|
|
|
if (not thisButton) then
|
|
thisButton = gump:NewButton(spellsFrame.frame, spellsFrame.frame, "DetailsCustomSpellsFrameButton"..i, "button"..i, 80, 20, selectedEncounterSpell)
|
|
thisButton:SetPoint("topleft", "DetailsCustomSpellsFrame", "topleft", x, -y)
|
|
thisButton:SetHook("OnEnter", buttonMouseOver)
|
|
thisButton:SetHook("OnLeave", buttonMouseOut)
|
|
|
|
local t = gump:NewImage(thisButton, nil, 20, 20, nil, nil, "image", "DetailsCustomEncounterImageButton"..i)
|
|
t:SetPoint("left", thisButton)
|
|
|
|
local text = gump:NewLabel(thisButton, nil, "DetailsCustomSpellsFrameButton"..i.."Label", "label", "Spell", nil, 9.5, {.8, .8, .8, .8})
|
|
text:SetPoint("left", t.image, "right", 2, 0)
|
|
text:SetWidth(73)
|
|
text:SetHeight(10)
|
|
|
|
local border = gump:NewImage(thisButton, "Interface\\SPELLBOOK\\Spellbook-Parts", 40, 38, nil, nil, "border", "DetailsCustomEncounterBorderButton"..i)
|
|
border:SetTexCoord(0.00390625, 0.27734375, 0.44140625,0.69531250)
|
|
border:SetDrawLayer("background")
|
|
border:SetPoint("topleft", thisButton.button, "topleft", -9, 9)
|
|
|
|
local line = gump:NewImage(thisButton, "Interface\\SPELLBOOK\\Spellbook-Parts", 84, 25, nil, nil, "line", "DetailsCustomEncounterLineButton"..i)
|
|
line:SetTexCoord(0.31250000, 0.96484375, 0.37109375, 0.52343750)
|
|
line:SetDrawLayer("background")
|
|
line:SetPoint("left", thisButton.button, "right", -60, -3)
|
|
|
|
table.insert(spellsFrameButtons, #spellsFrameButtons+1, thisButton)
|
|
end
|
|
|
|
y = y + 20
|
|
if (y >= 400) then
|
|
y = 10
|
|
x = x + 100
|
|
end
|
|
|
|
local nome_magia, _, icone_magia = _GetSpellInfo(spell)
|
|
thisButton.image:SetTexture(icone_magia)
|
|
thisButton.label:SetText(nome_magia)
|
|
thisButton:SetClickFunction(selectedEncounterSpell, spell)
|
|
thisButton.spellid = spell
|
|
thisButton:Show()
|
|
i = i + 1
|
|
end
|
|
|
|
for maxIndex = i, #spellsFrameButtons do
|
|
spellsFrameButtons [maxIndex]:Hide()
|
|
end
|
|
|
|
i = i-1
|
|
spellsFrame:SetSize(math.ceil (i/20)*110, math.min (i*20 + 20, 420))
|
|
|
|
end
|
|
|
|
local BuildEncounterMenu = function()
|
|
|
|
GameCooltip:Reset()
|
|
GameCooltip:SetType ("menu")
|
|
GameCooltip:SetOwner(spell_id_boss)
|
|
|
|
for instanceId, instanceTable in pairs(_detalhes.EncounterInformation) do
|
|
|
|
if (_detalhes:InstanceisRaid (instanceId)) then
|
|
|
|
GameCooltip:AddLine(instanceTable.name, _, 1, "white")
|
|
GameCooltip:AddIcon (instanceTable.icon, 1, 1, 64, 32)
|
|
|
|
for index, encounterName in ipairs(instanceTable.boss_names) do
|
|
GameCooltip:AddMenu (2, EncounterSelect, instanceId, index, nil, encounterName, nil, true)
|
|
local L, R, T, B, Texture = _detalhes:GetBossIcon (instanceId, index)
|
|
GameCooltip:AddIcon (Texture, 2, 1, 20, 20, L, R, T, B)
|
|
end
|
|
|
|
GameCooltip:SetWallpaper (2, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true)
|
|
|
|
end
|
|
end
|
|
|
|
GameCooltip:SetOption("ButtonsYMod", -2)
|
|
GameCooltip:SetOption("YSpacingMod", 0)
|
|
GameCooltip:SetOption("TextHeightMod", 0)
|
|
GameCooltip:SetOption("IgnoreButtonAutoHeight", false)
|
|
GameCooltip:SetWallpaper (1, [[Interface\SPELLBOOK\Spellbook-Page-1]], {.6, 0.1, 0, 0.64453125}, {1, 1, 1, 0.1}, true)
|
|
|
|
GameCooltip:SetOption("HeightAnchorMod", -10)
|
|
GameCooltip:ShowCooltip()
|
|
end
|
|
|
|
spell_id_boss:SetScript("OnEnter", function()
|
|
spell_id_boss_image:SetBlendMode("ADD")
|
|
BuildEncounterMenu()
|
|
end)
|
|
|
|
spell_id_boss:SetScript("OnLeave", function()
|
|
spell_id_boss_image:SetBlendMode("BLEND")
|
|
end)
|
|
|
|
--select target
|
|
--select spell
|
|
|
|
--create box type 2
|
|
local box2 = CreateFrame("frame", "DetailsCustomPanelBox2", customWindow)
|
|
customWindow.box2 = box2
|
|
box2:SetSize(450, 180)
|
|
box2:SetPoint("topleft", icon_label.widget, "bottomleft", -10, -20)
|
|
|
|
box2:SetFrameLevel(box0:GetFrameLevel()+1)
|
|
|
|
--edit main code
|
|
local maincode_button = gump:NewButton(box2, nil, "$parentMainCodeButton", "maiccodebutton", 160, 20, DetailsCustomPanel.StartEditCode, 1, nil, nil, Loc ["STRING_CUSTOM_EDIT_SEARCH_CODE"])
|
|
maincode_button:SetPoint("topleft", customWindow, "topleft", CONST_EDITBUTTONS_X_POSITION, CONST_MENU_Y_POSITION)
|
|
maincode_button.tooltip = Loc ["STRING_CUSTOM_EDITCODE_DESC"]
|
|
maincode_button:SetTemplate(CONST_CODETEXTENTRY_OPENCODEBUTTONS_TEMPLATE)
|
|
|
|
--edit tooltip code
|
|
local tooltipcode_button = gump:NewButton(box2, nil, "$parentTooltipCodeButton", "tooltipcodebutton", 160, 20, DetailsCustomPanel.StartEditCode, 2, nil, nil, Loc ["STRING_CUSTOM_EDIT_TOOLTIP_CODE"])
|
|
tooltipcode_button:SetPoint("topleft", maincode_button, "bottomleft", 0, -8)
|
|
tooltipcode_button.tooltip = Loc ["STRING_CUSTOM_EDITTOOLTIP_DESC"]
|
|
tooltipcode_button:SetTemplate(CONST_CODETEXTENTRY_OPENCODEBUTTONS_TEMPLATE)
|
|
|
|
--edit total code
|
|
local totalcode_button = gump:NewButton(box2, nil, "$parentTotalCodeButton", "totalcodebutton", 160, 20, DetailsCustomPanel.StartEditCode, 3, nil, nil, "Edit Total Code")
|
|
totalcode_button:SetPoint("topleft", tooltipcode_button, "bottomleft", 0, -8)
|
|
totalcode_button.tooltip = "This code is responsible for edit the total number shown in the player bar.\n\nThis is not necessary if you want show exactly the value gotten in the search code."
|
|
totalcode_button:SetTemplate(CONST_CODETEXTENTRY_OPENCODEBUTTONS_TEMPLATE)
|
|
|
|
--edit percent code
|
|
local percentcode_button = gump:NewButton(box2, nil, "$parentPercentCodeButton", "percentcodebutton", 160, 20, DetailsCustomPanel.StartEditCode, 4, nil, nil, "Edit Percent Code")
|
|
percentcode_button:SetPoint("topleft", totalcode_button, "bottomleft", 0, -8)
|
|
percentcode_button.tooltip = "Edit the code responsible for the percent number in the player bar.\n\nThis is not required if you want to use simple percentage (comparing with total)."
|
|
percentcode_button:SetTemplate(CONST_CODETEXTENTRY_OPENCODEBUTTONS_TEMPLATE)
|
|
|
|
box2:Hide()
|
|
|
|
--create the code editbox
|
|
local codeEditor = gump:NewSpecialLuaEditorEntry(customWindow, CONST_EDITBOX_WIDTH, CONST_EDITBOX_HEIGHT, "codeeditor", "$parentCodeEditor", false, true)
|
|
codeEditor:SetPoint("topleft", customWindow, "topleft", CONST_MENU_X_POSITION, CONST_EDITBOX_Y_POSITION)
|
|
codeEditor:SetFrameLevel(customWindow:GetFrameLevel()+4)
|
|
codeEditor:SetBackdrop(nil)
|
|
codeEditor.scroll:SetBackdrop(nil)
|
|
codeEditor.editbox:SetBackdrop(nil)
|
|
DetailsFramework:ReskinSlider(codeEditor.scroll)
|
|
|
|
if (not codeEditor.__background) then
|
|
codeEditor.__background = codeEditor:CreateTexture(nil, "background")
|
|
end
|
|
|
|
codeEditor:SetBackdrop({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1})
|
|
codeEditor:SetBackdropBorderColor(0, 0, 0, 1)
|
|
|
|
codeEditor.__background:SetColorTexture(0.2317647, 0.2317647, 0.2317647)
|
|
codeEditor.__background:SetVertexColor(0.27, 0.27, 0.27)
|
|
codeEditor.__background:SetAlpha(0.8)
|
|
codeEditor.__background:SetVertTile(true)
|
|
codeEditor.__background:SetHorizTile(true)
|
|
codeEditor.__background:SetAllPoints()
|
|
|
|
codeEditor:HookScript("OnUpdate", function()
|
|
local script = codeEditor:GetText()
|
|
local func, errortext = loadstring(script)
|
|
if (not func) then
|
|
local firstLine = strsplit("\n", script, 2)
|
|
errortext = errortext:gsub(firstLine, "")
|
|
errortext = errortext:gsub("%[string \"", "")
|
|
errortext = errortext:gsub("...\"]:", "")
|
|
errortext = "Line " .. errortext
|
|
DetailsCustomPanel.ErrorString.text = errortext
|
|
else
|
|
DetailsCustomPanel.ErrorString.text = ""
|
|
end
|
|
end)
|
|
|
|
--create a background area where the code editor is
|
|
local codeEditorBackground = gump:NewButton(customWindow, nil, nil, nil, 1, 1, function()end)
|
|
codeEditorBackground:SetAllPoints(codeEditor)
|
|
codeEditorBackground:SetTemplate(CONST_CODETEXTENTRY_TEMPLATE)
|
|
|
|
codeEditor:Hide()
|
|
codeEditor.font_size = 11
|
|
|
|
local file, size, flags = codeEditor.editbox:GetFont()
|
|
codeEditor.editbox:SetFont(file, 11, flags)
|
|
|
|
local expand_func = function()
|
|
if (codeEditor.expanded) then
|
|
codeEditor:SetSize(CONST_EDITBOX_WIDTH, CONST_EDITBOX_HEIGHT)
|
|
codeEditor.expanded = nil
|
|
codeEditorBackground:SetTemplate(CONST_CODETEXTENTRY_TEMPLATE)
|
|
|
|
--custom_window.box0.cancelbutton:SetPoint("bottomleft", attribute_box, "bottomright", 37, -10)
|
|
--custom_window.box0.acceptbutton:SetPoint("left", cancel_button, "right", 2, 0)
|
|
else
|
|
codeEditor:SetSize(CONST_EDITBOX_WIDTH, CONST_EDITBOX_HEIGHT*1.9)
|
|
codeEditor.expanded = true
|
|
codeEditorBackground:SetTemplate(CONST_CODETEXTENTRYEXPANDED_TEMPLATE)
|
|
|
|
--custom_window.box0.cancelbutton:SetPoint("bottomleft", attribute_box, "bottomright", -237, -10)
|
|
--custom_window.box0.acceptbutton:SetPoint
|
|
end
|
|
end
|
|
|
|
local font_change = function(_, _, increase)
|
|
if (increase) then
|
|
local file, size, flags = codeEditor.editbox:GetFont()
|
|
codeEditor.font_size = codeEditor.font_size + 1
|
|
codeEditor.editbox:SetFont(file, codeEditor.font_size, flags)
|
|
else
|
|
local file, size, flags = codeEditor.editbox:GetFont()
|
|
codeEditor.font_size = codeEditor.font_size - 1
|
|
codeEditor.editbox:SetFont(file, codeEditor.font_size, flags)
|
|
end
|
|
end
|
|
|
|
local apply_code = function()
|
|
|
|
_detalhes:ResetCustomFunctionsCache()
|
|
|
|
if (DetailsCustomPanel.CodeEditing == 1) then
|
|
DetailsCustomPanel.code1 = customWindow.codeeditor:GetText()
|
|
elseif (DetailsCustomPanel.CodeEditing == 2) then
|
|
DetailsCustomPanel.code2 = customWindow.codeeditor:GetText()
|
|
elseif (DetailsCustomPanel.CodeEditing == 3) then
|
|
DetailsCustomPanel.code3 = customWindow.codeeditor:GetText()
|
|
elseif (DetailsCustomPanel.CodeEditing == 4) then
|
|
DetailsCustomPanel.code4 = customWindow.codeeditor:GetText()
|
|
end
|
|
|
|
local main_code = DetailsCustomPanel.code1
|
|
local tooltip_code = DetailsCustomPanel.code2
|
|
local total_code = DetailsCustomPanel.code3
|
|
local percent_code = DetailsCustomPanel.code4
|
|
|
|
local object = DetailsCustomPanel.IsEditing
|
|
|
|
if (type(object) ~= "table") then
|
|
return _detalhes:Msg("This object need to be saved before.")
|
|
end
|
|
|
|
object.script = main_code
|
|
object.tooltip = tooltip_code
|
|
|
|
if (total_code ~= DetailsCustomPanel.code3_default) then
|
|
object.total_script = total_code
|
|
else
|
|
object.total_script = false
|
|
end
|
|
|
|
if (percent_code ~= DetailsCustomPanel.code4_default) then
|
|
object.percent_script = percent_code
|
|
else
|
|
object.percent_script = false
|
|
end
|
|
|
|
return true
|
|
end
|
|
|
|
local supportFrame = CreateFrame("frame", "$parentSupportFrame", customWindow)
|
|
supportFrame:SetFrameLevel(500)
|
|
|
|
local expand = gump:NewButton(supportFrame, nil, "$parentExpand", "expandbutton", CONST_EDITBOX_BUTTON_WIDTH, CONST_EDITBOX_BUTTON_HEIGHT, expand_func, 4, nil, nil, "Expand")
|
|
expand:SetPoint("bottomleft", codeEditor, "topleft", 0, 1)
|
|
expand:SetTemplate(CONST_CODETEXTENTRYBUTTON_TEMPLATE)
|
|
|
|
local font_size1 = gump:NewButton(supportFrame, nil, "$parentFont1", "font1button", CONST_EDITBOX_BUTTON_WIDTH, CONST_EDITBOX_BUTTON_HEIGHT, font_change, nil, nil, nil, "Aa")
|
|
font_size1:SetPoint("left", expand, "right", 2, 0)
|
|
font_size1:SetTemplate(CONST_CODETEXTENTRYBUTTON_TEMPLATE)
|
|
|
|
local font_size2 = gump:NewButton(supportFrame, nil, "$parentFont2", "font2button", CONST_EDITBOX_BUTTON_WIDTH, CONST_EDITBOX_BUTTON_HEIGHT, font_change, true, nil, nil, "aA")
|
|
font_size2:SetPoint("left", font_size1, "right", 2, 0)
|
|
font_size2:SetTemplate(CONST_CODETEXTENTRYBUTTON_TEMPLATE)
|
|
|
|
local apply1 = gump:NewButton(supportFrame, nil, "$parentApply", "applybutton", CONST_EDITBOX_BUTTON_WIDTH, CONST_EDITBOX_BUTTON_HEIGHT, apply_code, nil, nil, nil, "Apply")
|
|
apply1:SetPoint("left", font_size2, "right", 2, 0)
|
|
apply1:SetTemplate(CONST_CODETEXTENTRYBUTTON_TEMPLATE)
|
|
|
|
local open_API = gump:NewButton(supportFrame, nil, "$parentOpenAPI", "openAPIbutton", CONST_EDITBOX_BUTTON_WIDTH, CONST_EDITBOX_BUTTON_HEIGHT, function()end, nil, nil, nil, "API") --_detalhes.OpenAPI - opening the api was cancelling the editing process
|
|
open_API:SetPoint("left", apply1, "right", 2, 0)
|
|
open_API:SetTemplate(CONST_CODETEXTENTRYBUTTON_TEMPLATE)
|
|
|
|
local errorString = gump:CreateLabel(supportFrame)
|
|
errorString:SetPoint("left", open_API, "right", 10, 0)
|
|
errorString.color = "red"
|
|
DetailsCustomPanel.ErrorString = errorString
|
|
|
|
codeEditor:SetScript("OnShow", function()
|
|
expand:Show()
|
|
font_size1:Show()
|
|
font_size2:Show()
|
|
apply1:Show()
|
|
open_API:Show()
|
|
end)
|
|
codeEditor:SetScript("OnHide", function()
|
|
expand:Hide()
|
|
font_size1:Hide()
|
|
font_size2:Hide()
|
|
apply1:Hide()
|
|
open_API:Hide()
|
|
end)
|
|
|
|
expand:Hide()
|
|
font_size1:Hide()
|
|
font_size2:Hide()
|
|
apply1:Hide()
|
|
open_API:Hide()
|
|
|
|
--select damage
|
|
DetailsCustomPanelAttributeMenu1:Click()
|
|
else
|
|
DetailsPluginContainerWindow.OpenPlugin (DetailsCustomPanel)
|
|
--_G.DetailsCustomPanel:Show()
|
|
end
|
|
end
|
|
|
|
|