From 5c621d6c201d0c31cea2520fda18ca04f0a09257 Mon Sep 17 00:00:00 2001 From: tercio Date: Wed, 16 Apr 2014 22:17:50 -0300 Subject: [PATCH] updates --- boot.lua | 3 +- classes/classe_damage.lua | 13 +- classes/classe_heal.lua | 36 +- classes/classe_instancia.lua | 34 +- classes/classe_instancia_include.lua | 20 +- core/control.lua | 4 +- core/meta.lua | 2 + core/parser.lua | 7 +- core/plugins.lua | 3 + core/plugins_statusbar.lua | 3 +- core/plugins_toolbar.lua | 19 +- core/windows.lua | 221 ++++- framework/button.lua | 5 + framework/cooltip.lua | 112 ++- framework/dropdown.lua | 40 +- framework/pictureedit.lua | 111 +-- framework/slider.lua | 154 ++-- framework/textentry.lua | 7 +- functions/boss.lua | 6 +- functions/savedata.lua | 16 +- functions/skins.lua | 25 +- functions/slash.lua | 36 + functions/spells.lua | 9 +- gumps/janela_info.lua | 158 +++- gumps/janela_options.lua | 1269 ++++++++++++++++++++------ gumps/janela_principal.lua | 668 ++++++++++++-- gumps/janela_welcome.lua | 13 +- gumps/switch.lua | 9 +- images/icons.tga | Bin 518419 -> 519380 bytes images/icons2.tga | Bin 119719 -> 187248 bytes images/options_window.tga | Bin 1291945 -> 1387831 bytes images/skins/elvui.tga | Bin 126930 -> 126930 bytes locales/Details-enUS.lua | 64 +- locales/Details-ptBR.lua | 2 +- startup.lua | 193 +--- 35 files changed, 2473 insertions(+), 789 deletions(-) diff --git a/boot.lua b/boot.lua index 51578ae7..a8b9c6fe 100644 --- a/boot.lua +++ b/boot.lua @@ -8,7 +8,7 @@ _ = nil _detalhes = LibStub("AceAddon-3.0"):NewAddon("_detalhes", "AceTimer-3.0", "AceComm-3.0", "AceSerializer-3.0", "NickTag-1.0") - _detalhes.userversion = "v1.12.00" + _detalhes.userversion = "v1.12.3" _detalhes.version = "Alpha 016" _detalhes.realversion = 16 @@ -204,6 +204,7 @@ do SharedMedia:Register ("statusbar", "Details D'ictum", [[Interface\AddOns\Details\images\bar4]]) SharedMedia:Register ("statusbar", "Details D'ictum (reverse)", [[Interface\AddOns\Details\images\bar4_reverse]]) SharedMedia:Register ("statusbar", "Details Serenity", [[Interface\AddOns\Details\images\bar_serenity]]) + SharedMedia:Register ("background", "Details Ground", [[Interface\AddOns\Details\images\background]]) --> global 'vardump' for dump table contents over chat panel function vardump (t) diff --git a/classes/classe_damage.lua b/classes/classe_damage.lua index fde0c864..fbeaef3c 100644 --- a/classes/classe_damage.lua +++ b/classes/classe_damage.lua @@ -796,7 +796,7 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex conteudo = _detalhes.cache_damage_group - if (sub_atributo == 2) then + if (sub_atributo == 2) then --> dps local combat_time = instancia.showing:GetCombatTime() atributo_damage:ContainerRefreshDps (conteudo, combat_time) end @@ -818,7 +818,7 @@ function atributo_damage:RefreshWindow (instancia, tabela_do_combate, forcar, ex total = total + conteudo[i][keyName] end else - if (sub_atributo == 2) then + if (sub_atributo == 2) then --> dps local combat_time = instancia.showing:GetCombatTime() atributo_damage:ContainerRefreshDps (conteudo, combat_time) end @@ -1137,11 +1137,11 @@ function atributo_damage:AtualizaBarra (instancia, barras_container, qual_barra, elseif (sub_atributo == 2) then --> mostrando dps dps = _math_floor (dps) if (_detalhes.ps_abbreviation == 2) then - esta_barra.texto_direita:SetText (_detalhes:ToK (dps) .. " " .. div_abre .. _detalhes:ToK (damage_total) .. ", " .. _cstr ("%.1f", porcentagem) .. "%" .. div_fecha) --seta o texto da direita - elseif (_detalhes.ps_abbreviation == 3) then esta_barra.texto_direita:SetText (_detalhes:ToK2 (dps) .. " " .. div_abre .. _detalhes:ToK (damage_total) .. ", " .. _cstr ("%.1f", porcentagem) .. "%" .. div_fecha) --seta o texto da direita + elseif (_detalhes.ps_abbreviation == 3) then + esta_barra.texto_direita:SetText (_detalhes:ToK2 (dps) .. " " .. div_abre .. _detalhes:ToK2 (damage_total) .. ", " .. _cstr ("%.1f", porcentagem) .. "%" .. div_fecha) --seta o texto da direita else - esta_barra.texto_direita:SetText (_cstr ("%.1f", dps) .. " " .. div_abre .. _detalhes:ToK (damage_total) .. ", " .. _cstr ("%.1f", porcentagem) .. "%" .. div_fecha) --seta o texto da direita + esta_barra.texto_direita:SetText (_detalhes:ToK2 (dps) .. " " .. div_abre .. damage_total .. ", " .. _cstr ("%.1f", porcentagem) .. "%" .. div_fecha) --seta o texto da direita end esta_porcentagem = _math_floor ((dps/instancia.top) * 100) --> determina qual o tamanho da barra @@ -1387,6 +1387,7 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra) do --> TOP HABILIDADES local ActorDamage = self.total_without_pet + local ActorDamageWithPet = self.total if (ActorDamage == 0) then ActorDamage = 0.00000001 end @@ -1452,7 +1453,7 @@ function atributo_damage:ToolTip_DamageDone (instancia, numero, barra) for i = 1, _math_min (_detalhes.tooltip_max_targets, #ActorTargetsSortTable) do local este_inimigo = ActorTargetsSortTable [i] - GameCooltip:AddLine (este_inimigo[1]..": ", _detalhes:comma_value (este_inimigo[2]) .." (".._cstr("%.1f", este_inimigo[2]/ActorDamage*100).."%)") + GameCooltip:AddLine (este_inimigo[1]..": ", _detalhes:comma_value (este_inimigo[2]) .." (".._cstr("%.1f", este_inimigo[2]/ActorDamageWithPet*100).."%)") GameCooltip:AddIcon ("Interface\\AddOns\\Details\\images\\espadas", nil, nil, 14, 14) GameCooltip:AddStatusBar (100, 1, .1, .1, .1, .2) end diff --git a/classes/classe_heal.lua b/classes/classe_heal.lua index b3e542b8..e0463709 100644 --- a/classes/classe_heal.lua +++ b/classes/classe_heal.lua @@ -152,6 +152,24 @@ function _detalhes:ContainerSortHeal (container, amount, keyName2) end end +function atributo_heal:ContainerRefreshHps (container, combat_time) + + if (_detalhes.time_type == 2 or not _detalhes:CaptureGet ("heal")) then + for _, actor in _ipairs (container) do + if (actor.grupo) then + actor.last_hps = actor.total / combat_time + else + actor.last_hps = actor.total / actor:Tempo() + end + end + else + for _, actor in _ipairs (container) do + actor.last_hps = actor.total / actor:Tempo() + end + end + +end + function atributo_heal:ReportSingleDamagePreventedLine (actor, instancia) local barra = instancia.barras [actor.minha_barra] @@ -256,6 +274,11 @@ function atributo_heal:RefreshWindow (instancia, tabela_do_combate, forcar, expo conteudo = _detalhes.cache_healing_group + if (sub_atributo == 2) then --> hps + local combat_time = instancia.showing:GetCombatTime() + atributo_heal:ContainerRefreshHps (conteudo, combat_time) + end + if (#conteudo < 1) then return _detalhes:EsconderBarrasNaoUsadas (instancia, showing) end @@ -268,11 +291,16 @@ function atributo_heal:RefreshWindow (instancia, tabela_do_combate, forcar, expo instancia.top = conteudo[1][keyName] amount = #conteudo end - + for i = 1, amount do total = total + conteudo[i][keyName] end + else + if (sub_atributo == 2) then --> hps + local combat_time = instancia.showing:GetCombatTime() + atributo_heal:ContainerRefreshHps (conteudo, combat_time) + end --_table_sort (conteudo, _detalhes.SortKeyGroup) _detalhes.SortGroupHeal (conteudo, keyName) end @@ -538,11 +566,11 @@ function atributo_heal:AtualizaBarra (instancia, barras_container, qual_barra, l hps = _math_floor (hps) if (_detalhes.ps_abbreviation == 2) then - esta_barra.texto_direita:SetText (_detalhes:ToK (hps) .." ".. div_abre .. _detalhes:ToK (healing_total) .. ", ".._cstr("%.1f", porcentagem).."%" .. div_fecha) --seta o texto da direita - elseif (_detalhes.ps_abbreviation == 2) then esta_barra.texto_direita:SetText (_detalhes:ToK2 (hps) .." ".. div_abre .. _detalhes:ToK (healing_total) .. ", ".._cstr("%.1f", porcentagem).."%" .. div_fecha) --seta o texto da direita + elseif (_detalhes.ps_abbreviation == 3) then + esta_barra.texto_direita:SetText (_detalhes:ToK2 (hps) .." ".. div_abre .. _detalhes:ToK2 (healing_total) .. ", ".._cstr("%.1f", porcentagem).."%" .. div_fecha) --seta o texto da direita else - esta_barra.texto_direita:SetText (_cstr("%.1f", hps) .." ".. div_abre .. _detalhes:ToK (healing_total) .. ", ".._cstr("%.1f", porcentagem).."%" .. div_fecha) --seta o texto da direita + esta_barra.texto_direita:SetText (_detalhes:ToK2 (hps) .." ".. div_abre .. healing_total .. ", ".._cstr("%.1f", porcentagem).."%" .. div_fecha) --seta o texto da direita end esta_porcentagem = _math_floor ((hps/instancia.top) * 100) --> determina qual o tamanho da barra diff --git a/classes/classe_instancia.lua b/classes/classe_instancia.lua index ce667515..e4fe5f43 100644 --- a/classes/classe_instancia.lua +++ b/classes/classe_instancia.lua @@ -95,6 +95,18 @@ function _detalhes:GetLowerInstanceNumber() end end +function _detalhes:IsLowerInstance() + local lower = _detalhes:GetLowerInstanceNumber() + if (lower) then + return lower == self.meu_id + end + return false +end + +function _detalhes:IsInteracting() + return self.is_interacting +end + function _detalhes:GetMode() return self.modo end @@ -296,6 +308,8 @@ end gump:Fade (self.baseframe.cabecalho.ball, 0) gump:Fade (self.baseframe, 0) + self:SetMenuAlpha() + self.baseframe.cabecalho.fechar:Enable() self:ChangeIcon() @@ -720,6 +734,18 @@ end --> setup all config new_instance:ResetInstanceConfig() + --> setup default wallpaper + local spec = GetSpecialization() + if (spec) then + local id, name, description, icon, _background, role = GetSpecializationInfo (spec) + if (_background) then + local bg = "Interface\\TALENTFRAME\\" .. _background + if (new_instance.wallpaper) then + new_instance.wallpaper.texture = bg + new_instance.wallpaper.texcoord = {0, 1, 0, 0.703125} + end + end + end --> internal stuff new_instance.barras = {} --container que irá armazenar todas as barras @@ -791,6 +817,7 @@ end --> internal stuff new_instance.row_height = new_instance.row_info.height + new_instance.row_info.space.between + new_instance.oldwith = new_instance.baseframe:GetWidth() new_instance.iniciada = true new_instance:SaveMainWindowPosition() new_instance:ReajustaGump() @@ -943,6 +970,7 @@ function _detalhes:RestauraJanela (index, temp) end --> internal stuff + self.oldwith = self.baseframe:GetWidth() self:RestoreMainWindowPosition() self:ReajustaGump() self:SaveMainWindowPosition() @@ -967,7 +995,7 @@ function _detalhes:ExportSkin() } for key, value in pairs (self) do - if (_detalhes.instance_defaults [key]) then + if (_detalhes.instance_defaults [key] ~= nil) then if (type (value) == "table") then exported [key] = table_deepcopy (value) else @@ -1051,8 +1079,8 @@ function _detalhes:SetBackgroundAlpha (alpha) -- alpha = _detalhes:Scale (0, 1, 0.2, 1, alpha) - 0.8 end - self.bgdisplay:SetBackdropColor (self.bg_r or _detalhes.default_bg_color, self.bg_g or _detalhes.default_bg_color, self.bg_b or _detalhes.default_bg_color, alpha) - self.baseframe:SetBackdropColor (self.bg_r or _detalhes.default_bg_color, self.bg_g or _detalhes.default_bg_color, self.bg_b or _detalhes.default_bg_color, alpha) + self.bgdisplay:SetBackdropColor (self.bg_r, self.bg_g, self.bg_b, alpha) + self.baseframe:SetBackdropColor (self.bg_r, self.bg_g, self.bg_b, alpha) self.bg_alpha = alpha end diff --git a/classes/classe_instancia_include.lua b/classes/classe_instancia_include.lua index 8af001e2..a3258193 100644 --- a/classes/classe_instancia_include.lua +++ b/classes/classe_instancia_include.lua @@ -35,17 +35,19 @@ _detalhes.instance_defaults = { --skin skin = "Default Skin", - --baseframe backdrop color + --baseframe backdrop bg_alpha = 0.7, bg_r = 0.0941, bg_g = 0.0941, bg_b = 0.0941, + backdrop_texture = "Details Ground", --auto current auto_current = true, --show sidebars show_sidebars = true, --show bottom statusbar show_statusbar = true, + statusbar_info = {alpha = 1, overlay = {1, 1, 1}}, --blackwhiite icons desaturated_menu = false, --hide main window attribute icon @@ -66,13 +68,20 @@ _detalhes.instance_defaults = { instancebutton_info = {text_color = {1, 0.82, 0, 1}, text_face = "Friz Quadrata TT", text_size = 12, color_overlay = {1, 1, 1, 1}}, --close button info closebutton_info = {color_overlay = {1, 1, 1, 1}}, - --menu anchor store the anchor point of main menu - menu_anchor = {5, 1}, + --menus: + --anchor store the anchor point of main menu + menu_anchor = {5, 1, side = 1}, + --auto hide window borders + menu_alpha = {enabled = false, iconstoo = true, onenter = 1, onleave = 1}, + --auto hide menu + auto_hide_menu = {left = false, right = false}, + --attribute text + attribute_text = {enabled = false, anchor = {5, 1}, text_face = "Friz Quadrata TT", text_size = 12, text_color = {1, 1, 1, 1}, side = 1}, --instance button anchor store the anchor point of instance and delete button instance_button_anchor = {-27, 1}, --total bar total_bar = {enabled = false, color = {1, 1, 1}, only_in_group = true, icon = [[Interface\ICONS\INV_Sigil_Thorim]]}, - + --row info row_info = { --if true the texture of the bars will have the color of his actor class @@ -117,10 +126,13 @@ _detalhes.instance_defaults = { space = {left = 3, right = -5, between = 1}, --icon file icon_file = [[Interface\AddOns\Details\images\classes_small]], + no_icon = false, + start_after_icon = true, }, --instance window color color = {1, 1, 1, 1}, + color_buttons = {1, 1, 1, 1}, --hide in combat hide_in_combat = false, hide_in_combat_alpha = 0, diff --git a/core/control.lua b/core/control.lua index 46563333..b6066f10 100644 --- a/core/control.lua +++ b/core/control.lua @@ -320,7 +320,7 @@ for index, instancia in ipairs (_detalhes.tabela_instancias) do if (instancia.ativa) then if (instancia.hide_in_combat) then - instancia:SetWindowAlpha (instancia.hide_in_combat_alpha / 100) + instancia:SetWindowAlphaForCombat (true) end if (instancia.auto_switch_to) then @@ -569,7 +569,7 @@ for index, instancia in ipairs (_detalhes.tabela_instancias) do if (instancia.ativa) then if (instancia.hide_in_combat) then - instancia:SetWindowAlpha (1, true) + instancia:SetWindowAlphaForCombat (false) end if (instancia.auto_switch_to_old) then instancia:SwitchBack() diff --git a/core/meta.lua b/core/meta.lua index 1322d026..6b6f051d 100644 --- a/core/meta.lua +++ b/core/meta.lua @@ -556,6 +556,8 @@ esta_instancia.consolidateButtonTexture = nil esta_instancia.consolidateButton = nil esta_instancia.lastIcon = nil + + esta_instancia.menu_attribute_string = nil end diff --git a/core/parser.lua b/core/parser.lua index 1ce265d1..224b02f4 100644 --- a/core/parser.lua +++ b/core/parser.lua @@ -2790,10 +2790,10 @@ end --if (UnitName ("player") == "Tiranaa" or UnitName ("player") == "Triciclo") then - _detalhes:SaveConfig() - _detalhes:SaveProfile() + + _detalhes_database.nick_tag_cache = table_deepcopy (_detalhes_database.nick_tag_cache) --_detalhes_global = nil --_detalhes_database = nil @@ -2845,6 +2845,9 @@ _detalhes.listener:SetScript ("OnEvent", _detalhes.OnEvent) function _detalhes:OnParserEvent (evento, time, token, hidding, who_serial, who_name, who_flags, who_flags2, alvo_serial, alvo_name, alvo_flags, alvo_flags2, ...) + + --print (alvo_name, alvo_flags2) + local funcao = token_list [token] if (funcao) then return funcao (nil, token, time, who_serial, who_name, who_flags, alvo_serial, alvo_name, alvo_flags, ... ) diff --git a/core/plugins.lua b/core/plugins.lua index c11789eb..fbff25df 100644 --- a/core/plugins.lua +++ b/core/plugins.lua @@ -167,6 +167,9 @@ Frame:RegisterEvent ("ADDON_LOADED") Frame:RegisterEvent ("PLAYER_LOGOUT") Frame:SetScript ("OnEvent", function(event, ...) return NewPlugin:OnEvent (event, ...) end) + + Frame:SetFrameStrata ("HIGH") + Frame:SetFrameLevel (6) Frame:Hide() Frame.__parent = NewPlugin diff --git a/core/plugins_statusbar.lua b/core/plugins_statusbar.lua index 322e10b7..b41d2100 100644 --- a/core/plugins_statusbar.lua +++ b/core/plugins_statusbar.lua @@ -293,7 +293,8 @@ --> build-in function for create a frame for an plugin child function _detalhes.StatusBar:CreateChildFrame (instance, name, w, h) - local frame = _detalhes.gump:NewPanel (instance.baseframe.cabecalho.fechar, nil, name..instance:GetInstanceId(), nil, w or DEFAULT_CHILD_WIDTH, h or DEFAULT_CHILD_HEIGHT, false) + --local frame = _detalhes.gump:NewPanel (instance.baseframe.cabecalho.fechar, nil, name..instance:GetInstanceId(), nil, w or DEFAULT_CHILD_WIDTH, h or DEFAULT_CHILD_HEIGHT, false) + local frame = _detalhes.gump:NewPanel (instance.baseframe.DOWNFrame, nil, name..instance:GetInstanceId(), nil, w or DEFAULT_CHILD_WIDTH, h or DEFAULT_CHILD_HEIGHT, false) --create widgets local text = _detalhes.gump:NewLabel (frame, nil, "$parentText", "text", "0") diff --git a/core/plugins_toolbar.lua b/core/plugins_toolbar.lua index 94160c68..3478d8de 100644 --- a/core/plugins_toolbar.lua +++ b/core/plugins_toolbar.lua @@ -57,8 +57,6 @@ _detalhes.ToolBar.AllButtons [#_detalhes.ToolBar.AllButtons+1] = button - - return button end @@ -171,7 +169,8 @@ _detalhes:RegisterEvent (_detalhes.ToolBar, "DETAILS_INSTANCE_OPEN", "OnInstanceOpen") _detalhes:RegisterEvent (_detalhes.ToolBar, "DETAILS_INSTANCE_CLOSE", "OnInstanceClose") - _detalhes.ToolBar.Enabled = true --> must have this member or will not receive the event + _detalhes.ToolBar.Enabled = true --> must have this member or wont receive the event + _detalhes.ToolBar.__enabled = true function _detalhes.ToolBar:OnInstanceOpen() _detalhes.ToolBar:ReorganizeIcons() @@ -194,10 +193,6 @@ local instance = _detalhes:GetInstance (lower_instance) - if (just_refresh) then - - end - _detalhes:ResetButtonSnapTo (instance) _detalhes.ResetButtonInstance = lower_instance @@ -206,6 +201,7 @@ local LastIcon local x = 0 + local to_alpha = instance:GetInstanceIconsCurrentAlpha() if (instance.plugins_grow_direction == 2) then --> right direction @@ -228,7 +224,10 @@ else ThisButton:SetPoint ("left", LastIcon, "right", ThisButton.x + x, ThisButton.y) end + ThisButton:Show() + ThisButton:SetAlpha (to_alpha) + LastIcon = ThisButton end @@ -245,12 +244,14 @@ ThisButton:SetParent (instance.baseframe.UPFrame) ThisButton:SetPoint ("right", LastIcon, "left", ThisButton.x + x, ThisButton.y) + ThisButton:Show() + ThisButton:SetAlpha (to_alpha) + LastIcon = ThisButton end end - end if (not just_refresh) then @@ -261,6 +262,8 @@ end instance:ChangeSkin() + else + instance:SetMenuAlpha() end return true diff --git a/core/windows.lua b/core/windows.lua index acc139e0..fed43dd5 100644 --- a/core/windows.lua +++ b/core/windows.lua @@ -141,23 +141,62 @@ self = instance end - local xOfs, yOfs = self.baseframe:GetCenter() + local mostrando = self.mostrando + + local baseframe_width = math.floor (self.baseframe:GetWidth()) + local baseframe_height = math.floor (self.baseframe:GetHeight()) + + if (not baseframe_width) then + return _detalhes:ScheduleTimer ("SaveMainWindowPosition", 1, self) + end + + --[[ + if (baseframe_width % 2 ~= 0) then + if (self.posicao[mostrando].w > baseframe_width) then + baseframe_width = baseframe_width +1 + else + baseframe_width = baseframe_width -1 + end + end + self.baseframe:SetWidth (baseframe_width) + if (baseframe_height % 2 ~= 0) then + if (self.posicao[mostrando].h > baseframe_height) then + baseframe_height = baseframe_height +1 + else + baseframe_height = baseframe_height -1 + end + end + self.baseframe:SetHeight (baseframe_height) + --]] + + local xOfs, yOfs = self.baseframe:GetCenter() if (not xOfs) then --> this is a small and unknow bug when resizing all windows throgh crtl key (all) the last window of a horizontal row can't 'GetCenter'. --> so, the trick is we start a timer to save pos later. return _detalhes:ScheduleTimer ("SaveMainWindowPosition", 1, self) end + + --xOfs = math.floor (xOfs) + --yOfs = math.floor (yOfs) + + if (xOfs % 2 ~= 0) then + --xOfs = xOfs -1 + end + if (yOfs % 2 ~= 0) then + --yOfs = yOfs -1 + end + + local q, w = self.baseframe:GetCenter() local _scale = self.baseframe:GetEffectiveScale() local _UIscale = _UIParent:GetScale() - local mostrando = self.mostrando xOfs = xOfs*_scale - _GetScreenWidth()*_UIscale/2 yOfs = yOfs*_scale - _GetScreenHeight()*_UIscale/2 - local _w = self.baseframe:GetWidth() - local _h = self.baseframe:GetHeight() + local _w = baseframe_width + local _h = baseframe_height local _x = xOfs/_UIscale local _y = yOfs/_UIscale @@ -267,10 +306,18 @@ if (self.baseframe:GetWidth() < 215 or self.resetbutton_info.always_small) then gump:Fade (_detalhes.ResetButton, 1) gump:Fade (_detalhes.ResetButton2, 0) + + local alpha = self:GetInstanceCurrentAlpha() + _detalhes.ResetButton2:SetAlpha (alpha) + _detalhes.ResetButtonMode = 2 else gump:Fade (_detalhes.ResetButton, 0) gump:Fade (_detalhes.ResetButton2, 1) + + local alpha = self:GetInstanceCurrentAlpha() + _detalhes.ResetButton2:SetAlpha (alpha) + _detalhes.ResetButtonMode = 1 end end @@ -405,14 +452,16 @@ end for index = T+1, C do - if (index <= X) then - gump:Fade (self.barras[index], "out") - else - --gump:Fade (self.barras[index], "in") - if (self.baseframe.isStretching or self.auto_resize) then - gump:Fade (self.barras[index], 1) + local barra = self.barras[index] + if (barra) then + if (index <= X) then + gump:Fade (barra, "out") else - gump:Fade (self.barras[index], "in", 0.1) + if (self.baseframe.isStretching or self.auto_resize) then + gump:Fade (barra, 1) + else + gump:Fade (barra, "in", 0.1) + end end end end @@ -436,11 +485,13 @@ self.barraS[2] = fim_iterator for index = T, C+1, -1 do - --gump:Fade (self.barras[index], "in") - if (self.baseframe.isStretching or self.auto_resize) then - gump:Fade (self.barras[index], 1) - else - gump:Fade (self.barras[index], "in", 0.1) + local barra = self.barras[index] + if (barra) then + if (self.baseframe.isStretching or self.auto_resize) then + gump:Fade (barra, 1) + else + gump:Fade (barra, "in", 0.1) + end end end end @@ -663,3 +714,141 @@ end end + + +--> create bubble + local f = CreateFrame ("frame", "DetailsBubble", UIParent) + f:SetPoint ("center", UIParent, "center") + f:SetSize (100, 100) + f:SetFrameStrata ("TOOLTIP") + f.isHorizontalFlipped = false + f.isVerticalFlipped = false + + local t = f:CreateTexture (nil, "artwork") + t:SetTexture ([[Interface\AddOns\Details\images\icons]]) + t:SetSize (131 * 1.2, 81 * 1.2) + --377 328 508 409 0.0009765625 + t:SetTexCoord (0.7373046875, 0.9912109375, 0.6416015625, 0.7978515625) + t:SetPoint ("center", f, "center") + + local line1 = f:CreateFontString (nil, "overlay", "GameFontHighlightSmall") + line1:SetPoint ("topleft", t, "topleft", 24, -10) + _detalhes:SetFontSize (line1, 9) + line1:SetTextColor (.9, .9, .9, 1) + line1:SetSize (110, 12) + line1:SetJustifyV ("center") + line1:SetJustifyH ("center") + + local line2 = f:CreateFontString (nil, "overlay", "GameFontHighlightSmall") + line2:SetPoint ("topleft", t, "topleft", 11, -20) + _detalhes:SetFontSize (line2, 9) + line2:SetTextColor (.9, .9, .9, 1) + line2:SetSize (140, 12) + line2:SetJustifyV ("center") + line2:SetJustifyH ("center") + + local line3 = f:CreateFontString (nil, "overlay", "GameFontHighlightSmall") + line3:SetPoint ("topleft", t, "topleft", 7, -30) + _detalhes:SetFontSize (line3, 9) + line3:SetTextColor (.9, .9, .9, 1) + line3:SetSize (144, 12) + line3:SetJustifyV ("center") + line3:SetJustifyH ("center") + + local line4 = f:CreateFontString (nil, "overlay", "GameFontHighlightSmall") + line4:SetPoint ("topleft", t, "topleft", 11, -40) + _detalhes:SetFontSize (line4, 9) + line4:SetTextColor (.9, .9, .9, 1) + line4:SetSize (140, 12) + line4:SetJustifyV ("center") + line4:SetJustifyH ("center") + + local line5 = f:CreateFontString (nil, "overlay", "GameFontHighlightSmall") + line5:SetPoint ("topleft", t, "topleft", 24, -50) + _detalhes:SetFontSize (line5, 9) + line5:SetTextColor (.9, .9, .9, 1) + line5:SetSize (110, 12) + line5:SetJustifyV ("center") + line5:SetJustifyH ("center") + + f.lines = {line1, line2, line3, line4, line5} + + --t:SetPoint ("center", UIParent, "center") + + function f:FlipHorizontal() + if (not f.isHorizontalFlipped) then + if (f.isVerticalFlipped) then + t:SetTexCoord (0.9912109375, 0.7373046875, 0.7978515625, 0.6416015625) + else + t:SetTexCoord (0.9912109375, 0.7373046875, 0.6416015625, 0.7978515625) + end + f.isHorizontalFlipped = true + else + if (f.isVerticalFlipped) then + t:SetTexCoord (0.7373046875, 0.9912109375, 0.7978515625, 0.6416015625) + else + t:SetTexCoord (0.7373046875, 0.9912109375, 0.6416015625, 0.7978515625) + end + f.isHorizontalFlipped = false + end + end + + function f:FlipVertical() + + if (not f.isVerticalFlipped) then + if (f.isHorizontalFlipped) then + t:SetTexCoord (0.7373046875, 0.9912109375, 0.7978515625, 0.6416015625) + else + t:SetTexCoord (0.9912109375, 0.7373046875, 0.7978515625, 0.6416015625) + end + f.isVerticalFlipped = true + else + if (f.isHorizontalFlipped) then + t:SetTexCoord (0.7373046875, 0.9912109375, 0.6416015625, 0.7978515625) + else + t:SetTexCoord (0.9912109375, 0.7373046875, 0.6416015625, 0.7978515625) + end + f.isVerticalFlipped = false + end + end + + function f:SetBubbleText (line1, line2, line3, line4, line5) + if (not line1) then + for _, line in ipairs (f.lines) do + line:SetText ("") + end + return + end + + if (line1:find ("\n")) then + line1, line2, line3, line4, line5 = strsplit ("\n", line1) + end + + f.lines[1]:SetText (line1) + f.lines[2]:SetText (line2) + f.lines[3]:SetText (line3) + f.lines[4]:SetText (line4) + f.lines[5]:SetText (line5) + end + + function f:SetOwner (frame, myPoint, hisPoint, x, y, alpha) + f:ClearAllPoints() + f:SetBubbleText (nil) + t:SetTexCoord (0.7373046875, 0.9912109375, 0.6416015625, 0.7978515625) + f.isHorizontalFlipped = false + f.isVerticalFlipped = false + f:SetPoint (myPoint or "bottom", frame, hisPoint or "top", x or 0, y or 0) + t:SetAlpha (alpha or 1) + end + + function f:ShowBubble() + f:Show() + end + + function f:HideBubble() + f:Hide() + end + + f:SetBubbleText (nil) + + f:Hide() \ No newline at end of file diff --git a/framework/button.lua b/framework/button.lua index 6e2e42fc..74ab442a 100644 --- a/framework/button.lua +++ b/framework/button.lua @@ -761,12 +761,17 @@ local set_colorpick_color = function (button, r, g, b, a) button.color_texture:SetVertexColor (r, g, b, a) end +local colorpick_cancel = function (self) + ColorPickerFrame:Hide() +end + function gump:NewColorPickButton (parent, name, member, callback, alpha) --button local button = gump:NewButton (parent, _, name, member, color_button_width, color_button_height, pickcolor, alpha, "param2") button:InstallCustomTexture() button.color_callback = callback + button.Cancel = colorpick_cancel button.SetColor = set_colorpick_color button:SetBackdrop ({edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]], edgeSize = 6, diff --git a/framework/cooltip.lua b/framework/cooltip.lua index 1ec69b05..8b5f8398 100644 --- a/framework/cooltip.lua +++ b/framework/cooltip.lua @@ -2,6 +2,7 @@ local _detalhes = _G._detalhes local AceLocale = LibStub ("AceLocale-3.0") local Loc = AceLocale:GetLocale ( "Details" ) +local SharedMedia = LibStub:GetLibrary("LibSharedMedia-3.0") local gump = _detalhes.gump local _ @@ -86,6 +87,7 @@ function DetailsCreateCoolTip() ["StatusBarTexture"] = true, ["TextSize"] = true, ["TextFont"] = true, + ["TextColor"] = true, ["LeftTextWidth"] = true, ["RightTextWidth"] = true, ["LeftTextHeight"] = true, @@ -126,6 +128,7 @@ function DetailsCreateCoolTip() ["StatusBarTexture"] = nil, ["TextSize"] = nil, ["TextFont"] = nil, + ["TextColor"] = nil, ["LeftTextWidth"] = nil, ["RightTextWidth"] = nil, ["LeftTextHeight"] = nil, @@ -592,7 +595,7 @@ function DetailsCreateCoolTip() end function CoolTip:TextAndIcon (index, frame, menuButton, leftTextTable, rightTextTable, leftIconTable, rightIconTable, isSub) - + --> reset width menuButton.leftText:SetWidth (0) menuButton.leftText:SetHeight (0) @@ -603,7 +606,19 @@ function DetailsCreateCoolTip() if (leftTextTable) then menuButton.leftText:SetText (leftTextTable [1]) - menuButton.leftText:SetTextColor (leftTextTable [2], leftTextTable [3], leftTextTable [4], leftTextTable [5]) + + local r, g, b, a = leftTextTable [2], leftTextTable [3], leftTextTable [4], leftTextTable [5] + + if (r == 0 and g == 0 and b == 0 and a == 0) then + if (CoolTip.OptionsTable.TextColor) then + r, g, b, a = gump:ParseColors (CoolTip.OptionsTable.TextColor) + menuButton.leftText:SetTextColor (r, g, b, a) + else + menuButton.leftText:SetTextColor (1, 1, 1, 1) + end + else + menuButton.leftText:SetTextColor (r, g, b, a) + end if (CoolTip.OptionsTable.TextSize and not leftTextTable [6]) then _detalhes:SetFontSize (menuButton.leftText, CoolTip.OptionsTable.TextSize) @@ -622,22 +637,31 @@ function DetailsCreateCoolTip() end if (CoolTip.OptionsTable.TextFont and not leftTextTable [7]) then - menuButton.leftText:SetFontObject (CoolTip.OptionsTable.TextFont) - end - local face, size, flags = menuButton.leftText:GetFont() + if (_G [CoolTip.OptionsTable.TextFont]) then + menuButton.leftText:SetFontObject (GameFontRed or CoolTip.OptionsTable.TextFont) + else + local font = SharedMedia:Fetch ("font", CoolTip.OptionsTable.TextFont) + local _, size, flags = menuButton.leftText:GetFont() + menuButton.leftText:SetFont (font, size, flags) + end - if (_G [leftTextTable [7]]) then - menuButton.leftText:SetFontObject (leftTextTable [7]) - local face, size, flags = menuButton.leftText:GetFont() - size = leftTextTable [6] or CoolTip.OptionsTable.TextSize or size - - menuButton.leftText:SetFont (face, size, flags) + elseif (leftTextTable [7]) then + if (_G [leftTextTable [7]]) then + menuButton.leftText:SetFontObject (leftTextTable [7]) + local face, size, flags = menuButton.leftText:GetFont() + size = leftTextTable [6] or CoolTip.OptionsTable.TextSize or size + menuButton.leftText:SetFont (face, size, flags) + else + local font = SharedMedia:Fetch ("font", leftTextTable [7]) + local face, size, flags = menuButton.leftText:GetFont() + size = leftTextTable [6] or CoolTip.OptionsTable.TextSize or size + menuButton.leftText:SetFont (face, size, flags) + end else size = leftTextTable [6] or CoolTip.OptionsTable.TextSize or 10 face = leftTextTable [7] or [[Fonts\FRIZQT__.TTF]] flags = leftTextTable [8] - menuButton.leftText:SetFont (face, size, flags) end @@ -647,7 +671,19 @@ function DetailsCreateCoolTip() if (rightTextTable) then menuButton.rightText:SetText (rightTextTable [1]) - menuButton.rightText:SetTextColor (rightTextTable [2], rightTextTable [3], rightTextTable [4], rightTextTable [5]) + + local r, g, b, a = rightTextTable [2], rightTextTable [3], rightTextTable [4], rightTextTable [5] + + if (r == 0 and g == 0 and b == 0 and a == 0) then + if (CoolTip.OptionsTable.TextColor) then + r, g, b, a = gump:ParseColors (CoolTip.OptionsTable.TextColor) + menuButton.rightText:SetTextColor (r, g, b, a) + else + menuButton.rightText:SetTextColor (1, 1, 1, 1) + end + else + menuButton.rightText:SetTextColor (r, g, b, a) + end if (CoolTip.OptionsTable.TextSize and not rightTextTable [6]) then _detalhes:SetFontSize (menuButton.rightText, CoolTip.OptionsTable.TextSize) @@ -666,19 +702,29 @@ function DetailsCreateCoolTip() end if (CoolTip.OptionsTable.TextFont and not rightTextTable [7]) then - menuButton.rightText:SetFontObject (CoolTip.OptionsTable.TextFont) - end + if (_G [CoolTip.OptionsTable.TextFont]) then + menuButton.rightText:SetFontObject (CoolTip.OptionsTable.TextFont) + else + local font = SharedMedia:Fetch ("font", CoolTip.OptionsTable.TextFont) + local _, size, flags = menuButton.rightText:GetFont() + menuButton.rightText:SetFont (font, size, flags) + end - local face, size, flags = menuButton.rightText:GetFont() + elseif (rightTextTable [7]) then + if (_G [rightTextTable [7]]) then + menuButton.rightText:SetFontObject (rightTextTable [7]) + local face, size, flags = menuButton.rightText:GetFont() + size = rightTextTable [6] or CoolTip.OptionsTable.TextSize or size + menuButton.rightText:SetFont (face, size, flags) + else + local font = SharedMedia:Fetch ("font", rightTextTable [7]) + local face, size, flags = menuButton.rightText:GetFont() + size = rightTextTable [6] or CoolTip.OptionsTable.TextSize or size + menuButton.rightText:SetFont (face, size, flags) + end - if (_G [rightTextTable [7]]) then - menuButton.rightText:SetFontObject (rightTextTable [7]) - local face, size, flags = menuButton.rightText:GetFont() - size = rightTextTable [6] or CoolTip.OptionsTable.TextSize or size - - menuButton.rightText:SetFont (face, size, flags) else - size = rightTextTable [6] or 10 + size = rightTextTable [6] or CoolTip.OptionsTable.TextSize or 10 face = rightTextTable [7] or [[Fonts\FRIZQT__.TTF]] flags = rightTextTable [8] menuButton.rightText:SetFont (face, size, flags) @@ -1784,10 +1830,10 @@ function DetailsCreateCoolTip() end lineTable_left [1] = leftText --> line text - lineTable_left [2] = 1 - lineTable_left [3] = 1 - lineTable_left [4] = 1 - lineTable_left [5] = 1 + lineTable_left [2] = 0 + lineTable_left [3] = 0 + lineTable_left [4] = 0 + lineTable_left [5] = 0 lineTable_left [6] = false lineTable_left [7] = false lineTable_left [8] = false @@ -1876,10 +1922,10 @@ function DetailsCreateCoolTip() end subMenuTablesTexts [1] = leftText --> line text - subMenuTablesTexts [2] = 1 - subMenuTablesTexts [3] = 1 - subMenuTablesTexts [4] = 1 - subMenuTablesTexts [5] = 1 + subMenuTablesTexts [2] = 0 + subMenuTablesTexts [3] = 0 + subMenuTablesTexts [4] = 0 + subMenuTablesTexts [5] = 0 subMenuTablesTexts [6] = false subMenuTablesTexts [7] = false subMenuTablesTexts [8] = false @@ -2233,7 +2279,7 @@ function DetailsCreateCoolTip() ColorR2, ColorG2, ColorB2, ColorA2, fontSize, fontFace, fontFlag = ColorG1, ColorB1, ColorA1, ColorR2, ColorG2, ColorB2, ColorA2 if (type (ColorR1) == "boolean" or not ColorR1) then - ColorR1, ColorG1, ColorB1, ColorA1 = 1, 1, 1, 1 + ColorR1, ColorG1, ColorB1, ColorA1 = 0, 0, 0, 0 else ColorR1, ColorG1, ColorB1, ColorA1 = gump:ParseColors (ColorR1) end @@ -2243,7 +2289,7 @@ function DetailsCreateCoolTip() fontSize, fontFace, fontFlag = ColorG2, ColorB2, ColorA2 if (type (ColorR2) == "boolean" or not ColorR2) then - ColorR2, ColorG2, ColorB2, ColorA2 = 1, 1, 1, 1 + ColorR2, ColorG2, ColorB2, ColorA2 = 0, 0, 0, 0 else ColorR2, ColorG2, ColorB2, ColorA2 = gump:ParseColors (ColorR2) end diff --git a/framework/dropdown.lua b/framework/dropdown.lua index fea17401..1a42c3ca 100644 --- a/framework/dropdown.lua +++ b/framework/dropdown.lua @@ -613,7 +613,12 @@ function DetailsDropDownOnEnter (self) end end - self:SetBackdropColor (.2, .2, .2, .2) + if (self.MyObject.onenter_backdrop) then + self:SetBackdropColor (unpack (self.MyObject.onenter_backdrop)) + else + self:SetBackdropColor (.2, .2, .2, .2) + end + self.arrowTexture2:Show() if (self.MyObject.have_tooltip) then @@ -635,15 +640,20 @@ function DetailsDropDownOnEnter (self) end function DetailsDropDownOnLeave (self) - self:SetBackdropColor (1, 1, 1, .5) - self.arrowTexture2:Hide() - if (self.MyObject.OnLeaveHook) then local interrupt = self.MyObject.OnLeaveHook (self) if (interrupt) then return end end + + if (self.MyObject.onleave_backdrop) then + self:SetBackdropColor (unpack (self.MyObject.onleave_backdrop)) + else + self:SetBackdropColor (1, 1, 1, .5) + end + + self.arrowTexture2:Hide() if (self.MyObject.have_tooltip) then _detalhes.popup:ShowMe (false) @@ -790,17 +800,23 @@ function gump:NewDropDown (parent, container, name, member, w, h, func, default) --> initialize first menu selected local menu = func() - for i = default, #menu do - local _table = menu [i] - if (not _table) then - break - end - if (isOptionVisible (_table)) then - DropDownObject:Selected (_table) - break + if (type (default) == "string") then + DropDownObject:Select (default) + else + for i = default, #menu do + local _table = menu [i] + if (not _table) then + break + end + if (isOptionVisible (_table)) then + DropDownObject:Selected (_table) + break + end end end + + return DropDownObject end \ No newline at end of file diff --git a/framework/pictureedit.lua b/framework/pictureedit.lua index 4ec6458a..7b20b986 100644 --- a/framework/pictureedit.lua +++ b/framework/pictureedit.lua @@ -358,59 +358,11 @@ local _ --> flip local flip = function (side) if (side == 1) then - if (not haveHFlip) then - if (not haveVFlip) then - edit_texture:SetTexCoord (1, 0, 0, 1) - else - edit_texture:SetTexCoord (1, 0, 1, 0) - end - rightCoordTexture:Hide() - leftCoordTexture:Hide() - rightSlider:Hide() - leftSlider:Hide() - leftTexCoordButton:Disable() - rightTexCoordButton:Disable() - else - if (not haveVFlip) then - edit_texture:SetTexCoord (0, 1, 0, 1) - else - edit_texture:SetTexCoord (0, 1, 1, 0) - end - rightCoordTexture:Show() - leftCoordTexture:Show() - leftTexCoordButton:Enable() - rightTexCoordButton:Enable() - end haveHFlip = not haveHFlip if (window.callback_func) then window.accept (true) end - - elseif (side == 2) then - if (not haveVFlip) then - if (not haveHFlip) then - edit_texture:SetTexCoord (0, 1, 1, 0) - else - edit_texture:SetTexCoord (1, 0, 1, 0) - end - topCoordTexture:Hide() - bottomCoordTexture:Hide() - topSlider:Hide() - bottomSlider:Hide() - topTexCoordButton:Disable() - bottomTexCoordButton:Disable() - else - if (not haveHFlip) then - edit_texture:SetTexCoord (0, 1, 0, 1) - else - edit_texture:SetTexCoord (1, 0, 0, 1) - end - topCoordTexture:Show() - bottomCoordTexture:Show() - topTexCoordButton:Enable() - bottomTexCoordButton:Enable() - end haveVFlip = not haveVFlip if (window.callback_func) then window.accept (true) @@ -437,20 +389,22 @@ local _ end local coords = {} + local l, r, t, b = leftSlider.value/100, rightSlider.value/100, topSlider.value/100, bottomSlider.value/100 + if (haveHFlip) then - coords [1] = 1 - coords [2] = 0 + coords [1] = r + coords [2] = l else - coords [1] = leftSlider.value/100 - coords [2] = rightSlider.value /100 + coords [1] = l + coords [2] = r end if (haveVFlip) then - coords [3] = 1 - coords [4] = 0 + coords [3] = b + coords [4] = t else - coords [3] = topSlider.value/100 - coords [4] = bottomSlider.value/100 + coords [3] = t + coords [4] = b end return window.callback_func (edit_texture.width, edit_texture.height, {edit_texture:GetVertexColor()}, edit_texture:GetAlpha(), coords, window.extra_param) @@ -459,22 +413,19 @@ local _ local acceptButton = g:NewButton (buttonsBackground, nil, "$parentAcceptButton", nil, 100, 20, window.accept, nil, nil, nil, "DONE") acceptButton:SetPoint ("topleft", window, "topright", 10, -200) acceptButton:InstallCustomTexture() - - -- fazer botao de editar a cor - -- fazer botao de editar o tamanho - -- fazer botao de okey e retornar os valores - window:Hide() ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- local ttexcoord - function g:ImageEditor (callback, texture, texcoord, colors, width, height, extraParam) + function g:ImageEditor (callback, texture, texcoord, colors, width, height, extraParam, alpha) texcoord = texcoord or {0, 1, 0, 1} ttexcoord = texcoord colors = colors or {1, 1, 1, 1} + + alpha = alpha or 1 edit_texture:SetTexture (texture) edit_texture.width = width @@ -482,7 +433,7 @@ window:Hide() edit_texture:SetVertexColor (colors [1], colors [2], colors [3]) - edit_texture:SetAlpha (colors [4] or 1) + edit_texture:SetAlpha (alpha) _detalhes:ScheduleTimer ("RefreshImageEditor", 0.2) @@ -499,26 +450,28 @@ window:Hide() window.width = edit_texture.width window.height = edit_texture.height - if (ttexcoord[1] == 1 and ttexcoord[2] == 0) then - haveHFlip = false - flip (1) - else + local l, r, t, b = unpack (ttexcoord) + + if (l > r) then haveHFlip = true - flip (1) - leftSlider:SetValue (ttexcoord[1]*100) - rightSlider:SetValue (ttexcoord[2]*100) - end - - if (ttexcoord[3] == 1 and ttexcoord[4] == 0) then - haveVFlip = false - flip (2) + leftSlider:SetValue (r * 100) + rightSlider:SetValue (l * 100) else - haveVFlip = true - flip (2) - topSlider:SetValue (ttexcoord[3]*100) - bottomSlider:SetValue (ttexcoord[4]*100) + haveHFlip = false + leftSlider:SetValue (l * 100) + rightSlider:SetValue (r * 100) end + if (t > b) then + haveVFlip = true + topSlider:SetValue (b * 100) + bottomSlider:SetValue (t * 100) + else + haveVFlip = false + topSlider:SetValue (t * 100) + bottomSlider:SetValue (b * 100) + end + if (window.callback_func) then window.accept (true) end diff --git a/framework/slider.lua b/framework/slider.lua index 9889568e..1d51fee1 100644 --- a/framework/slider.lua +++ b/framework/slider.lua @@ -11,6 +11,7 @@ local _math_floor = math.floor --> lua local local loadstring = loadstring --> lua local local Loc = LibStub ("AceLocale-3.0"):GetLocale ( "Details" ) +local SharedMedia = LibStub:GetLibrary("LibSharedMedia-3.0") local cleanfunction = function() end local APISliderFunctions = false @@ -315,8 +316,11 @@ local SliderMetaFunctions = {} slider.thumb:SetAlpha (1) if (slider.MyObject.have_tooltip) then - GameCooltip:Reset() + _detalhes:CooltipPreset (1) GameCooltip:AddLine (slider.MyObject.have_tooltip) + if (slider.MyObject.have_tooltip == Loc ["STRING_RIGHTCLICK_TYPEVALUE"]) then + GameCooltip:AddIcon ([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 16, 16, 0.015625, 0.15671875, 0.640625, 0.798828125) + end GameCooltip:ShowCooltip (slider, "tooltip") end @@ -474,13 +478,73 @@ local SliderMetaFunctions = {} end slider.MyObject.ivalue = amt end - - ------------------------------------------------------------------------------------------------------------ --> object constructor -function gump:NewSwitch (parent, container, name, member, w, h, ltext, rtext, defaultv, color_inverted) +local SwitchOnClick = function (self, button, forced_value, value) + + local slider = self.MyObject + + if (forced_value) then + rawset (slider, "value", not value) + end + + if (rawget (slider, "value")) then --actived + + rawset (slider, "value", false) + slider._text:SetText (slider._ltext) + slider._thumb:ClearAllPoints() + + slider:SetBackdropColor (1, 0, 0, 0.4) + slider._thumb:SetPoint ("left", slider.widget, "left") + + else + + rawset (slider, "value", true) + slider._text:SetText (slider._rtext) + slider._thumb:ClearAllPoints() + + slider:SetBackdropColor (0, 0, 1, 0.4) + slider._thumb:SetPoint ("right", slider.widget, "right") + + end + + if (slider.OnSwitch and not forced_value) then + local value = rawget (slider, "value") + if (slider.return_func) then + value = slider:return_func (value) + end + slider.OnSwitch (slider, slider.FixedValue, value) + end + +end + +local default_switch_func = function (self, passed_value) + if (self.value) then + return false + else + return true + end +end + +local switch_get_value = function (self) + return self.value +end + +local switch_set_value = function (self, value) + if (self.switch_func) then + value = self:switch_func (value) + end + + SwitchOnClick (self.widget, nil, true, value) +end + +local switch_set_fixparameter = function (self, value) + _rawset (self, "FixedValue", value) +end + +function gump:NewSwitch (parent, container, name, member, w, h, ltext, rtext, default_value, color_inverted, switch_func, return_func) --> early checks if (not name) then @@ -496,54 +560,47 @@ function gump:NewSwitch (parent, container, name, member, w, h, ltext, rtext, de ltext = ltext or "OFF" rtext = rtext or "ON" - if (type (defaultv) == "boolean" and not defaultv) then - defaultv = 1 - elseif (type (defaultv) == "boolean" and defaultv) then - defaultv = 2 - else - defaultv = defaultv or 1 - end - --> build frames - local slider = gump:NewSlider (parent, container, name, member, w, h, 1, 2, 1, defaultv, nil, true) + + local slider = gump:NewButton (parent, container, name, member, w, h) + + slider.switch_func = switch_func + slider.return_func = return_func + slider.SetValue = switch_set_value + slider.GetValue = switch_get_value + slider.SetFixedParameter = switch_set_fixparameter + + if (member) then + parent [member] = slider + end slider:SetBackdrop ({edgeFile = [[Interface\Buttons\UI-SliderBar-Border]], edgeSize = 8, bgFile = [[Interface\AddOns\Details\images\background]], insets = {left = 3, right = 3, top = 5, bottom = 5}}) + local thumb = slider:CreateTexture (nil, "artwork") + thumb:SetTexture ("Interface\\Buttons\\UI-ScrollBar-Knob") + thumb:SetSize (34+(h*0.2), h*1.2) + thumb:SetAlpha (0.7) + thumb:SetPoint ("left", slider.widget, "left") + + local text = slider:CreateFontString (nil, "overlay", "GameFontHighlightSmall") + text:SetTextColor (.8, .8, .8, 1) + text:SetPoint ("center", thumb, "center") + + slider._text = text + slider._thumb = thumb + slider._ltext = ltext + slider._rtext = rtext + slider.thumb = thumb + slider.invert_colors = color_inverted - slider:SetHook ("OnValueChange", function (self) - if (slider:GetValue() == 1) then - slider.amt:SetText (ltext) - if (slider.OnSwitch) then - slider.OnSwitch (slider, slider.FixedValue, false) - end - if (not slider.invert_colors) then - slider:SetBackdropColor (1, 0, 0, 0.4) - else - slider:SetBackdropColor (0, 0, 1, 0.4) - end - else - slider.amt:SetText (rtext) - if (slider.OnSwitch) then - slider.OnSwitch (slider, slider.FixedValue, true) - end - - if (not slider.invert_colors) then - slider:SetBackdropColor (0, 0, 1, 0.4) - else - slider:SetBackdropColor (1, 0, 0, 0.4) - end - end - return true - end) - - slider:SetValue (1) - slider:SetValue (2) - slider:SetValue (defaultv) - + slider:SetScript ("OnClick", SwitchOnClick) + + slider:SetValue (default_value) + slider.isSwitch = true - + return slider end @@ -621,17 +678,12 @@ function gump:NewSlider (parent, container, name, member, w, h, min, max, step, SliderObject.slider:SetValueStep (step) SliderObject.slider:SetValue (defaultv) SliderObject.ivalue = defaultv - - --SliderObject.amt = _G [name .. "_Amt"] - --SliderObject.lock = _G [name .. "_LockTexture"] - --SliderObject.thumb = _G [name .. "_ThumbTexture"] - + SliderObject.slider:SetBackdrop ({edgeFile = "Interface\\Buttons\\UI-SliderBar-Border", edgeSize = 8}) SliderObject.slider:SetBackdropColor (0.9, 0.7, 0.7, 1.0) - + SliderObject.thumb = SliderObject.slider:CreateTexture (nil, "artwork") SliderObject.thumb:SetTexture ("Interface\\Buttons\\UI-ScrollBar-Knob") - --SliderObject.thumb:SetSize (30, 24) SliderObject.thumb:SetSize (30+(h*0.2), h*1.2) SliderObject.thumb:SetAlpha (0.7) SliderObject.slider:SetThumbTexture (SliderObject.thumb) diff --git a/framework/textentry.lua b/framework/textentry.lua index bf3c5d13..77133d52 100644 --- a/framework/textentry.lua +++ b/framework/textentry.lua @@ -260,12 +260,9 @@ local TextEntryMetaFunctions = {} end if (textentry.MyObject.have_tooltip) then - GameCooltip:Reset() - GameCooltip:SetType ("tooltip") - GameCooltip:SetColor ("main", "transparent") + _detalhes:CooltipPreset (1) GameCooltip:AddLine (textentry.MyObject.have_tooltip) - GameCooltip:SetOwner (textentry) - GameCooltip:ShowCooltip() + GameCooltip:ShowCooltip (textentry, "tooltip") end textentry.mouse_over = true diff --git a/functions/boss.lua b/functions/boss.lua index 53d6e85c..46c3f274 100644 --- a/functions/boss.lua +++ b/functions/boss.lua @@ -143,7 +143,11 @@ do --> return the boss portrit function _detalhes:GetBossPortrait (mapid, bossindex) - return _detalhes.EncounterInformation [mapid] and _detalhes.EncounterInformation [mapid].encounters [bossindex].portrait + if (mapid and bossindex) then + return _detalhes.EncounterInformation [mapid] and _detalhes.EncounterInformation [mapid].encounters [bossindex].portrait + else + return false + end end ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/functions/savedata.lua b/functions/savedata.lua index b98289cb..05dc1e52 100644 --- a/functions/savedata.lua +++ b/functions/savedata.lua @@ -13,6 +13,10 @@ end function _detalhes:SaveDataOnLogout() +if (true) then + return +end + if (_detalhes.wipe_full_config) then _detalhes_global = nil _detalhes_database = nil @@ -417,18 +421,28 @@ function _detalhes:WipeConfig() end +local is_exception = { + ["nick_tag_cache"] = true +} + function _detalhes:SaveConfig() + --> nicktag cache + --_detalhes.copy_nick_tag = table_deepcopy (_detalhes_database.nick_tag_cache) + --> cleanup _detalhes:PrepareTablesForSave() _detalhes_database.tabela_instancias = _detalhes.tabela_instancias + _detalhes_database.tabela_historico = _detalhes.tabela_historico --> buffs _detalhes.Buffs:SaveBuffs() --> salva o container do personagem for key, value in pairs (_detalhes.default_player_data) do - _detalhes_database [key] = _detalhes [key] + if (not is_exception [key]) then + _detalhes_database [key] = _detalhes [key] + end end --> salva o container das globais diff --git a/functions/skins.lua b/functions/skins.lua index f34d0062..a9597084 100644 --- a/functions/skins.lua +++ b/functions/skins.lua @@ -53,6 +53,7 @@ local _ instance_cprops = { menu_anchor = {5, 1}, + plugins_grow_direction = 2, } }) @@ -94,7 +95,7 @@ local _ --overwrites instance_cprops = { hide_icon = true, - menu_anchor = {-18, 1}, + menu_anchor = {-81, 1, side = 2}, instance_button_anchor = {-12, 3}, instancebutton_info = {text_color = {.8, .6, .0, 0.8}, text_face = "Friz Quadrata TT", text_size = 10, color_overlay = {1, 1, 1, 1}}, resetbutton_info = {text_color = {.8, .8, .8, 0.8}, text_color_small = {0, 0, 0, 0}, text_face = "Friz Quadrata TT", text_size = 12, color_overlay = {1, 1, 1, 1}, always_small = true}, @@ -102,6 +103,12 @@ local _ show_statusbar = false, color = {.3, .3, .3, 1}, bg_alpha = 0.2, + plugins_grow_direction = 1, + row_info = { + texture = "Blizzard Character Skills Bar", + font_face = "Arial Narrow", + }, + attribute_text = {enabled = true, side = 1, text_size = 12, anchor = {-18, 4}, text_color = {1, 1, 1, 1}, text_face = "Arial Narrow"}, }, callback = function (skin) @@ -349,10 +356,14 @@ local _ --reset button reset_button_coords = {0.01904296875, 0.0673828125, 0.50244140625, 0.51708984375}, - reset_button_small_coords = {0.11669921875, 0.13720703125, 0.50244140625, 0.51708984375}, - + --reset_button_small_coords = {0.11669921875, 0.13720703125, 0.50244140625, 0.51708984375}, + reset_button_small_coords = {0.1162109375, 0.13671875, 0.50390625, 0.5146484375+0.00048828125+0.00048828125}, -- 119 516 140 527 + reset_button_small_size = {22, 12}, --instance button - instance_button_coords = {0.01904296875, 0.04736328125, 0.48388671875, 0.49853515625}, + --instance_button_coords = {0.01904296875, 0.04736328125, 0.48388671875, 0.49853515625}, + instance_button_coords = {0.0185546875, 0.046875+0.00048828125, 0.4833984375, 0.498046875+0.00048828125},--19 495 48 510 + instance_button_size = 12, + --0.00048828125 --close button close_button_coords = {0.01904296875, 0.03369140625, 0.52197265625, 0.53662109375}, @@ -399,15 +410,17 @@ local _ space = {left = 1, right = -2, between = 0}, }, wallpaper = { - overlay = {0, 0, 0, 0.498038113117218}, + overlay = {0, 0, 0}, width = 227.1267691385938, texcoord = {0.001000000014901161, 0.1710000038146973, 0.001000000014901161, 0.3539316177368164}, enabled = true, anchor = "all", height = 89.00001440917025, - alpha = 0.4980392451398075, + alpha = 0.6, texture = "Interface\\Glues\\CREDITS\\Badlands3", } } }) + + --alpha = 0.4980392451398075, \ No newline at end of file diff --git a/functions/slash.lua b/functions/slash.lua index cadf79dc..dbdb26ff 100644 --- a/functions/slash.lua +++ b/functions/slash.lua @@ -250,6 +250,42 @@ function SlashCmdList.DETAILS (msg, editbox) --vardump (_detalhes.ResetButton) + elseif (command == "buffsof") then + + local playername, segment = rest:match("^(%S*)%s*(.-)$") + segment = tonumber (segment or 0) + print ("dumping buffs of ", playername, segment) + + local c = _detalhes:GetCombat ("current") + if (c) then + + local playerActor + + if (segment and segment ~= 0) then + local c = _detalhes:GetCombat (segment) + playerActor = c (4, playername) + print ("using segment", segment, c, "player actor:", playerActor) + else + playerActor = c (4, playername) + end + + print ("actor table: ", playerActor) + + if (not playerActor) then + print ("actor table not found") + return + end + + if (playerActor and playerActor.buff_uptime_spell_tables and playerActor.buff_uptime_spell_tables._ActorTable) then + for spellid, spellTable in pairs (playerActor.buff_uptime_spell_tables._ActorTable) do + local spellname = GetSpellInfo (spellid) + if (spellname) then + print (spellid, spellname, spellTable.uptime) + end + end + end + end + elseif (msg == "alert") then local instancia = _detalhes.tabela_instancias [1] diff --git a/functions/spells.lua b/functions/spells.lua index 9a915919..9f269625 100644 --- a/functions/spells.lua +++ b/functions/spells.lua @@ -967,6 +967,11 @@ do [115310] = {180, 0, 0}, -- Revival [119582] = {60, 0, 0}, -- Purifying Brew [116844] = {45, 8, 0}, --Ring of Peace + [115308] = {0, 6, 0}, --Elusive Brew + [122783] = {90, 6}, -- Diffuse Magic + [122278] = {90, 45}, -- Dampen Harm + [115176] = {180, 8}, -- Zen Meditation + [115203] = {180, 20}, -- Fortifying Brew --["PALADIN"] = {}, [633] = {600, 0, 0}, --Lay on Hands @@ -1024,12 +1029,8 @@ do ["MAGE"] = {45438}, -- Monk - [115203] = {180, 20}, -- Fortifying Brew [122470] = {90, 10}, -- Touch of Karma - [115176] = {180, 8}, -- Zen Meditation [115213] = {180, 6}, -- Avert Harm - [122278] = {90, 45}, -- Dampen Harm - [122783] = {90, 6}, -- Diffuse Magic ["MONK"] = {115295, 115203, 122470, 115176, 116849, 115213, 122278, 122783}, -- Paladin diff --git a/gumps/janela_info.lua b/gumps/janela_info.lua index 0a692e39..c8169226 100644 --- a/gumps/janela_info.lua +++ b/gumps/janela_info.lua @@ -63,13 +63,45 @@ function _detalhes:AbreJanelaInfo (jogador) if (nome:find ("-")) then nome = nome:gsub (("-.*"), "") end - info.nome:SetText (nome) - + if (info.instancia.atributo == 1 and info.instancia.sub_atributo == 6) then --> enemy atributo_nome = sub_atributos [info.atributo].lista [1] .. " " .. Loc ["STRING_ACTORFRAME_REPORTOF"] end - + + info.nome:SetText (nome) info.atributo_nome:SetText (atributo_nome) + + local avatar = NickTag:GetNicknameTable (jogador.serial) + if (avatar) then + + info.avatar:SetTexture (avatar [2]) + info.avatar_bg:SetTexture (avatar [4]) + info.avatar_bg:SetTexCoord (unpack (avatar [5])) + info.avatar_bg:SetVertexColor (unpack (avatar [6])) + + info.avatar_nick:SetText (avatar [1] or nome) + info.avatar_attribute:SetText (atributo_nome) + info.avatar_attribute:SetPoint ("CENTER", info.avatar_nick, "CENTER", 0, 14) + + info.avatar:Show() + info.avatar_bg:Show() + info.avatar_nick:Show() + info.avatar_attribute:Show() + + info.nome:Hide() + info.atributo_nome:Hide() + else + info.avatar:Hide() + info.avatar_bg:Hide() + info.avatar_nick:Hide() + info.avatar_attribute:Hide() + + info.nome:Show() + info.atributo_nome:Show() + end + + + info.atributo_nome:SetPoint ("CENTER", info.nome, "CENTER", 0, 14) gump:TrocaBackgroundInfo (info) @@ -547,6 +579,25 @@ local function cria_textos (este_gump) este_gump.targets = este_gump:CreateFontString (nil, "OVERLAY", "QuestFont_Large") este_gump.targets:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 24, -235) este_gump.targets:SetText (Loc ["STRING_TARGETS"] .. ":") + + este_gump.avatar = este_gump:CreateTexture (nil, "overlay") + este_gump.avatar_bg = este_gump:CreateTexture (nil, "overlay") + este_gump.avatar_attribute = este_gump:CreateFontString (nil, "overlay", "GameFontHighlightSmall") + este_gump.avatar_nick = este_gump:CreateFontString (nil, "overlay", "QuestFont_Large") + este_gump.avatar:SetDrawLayer ("overlay", 3) + este_gump.avatar_bg:SetDrawLayer ("overlay", 2) + este_gump.avatar_nick:SetDrawLayer ("overlay", 4) + + este_gump.avatar:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 70, -10) + este_gump.avatar_bg:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 70, -12) + este_gump.avatar_bg:SetSize (275, 60) + + este_gump.avatar_nick:SetPoint ("TOPLEFT", este_gump, "TOPLEFT", 208, -54) + + este_gump.avatar:Hide() + este_gump.avatar_bg:Hide() + este_gump.avatar_nick:Hide() + end @@ -1087,25 +1138,50 @@ function gump:CriaJanelaInfo() --SPELLS local spells_texture = frame:CreateTexture (nil, "artwork") - spells_texture:SetPoint ("topleft", frame, "topleft", 400, -100) + spells_texture:SetPoint ("topleft", frame, "topleft", 400, -80) spells_texture:SetTexture ([[Interface\ACHIEVEMENTFRAME\UI-Achievement-HorizontalShadow]]) spells_texture:SetSize (128, 16) local spells_text = frame:CreateFontString (nil, "artwork", "GameFontNormal") spells_text:SetText ("Spells") spells_text :SetPoint ("left", spells_texture, "left", 2, 0) - for i = 1, 9 do - local icon = frame:CreateTexture (nil, "artwork") + local frame_tooltip_onenter = function (self) + if (self.spellid) then + self:SetBackdrop ({bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 512, edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", edgeSize = 8}) + self:SetBackdropColor (.5, .5, .5, .5) + GameTooltip:SetOwner (self, "ANCHOR_TOPLEFT") + GameTooltip:SetSpellByID (self.spellid) + GameTooltip:Show() + end + end + local frame_tooltip_onleave = function (self) + if (self.spellid) then + self:SetBackdrop (nil) + GameTooltip:Hide() + end + end + + for i = 1, 10 do + local frame_tooltip = CreateFrame ("frame", nil, frame) + frame_tooltip:SetPoint ("topleft", frame, "topleft", 405, -100 + ((i-1)*15)*-1) + frame_tooltip:SetSize (150, 14) + frame_tooltip:SetScript ("OnEnter", frame_tooltip_onenter) + frame_tooltip:SetScript ("OnLeave", frame_tooltip_onleave) + + local icon = frame_tooltip:CreateTexture (nil, "artwork") icon:SetSize (14, 14) - icon:SetPoint ("topleft", frame, "topleft", 405, -120 + ((i-1)*15)*-1) - local spell = frame:CreateFontString (nil, "artwork", "GameFontHighlightSmall") + icon:SetPoint ("left", frame_tooltip, "left") + + local spell = frame_tooltip:CreateFontString (nil, "artwork", "GameFontHighlightSmall") spell:SetPoint ("left", icon, "right", 2, 0) spell:SetText ("spell name:") --> localize-me spell:SetTextColor (.8, .8, .8, 1) - local spell_amt = frame:CreateFontString (nil, "artwork", "GameFontHighlightSmall") + + local spell_amt = frame_tooltip:CreateFontString (nil, "artwork", "GameFontHighlightSmall") spell_amt:SetPoint ("left", spell, "right", 2, 0) spell_amt:SetText ("0") - tab ["spell" .. i] = {spell, spell_amt, icon} + + tab ["spell" .. i] = {spell, spell_amt, icon, frame_tooltip} end end @@ -1139,19 +1215,24 @@ function gump:CriaJanelaInfo() return ps, diff end - local spells_by_class = { + -- ~buff + local spells_by_class = { --buffss uptime ["DRUID"] = { [132402] = true, --savage defense [135286] = true, -- tooth and claw }, ["DEATHKNIGHT"] = { - [145676] = true, --riposte + [145677] = true, --riposte [77535] = true, --blood shield + --[49222] = true, --bone shield + [51460] = true, --runic corruption }, ["MONK"] = { - [118604] = true, --guard + [115295] = true, --guard [115307] = true, --shuffle [115308] = true, --elusive brew + --[128939] = true, --elusive brew + [125359] = true, --tiger power }, ["PALADIN"] = { [132403] = true, --shield of the righteous @@ -1182,7 +1263,9 @@ function gump:CriaJanelaInfo() tab.tankname:SetText ("Avoidance of\n" .. n) --> localize-me --> damage taken - local damagetaken = player.damage_taken + local playerdamage = combat (1, player.nome) + + local damagetaken = playerdamage.damage_taken local last_damage_received = 0 if (last_actor) then last_damage_received = last_actor.damage_taken / last_combat:GetCombatTime() @@ -1194,11 +1277,11 @@ function gump:CriaJanelaInfo() tab.damagepersecond:SetText (_detalhes:comma_value (_math_floor (ps)) .. " (" .. diff .. ")") --> absorbs - local totalabsorbs = player.avoidance.overall.ABSORB_AMT + local totalabsorbs = playerdamage.avoidance.overall.ABSORB_AMT local incomingtotal = damagetaken + totalabsorbs local last_total_absorbs = 0 - if (last_actor) then + if (last_actor and last_actor.avoidance) then last_total_absorbs = last_actor.avoidance.overall.ABSORB_AMT / last_combat:GetCombatTime() end @@ -1208,32 +1291,32 @@ function gump:CriaJanelaInfo() tab.absorbstotalpersecond:SetText (_detalhes:comma_value (_math_floor (ps)) .. " (" .. diff .. ")") --> dodge - local totaldodge = player.avoidance.overall.DODGE + local totaldodge = playerdamage.avoidance.overall.DODGE tab.dodge:SetText (totaldodge) local last_total_dodge = 0 - if (last_actor) then + if (last_actor and last_actor.avoidance) then last_total_dodge = last_actor.avoidance.overall.DODGE / last_combat:GetCombatTime() end local ps, diff = getpercent (totaldodge, last_total_dodge, elapsed_time, true) tab.dodgepersecond:SetText ( string.format ("%.2f", ps) .. " (" .. diff .. ")") --> parry - local totalparry = player.avoidance.overall.PARRY + local totalparry = playerdamage.avoidance.overall.PARRY tab.parry:SetText (totalparry) local last_total_parry = 0 - if (last_actor) then + if (last_actor and last_actor.avoidance) then last_total_parry = last_actor.avoidance.overall.PARRY / last_combat:GetCombatTime() end local ps, diff = getpercent (totalparry, last_total_parry, elapsed_time, true) tab.parrypersecond:SetText (string.format ("%.2f", ps) .. " (" .. diff .. ")") --> absorb - local fullabsorb = player.avoidance.overall.FULL_ABSORBED - local halfabsorb = player.avoidance.overall.PARTIAL_ABSORBED - local halfabsorb_amt = player.avoidance.overall.PARTIAL_ABSORB_AMT - local noabsorb = player.avoidance.overall.FULL_HIT + local fullabsorb = playerdamage.avoidance.overall.FULL_ABSORBED + local halfabsorb = playerdamage.avoidance.overall.PARTIAL_ABSORBED + local halfabsorb_amt = playerdamage.avoidance.overall.PARTIAL_ABSORB_AMT + local noabsorb = playerdamage.avoidance.overall.FULL_HIT tab.fullsbsorbed:SetText (fullabsorb) tab.partiallyabsorbed:SetText (halfabsorb) @@ -1242,7 +1325,7 @@ function gump:CriaJanelaInfo() if (halfabsorb_amt > 0) then local average = halfabsorb_amt / halfabsorb --tenho o average local last_average = 0 - if (last_actor) then + if (last_actor and last_actor.avoidance) then last_average = last_actor.avoidance.overall.PARTIAL_ABSORB_AMT / last_actor.avoidance.overall.PARTIAL_ABSORBED end @@ -1372,7 +1455,8 @@ function gump:CriaJanelaInfo() local esta_habilidade = cooldowns_usados[i] local nome_magia, _, icone_magia = _GetSpellInfo (esta_habilidade[1]) - local label1, label2, icon1 = unpack (tab ["spell" .. i]) + local label1, label2, icon1, framebg = unpack (tab ["spell" .. i]) + framebg.spellid = esta_habilidade[1] label1:SetText (nome_magia .. ":") label2:SetText (esta_habilidade[2]) @@ -1387,18 +1471,24 @@ function gump:CriaJanelaInfo() - --> buffs de druida - if (index_used < 9) then + --> buffs uptime + if (index_used < 11) then if (misc_player.buff_uptime_spell_tables) then local minha_tabela = misc_player.buff_uptime_spell_tables._ActorTable + + local encounter_time = combat:GetCombatTime() + for _spellid, _tabela in pairs (minha_tabela) do - if (spells_by_class [player.classe] [_spellid] and index_used < 9) then + if (spells_by_class [player.classe] [_spellid] and index_used <= 10) then local nome_magia, _, icone_magia = GetSpellInfo (_spellid) - local label1, label2, icon1 = unpack (tab ["spell" .. index_used]) + local label1, label2, icon1, framebg = unpack (tab ["spell" .. index_used]) + framebg.spellid = _spellid + + local t = _tabela.uptime / encounter_time * 100 label1:SetText (nome_magia .. ":") local minutos, segundos = _math_floor (_tabela.uptime / 60), _math_floor (_tabela.uptime % 60) - label2:SetText (minutos .. "m " .. segundos .. "s") + label2:SetText (minutos .. "m " .. segundos .. "s" .. " (" .. _math_floor (t) .. "%)") icon1:SetTexture (icone_magia) icon1:SetTexCoord (0.0625, 0.953125, 0.0625, 0.953125) @@ -1408,8 +1498,10 @@ function gump:CriaJanelaInfo() end end - for i = index_used, 9 do - local label1, label2, icon1 = unpack (tab ["spell" .. i]) + for i = index_used, 10 do + local label1, label2, icon1, framebg = unpack (tab ["spell" .. i]) + + framebg.spellid = nil label1:SetText ("-- -- -- --") label2:SetText ("") icon1:SetTexture (nil) diff --git a/gumps/janela_options.lua b/gumps/janela_options.lua index cd282b74..6cd19db4 100644 --- a/gumps/janela_options.lua +++ b/gumps/janela_options.lua @@ -11,6 +11,15 @@ local _ local preset_version = 3 _detalhes.preset_version = preset_version +local slider_backdrop = {edgeFile = "Interface\\Buttons\\UI-SliderBar-Border", edgeSize = 8, +bgFile = [[Interface\ACHIEVEMENTFRAME\UI-GuildAchievement-Parchment-Horizontal-Desaturated]], tile = true, tileSize = 130, insets = {left = 1, right = 1, top = 5, bottom = 5}} +local slider_backdrop_color = {1, 1, 1, 1} + +local dropdown_backdrop = {edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", edgeSize = 10, +bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", tile = true, tileSize = 16, insets = {left = 1, right = 1, top = 0, bottom = 1}} +local dropdown_backdrop_onenter = {0, 0, 0, 1} +local dropdown_backdrop_onleave = {.1, .1, .1, .9} + function _detalhes:OpenOptionsWindow (instance) GameCooltip:Close() @@ -47,6 +56,13 @@ function _detalhes:OpenOptionsWindow (instance) window.backdrop = nil _G.DetailsOptionsWindow.instance = instance + window:SetHook ("OnHide", function() + DetailsDisable3D:Hide() + DetailsOptionsWindowDisable3D:SetChecked (false) + window.Disable3DColorPick:Hide() + window.Disable3DColorPick:Cancel() + end) + --x 9 897 y 9 592 local background = g:NewImage (window, _, "$parentBackground", "background", 897, 592, [[Interface\AddOns\Details\images\options_window]]) @@ -185,8 +201,57 @@ function _detalhes:OpenOptionsWindow (instance) local instances_string = g:NewLabel (window, nil, nil, "instancetext", Loc ["STRING_OPTIONS_EDITINSTANCE"], "GameFontNormal", 12) instances_string:SetPoint ("right", instances, "left", -2) - --instances:Hide() - --instances_string:Hide() + local f = CreateFrame ("frame", "DetailsDisable3D", UIParent) + tinsert (UISpecialFrames, "DetailsDisable3D") + f:SetFrameStrata ("BACKGROUND") + f:SetFrameLevel (0) + f:SetPoint ("topleft", WorldFrame, "topleft") + f:SetPoint ("bottomright", WorldFrame, "bottomright") + f:Hide() + + local t = f:CreateTexture ("DetailsDisable3DTexture", "background") + t:SetAllPoints (f) + t:SetTexture (.5, .5, .5, 1) + + local c = f:CreateTexture ("DetailsDisable3DTexture", "border") + c:SetPoint ("center", f, "center", 0, -5) + c:SetTexture ([[Interface\Challenges\challenges-metalglow]]) + c:SetDesaturated (true) + c:SetAlpha (.6) + local tt = f:CreateFontString (nil, "artwork", "GameFontHighlightSmall") + tt:SetPoint ("center", f, "center", 0, -5) + tt:SetText ("Character\nPosition") + + local hide_3d_world = CreateFrame ("CheckButton", "DetailsOptionsWindowDisable3D", window.widget, "ChatConfigCheckButtonTemplate") + hide_3d_world:SetPoint ("bottomleft", window.widget, "bottomleft", 28, 7) + DetailsOptionsWindowDisable3DText:SetText ("Interface Edit Mode") + DetailsOptionsWindowDisable3DText:ClearAllPoints() + DetailsOptionsWindowDisable3DText:SetPoint ("left", hide_3d_world, "right", -2, 1) + DetailsOptionsWindowDisable3DText:SetTextColor (1, 0.8, 0) + hide_3d_world.tooltip = "Goodbye Cruel World :(" + hide_3d_world:SetHitRectInsets (0, -105, 0, 0) + + hide_3d_world:SetScript ("OnClick", function() + if (hide_3d_world:GetChecked()) then + f:Show() + window.Disable3DColorPick:Show() + else + f:Hide() + window.Disable3DColorPick:Hide() + end + end) + + local last_change = GetTime() + local disable3dcolor_callback = function (button, r, g, b) + if (last_change+0.5 < GetTime()) then --protection agaist fast color changes + t:SetTexture (r, g, b) + last_change = GetTime() + end + end + g:NewColorPickButton (window, "$parentDisable3DColorPick", "Disable3DColorPick", disable3dcolor_callback) + window.Disable3DColorPick:SetPoint ("left", hide_3d_world, "right", 120, 0) + window.Disable3DColorPick:SetColor (.5, .5, .5, 1) + window.Disable3DColorPick:Hide() --> left panel buttons @@ -206,16 +271,16 @@ function _detalhes:OpenOptionsWindow (instance) [12] = "Skins", } - local menus = { + local menus = { --labels nos menus {"Display", "Combat", "Profiles"}, - {"Skin Selection", "Row Settings", "Row Texts", "Window Settings", "Menu Bar", "Reset/Instance/Close", "Wallpaper"}, + {"Skin Selection", "Row Settings", "Row Texts and Extra Bars", "Window Settings", "Menus: Left Buttons", "Menus: Right Buttons", "Wallpaper"}, {"Performance Tweaks", "Data Collector"}, {"Plugins Management"} } local menus2 = { "Display", "Combat", - "Skin Selection", "Row Settings", "Row Texts", "Window Settings", "Menu Bar", "Reset/Instance/Close", "Wallpaper", + "Skin Selection", "Row Settings", "Row Texts and Extra Bars", "Window Settings", "Menus: Left Buttons", "Menus: Right Buttons", "Wallpaper", "Performance Tweaks", "Data Collector", "Plugins Management", "Profiles" } @@ -294,6 +359,10 @@ function _detalhes:OpenOptionsWindow (instance) local sub_menu_index = 1 local textcolor = {.8, .8, .8, 1} + local last_pressed + local all_buttons = {} + local true_index = 1 + local selected_textcolor = "wheat" local button_onenter = function (self) self.MyObject.my_bg_texture:SetVertexColor (1, 1, 1, 1) @@ -301,10 +370,22 @@ function _detalhes:OpenOptionsWindow (instance) end local button_onleave = function (self) self.MyObject.my_bg_texture:SetVertexColor (1, 1, 1, .5) - self.MyObject.textcolor = textcolor + if (last_pressed ~= self.MyObject) then + self.MyObject.textcolor = textcolor + else + self.MyObject.textcolor = selected_textcolor + end + end + local button_mouse_up = function (button) + button = button.MyObject + if (last_pressed ~= button) then + button.func (button.param1, button.param2, button) + last_pressed.widget.text:SetPoint ("left", last_pressed.widget, "left", 2, 0) + last_pressed.textcolor = textcolor + last_pressed = button + end + return true end - - local true_index = 1 --move buttons creation to loading process function window:create_left_menu() @@ -328,10 +409,12 @@ function _detalhes:OpenOptionsWindow (instance) button.textcolor = textcolor button.textsize = 11 button.my_bg_texture = texture + tinsert (all_buttons, button) y = y - 16 button:SetHook ("OnEnter", button_onenter) button:SetHook ("OnLeave", button_onleave) + button:SetHook ("OnMouseUp", button_mouse_up) true_index = true_index + 1 @@ -341,7 +424,7 @@ function _detalhes:OpenOptionsWindow (instance) end end - + window.options = { [1] = {}, [2] = {}, @@ -542,13 +625,30 @@ function _detalhes:OpenOptionsWindow (instance) else parent.background_frame = f end + + if (label:GetObjectType() == "FontString") then + local t = frameX:CreateTexture (nil, "artwork") + t:SetPoint ("left", label.widget or label, "left") + t:SetSize (label:GetStringWidth(), 12) + t:SetTexture ([[Interface\ACHIEVEMENTFRAME\UI-Achievement-HorizontalShadow]]) + t:SetDesaturated (true) + t:SetAlpha (.5) + end + + end + + function window:CreateLineBackground (frame, widget_name, label_name, desc_loc) + frame [widget_name].info = desc_loc + window:create_line_background (frame, frame [label_name], frame [widget_name]) + frame [widget_name]:SetHook ("OnEnter", background_on_enter) + frame [widget_name]:SetHook ("OnLeave", background_on_leave) end select_options (1) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --- General Settings - Display +-- General Settings - Display ~1 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- function window:CreateFrame1() @@ -640,8 +740,12 @@ function window:CreateFrame1() titulo_display_desc.width = 320 g:NewLabel (frame1, _, "$parentSliderLabel", "segmentsLabel", Loc ["STRING_OPTIONS_MAXSEGMENTS"], "GameFontHighlightLeft") - g:NewSlider (frame1, _, "$parentSlider", "segmentsSlider", SLIDER_WIDTH, 20, 1, 25, 1, _detalhes.segments_amount) - frame1.segmentsSlider:SetPoint ("left", frame1.segmentsLabel, "right", 2, 0) + local s = g:NewSlider (frame1, _, "$parentSlider", "segmentsSlider", SLIDER_WIDTH, 20, 1, 25, 1, _detalhes.segments_amount) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + + frame1.segmentsSlider:SetPoint ("left", frame1.segmentsLabel, "right", 2, -1) frame1.segmentsSlider:SetHook ("OnValueChange", function (self, _, amount) --> slider, fixedValue, sliderValue _detalhes.segments_amount = math.floor (amount) end) @@ -682,8 +786,12 @@ function window:CreateFrame1() --> Max Instances g:NewLabel (frame1, _, "$parentLabelMaxInstances", "maxInstancesLabel", Loc ["STRING_OPTIONS_MAXINSTANCES"], "GameFontHighlightLeft") -- - g:NewSlider (frame1, _, "$parentSliderMaxInstances", "maxInstancesSlider", SLIDER_WIDTH, 20, 12, 30, 1, _detalhes.instances_amount) -- min, max, step, defaultv - frame1.maxInstancesSlider:SetPoint ("left", frame1.maxInstancesLabel, "right", 2, 0) + local s = g:NewSlider (frame1, _, "$parentSliderMaxInstances", "maxInstancesSlider", SLIDER_WIDTH, 20, 12, 30, 1, _detalhes.instances_amount) -- min, max, step, defaultv + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + + frame1.maxInstancesSlider:SetPoint ("left", frame1.maxInstancesLabel, "right", 2, -1) frame1.maxInstancesSlider:SetHook ("OnValueChange", function (self, _, amount) --> slider, fixedValue, sliderValue _detalhes.instances_amount = amount end) @@ -731,7 +839,12 @@ function window:CreateFrame1() return abbreviationOptions end - g:NewDropDown (frame1, _, "$parentAbbreviateDropdown", "dpsAbbreviateDropdown", 160, 20, buildAbbreviationMenu, _detalhes.ps_abbreviation) -- func, default + local d = g:NewDropDown (frame1, _, "$parentAbbreviateDropdown", "dpsAbbreviateDropdown", 160, 20, buildAbbreviationMenu, _detalhes.ps_abbreviation) -- func, default + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + frame1.dpsAbbreviateDropdown:SetPoint ("left", frame1.dpsAbbreviateLabel, "right", 2, 0) frame1.dpsAbbreviateDropdown.info = Loc ["STRING_OPTIONS_PS_ABBREVIATE_DESC"] @@ -746,7 +859,7 @@ function window:CreateFrame1() frame1.chooseAvatarButton:SetPoint (11, -90) frame1.avatarPreview:SetPoint (-8, -107) - frame1.avatarPreview2:SetPoint (-8, -107) + frame1.avatarPreview2:SetPoint (-8, -109) frame1.avatarNickname:SetPoint (100, -142) local avatar = NickTag:GetNicknameAvatar (UnitGUID ("player"), NICKTAG_DEFAULT_AVATAR, true) @@ -760,6 +873,7 @@ function window:CreateFrame1() --> animate bars g:NewLabel (frame1, _, "$parentAnimateLabel", "animateLabel", Loc ["STRING_OPTIONS_ANIMATEBARS"], "GameFontHighlightLeft") + g:NewSwitch (frame1, _, "$parentAnimateSlider", "animateSlider", 60, 20, _, _, _detalhes.use_row_animations) -- ltext, rtext, defaultv frame1.animateSlider:SetPoint ("left",frame1.animateLabel, "right", 2, 0) frame1.animateSlider.info = Loc ["STRING_OPTIONS_ANIMATEBARS_DESC"] @@ -773,10 +887,13 @@ function window:CreateFrame1() --> update speed - g:NewSlider (frame1, _, "$parentSliderUpdateSpeed", "updatespeedSlider", SLIDER_WIDTH, 20, 0.3, 3, 0.1, _detalhes.update_speed, true) + local s = g:NewSlider (frame1, _, "$parentSliderUpdateSpeed", "updatespeedSlider", SLIDER_WIDTH, 20, 0.3, 3, 0.1, _detalhes.update_speed, true) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + g:NewLabel (frame1, _, "$parentUpdateSpeedLabel", "updatespeedLabel", Loc ["STRING_OPTIONS_WINDOWSPEED"], "GameFontHighlightLeft") -- - frame1.updatespeedSlider:SetPoint ("left", frame1.updatespeedLabel, "right", 2, 0) + frame1.updatespeedSlider:SetPoint ("left", frame1.updatespeedLabel, "right", 2, -1) frame1.updatespeedSlider:SetThumbSize (50) frame1.updatespeedSlider.useDecimals = true local updateColor = function (slider, value) @@ -804,23 +921,25 @@ function window:CreateFrame1() --> anchors + local w_start = 10 + titulo_display:SetPoint (10, -200) titulo_display_desc:SetPoint (10, -220) - frame1.animateLabel:SetPoint (10, -260) - frame1.updatespeedLabel:SetPoint (10, -285) + frame1.animateLabel:SetPoint (w_start, -260) + frame1.updatespeedLabel:SetPoint (w_start, -285) - frame1.segmentsLabel:SetPoint (10, -310) - frame1.scrollLabel:SetPoint (10, -335) - frame1.maxInstancesLabel:SetPoint (10, -360) - frame1.minimapLabel:SetPoint (10, -385) - frame1.dpsAbbreviateLabel:SetPoint (10, -410) - frame1.realmNameLabel:SetPoint (10, -435) + frame1.segmentsLabel:SetPoint (w_start, -310) + frame1.scrollLabel:SetPoint (w_start, -335) + frame1.maxInstancesLabel:SetPoint (w_start, -360) + frame1.minimapLabel:SetPoint (w_start, -385) + frame1.dpsAbbreviateLabel:SetPoint (w_start, -410) + frame1.realmNameLabel:SetPoint (w_start, -435) end --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --- General Settings - Combat +-- General Settings - Combat ~2 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- function window:CreateFrame2() @@ -863,7 +982,12 @@ function window:CreateFrame2() local buildTimeTypeMenu = function() return timetypeOptions end - g:NewDropDown (frame2, _, "$parentTTDropdown", "timetypeDropdown", 160, 20, buildTimeTypeMenu, nil) -- func, default + local d = g:NewDropDown (frame2, _, "$parentTTDropdown", "timetypeDropdown", 160, 20, buildTimeTypeMenu, nil) -- func, default + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + frame2.timetypeDropdown:SetPoint ("left", frame2.timetypeLabel, "right", 2, 0) frame2.timetypeDropdown.info = Loc ["STRING_OPTIONS_TIMEMEASURE_DESC"] @@ -882,7 +1006,11 @@ function window:CreateFrame2() instance.hide_in_combat = value end - g:NewSlider (frame2, _, "$parentHideOnCombatAlphaSlider", "hideOnCombatAlphaSlider", SLIDER_WIDTH, 20, 0, 100, 1, _G.DetailsOptionsWindow.instance.hide_in_combat_alpha) -- min, max, step, defaultv + local s = g:NewSlider (frame2, _, "$parentHideOnCombatAlphaSlider", "hideOnCombatAlphaSlider", SLIDER_WIDTH, 20, 0, 100, 1, _G.DetailsOptionsWindow.instance.hide_in_combat_alpha) -- min, max, step, defaultv + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + frame2.hideOnCombatAlphaSlider:SetPoint ("left", frame2.hideOnCombatAlphaLabel, "right", 2, 0) frame2.hideOnCombatAlphaSlider:SetHook ("OnValueChange", function (self, instance, amount) --> slider, fixedValue, sliderValue instance.hide_in_combat_alpha = amount @@ -947,7 +1075,12 @@ function window:CreateFrame2() return t end - g:NewDropDown (frame2, _, "$parentAutoSwitchDropdown", "autoSwitchDropdown", 160, 20, buildSwitchMenu, 1) -- func, default + local d = g:NewDropDown (frame2, _, "$parentAutoSwitchDropdown", "autoSwitchDropdown", 160, 20, buildSwitchMenu, 1) -- func, default + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + frame2.autoSwitchDropdown:SetPoint ("left", frame2.autoSwitchLabel, "right", 2, 0) frame2.autoSwitchDropdown.info = Loc ["STRING_OPTIONS_AUTO_SWITCH_DESC"] @@ -982,7 +1115,7 @@ function window:CreateFrame2() end --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --- General Settings - Profiles +-- General Settings - Profiles ~13 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- function window:CreateFrame13() @@ -1024,6 +1157,12 @@ function window:CreateFrame13() return menu end local select_profile_dropdown = g:NewDropDown (frame13, _, "$parentSelectProfileDropdown", "selectProfileDropdown", 160, 20, build_profile_menu, 1) + local d = select_profile_dropdown + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + local select_profile_label = g:NewLabel (frame13, _, "$parentSelectProfileLabel", "selectProfileLabel", Loc ["STRING_OPTIONS_PROFILES_SELECT"], "GameFontHighlightLeft") select_profile_dropdown:SetPoint ("left", select_profile_label, "right", 2, 0) @@ -1078,6 +1217,12 @@ function window:CreateFrame13() return menu end local select_profileCopy_dropdown = g:NewDropDown (frame13, _, "$parentSelectProfileCopyDropdown", "selectProfileCopyDropdown", 160, 20, build_copy_menu, 1) + local d = select_profileCopy_dropdown + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + local select_profileCopy_label = g:NewLabel (frame13, _, "$parentSelectProfileCopyLabel", "selectProfileCopyLabel", Loc ["STRING_OPTIONS_PROFILES_COPY"], "GameFontHighlightLeft") select_profileCopy_dropdown:SetPoint ("left", select_profileCopy_label, "right", 2, 0) @@ -1102,6 +1247,12 @@ function window:CreateFrame13() return menu end local select_profileErase_dropdown = g:NewDropDown (frame13, _, "$parentSelectProfileEraseDropdown", "selectProfileEraseDropdown", 160, 20, build_erase_menu, 1) + local d = select_profileErase_dropdown + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + local select_profileErase_label = g:NewLabel (frame13, _, "$parentSelectProfileEraseLabel", "selectProfileLabel", Loc ["STRING_OPTIONS_PROFILES_ERASE"], "GameFontHighlightLeft") select_profileErase_dropdown:SetPoint ("left", select_profileErase_label, "right", 2, 0) @@ -1145,7 +1296,7 @@ function window:CreateFrame13() end --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --- Appearance - Skin +-- Appearance - Skin ~3 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- function window:CreateFrame3() @@ -1223,7 +1374,12 @@ function window:CreateFrame3() end -- skin - g:NewDropDown (frame3, _, "$parentSkinDropdown", "skinDropdown", 160, 20, buildSkinMenu, 1) + local d = g:NewDropDown (frame3, _, "$parentSkinDropdown", "skinDropdown", 160, 20, buildSkinMenu, 1) + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + g:NewLabel (frame3, _, "$parentSkinLabel", "skinLabel", Loc ["STRING_OPTIONS_INSTANCE_SKIN"], "GameFontHighlightLeft") frame3.skinDropdown.info = Loc ["STRING_OPTIONS_INSTANCE_SKIN_DESC"] @@ -1375,7 +1531,12 @@ function window:CreateFrame3() return loadtable end - g:NewDropDown (frame3, _, "$parentCustomSkinLoadDropdown", "customSkinSelectDropdown", 160, 20, buildCustomSkinMenu, nil) -- func, default + local d = g:NewDropDown (frame3, _, "$parentCustomSkinLoadDropdown", "customSkinSelectDropdown", 160, 20, buildCustomSkinMenu, nil) -- func, default + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + frame3.customSkinSelectDropdown:SetPoint ("left", frame3.loadCustomSkinLabel, "right", 2, 0) frame3.customSkinSelectDropdown.info = Loc ["STRING_OPTIONS_SAVELOAD_LOAD_DESC"] @@ -1400,7 +1561,12 @@ function window:CreateFrame3() return loadtable2 end - g:NewDropDown (frame3, _, "$parentCustomSkinRemoveDropdown", "customSkinSelectToRemoveDropdown", 160, 20, buildCustomSkinToEraseMenu, nil) -- func, default + local d = g:NewDropDown (frame3, _, "$parentCustomSkinRemoveDropdown", "customSkinSelectToRemoveDropdown", 160, 20, buildCustomSkinToEraseMenu, nil) -- func, default + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + frame3.customSkinSelectToRemoveDropdown:SetPoint ("left", frame3.removeCustomSkinLabel, "right", 2, 0) frame3.customSkinSelectToRemoveDropdown.info = Loc ["STRING_OPTIONS_SAVELOAD_LOAD_DESC"] @@ -1437,7 +1603,7 @@ function window:CreateFrame3() end --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --- Appearance - Row +-- Appearance - Row ~4 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- function window:CreateFrame4() @@ -1470,13 +1636,14 @@ function window:CreateFrame4() g:NewSwitch (frame4, _, "$parentBackgroundClassColorSlider", "rowBackgroundColorByClassSlider", 60, 20, _, _, instance.row_info.texture_background_class_color) --> bar height - g:NewSlider (frame4, _, "$parentSliderRowHeight", "rowHeightSlider", SLIDER_WIDTH, 20, 10, 30, 1, tonumber (instance.row_info.height)) + local s = g:NewSlider (frame4, _, "$parentSliderRowHeight", "rowHeightSlider", SLIDER_WIDTH, 20, 10, 30, 1, tonumber (instance.row_info.height)) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) - --> bars grow direction - g:NewSwitch (frame4, _, "$parentBarGrowDirectionSlider", "barGrowDirectionSlider", 80, 20, Loc ["STRING_TOP"], Loc ["STRING_BOTTOM"], instance.bars_grow_direction, true) --> bars sort direction - g:NewSwitch (frame4, _, "$parentBarSortDirectionSlider", "barSortDirectionSlider", 80, 20, Loc ["STRING_TOP"], Loc ["STRING_BOTTOM"], instance.bars_sort_direction, true) + --> row texture color @@ -1507,7 +1674,11 @@ function window:CreateFrame4() end local buildTextureMenu2 = function() return texTable2 end - g:NewDropDown (frame4, _, "$parentRowBackgroundTextureDropdown", "rowBackgroundDropdown", DROPDOWN_WIDTH, 20, buildTextureMenu2, nil) + local d = g:NewDropDown (frame4, _, "$parentRowBackgroundTextureDropdown", "rowBackgroundDropdown", DROPDOWN_WIDTH, 20, buildTextureMenu2, nil) + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) --> bar texture local onSelectTexture = function (_, instance, textureName) @@ -1521,14 +1692,34 @@ function window:CreateFrame4() end local buildTextureMenu = function() return texTable end - g:NewDropDown (frame4, _, "$parentTextureDropdown", "textureDropdown", DROPDOWN_WIDTH, 20, buildTextureMenu, nil) + local d = g:NewDropDown (frame4, _, "$parentTextureDropdown", "textureDropdown", DROPDOWN_WIDTH, 20, buildTextureMenu, nil) + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) - -- bar grow direction + --> bar grow direction + local grow_switch_func = function (slider, value) + if (value == 1) then + return true + elseif (value == 2) then + return false + end + end + local grow_return_func = function (slider, value) + if (value) then + return 1 + else + return 2 + end + end + + g:NewSwitch (frame4, _, "$parentBarGrowDirectionSlider", "barGrowDirectionSlider", 80, 20, Loc ["STRING_BOTTOM"], Loc ["STRING_TOP"], instance.bars_grow_direction, nil, grow_switch_func, grow_return_func) g:NewLabel (frame4, _, "$parentBarGrowDirectionLabel", "barGrowDirectionLabel", Loc ["STRING_OPTIONS_BARGROW_DIRECTION"], "GameFontHighlightLeft") frame4.barGrowDirectionSlider:SetPoint ("left", frame4.barGrowDirectionLabel, "right", 2) frame4.barGrowDirectionSlider.OnSwitch = function (self, instance, value) - instance:SetBarGrowDirection (value and 2 or 1) + instance:SetBarGrowDirection (value) end frame4.barGrowDirectionSlider.thumb:SetSize (50, 12) @@ -1538,11 +1729,13 @@ function window:CreateFrame4() frame4.barGrowDirectionSlider:SetHook ("OnLeave", background_on_leave) -- bar sort direction + + g:NewSwitch (frame4, _, "$parentBarSortDirectionSlider", "barSortDirectionSlider", 80, 20, Loc ["STRING_BOTTOM"], Loc ["STRING_TOP"], instance.bars_sort_direction, nil, grow_switch_func, grow_return_func) g:NewLabel (frame4, _, "$parentBarSortDirectionLabel", "barSortDirectionLabel", Loc ["STRING_OPTIONS_BARSORT_DIRECTION"], "GameFontHighlightLeft") frame4.barSortDirectionSlider:SetPoint ("left", frame4.barSortDirectionLabel, "right", 2) frame4.barSortDirectionSlider.OnSwitch = function (self, instance, value) - instance.bars_sort_direction = value and 2 or 1 + instance.bars_sort_direction = value _detalhes:AtualizaGumpPrincipal (-1, true) end frame4.barSortDirectionSlider.thumb:SetSize (50, 12) @@ -1556,10 +1749,15 @@ function window:CreateFrame4() g:NewLabel (frame4, _, "$parentRowUpperTextureAnchor", "rowUpperTextureLabel", "Top Texture", "GameFontNormal") g:NewLabel (frame4, _, "$parentRowLowerTextureAnchor", "rowLowerTextureLabel", "Bottom Texture (background)", "GameFontNormal") + g:NewLabel (frame4, _, "$parentIconsAnchor", "rowIconsLabel", "Icons", "GameFontNormal") --alpha g:NewLabel (frame4, _, "$parentRowAlphaLabel", "rowAlphaLabel", "Alpha", "GameFontHighlightLeft") - g:NewSlider (frame4, _, "$parentRowAlphaSlider", "rowAlphaSlider", SLIDER_WIDTH, 20, 0.02, 1, 0.02, instance.row_info.alpha, true) + local s = g:NewSlider (frame4, _, "$parentRowAlphaSlider", "rowAlphaSlider", SLIDER_WIDTH, 20, 0.02, 1, 0.02, instance.row_info.alpha, true) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + frame4.rowAlphaSlider:SetPoint ("left", frame4.rowAlphaLabel, "right", 2, 0) frame4.rowAlphaSlider.useDecimals = true frame4.rowAlphaSlider:SetHook ("OnValueChange", function (self, instance, amount) @@ -1646,14 +1844,14 @@ function window:CreateFrame4() g:NewTextEntry (frame4, _, "$parentIconFileEntry", "iconFileEntry", 260, 20) frame4.iconFileEntry:SetPoint ("left", frame4.iconFileLabel, "right", 2, 0) - frame4.iconFileEntry.tooltip = "press escape to restore default value" + frame4.iconFileEntry.tooltip = "- Press escape to restore default value.\n- Leave empty to hide icons." frame4.iconFileEntry:SetHook ("OnEnterPressed", function() - instance:SetBarSettings (nil, nil, nil, nil, nil, nil, nil, nil, frame4.iconFileEntry.text) + _G.DetailsOptionsWindow.instance:SetBarSettings (nil, nil, nil, nil, nil, nil, nil, nil, frame4.iconFileEntry.text) end) frame4.iconFileEntry:SetHook ("OnEscapePressed", function() frame4.iconFileEntry:SetText ([[Interface\AddOns\Details\images\classes_small]]) frame4.iconFileEntry:ClearFocus() - instance:SetBarSettings (nil, nil, nil, nil, nil, nil, nil, nil, [[Interface\AddOns\Details\images\classes_small]]) + _G.DetailsOptionsWindow.instance:SetBarSettings (nil, nil, nil, nil, nil, nil, nil, nil, [[Interface\AddOns\Details\images\classes_small]]) return true end) @@ -1664,6 +1862,20 @@ function window:CreateFrame4() frame4.iconFileEntry.text = instance.row_info.icon_file + --bar start at + g:NewSwitch (frame4, _, "$parentBarStartSlider", "barStartSlider", 60, 20, nil, nil, instance.row_info.start_after_icon) + g:NewLabel (frame4, _, "$parentBarStartLabel", "barStartLabel", Loc ["STRING_OPTIONS_BARSTART"], "GameFontHighlightLeft") + + frame4.barStartSlider:SetPoint ("left", frame4.barStartLabel, "right", 2) + frame4.barStartSlider.OnSwitch = function (self, instance, value) + instance:SetBarSettings (nil, nil, nil, nil, nil, nil, nil, nil, nil, value) + end + + frame4.barStartSlider.info = Loc ["STRING_OPTIONS_BARSTART_DESC"] + window:create_line_background (frame4, frame4.barStartLabel, frame4.barStartSlider) + frame4.barStartSlider:SetHook ("OnEnter", background_on_enter) + frame4.barStartSlider:SetHook ("OnLeave", background_on_leave) + --anchors: titulo_bars:SetPoint (10, -10) titulo_bars_desc:SetPoint (10, -30) @@ -1686,12 +1898,14 @@ function window:CreateFrame4() frame4.rowBackgroundColorByClassLabel:SetPoint (10, -340) --class color background frame4.rowBackgroundPickLabel:SetPoint (10, -365) --bar color background - frame4.iconFileLabel:SetPoint (10, -405) + frame4.rowIconsLabel:SetPoint (10, -405) + frame4.iconFileLabel:SetPoint (10, -430) + frame4.barStartLabel:SetPoint (10, -455) end --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --- Appearance - Texts +-- Appearance - Texts ~5 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- function window:CreateFrame5() @@ -1711,23 +1925,16 @@ function window:CreateFrame5() frame5.fixedTextColor:SetPoint ("left", fixedColorText, "right", 2, 0) --> text size - g:NewSlider (frame5, _, "$parentSliderFontSize", "fonsizeSlider", SLIDER_WIDTH, 20, 8, 15, 1, tonumber (instance.row_info.font_size)) + local s = g:NewSlider (frame5, _, "$parentSliderFontSize", "fonsizeSlider", SLIDER_WIDTH, 20, 8, 15, 1, tonumber (instance.row_info.font_size)) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) --> outline g:NewSwitch (frame5, _, "$parentTextLeftOutlineSlider", "textLeftOutlineSlider", 60, 20, _, _, instance.row_info.textL_outline) g:NewSwitch (frame5, _, "$parentTextRightOutlineSlider", "textRightOutlineSlider", 60, 20, _, _, instance.row_info.textR_outline) - --> text font - local onSelectFont = function (_, instance, fontName) - instance:SetBarTextSettings (nil, fontName) - end - local fontObjects = SharedMedia:HashTable ("font") - local fontTable = {} - for name, fontPath in pairs (fontObjects) do - fontTable[#fontTable+1] = {value = name, label = name, onclick = onSelectFont, font = fontPath} - end - local buildFontMenu = function() return fontTable end - g:NewDropDown (frame5, _, "$parentFontDropdown", "fontDropdown", DROPDOWN_WIDTH, 20, buildFontMenu, nil) + -- Text Settings @@ -1744,6 +1951,23 @@ function window:CreateFrame5() frame5.fonsizeSlider:SetHook ("OnLeave", background_on_leave) -- Text Fonts + + local onSelectFont = function (_, instance, fontName) + instance:SetBarTextSettings (nil, fontName) + end + local fontObjects = SharedMedia:HashTable ("font") + local fontTable = {} + for name, fontPath in pairs (fontObjects) do + fontTable[#fontTable+1] = {value = name, label = name, onclick = onSelectFont, font = fontPath} + end + local buildFontMenu = function() return fontTable end + + local d = g:NewDropDown (frame5, _, "$parentFontDropdown", "fontDropdown", DROPDOWN_WIDTH, 20, buildFontMenu, nil) + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + g:NewLabel (frame5, _, "$parentFontLabel", "fontLabel", Loc ["STRING_OPTIONS_TEXT_FONT"], "GameFontHighlightLeft") frame5.fontDropdown:SetPoint ("left", frame5.fontLabel, "right", 2) @@ -1806,7 +2030,76 @@ function window:CreateFrame5() window:create_line_background (frame5, frame5.textRightOutlineLabel, frame5.textRightOutlineSlider) frame5.textRightOutlineSlider:SetHook ("OnEnter", background_on_enter) frame5.textRightOutlineSlider:SetHook ("OnLeave", background_on_leave) - + + --show total bar + + g:NewLabel (frame5, _, "$parentTotalBarLabel", "totalBarLabel", Loc ["STRING_OPTIONS_SHOW_TOTALBAR"], "GameFontHighlightLeft") + g:NewSwitch (frame5, _, "$parentTotalBarSlider", "totalBarSlider", 60, 20, _, _, instance.total_bar.enabled) + + frame5.totalBarSlider:SetPoint ("left", frame5.totalBarLabel, "right", 2) + frame5.totalBarSlider.OnSwitch = function (self, instance, value) + instance.total_bar.enabled = value + instance:InstanceReset() + end + + frame5.totalBarSlider.info = Loc ["STRING_OPTIONS_SHOW_TOTALBAR_DESC"] + window:create_line_background (frame5, frame5.totalBarLabel, frame5.totalBarSlider) + frame5.totalBarSlider:SetHook ("OnEnter", background_on_enter) + frame5.totalBarSlider:SetHook ("OnLeave", background_on_leave) + + --total bar color + local totalbarcolor_callback = function (button, r, g, b, a) + _G.DetailsOptionsWindow.instance.total_bar.color[1] = r + _G.DetailsOptionsWindow.instance.total_bar.color[2] = g + _G.DetailsOptionsWindow.instance.total_bar.color[3] = b + _G.DetailsOptionsWindow.instance:InstanceReset() + end + g:NewColorPickButton (frame5, "$parentTotalBarColorPick", "totalBarColorPick", totalbarcolor_callback) + g:NewLabel (frame5, _, "$parentTotalBarColorPickLabel", "totalBarPickColorLabel", Loc ["STRING_OPTIONS_COLOR"], "GameFontHighlightLeft") + frame5.totalBarColorPick:SetPoint ("left", frame5.totalBarPickColorLabel, "right", 2, 0) + + frame5.totalBarColorPick.info = Loc ["STRING_OPTIONS_SHOW_TOTALBAR_COLOR_DESC"] + window:create_line_background (frame5, frame5.totalBarPickColorLabel, frame5.totalBarColorPick) + frame5.totalBarColorPick:SetHook ("OnEnter", background_on_enter) + frame5.totalBarColorPick:SetHook ("OnLeave", background_on_leave) + + --total bar only in group + g:NewLabel (frame5, _, "$parentTotalBarOnlyInGroupLabel", "totalBarOnlyInGroupLabel", Loc ["STRING_OPTIONS_SHOW_TOTALBAR_INGROUP"], "GameFontHighlightLeft") + g:NewSwitch (frame5, _, "$parentTotalBarOnlyInGroupSlider", "totalBarOnlyInGroupSlider", 60, 20, _, _, instance.total_bar.only_in_group) + + frame5.totalBarOnlyInGroupSlider:SetPoint ("left", frame5.totalBarOnlyInGroupLabel, "right", 2) + frame5.totalBarOnlyInGroupSlider.OnSwitch = function (self, instance, value) + instance.total_bar.only_in_group = value + instance:InstanceReset() + end + + frame5.totalBarOnlyInGroupSlider.info = Loc ["STRING_OPTIONS_SHOW_TOTALBAR_INGROUP_DESC"] + window:create_line_background (frame5, frame5.totalBarOnlyInGroupLabel, frame5.totalBarOnlyInGroupSlider) + frame5.totalBarOnlyInGroupSlider:SetHook ("OnEnter", background_on_enter) + frame5.totalBarOnlyInGroupSlider:SetHook ("OnLeave", background_on_leave) + + --total bar icon + local totalbar_pickicon_callback = function (texture) + instance.total_bar.icon = texture + frame5.totalBarIconTexture:SetTexture (texture) + instance:InstanceReset() + end + local totalbar_pickicon = function() + g:IconPick (totalbar_pickicon_callback) + end + g:NewLabel (frame5, _, "$parentTotalBarIconLabel", "totalBarIconLabel", Loc ["STRING_OPTIONS_SHOW_TOTALBAR_ICON"], "GameFontHighlightLeft") + g:NewImage (frame5, _, "$parentTotalBarIconTexture", "totalBarIconTexture", 20, 20) + g:NewButton (frame5, _, "$parentTotalBarIconButton", "totalBarIconButton", 20, 20, totalbar_pickicon) + frame5.totalBarIconButton:InstallCustomTexture() + frame5.totalBarIconButton:SetPoint ("left", frame5.totalBarIconLabel, "right", 2, 0) + frame5.totalBarIconTexture:SetPoint ("left", frame5.totalBarIconLabel, "right", 2, 0) + + frame5.totalBarIconButton.info = Loc ["STRING_OPTIONS_SHOW_TOTALBAR_ICON_DESC"] + window:create_line_background (frame5, frame5.totalBarIconLabel, frame5.totalBarIconButton) + frame5.totalBarIconButton:SetHook ("OnEnter", background_on_enter) + frame5.totalBarIconButton:SetHook ("OnLeave", background_on_leave) + + titulo_texts:SetPoint (10, -10) titulo_texts_desc:SetPoint (10, -30) @@ -1819,10 +2112,16 @@ function window:CreateFrame5() frame5.fixedTextColorLabel:SetPoint (10, -220) + g:NewLabel (frame5, _, "$parentTotalBarAnchor", "totalBarAnchorLabel", "Total Bar", "GameFontNormal") + frame5.totalBarAnchorLabel:SetPoint (10, -255) + frame5.totalBarIconLabel:SetPoint (10, -280) + frame5.totalBarPickColorLabel:SetPoint (10, -305) + frame5.totalBarLabel:SetPoint (10, -355) + frame5.totalBarOnlyInGroupLabel:SetPoint (10, -330) end --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --- Appearance - Window Settings +-- Appearance - Window Settings ~6 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- function window:CreateFrame6() @@ -1835,7 +2134,13 @@ function window:CreateFrame6() --> window color local windowcolor_callback = function (button, r, g, b, a) - _G.DetailsOptionsWindow.instance:InstanceColor (r, g, b, a) + if (_G.DetailsOptionsWindow.instance.menu_alpha.enabled and a ~= _G.DetailsOptionsWindow.instance.color[4]) then + _detalhes:Msg (Loc ["STRING_OPTIONS_MENU_ALPHAWARNING"]) + _G.DetailsOptionsWindow6StatusbarColorPick.MyObject:SetColor (r, g, b, _G.DetailsOptionsWindow.instance.menu_alpha.onleave) + return _G.DetailsOptionsWindow.instance:InstanceColor (r, g, b, _G.DetailsOptionsWindow.instance.menu_alpha.onleave, nil, true) + end + _G.DetailsOptionsWindow6StatusbarColorPick.MyObject:SetColor (r, g, b, a) + _G.DetailsOptionsWindow.instance:InstanceColor (r, g, b, a, nil, true) end g:NewColorPickButton (frame6, "$parentWindowColorPick", "windowColorPick", windowcolor_callback) g:NewLabel (frame6, _, "$parentWindowColorPickLabel", "windowPickColorLabel", Loc ["STRING_OPTIONS_INSTANCE_COLOR"], "GameFontHighlightLeft") @@ -1847,7 +2152,10 @@ function window:CreateFrame6() frame6.windowColorPick:SetHook ("OnLeave", background_on_leave) --> Transparency - g:NewSlider (frame6, _, "$parentAlphaSlider", "alphaSlider", SLIDER_WIDTH, 20, 0.02, 1, 0.02, instance.bg_alpha, true) + local s = g:NewSlider (frame6, _, "$parentAlphaSlider", "alphaSlider", SLIDER_WIDTH, 20, 0.02, 1, 0.02, instance.bg_alpha, true) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) --> background color @@ -1869,9 +2177,6 @@ function window:CreateFrame6() g:NewSwitch (frame6, _, "$parentSideBarsSlider", "sideBarsSlider", 60, 20, _, _, instance.show_sidebars) g:NewSwitch (frame6, _, "$parentStatusbarSlider", "statusbarSlider", 60, 20, _, _, instance.show_statusbar) - --> stretch button anchor - g:NewSwitch (frame6, _, "$parentStretchAnchorSlider", "stretchAnchorSlider", 80, 20, Loc ["STRING_TOP"], Loc ["STRING_BOTTOM"], instance.stretch_button_side, true) - -- Instance Settings -- Color and Alpha @@ -1894,11 +2199,28 @@ function window:CreateFrame6() frame6.alphaSlider:SetHook ("OnLeave", background_on_leave) -- stretch button anchor + + local grow_switch_func = function (slider, value) + if (value == 1) then + return true + elseif (value == 2) then + return false + end + end + local grow_return_func = function (slider, value) + if (value) then + return 1 + else + return 2 + end + end + + g:NewSwitch (frame6, _, "$parentStretchAnchorSlider", "stretchAnchorSlider", 80, 20, Loc ["STRING_BOTTOM"], Loc ["STRING_TOP"], instance.toolbar_side, nil, grow_switch_func, grow_return_func) g:NewLabel (frame6, _, "$parentStretchAnchorLabel", "stretchAnchorLabel", Loc ["STRING_OPTIONS_STRETCH"], "GameFontHighlightLeft") frame6.stretchAnchorSlider:SetPoint ("left", frame6.stretchAnchorLabel, "right", 2) frame6.stretchAnchorSlider.OnSwitch = function (self, instance, value) - instance:StretchButtonAnchor (value and 2 or 1) + instance:StretchButtonAnchor (value) end frame6.stretchAnchorSlider.thumb:SetSize (40, 12) @@ -1908,11 +2230,12 @@ function window:CreateFrame6() frame6.stretchAnchorSlider:SetHook ("OnLeave", background_on_leave) -- instance toolbar side + g:NewSwitch (frame6, _, "$parentInstanceToolbarSideSlider", "instanceToolbarSideSlider", 80, 20, Loc ["STRING_BOTTOM"], Loc ["STRING_TOP"], instance.toolbar_side, nil, grow_switch_func, grow_return_func) g:NewLabel (frame6, _, "$parentInstanceToolbarSideLabel", "instanceToolbarSideLabel", Loc ["STRING_OPTIONS_TOOLBARSIDE"], "GameFontHighlightLeft") - g:NewSwitch (frame6, _, "$parentInstanceToolbarSideSlider", "instanceToolbarSideSlider", 80, 20, Loc ["STRING_TOP"], Loc ["STRING_BOTTOM"], instance.toolbar_side, true) + frame6.instanceToolbarSideSlider:SetPoint ("left", frame6.instanceToolbarSideLabel, "right", 2) frame6.instanceToolbarSideSlider.OnSwitch = function (self, instance, value) - instance.toolbar_side = value and 2 or 1 + instance.toolbar_side = value instance:ToolbarSide (side) end @@ -1959,73 +2282,118 @@ function window:CreateFrame6() frame6.statusbarSlider:SetHook ("OnEnter", background_on_enter) frame6.statusbarSlider:SetHook ("OnLeave", background_on_leave) - --show total bar - - g:NewLabel (frame6, _, "$parentTotalBarLabel", "totalBarLabel", Loc ["STRING_OPTIONS_SHOW_TOTALBAR"], "GameFontHighlightLeft") - g:NewSwitch (frame6, _, "$parentTotalBarSlider", "totalBarSlider", 60, 20, _, _, instance.total_bar.enabled) - - frame6.totalBarSlider:SetPoint ("left", frame6.totalBarLabel, "right", 2) - frame6.totalBarSlider.OnSwitch = function (self, instance, value) - instance.total_bar.enabled = value - instance:InstanceReset() + --> backdrop texture + local onBackdropSelect = function (_, instance, backdropName) + instance:SetBackdropTexture (backdropName) end + local backdropObjects = SharedMedia:HashTable ("background") + local backdropTable = {} + for name, backdropPath in pairs (backdropObjects) do + backdropTable[#backdropTable+1] = {value = name, label = name, onclick = onBackdropSelect} + end + local buildBackdropMenu = function() return backdropTable end - frame6.totalBarSlider.info = Loc ["STRING_OPTIONS_SHOW_TOTALBAR_DESC"] - window:create_line_background (frame6, frame6.totalBarLabel, frame6.totalBarSlider) - frame6.totalBarSlider:SetHook ("OnEnter", background_on_enter) - frame6.totalBarSlider:SetHook ("OnLeave", background_on_leave) + local d = g:NewDropDown (frame6, _, "$parentBackdropDropdown", "backdropDropdown", DROPDOWN_WIDTH, 20, buildBackdropMenu, nil) + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) - --total bar color - local totalbarcolor_callback = function (button, r, g, b, a) - _G.DetailsOptionsWindow.instance.total_bar.color[1] = r - _G.DetailsOptionsWindow.instance.total_bar.color[2] = g - _G.DetailsOptionsWindow.instance.total_bar.color[3] = b - _G.DetailsOptionsWindow.instance:InstanceReset() + g:NewLabel (frame6, _, "$parentBackdropLabel", "backdropLabel", Loc ["STRING_OPTIONS_INSTANCE_BACKDROP"], "GameFontHighlightLeft") + frame6.backdropDropdown:SetPoint ("left", frame6.backdropLabel, "right", 2) + + frame6.backdropDropdown.info = Loc ["STRING_OPTIONS_INSTANCE_BACKDROP_DESC"] + window:create_line_background (frame6, frame6.backdropLabel, frame6.backdropDropdown) + frame6.backdropDropdown:SetHook ("OnEnter", background_on_enter) + frame6.backdropDropdown:SetHook ("OnLeave", background_on_leave) + + --> alpha onenter onleave auto transparency + + g:NewLabel (frame6, _, "$parentMenuAlphaAnchor", "menuAlphaAnchorLabel", Loc ["STRING_OPTIONS_MENU_ALPHA"], "GameFontNormal") + + g:NewSwitch (frame6, _, "$parentMenuOnEnterLeaveAlphaIconsTooSwitch", "alphaIconsTooSwitch", 60, 20, _, _, instance.menu_alpha.iconstoo) + g:NewSwitch (frame6, _, "$parentMenuOnEnterLeaveAlphaSwitch", "alphaSwitch", 60, 20, _, _, instance.menu_alpha.enabled) + + local s = g:NewSlider (frame6, _, "$parentMenuOnEnterAlphaSlider", "menuOnEnterSlider", SLIDER_WIDTH, 20, 0, 1, 0.02, instance.menu_alpha.onenter, true) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + s.useDecimals = true + + local s = g:NewSlider (frame6, _, "$parentMenuOnLeaveAlphaSlider", "menuOnLeaveSlider", SLIDER_WIDTH, 20, 0, 1, 0.02, instance.menu_alpha.onleave, true) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + + frame6.menuOnEnterSlider.useDecimals = true + frame6.menuOnLeaveSlider.useDecimals = true + + g:NewLabel (frame6, _, "$parentMenuOnEnterLeaveAlphaIconsTooLabel", "alphaIconsTooLabel", Loc ["STRING_OPTIONS_MENU_ALPHAICONSTOO"], "GameFontHighlightLeft") + g:NewLabel (frame6, _, "$parentMenuOnEnterLeaveAlphaLabel", "alphaSwitchLabel", Loc ["STRING_OPTIONS_MENU_ALPHAENABLED"], "GameFontHighlightLeft") + g:NewLabel (frame6, _, "$parentMenuOnEnterAlphaLabel", "menuOnEnterLabel", Loc ["STRING_OPTIONS_MENU_ALPHAENTER"], "GameFontHighlightLeft") + g:NewLabel (frame6, _, "$parentMenuOnLeaveAlphaLabel", "menuOnLeaveLabel", Loc ["STRING_OPTIONS_MENU_ALPHALEAVE"], "GameFontHighlightLeft") + + frame6.alphaIconsTooSwitch.info = Loc ["STRING_OPTIONS_MENU_ALPHAICONSTOO_DESC"] + window:create_line_background (frame6, frame6.alphaIconsTooLabel, frame6.alphaIconsTooSwitch) + frame6.alphaIconsTooSwitch:SetHook ("OnEnter", background_on_enter) + frame6.alphaIconsTooSwitch:SetHook ("OnLeave", background_on_leave) + + frame6.alphaSwitch.info = Loc ["STRING_OPTIONS_MENU_ALPHAENABLED_DESC"] + window:create_line_background (frame6, frame6.alphaSwitchLabel, frame6.alphaSwitch) + frame6.alphaSwitch:SetHook ("OnEnter", background_on_enter) + frame6.alphaSwitch:SetHook ("OnLeave", background_on_leave) + + frame6.menuOnEnterSlider.info = Loc ["STRING_OPTIONS_MENU_ALPHAENTER_DESC"] + window:create_line_background (frame6, frame6.menuOnEnterLabel, frame6.menuOnEnterSlider) + frame6.menuOnEnterSlider:SetHook ("OnEnter", background_on_enter) + frame6.menuOnEnterSlider:SetHook ("OnLeave", background_on_leave) + + frame6.menuOnLeaveSlider.info = Loc ["STRING_OPTIONS_MENU_ALPHALEAVE_DESC"] + window:create_line_background (frame6, frame6.menuOnLeaveLabel, frame6.menuOnLeaveSlider) + frame6.menuOnLeaveSlider:SetHook ("OnEnter", background_on_enter) + frame6.menuOnLeaveSlider:SetHook ("OnLeave", background_on_leave) + + frame6.alphaIconsTooSwitch:SetPoint ("left", frame6.alphaIconsTooLabel, "right", 2) + frame6.alphaSwitch:SetPoint ("left", frame6.alphaSwitchLabel, "right", 2) + frame6.menuOnEnterSlider:SetPoint ("left", frame6.menuOnEnterLabel, "right", 2) + frame6.menuOnLeaveSlider:SetPoint ("left", frame6.menuOnLeaveLabel, "right", 2) + + frame6.menuOnEnterSlider:SetThumbSize (50) + frame6.menuOnLeaveSlider:SetThumbSize (50) + + frame6.alphaIconsTooSwitch.OnSwitch = function (self, instance, value) + -- + instance:SetMenuAlpha (nil, nil, nil, value) + end + frame6.alphaSwitch.OnSwitch = function (self, instance, value) + -- + instance:SetMenuAlpha (value) + end + frame6.menuOnEnterSlider:SetHook ("OnValueChange", function (self, instance, value) + -- + self.amt:SetText (string.format ("%.2f", value)) + instance:SetMenuAlpha (nil, value) + return true + end) + frame6.menuOnLeaveSlider:SetHook ("OnValueChange", function (self, instance, value) + -- + self.amt:SetText (string.format ("%.2f", value)) + instance:SetMenuAlpha (nil, nil, value) + return true + end) + + --> statusbar color overwrite + g:NewLabel (frame6, _, "$parentStatusbarLabelAnchor", "statusbarAnchorLabel", Loc ["STRING_OPTIONS_INSTANCE_STATUSBAR_ANCHOR"], "GameFontNormal") + + local statusbar_color_callback = function (button, r, g, b, a) + --do something + _G.DetailsOptionsWindow.instance:StatusBarColor (r, g, b, a) end - g:NewColorPickButton (frame6, "$parentTotalBarColorPick", "totalBarColorPick", totalbarcolor_callback) - g:NewLabel (frame6, _, "$parentTotalBarColorPickLabel", "totalBarPickColorLabel", Loc ["STRING_OPTIONS_COLOR"], "GameFontHighlightLeft") - frame6.totalBarColorPick:SetPoint ("left", frame6.totalBarPickColorLabel, "right", 2, 0) - - frame6.totalBarColorPick.info = Loc ["STRING_OPTIONS_SHOW_TOTALBAR_COLOR_DESC"] - window:create_line_background (frame6, frame6.totalBarPickColorLabel, frame6.totalBarColorPick) - frame6.totalBarColorPick:SetHook ("OnEnter", background_on_enter) - frame6.totalBarColorPick:SetHook ("OnLeave", background_on_leave) - - --total bar only in group - g:NewLabel (frame6, _, "$parentTotalBarOnlyInGroupLabel", "totalBarOnlyInGroupLabel", Loc ["STRING_OPTIONS_SHOW_TOTALBAR_INGROUP"], "GameFontHighlightLeft") - g:NewSwitch (frame6, _, "$parentTotalBarOnlyInGroupSlider", "totalBarOnlyInGroupSlider", 60, 20, _, _, instance.total_bar.only_in_group) - - frame6.totalBarOnlyInGroupSlider:SetPoint ("left", frame6.totalBarOnlyInGroupLabel, "right", 2) - frame6.totalBarOnlyInGroupSlider.OnSwitch = function (self, instance, value) - instance.total_bar.only_in_group = value - instance:InstanceReset() - end - - frame6.totalBarOnlyInGroupSlider.info = Loc ["STRING_OPTIONS_SHOW_TOTALBAR_INGROUP_DESC"] - window:create_line_background (frame6, frame6.totalBarOnlyInGroupLabel, frame6.totalBarOnlyInGroupSlider) - frame6.totalBarOnlyInGroupSlider:SetHook ("OnEnter", background_on_enter) - frame6.totalBarOnlyInGroupSlider:SetHook ("OnLeave", background_on_leave) - - --total bar icon - local totalbar_pickicon_callback = function (texture) - instance.total_bar.icon = texture - frame6.totalBarIconTexture:SetTexture (texture) - instance:InstanceReset() - end - local totalbar_pickicon = function() - g:IconPick (totalbar_pickicon_callback) - end - g:NewLabel (frame6, _, "$parentTotalBarIconLabel", "totalBarIconLabel", Loc ["STRING_OPTIONS_SHOW_TOTALBAR_ICON"], "GameFontHighlightLeft") - g:NewImage (frame6, _, "$parentTotalBarIconTexture", "totalBarIconTexture", 20, 20) - g:NewButton (frame6, _, "$parentTotalBarIconButton", "totalBarIconButton", 20, 20, totalbar_pickicon) - frame6.totalBarIconButton:InstallCustomTexture() - frame6.totalBarIconButton:SetPoint ("left", frame6.totalBarIconLabel, "right", 2, 0) - frame6.totalBarIconTexture:SetPoint ("left", frame6.totalBarIconLabel, "right", 2, 0) - - frame6.totalBarIconButton.info = Loc ["STRING_OPTIONS_SHOW_TOTALBAR_ICON_DESC"] - window:create_line_background (frame6, frame6.totalBarIconLabel, frame6.totalBarIconButton) - frame6.totalBarIconButton:SetHook ("OnEnter", background_on_enter) - frame6.totalBarIconButton:SetHook ("OnLeave", background_on_leave) + g:NewColorPickButton (frame6, "$parentStatusbarColorPick", "statusbarColorPick", statusbar_color_callback) + g:NewLabel (frame6, _, "$parentStatusbarColorLabel", "statusbarColorLabel", Loc ["STRING_OPTIONS_INSTANCE_STATUSBARCOLOR"], "GameFontHighlightLeft") + frame6.statusbarColorPick:SetPoint ("left", frame6.statusbarColorLabel, "right", 2, 0) + window:CreateLineBackground (frame6, "statusbarColorPick", "statusbarColorLabel", Loc ["STRING_OPTIONS_INSTANCE_STATUSBARCOLOR_DESC"]) + --anchors titulo_instance:SetPoint (10, -10) @@ -2035,22 +2403,25 @@ function window:CreateFrame6() --frame6.alphaLabel:SetPoint (10, -95) --background alpha frame6.windowBackgroundPickColorLabel:SetPoint (10, -95) --background color - frame6.instanceToolbarSideLabel:SetPoint (10, -145) - frame6.sideBarsLabel:SetPoint (10, -170) --borders - frame6.statusbarLabel:SetPoint (10, -195) --statusbar - frame6.stretchAnchorLabel:SetPoint (10, -220) --stretch direction + frame6.instanceToolbarSideLabel:SetPoint (10, -120) + frame6.sideBarsLabel:SetPoint (10, -145) --borders + frame6.stretchAnchorLabel:SetPoint (10, -170) --stretch direction + frame6.backdropLabel:SetPoint (10, -195) + + frame6.menuAlphaAnchorLabel:SetPoint (10, -230) + frame6.alphaSwitchLabel:SetPoint (10, -255) + frame6.menuOnEnterLabel:SetPoint (10, -280) + frame6.menuOnLeaveLabel:SetPoint (10, -305) + --frame6.alphaIconsTooLabel:SetPoint (10, -330) + + frame6.statusbarAnchorLabel:SetPoint (10, -340) + frame6.statusbarLabel:SetPoint (10, -365) --statusbar + frame6.statusbarColorLabel:SetPoint (10, -390) - g:NewLabel (frame6, _, "$parentTotalBarAnchor", "totalBarAnchorLabel", "Total Bar", "GameFontNormal") - frame6.totalBarAnchorLabel:SetPoint (10, -255) - frame6.totalBarIconLabel:SetPoint (10, -280) - frame6.totalBarPickColorLabel:SetPoint (10, -305) - frame6.totalBarLabel:SetPoint (10, -355) - frame6.totalBarOnlyInGroupLabel:SetPoint (10, -330) - end --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --- Appearance - Top Menu Bar +-- Appearance - Top Menu Bar ~7 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- function window:CreateFrame7() @@ -2061,77 +2432,72 @@ function window:CreateFrame7() local titulo_toolbar_desc = g:NewLabel (frame7, _, "$parentTituloToolbar2", "tituloToolbar2Label", Loc ["STRING_OPTIONS_TOOLBAR_SETTINGS_DESC"], "GameFontNormal", 9, "white") titulo_toolbar_desc.width = 320 - --> instance button anchor - g:NewSlider (frame7, _, "$parentInstanceButtonAnchorXSlider", "instanceButtonAnchorXSlider", SLIDER_WIDTH, 20, -200, 20, 1, instance.instance_button_anchor[1]) - g:NewSlider (frame7, _, "$parentInstanceButtonAnchorYSlider", "instanceButtonAnchorYSlider", SLIDER_WIDTH, 20, -10, 10, 1, instance.instance_button_anchor[2]) - - --> desaturate - g:NewSwitch (frame7, _, "$parentDesaturateMenuSlider", "desaturateMenuSlider", 60, 20, _, _, instance.desaturated_menu) - - --> hide icon - g:NewSwitch (frame7, _, "$parentHideIconSlider", "hideIconSlider", 60, 20, _, _, instance.hide_icon) - - --> menu anchor - g:NewSlider (frame7, _, "$parentMenuAnchorXSlider", "menuAnchorXSlider", SLIDER_WIDTH, 20, -20, 200, 1, instance.menu_anchor[1]) - g:NewSlider (frame7, _, "$parentMenuAnchorYSlider", "menuAnchorYSlider", SLIDER_WIDTH, 20, -10, 10, 1, instance.menu_anchor[2]) - - --> plugins icons grow direction - g:NewSwitch (frame7, _, "$parentPluginIconsDirectionSlider", "pluginIconsDirectionSlider", 80, 20, Loc ["STRING_LEFT"], Loc ["STRING_RIGHT"], instance.plugins_grow_direction) - - -- menu anchors - g:NewLabel (frame7, _, "$parentMenuAnchorXLabel", "menuAnchorXLabel", Loc ["STRING_OPTIONS_MENU_X"], "GameFontHighlightLeft") - frame7.menuAnchorXSlider:SetPoint ("left", frame7.menuAnchorXLabel, "right", 2) + local s = g:NewSlider (frame7, _, "$parentMenuAnchorXSlider", "menuAnchorXSlider", 100, 20, -200, 200, 1, instance.menu_anchor[1]) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + local s = g:NewSlider (frame7, _, "$parentMenuAnchorYSlider", "menuAnchorYSlider", 100, 20, -10, 10, 1, instance.menu_anchor[2]) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + + --g:NewLabel (frame7, _, "$parentMenuAnchorXLabel", "menuAnchorXLabel", Loc ["STRING_OPTIONS_MENU_X"], "GameFontHighlightLeft") + g:NewLabel (frame7, _, "$parentMenuAnchorXLabel", "menuAnchorXLabel", "Position", "GameFontHighlightLeft") + g:NewLabel (frame7, _, "$parentMenuAnchorYLabel", "menuAnchorYLabel", Loc ["STRING_OPTIONS_MENU_Y"], "GameFontHighlightLeft") + + frame7.menuAnchorXSlider:SetPoint ("left", frame7.menuAnchorXLabel, "right", 2, -1) + --frame7.menuAnchorYSlider:SetPoint ("left", frame7.menuAnchorYLabel, "right", 2) + frame7.menuAnchorYSlider:SetPoint ("left", frame7.menuAnchorXSlider, "right", 2) + frame7.menuAnchorXSlider:SetThumbSize (50) frame7.menuAnchorXSlider:SetHook ("OnValueChange", function (self, instance, x) instance:MenuAnchor (x, nil) end) - - frame7.menuAnchorXSlider.info = Loc ["STRING_OPTIONS_MENU_X_DESC"] - window:create_line_background (frame7, frame7.menuAnchorXLabel, frame7.menuAnchorXSlider) - frame7.menuAnchorXSlider:SetHook ("OnEnter", background_on_enter) - frame7.menuAnchorXSlider:SetHook ("OnLeave", background_on_leave) - - g:NewLabel (frame7, _, "$parentMenuAnchorYLabel", "menuAnchorYLabel", Loc ["STRING_OPTIONS_MENU_Y"], "GameFontHighlightLeft") - frame7.menuAnchorYSlider:SetPoint ("left", frame7.menuAnchorYLabel, "right", 2) frame7.menuAnchorYSlider:SetThumbSize (50) frame7.menuAnchorYSlider:SetHook ("OnValueChange", function (self, instance, y) instance:MenuAnchor (nil, y) end) - frame7.menuAnchorYSlider.info = Loc ["STRING_OPTIONS_MENU_Y_DESC"] + frame7.menuAnchorXSlider.info = Loc ["STRING_OPTIONS_MENU_X_DESC"] + window:create_line_background (frame7, frame7.menuAnchorXLabel, frame7.menuAnchorXSlider) + frame7.menuAnchorXSlider:SetHook ("OnEnter", background_on_enter) + frame7.menuAnchorXSlider:SetHook ("OnLeave", background_on_leave) + + frame7.menuAnchorYSlider.info = Loc ["STRING_OPTIONS_MENU_X_DESC"] window:create_line_background (frame7, frame7.menuAnchorYLabel, frame7.menuAnchorYSlider) frame7.menuAnchorYSlider:SetHook ("OnEnter", background_on_enter) frame7.menuAnchorYSlider:SetHook ("OnLeave", background_on_leave) - - -- instance button anchors - g:NewLabel (frame7, _, "$parentInstanceButtonAnchorXLabel", "instanceButtonAnchorXLabel", Loc ["STRING_OPTIONS_INSBUTTON_X"], "GameFontHighlightLeft") - frame7.instanceButtonAnchorXSlider:SetPoint ("left", frame7.instanceButtonAnchorXLabel, "right", 2) - frame7.instanceButtonAnchorXSlider:SetThumbSize (50) - frame7.instanceButtonAnchorXSlider:SetHook ("OnValueChange", function (self, instance, x) - instance:InstanceButtonAnchor (x, nil) - end) - - frame7.instanceButtonAnchorXSlider.info = Loc ["STRING_OPTIONS_INSBUTTON_X_DESC"] - window:create_line_background (frame7, frame7.instanceButtonAnchorXLabel, frame7.instanceButtonAnchorXSlider) - frame7.instanceButtonAnchorXSlider:SetHook ("OnEnter", background_on_enter) - frame7.instanceButtonAnchorXSlider:SetHook ("OnLeave", background_on_leave) - - g:NewLabel (frame7, _, "$parentInstanceButtonAnchorYLabel", "instanceButtonAnchorYLabel", Loc ["STRING_OPTIONS_INSBUTTON_Y"], "GameFontHighlightLeft") - frame7.instanceButtonAnchorYSlider:SetPoint ("left", frame7.instanceButtonAnchorYLabel, "right", 2) - frame7.instanceButtonAnchorYSlider:SetThumbSize (50) - frame7.instanceButtonAnchorYSlider:SetHook ("OnValueChange", function (self, instance, y) - instance:InstanceButtonAnchor (nil, y) - end) - - frame7.instanceButtonAnchorYSlider.info =Loc ["STRING_OPTIONS_INSBUTTON_Y_DESC"] - window:create_line_background (frame7, frame7.instanceButtonAnchorYLabel, frame7.instanceButtonAnchorYSlider) - frame7.instanceButtonAnchorYSlider:SetHook ("OnEnter", background_on_enter) - frame7.instanceButtonAnchorYSlider:SetHook ("OnLeave", background_on_leave) - - --> instance toolbar side + -- menu anchor left and right + + local menusode_switch_func = function (slider, value) + if (value == 1) then + return false + elseif (value == 2) then + return true + end + end + local menuside_return_func = function (slider, value) + if (value) then + return 2 + else + return 1 + end + end + + g:NewSwitch (frame7, _, "$parentMenuAnchorSideSlider", "pluginMenuAnchorSideSlider", 80, 20, Loc ["STRING_LEFT"], Loc ["STRING_RIGHT"], instance.menu_anchor.side, nil, menusode_switch_func, menuside_return_func) + g:NewLabel (frame7, _, "$parentMenuAnchorSideLabel", "menuAnchorSideLabel", Loc ["STRING_OPTIONS_MENU_ANCHOR"], "GameFontHighlightLeft") + + frame7.pluginMenuAnchorSideSlider:SetPoint ("left", frame7.menuAnchorSideLabel, "right", 2) + frame7.pluginMenuAnchorSideSlider.OnSwitch = function (self, instance, value) + instance:LeftMenuAnchorSide (value) + end + + window:CreateLineBackground (frame7, "pluginMenuAnchorSideSlider", "menuAnchorSideLabel", Loc ["STRING_OPTIONS_MENU_ANCHOR_DESC"]) + -- desaturate + g:NewSwitch (frame7, _, "$parentDesaturateMenuSlider", "desaturateMenuSlider", 60, 20, _, _, instance.desaturated_menu) g:NewLabel (frame7, _, "$parentDesaturateMenuLabel", "desaturateMenuLabel", Loc ["STRING_OPTIONS_DESATURATE_MENU"], "GameFontHighlightLeft") frame7.desaturateMenuSlider:SetPoint ("left", frame7.desaturateMenuLabel, "right", 2) @@ -2145,6 +2511,7 @@ function window:CreateFrame7() frame7.desaturateMenuSlider:SetHook ("OnLeave", background_on_leave) -- hide icon + g:NewSwitch (frame7, _, "$parentHideIconSlider", "hideIconSlider", 60, 20, _, _, instance.hide_icon) g:NewLabel (frame7, _, "$parentHideIconLabel", "hideIconLabel", Loc ["STRING_OPTIONS_HIDE_ICON"], "GameFontHighlightLeft") frame7.hideIconSlider:SetPoint ("left", frame7.hideIconLabel, "right", 2) @@ -2158,12 +2525,29 @@ function window:CreateFrame7() frame7.hideIconSlider:SetHook ("OnLeave", background_on_leave) -- plugin icons direction + local grow_switch_func = function (slider, value) + if (value == 1) then + return false + elseif (value == 2) then + return true + end + end + local grow_return_func = function (slider, value) + if (value) then + return 2 + else + return 1 + end + end + + g:NewSwitch (frame7, _, "$parentPluginIconsDirectionSlider", "pluginIconsDirectionSlider", 80, 20, Loc ["STRING_LEFT"], Loc ["STRING_RIGHT"], instance.plugins_grow_direction, nil, grow_switch_func, grow_return_func) g:NewLabel (frame7, _, "$parentPluginIconsDirectionLabel", "pluginIconsDirectionLabel", Loc ["STRING_OPTIONS_PICONS_DIRECTION"], "GameFontHighlightLeft") frame7.pluginIconsDirectionSlider:SetPoint ("left", frame7.pluginIconsDirectionLabel, "right", 2) frame7.pluginIconsDirectionSlider.OnSwitch = function (self, instance, value) - instance.plugins_grow_direction = value and 2 or 1 - instance:DefaultIcons() + instance.plugins_grow_direction = value + --instance:DefaultIcons() + _detalhes.ToolBar:ReorganizeIcons (nil, true) end frame7.pluginIconsDirectionSlider.thumb:SetSize (40, 12) @@ -2172,20 +2556,160 @@ function window:CreateFrame7() frame7.pluginIconsDirectionSlider:SetHook ("OnEnter", background_on_enter) frame7.pluginIconsDirectionSlider:SetHook ("OnLeave", background_on_leave) + --attribute text + --text anchor on options menu + g:NewLabel (frame7, _, "$parentAttributeLabelAnchor", "attributeLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHOR"], "GameFontNormal") + + --enabled + g:NewLabel (frame7, _, "$parentAttributeEnabledLabel", "attributeEnabledLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ENABLED"], "GameFontHighlightLeft") + g:NewSwitch (frame7, _, "$parentAttributeEnabledSwitch", "attributeEnabledSwitch", 60, 20, nil, nil, instance.attribute_text.enabled) + frame7.attributeEnabledSwitch:SetPoint ("left", frame7.attributeEnabledLabel, "right", 2) + frame7.attributeEnabledSwitch.OnSwitch = function (self, instance, value) + instance:AttributeMenu (value) + end + window:CreateLineBackground (frame7, "attributeEnabledSwitch", "attributeEnabledLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ENABLED_DESC"]) + + --anchors + g:NewLabel (frame7, _, "$parentAttributeAnchorXLabel", "attributeAnchorXLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHORX"], "GameFontHighlightLeft") + g:NewLabel (frame7, _, "$parentAttributeAnchorYLabel", "attributeAnchorYLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHORY"], "GameFontHighlightLeft") + local s = g:NewSlider (frame7, _, "$parentAttributeAnchorXSlider", "attributeAnchorXSlider", SLIDER_WIDTH, 20, -20, 300, 1, instance.attribute_text.anchor [1]) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + local s = g:NewSlider (frame7, _, "$parentAttributeAnchorYSlider", "attributeAnchorYSlider", SLIDER_WIDTH, 20, -50, 50, 1, instance.attribute_text.anchor [2]) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + + frame7.attributeAnchorXSlider:SetPoint ("left", frame7.attributeAnchorXLabel, "right", 2) + frame7.attributeAnchorYSlider:SetPoint ("left", frame7.attributeAnchorYLabel, "right", 2) + + frame7.attributeAnchorXSlider:SetHook ("OnValueChange", function (self, instance, amount) + instance:AttributeMenu (nil, amount) + end) + frame7.attributeAnchorYSlider:SetHook ("OnValueChange", function (self, instance, amount) + instance:AttributeMenu (nil, nil, amount) + end) + + window:CreateLineBackground (frame7, "attributeAnchorXSlider", "attributeAnchorXLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHORX_DESC"]) + window:CreateLineBackground (frame7, "attributeAnchorYSlider", "attributeAnchorYLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHORY_DESC"]) + + --font + local on_select_attribute_font = function (self, instance, fontName) + instance:AttributeMenu (nil, nil, nil, fontName) + end + + local build_font_menu = function() + local fonts = {} + for name, fontPath in pairs (SharedMedia:HashTable ("font")) do + fonts [#fonts+1] = {value = name, label = name, onclick = on_select_attribute_font, font = fontPath} + end + return fonts + end + + g:NewLabel (frame7, _, "$parentAttributeFontLabel", "attributeFontLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_FONT"], "GameFontHighlightLeft") + local d = g:NewDropDown (frame7, _, "$parentAttributeFontDropdown", "attributeFontDropdown", DROPDOWN_WIDTH, 20, build_font_menu, instance.attribute_text.text_face) + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + + frame7.attributeFontDropdown:SetPoint ("left", frame7.attributeFontLabel, "right", 2) + + window:CreateLineBackground (frame7, "attributeFontDropdown", "attributeFontLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_FONT_DESC"]) + + --size + g:NewLabel (frame7, _, "$parentAttributeTextSizeLabel", "attributeTextSizeLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_TEXTSIZE"], "GameFontHighlightLeft") + local s = g:NewSlider (frame7, _, "$parentAttributeTextSizeSlider", "attributeTextSizeSlider", SLIDER_WIDTH, 20, 8, 25, 1, tonumber ( instance.attribute_text.text_size)) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + + frame7.attributeTextSizeSlider:SetPoint ("left", frame7.attributeTextSizeLabel, "right", 2) + + frame7.attributeTextSizeSlider:SetHook ("OnValueChange", function (self, instance, amount) + instance:AttributeMenu (nil, nil, nil, nil, amount) + end) + + window:CreateLineBackground (frame7, "attributeTextSizeSlider", "attributeTextSizeLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_TEXTSIZE_DESC"]) + + --color + local attribute_text_color_callback = function (button, r, g, b, a) + _G.DetailsOptionsWindow.instance:AttributeMenu (nil, nil, nil, nil, nil, {r, g, b, a}) + end + g:NewColorPickButton (frame7, "$parentAttributeTextColorPick", "attributeTextColorPick", attribute_text_color_callback) + g:NewLabel (frame7, _, "$parentAttributeTextColorLabel", "attributeTextColorLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_TEXTCOLOR"], "GameFontHighlightLeft") + + frame7.attributeTextColorPick:SetPoint ("left", frame7.attributeTextColorLabel, "right", 2, 0) + + window:CreateLineBackground (frame7, "attributeTextColorPick", "attributeTextColorLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_TEXTCOLOR_DESC"]) + + --side + local side_switch_func = function (slider, value) if (value == 2) then return false elseif (value == 1) then return true end end + local side_return_func = function (slider, value) if (value) then return 1 else return 2 end end + + g:NewLabel (frame7, _, "$parentAttributeSideLabel", "attributeSideLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_SIDE"], "GameFontHighlightLeft") + g:NewSwitch (frame7, _, "$parentAttributeSideSwitch", "attributeSideSwitch", 80, 20, "bottom", "top", instance.attribute_text.side, nil, side_switch_func, side_return_func) + frame7.attributeSideSwitch:SetPoint ("left", frame7.attributeSideLabel, "right", 2) + frame7.attributeSideSwitch.OnSwitch = function (self, instance, value) + instance:AttributeMenu (nil, nil, nil, nil, nil, nil, value) + end + --frame7.attributeSideSwitch:SetThumbSize (50) + window:CreateLineBackground (frame7, "attributeSideSwitch", "attributeSideLabel", Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_SIDE_DESC"]) + + --auto hide menus + --text anchor on options menu + g:NewLabel (frame7, _, "$parentAutoHideLabelAnchor", "autoHideLabel", Loc ["STRING_OPTIONS_MENU_AUTOHIDE_ANCHOR"], "GameFontNormal") + + --left + g:NewLabel (frame7, _, "$parentAutoHideLeftMenuLabel", "autoHideLeftMenuLabel", Loc ["STRING_OPTIONS_MENU_AUTOHIDE_LEFT"], "GameFontHighlightLeft") + g:NewSwitch (frame7, _, "$parentAutoHideLeftMenuSwitch", "autoHideLeftMenuSwitch", 60, 20, nil, nil, instance.auto_hide_menu.left) + frame7.autoHideLeftMenuSwitch:SetPoint ("left", frame7.autoHideLeftMenuLabel, "right", 2) + frame7.autoHideLeftMenuSwitch.OnSwitch = function (self, instance, value) + --do something + instance:SetAutoHideMenu (value) + end + window:CreateLineBackground (frame7, "autoHideLeftMenuSwitch", "autoHideLeftMenuLabel", Loc ["STRING_OPTIONS_MENU_AUTOHIDE_DESC"]) + --right + g:NewLabel (frame7, _, "$parentAutoHideRightMenuLabel", "autoHideRightMenuLabel", Loc ["STRING_OPTIONS_MENU_AUTOHIDE_RIGHT"], "GameFontHighlightLeft") + g:NewSwitch (frame7, _, "$parentAutoHideRightMenuSwitch", "autoHideRightMenuSwitch", 60, 20, nil, nil, instance.auto_hide_menu.right) + frame7.autoHideRightMenuSwitch:SetPoint ("left", frame7.autoHideRightMenuLabel, "right", 2) + frame7.autoHideRightMenuSwitch.OnSwitch = function (self, instance, value) + --do something + instance:SetAutoHideMenu (nil, value) + end + window:CreateLineBackground (frame7, "autoHideRightMenuSwitch", "autoHideRightMenuLabel", Loc ["STRING_OPTIONS_MENU_AUTOHIDE_DESC"]) + + + --> anchors titulo_toolbar:SetPoint (10, -10) titulo_toolbar_desc:SetPoint (10, -30) - frame7.instanceButtonAnchorXLabel:SetPoint (10, -70) - frame7.instanceButtonAnchorYLabel:SetPoint (10, -95) - frame7.menuAnchorXLabel:SetPoint (10, -120) - frame7.menuAnchorYLabel:SetPoint (10, -145) - frame7.desaturateMenuLabel:SetPoint (10, -170) - frame7.hideIconLabel:SetPoint (10, -195) - frame7.pluginIconsDirectionLabel:SetPoint (10, -220) - -end + frame7.menuAnchorXLabel:SetPoint (10, -70) + --frame7.menuAnchorYLabel:SetPoint (10, -95) + frame7.menuAnchorSideLabel:SetPoint (10, -95) + frame7.desaturateMenuLabel:SetPoint (10, -120) + frame7.hideIconLabel:SetPoint (10, -145) + frame7.pluginIconsDirectionLabel:SetPoint (10, -170) + frame7.attributeLabel:SetPoint (10, -205) + frame7.attributeEnabledLabel:SetPoint (10, -230) + frame7.attributeAnchorXLabel:SetPoint (10, -255) + frame7.attributeAnchorYLabel:SetPoint (10, -280) + frame7.attributeFontLabel:SetPoint (10, -305) + frame7.attributeTextSizeLabel:SetPoint (10, -330) + frame7.attributeTextColorLabel:SetPoint (10, -355) + frame7.attributeSideLabel:SetPoint (10, -380) + + frame7.autoHideLabel:SetPoint (10, -415) + frame7.autoHideLeftMenuLabel:SetPoint (10, -435) + frame7.autoHideRightMenuLabel:SetPoint (10, -455) + + + +end + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --- Appearance - Reset Instance Close +-- Appearance - Reset Instance Close ~8 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- function window:CreateFrame8() @@ -2226,7 +2750,11 @@ function window:CreateFrame8() frame8.resetTextColorPick:SetHook ("OnLeave", background_on_leave) --text size - g:NewSlider (frame8, _, "$parentResetTextSizeSlider", "resetTextSizeSlider", SLIDER_WIDTH, 20, 8, 15, 1, tonumber (instance.resetbutton_info.text_size)) + local s = g:NewSlider (frame8, _, "$parentResetTextSizeSlider", "resetTextSizeSlider", SLIDER_WIDTH, 20, 8, 15, 1, tonumber (instance.resetbutton_info.text_size)) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + frame8.resetTextSizeSlider:SetHook ("OnValueChange", function (self, instance, amount) instance:SetDeleteButtonSettings (nil, amount) end) @@ -2246,12 +2774,20 @@ function window:CreateFrame8() end return fontTable end - g:NewDropDown (frame8, _, "$parentResetTextFontDropdown", "resetTextFontDropdown", DROPDOWN_WIDTH, 20, reset_text_color_build_font_menu, nil) + local d = g:NewDropDown (frame8, _, "$parentResetTextFontDropdown", "resetTextFontDropdown", DROPDOWN_WIDTH, 20, reset_text_color_build_font_menu, nil) + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) --> instance button --text color pick --text size - g:NewSlider (frame8, _, "$parentInstanceTextSizeSlider", "instanceTextSizeSlider", SLIDER_WIDTH, 20, 8, 15, 1, tonumber (instance.instancebutton_info.text_size)) + local s = g:NewSlider (frame8, _, "$parentInstanceTextSizeSlider", "instanceTextSizeSlider", SLIDER_WIDTH, 20, 8, 15, 1, tonumber (instance.instancebutton_info.text_size)) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + frame8.instanceTextSizeSlider:SetHook ("OnValueChange", function (self, instance, amount) instance:SetInstanceButtonSettings (nil, amount) end) @@ -2269,13 +2805,18 @@ function window:CreateFrame8() end return fontTable end - g:NewDropDown (frame8, _, "$parentInstanceTextFontDropdown", "instanceTextFontDropdown", DROPDOWN_WIDTH, 20, instance_text_color_build_font_menu, nil) + local d = g:NewDropDown (frame8, _, "$parentInstanceTextFontDropdown", "instanceTextFontDropdown", DROPDOWN_WIDTH, 20, instance_text_color_build_font_menu, nil) + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) -- reset button -- text font + g:NewLabel (frame8, _, "$parentResetTextFontLabel", "resetTextFontLabel", Loc ["STRING_OPTIONS_RESET_TEXTFONT"], "GameFontHighlightLeft") frame8.resetTextFontDropdown:SetPoint ("left", frame8.resetTextFontLabel, "right", 2) @@ -2366,6 +2907,42 @@ function window:CreateFrame8() frame8.instanceOverlayColorPick:SetHook ("OnEnter", background_on_enter) frame8.instanceOverlayColorPick:SetHook ("OnLeave", background_on_leave) + --> instance button anchor + local s = g:NewSlider (frame8, _, "$parentInstanceButtonAnchorXSlider", "instanceButtonAnchorXSlider", SLIDER_WIDTH, 20, -200, 20, 1, instance.instance_button_anchor[1]) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + local s = g:NewSlider (frame8, _, "$parentInstanceButtonAnchorYSlider", "instanceButtonAnchorYSlider", SLIDER_WIDTH, 20, -10, 10, 1, instance.instance_button_anchor[2]) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + + g:NewLabel (frame8, _, "$parentInstanceButtonAnchorXLabel", "instanceButtonAnchorXLabel", Loc ["STRING_OPTIONS_INSBUTTON_X"], "GameFontHighlightLeft") + frame8.instanceButtonAnchorXSlider:SetPoint ("left", frame8.instanceButtonAnchorXLabel, "right", 2) + frame8.instanceButtonAnchorXSlider:SetThumbSize (50) + frame8.instanceButtonAnchorXSlider:SetHook ("OnValueChange", function (self, instance, x) + instance:InstanceButtonAnchor (x, nil) + end) + + frame8.instanceButtonAnchorXSlider.info = Loc ["STRING_OPTIONS_INSBUTTON_X_DESC"] + window:create_line_background (frame8, frame8.instanceButtonAnchorXLabel, frame8.instanceButtonAnchorXSlider) + frame8.instanceButtonAnchorXSlider:SetHook ("OnEnter", background_on_enter) + frame8.instanceButtonAnchorXSlider:SetHook ("OnLeave", background_on_leave) + + g:NewLabel (frame8, _, "$parentInstanceButtonAnchorYLabel", "instanceButtonAnchorYLabel", Loc ["STRING_OPTIONS_INSBUTTON_Y"], "GameFontHighlightLeft") + frame8.instanceButtonAnchorYSlider:SetPoint ("left", frame8.instanceButtonAnchorYLabel, "right", 2) + frame8.instanceButtonAnchorYSlider:SetThumbSize (50) + frame8.instanceButtonAnchorYSlider:SetHook ("OnValueChange", function (self, instance, y) + instance:InstanceButtonAnchor (nil, y) + end) + + frame8.instanceButtonAnchorYSlider.info =Loc ["STRING_OPTIONS_INSBUTTON_Y_DESC"] + window:create_line_background (frame8, frame8.instanceButtonAnchorYLabel, frame8.instanceButtonAnchorYSlider) + frame8.instanceButtonAnchorYSlider:SetHook ("OnEnter", background_on_enter) + frame8.instanceButtonAnchorYSlider:SetHook ("OnLeave", background_on_leave) + + + -- close button -- color overlay @@ -2383,23 +2960,25 @@ function window:CreateFrame8() frame8.instanceTextFontLabel:SetPoint (10, -125) frame8.instanceTextSizeLabel:SetPoint (10, -150) frame8.instanceOverlayColorPickLabel:SetPoint (10, -175) + frame8.instanceButtonAnchorXLabel:SetPoint (10, -200) + frame8.instanceButtonAnchorYLabel:SetPoint (10, -225) - frame8.resetAnchorLabel:SetPoint (10, -210) + frame8.resetAnchorLabel:SetPoint (10, -260) - frame8.resetTextColorPickLabel:SetPoint (10, -235) - frame8.resetTextFontLabel:SetPoint (10, -260) - frame8.resetTextSizeLabel:SetPoint (10, -285) - frame8.resetOverlayColorPickLabel:SetPoint (10, -310) - frame8.resetAlwaysSmallLabel:SetPoint (10, -335) + frame8.resetTextColorPickLabel:SetPoint (10, -285) + frame8.resetTextFontLabel:SetPoint (10, -310) + frame8.resetTextSizeLabel:SetPoint (10, -335) + frame8.resetOverlayColorPickLabel:SetPoint (10, -360) + frame8.resetAlwaysSmallLabel:SetPoint (10, -385) - frame8.closeAnchorLabel:SetPoint (10, -370) + frame8.closeAnchorLabel:SetPoint (10, -420) - frame8.closeButtonColorLabel:SetPoint (10, -395) + frame8.closeButtonColorLabel:SetPoint (10, -445) end --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --- Appearance - Wallpaper +-- Appearance - Wallpaper ~9 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- function window:CreateFrame9() @@ -2414,23 +2993,24 @@ function window:CreateFrame9() --> primeiro o botão de editar a imagem local callmeback = function (width, height, overlayColor, alpha, texCoords) - local tinstance = _G ["DetailsOptionsWindow"].MyObject.instance + local tinstance = _G.DetailsOptionsWindow.instance tinstance:InstanceWallpaper (nil, nil, alpha, texCoords, width, height, overlayColor) window:update_wallpaper_info() end local startImageEdit = function() - local tinstance = _G ["DetailsOptionsWindow"].MyObject.instance + local tinstance = _G.DetailsOptionsWindow.instance if (not tinstance.wallpaper.texture) then return end - - if (tinstance.wallpaper.texture:find ("TALENTFRAME")) then - g:ImageEditor (callmeback, tinstance.wallpaper.texture, tinstance.wallpaper.texcoord, tinstance.wallpaper.overlay, _G.DetailsOptionsWindow.instance.baseframe.wallpaper:GetWidth(), _G.DetailsOptionsWindow.instance.baseframe.wallpaper:GetHeight()) + + local wp = tinstance.wallpaper + + if (wp.texture:find ("TALENTFRAME")) then + g:ImageEditor (callmeback, wp.texture, wp.texcoord, wp.overlay, tinstance.baseframe.wallpaper:GetWidth(), tinstance.baseframe.wallpaper:GetHeight(), nil, wp.alpha) else - tinstance.wallpaper.overlay [4] = 0.5 - g:ImageEditor (callmeback, tinstance.wallpaper.texture, tinstance.wallpaper.texcoord, tinstance.wallpaper.overlay, _G.DetailsOptionsWindow.instance.baseframe.wallpaper:GetWidth(), _G.DetailsOptionsWindow.instance.baseframe.wallpaper:GetHeight()) + g:ImageEditor (callmeback, wp.texture, wp.texcoord, wp.overlay, tinstance.baseframe.wallpaper:GetWidth(), tinstance.baseframe.wallpaper:GetHeight(), nil, wp.alpha) end end g:NewButton (frame9, _, "$parentEditImage", "editImage", 200, 18, startImageEdit, nil, nil, nil, Loc ["STRING_OPTIONS_EDITIMAGE"]) @@ -2454,7 +3034,11 @@ function window:CreateFrame9() return anchorMenu end - g:NewDropDown (frame9, _, "$parentAnchorDropdown", "anchorDropdown", DROPDOWN_WIDTH, 20, buildAnchorMenu, nil) + local d = g:NewDropDown (frame9, _, "$parentAnchorDropdown", "anchorDropdown", DROPDOWN_WIDTH, 20, buildAnchorMenu, nil) + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) --> agora cria os 2 dropdown da categoria e wallpaper @@ -2646,9 +3230,18 @@ function window:CreateFrame9() local buildBackgroundMenu = function() return backgroundTable end g:NewSwitch (frame9, _, "$parentUseBackgroundSlider", "useBackgroundSlider", 60, 20, _, _, _G.DetailsOptionsWindow.instance.wallpaper.enabled) - g:NewDropDown (frame9, _, "$parentBackgroundDropdown", "backgroundDropdown", DROPDOWN_WIDTH, 20, buildBackgroundMenu, nil) - g:NewDropDown (frame9, _, "$parentBackgroundDropdown2", "backgroundDropdown2", DROPDOWN_WIDTH, 20, buildBackgroundMenu2, nil) - + local d = g:NewDropDown (frame9, _, "$parentBackgroundDropdown", "backgroundDropdown", DROPDOWN_WIDTH, 20, buildBackgroundMenu, nil) + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + + local d = g:NewDropDown (frame9, _, "$parentBackgroundDropdown2", "backgroundDropdown2", DROPDOWN_WIDTH, 20, buildBackgroundMenu2, nil) + d.onenter_backdrop = dropdown_backdrop_onenter + d.onleave_backdrop = dropdown_backdrop_onleave + d:SetBackdrop (dropdown_backdrop) + d:SetBackdropColor (unpack (dropdown_backdrop_onleave)) + -- Wallpaper Settings -- wallpaper @@ -2718,6 +3311,41 @@ function window:CreateFrame9() frame9.backgroundDropdown2:SetHook ("OnEnter", background_on_enter) frame9.backgroundDropdown2:SetHook ("OnLeave", background_on_leave) + g:NewLabel (frame9, _, "$parentWallpaperPreviewAnchor", "wallpaperPreviewAnchorLabel", "Preview:", "GameFontNormal") + + --128 64 + + local icon1 = g:NewImage (frame9, _, "$parentIcon1", nil, 128, 64) + icon1:SetTexture ("Interface\\AddOns\\Details\\images\\icons") + icon1:SetPoint ("topleft", frame9.wallpaperPreviewAnchorLabel.widget, "bottomleft", 0, -5) + icon1:SetDrawLayer ("artwork", 0) + icon1:SetTexCoord (0.337890625, 0.5859375, 0.59375, 0.716796875-0.0009765625) --173 304 300 367 + local icon2 = g:NewImage (frame9, _, "$parentIcon2", nil, 128, 64) + icon2:SetTexture ("Interface\\AddOns\\Details\\images\\icons") + icon2:SetPoint ("left", icon1.widget, "right") + icon2:SetDrawLayer ("artwork", 0) + icon2:SetTexCoord (0.337890625, 0.5859375, 0.59375, 0.716796875-0.0009765625) --173 304 300 367 + + local icon3 = g:NewImage (frame9, _, "$parentIcon3", nil, 128, 64) + icon3:SetTexture ("Interface\\AddOns\\Details\\images\\icons") + icon3:SetPoint ("top", icon1.widget, "bottom") + icon3:SetDrawLayer ("artwork", 0) + icon3:SetTexCoord (0.337890625, 0.5859375, 0.59375+0.0009765625, 0.716796875) --173 304 300 367 + local icon4 = g:NewImage (frame9, _, "$parentIcon4", nil, 128, 64) + icon4:SetTexture ("Interface\\AddOns\\Details\\images\\icons") + icon4:SetPoint ("left", icon3.widget, "right") + icon4:SetDrawLayer ("artwork", 0) + icon4:SetTexCoord (0.337890625, 0.5859375, 0.59375+0.0009765625, 0.716796875) --173 304 300 367 + + icon1:SetVertexColor (.15, .15, .15, 1) + icon2:SetVertexColor (.15, .15, .15, 1) + icon3:SetVertexColor (.15, .15, .15, 1) + icon4:SetVertexColor (.15, .15, .15, 1) + + local preview = frame9:CreateTexture (nil, "overlay") + preview:SetSize (256, 128) + preview:SetPoint ("topleft", frame9.wallpaperPreviewAnchorLabel.widget, "bottomleft", 0, -5) + function window:update_wallpaper_info() local w = _G.DetailsOptionsWindow.instance.wallpaper @@ -2725,16 +3353,19 @@ function window:CreateFrame9() a = a * 100 a = string.format ("%.1f", a) .. "%" - local t = w.texcoord [1] or 0 + local t = w.texcoord [3] or 0 t = t * 100 t = string.format ("%.3f", t) .. "%" - local b = w.texcoord [2] or 1 + + local b = w.texcoord [4] or 1 b = b * 100 b = string.format ("%.3f", b) .. "%" - local l = w.texcoord [3] or 0 + + local l = w.texcoord [1] or 0 l = l * 100 l = string.format ("%.3f", l) .. "%" - local r = w.texcoord [4] or 1 + + local r = w.texcoord [2] or 1 r = r * 100 r = string.format ("%.3f", r) .. "%" @@ -2745,6 +3376,11 @@ function window:CreateFrame9() local blue = w.overlay[3] or "0" blue = math.ceil (blue * 255) + preview:SetTexture (w.texture) + preview:SetTexCoord (unpack (w.texcoord)) + preview:SetVertexColor (unpack (w.overlay)) + preview:SetAlpha (w.alpha) + frame9.wallpaperCurrentLabel.text = "Texture File: " .. (w.texture or "-- -- --") .. "\nAlpha: " .. a .. "\nOverlay red: " .. red .. " green: " .. green .. " blue: " .. blue .. "\nCut (top): " .. t .. "\nCut (bottom): " .. b .. "\nCut (left): " .. l .. "\nCut (right): " .. r end @@ -2768,16 +3404,17 @@ function window:CreateFrame9() frame9.anchorLabel:SetPoint (10, -145) frame9.editImage:SetPoint (10, -170) + frame9.wallpaperPreviewAnchorLabel:SetPoint (10, -210) + frame9.wallpaperCurrentAnchorLabel:SetPoint (10, -380) frame9.wallpaperCurrentLabel:SetPoint (10, -400) - --> wallpaper settings end --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --- Performance - Tweaks +-- Performance - Tweaks ~10 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- function window:CreateFrame10() @@ -2790,11 +3427,17 @@ function window:CreateFrame10() titulo_performance_general_desc.width = 320 --------------- Memory - g:NewSlider (frame10, _, "$parentSliderSegmentsSave", "segmentsSliderToSave", SLIDER_WIDTH, 20, 1, 5, 1, _detalhes.segments_amount_to_save) - + local s = g:NewSlider (frame10, _, "$parentSliderSegmentsSave", "segmentsSliderToSave", SLIDER_WIDTH, 20, 1, 5, 1, _detalhes.segments_amount_to_save) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + s:SetThumbSize (50) + g:NewLabel (frame10, _, "$parentLabelMemory", "memoryLabel", Loc ["STRING_OPTIONS_MEMORYT"], "GameFontHighlightLeft") - g:NewSlider (frame10, _, "$parentSliderMemory", "memorySlider", SLIDER_WIDTH, 20, 1, 4, 1, _detalhes.memory_threshold) + local s = g:NewSlider (frame10, _, "$parentSliderMemory", "memorySlider", SLIDER_WIDTH, 20, 1, 4, 1, _detalhes.memory_threshold) + s:SetBackdrop (slider_backdrop) + s:SetBackdropColor (unpack (slider_backdrop_color)) + frame10.memorySlider:SetPoint ("left", frame10.memoryLabel, "right", 2, 0) frame10.memorySlider:SetHook ("OnValueChange", function (slider, _, amount) @@ -2912,7 +3555,7 @@ function window:CreateFrame10() end --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --- Performance - Captures +-- Performance - Captures ~11 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- function window:CreateFrame11() @@ -3294,7 +3937,7 @@ end local panel_index = 1 local percent_string = g:NewLabel (window, nil, nil, "percent_string", "loading: 0%", "GameFontNormal", 12) percent_string.textcolor = "white" - percent_string:SetPoint ("bottomleft", window, "bottomleft", 27, 11) + percent_string:SetPoint ("bottomleft", window, "bottomleft", 340, 12) local step = 7.6923 function _detalhes:create_options_panels() @@ -3307,6 +3950,12 @@ end percent_string.hide = true _G.DetailsOptionsWindow.full_created = true + + local first_button = all_buttons [1] + last_pressed = first_button + first_button.widget.text:SetPoint ("left", first_button.widget, "left", 3, -1) + first_button.textcolor = selected_textcolor + end percent_string.text = "wait... " .. math.floor (step * panel_index) .. "%" @@ -3324,9 +3973,16 @@ end window:create_left_menu() _G.DetailsOptionsWindow.full_created = true + + local first_button = all_buttons [1] + last_pressed = first_button + first_button.widget.text:SetPoint ("left", first_button.widget, "left", 3, -1) + first_button.textcolor = selected_textcolor end + + select_options (1) end --> if not window @@ -3339,7 +3995,9 @@ function window:update_all (editing_instance) --> window 1 _G.DetailsOptionsWindow1RealmNameSlider.MyObject:SetValue (_detalhes.remove_realm_from_name) _G.DetailsOptionsWindow1Slider.MyObject:SetValue (_detalhes.segments_amount) --segments + _G.DetailsOptionsWindow1UseScrollSlider.MyObject:SetValue (_detalhes.use_scroll) + _G.DetailsOptionsWindow1SliderMaxInstances.MyObject:SetValue (_detalhes.instances_amount) _G.DetailsOptionsWindow1MinimapSlider.MyObject:SetValue (not _detalhes.minimap.hide) _G.DetailsOptionsWindow1AbbreviateDropdown.MyObject:Select (_detalhes.ps_abbreviation) @@ -3348,25 +4006,91 @@ function window:update_all (editing_instance) --> window 2 _G.DetailsOptionsWindow2FragsPvpSlider.MyObject:SetValue (_detalhes.only_pvp_frags) - _G.DetailsOptionsWindow2TTDropdown.MyObject:Select (_detalhes.time_type) + _G.DetailsOptionsWindow2TTDropdown.MyObject:Select (_detalhes.time_type) - --> window 13 - _G.DetailsOptionsWindow13SelectProfileDropdown.MyObject:Select (_detalhes:GetCurrentProfileName()) - _G.DetailsOptionsWindow13SelectProfileDropdown.MyObject:SetFixedParameter (editing_instance) + --> window 4 + _G.DetailsOptionsWindow4BarStartSlider.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow4BarStartSlider.MyObject:SetValue (editing_instance.row_info.start_after_icon) + + --> window 5 + _G.DetailsOptionsWindow5TotalBarSlider.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow5TotalBarSlider.MyObject:SetValue (editing_instance.total_bar.enabled) + + _G.DetailsOptionsWindow5TotalBarColorPick.MyObject:SetColor (unpack (editing_instance.total_bar.color)) + + _G.DetailsOptionsWindow5TotalBarOnlyInGroupSlider.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow5TotalBarOnlyInGroupSlider.MyObject:SetValue (editing_instance.total_bar.only_in_group) + _G.DetailsOptionsWindow5TotalBarIconTexture.MyObject:SetTexture (editing_instance.total_bar.icon) + + --> window 6 + _G.DetailsOptionsWindow6MenuOnEnterLeaveAlphaSwitch.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow6MenuOnEnterAlphaSlider.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow6MenuOnLeaveAlphaSlider.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow6MenuOnEnterLeaveAlphaIconsTooSwitch.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow6BackdropDropdown.MyObject:SetFixedParameter (editing_instance) + + _G.DetailsOptionsWindow6MenuOnEnterAlphaSlider.MyObject:SetValue (editing_instance.menu_alpha.onenter) + _G.DetailsOptionsWindow6MenuOnLeaveAlphaSlider.MyObject:SetValue (editing_instance.menu_alpha.onleave) + _G.DetailsOptionsWindow6MenuOnEnterLeaveAlphaSwitch.MyObject:SetValue (editing_instance.menu_alpha.enabled) + _G.DetailsOptionsWindow6MenuOnEnterLeaveAlphaIconsTooSwitch.MyObject:SetValue (editing_instance.menu_alpha.iconstoo) + _G.DetailsOptionsWindow6BackdropDropdown.MyObject:Select (editing_instance.backdrop_texture) + + local r, g, b = unpack (editing_instance.statusbar_info.overlay) + _G.DetailsOptionsWindow6StatusbarColorPick.MyObject:SetColor (r, g, b, editing_instance.statusbar_info.alpha) + + --> window 7 + + _G.DetailsOptionsWindow7AttributeEnabledSwitch.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow7AttributeAnchorXSlider.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow7AttributeAnchorYSlider.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow7AttributeFontDropdown.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow7AttributeTextSizeSlider.MyObject:SetFixedParameter (editing_instance) + + _G.DetailsOptionsWindow7AttributeEnabledSwitch.MyObject:SetValue (editing_instance.attribute_text.enabled) + _G.DetailsOptionsWindow7AttributeAnchorXSlider.MyObject:SetValue (editing_instance.attribute_text.anchor [1]) + _G.DetailsOptionsWindow7AttributeAnchorYSlider.MyObject:SetValue (editing_instance.attribute_text.anchor [2]) + _G.DetailsOptionsWindow7AttributeFontDropdown.MyObject:Select (instance.attribute_text.text_face) + _G.DetailsOptionsWindow7AttributeTextSizeSlider.MyObject:SetValue (tonumber (editing_instance.attribute_text.text_size)) + _G.DetailsOptionsWindow7AttributeTextColorPick.MyObject:SetColor (unpack (editing_instance.attribute_text.text_color)) + + _G.DetailsOptionsWindow7AttributeSideSwitch.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow7AttributeSideSwitch.MyObject:SetValue (editing_instance.attribute_text.side) + + _G.DetailsOptionsWindow7AutoHideRightMenuSwitch.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow7AutoHideRightMenuSwitch.MyObject:SetValue (editing_instance.auto_hide_menu.right) + + _G.DetailsOptionsWindow7AutoHideLeftMenuSwitch.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow7AutoHideLeftMenuSwitch.MyObject:SetValue (editing_instance.auto_hide_menu.left) + + _G.DetailsOptionsWindow7MenuAnchorSideSlider.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow7MenuAnchorSideSlider.MyObject:SetValue (editing_instance.menu_anchor.side) + + --> window 8 + _G.DetailsOptionsWindow8InstanceButtonAnchorXSlider.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow8InstanceButtonAnchorXSlider.MyObject:SetValue (editing_instance.instance_button_anchor[1]) + + _G.DetailsOptionsWindow8InstanceButtonAnchorYSlider.MyObject:SetFixedParameter (editing_instance) + _G.DetailsOptionsWindow8InstanceButtonAnchorYSlider.MyObject:SetValue (editing_instance.instance_button_anchor[2]) --> window 10 _G.DetailsOptionsWindow10SliderMemory.MyObject:SetValue (_detalhes.memory_threshold) _G.DetailsOptionsWindow10PanicModeSlider.MyObject:SetValue (_detalhes.segments_panic_mode) _G.DetailsOptionsWindow10ClearAnimateScrollSlider.MyObject:SetValue (_detalhes.animate_scroll) _G.DetailsOptionsWindow10SliderSegmentsSave.MyObject:SetValue (_detalhes.segments_amount_to_save) - + --> window 11 _G.DetailsOptionsWindow11CaptureDamageSlider.MyObject:SetValue (_detalhes.capture_real ["damage"]) _G.DetailsOptionsWindow11CaptureHealSlider.MyObject:SetValue (_detalhes.capture_real ["heal"]) _G.DetailsOptionsWindow11CaptureEnergySlider.MyObject:SetValue (_detalhes.capture_real ["energy"]) _G.DetailsOptionsWindow11CaptureMiscSlider.MyObject:SetValue (_detalhes.capture_real ["miscdata"]) _G.DetailsOptionsWindow11CaptureAuraSlider.MyObject:SetValue (_detalhes.capture_real ["aura"]) - _G.DetailsOptionsWindow11CloudAuraSlider.MyObject:SetValue (_detalhes.cloud_capture) + _G.DetailsOptionsWindow11CloudAuraSlider.MyObject:SetValue (_detalhes.cloud_capture) + + --> window 13 + _G.DetailsOptionsWindow13SelectProfileDropdown.MyObject:Select (_detalhes:GetCurrentProfileName()) + _G.DetailsOptionsWindow13SelectProfileDropdown.MyObject:SetFixedParameter (editing_instance) + + ---------- _G.DetailsOptionsWindow8ResetTextColorPick.MyObject:SetColor (unpack (editing_instance.resetbutton_info.text_color)) @@ -3389,14 +4113,7 @@ function window:update_all (editing_instance) _G.DetailsOptionsWindow6SideBarsSlider.MyObject:SetFixedParameter (editing_instance) _G.DetailsOptionsWindow6SideBarsSlider.MyObject:SetValue (editing_instance.show_sidebars) - _G.DetailsOptionsWindow6TotalBarSlider.MyObject:SetFixedParameter (editing_instance) - _G.DetailsOptionsWindow6TotalBarSlider.MyObject:SetValue (editing_instance.total_bar.enabled) - - _G.DetailsOptionsWindow6TotalBarColorPick.MyObject:SetColor (unpack (editing_instance.total_bar.color)) - - _G.DetailsOptionsWindow6TotalBarOnlyInGroupSlider.MyObject:SetFixedParameter (editing_instance) - _G.DetailsOptionsWindow6TotalBarOnlyInGroupSlider.MyObject:SetValue (editing_instance.total_bar.only_in_group) - _G.DetailsOptionsWindow6TotalBarIconTexture.MyObject:SetTexture (editing_instance.total_bar.icon) + _G.DetailsOptionsWindow6StatusbarSlider.MyObject:SetFixedParameter (editing_instance) _G.DetailsOptionsWindow6StatusbarSlider.MyObject:SetValue (editing_instance.show_statusbar) @@ -3428,11 +4145,11 @@ function window:update_all (editing_instance) _G.DetailsOptionsWindow7MenuAnchorYSlider.MyObject:SetFixedParameter (editing_instance) _G.DetailsOptionsWindow7MenuAnchorYSlider.MyObject:SetValue (editing_instance.menu_anchor[2]) - _G.DetailsOptionsWindow7InstanceButtonAnchorXSlider.MyObject:SetFixedParameter (editing_instance) - _G.DetailsOptionsWindow7InstanceButtonAnchorXSlider.MyObject:SetValue (editing_instance.instance_button_anchor[1]) + - _G.DetailsOptionsWindow7InstanceButtonAnchorYSlider.MyObject:SetFixedParameter (editing_instance) - _G.DetailsOptionsWindow7InstanceButtonAnchorYSlider.MyObject:SetValue (editing_instance.instance_button_anchor[2]) + + + ---------------------------------------------------------------- @@ -3511,16 +4228,8 @@ function window:update_all (editing_instance) _G.DetailsOptionsWindow9AnchorDropdown.MyObject:SetFixedParameter (editing_instance) _G.DetailsOptionsWindow9BackgroundDropdown.MyObject:Select (editing_instance.wallpaper.texture) - if (editing_instance.wallpaper.enabled) then - _G.DetailsOptionsWindow9BackgroundDropdown.MyObject:Enable() - _G.DetailsOptionsWindow9BackgroundDropdown2.MyObject:Enable() - _G.DetailsOptionsWindow9UseBackgroundSlider.MyObject:SetValue (2) - else - _G.DetailsOptionsWindow9BackgroundDropdown.MyObject:Disable() - _G.DetailsOptionsWindow9BackgroundDropdown2.MyObject:Disable() - _G.DetailsOptionsWindow9UseBackgroundSlider.MyObject:SetValue (1) - end - + _G.DetailsOptionsWindow9UseBackgroundSlider.MyObject:SetValue (editing_instance.wallpaper.enabled) + _G.DetailsOptionsWindow6WindowColorPick.MyObject:SetColor (unpack (editing_instance.color)) --_G.DetailsOptionsWindow6InstanceColorTexture.MyObject:SetTexture (unpack (editing_instance.color)) @@ -3571,7 +4280,7 @@ else function _detalhes:options_loading_done() if (_G.DetailsOptionsWindow.full_created) then _G.DetailsOptionsWindow.MyObject:update_all (instance) - _detalhes:CancelTimer (window.loading_check) + _detalhes:CancelTimer (window.loading_check, true) end end window.loading_check = _detalhes:ScheduleRepeatingTimer ("options_loading_done", 0.1) diff --git a/gumps/janela_principal.lua b/gumps/janela_principal.lua index 0df2decf..56e325a3 100644 --- a/gumps/janela_principal.lua +++ b/gumps/janela_principal.lua @@ -35,10 +35,13 @@ local modo_alone = _detalhes._detalhes_props["MODO_ALONE"] local modo_grupo = _detalhes._detalhes_props["MODO_GROUP"] local modo_all = _detalhes._detalhes_props["MODO_ALL"] +--constants +local baseframe_strata = "HIGH" local gump_fundo_backdrop = { bgFile = [[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16, insets = {left = 0, right = 0, top = 0, bottom = 0}} + function _detalhes:ScheduleUpdate (instancia) instancia.barraS = {nil, nil} instancia.update = true @@ -300,6 +303,10 @@ end local function OnLeaveMainWindow (instancia, self) + instancia.is_interacting = false + instancia:SetMenuAlpha (nil, nil, nil, true) + instancia:SetAutoHideMenu (nil, nil, true) + if (instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and not instancia.baseframe.isLocked) then --> resizes and lock button @@ -325,6 +332,10 @@ _detalhes.OnLeaveMainWindow = OnLeaveMainWindow local function OnEnterMainWindow (instancia, self) + instancia.is_interacting = true + instancia:SetMenuAlpha (nil, nil, nil, true) + instancia:SetAutoHideMenu (nil, nil, true) + if (instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and not instancia.baseframe.isLocked) then --> resizes and lock button @@ -663,6 +674,7 @@ local function BFrame_scripts (baseframe, instancia) baseframe:SetScript("OnSizeChanged", function (self) instancia:SaveMainWindowPosition() instancia:ReajustaGump() + instancia.oldwith = baseframe:GetWidth() _detalhes:SendEvent ("DETAILS_INSTANCE_SIZECHANGED", nil, instancia) end) @@ -1247,8 +1259,12 @@ local function barra_scripts (esta_barra, instancia, i) return _detalhes.switch:ShowMe (instancia) end - esta_barra.texto_esquerdo:SetPoint ("left", esta_barra.icone_classe, "right", 4, -1) esta_barra.texto_direita:SetPoint ("right", esta_barra.statusbar, "right", 1, -1) + if (instancia.row_info.no_icon) then + esta_barra.texto_esquerdo:SetPoint ("left", esta_barra.statusbar, "left", 3, -1) + else + esta_barra.texto_esquerdo:SetPoint ("left", esta_barra.icone_classe, "right", 4, -1) + end self.mouse_down = _GetTime() self.button = button @@ -1278,8 +1294,12 @@ local function barra_scripts (esta_barra, instancia, i) end - esta_barra.texto_esquerdo:SetPoint ("left", esta_barra.icone_classe, "right", 3, 0) esta_barra.texto_direita:SetPoint ("right", esta_barra.statusbar, "right") + if (instancia.row_info.no_icon) then + esta_barra.texto_esquerdo:SetPoint ("left", esta_barra.statusbar, "left", 2, 0) + else + esta_barra.texto_esquerdo:SetPoint ("left", esta_barra.icone_classe, "right", 3, 0) + end local x, y = _GetCursorPosition() x = _math_floor (x) @@ -1445,7 +1465,7 @@ local function button_stretch_scripts (baseframe, backgrounddisplay, instancia) gump:GradientEffect (esta_instancia.baseframe.wallpaper, "texture", _r, _g, _b, _a, _r, _g, _b, esta_instancia.baseframe.wallpaper.alpha, 1.0) end - esta_instancia.baseframe:SetFrameStrata ("LOW") + esta_instancia.baseframe:SetFrameStrata (baseframe_strata) esta_instancia.baseframe.button_stretch:SetFrameStrata ("FULLSCREEN") _detalhes:SendEvent ("DETAILS_INSTANCE_ENDSTRETCH", nil, esta_instancia.baseframe) end @@ -1462,7 +1482,7 @@ local function button_stretch_scripts (baseframe, backgrounddisplay, instancia) gump:GradientEffect (baseframe.wallpaper, "texture", _r, _g, _b, _a, _r, _g, _b, instancia.wallpaper.alpha, 1.0) end - baseframe:SetFrameStrata ("LOW") + baseframe:SetFrameStrata (baseframe_strata) baseframe.button_stretch:SetFrameStrata ("FULLSCREEN") _detalhes:SnapTextures (false) @@ -1830,7 +1850,7 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) local baseframe = CreateFrame ("scrollframe", "DetailsBaseFrame"..ID, _UIParent) --> main frame baseframe.instance = instancia - baseframe:SetFrameStrata ("LOW") + baseframe:SetFrameStrata (baseframe_strata) baseframe:SetFrameLevel (2) local backgroundframe = CreateFrame ("scrollframe", "Details_WindowFrame"..ID, baseframe) --> main window @@ -1954,7 +1974,7 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) baseframe:EnableMouse (true) baseframe:SetMovable (true) baseframe:SetResizable (true) - baseframe:SetMinResize (150, 40) + baseframe:SetMinResize (150, 7) baseframe:SetMaxResize (_detalhes.max_window_size.width, _detalhes.max_window_size.height) baseframe:SetBackdrop (gump_fundo_backdrop) @@ -2022,8 +2042,8 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) baseframe.resize_direita:SetHeight (16) baseframe.resize_direita:SetPoint ("bottomright", baseframe, "bottomright", 0, 0) baseframe.resize_direita:EnableMouse (true) - baseframe.resize_direita:SetFrameLevel (baseframe:GetFrameLevel() + 6) baseframe.resize_direita:SetFrameStrata ("HIGH") + baseframe.resize_direita:SetFrameLevel (baseframe:GetFrameLevel() + 6) baseframe.resize_direita.side = 2 --> lock window button @@ -2039,6 +2059,8 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) baseframe.lock_button.label:SetText (Loc ["STRING_LOCK_WINDOW"]) baseframe.lock_button:SetWidth (baseframe.lock_button.label:GetStringWidth()+2) baseframe.lock_button:SetScript ("OnClick", lockFunctionOnClick) + baseframe.lock_button:SetFrameStrata ("HIGH") + baseframe.lock_button:SetFrameLevel (baseframe:GetFrameLevel() + 6) --> left resizer baseframe.resize_esquerda = CreateFrame ("button", "Details_Resize_Esquerda"..ID, baseframe) @@ -2055,8 +2077,8 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) baseframe.resize_esquerda:SetHeight (16) baseframe.resize_esquerda:SetPoint ("bottomleft", baseframe, "bottomleft", 0, 0) baseframe.resize_esquerda:EnableMouse (true) - baseframe.resize_esquerda:SetFrameLevel (baseframe:GetFrameLevel() + 6) baseframe.resize_esquerda:SetFrameStrata ("HIGH") + baseframe.resize_esquerda:SetFrameLevel (baseframe:GetFrameLevel() + 6) baseframe.resize_esquerda:SetAlpha (0) baseframe.resize_direita:SetAlpha (0) @@ -2088,8 +2110,11 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) -- left and right side bars ------------------------------------------------------------------------------------------------------------------------------------------------------------ -- ~barra ~bordas ~border + local floatingframe = CreateFrame ("frame", "DetailsInstance"..ID.."BorderHolder", baseframe) + floatingframe:SetFrameLevel (baseframe:GetFrameLevel()+7) + instancia.floatingframe = floatingframe --> left - baseframe.barra_esquerda = baseframe.cabecalho.fechar:CreateTexture (nil, "artwork") + baseframe.barra_esquerda = floatingframe:CreateTexture (nil, "artwork") baseframe.barra_esquerda:SetTexture (DEFAULT_SKIN) baseframe.barra_esquerda:SetTexCoord (unpack (COORDS_LEFT_SIDE_BAR)) baseframe.barra_esquerda:SetWidth (64) @@ -2097,7 +2122,7 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) baseframe.barra_esquerda:SetPoint ("topleft", baseframe, "topleft", -56, 0) baseframe.barra_esquerda:SetPoint ("bottomleft", baseframe, "bottomleft", -56, -14) --> right - baseframe.barra_direita = baseframe.cabecalho.fechar:CreateTexture (nil, "artwork") + baseframe.barra_direita = floatingframe:CreateTexture (nil, "artwork") baseframe.barra_direita:SetTexture (DEFAULT_SKIN) baseframe.barra_direita:SetTexCoord (unpack (COORDS_RIGHT_SIDE_BAR)) baseframe.barra_direita:SetWidth (64) @@ -2105,7 +2130,7 @@ function gump:CriaJanelaPrincipal (ID, instancia, criando) baseframe.barra_direita:SetPoint ("topright", baseframe, "topright", 56, 0) baseframe.barra_direita:SetPoint ("bottomright", baseframe, "bottomright", 56, -14) --> bottom - baseframe.barra_fundo = baseframe.cabecalho.fechar:CreateTexture (nil, "artwork") + baseframe.barra_fundo = floatingframe:CreateTexture (nil, "artwork") baseframe.barra_fundo:SetTexture (DEFAULT_SKIN) baseframe.barra_fundo:SetTexCoord (unpack (COORDS_BOTTOM_SIDE_BAR)) baseframe.barra_fundo:SetWidth (512) @@ -2297,13 +2322,15 @@ function gump:CriaNovaBarra (instancia, index) esta_barra:EnableMouse (true) esta_barra:RegisterForClicks ("LeftButtonDown", "RightButtonDown") - esta_barra.statusbar = CreateFrame ("StatusBar", nil, esta_barra) + esta_barra.statusbar = CreateFrame ("StatusBar", "DetailsBarra_Statusbar_"..instancia.meu_id.."_"..index, esta_barra) --esta_barra.statusbar:SetAllPoints (esta_barra) esta_barra.textura = esta_barra.statusbar:CreateTexture (nil, "artwork") esta_barra.textura:SetHorizTile (false) esta_barra.textura:SetVertTile (false) - esta_barra.textura:SetTexture (instancia.row_info.texture_file) + + local current_texture = SharedMedia:Fetch ("statusbar", instancia.row_info.texture) + esta_barra.textura:SetTexture (current_texture) esta_barra.background = esta_barra:CreateTexture (nil, "background") esta_barra.background:SetTexture() @@ -2318,7 +2345,7 @@ function gump:CriaNovaBarra (instancia, index) local icone_classe = esta_barra.statusbar:CreateTexture (nil, "overlay") icone_classe:SetHeight (instancia.row_info.height) icone_classe:SetWidth (instancia.row_info.height) - icone_classe:SetTexture ([[Interface\AddOns\Details\images\classes_small]]) + icone_classe:SetTexture (instancia.row_info.icon_file) icone_classe:SetTexCoord (.75, 1, .75, 1) esta_barra.icone_classe = icone_classe @@ -2340,11 +2367,11 @@ function gump:CriaNovaBarra (instancia, index) instancia:SetFontSize (esta_barra.texto_esquerdo, instancia.row_info.font_size) instancia:SetFontFace (esta_barra.texto_esquerdo, instancia.row_info.font_face_file) - _detalhes.font_pool:add (esta_barra.texto_esquerdo) + --_detalhes.font_pool:add (esta_barra.texto_esquerdo) instancia:SetFontSize (esta_barra.texto_direita, instancia.row_info.font_size) instancia:SetFontFace (esta_barra.texto_direita, instancia.row_info.font_face_file) - _detalhes.font_pool:add (esta_barra.texto_direita) + --_detalhes.font_pool:add (esta_barra.texto_direita) if (instancia.row_info.textL_outline) then instancia:SetFontOutline (esta_barra.texto_esquerdo, instancia.row_info.textL_outline) @@ -2416,11 +2443,21 @@ function _detalhes:SetBarTextSettings (size, font, fixedcolor, leftcolorbyclass, self:InstanceRefreshRows() end -function _detalhes:SetBarSettings (height, texture, colorclass, fixedcolor, backgroundtexture, backgroundcolorclass, backgroundfixedcolor, alpha, iconfile) +function _detalhes:SetBarSettings (height, texture, colorclass, fixedcolor, backgroundtexture, backgroundcolorclass, backgroundfixedcolor, alpha, iconfile, barstart) + + --> bar start + if (type (barstart) == "boolean") then + self.row_info.start_after_icon = barstart + end --> icon file if (iconfile) then self.row_info.icon_file = iconfile + if (iconfile == "") then + self.row_info.no_icon = true + else + self.row_info.no_icon = false + end end --> alpha @@ -2516,6 +2553,11 @@ function _detalhes:InstanceRefreshRows (instancia) --alpha local alpha = self.row_info.alpha + --icons + local no_icon = self.row_info.no_icon + local icon_texture = self.row_info.icon_file + local start_after_icon = self.row_info.start_after_icon + -- do it for _, row in _ipairs (self.barras) do @@ -2524,6 +2566,24 @@ function _detalhes:InstanceRefreshRows (instancia) row:SetHeight (height) row.icone_classe:SetHeight (height) row.icone_classe:SetWidth (height) + + --> icon + if (no_icon) then + row.statusbar:SetPoint ("topleft", row, "topleft") + row.statusbar:SetPoint ("bottomright", row, "bottomright") + row.texto_esquerdo:SetPoint ("left", row.statusbar, "left", 2, 0) + row.icone_classe:Hide() + else + if (start_after_icon) then + row.statusbar:SetPoint ("topleft", row.icone_classe, "topright") + else + row.statusbar:SetPoint ("topleft", row, "topleft") + end + + row.statusbar:SetPoint ("bottomright", row, "bottomright") + row.texto_esquerdo:SetPoint ("left", row.icone_classe, "right", 3, 0) + row.icone_classe:Show() + end if (not self.row_info.texture_background_class_color) then local c = self.row_info.fixed_texture_background_color @@ -2672,7 +2732,6 @@ function _detalhes:InstanceWallpaper (texture, anchor, alpha, texcoord, width, h end t:SetTexture (texture) - t:SetAlpha (alpha) t:SetTexCoord (unpack (texcoord)) t:SetWidth (width) t:SetHeight (height) @@ -2687,36 +2746,151 @@ function _detalhes:InstanceWallpaper (texture, anchor, alpha, texcoord, width, h wallpaper.height = height wallpaper.overlay = overlay - if (t.faded) then - gump:Fade (t, "out") + t:Show() + --t:SetAlpha (alpha) + gump:Fade (t, "ALPHAANIM", alpha) + +end + +function _detalhes:GetTextures() + local t = {} + t [1] = self.baseframe.rodape.esquerdo + t [2] = self.baseframe.rodape.direita + t [3] = self.baseframe.rodape.top_bg + + t [4] = self.baseframe.cabecalho.ball_r + t [5] = self.baseframe.cabecalho.ball + t [6] = self.baseframe.cabecalho.emenda + t [7] = self.baseframe.cabecalho.top_bg + + t [8] = self.baseframe.barra_esquerda + t [9] = self.baseframe.barra_direita + t [10] = self.baseframe.UPFrame + return t + --atributo_icon é uma exceção +end + +function _detalhes:SetWindowAlphaForInteract (alpha) + + if (self.is_interacting) then + --> entrou + self.baseframe:SetAlpha (alpha) else - gump:Fade (t, "AlphaAnim", alpha) + --> saiu + if (self.combat_changes_alpha) then --> combat alpha + self.baseframe:SetAlpha (self.combat_changes_alpha) + else + self.baseframe:SetAlpha (alpha) + end + end + +end + +function _detalhes:SetWindowAlphaForCombat (entering_in_combat) + + local amount + + if (entering_in_combat) then + amount = self.hide_in_combat_alpha / 100 + self.combat_changes_alpha = amount + else + if (self.menu_alpha.enabled) then --auto transparency + if (self.is_interacting) then + amount = self.menu_alpha.onenter + else + amount = self.menu_alpha.onleave + end + else + amount = self.color [4] + end + self.combat_changes_alpha = nil + end + + gump:Fade (self.baseframe, "ALPHAANIM", amount) + + if (self.show_statusbar) then + self.baseframe.barra_fundo:Hide() + end + if (self.hide_icon) then + self.baseframe.cabecalho.atributo_icon:Hide() + end + +end + +function _detalhes:InstanceButtonsColors (red, green, blue, alpha, no_save, only_left, only_right) + + if (not red) then + red, green, blue, alpha = unpack (self.color_buttons) + end + + if (type (red) ~= "number") then + red, green, blue, alpha = gump:ParseColors (red) + end + + if (not no_save) then + self.color_buttons [1] = red + self.color_buttons [2] = green + self.color_buttons [3] = blue + self.color_buttons [4] = alpha + end + + local baseToolbar = self.baseframe.cabecalho + + + if (only_left) then + + local icons = {baseToolbar.modo_selecao, baseToolbar.segmento, baseToolbar.atributo, baseToolbar.report} + + for _, button in _ipairs (icons) do + button:SetAlpha (alpha) + end + + if (self:IsLowerInstance()) then + for _, ThisButton in _ipairs (_detalhes.ToolBar.Shown) do + ThisButton:SetAlpha (alpha) + end + end + + elseif (only_right) then + + local icons = {baseToolbar.novo, baseToolbar.fechar} + + if (self.meu_id == _detalhes.ResetButtonInstance) then + tinsert (icons, _detalhes.ResetButton) + tinsert (icons, _detalhes.ResetButton2) + end + + for _, button in _ipairs (icons) do + button:SetAlpha (alpha) + end + + else + + local icons = {baseToolbar.modo_selecao, baseToolbar.segmento, baseToolbar.atributo, baseToolbar.report, baseToolbar.novo, baseToolbar.fechar} + + if (self.meu_id == _detalhes.ResetButtonInstance) then + tinsert (icons, _detalhes.ResetButton) + tinsert (icons, _detalhes.ResetButton2) + end + + for _, button in _ipairs (icons) do + button:SetAlpha (alpha) + end + + if (self:IsLowerInstance()) then + for _, ThisButton in _ipairs (_detalhes.ToolBar.Shown) do + ThisButton:SetAlpha (alpha) + end + end + end end -function _detalhes:SetWindowAlpha (alpha, run_instance_color) - local current_alpha = self.window_alpha or 1 - - if (current_alpha > alpha) then - gump:Fade (self.baseframe, "ALPHAANIM", alpha) - else - gump:Fade (self.baseframe, "ALPHAANIM", alpha) - end - - gump:Fade (self.baseframe.cabecalho.ball, "ALPHAANIM", alpha) - gump:Fade (self.baseframe.cabecalho.atributo_icon, "ALPHAANIM", alpha) - - self.window_alpha = alpha - - if (run_instance_color) then - self:InstanceColor() - end -end - -function _detalhes:InstanceColor (red, green, blue, alpha, no_save) +function _detalhes:InstanceColor (red, green, blue, alpha, no_save, change_statusbar) if (not red) then red, green, blue, alpha = unpack (self.color) + no_save = true end if (type (red) ~= "number") then @@ -2724,27 +2898,37 @@ function _detalhes:InstanceColor (red, green, blue, alpha, no_save) end if (not no_save) then + --> saving self.color [1] = red self.color [2] = green self.color [3] = blue self.color [4] = alpha + if (change_statusbar) then + self:StatusBarColor (red, green, blue, alpha) + end + else + --> not saving + self:StatusBarColor (nil, nil, nil, alpha, true) end local skin = _detalhes.skins [self.skin] + --[[ self.baseframe.rodape.esquerdo:SetVertexColor (red, green, blue) self.baseframe.rodape.esquerdo:SetAlpha (alpha) self.baseframe.rodape.direita:SetVertexColor (red, green, blue) self.baseframe.rodape.direita:SetAlpha (alpha) self.baseframe.rodape.top_bg:SetVertexColor (red, green, blue) self.baseframe.rodape.top_bg:SetAlpha (alpha) + --]] self.baseframe.cabecalho.ball_r:SetVertexColor (red, green, blue) self.baseframe.cabecalho.ball_r:SetAlpha (alpha) self.baseframe.cabecalho.ball:SetVertexColor (red, green, blue) - if (skin.can_change_alpha_head) then - self.baseframe.cabecalho.ball:SetAlpha (alpha) - end + + self.baseframe.cabecalho.ball:SetAlpha (alpha) + self.baseframe.cabecalho.atributo_icon:SetAlpha (alpha) + self.baseframe.cabecalho.emenda:SetVertexColor (red, green, blue) self.baseframe.cabecalho.emenda:SetAlpha (alpha) self.baseframe.cabecalho.top_bg:SetVertexColor (red, green, blue) @@ -2757,7 +2941,9 @@ function _detalhes:InstanceColor (red, green, blue, alpha, no_save) self.baseframe.barra_fundo:SetVertexColor (red, green, blue) self.baseframe.barra_fundo:SetAlpha (alpha) - self.color[1], self.color[2], self.color[3], self.color[4] = red, green, blue, alpha + self.baseframe.UPFrame:SetAlpha (alpha) + + --self.color[1], self.color[2], self.color[3], self.color[4] = red, green, blue, alpha end function _detalhes:StatusBarAlertTime (instance) @@ -3753,6 +3939,12 @@ function _detalhes:ChangeSkin (skin_name) _detalhes.ResetButton2.Left:SetTexCoord (unpack (this_skin.reset_button_small_coords or this_skin.reset_button_coords)) _detalhes.ResetButton2.Left:SetSize (_detalhes.ResetButton2:GetSize()) + if (this_skin.reset_button_small_size) then + _detalhes.ResetButton2:SetSize (unpack (this_skin.reset_button_small_size)) + else + _detalhes.ResetButton2:SetSize (22, 15) + end + --> remove propriedades do botão da blizzard _detalhes:DisableUIPanelButton (_detalhes.ResetButton) _detalhes:DisableUIPanelButton (_detalhes.ResetButton2) @@ -3761,6 +3953,7 @@ function _detalhes:ChangeSkin (skin_name) if (_detalhes.ResetButtonInstance == self.meu_id) then _detalhes:RestoreUIPanelButton (_detalhes.ResetButton) _detalhes:RestoreUIPanelButton (_detalhes.ResetButton2) + _detalhes.ResetButton2:SetSize (22, 15) end end @@ -3769,7 +3962,7 @@ function _detalhes:ChangeSkin (skin_name) if (this_skin.instance_button_coords) then --> seta o botão - self.baseframe.cabecalho.novo:SetHeight (12) + self.baseframe.cabecalho.novo:SetHeight (this_skin.instance_button_size or 12) self.baseframe.cabecalho.novo.Left:SetTexture (skin_file) self.baseframe.cabecalho.novo.Left:SetTexCoord (unpack (this_skin.instance_button_coords)) self.baseframe.cabecalho.novo.Left:SetSize (self.baseframe.cabecalho.novo:GetSize()) @@ -3893,12 +4086,12 @@ function _detalhes:ChangeSkin (skin_name) if (_detalhes.ResetButtonInstance == self.meu_id) then self:SetDeleteButtonSettings() end - + --> refresh close button self:SetCloseButtonSettings() --> update toolbar - self:ToolbarSide() -- aqui + self:ToolbarSide() --> update stretch button self:StretchButtonAnchor() @@ -3912,7 +4105,7 @@ function _detalhes:ChangeSkin (skin_name) --> update statusbar if (self.show_statusbar) then - self:ShowStatusBar() -- aqui + self:ShowStatusBar() else self:HideStatusBar() end @@ -3928,7 +4121,9 @@ function _detalhes:ChangeSkin (skin_name) self:InstanceColor() self:SetBackgroundColor() self:SetBackgroundAlpha() - + self:SetAutoHideMenu() + self:SetBackdropTexture() + --> refresh all bars self:InstanceRefreshRows() @@ -3936,6 +4131,15 @@ function _detalhes:ChangeSkin (skin_name) --> update menu saturation self:DesaturateMenu() + --> update statusbar color + self:StatusBarColor() + + --> update attribute string + self:AttributeMenu() + self:LeftMenuAnchorSide() + + _detalhes.ToolBar:ReorganizeIcons (nil, true) --call self:SetMenuAlpha() + --> refresh options panel if opened if (_G.DetailsOptionsWindow and _G.DetailsOptionsWindow:IsShown()) then --print (self.meu_id) @@ -3956,11 +4160,275 @@ function _detalhes:ChangeSkin (skin_name) self.bgframe.skin = this_skin --self.bgframe.skin_script_instance = true end - + end end +function _detalhes:LeftMenuAnchorSide (side) + + if (not side) then + side = self.menu_anchor.side + end + + self.menu_anchor.side = side + + return self:MenuAnchor() + +end + +-- ~attributemenu +function _detalhes:AttributeMenu (enabled, pos_x, pos_y, font, size, color, side) + + if (type (enabled) ~= "boolean") then + enabled = self.attribute_text.enabled + end + + if (not pos_x) then + pos_x = self.attribute_text.anchor [1] + end + if (not pos_y) then + pos_y = self.attribute_text.anchor [2] + end + + if (not font) then + font = self.attribute_text.text_face + end + + if (not size) then + size = self.attribute_text.text_size + end + + if (not color) then + color = self.attribute_text.text_color + end + + if (not side) then + side = self.attribute_text.side + end + + self.attribute_text.enabled = enabled + self.attribute_text.anchor [1] = pos_x + self.attribute_text.anchor [2] = pos_y + self.attribute_text.text_face = font + self.attribute_text.text_size = size + self.attribute_text.text_color = color + self.attribute_text.side = side + + --> enabled + if (not enabled and self.menu_attribute_string) then + return self.menu_attribute_string:Hide() + elseif (not enabled) then + return + end + + if (not self.menu_attribute_string) then + + local label = gump:NewLabel (self.floatingframe, nil, "DetailsAttributeStringInstance" .. self.meu_id, nil, "", "GameFontHighlightSmall") + self.menu_attribute_string = label + self.menu_attribute_string.text = _detalhes:GetSubAttributeName (self.atributo, self.sub_atributo) + self.menu_attribute_string.owner_instance = self + + self.menu_attribute_string.Enabled = true + self.menu_attribute_string.__enabled = true + + function self.menu_attribute_string:OnEvent (instance, attribute, subAttribute) + if (instance == label.owner_instance) then + label.text = _detalhes:GetSubAttributeName (attribute, subAttribute) + end + end + + _detalhes:RegisterEvent (self.menu_attribute_string, "DETAILS_INSTANCE_CHANGEATTRIBUTE", self.menu_attribute_string.OnEvent) + + end + + self.menu_attribute_string:Show() + + --> anchor + if (side == 1) then --> a string esta no lado de cima + if (self.toolbar_side == 1) then -- a toolbar esta em cima + self.menu_attribute_string:ClearAllPoints() + self.menu_attribute_string:SetPoint ("bottomleft", self.baseframe.cabecalho.ball, "bottomright", self.attribute_text.anchor [1], self.attribute_text.anchor [2]) + + elseif (self.toolbar_side == 2) then --a toolbar esta em baixo + self.menu_attribute_string:ClearAllPoints() + self.menu_attribute_string:SetPoint ("bottomleft", self.baseframe, "topleft", self.attribute_text.anchor [1] + 21, self.attribute_text.anchor [2]) + + end + + elseif (side == 2) then --> a string esta no lado de baixo + if (self.toolbar_side == 1) then --toolbar esta em cima + self.menu_attribute_string:ClearAllPoints() + self.menu_attribute_string:SetPoint ("left", self.baseframe.rodape.StatusBarLeftAnchor, "left", self.attribute_text.anchor [1] + 16, self.attribute_text.anchor [2] - 6) + + elseif (self.toolbar_side == 2) then --toolbar esta em baixo + self.menu_attribute_string:SetPoint ("bottomleft", self.baseframe.cabecalho.ball, "topright", self.attribute_text.anchor [1], self.attribute_text.anchor [2] - 19) + + end + end + + --font face + local fontPath = SharedMedia:Fetch ("font", font) + _detalhes:SetFontFace (self.menu_attribute_string, fontPath) + + --font size + _detalhes:SetFontSize (self.menu_attribute_string, size) + + --color + _detalhes:SetFontColor (self.menu_attribute_string, color) + +end + +-- ~backdrop +function _detalhes:SetBackdropTexture (texturename) + + if (not texturename) then + texturename = self.backdrop_texture + end + + self.backdrop_texture = texturename + + local texture_path = SharedMedia:Fetch ("background", texturename) + + self.baseframe:SetBackdrop ({ + bgFile = texture_path, tile = true, tileSize = 128, + insets = {left = 0, right = 0, top = 0, bottom = 0}} + ) + self.bgdisplay:SetBackdrop ({ + bgFile = texture_path, tile = true, tileSize = 128, + insets = {left = 0, right = 0, top = 0, bottom = 0}} + ) + + self:SetBackgroundAlpha (self.bg_alpha) + +end + +-- ~alpha +function _detalhes:SetAutoHideMenu (left, right, interacting) + + if (interacting) then + if (self.is_interacting) then + if (self.auto_hide_menu.left) then + local r, g, b = unpack (self.color_buttons) + self:InstanceButtonsColors (r, g, b, 1, true, true) --no save, only left + end + if (self.auto_hide_menu.right) then + local r, g, b = unpack (self.color_buttons) + self:InstanceButtonsColors (r, g, b, 1, true, nil, true) --no save, only right + end + else + if (self.auto_hide_menu.left) then + local r, g, b = unpack (self.color_buttons) + self:InstanceButtonsColors (r, g, b, 0, true, true) --no save, only left + end + if (self.auto_hide_menu.right) then + local r, g, b = unpack (self.color_buttons) + self:InstanceButtonsColors (r, g, b, 0, true, nil, true) --no save, only right + end + end + return + end + + if (left == nil) then + left = self.auto_hide_menu.left + end + if (right == nil) then + right = self.auto_hide_menu.right + end + + self.auto_hide_menu.left = left + self.auto_hide_menu.right = right + + local r, g, b = unpack (self.color_buttons) + + if (not left) then + --auto hide is off + self:InstanceButtonsColors (r, g, b, 1, true, true) --no save, only left + else + if (self.is_interacting) then + self:InstanceButtonsColors (r, g, b, 1, true, true) --no save, only left + else + self:InstanceButtonsColors (0, 0, 0, 0, true, true) --no save, only left + end + end + + if (not right) then + --auto hide is off + self:InstanceButtonsColors (r, g, b, 1, true, nil, true) --no save, only right + else + if (self.is_interacting) then + self:InstanceButtonsColors (r, g, b, 1, true, nil, true) --no save, only right + else + self:InstanceButtonsColors (0, 0, 0, 0, true, nil, true) --no save, only right + end + end + + --auto_hide_menu = {left = false, right = false}, + +end +function _detalhes:SetMenuAlpha (enabled, onenter, onleave, interacting) + + if (interacting) then --> called from a onenter or onleave script + if (self.menu_alpha.enabled) then + if (self.is_interacting) then + return self:SetWindowAlphaForInteract (self.menu_alpha.onenter) + else + return self:SetWindowAlphaForInteract (self.menu_alpha.onleave) + end + end + return + end + + if (enabled == nil) then + enabled = self.menu_alpha.enabled + end + if (not onenter) then + onenter = self.menu_alpha.onenter + end + if (not onleave) then + onleave = self.menu_alpha.onleave + end + + self.menu_alpha.enabled = enabled + self.menu_alpha.onenter = onenter + self.menu_alpha.onleave = onleave + + if (not enabled) then + return self:SetWindowAlphaForInteract (self.color [4]) + end + + if (self.is_interacting) then + return self:SetWindowAlphaForInteract (onenter) --> set alpha + else + return self:SetWindowAlphaForInteract (onleave) --> set alpha + end + +end + +function _detalhes:GetInstanceCurrentAlpha() + if (self.menu_alpha.enabled) then + if (self:IsInteracting()) then + return self.menu_alpha.onenter + else + return self.menu_alpha.onleave + end + else + return self.color [4] + end +end + +function _detalhes:GetInstanceIconsCurrentAlpha() + if (self.menu_alpha.enabled and self.menu_alpha.iconstoo) then + if (self:IsInteracting()) then + return self.menu_alpha.onenter + else + return self.menu_alpha.onleave + end + else + return 1 + end +end + function _detalhes:ToolbarSide (side) if (not side) then @@ -4053,6 +4521,8 @@ function _detalhes:ToolbarSide (side) self:ShowSideBars() end + self:AttributeMenu() + end function _detalhes:StretchButtonAnchor (side) @@ -4137,26 +4607,52 @@ function _detalhes:MenuAnchor (x, y) self.menu_anchor [1] = x self.menu_anchor [2] = y - if (self.consolidate) then - self.consolidateButton:ClearAllPoints() - - if (self.toolbar_side == 1) then --> top - self.consolidateButton:SetPoint ("bottomleft", self.baseframe.cabecalho.ball, "bottomright", x, y) + if (self.menu_anchor.side == 1) then --> left + if (self.consolidate) then + self.consolidateButton:ClearAllPoints() - else --> bottom - - self.consolidateButton:SetPoint ("topleft", self.baseframe.cabecalho.ball, "topright", x, y*-1) - end - - else --> not consolidated - self.baseframe.cabecalho.modo_selecao:ClearAllPoints() - - if (self.toolbar_side == 1) then --> top - self.baseframe.cabecalho.modo_selecao:SetPoint ("bottomleft", self.baseframe.cabecalho.ball, "bottomright", x, y) + if (self.toolbar_side == 1) then --> top + self.consolidateButton:SetPoint ("bottomleft", self.baseframe.cabecalho.ball, "bottomright", x, y) + + else --> bottom - else --> bottom - self.baseframe.cabecalho.modo_selecao:SetPoint ("topleft", self.baseframe.cabecalho.ball, "topright", x, y*-1) + self.consolidateButton:SetPoint ("topleft", self.baseframe.cabecalho.ball, "topright", x, y*-1) + end + + else --> not consolidated + self.baseframe.cabecalho.modo_selecao:ClearAllPoints() + + if (self.toolbar_side == 1) then --> top + self.baseframe.cabecalho.modo_selecao:SetPoint ("bottomleft", self.baseframe.cabecalho.ball, "bottomright", x, y) + + else --> bottom + self.baseframe.cabecalho.modo_selecao:SetPoint ("topleft", self.baseframe.cabecalho.ball, "topright", x, y*-1) + end + end + + elseif (self.menu_anchor.side == 2) then --> right + if (self.consolidate) then + self.consolidateButton:ClearAllPoints() + + if (self.toolbar_side == 1) then --> top + self.consolidateButton:SetPoint ("bottomright", self.baseframe, "topright", x, y) + + else --> bottom + + self.consolidateButton:SetPoint ("topleft", self.baseframe.cabecalho.ball, "topright", x, y*-1) + end + + else --> not consolidated + self.baseframe.cabecalho.modo_selecao:ClearAllPoints() + + if (self.toolbar_side == 1) then --> top + self.baseframe.cabecalho.modo_selecao:SetPoint ("topleft", self.baseframe.cabecalho.ball_r, "bottomleft", x, y+16) + + else --> bottom + self.baseframe.cabecalho.modo_selecao:SetPoint ("topleft", self.baseframe.cabecalho.ball_r, "topleft", x, y*-1) + + end end end end @@ -4345,6 +4841,29 @@ function _detalhes:HideStatusBar (instancia) _detalhes.StatusBar:Hide (self) --> mini displays widgets end +function _detalhes:StatusBarColor (r, g, b, a, no_save) + + if (not r) then + r, g, b = unpack (self.statusbar_info.overlay) + a = a or self.statusbar_info.alpha + end + + if (not no_save) then + self.statusbar_info.overlay [1] = r + self.statusbar_info.overlay [2] = g + self.statusbar_info.overlay [3] = b + self.statusbar_info.alpha = a + end + + self.baseframe.rodape.esquerdo:SetVertexColor (r, g, b) + self.baseframe.rodape.esquerdo:SetAlpha (a) + self.baseframe.rodape.direita:SetVertexColor (r, g, b) + self.baseframe.rodape.direita:SetAlpha (a) + self.baseframe.rodape.top_bg:SetVertexColor (r, g, b) + self.baseframe.rodape.top_bg:SetAlpha (a) + +end + function _detalhes:ShowStatusBar (instancia) if (instancia) then self = instancia @@ -4458,6 +4977,15 @@ function gump:CriaCabecalho (baseframe, instancia) BGFrame_scripts (baseframe.UPFrame, baseframe, instancia) + --> corrige o vão entre o baseframe e o upframe + baseframe.UPFrameConnect = CreateFrame ("frame", "DetailsAntiGap"..instancia.meu_id, baseframe) + baseframe.UPFrameConnect:SetPoint ("bottomleft", baseframe, "topleft", 0, -1) + baseframe.UPFrameConnect:SetPoint ("bottomright", baseframe, "topright", 0, -1) + baseframe.UPFrameConnect:SetHeight (2) + baseframe.UPFrameConnect:EnableMouse (true) + baseframe.UPFrameConnect:SetMovable (true) + baseframe.UPFrameConnect:SetResizable (true) + BGFrame_scripts (baseframe.UPFrameConnect, baseframe, instancia) -- botões ------------------------------------------------------------------------------------------------------------------------------------------------- @@ -4854,9 +5382,7 @@ function gump:CriaCabecalho (baseframe, instancia) instancia = _detalhes:GetInstance (instancia) end - --print (instancia.baseframe, instancia.baseframe:GetObjectType()) - - if (instancia.baseframe:GetWidth() < 215) then + if (instancia.baseframe:GetWidth() < 215 or instancia.resetbutton_info.always_small) then _detalhes.ResetButtonMode = 2 else _detalhes.ResetButtonMode = 1 diff --git a/gumps/janela_welcome.lua b/gumps/janela_welcome.lua index a36c2780..807334e8 100644 --- a/gumps/janela_welcome.lua +++ b/gumps/janela_welcome.lua @@ -171,7 +171,7 @@ function _detalhes:OpenWelcomeWindow () Loc ["STRING_WELCOME_41"] = "Some Cool Interface Tweaks:" Loc ["STRING_WELCOME_42"] = "Quick Appearance Settings" - Loc ["STRING_WELCOME_43"] = "Bellow there is few settings for change the look of window." + Loc ["STRING_WELCOME_43"] = "Choose your prefered skin:" Loc ["STRING_WELCOME_44"] = "Wallpaper" Loc ["STRING_WELCOME_45"] = "For more customization options, check the options panel." @@ -229,7 +229,7 @@ function _detalhes:OpenWelcomeWindow () Loc ["STRING_WELCOME_41"] = "Alguns ajustes bacanas na interface:" Loc ["STRING_WELCOME_42"] = "Ajustes na Aparencia" - Loc ["STRING_WELCOME_43"] = "Abaixo estao algumas opcoes para mudar a aparencia da janela." + Loc ["STRING_WELCOME_43"] = "Escolha sua Skin preferida:" Loc ["STRING_WELCOME_44"] = "Papel de Parede" Loc ["STRING_WELCOME_45"] = "Para mais ajustes na aparencia, veja o painel de opcoes." @@ -679,7 +679,12 @@ function _detalhes:OpenWelcomeWindow () texto_appearance:SetJustifyV ("top") texto_appearance:SetTextColor (1, 1, 1, 1) - --> widgets (all raw copy from options panel): + local skins_image = window:CreateTexture (nil, "overlay") + skins_image:SetTexture ([[Interface\Addons\Details\images\icons2]]) + skins_image:SetPoint ("topright", window, "topright", -30, -24) + skins_image:SetWidth (214) + skins_image:SetHeight (133) + skins_image:SetTexCoord (0, 0.41796875, 0, 0.259765625) --0, 0, 214 133 --skin @@ -945,7 +950,7 @@ function _detalhes:OpenWelcomeWindow () end end - pages [#pages+1] = {bg55, texto55, texto555, changemind, texto_appearance, skin_dropdown, skin_label, wallpaper_label_switch, wallpaper_switch, wallpaper_dropdown1, wallpaper_dropdown2, } + pages [#pages+1] = {bg55, texto55, texto555, skins_image, changemind, texto_appearance, skin_dropdown, skin_label, wallpaper_label_switch, wallpaper_switch, wallpaper_dropdown1, wallpaper_dropdown2, } for _, widget in ipairs (pages[#pages]) do widget:Hide() diff --git a/gumps/switch.lua b/gumps/switch.lua index 6a23d41b..c18d9b42 100644 --- a/gumps/switch.lua +++ b/gumps/switch.lua @@ -27,6 +27,9 @@ do frame:SetBackdropBorderColor (170/255, 170/255, 170/255) frame:SetBackdropColor (24/255, 24/255, 24/255, .8) + frame:SetFrameStrata ("HIGH") + frame:SetFrameLevel (8) + function _detalhes.switch:CloseMe() _detalhes.switch.frame:Hide() _detalhes.switch.frame:SetBackdropColor (24/255, 24/255, 24/255, .8) @@ -34,10 +37,10 @@ do end --> limitação: não tenho como pegar o base frame da instância por aqui - frame.close = gump:NewDetailsButton (frame, frame, _, function() end, nil, nil, 1, 1, "", "", "", "", {rightFunc = {func = _detalhes.switch.CloseMe, param1 = nil, param2 = nil}}) + frame.close = gump:NewDetailsButton (frame, frame, _, function() end, nil, nil, 1, 1, "", "", "", "", {rightFunc = {func = _detalhes.switch.CloseMe, param1 = nil, param2 = nil}}, "DetailsSwitchPanelClose") frame.close:SetPoint ("topleft", frame, "topleft") frame.close:SetPoint ("bottomright", frame, "bottomright") - frame.close:SetFrameLevel (frame:GetFrameLevel()+1) + frame.close:SetFrameLevel (9) frame:Hide() _detalhes.switch.frame = frame @@ -58,7 +61,7 @@ function _detalhes.switch:ShowMe (instancia) _detalhes.switch.current_instancia = instancia - _detalhes.switch.frame:SetFrameLevel (instancia.baseframe:GetFrameLevel() + 5) + --_detalhes.switch.frame:SetFrameLevel (instancia.baseframe:GetFrameLevel() + 5) _detalhes.switch.frame:SetPoint ("topleft", instancia.baseframe, "topleft", 2, 0) _detalhes.switch.frame:SetPoint ("bottomright", instancia.baseframe, "bottomright", -2, 0) diff --git a/images/icons.tga b/images/icons.tga index 21d744f1d0e5551091bcecac5e3213ae7b053857..ae770c2a5fdf9e2c1399ed27c440dbaf5a052567 100644 GIT binary patch delta 4232 zcmb`KZAep57{~9uf3qO0NL;q85fMn4^kNX!us3=I!@v+$v4#ozFcqp%VYFbY=Jp{P zHDgH(DbtoUG7o+*dc`0kk|11zW)N9Mh*7ZmaND^PM>6Pi&-rlR+1da3aX8QaKF_^@ zLDQQdlgll;m2Nl;vwf=H&DAZ{a6StQU~gi@g=>{|r0NMO%mG>YUA=MvNk z1tylFNhr`(jGIb++BMW^lZFgdSux)@`7`r}>Z2YUAaj6!X9?4;{%zm&tN1QQj=&HKNi)S2N{)^juzvSTBz@)0&~fuE01vJL0? z2y=JB$4B_R8?AhVpOxt6BP`g9UOvL=YIG>GGJc?u_GIU0d9uld8o1ci3oSUru6}<2 z)$Hm^Rt(9^=YD0wFLw5_I?MnwJ77l{ySmtccS^f2u0&KsBGA_W`ZWQnUf;a9X%2Nbe4;0y`efvuv#uC{}x#=IJ sq#n?UdW%MK%kzuU*B_(lEp7jGuz{fPT!DEo`BPWlUsYoXGWrebWND|1FvQE++#&Qh?x1Sct& zDn%y+cQ?XI!L`lsQP5U~5en+d@q_|vCB`V&xeXo)O1CdFo!xX>I#KIs<5!Ipt=Y*KR=)478e&Y`^2TCB{dult4^{v7K>%~#^dqq-b5my zI%S&$4|F%#x);5=oBXummhLA0YPfVaaqNd%cay`lc(1$3kvjNwH`!;yQ>i!;g>+MA z;z1gn#6xTT!E?=6vnjJc(n1zUf=E8nsUrCj(@E13CzsjL#a;CKQ5@qgdc6^K+(lQN zKv3lUOiNGUH}^ZWH(@1s->JJ972HJ)t@tb*_xXIP&hPY+^Z1q%qv{LVN$AkOqI6pC zX+tOy1VJ&keNxOrQ;PXrKrv6hl@DCP>ztHpy^L1m;s^Y71-;1mb2YVw6_a~bF@2m< zOmiRP=vCawNx7pp(32CR4ku#F3n<;X!hfC=1Gn*&yQtiUFWf}~{TSjd`e*<)?xK~$ z$m1^Bejf(zqJB3Tn1hl>OC5ZOH)1~dk0RH4;1LaEPQIe@?h({T3=@3}JInNVafZEW zj}KKW6L^M0EYtBEEi6+$ibj@+ynuscyf0yAnVNCbv&@ePRIp6DjMWS?IP(f)Oj*-@ gNTP9B>DpBI2Q#yqmPu$MPaFB#D3C3aEBefT0K8yNzyJUM diff --git a/images/icons2.tga b/images/icons2.tga index 80b1780fde54f2e757e5a528141d8b10d53086b6..b274fbc6b93fb67f8c16e669ea793f1f2c9b146a 100644 GIT binary patch delta 70834 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
_w+XdA&^nWz|F0dMFQAR`Q74~`CX z4BUZT^lZoOT|z*$9&ep&S-E*yD=oK?imFP>%GYCHR!!Ejl(x=Ly^=^(OjQ1{x+&JX zMpHYcy3~^CQgYEBWMH&MzWwcQ+iS1Bsy#K&+RFmmi|WLVP;ZR~cI>GFD`8TEE9cA` zv@L6v*~(hoqoppSRs>7ulX> z?bNJ@^}cIoahw*|;=C)%1kUyAA+XmY<1_dsmB@$#a0{<-B31%^Bpuu^*U%6|_t1Tj z-0N12^XGuxRf6uZb|Nk;RQ&Z(0xe*L&cR%!fFs7jkd-V(PP+?TBGiTu^}0@5AflTo zQ7|-se?QD2IlSUo{9tC+j$O8V*>c@7IoE=X8}uAbjRb%JILrc50Udxt`1m)7`%sed6NpjG>32%(Ti^PYKkMcJ2O^6DRR3ro@C`K-@!EahsI8x( zyHU%uV?fLCTxEJEIv8jMK=($X#uZtS2L41GGFMQEJsTw8C(n)8zV$=4zg5r0t%@-^ zfYVELpPOb;t0HiHbDRaU5W#5i=iBzifkN7^V4L_AqBFqRAdAz(Hsl{i z;!ml?B%W@oaVLiOYH_k3)0w#?7{E>o(oi(&2*uoroh6h*QWe z`8WE6OoCK!$OOP5z{Il1J-sNBOz_EI`7Y(>aIkBquT;>EC{zhip(Yis;I^lNvPxUm zl3?vx(4C~*iS@rKA!mJatYfiDYE3c`)`L_-Zl5^F^u6zW;)x#Vlp}NkQb`m?`9K-h z2`C|kmanvJtJONCDtC8Er6y9pn<~l6Nt?O5XlP&&OT;NiEDU|zw`*uPLvt{ zGDq;iXHlRcG`B}_hKy2$Q9LX-9&(@t^5&P`fb0oCBEBX^<+6|*X@vaX#NFVU=m=zP z6qd{_EHD}O#n?b!_O3W*0x5)GpiDs(X21_}i3xmxGI>yuZO8TP1>)2TAK@( zEMDSRq_hQRoCVxrC|@v52sIQET-R6aKSo47ws7!R5vA73KX$(6x82<=qPf94j2alexP3>tmLo(We+-ZL!7YlKEi;@CVmYTR82*41? z8)M)Gm*Dcl7982K!j82^^t8oT_08fuz_ZO`lJ0sLZr8Jr=G_SFehX+iejt5=N?4L` zz$tk@4E8MF08-?ZyTfrhzT=piR5kEJ7}bq^I3ZdARVb?uemPkkqpF@Jq!2RcJQ4$7 z5I}_y0V538XmH2~!%pzNvt$!3qx``Gh;0qL zP!ISH=%qNI*A*s1mjDX)QBx@h;abVsZw^Tikq!pyEzNH~<6qmxI^}%j4td8)0qacElmhxi|{B1wl6ejNCFz zJT$gwx^ia#2RD9-?KAHK@RTBjK{6;Vi)|S&kO9R|i<$A6?=XrZS}=4phY;t2oDxnB z@B*8mp&+`22xSDloQRV+fTxBSU#@K!n>TIttYH4U`8K?D*iN1}Y1h=x-L!FoM?iRh zcrqM>l+%OYuy`kTg(tkv&^b;v3LLt?daUx2B9K;KbncYgcleOsj=*hoMP*f1D+bp~ zc^$}=6}F{4-n!&>dUj+8WV6F3FJ#%1$pzc;EU%oSxzW|aw=P1UgT%KVB z1UO7W)P|6ZnGbLdf5Vy|K=W_F{KzAZj7FRg(%6GYgnPM1fbWG7XB5%JoPh*r?dr9* zX~QO)6=-_`^V_j)haEq5+@5;;Df{rf4;`XFHk5bFOlm@60Wu*BqD){zghS|aF0_&3 z5o{M`;GBmrLjb^!K<__tSeOnfbbmUaF4s>T)eG396^-8Y9G((yJ=%%Yt_~0B1lu3B zwZ~|NhveJ)fBkpaSq*SM41op@cQ7``jmf5>(( z@3#%=dQTCcX(zFiHaRcGj&;Xb_cVT1;noxwr?IddJ{|?DfNkOhT)X!4i*|D7db`jS z(eAt$Z`RU3pII5}+cOVL6QmcQ&D#GM5vKi#Ffk#fot~a&06{uJaF6iKg^9x}Y^NRp1N2sipa747g^=ZS z0H`>SS<-M|X0+nN1H-?J9pC{vycpWbl{$~Pb0jI#`gM9%i5>~kH$yeof`wkw-E;IF zdqNLl`>+4$zuNJ8P6)E9^`sUH0~KXpnYlwhh0k%K4 zFpuLX@Hm3kd!)Q&)#bXeGF5jFRroEyHRQ~+^kwhu9qi#!{@WqY0XP!pol|18zx1e| z8c*VF=1mgo==Mhkz;fS_q?^Eb)UG2uohPhd8{h{FDRPn7lc&$xuJ&kN%Z5SH57vnZ z4}-PJe;S&jKZ|us`oXmW-JXhcLu%-Ykzh}E_jG&ar8n%py&LUfcf>X{$9NZSsg#@j zQ&Uy29_rFfM2l~zwm*|DC-fR}!Gc3fAjk101vu#ijwHE&QDBFE^Et2xK~BN}1UO09 zqq-UFH>V__j-yFqvHpNgaF_evJex^DMF2B(8ulTV0>=Oo?l!RjaMPPucJM1-4TgoIv?=&pc;; z|9Agj=gvkScnd_q1@Q$?V>lq}E#9~_!F8O2X6)&eU@1sOxp8=?_)L)TFa<1$mNU_v z%CbsyuT-jJoI7J`8z$=qH=3+oNp`6oqP1&ky!BV839V**1Ij9(?^bSl{P;aKI6s*0 z!ij9)G!ovZj)zEL+$7qUsS7h$Sx3iF4U9yz_s8LCW#GWFF5BFwB`2Yrl>u@Sa+H(3 z>hB~b=w{kG06l2+SiqAectkLkq2|CGu&2Mj&t7`-9Xq#gvt7}7wzS50dypk8c87JU zeYh>uM^;vmtL`d{QLh|zvHyc>MBco!yWDfw~zr;Pd-||ecr67= zXQ#&4NflNL)xMd<^Cv3#VII)oD2JnC$)ZSZpnUtJwz4exx3EQLkm{2_yECi2VUbE z0|T?{wYT553kSB^Lo=dWpcTnVG+X5;K+epFvANY0VhQFy$l&cSx+P)O0-UKi2%(a; zK#e^zC*H!>d`y)`zXA+A@x&8u=`eS|KmdjyNLa)RROZM8>gj;{95#%N1u!fK>A-^O zm*`uMX|Q<8ln51>00W>iiZa1@=I#aM48Rp^ZH`qYQg(Mo_by=?KqvJl>XX`s!GM7f4EP#wIr-nnF zXiEZATv}oKrp2pjl>YTduG!qsrc!UeNB`fzGc2jb8J&jmHsH{SWWT{t*w5BEiEhsqS%+^h_;S*%c-e^`*d@f#)J z7lQ_51Kv}~4`)R-LH0(F1)by#pepv*ctr9&T`PW(PCwCQNvQNu8}T6ceCR06pX{Gi64=0xO|f8Gy*KRwZLLhkW zYwy`_e)FGgfr`BL^oT8)UhNMS<-8sNlEFJ5BnS`<_!|ZQB8Hc^7(AA7!z2GLhsNP2 zjwN~GkP+ySjj-+Bx0ijWfe4ZojU94%eZ3wrA%c{aYZpydoVP*xv~|irQWxh(v`WA}Ebe^$>tDC8eB~=Q;)e5s?aSyoqg4O3*8?_Bg*kuU89UOU zmWrA=bM>FM!E+_*;zpP5GmAu`YlyJ&CVu$uvceCVEGRaor@Ug?@OV&{di(uv+Q^X| z_Qb4+?NbcgK1EN5%VGbaawaE6IY=PQVX=;{b4qlT_dK=X1$0J@DLHyDx@Mvq$=ayRVofD<1K%+jJnjqY-f zkF!2SS@7;GNMXeEB$-KwdaQubGJ9|ZiTr4f8)+O03HS?S!w1t6OLz~t;C-56{QCi4 ze{!Ng%bxBYZ`8A@L?B_2e&61GdS1F7OZClf+h6_VudQFU?9@a2mNz9?f3MczwTSOL zNx>+Lp1;J9kSm}ajvys);3B~z1^|gK%KzX<9E!?>IDjvX0HJKyvj3p^MC4d$3MAxM zRMAb7)%%RDJRMS(hW*({daH_CQvM_AyPVffQc%sMNsq`f0M;0uxc@ONziRWbZt!F$ zzb9DP1QJSWT5SxKNdYH*=Inv1>bx)129=iR0%xD98=}`@mA_~ENqQ*+qOs&Qu8c=z z>ApYq*kih0@QgRH*;;@d;3SX7`}()PZg8Ic4#MjDrujM2IBlLolIzN>Bww9K%V%<8G@v zQbVp_J)#K_4=L3&$2{#R_~$$Q0B;(PgW^DlMfkya-E~I!E}!jku!uR zK$ZvqEWomtg@zNy@7cY_mj{0M{U6$&{PCY#r=C6Do2Mm4?W*i+*4>9QZ#-&D&wocC zo%IA3W_|qzH~0e2p^L9=CG#&3!ZBe<0=pm##KFTCNhq@RsO45#p$C|x>H#(tmHy06 zesOt{{$scM(Vplo_Sr#|dY&o}y0i**YwH1ECl-YDWQ4lo$rzQacDJ88!iT%hVgr9>=Ksk6CaGRP6L~_=!sCViF z8q00mNdbw(cD@dGpe;`R15ZiI8cQ4U0>mL(zbMmLq>UY!GJY=)B|NFez%KHM#;E@` z3TMVeMvV+WbIcR+D#rY``(k5M&y=}bA_fRH!r@2hL7wA$KLY91v`#%1L+KWKT=@xH zKO!CbL6i;abi>|EHC%gV1h#U;O0QN<-FwP@{>MMF?|$b8Ho3gm`U^B(F=l#MqRr^; zx+Tzf@g(9Pc_AIZEi^!JJka1kEz?>d9 z!5ct3TDhcwBwz|}*i-?GNt>`0i9|3owA4QN^hZKzlsFz9i}58^LYKfaqzt7VT|#8Y zvRHTF7$_CS6iRh2OO{5+WN>8YVbZ}WGuUF2+x9@?LEIUmU)noC00ozjKT;0yb>8Dt zH}W%12urBfyn;!ljfe+80GB}GDH4A6v!8v&Pf-Pt;*d1VBYna+E7Y$)B*rO`(!6{0 zjE&_2;q2NhtIDTD*F58*6$m9eoMFB+FXDpoTQU4EV$nH{`V&I7Vrjo<9Fe27Md zITb4MqaXdqLy>D-E)-@eIGCgn*oKJ`?@_&zli&;Zls#`P=&dq5#Lz%icK zO(2kjJKxYjh%}af0FFQt1!5Ge5ZKSaM8|VW4RQXz%X5cJ}mH`|H2_mA&+G@P<`qX-{2Q#AcQ2=L8gVD1T@7>iHeI zO&1mb3H~C=XdiI|55opn0VBxa@I0?!5H#aE{F~#zCX&nXe2#s|%|`;DpR-N!u~Mer zvS+uRI;LHA?DJ58T3fF@9;$UFHMeMurOwXuvt2&M@5P!fC zJg%pVjo}d1My;-1eaJJn>k%k;&SH5kI#H^>9A8M^fhE64x9G*6tFwO^qMMxB8G^CN3a7KnvS{t{E0N; z4|K(PoH9HGnB>qf_|ZBb+w+#4PkmfSCML>9(381@tu*|OdfkynLF8-PC6a-lFs$y9 zi2ZtB#Qujv5qo`E#GYBG=RSx?`TE(Ey|Q{szJ78_*<4+PZUfee2i#zM48pllO?cv| z>)Gk!6ql2Tr>Pdw2DG+T#fh1l-AE<+sFejh!dIS#TZWVjB>qWl?wn0DGSy82x zGlij|k}_>7ndI!@Sx+T;j@#Lp@wQ$&GFYl+b4f5z8Dr# za+F=h{T_zE$M-(@-ssM1Uwogy?J1-H1VlW7W?#5?*{+=2YZp{iac|WMEt9Y~-XqRF zyI6^IrYh`M?f-}-G-CWC6lSsWNLfB?p2N%i0^m*6j-V;25mFocYXjB_zu(!4Nj zAfW5m3Ojq;bSbYytDR)&7nQiV~3>Ip7q_RX}9zx}a&ghp!6*d^x(FQ`mAZw)+mW8`Qe;o zdlZP)srVs_BmlDBcyxL+5P9!AXDpAx zKtx7}8-OLW0#8^`kPJLHu#1<*1uKapXBY&)p*cVN;SW9Ka|)F*e$PjwNF@Fs8SM?j z4X5Vc#1ICLUeHzuHJX}*AcncQQb3tUMF8|T36!GbC*mQAu$?jUxd)v@qFGo=QG>9( z>ZWZl{%c-DO%wwKVIY)HC}zj*&2qB!lTWItN{aOqjOrR=_boedi9gpK ze$@WvSAS~<_8zcFTDhUU)};bys@OeWuQ%x~(c$hKb=9@14-~Sw3ep_%LljW|K_r1d zME@}UkfOm43A(3}XR6w|)7I{nQ!13nDW>Na=KJm3 z^*nb@Pa!MOE}07halV-(;GR{s$IPvcvHNH0*7GNx6xgyEh)T&tANmLM5}FGFHoYrTiVqhj!632? zb}-rqF7b+JHU%>1zzPHvVCq|kKls2I@`3)cRh)W+XW-E2fKfmf{9{qh7D^C_T)>B6 z7@>+FOrRm48oq{w3&(+asxQJ3Bm*%tZ~2UI^Ov%K^Mvp5opAM&@9;icARY4h3wB0h zQIy5uU|=a$=3oY;(U0j{-?43-0J(4)KMh`|)%Mgx-Lj+q#F!Y}OQs^|vH27jx)WMU zC>;{|;Gn9eE7Hz~X6nbPi}d4LdD%80Ek!^6TyDiV=~kwnvRkSaL3?|fO>e5O>5UcE zAU!S;BPjIXH*y80xr3Il^TKm4xNcxzbPt4*7t>-OyLWX z<oXr5R!B1=B0hqE3K^f)I@WU!Ef=m1ipL=q?i2M7B9;fEjGXv?MXbXOYO{5Tga z4w%mD2uiPhaS4|`x42nz$8GpBiGMa2Ggf3zyPHmINEQB_o=__L@+f~kMk#!AF(E3 zi+F$p~;(!QT#P-h*Km5=}Xb_h0DZ_;u3*KoSO~ zKFJUUtsNr&#ADGG_ouZ?hMK2Tcmf)lwbkzxI7Vy zzkH78a2f*1G$9@7F9Hg2wg1oW{Q08$Yw|*lKq@Xy2++eb{eoxI3HrsZh`qctV&C4t zw(MvlJ2plOy?Uf!MR9?Zi50~K`4-$iV!QY3wV)s`*XDIL*tSJo)>czuBh#jJSrH~A zwMF_6Yq-E#&XGgXg8Tw|>A9Ee&;R@{ZFbLeD~Od^WoO#pf<>xf zW?NHhhk65AGEqxL1zJ(wOxgcMG9GDfTVLDzzAm>M2_zA9oCm0!> zxm%t+oBgK?x`yP?!t*^bSCI4sx%Zb+oZbOxK;*8-9I3^81FDRLbA;1-D0yrW7 zYd^#@90f19dj*>W(CknD^iM| z)jzb^zPeJuq*iS;C2hWgtR^i*zeSpxX|-hq*4&^{zfZf(8|!UxccZn|mTBzWGH~=) z8Hn;E#NcQ^@BR4GAN!^NHfDw$80>&3A!RU&JvBf4;hzN7-J;(!7DLn1Qf;x;fheMP z?AjxbcG@c4FZ%J?h&{L@$A9L5otx23X+#Wsi_ZyAoF2BIiJ*vdaD+fo%e#Eak#H$w z3!vSq`rp4E>KCU)z4xKusl^#m>G2udh{}THqk}OT=5+s2I^2ihK@9l;zP>8`*RxUp6;eY*12K6183E;0 zJ@SP;m*>x)^Ni@nKmM_eKxu!<7F{Q98)wj*!I{#{X~XQ{dYtjZh2Ro41Sk?f)jZw* z^Jd>V*sQ zzDJrsA2Le5%ol(V0V4b&?{NbDO^XW;!u3!Cd__nn(CrPHAH)TS6h$y4y2tQfKM{A=#Gy%4zB*!LK7h6h_ehf$dwbm5d)cR6e*wtW* z)gWt7vuu*eUDp5cJBomv3DZpX)QMBN|87V0m$^y0xEN(0+QjI2&cKmFN2OcevnjO| zHc81=d2zn&JHRiX&C&0a&asZRR$Hlo{a|CnPS4J?sa-vztDaG&ka7bzI1ok-Si(>i zEC`~tf%nm3F)qX*sCd#<2uY|R_)C08qzF)8m=@1Yeb&7t8d5@@tfwDSQEB7SlGF^D zB7139Rr2~8C=LS4uRtuDm&5w-=k3R|9J1h_5Rlny4F(kfxO-m*` zSCY*ITa*IwjPZQ^9`YH*A~c+0g_uNo2;FJfvi}p00i?^E(Vwac1`!(Ff7{_7^9hGB zQA~iI0}SKhGJ z@_cI)9}Be4prdn|7vM+lIc`O{*|uE;{HLPC;r?uGVVP<@GgOP{98L-U=|gO!K%w<7 zh~aul-h^)m8+iO86p0}M6W~WkP*TXR$fr0NE+9={mnpMp6gif!TW^gD7$dMDgRrqd zbT6;0kg90~I;P(ueUDk>(5sfQ?68#-1x0psFwSp^VZ%HNjLSp^ZjOytr4TPz`hyE5 zf?rI$Z{J>r9JL8QEIlzZM;rIq@0(+@y5`#Z@4YkHvIVMenwAW0F$T#wd{@C_&X^J? zy&>Q+%TT;SZ6*HzfZ!HBkie4&6UK22q6u1blEc7( z&J(`^n!w-`(IcRb#WcACY=D#~4;LrT^7><9hx@JMW$yPS#4#hT%w=26PN=G zi)IlK`c<00`P!S_!(zD}g)J;9bWrj+$AMeg(@#D5w6yIVt5lmgSCx2HX1Y4PdeFPl zh*hiCT34Sc_L2lopLWm4)6e#`Sl9G!*A6cwIAP4}Kt2E#&Vq4a1_kBFq?r}o1w=3c zfgw0R1)PG=j!=RoaU?haN8}@dS!~g; zB`iOq#)a}tkLGt$OQd2-6FkbZQPP0 zcK?NQ_Gf?gbC+cbVbqlYD$aXtuX9B2KXiE=A!%s_Re&CxaSf7jOo4Ox49Vj!5gj{X z9#W4mrNWutk)rSr4fZ9z|y6=YxEGg+1zq^7AY+vUI3+}@^Nded)JY}~Zb?`-_&8z1?u6&Bv7 zv`_I2CM-G8X=?v>zWR<`edtmB0<0citxj{>l&Q8~vPTVY@aS=CtuC^y+Jy6*7IHTC z6j^0GsGjVbSfdc0fB>X3DAdoxCPMzN6-Qqj6k{+&;>CFj3iv> z65n7y`!;D$qe||EFf?S<>tBmEZ3*;S)cH1EK28`=_h#EO7FqYCCC}Jog-UE5nIC67 zD`AVMzyq3CLw{mSXb1s`SAF?UPqdE06b<(#Z$Izgd7d|f0-ryB&XVJ_;8wd$*9z`a zKssW*n-AF6-~Fn$kx*Q6RA$K>Xf1(mz{$z@OGbt|g`fmdVF=*+WE)(RV^MY3N65g& zfEqYDYXY4Zs_@)v1RS%Y9|$+q55)#Cg*z8G2_-f0mzmI(;sQ_<5#j$ zFB^^zxkGJ4y2Yn)aa#Z31I)!6xSrDz`S~|<@UJIuLb_I10k_r#7Tj$>ysGdIcHx^Z?piK~*T zq%t@6pGZ}zZq?jM-{;d`UTnun?C^t1(z~9w`{}3q^yzbsombuA9Xpl(F3(Q4M^q*7 z?rx1Ev=>`>EhV$jI3KjTO`xWc3YF=+Lk{07QiO5XN93m?zdjnhnRpxILCa z84S^u_oWgbCX|ChP#D~a@doZPGWip*a3dmzzlbuh3%-EgVQP__9#()BInI~xr5yjb z2l-q}wrTt$^6AdE-x`ZlQd3p+tQS0jd{bi+<|~umWG5bYSi@iqn(;g6wI(e3K(dL5 zil&v8mAXPH+nNJ$3$9ETl(uRn=xl^NP zD>RfZM}de*79un(!F@#>^n`p+5~6e~$ii2^3&aI<15pK?J=BWI&_Cf4MgR^-J_;v+ zI~Tfpyo5*Z&?Bd34qDw!cj5N1xO!sB#tzN+3KR4s65_foa!6Uy-S=DK=vnRIve;KU zV}|6U=4EXzi`Y<2#GdZgyk03OEiK&*lC^8$$vHG0Uso4Ica!DC;qZaGjqFhK#O2@n z{`c&@)2A%4W5goEk6Uc73~|?a+ctH?zVr55PSV6w5H;k?Hv>Nc5KImjVsdx|?81{a zshl|w$c!Ki=LWGLU_;d~80Lk@Py^-(2YH`7j$j2^qJu-{W{zk>pH<~y7FjaJ5U~iF zMHog8o$xE{e-JhClz?~)Afp0VhZVeepNvIfr~W4!Y21n8GHLh$YtXgMM->@bj$y=C@X2S_qH^EXdX}zS@s_Qusn?2z$=~%r^i>M{r zVP}S0?9S~?Hal2nPbwuF8>^i_G~~Nc`43MB6T3Jn<6$*y znXe-t!A?A}>f5liijwF_zxL`Y*0O@Ba{U%_`W*#Q_uKsKr|kSg_uH?2^(zlk7>1xD z1sf3k^GTjtUmL~}!dc)z0xSpwL4kOJ3tk+x+%(T8fm|$tp=#icHQ*xvY4|@p0!TTA z{sA7(KzP=N9|j-Z8u=gyL9dK>V1|TMbkk`B76I^JG~y$une(UzQwq(N z>=RJ}^5i4XI_3*sh7r>zR!9y$tES`=nJ2$BnXkk-)ik!-+TKm}0U3lp}xVVVc|!S3pNC0vzx^)-~Z5thk~89R0HYjR5!Izd|p{zVb$d&*4)}= zIYnA=U-fn`-=RsvjoOi-ra|A@CsWeVb`>;gR5^4?{wZ7IYJF@ot6 z{`R*Wh?GE{4rChj5c2=8fvK3SYVxgI;xB9;DIUI z)HfjeC{u1G#V&46v9{$}%1u6@Oyb5}(}jZT{+ zNVpm&!fyfyco6XdKU@QL!Ob{W9>j58cXIZ)4eY1yaML?vRm&z;46A#gf|LV$hh!J! zQ4bNXiF#QFEYf|>(hJvGQE`z4PsklSJdkI>(Oq_WyxY!>w%JoEQUiGT(j-lyIsA4H zk&Ji=#_9Q^W3EKEV1np|gpFrdtI#?M!6III@rDw_np~bcYq9&E_rNW$W=&wvK5@~0 z{p(-*I3KA>gu}N2MU0Y%AYP91N`3<&UI+4_U_{Sx;K%jA3_0OfX)evf>0mM7-_?VY zs0u=JAOghS@jqq~S_QLFa2+qIAd8VennV)jgAYEq6)_?K9v@aj@c7VpLrXz24?p~{ ze;RQU=hd93|KkDpHG*e|k(Wb~x4+Yf-xY+q%U6hZ-~ii%1{J#Ztr#xWQVv}4;0gh0G=euBV*hSD&; z9=W@xC_>fT1N;B`zkN5bBS#NgWZkqyYWG^qTGd0`@rX?xo3;N`r-RXL9t^89%NX}U z!k5s4MSo9?ts#Fdl(x@G5l7-F5js930^jP)9)M1xB$3A{TCjRz7YIoWm~o zc8D5p@!osyc@CHHMM~%A7!Ap06q4`e#c+H$0s|1S9HIak$r~}omOum&CQYzO!yn>uOSF7k=E$?uGz!-|Eu733$UAkrP_wU{Q^?2_6r$S+f>lr zvD)7F`kU5Pztmb5vmu(6Nl;9*P{|`E*D}9xv?1B<)|$olb)`CU3~U=xfnlo;3x%a; z#DPfDmk(VS+5ub&r3t!$8w1V&;i4x(MZ|@BbJZ>Va@arYaZEUqbiXd)&>v9W=5@~y2|FKska#uXh3dQY}|3s;#>D?(Yic) zsxQv&)@bd*MEeq??Zcim7QxlN zhQt8)0D|8O6m(p>cE!r`wSa!YL5rFDSFM2|pzJ(lPd|RaK9px5YNr|mD?n1znIi=r z!pkr+C>h!T{jfdf02vrZk}wM9N)u=-5haWhV6y;?6I{Rv1dGWwEiP6L9ATBOA!y|LQoo7!0m66 z=Q~d=q0zv*zH`v_9vQd0<8kw*{M+{0__ktgo4P5}?m%}>#~V#0Y>sYINqowk}9 zZDh|rZAF}C>ZMVu<@oyG6XWF9jzD!&d5Wu zjP5@LlyIJKIq^QiK^BbSfPb`2V#RSEN8|$?0Vyyshp1vtoxIc96bDs@anR!Gnd7#( ztH#Ea2O8E7$X`-jDgIY)dH!aL8GK3n-~X_s*Q)bSSfEih@&A^Ec7Ar3J#_l89UN$~ zXEksVpP-6P0n3Ra4i5*kfEjS}qe(QMqoGgW8=-DK~s5Di~7#B1;hq%aav@irPj_r@vyogTkOGy zHD^aS%99FdfW|))Y(awJd`-t#yF>*Xn!vQ7d$WqhtL@TyO}Sl@ZI#QKtfG>&T%seJ z#J+qn!bDcEIWEjAh6?CbafDO`7$-JBe!!Sd!wJCyH}4Ld*YR@1GpGO)f=EC)tPTnB zKzN~C_PbUx+M__NMwuin^ymfsrmARDd+SHs3Cb>0<;W`ox$euO-X?SO6@{X5gxT z5y#OnV}y_`-wX7()_Vap2pVJl{tv#dsY*|&KBdkgS*I-a&`X;CzvnTl>>aloSDvX|YEv@-3($FFNP_+`58<)Ynn1sxnPZ_rQAPp55Qbw5oaY>{g+-xU!W-@htpN)N z5G{@)TI@uB23LX-umund)$r9sJs=;{(;J`=9S?vnhV4PVb3rO2gHRV3pfO>%hMbTW z3<4JP?%)=;-~N8fzGG!P@m@}TkxkAX(x$W}`qG=!)E|jx@yCb?HcR$dR*4pt6sb>Y zE)v@)24pz*cH~=yP|nV1BoT19Wb2Rw4wvu2G?56Jgxd%^ksCPX|FC}x*7(w_?z7tIL$*vmUS=m|@7bswk!z!& z82hTsOziNUZd!V>CB!HtvE*)x8NFfYmCBKd+@I38@m%i$`|91>?Zn_RyMNbmduEI3 zAJIsKU;@esygZ@K!2~c)(*Pr$jDrNGu4SPsx{EAYb)@?oX1bd%zx1-b`<-`fWak|s z^gR|Cf81hnM=ZACkTOFjR3ZOUU;be3+O^=CbuffRbWdatZh;IK1)qo)6C~*Zc2NUj zrAerUW8A}eSOe+NlO*`2VKkEGK|jEe4+PLi7_|i4K$;EPrECveVl*I|XrA9;i68x6 zy4tL{iox-6z89W@6?r(u$}@0MGysF-BX}m~|7w%@;FHr)KQ$Xwe$NLC7&!2aeq(6; zEhQ|BiD(g*qApulKWX#&PgwezFI(!GIa^SeX~(o`(p#Enu&cdDgSsN|ib|J3$gX69 z1B44!eV$`3Uja&SlF$hZ$nP*>;Wy_|178l>0WM$#yxdP011^BRxS#$It{cli1s=py z^ysdUnS+5XT2`lWzXDrOR&JHM$E{Y`o0iE5Ybi>y5~XHwO-v0xI<;H)uCTQ96fG91 z(XZ*RS>)iOmOSy0W##1ClQQH>qm?#y>VQ3Xbi^JwFknxp^NJEur38RXB!O~31;^9V zgLFSZ2!V#8aXYwYGz{6`n!x=RL8R{=GBL4NQ__B*DxQm)aHURW?4(7`epkbBUzTy+ zV=q2;*%La%gJe$NOJoC;^ZlTPo&jiB66jS>0vhEtV3$Y_>OrVn=#82OhzKe`I$Rfi z16G1XKwM!6<7A$Xzku_BH45V{95x>cng8^sKeYfRXZZ%=cVZm^t@q!5|JFbmuLIM3 z0k(oW=3#I;d>G=|!THbc#u*6Lz7_g*!e#PWF%nNwLXOSrJZq(gU$>l9H!P{`A&Z%K z)FQ=8EH7D!nC4QeSlZya#Q10+ks$DcsOWaqH$-c}ani_zJPOzHKZ@mV^*=w#NTM6W z4cuHa zi{)m_Q&6_jR(EwIxuTRb6lvqiRFwn*0@ORV4Jx%+37r+>I-zFnFf zv?l{C8rD^=HmkxQOV0Kr{#sQSH$D=TR+CKO<;F@`(5D zZMu8Ga@Ia=$x3v^1zPEENl~#?)YNI>MOwQ_oj z^~MzW+xNyQQ1i`&_ysyr#YDOz-Rx&CJTtGlrV1j?AVIM#4MOpE9dDxPun7%zY zcR1hL9t#;!D|YeXd0UXKTK~d(m1!h*(kz$XYrz|DyzXobG^opD#tXt_c_t`{hJa;a zKpFyBJ94u*L-qs?0Gu!-S8yD4(Bp%c;SL%WS^+A<60kPSzuDvu0J(58obPrFoEOo5 zBDEi@o8J`k^&th>Nyati0v#JU4H_s zLK=t*=mAA=j0lkiB1Q?^&N45?5GW zjy88!R^wUi?(?O=1vc5fz($*rZMIJfd-anQ7u!h*kQzRLjxEt3`bRlbL?9189_R$% zz=6QnpgCl0FU0Y(13IJM{N`KAh`cG9>J!9z^s`fU)(e6a61OsiAAacAAmku;A=V-E zz|%YFCLk$1C58=1X;1*o&f)qNB3wvdGn$>g7sEF+vo4DPjXcXbv~SchDGwM#Khfq9{bh zF`&sY;0iPuvf(%VJvt~z6nJwUmql#Jd!S@BEU-Fp^sXI4no5``AGpa+U<)8&=I{|q z%E|T3Jh$qB__~7LerrB*)QYp`+xBhS^}=1^d9C}Yby3;==g{Pc_XFAVvq&~lp}ufg z`4aVsE37~?er2n&9xC^|Z=E)&S|6x%pglozKyMbsq-VG^AP(%7*apvyzecx+5@~T9 z*rF;h0A`?T{&v__@E2EvQ=u+gIBzRdoV{pazGT|0Uco_o{L(Kjb&<2rDS3h0>wF?k`Zk}qx z)8}igt!n3UKtzC!jQC!@oo|EdkqsY1BTy4m?6W!&fh5pHsW2>XyuJ zWn4vw0Q?BauzbP^)=rt8K44YlWiB}61@sylm)l);p0L)9J-){Yq1vEqV}YPnt&3%Z1k<=)m2tdQf^nY zt<%G%GD}e$AX7^D~&;;XckC@a>6}xJfvQ_tjG%ZLSc_4 z1meJ4E&*QeYQ`(>^=S3aE?U-i%=4Z@s5u8Gba!)VL055H=_f>SAb#y1dNWJ9hAd0v>vqpP~V$nK9M1y zBOoUYM-~OJ(xKxR-4uHK$bvRFx^4ke`G-%ehxHE=5LW?aCTtdlDzF>8UR%4CA?Z@h{ETCwVB=W~AP48y^M_*2Z6ZakPmQg{@iB&0}ZhbHjsfJhYc09*hO%00*WA>$8jZe8bTA;MmN>rFDMDBLVbKH@C2%&`@k1X2{ced-yP=&R2*ox zF#69x^f@3}fbg*k!YrT$NfU1HZ2CkFONBcdHU!a)ENLMkqXS9+3M9D*CIp!rgH!+| zp&DYP6GePP1zL^II}`FQl`*rp%hoH z9}1UCY+ib%U6p^oG?;4l>~6QoEloDvrFCPrM*GuCWIOmo(tGakVif<`JT!;dAs*U^ zHqk#3D#U{%2)6-^uU%6FT8J0Pgu;F+CBL}1R5gNyGYKynh4d!-?QehMGq52dUJN|Z zJ`oVl$PC1H6bmqjfXMLDA<)9#Tu75V>*?6!2v-wm0a))1-sYE3 z9Eq<%0Ur?HLNE>vgxF*{9xX=O&<%3=D!{reNM7U4g&+(c10+Ebau!5`=d{`!If`|7q>d%Qozo@B?lJ$^jh?#!jw4*NhdjXhl~S5h9iH8qCksl!X;{ zT5MvO7PorLX(!}KI;R0#{lg#r(5)G45kdhktQ>|5Igr=Ee4M9k9OoFni65ab>^`J$ z&JkkZ4N)H=CyM5J8q7UXY2c&?DiJ*ng1{0t3iv_}W0@(U0E`eEILqA@7_S4yI6eZv z*J%AUZ;4htTIuV`Xa_}E3hy9h!0^EdXhTCF4obwCfv%A3;1YZ_1s@29Z@~g_F6a=x zA@?*gI%Wes>#U+U*G}l#{o4P)CihQSmP*oUS2S8~X}Kn=&Dj}6VEOVCYPOu$ylz8z#V=PQb#>-4KUz1e8TZ)&WYHA)CLwt zOogI-b6+1ESi5em{Xpy0-E;S8OJbH~rSLa<-6Hp@$f#3q%5Hl*FPXaf2qvkOESS}^J0CwKfnTJos>jUP{W{hU5HGxi z-2gLS2Nlwv_O>aC9@k($zKP>phnq(VKoWw-L-U-&2epDvX}&F8l5I5=Q9oRuIA>XT zffcM;6grn7ZgyHfX!1u3>qOG>P%$<(}(01qyG1uGzT|0N-G@%Vb|K>)GNG;X4tC|zL z?@JcR(N;H+0`*g_c$b>p?;uM0Y4XB>udWz|a3SguICc!8cooM{44g#bf@6>+&Ew@L z6tLjbLI7h;fEA_TrwJ9g9{j=ZfI;%t+DKwqfQt6{o2(0{gH-UyAj4_vwvcxNs zd3?ew-^#qAyH04n)ne5fbeysHRPFf~QMF1MF-xcY@sEG>UI|4~zGl>Qh3zgf>ExQ6RX14ZxBs?k0#~8~{pZ5WQYal2X#`@E1;5 zeKRX2sS-qbL-Ow z&8Vx8*Q2_GwVJt?lVrPh?eJ%mt7>tj>e(lI6n_>Jl{#sj5bdz;TCr9q$F&ZDL66zwl565Vt zL+s#*qX8VwI5JvvaOH3#Nu2A~uPHhBHCtArVVj7yc_tpj>tev;pRO<_(%pF-8=8h?2WSZR7%bnp{c0k4pt!r#CtJ2yjH_h~x( zuKgn4ZaX|XW>vKfjwn8a54z)yA?K2r8EqdIZ11;hRSfN)nzplY3C&8;F3C)@md+KH zqdgSK^QX zb)1W}oaB=HN{g&NZ;|6~Sj?f3Ui!@ClJF@2zD?v4nB@HThKG^2dX-Da7x88Ll!xq%DZ;e z^d)Njr$|IIi^bW0{Nw-joEcFW*%pSeSkRSz7!SdcX$&s~3;0Cdz&YrY0#IBx4dnG4 zr^83H;5z~n?g3|f2sYyJ7j(e|+ze>oB@_+_>9V4Cg7T1_Uf|@Xfb@BWLtf|3UY<|z z=X4Z^GBA?$>$|O>qFFfTu(QFqJ$FUL%3pd&8QBVXK4nm~6~gABaa*Bi2=DE5)GS&l z&$Z5#EgGR%Z>=p&R#~vva!SP@`307%QLB>SF{3uKZ2w{F-MrlAWbN71X8YvqXOxKx z+O$T|_LgkR$}R9b5s?oJzjyzXl?g{(I2T>EIAW=Gph#e{l)pql^C`GymIf^nM#LO{=Pa&Elav?4J z+AA+;J1-{t4d`c=eh%nIGmCOdR3i2to(!RshCCe!4#%-vHkCbLlD%u07CZdbhCQJP}C<*{D0zJBQ< zAzyj4a#bj*plyRfr!WllJc@i_S#_0FsM;Wgu)`HHsq#l*M5(ZA+qH6(md9oq_(?5{ zaC%dYJ=K469jB-nM&}>UX{XnOJ-hII`ELU4FozV<4nYa*j@mA9xsT5him*!g^wfmr z->;X&4C`6-%F;&r3M^Xq```cGdwm4pa18O#JMRSVI9+;%H4{BTB?M!<0D#Z{sDoGl z9t#Hx09DwJLOCFWdkL}NM^HeF>#NMffD5jA>96q+e0(#Ef0+FL7j8}Ck)AoIQi8vE zrR_U@*ka?O-PDAn3{4y=vU`G~cJ{tCcKM}?no!a0IG9ULOt9KT8p~pLv!?PqTQ22Q zY}5Mp%Uat!RNAM!Q|@~0$=$osax|g8Zpk9sTA_JHD%0)O{OtW3w0_W%odwQE@>6CW>W{Nnj8KCxydu zrTrsc@%QcjE%aT*LwM~nRcYd}a`J@ee$}R*9k$c=jc9eDVXI%x9x$<1FJEwYhj#nX zN{>A&mwF{1+j?gzj;I>bV!8+92YQv|U(seu)z~&|Dj953R)@0woJDD}b1j405N9LX zHe27oM>~j-f$verkmN^vBzC@(Lyxl-){mQ|vR`l7sOj_2~WRD0`@5qsn61-t)_ z8hb&(DIK@Ey82sTcUb&|RDJvn4~=m^DLgvVxJRn7;h@MZT_&q~E_w?{A~t#C3rl0?b-vgiV^{)U=|-&OCb7@{6=g3(Z_P)TNRR ztz+$qR%d7-{gbwFQ?E_V99737 z!S=5$(ms9-ZnA)z{xy{3^=Ev~sne&Fz0sgvhBn^OKrk+{NU>_AZhCDb&8}>pXBQ8w zv2!OzRlHtjHxwnt$VoFpn_wJ&N3ezCMp5+pFh^*cegMZ%E9WtD&U=Iq=!EmQ?~|O7 zp)v;%=Nt+w46A2Y5a80Kiwc~#N_(rlfQ1N=f?m>g_<3|sjDW}pvdPJVD@+yU;KeAI zb8sligQf%c8s5fYVKmpvZE5r!G#U?(QD|G+O0ng7txlbPQ<1x*z~jT~ZL2mlsVmQS z^NbIyQ@jg_>Kk&$Wz%N2@go2&J;8NPu~4;yloEwm1~m+q2S+qFrB-+CmeHk!>h zlJ(`AYL?chVr9l2dgLM7y?2j|P42h7`=)H4`W9QZ@3hzVq}%g*3+?Tv@3vS8mDjN`;Nbei>Xo*Cjef<)T{S)hj=5ZAgQi@9Ra;zhPZUCg`G zF=M?J2E#90U=Qle`b@?tqWgVR2MQk;C#6!91s|YYB7ZCuBjd5~0znwvZ<+(`a-5DB zAs7^nRpWBsMG60e`ht(j`@h4jtNH#grX%<&E?%N4^Hdw|*0lZhT1&wNEsV3Svumt- zy2l>SkoU>^@3oq4Ds`gWjyw$?_Grj(OyxjZOEtf#BhU6s?DOGrtOZ5^BWir$LFd3$ zE!#FaqJ6P7{?xVBI)%je```trb!1dY08k#hfkUV4VTHkRtS zzQ+~k+`l%~9vmppSev2;AqHs>NfP9SsXX{^F5pZY`48w41^8i(#&R)4%u!cRK7XO- z%1Wi8tF%4(xjC&Tr4F_F&@l_P>vyZg?tjc;mQL$$Jjx1L(yu%!!UP%qB@e{J8Z0Uj z38I-UP>EJBC;F!d)y4Zyn9@gz`41Gc5(m3N=E?$CjbhjHKlqxR`n~qInW}Tp=4!pG z1%bXMDXHF4TgEJX@R}vGKWPyKlL%n3#-=-^)qNAuoo8qy@jpsILEW1+Xv6HK7D?)} zxUvb|qk-=%^$RnpMq2DO%`Z>n+q+L3vKw>L_T|IME#kNoE0K&PSrHJmflW9KOF%5t z%t0t{`NxmbH%3C?aaT&ND@A-)Ra31WEg-qB)7M&$Bn;TRJD;`W>BlWGc)=p6o760g z42b()dG!SkU0x1UGxDM;iQzuRMR_$8#BcHf#C~wQi}bdX@jaB0ip&UESNE>APC4?m zV;gLJZx8#AWa}FjTE>R63KE~Q%r!4t%EkvRwoN;7qlG0|1?vCGld()JDMN?@i9yGs zdxllDqs%~(I$mdAu=uuVi@W!lMaoIqG}={>)XRHv?AZsD-a0aDckODoD=IZd(z)vN z?Fp3K!H4mk97Nox0A17V;@hJcODqAePC*>-yhU5SR2~ioKS7jJySzbb_b*ce4p{7B zDdEBEw(wuxx9l_5Evah1j@Jl7Yc=2V0}F6G1P){`sU2e+hj2qT(d?yBS zO_;V6tu7W3I@JD?wO-mT8{02%WnsD-RtI)78H!C(IJmw%Xc_+JRNn1_(zSlcNl zyK#rrZ#rVhS-F-|(yTR02JPhO?e^01+w6gJ)7GHwC2LaA05HYp4G(X##P}YIEIe-W z_MKN_TP$_`-If&iT#!b4PP}|$XNsNQJl`Ih>9RAU9jcnrV3eYnIeKF;YKJqw=ZE5m z={bzTcu_QE7ak?+O>!V!&VN$B59>$c z*g4%Ipl!}}d^OJIhsfb?itw`}_#SuG)BKey+cY&o<-sE3^_$h1>23?`%=uFqCb%OS zyQ!75n`9GN%qiu&&pvRkRWFt3B20LN6YkW{lzs@h3+yF@7%%KdwpR|-*`>XW_Qkzz zc6lcOTXg&K*-32(Gy)`1Fb8enQ7ZvP6SV_>wZyhA zl?*3|ir7(JiG;RMQA)2OrX9)-u~t``Q`V0@TV{chpMNX+`4evKrp;|_tBOC4Eza?~h%4L=_mD)V&;37o=Z5y&|a=t6o-XUq9Yp&+V^P9YCi& zc%aYDOsuy{djjp}s0fw)96O|yEpj{Sg!Q`m1|8G3bqpb{U1wYRIo_rJbxhaSs)s~T zS8tyx4A*aP2IM%`*Xmh*o&H`{rv;()oa)-8QsPppR7QQ73V)W~d`?ZUv{s89>I;S8 zb*om|O6BnT1~ku5ZfJ0joiFHmty56e;$F|?a$7L`84_KLtq|Z5-VmAxxD>J+^zjG{ zNvJS{h}Djd@3zf--PW_E+qySvC&kU0Z?9qHK1Iembbhyf=60(PByqQ@c83)=kB;xL zopRedlmi(yxW>c{xmt94BkFVNW{`T;L4 zgHK2=`0}3R$LNM-Z`QXsK^ImyGRmGgpue$@?idFe2RzTLjIep61blGxL?!O{@ynRvC5uA z6bbvqzY+=}33PbEc##jp3K_WnZ$HaJxt{wpohb6BKm954w#eNM9_)y8WNGx@x lgwJ%a{vSsYf}k|;i@5lAzx!R}&wu{&Uq9^XW510l{{ITBv|#`M delta 44 vcmeycjeGfW_J%Etw@z%ou#<5!mlOjOgan1UhIs~i`upidxOw`x>M;NSc()DV diff --git a/images/options_window.tga b/images/options_window.tga index fe2a97121a1f8f7592afc0483e94c82fdb72088a..e8f185db901fae4dd6b351c460025d59cc43a995 100644 GIT binary patch delta 347289 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

m8;q~>gnca_A)0Q)%$W)_*@m|2}cGmTUY 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%0AiC~sflPUJ84CH zg>!KK|LBLiYQw+&dbMr%H@{YWdH65>tn1F+@>-)I<`mG&CZ%+c zivqZ;J|rcx@I!}~HWxd4XW6$$VVAT+c?VPlasf)9cZln586bX(LhS(slU(^ehuUX^ zbpT=8L?NaX*sO&Yi2G9KK_O=aMd!hD%0!5NNqn3N|CG>q1enEJOqk`3H-vWh^0BfW z4pz8@$e#nzELJ*Ml{+V@3l0saZwPGmEpzoHJhcPg-XXDll?yM3a+G!q;L^JhkJVE9 zEDCk&6V#D=I8@|k3t@d#N!==>**-%(sKHB@rvSAmovd*3gas%0AkqSZxh#zV+ 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�=mF^+_HjPk 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 z�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 B#cKcn diff --git a/images/skins/elvui.tga b/images/skins/elvui.tga index b7cb4dbdcc6b5268d735da5f25297f81d7b423aa..99fe01bb0fca506e519096c0a3228fe6b5c90012 100644 GIT binary patch delta 243 zcmca~pZ(H(_6>ZIj2WBxBWE%Ksg+T|tU&5-{3b@x3H zB$nfn3P`R4nQ=a41Bhx!TL7dcD`wmQliHItGv@<^Pi8W+0|g8U<)-H|GqO(pP+$+{ zmH^3y%Jj*;C7fWE(PV>S9U!Z;=sA##E&d54!%H3mN$b)tKywVrxIxC-lmj`F4J#^u la587FT@Rh(>J>A;xL+)%l_p^`DE3;?F^SYQAE delta 245 zcmca~pZ(H(_6>ZIjQ=;AX#bI*gYT0}%d{%<~# zSdL37Ah`}?#`%;DAgUp40g#%km~jV8YERb8oIhDFoNe>D%ztb^A%jA>>G{lztdl Combat is set to |cFFFFDD00Effective Time|r.\n\n|cFFFFFF00-|r Options Window has been revamped, again.\n\n|cFFFFFF00-|r Added a option for change the class icons.\n\n|cFFFFFF00-|r Added options for show Total Bar and configure it.\n\n|cFFFFFF00-|r Added a option for save a Standard Skin, new windows opened use this skin.\n\n|cFFFFFF00-|r Added a new skin: ElvUI Frame Style.\n\n|cFFFFFF00-|r When hover a spell icon under Player Details Window, the spell description is shown.\n\n|cFFFFFF00-|r Pressing Shift key on a spell bar over the Encounter Details Window, shows up the spell description.\n\n|cFFFFFF00v1.11.6|r\n\n|cFFFFFF00-|r Added new skin: Minimalistic, a very clean one.\n\n|cFFFFFF00-|r Added a new tab called avoidance on Player Details window for tanks.\n\n|cFFFFFF00-|r Added Copy & Paste option on report window. Now you can share your dps on twitter and facebook!\n\n|cFFFFFF00-|r Added a new option for auto switch what a window shows when you enter in a combat.\n\n|cFFFFFF00-|r Fixed issue with window background alpha which was changing the value everytime the options window is opened.\n\n|cFFFFFF00-|r Fixed the gap between the bar and the window background when disabling borders.\n\n|cFFFFFF00-|r Make some improvements on Tiny Threat plugin.\n\n|cFFFFFF00v1.11.3|r\n\n|cFFFFFF00-|r Fixed more known issues with skins.\n\n|cFFFFFF00-|r Fixed an issue where plugin icons wasn't hiding after close all windows.\n\n|cFFFFFF00v1.11.2|r\n\n|cFFFFFF00-|r Fixed bugs where Details! stop working if no plugin is actived on Wow addon panel.\n\n|cFFFFFF00v1.11.0|r\n\n|cFFFFFF00-|r Added an option for abbreviate Dps and Hps.\n\n|cFFFFFF00-|r Fixed issue where the window icon fade away when reopening the window.\n\n|cFFFFFF00-|r Improvements in class recognition.\n\n|cFFFFFF00-|r Added follow spells as defensive cooldowns:\nHealing Tide Totem, Spirit Link Totem, Demoralizing Banner, Mass Spell Reflection and Shield Block.\n\n|cFFFFFF00-|r More improvements done in Encounter Details plugin.\n\n|cFFFFFF00-|r Improvements made in the downloadable plugins: Timeline and Advanced Death Logs.\n\n|cFFFFFF00v1.10.0|r\n\n|cFFFFFF00-|r Fixed a issue with overall data Dps when have only one segment.\n\n|cFFFFFF00-|r Changed colors and added some backgrounds for menus.\n\n|cFFFFFF00-|r Options panel has his height size increased.\n\n|cFFFFFF00-|r Added options for hide the window or change the transparency when in combat.\n\n|cFFFFFF00-|r Added a control panel for plugins, where you can enable or disable then.\n\n|cFFFFFF00v1.9.5|r\n\n|cFFFFFF00-|r More fixes on Skins support and new tools for plugins.|r\n\n|cFFFFFF00v1.9.4|r\n\n|cFFFFFF00-|r Minor bug fixes and improvements on Welcome Screen." + + Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v1.12.3|r\n\n|cFFFFFF00-|r - Fixed "Healing Per Second" which wasn't working at all.\n\n|cFFFFFF00-|r - Fixed the percent amount for target of damage done where sometimes it pass 100%.\n\n|cFFFFFF00-|r - Changes on Skins: "Minimalistic" and "Elm UI Frame Style". It's necessary re-apply.\n\n|cFFFFFF00-|r - Added more cooldowns and spells for Monk tank over avoidance panel.\n\n|cFFFFFF00-|r - Player avatar now is also shown on the Player Details window.\n\n|cFFFFFF00-|r - Leaving empty the the icon file box, make details use no icons on bars.\n\n|cFFFFFF00-|r - Added new feature: Auto Transparency, hide or show menus, statusbar and borders when mouse enter or leaves the window.\n\n|cFFFFFF00-|r - Added new feature: Attribute Text, shows on the toolbar or statusbar the current attribute shown.\n\n|cFFFFFF00-|r - Added new fueature: Auto Hide Menu, which hide or show the menus when mouse enter or leaves the window.\n\n|cFFFFFF00-|r - Image Editor now can Flip the image without messing with the crop.\n\n|cFFFFFF00v1.12.0|r\n\n|cFFFFFF00-|r Added support to Profiles, now you can share the same config between two or more characters.\n\n|cFFFFFF00-|r - Options window now can be opened while in combat without triggering 'script ran too long' error.\n\n|cFFFFFF00-|r Added support for BattleTag friends over report window.\n\n|cFFFFFF00-|r Added pet threat to Tiny Threat plugin when out of a party or raid group.\n\n|cFFFFFF00-|r Fixed a issue with close button where it disappear without close the window when toolbar is in bottom side.\n\n|cFFFFFF00-|r Also fixed a issue where swapping toolbar positioning was sometimes making close button disappear.\n\n|cFFFFFF00-|r Fixed a problem opening options panel through minimap when there is no window opened.\n\n|cFFFFFF00v1.11.10|r\n\n|cFFFFFF00-|r Accuracy with warcraftlogs.com now is very high and okey with worldoflogs.com. Make sure the option |cFFFFDD00Time Measure|r under General Settings -> Combat is set to |cFFFFDD00Effective Time|r.\n\n|cFFFFFF00-|r Options Window has been revamped, again.\n\n|cFFFFFF00-|r Added a option for change the class icons.\n\n|cFFFFFF00-|r Added options for show Total Bar and configure it.\n\n|cFFFFFF00-|r Added a option for save a Standard Skin, new windows opened use this skin.\n\n|cFFFFFF00-|r Added a new skin: ElvUI Frame Style.\n\n|cFFFFFF00-|r When hover a spell icon under Player Details Window, the spell description is shown.\n\n|cFFFFFF00-|r Pressing Shift key on a spell bar over the Encounter Details Window, shows up the spell description.\n\n|cFFFFFF00v1.11.6|r\n\n|cFFFFFF00-|r Added new skin: Minimalistic, a very clean one.\n\n|cFFFFFF00-|r Added a new tab called avoidance on Player Details window for tanks.\n\n|cFFFFFF00-|r Added Copy & Paste option on report window. Now you can share your dps on twitter and facebook!\n\n|cFFFFFF00-|r Added a new option for auto switch what a window shows when you enter in a combat.\n\n|cFFFFFF00-|r Fixed issue with window background alpha which was changing the value everytime the options window is opened.\n\n|cFFFFFF00-|r Fixed the gap between the bar and the window background when disabling borders.\n\n|cFFFFFF00-|r Make some improvements on Tiny Threat plugin.\n\n|cFFFFFF00v1.11.3|r\n\n|cFFFFFF00-|r Fixed more known issues with skins.\n\n|cFFFFFF00-|r Fixed an issue where plugin icons wasn't hiding after close all windows.\n\n|cFFFFFF00v1.11.2|r\n\n|cFFFFFF00-|r Fixed bugs where Details! stop working if no plugin is actived on Wow addon panel.\n\n|cFFFFFF00v1.11.0|r\n\n|cFFFFFF00-|r Added an option for abbreviate Dps and Hps.\n\n|cFFFFFF00-|r Fixed issue where the window icon fade away when reopening the window.\n\n|cFFFFFF00-|r Improvements in class recognition.\n\n|cFFFFFF00-|r Added follow spells as defensive cooldowns:\nHealing Tide Totem, Spirit Link Totem, Demoralizing Banner, Mass Spell Reflection and Shield Block.\n\n|cFFFFFF00-|r More improvements done in Encounter Details plugin.\n\n|cFFFFFF00-|r Improvements made in the downloadable plugins: Timeline and Advanced Death Logs." Loc ["STRING_DETAILS1"] = "|cffffaeaeDetails:|r " --> color and details name @@ -27,6 +28,8 @@ if not Loc then return end Loc ["STRING_MINIMAPMENU_UNLOCK"] = "Unlock" Loc ["STRING_MINIMAPMENU_LOCK"] = "Lock" + Loc ["STRING_WINDOW_MENU_UNLOCKED"] = "Left menu unlocked, set Menu Pos X > 20 over options panel to lock again." + Loc ["STRING_RESETBUTTON_WRONG_INSTANCE"] = "Warning, reset button isn't in the current editing instance." Loc ["STRING_INTERFACE_OPENOPTIONS"] = "Open Options Panel" @@ -505,7 +508,10 @@ if not Loc then return end Loc ["STRING_OPTIONS_BAR_COLORBYCLASS2_DESC"] = "When enabled, the instance bars background have the color of the character class.\n\nIf disabled, the color chosen on the right box will be used." Loc ["STRING_OPTIONS_BAR_ICONFILE"] = "Icon File" - Loc ["STRING_OPTIONS_BAR_ICONFILE_DESC"] = "This option load a image responsable for the class icons in each row.\nThe image file need to be a .tga file with alpha channel.\n\nDetails! have three image icon files:\n\n- |cFFFFFF00classes|r\n- |cFFFFFF00classes_small|r\n- |cFFFFFF00classes_small_alpha|r\n\nAlso there is files inside wow which can be used:\n\n- |cFFFFFF00Interface\\ARENAENEMYFRAME\\UI-CLASSES-CIRCLES|r\n- |cFFFFFF00Interface\\Glues\\CHARACTERCREATE\\UI-CHARACTERCREATE-CLASSES|r" + Loc ["STRING_OPTIONS_BAR_ICONFILE_DESC"] = "This option load a image responsable for the class icons in each row.\nThe image file need to be a .tga file with alpha channel.\n\nDetails! have three image icon files:\n\n- |cFFFFFF00classes|r\n- |cFFFFFF00classes_small|r\n- |cFFFFFF00classes_small_alpha|r\n\nAlso there is files inside wow which can be used:\n\n- |cFFFFFF00Interface\\ARENAENEMYFRAME\\UI-CLASSES-CIRCLES|r\n- |cFFFFFF00Interface\\Glues\\CHARACTERCREATE\\UI-CHARACTERCREATE-CLASSES|r\n\nLeave the field empty to hide all icons." + + Loc ["STRING_OPTIONS_BARSTART"] = "Bar Start After Icon" + Loc ["STRING_OPTIONS_BARSTART_DESC"] = "Control if the bar starts on the right side of the icon or on the left side.\n\nThis is useful when using icons with some transparency." -- Loc ["STRING_OPTIONS_TEXT"] = "Bar Text Settings" Loc ["STRING_OPTIONS_TEXT_DESC"] = "This options control the appearance of the instance bar texts." @@ -529,8 +535,8 @@ if not Loc then return end Loc ["STRING_OPTIONS_TEXT_RCLASSCOLOR_DESC"] = "When enabled, the right text uses the class color of the character.\n\nIf disabled, choose the color on the color picker button." Loc ["STRING_OPTIONS_TEXT_FIXEDCOLOR"] = "Text Color" - Loc ["STRING_OPTIONS_TEXT_ROWCOLOR"] = "Row Background Color" - Loc ["STRING_OPTIONS_TEXT_ROWCOLOR2"] = "Row Color" + Loc ["STRING_OPTIONS_TEXT_ROWCOLOR"] = "Alpha and Color When Not By Class" + Loc ["STRING_OPTIONS_TEXT_ROWCOLOR2"] = "Color When Not By Class" -- Loc ["STRING_OPTIONS_INSTANCE"] = "Instance Settings" Loc ["STRING_OPTIONS_INSTANCE_DESC"] = "This options control the appearance of the instance it self." @@ -538,6 +544,9 @@ if not Loc then return end Loc ["STRING_OPTIONS_INSTANCE_COLOR"] = "Window Color" Loc ["STRING_OPTIONS_INSTANCE_COLOR_DESC"] = "Change the color and alpha of instance window." + Loc ["STRING_OPTIONS_INSTANCE_BACKDROP"] = "Background Texture" + Loc ["STRING_OPTIONS_INSTANCE_BACKDROP_DESC"] = "Select the background texture used by this window." + Loc ["STRING_OPTIONS_INSTANCE_ALPHA"] = "Background Alpha" Loc ["STRING_OPTIONS_INSTANCE_ALPHA_DESC"] = "This option let you change the transparency of the instance window background." Loc ["STRING_OPTIONS_INSTANCE_ALPHA2"] = "Background Color" @@ -566,9 +575,9 @@ if not Loc then return end Loc ["STRING_OPTIONS_SKIN_A"] = "Skin Settings" Loc ["STRING_OPTIONS_SKIN_A_DESC"] = "This options allows you to change the skin." -Loc ["STRING_OPTIONS_TOOLBAR_SETTINGS"] = "Toolbar Settings" +Loc ["STRING_OPTIONS_TOOLBAR_SETTINGS"] = "Left Menu Settings" Loc ["STRING_OPTIONS_TOOLBAR_SETTINGS_DESC"] = "This options change the main menu on the top of the window." -Loc ["STRING_OPTIONS_TOOLBAR2_SETTINGS"] = "Toolbar Button Settings" +Loc ["STRING_OPTIONS_TOOLBAR2_SETTINGS"] = "Right Menu Settings" Loc ["STRING_OPTIONS_TOOLBAR2_SETTINGS_DESC"] = "This options change the reset, instance and close buttons from the toolbar menu on the top of the window." Loc ["STRING_OPTIONS_DESATURATE_MENU"] = "Desaturate Menu" @@ -578,11 +587,52 @@ Loc ["STRING_OPTIONS_HIDE_ICON"] = "Hide Icon" Loc ["STRING_OPTIONS_HIDE_ICON_DESC"] = "When enabled, the icon on the top left corner isn't draw.\n\nSome skins may prefer remove this icon." Loc ["STRING_OPTIONS_MENU_X"] = "Menu Pos X" -Loc ["STRING_OPTIONS_MENU_X_DESC"] = "Slightly move the main menu on tooltip to the left or right direction." +Loc ["STRING_OPTIONS_MENU_X_DESC"] = "Move the left menu position, the first slider changes the horizontal axis, the second changes the vertical axis.\n\nIf menu anchor is set to right side, use -67 if this instance isn't hosting the reset button." Loc ["STRING_OPTIONS_MENU_Y"] = "Menu Pos Y" Loc ["STRING_OPTIONS_MENU_Y_DESC"] = "Slightly move the main menu on tooltip to the up or down direction." +Loc ["STRING_OPTIONS_MENU_ANCHOR"] = "Menu Anchor Side" +Loc ["STRING_OPTIONS_MENU_ANCHOR_DESC"] = "Change if the left menu is attached within left side of window or in the right side." + +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHOR"] = "Attribute Text" +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ENABLED"] = "Enabled" +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ENABLED_DESC"] = "Enable or disable the attribute name which is current shown on this instance." +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHORX"] = "Pos X" +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHORY"] = "Pos Y" +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHORX_DESC"] = "Adjust the attribute text location on the X axis." +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_ANCHORY_DESC"] = "Adjust the attribute text location on the Y axis." +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_FONT"] = "Text Font" +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_FONT_DESC"] = "Select the text font for attribute text." +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_TEXTSIZE"] = "Text Size" +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_TEXTSIZE_DESC"] = "Adjust the size of attribute text." +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_TEXTCOLOR"] = "Text Color" +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_TEXTCOLOR_DESC"] = "Change the attribute text color." +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_SIDE"] = "Text Anchor" +Loc ["STRING_OPTIONS_MENU_ATTRIBUTE_SIDE_DESC"] = "Choose where the text is anchored." + +Loc ["STRING_OPTIONS_MENU_AUTOHIDE_ANCHOR"] = "Auto Hide Menu Buttons" +Loc ["STRING_OPTIONS_MENU_AUTOHIDE_LEFT"] = "Left Menu" +Loc ["STRING_OPTIONS_MENU_AUTOHIDE_RIGHT"] = "Right Menu" +Loc ["STRING_OPTIONS_MENU_AUTOHIDE_DESC"] = "When enabled the chosen menu automatically hides itself when the mouse leaves the Details! window and shows up when you are interacting with it again." + +Loc ["STRING_OPTIONS_INSTANCE_STATUSBAR_ANCHOR"] = "Statusbar" +Loc ["STRING_OPTIONS_INSTANCE_STATUSBARCOLOR"] = "Color and Transparency" +Loc ["STRING_OPTIONS_INSTANCE_STATUSBARCOLOR_DESC"] = "This option overwrite the default statusbar color and transparency." + +Loc ["STRING_OPTIONS_MENU_ALPHA"] = "Auto Transparency:" +Loc ["STRING_OPTIONS_MENU_ALPHAENABLED"] = "Enabled" +Loc ["STRING_OPTIONS_MENU_ALPHAENTER"] = "When Interacting" +Loc ["STRING_OPTIONS_MENU_ALPHALEAVE"] = "Stand by" +Loc ["STRING_OPTIONS_MENU_ALPHAICONSTOO"] = "Affect Buttons" + +Loc ["STRING_OPTIONS_MENU_ALPHAENABLED_DESC"] = "Enable or disable the auto transparency. When enabled, the alpha changes automatically when you hover and leave the window.\n\nThis settings overwrite the alpha selected over window settings." +Loc ["STRING_OPTIONS_MENU_ALPHAENTER_DESC"] = "When you have the mouse over the window, the transparency changes to this value." +Loc ["STRING_OPTIONS_MENU_ALPHALEAVE_DESC"] = "When you don't have the mouse over the window, the transparency changes to this value." +Loc ["STRING_OPTIONS_MENU_ALPHAICONSTOO_DESC"] = "If enabled, all icons, buttons, also have their alpha affected by this feature." + +Loc ["STRING_OPTIONS_MENU_ALPHAWARNING"] = "Auto Transparency is enabled, alpha may not be affected." + Loc ["STRING_OPTIONS_INSTANCE_BUTTON_ANCHOR"] = "Instance Button:" Loc ["STRING_OPTIONS_RESET_BUTTON_ANCHOR"] = "Reset Button:" Loc ["STRING_OPTIONS_CLOSE_BUTTON_ANCHOR"] = "Close Button:" diff --git a/locales/Details-ptBR.lua b/locales/Details-ptBR.lua index d6db72a7..d0854322 100644 --- a/locales/Details-ptBR.lua +++ b/locales/Details-ptBR.lua @@ -3,7 +3,7 @@ if not Loc then return end -------------------------------------------------------------------------------------------------------------------------------------------- - Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v1.12.0|r\n\n|cFFFFFF00-|r Added support to Profiles, now you can share the same config between two or more characters.\n\n|cFFFFFF00-|r - Options window now can be opened while in combat without triggering 'script ran too long' error.\n\n|cFFFFFF00-|r Added support for BattleTag friends over report window.\n\n|cFFFFFF00-|r Added pet threat to Tiny Threat plugin when out of a party or raid group.\n\n|cFFFFFF00-|r Fixed a issue with close button where it disappear without close the window when toolbar is in bottom side.\n\n|cFFFFFF00-|r Also fixed a issue where swapping toolbar positioning was sometimes making close button disappear.\n\n|cFFFFFF00-|r Fixed a problem opening options panel through minimap when there is no window opened.\n\n|cFFFFFF00v1.11.10|r\n\n|cFFFFFF00-|r Accuracy with warcraftlogs.com now is very high and okey with worldoflogs.com. Make sure the option |cFFFFDD00Time Measure|r under General Settings -> Combat is set to |cFFFFDD00Effective Time|r.\n\n|cFFFFFF00-|r Options Window has been revamped, again.\n\n|cFFFFFF00-|r Added a option for change the class icons.\n\n|cFFFFFF00-|r Added options for show Total Bar and configure it.\n\n|cFFFFFF00-|r Added a option for save a Standard Skin, new windows opened use this skin.\n\n|cFFFFFF00-|r Added a new skin: ElvUI Frame Style.\n\n|cFFFFFF00-|r When hover a spell icon under Player Details Window, the spell description is shown.\n\n|cFFFFFF00-|r Pressing Shift key on a spell bar over the Encounter Details Window, shows up the spell description.\n\n|cFFFFFF00v1.11.6|r\n\n|cFFFFFF00-|r Adicionado nova skin: Minimalistic.\n\n|cFFFFFF00-|r Adicionado nova aba chamada avoidance no painel de detalhes do jogador apenas para tanques.\n\n|cFFFFFF00-|r Adicionado opcao de Copiar e Coloar na janela de criar relatorios. Agora voce pode dizer seu dps aos seus amigos no twitter e facebook!\n\n|cFFFFFF00-|r Adicionada nova opcao de troca o que uma janela esta mostrando quando voce entrar em combate.\n\n|cFFFFFF00-|r Corrigido problema com a transparencia da janela onde ela mudava sozinha sempre que a janela de opcoes eta aberta.\n\n|cFFFFFF00-|r Corrigido o vao em branco que ficava entre o inicio de uma barra e o fundo da janela quando as bordas eram desligadas.\n\n|cFFFFFF00-|r Feito algumas melhorias no plugin Tiny Threat.\n\n|cFFFFFF00v1.11.3|r\n\n|cFFFFFF00-|r Corrigido mais problemas conhecidos com as Skins.\n\n|cFFFFFF00-|r Corrigido problema onde os icones dos plugins nao eram escondidos apos fechar todas as janelas.\n\n|cFFFFFF00v1.11.2|r\n\n|cFFFFFF00-|r Corrigido problemas onde o Details! parava de funcionar se nenhum plugin estiver ligado no painel de addons do Wow.|cFFFFFF00v1.11.0|r\n\n|cFFFFFF00-|r Adicionado opcao para abreviar o Dps e o Hps.\n\n|cFFFFFF00-|r Corrigido um problema onde o icone da janela desaparecia ao reabri-la.\n\n|cFFFFFF00-|r Melhorias no reconhecimento das classes.\n\n|cFFFFFF00-|r As seguintes magias foram adicionadas como cooldowns: Healing Tide Totem, Spirit Link Totem, Demoralizing Banner, Mass Spell Reflection and Shield Block.\n\n|cFFFFFF00-|r Mais melhorias feitas no plugin Encounter Details.\n\n|cFFFFFF00-|r Melhorias feitas nos plugins disponiveis para download: Timeline e Advanced Death Logs.\n\n|cFFFFFF00v1.10.0|r\n\n|cFFFFFF00-|r Corrigido um problema no Dps no segmento total quando existia apenas 1 segmento.\n\n|cFFFFFF00-|r Cores e imagem de fundo dos menus foram alterados.\n\n|cFFFFFF00-|r A altura do painel de opcoes foi aumentada.\n\n|cFFFFFF00-|r Adicionada opcao para esconder ou alterar a transparencia da janela quando estiver em combate.\n\n|cFFFFFF00-|r Adicionado um painel de controle de plugins para ativar ou desativa-los.\n\n|cFFFFFF00v1.9.5|r\n\n|cFFFFFF00-|rMais correcoes para as Skins e suporte a novos plugins.|r\n\n|cFFFFFF00v1.9.4|r\n\n|cFFFFFF00-|r Pequenas correcoes e melhorias na tela de boas vindas.\n\n|cFFFFFF00v1.9.3|r\n\n|cFFFFFF00-|r A barra agora comeca apos o icone e nao mais na borda esquerda da janela.\n\n|cFFFFFF00-|r Janela de boas vindas agora esta traduzida para outros idiomas.\n\n|cFFFFFF00-|r Corrigido o problema que estava afetando o plugin de Rank de Dano.\n\n|cFFFFFF00v1.9.1|r\n\n|cFFFFFF00-|r corrigido problema do icone na janela principal quando nao havia nenhum plugin instalado. \n\n|cFFFFFF00-|r corrigido problema com alguns botoes no painel de opcoes onde o texto estava fora do lugar.\n\n|cFFFFFF00-|r corrigido a posicao dos sub menus quando proximos a borda direita do monitor.\n\n|cFFFFFF00-|r corrigida a posicao do botao de fechar do skin padrao.\n\n|cFFFFFF00-|r corrigido um erro nas skins ao selecionar um plugin de raide ou solo.|cFFFFFF00v1.9.0|r\n\n|cFFFFFF00-|r Corrigido o problema de nao movimentar o botao no minimapa.\n\n|cFFFFFF00-|r Suporte a skins foi reescrito e agora ficou mais flexivel.\n\n|cFFFFFF00-|r Adicionadas mais de 20 opcoes de customizacao no painel de opcoes." + Loc ["STRING_VERSION_LOG"] = "|cFFFFFF00v1.12.3|r\n\n|cFFFFFF00-|r - Fixed "Healing Per Second" which wasn't working at all.\n\n|cFFFFFF00-|r - Fixed the percent amount for target of damage done where sometimes it pass 100%.\n\n|cFFFFFF00-|r - Changes on Skins: "Minimalistic" and "Elm UI Frame Style". It's necessary re-apply.\n\n|cFFFFFF00-|r - Added more cooldowns and spells for Monk tank over avoidance panel.\n\n|cFFFFFF00-|r - Player avatar now is also shown on the Player Details window.\n\n|cFFFFFF00-|r - Leaving empty the the icon file box, make details use no icons on bars.\n\n|cFFFFFF00-|r - Added new feature: Auto Transparency, hide or show menus, statusbar and borders when mouse enter or leaves the window.\n\n|cFFFFFF00-|r - Added new feature: Attribute Text, shows on the toolbar or statusbar the current attribute shown.\n\n|cFFFFFF00-|r - Added new fueature: Auto Hide Menu, which hide or show the menus when mouse enter or leaves the window.\n\n|cFFFFFF00-|r - Image Editor now can Flip the image without messing with the crop.\n\n|cFFFFFF00v1.12.0|r\n\n|cFFFFFF00-|r Added support to Profiles, now you can share the same config between two or more characters.\n\n|cFFFFFF00-|r - Options window now can be opened while in combat without triggering 'script ran too long' error.\n\n|cFFFFFF00-|r Added support for BattleTag friends over report window.\n\n|cFFFFFF00-|r Added pet threat to Tiny Threat plugin when out of a party or raid group.\n\n|cFFFFFF00-|r Fixed a issue with close button where it disappear without close the window when toolbar is in bottom side.\n\n|cFFFFFF00-|r Also fixed a issue where swapping toolbar positioning was sometimes making close button disappear.\n\n|cFFFFFF00-|r Fixed a problem opening options panel through minimap when there is no window opened.\n\n|cFFFFFF00v1.11.10|r\n\n|cFFFFFF00-|r Accuracy with warcraftlogs.com now is very high and okey with worldoflogs.com. Make sure the option |cFFFFDD00Time Measure|r under General Settings -> Combat is set to |cFFFFDD00Effective Time|r.\n\n|cFFFFFF00-|r Options Window has been revamped, again.\n\n|cFFFFFF00-|r Added a option for change the class icons.\n\n|cFFFFFF00-|r Added options for show Total Bar and configure it.\n\n|cFFFFFF00-|r Added a option for save a Standard Skin, new windows opened use this skin.\n\n|cFFFFFF00-|r Added a new skin: ElvUI Frame Style.\n\n|cFFFFFF00-|r When hover a spell icon under Player Details Window, the spell description is shown.\n\n|cFFFFFF00-|r Pressing Shift key on a spell bar over the Encounter Details Window, shows up the spell description.\n\n|cFFFFFF00v1.11.6|r\n\n|cFFFFFF00-|r Adicionado nova skin: Minimalistic.\n\n|cFFFFFF00-|r Adicionado nova aba chamada avoidance no painel de detalhes do jogador apenas para tanques.\n\n|cFFFFFF00-|r Adicionado opcao de Copiar e Coloar na janela de criar relatorios. Agora voce pode dizer seu dps aos seus amigos no twitter e facebook!\n\n|cFFFFFF00-|r Adicionada nova opcao de troca o que uma janela esta mostrando quando voce entrar em combate.\n\n|cFFFFFF00-|r Corrigido problema com a transparencia da janela onde ela mudava sozinha sempre que a janela de opcoes eta aberta.\n\n|cFFFFFF00-|r Corrigido o vao em branco que ficava entre o inicio de uma barra e o fundo da janela quando as bordas eram desligadas.\n\n|cFFFFFF00-|r Feito algumas melhorias no plugin Tiny Threat.\n\n|cFFFFFF00v1.11.3|r\n\n|cFFFFFF00-|r Corrigido mais problemas conhecidos com as Skins.\n\n|cFFFFFF00-|r Corrigido problema onde os icones dos plugins nao eram escondidos apos fechar todas as janelas.\n\n|cFFFFFF00v1.11.2|r\n\n|cFFFFFF00-|r Corrigido problemas onde o Details! parava de funcionar se nenhum plugin estiver ligado no painel de addons do Wow.|cFFFFFF00v1.11.0|r\n\n|cFFFFFF00-|r Adicionado opcao para abreviar o Dps e o Hps.\n\n|cFFFFFF00-|r Corrigido um problema onde o icone da janela desaparecia ao reabri-la.\n\n|cFFFFFF00-|r Melhorias no reconhecimento das classes.\n\n|cFFFFFF00-|r As seguintes magias foram adicionadas como cooldowns: Healing Tide Totem, Spirit Link Totem, Demoralizing Banner, Mass Spell Reflection and Shield Block.\n\n|cFFFFFF00-|r Mais melhorias feitas no plugin Encounter Details.\n\n|cFFFFFF00-|r Melhorias feitas nos plugins disponiveis para download: Timeline e Advanced Death Logs.\n\n|cFFFFFF00v1.10.0|r\n\n|cFFFFFF00-|r Corrigido um problema no Dps no segmento total quando existia apenas 1 segmento.\n\n|cFFFFFF00-|r Cores e imagem de fundo dos menus foram alterados.\n\n|cFFFFFF00-|r A altura do painel de opcoes foi aumentada.\n\n|cFFFFFF00-|r Adicionada opcao para esconder ou alterar a transparencia da janela quando estiver em combate.\n\n|cFFFFFF00-|r Adicionado um painel de controle de plugins para ativar ou desativa-los.\n\n|cFFFFFF00v1.9.5|r\n\n|cFFFFFF00-|rMais correcoes para as Skins e suporte a novos plugins.|r\n\n|cFFFFFF00v1.9.4|r\n\n|cFFFFFF00-|r Pequenas correcoes e melhorias na tela de boas vindas.\n\n|cFFFFFF00v1.9.3|r\n\n|cFFFFFF00-|r A barra agora comeca apos o icone e nao mais na borda esquerda da janela.\n\n|cFFFFFF00-|r Janela de boas vindas agora esta traduzida para outros idiomas.\n\n|cFFFFFF00-|r Corrigido o problema que estava afetando o plugin de Rank de Dano.\n\n|cFFFFFF00v1.9.1|r\n\n|cFFFFFF00-|r corrigido problema do icone na janela principal quando nao havia nenhum plugin instalado. \n\n|cFFFFFF00-|r corrigido problema com alguns botoes no painel de opcoes onde o texto estava fora do lugar.\n\n|cFFFFFF00-|r corrigido a posicao dos sub menus quando proximos a borda direita do monitor.\n\n|cFFFFFF00-|r corrigida a posicao do botao de fechar do skin padrao.\n\n|cFFFFFF00-|r corrigido um erro nas skins ao selecionar um plugin de raide ou solo.|cFFFFFF00v1.9.0|r\n\n|cFFFFFF00-|r Corrigido o problema de nao movimentar o botao no minimapa.\n\n|cFFFFFF00-|r Suporte a skins foi reescrito e agora ficou mais flexivel.\n\n|cFFFFFF00-|r Adicionadas mais de 20 opcoes de customizacao no painel de opcoes." Loc ["STRING_DETAILS1"] = "|cffffaeaeDetalhes:|r " --> color and details name diff --git a/startup.lua b/startup.lua index 29a4cff4..b5e25115 100644 --- a/startup.lua +++ b/startup.lua @@ -118,10 +118,12 @@ function _G._detalhes:Start() end _detalhes.ToolBar:ReorganizeIcons() - + self.RefreshAfterStartup = nil end self:ScheduleTimer ("RefreshAfterStartup", 4) + + --> start garbage collector self.ultima_coleta = 0 @@ -165,6 +167,24 @@ function _G._detalhes:Start() -- self.listener:RegisterEvent ("UNIT_SPELLCAST_INTERRUPTED") ---------------------------------------------------------------------------------------------------------------------------------------- + local SharedMedia = LibStub:GetLibrary ("LibSharedMedia-3.0") + + 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) + end + end --> done self.initializing = nil @@ -220,6 +240,8 @@ function _G._detalhes:Start() end --]] + --_detalhes:OpenWelcomeWindow() --for debug + if (self.is_first_run) then _detalhes:OpenWelcomeWindow() @@ -257,7 +279,7 @@ function _G._detalhes:Start() end --> feedback trhead - if (self.tutorial.logons > 100 and false) then -- and self.tutorial.logons < 104 + if (self.tutorial.logons > 100) then -- and self.tutorial.logons < 104 --desligado por preocaução @@ -488,155 +510,6 @@ function _G._detalhes:Start() self.MicroButtonAlert = CreateFrame ("frame", "DetailsMicroButtonAlert", UIParent, "MicroButtonAlertTemplate") self.MicroButtonAlert:Hide() - --[[ - print ("primeiro:") - local instancia = _detalhes.tabela_instancias [1] - for i = 1, instancia.barras [1]:GetNumPoints() do - local point, relativeTo, relativePoint, xOfs, yOfs = instancia.barras [1]:GetPoint (i) - print (point, relativeTo, relativePoint, xOfs, yOfs) - end - print ("---------------") - --]] - - - -- bubble test - local f = CreateFrame ("frame", "DetailsBubble", UIParent) - f:SetPoint ("center", UIParent, "center") - f:SetSize (100, 100) - f:SetFrameStrata ("TOOLTIP") - f.isHorizontalFlipped = false - f.isVerticalFlipped = false - - local t = f:CreateTexture (nil, "artwork") - t:SetTexture ([[Interface\AddOns\Details\images\icons]]) - t:SetSize (131 * 1.2, 81 * 1.2) - --377 328 508 409 0.0009765625 - t:SetTexCoord (0.7373046875, 0.9912109375, 0.6416015625, 0.7978515625) - t:SetPoint ("center", f, "center") - - local line1 = f:CreateFontString (nil, "overlay", "GameFontHighlightSmall") - line1:SetPoint ("topleft", t, "topleft", 24, -10) - _detalhes:SetFontSize (line1, 9) - line1:SetTextColor (.9, .9, .9, 1) - line1:SetSize (110, 12) - line1:SetJustifyV ("center") - line1:SetJustifyH ("center") - - local line2 = f:CreateFontString (nil, "overlay", "GameFontHighlightSmall") - line2:SetPoint ("topleft", t, "topleft", 11, -20) - _detalhes:SetFontSize (line2, 9) - line2:SetTextColor (.9, .9, .9, 1) - line2:SetSize (140, 12) - line2:SetJustifyV ("center") - line2:SetJustifyH ("center") - - local line3 = f:CreateFontString (nil, "overlay", "GameFontHighlightSmall") - line3:SetPoint ("topleft", t, "topleft", 7, -30) - _detalhes:SetFontSize (line3, 9) - line3:SetTextColor (.9, .9, .9, 1) - line3:SetSize (144, 12) - line3:SetJustifyV ("center") - line3:SetJustifyH ("center") - - local line4 = f:CreateFontString (nil, "overlay", "GameFontHighlightSmall") - line4:SetPoint ("topleft", t, "topleft", 11, -40) - _detalhes:SetFontSize (line4, 9) - line4:SetTextColor (.9, .9, .9, 1) - line4:SetSize (140, 12) - line4:SetJustifyV ("center") - line4:SetJustifyH ("center") - - local line5 = f:CreateFontString (nil, "overlay", "GameFontHighlightSmall") - line5:SetPoint ("topleft", t, "topleft", 24, -50) - _detalhes:SetFontSize (line5, 9) - line5:SetTextColor (.9, .9, .9, 1) - line5:SetSize (110, 12) - line5:SetJustifyV ("center") - line5:SetJustifyH ("center") - - f.lines = {line1, line2, line3, line4, line5} - - --t:SetPoint ("center", UIParent, "center") - - function f:FlipHorizontal() - if (not f.isHorizontalFlipped) then - if (f.isVerticalFlipped) then - t:SetTexCoord (0.9912109375, 0.7373046875, 0.7978515625, 0.6416015625) - else - t:SetTexCoord (0.9912109375, 0.7373046875, 0.6416015625, 0.7978515625) - end - f.isHorizontalFlipped = true - else - if (f.isVerticalFlipped) then - t:SetTexCoord (0.7373046875, 0.9912109375, 0.7978515625, 0.6416015625) - else - t:SetTexCoord (0.7373046875, 0.9912109375, 0.6416015625, 0.7978515625) - end - f.isHorizontalFlipped = false - end - end - - function f:FlipVertical() - - if (not f.isVerticalFlipped) then - if (f.isHorizontalFlipped) then - t:SetTexCoord (0.7373046875, 0.9912109375, 0.7978515625, 0.6416015625) - else - t:SetTexCoord (0.9912109375, 0.7373046875, 0.7978515625, 0.6416015625) - end - f.isVerticalFlipped = true - else - if (f.isHorizontalFlipped) then - t:SetTexCoord (0.7373046875, 0.9912109375, 0.6416015625, 0.7978515625) - else - t:SetTexCoord (0.9912109375, 0.7373046875, 0.6416015625, 0.7978515625) - end - f.isVerticalFlipped = false - end - end - - function f:SetBubbleText (line1, line2, line3, line4, line5) - if (not line1) then - for _, line in ipairs (f.lines) do - line:SetText ("") - end - return - end - - if (line1:find ("\n")) then - line1, line2, line3, line4, line5 = strsplit ("\n", line1) - end - - f.lines[1]:SetText (line1) - f.lines[2]:SetText (line2) - f.lines[3]:SetText (line3) - f.lines[4]:SetText (line4) - f.lines[5]:SetText (line5) - end - - function f:SetOwner (frame, myPoint, hisPoint, x, y, alpha) - f:ClearAllPoints() - f:SetBubbleText (nil) - t:SetTexCoord (0.7373046875, 0.9912109375, 0.6416015625, 0.7978515625) - f.isHorizontalFlipped = false - f.isVerticalFlipped = false - f:SetPoint (myPoint or "bottom", frame, hisPoint or "top", x or 0, y or 0) - t:SetAlpha (alpha or 1) - end - - function f:ShowBubble() - f:Show() - end - - function f:HideBubble() - f:Hide() - end - - f:SetBubbleText (nil) - - f:Hide() - - local lower = _detalhes:GetLowerInstanceNumber() if (lower) then local instance = _detalhes:GetInstance (lower) @@ -678,5 +551,23 @@ function _G._detalhes:Start() end + --[[ + 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) + --]] end