From 85f0038398e15dd2e873284299aa9139f6022bd1 Mon Sep 17 00:00:00 2001 From: Tercio Date: Tue, 7 Jul 2015 21:30:53 -0300 Subject: [PATCH] - Added support for skin for Report Panel. - Report Panel can now be closed with right click. --- boot.lua | 12 +- classes/classe_instancia.lua | 9 +- core/control.lua | 3 +- functions/attributes.lua | 19 +- gumps/janela_info.lua | 2 + gumps/janela_principal.lua | 12 +- gumps/janela_report.lua | 571 ++++++++++++++++++++++++++++------ images/report_frame1.tga | Bin 60095 -> 0 bytes images/report_frame2.tga | Bin 11782 -> 0 bytes images/report_frame_icons.tga | Bin 16559 -> 16574 bytes 10 files changed, 509 insertions(+), 119 deletions(-) delete mode 100644 images/report_frame1.tga delete mode 100644 images/report_frame2.tga diff --git a/boot.lua b/boot.lua index 40042de6..8e586253 100644 --- a/boot.lua +++ b/boot.lua @@ -4,7 +4,7 @@ _ = nil _detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0") _detalhes.build_counter = 1209 --it's 1209 for release - _detalhes.userversion = "v3.16.0c" + _detalhes.userversion = "v3.17.0" _detalhes.realversion = 72 --core version _detalhes.version = _detalhes.userversion .. " (core " .. _detalhes.realversion .. ")" Details = _detalhes @@ -21,17 +21,13 @@ do local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" ) --[[ -|cFFFFFF00v3.16.0 (|cFFFFCC00Jul 03, 2015|r|cFFFFFF00)|r:\n\n -|cFFFFFF00-|r Fixed an issue with Encounter Details graphic for Archimonde encounter.\n\n -|cFFFFFF00-|r Numbers format on Player Detail Window now respect the format chosen on options panel.\n\n -|cFFFFFF00-|r Removed pet icons on Player Detail Window.\n\n -|cFFFFFF00-|r Fixed some wrong textures on spec icons.\n\n -|cFFFFFF00-|r Improvements on all skins for the Player Detail Window.\n\n +|cFFFFFF00v3.17.0 (|cFFFFCC00Jul 07, 2015|r|cFFFFFF00)|r:\n\n +|cFFFFFF00-|r Added skins for report panel, the skin follow the skin selected for Player Detail Window.\n\n --]] -- - Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v3.16.0c (|cFFFFCC00Jul 06, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed an issue with Encounter Details graphic for Archimonde encounter.\n\n|cFFFFFF00-|r Numbers format on Player Detail Window now respect the format chosen on options panel.\n\n|cFFFFFF00-|r Removed pet icons on Player Detail Window.\n\n|cFFFFFF00-|r Fixed some wrong textures on spec icons.\n\n|cFFFFFF00-|r Improvements on all skins for the Player Detail Window.\n\n|cFFFFFF00v3.15.8b (|cFFFFCC00Jul 01, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Soul Capacitor trinket fix.\n\n|cFFFFFF00-|r Fixed several small bugs from 6.2 patch.\n\n|cFFFFFF00-|r Disabled the special behavior for Tyrant Velhari encounter.\n\n|cFFFFFF00v3.15.7 (|cFFFFCC00Jun 23, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added support for Hellfire Citadel raid.\n\n|cFFFFFF00-|r Added support for custom CLEU parser functions.\n\n|cFFFFFF00-|r Tyrant Velhari encounter now has a custom CLEU parser function for healing where the heal absorbed by Aura of Contempt will count towards overheal and not healing done.\n\n|cFFFFFF00-|r Added support for embed on Chat Tabs.\n\n|cFFFFFF00-|r |cFFAAFFAAPS: We've made an addon for Shadow-Lord Iskar encounter called 'Iskar Assist' check it out|r.\n\n|cFFFFFF00v3.15.5a (|cFFFFCC00Jun 12, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed an issue where sometimes tooltips wasn't being shown.\n\n|cFFFFFF00-|r Fixed a problem with overall data where it was using, even on dungoens, the raid-only 30 delay rule.\n\n|cFFFFFF00-|r Fixed an issue with spec detection (now it may detect even faster).\n\n|cFFFFFF00v3.15.5 (|cFFFFCC00Jun 09, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed a problem with auto hide feature not hiding plugins hosted by the window.\n\n|cFFFFFF00-|r Fixed an issue with stretch feature when the anchor button was anchored at the bottom side of the window.\n\n|cFFFFFF00-|r Small interface tweaks on tooltips, bookmark and player detail window.\n\n|cFFFFFF00-|r Custom display 'My Spells' now also show amount of casts and uptime.\n\n|cFFFFFF00-|r Added an extra tooltip for the class icon at the player's bar.\n\n|cFFFFFF00-|r Activity time now has only 3 seconds inactivity tolerance on battlegrounds and arenas.\n\n|cFFFFFF00-|r Effective time will automatically be used when inside a battleground and using sync from the score board.\n\n|cFFFFFF00-|r Added 'hide all' option on the minimap menu.\n\n|cFFFFFF00-|r Added support for battlegrounds.\n\n|cFFFFFF00-|r Added option for disable showing battleground enemies when the window is in group mode.\n\n|cFFFFFF00-|r Added option to disable the sync from battleground score board.\n\n|cFFFFFF00-|r Enemies from a battleground match segment won't be erased when the player logout.\n\n|cFFFFFF00v3.14.4 (|cFFFFCC00May 27, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r TimeLine (plugin): now also shows marks symbolizing the player death.\n\n|cFFFFFF00-|r Added raid history panel. Open it through bookmark or /details history.\n\n|cFFFFFF00-|r Added support for skins for Player Detail Window.\n\n|cFFFFFF00-|r Added report history on report button.\n\n|cFFFFFF00-|r Added key bindings settings for report what is shown on window #1 or #2.\n\n|cFFFFFF00v3.14.0b (|cFFFFCC00May 13, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Several texture changes for a smaller download size.\n\n|cFFFFFF00v3.13.4a (|cFFFFCC00May 06, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Created 'Details! Forge' but is still under development: /details forge.\n\n|cFFFFFF00-|r Several improvements on combatlog reader and custom displays.\n\n|cFFFFFF00-|r Improvements on enemies damage taken tooltip.\n\n|cFFFFFF00v3.13.1 (|cFFFFCC00April 27, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added casted amount for healing and damage spells. The result is shown on Player Detail Window and Comparison Panel.\n\n|cFFFFFF00-|r Added uptime amount for healing spells on Player Detail Window.\n\n|cFFFFFF00-|r Added an option to disable lock/resize/ungroup buttons. It's under miscellaneous bracket on Options Panel.\n\n|cFFFFFF00-|r Wallpaper for menus on title bar got a customization option under tooltips bracket on Options Panel.\n\n|cFFFFFF00-|r Updated spell list for Crowd Control and class detection.\n\n|cFFFFFF00-|r Improved Weakaura creation tool under Encounter Details Plugin.\n\n|cFFFFFF00v3.12.10 (|cFFFFCC00April 18, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added the spell uptime on damage player detail window.\n\n|cFFFFFF00-|r Added Rune Tap as cooldown.\n\n|cFFFFFF00-|r Report lines for deaths is now inverted. No need to scroll up the chat to see the cause of death anymore.\n\n|cFFFFFF00-|r Fixed some annoyances with auto current feature where it was changing the segments even when the user were using the window.\n\n|cFFFFFF00v3.12.7 (|cFFFFCC00April 09, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added slash command /details profile .\n\n|cFFFFFF00v3.12.6 (|cFFFFCC00May 06, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Encounter Details (plugin): added a report button on Emotes tab.\n\n|cFFFFFF00-|r Encounter Details (plugin): improved Weakauras creation.\n\n|cFFFFFF00-|r Encounter Details (plugin): fixed the report text for interrupts and dispells.\n\n|cFFFFFF00-|r Crowd control by Pets now is merged with its owner.\n\n|cFFFFFF00-|r Truncated left text on bars now shows the entire text when hover over the bar.\n\n|cFFFFFF00-|r Added an extra option on minimap menu to disable the minimap icon.\n\n|cFFFFFF00-|r Fixed a problem when disabling the minimap icon through options panel.\n\n|cFFFFFF00-|r Fixed an issue with item level tracker feature.\n\n|cFFFFFF00v3.12.2 (|cFFFFCC00Mar 30, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Raid Check (plugin): added item level.\n\n|cFFFFFF00-|r Advanced Death Logs (plugin): bug fixes, it's important to update it.\n\n|cFFFFFF00-|r Time Line (plugin): bug fixes.\n\n|cFFFFFF00-|r Added option to disabled th eitem level tracker.\n\n|cFFFFFF00-|r Added item level on Raid Check plugin panel.\n\n|cFFFFFF00-|r Added Spirit Link Totem damage and healing on death log.\n\n|cFFFFFF00-|r Added the total of life exchanged by the Spirit Link Totem on player detail window.\n\n|cFFFFFF00-|r Added more spells for crowd control.\n\n|cFFFFFF00-|r Added scroll on bookmark panel.\n\n|cFFFFFF00-|r Fixed issue with Dps/Hps data broker which wasn't respecting the type of time (effective/activity) selected.\n\n|cFFFFFF00-|r Fixed few bugs when using the key bind to toggle windows." + Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v3.17.0 (|cFFFFCC00Jul 07, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added skins for report panel, the skin follow the skin selected for Player Detail Window.\n\n|cFFFFFF00v3.16.0c (|cFFFFCC00Jul 06, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed an issue with Encounter Details graphic for Archimonde encounter.\n\n|cFFFFFF00-|r Numbers format on Player Detail Window now respect the format chosen on options panel.\n\n|cFFFFFF00-|r Removed pet icons on Player Detail Window.\n\n|cFFFFFF00-|r Fixed some wrong textures on spec icons.\n\n|cFFFFFF00-|r Improvements on all skins for the Player Detail Window.\n\n|cFFFFFF00v3.15.8b (|cFFFFCC00Jul 01, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Soul Capacitor trinket fix.\n\n|cFFFFFF00-|r Fixed several small bugs from 6.2 patch.\n\n|cFFFFFF00-|r Disabled the special behavior for Tyrant Velhari encounter.\n\n|cFFFFFF00v3.15.7 (|cFFFFCC00Jun 23, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added support for Hellfire Citadel raid.\n\n|cFFFFFF00-|r Added support for custom CLEU parser functions.\n\n|cFFFFFF00-|r Tyrant Velhari encounter now has a custom CLEU parser function for healing where the heal absorbed by Aura of Contempt will count towards overheal and not healing done.\n\n|cFFFFFF00-|r Added support for embed on Chat Tabs.\n\n|cFFFFFF00-|r |cFFAAFFAAPS: We've made an addon for Shadow-Lord Iskar encounter called 'Iskar Assist' check it out|r.\n\n|cFFFFFF00v3.15.5a (|cFFFFCC00Jun 12, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed an issue where sometimes tooltips wasn't being shown.\n\n|cFFFFFF00-|r Fixed a problem with overall data where it was using, even on dungoens, the raid-only 30 delay rule.\n\n|cFFFFFF00-|r Fixed an issue with spec detection (now it may detect even faster).\n\n|cFFFFFF00v3.15.5 (|cFFFFCC00Jun 09, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Fixed a problem with auto hide feature not hiding plugins hosted by the window.\n\n|cFFFFFF00-|r Fixed an issue with stretch feature when the anchor button was anchored at the bottom side of the window.\n\n|cFFFFFF00-|r Small interface tweaks on tooltips, bookmark and player detail window.\n\n|cFFFFFF00-|r Custom display 'My Spells' now also show amount of casts and uptime.\n\n|cFFFFFF00-|r Added an extra tooltip for the class icon at the player's bar.\n\n|cFFFFFF00-|r Activity time now has only 3 seconds inactivity tolerance on battlegrounds and arenas.\n\n|cFFFFFF00-|r Effective time will automatically be used when inside a battleground and using sync from the score board.\n\n|cFFFFFF00-|r Added 'hide all' option on the minimap menu.\n\n|cFFFFFF00-|r Added support for battlegrounds.\n\n|cFFFFFF00-|r Added option for disable showing battleground enemies when the window is in group mode.\n\n|cFFFFFF00-|r Added option to disable the sync from battleground score board.\n\n|cFFFFFF00-|r Enemies from a battleground match segment won't be erased when the player logout.\n\n|cFFFFFF00v3.14.4 (|cFFFFCC00May 27, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r TimeLine (plugin): now also shows marks symbolizing the player death.\n\n|cFFFFFF00-|r Added raid history panel. Open it through bookmark or /details history.\n\n|cFFFFFF00-|r Added support for skins for Player Detail Window.\n\n|cFFFFFF00-|r Added report history on report button.\n\n|cFFFFFF00-|r Added key bindings settings for report what is shown on window #1 or #2.\n\n|cFFFFFF00v3.14.0b (|cFFFFCC00May 13, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Several texture changes for a smaller download size.\n\n|cFFFFFF00v3.13.4a (|cFFFFCC00May 06, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Created 'Details! Forge' but is still under development: /details forge.\n\n|cFFFFFF00-|r Several improvements on combatlog reader and custom displays.\n\n|cFFFFFF00-|r Improvements on enemies damage taken tooltip.\n\n|cFFFFFF00v3.13.1 (|cFFFFCC00April 27, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added casted amount for healing and damage spells. The result is shown on Player Detail Window and Comparison Panel.\n\n|cFFFFFF00-|r Added uptime amount for healing spells on Player Detail Window.\n\n|cFFFFFF00-|r Added an option to disable lock/resize/ungroup buttons. It's under miscellaneous bracket on Options Panel.\n\n|cFFFFFF00-|r Wallpaper for menus on title bar got a customization option under tooltips bracket on Options Panel.\n\n|cFFFFFF00-|r Updated spell list for Crowd Control and class detection.\n\n|cFFFFFF00-|r Improved Weakaura creation tool under Encounter Details Plugin.\n\n|cFFFFFF00v3.12.10 (|cFFFFCC00April 18, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added the spell uptime on damage player detail window.\n\n|cFFFFFF00-|r Added Rune Tap as cooldown.\n\n|cFFFFFF00-|r Report lines for deaths is now inverted. No need to scroll up the chat to see the cause of death anymore.\n\n|cFFFFFF00-|r Fixed some annoyances with auto current feature where it was changing the segments even when the user were using the window.\n\n|cFFFFFF00v3.12.7 (|cFFFFCC00April 09, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Added slash command /details profile .\n\n|cFFFFFF00v3.12.6 (|cFFFFCC00May 06, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Encounter Details (plugin): added a report button on Emotes tab.\n\n|cFFFFFF00-|r Encounter Details (plugin): improved Weakauras creation.\n\n|cFFFFFF00-|r Encounter Details (plugin): fixed the report text for interrupts and dispells.\n\n|cFFFFFF00-|r Crowd control by Pets now is merged with its owner.\n\n|cFFFFFF00-|r Truncated left text on bars now shows the entire text when hover over the bar.\n\n|cFFFFFF00-|r Added an extra option on minimap menu to disable the minimap icon.\n\n|cFFFFFF00-|r Fixed a problem when disabling the minimap icon through options panel.\n\n|cFFFFFF00-|r Fixed an issue with item level tracker feature.\n\n|cFFFFFF00v3.12.2 (|cFFFFCC00Mar 30, 2015|r|cFFFFFF00)|r:\n\n|cFFFFFF00-|r Raid Check (plugin): added item level.\n\n|cFFFFFF00-|r Advanced Death Logs (plugin): bug fixes, it's important to update it.\n\n|cFFFFFF00-|r Time Line (plugin): bug fixes.\n\n|cFFFFFF00-|r Added option to disabled th eitem level tracker.\n\n|cFFFFFF00-|r Added item level on Raid Check plugin panel.\n\n|cFFFFFF00-|r Added Spirit Link Totem damage and healing on death log.\n\n|cFFFFFF00-|r Added the total of life exchanged by the Spirit Link Totem on player detail window.\n\n|cFFFFFF00-|r Added more spells for crowd control.\n\n|cFFFFFF00-|r Added scroll on bookmark panel.\n\n|cFFFFFF00-|r Fixed issue with Dps/Hps data broker which wasn't respecting the type of time (effective/activity) selected.\n\n|cFFFFFF00-|r Fixed few bugs when using the key bind to toggle windows." Loc ["STRING_DETAILS1"] = "|cffffaeaeDetails!:|r " diff --git a/classes/classe_instancia.lua b/classes/classe_instancia.lua index 0449aa56..26065753 100644 --- a/classes/classe_instancia.lua +++ b/classes/classe_instancia.lua @@ -2779,7 +2779,12 @@ function _detalhes:monta_relatorio (este_relatorio, custom) tinsert (_detalhes.latest_report_table, 1, t) end else - tinsert (_detalhes.latest_report_table, 1, {self.meu_id, self.atributo, self.sub_atributo, amt, _detalhes.report_where}) + if (self.atributo == 5) then + local custom_name = self:GetCustomObject():GetName() + tinsert (_detalhes.latest_report_table, 1, {self.meu_id, self.atributo, self.sub_atributo, amt, _detalhes.report_where, custom_name}) + else + tinsert (_detalhes.latest_report_table, 1, {self.meu_id, self.atributo, self.sub_atributo, amt, _detalhes.report_where}) + end end tremove (_detalhes.latest_report_table, 11) end @@ -3224,6 +3229,8 @@ function _detalhes:envia_relatorio (linhas, custom) editbox:ClearFocus() end + _detalhes:DelayUpdateReportWindowRecentlyReported() + if (_detalhes.report_where == "COPY") then return _detalhes:SendReportTextWindow (linhas) end diff --git a/core/control.lua b/core/control.lua index eab2cbe6..bfde37e7 100644 --- a/core/control.lua +++ b/core/control.lua @@ -1067,7 +1067,7 @@ end function _detalhes:PostponeInstanceToCurrent (instance) - if ((instance.last_interaction+6 < _detalhes._tempo) and (not DetailsReportWindow or not DetailsReportWindow:IsShown())) then + if (not instance.last_interaction or ((instance.last_interaction+6 < _detalhes._tempo) and (not DetailsReportWindow or not DetailsReportWindow:IsShown()))) then if (instance.segmento == 0) then return _detalhes:TrocaSegmentoAtual (instance) end @@ -1077,7 +1077,6 @@ function _detalhes:TrocaSegmentoAtual (instancia) if (instancia.segmento == 0) then --> esta mostrando a tabela Atual - if ((instancia.last_interaction and (instancia.last_interaction+6 > _detalhes._tempo)) or (DetailsReportWindow and DetailsReportWindow:IsShown())) then --> postpone return _detalhes:ScheduleTimer ("PostponeInstanceToCurrent", 2, instancia) diff --git a/functions/attributes.lua b/functions/attributes.lua index 90eec933..50b8c8f2 100644 --- a/functions/attributes.lua +++ b/functions/attributes.lua @@ -233,13 +233,28 @@ do return _detalhes.atributos.lista [attribute] end - function _detalhes:GetSubAttributeName (attribute, subAttribute) + function _detalhes:GetSubAttributeName (attribute, subAttribute, customName) if (attribute == 5) then + local CustomObject = _detalhes.custom [subAttribute] + + if (CustomObject and customName and CustomObject.name == customName) then + return CustomObject.name + + elseif (CustomObject and customName and CustomObject.name ~= customName) then + for _, custom in ipairs (_detalhes.custom) do + if (custom.name == customName) then + return custom.name + end + end + return "--x--x--" + elseif (CustomObject and not customName) then + return CustomObject.name + end + if (not CustomObject) then return "--x--x--" end - return CustomObject.name end return _detalhes.sub_atributos [attribute].lista [subAttribute] end diff --git a/gumps/janela_info.lua b/gumps/janela_info.lua index 47bedb2d..048deea9 100644 --- a/gumps/janela_info.lua +++ b/gumps/janela_info.lua @@ -833,6 +833,8 @@ function _detalhes:ApplyPDWSkin (skin_name) if (info and info:IsShown() and info.jogador and info.jogador.classe) then info.SetClassIcon (info.jogador, info.jogador.classe) end + + _detalhes:ApplyRPSkin (skin_name) end function _detalhes:SetPlayerDetailsWindowTexture (texture) diff --git a/gumps/janela_principal.lua b/gumps/janela_principal.lua index 238ab615..15c2c2da 100644 --- a/gumps/janela_principal.lua +++ b/gumps/janela_principal.lua @@ -7477,7 +7477,11 @@ function gump:CriaCabecalho (baseframe, instancia) --> SELEÇÃO DO MODO ---------------------------------------------------------------------------------------------------------------------------------------------------- - baseframe.cabecalho.modo_selecao = gump:NewButton (baseframe, nil, "DetailsModeButton"..instancia.meu_id, nil, 16, 16, _detalhes.empty_function, nil, nil, [[Interface\AddOns\Details\images\modo_icone]]) + local open_options_panel = function() + _detalhes:OpenOptionsWindow (instancia) + end + + baseframe.cabecalho.modo_selecao = gump:NewButton (baseframe, nil, "DetailsModeButton"..instancia.meu_id, nil, 16, 16, open_options_panel, nil, nil, [[Interface\AddOns\Details\images\modo_icone]]) baseframe.cabecalho.modo_selecao:SetPoint ("bottomleft", baseframe.cabecalho.ball, "bottomright", instancia.menu_anchor [1], instancia.menu_anchor [2]) baseframe.cabecalho.modo_selecao:SetFrameLevel (baseframe:GetFrameLevel()+5) @@ -7762,13 +7766,15 @@ function gump:CriaCabecalho (baseframe, instancia) GameCooltip:SetOption ("ButtonsYMod", -7) GameCooltip:SetOption ("HeighMod", 8) + _detalhes:CheckLastReportsIntegrity() + local last_reports = _detalhes.latest_report_table if (#last_reports > 0) then for index = #last_reports, 1, -1 do local report = last_reports [index] - local instance_number, attribute, subattribute, amt, report_where = unpack (report) + local instance_number, attribute, subattribute, amt, report_where, custom_name = unpack (report) - local name = _detalhes:GetSubAttributeName (attribute, subattribute) + local name = _detalhes:GetSubAttributeName (attribute, subattribute, custom_name) local artwork = _detalhes.GetReportIconAndColor (report_where) diff --git a/gumps/janela_report.lua b/gumps/janela_report.lua index dfdde09e..2c215dde 100644 --- a/gumps/janela_report.lua +++ b/gumps/janela_report.lua @@ -18,8 +18,6 @@ local _IsInGuild = IsInGuild --> wow api locals local _GetChannelList = GetChannelList --> wow api locals local _UIParent = UIParent --> wow api locals -local _UISpecialFrames = UISpecialFrames --> wow api locals - --> details API functions ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- function _detalhes:FastReportWindow (window) @@ -280,6 +278,13 @@ local _UISpecialFrames = UISpecialFrames --> wow api locals if (botao == "LeftButton") then self:StartMoving() self.isMoving = true + elseif (botao == "RightButton") then + if (self.isMoving) then + self:StopMovingOrSizing() + savepos (self) + self.isMoving = false + end + self:Hide() end end) @@ -378,6 +383,7 @@ local function cria_drop_down (este_gump) local select_output = gump:NewDropDown (este_gump, _, "$parentOutputDropdown", "select", 185, 20, build_list, 1) select_output:SetPoint ("topleft", este_gump, "topleft", 107, -55) este_gump.select = select_output.widget + este_gump.dropdown = select_output function select_output:CheckValid() @@ -502,7 +508,7 @@ local function cria_drop_down (este_gump) editbox:SetHeight (14) editbox:SetWidth (120) - editbox:SetJustifyH ("LEFT") + editbox:SetJustifyH ("center") editbox:EnableMouse(true) editbox:SetBackdrop ({ bgFile = "Interface\\ChatFrame\\ChatFrameBackground", @@ -540,7 +546,7 @@ local function cria_drop_down (este_gump) editbox:SetScript ("OnEnter", function() editbox.mouse_over = true - editbox:SetBackdropColor(0.1, 0.1, 0.1, 0.7) + --editbox:SetBackdropColor(0.1, 0.1, 0.1, 0.7) if (editbox:GetText() == "" and not editbox.focus) then editbox:SetText (Loc ["STRING_REPORTFRAME_INSERTNAME"]) end @@ -548,7 +554,7 @@ local function cria_drop_down (este_gump) editbox:SetScript ("OnLeave", function() editbox.mouse_over = false - editbox:SetBackdropColor(0.0, 0.0, 0.0, 0.0) + --editbox:SetBackdropColor(0.0, 0.0, 0.0, 0.0) if (not editbox:HasFocus()) then if (editbox:GetText() == Loc ["STRING_REPORTFRAME_INSERTNAME"]) then editbox:SetText("") @@ -606,120 +612,479 @@ local function cria_drop_down (este_gump) --> frame creation function + + local elvui_skin = function() + + local window = DetailsReportWindow + + local b_onenter = function (self) + self:SetBackdropColor (0.4, 0.4, 0.4, 0.6) + self.icon:SetBlendMode ("ADD") + _detalhes:SetFontColor (self.text, "yellow") + end + local b_onleave = function (self) + self:SetBackdropColor (0, 0, 0, 0.3) + self.icon:SetBlendMode ("BLEND") + _detalhes:SetFontColor (self.text, "white") + end + + for i = 1, 9 do --window.max_last_buttons + local b = window.recently_report_buttons [i] + + b:SetSize (120, 16) + b:SetPoint ("topleft", window, "topleft", 10, -12 + (i*17*-1)) + b:Show() + b:SetBackdrop ({bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16, + insets = {left = 0, right = 0, top = 0, bottom = 0}}) + b:SetBackdropColor (0, 0, 0, 0.3) + b.text:SetTextColor (1, 1, 1, 1) + _detalhes:SetFontSize (b.text, 9) + + b:SetScript ("OnEnter", b_onenter) + b:SetScript ("OnLeave", b_onleave) + end + + window.fechar:SetWidth (20) + window.fechar:SetHeight (20) + window.fechar:SetPoint ("TOPRIGHT", window, "TOPRIGHT", 0, -3) + window.fechar:Show() + window.fechar:GetNormalTexture():SetDesaturated (true) + + local b = window.recently_report_buttons [10] + b:Hide() + + Details_Report_CB_1:Hide() + Details_Report_CB_2:Hide() + + window.dropdown:ClearAllPoints() + window.dropdown:SetWidth (155) + window.dropdown:SetPoint ("topleft", window, "topleft", 160, -30) + window.dropdown:SetBackdrop ({bgFile = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]], edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, tile=true, + tileSize = 64, insets = {left = 0, right = 0, top = 0, bottom = 0}}) + window.dropdown:SetBackdropBorderColor (0, 0, 0, 0.5) + window.dropdown:SetBackdropColor (0, 0, 0, 0.1) + + window.wisp_who:ClearAllPoints() + window.editbox:ClearAllPoints() + window.wisp_who:SetPoint ("topleft", window.dropdown.widget, "bottomleft", 0, -11) + window.editbox:SetPoint ("topleft", window.wisp_who, "bottomleft", 0, -3) + window.editbox:SetWidth (155) + window.editbox:SetHeight (20) + window.editbox:SetBackdrop ({bgFile = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]], edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, tile=true, + tileSize = 64, insets = {left = 0, right = 0, top = 0, bottom = 0}}) + window.editbox:SetBackdropBorderColor (0, 0, 0, 0.5) + window.editbox:SetBackdropColor (0, 0, 0, 0.3) + + window.linhas_amt:ClearAllPoints() + window.linhas_amt:SetPoint ("topleft", window.editbox, "bottomleft", 0, -11) + window.slider:ClearAllPoints() + window.slider:SetWidth (155) + window.slider:SetPoint ("topleft", window.linhas_amt, "bottomleft", 0, -3) + window.slider:SetBackdrop ({bgFile = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]], edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, tile=true, + tileSize = 64, insets = {left = 0, right = 0, top = 0, bottom = 0}}) + window.slider:SetBackdropBorderColor (0, 0, 0, 0.5) + window.slider:SetBackdropColor (0, 0, 0, 0.3) + + window.slider.thumb:SetTexture ([[Interface\AddOns\Details\images\icons2]]) + window.slider.thumb:SetTexCoord (482/512, 492/512, 104/512, 120/512) + window.slider.thumb:SetSize (16, 16) + window.slider.thumb:SetVertexColor (0.6, 0.6, 0.6, 0.95) + + window.enviar:ClearAllPoints() + window.enviar:SetPoint ("topleft", window.slider, "bottomleft", 0, -15) + window.enviar:SetBackdrop ({bgFile = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]], edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, tile=true, + tileSize = 64, insets = {left = 0, right = 0, top = 0, bottom = 0}}) + window.enviar:SetBackdropBorderColor (0, 0, 0, 0.5) + window.enviar:SetBackdropColor (0, 0, 0, 0.3) + window.enviar.Left:Hide() + window.enviar.Middle:Hide() + window.enviar.Right:Hide() + + window:SetWidth (342) + window:SetHeight (190) + window:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1}) + window:SetBackdropColor (1, 1, 1, 1) + window:SetBackdropBorderColor (0, 0, 0, 1) + + if (not window.elvui_widgets) then + window.elvui_widgets = {} + + local titlebar = CreateFrame ("frame", window:GetName() .. "ElvUITitleBar", window) + titlebar:SetPoint ("topleft", window, "topleft", 2, -3) + titlebar:SetPoint ("topright", window, "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) + + local bg1 = window:CreateTexture (nil, "background") + bg1:SetTexture ([[Interface\AddOns\Details\images\background]], true) + bg1:SetAlpha (0.7) + bg1:SetVertexColor (0.27, 0.27, 0.27) + bg1:SetVertTile (true) + bg1:SetHorizTile (true) + bg1:SetAllPoints() + + tinsert (window.all_widgets, bg1) + tinsert (window.elvui_widgets, bg1) + tinsert (window.all_widgets, titlebar) + tinsert (window.elvui_widgets, titlebar) + end + + window.title:ClearAllPoints() + window.title:SetPoint ("center", window, "center") + window.title:SetPoint ("top", window, "top", 0, -7) + window.title:SetParent (_G [window:GetName() .. "ElvUITitleBar"]) + window.title:SetTextColor (.8, .8, .8, 1) + window.title:Show() + + for _, widget in ipairs (window.elvui_widgets) do + widget:Show() + end + + end + + local classic_skin = function() + + local window = DetailsReportWindow + + local b_onenter = function (self) + self:SetBackdropColor (0.4, 0.4, 0.4, 0.6) + self.icon:SetBlendMode ("ADD") + _detalhes:SetFontColor (self.text, "yellow") + end + local b_onleave = function (self) + self:SetBackdropColor (0, 0, 0, 0.3) + self.icon:SetBlendMode ("BLEND") + _detalhes:SetFontColor (self.text, "white") + end + + for i = 1, 9 do --window.max_last_buttons + local b = window.recently_report_buttons [i] + + b:SetSize (120, 16) + b:SetPoint ("topleft", window, "topleft", 10, -50 + (i*17*-1)) + b:Show() + b:SetBackdrop ({bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16, + insets = {left = 0, right = 0, top = 0, bottom = 0}}) + b:SetBackdropColor (0, 0, 0, 0.3) + b.text:SetTextColor (1, 1, 1, 1) + _detalhes:SetFontSize (b.text, 9) + + b:SetScript ("OnEnter", b_onenter) + b:SetScript ("OnLeave", b_onleave) + end + + local b = window.recently_report_buttons [10] + b:Hide() + + Details_Report_CB_1:Hide() + Details_Report_CB_2:Hide() + + window.dropdown:ClearAllPoints() + window.dropdown:SetWidth (145) + window.dropdown:SetPoint ("topleft", window, "topleft", 160, -68) + + + window.wisp_who:ClearAllPoints() + window.editbox:ClearAllPoints() + window.wisp_who:SetPoint ("topleft", window.dropdown.widget, "bottomleft", 0, -11) + window.editbox:SetPoint ("topleft", window.wisp_who, "bottomleft", 0, -3) + window.editbox:SetWidth (145) + window.editbox:SetHeight (20) + window.editbox:SetBackdrop ({bgFile = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]], edgeFile = [[Interface\AddOns\Details\images\border_3]], tile=true, + edgeSize = 15, tileSize = 64, insets = {left = 3, right = 3, top = 4, bottom = 4}}) + + window.linhas_amt:ClearAllPoints() + window.linhas_amt:SetPoint ("topleft", window.editbox, "bottomleft", 0, -11) + window.slider:ClearAllPoints() + window.slider :SetWidth (145) + window.slider:SetPoint ("topleft", window.linhas_amt, "bottomleft", 0, -3) + window.slider:SetBackdrop ({bgFile = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]], edgeFile = [[Interface\AddOns\Details\images\border_3]], tile=true, + edgeSize = 15, tileSize = 64, insets = {left = 3, right = 3, top = 4, bottom = 4}}) + + window.slider.thumb:SetTexture ("Interface\\Buttons\\UI-ScrollBar-Knob") + window.slider.thumb:SetSize (30, 24) + window.slider.thumb:SetAlpha (0.7) + + window.enviar:ClearAllPoints() + window.enviar:SetPoint ("topleft", window.slider, "bottomleft", 0, -11) + window.enviar.Left:Show() + window.enviar.Middle:Show() + window.enviar.Right:Show() + + window:SetWidth (342) + window:SetHeight (255) + window:SetBackdrop (nil) + + window.fechar:Hide() + window.title:Hide() + + if (not window.classic_widgets) then + window.classic_widgets = {} + + local f = CreateFrame ("frame", window:GetName() .. "F", window, "ButtonFrameTemplate") + f:SetAllPoints() + + f.portrait:SetTexture ("Interface\\AddOns\\Details\\images\\report_frame_icons") + f.portrait:SetTexCoord (1/256, 64/256, 1/256, 64/256) + + f.TitleText:SetText (Loc ["STRING_REPORTFRAME_WINDOW_TITLE"]) + f:SetFrameLevel (window:GetFrameLevel()-1) + + _G [window:GetName() .. "FCloseButton"]:SetFrameLevel (window:GetFrameLevel()+1) + _G [window:GetName() .. "FCloseButton"]:SetScript ("OnClick", function() + window:Hide() + end) + + tinsert (window.classic_widgets, f) + tinsert (window.all_widgets, f) + end + + for _, widget in ipairs (window.classic_widgets) do + widget:Show() + end + + end + + + function _detalhes:UpdateRecentlyReported() + DetailsReportWindow:RefreshRecentlyReported() + end + function _detalhes:DelayUpdateReportWindowRecentlyReported() + if (DetailsReportWindow) then + _detalhes:ScheduleTimer ("UpdateRecentlyReported", 0.5) + end + end + + function _detalhes:CheckLastReportsIntegrity() + local last_reports = _detalhes.latest_report_table or {} + if (#last_reports > 0) then + local i = 1 + for index = #last_reports, 1, -1 do + local report = last_reports [index] + local instance_id, atributo, sub_atributo, amt, where, custom_name = unpack (report) + if (atributo == 5) then + if (not custom_name) then + tremove (last_reports, index) + else + local found + for _, custom in ipairs (_detalhes.custom) do + if (custom.name == custom_name) then + found = true + break + end + end + if (not found) then + tremove (last_reports, index) + end + end + end + end + end + end + function gump:CriaJanelaReport() - - local este_gump = _CreateFrame ("Frame", "DetailsReportWindow", _UIParent) - este_gump:SetPoint ("CENTER", UIParent, "CENTER") - este_gump:SetFrameStrata ("DIALOG") - - este_gump:SetScript ("OnShow", function (self) - local dropdown = este_gump.select.MyObject - local where = _detalhes.report_where + + --> window + local window = _CreateFrame ("Frame", "DetailsReportWindow", _UIParent) + tinsert (UISpecialFrames, "DetailsReportWindow") + window:SetPoint ("CENTER", UIParent, "CENTER") + window:SetFrameStrata ("DIALOG") + window.skins = {} + window.all_widgets = {} + window.max_last_buttons = 10 - local list = este_gump.dropdown_func() - local found + window:EnableMouse (true) + window:SetResizable (false) + window:SetMovable (true) + restorepos (window) + + _detalhes.janela_report = window + + _detalhes:InstallRPSkin ("WoWClassic", classic_skin) + _detalhes:InstallRPSkin ("ElvUI", elvui_skin) + + --> all new widgets: - for index, option in ipairs (list) do - if (option.value == where) then - dropdown:Select (where) - found = true - break + --recently reported: + window.recently_report_buttons = {} + + function window:RefreshRecentlyReported() + for i = 1, window.max_last_buttons do + local b = window.recently_report_buttons [i] + b.icon:SetTexture (nil) + b:Hide() + end + + _detalhes:CheckLastReportsIntegrity() + + local last_reports = _detalhes.latest_report_table + if (#last_reports > 0) then + local i = 1 + for index = 1, min (#last_reports, 10) do + local b = window.recently_report_buttons [i] + local report = last_reports [index] + local instance_number, attribute, subattribute, amt, report_where = unpack (report) + local name = _detalhes:GetSubAttributeName (attribute, subattribute) + local artwork = _detalhes.GetReportIconAndColor (report_where) + + b.text:SetText (name .. " (#" .. amt .. ")") + b.index = index + if (artwork) then + b.icon:SetTexture (artwork.icon) + b.icon:SetTexCoord (artwork.coords[1], artwork.coords[2], artwork.coords[3], artwork.coords[4]) + b.icon:SetVertexColor (unpack (artwork.color or {})) + end + + b:Show() + i = i + 1 + end end end - if (not found) then - if (_IsInRaid()) then - dropdown:Select ("RAID") - _detalhes.report_where = "RAID" - - elseif (GetNumSubgroupMembers() > 0) then - dropdown:Select ("PARTY") - _detalhes.report_where = "PARTY" - - elseif (_IsInGuild()) then - dropdown:Select ("GUILD") - _detalhes.report_where = "GUILD" - - else - dropdown:Select ("SAY") - _detalhes.report_where = "SAY" + local recently_on_click = function (self) + if (self.index) then + return _detalhes.ReportFromLatest (_, _, self.index) + end + end + + for i = 1, window.max_last_buttons do + local b = CreateFrame ("button", "DetailsReportWindowRRB" .. i, window) + local icon = b:CreateTexture (nil, "overlay") + icon:SetPoint ("left", b, "left") + icon:SetSize (16, 16) + local text = b:CreateFontString (nil, "overlay", "GameFontNormal") + text:SetPoint ("left", icon, "right", 2, 0) + b.icon = icon + b.text = text + b:SetScript ("OnClick", recently_on_click) + tinsert (window.recently_report_buttons, b) + end + + --> scritps + window:SetScript ("OnShow", function (self) + local dropdown = window.select.MyObject + local where = _detalhes.report_where + + local list = window.dropdown_func() + local found + + for index, option in ipairs (list) do + if (option.value == where) then + dropdown:Select (where) + found = true + break + end end - end - - end) - - _tinsert (_UISpecialFrames, este_gump:GetName()) - - este_gump:SetScript ("OnHide", function (self) - _detalhes.janela_report.ativa = false - _detalhes.last_report_id = nil - - if (_detalhes.delay_CheckSwitchToCurrent) then - _detalhes.delay_CheckSwitchToCurrent = nil - _detalhes:CheckSwitchToCurrent() - end - end) - - este_gump:SetWidth (320) - este_gump:SetHeight (128) - este_gump:EnableMouse (true) - este_gump:SetResizable (false) - este_gump:SetMovable (true) - restorepos (este_gump) - - _detalhes.janela_report = este_gump - - --> icone - este_gump.icone = este_gump:CreateTexture (nil, "BACKGROUND") - este_gump.icone:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 40, -10) - este_gump.icone:SetTexture ("Interface\\AddOns\\Details\\images\\report_frame_icons") --> top left - este_gump.icone:SetWidth (64) - este_gump.icone:SetHeight (64) - este_gump.icone:SetTexCoord (1/256, 64/256, 1/256, 64/256) --left right top bottom - - --> cria as 2 partes do fundo da janela - este_gump.bg1 = este_gump:CreateTexture (nil, "BORDER") - este_gump.bg1:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 0, 0) - este_gump.bg1:SetTexture ("Interface\\AddOns\\Details\\images\\report_frame1") --> top left - - este_gump.bg2 = este_gump:CreateTexture (nil, "BORDER") - este_gump.bg2:SetPoint ("TOPRIGHT", este_gump, "TOPRIGHT", 0, 0) - este_gump.bg2:SetTexture ("Interface\\AddOns\\Details\\images\\report_frame2") --> top right + + if (not found) then + if (_IsInRaid()) then + dropdown:Select ("RAID") + _detalhes.report_where = "RAID" + + elseif (GetNumSubgroupMembers() > 0) then + dropdown:Select ("PARTY") + _detalhes.report_where = "PARTY" + + elseif (_IsInGuild()) then + dropdown:Select ("GUILD") + _detalhes.report_where = "GUILD" + + else + dropdown:Select ("SAY") + _detalhes.report_where = "SAY" + end + end + + window:RefreshRecentlyReported() + + end) + window:SetScript ("OnHide", function (self) + _detalhes.janela_report.ativa = false + _detalhes.last_report_id = nil + + if (_detalhes.delay_CheckSwitchToCurrent) then + _detalhes.delay_CheckSwitchToCurrent = nil + _detalhes:CheckSwitchToCurrent() + end + end) + --> botão de fechar - este_gump.fechar = CreateFrame ("Button", nil, este_gump, "UIPanelCloseButton") - este_gump.fechar:SetWidth (32) - este_gump.fechar:SetHeight (32) - este_gump.fechar:SetPoint ("TOPRIGHT", este_gump, "TOPRIGHT", -20, -23) - este_gump.fechar:SetText ("X") - este_gump.fechar:SetScript ("OnClick", function() - gump:Fade (este_gump, 1) + window.fechar = CreateFrame ("Button", nil, window, "UIPanelCloseButton") + window.fechar:SetScript ("OnClick", function() + gump:Fade (window, 1) _detalhes.janela_report.ativa = false end) - este_gump.titulo = este_gump:CreateFontString (nil, "OVERLAY", "GameFontHighlightLeft") - este_gump.titulo:SetText (Loc ["STRING_REPORTFRAME_WINDOW_TITLE"]) - este_gump.titulo:SetTextColor (0.999, 0.819, 0, 1) - este_gump.titulo:SetPoint ("topleft", este_gump, "topleft", 120, -33) + --> title + window.title = window:CreateFontString (nil, "OVERLAY", "GameFontHighlightLeft") + window.title:SetText (Loc ["STRING_REPORTFRAME_WINDOW_TITLE"]) - seta_scripts (este_gump) + seta_scripts (window) + cria_drop_down (window) + cria_slider (window) + cria_wisper_field (window) + cria_check_buttons (window) - cria_drop_down (este_gump) - cria_slider (este_gump) - cria_wisper_field (este_gump) - cria_check_buttons (este_gump) + window.enviar = _CreateFrame ("Button", nil, window, "OptionsButtonTemplate") + window.enviar:SetPoint ("topleft", window.editbox, "topleft", 61, -19) + window.enviar:SetWidth (60) + window.enviar:SetHeight (15) + window.enviar:SetText (Loc ["STRING_REPORTFRAME_SEND"]) - este_gump.enviar = _CreateFrame ("Button", nil, este_gump, "OptionsButtonTemplate") + gump:Fade (window, 1) + gump:CreateFlashAnimation (window) - este_gump.enviar:SetPoint ("topleft", este_gump.editbox, "topleft", 61, -19) + --apply the current skin + _detalhes:ApplyRPSkin() - este_gump.enviar:SetWidth (60) - este_gump.enviar:SetHeight (15) - este_gump.enviar:SetText (Loc ["STRING_REPORTFRAME_SEND"]) - - gump:Fade (este_gump, 1) - gump:CreateFlashAnimation (este_gump) + return window - return este_gump + end + + function _detalhes:InstallRPSkin (skin_name, func) + if (not DetailsReportWindow) then + gump:CriaJanelaReport() + DetailsReportWindow:Hide() + end + + if (not skin_name) then + return false -- sem nome + elseif (DetailsReportWindow.skins [skin_name]) then + return false -- ja existe + end - end \ No newline at end of file + DetailsReportWindow.skins [skin_name] = func + return true + end + + function _detalhes:ApplyRPSkin (skin_name) + + if (not DetailsReportWindow) then + gump:CriaJanelaReport() + DetailsReportWindow:Hide() + end + + if (not skin_name) then + skin_name = _detalhes.player_details_window.skin + if (not DetailsReportWindow.skins [skin_name]) then + skin_name = "ElvUI" + end + end + + local skin = DetailsReportWindow.skins [skin_name] + if (skin) then + + for _, widget in ipairs (DetailsReportWindow.all_widgets) do + widget:Hide() + end + + local successful, errortext = pcall (skin) + if (not successful) then + _detalhes:Msg ("error occurred on report window skin call():", errortext) + pcall (DetailsReportWindow.skins["ElvUI"]) + end + end + end \ No newline at end of file diff --git a/images/report_frame1.tga b/images/report_frame1.tga deleted file mode 100644 index e675d8fb4c1b9f15dab6631f112582f80c136144..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60095 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 literal 16559 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