b74b58ada6
- Rewrite on Raid Plugins Support, now can open more then 1 plugins at once on diferent windows. - Functions inside custom right text now receives the actor object as first parameter. - Added a large text editor for make changes on custom texts. - Added cosmetic menus for report and erase segments button. - Added new option for add borders on the bars. - Added Death Barrier as a absorb spell. - Speed improvaments on bar animations. - Fixed a bug on overheal tooltip where was showing the Hps instead of overheal. - Fixed few issues when ignoring combats with 5 seconds or less. - Fixed bug when reloging inside a raid or dungeon instance was erasing pet owner database. - Fixed Data Broker text where was passing the total damage/healing instead of Dps/Hps. - Fixed a issue with _detalhes:Hex(): where wasn't correctly formating number below 16. - New Api: _detalhes:SetBarBackdropSettings (enabled, size, color, texture): set row border settings. - New Api: _detalhes:GetInstanceAttributeText(): return the text to show on the title text. - New Api: _detalhes.RaidTables:DisableRaidMode (instance): turn off the raid mode in the instance. - New Api: _detalhes:RaidPluginInstalled (plugin_name): return is the plugin is installed. - New Api: _detalhes.RaidTables:EnableRaidMode (instance, plugin_name): enable the raid mode on the instance. - New Api: _detalhes.RaidTables:GetAvailablePlugins(): return all plugins which is installed, enabled and not in use. - New Api: _detalhes.RaidTables:IsAvailable (plugin_name, instance): return if the plugin is available for use. - New Api: _detalhes.RaidTables:SetInUse (absolute_name, instance_number): declare a plugin as in use by a instance. - New Api: _detalhes.RaidTables:switch (_, plugin_name, instance): change the plugin shown on the instance.
1041 lines
41 KiB
Lua
1041 lines
41 KiB
Lua
--no inicio da luta gravar tabela com os coolsdowns de cada jogador e ir anotando quando eles sao usados.
|
|
|
|
--File Revision: 1
|
|
--Last Modification: 27/07/2013
|
|
-- Change Log:
|
|
-- 27/07/2013: Finished alpha version.
|
|
|
|
function _G._detalhes:Start()
|
|
|
|
--teste de box
|
|
--[[
|
|
local f = CreateFrame ("frame", "TestBoxFrame", UIParent)
|
|
f:SetPoint ("center", UIParent, "center")
|
|
f:SetSize (256, 256)
|
|
f:SetMovable (true)
|
|
|
|
local t = f:CreateTexture (nil, "artwork")
|
|
t:SetSize (90, 90)
|
|
t:SetPoint ("topleft", f, "topleft")
|
|
t:SetTexture ("Interface\\Addons\\Details\\box")
|
|
t:SetTexCoord (0.29296875, 0.64453125, 0.265625-0.001953125, 0.6171875+0.001953125) -- 75 68 165 158 0.001953125 //
|
|
|
|
local left = f:CreateFontString (nil, "overlay", "GameFontNormal")
|
|
local right = f:CreateFontString (nil, "overlay", "GameFontNormal")
|
|
local top = f:CreateFontString (nil, "overlay", "GameFontNormal")
|
|
local bottom = f:CreateFontString (nil, "overlay", "GameFontNormal")
|
|
|
|
left:SetPoint ("right", t, "left", -20, 0)
|
|
right:SetPoint ("left", t, "right", 20, 0)
|
|
top:SetPoint ("bottom", t, "top", 0, 20)
|
|
bottom:SetPoint ("top", t, "bottom", 0, -20)
|
|
|
|
function f:UpdateLeftRight()
|
|
left:SetText ("left: " .. string.format ("%.3f", t:GetLeft()))
|
|
right:SetText ("right: " .. string.format ("%.3f", t:GetRight()))
|
|
top:SetText ("top: " .. string.format ("%.3f", t:GetTop()))
|
|
bottom:SetText ("bottom: " .. string.format ("%.3f", t:GetBottom()))
|
|
end
|
|
f:UpdateLeftRight()
|
|
|
|
f:SetScript ("OnMouseDown", function() f:StartMoving(); f:SetScript("OnUpdate", function() f:UpdateLeftRight() end) end)
|
|
f:SetScript ("OnMouseUp", function() f:StopMovingOrSizing(); f:SetScript("OnUpdate", nil); f:UpdateLeftRight() end)
|
|
|
|
function _detalhes:updatetestbox()
|
|
f:UpdateLeftRight()
|
|
end
|
|
_detalhes:ScheduleTimer("updatetestbox", 5)
|
|
|
|
--]]
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
--> details defaults
|
|
|
|
--> parse all config
|
|
--_detalhes:CountDataOnLoad()
|
|
|
|
--> single click row function replace
|
|
--damage, dps, damage taken, friendly fire
|
|
self.row_singleclick_overwrite [1] = {true, true, true, true, self.atributo_damage.ReportSingleFragsLine, true, self.atributo_damage.ReportSingleVoidZoneLine}
|
|
--healing, hps, overheal, healing taken
|
|
self.row_singleclick_overwrite [2] = {true, true, true, true, false, self.atributo_heal.ReportSingleDamagePreventedLine}
|
|
--mana, rage, energy, runepower
|
|
self.row_singleclick_overwrite [3] = {true, true, true, true}
|
|
--cc breaks, ress, interrupts, dispells, deaths
|
|
self.row_singleclick_overwrite [4] = {true, true, true, true, self.atributo_misc.ReportSingleDeadLine, self.atributo_misc.ReportSingleCooldownLine, self.atributo_misc.ReportSingleBuffUptimeLine, self.atributo_misc.ReportSingleDebuffUptimeLine}
|
|
|
|
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
--> initialize
|
|
|
|
--> build frames
|
|
|
|
--> fast switch
|
|
if (self.switch.InitSwitch) then
|
|
self.switch:InitSwitch()
|
|
end
|
|
--> custom window
|
|
self.custom = self.custom or {}
|
|
self:InitCustom()
|
|
--> actor info
|
|
self.janela_info = self.gump:CriaJanelaInfo()
|
|
self.gump:Fade (self.janela_info, 1)
|
|
--> copy and paste window
|
|
self:CreateCopyPasteWindow()
|
|
self.CreateCopyPasteWindow = nil
|
|
--> yesno frame
|
|
self.yesNo = self.gump:NewPanel (UIParent, _, "DetailsYesNoWindow", _, 500, 80)
|
|
self.yesNo:SetPoint ("center", UIParent, "center")
|
|
self.gump:NewLabel (self.yesNo, _, "$parentAsk", "ask", "")
|
|
self.yesNo ["ask"]:SetPoint ("center", self.yesNo, "center", 0, 25)
|
|
self.yesNo ["ask"]:SetWidth (480)
|
|
self.yesNo ["ask"]:SetJustifyH ("center")
|
|
self.yesNo ["ask"]:SetHeight (22)
|
|
local Loc = LibStub ("AceLocale-3.0"):GetLocale ("Details")
|
|
self.gump:NewButton (self.yesNo, _, "$parentNo", "no", 100, 30, function() self.yesNo:Hide() end, nil, nil, nil, Loc ["STRING_NO"])
|
|
self.gump:NewButton (self.yesNo, _, "$parentYes", "yes", 100, 30, nil, nil, nil, nil, Loc ["STRING_YES"])
|
|
self.yesNo ["no"]:SetPoint (10, -45)
|
|
self.yesNo ["yes"]:SetPoint (390, -45)
|
|
self.yesNo ["no"]:InstallCustomTexture()
|
|
self.yesNo ["yes"]:InstallCustomTexture()
|
|
self.yesNo ["yes"]:SetHook ("OnMouseUp", function() self.yesNo:Hide() end)
|
|
function _detalhes:Ask (msg, func, ...)
|
|
self.yesNo ["ask"].text = msg
|
|
local p1, p2 = ...
|
|
self.yesNo ["yes"]:SetClickFunction (func, p1, p2)
|
|
self.yesNo:Show()
|
|
end
|
|
self.yesNo:Hide()
|
|
|
|
--> start instances
|
|
|
|
--_detalhes.custom = {}
|
|
--_detalhes.tabela_instancias = {}
|
|
|
|
if (self:QuantasInstancias() == 0) then
|
|
self:CriarInstancia()
|
|
else
|
|
--self:ReativarInstancias()
|
|
end
|
|
self:GetLowerInstanceNumber()
|
|
self:CheckConsolidates()
|
|
|
|
--> start time machine
|
|
self.timeMachine:Ligar()
|
|
|
|
--> update abbreviation shorcut
|
|
self.atributo_damage:UpdateSelectedToKFunction()
|
|
self.atributo_heal:UpdateSelectedToKFunction()
|
|
self.atributo_energy:UpdateSelectedToKFunction()
|
|
self.atributo_misc:UpdateSelectedToKFunction()
|
|
|
|
--> start instances updater
|
|
self:AtualizaGumpPrincipal (-1, true)
|
|
self.atualizador = self:ScheduleRepeatingTimer ("AtualizaGumpPrincipal", _detalhes.update_speed, -1)
|
|
|
|
for index = 1, #self.tabela_instancias do
|
|
local instance = self.tabela_instancias [index]
|
|
if (instance:IsAtiva()) then
|
|
self:ScheduleTimer ("RefreshBars", 1, instance)
|
|
self:ScheduleTimer ("InstanceReset", 1, instance)
|
|
self:ScheduleTimer ("InstanceRefreshRows", 1, instance)
|
|
end
|
|
end
|
|
|
|
function self:RefreshAfterStartup()
|
|
|
|
self:AtualizaGumpPrincipal (-1, true)
|
|
|
|
local lower_instance = _detalhes:GetLowerInstanceNumber()
|
|
|
|
for index = 1, #self.tabela_instancias do
|
|
local instance = self.tabela_instancias [index]
|
|
if (instance:IsAtiva()) then
|
|
--> refresh wallpaper
|
|
if (instance.wallpaper.enabled) then
|
|
instance:InstanceWallpaper (true)
|
|
else
|
|
instance:InstanceWallpaper (false)
|
|
end
|
|
|
|
--> refresh desaturated icons if is lower instance
|
|
if (index == lower_instance) then
|
|
instance:DesaturateMenu()
|
|
end
|
|
end
|
|
end
|
|
|
|
_detalhes.ToolBar:ReorganizeIcons() --> refresh all skin
|
|
|
|
self.RefreshAfterStartup = nil
|
|
|
|
function _detalhes:CheckWallpaperAfterStartup()
|
|
for _, instance in ipairs (self.tabela_instancias) do
|
|
if (not instance.wallpaper.enabled) then
|
|
if (instance:IsAtiva()) then
|
|
instance:InstanceWallpaper (false)
|
|
end
|
|
end
|
|
end
|
|
self.CheckWallpaperAfterStartup = nil
|
|
end
|
|
_detalhes:ScheduleTimer ("CheckWallpaperAfterStartup", 5)
|
|
|
|
end
|
|
self:ScheduleTimer ("RefreshAfterStartup", 5)
|
|
|
|
|
|
|
|
--> start garbage collector
|
|
self.ultima_coleta = 0
|
|
self.intervalo_coleta = 720
|
|
self.intervalo_memoria = 180
|
|
self.garbagecollect = self:ScheduleRepeatingTimer ("IniciarColetaDeLixo", self.intervalo_coleta)
|
|
self.memorycleanup = self:ScheduleRepeatingTimer ("CheckMemoryPeriodically", self.intervalo_memoria)
|
|
self.next_memory_check = time()+self.intervalo_memoria
|
|
|
|
--> start parser
|
|
|
|
--> load parser capture options
|
|
self:CaptureRefresh()
|
|
--> register parser events
|
|
--self.listener:RegisterEvent ("COMBAT_LOG_EVENT_UNFILTERED")
|
|
self.parser_frame:RegisterEvent ("COMBAT_LOG_EVENT_UNFILTERED")
|
|
self.listener:RegisterEvent ("PLAYER_REGEN_DISABLED")
|
|
self.listener:RegisterEvent ("PLAYER_REGEN_ENABLED")
|
|
self.listener:RegisterEvent ("SPELL_SUMMON")
|
|
self.listener:RegisterEvent ("UNIT_PET")
|
|
|
|
self.listener:RegisterEvent ("PARTY_MEMBERS_CHANGED")
|
|
self.listener:RegisterEvent ("GROUP_ROSTER_UPDATE")
|
|
self.listener:RegisterEvent ("PARTY_CONVERTED_TO_RAID")
|
|
|
|
self.listener:RegisterEvent ("INSTANCE_ENCOUNTER_ENGAGE_UNIT")
|
|
|
|
self.listener:RegisterEvent ("ZONE_CHANGED_NEW_AREA")
|
|
self.listener:RegisterEvent ("PLAYER_ENTERING_WORLD")
|
|
|
|
self.listener:RegisterEvent ("ENCOUNTER_START")
|
|
self.listener:RegisterEvent ("ENCOUNTER_END")
|
|
|
|
--self.listener:RegisterAllEvents()
|
|
|
|
-- self.listener:RegisterEvent ("SPELL_CAST_START")
|
|
-- self.listener:RegisterEvent ("UNIT_SPELLCAST_STOP")
|
|
-- self.listener:RegisterEvent ("UNIT_SPELLCAST_SUCCEEDED")
|
|
-- self.listener:RegisterEvent ("UNIT_SPELLCAST_FAILED")
|
|
-- self.listener:RegisterEvent ("UNIT_SPELLCAST_FAILED_QUIET")
|
|
-- self.listener:RegisterEvent ("UNIT_SPELLCAST_INTERRUPTED")
|
|
----------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
function _detalhes:CooltipPreset (preset)
|
|
|
|
local GameCooltip = GameCooltip
|
|
|
|
GameCooltip:Reset()
|
|
|
|
if (preset == 1) then
|
|
GameCooltip:SetOption ("TextFont", "Friz Quadrata TT")
|
|
GameCooltip:SetOption ("TextColor", "orange")
|
|
GameCooltip:SetOption ("TextSize", 12)
|
|
GameCooltip:SetOption ("ButtonsYMod", -4)
|
|
GameCooltip:SetOption ("YSpacingMod", -4)
|
|
GameCooltip:SetOption ("IgnoreButtonAutoHeight", true)
|
|
GameCooltip:SetColor (1, 0.5, 0.5, 0.5, 0.5)
|
|
|
|
elseif (preset == 2) then
|
|
GameCooltip:SetOption ("TextFont", "Friz Quadrata TT")
|
|
GameCooltip:SetOption ("TextColor", "orange")
|
|
GameCooltip:SetOption ("TextSize", 12)
|
|
GameCooltip:SetOption ("FixedWidth", 220)
|
|
GameCooltip:SetOption ("ButtonsYMod", -4)
|
|
GameCooltip:SetOption ("YSpacingMod", -4)
|
|
GameCooltip:SetOption ("IgnoreButtonAutoHeight", true)
|
|
GameCooltip:SetColor (1, 0.5, 0.5, 0.5, 0.5)
|
|
|
|
end
|
|
end
|
|
|
|
--> done
|
|
self.initializing = nil
|
|
|
|
--> group
|
|
self.details_users = {}
|
|
self.in_group = IsInGroup() or IsInRaid()
|
|
|
|
--> send messages gathered on initialization
|
|
self:ScheduleTimer ("ShowDelayMsg", 10)
|
|
|
|
--> send instance open signal
|
|
for index, instancia in ipairs (self.tabela_instancias) do
|
|
if (instancia.ativa) then
|
|
self:SendEvent ("DETAILS_INSTANCE_OPEN", nil, instancia)
|
|
--instancia:SetBarGrowDirection()
|
|
end
|
|
end
|
|
|
|
--> all done, send started signal and we are ready
|
|
function self:AnnounceStartup()
|
|
self:SendEvent ("DETAILS_STARTED", "SEND_TO_ALL")
|
|
end
|
|
self:ScheduleTimer ("AnnounceStartup", 5)
|
|
|
|
--> announce alpha version
|
|
function self:AnnounceVersion()
|
|
for index, instancia in ipairs (self.tabela_instancias) do
|
|
if (instancia.ativa) then
|
|
self.gump:Fade (instancia._version, "in", 0.1)
|
|
end
|
|
end
|
|
end
|
|
|
|
--[[
|
|
if (self.tutorial.version_announce < 4) then
|
|
self:ScheduleTimer ("AnnounceVersion", 20)
|
|
self.tutorial.version_announce = self.tutorial.version_announce + 1
|
|
else
|
|
|
|
for index, instancia in ipairs (self.tabela_instancias) do
|
|
if (instancia.ativa) then
|
|
self.gump:Fade (instancia._version, 0)
|
|
instancia._version:SetText ("Details! Alpha " .. _detalhes.userversion .. " (core: " .. self.realversion .. ")")
|
|
instancia._version:SetPoint ("bottomleft", instancia.baseframe, "bottomleft", 0, 1)
|
|
self.gump:Fade (instancia._version, "in", 10)
|
|
|
|
if (instancia.auto_switch_to_old) then
|
|
instancia:SwitchBack()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
--]]
|
|
|
|
--_detalhes:OpenWelcomeWindow() --for debug
|
|
|
|
if (self.is_first_run) then
|
|
|
|
_detalhes:OpenWelcomeWindow()
|
|
|
|
if (#self.custom == 0) then
|
|
local Healthstone = {
|
|
["attribute"] = 2,
|
|
["spell"] = "6262",
|
|
["name"] = "Healthstone",
|
|
["sattribute"] = 1,
|
|
["target"] = "",
|
|
["source"] = "[raid]",
|
|
["icon"] = "Interface\\Icons\\warlock_ healthstone",
|
|
}
|
|
self.custom [#self.custom+1] = Healthstone
|
|
|
|
local HealingPotion = {
|
|
["attribute"] = 2,
|
|
["spell"] = "105708",
|
|
["name"] = "Healing Potion",
|
|
["sattribute"] = 1,
|
|
["target"] = "",
|
|
["source"] = "[raid]",
|
|
["icon"] = "Interface\\Icons\\trade_alchemy_potiond3",
|
|
}
|
|
self.custom [#self.custom+1] = HealingPotion
|
|
end
|
|
|
|
_detalhes:FillUserCustomSpells()
|
|
|
|
end
|
|
|
|
--_detalhes:OpenWelcomeWindow()
|
|
|
|
--desligado por preocaução
|
|
if (self.tutorial.logons < 2) then
|
|
--self:StartTutorial()
|
|
end
|
|
|
|
--> feedback trhead
|
|
if (self.tutorial.logons > 100) then -- and self.tutorial.logons < 104
|
|
|
|
--desligado por preocaução
|
|
|
|
if (not self.tutorial.feedback_window1) then
|
|
self.tutorial.feedback_window1 = true
|
|
|
|
local feedback_frame = CreateFrame ("FRAME", "DetailsFeedbackWindow", UIParent, "ButtonFrameTemplate")
|
|
tinsert (UISpecialFrames, "DetailsFeedbackWindow")
|
|
feedback_frame:SetPoint ("center", UIParent, "center")
|
|
feedback_frame:SetSize (512, 200)
|
|
feedback_frame.portrait:SetTexture ([[Interface\CHARACTERFRAME\TEMPORARYPORTRAIT-FEMALE-GNOME]])
|
|
|
|
feedback_frame.TitleText:SetText ("Details! Need Your Help!")
|
|
|
|
feedback_frame.uppertext = feedback_frame:CreateFontString (nil, "artwork", "GameFontNormal")
|
|
feedback_frame.uppertext:SetText ("Tell us about your experience using Details!, what you liked most, where we could improve, what things you want to see in the future?")
|
|
feedback_frame.uppertext:SetPoint ("topleft", feedback_frame, "topleft", 60, -32)
|
|
local font, _, flags = feedback_frame.uppertext:GetFont()
|
|
feedback_frame.uppertext:SetFont (font, 10, flags)
|
|
feedback_frame.uppertext:SetTextColor (1, 1, 1, .8)
|
|
feedback_frame.uppertext:SetWidth (440)
|
|
|
|
|
|
local editbox = _detalhes.gump:NewTextEntry (feedback_frame, nil, "$parentTextEntry", "text", 387, 14)
|
|
editbox:SetPoint (20, -106)
|
|
editbox:SetAutoFocus (false)
|
|
editbox:SetHook ("OnEditFocusGained", function()
|
|
editbox.text = "http://www.mmo-champion.com/threads/1480721-New-damage-meter-%28Details!%29-need-help-with-tests-and-feedbacks"
|
|
editbox:HighlightText()
|
|
end)
|
|
editbox:SetHook ("OnEditFocusLost", function()
|
|
editbox.text = "http://www.mmo-champion.com/threads/1480721-New-damage-meter-%28Details!%29-need-help-with-tests-and-feedbacks"
|
|
editbox:HighlightText()
|
|
end)
|
|
editbox:SetHook ("OnChar", function()
|
|
editbox.text = "http://www.mmo-champion.com/threads/1480721-New-damage-meter-%28Details!%29-need-help-with-tests-and-feedbacks"
|
|
editbox:HighlightText()
|
|
end)
|
|
editbox.text = "http://www.mmo-champion.com/threads/1480721-New-damage-meter-%28Details!%29-need-help-with-tests-and-feedbacks"
|
|
|
|
|
|
feedback_frame.midtext = feedback_frame:CreateFontString (nil, "artwork", "GameFontNormal")
|
|
feedback_frame.midtext:SetText ("visit the link above and let's make Details! stronger!")
|
|
feedback_frame.midtext:SetPoint ("center", editbox.widget, "center")
|
|
feedback_frame.midtext:SetPoint ("top", editbox.widget, "bottom", 0, -2)
|
|
feedback_frame.midtext:SetJustifyH ("center")
|
|
local font, _, flags = feedback_frame.midtext:GetFont()
|
|
feedback_frame.midtext:SetFont (font, 10, flags)
|
|
--feedback_frame.midtext:SetTextColor (1, 1, 1, 1)
|
|
feedback_frame.midtext:SetWidth (440)
|
|
|
|
|
|
feedback_frame.gnoma = feedback_frame:CreateTexture (nil, "artwork")
|
|
feedback_frame.gnoma:SetPoint ("topright", feedback_frame, "topright", -1, -59)
|
|
feedback_frame.gnoma:SetTexture ("Interface\\AddOns\\Details\\images\\icons2")
|
|
feedback_frame.gnoma:SetSize (105*1.05, 107*1.05)
|
|
feedback_frame.gnoma:SetTexCoord (0.2021484375, 0, 0.7919921875, 1)
|
|
|
|
feedback_frame.close = CreateFrame ("Button", "DetailsFeedbackWindowCloseButton", feedback_frame, "OptionsButtonTemplate")
|
|
feedback_frame.close:SetPoint ("bottomleft", feedback_frame, "bottomleft", 8, 4)
|
|
feedback_frame.close:SetText ("Close")
|
|
feedback_frame.close:SetScript ("OnClick", function (self)
|
|
editbox:ClearFocus()
|
|
feedback_frame:Hide()
|
|
end)
|
|
|
|
feedback_frame.postpone = CreateFrame ("Button", "DetailsFeedbackWindowPostPoneButton", feedback_frame, "OptionsButtonTemplate")
|
|
feedback_frame.postpone:SetPoint ("bottomright", feedback_frame, "bottomright", -10, 4)
|
|
feedback_frame.postpone:SetText ("Remind-me Later")
|
|
feedback_frame.postpone:SetScript ("OnClick", function (self)
|
|
editbox:ClearFocus()
|
|
feedback_frame:Hide()
|
|
_detalhes.tutorial.feedback_window1 = false
|
|
end)
|
|
feedback_frame.postpone:SetWidth (130)
|
|
|
|
feedback_frame:SetScript ("OnHide", function()
|
|
editbox:ClearFocus()
|
|
end)
|
|
|
|
--0.0009765625 512
|
|
function _detalhes:FeedbackSetFocus()
|
|
DetailsFeedbackWindow:Show()
|
|
DetailsFeedbackWindowTextEntry.MyObject:SetFocus()
|
|
DetailsFeedbackWindowTextEntry.MyObject:HighlightText()
|
|
end
|
|
_detalhes:ScheduleTimer ("FeedbackSetFocus", 5)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
if (self.is_version_first_run) then
|
|
|
|
local enable_reset_warning = true
|
|
|
|
local lower_instance = _detalhes:GetLowerInstanceNumber()
|
|
if (lower_instance) then
|
|
lower_instance = _detalhes:GetInstance (lower_instance)
|
|
if (lower_instance) then
|
|
lower_instance:InstanceAlert (Loc ["STRING_VERSION_UPDATE"], {[[Interface\GossipFrame\AvailableQuestIcon]], 16, 16, false}, 60, {_detalhes.OpenNewsWindow})
|
|
end
|
|
end
|
|
|
|
_detalhes:FillUserCustomSpells()
|
|
|
|
if (_detalhes_database.last_realversion and _detalhes_database.last_realversion < 18 and enable_reset_warning) then
|
|
|
|
--print ("Last Version:", _detalhes_database.last_version, "Last Interval Version:", _detalhes_database.last_realversion)
|
|
|
|
local resetwarning_frame = CreateFrame ("FRAME", "DetailsResetConfigWarningDialog", UIParent, "ButtonFrameTemplate")
|
|
resetwarning_frame:SetFrameStrata ("LOW")
|
|
tinsert (UISpecialFrames, "DetailsResetConfigWarningDialog")
|
|
resetwarning_frame:SetPoint ("center", UIParent, "center")
|
|
resetwarning_frame:SetSize (512, 200)
|
|
resetwarning_frame.portrait:SetTexture ([[Interface\CHARACTERFRAME\TEMPORARYPORTRAIT-FEMALE-GNOME]])
|
|
resetwarning_frame:SetScript ("OnHide", function()
|
|
DetailsBubble:HideBubble()
|
|
end)
|
|
|
|
resetwarning_frame.TitleText:SetText ("Noooooooooooo!!!")
|
|
|
|
resetwarning_frame.midtext = resetwarning_frame:CreateFontString (nil, "artwork", "GameFontNormal")
|
|
resetwarning_frame.midtext:SetText ("A pack of murlocs has attacked Details! tech center, our gnomes engineers are working on fixing the damage.\n\n If something is messed in your Details!, especially the close, instance and reset buttons, you can either 'Reset Skin' or access the options panel.")
|
|
resetwarning_frame.midtext:SetPoint ("topleft", resetwarning_frame, "topleft", 10, -90)
|
|
resetwarning_frame.midtext:SetJustifyH ("center")
|
|
resetwarning_frame.midtext:SetWidth (370)
|
|
|
|
resetwarning_frame.gnoma = resetwarning_frame:CreateTexture (nil, "artwork")
|
|
resetwarning_frame.gnoma:SetPoint ("topright", resetwarning_frame, "topright", -3, -80)
|
|
resetwarning_frame.gnoma:SetTexture ("Interface\\AddOns\\Details\\images\\icons2")
|
|
resetwarning_frame.gnoma:SetSize (89*1.00, 97*1.00)
|
|
--resetwarning_frame.gnoma:SetTexCoord (0.212890625, 0.494140625, 0.798828125, 0.99609375) -- 109 409 253 510
|
|
resetwarning_frame.gnoma:SetTexCoord (0.17578125, 0.001953125, 0.59765625, 0.787109375) -- 1 306 90 403
|
|
|
|
resetwarning_frame.close = CreateFrame ("Button", "DetailsFeedbackWindowCloseButton", resetwarning_frame, "OptionsButtonTemplate")
|
|
resetwarning_frame.close:SetPoint ("bottomleft", resetwarning_frame, "bottomleft", 8, 4)
|
|
resetwarning_frame.close:SetText ("Close")
|
|
resetwarning_frame.close:SetScript ("OnClick", function (self)
|
|
resetwarning_frame:Hide()
|
|
end)
|
|
|
|
resetwarning_frame.see_updates = CreateFrame ("Button", "DetailsResetWindowSeeUpdatesButton", resetwarning_frame, "OptionsButtonTemplate")
|
|
resetwarning_frame.see_updates:SetPoint ("bottomright", resetwarning_frame, "bottomright", -10, 4)
|
|
resetwarning_frame.see_updates:SetText ("Update Info")
|
|
resetwarning_frame.see_updates:SetScript ("OnClick", function (self)
|
|
_detalhes.OpenNewsWindow()
|
|
DetailsBubble:HideBubble()
|
|
--resetwarning_frame:Hide()
|
|
end)
|
|
resetwarning_frame.see_updates:SetWidth (130)
|
|
|
|
resetwarning_frame.reset_skin = CreateFrame ("Button", "DetailsResetWindowResetSkinButton", resetwarning_frame, "OptionsButtonTemplate")
|
|
resetwarning_frame.reset_skin:SetPoint ("right", resetwarning_frame.see_updates, "left", -5, 0)
|
|
resetwarning_frame.reset_skin:SetText ("Reset Skin")
|
|
resetwarning_frame.reset_skin:SetScript ("OnClick", function (self)
|
|
--do the reset
|
|
for index, instance in ipairs (_detalhes.tabela_instancias) do
|
|
if (not instance.iniciada) then
|
|
instance:RestauraJanela()
|
|
local skin = instance.skin
|
|
instance:ChangeSkin ("Default Skin")
|
|
instance:ChangeSkin ("Minimalistic")
|
|
instance:ChangeSkin (skin)
|
|
instance:DesativarInstancia()
|
|
else
|
|
local skin = instance.skin
|
|
instance:ChangeSkin ("Default Skin")
|
|
instance:ChangeSkin ("Minimalistic")
|
|
instance:ChangeSkin (skin)
|
|
end
|
|
end
|
|
end)
|
|
resetwarning_frame.reset_skin:SetWidth (130)
|
|
|
|
resetwarning_frame.open_options = CreateFrame ("Button", "DetailsResetWindowOpenOptionsButton", resetwarning_frame, "OptionsButtonTemplate")
|
|
resetwarning_frame.open_options:SetPoint ("right", resetwarning_frame.reset_skin, "left", -5, 0)
|
|
resetwarning_frame.open_options:SetText ("Options Panel")
|
|
resetwarning_frame.open_options:SetScript ("OnClick", function (self)
|
|
local lower_instance = _detalhes:GetLowerInstanceNumber()
|
|
if (not lower_instance) then
|
|
local instance = _detalhes:GetInstance (1)
|
|
_detalhes.CriarInstancia (_, _, 1)
|
|
_detalhes:OpenOptionsWindow (instance)
|
|
else
|
|
_detalhes:OpenOptionsWindow (_detalhes:GetInstance (lower_instance))
|
|
end
|
|
end)
|
|
resetwarning_frame.open_options:SetWidth (130)
|
|
|
|
function _detalhes:ResetWarningDialog()
|
|
DetailsResetConfigWarningDialog:Show()
|
|
DetailsBubble:SetOwner (resetwarning_frame.gnoma, "bottomright", "topleft", 30, -37, 1)
|
|
DetailsBubble:FlipHorizontal()
|
|
DetailsBubble:SetBubbleText ("", "", "WWHYYYYYYYYY!!!!", "", "")
|
|
DetailsBubble:TextConfig (14, nil, "deeppink")
|
|
DetailsBubble:ShowBubble()
|
|
|
|
|
|
end
|
|
_detalhes:ScheduleTimer ("ResetWarningDialog", 7)
|
|
|
|
end
|
|
end
|
|
|
|
--> interface menu
|
|
local f = CreateFrame ("frame", "DetailsInterfaceOptionsPanel", UIParent)
|
|
f.name = "Details"
|
|
f.logo = f:CreateTexture (nil, "overlay")
|
|
f.logo:SetPoint ("center", f, "center", 0, 0)
|
|
f.logo:SetPoint ("top", f, "top", 25, 56)
|
|
f.logo:SetTexture ([[Interface\AddOns\Details\images\logotipo]])
|
|
f.logo:SetSize (256, 128)
|
|
InterfaceOptions_AddCategory (f)
|
|
|
|
--> open options panel
|
|
f.options_button = CreateFrame ("button", nil, f, "OptionsButtonTemplate")
|
|
f.options_button:SetText (Loc ["STRING_INTERFACE_OPENOPTIONS"])
|
|
f.options_button:SetPoint ("topleft", f, "topleft", 10, -100)
|
|
f.options_button:SetWidth (170)
|
|
f.options_button:SetScript ("OnClick", function (self)
|
|
local lower_instance = _detalhes:GetLowerInstanceNumber()
|
|
_detalhes:OpenOptionsWindow (_detalhes:GetInstance (lower_instance))
|
|
end)
|
|
|
|
--> create new window
|
|
f.new_window_button = CreateFrame ("button", nil, f, "OptionsButtonTemplate")
|
|
f.new_window_button:SetText (Loc ["STRING_MINIMAPMENU_NEWWINDOW"])
|
|
f.new_window_button:SetPoint ("topleft", f, "topleft", 10, -125)
|
|
f.new_window_button:SetWidth (170)
|
|
f.new_window_button:SetScript ("OnClick", function (self)
|
|
_detalhes:CriarInstancia (_, true)
|
|
end)
|
|
|
|
--> MicroButtonAlertTemplate
|
|
self.MicroButtonAlert = CreateFrame ("frame", "DetailsMicroButtonAlert", UIParent, "MicroButtonAlertTemplate")
|
|
self.MicroButtonAlert:Hide()
|
|
|
|
local lower = _detalhes:GetLowerInstanceNumber()
|
|
if (lower) then
|
|
local instance = _detalhes:GetInstance (lower)
|
|
if (instance) then
|
|
|
|
--in development
|
|
local dev_icon = instance.bgdisplay:CreateTexture (nil, "overlay")
|
|
dev_icon:SetWidth (40)
|
|
dev_icon:SetHeight (40)
|
|
dev_icon:SetPoint ("bottomleft", instance.baseframe, "bottomleft", 4, 8)
|
|
dev_icon:SetTexture ([[Interface\DialogFrame\UI-Dialog-Icon-AlertOther]])
|
|
dev_icon:SetAlpha (.3)
|
|
|
|
local dev_text = instance.bgdisplay:CreateFontString (nil, "overlay", "GameFontHighlightSmall")
|
|
dev_text:SetHeight (64)
|
|
dev_text:SetPoint ("left", dev_icon, "right", 5, 0)
|
|
dev_text:SetTextColor (1, 1, 1)
|
|
dev_text:SetText ("Details is Under\nDevelopment")
|
|
dev_text:SetAlpha (.3)
|
|
|
|
--version
|
|
self.gump:Fade (instance._version, 0)
|
|
instance._version:SetText ("Details! Alpha " .. _detalhes.userversion .. " (core: " .. self.realversion .. ")")
|
|
instance._version:SetPoint ("bottomleft", instance.baseframe, "bottomleft", 5, 1)
|
|
|
|
if (instance.auto_switch_to_old) then
|
|
instance:SwitchBack()
|
|
end
|
|
|
|
function _detalhes:FadeStartVersion()
|
|
_detalhes.gump:Fade (dev_icon, "in", 2)
|
|
_detalhes.gump:Fade (dev_text, "in", 2)
|
|
self.gump:Fade (instance._version, "in", 2)
|
|
end
|
|
|
|
_detalhes:ScheduleTimer ("FadeStartVersion", 7)
|
|
|
|
end
|
|
end
|
|
|
|
--> minimap
|
|
local LDB = LibStub ("LibDataBroker-1.1", true)
|
|
local LDBIcon = LDB and LibStub ("LibDBIcon-1.0", true)
|
|
|
|
if LDB then
|
|
|
|
local databroker = LDB:NewDataObject ("Details!", {
|
|
type = "launcher",
|
|
icon = [[Interface\AddOns\Details\images\minimap]],
|
|
text = "0",
|
|
|
|
HotCornerIgnore = true,
|
|
|
|
OnClick = function (self, button)
|
|
|
|
if (button == "LeftButton") then
|
|
|
|
--> 1 = open options panel
|
|
if (_detalhes.minimap.onclick_what_todo == 1) then
|
|
local lower_instance = _detalhes:GetLowerInstanceNumber()
|
|
if (not lower_instance) then
|
|
local instance = _detalhes:GetInstance (1)
|
|
_detalhes.CriarInstancia (_, _, 1)
|
|
_detalhes:OpenOptionsWindow (instance)
|
|
else
|
|
_detalhes:OpenOptionsWindow (_detalhes:GetInstance (lower_instance))
|
|
end
|
|
|
|
--> 2 = reset data
|
|
elseif (_detalhes.minimap.onclick_what_todo == 2) then
|
|
_detalhes.tabela_historico:resetar()
|
|
|
|
--> 3 = unknown
|
|
elseif (_detalhes.minimap.onclick_what_todo == 3) then
|
|
|
|
end
|
|
|
|
elseif (button == "RightButton") then
|
|
|
|
GameTooltip:Hide()
|
|
local GameCooltip = GameCooltip
|
|
|
|
GameCooltip:Reset()
|
|
GameCooltip:SetType ("menu")
|
|
GameCooltip:SetOption ("ButtonsYMod", -5)
|
|
GameCooltip:SetOption ("HeighMod", 5)
|
|
GameCooltip:SetOption ("TextSize", 10)
|
|
|
|
--344 427 200 268 0.0009765625
|
|
--0.672851, 0.833007, 0.391601, 0.522460
|
|
|
|
GameCooltip:SetBannerImage (1, [[Interface\AddOns\Details\images\icons]], 83*.5, 68*.5, {"bottomleft", "topleft", 1, -4}, {0.672851, 0.833007, 0.391601, 0.522460}, nil)
|
|
GameCooltip:SetBannerImage (2, "Interface\\PetBattles\\Weather-Windy", 512*.35, 128*.3, {"bottomleft", "topleft", -25, -4}, {0, 1, 1, 0})
|
|
GameCooltip:SetBannerText (1, "Mini Map Menu", {"left", "right", 2, -5}, "white", 10)
|
|
|
|
--> reset
|
|
GameCooltip:AddMenu (1, _detalhes.tabela_historico.resetar, true, nil, nil, Loc ["STRING_MINIMAPMENU_RESET"], nil, true)
|
|
GameCooltip:AddIcon ([[Interface\COMMON\VOICECHAT-MUTED]], 1, 1, 14, 14)
|
|
|
|
GameCooltip:AddLine ("$div")
|
|
|
|
--> nova instancai
|
|
GameCooltip:AddMenu (1, _detalhes.CriarInstancia, true, nil, nil, Loc ["STRING_MINIMAPMENU_NEWWINDOW"], nil, true)
|
|
GameCooltip:AddIcon ([[Interface\ICONS\Spell_ChargePositive]], 1, 1, 14, 14, 0.0703125, 0.9453125, 0.0546875, 0.9453125)
|
|
|
|
--> reopen window 64: 0.0078125
|
|
local reopen = function()
|
|
for _, instance in ipairs (_detalhes.tabela_instancias) do
|
|
if (not instance:IsAtiva()) then
|
|
_detalhes:CriarInstancia (instance.meu_id)
|
|
return
|
|
end
|
|
end
|
|
end
|
|
GameCooltip:AddMenu (1, reopen, nil, nil, nil, Loc ["STRING_MINIMAPMENU_REOPEN"], nil, true)
|
|
GameCooltip:AddIcon ([[Interface\ICONS\Ability_Priest_VoidShift]], 1, 1, 14, 14, 0.0703125, 0.9453125, 0.0546875, 0.9453125)
|
|
|
|
GameCooltip:AddMenu (1, _detalhes.ReabrirTodasInstancias, true, nil, nil, Loc ["STRING_MINIMAPMENU_REOPENALL"], nil, true)
|
|
GameCooltip:AddIcon ([[Interface\ICONS\Ability_Priest_VoidShift]], 1, 1, 14, 14, 0.0703125, 0.9453125, 0.0546875, 0.9453125, "#ffb400")
|
|
|
|
GameCooltip:AddLine ("$div")
|
|
|
|
--> lock
|
|
GameCooltip:AddMenu (1, _detalhes.TravasInstancias, true, nil, nil, Loc ["STRING_MINIMAPMENU_LOCK"], nil, true)
|
|
GameCooltip:AddIcon ([[Interface\PetBattles\PetBattle-LockIcon]], 1, 1, 14, 14, 0.0703125, 0.9453125, 0.0546875, 0.9453125)
|
|
|
|
GameCooltip:AddMenu (1, _detalhes.DestravarInstancias, true, nil, nil, Loc ["STRING_MINIMAPMENU_UNLOCK"], nil, true)
|
|
GameCooltip:AddIcon ([[Interface\PetBattles\PetBattle-LockIcon]], 1, 1, 14, 14, 0.0703125, 0.9453125, 0.0546875, 0.9453125, "gray")
|
|
|
|
GameCooltip:SetOwner (self, "topright", "bottomleft")
|
|
GameCooltip:ShowCooltip()
|
|
|
|
|
|
end
|
|
end,
|
|
OnTooltipShow = function (tooltip)
|
|
tooltip:AddLine ("Details!", 1, 1, 1)
|
|
if (_detalhes.minimap.onclick_what_todo == 1) then
|
|
tooltip:AddLine (Loc ["STRING_MINIMAP_TOOLTIP1"])
|
|
elseif (_detalhes.minimap.onclick_what_todo == 2) then
|
|
tooltip:AddLine (Loc ["STRING_MINIMAP_TOOLTIP11"])
|
|
end
|
|
tooltip:AddLine (Loc ["STRING_MINIMAP_TOOLTIP2"])
|
|
end,
|
|
})
|
|
|
|
if (databroker and not LDBIcon:IsRegistered ("Details!")) then
|
|
LDBIcon:Register ("Details!", databroker, self.minimap)
|
|
end
|
|
|
|
_detalhes.databroker = databroker
|
|
|
|
end
|
|
|
|
--register lib-hotcorners
|
|
local on_click_on_hotcorner_button = function (frame, button)
|
|
if (_detalhes.hotcorner_topleft.onclick_what_todo == 1) then
|
|
local lower_instance = _detalhes:GetLowerInstanceNumber()
|
|
if (not lower_instance) then
|
|
local instance = _detalhes:GetInstance (1)
|
|
_detalhes.CriarInstancia (_, _, 1)
|
|
_detalhes:OpenOptionsWindow (instance)
|
|
else
|
|
_detalhes:OpenOptionsWindow (_detalhes:GetInstance (lower_instance))
|
|
end
|
|
|
|
elseif (_detalhes.hotcorner_topleft.onclick_what_todo == 2) then
|
|
_detalhes.tabela_historico:resetar()
|
|
end
|
|
end
|
|
|
|
local on_click_on_quickclick_button = function (frame, button)
|
|
|
|
if (_detalhes.hotcorner_topleft.quickclick_what_todo == 1) then
|
|
local lower_instance = _detalhes:GetLowerInstanceNumber()
|
|
if (not lower_instance) then
|
|
local instance = _detalhes:GetInstance (1)
|
|
_detalhes.CriarInstancia (_, _, 1)
|
|
_detalhes:OpenOptionsWindow (instance)
|
|
else
|
|
_detalhes:OpenOptionsWindow (_detalhes:GetInstance (lower_instance))
|
|
end
|
|
|
|
elseif (_detalhes.hotcorner_topleft.quickclick_what_todo == 2) then
|
|
_detalhes.tabela_historico:resetar()
|
|
end
|
|
end
|
|
|
|
local tooltip_hotcorner = function()
|
|
GameTooltip:AddLine ("Details!", 1, 1, 1, 1)
|
|
if (_detalhes.hotcorner_topleft.onclick_what_todo == 1) then
|
|
GameTooltip:AddLine ("|cFF00FF00Left Click:|r open options panel.", 1, 1, 1, 1)
|
|
|
|
elseif (_detalhes.hotcorner_topleft.onclick_what_todo == 2) then
|
|
GameTooltip:AddLine ("|cFF00FF00Left Click:|r clear all segments.", 1, 1, 1, 1)
|
|
|
|
end
|
|
end
|
|
|
|
_detalhes:RegisterHotCornerButton (
|
|
--> absolute name
|
|
"Details!",
|
|
--> corner
|
|
"TOPLEFT",
|
|
--> config table
|
|
self.hotcorner_topleft,
|
|
--> frame _G name
|
|
"DetailsLeftCornerButton",
|
|
--> icon
|
|
[[Interface\AddOns\Details\images\minimap]],
|
|
--> tooltip
|
|
tooltip_hotcorner,
|
|
--> click function
|
|
on_click_on_hotcorner_button,
|
|
--> menus
|
|
nil,
|
|
--> quick click
|
|
on_click_on_quickclick_button)
|
|
|
|
--> register time captures
|
|
--_detalhes:LoadUserTimeCaptures()
|
|
|
|
--[[
|
|
local f = CreateFrame ("frame", nil, UIParent)
|
|
f:SetSize (200, 200)
|
|
f:SetPoint ("center", UIParent, "center")
|
|
local t = f:CreateTexture (nil, "overlay")
|
|
t:SetPoint ("center", f, "center")
|
|
t:SetTexture (1, 1, 1, 1)
|
|
t:SetSize (100, 100)
|
|
|
|
f:SetAlpha (.1)
|
|
t:SetAlpha (1)
|
|
t:SetVertexColor (1, 1, 1, 1)
|
|
|
|
local b = CreateFrame ("button", "teste", f, "OptionsButtonTemplate")
|
|
b:SetSize (75, 30)
|
|
b:SetPoint ("left", f, "left")
|
|
b:SetAlpha (1)
|
|
--]]
|
|
|
|
local panel = self.gump:NewPanel (UIParent, nil, "DetailsWindowOptionsBarTextEditor", nil, 650, 200)
|
|
panel:SetPoint ("center", UIParent, "center")
|
|
panel:Hide()
|
|
panel:SetFrameStrata ("FULLSCREEN")
|
|
panel:SetBackdrop ({ bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 64, edgeFile="Interface\\Tooltips\\UI-Tooltip-Border", edgeSize=16, insets = {left=3, right=3, top=3, bottom=3}})
|
|
panel:DisableGradient()
|
|
panel:SetBackdropColor (0, 0, 0, 1)
|
|
|
|
function panel.widget:Open (text, callback, host)
|
|
if (host) then
|
|
panel:SetPoint ("center", host, "center")
|
|
end
|
|
|
|
text = text:gsub ("||", "|")
|
|
panel.default_text = text
|
|
panel.widget.editbox:SetText (text)
|
|
panel.callback = callback
|
|
panel:Show()
|
|
end
|
|
|
|
local textentry = self.gump:NewSpecialLuaEditorEntry (panel.widget, 450, 180, "editbox", "$parentEntry", true)
|
|
textentry:SetPoint ("topleft", panel.widget, "topleft", 10, -10)
|
|
|
|
local arg1_button = self.gump:NewButton (panel, nil, "$parentButton1", nil, 80, 20, function() textentry.editbox:Insert ("{data1}") end, nil, nil, nil, "{data1}")
|
|
local arg2_button = self.gump:NewButton (panel, nil, "$parentButton2", nil, 80, 20, function() textentry.editbox:Insert ("{data2}") end, nil, nil, nil, "{data2}")
|
|
local arg3_button = self.gump:NewButton (panel, nil, "$parentButton3", nil, 80, 20, function() textentry.editbox:Insert ("{data3}") end, nil, nil, nil, "{data3}")
|
|
arg1_button:SetPoint ("topright", panel, "topright", -10, -14)
|
|
arg2_button:SetPoint ("topright", panel, "topright", -10, -36)
|
|
arg3_button:SetPoint ("topright", panel, "topright", -10, -58)
|
|
arg1_button:InstallCustomTexture()
|
|
arg2_button:InstallCustomTexture()
|
|
arg3_button:InstallCustomTexture()
|
|
|
|
-- code author Saiket from http://www.wowinterface.com/forums/showpost.php?p=245759&postcount=6
|
|
--- @return StartPos, EndPos of highlight in this editbox.
|
|
local function GetTextHighlight ( self )
|
|
local Text, Cursor = self:GetText(), self:GetCursorPosition();
|
|
self:Insert( "" ); -- Delete selected text
|
|
local TextNew, CursorNew = self:GetText(), self:GetCursorPosition();
|
|
-- Restore previous text
|
|
self:SetText( Text );
|
|
self:SetCursorPosition( Cursor );
|
|
local Start, End = CursorNew, #Text - ( #TextNew - CursorNew );
|
|
self:HighlightText( Start, End );
|
|
return Start, End;
|
|
end
|
|
|
|
local StripColors;
|
|
do
|
|
local CursorPosition, CursorDelta;
|
|
--- Callback for gsub to remove unescaped codes.
|
|
local function StripCodeGsub ( Escapes, Code, End )
|
|
if ( #Escapes % 2 == 0 ) then -- Doesn't escape Code
|
|
if ( CursorPosition and CursorPosition >= End - 1 ) then
|
|
CursorDelta = CursorDelta - #Code;
|
|
end
|
|
return Escapes;
|
|
end
|
|
end
|
|
--- Removes a single escape sequence.
|
|
local function StripCode ( Pattern, Text, OldCursor )
|
|
CursorPosition, CursorDelta = OldCursor, 0;
|
|
return Text:gsub( Pattern, StripCodeGsub ), OldCursor and CursorPosition + CursorDelta;
|
|
end
|
|
--- Strips Text of all color escape sequences.
|
|
-- @param Cursor Optional cursor position to keep track of.
|
|
-- @return Stripped text, and the updated cursor position if Cursor was given.
|
|
function StripColors ( Text, Cursor )
|
|
Text, Cursor = StripCode( "(|*)(|c%x%x%x%x%x%x%x%x)()", Text, Cursor );
|
|
return StripCode( "(|*)(|r)()", Text, Cursor );
|
|
end
|
|
end
|
|
|
|
local COLOR_END = "|r";
|
|
--- Wraps this editbox's selected text with the given color.
|
|
local function ColorSelection ( self, ColorCode )
|
|
local Start, End = GetTextHighlight( self );
|
|
local Text, Cursor = self:GetText(), self:GetCursorPosition();
|
|
if ( Start == End ) then -- Nothing selected
|
|
--Start, End = Cursor, Cursor; -- Wrap around cursor
|
|
return; -- Wrapping the cursor in a color code and hitting backspace crashes the client!
|
|
end
|
|
-- Find active color code at the end of the selection
|
|
local ActiveColor;
|
|
if ( End < #Text ) then -- There is text to color after the selection
|
|
local ActiveEnd;
|
|
local CodeEnd, _, Escapes, Color = 0;
|
|
while ( true ) do
|
|
_, CodeEnd, Escapes, Color = Text:find( "(|*)(|c%x%x%x%x%x%x%x%x)", CodeEnd + 1 );
|
|
if ( not CodeEnd or CodeEnd > End ) then
|
|
break;
|
|
end
|
|
if ( #Escapes % 2 == 0 ) then -- Doesn't escape Code
|
|
ActiveColor, ActiveEnd = Color, CodeEnd;
|
|
end
|
|
end
|
|
|
|
if ( ActiveColor ) then
|
|
-- Check if color gets terminated before selection ends
|
|
CodeEnd = 0;
|
|
while ( true ) do
|
|
_, CodeEnd, Escapes = Text:find( "(|*)|r", CodeEnd + 1 );
|
|
if ( not CodeEnd or CodeEnd > End ) then
|
|
break;
|
|
end
|
|
if ( CodeEnd > ActiveEnd and #Escapes % 2 == 0 ) then -- Terminates ActiveColor
|
|
ActiveColor = nil;
|
|
break;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local Selection = Text:sub( Start + 1, End );
|
|
-- Remove color codes from the selection
|
|
local Replacement, CursorReplacement = StripColors( Selection, Cursor - Start );
|
|
|
|
self:SetText( ( "" ):join(
|
|
Text:sub( 1, Start ),
|
|
ColorCode, Replacement, COLOR_END,
|
|
ActiveColor or "", Text:sub( End + 1 )
|
|
) );
|
|
|
|
-- Restore cursor and highlight, adjusting for wrapper text
|
|
Cursor = Start + CursorReplacement;
|
|
if ( CursorReplacement > 0 ) then -- Cursor beyond start of color code
|
|
Cursor = Cursor + #ColorCode;
|
|
end
|
|
if ( CursorReplacement >= #Replacement ) then -- Cursor beyond end of color
|
|
Cursor = Cursor + #COLOR_END;
|
|
end
|
|
|
|
self:SetCursorPosition( Cursor );
|
|
-- Highlight selection and wrapper
|
|
self:HighlightText( Start, #ColorCode + ( #Replacement - #Selection ) + #COLOR_END + End );
|
|
end
|
|
|
|
local color_func = function (_, r, g, b, a)
|
|
local hex = _detalhes:hex (a*255).._detalhes:hex (r*255).._detalhes:hex (g*255).._detalhes:hex (b*255)
|
|
ColorSelection ( textentry.editbox, "|c" .. hex)
|
|
end
|
|
|
|
local func_button = self.gump:NewButton (panel, nil, "$parentButton4", nil, 80, 20, function() textentry.editbox:Insert ("{func local player = ...; return 0;}") end, nil, nil, nil, Loc ["STRING_OPTIONS_TEXTEDITOR_FUNC"])
|
|
local color_button = self.gump:NewColorPickButton (panel, "$parentButton5", nil, color_func)
|
|
color_button:SetSize (80, 20)
|
|
func_button:SetPoint ("topright", panel, "topright", -10, -80)
|
|
color_button:SetPoint ("topright", panel, "topright", -10, -102)
|
|
func_button:InstallCustomTexture()
|
|
|
|
color_button.tooltip = Loc ["STRING_OPTIONS_TEXTEDITOR_COLOR_TOOLTIP"]
|
|
func_button.tooltip = Loc ["STRING_OPTIONS_TEXTEDITOR_FUNC_TOOLTIP"]
|
|
|
|
--color_button:InstallCustomTexture()
|
|
|
|
local comma_button = self.gump:NewButton (panel, nil, "$parentButtonComma", nil, 80, 20, function() textentry.editbox:Insert ("_detalhes:comma_value ( )") end, nil, nil, nil, Loc ["STRING_OPTIONS_TEXTEDITOR_COMMA"])
|
|
local tok_button = self.gump:NewButton (panel, nil, "$parentButtonTok", nil, 80, 20, function() textentry.editbox:Insert ("_detalhes:ToK2 ( )") end, nil, nil, nil, Loc ["STRING_OPTIONS_TEXTEDITOR_TOK"])
|
|
comma_button:InstallCustomTexture()
|
|
tok_button:InstallCustomTexture()
|
|
comma_button.tooltip = Loc ["STRING_OPTIONS_TEXTEDITOR_COMMA_TOOLTIP"]
|
|
tok_button.tooltip = Loc ["STRING_OPTIONS_TEXTEDITOR_TOK_TOOLTIP"]
|
|
|
|
comma_button:SetPoint ("topright", panel, "topright", -100, -14)
|
|
tok_button:SetPoint ("topright", panel, "topright", -100, -36)
|
|
|
|
local done = function()
|
|
local text = panel.widget.editbox:GetText()
|
|
text = text:gsub ("\n", "")
|
|
|
|
local test = text
|
|
|
|
local function errorhandler(err)
|
|
return geterrorhandler()(err)
|
|
end
|
|
|
|
local code = [[local str = "STR"; str = str:ReplaceData (100, 50, 75, {nome = "you", total = 10, total_without_pet = 5, damage_taken = 7, last_dps = 1, friendlyfire_total = 6, totalover = 2, totalabsorb = 4, totalover_without_pet = 6, healing_taken = 1, heal_enemy_amt = 2});]]
|
|
code = code:gsub ("STR", test)
|
|
|
|
local f = loadstring (code)
|
|
local err, two = xpcall (f, errorhandler)
|
|
|
|
if (not err) then
|
|
return
|
|
end
|
|
|
|
panel.callback (text)
|
|
panel:Hide()
|
|
end
|
|
|
|
local ok_button = self.gump:NewButton (panel, nil, "$parentButtonOk", nil, 80, 20, done, nil, nil, nil, "DONE")
|
|
ok_button:InstallCustomTexture()
|
|
ok_button:SetPoint ("topright", panel, "topright", -10, -174)
|
|
|
|
local reset_button = self.gump:NewButton (panel, nil, "$parentDefaultOk", nil, 80, 20, function() textentry.editbox:SetText (_detalhes.instance_defaults.row_info.textR_custom_text) end, nil, nil, nil, "Default")
|
|
reset_button:InstallCustomTexture()
|
|
reset_button:SetPoint ("topright", panel, "topright", -100, -152)
|
|
|
|
local cancel_button = self.gump:NewButton (panel, nil, "$parentDefaultCancel", nil, 80, 20, function() textentry.editbox:SetText (panel.default_text); done(); end, nil, nil, nil, "Cancel")
|
|
cancel_button:InstallCustomTexture()
|
|
cancel_button:SetPoint ("topright", panel, "topright", -100, -174)
|
|
|
|
function _detalhes:OpenOptionsWindowAtStart()
|
|
--_detalhes:OpenOptionsWindow (_detalhes.tabela_instancias[1])
|
|
--print (_G ["DetailsClearSegmentsButton1"]:GetSize())
|
|
end
|
|
_detalhes:ScheduleTimer ("OpenOptionsWindowAtStart", 2)
|
|
|
|
end
|
|
|