local _detalhes = _detalhes local Loc = LibStub("AceLocale-3.0"):GetLocale("Details") local _ local gump = _detalhes.gump local SharedMedia = LibStub:GetLibrary("LibSharedMedia-3.0") local atributos = _detalhes.atributos local sub_atributos = _detalhes.sub_atributos local segmentos = _detalhes.segmentos --lua locals local _cstr = tostring local _math_ceil = math.ceil local _math_floor = math.floor local _math_abs = math.abs local _math_max = math.max local _ipairs = ipairs local _pairs = pairs local _string_lower = string.lower local _unpack = unpack --api locals local CreateFrame = CreateFrame local _GetTime = GetTime local _GetCursorPosition = GetCursorPosition local _GameTooltip = GameTooltip local _UIParent = UIParent local _GetScreenWidth = GetScreenWidth local _GetScreenHeight = GetScreenHeight local _IsAltKeyDown = IsAltKeyDown local _IsShiftKeyDown = IsShiftKeyDown local _IsControlKeyDown = IsControlKeyDown -- GLOBALS: C_Timer, Details, DetailsFramework, DetailsKeyBindScrollDown, DetailsKeyBindScrollUp, DetailsWindowGroupPopUp1, DetailsWindowLockPopUp1, GameCooltip -- GLOBALS: GameCooltip2, GameCooltipFrame1, GameTooltip, GetScreenHeight, GetScreenWidth, GetTime, InCombatLockdown, IsInInstance, LibStub, UIParent -- GLOBALS: UnitAffectingCombat, atan2, cos, error, getmetatable, ipairs, loadstring, math, pairs, pcall, setfenv, shift_monitor, sin, sqrt, string -- GLOBALS: strsplit, table, table_deepcopy, time, tinsert, tonumber, tremove, type, unpack, wipe -- GLOBALS: DETAILS_SEGMENTTYPE_DUNGEON_TRASH, DETAILS_SEGMENTTYPE_RAID_BOSS, DETAILS_SEGMENTTYPE_RAID_TRASH, TALENTS, _G local modo_raid = _detalhes._detalhes_props["MODO_RAID"] local modo_alone = _detalhes._detalhes_props["MODO_ALONE"] local modo_grupo = _detalhes._detalhes_props["MODO_GROUP"] local modo_all = _detalhes._detalhes_props["MODO_ALL"] local tok_functions = _detalhes.ToKFunctions --constants local baseframe_strata = "LOW" 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 if instancia.showing then instancia.atributo = instancia.atributo or 1 if not instancia.showing[instancia.atributo] then --> unknow very rare bug where showing transforms into a clean table instancia.showing = _detalhes.tabela_vigente end instancia.showing[instancia.atributo].need_refresh = true end end --> skins TCoords -- 0.00048828125 local DEFAULT_SKIN =[[Interface\AddOns\Details\images\skins\classic_skin]] --local COORDS_LEFT_BALL = {0.15673828125, 0.27978515625, 0.08251953125, 0.20556640625} -- 160 84 287 211(updated) --local COORDS_LEFT_BALL = {0.15576171875, 0.27978515625, 0.08251953125, 0.20556640625} -- 160 84 287 211(updated) local COORDS_LEFT_BALL = {0.15625, 0.2802734375, 0.08203125, 0.2060546875} -- 160 287 84 211 --local COORDS_LEFT_CONNECTOR = {0.29541015625, 0.30126953125, 0.08251953125, 0.20556640625} --302 84 309 211(updated) local COORDS_LEFT_CONNECTOR = {0.294921875, 0.3017578125, 0.08203125, 0.2060546875} --302 84 309 211(updated) --local COORDS_LEFT_CONNECTOR_NO_ICON = {0.58837890625, 0.59423828125, 0.08251953125, 0.20556640625} -- 602 84 609 211(updated) local COORDS_LEFT_CONNECTOR_NO_ICON = {0.587890625+0.00048828125, 0.5947265625, 0.08203125, 0.2060546875} -- 602 609 x 84 211 --local COORDS_TOP_BACKGROUND = {0.15673828125, 0.65478515625, 0.22314453125, 0.34619140625} -- 160 228 671 355(updated) local COORDS_TOP_BACKGROUND = {0.15625, 0.6552734375, 0.22265625, 0.3466796875} -- 160 671 x 228 355 --local COORDS_RIGHT_BALL = {0.31591796875, 0.43994140625, 0.08251953125, 0.20556640625} --324 84 451 211(updated) --local COORDS_RIGHT_BALL = {0.3154296875+0.00048828125, 0.439453125+0.00048828125, 0.08203125, 0.2060546875-0.00048828125} --323 84 450 211(updated) local COORDS_RIGHT_BALL = {0.3154296875, 0.439453125, 0.08203125, 0.2060546875} -- 323 450 x 84 211 --local COORDS_LEFT_BALL_NO_ICON = {0.44970703125, 0.57275390625, 0.08251953125, 0.20556640625} --460 84 587 211(updated) --local COORDS_LEFT_BALL_NO_ICON = {0.44921875, 0.57421875, 0.08203125, 0.20703125} --460 84 588 212(updated) --local COORDS_LEFT_BALL_NO_ICON = {0.44970703125, 0.57275390625, 0.08251953125, 0.20556640625} --460 84 587 211(updated) 588 212 local COORDS_LEFT_BALL_NO_ICON = {0.44921875, 0.5732421875, 0.08203125, 0.2060546875} -- 460 587 84 211 --local COORDS_LEFT_SIDE_BAR = {0.76611328125, 0.82763671875, 0.00244140625, 0.50146484375} -- 784 2 848 514(updated) local COORDS_LEFT_SIDE_BAR = {0.765625, 0.828125, 0.001953125, 0.501953125} -- 784 2 848 514(updated) --local COORDS_RIGHT_SIDE_BAR = {0.70068359375, 0.76220703125, 0.00244140625, 0.50146484375} -- 717 2 781 514(updated) --local COORDS_RIGHT_SIDE_BAR = {0.7001953125, 0.763671875, 0.00244140625, 0.50146484375} -- 717 2 781 514(updated) --local COORDS_RIGHT_SIDE_BAR = {0.7001953125+0.00048828125, 0.76171875, 0.001953125, 0.5009765625} -- --717 2 780 513 local COORDS_RIGHT_SIDE_BAR = {0.7001953125, 0.7626953125, 0.001953125, 0.501953125} -- --717 2 781 513 local COORDS_BOTTOM_SIDE_BAR = {0.32861328125, 0.82666015625, 0.50537109375, 0.56494140625} -- 336 517 847 579(updated) local COORDS_SLIDER_TOP = {0.00146484375, 0.03076171875, 0.00244140625, 0.03173828125} -- 1 2 32 33 -ok local COORDS_SLIDER_MIDDLE = {0.00146484375, 0.03076171875, 0.03955078125, 0.10009765625} -- 1 40 32 103 -ok local COORDS_SLIDER_DOWN = {0.00146484375, 0.03076171875, 0.10986328125, 0.13916015625} -- 1 112 32 143 -ok --local COORDS_STRETCH = {0.00146484375, 0.03076171875, 0.21435546875, 0.22802734375} -- 1 219 32 234 -ok local COORDS_STRETCH = {0.0009765625, 0.03125, 0.2138671875, 0.228515625} -- 1 32 219 234 local COORDS_RESIZE_RIGHT = {0.00146484375, 0.01513671875, 0.24560546875, 0.25927734375} -- 1 251 16 266 -ok local COORDS_RESIZE_LEFT = {0.02001953125, 0.03173828125, 0.24560546875, 0.25927734375} -- 20 251 33 266 -ok local COORDS_UNLOCK_BUTTON = {0.00146484375, 0.01513671875, 0.27197265625, 0.28564453125} -- 1 278 16 293 -ok local COORDS_BOTTOM_BACKGROUND = {0.15673828125, 0.65478515625, 0.35400390625, 0.47705078125} -- 160 362 671 489 -ok local COORDS_PIN_LEFT = {0.00146484375, 0.03076171875, 0.30126953125, 0.33056640625} -- 1 308 32 339 -ok local COORDS_PIN_RIGHT = {0.03564453125, 0.06494140625, 0.30126953125, 0.33056640625} -- 36 308 67 339 -ok -- icones: 365 = 0.35693359375 // 397 = 0.38720703125 local menus_backdrop = { edgeFile =[[Interface\Buttons\WHITE8X8]], edgeSize=1, --bgFile="Interface\\DialogFrame\\UI-DialogBox-Background-Dark", --bgFile =[[Interface\Tooltips\UI-Tooltip-Background]], bgFile =[[Interface\AddOns\Details\images\background]], tileSize=16, tile=true, insets = {top=0, right=0, left=0, bottom=0} } local menus_backdropcolor = {.2, .2, .2, 0.85} local menus_backdropcolor_sec = {.2, .2, .2, 0.90} local menus_bordercolor = {0, 0, 0, .25} --menus are ignoring the value set on the profile _detalhes.menu_backdrop_config = { menus_backdrop = menus_backdrop, menus_backdropcolor = menus_backdropcolor, menus_backdropcolor_sec = menus_backdropcolor_sec, menus_bordercolor = menus_bordercolor, } function _detalhes:AtualizarScrollBar(x) --> x = quantas barras esta sendo mostrado local cabe = self.rows_fit_in_window --> quantas barras cabem na janela if(not self.barraS[1]) then --primeira vez que as barras est�o aparecendo self.barraS[1] = 1 --primeira barra if(cabe < x) then --se a quantidade a ser mostrada for maior que o que pode ser mostrado self.barraS[2] = cabe -- B = o que pode ser mostrado else self.barraS[2] = x -- contr�rio B = o que esta sendo mostrado end end if(not self.rolagem) then if(x > cabe) then --> Ligar a ScrollBar self.rows_showing = x if(not self.baseframe.isStretching) then self:MostrarScrollBar() end self.need_rolagem = true self.barraS[2] = cabe --> B � o total que cabe na barra else --> Do contr�rio B � o total de barras self.rows_showing = x self.barraS[2] = x end else if(x > self.rows_showing) then --> tem mais barras mostrando agora do que na �ltima atualiza��o self.rows_showing = x local nao_mostradas = self.rows_showing - self.rows_fit_in_window local slider_height = nao_mostradas*self.row_height self.scroll.scrollMax = slider_height self.scroll:SetMinMaxValues(0, slider_height) else --> diminuiu a quantidade, acontece depois de uma coleta de lixo self.rows_showing = x local nao_mostradas = self.rows_showing - self.rows_fit_in_window if(nao_mostradas < 1) then --> se estiver mostrando menos do que realmente cabe n�o precisa scrollbar self:EsconderScrollBar() else --> contr�rio, basta atualizar o tamanho da scroll local slider_height = nao_mostradas*self.row_height self.scroll.scrollMax = slider_height self.scroll:SetMinMaxValues(0, slider_height) end end end if(self.update) then self.update = false self.v_barras = true return _detalhes:EsconderBarrasNaoUsadas(self) end end --> self � a janela das barras local function move_barras(self, elapsed) self._move_func.time = self._move_func.time+elapsed if(self._move_func.time > 0.01) then if(self._move_func.instancia.bgdisplay_loc == self._move_func._end) then --> se o tamanho atual � igual ao final declarado self:SetScript("OnUpdate", nil) self._move_func = nil else self._move_func.time = 0 self._move_func.instancia.bgdisplay_loc = self._move_func.instancia.bgdisplay_loc + self._move_func.inc --> inc � -1 ou 1 e ir� crescer ou diminuir a janela for index = 1, self._move_func.instancia.rows_fit_in_window do self._move_func.instancia.barras[index]:SetWidth(self:GetWidth()+self._move_func.instancia.bgdisplay_loc-3) end self._move_func.instancia.bgdisplay:SetPoint("bottomright", self, "bottomright", self._move_func.instancia.bgdisplay_loc, 0) self._move_func.instancia.bar_mod = self._move_func.instancia.bgdisplay_loc+(-3) --> verifica o tamanho do text for i = 1, #self._move_func.instancia.barras do local esta_barra = self._move_func.instancia.barras[i] _detalhes:name_space(esta_barra) end end end end --> self � a inst�ncia function _detalhes:MoveBarrasTo(destino) local janela = self.baseframe janela._move_func = { window = self.baseframe, instancia = self, time = 0 } if(destino > self.bgdisplay_loc) then janela._move_func.inc = 1 else janela._move_func.inc = -1 end janela._move_func._end = destino janela:SetScript("OnUpdate", move_barras) end function _detalhes:MostrarScrollBar(sem_animacao) if(self.rolagem) then return end if(not _detalhes.use_scroll) then self.baseframe:EnableMouseWheel(true) self.scroll:Enable() self.scroll:SetValue(0) self.rolagem = true return end local main = self.baseframe local mover_para = self.largura_scroll*-1 if(not sem_animacao and _detalhes.animate_scroll) then self:MoveBarrasTo(mover_para) else --> set size of rows for index = 1, self.rows_fit_in_window do self.barras[index]:SetWidth(self.baseframe:GetWidth()+mover_para -3) --> -3 distance between row end and scroll start end --> move the semi-background to the left(which moves the scroll) self.bgdisplay:SetPoint("bottomright", self.baseframe, "bottomright", mover_para, 0) self.bar_mod = mover_para +(-3) self.bgdisplay_loc = mover_para --> cancel movement if any if(self.baseframe:GetScript("OnUpdate") and self.baseframe:GetScript("OnUpdate") == move_barras) then self.baseframe:SetScript("OnUpdate", nil) end end local nao_mostradas = self.rows_showing - self.rows_fit_in_window local slider_height = nao_mostradas*self.row_height self.scroll.scrollMax = slider_height self.scroll:SetMinMaxValues(0, slider_height) self.rolagem = true self.scroll:Enable() main:EnableMouseWheel(true) self.scroll:SetValue(0) --> set value pode chamar o atualizador self.baseframe.button_down:Enable() main.resize_direita:SetPoint("bottomright", main, "bottomright", self.largura_scroll*-1, 0) if(main.isLocked) then main.lock_button:SetPoint("bottomright", main, "bottomright", self.largura_scroll*-1, 0) end end function _detalhes:EsconderScrollBar(sem_animacao, force) if(not self.rolagem) then return end if(not _detalhes.use_scroll and not force) then self.scroll:Disable() self.baseframe:EnableMouseWheel(false) self.rolagem = false return end local main = self.baseframe if(not sem_animacao and _detalhes.animate_scroll) then self:MoveBarrasTo(self.row_info.space.right + 3) --> else for index = 1, self.rows_fit_in_window do self.barras[index]:SetWidth(self.baseframe:GetWidth() - 5) --> -5 space between row end and window right border end self.bgdisplay:SetPoint("bottomright", self.baseframe, "bottomright", 0, 0) -- voltar o background na poci��o inicial self.bar_mod = 0 -- zera o bar mod, uma vez que as barras v�o estar na pocis�o inicial self.bgdisplay_loc = -2 if(self.baseframe:GetScript("OnUpdate") and self.baseframe:GetScript("OnUpdate") == move_barras) then self.baseframe:SetScript("OnUpdate", nil) end end self.rolagem = false self.scroll:Disable() main:EnableMouseWheel(false) main.resize_direita:SetPoint("bottomright", main, "bottomright", 0, 0) if(main.isLocked) then main.lock_button:SetPoint("bottomright", main, "bottomright", 0, 0) end end local function OnLeaveMainWindow(instancia, self) instancia.is_interacting = false instancia:SetMenuAlpha(nil, nil, nil, nil, true) instancia:SetAutoHideMenu(nil, nil, true) instancia:RefreshAttributeTextSize() if(instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and not instancia.baseframe.isLocked) then --> resizes, lock and ungroup buttons if(not _detalhes.disable_lock_ungroup_buttons) then instancia.baseframe.resize_direita:SetAlpha(0) instancia.baseframe.resize_esquerda:SetAlpha(0) instancia.baseframe.lock_button:SetAlpha(0) instancia.break_snap_button:SetAlpha(0) end --> stretch button gump:Fade(instancia.baseframe.button_stretch, "ALPHA", 0) elseif(instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and instancia.baseframe.isLocked) then --> resizes, lock and ungroup buttons if(not _detalhes.disable_lock_ungroup_buttons) then instancia.baseframe.lock_button:SetAlpha(0) instancia.break_snap_button:SetAlpha(0) end gump:Fade(instancia.baseframe.button_stretch, "ALPHA", 0) end end _detalhes.OnLeaveMainWindow = OnLeaveMainWindow local function OnEnterMainWindow(instancia, self) instancia.is_interacting = true instancia:SetMenuAlpha(nil, nil, nil, nil, true) instancia:SetAutoHideMenu(nil, nil, true) instancia:RefreshAttributeTextSize() if(not instancia.last_interaction or instancia.last_interaction < _detalhes._tempo) then instancia.last_interaction = _detalhes._tempo or time() end if(instancia.baseframe:GetFrameLevel() > instancia.rowframe:GetFrameLevel()) then instancia.rowframe:SetFrameLevel(instancia.baseframe:GetFrameLevel()) end if(instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and not instancia.baseframe.isLocked) then --> resize, lock and ungroup buttons if(not _detalhes.disable_lock_ungroup_buttons) then instancia.baseframe.resize_direita:SetAlpha(1) instancia.baseframe.resize_esquerda:SetAlpha(1) instancia.baseframe.lock_button:SetAlpha(1) --> ungroup for _, instancia_id in _pairs(instancia.snap) do if(instancia_id) then instancia.break_snap_button:SetAlpha(1) break end end end --> stretch button if(not _detalhes.disable_stretch_button) then gump:Fade(instancia.baseframe.button_stretch, "ALPHA", 0.6) end elseif(instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and instancia.baseframe.isLocked) then if(not _detalhes.disable_lock_ungroup_buttons) then instancia.baseframe.lock_button:SetAlpha(1) --> ungroup for _, instancia_id in _pairs(instancia.snap) do if(instancia_id) then instancia.break_snap_button:Show() instancia.break_snap_button:SetAlpha(1) break end end end if(not _detalhes.disable_stretch_button) then gump:Fade(instancia.baseframe.button_stretch, "ALPHA", 0.6) end end end _detalhes.OnEnterMainWindow = OnEnterMainWindow local function VPL(instancia, esta_instancia) --> conferir esquerda if(instancia.ponto4.x-0.5 < esta_instancia.ponto1.x) then --> a janela esta a esquerda if(instancia.ponto4.x+20 > esta_instancia.ponto1.x) then --> a janela esta a menos de 20 pixels de dist�ncia if(instancia.ponto4.y < esta_instancia.ponto1.y + 100 and instancia.ponto4.y > esta_instancia.ponto1.y - 100) then --> a janela esta a +20 ou -20 pixels de dist�ncia na vertical return 1 end end end return nil end local function VPB(instancia, esta_instancia) --> conferir baixo if(instancia.ponto1.y+(20 * instancia.window_scale) < esta_instancia.ponto2.y -(16 * esta_instancia.window_scale)) then --> a janela esta em baixo if(instancia.ponto1.x > esta_instancia.ponto2.x-100 and instancia.ponto1.x < esta_instancia.ponto2.x+100) then --> a janela esta a 20 pixels de dist�ncia para a esquerda ou para a direita if(instancia.ponto1.y+(20 * instancia.window_scale) > esta_instancia.ponto2.y -(36 * esta_instancia.window_scale)) then --> esta a 20 pixels de dist�ncia return 2 end end end return nil end local function VPR(instancia, esta_instancia) --> conferir lateral direita if(instancia.ponto2.x+0.5 > esta_instancia.ponto3.x) then --> a janela esta a direita if(instancia.ponto2.x-20 < esta_instancia.ponto3.x) then --> a janela esta a menos de 20 pixels de dist�ncia if(instancia.ponto2.y < esta_instancia.ponto3.y + 100 and instancia.ponto2.y > esta_instancia.ponto3.y - 100) then --> a janela esta a +20 ou -20 pixels de dist�ncia na vertical return 3 end end end return nil end local function VPT(instancia, esta_instancia) --> conferir cima if(instancia.ponto3.y -(16 * instancia.window_scale) > esta_instancia.ponto4.y +(20 * esta_instancia.window_scale)) then --> a janela esta em cima if(instancia.ponto3.x > esta_instancia.ponto4.x-100 and instancia.ponto3.x < esta_instancia.ponto4.x+100) then --> a janela esta a 20 pixels de dist�ncia para a esquerda ou para a direita if(esta_instancia.ponto4.y+(40 * esta_instancia.window_scale) > instancia.ponto3.y -(16 * instancia.window_scale)) then return 4 end end end return nil end _detalhes.VPT, _detalhes.VPR, _detalhes.VPB, _detalhes.VPL = VPT, VPR, VPB, VPL local color_red = {1, 0.2, 0.2} local color_green = {0.2, 1, 0.2} local update_line = function(self, target_frame) --> based on weak auras frame movement code --local selfX, selfY = target_frame:GetCenter() local selfX, selfY = target_frame.instance:GetPositionOnScreen() --local anchorX, anchorY = self:GetCenter() local anchorX, anchorY = self.instance:GetPositionOnScreen() selfX, selfY = selfX or 0, selfY or 0 anchorX, anchorY = anchorX or 0, anchorY or 0 local dX = selfX - anchorX local dY = selfY - anchorY local distance = sqrt(dX^2 + dY^2) local angle = atan2(dY, dX) local numInterim = _math_floor(distance/40) local guide_balls = _detalhes.guide_balls if(not guide_balls) then _detalhes.guide_balls = {} guide_balls = _detalhes.guide_balls end for index, ball in ipairs(guide_balls) do ball:Hide() end self.instance:AtualizaPontos() target_frame.instance:AtualizaPontos() local color = color_red local _R, _T, _L, _B = VPL(self.instance, target_frame.instance), VPB(self.instance, target_frame.instance), VPR(self.instance, target_frame.instance), VPT(self.instance, target_frame.instance) if(_R or _T or _L or _B) then color = color_green end for i = 0, numInterim do local x =(distance -(i * 40)) * cos(angle) local y =(distance -(i * 40)) * sin(angle) local ball = guide_balls[i] if(not ball) then ball = _detalhes.overlay_frame:CreateTexture(nil, "Overlay") ball:SetTexture([[Interface\AddOns\Details\images\icons]]) ball:SetSize(16, 16) ball:SetAlpha(0.3) ball:SetTexCoord(410/512, 426/512, 2/512, 18/512) tinsert(guide_balls, ball) end ball:ClearAllPoints() ball:SetPoint("CENTER", self, "CENTER", x, y) --baseframse center ball:Show() ball:SetVertexColor(unpack(color)) end end local show_instance_ids = function() for id, instance in _detalhes:ListInstances() do if(instance:IsEnabled()) then local id_texture1 = instance.baseframe.id_texture1 if(not id_texture1) then --instancia. instance.baseframe.id_texture1 = instance.floatingframe:CreateTexture(nil, "overlay") instance.baseframe.id_texture2 = instance.floatingframe:CreateTexture(nil, "overlay") instance.baseframe.id_texture1:SetTexture([[Interface\Timer\BigTimerNumbers]]) instance.baseframe.id_texture2:SetTexture([[Interface\Timer\BigTimerNumbers]]) end local h = instance.baseframe:GetHeight() * 0.80 instance.baseframe.id_texture1:SetSize(h, h) instance.baseframe.id_texture2:SetSize(h, h) local id = instance:GetId() local first, second = _math_floor(id/10), _math_floor(id%10) if(id >= 10) then instance.baseframe.id_texture1:SetPoint("center", instance.baseframe, "center", -h/2/2, 0) instance.baseframe.id_texture2:SetPoint("left", instance.baseframe.id_texture1, "right", -h/2, 0) first = first + 1 local line = _math_ceil(first / 4) local x =( first -((line-1) * 4 ) ) / 4 local l, r, t, b = x-0.25, x, 0.33 *(line-1), 0.33 * line instance.baseframe.id_texture1:SetTexCoord(l, r, t, b) second = second + 1 local line = _math_ceil(second / 4) local x =( second -((line-1) * 4 ) ) / 4 local l, r, t, b = x-0.25, x, 0.33 *(line-1), 0.33 * line instance.baseframe.id_texture2:SetTexCoord(l, r, t, b) instance.baseframe.id_texture1:Show() instance.baseframe.id_texture2:Show() else instance.baseframe.id_texture1:SetPoint("center", instance.baseframe, "center") second = second + 1 local line = _math_ceil(second / 4) local x =( second -((line-1) * 4 ) ) / 4 local l, r, t, b = x-0.25, x, 0.33 *(line-1), 0.33 * line instance.baseframe.id_texture1:SetTexCoord(l, r, t, b) instance.baseframe.id_texture1:Show() instance.baseframe.id_texture2:Hide() end end end end local tempo_movendo, precisa_ativar, instancia_alvo, tempo_fades, nao_anexados, flash_bounce, start_draw_lines, instance_ids_shown local movement_onupdate = function(self, elapsed) if(start_draw_lines and start_draw_lines > 0.95) then update_line(self, instancia_alvo.baseframe) elseif(start_draw_lines) then start_draw_lines = start_draw_lines + elapsed end if(instance_ids_shown and instance_ids_shown > 0.95) then show_instance_ids() instance_ids_shown = nil elseif(instance_ids_shown) then instance_ids_shown = instance_ids_shown + elapsed end if(tempo_movendo and tempo_movendo < 0) then if(precisa_ativar) then --> se a inst�ncia estiver fechada gump:Fade(instancia_alvo.baseframe, "ALPHA", 0.2) gump:Fade(instancia_alvo.baseframe.cabecalho.ball, "ALPHA", 0.2) gump:Fade(instancia_alvo.baseframe.cabecalho.atributo_icon, "ALPHA", 0.2) instancia_alvo:SaveMainWindowPosition() instancia_alvo:RestoreMainWindowPosition() precisa_ativar = false elseif(tempo_fades) then if(flash_bounce == 0) then flash_bounce = 1 for lado, livre in _ipairs(nao_anexados) do if(livre) then if(lado == 1) then local texture = instancia_alvo.h_esquerda.texture texture:ClearAllPoints() if(instancia_alvo.toolbar_side == 1) then if(instancia_alvo.show_statusbar) then texture:SetPoint("topright", instancia_alvo.baseframe, "topleft", 0, 20) texture:SetPoint("bottomright", instancia_alvo.baseframe, "bottomleft", 0, -14) else texture:SetPoint("topright", instancia_alvo.baseframe, "topleft", 0, 20) texture:SetPoint("bottomright", instancia_alvo.baseframe, "bottomleft", 0, 0) end else if(instancia_alvo.show_statusbar) then texture:SetPoint("topright", instancia_alvo.baseframe, "topleft", 0, 0) texture:SetPoint("bottomright", instancia_alvo.baseframe, "bottomleft", 0, -34) else texture:SetPoint("topright", instancia_alvo.baseframe, "topleft", 0, 0) texture:SetPoint("bottomright", instancia_alvo.baseframe, "bottomleft", 0, -20) end end instancia_alvo.h_esquerda:Flash(1, 1, 2.0, false, 0, 0) elseif(lado == 2) then local texture = instancia_alvo.h_baixo.texture texture:ClearAllPoints() if(instancia_alvo.toolbar_side == 1) then if(instancia_alvo.show_statusbar) then texture:SetPoint("topleft", instancia_alvo.baseframe, "bottomleft", 0, -14) texture:SetPoint("topright", instancia_alvo.baseframe, "bottomright", 0, -14) else texture:SetPoint("topleft", instancia_alvo.baseframe, "bottomleft", 0, 0) texture:SetPoint("topright", instancia_alvo.baseframe, "bottomright", 0, 0) end else if(instancia_alvo.show_statusbar) then texture:SetPoint("topleft", instancia_alvo.baseframe, "bottomleft", 0, -34) texture:SetPoint("topright", instancia_alvo.baseframe, "bottomright", 0, -34) else texture:SetPoint("topleft", instancia_alvo.baseframe, "bottomleft", 0, -20) texture:SetPoint("topright", instancia_alvo.baseframe, "bottomright", 0, -20) end end instancia_alvo.h_baixo:Flash(1, 1, 2.0, false, 0, 0) elseif(lado == 3) then local texture = instancia_alvo.h_direita.texture texture:ClearAllPoints() if(instancia_alvo.toolbar_side == 1) then if(instancia_alvo.show_statusbar) then texture:SetPoint("topleft", instancia_alvo.baseframe, "topright", 0, 20) texture:SetPoint("bottomleft", instancia_alvo.baseframe, "bottomright", 0, -14) else texture:SetPoint("topleft", instancia_alvo.baseframe, "topright", 0, 20) texture:SetPoint("bottomleft", instancia_alvo.baseframe, "bottomright", 0, 0) end else if(instancia_alvo.show_statusbar) then texture:SetPoint("topleft", instancia_alvo.baseframe, "topright", 0, 0) texture:SetPoint("bottomleft", instancia_alvo.baseframe, "bottomright", 0, -34) else texture:SetPoint("topleft", instancia_alvo.baseframe, "topright", 0, 0) texture:SetPoint("bottomleft", instancia_alvo.baseframe, "bottomright", 0, -20) end end instancia_alvo.h_direita:Flash(1, 1, 2.0, false, 0, 0) elseif(lado == 4) then local texture = instancia_alvo.h_cima.texture texture:ClearAllPoints() if(instancia_alvo.toolbar_side == 1) then texture:SetPoint("bottomleft", instancia_alvo.baseframe, "topleft", 0, 20) texture:SetPoint("bottomright", instancia_alvo.baseframe, "topright", 0, 20) else texture:SetPoint("bottomleft", instancia_alvo.baseframe, "topleft", 0, 0) texture:SetPoint("bottomright", instancia_alvo.baseframe, "topright", 0, 0) end instancia_alvo.h_cima:Flash(1, 1, 2.0, false, 0, 0) end end end end tempo_movendo = 1 else self:SetScript("OnUpdate", nil) tempo_movendo = 1 end elseif(tempo_movendo) then tempo_movendo = tempo_movendo - elapsed end end local function move_janela(baseframe, iniciando, instancia, just_updating) instancia_alvo = _detalhes.tabela_instancias[instancia.meu_id-1] if(_detalhes.disable_window_groups) then instancia_alvo = nil end if(iniciando) then if(baseframe.isMoving) then --> ja esta em movimento return end baseframe.isMoving = true instancia:BaseFrameSnap() baseframe:StartMoving() local group = instancia:GetInstanceGroup() for _, this_instance in _ipairs(group) do this_instance.baseframe:SetClampRectInsets(0, 0, 0, 0) this_instance.isMoving = true end local _, ClampLeft, ClampRight = instancia:InstanciasHorizontais() local _, ClampBottom, ClampTop = instancia:InstanciasVerticais() baseframe:SetClampRectInsets(-ClampLeft, ClampRight, ClampTop, -ClampBottom) if(instancia_alvo and(instancia_alvo.ativa or not just_updating)) then tempo_fades = 1.0 nao_anexados = {true, true, true, true} tempo_movendo = 1 flash_bounce = 0 instance_ids_shown = 0 start_draw_lines = 0 for lado, snap_to in _pairs(instancia_alvo.snap) do if(snap_to == instancia.meu_id) then start_draw_lines = false end end for lado, snap_to in _pairs(instancia_alvo.snap) do if(snap_to) then if(snap_to == instancia.meu_id) then tempo_fades = nil break end nao_anexados[lado] = false end end for lado = 1, 4 do if(instancia_alvo.horizontalSnap and instancia.verticalSnap) then nao_anexados[lado] = false elseif(instancia_alvo.horizontalSnap and lado == 2) then nao_anexados[lado] = false elseif(instancia_alvo.horizontalSnap and lado == 4) then nao_anexados[lado] = false elseif(instancia_alvo.verticalSnap and lado == 1) then nao_anexados[lado] = false elseif(instancia_alvo.verticalSnap and lado == 3) then nao_anexados[lado] = false end end local need_start = not instancia_alvo.iniciada precisa_ativar = not instancia_alvo.ativa if(need_start) then --> se a inst�ncia n�o tiver sido aberta ainda local lower_instance = _detalhes:GetLowerInstanceNumber() --print(lower_instance, instancia_alvo.meu_id, DEATHGRAPHICS_BUTTON:GetParent():GetName()) instancia_alvo:RestauraJanela(instancia_alvo.meu_id, true) if(instancia_alvo:IsSoloMode()) then _detalhes.SoloTables:switch() end instancia_alvo.ativa = false instancia_alvo:SaveMainWindowPosition() instancia_alvo:RestoreMainWindowPosition() gump:Fade(instancia_alvo.baseframe, 1) gump:Fade(instancia_alvo.rowframe, 1) gump:Fade(instancia_alvo.baseframe.cabecalho.ball, 1) need_start = false end baseframe:SetScript("OnUpdate", movement_onupdate) else tempo_movendo = nil start_draw_lines = nil instance_ids_shown = 0 baseframe:SetScript("OnUpdate", movement_onupdate) end else baseframe:StopMovingOrSizing() baseframe.isMoving = false baseframe:SetScript("OnUpdate", nil) if(_detalhes.guide_balls) then for index, ball in ipairs(_detalhes.guide_balls) do ball:Hide() end end for _, ins in _detalhes:ListInstances() do if(ins.baseframe) then ins.baseframe:SetUserPlaced(false) if(ins.baseframe.id_texture1) then ins.baseframe.id_texture1:Hide() ins.baseframe.id_texture2:Hide() end end end --baseframe:SetClampRectInsets(unpack(_detalhes.window_clamp)) if(instancia_alvo and not instancia.do_not_snap and not instancia_alvo.do_not_snap) then instancia:AtualizaPontos() local esquerda, baixo, direita, cima local meu_id = instancia.meu_id --> id da inst�ncia que esta sendo movida local isVertical = instancia_alvo.verticalSnap local isHorizontal = instancia_alvo.horizontalSnap local isSelfVertical = instancia.verticalSnap local isSelfHorizontal = instancia.horizontalSnap local _R, _T, _L, _B if(isVertical and not isSelfHorizontal) then _T, _B = VPB(instancia, instancia_alvo), VPT(instancia, instancia_alvo) elseif(isHorizontal and not isSelfVertical) then _R, _L = VPL(instancia, instancia_alvo), VPR(instancia, instancia_alvo) elseif(not isVertical and not isHorizontal) then _R, _T, _L, _B = VPL(instancia, instancia_alvo), VPB(instancia, instancia_alvo), VPR(instancia, instancia_alvo), VPT(instancia, instancia_alvo) end if(_L) then if(not instancia:EstaAgrupada(instancia_alvo, _L)) then esquerda = instancia_alvo.meu_id instancia.horizontalSnap = true instancia_alvo.horizontalSnap = true end end if(_B) then if(not instancia:EstaAgrupada(instancia_alvo, _B)) then baixo = instancia_alvo.meu_id instancia.verticalSnap = true instancia_alvo.verticalSnap = true end end if(_R) then if(not instancia:EstaAgrupada(instancia_alvo, _R)) then direita = instancia_alvo.meu_id instancia.horizontalSnap = true instancia_alvo.horizontalSnap = true end end if(_T) then if(not instancia:EstaAgrupada(instancia_alvo, _T)) then cima = instancia_alvo.meu_id instancia.verticalSnap = true instancia_alvo.verticalSnap = true end end if(esquerda or baixo or direita or cima) then instancia:agrupar_janelas({esquerda, baixo, direita, cima}) end for _, esta_instancia in _ipairs(_detalhes.tabela_instancias) do if(not esta_instancia:IsAtiva() and esta_instancia.iniciada) then esta_instancia:ResetaGump() gump:Fade(esta_instancia.baseframe, "in", 0.2) gump:Fade(esta_instancia.baseframe.cabecalho.ball, "in", 0.2) gump:Fade(esta_instancia.baseframe.cabecalho.atributo_icon, "in", 0.2) if(esta_instancia.modo == modo_raid) then _detalhes.raid = nil elseif(esta_instancia.modo == modo_alone) then _detalhes.SoloTables:switch() _detalhes.solo = nil end elseif(esta_instancia:IsAtiva()) then esta_instancia:SaveMainWindowPosition() esta_instancia:RestoreMainWindowPosition() end end end --> salva pos de todas as janelas for _, ins in _ipairs(_detalhes.tabela_instancias) do if(ins:IsEnabled()) then ins:SaveMainWindowPosition() ins:RestoreMainWindowPosition() end end local group = instancia:GetInstanceGroup() for _, this_instance in _ipairs(group) do this_instance.isMoving = false end if(instancia_alvo and instancia_alvo.ativa and instancia_alvo.baseframe) then instancia_alvo.h_esquerda:Stop() instancia_alvo.h_baixo:Stop() instancia_alvo.h_direita:Stop() instancia_alvo.h_cima:Stop() end end end _detalhes.move_janela_func = move_janela local BGFrame_scripts_onenter = function(self) OnEnterMainWindow(self._instance, self) end local BGFrame_scripts_onleave = function(self) OnLeaveMainWindow(self._instance, self) end local BGFrame_scripts_onmousedown = function(self, button) -- /run Details.disable_stretch_from_toolbar = true if(self.is_toolbar and self._instance.baseframe.isLocked and button == "LeftButton" and not _detalhes.disable_stretch_from_toolbar) then return self._instance.baseframe.button_stretch:GetScript("OnMouseDown")(self._instance.baseframe.button_stretch, "LeftButton") end if(self._instance.baseframe.isMoving) then move_janela(self._instance.baseframe, false, self._instance) self._instance:SaveMainWindowPosition() return end if(not self._instance.baseframe.isLocked and button == "LeftButton") then move_janela(self._instance.baseframe, true, self._instance) if(self.is_toolbar) then if(self._instance.attribute_text.enabled and self._instance.attribute_text.side == 1 and self._instance.toolbar_side == 1) then self._instance.menu_attribute_string:SetPoint("bottomleft", self._instance.baseframe.cabecalho.ball, "bottomright", self._instance.attribute_text.anchor[1]+1, self._instance.attribute_text.anchor[2]-1) end end elseif(button == "RightButton") then if(self.is_toolbar and not _detalhes.disable_alldisplays_window) then self._instance:ShowAllSwitch() else if(_detalhes.switch.current_instancia and _detalhes.switch.current_instancia == self._instance) then _detalhes.switch:CloseMe() else _detalhes.switch:ShowMe(self._instance) end end end end local BGFrame_scripts_onmouseup = function(self, button) if(self.is_toolbar and self._instance.baseframe.isLocked and button == "LeftButton") then if(DetailsWindowLockPopUp1 and DetailsWindowLockPopUp1:IsShown()) then _G["DetailsWindowLockPopUp1"]:Hide() end return self._instance.baseframe.button_stretch:GetScript("OnMouseUp")(self._instance.baseframe.button_stretch, "LeftButton") end if(self._instance.baseframe.isMoving) then move_janela(self._instance.baseframe, false, self._instance) --> novo movedor da janela self._instance:SaveMainWindowPosition() if(self.is_toolbar) then if(self._instance.attribute_text.enabled and self._instance.attribute_text.side == 1 and self._instance.toolbar_side == 1) then self._instance.menu_attribute_string:SetPoint("bottomleft", self._instance.baseframe.cabecalho.ball, "bottomright", self._instance.attribute_text.anchor[1], self._instance.attribute_text.anchor[2]) end end end end local function BGFrame_scripts(BG, baseframe, instancia) BG._instance = instancia BG:SetScript("OnEnter", BGFrame_scripts_onenter) BG:SetScript("OnLeave", BGFrame_scripts_onleave) BG:SetScript("OnMouseDown", BGFrame_scripts_onmousedown) BG:SetScript("OnMouseUp", BGFrame_scripts_onmouseup) end function gump:RegisterForDetailsMove(frame, instancia) frame:SetScript("OnMouseDown", function(frame, button) if(not instancia.baseframe.isLocked and button == "LeftButton") then move_janela(instancia.baseframe, true, instancia) --> novo movedor da janela end end) frame:SetScript("OnMouseUp", function(frame) if(instancia.baseframe.isMoving) then move_janela(instancia.baseframe, false, instancia) --> novo movedor da janela instancia:SaveMainWindowPosition() end end) end --> scripts do base frame local BFrame_scripts_onsizechange = function(self) self._instance:SaveMainWindowSize() self._instance:ReajustaGump() self._instance.oldwith = self:GetWidth() _detalhes:SendEvent("DETAILS_INSTANCE_SIZECHANGED", nil, self._instance) self._instance:RefreshAttributeTextSize() end local BFrame_scripts_onenter = function(self) OnEnterMainWindow(self._instance, self) end local BFrame_scripts_onleave = function(self) OnLeaveMainWindow(self._instance, self) end local BFrame_scripts_onmousedown = function(self, button) if(not self.isLocked and button == "LeftButton") then move_janela(self, true, self._instance) end end local BFrame_scripts_onmouseup = function(self, button) if(self.isMoving) then move_janela(self, false, self._instance) --> novo movedor da janela self._instance:SaveMainWindowPosition() end end local function BFrame_scripts(baseframe, instancia) baseframe._instance = instancia baseframe:SetScript("OnSizeChanged", BFrame_scripts_onsizechange) baseframe:SetScript("OnEnter", BFrame_scripts_onenter) baseframe:SetScript("OnLeave", BFrame_scripts_onleave) baseframe:SetScript("OnMouseDown", BFrame_scripts_onmousedown) baseframe:SetScript("OnMouseUp", BFrame_scripts_onmouseup) end local function backgrounddisplay_scripts(backgrounddisplay, baseframe, instancia) backgrounddisplay:SetScript("OnEnter", function(self) OnEnterMainWindow(instancia, self) end) backgrounddisplay:SetScript("OnLeave", function(self) OnLeaveMainWindow(instancia, self) end) end local function instancias_horizontais(instancia, largura, esquerda, direita) if(esquerda) then for lado, esta_instancia in _pairs(instancia.snap) do if(lado == 1) then --> movendo para esquerda local instancia = _detalhes.tabela_instancias[esta_instancia] instancia.baseframe:SetWidth(largura) instancia.auto_resize = true instancia:ReajustaGump() instancia.auto_resize = false instancias_horizontais(instancia, largura, true, false) _detalhes:SendEvent("DETAILS_INSTANCE_SIZECHANGED", nil, instancia) end end end if(direita) then for lado, esta_instancia in _pairs(instancia.snap) do if(lado == 3) then --> movendo para esquerda local instancia = _detalhes.tabela_instancias[esta_instancia] instancia.baseframe:SetWidth(largura) instancia.auto_resize = true instancia:ReajustaGump() instancia.auto_resize = false instancias_horizontais(instancia, largura, false, true) _detalhes:SendEvent("DETAILS_INSTANCE_SIZECHANGED", nil, instancia) end end end end local function instancias_verticais(instancia, altura, esquerda, direita) if(esquerda) then for lado, esta_instancia in _pairs(instancia.snap) do if(lado == 1) then --> movendo para esquerda local instancia = _detalhes.tabela_instancias[esta_instancia] instancia.baseframe:SetHeight(altura) instancia.auto_resize = true instancia:ReajustaGump() instancia.auto_resize = false instancias_verticais(instancia, altura, true, false) _detalhes:SendEvent("DETAILS_INSTANCE_SIZECHANGED", nil, instancia) end end end if(direita) then for lado, esta_instancia in _pairs(instancia.snap) do if(lado == 3) then --> movendo para esquerda local instancia = _detalhes.tabela_instancias[esta_instancia] instancia.baseframe:SetHeight(altura) instancia.auto_resize = true instancia:ReajustaGump() instancia.auto_resize = false instancias_verticais(instancia, altura, false, true) _detalhes:SendEvent("DETAILS_INSTANCE_SIZECHANGED", nil, instancia) end end end end local check_snap_side = function(instanceid, snap, id, container) local instance = _detalhes:GetInstance(instanceid) if(instance and instance.snap[snap] and instance.snap[snap] == id) then tinsert(container, instance) return true end end function _detalhes:InstanciasVerticais(instance) instance = self or instance local on_top = {} local on_bottom = {} local id = instance:GetId() --lower instances local this_instance = _detalhes:GetInstance(id-1) if(this_instance) then --> top side if(this_instance.snap[2] and this_instance.snap[2] == id) then local cid = id local snapid = 2 for i = cid-1, 1, -1 do if(check_snap_side(i, 2, cid, on_top)) then cid = cid - 1 else break end end --> bottom side elseif(this_instance.snap[4] and this_instance.snap[4] == id) then local cid = id local snapid = 4 for i = cid-1, 1, -1 do if(check_snap_side(i, 4, cid, on_bottom)) then cid = cid - 1 else break end end end end --upper instances local this_instance = _detalhes:GetInstance(id+1) if(this_instance) then --> top side if(this_instance.snap[2] and this_instance.snap[2] == id) then local cid = id local snapid = 2 for i = cid+1, _detalhes:GetNumInstancesAmount() do if(check_snap_side(i, 2, cid, on_top)) then cid = cid + 1 else break end end --> bottom side elseif(this_instance.snap[4] and this_instance.snap[4] == id) then local cid = id local snapid = 4 for i = cid+1, _detalhes:GetNumInstancesAmount() do if(check_snap_side(i, 4, cid, on_bottom)) then cid = cid + 1 else break end end end end --> calc top clamp local top_clamp = 0 local bottom_clamp = 0 if(instance.toolbar_side == 1) then top_clamp = top_clamp + 20 elseif(instance.toolbar_side == 2) then bottom_clamp = bottom_clamp + 20 end if(instance.show_statusbar) then bottom_clamp = bottom_clamp + 14 end for cid, this_instance in _ipairs(on_top) do if(this_instance.show_statusbar) then top_clamp = top_clamp + 14 end top_clamp = top_clamp + 20 top_clamp = top_clamp + this_instance.baseframe:GetHeight() end for cid, this_instance in _ipairs(on_bottom) do if(this_instance.show_statusbar) then bottom_clamp = bottom_clamp + 14 end bottom_clamp = bottom_clamp + 20 bottom_clamp = bottom_clamp + this_instance.baseframe:GetHeight() tinsert(on_top, this_instance) end return on_top, bottom_clamp, top_clamp end --[[ lado 4 ----------------------------------------- | | lado 1 | | lado 3 | | | | ----------------------------------------- lado 2 --]] function _detalhes:InstanciasHorizontais(instancia) instancia = self or instancia local linha_horizontal, esquerda, direita = {}, 0, 0 local top, bottom = 0, 0 local checking = instancia local check_index_anterior = _detalhes.tabela_instancias[instancia.meu_id-1] if(check_index_anterior) then --> possiu uma inst�ncia antes de mim if(check_index_anterior.snap[3] and check_index_anterior.snap[3] == instancia.meu_id) then --> o index negativo vai para a esquerda for i = instancia.meu_id-1, 1, -1 do local esta_instancia = _detalhes.tabela_instancias[i] if(esta_instancia.snap[3]) then if(esta_instancia.snap[3] == checking.meu_id) then linha_horizontal[#linha_horizontal+1] = esta_instancia esquerda = esquerda + esta_instancia.baseframe:GetWidth() checking = esta_instancia end else break end end elseif(check_index_anterior.snap[1] and check_index_anterior.snap[1] == instancia.meu_id) then --> o index negativo vai para a direita for i = instancia.meu_id-1, 1, -1 do local esta_instancia = _detalhes.tabela_instancias[i] if(esta_instancia.snap[1]) then if(esta_instancia.snap[1] == checking.meu_id) then linha_horizontal[#linha_horizontal+1] = esta_instancia direita = direita + esta_instancia.baseframe:GetWidth() checking = esta_instancia end else break end end end end checking = instancia local check_index_posterior = _detalhes.tabela_instancias[instancia.meu_id+1] if(check_index_posterior) then if(check_index_posterior.snap[3] and check_index_posterior.snap[3] == instancia.meu_id) then --> o index posterior vai para a esquerda for i = instancia.meu_id+1, #_detalhes.tabela_instancias do local esta_instancia = _detalhes.tabela_instancias[i] if(esta_instancia.snap[3]) then if(esta_instancia.snap[3] == checking.meu_id) then linha_horizontal[#linha_horizontal+1] = esta_instancia esquerda = esquerda + esta_instancia.baseframe:GetWidth() checking = esta_instancia end else break end end elseif(check_index_posterior.snap[1] and check_index_posterior.snap[1] == instancia.meu_id) then --> o index posterior vai para a direita for i = instancia.meu_id+1, #_detalhes.tabela_instancias do local esta_instancia = _detalhes.tabela_instancias[i] if(esta_instancia.snap[1]) then if(esta_instancia.snap[1] == checking.meu_id) then linha_horizontal[#linha_horizontal+1] = esta_instancia direita = direita + esta_instancia.baseframe:GetWidth() checking = esta_instancia end else break end end end end return linha_horizontal, esquerda, direita, bottom, top end local resizeTooltip = { {text = "|cff33CC00Click|cffEEEEEE: ".. Loc["STRING_RESIZE_COMMON"]}, {text = "+|cff33CC00 Click|cffEEEEEE: " .. Loc["STRING_RESIZE_HORIZONTAL"]}, {icon =[[Interface\AddOns\Details\images\key_shift]], width = 24, height = 14, l = 0, r = 1, t = 0, b =0.640625}, {text = "+|cff33CC00 Click|cffEEEEEE: " .. Loc["STRING_RESIZE_VERTICAL"]}, {icon =[[Interface\AddOns\Details\images\key_alt]], width = 24, height = 14, l = 0, r = 1, t = 0, b =0.640625}, {text = "+|cff33CC00 Click|cffEEEEEE: " .. Loc["STRING_RESIZE_ALL"]}, {icon =[[Interface\AddOns\Details\images\key_ctrl]], width = 24, height = 14, l = 0, r = 1, t = 0, b =0.640625} } --> search key: ~resizescript local resize_scripts_onmousedown = function(self, button) _G.GameCooltip:ShowMe(false) --> Hide Cooltip if(_detalhes.disable_lock_ungroup_buttons) then return end if(not self:GetParent().isLocked and button == "LeftButton" and self._instance.modo ~= _detalhes._detalhes_props["MODO_ALONE"]) then self:GetParent().isResizing = true self._instance:BaseFrameSnap() local isVertical = self._instance.verticalSnap local isHorizontal = self._instance.horizontalSnap local agrupadas if(self._instance.verticalSnap) then agrupadas = self._instance:InstanciasVerticais() elseif(self._instance.horizontalSnap) then agrupadas = self._instance:InstanciasHorizontais() end self._instance.stretchToo = agrupadas if(self._instance.stretchToo and #self._instance.stretchToo > 0) then for _, esta_instancia in ipairs(self._instance.stretchToo) do esta_instancia.baseframe._place = esta_instancia:SaveMainWindowPosition() esta_instancia.baseframe.isResizing = true end end ---------------- if(self._myside == "<") then if(_IsShiftKeyDown()) then self._instance.baseframe:StartSizing("LEFT") self._instance.eh_horizontal = true elseif(_IsAltKeyDown()) then self._instance.baseframe:StartSizing("TOP") self._instance.eh_vertical = true elseif(_IsControlKeyDown()) then self._instance.baseframe:StartSizing("BOTTOMLEFT") self._instance.eh_tudo = true else self._instance.baseframe:StartSizing("BOTTOMLEFT") end self:SetPoint("BOTTOMLEFT", self._instance.baseframe, "BOTTOMLEFT", -1, -1) self.afundado = true elseif(self._myside == ">") then if(_IsShiftKeyDown()) then self._instance.baseframe:StartSizing("RIGHT") self._instance.eh_horizontal = true elseif(_IsAltKeyDown()) then self._instance.baseframe:StartSizing("TOP") self._instance.eh_vertical = true elseif(_IsControlKeyDown()) then self._instance.baseframe:StartSizing("BOTTOMRIGHT") self._instance.eh_tudo = true else self._instance.baseframe:StartSizing("BOTTOMRIGHT") end if(self._instance.rolagem and _detalhes.use_scroll) then self:SetPoint("BOTTOMRIGHT", self._instance.baseframe, "BOTTOMRIGHT",(self._instance.largura_scroll*-1) + 1, -1) else self:SetPoint("BOTTOMRIGHT", self._instance.baseframe, "BOTTOMRIGHT", 1, -1) end self.afundado = true end _detalhes:SendEvent("DETAILS_INSTANCE_STARTRESIZE", nil, self._instance) if(_detalhes.update_speed > 0.3) then _detalhes:SetWindowUpdateSpeed(0.3, true) _detalhes.resize_changed_update_speed = true end end end local resize_scripts_onmouseup = function(self, button) if(_detalhes.disable_lock_ungroup_buttons) then return end if(self.afundado) then self.afundado = false if(self._myside == ">") then if(self._instance.rolagem and _detalhes.use_scroll) then self:SetPoint("bottomright", self._instance.baseframe, "bottomright", self._instance.largura_scroll*-1, 0) else self:SetPoint("bottomright", self._instance.baseframe, "bottomright", 0, 0) end else self:SetPoint("bottomleft", self._instance.baseframe, "bottomleft", 0, 0) end end if(self:GetParent().isResizing) then self:GetParent():StopMovingOrSizing() self:GetParent().isResizing = false self._instance:RefreshBars() self._instance:InstanceReset() self._instance:ReajustaGump() if(self._instance.stretchToo and #self._instance.stretchToo > 0) then for _, esta_instancia in ipairs(self._instance.stretchToo) do esta_instancia.baseframe:StopMovingOrSizing() esta_instancia.baseframe.isResizing = false esta_instancia:RefreshBars() esta_instancia:InstanceReset() esta_instancia:ReajustaGump() _detalhes:SendEvent("DETAILS_INSTANCE_SIZECHANGED", nil, esta_instancia) end self._instance.stretchToo = nil end local largura = self._instance.baseframe:GetWidth() local altura = self._instance.baseframe:GetHeight() if(self._instance.eh_horizontal) then instancias_horizontais(self._instance, largura, true, true) self._instance.eh_horizontal = nil end --if(instancia.eh_vertical) then instancias_verticais(self._instance, altura, true, true) self._instance.eh_vertical = nil --end _detalhes:SendEvent("DETAILS_INSTANCE_ENDRESIZE", nil, self._instance) if(self._instance.eh_tudo) then for _, esta_instancia in _ipairs(_detalhes.tabela_instancias) do if(esta_instancia:IsAtiva() and esta_instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"]) then esta_instancia.baseframe:ClearAllPoints() esta_instancia:SaveMainWindowPosition() esta_instancia:RestoreMainWindowPosition() end end for _, esta_instancia in _ipairs(_detalhes.tabela_instancias) do if(esta_instancia:IsAtiva() and esta_instancia ~= self._instance and esta_instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"]) then esta_instancia.baseframe:SetWidth(largura) esta_instancia.baseframe:SetHeight(altura) esta_instancia.auto_resize = true esta_instancia:RefreshBars() esta_instancia:InstanceReset() esta_instancia:ReajustaGump() esta_instancia.auto_resize = false _detalhes:SendEvent("DETAILS_INSTANCE_SIZECHANGED", nil, esta_instancia) end end self._instance.eh_tudo = nil end self._instance:BaseFrameSnap() for _, esta_instancia in _ipairs(_detalhes.tabela_instancias) do if(esta_instancia:IsAtiva()) then esta_instancia:SaveMainWindowPosition() esta_instancia:RestoreMainWindowPosition() end end if(_detalhes.resize_changed_update_speed) then _detalhes:SetWindowUpdateSpeed(false, true) _detalhes.resize_changed_update_speed = nil end end end local resize_scripts_onhide = function(self) if(self.going_hide) then _G.GameCooltip:ShowMe(false) self.going_hide = nil end end local resize_scripts_onenter = function(self) if(_detalhes.disable_lock_ungroup_buttons) then return end if(self._instance.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and not self._instance.baseframe.isLocked and not self.mostrando) then OnEnterMainWindow(self._instance, self) self.texture:SetBlendMode("ADD") self.mostrando = true _detalhes:CooltipPreset(2.1) GameCooltip:AddFromTable(resizeTooltip) GameCooltip:SetOwner(self) GameCooltip:ShowCooltip() end end local resize_scripts_onleave = function(self) if(self.mostrando) then self.going_hide = true if(not self.movendo) then OnLeaveMainWindow(self._instance, self) end self.texture:SetBlendMode("BLEND") self.mostrando = false GameCooltip:ShowMe(false) end end local function resize_scripts(resizer, instancia, scrollbar, side, baseframe) resizer._instance = instancia resizer._myside = side resizer:SetScript("OnMouseDown", resize_scripts_onmousedown) resizer:SetScript("OnMouseUp", resize_scripts_onmouseup) resizer:SetScript("OnHide", resize_scripts_onhide) resizer:SetScript("OnEnter", resize_scripts_onenter) resizer:SetScript("OnLeave", resize_scripts_onleave) end local lockButtonTooltip = { {text = Loc["STRING_LOCK_DESC"]}, {icon =[[Interface\PetBattles\PetBattle-LockIcon]], width = 14, height = 14, l = 0.0703125, r = 0.9453125, t = 0.0546875, b = 0.9453125, color = "orange"}, } local lockFunctionOnEnter = function(self) if(_detalhes.disable_lock_ungroup_buttons) then return end if(self.instancia.modo ~= _detalhes._detalhes_props["MODO_ALONE"] and not self.mostrando) then OnEnterMainWindow(self.instancia, self) self.mostrando = true self.label:SetTextColor(1, 1, 1, .6) _detalhes:CooltipPreset(2.1) GameCooltip:SetOption("FixedWidth", 180) GameCooltip:AddFromTable(lockButtonTooltip) GameCooltip:SetOwner(self) GameCooltip:ShowCooltip() end end local lockFunctionOnLeave = function(self) if(self.mostrando) then self.going_hide = true OnLeaveMainWindow(self.instancia, self) self.label:SetTextColor(.6, .6, .6, .7) self.mostrando = false GameCooltip:ShowMe(false) end end local lockFunctionOnHide = function(self) if(self.going_hide) then GameCooltip:ShowMe(false) self.going_hide = nil end end function _detalhes:DelayOptionsRefresh(instance, no_reopen) if(_G.DetailsOptionsWindow and _G.DetailsOptionsWindow:IsShown()) then _detalhes:ScheduleTimer("OpenOptionsWindow", 0.1, {instance or _G.DetailsOptionsWindow.instance, no_reopen}) end end function _detalhes:RefreshLockedState() if(not self.baseframe and self.meu_id and self:IsEnabled()) then self:ScheduleTimer("RefreshLockedState", 1) return elseif(not self.baseframe) then return end if(self.baseframe.isLocked) then self.baseframe.resize_direita:EnableMouse(false) self.baseframe.resize_esquerda:EnableMouse(false) else self.baseframe.resize_direita:EnableMouse(true) self.baseframe.resize_esquerda:EnableMouse(true) end return true end local lockFunctionOnClick = function(button, button_type, button2, isFromOptionsButton) --isFromOptionsButton is true when the call if from the button in the display section of the options panel if(_detalhes.disable_lock_ungroup_buttons and isFromOptionsButton ~= true) then return end if(not button:GetParent().instance) then button = button2 --from any other button end local baseframe = button:GetParent() if(baseframe.isLocked) then baseframe.isLocked = false baseframe.instance.isLocked = false button.label:SetText(Loc["STRING_LOCK_WINDOW"]) button:SetWidth(button.label:GetStringWidth()+2) if(not _detalhes.disable_lock_ungroup_buttons) then baseframe.resize_direita:SetAlpha(1) baseframe.resize_esquerda:SetAlpha(1) end button:ClearAllPoints() button:SetPoint("right", baseframe.resize_direita, "left", -1, 1.5) else baseframe.isLocked = true baseframe.instance.isLocked = true button.label:SetText(Loc["STRING_UNLOCK_WINDOW"]) button:SetWidth(button.label:GetStringWidth()+2) button:ClearAllPoints() button:SetPoint("bottomright", baseframe, "bottomright", -3, 0) baseframe.resize_direita:SetAlpha(0) baseframe.resize_esquerda:SetAlpha(0) end baseframe.instance:RefreshLockedState() _detalhes:DelayOptionsRefresh() end _detalhes.lock_instance_function = lockFunctionOnClick local unSnapButtonTooltip = { {text = Loc["STRING_DETACH_DESC"]}, {icon =[[Interface\AddOns\Details\images\icons]], width = 14, height = 14, l = 160/512, r = 179/512, t = 142/512, b = 162/512}, } local unSnapButtonOnEnter = function(self) if(_detalhes.disable_lock_ungroup_buttons) then return end local have_snap = false for _, instancia_id in _pairs(self.instancia.snap) do if(instancia_id) then have_snap = true break end end if(not have_snap) then OnEnterMainWindow(self.instancia, self) self.mostrando = true return end OnEnterMainWindow(self.instancia, self) self.mostrando = true _detalhes:CooltipPreset(2.1) GameCooltip:SetOption("FixedWidth", 180) GameCooltip:AddFromTable(unSnapButtonTooltip) GameCooltip:ShowCooltip(self, "tooltip") end local unSnapButtonOnLeave = function(self) if(self.mostrando) then OnLeaveMainWindow(self.instancia, self) self.mostrando = false GameCooltip:Hide() end end --> this should run only when the mouse is over a instance bar local shift_monitor = function(self) if(not self:IsMouseOver()) then self:SetScript("OnUpdate", shift_monitor) return end if(_IsShiftKeyDown()) then if(not self.showing_allspells) then self.showing_allspells = true local instancia = _detalhes:GetInstance(self.instance_id) instancia:MontaTooltip(self, self.row_id, "shift") end elseif(self.showing_allspells) then self.showing_allspells = false local instancia = _detalhes:GetInstance(self.instance_id) instancia:MontaTooltip(self, self.row_id) end if(_IsControlKeyDown()) then if(not self.showing_alltargets) then self.showing_alltargets = true local instancia = _detalhes:GetInstance(self.instance_id) instancia:MontaTooltip(self, self.row_id, "ctrl") end elseif(self.showing_alltargets) then self.showing_alltargets = false local instancia = _detalhes:GetInstance(self.instance_id) instancia:MontaTooltip(self, self.row_id) end if(_IsAltKeyDown()) then if(not self.showing_allpets) then self.showing_allpets = true local instancia = _detalhes:GetInstance(self.instance_id) instancia:MontaTooltip(self, self.row_id, "alt") end elseif(self.showing_allpets) then self.showing_allpets = false local instancia = _detalhes:GetInstance(self.instance_id) instancia:MontaTooltip(self, self.row_id) end end local barra_backdrop_onenter = { bgFile =[[Interface\Tooltips\UI-Tooltip-Background]], tile = true, tileSize = 16, insets = {left = 1, right = 1, top = 0, bottom = 1} } local barra_backdrop_onleave = { bgFile = "", edgeFile = "", tile = true, tileSize = 16, edgeSize = 32, insets = {left = 1, right = 1, top = 0, bottom = 1} } local barra_scripts_onenter = function(self) self.mouse_over = true OnEnterMainWindow(self._instance, self) self._instance:MontaTooltip(self, self.row_id) self:SetBackdrop(barra_backdrop_onenter) self:SetBackdropColor(0.588, 0.588, 0.588, 0.7) if(not _detalhes.instances_disable_bar_highlight) then if(self._instance.bars_inverted) then self.right_to_left_texture:SetBlendMode("ADD") else self.textura:SetBlendMode("ADD") end end self:SetScript("OnUpdate", shift_monitor) end local barra_scripts_onleave = function(self) self.mouse_over = false OnLeaveMainWindow(self._instance, self) --_GameTooltip:Hide() GameCooltip:ShowMe(false) self:SetBackdrop(barra_backdrop_onleave) self:SetBackdropBorderColor(0, 0, 0, 0) self:SetBackdropColor(0, 0, 0, 0) if(self._instance.bars_inverted) then self.right_to_left_texture:SetBlendMode("BLEND") else self.textura:SetBlendMode("BLEND") end self.showing_allspells = false self:SetScript("OnUpdate", nil) end local barra_scripts_onmousedown = function(self, button) if(self.fading_in) then return end if(button == "RightButton") then return _detalhes.switch:ShowMe(self._instance) --elseif(button == "MiddleButton") then elseif(button == "LeftButton") then end self._instance:HandleTextsOnMouseClick(self, "down") self.mouse_down = _GetTime() self.button = button local x, y = _GetCursorPosition() self.x = _math_floor(x) self.y = _math_floor(y) if(not self._instance.baseframe.isLocked) then GameCooltip:Hide() move_janela(self._instance.baseframe, true, self._instance) end end local barra_scripts_onmouseup = function(self, button) local is_shift_down = _IsShiftKeyDown() local is_control_down = _IsControlKeyDown() if(self._instance.baseframe.isMoving) then move_janela(self._instance.baseframe, false, self._instance) self._instance:SaveMainWindowPosition() if(self._instance:MontaTooltip(self, self.row_id)) then GameCooltip:Show(self, 1) end end self._instance:HandleTextsOnMouseClick(self, "up") local x, y = _GetCursorPosition() x = _math_floor(x) y = _math_floor(y) if(self.mouse_down and(self.mouse_down+0.4 > _GetTime() and(x == self.x and y == self.y)) or(x == self.x and y == self.y)) then if(self.button == "LeftButton" or self.button == "MiddleButton") then if(self._instance.atributo == 5 or is_shift_down) then --> report if(self._instance.atributo == 5 and is_shift_down) then local custom = self._instance:GetCustomObject() if(custom and custom.on_shift_click) then local func = loadstring(custom.on_shift_click) if(func) then local successful, errortext = pcall(func, self, self.minha_tabela, self._instance) if(not successful) then _detalhes:Msg("error occurred custom script shift+click:", errortext) end return end end end if(_detalhes.row_singleclick_overwrite[self._instance.atributo] and type(_detalhes.row_singleclick_overwrite[self._instance.atributo][self._instance.sub_atributo]) == "function") then return _detalhes.row_singleclick_overwrite[self._instance.atributo][self._instance.sub_atributo](_, self.minha_tabela, self._instance, is_shift_down, is_control_down) end return _detalhes:ReportSingleLine(self._instance, self) end --print(self.minha_tabela) -- /dump DetailsBarra_1_1.minha_tabela if(not self.minha_tabela) then return _detalhes:Msg("this bar is waiting update.") end self._instance:AbreJanelaInfo(self.minha_tabela, nil, nil, is_shift_down, is_control_down) end end end local barra_scripts_onclick = function(self, button) end local barra_scripts_onshow = function(self) -- search key: ~model if(self.using_upper_3dmodels) then self.modelbox_high:SetModel(self._instance.row_info.models.upper_model) self.modelbox_high:SetAlpha(self._instance.row_info.models.upper_alpha) end if(self.using_lower_3dmodels) then self.modelbox_low:SetModel(self._instance.row_info.models.lower_model) self.modelbox_low:SetAlpha(self._instance.row_info.models.lower_alpha) end end function _detalhes:HandleTextsOnMouseClick(row, type) if(self.bars_inverted) then if(type == "down") then row.texto_direita:SetPoint("left", row.statusbar, "left", 2, -1) if(self.row_info.no_icon) then row.texto_esquerdo:SetPoint("right", row.statusbar, "right", -1, -1) else row.texto_esquerdo:SetPoint("right", row.icone_classe, "left", -1, -1) end elseif(type == "up") then row.texto_direita:SetPoint("left", row.statusbar, "left", 1, 0) if(self.row_info.no_icon) then row.texto_esquerdo:SetPoint("right", row.statusbar, "right", -2, 0) else row.texto_esquerdo:SetPoint("right", row.icone_classe, "left", -2, 0) end end else if(type == "down") then row.texto_direita:SetPoint("right", row.statusbar, "right", 1, -1) if(self.row_info.no_icon) then row.texto_esquerdo:SetPoint("left", row.statusbar, "left", 3, -1) else row.texto_esquerdo:SetPoint("left", row.icone_classe, "right", 4, -1) end elseif(type == "up") then row.texto_direita:SetPoint("right", row.statusbar, "right") if(self.row_info.no_icon) then row.texto_esquerdo:SetPoint("left", row.statusbar, "left", 2, 0) else row.texto_esquerdo:SetPoint("left", row.icone_classe, "right", 3, 0) end end end end local set_bar_value = function(self, value) if(self._instance.bars_inverted) then self.statusbar:SetValue(0) local width = self._instance.cached_bar_width local inverse_bar_size = width / 100 * value local coord_inverse = inverse_bar_size / width inverse_bar_size = _math_max(inverse_bar_size, 0.00000001) self.right_to_left_texture:SetWidth(inverse_bar_size) self.right_to_left_texture:SetTexCoord(coord_inverse, 0, 0, 1) else self.statusbar:SetValue(value) end self.statusbar.value = value if(self.using_upper_3dmodels) then local width = self:GetWidth() local p =(width / 100) * value self.modelbox_high:SetPoint("bottomright", self, "bottomright", p - width, 0) end end -- ~talent ~icon local icon_frame_on_enter = function(self) local actor = self.row.minha_tabela if(self.row.icone_classe:GetTexture() ~= "") then --self.row.icone_classe:SetSize(self.row.icone_classe:GetWidth()+1, self.row.icone_classe:GetWidth()+1) --self.row.icone_classe:SetBlendMode("ADD") end if(actor) then if(actor.frags) then elseif(actor.is_custom or actor.byspell or actor.damage_spellid) then local spellid = actor.damage_spellid or actor.id or actor[1] if(spellid) then GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT", 0, 10) _detalhes:GameTooltipSetSpellByID(spellid) GameTooltip:Show() end elseif(actor.dead_at) then elseif(actor.name) then --ensure it's an actor table local serial = actor.serial local name = actor:name() local class = actor:class() local spec = _detalhes.cached_specs[serial] or actor.spec local talents = _detalhes.cached_talents[serial] local ilvl = _detalhes.ilevel:GetIlvl(serial) local icon_size = 20 local instance = _detalhes:GetInstance(self.row.instance_id) instance:BuildInstanceBarTooltip(self) local class_icon, class_L, class_R, class_T, class_B = _detalhes:GetClassIcon(class) local spec_id, spec_name, spec_description, spec_icon, spec_role, spec_class = DetailsFramework.GetSpecializationInfoByID(spec or 0) --thanks pas06 local spec_L, spec_R, spec_T, spec_B if(spec_id) then spec_L, spec_R, spec_T, spec_B = unpack(_detalhes.class_specs_coords[spec]) end GameCooltip:AddLine(name, spec_name) if(class == "UNKNOW" or class == "UNGROUPPLAYER") then GameCooltip:AddIcon([[Interface\AddOns\Details\images\classes_small_alpha]], 1, 1, icon_size, icon_size, 0, 0.25, 0.75, 1) else GameCooltip:AddIcon([[Interface\AddOns\Details\images\classes_small_alpha]], 1, 1, icon_size, icon_size, class_L, class_R, class_T, class_B) end if(spec_L) then GameCooltip:AddIcon([[Interface\AddOns\Details\images\spec_icons_normal_alpha]], 1, 2, icon_size, icon_size, spec_L, spec_R, spec_T, spec_B) else GameCooltip:AddIcon([[Interface\GossipFrame\IncompleteQuestIcon]], 1, 2, icon_size, icon_size) end _detalhes:AddTooltipHeaderStatusbar() local talent_string = talents or "" --[[ -- TEMP if(talents) then for i = 1, #talents do local talentID, name, texture, selected, available = GetTalentInfoByID(talents[i]) talent_string = talent_string .. " |T" .. texture .. ":" .. 24 .. ":" .. 24 ..":0:0:64:64:4:60:4:60|t" end end ]] -- TEMP local got_info local prefix = "Average Item Level" if(ilvl) then if GearScore_GetScore then prefix = "Gearscore" end GameCooltip:AddLine(prefix .. ":" , ilvl and "|T:" .. 24 .. ":" .. 24 ..":0:0:64:64:4:60:4:60|t" .. _math_floor(ilvl.ilvl) or "|T:" .. 24 .. ":" .. 24 ..":0:0:64:64:4:60:4:60|t ??") --> Loc from GlobalStrings.lua GameCooltip:AddIcon([[]], 1, 1, 1, 20) _detalhes:AddTooltipBackgroundStatusbar() got_info = true else GameCooltip:AddLine(prefix .. ":" , 0) GameCooltip:AddIcon([[]], 1, 1, 1, 20) _detalhes:AddTooltipBackgroundStatusbar() got_info = true end if(talent_string ~= "") then GameCooltip:AddLine(TALENTS .. ":", talent_string) --> Loc from GlobalStrings.lua GameCooltip:AddIcon([[]], 1, 1, 1, 24) _detalhes:AddTooltipBackgroundStatusbar() got_info = true elseif(got_info) then GameCooltip:AddLine(TALENTS .. ":", Loc["STRING_QUERY_INSPECT_REFRESH"]) --> Loc from GlobalStrings.lua GameCooltip:AddIcon([[]], 1, 1, 1, 24) _detalhes:AddTooltipBackgroundStatusbar() end GameCooltip:SetOption("StatusBarTexture",[[Interface\AddOns\Details\images\bar_skyline]]) GameCooltip:SetOption("MinButtonHeight", 15) GameCooltip:SetOption("IgnoreButtonAutoHeight", false) local height = 66 if(not got_info) then GameCooltip:AddLine(Loc["STRING_QUERY_INSPECT"], nil, 1, "orange") GameCooltip:AddIcon([[Interface\TUTORIALFRAME\UI-TUTORIAL-FRAME]], 1, 1, 12, icon_size, 8/512, 70/512, 224/512, 306/512) height = 54 end local combat = instance:GetShowingCombat() local diff = combat:GetDifficulty() local attribute, subattribute = instance:GetDisplay() --> check if is a raid encounter and if is heroic or mythic if(diff and(diff == 1 or diff == 2 or diff == 3 or diff == 4) and(attribute == 1 or attribute == 2)) then local db = _detalhes.OpenStorage() if(db) then local bestRank, encounterTable = _detalhes.storage:GetBestFromPlayer(diff, combat:GetBossInfo().id, attribute == 1 and "damage" or "healing", name, true) if(bestRank) then --GameCooltip:AddLine("") --> discover which are the player position in the guild rank local playerTable, onEncounter, rankPosition = _detalhes.storage:GetPlayerGuildRank(diff, combat:GetBossInfo().id, attribute == 1 and "damage" or "healing", name, true) --" .. _math_floor(bestRank[2] or 0) .. " ilvl" .. " | GameCooltip:AddLine("Best Score:", _detalhes:ToK2((bestRank[1] or 0) / encounterTable.elapsed) .. "[|cFFFFFF00Rank: " ..(rankPosition or "#") .. "|r]", 1, "white") _detalhes:AddTooltipBackgroundStatusbar() GameCooltip:AddLine("|TInterface\\TUTORIALFRAME\\UI-TUTORIAL-FRAME:14:12:0:1:512:512:8:70:224:306|t Open Rank", "|TInterface\\TUTORIALFRAME\\UI-TUTORIAL-FRAME:14:12:0:1:512:512:8:70:328:409|t Refresh Talents", 1, "white", "white") _detalhes:AddTooltipBackgroundStatusbar() --GameCooltip:AddLine("On: " ..(encounterTable.date:gsub(".*%s", "")), , 1, "orange") --_detalhes:AddTooltipHeaderStatusbar() if(not got_info) then height = height + 25 else height = height + 31 end end end end local attribute, subAttribute = instance:GetDisplay() if(attribute == 1) then local realDps = actor.total / instance:GetShowingCombat():GetCombatTime() local dpsValue = _detalhes:comma_value_raw(realDps) if(dpsValue) then local total, decimal = strsplit(".", dpsValue) total = total-- .. "." ..(decimal and decimal:match("^%d")) GameCooltip:AddLine("Dps:", total) _detalhes:AddTooltipBackgroundStatusbar() GameCooltip:AddIcon("", 1, 1, 1, 20) height = height + 21 end end GameCooltip:SetOption("FixedHeight", height) GameCooltip:ShowCooltip() self.unitname = name self.showing = "actor" end end end local icon_frame_on_leave = function(self) GameCooltip:Hide() if(GameTooltip and GameTooltip:IsShown()) then GameTooltip:Hide() end if(self.row.icone_classe:GetTexture() ~= "") then --self.row.icone_classe:SetSize(self.row.icone_classe:GetWidth()-1, self.row.icone_classe:GetWidth()-1) --self.row.icone_classe:SetBlendMode("BLEND") end end local icon_frame_events = _detalhes:CreateEventListener() function icon_frame_events:EnterCombat() for anim, _ in pairs(_detalhes.icon_animations.load.in_use) do anim.anim:Stop() anim:Hide() tinsert(_detalhes.icon_animations.load.available, anim) anim.icon_frame.icon_animation = nil anim.icon_frame = nil end wipe(_detalhes.icon_animations.load.in_use) end icon_frame_events:RegisterEvent("COMBAT_PLAYER_ENTER", "EnterCombat") function icon_frame_events:CancelAnim(anim) local anim, timeout = unpack(anim) if(_detalhes.icon_animations.load.in_use[anim]) then if(timeout) then local f = anim if(not f.question_icon) then f.question_icon = f.parent:GetParent():GetParent().border:CreateTexture(nil, "overlay") f.question_icon:SetTexture([[Interface\GossipFrame\ActiveLegendaryQuestIcon]]) f.question_icon:SetSize(16, 16) end f.question_icon:Show() f.question_icon:SetPoint("center", f.parent, "center") if(not _detalhes.HideBarQuestionIcon) then function _detalhes:HideBarQuestionIcon(frame) frame.question_icon:Hide() end end _detalhes:ScheduleTimer("HideBarQuestionIcon", 2, f) end _detalhes.icon_animations.load.in_use[anim] = nil tinsert(_detalhes.icon_animations.load.available, anim) anim.anim:Stop() anim:Hide() anim.icon_frame.icon_animation = nil anim.icon_frame = nil end end local icon_frame_inspect_callback = function(guid, unitid, icon_frame) if(icon_frame.icon_animation) then icon_frame.icon_animation.anim:Stop() icon_frame.icon_animation:Hide() end local is_in_use = _detalhes.icon_animations.load.in_use[icon_frame.icon_animation] if(is_in_use) then tinsert(_detalhes.icon_animations.load.available, icon_frame.icon_animation) _detalhes.icon_animations.load.in_use[icon_frame.icon_animation] = nil end if(icon_frame:IsMouseOver()) then icon_frame_on_enter(icon_frame) end if(icon_frame.icon_animation) then icon_frame.icon_animation.icon_frame = nil icon_frame.icon_animation = nil end end local icon_frame_create_animation = function() local f = CreateFrame("frame", nil, UIParent) f:SetFrameStrata("FULLSCREEN") f.anim = f:CreateAnimationGroup() f.rotate = f.anim:CreateAnimation("Rotation") f.rotate:SetDegrees(360) f.rotate:SetDuration(2) f.anim:SetLooping("repeat") local t = f:CreateTexture(nil, "overlay") t:SetTexture([[Interface\COMMON\StreamCircle]]) t:SetAlpha(0.7) t:SetAllPoints() tinsert(_detalhes.icon_animations.load.available, f) end local icon_frame_on_click_down = function(self) local instanceID = self.instance_id local instanceObject = Details:GetInstance(instanceID) local point = "left" if instanceObject.bars_inverted then point = "right" end self:GetParent():GetParent().icone_classe:SetPoint(point, self:GetParent():GetParent(), point, instanceObject.row_info.icon_offset[1] + 1, instanceObject.row_info.icon_offset[2] + -1) end local icon_frame_on_click_up = function(self, button) local instanceID = self.instance_id local instanceObject = Details:GetInstance(instanceID) local point = "left" if instanceObject.bars_inverted then point = "right" end self:GetParent():GetParent().icone_classe:SetPoint(point, self:GetParent():GetParent(), point, instanceObject.row_info.icon_offset[1], instanceObject.row_info.icon_offset[2]) if(button == "LeftButton") then --> open the rank panel local instance = _detalhes:GetInstance(self.row.instance_id) if(instance) then local attribute, subattribute = instance:GetDisplay() local combat = instance:GetShowingCombat() local diff = combat:GetDifficulty() local bossInfo = combat:GetBossInfo() if((attribute == 1 or attribute == 2) and bossInfo) then --if bossInfo is nil, means the combat isn't a boss local db = _detalhes.OpenStorage() if(db and bossInfo.id) then local haveData = _detalhes.storage:HaveDataForEncounter(diff, bossInfo.id, true) --attempt to index local 'bossInfo'(a nil value) if(haveData) then _detalhes:OpenRaidHistoryWindow(bossInfo.zone, bossInfo.id, diff, attribute == 1 and "damage" or "healing", true, 1, false, 2) end end end end return end if(_detalhes.in_combat) then _detalhes:Msg(Loc["STRING_QUERY_INSPECT_FAIL1"]) return end if(self.showing == "actor") then if(_detalhes.ilevel.core:HasQueuedInspec(self.unitname)) then --> icon animation local anim = tremove(_detalhes.icon_animations.load.available) if(not anim) then icon_frame_create_animation() anim = tremove(_detalhes.icon_animations.load.available) end local f = anim if(not f.question_icon) then f.question_icon = self:GetParent():GetParent().border:CreateTexture(nil, "overlay") f.question_icon:SetTexture([[Interface\GossipFrame\ActiveLegendaryQuestIcon]]) f.question_icon:SetSize(16, 16) end f.question_icon:ClearAllPoints() f.question_icon:SetPoint("center", self, "center") f.question_icon:Show() if(not _detalhes.HideBarQuestionIcon) then function _detalhes:HideBarQuestionIcon(frame) frame.question_icon:Hide() end end _detalhes:ScheduleTimer("HideBarQuestionIcon", 1, f) self.icon_animation = anim anim.icon_frame = self local pid pid = icon_frame_events:ScheduleTimer("CancelAnim", 1, {anim}) _detalhes.icon_animations.load.in_use[anim] = pid anim.parent = self return end local does_query = _detalhes.ilevel.core:QueryInspect(self.unitname, icon_frame_inspect_callback, self) if(self.icon_animation) then return end --> icon animation local anim = tremove(_detalhes.icon_animations.load.available) if(not anim) then icon_frame_create_animation() anim = tremove(_detalhes.icon_animations.load.available) end anim:Show() anim:SetParent(self) anim:ClearAllPoints() anim:SetFrameStrata("TOOLTIP") anim:SetPoint("center", self, "center") anim:SetSize(self:GetWidth()*1.7, self:GetHeight()*1.7) anim.anim:Play() self.icon_animation = anim anim.icon_frame = self local pid if(does_query) then pid = icon_frame_events:ScheduleTimer("CancelAnim", 4, {anim, true}) else pid = icon_frame_events:ScheduleTimer("CancelAnim", 0.2, {anim}) end _detalhes.icon_animations.load.in_use[anim] = pid anim.parent = self if(anim.question_icon) then anim.question_icon:Hide() end end end local set_frame_icon_scripts = function(row) row.icon_frame:SetScript("OnEnter", icon_frame_on_enter) row.icon_frame:SetScript("OnLeave", icon_frame_on_leave) row.icon_frame:SetScript("OnMouseDown", icon_frame_on_click_down) row.icon_frame:SetScript("OnMouseUp", icon_frame_on_click_up) end local function barra_scripts(esta_barra, instancia, i) esta_barra._instance = instancia esta_barra:SetScript("OnEnter", barra_scripts_onenter) esta_barra:SetScript("OnLeave", barra_scripts_onleave) esta_barra:SetScript("OnMouseDown", barra_scripts_onmousedown) esta_barra:SetScript("OnMouseUp", barra_scripts_onmouseup) esta_barra:SetScript("OnClick", barra_scripts_onclick) esta_barra:SetScript("OnShow", barra_scripts_onshow) set_frame_icon_scripts(esta_barra) esta_barra.SetValue = set_bar_value end function _detalhes:ReportSingleLine(instancia, barra) local reportar if(instancia.atributo == 5) then --> custom --> dump cooltip local GameCooltip = GameCooltip if(GameCooltipFrame1:IsShown()) then local actor_name = barra.texto_esquerdo:GetText() or "" actor_name = actor_name:gsub((".*%."), "") if(instancia.segmento == -1) then --overall reportar = {"Details!: " .. Loc["STRING_OVERALL"] .. " " .. instancia.customName .. ": " .. actor_name .. " " .. Loc["STRING_CUSTOM_REPORT"]} else reportar = {"Details!: " .. instancia.customName .. ": " .. actor_name .. " " .. Loc["STRING_CUSTOM_REPORT"]} end local amt = GameCooltip.Indexes for i = 2, amt do local left_text, right_text = GameCooltip:GetText(i) reportar[#reportar+1] =(i-1) .. ". " .. left_text .. " ... " .. right_text end else reportar = {"Details!: " .. instancia.customName .. ": " .. Loc["STRING_CUSTOM_REPORT"]} reportar[#reportar+1] = barra.texto_esquerdo:GetText() .. " " .. barra.texto_direita:GetText() --reportar[#reportar+1] =(i-1) .. ". " .. left_text .. " ... " .. right_text end else reportar = {"Details!: " .. Loc["STRING_REPORT"] .. " " .. _detalhes.sub_atributos[instancia.atributo].lista[instancia.sub_atributo]} reportar[#reportar+1] = barra.texto_esquerdo:GetText() .. " " .. barra.texto_direita:GetText() end return _detalhes:Reportar(reportar, {_no_current = true, _no_inverse = true, _custom = true}) end -- ~stretch local function button_stretch_scripts(baseframe, backgrounddisplay, instancia) local button = baseframe.button_stretch button:SetScript("OnEnter", function(self) self.mouse_over = true if(not _detalhes.disable_stretch_button) then gump:Fade(self, "ALPHA", 1) end end) button:SetScript("OnLeave", function(self) self.mouse_over = false gump:Fade(self, "ALPHA", 0) end) button:SetScript("OnMouseDown", function(self, button) if(button ~= "LeftButton") then return end if(instancia:IsSoloMode()) then return end instancia:EsconderScrollBar(true) baseframe._place = instancia:SaveMainWindowPosition() baseframe.isResizing = true baseframe.isStretching = true baseframe:SetFrameStrata("TOOLTIP") instancia.rowframe:SetFrameStrata("TOOLTIP") local _r, _g, _b, _a = baseframe:GetBackdropColor() gump:GradientEffect( baseframe, "frame", _r, _g, _b, _a, _r, _g, _b, 0.9, 1.5) if(instancia.wallpaper.enabled) then _r, _g, _b = baseframe.wallpaper:GetVertexColor() _a = baseframe.wallpaper:GetAlpha() gump:GradientEffect(baseframe.wallpaper, "texture", _r, _g, _b, _a, _r, _g, _b, 0.05, 0.5) end if(instancia.stretch_button_side == 1) then baseframe:StartSizing("top") baseframe.stretch_direction = "top" elseif(instancia.stretch_button_side == 2) then baseframe:StartSizing("bottom") baseframe.stretch_direction = "bottom" end local linha_horizontal = {} local checking = instancia for i = instancia.meu_id-1, 1, -1 do local esta_instancia = _detalhes.tabela_instancias[i] if((esta_instancia.snap[1] and esta_instancia.snap[1] == checking.meu_id) or(esta_instancia.snap[3] and esta_instancia.snap[3] == checking.meu_id)) then linha_horizontal[#linha_horizontal+1] = esta_instancia checking = esta_instancia else break end end checking = instancia for i = instancia.meu_id+1, #_detalhes.tabela_instancias do local esta_instancia = _detalhes.tabela_instancias[i] if((esta_instancia.snap[1] and esta_instancia.snap[1] == checking.meu_id) or(esta_instancia.snap[3] and esta_instancia.snap[3] == checking.meu_id)) then linha_horizontal[#linha_horizontal+1] = esta_instancia checking = esta_instancia else break end end instancia.stretchToo = linha_horizontal if(#instancia.stretchToo > 0) then for _, esta_instancia in ipairs(instancia.stretchToo) do esta_instancia:EsconderScrollBar(true) esta_instancia.baseframe._place = esta_instancia:SaveMainWindowPosition() esta_instancia.baseframe.isResizing = true esta_instancia.baseframe.isStretching = true esta_instancia.baseframe:SetFrameStrata("TOOLTIP") esta_instancia.rowframe:SetFrameStrata("TOOLTIP") local _r, _g, _b, _a = esta_instancia.baseframe:GetBackdropColor() gump:GradientEffect( esta_instancia.baseframe, "frame", _r, _g, _b, _a, _r, _g, _b, 0.9, 1.5) _detalhes:SendEvent("DETAILS_INSTANCE_STARTSTRETCH", nil, esta_instancia) if(esta_instancia.wallpaper.enabled) then _r, _g, _b = esta_instancia.baseframe.wallpaper:GetVertexColor() _a = esta_instancia.baseframe.wallpaper:GetAlpha() gump:GradientEffect(esta_instancia.baseframe.wallpaper, "texture", _r, _g, _b, _a, _r, _g, _b, 0.05, 0.5) end end end _detalhes:SnapTextures(true) _detalhes:SendEvent("DETAILS_INSTANCE_STARTSTRETCH", nil, instancia) --> change the update speed if(_detalhes.update_speed > 0.3) then _detalhes:SetWindowUpdateSpeed(0.3, true) _detalhes.stretch_changed_update_speed = true end end) button:SetScript("OnMouseUp", function(self, button) if(button ~= "LeftButton") then return end if(instancia:IsSoloMode()) then return end if(baseframe.isResizing) then baseframe:StopMovingOrSizing() baseframe.isResizing = false instancia:RestoreMainWindowPosition(baseframe._place) instancia:ReajustaGump() baseframe.isStretching = false if(instancia.need_rolagem) then instancia:MostrarScrollBar(true) end _detalhes:SendEvent("DETAILS_INSTANCE_SIZECHANGED", nil, instancia) instancia:RefreshBars() instancia:InstanceReset() instancia:ReajustaGump() baseframe.stretch_direction = nil if(instancia.stretchToo and #instancia.stretchToo > 0) then for _, esta_instancia in ipairs(instancia.stretchToo) do esta_instancia.baseframe:StopMovingOrSizing() esta_instancia.baseframe.isResizing = false esta_instancia:RestoreMainWindowPosition(esta_instancia.baseframe._place) esta_instancia:ReajustaGump() esta_instancia.baseframe.isStretching = false if(esta_instancia.need_rolagem) then esta_instancia:MostrarScrollBar(true) end _detalhes:SendEvent("DETAILS_INSTANCE_SIZECHANGED", nil, esta_instancia) local _r, _g, _b, _a = esta_instancia.baseframe:GetBackdropColor() gump:GradientEffect( esta_instancia.baseframe, "frame", _r, _g, _b, _a, instancia.bg_r, instancia.bg_g, instancia.bg_b, instancia.bg_alpha, 0.5) if(esta_instancia.wallpaper.enabled) then _r, _g, _b = esta_instancia.baseframe.wallpaper:GetVertexColor() _a = esta_instancia.baseframe.wallpaper:GetAlpha() gump:GradientEffect(esta_instancia.baseframe.wallpaper, "texture", _r, _g, _b, _a, _r, _g, _b, esta_instancia.wallpaper.alpha, 1.0) end esta_instancia.baseframe:SetFrameStrata(esta_instancia.strata) esta_instancia.rowframe:SetFrameStrata(esta_instancia.strata) esta_instancia:StretchButtonAlwaysOnTop() _detalhes:SendEvent("DETAILS_INSTANCE_ENDSTRETCH", nil, esta_instancia.baseframe) esta_instancia:RefreshBars() esta_instancia:InstanceReset() esta_instancia:ReajustaGump() end instancia.stretchToo = nil end end local _r, _g, _b, _a = baseframe:GetBackdropColor() gump:GradientEffect( baseframe, "frame", _r, _g, _b, _a, instancia.bg_r, instancia.bg_g, instancia.bg_b, instancia.bg_alpha, 0.5) if(instancia.wallpaper.enabled) then _r, _g, _b = baseframe.wallpaper:GetVertexColor() _a = baseframe.wallpaper:GetAlpha() gump:GradientEffect(baseframe.wallpaper, "texture", _r, _g, _b, _a, _r, _g, _b, instancia.wallpaper.alpha, 1.0) end baseframe:SetFrameStrata(instancia.strata) instancia.rowframe:SetFrameStrata(instancia.strata) instancia:StretchButtonAlwaysOnTop() _detalhes:SnapTextures(false) _detalhes:SendEvent("DETAILS_INSTANCE_ENDSTRETCH", nil, instancia) if(_detalhes.stretch_changed_update_speed) then _detalhes:SetWindowUpdateSpeed(false, true) _detalhes.stretch_changed_update_speed = nil end end) end local function button_down_scripts(main_frame, backgrounddisplay, instancia, scrollbar) main_frame.button_down:SetScript("OnMouseDown", function(self) if(not scrollbar:IsEnabled()) then return end local B = instancia.barraS[2] if(B < instancia.rows_showing) then scrollbar:SetValue(scrollbar:GetValue() + instancia.row_height) end self.precionado = true self.last_up = -0.3 self:SetScript("OnUpdate", function(self, elapsed) self.last_up = self.last_up + elapsed if(self.last_up > 0.03) then self.last_up = 0 B = instancia.barraS[2] if(B < instancia.rows_showing) then scrollbar:SetValue(scrollbar:GetValue() + instancia.row_height) else self:Disable() end end end) end) main_frame.button_down:SetScript("OnMouseUp", function(self) self.precionado = false self:SetScript("OnUpdate", nil) end) end local function button_up_scripts(main_frame, backgrounddisplay, instancia, scrollbar) main_frame.button_up:SetScript("OnMouseDown", function(self) if(not scrollbar:IsEnabled()) then return end local A = instancia.barraS[1] if(A > 1) then scrollbar:SetValue(scrollbar:GetValue() - instancia.row_height*2) end self.precionado = true self.last_up = -0.3 self:SetScript("OnUpdate", function(self, elapsed) self.last_up = self.last_up + elapsed if(self.last_up > 0.03) then self.last_up = 0 A = instancia.barraS[1] if(A > 1) then scrollbar:SetValue(scrollbar:GetValue() + instancia.row_height*2) else self:Disable() end end end) end) main_frame.button_up:SetScript("OnMouseUp", function(self) self.precionado = false self:SetScript("OnUpdate", nil) end) main_frame.button_up:SetScript("OnEnable", function(self) local current = scrollbar:GetValue() if(current == 0) then main_frame.button_up:Disable() end end) end function DetailsKeyBindScrollUp() local last_key_pressed = _detalhes.KeyBindScrollUpLastPressed or GetTime()-0.3 local to_top = false if(last_key_pressed+0.2 > GetTime()) then to_top = true end _detalhes.KeyBindScrollUpLastPressed = GetTime() for index, instance in ipairs(_detalhes.tabela_instancias) do if(instance:IsEnabled()) then local scrollbar = instance.scroll local A = instance.barraS[1] if(A and A > 1) then if(to_top) then scrollbar:SetValue(0) scrollbar.ultimo = 0 instance.baseframe.button_up:Disable() else scrollbar:SetValue(scrollbar:GetValue() - instance.row_height*2) end elseif(A) then scrollbar:SetValue(0) scrollbar.ultimo = 0 instance.baseframe.button_up:Disable() end end end end function DetailsKeyBindScrollDown() for index, instance in ipairs(_detalhes.tabela_instancias) do if(instance:IsEnabled()) then local scrollbar = instance.scroll local B = instance.barraS[2] if(B and B < instance.rows_showing) then scrollbar:SetValue(scrollbar:GetValue() + instance.row_height*2) elseif(B) then local _, maxValue = scrollbar:GetMinMaxValues() scrollbar:SetValue(maxValue) scrollbar.ultimo = maxValue instance.baseframe.button_down:Disable() end end end end local function iterate_scroll_scripts(backgrounddisplay, backgroundframe, baseframe, scrollbar, instancia) baseframe:SetScript("OnMouseWheel", function(self, delta) if(delta > 0) then --> rolou pra cima local A = instancia.barraS[1] if(A) then if(A > 1) then scrollbar:SetValue(scrollbar:GetValue() - instancia.row_height * _detalhes.scroll_speed) else scrollbar:SetValue(0) scrollbar.ultimo = 0 baseframe.button_up:Disable() end end elseif(delta < 0) then --> rolou pra baixo local B = instancia.barraS[2] if(B) then if(B <(instancia.rows_showing or 0)) then scrollbar:SetValue(scrollbar:GetValue() + instancia.row_height * _detalhes.scroll_speed) else local _, maxValue = scrollbar:GetMinMaxValues() scrollbar:SetValue(maxValue) scrollbar.ultimo = maxValue baseframe.button_down:Disable() end end end end) scrollbar:SetScript("OnValueChanged", function(self) local ultimo = self.ultimo local meu_valor = self:GetValue() if(ultimo == meu_valor) then --> n�o mudou return end --> shortcut local minValue, maxValue = scrollbar:GetMinMaxValues() if(minValue == meu_valor) then instancia.barraS[1] = 1 instancia.barraS[2] = instancia.rows_fit_in_window instancia:AtualizaGumpPrincipal(instancia, true) self.ultimo = meu_valor baseframe.button_up:Disable() return elseif(maxValue == meu_valor) then local min =(instancia.rows_showing or 0) -instancia.rows_fit_in_window min = min+1 if(min < 1) then min = 1 end instancia.barraS[1] = min instancia.barraS[2] =(instancia.rows_showing or 0) instancia:AtualizaGumpPrincipal(instancia, true) self.ultimo = meu_valor baseframe.button_down:Disable() return end if(not baseframe.button_up:IsEnabled()) then baseframe.button_up:Enable() end if(not baseframe.button_down:IsEnabled()) then baseframe.button_down:Enable() end if(meu_valor > ultimo) then --> scroll down local B = instancia.barraS[2] if(B <(instancia.rows_showing or 0)) then --> se o valor maximo n�o for o m�ximo de barras a serem mostradas local precisa_passar =((B+1) * instancia.row_height) -(instancia.row_height*instancia.rows_fit_in_window) --if(meu_valor > precisa_passar) then --> o valor atual passou o valor que precisa passar pra locomover if(true) then --> testing by pass row check local diff = meu_valor - ultimo --> pega a diferen�a de H diff = diff / instancia.row_height --> calcula quantas barras ele pulou diff = _math_ceil(diff) --> arredonda para cima if(instancia.barraS[2]+diff >(instancia.rows_showing or 0) and ultimo > 0) then instancia.barraS[1] =(instancia.rows_showing or 0) -(instancia.rows_fit_in_window-1) instancia.barraS[2] =(instancia.rows_showing or 0) else instancia.barraS[2] = instancia.barraS[2]+diff instancia.barraS[1] = instancia.barraS[1]+diff end instancia:AtualizaGumpPrincipal(instancia, true) end end else --> scroll up local A = instancia.barraS[1] if(A > 1) then local precisa_passar =(A-1) * instancia.row_height --if(meu_valor < precisa_passar) then if(true) then --> testing by pass row check --> calcula quantas barras passou local diff = ultimo - meu_valor diff = diff / instancia.row_height diff = _math_ceil(diff) if(instancia.barraS[1]-diff < 1) then instancia.barraS[2] = instancia.rows_fit_in_window instancia.barraS[1] = 1 else instancia.barraS[2] = instancia.barraS[2]-diff instancia.barraS[1] = instancia.barraS[1]-diff end instancia:AtualizaGumpPrincipal(instancia, true) end end end self.ultimo = meu_valor end) end function _detalhes:HaveInstanceAlert() return self.alert:IsShown() end function _detalhes:InstanceAlertTime(instance) instance.alert:Hide() instance.alert.rotate:Stop() instance.alert_time = nil end local hide_click_func = function() --empty end function _detalhes:InstanceAlert(msg, icon, time, clickfunc, doflash, forceAlert) if(not forceAlert and _detalhes.streamer_config.no_alerts) then return end if(not self.meu_id) then local lower = _detalhes:GetLowerInstanceNumber() if(lower) then self = _detalhes:GetInstance(lower) else return end end if(type(msg) == "boolean" and not msg) then self.alert:Hide() self.alert.rotate:Stop() self.alert_time = nil return end if(msg) then self.alert.text:SetText(msg) else self.alert.text:SetText("") end if(icon) then if(type(icon) == "table") then local texture, w, h, animate, left, right, top, bottom, r, g, b, a = unpack(icon) self.alert.icon:SetTexture(texture) self.alert.icon:SetWidth(w or 14) self.alert.icon:SetHeight(h or 14) if(left and right and top and bottom) then self.alert.icon:SetTexCoord(left, right, top, bottom) end if(animate) then self.alert.rotate:Play() end if(r and g and b) then self.alert.icon:SetVertexColor(r, g, b, a or 1) end else self.alert.icon:SetWidth(14) self.alert.icon:SetHeight(14) self.alert.icon:SetTexture(icon) self.alert.icon:SetVertexColor(1, 1, 1, 1) self.alert.icon:SetTexCoord(0, 1, 0, 1) end else self.alert.icon:SetTexture(nil) end self.alert.button.func = nil wipe(self.alert.button.func_param) if(clickfunc) then self.alert.button.func = clickfunc[1] self.alert.button.func_param = {unpack(clickfunc, 2)} end time = time or 15 self.alert_time = time _detalhes:ScheduleTimer("InstanceAlertTime", time, self) self.alert:SetPoint("bottom", self.baseframe, "bottom", 0, -12) self.alert:SetPoint("left", self.baseframe, "left", 3, 0) self.alert:SetPoint("right", self.baseframe, "right", -3, 0) self.alert:SetFrameStrata("TOOLTIP") self.alert.button:SetFrameStrata("TOOLTIP") self.alert:Show() if(doflash) then self.alert:DoFlash() end self.alert:Play() end local alert_on_click = function(self, button) if(self.func) then local okey, errortext = pcall(self.func, unpack(self.func_param)) if(not okey) then _detalhes:Msg("error on alert function:", errortext) end end self:GetParent():Hide() end local function CreateAlertFrame(baseframe, instancia) local frame_upper = CreateFrame("scrollframe", "DetailsAlertFrameScroll" .. instancia.meu_id, baseframe) frame_upper:SetPoint("bottom", baseframe, "bottom") frame_upper:SetPoint("left", baseframe, "left", 3, 0) frame_upper:SetPoint("right", baseframe, "right", -3, 0) frame_upper:SetHeight(13) frame_upper:SetFrameStrata("TOOLTIP") local frame_lower = CreateFrame("frame", "DetailsAlertFrameScrollChild" .. instancia.meu_id, frame_upper) frame_lower:SetHeight(25) frame_lower:SetPoint("left", frame_upper, "left") frame_lower:SetPoint("right", frame_upper, "right") frame_upper:SetScrollChild(frame_lower) local alert_bg = CreateFrame("frame", "DetailsAlertFrame" .. instancia.meu_id, frame_lower) alert_bg:SetPoint("bottom", baseframe, "bottom") alert_bg:SetPoint("left", baseframe, "left", 3, 0) alert_bg:SetPoint("right", baseframe, "right", -3, 0) alert_bg:SetHeight(12) alert_bg:SetBackdrop({bgFile =[[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16, insets = {left = 0, right = 0, top = 0, bottom = 0}}) alert_bg:SetBackdropColor(.1, .1, .1, 1) alert_bg:SetFrameStrata("FULLSCREEN") alert_bg:SetFrameLevel(baseframe:GetFrameLevel() + 6) alert_bg:Hide() local toptexture = alert_bg:CreateTexture(nil, "background") toptexture:SetTexture([[Interface\Challenges\challenges-main]]) --toptexture:SetTexCoord(0.1921484375, 0.523671875, 0.234375, 0.160859375) toptexture:SetTexCoord(0.231171875, 0.4846484375, 0.0703125, 0.072265625) toptexture:SetPoint("left", alert_bg, "left") toptexture:SetPoint("right", alert_bg, "right") toptexture:SetPoint("bottom", alert_bg, "top", 0, 0) toptexture:SetHeight(1) local text = alert_bg:CreateFontString(nil, "overlay", "GameFontNormal") text:SetPoint("right", alert_bg, "right", -14, 0) _detalhes:SetFontSize(text, 10) text:SetTextColor(1, 1, 1, 0.8) local rotate_frame = CreateFrame("frame", "DetailsAlertFrameRotate" .. instancia.meu_id, alert_bg) rotate_frame:SetWidth(12) rotate_frame:SetPoint("right", alert_bg, "right", -2, 0) rotate_frame:SetHeight(alert_bg:GetWidth()) rotate_frame:SetFrameStrata("FULLSCREEN") local icon = rotate_frame:CreateTexture(nil, "overlay") icon:SetPoint("center", rotate_frame, "center") icon:SetWidth(14) icon:SetHeight(14) local button = CreateFrame("button", "DetailsInstance"..instancia.meu_id.."AlertButton", alert_bg) button:SetAllPoints() button:SetFrameStrata("FULLSCREEN") button:SetScript("OnClick", alert_on_click) button._instance = instancia button.func_param = {} local RotateAnimGroup = rotate_frame:CreateAnimationGroup() local rotate = RotateAnimGroup:CreateAnimation("Rotation") rotate:SetDegrees(360) rotate:SetDuration(6) RotateAnimGroup:SetLooping("repeat") alert_bg:Hide() local anime = alert_bg:CreateAnimationGroup() anime.group = anime:CreateAnimation("Translation") anime.group:SetDuration(0.15) anime.group:SetOffset(0, 10) anime:SetScript("OnFinished", function(self) alert_bg:Show() alert_bg:SetPoint("bottom", baseframe, "bottom", 0, 0) alert_bg:SetPoint("left", baseframe, "left", 3, 0) alert_bg:SetPoint("right", baseframe, "right", -3, 0) end) local on_enter_alert = function(self) text:SetTextColor(1, 0.8, 0.3, 1) icon:SetBlendMode("ADD") end local on_leave_alert = function(self) text:SetTextColor(1, 1, 1, 0.8) icon:SetBlendMode("BLEND") end button:SetScript("OnEnter", on_enter_alert) button:SetScript("OnLeave", on_leave_alert) function alert_bg:Play() anime:Play() end local flash_texture = button:CreateTexture(nil, "overlay") flash_texture:SetTexCoord(53/512, 347/512, 58/256, 120/256) flash_texture:SetTexture([[Interface\AchievementFrame\UI-Achievement-Alert-Glow]]) flash_texture:SetAllPoints() flash_texture:SetBlendMode("ADD") local animation = flash_texture:CreateAnimationGroup() local anim1 = animation:CreateAnimation("ALPHA") local anim2 = animation:CreateAnimation("ALPHA") anim1:SetOrder(1) anim1:SetChange(1) anim1:SetDuration(0.1) anim2:SetOrder(2) anim1:SetChange(-1) anim2:SetDuration(0.2) animation:SetScript("OnFinished", function(self) flash_texture:Hide() end) flash_texture:Hide() local do_flash = function() flash_texture:Show() animation:Play() end function alert_bg:DoFlash() C_Timer.After(0.23, do_flash) end alert_bg.text = text alert_bg.icon = icon alert_bg.button = button alert_bg.rotate = RotateAnimGroup instancia.alert = alert_bg return alert_bg end function _detalhes:InstanceMsg(text, icon, textcolor, iconcoords, iconcolor) if(not text) then self.freeze_icon:Hide() return self.freeze_texto:Hide() end self.freeze_texto:SetText(text) self.freeze_icon:SetTexture(icon or[[Interface\CHARACTERFRAME\Disconnect-Icon]]) self.freeze_icon:Show() self.freeze_texto:Show() if(textcolor) then local r, g, b, a = gump:ParseColors(textcolor) self.freeze_texto:SetTextColor(r, g, b, a) else self.freeze_texto:SetTextColor(1, 1, 1, 1) end if(iconcoords and type(iconcoords) == "table") then self.freeze_icon:SetTexCoord(_unpack(iconcoords)) else self.freeze_icon:SetTexCoord(0, 1, 0, 1) end if(iconcolor) then local r, g, b, a = gump:ParseColors(iconcolor) self.freeze_icon:SetVertexColor(r, g, b, a) else self.freeze_icon:SetVertexColor(1, 1, 1, 1) end end function _detalhes:schedule_hide_anti_overlap(self) self:Hide() self.schdule = nil end local function hide_anti_overlap(self) if(self.schdule) then _detalhes:CancelTimer(self.schdule) self.schdule = nil end local schdule = _detalhes:ScheduleTimer("schedule_hide_anti_overlap", 0.3, self) self.schdule = schdule end local function show_anti_overlap(instance, host, side) local anti_menu_overlap = instance.baseframe.anti_menu_overlap if(anti_menu_overlap.schdule) then _detalhes:CancelTimer(anti_menu_overlap.schdule) anti_menu_overlap.schdule = nil end anti_menu_overlap:ClearAllPoints() if(side == "top") then anti_menu_overlap:SetPoint("bottom", host, "top") elseif(side == "bottom") then anti_menu_overlap:SetPoint("top", host, "bottom") end anti_menu_overlap:Show() end do --search key: ~tooltip local tooltip_anchor = CreateFrame("Button", "DetailsTooltipAnchor", UIParent) tooltip_anchor:SetSize(140, 20) tooltip_anchor:SetAlpha(0) tooltip_anchor:SetMovable(false) tooltip_anchor:SetClampedToScreen(true) tooltip_anchor.locked = true tooltip_anchor:SetBackdrop({bgFile =[[Interface\Tooltips\UI-Tooltip-Background]], edgeFile =[[Interface\DialogFrame\UI-DialogBox-Border]], edgeSize = 10, insets = {left = 1, right = 1, top = 2, bottom = 1}}) tooltip_anchor:SetBackdropColor(0, 0, 0, 1) tooltip_anchor:SetScript("OnEnter", function(self) tooltip_anchor.alert.animIn:Stop() tooltip_anchor.alert.animOut:Play() GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT") GameTooltip:ClearLines() GameTooltip:AddLine(Loc["STRING_OPTIONS_TOOLTIPS_ANCHOR_TEXT_DESC"]) GameTooltip:Show() end) tooltip_anchor:SetScript("OnLeave", function(self) GameTooltip:Hide() end) tooltip_anchor:SetScript("OnMouseDown", function(self, button) if(not self.moving and button == "LeftButton") then self:StartMoving() self.moving = true end end) tooltip_anchor:SetScript("OnMouseUp", function(self, button) if(self.moving) then self:StopMovingOrSizing() self.moving = false local xofs, yofs = self:GetCenter() local scale = self:GetEffectiveScale() local UIscale = UIParent:GetScale() xofs = xofs * scale - GetScreenWidth() * UIscale / 2 yofs = yofs * scale - GetScreenHeight() * UIscale / 2 _detalhes.tooltip.anchor_screen_pos[1] = xofs / UIscale _detalhes.tooltip.anchor_screen_pos[2] = yofs / UIscale elseif(button == "RightButton" and not self.moving) then tooltip_anchor:MoveAnchor() end end) function tooltip_anchor:MoveAnchor() if(self.locked) then self:SetAlpha(1) self:EnableMouse(true) self:SetMovable(true) self:SetFrameStrata("FULLSCREEN") self.locked = false tooltip_anchor.alert.animOut:Stop() tooltip_anchor.alert.animIn:Play() else self:SetAlpha(0) self:EnableMouse(false) self:SetFrameStrata("MEDIUM") self:SetMovable(false) self.locked = true tooltip_anchor.alert.animIn:Stop() tooltip_anchor.alert.animOut:Play() end end function tooltip_anchor:Restore() local x, y = _detalhes.tooltip.anchor_screen_pos[1], _detalhes.tooltip.anchor_screen_pos[2] local scale = self:GetEffectiveScale() local UIscale = UIParent:GetScale() x = x * UIscale / scale y = y * UIscale / scale self:ClearAllPoints() self:SetParent(UIParent) self:SetPoint("center", UIParent, "center", x, y) end tooltip_anchor.alert = CreateFrame("frame", "DetailsTooltipAnchorAlert", UIParent) -- "ActionBarButtonSpellActivationAlert" tooltip_anchor.alert:SetFrameStrata("FULLSCREEN") tooltip_anchor.alert:Hide() tooltip_anchor.alert:SetPoint("topleft", tooltip_anchor, "topleft", -60, 6) tooltip_anchor.alert:SetPoint("bottomright", tooltip_anchor, "bottomright", 40, -6) local icon = tooltip_anchor:CreateTexture(nil, "overlay") icon:SetTexture([[Interface\AddOns\Details\images\minimap]]) icon:SetPoint("left", tooltip_anchor, "left", 4, 0) icon:SetSize(18, 18) local text = tooltip_anchor:CreateFontString(nil, "overlay", "GameFontHighlightSmall") text:SetPoint("left", icon, "right", 6, 0) text:SetText(Loc["STRING_OPTIONS_TOOLTIPS_ANCHOR_TEXT"]) tooltip_anchor:EnableMouse(false) end --> ~inicio ~janela ~window ~nova ~start function gump:CriaJanelaPrincipal(ID, instancia, criando) -- main frames ----------------------------------------------------------------------------------------------------------------------------------------------- --> create the base frame, everything connect in this frame except the rows. local baseframe = CreateFrame("scrollframe", "DetailsBaseFrame"..ID, _UIParent) -- baseframe:SetMovable(true) baseframe:SetResizable(true) baseframe:SetUserPlaced(false) baseframe:SetDontSavePosition(true) baseframe.instance = instancia baseframe:SetFrameStrata(baseframe_strata) baseframe:SetFrameLevel(2) --> background holds the wallpaper, alert strings ans textures, have setallpoints on baseframe --> backgrounddisplay is a scrollschild of backgroundframe local backgroundframe = CreateFrame("scrollframe", "Details_WindowFrame"..ID, baseframe) local backgrounddisplay = CreateFrame("frame", "Details_GumpFrame"..ID, backgroundframe) backgroundframe:SetFrameLevel(3) backgrounddisplay:SetFrameLevel(3) backgroundframe.instance = instancia backgrounddisplay.instance = instancia instancia.windowBackgroundDisplay = backgrounddisplay --> row frame is the parent of rows, it have setallpoints on baseframe local rowframe = CreateFrame("frame", "DetailsRowFrame"..ID, _UIParent) rowframe:SetAllPoints(baseframe) rowframe:SetFrameStrata(baseframe_strata) rowframe:SetFrameLevel(2) instancia.rowframe = rowframe --> right click bookmark local switchbutton = gump:NewDetailsButton(backgrounddisplay, baseframe, nil, function() end, nil, nil, 1, 1, "", "", "", "", {rightFunc = {func = function() _detalhes.switch:ShowMe(instancia) end, param1 = nil, param2 = nil}}, "Details_SwitchButtonFrame" .. ID) switchbutton:SetPoint("topleft", backgrounddisplay, "topleft") switchbutton:SetPoint("bottomright", backgrounddisplay, "bottomright") switchbutton:SetFrameLevel(backgrounddisplay:GetFrameLevel()+1) instancia.windowSwitchButton = switchbutton --> avoid mouse hover over a high window when the menu is open for a lower instance. local anti_menu_overlap = CreateFrame("frame", "Details_WindowFrameAntiMenuOverlap" .. ID, UIParent) anti_menu_overlap:SetSize(100, 13) anti_menu_overlap:SetFrameStrata("DIALOG") anti_menu_overlap:EnableMouse(true) anti_menu_overlap:Hide() --anti_menu_overlap:SetBackdrop(gump_fundo_backdrop) --debug baseframe.anti_menu_overlap = anti_menu_overlap --> floating frame is an anchor for widgets which should be overlaying the window local floatingframe = CreateFrame("frame", "DetailsInstance"..ID.."BorderHolder", baseframe) floatingframe:SetFrameLevel(baseframe:GetFrameLevel()+7) instancia.floatingframe = floatingframe -- scroll bar ----------------------------------------------------------------------------------------------------------------------------------------------- --> create the scrollbar, almost not used. local scrollbar = CreateFrame("slider", "Details_ScrollBar"..ID, backgrounddisplay) --> scroll --> scroll image-node up baseframe.scroll_up = backgrounddisplay:CreateTexture(nil, "background") baseframe.scroll_up:SetPoint("topleft", backgrounddisplay, "topright", 0, 0) baseframe.scroll_up:SetTexture(DEFAULT_SKIN) baseframe.scroll_up:SetTexCoord(unpack(COORDS_SLIDER_TOP)) baseframe.scroll_up:SetWidth(32) baseframe.scroll_up:SetHeight(32) --> scroll image-node down baseframe.scroll_down = backgrounddisplay:CreateTexture(nil, "background") baseframe.scroll_down:SetPoint("bottomleft", backgrounddisplay, "bottomright", 0, 0) baseframe.scroll_down:SetTexture(DEFAULT_SKIN) baseframe.scroll_down:SetTexCoord(unpack(COORDS_SLIDER_DOWN)) baseframe.scroll_down:SetWidth(32) baseframe.scroll_down:SetHeight(32) --> scroll image-node middle baseframe.scroll_middle = backgrounddisplay:CreateTexture(nil, "background") baseframe.scroll_middle:SetPoint("top", baseframe.scroll_up, "bottom", 0, 8) baseframe.scroll_middle:SetPoint("bottom", baseframe.scroll_down, "top", 0, -11) baseframe.scroll_middle:SetTexture(DEFAULT_SKIN) baseframe.scroll_middle:SetTexCoord(unpack(COORDS_SLIDER_MIDDLE)) baseframe.scroll_middle:SetWidth(32) baseframe.scroll_middle:SetHeight(64) --> scroll widgets baseframe.button_up = CreateFrame("button", "DetailsScrollUp" .. instancia.meu_id, backgrounddisplay) baseframe.button_down = CreateFrame("button", "DetailsScrollDown" .. instancia.meu_id, backgrounddisplay) baseframe.button_up:SetWidth(29) baseframe.button_up:SetHeight(32) baseframe.button_up:SetNormalTexture([[Interface\BUTTONS\UI-ScrollBar-ScrollUpButton-Up]]) baseframe.button_up:SetPushedTexture([[Interface\BUTTONS\UI-ScrollBar-ScrollUpButton-Down]]) baseframe.button_up:SetDisabledTexture([[Interface\BUTTONS\UI-ScrollBar-ScrollUpButton-Disabled]]) baseframe.button_up:Disable() baseframe.button_down:SetWidth(29) baseframe.button_down:SetHeight(32) baseframe.button_down:SetNormalTexture([[Interface\BUTTONS\UI-ScrollBar-ScrollDownButton-Up]]) baseframe.button_down:SetPushedTexture([[Interface\BUTTONS\UI-ScrollBar-ScrollDownButton-Down]]) baseframe.button_down:SetDisabledTexture([[Interface\BUTTONS\UI-ScrollBar-ScrollDownButton-Disabled]]) baseframe.button_down:Disable() baseframe.button_up:SetPoint("topright", baseframe.scroll_up, "topright", -4, 3) baseframe.button_down:SetPoint("bottomright", baseframe.scroll_down, "bottomright", -4, -6) scrollbar:SetPoint("top", baseframe.button_up, "bottom", 0, 12) scrollbar:SetPoint("bottom", baseframe.button_down, "top", 0, -12) scrollbar:SetPoint("left", backgrounddisplay, "right", 3, 0) scrollbar:Show() --> config set scrollbar:SetOrientation("VERTICAL") scrollbar.scrollMax = 0 scrollbar:SetMinMaxValues(0, 0) scrollbar:SetValue(0) scrollbar.ultimo = 0 --> thumb scrollbar.thumb = scrollbar:CreateTexture(nil, "overlay") scrollbar.thumb:SetTexture([[Interface\Buttons\UI-ScrollBar-Knob]]) scrollbar.thumb:SetSize(29, 30) scrollbar:SetThumbTexture(scrollbar.thumb) --> scripts button_down_scripts(baseframe, backgrounddisplay, instancia, scrollbar) button_up_scripts(baseframe, backgrounddisplay, instancia, scrollbar) -- stretch button ----------------------------------------------------------------------------------------------------------------------------------------------- baseframe.button_stretch = CreateFrame("button", "DetailsButtonStretch" .. instancia.meu_id, baseframe) baseframe.button_stretch:SetPoint("bottom", baseframe, "top", 0, 20) baseframe.button_stretch:SetPoint("right", baseframe, "right", -27, 0) baseframe.button_stretch:SetFrameLevel(1) local stretch_texture = baseframe.button_stretch:CreateTexture(nil, "overlay") stretch_texture:SetTexture(DEFAULT_SKIN) stretch_texture:SetTexCoord(unpack(COORDS_STRETCH)) stretch_texture:SetWidth(32) stretch_texture:SetHeight(16) stretch_texture:SetAllPoints(baseframe.button_stretch) baseframe.button_stretch.texture = stretch_texture baseframe.button_stretch:SetWidth(32) baseframe.button_stretch:SetHeight(16) baseframe.button_stretch:Show() gump:Fade(baseframe.button_stretch, "ALPHA", 0) button_stretch_scripts(baseframe, backgrounddisplay, instancia) -- main window config ------------------------------------------------------------------------------------------------------------------------------------------------- baseframe:SetClampedToScreen(true) baseframe:SetSize(_detalhes.new_window_size.width, _detalhes.new_window_size.height) baseframe:SetPoint("center", _UIParent) baseframe:EnableMouseWheel(false) baseframe:EnableMouse(true) baseframe:SetMinResize(150, 7) baseframe:SetMaxResize(_detalhes.max_window_size.width, _detalhes.max_window_size.height) baseframe:SetBackdrop(gump_fundo_backdrop) baseframe:SetBackdropColor(instancia.bg_r, instancia.bg_g, instancia.bg_b, instancia.bg_alpha) -- background window config ------------------------------------------------------------------------------------------------------------------------------------------------- backgroundframe:SetAllPoints(baseframe) backgroundframe:SetScrollChild(backgrounddisplay) backgrounddisplay:EnableMouse(true) backgrounddisplay:SetResizable(true) backgrounddisplay:SetPoint("topleft", baseframe, "topleft") backgrounddisplay:SetPoint("bottomright", baseframe, "bottomright") backgrounddisplay:SetBackdrop(gump_fundo_backdrop) backgrounddisplay:SetBackdropColor(instancia.bg_r, instancia.bg_g, instancia.bg_b, instancia.bg_alpha) -- instance mini widgets ------------------------------------------------------------------------------------------------------------------------------------------------- --> overall data warning instancia.overall_data_warning = backgrounddisplay:CreateFontString(nil, "overlay", "GameFontHighlightSmall") instancia.overall_data_warning:SetHeight(64) instancia.overall_data_warning:SetPoint("center", backgrounddisplay, "center") instancia.overall_data_warning:SetTextColor(.8, .8, .8, .5) instancia.overall_data_warning:Hide() instancia.overall_data_warning:SetText(Loc["STRING_TUTORIAL_OVERALL1"]) --> freeze icon instancia.freeze_icon = backgrounddisplay:CreateTexture(nil, "overlay") instancia.freeze_icon:SetWidth(64) instancia.freeze_icon:SetHeight(64) instancia.freeze_icon:SetPoint("center", backgrounddisplay, "center") instancia.freeze_icon:SetPoint("left", backgrounddisplay, "left") instancia.freeze_icon:Hide() instancia.freeze_texto = backgrounddisplay:CreateFontString(nil, "overlay", "GameFontHighlightSmall") instancia.freeze_texto:SetHeight(64) instancia.freeze_texto:SetPoint("left", instancia.freeze_icon, "right", -18, 0) instancia.freeze_texto:SetTextColor(1, 1, 1) instancia.freeze_texto:Hide() --> details version instancia._version = baseframe:CreateFontString(nil, "overlay", "GameFontHighlightSmall") --instancia._version:SetPoint("left", backgrounddisplay, "left", 20, 0) instancia._version:SetTextColor(1, 1, 1) instancia._version:SetText("this is a alpha version of Details\nyou can help us sending bug reports\nuse the blue button.") if(not _detalhes.initializing) then end instancia._version:Hide() --> wallpaper baseframe.wallpaper = backgrounddisplay:CreateTexture(nil, "overlay") baseframe.wallpaper:Hide() --> alert frame baseframe.alert = CreateAlertFrame(baseframe, instancia) -- resizers & lock button ~lock ------------------------------------------------------------------------------------------------------------------------------------------------------------ --> right resizer baseframe.resize_direita = CreateFrame("button", "Details_Resize_Direita"..ID, baseframe) local resize_direita_texture = baseframe.resize_direita:CreateTexture(nil, "overlay") resize_direita_texture:SetWidth(16) resize_direita_texture:SetHeight(16) resize_direita_texture:SetTexture(DEFAULT_SKIN) resize_direita_texture:SetTexCoord(unpack(COORDS_RESIZE_RIGHT)) resize_direita_texture:SetAllPoints(baseframe.resize_direita) baseframe.resize_direita.texture = resize_direita_texture baseframe.resize_direita:SetWidth(16) baseframe.resize_direita:SetHeight(16) baseframe.resize_direita:SetPoint("bottomright", baseframe, "bottomright", 0, 0) baseframe.resize_direita:EnableMouse(true) baseframe.resize_direita:SetFrameStrata("HIGH") baseframe.resize_direita:SetFrameLevel(baseframe:GetFrameLevel() + 6) baseframe.resize_direita.side = 2 --> lock window button baseframe.lock_button = CreateFrame("button", "Details_Lock_Button"..ID, baseframe) baseframe.lock_button:SetPoint("right", baseframe.resize_direita, "left", -1, 1.5) baseframe.lock_button:SetFrameLevel(baseframe:GetFrameLevel() + 6) baseframe.lock_button:SetWidth(40) baseframe.lock_button:SetHeight(16) baseframe.lock_button.label = baseframe.lock_button:CreateFontString(nil, "overlay", "GameFontNormal") baseframe.lock_button.label:SetPoint("right", baseframe.lock_button, "right") baseframe.lock_button.label:SetTextColor(.6, .6, .6, .7) baseframe.lock_button.label:SetJustifyH("right") 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:SetScript("OnEnter", lockFunctionOnEnter) baseframe.lock_button:SetScript("OnLeave", lockFunctionOnLeave) baseframe.lock_button:SetScript("OnHide", lockFunctionOnHide) baseframe.lock_button:SetFrameStrata("HIGH") baseframe.lock_button:SetFrameLevel(baseframe:GetFrameLevel() + 6) baseframe.lock_button.instancia = instancia --> left resizer baseframe.resize_esquerda = CreateFrame("button", "Details_Resize_Esquerda"..ID, baseframe) local resize_esquerda_texture = baseframe.resize_esquerda:CreateTexture(nil, "overlay") resize_esquerda_texture:SetWidth(16) resize_esquerda_texture:SetHeight(16) resize_esquerda_texture:SetTexture(DEFAULT_SKIN) resize_esquerda_texture:SetTexCoord(unpack(COORDS_RESIZE_LEFT)) resize_esquerda_texture:SetAllPoints(baseframe.resize_esquerda) baseframe.resize_esquerda.texture = resize_esquerda_texture baseframe.resize_esquerda:SetWidth(16) baseframe.resize_esquerda:SetHeight(16) baseframe.resize_esquerda:SetPoint("bottomleft", baseframe, "bottomleft", 0, 0) baseframe.resize_esquerda:EnableMouse(true) baseframe.resize_esquerda:SetFrameStrata("HIGH") baseframe.resize_esquerda:SetFrameLevel(baseframe:GetFrameLevel() + 6) baseframe.resize_esquerda:SetAlpha(0) baseframe.resize_direita:SetAlpha(0) if(instancia.isLocked) then instancia.isLocked = not instancia.isLocked lockFunctionOnClick(baseframe.lock_button, nil, nil, true) end gump:Fade(baseframe.lock_button, -1, 3.0) -- scripts ------------------------------------------------------------------------------------------------------------------------------------------------------------ BFrame_scripts(baseframe, instancia) BGFrame_scripts(switchbutton, baseframe, instancia) BGFrame_scripts(backgrounddisplay, baseframe, instancia) iterate_scroll_scripts(backgrounddisplay, backgroundframe, baseframe, scrollbar, instancia) -- create toolbar ---------------------------------------------------------------------------------------------------------------------------------------------------------- gump:CriaCabecalho(baseframe, instancia) -- create statusbar ---------------------------------------------------------------------------------------------------------------------------------------------------------- gump:CriaRodape(baseframe, instancia) -- left and right side bars ------------------------------------------------------------------------------------------------------------------------------------------------------------ -- ~barra ~bordas ~border --> left 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) baseframe.barra_esquerda:SetHeight (512) baseframe.barra_esquerda:SetPoint("topleft", baseframe, "topleft", -56, 0) baseframe.barra_esquerda:SetPoint("bottomleft", baseframe, "bottomleft", -56, -14) --> right 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) baseframe.barra_direita:SetHeight(512) baseframe.barra_direita:SetPoint("topright", baseframe, "topright", 56, 0) baseframe.barra_direita:SetPoint("bottomright", baseframe, "bottomright", 56, -14) --> bottom 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) baseframe.barra_fundo:SetHeight(64) baseframe.barra_fundo:SetPoint("bottomleft", baseframe, "bottomleft", 0, -56) baseframe.barra_fundo:SetPoint("bottomright", baseframe, "bottomright", 0, -56) -- break snap button ---------------------------------------------------------------------------------------------------------------------------------------------------------- instancia.break_snap_button = CreateFrame("button", "DetailsBreakSnapButton" .. ID, floatingframe) instancia.break_snap_button:SetPoint("bottom", baseframe.resize_direita, "top", -1, 0) instancia.break_snap_button:SetFrameLevel(baseframe:GetFrameLevel() + 5) instancia.break_snap_button:SetSize(13, 13) instancia.break_snap_button:SetAlpha(0) instancia.break_snap_button.instancia = instancia instancia.break_snap_button:SetScript("OnClick", function() if(_detalhes.disable_lock_ungroup_buttons) then return end instancia:Desagrupar(-1) --> hide tutorial if(DetailsWindowGroupPopUp1 and DetailsWindowGroupPopUp1:IsShown()) then DetailsWindowGroupPopUp1:Hide() end end) instancia.break_snap_button:SetScript("OnEnter", unSnapButtonOnEnter) instancia.break_snap_button:SetScript("OnLeave", unSnapButtonOnLeave) instancia.break_snap_button:SetNormalTexture(DEFAULT_SKIN) instancia.break_snap_button:SetDisabledTexture(DEFAULT_SKIN) instancia.break_snap_button:SetHighlightTexture(DEFAULT_SKIN, "ADD") instancia.break_snap_button:SetPushedTexture(DEFAULT_SKIN) instancia.break_snap_button:GetNormalTexture():SetTexCoord(unpack(COORDS_UNLOCK_BUTTON)) instancia.break_snap_button:GetDisabledTexture():SetTexCoord(unpack(COORDS_UNLOCK_BUTTON)) instancia.break_snap_button:GetHighlightTexture():SetTexCoord(unpack(COORDS_UNLOCK_BUTTON)) instancia.break_snap_button:GetPushedTexture():SetTexCoord(unpack(COORDS_UNLOCK_BUTTON)) -- scripts ------------------------------------------------------------------------------------------------------------------------------------------------------------ resize_scripts(baseframe.resize_direita, instancia, scrollbar, ">", baseframe) resize_scripts(baseframe.resize_esquerda, instancia, scrollbar, "<", baseframe) -- side bars highlights ------------------------------------------------------------------------------------------------------------------------------------------------------------ --> top local fcima = CreateFrame("frame", "DetailsTopSideBarHighlight" .. instancia.meu_id, floatingframe) gump:CreateFlashAnimation(fcima) fcima:Hide() instancia.h_cima = fcima:CreateTexture(nil, "overlay") instancia.h_cima:SetTexture([[Interface\AddOns\Details\images\highlight_updown]]) instancia.h_cima:SetTexCoord(0, 1, 0.5, 1) instancia.h_cima:SetPoint("topleft", baseframe.cabecalho.top_bg, "bottomleft", -10, 37) instancia.h_cima:SetPoint("topright", baseframe.cabecalho.ball_r, "bottomright", -97, 37) instancia.h_cima:SetDesaturated(true) fcima.texture = instancia.h_cima instancia.h_cima = fcima --> bottom local fbaixo = CreateFrame("frame", "DetailsBottomSideBarHighlight" .. instancia.meu_id, floatingframe) gump:CreateFlashAnimation(fbaixo) fbaixo:Hide() instancia.h_baixo = fbaixo:CreateTexture(nil, "overlay") instancia.h_baixo:SetTexture([[Interface\AddOns\Details\images\highlight_updown]]) instancia.h_baixo:SetTexCoord(0, 1, 0, 0.5) instancia.h_baixo:SetPoint("topleft", baseframe.rodape.esquerdo, "bottomleft", 16, 17) instancia.h_baixo:SetPoint("topright", baseframe.rodape.direita, "bottomright", -16, 17) instancia.h_baixo:SetDesaturated(true) fbaixo.texture = instancia.h_baixo instancia.h_baixo = fbaixo --> left local fesquerda = CreateFrame("frame", "DetailsLeftSideBarHighlight" .. instancia.meu_id, floatingframe) gump:CreateFlashAnimation(fesquerda) fesquerda:Hide() instancia.h_esquerda = fesquerda:CreateTexture(nil, "overlay") instancia.h_esquerda:SetTexture([[Interface\AddOns\Details\images\highlight_leftright]]) instancia.h_esquerda:SetTexCoord(0.5, 1, 0, 1) instancia.h_esquerda:SetPoint("topleft", baseframe.barra_esquerda, "topleft", 40, 0) instancia.h_esquerda:SetPoint("bottomleft", baseframe.barra_esquerda, "bottomleft", 40, 0) instancia.h_esquerda:SetDesaturated(true) fesquerda.texture = instancia.h_esquerda instancia.h_esquerda = fesquerda --> right local fdireita = CreateFrame("frame", "DetailsRightSideBarHighlight" .. instancia.meu_id, floatingframe) gump:CreateFlashAnimation(fdireita) fdireita:Hide() instancia.h_direita = fdireita:CreateTexture(nil, "overlay") instancia.h_direita:SetTexture([[Interface\AddOns\Details\images\highlight_leftright]]) instancia.h_direita:SetTexCoord(0, 0.5, 1, 0) instancia.h_direita:SetPoint("topleft", baseframe.barra_direita, "topleft", 8, 18) instancia.h_direita:SetPoint("bottomleft", baseframe.barra_direita, "bottomleft", 8, 0) instancia.h_direita:SetDesaturated(true) fdireita.texture = instancia.h_direita instancia.h_direita = fdireita --> done if(criando) then local CProps = { ["altura"] = 100, ["largura"] = 200, ["barras"] = 50, ["barrasvisiveis"] = 0, ["x"] = 0, ["y"] = 0, ["w"] = 0, ["h"] = 0 } instancia.locs = CProps end return baseframe, backgroundframe, backgrounddisplay, scrollbar end function _detalhes:IsShowingOverallDataWarning() return self.overall_data_warning:IsShown() end function _detalhes:ShowOverallDataWarning(state) if(state) then self.overall_data_warning:Show() self.overall_data_warning:SetWidth(self:GetSize() - 20) else self.overall_data_warning:Hide() end end function _detalhes:SetBarFollowPlayer(follow) if(follow == nil) then follow = self.following.enabled end self.following.enabled = follow self:RefreshBars() self:InstanceReset() self:ReajustaGump() end function _detalhes:SetBarOrientationDirection(orientation) if(orientation == nil) then orientation = self.bars_inverted end self.bars_inverted = orientation self:InstanceRefreshRows() self:RefreshBars() self:InstanceReset() self:ReajustaGump() end function _detalhes:SetBarGrowDirection(direction) if(not direction) then direction = self.bars_grow_direction end self.bars_grow_direction = direction local x = self.row_info.space.left local bars = self.barras or self.Bars --> .Bars for third-party plugins local baseframe = self.baseframe or self.Frame --> .Frame for plugins local height = self.row_height if(direction == 1) then --> top to bottom for index, row in _ipairs(bars) do local y = height *(index - 1) y = y * -1 row:ClearAllPoints() if(self.toolbar_side == 1) then --> if titlebar is attached to the top side, don't add any midifiers row:SetPoint("topleft", baseframe, "topleft", x, y) else --> if the titlebar is on the bottom side, remove the gap between the baseframe and the titlebar row:SetPoint("topleft", baseframe, "topleft", x, y - 1) end end elseif(direction == 2) then --> bottom to top for index, row in _ipairs(bars) do local y = height *(index - 1) row:ClearAllPoints() if(self.toolbar_side == 1) then --> if the titlebar is attached to the top side, we want to align bars a little above row:SetPoint("bottomleft", baseframe, "bottomleft", x, y + 2) else --> the titlebar is on the bottom side, align bars on the bottom row:SetPoint("bottomleft", baseframe, "bottomleft", x, y + 0) end end end --> update all row width if(self.bar_mod and self.bar_mod ~= 0) then for index = 1, #bars do bars[index]:SetWidth(baseframe:GetWidth() + self.bar_mod) end else for index = 1, #bars do bars[index]:SetWidth(baseframe:GetWidth() + self.row_info.space.right) --print(bars[index]:GetWidth(), baseframe:GetWidth()) end end end --> Alias function gump:NewRow(instancia, index) return gump:CriaNovaBarra(instancia, index) end _detalhes.barras_criadas = 0 local function statusbar_on_size_changed(self, width) self:GetStatusBarTexture():SetPoint("TOPRIGHT", -(width * ((100 - self.value) / 100)), 0) end --> search key: ~row ~barra function gump:CriaNovaBarra(instancia, index) --> instancia = window object, index = row number local baseframe = instancia.baseframe local rowframe = instancia.rowframe --> create the bar with rowframe as parent local new_row = CreateFrame("button", "DetailsBarra_"..instancia.meu_id.."_"..index, rowframe) new_row.row_id = index new_row.instance_id = instancia.meu_id new_row.animacao_fim = 0 new_row.animacao_fim2 = 0 --> set point, almost irrelevant here, it recalc this on SetBarGrowDirection() local y = instancia.row_height *(index-1) if(instancia.bars_grow_direction == 1) then y = y*-1 new_row:SetPoint("topleft", baseframe, "topleft", instancia.row_info.space.left, y) elseif(instancia.bars_grow_direction == 2) then new_row:SetPoint("bottomleft", baseframe, "bottomleft", instancia.row_info.space.left, y + 2) end --> row height new_row:SetHeight(instancia.row_info.height) new_row:SetWidth(baseframe:GetWidth()+instancia.row_info.space.right) new_row:SetFrameLevel(baseframe:GetFrameLevel() + 4) new_row.last_value = 0 new_row.w_mod = 0 new_row:EnableMouse(true) new_row:RegisterForClicks("LeftButtonDown", "RightButtonDown") --> statusbar new_row.statusbar = CreateFrame("StatusBar", "DetailsBarra_Statusbar_"..instancia.meu_id.."_"..index, new_row) new_row.statusbar:SetScript("OnSizeChanged", statusbar_on_size_changed) new_row.statusbar.value = 0 --> right to left texture new_row.statusbar.right_to_left_texture = new_row.statusbar:CreateTexture(nil, "overlay") new_row.statusbar.right_to_left_texture:SetPoint("topright", new_row.statusbar, "topright") new_row.statusbar.right_to_left_texture:SetPoint("bottomright", new_row.statusbar, "bottomright") new_row.statusbar.right_to_left_texture:SetWidth(0.000000001) new_row.statusbar.right_to_left_texture:Hide() new_row.right_to_left_texture = new_row.statusbar.right_to_left_texture --> frame for hold the backdrop border new_row.border = CreateFrame("Frame", "DetailsBarra_Border_" .. instancia.meu_id .. "_" .. index, new_row.statusbar) new_row.border:SetFrameLevel(new_row.statusbar:GetFrameLevel()+2) new_row.border:SetAllPoints(new_row) -- search key: ~model --low 3d bar new_row.modelbox_low = CreateFrame("playermodel", "DetailsBarra_ModelBarLow_" .. instancia.meu_id .. "_" .. index, new_row) --rowframe new_row.modelbox_low:SetFrameLevel(new_row.statusbar:GetFrameLevel()-1) new_row.modelbox_low:SetPoint("topleft", new_row, "topleft") new_row.modelbox_low:SetPoint("bottomright", new_row, "bottomright") --high 3d bar new_row.modelbox_high = CreateFrame("playermodel", "DetailsBarra_ModelBarHigh_" .. instancia.meu_id .. "_" .. index, new_row) --rowframe new_row.modelbox_high:SetFrameLevel(new_row.statusbar:GetFrameLevel()+1) new_row.modelbox_high:SetPoint("topleft", new_row, "topleft") new_row.modelbox_high:SetPoint("bottomright", new_row, "bottomright") --> create textures and icons new_row.textura = new_row.statusbar:CreateTexture(nil, "artwork") new_row.textura:SetHorizTile(false) new_row.textura:SetVertTile(false) --> row background texture new_row.background = new_row:CreateTexture(nil, "background") new_row.background:SetTexture() new_row.background:SetAllPoints(new_row) new_row.statusbar:SetStatusBarColor(0, 0, 0, 0) new_row.statusbar:SetStatusBarTexture(new_row.textura) new_row.statusbar:SetMinMaxValues(0, 100) new_row.statusbar:SetValue(0) --> class icon local icone_classe = new_row.border:CreateTexture(nil, "overlay") icone_classe:SetHeight(instancia.row_info.height) icone_classe:SetWidth(instancia.row_info.height) icone_classe:SetTexture(instancia.row_info.icon_file) icone_classe:SetTexCoord(.75, 1, .75, 1) new_row.icone_classe = icone_classe local icon_frame = CreateFrame("Button", "DetailsBarra_IconFrame_" .. instancia.meu_id .. "_" .. index, new_row.statusbar) icon_frame:SetPoint("topleft", icone_classe, "topleft") icon_frame:SetPoint("bottomright", icone_classe, "bottomright") icon_frame:SetFrameLevel(new_row.statusbar:GetFrameLevel()+1) icon_frame.instance_id = instancia.meu_id icon_frame.row = new_row new_row.icon_frame = icon_frame icone_classe:SetPoint("left", new_row, "left") new_row.statusbar:SetPoint("topleft", icone_classe, "topright") new_row.statusbar:SetPoint("bottomright", new_row, "bottomright") --> left text new_row.texto_esquerdo = new_row.border:CreateFontString(nil, "overlay", "GameFontHighlight") new_row.texto_esquerdo:SetPoint("left", new_row.icone_classe, "right", 3, 0) new_row.texto_esquerdo:SetJustifyH("left") new_row.texto_esquerdo:SetNonSpaceWrap(true) --> right text new_row.texto_direita = new_row.border:CreateFontString(nil, "overlay", "GameFontHighlight") new_row.texto_direita:SetPoint("right", new_row.statusbar, "right") new_row.texto_direita:SetJustifyH("right") --> set the onclick, on enter scripts barra_scripts(new_row, instancia, index) --> hide gump:Fade(new_row, 1) --> adds the window container instancia.barras[index] = new_row --> set the left text new_row.texto_esquerdo:SetText(Loc["STRING_NEWROW"]) --> refresh rows instancia:InstanceRefreshRows() _detalhes:SendEvent("DETAILS_INSTANCE_NEWROW", nil, instancia, new_row) return new_row end function _detalhes:SetBarTextSettings(size, font, fixedcolor, leftcolorbyclass, rightcolorbyclass, leftoutline, rightoutline, customrighttextenabled, customrighttext, percentage_type, showposition, customlefttextenabled, customlefttext, smalloutline_left, smalloutlinecolor_left, smalloutline_right, smalloutlinecolor_right, translittext) --> size if(size) then self.row_info.font_size = size end --> font if(font) then self.row_info.font_face = font self.row_info.font_face_file = SharedMedia:Fetch("font", font) end --> fixed color if(fixedcolor) then local red, green, blue, alpha = gump:ParseColors(fixedcolor) local c = self.row_info.fixed_text_color c[1], c[2], c[3], c[4] = red, green, blue, alpha end --> left color by class if(type(leftcolorbyclass) == "boolean") then self.row_info.textL_class_colors = leftcolorbyclass end --> right color by class if(type(rightcolorbyclass) == "boolean") then self.row_info.textR_class_colors = rightcolorbyclass end --> left text outline if(type(leftoutline) == "boolean") then self.row_info.textL_outline = leftoutline end --> right text outline if(type(rightoutline) == "boolean") then self.row_info.textR_outline = rightoutline end -- left text small outline and small outline color if(type(smalloutline_left) == "boolean") then self.row_info.textL_outline_small = smalloutline_left end if(smalloutlinecolor_left) then local red, green, blue, alpha = gump:ParseColors(smalloutlinecolor_left) local c = self.row_info.textL_outline_small_color c[1], c[2], c[3], c[4] = red, green, blue, alpha end -- right text small outline and small outline color if(type(smalloutline_right) == "boolean") then self.row_info.textR_outline_small = smalloutline_right end if(smalloutlinecolor_right) then local red, green, blue, alpha = gump:ParseColors(smalloutlinecolor_right) local c = self.row_info.textR_outline_small_color c[1], c[2], c[3], c[4] = red, green, blue, alpha end --> custom left text if(type(customlefttextenabled) == "boolean") then self.row_info.textL_enable_custom_text = customlefttextenabled end if(customlefttext) then self.row_info.textL_custom_text = customlefttext end --> custom right text if(type(customrighttextenabled) == "boolean") then self.row_info.textR_enable_custom_text = customrighttextenabled end if(customrighttext) then self.row_info.textR_custom_text = customrighttext end --> percent type if(percentage_type) then self.row_info.percent_type = percentage_type end --> show position number if(type(showposition) == "boolean") then self.row_info.textL_show_number = showposition end --> translit text by Vardex(https://github.com/Vardex May 22, 2019) if(type(translittext) == "boolean") then self.row_info.textL_translit_text = translittext end self:InstanceReset() self:InstanceRefreshRows() end function _detalhes:SetBarBackdropSettings(enabled, size, color, texture) if(type(enabled) ~= "boolean") then enabled = self.row_info.backdrop.enabled end if(not size) then size = self.row_info.backdrop.size end if(not color) then color = self.row_info.backdrop.color end if(not texture) then texture = self.row_info.backdrop.texture end self.row_info.backdrop.enabled = enabled self.row_info.backdrop.size = size self.row_info.backdrop.color = color self.row_info.backdrop.texture = texture self:InstanceReset() self:InstanceRefreshRows() self:ReajustaGump() end function _detalhes:SetBarModel(upper_enabled, upper_model, upper_alpha, lower_enabled, lower_model, lower_alpha) --> is enabled if(type(upper_enabled) == "boolean") then self.row_info.models.upper_enabled = upper_enabled end if(type(lower_enabled) == "boolean") then self.row_info.models.lower_enabled = lower_enabled end --> models: if(upper_model) then self.row_info.models.upper_model = upper_model end if(lower_model) then self.row_info.models.lower_model = lower_model end --> alpha values: if(upper_alpha) then self.row_info.models.upper_alpha = upper_alpha end if(lower_alpha) then self.row_info.models.lower_alpha = lower_alpha end self:InstanceReset() self:InstanceRefreshRows() self:ReajustaGump() _detalhes:AtualizaGumpPrincipal(-1, true) end -- ~spec ~icons function _detalhes:SetBarSpecIconSettings(enabled, iconfile, fulltrack) if(type(enabled) ~= "boolean") then enabled = self.row_info.use_spec_icons end if(not iconfile) then iconfile = self.row_info.spec_file end self.row_info.use_spec_icons = enabled self.row_info.spec_file = iconfile if(enabled) then if(not _detalhes.track_specs) then _detalhes.track_specs = true _detalhes:TrackSpecsNow(fulltrack) end else local have_enabled for _, instance in _ipairs(_detalhes.tabela_instancias) do if(instance:IsEnabled() and instance.row_info.use_spec_icons) then have_enabled = true break end end if(not have_enabled) then _detalhes.track_specs = false _detalhes:ResetSpecCache(true) --> for�ar end end self:InstanceReset() self:InstanceRefreshRows() self:ReajustaGump() end function _detalhes:SetBarSettings(height, texture, colorclass, fixedcolor, backgroundtexture, backgroundcolorclass, backgroundfixedcolor, alpha, iconfile, barstart, spacement, texture_custom) --> 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 if(alpha) then self.row_info.alpha = alpha end --> height if(height) then self.row_info.height = height self.row_height = height + self.row_info.space.between end --> spacement if(spacement) then self.row_info.space.between = spacement self.row_height = self.row_info.height + spacement end --> texture if(texture) then self.row_info.texture = texture self.row_info.texture_file = SharedMedia:Fetch("statusbar", texture) end if(texture_custom) then self.row_info.texture_custom = texture_custom self.row_info.texture_custom_file = "Interface\\" .. self.row_info.texture_custom end --> color by class if(type(colorclass) == "boolean") then self.row_info.texture_class_colors = colorclass end --> fixed color if(fixedcolor) then local red, green, blue = gump:ParseColors(fixedcolor) local c = self.row_info.fixed_texture_color c[1], c[2], c[3], c[4] = red, green, blue, self.row_info.alpha end --> background texture if(backgroundtexture) then self.row_info.texture_background = backgroundtexture self.row_info.texture_background_file = SharedMedia:Fetch("statusbar", backgroundtexture) end --> background color by class if(type(backgroundcolorclass) == "boolean") then self.row_info.texture_background_class_color = backgroundcolorclass end --> background fixed color if(backgroundfixedcolor) then local red, green, blue, alpha = gump:ParseColors(backgroundfixedcolor) local c = self.row_info.fixed_texture_background_color c[1], c[2], c[3], c[4] = red, green, blue, alpha end self:InstanceReset() self:InstanceRefreshRows() self:ReajustaGump() end local brackets = { ["("] = {"(", ")"}, ["{"] = {" {", "}"}, ["["] = {"[", "]"}, ["<"] = {" <", ">"}, ["NONE"] = {" ", ""}, } local separators = { [","] = ", ", ["."] = ". ", [";"] = "; ", ["-"] = " - ", ["|"] = " | ", ["/"] = " / ", ["\\"] = " \\ ", ["~"] = " ~ ", ["NONE"] = "", } function _detalhes:GetBarBracket() return brackets[self.row_info.textR_bracket] end function _detalhes:GetBarSeparator() return separators[self.row_info.textR_separator] end function _detalhes:SetBarRightTextSettings(total, persecond, percent, bracket, separator) if(type(total) == "boolean") then self.row_info.textR_show_data[1] = total end if(type(persecond) == "boolean") then self.row_info.textR_show_data[2] = persecond end if(type(percent) == "boolean") then self.row_info.textR_show_data[3] = percent end if(bracket) then self.row_info.textR_bracket = bracket end if(separator) then self.row_info.textR_separator = separator end self:InstanceReset() end --/script _detalhes:InstanceRefreshRows(_detalhes.tabela_instancias[1]) --> on update function local fast_ps_func = function(self) local instance = self.instance if(not instance.showing) then return end local combat_time = instance.showing:GetCombatTime() local ps_type = _detalhes.ps_abbreviation if(instance.rows_fit_in_window) then for i = 1, instance.rows_fit_in_window do --instance:GetNumRows() local row = instance.barras[i] --instance:GetRow(i) if(row and row:IsShown()) then local actor = row.minha_tabela if(actor) then local dps_text = row.ps_text if(dps_text) then local new_dps = _math_floor(actor.total / combat_time) local formated_dps = tok_functions[ps_type](_, new_dps) --row.texto_direita:SetText(row.texto_direita:GetText():gsub(dps_text, formated_dps)) row.texto_direita:SetText(( row.texto_direita:GetText() or "" ):gsub(dps_text, formated_dps)) row.ps_text = formated_dps end end end end end end -- ~dps ~hps --> check if can start or need to stop function _detalhes:CheckPsUpdate() local is_enabled = self.row_info.fast_ps_update if(is_enabled) then --> check if the frame is created if(not self.ps_update_frame) then self.ps_update_frame = CreateFrame("frame", "DetailsInstance" .. self.meu_id .. "PsUpdate", self.baseframe) self.ps_update_frame.instance = self end --> if isn't in combat, just stop if(not _detalhes.in_combat) then if(self.ps_update_frame.is_running) then self.ps_update_frame.is_running = nil self.ps_update_frame:Hide() self.ps_update_frame:SetScript("OnUpdate", nil) end return end --> check if needs to start local attribute, sub_attribute = self:GetDisplay() --> check if the instance is showing damage done/dps or healing done/hps if((attribute == 1 and(sub_attribute == 1 or sub_attribute == 2)) or(attribute == 2 and(sub_attribute == 1 or sub_attribute == 2))) then if(not self.ps_update_frame.is_running) then self.ps_update_frame.is_running = true self.ps_update_frame:Show() self.ps_update_frame:SetScript("OnUpdate", fast_ps_func) end else --> check if needs to stop if(self.ps_update_frame.is_running) then self.ps_update_frame.is_running = nil self.ps_update_frame:Hide() self.ps_update_frame:SetScript("OnUpdate", nil) end end else if(self.ps_update_frame and self.ps_update_frame.is_running) then self.ps_update_frame.is_running = nil self.ps_update_frame:Hide() self.ps_update_frame:SetScript("OnUpdate", nil) end end end -- /run _detalhes:GetInstance(1):FastPSUpdate(true) -- /dump(_detalhes:GetInstance(1).fast_ps_update) function _detalhes:FastPSUpdate(enabled) if(type(enabled) ~= "boolean") then enabled = self.row_info.fast_ps_update end self.row_info.fast_ps_update = enabled self:CheckPsUpdate() end -- search key: ~row ~bar ~updatebar function _detalhes:InstanceRefreshRows(instancia) if(instancia) then self = instancia end if(not self.barras or not self.barras[1]) then return end --> mirror local is_mirror = self.bars_inverted --> texture local texture_file = SharedMedia:Fetch("statusbar", self.row_info.texture) local texture_file2 = SharedMedia:Fetch("statusbar", self.row_info.texture_background) --> update texture files self.row_info.texture_file = texture_file self.row_info.texture_background_file = texture_file2 if(type(self.row_info.texture_custom) == "string" and self.row_info.texture_custom ~= "") then texture_file = "Interface\\" .. self.row_info.texture_custom --> update texture file self.row_info.texture_custom_file = texture_file end --> outline values local left_text_outline = self.row_info.textL_outline local right_text_outline = self.row_info.textR_outline local textL_outline_small = self.row_info.textL_outline_small local textL_outline_small_color = self.row_info.textL_outline_small_color local textR_outline_small = self.row_info.textR_outline_small local textR_outline_small_color = self.row_info.textR_outline_small_color --> texture color values local texture_class_color = self.row_info.texture_class_colors local texture_r, texture_g, texture_b if(not texture_class_color) then texture_r, texture_g, texture_b = _unpack(self.row_info.fixed_texture_color) end --text color local left_text_class_color = self.row_info.textL_class_colors local right_text_class_color = self.row_info.textR_class_colors local text_r, text_g, text_b if(not left_text_class_color or not right_text_class_color) then text_r, text_g, text_b = _unpack(self.row_info.fixed_text_color) end local height = self.row_info.height --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 if(self.row_info.use_spec_icons) then icon_texture = self.row_info.spec_file end local icon_force_grayscale = self.row_info.icon_grayscale local icon_offset_x, icon_offset_y = unpack(self.row_info.icon_offset) --custom right text local custom_right_text_enabled = self.row_info.textR_enable_custom_text local custom_right_text = self.row_info.textR_custom_text --backdrop local backdrop = self.row_info.backdrop.enabled local backdrop_color if(backdrop) then backdrop = {edgeFile = SharedMedia:Fetch("border", self.row_info.backdrop.texture), edgeSize = self.row_info.backdrop.size} backdrop_color = self.row_info.backdrop.color end --font face self.row_info.font_face_file = SharedMedia:Fetch("font", self.row_info.font_face) --models local upper_model_enabled = self.row_info.models.upper_enabled local lower_model_enabled = self.row_info.models.lower_enabled local upper_model = self.row_info.models.upper_model local lower_model = self.row_info.models.lower_model local upper_model_alpha = self.row_info.models.upper_alpha local lower_model_alpha = self.row_info.models.lower_alpha --using_upper_3dmodels using_lower_3dmodels -- do it for _, row in _ipairs(self.barras) do --> positioning and size row:SetHeight(height) row.icone_classe:SetHeight(height) row.icone_classe:SetWidth(height) if(icon_force_grayscale) then row.icone_classe:SetDesaturated(true) else row.icone_classe:SetDesaturated(false) end --> icon and texture anchors if(not is_mirror) then row.texto_esquerdo:ClearAllPoints() row.texto_direita:ClearAllPoints() row.texto_direita:SetJustifyH("right") row.texto_esquerdo:SetJustifyH("left") row.texto_direita:SetPoint("right", row.statusbar, "right") 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 row.icone_classe:ClearAllPoints() row.icone_classe:SetPoint("left", row, "left", icon_offset_x, icon_offset_y) row.icone_classe:Show() 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) end else row.texto_esquerdo:ClearAllPoints() row.texto_direita:ClearAllPoints() row.texto_direita:SetJustifyH("left") row.texto_esquerdo:SetJustifyH("right") row.texto_direita:SetPoint("left", row.statusbar, "left", 1, 0) if(no_icon) then row.statusbar:SetPoint("topleft", row, "topleft") row.statusbar:SetPoint("bottomright", row, "bottomright") row.texto_esquerdo:SetPoint("right", row.statusbar, "right", -2, 0) row.icone_classe:Hide() row.right_to_left_texture:SetPoint("topright", row.statusbar, "topright") row.right_to_left_texture:SetPoint("bottomright", row.statusbar, "bottomright") else row.icone_classe:ClearAllPoints() row.icone_classe:SetPoint("right", row, "right", icon_offset_x, icon_offset_y) row.icone_classe:Show() if(start_after_icon) then row.statusbar:SetPoint("bottomright", row.icone_classe, "bottomleft") else row.statusbar:SetPoint("bottomright", row, "bottomright") end row.statusbar:SetPoint("topleft", row, "topleft") row.texto_esquerdo:SetPoint("right", row.icone_classe, "left", -2, 0) end end if(not self.row_info.texture_background_class_color) then local c = self.row_info.fixed_texture_background_color row.background:SetVertexColor(c[1], c[2], c[3], c[4]) else local c = self.row_info.fixed_texture_background_color local r, g, b = row.background:GetVertexColor() row.background:SetVertexColor(r, g, b, c[4]) end --> outline if(left_text_outline) then _detalhes:SetFontOutline(row.texto_esquerdo, left_text_outline) else _detalhes:SetFontOutline(row.texto_esquerdo, nil) end if(right_text_outline) then self:SetFontOutline(row.texto_direita, right_text_outline) else self:SetFontOutline(row.texto_direita, nil) end --> small outline if(textL_outline_small) then local c = textL_outline_small_color row.texto_esquerdo:SetShadowColor(c[1], c[2], c[3], c[4]) --row.texto_esquerdo:SetShadowOffset(3, -2) else row.texto_esquerdo:SetShadowColor(0, 0, 0, 0) end if(textR_outline_small) then local c = textR_outline_small_color row.texto_direita:SetShadowColor(c[1], c[2], c[3], c[4]) else row.texto_direita:SetShadowColor(0, 0, 0, 0) end --> texture: row.textura:SetTexture(texture_file) row.right_to_left_texture:SetTexture(texture_file) row.background:SetTexture(texture_file2) if(is_mirror) then row.right_to_left_texture:Show() else row.right_to_left_texture:Hide() end --> texture class color: if true color changes on the fly through class refresh if(not texture_class_color) then row.textura:SetVertexColor(texture_r, texture_g, texture_b, alpha) row.right_to_left_texture:SetVertexColor(texture_r, texture_g, texture_b, alpha) else --automatically color the bar by the actor class --forcing alpha 1 instead of use the alpha from the fixed color local r, g, b = row.textura:GetVertexColor() row.textura:SetVertexColor(r, g, b, 1) --alpha end --> text class color: if true color changes on the fly through class refresh if(not left_text_class_color) then row.texto_esquerdo:SetTextColor(text_r, text_g, text_b) end if(not right_text_class_color) then row.texto_direita:SetTextColor(text_r, text_g, text_b) end --> text size _detalhes:SetFontSize(row.texto_esquerdo, self.row_info.font_size or height * 0.75) _detalhes:SetFontSize(row.texto_direita, self.row_info.font_size or height * 0.75) --> text font _detalhes:SetFontFace(row.texto_esquerdo, self.row_info.font_face_file or "GameFontHighlight") _detalhes:SetFontFace(row.texto_direita, self.row_info.font_face_file or "GameFontHighlight") --backdrop if(backdrop) then row.border:SetBackdrop(backdrop) row.border:SetBackdropBorderColor(_unpack(backdrop_color)) else row.border:SetBackdrop(nil) end --> models if(upper_model_enabled) then row.using_upper_3dmodels = true row.modelbox_high:Show() row.modelbox_high:SetModel(upper_model) row.modelbox_high:SetAlpha(upper_model_alpha) else row.using_upper_3dmodels = false row.modelbox_high:Hide() end if(lower_model_enabled) then row.using_lower_3dmodels = true row.modelbox_low:Show() row.modelbox_low:SetModel(lower_model) row.modelbox_low:SetAlpha(lower_model_alpha) else row.using_lower_3dmodels = false row.modelbox_low:Hide() end end self:SetBarGrowDirection() self:UpdateClickThrough() end -- search key: ~wallpaper function _detalhes:InstanceWallpaper(texture, anchor, alpha, texcoord, width, height, overlay) local wallpaper = self.wallpaper if(type(texture) == "boolean" and texture) then texture, anchor, alpha, texcoord, width, height, overlay = wallpaper.texture, wallpaper.anchor, wallpaper.alpha, wallpaper.texcoord, wallpaper.width, wallpaper.height, wallpaper.overlay elseif(type(texture) == "boolean" and not texture) then self.wallpaper.enabled = false return gump:Fade(self.baseframe.wallpaper, "in") elseif(type(texture) == "table") then anchor = texture.anchor or wallpaper.anchor alpha = texture.alpha or wallpaper.alpha if(texture.texcoord) then texcoord = {unpack(texture.texcoord)} else texcoord = wallpaper.texcoord end width = texture.width or wallpaper.width height = texture.height or wallpaper.height if(texture.overlay) then overlay = {unpack(texture.overlay)} else overlay = wallpaper.overlay end if(type(texture.enabled) == "boolean") then if(not texture.enabled) then wallpaper.enabled = false wallpaper.texture = texture.texture or wallpaper.texture wallpaper.anchor = anchor wallpaper.alpha = alpha wallpaper.texcoord = texcoord wallpaper.width = width wallpaper.height = height wallpaper.overlay = overlay return self:InstanceWallpaper(false) end end texture = texture.texture or wallpaper.texture else texture = texture or wallpaper.texture anchor = anchor or wallpaper.anchor alpha = alpha or wallpaper.alpha texcoord = texcoord or wallpaper.texcoord width = width or wallpaper.width height = height or wallpaper.height overlay = overlay or wallpaper.overlay end if(not wallpaper.texture and not texture) then texture = "Interface\\AddOns\\Details\\images\\background" texcoord = {0, 1, 0, 0.7} alpha = 0.5 width, height = self:GetSize() anchor = "all" end local t = self.baseframe.wallpaper t:ClearAllPoints() if(anchor == "all") then t:SetPoint("topleft", self.baseframe, "topleft") t:SetPoint("bottomright", self.baseframe, "bottomright") elseif(anchor == "center") then t:SetPoint("center", self.baseframe, "center", 0, 4) elseif(anchor == "stretchLR") then t:SetPoint("center", self.baseframe, "center") t:SetPoint("left", self.baseframe, "left") t:SetPoint("right", self.baseframe, "right") elseif(anchor == "stretchTB") then t:SetPoint("center", self.baseframe, "center") t:SetPoint("top", self.baseframe, "top") t:SetPoint("bottom", self.baseframe, "bottom") else t:SetPoint(anchor, self.baseframe, anchor) end t:SetTexture(texture) t:SetTexCoord(unpack(texcoord)) t:SetWidth(width) t:SetHeight(height) t:SetVertexColor(unpack(overlay)) wallpaper.enabled = true wallpaper.texture = texture wallpaper.anchor = anchor wallpaper.alpha = alpha wallpaper.texcoord = texcoord wallpaper.width = width wallpaper.height = height wallpaper.overlay = overlay 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) local ignorebars = self.menu_alpha.ignorebars if(self.is_interacting) then --> entrou self.baseframe:SetAlpha(alpha) self:InstanceAlpha(alpha) self:SetIconAlpha(alpha, nil, true) if(ignorebars) then self.rowframe:SetAlpha(1) else self.rowframe:SetAlpha(alpha) end else --> saiu if(self.combat_changes_alpha) then --> combat alpha self:InstanceAlpha(self.combat_changes_alpha) self:SetIconAlpha(self.combat_changes_alpha, nil, true) self.rowframe:SetAlpha(self.combat_changes_alpha) --alpha do combate � absoluta self.baseframe:SetAlpha(self.combat_changes_alpha) --alpha do combate � absoluta else self:InstanceAlpha(alpha) self:SetIconAlpha(alpha, nil, true) if(ignorebars) then self.rowframe:SetAlpha(1) else self.rowframe:SetAlpha(alpha) end self.baseframe:SetAlpha(alpha) end end if(_detalhes.debug) then _detalhes:Msg("(debug) setting window alpha for SetWindowAlphaForInteract() -> ", alpha) end end -- ~autohide �utohide function _detalhes:SetWindowAlphaForCombat(entering_in_combat, true_hide) local amount, rowsamount, menuamount --get the values if(entering_in_combat) then amount = self.hide_in_combat_alpha / 100 self.combat_changes_alpha = amount rowsamount = amount menuamount = amount if(_detalhes.pet_battle) then amount = 0 rowsamount = 0 menuamount = 0 end else if(self.menu_alpha.enabled) then --auto transparency if(self.is_interacting) then amount = self.menu_alpha.onenter menuamount = self.menu_alpha.onenter if(self.menu_alpha.ignorebars) then rowsamount = 1 else rowsamount = amount end else amount = self.menu_alpha.onleave menuamount = self.menu_alpha.onleave if(self.menu_alpha.ignorebars) then rowsamount = 1 else rowsamount = amount end end else amount = self.color[4] menuamount = 1 rowsamount = 1 end self.combat_changes_alpha = nil end --print("baseframe:",amount,"rowframe:",rowsamount,"menu:",menuamount) --apply if(true_hide and amount == 0) then gump:Fade(self.baseframe, _unpack(_detalhes.windows_fade_in)) gump:Fade(self.rowframe, _unpack(_detalhes.windows_fade_in)) self:SetIconAlpha(nil, true) if(_detalhes.debug) then _detalhes:Msg("(debug) hiding window SetWindowAlphaForCombat()", amount, rowsamount, menuamount) end else self.baseframe:Show() self.baseframe:SetAlpha(1) self:InstanceAlpha(amount) gump:Fade(self.rowframe, "ALPHAANIM", rowsamount) gump:Fade(self.baseframe, "ALPHAANIM", rowsamount) self:SetIconAlpha(menuamount) if(_detalhes.debug) then _detalhes:Msg("(debug) showing window SetWindowAlphaForCombat()", amount, rowsamount, menuamount) end end 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, baseToolbar.fechar, baseToolbar.reset, baseToolbar.fechar} 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 else local icons = {baseToolbar.modo_selecao, baseToolbar.segmento, baseToolbar.atributo, baseToolbar.report, baseToolbar.fechar, baseToolbar.reset, baseToolbar.fechar} 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:InstanceAlpha(alpha) self.baseframe.cabecalho.ball_r:SetAlpha(alpha) self.baseframe.cabecalho.ball:SetAlpha(alpha) local skin = _detalhes.skins[self.skin] if(not skin.icon_ignore_alpha) then self.baseframe.cabecalho.atributo_icon:SetAlpha(alpha) end self.baseframe.cabecalho.emenda:SetAlpha(alpha) self.baseframe.cabecalho.top_bg:SetAlpha(alpha) self.baseframe.barra_esquerda:SetAlpha(alpha) self.baseframe.barra_direita:SetAlpha(alpha) self.baseframe.barra_fundo:SetAlpha(alpha) self.baseframe.UPFrame:SetAlpha(alpha) end 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 red, green, blue, alpha = gump:ParseColors(red) 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 -- print(self.skin, self.meu_id) local skin = _detalhes.skins[self.skin] if(not skin) then --the skin isn't available any more Details:Msg("Skin " ..(self.skin or "?") .. " not found, changing to 'Minimalistic'.") Details:Msg("Recommended to change the skin in the option panel > Skin Selection.") skin = _detalhes.skins["Minimalistic"] self.skin = "Minimalistic" end --[[ 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) self.baseframe.cabecalho.ball:SetAlpha(alpha) if(not skin.icon_ignore_alpha) then self.baseframe.cabecalho.atributo_icon:SetAlpha(alpha) end self.baseframe.cabecalho.emenda:SetVertexColor(red, green, blue) self.baseframe.cabecalho.emenda:SetAlpha(alpha) self.baseframe.cabecalho.top_bg:SetVertexColor(red, green, blue) self.baseframe.cabecalho.top_bg:SetAlpha(alpha) self.baseframe.barra_esquerda:SetVertexColor(red, green, blue) self.baseframe.barra_esquerda:SetAlpha(alpha) self.baseframe.barra_direita:SetVertexColor(red, green, blue) self.baseframe.barra_direita:SetAlpha(alpha) self.baseframe.barra_fundo:SetVertexColor(red, green, blue) self.baseframe.barra_fundo:SetAlpha(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) instance.baseframe.statusbar:Hide() end function _detalhes:StatusBarAlert(text, icon, color, time) local statusbar = self.baseframe.statusbar if(text) then if(type(text) == "table") then if(text.color) then statusbar.text:SetTextColor(gump:ParseColors(text.color)) else statusbar.text:SetTextColor(1, 1, 1, 1) end statusbar.text:SetText(text.text or "") if(text.size) then _detalhes:SetFontSize(statusbar.text, text.size) else _detalhes:SetFontSize(statusbar.text, 9) end else statusbar.text:SetText(text) statusbar.text:SetTextColor(1, 1, 1, 1) _detalhes:SetFontSize(statusbar.text, 9) end else statusbar.text:SetText("") end if(icon) then if(type(icon) == "table") then local texture, w, h, l, r, t, b = unpack(icon) statusbar.icon:SetTexture(texture) statusbar.icon:SetWidth(w or 14) statusbar.icon:SetHeight(h or 14) if(l and r and t and b) then statusbar.icon:SetTexCoord(l, r, t, b) end else statusbar.icon:SetTexture(icon) statusbar.icon:SetWidth(14) statusbar.icon:SetHeight(14) statusbar.icon:SetTexCoord(0, 1, 0, 1) end else statusbar.icon:SetTexture(nil) end if(color) then statusbar:SetBackdropColor(gump:ParseColors(color)) else statusbar:SetBackdropColor(0, 0, 0, 1) end if(icon or text) then statusbar:Show() if(time) then _detalhes:ScheduleTimer("StatusBarAlertTime", time, self) end else statusbar:Hide() end end function gump:CriaRodape(baseframe, instancia) baseframe.rodape = {} --> esquerdo com statusbar baseframe.rodape.esquerdo = instancia.floatingframe:CreateTexture(nil, "overlay") baseframe.rodape.esquerdo:SetPoint("topright", baseframe, "bottomleft", 16, 0) baseframe.rodape.esquerdo:SetTexture(DEFAULT_SKIN) baseframe.rodape.esquerdo:SetTexCoord(unpack(COORDS_PIN_LEFT)) baseframe.rodape.esquerdo:SetWidth(32) baseframe.rodape.esquerdo:SetHeight(32) --> esquerdo sem statusbar baseframe.rodape.esquerdo_nostatusbar = instancia.floatingframe:CreateTexture(nil, "overlay") baseframe.rodape.esquerdo_nostatusbar:SetPoint("topright", baseframe, "bottomleft", 16, 14) baseframe.rodape.esquerdo_nostatusbar:SetTexture(DEFAULT_SKIN) baseframe.rodape.esquerdo_nostatusbar:SetTexCoord(unpack(COORDS_PIN_LEFT)) baseframe.rodape.esquerdo_nostatusbar:SetWidth(32) baseframe.rodape.esquerdo_nostatusbar:SetHeight(32) --> direito com statusbar baseframe.rodape.direita = instancia.floatingframe:CreateTexture(nil, "overlay") baseframe.rodape.direita:SetPoint("topleft", baseframe, "bottomright", -16, 0) baseframe.rodape.direita:SetTexture(DEFAULT_SKIN) baseframe.rodape.direita:SetTexCoord(unpack(COORDS_PIN_RIGHT)) baseframe.rodape.direita:SetWidth(32) baseframe.rodape.direita:SetHeight(32) --> direito sem statusbar baseframe.rodape.direita_nostatusbar = instancia.floatingframe:CreateTexture(nil, "overlay") baseframe.rodape.direita_nostatusbar:SetPoint("topleft", baseframe, "bottomright", -16, 14) baseframe.rodape.direita_nostatusbar:SetTexture(DEFAULT_SKIN) baseframe.rodape.direita_nostatusbar:SetTexCoord(unpack(COORDS_PIN_RIGHT)) baseframe.rodape.direita_nostatusbar:SetWidth(32) baseframe.rodape.direita_nostatusbar:SetHeight(32) --> barra centro baseframe.rodape.top_bg = baseframe:CreateTexture(nil, "background") baseframe.rodape.top_bg:SetTexture(DEFAULT_SKIN) baseframe.rodape.top_bg:SetTexCoord(unpack(COORDS_BOTTOM_BACKGROUND)) baseframe.rodape.top_bg:SetWidth(512) baseframe.rodape.top_bg:SetHeight(128) baseframe.rodape.top_bg:SetPoint("left", baseframe.rodape.esquerdo, "right", -16, -48) baseframe.rodape.top_bg:SetPoint("right", baseframe.rodape.direita, "left", 16, -48) local StatusBarLeftAnchor = CreateFrame("frame", "DetailsStatusBarAnchorLeft" .. instancia.meu_id, baseframe) StatusBarLeftAnchor:SetPoint("left", baseframe.rodape.top_bg, "left", 5, 57) StatusBarLeftAnchor:SetWidth(1) StatusBarLeftAnchor:SetHeight(1) baseframe.rodape.StatusBarLeftAnchor = StatusBarLeftAnchor local StatusBarCenterAnchor = CreateFrame("frame", "DetailsStatusBarAnchorCenter" .. instancia.meu_id, baseframe) StatusBarCenterAnchor:SetPoint("center", baseframe.rodape.top_bg, "center", 0, 57) StatusBarCenterAnchor:SetWidth(1) StatusBarCenterAnchor:SetHeight(1) baseframe.rodape.StatusBarCenterAnchor = StatusBarCenterAnchor --> display frame baseframe.statusbar = CreateFrame("frame", "DetailsStatusBar" .. instancia.meu_id, instancia.floatingframe) baseframe.statusbar:SetFrameLevel(instancia.floatingframe:GetFrameLevel()+2) baseframe.statusbar:SetPoint("left", baseframe.rodape.esquerdo, "right", -13, 10) baseframe.statusbar:SetPoint("right", baseframe.rodape.direita, "left", 13, 10) baseframe.statusbar:SetHeight(14) local statusbar_icon = baseframe.statusbar:CreateTexture(nil, "overlay") statusbar_icon:SetWidth(14) statusbar_icon:SetHeight(14) statusbar_icon:SetPoint("left", baseframe.statusbar, "left") local statusbar_text = baseframe.statusbar:CreateFontString(nil, "overlay", "GameFontNormal") statusbar_text:SetPoint("left", statusbar_icon, "right", 2, 0) baseframe.statusbar:SetBackdrop({ bgFile =[[Interface\AddOns\Details\images\background]], tile = true, tileSize = 16, insets = {left = 0, right = 0, top = 0, bottom = 0}}) baseframe.statusbar:SetBackdropColor(0, 0, 0, 1) baseframe.statusbar.icon = statusbar_icon baseframe.statusbar.text = statusbar_text baseframe.statusbar.instancia = instancia baseframe.statusbar:Hide() --> frame invis�vel baseframe.DOWNFrame = CreateFrame("frame", "DetailsDownFrame" .. instancia.meu_id, baseframe) baseframe.DOWNFrame:SetPoint("left", baseframe.rodape.esquerdo, "right", 0, 10) baseframe.DOWNFrame:SetPoint("right", baseframe.rodape.direita, "left", 0, 10) baseframe.DOWNFrame:SetHeight(14) baseframe.DOWNFrame:Show() baseframe.DOWNFrame:EnableMouse(true) baseframe.DOWNFrame:SetMovable(true) baseframe.DOWNFrame:SetResizable(true) BGFrame_scripts(baseframe.DOWNFrame, baseframe, instancia) end function _detalhes:GetMenuAnchorPoint() local toolbar_side = self.toolbar_side local menu_side = self.menu_anchor.side if(menu_side == 1) then --left if(toolbar_side == 1) then --top return self.menu_points[1], "bottomleft", "bottomright" elseif(toolbar_side == 2) then --bottom return self.menu_points[1], "topleft", "topright" end elseif(menu_side == 2) then --right if(toolbar_side == 1) then --top return self.menu_points[2], "topleft", "bottomleft" elseif(toolbar_side == 2) then --bottom return self.menu_points[2], "topleft", "topleft" end end end --> search key: ~icon function _detalhes:ToolbarMenuButtonsSize(size) size = size or self.menu_icons_size self.menu_icons_size = size return self:ToolbarMenuButtons() end local SetIconAlphaCacheButtonsTable = {} function _detalhes:SetIconAlpha(alpha, hide, no_animations) if(self.attribute_text.enabled) then if(not self.menu_attribute_string) then --> create on demand self:AttributeMenu() end if(hide) then gump:Fade(self.menu_attribute_string.widget, _unpack(_detalhes.windows_fade_in)) else if(no_animations) then self.menu_attribute_string:SetAlpha(alpha) else gump:Fade(self.menu_attribute_string.widget, "ALPHAANIM", alpha) end end end table.wipe(SetIconAlphaCacheButtonsTable) SetIconAlphaCacheButtonsTable[1] = self.baseframe.cabecalho.modo_selecao SetIconAlphaCacheButtonsTable[2] = self.baseframe.cabecalho.segmento SetIconAlphaCacheButtonsTable[3] = self.baseframe.cabecalho.atributo SetIconAlphaCacheButtonsTable[4] = self.baseframe.cabecalho.report SetIconAlphaCacheButtonsTable[5] = self.baseframe.cabecalho.reset SetIconAlphaCacheButtonsTable[6] = self.baseframe.cabecalho.fechar for index, button in _ipairs(SetIconAlphaCacheButtonsTable) do if(self.menu_icons[index]) then if(hide) then gump:Fade(button, _unpack(_detalhes.windows_fade_in)) else if(no_animations) then button:SetAlpha(alpha) else gump:Fade(button, "ALPHAANIM", alpha) end end end end if(self:IsLowerInstance()) then if(#_detalhes.ToolBar.Shown > 0) then for index, button in ipairs(_detalhes.ToolBar.Shown) do if(hide) then gump:Fade(button, _unpack(_detalhes.windows_fade_in)) else if(no_animations) then button:SetAlpha(alpha) else gump:Fade(button, "ALPHAANIM", alpha) end end end end end end function _detalhes:ToolbarMenuSetButtonsOptions(spacement, shadow) if(type(spacement) ~= "number") then spacement = self.menu_icons.space end if(type(shadow) ~= "boolean") then shadow = self.menu_icons.shadow end self.menu_icons.space = spacement self.menu_icons.shadow = shadow return self:ToolbarMenuSetButtons() end -- search key: ~buttons ~icons local tbuttons = {} function _detalhes:ToolbarMenuSetButtons(_mode, _segment, _attributes, _report, _reset, _close) if(_mode == nil) then _mode = self.menu_icons[1] end if(_segment == nil) then _segment = self.menu_icons[2] end if(_attributes == nil) then _attributes = self.menu_icons[3] end if(_report == nil) then _report = self.menu_icons[4] end if(_reset == nil) then _reset = self.menu_icons[5] end if(_close == nil) then _close = self.menu_icons[6] end self.menu_icons[1] = _mode self.menu_icons[2] = _segment self.menu_icons[3] = _attributes self.menu_icons[4] = _report self.menu_icons[5] = _reset self.menu_icons[6] = _close table.wipe(tbuttons) tbuttons[1] = self.baseframe.cabecalho.modo_selecao tbuttons[2] = self.baseframe.cabecalho.segmento tbuttons[3] = self.baseframe.cabecalho.atributo tbuttons[4] = self.baseframe.cabecalho.report tbuttons[5] = self.baseframe.cabecalho.reset tbuttons[6] = self.baseframe.cabecalho.fechar local anchor_frame, point1, point2 = self:GetMenuAnchorPoint() local got_anchor = false self.lastIcon = nil self.firstIcon = nil local size = self.menu_icons_size local space = self.menu_icons.space local shadow = self.menu_icons.shadow local toolbar_icon_file = self.toolbar_icon_file local total_buttons_shown = 0 --> normal buttons if(self.menu_anchor.side == 1) then for index, button in _ipairs(tbuttons) do if(self.menu_icons[index]) then button:ClearAllPoints() if(got_anchor) then button:SetPoint("left", self.lastIcon.widget or self.lastIcon, "right", space, 0) else button:SetPoint(point1, anchor_frame, point2) got_anchor = button self.firstIcon = button end self.lastIcon = button button:SetParent(self.baseframe) button:SetFrameLevel(self.baseframe.UPFrame:GetFrameLevel()+1) button:Show() button:SetSize(16*size, 16*size) button:SetNormalTexture(toolbar_icon_file) button:SetHighlightTexture(toolbar_icon_file) button:SetPushedTexture(toolbar_icon_file) total_buttons_shown = total_buttons_shown + 1 else button:Hide() end end elseif(self.menu_anchor.side == 2) then for index = #tbuttons, 1, -1 do local button = tbuttons[index] if(self.menu_icons[index]) then button:ClearAllPoints() if(got_anchor) then button:SetPoint("right", self.lastIcon.widget or self.lastIcon, "left", -space, 0) else button:SetPoint(point1, anchor_frame, point2) got_anchor = button self.firstIcon = button end self.lastIcon = button button:SetParent(self.baseframe) button:SetFrameLevel(self.baseframe.UPFrame:GetFrameLevel()+1) button:Show() button:SetSize(16*size, 16*size) button:SetNormalTexture(toolbar_icon_file) button:SetHighlightTexture(toolbar_icon_file) button:SetPushedTexture(toolbar_icon_file) total_buttons_shown = total_buttons_shown + 1 else button:Hide() end end end --> plugins buttons local pluginFirstIcon = true if(not self.baseframe.cabecalho.PluginIconsSeparator) then self.baseframe.cabecalho.PluginIconsSeparator = self.baseframe:CreateTexture(nil, "overlay") self.baseframe.cabecalho.PluginIconsSeparator:SetTexture([[Interface\FriendsFrame\StatusIcon-Offline]]) local color = 0 self.baseframe.cabecalho.PluginIconsSeparator:SetVertexColor(color, color, color) self.baseframe.cabecalho.PluginIconsSeparator:SetAlpha(0.2) local scale = 0.4 self.baseframe.cabecalho.PluginIconsSeparator:SetSize(16 * scale, 16 * scale) end self.baseframe.cabecalho.PluginIconsSeparator:Hide() if(self:IsLowerInstance()) then if(#_detalhes.ToolBar.Shown > 0) then local last_plugin_icon if(#_detalhes.ToolBar.Shown > 0) then self.baseframe.cabecalho.PluginIconsSeparator:Show() self.baseframe.cabecalho.PluginIconsSeparator:ClearAllPoints() self.baseframe.cabecalho.PluginIconsSeparator.widget = self.baseframe.cabecalho.PluginIconsSeparator end for index, button in ipairs(_detalhes.ToolBar.Shown) do button:ClearAllPoints() if(got_anchor) then if(pluginFirstIcon) then -- space = space + 6 --was adding an extra padding between plugin icons end if(self.plugins_grow_direction == 2) then --right if(self.menu_anchor.side == 1) then --left local temp_space = space if(pluginFirstIcon) then temp_space = temp_space / 3 self.baseframe.cabecalho.PluginIconsSeparator:SetPoint("left", last_plugin_icon or self.lastIcon.widget or self.lastIcon, "right", temp_space, 0) self.lastIcon = self.baseframe.cabecalho.PluginIconsSeparator end button:SetPoint("left", self.lastIcon.widget or self.lastIcon, "right", temp_space, 0) elseif(self.menu_anchor.side == 2) then --right local temp_space = space if(pluginFirstIcon) then temp_space = temp_space / 3 self.baseframe.cabecalho.PluginIconsSeparator:SetPoint("left", last_plugin_icon or self.firstIcon.widget or self.firstIcon, "right", temp_space, 0) self.lastIcon = self.baseframe.cabecalho.PluginIconsSeparator end button:SetPoint("left", last_plugin_icon or self.lastIcon.widget or self.firstIcon, "right", temp_space, 0) end elseif(self.plugins_grow_direction == 1) then --left if(self.menu_anchor.side == 1) then --left local temp_space = space if(pluginFirstIcon) then temp_space = temp_space / 3 self.baseframe.cabecalho.PluginIconsSeparator:SetPoint("right", last_plugin_icon or self.firstIcon.widget or self.firstIcon, "left", -temp_space, 0) self.lastIcon = self.baseframe.cabecalho.PluginIconsSeparator end button:SetPoint("right", last_plugin_icon or self.lastIcon.widget or self.firstIcon, "left", -temp_space, 0) elseif(self.menu_anchor.side == 2) then --right local temp_space = space if(pluginFirstIcon) then temp_space = temp_space / 3 self.baseframe.cabecalho.PluginIconsSeparator:SetPoint("right", last_plugin_icon or self.lastIcon.widget or self.lastIcon, "left", -temp_space, 0) self.lastIcon = self.baseframe.cabecalho.PluginIconsSeparator end button:SetPoint("right", last_plugin_icon or self.lastIcon.widget or self.firstIcon, "left", -temp_space, 0) end end pluginFirstIcon = false else button:SetPoint(point1, anchor_frame, point2) self.firstIcon = button got_anchor = button end self.lastIcon = button last_plugin_icon = button button:SetParent(self.baseframe) button:SetFrameLevel(self.baseframe.UPFrame:GetFrameLevel()+1) button:Show() button:SetSize(16*size, 16*size) if(shadow and button.shadow) then button:SetNormalTexture(button.__icon .. "_shadow") button:SetPushedTexture(button.__icon .. "_shadow") button:SetHighlightTexture(button.__icon .. "_shadow", "ADD") else button:SetNormalTexture(button.__icon) button:SetPushedTexture(button.__icon) button:SetHighlightTexture(button.__icon, "ADD") end total_buttons_shown = total_buttons_shown + 1 end end if(self.baseframe.cabecalho.PluginIconsSeparator:IsShown()) then if(self.baseframe.cabecalho.modo_selecao:GetAlpha() == 0) then self.baseframe.cabecalho.PluginIconsSeparator:Hide() end end end self.total_buttons_shown = total_buttons_shown self:RefreshAttributeTextSize() return true end function _detalhes:ToolbarMenuButtons(_mode, _segment, _attributes, _report) return self:ToolbarMenuSetButtons(_mode, _segment, _attributes, _report) end local parameters_table = {} local on_leave_menu = function(self, elapsed) parameters_table[2] = parameters_table[2] + elapsed if(parameters_table[2] > 0.3) then if(not _G.GameCooltip.mouseOver and not _G.GameCooltip.buttonOver and(not _G.GameCooltip:GetOwner() or _G.GameCooltip:GetOwner() == self)) then _G.GameCooltip:ShowMe(false) end self:SetScript("OnUpdate", nil) end end local OnClickNovoMenu = function(_, _, id, instance) local is_new if(not _detalhes.tabela_instancias[id]) then --> esta criando uma nova is_new = true end local ninstance = _detalhes.CriarInstancia(_, _, id) instance.baseframe.cabecalho.modo_selecao:GetScript("OnEnter")(instance.baseframe.cabecalho.modo_selecao, _, true) if(ninstance and is_new) then ninstance.baseframe.cabecalho.modo_selecao:GetScript("OnEnter")(ninstance.baseframe.cabecalho.modo_selecao, _, true) end end function _detalhes:SetTooltipMinWidth() GameCooltip:SetOption("MinWidth", 155) end function _detalhes:FormatCooltipBackdrop() local CoolTip = GameCooltip CoolTip:SetBackdrop(1, menus_backdrop, menus_backdropcolor, menus_bordercolor) CoolTip:SetBackdrop(2, menus_backdrop, menus_backdropcolor_sec, menus_bordercolor) --CoolTip:SetWallpaper(1, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end local build_mode_list = function(self, elapsed) local CoolTip = GameCooltip local instancia = parameters_table[1] parameters_table[2] = parameters_table[2] + elapsed if(parameters_table[2] > 0.15) then self:SetScript("OnUpdate", nil) CoolTip:Reset() CoolTip:SetType("menu") CoolTip:SetLastSelected("main", parameters_table[3]) CoolTip:SetFixedParameter(instancia) CoolTip:SetOption("TextSize", _detalhes.font_sizes.menus) CoolTip:SetOption("TextFont", _detalhes.font_faces.menus) CoolTip:SetOption("ButtonHeightModSub", -2) CoolTip:SetOption("ButtonHeightMod", -5) CoolTip:SetOption("ButtonsYModSub", -3) CoolTip:SetOption("ButtonsYMod", -6) CoolTip:SetOption("YSpacingModSub", -3) CoolTip:SetOption("YSpacingMod", 1) CoolTip:SetOption("HeighMod", 3) CoolTip:SetOption("SubFollowButton", true) _detalhes:SetTooltipMinWidth() CoolTip:AddLine(Loc["STRING_MODE_GROUP"]) CoolTip:AddMenu(1, instancia.AlteraModo, 2, true) CoolTip:AddIcon([[Interface\AddOns\Details\images\modo_icones]], 1, 1, 20, 20, 32/256, 32/256*2, 0, 1) CoolTip:AddLine(Loc["STRING_MODE_ALL"]) CoolTip:AddMenu(1, instancia.AlteraModo, 3, true) CoolTip:AddIcon([[Interface\AddOns\Details\images\modo_icones]], 1, 1, 20, 20, 32/256*2, 32/256*3, 0, 1) CoolTip:AddLine(Loc["STRING_MODE_RAID"]) CoolTip:AddMenu(1, instancia.AlteraModo, 4, true) CoolTip:AddIcon([[Interface\AddOns\Details\images\modo_icones]], 1, 1, 20, 20, 32/256*3, 32/256*4, 0, 1) --build raid plugins list local available_plugins = _detalhes.RaidTables:GetAvailablePlugins() if(#available_plugins >= 0) then local amt = 0 for index, ptable in _ipairs(available_plugins) do if(ptable[3].__enabled) then CoolTip:AddMenu(2, _detalhes.RaidTables.EnableRaidMode, instancia, ptable[4], true, ptable[1], ptable[2], true) --PluginName, PluginIcon, PluginObject, PluginAbsoluteName amt = amt + 1 end end --CoolTip:SetWallpaper(2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end CoolTip:AddLine(Loc["STRING_MODE_SELF"]) CoolTip:AddMenu(1, instancia.AlteraModo, 1, true) CoolTip:AddIcon([[Interface\AddOns\Details\images\modo_icones]], 1, 1, 20, 20, 0, 32/256, 0, 1) --build self plugins list --pega a list de plugins solo: if(#_detalhes.SoloTables.Menu > 0) then for index, ptable in _ipairs(_detalhes.SoloTables.Menu) do if(ptable[3].__enabled) then CoolTip:AddMenu(2, _detalhes.SoloTables.EnableSoloMode, instancia, ptable[4], true, ptable[1], ptable[2], true) end end --CoolTip:SetWallpaper(2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end --> window control GameCooltip:AddLine("$div") CoolTip:AddLine(Loc["STRING_MENU_INSTANCE_CONTROL"]) CoolTip:AddIcon([[Interface\AddOns\Details\images\modo_icones]], 1, 1, 20, 20, 0.625, 0.75, 0, 1) local HaveClosedInstances = false for index = 1, math.min(#_detalhes.tabela_instancias, _detalhes.instances_amount), 1 do local _this_instance = _detalhes.tabela_instancias[index] if(not _this_instance.ativa) then HaveClosedInstances = true break end end if(_detalhes:GetNumInstancesAmount() < _detalhes:GetMaxInstancesAmount()) then CoolTip:AddMenu(2, OnClickNovoMenu, true, instancia, nil, Loc["STRING_OPTIONS_WC_CREATE"], _, true) CoolTip:AddIcon([[Interface\Buttons\UI-AttributeButton-Encourage-Up]], 2, 1, 16, 16) if(HaveClosedInstances) then GameCooltip:AddLine("$div", nil, 2, nil, -5, -11) end end local ClosedInstances = 0 for index = 1, math.min(#_detalhes.tabela_instancias, _detalhes.instances_amount), 1 do local _this_instance = _detalhes.tabela_instancias[index] if(not _this_instance.ativa) then --> s� reabre se ela estiver ativa --> pegar o que ela ta mostrando local atributo = _this_instance.atributo local sub_atributo = _this_instance.sub_atributo ClosedInstances = ClosedInstances + 1 if(atributo == 5) then --> custom local CustomObject = _detalhes.custom[sub_atributo] if(not CustomObject) then _this_instance:ResetAttribute() atributo = _this_instance.atributo sub_atributo = _this_instance.sub_atributo CoolTip:AddMenu(2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " " .. _detalhes.atributos.lista[atributo] .. " - " .. _detalhes.sub_atributos[atributo].lista[sub_atributo], _, true) CoolTip:AddIcon(_detalhes.sub_atributos[atributo].icones[sub_atributo][1], 2, 1, 16, 16, unpack(_detalhes.sub_atributos[atributo].icones[sub_atributo][2])) else CoolTip:AddMenu(2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " " .. _detalhes.atributos.lista[atributo] .. " - " .. CustomObject:GetName(), _, true) CoolTip:AddIcon(CustomObject.icon, 2, 1, 16, 16, 0, 1, 0, 1) end else local modo = _this_instance.modo if(modo == 1) then --alone atributo = _detalhes.SoloTables.Mode or 1 local SoloInfo = _detalhes.SoloTables.Menu[atributo] if(SoloInfo) then CoolTip:AddMenu(2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " " .. SoloInfo[1], _, true) CoolTip:AddIcon(SoloInfo[2], 2, 1, 16, 16, 0, 1, 0, 1) else CoolTip:AddMenu(2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " Unknown Plugin", _, true) end elseif(modo == 4) then --raid local plugin_name = _this_instance.current_raid_plugin or _this_instance.last_raid_plugin if(plugin_name) then local plugin_object = _detalhes:GetPlugin(plugin_name) if(plugin_object) then CoolTip:AddMenu(2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " " .. plugin_object.__name, _, true) CoolTip:AddIcon(plugin_object.__icon, 2, 1, 16, 16, 0, 1, 0, 1) else CoolTip:AddMenu(2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " Unknown Plugin", _, true) end else CoolTip:AddMenu(2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " Unknown Plugin", _, true) end else --CoolTip:AddMenu(2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " " .. _detalhes.atributos.lista[atributo] .. " - " .. _detalhes.sub_atributos[atributo].lista[sub_atributo], _, true) CoolTip:AddMenu(2, OnClickNovoMenu, index, instancia, nil, "#".. index .. " " .. _detalhes.sub_atributos[atributo].lista[sub_atributo], _, true) CoolTip:AddIcon(_detalhes.sub_atributos[atributo].icones[sub_atributo][1], 2, 1, 16, 16, unpack(_detalhes.sub_atributos[atributo].icones[sub_atributo][2])) end end CoolTip:SetOption("TextSize", _detalhes.font_sizes.menus) CoolTip:SetOption("TextFont", _detalhes.font_faces.menus) end end if(ClosedInstances > 0 or _detalhes:GetNumInstancesAmount() < _detalhes:GetMaxInstancesAmount()) then GameCooltip:AddLine("$div", nil, 2, nil, -5, -11) end GameCooltip:AddLine(Loc["STRING_MENU_CLOSE_INSTANCE"], nil, 2, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus) GameCooltip:AddIcon([[Interface\Buttons\UI-Panel-MinimizeButton-Up]], 2, 1, 14, 14, 0.2, 0.8, 0.2, 0.8) GameCooltip:AddMenu(2, _detalhes.close_instancia_func, instancia.baseframe.cabecalho.fechar) --CoolTip:SetWallpaper(2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) --> space GameCooltip:AddLine("$div") --> forge and history buttons CoolTip:AddLine(Loc["STRING_SPELLLIST"]) CoolTip:AddMenu(1, _detalhes.OpenForge) CoolTip:AddIcon([[Interface\AddOns\Details\textures\Minimap\Vehicle-HammerGold-3]], 1, 1, 16, 16, 0, 1, 0, 1) --> statistics CoolTip:AddLine(Loc["STRING_STATISTICS"]) CoolTip:AddMenu(1, _detalhes.OpenRaidHistoryWindow) CoolTip:AddIcon([[Interface\PvPRankBadges\PvPRank08]], 1, 1, 16, 16, 0, 1, 0, 1) --> space GameCooltip:AddLine("$div") --> options CoolTip:AddLine(Loc["STRING_OPTIONS_WINDOW"]) CoolTip:AddMenu(1, _detalhes.OpenOptionsWindow) CoolTip:AddIcon([[Interface\AddOns\Details\images\modo_icones]], 1, 1, 20, 20, 0.5, 0.625, 0, 1) --> finishes the menu _detalhes:SetMenuOwner(self, instancia) --apply the backdrop settings to the menu _detalhes:FormatCooltipBackdrop() show_anti_overlap(instancia, self, "top") CoolTip:ShowCooltip() end end function _detalhes:SetMenuOwner(self, instance) local _, y = instance.baseframe:GetCenter() local screen_height = GetScreenHeight() if(instance.toolbar_side == 1) then if(y+300 > screen_height) then GameCooltip:SetOwner(self, "top", "bottom", 0, -10) else GameCooltip:SetOwner(self) end elseif(instance.toolbar_side == 2) then --> bottom local instance_height = instance.baseframe:GetHeight() if(y + math.max(instance_height, 250) > screen_height) then GameCooltip:SetOwner(self, "top", "bottom", 0, -10) else GameCooltip:SetOwner(self, "bottom", "top", 0, 0) end end end local empty_segment_color = {1, 1, 1, .4} local segments_common_tex, segments_common_color = {0.5078125, 0.1171875, 0.017578125, 0.1953125}, {1, 1, 1, .5} local unknown_boss_tex, unknown_boss_color = {0.14453125, 0.9296875, 0.2625, 0.6546875}, {1, 1, 1, 0.5} local party_line_color = {170/255, 167/255, 255/255, 1} local party_line_color_trash = {130/255, 130/255, 155/255, 1} local party_line_color2 = {210/255, 200/255, 255/255, 1} local party_line_color2_trash = {110/255, 110/255, 155/255, 1} local party_wallpaper_tex, party_wallpaper_color, raid_wallpaper_tex = {0.09, 0.698125, 0, 0.833984375}, {1, 1, 1, 0.5}, {33/512, 361/512, 45/512, 295/512} local segments_wallpaper_color = {1, 1, 1, 0.5} local segment_color_lime = {0, 1, 0, 1} local segment_color_red = {1, 0, 0, 1} function _detalhes:GetSegmentInfo(index) local combat if(index == -1 or index == "overall") then combat = _detalhes.tabela_overall elseif(index == 0 or index == "current") then combat = _detalhes.tabela_vigente else combat = _detalhes.tabela_historico.tabelas[index] end if(combat) then local enemy local color local raid_type local killed local portrait local background local background_coords local is_trash if(combat.is_boss and combat.is_boss.name) then if(combat.instance_type == "party") then raid_type = "party" enemy = combat.is_boss.name color = party_line_color elseif(combat.is_boss.killed) then raid_type = "raid" enemy = combat.is_boss.name color = segment_color_lime killed = true else raid_type = "raid" enemy = combat.is_boss.name color = segment_color_red killed = false end local p = _detalhes:GetBossPortrait(combat.is_boss.mapid, combat.is_boss.index) if(p) then portrait = p end local b = _detalhes:GetRaidIcon(combat.is_boss.mapid) if(b) then background = b background_coords = party_wallpaper_tex -- TODO elseif(combat.instance_type == "party") then local ej_id = combat.is_boss.ej_instance_id if(ej_id) then local name, description, bgImage, buttonImage, loreImage, dungeonAreaMapID, link = DetailsFramework.EncounterJournal.EJ_GetInstanceInfo(ej_id) if(bgImage) then background = bgImage background_coords = party_wallpaper_tex end end end elseif(combat.is_arena) then enemy = combat.is_arena.name local file, coords = _detalhes:GetArenaInfo(combat.is_arena.mapid) if(file) then background = "Interface\\Glues\\LOADINGSCREENS\\" .. file background_coords = coords end else enemy = combat.enemy if(combat.is_trash) then is_trash = true end end return enemy, color, raid_type, killed, is_trash, portrait, background, background_coords end end local segments_used = 0 local segments_filled = 0 -- search key: ~segments local build_segment_list = function(self, elapsed) local CoolTip = GameCooltip local instancia = parameters_table[1] parameters_table[2] = parameters_table[2] + elapsed local battleground_color = {1, 0.666, 0, 1} if(parameters_table[2] > 0.15) then self:SetScript("OnUpdate", nil) --> here we are using normal Add calls CoolTip:Reset() CoolTip:SetType("menu") CoolTip:SetFixedParameter(instancia) CoolTip:SetColor("main", "transparent") CoolTip:SetOption("FixedWidthSub", 195) CoolTip:SetOption("RightTextWidth", 105) CoolTip:SetOption("RightTextHeight", 12) CoolTip:SetOption("SubFollowButton", true) ----------- segments local menuIndex = 0 _detalhes.segments_amount = _math_floor(_detalhes.segments_amount) local fight_amount = 0 local filled_segments = 0 for i = 1, _detalhes.segments_amount do if(_detalhes.tabela_historico.tabelas[i]) then filled_segments = filled_segments + 1 else break end end filled_segments = _detalhes.segments_amount - filled_segments - 2 local fill = _math_abs(filled_segments - _detalhes.segments_amount) segments_used = 0 segments_filled = fill local dungeon_color = party_line_color local dungeon_color_trash = party_line_color_trash local dungeon_run_id = false --> history table(segments container) for i = _detalhes.segments_amount, 1, -1 do if(i <= fill) then local thisCombat = _detalhes.tabela_historico.tabelas[i] if(thisCombat) then local enemy = thisCombat.is_boss and thisCombat.is_boss.name local segment_info_added = false segments_used = segments_used + 1 --print(thisCombat.is_boss.name, thisCombat.instance_type, _detalhes:GetRaidIcon(thisCombat.is_boss.mapid), thisCombat.is_boss.ej_instance_id) if(thisCombat.is_boss and thisCombat.is_boss.name) then local try_number = thisCombat.is_boss.try_number local combat_time = thisCombat:GetCombatTime() if(thisCombat.instance_type == "party") then CoolTip:AddLine(thisCombat.is_boss.name .."(#"..i..")", _, 1, dungeon_color) elseif(thisCombat.is_boss.killed) then if(try_number) then local m, s = _math_floor(combat_time/60), _math_floor(combat_time%60) if(s < 10) then s = "0" .. s end CoolTip:AddLine(thisCombat.is_boss.name .."(#"..try_number.." " .. m .. ":" .. s .. ")", _, 1, "lime") else CoolTip:AddLine(thisCombat.is_boss.name .."(#"..i..")", _, 1, "lime") end else if(try_number) then local m, s = _math_floor(combat_time/60), _math_floor(combat_time%60) if(s < 10) then s = "0" .. s end CoolTip:AddLine(thisCombat.is_boss.name .."(#"..try_number.." " .. m .. ":" .. s .. ")", _, 1, "red") else CoolTip:AddLine(thisCombat.is_boss.name .."(#"..i..")", _, 1, "red") end end local portrait = _detalhes:GetBossPortrait(thisCombat.is_boss.mapid, thisCombat.is_boss.index) or thisCombat.is_boss.bossimage if(portrait) then CoolTip:AddIcon(portrait, 2, "top", 128, 64) else local encounter_name = thisCombat.is_boss.encounter local instanceID = thisCombat.is_boss.ej_instance_id if(encounter_name and instanceID and instanceID ~= 0) then local index, name, description, encounterID, rootSectionID, link = _detalhes:GetEncounterInfoFromEncounterName(instanceID, encounter_name) if(index and name and encounterID) then --EJ_SelectInstance(instanceID) --creature info pode ser sempre 1, n�o usar o index do boss local id, name, description, displayInfo, iconImage = DetailsFramework.EncounterJournal.EJ_GetCreatureInfo(1, encounterID) if(iconImage) then CoolTip:AddIcon(iconImage, 2, "top", 128, 64) end end end end CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 16, 0.96875, 1, 0, 0.03125) if(_detalhes.tooltip.submenu_wallpaper) then local background = _detalhes:GetRaidIcon(thisCombat.is_boss.mapid) if(background) then CoolTip:SetWallpaper(2, background, raid_wallpaper_tex, segments_wallpaper_color, true) else local ej_id = thisCombat.is_boss.ej_instance_id if(ej_id and ej_id ~= 0) then local name, description, bgImage, buttonImage, loreImage, dungeonAreaMapID, link = DetailsFramework.EncounterJournal.EJ_GetInstanceInfo(ej_id) if(name) then if(thisCombat.instance_type == "party") then CoolTip:SetWallpaper(2, bgImage, party_wallpaper_tex, party_wallpaper_color, true) else CoolTip:SetWallpaper(2, loreImage, raid_wallpaper_tex, party_wallpaper_color, true) end end else --CoolTip:SetWallpaper(2,[[Interface\BlackMarket\HotItemBanner]], unknown_boss_tex, unknown_boss_color, true) end end else --> wallpaper = main window --CoolTip:SetWallpaper(2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end elseif(thisCombat.is_pvp) then CoolTip:AddLine(thisCombat.is_pvp.name, _, 1, battleground_color) enemy = thisCombat.is_pvp.name CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 12, 0.251953125, 0.306640625, 0.205078125, 0.248046875) if(_detalhes.tooltip.submenu_wallpaper) then local file, coords = _detalhes:GetBattlegroundInfo(thisCombat.is_pvp.mapid) if(file) then CoolTip:SetWallpaper(2, "Interface\\Glues\\LOADINGSCREENS\\" .. file, coords, empty_segment_color, true) end else --> wallpaper = main window --CoolTip:SetWallpaper(2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end elseif(thisCombat.is_arena) then CoolTip:AddLine(thisCombat.is_arena.name, _, 1, "yellow") enemy = thisCombat.is_arena.name CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 12, 0.251953125, 0.306640625, 0.205078125, 0.248046875) if(_detalhes.tooltip.submenu_wallpaper) then local file, coords = _detalhes:GetArenaInfo(thisCombat.is_arena.mapid) if(file) then CoolTip:SetWallpaper(2, "Interface\\Glues\\LOADINGSCREENS\\" .. file, coords, empty_segment_color, true) end else --> wallpaper = main window --CoolTip:SetWallpaper(2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end else enemy = thisCombat.enemy if(enemy) then CoolTip:AddLine(thisCombat.enemy .."(#"..i..")", _, 1, "yellow") else CoolTip:AddLine(segmentos.past..i, _, 1, "silver") end if(thisCombat.is_trash) then CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], "main", "left", 16, 12, 0.02734375, 0.11328125, 0.19140625, 0.3125) else CoolTip:AddIcon([[Interface\QUESTFRAME\UI-Quest-BulletPoint]], "main", "left", 16, 16) end if(_detalhes.tooltip.submenu_wallpaper) then CoolTip:SetWallpaper(2,[[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsBackground]], segments_common_tex, segments_common_color, true) else --> wallpaper = main window --CoolTip:SetWallpaper(2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end end CoolTip:AddMenu(1, instancia.TrocaTabela, i) if(not segment_info_added) then CoolTip:AddLine(Loc["STRING_SEGMENT_ENEMY"] .. ":", enemy, 2, "white", "white") local decorrido = thisCombat:GetCombatTime() local minutos, segundos = _math_floor(decorrido/60), _math_floor(decorrido%60) CoolTip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white") CoolTip:AddLine(Loc["STRING_SEGMENT_START"] .. ":", thisCombat.data_inicio, 2, "white", "white") CoolTip:AddLine(Loc["STRING_SEGMENT_END"] .. ":", thisCombat.data_fim or "in progress", 2, "white", "white") end fight_amount = fight_amount + 1 else CoolTip:AddLine(Loc["STRING_SEGMENT_LOWER"] .. " #" .. i, _, 1, "gray") CoolTip:AddMenu(1, instancia.TrocaTabela, i) CoolTip:AddIcon([[Interface\QUESTFRAME\UI-Quest-BulletPoint]], "main", "left", 16, 16, nil, nil, nil, nil, empty_segment_color) CoolTip:AddLine(Loc["STRING_SEGMENT_EMPTY"], _, 2) CoolTip:AddIcon([[Interface\CHARACTERFRAME\Disconnect-Icon]], 2, 1, 12, 12, 0.3125, 0.65625, 0.265625, 0.671875) --CoolTip:SetWallpaper(2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end if(menuIndex) then menuIndex = menuIndex + 1 if(instancia.segmento == i) then CoolTip:SetLastSelected("main", menuIndex) menuIndex = nil end end end end GameCooltip:AddLine("$div", nil, nil, -5, -13) ----------- current local enemy = _detalhes.tabela_vigente.is_boss and _detalhes.tabela_vigente.is_boss.name or _detalhes.tabela_vigente.enemy or "--x--x--" local file, coords local thisCombat = _detalhes.tabela_vigente local segment_info_added --> add the new line CoolTip:AddLine(segmentos.current_standard, _, 1, "white") CoolTip:AddMenu(1, instancia.TrocaTabela, 0) CoolTip:AddIcon([[Interface\QUESTFRAME\UI-Quest-BulletPoint]], "main", "left", 16, 16, nil, nil, nil, nil, "orange") -- if(_detalhes.tabela_vigente.is_boss and _detalhes.tabela_vigente.is_boss.name) then local portrait = _detalhes:GetBossPortrait(_detalhes.tabela_vigente.is_boss.mapid, _detalhes.tabela_vigente.is_boss.index) or _detalhes.tabela_vigente.is_boss.bossimage if(portrait) then CoolTip:AddIcon(portrait, 2, "top", 128, 64) else local thisCombat = _detalhes.tabela_vigente local encounter_name = thisCombat.is_boss.encounter local instanceID = thisCombat.is_boss.ej_instance_id instanceID = tonumber(instanceID) if(encounter_name and instanceID and instanceID ~= 0) then local index, name, description, encounterID, rootSectionID, link = _detalhes:GetEncounterInfoFromEncounterName(instanceID, encounter_name) if(index and name and encounterID) then local id, name, description, displayInfo, iconImage = DetailsFramework.EncounterJournal.EJ_GetCreatureInfo(index, encounterID) if(iconImage) then CoolTip:AddIcon(iconImage, 2, "top", 128, 64) end end end end if(_detalhes.tooltip.submenu_wallpaper) then local background = _detalhes:GetRaidIcon(_detalhes.tabela_vigente.is_boss.mapid) if(background) then CoolTip:SetWallpaper(2, background, raid_wallpaper_tex, segments_wallpaper_color, true) else local ej_id = _detalhes.tabela_vigente.is_boss.ej_instance_id if(ej_id and ej_id ~= 0) then local name, description, bgImage, buttonImage, loreImage, dungeonAreaMapID, link = DetailsFramework.EncounterJournal.EJ_GetInstanceInfo(ej_id) if(name) then if(_detalhes.tabela_vigente.instance_type == "party") then CoolTip:SetWallpaper(2, bgImage, party_wallpaper_tex, party_wallpaper_color, true) else CoolTip:SetWallpaper(2, loreImage, raid_wallpaper_tex, party_wallpaper_color, true) end end end end else --> wallpaper = main window --CoolTip:SetWallpaper(2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end elseif(_detalhes.tabela_vigente.is_pvp) then enemy = _detalhes.tabela_vigente.is_pvp.name file, coords = _detalhes:GetBattlegroundInfo(_detalhes.tabela_vigente.is_pvp.mapid) elseif(_detalhes.tabela_vigente.is_arena) then enemy = _detalhes.tabela_vigente.is_arena.name file, coords = _detalhes:GetArenaInfo(_detalhes.tabela_vigente.is_arena.mapid) else if(_detalhes.tooltip.submenu_wallpaper) then CoolTip:SetWallpaper(2,[[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsBackground]], segments_common_tex, {1, 1, 1, 0.5}, true) else --> wallpaper = main window --CoolTip:SetWallpaper(2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end end if(_detalhes.tooltip.submenu_wallpaper) then if(file) then CoolTip:SetWallpaper(2, "Interface\\Glues\\LOADINGSCREENS\\" .. file, coords, empty_segment_color, true) end else --> wallpaper = main window --CoolTip:SetWallpaper(2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end if(not segment_info_added) then CoolTip:AddLine(Loc["STRING_SEGMENT_ENEMY"] .. ":", enemy, 2, "white", "white") if(not _detalhes.tabela_vigente:GetEndTime()) then if(_detalhes.in_combat) then local decorrido = _detalhes.tabela_vigente:GetCombatTime() local minutos, segundos = _math_floor(decorrido/60), _math_floor(decorrido%60) CoolTip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white") else CoolTip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", "--x--x--", 2, "white", "white") end else local decorrido = _detalhes.tabela_vigente:GetCombatTime() local minutos, segundos = _math_floor(decorrido/60), _math_floor(decorrido%60) CoolTip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white") end CoolTip:AddLine(Loc["STRING_SEGMENT_START"] .. ":", _detalhes.tabela_vigente.data_inicio, 2, "white", "white") CoolTip:AddLine(Loc["STRING_SEGMENT_END"] .. ":", _detalhes.tabela_vigente.data_fim or "in progress", 2, "white", "white") end --> fill � a quantidade de menu que esta sendo mostrada if(instancia.segmento == 0) then if(fill - 2 == menuIndex) then CoolTip:SetLastSelected("main", fill + 0) elseif(fill - 1 == menuIndex) then CoolTip:SetLastSelected("main", fill + 1) else CoolTip:SetLastSelected("main", fill + 2) end menuIndex = nil end ----------- overall --CoolTip:AddLine(segmentos.overall_standard, _, 1, "white") Loc["STRING_REPORT_LAST"] .. " " .. fight_amount .. " " .. Loc["STRING_REPORT_FIGHTS"] CoolTip:AddLine(Loc["STRING_SEGMENT_OVERALL"], _, 1, "white") CoolTip:AddMenu(1, instancia.TrocaTabela, -1) CoolTip:AddIcon([[Interface\QUESTFRAME\UI-Quest-BulletPoint]], "main", "left", 16, 16, nil, nil, nil, nil, "orange") local enemy_name = _detalhes.tabela_overall.overall_enemy_name CoolTip:AddLine(Loc["STRING_SEGMENT_ENEMY"] .. ":", enemy_name, 2, "white", "white") local combat_time = _detalhes.tabela_overall:GetCombatTime() local minutos, segundos = _math_floor(combat_time / 60), _math_floor(combat_time % 60) CoolTip:AddLine(Loc["STRING_SEGMENTS_LIST_COMBATTIME"] .. ":", minutos.."m "..segundos.."s", 2, "white", "white") --CoolTip:SetWallpaper(2,[[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsComparisonBackground]], {0.085, 166/256, 0, 1}, {.42, .4, .4, 0.9}, true) if(_detalhes.tooltip.submenu_wallpaper) then --CoolTip:SetWallpaper(2,[[Interface\PetPaperDollFrame\PetStatsBG-Hunter]], {321/512, 0, 0, 190/512}, {1, 1, 1, 0.9}, true) --CoolTip:SetWallpaper(2,[[Interface\ACHIEVEMENTFRAME\UI-Achievement-StatsComparisonBackground]], {166/256, 1, 0, 1}, {1, 1, 1, 0.9}, true) else --> wallpaper = main window --CoolTip:SetWallpaper(2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end CoolTip:AddLine(Loc["STRING_SEGMENT_START"] .. ":", _detalhes.tabela_overall.data_inicio, 2, "white", "white") CoolTip:AddLine(Loc["STRING_SEGMENT_END"] .. ":", _detalhes.tabela_overall.data_fim, 2, "white", "white") -- combats added local combats_added = _detalhes.tabela_overall.segments_added or _detalhes.empty_table CoolTip:AddLine(Loc["STRING_SEGMENTS"] .. ":", #combats_added, 2, "white", "white") if(#combats_added > 0) then CoolTip:AddLine("", "", 2, "white", "white") end for i, segment in _ipairs(combats_added) do local minutos, segundos = _math_floor(segment.elapsed/60), _math_floor(segment.elapsed%60) local name = segment.name if(name:len() > 20) then name = string.sub(name, 1, #name -(#name - 20)) end CoolTip:AddLine("" .. name, minutos.."m "..segundos.."s", 2, "white", "white") local segmentType = segment.type if(segmentType == DETAILS_SEGMENTTYPE_RAID_TRASH or segmentType == DETAILS_SEGMENTTYPE_DUNGEON_TRASH) then CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], 2, 1, 10, 8, 0.02734375, 0.11328125, 0.19140625, 0.3125) elseif(segmentType == DETAILS_SEGMENTTYPE_RAID_BOSS) then CoolTip:AddIcon([[Interface\AddOns\Details\images\icons]], 2, 1, 12, 12, 0.96875, 1, 0, 0.03125) end --CoolTip:AddStatusBar(100, 2, 0, 0, 0, 0.2, false, false, "Skyline") end --> fill � a quantidade de menu que esta sendo mostrada if(instancia.segmento == -1) then if(fill - 2 == menuIndex) then CoolTip:SetLastSelected("main", fill + 1) elseif(fill - 1 == menuIndex) then CoolTip:SetLastSelected("main", fill + 2) else CoolTip:SetLastSelected("main", fill + 3) end menuIndex = nil end --------------------------------------------- _detalhes:SetMenuOwner(self, instancia) CoolTip:SetOption("TextSize", _detalhes.font_sizes.menus) CoolTip:SetOption("TextFont", _detalhes.font_faces.menus) CoolTip:SetOption("SubMenuIsTooltip", true) CoolTip:SetOption("ButtonHeightMod", -4) CoolTip:SetOption("ButtonsYMod", -10) CoolTip:SetOption("YSpacingMod", 1) CoolTip:SetOption("ButtonHeightModSub", 4) CoolTip:SetOption("ButtonsYModSub", 0) CoolTip:SetOption("YSpacingModSub", -4) CoolTip:SetOption("HeighMod", 12) _detalhes:SetTooltipMinWidth() --CoolTip:SetWallpaper(1, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) --CoolTip:SetBackdrop(1, menus_backdrop, nil, menus_bordercolor) --CoolTip:SetBackdrop(2, menus_backdrop, nil, menus_bordercolor) _detalhes:FormatCooltipBackdrop() show_anti_overlap(instancia, self, "top") CoolTip:ShowCooltip() self:SetScript("OnUpdate", nil) end end -- ~skin function _detalhes:SetUserCustomSkinFile(file) if(type(file) ~= "string") then error("SetUserCustomSkinFile() file must be a string.") end if(file:find("\\") or file:find("/")) then error("SetUserCustomSkinFile() file must be only the file name(with out up folders) and slashes.") end self.skin_custom = file self:ChangeSkin() end function _detalhes:RefreshMicroDisplays() _detalhes.StatusBar:UpdateOptions(self) end --from weakauras, list of functions to block on scripts --source https://github.com/WeakAuras/WeakAuras2/blob/520951a4b49b64cb49d88c1a8542d02bbcdbe412/WeakAuras/AuraEnvironment.lua#L66 local blockedFunctions = { -- Lua functions that may allow breaking out of the environment getfenv = true, getfenv = true, loadstring = true, pcall = true, xpcall = true, getglobal = true, -- blocked WoW API SendMail = true, SetTradeMoney = true, AddTradeMoney = true, PickupTradeMoney = true, PickupPlayerMoney = true, TradeFrame = true, MailFrame = true, EnumerateFrames = true, RunScript = true, AcceptTrade = true, SetSendMailMoney = true, EditMacro = true, SlashCmdList = true, DevTools_DumpCommand = true, hash_SlashCmdList = true, CreateMacro = true, SetBindingMacro = true, GuildDisband = true, GuildUninvite = true, securecall = true, --additional setmetatable = true, } --function filter local functionFilter = setmetatable({}, {__index = function(env, key) if(key == "_G") then return env elseif(blockedFunctions[key]) then return nil else return _G[key] end end}) function _detalhes:ChangeSkin(skin_name) if(not skin_name) then skin_name = self.skin end local this_skin = _detalhes.skins[skin_name] if(not this_skin) then skin_name = _detalhes.default_skin_to_use this_skin = _detalhes.skins[skin_name] end local just_updating = false if(self.skin == skin_name) then just_updating = true end if(not just_updating) then --> skin updater --print("debug", self.meu_id, self.iniciada, self.baseframe, self.bgframe) if(self.bgframe.skin_script) then self.bgframe:SetScript("OnUpdate", nil) self.bgframe.skin_script = false end --> reset all config self:ResetInstanceConfigKeepingValues(true) --> overwrites local overwrite_cprops = this_skin.instance_cprops if(overwrite_cprops) then local copy = table_deepcopy(overwrite_cprops) for cprop, value in _pairs(copy) do if(not _detalhes.instance_skin_ignored_values[cprop]) then if(type(value) == "table") then for cprop2, value2 in _pairs(value) do self[cprop][cprop2] = value2 end else self[cprop] = value end end end end --> reset micro frames _detalhes.StatusBar:Reset(self) --> customize micro frames if(this_skin.micro_frames) then if(this_skin.micro_frames.left) then _detalhes.StatusBar:SetPlugin(self, this_skin.micro_frames.left, "left") end if(this_skin.micro_frames.textxmod) then _detalhes.StatusBar:ApplyOptions(self.StatusBar.left, "textxmod", this_skin.micro_frames.textxmod) _detalhes.StatusBar:ApplyOptions(self.StatusBar.center, "textxmod", this_skin.micro_frames.textxmod) _detalhes.StatusBar:ApplyOptions(self.StatusBar.right, "textxmod", this_skin.micro_frames.textxmod) end if(this_skin.micro_frames.textymod) then _detalhes.StatusBar:ApplyOptions(self.StatusBar.left, "textymod", this_skin.micro_frames.textymod) _detalhes.StatusBar:ApplyOptions(self.StatusBar.center, "textymod", this_skin.micro_frames.textymod) _detalhes.StatusBar:ApplyOptions(self.StatusBar.right, "textymod", this_skin.micro_frames.textymod) end if(this_skin.micro_frames.hidden) then _detalhes.StatusBar:ApplyOptions(self.StatusBar.left, "hidden", this_skin.micro_frames.hidden) _detalhes.StatusBar:ApplyOptions(self.StatusBar.center, "hidden", this_skin.micro_frames.hidden) _detalhes.StatusBar:ApplyOptions(self.StatusBar.right, "hidden", this_skin.micro_frames.hidden) end if(this_skin.micro_frames.color) then _detalhes.StatusBar:ApplyOptions(self.StatusBar.left, "textcolor", this_skin.micro_frames.color) _detalhes.StatusBar:ApplyOptions(self.StatusBar.center, "textcolor", this_skin.micro_frames.color) _detalhes.StatusBar:ApplyOptions(self.StatusBar.right, "textcolor", this_skin.micro_frames.color) end if(this_skin.micro_frames.font) then _detalhes.StatusBar:ApplyOptions(self.StatusBar.left, "textface", this_skin.micro_frames.font) _detalhes.StatusBar:ApplyOptions(self.StatusBar.center, "textface", this_skin.micro_frames.font) _detalhes.StatusBar:ApplyOptions(self.StatusBar.right, "textface", this_skin.micro_frames.font) end if(this_skin.micro_frames.size) then _detalhes.StatusBar:ApplyOptions(self.StatusBar.left, "textsize", this_skin.micro_frames.size) _detalhes.StatusBar:ApplyOptions(self.StatusBar.center, "textsize", this_skin.micro_frames.size) _detalhes.StatusBar:ApplyOptions(self.StatusBar.right, "textsize", this_skin.micro_frames.size) end end end self.skin = skin_name local skin_file = this_skin.file --> set textures if(self.skin_custom ~= "") then skin_file = "Interface\\" .. self.skin_custom end self.baseframe.cabecalho.ball:SetTexture(skin_file) --> bola esquerda self.baseframe.cabecalho.emenda:SetTexture(skin_file) --> emenda que liga a bola a textura do centro self.baseframe.cabecalho.ball_r:SetTexture(skin_file) --> bola direita onde fica o bot�o de fechar self.baseframe.cabecalho.top_bg:SetTexture(skin_file) --> top background self.baseframe.barra_esquerda:SetTexture(skin_file) --> barra lateral self.baseframe.barra_direita:SetTexture(skin_file) --> barra lateral self.baseframe.barra_fundo:SetTexture(skin_file) --> barra inferior self.baseframe.scroll_up:SetTexture(skin_file) --> scrollbar parte de cima self.baseframe.scroll_down:SetTexture(skin_file) --> scrollbar parte de baixo self.baseframe.scroll_middle:SetTexture(skin_file) --> scrollbar parte do meio self.baseframe.rodape.top_bg:SetTexture(skin_file) --> rodape top background self.baseframe.rodape.esquerdo:SetTexture(skin_file) --> rodape esquerdo self.baseframe.rodape.direita:SetTexture(skin_file) --> rodape direito self.baseframe.rodape.esquerdo_nostatusbar:SetTexture(skin_file) --> rodape direito self.baseframe.rodape.direita_nostatusbar:SetTexture(skin_file) --> rodape direito self.baseframe.button_stretch.texture:SetTexture(skin_file) --> bot�o de esticar a janela self.baseframe.resize_direita.texture:SetTexture(skin_file) --> bot�o de redimencionar da direita self.baseframe.resize_esquerda.texture:SetTexture(skin_file) --> bot�o de redimencionar da esquerda self.break_snap_button:SetNormalTexture(skin_file) --> cadeado self.break_snap_button:SetDisabledTexture(skin_file) self.break_snap_button:SetHighlightTexture(skin_file, "ADD") self.break_snap_button:SetPushedTexture(skin_file) --> update toolbar icons local toolbar_buttons = {} do local toolbar_icon_file = self.toolbar_icon_file if(not toolbar_icon_file) then toolbar_icon_file =[[Interface\AddOns\Details\images\toolbar_icons]] end toolbar_buttons[1] = self.baseframe.cabecalho.modo_selecao toolbar_buttons[2] = self.baseframe.cabecalho.segmento toolbar_buttons[3] = self.baseframe.cabecalho.atributo toolbar_buttons[4] = self.baseframe.cabecalho.report toolbar_buttons[5] = self.baseframe.cabecalho.reset toolbar_buttons[6] = self.baseframe.cabecalho.fechar for i = 1, #toolbar_buttons do local button = toolbar_buttons[i] button:SetNormalTexture(toolbar_icon_file) button:SetHighlightTexture(toolbar_icon_file) button:SetPushedTexture(toolbar_icon_file) end end ----------> icon anchor and size if(self.modo == 1 or self.modo == 4 or self.atributo == 5) then -- alone e raid local icon_anchor = this_skin.icon_anchor_plugins self.baseframe.cabecalho.atributo_icon:SetPoint("topright", self.baseframe.cabecalho.ball_point, "topright", icon_anchor[1], icon_anchor[2]) if(self.modo == 1) then if(_detalhes.SoloTables.Plugins[1] and _detalhes.SoloTables.Mode) then local plugin_index = _detalhes.SoloTables.Mode if(plugin_index > 0 and _detalhes.SoloTables.Menu[plugin_index]) then self:ChangeIcon(_detalhes.SoloTables.Menu[plugin_index][2]) end end elseif(self.modo == 4) then --if(_detalhes.RaidTables.Plugins[1] and _detalhes.RaidTables.Mode) then -- local plugin_index = _detalhes.RaidTables.Mode -- if(plugin_index and _detalhes.RaidTables.Menu[plugin_index]) then --self:ChangeIcon(_detalhes.RaidTables.Menu[plugin_index][2]) -- end --end end else local icon_anchor = this_skin.icon_anchor_main --> ancora do icone do canto direito superior self.baseframe.cabecalho.atributo_icon:SetPoint("topright", self.baseframe.cabecalho.ball_point, "topright", icon_anchor[1], icon_anchor[2]) self:ChangeIcon() end ----------> lock alpha head if(not this_skin.can_change_alpha_head) then self.baseframe.cabecalho.ball:SetAlpha(100) else self.baseframe.cabecalho.ball:SetAlpha(self.color[4]) end ----------> update abbreviation function on the class files _detalhes.atributo_damage:UpdateSelectedToKFunction() _detalhes.atributo_heal:UpdateSelectedToKFunction() _detalhes.atributo_energy:UpdateSelectedToKFunction() _detalhes.atributo_misc:UpdateSelectedToKFunction() _detalhes.atributo_custom:UpdateSelectedToKFunction() ----------> call widgets handlers self:SetBarSettings(self.row_info.height) self:SetBarBackdropSettings() self:SetBarSpecIconSettings() self:SetBarRightTextSettings() --> update toolbar self:ToolbarSide() --> update stretch button self:StretchButtonAnchor() --> update side bars if(self.show_sidebars) then self:ShowSideBars() else self:HideSideBars() end --> refresh the side of the micro displays and its lock state self:MicroDisplaysSide() self:MicroDisplaysLock() self:RefreshMicroDisplays() --> update statusbar if(self.show_statusbar) then self:ShowStatusBar() else self:HideStatusBar() end --> update wallpaper if(self.wallpaper.enabled) then self:InstanceWallpaper(true) else self:InstanceWallpaper(false) end --> update instance color self:InstanceColor() self:SetBackgroundColor() self:SetBackgroundAlpha() self:SetAutoHideMenu() self:SetBackdropTexture() --> refresh all bars self:InstanceRefreshRows() --> update menu saturation self:DesaturateMenu() --> update statusbar color self:StatusBarColor() --> update attribute string self:AttributeMenu() --> update top menus self:LeftMenuAnchorSide() --> update window strata level self:SetFrameStrata() --> update the combat alphas self:SetCombatAlpha(nil, nil, true) --> update icons _detalhes.ToolBar:ReorganizeIcons(true) --call self:SetMenuAlpha() --> refresh options panel if opened if(_G.DetailsOptionsWindow and _G.DetailsOptionsWindow:IsShown() and not _G.DetailsOptionsWindow.IsLoading) then _detalhes:OpenOptionsWindow(self) end --> auto interact if(self.menu_alpha.enabled) then self:SetMenuAlpha(nil, nil, nil, nil, self.is_interacting) end --> set the scale self:SetWindowScale() --> refresh lock buttons self:RefreshLockedState() --> clear any control sscript running in this instance self.bgframe:SetScript("OnUpdate", nil) self.bgframe.skin_script = nil --> check if the skin has control scripts to run if(not just_updating or _detalhes.initializing) then local callbackFunc = this_skin.callback if(callbackFunc) then setfenv(callbackFunc, functionFilter) local okey, result = pcall(callbackFunc, this_skin, self, just_updating) if(not okey) then _detalhes:Msg("|cFFFF9900error on skin callback function|r:", result) end end if(this_skin.control_script) then local onStartScript = this_skin.control_script_on_start if(onStartScript) then setfenv(onStartScript, functionFilter) local okey, result = pcall(onStartScript, this_skin, self) if(not okey) then _detalhes:Msg("|cFFFF9900error on skin control on start function|r:", result) end end local controlFunc = this_skin.control_script setfenv(controlFunc, functionFilter) self.bgframe:SetScript("OnUpdate", controlFunc) self.bgframe.skin_script = true self.bgframe.skin = this_skin end end self:UpdateClickThrough() end --update the window click through state local updateClickThroughListener = _detalhes:CreateEventListener() function updateClickThroughListener:EnterCombat() _detalhes:InstanceCall(function(instance) C_Timer.After(1.5, function() instance:UpdateClickThrough() end) end) end function updateClickThroughListener:LeaveCombat() _detalhes:InstanceCall(function(instance) C_Timer.After(1.5, function() instance:UpdateClickThrough() end) end) end updateClickThroughListener:RegisterEvent("COMBAT_PLAYER_ENTER", "EnterCombat") updateClickThroughListener:RegisterEvent("COMBAT_PLAYER_LEAVE", "EnterCombat") function _detalhes:UpdateClickThroughSettings(inCombat, window, bars, toolbaricons) if(inCombat ~= nil) then self.clickthrough_incombatonly = inCombat end if(window ~= nil) then self.clickthrough_window = window end if(bars ~= nil) then self.clickthrough_rows = bars end if(toolbaricons ~= nil) then self.clickthrough_toolbaricons = toolbaricons end self:UpdateClickThrough() end function _detalhes:UpdateClickThrough() local barsClickThrough = self.clickthrough_rows local windowClickThrough = self.clickthrough_window local onlyInCombat = self.clickthrough_incombatonly local toolbarIcons = not self.clickthrough_toolbaricons if(onlyInCombat) then if(InCombatLockdown()) then --player bars if(barsClickThrough) then for barIndex, barObject in _ipairs(self.barras) do barObject:EnableMouse(false) end else for barIndex, barObject in _ipairs(self.barras) do barObject:EnableMouse(true) end end --window frames if(windowClickThrough) then self.baseframe:EnableMouse(false) self.bgframe:EnableMouse(false) self.rowframe:EnableMouse(false) self.floatingframe:EnableMouse(false) self.windowSwitchButton:EnableMouse(false) self.windowBackgroundDisplay:EnableMouse(false) self.baseframe.UPFrame:EnableMouse(false) else self.baseframe:EnableMouse(true) self.bgframe:EnableMouse(true) self.rowframe:EnableMouse(true) self.floatingframe:EnableMouse(true) self.windowSwitchButton:EnableMouse(true) self.windowBackgroundDisplay:EnableMouse(true) self.baseframe.UPFrame:EnableMouse(true) end --titlebar icons local toolbar_buttons = {} toolbar_buttons[1] = self.baseframe.cabecalho.modo_selecao toolbar_buttons[2] = self.baseframe.cabecalho.segmento toolbar_buttons[3] = self.baseframe.cabecalho.atributo toolbar_buttons[4] = self.baseframe.cabecalho.report toolbar_buttons[5] = self.baseframe.cabecalho.reset toolbar_buttons[6] = self.baseframe.cabecalho.fechar for i, button in ipairs(toolbar_buttons) do button:EnableMouse(toolbar_buttons) end else --player bars for barIndex, barObject in _ipairs(self.barras) do barObject:EnableMouse(true) end --window frames self.baseframe:EnableMouse(true) self.bgframe:EnableMouse(true) self.rowframe:EnableMouse(true) self.floatingframe:EnableMouse(true) self.windowSwitchButton:EnableMouse(true) self.windowBackgroundDisplay:EnableMouse(true) self.baseframe.UPFrame:EnableMouse(true) --titlebar icons, forcing true because the player isn't in combat and the inCombat setting is enabled local toolbar_buttons = {} toolbar_buttons[1] = self.baseframe.cabecalho.modo_selecao toolbar_buttons[2] = self.baseframe.cabecalho.segmento toolbar_buttons[3] = self.baseframe.cabecalho.atributo toolbar_buttons[4] = self.baseframe.cabecalho.report toolbar_buttons[5] = self.baseframe.cabecalho.reset toolbar_buttons[6] = self.baseframe.cabecalho.fechar for i, button in ipairs(toolbar_buttons) do button:EnableMouse(true) end end else --player bars if(barsClickThrough) then for barIndex, barObject in _ipairs(self.barras) do barObject:EnableMouse(false) end else for barIndex, barObject in _ipairs(self.barras) do barObject:EnableMouse(true) end end --window frame if(windowClickThrough) then self.baseframe:EnableMouse(false) self.bgframe:EnableMouse(false) self.rowframe:EnableMouse(false) self.floatingframe:EnableMouse(false) self.windowSwitchButton:EnableMouse(false) self.windowBackgroundDisplay:EnableMouse(false) self.baseframe.UPFrame:EnableMouse(false) else self.baseframe:EnableMouse(true) self.bgframe:EnableMouse(true) self.rowframe:EnableMouse(true) self.floatingframe:EnableMouse(true) self.windowSwitchButton:EnableMouse(true) self.windowBackgroundDisplay:EnableMouse(true) self.baseframe.UPFrame:EnableMouse(true) end --titlebar icons local toolbar_buttons = {} toolbar_buttons[1] = self.baseframe.cabecalho.modo_selecao toolbar_buttons[2] = self.baseframe.cabecalho.segmento toolbar_buttons[3] = self.baseframe.cabecalho.atributo toolbar_buttons[4] = self.baseframe.cabecalho.report toolbar_buttons[5] = self.baseframe.cabecalho.reset toolbar_buttons[6] = self.baseframe.cabecalho.fechar for i, button in ipairs(toolbar_buttons) do button:EnableMouse(toolbarIcons) end end end --endd function _detalhes:DelayedCheckCombatAlpha(instance) if(UnitAffectingCombat("player") or InCombatLockdown()) then instance:SetWindowAlphaForCombat(true, true) --> hida a janela else instance:SetWindowAlphaForCombat(false) --> deshida a janela end end function _detalhes:DelayedCheckOutOfCombatAlpha(instance) if(UnitAffectingCombat("player") or InCombatLockdown()) then instance:SetWindowAlphaForCombat(false) --> deshida a janela else instance:SetWindowAlphaForCombat(true, true) --> hida a janela end end function _detalhes:DelayedCheckOutOfCombatAndGroupAlpha(instance) if((_detalhes.zone_type == "raid" or _detalhes.zone_type == "party") and IsInInstance()) then if(UnitAffectingCombat("player") or InCombatLockdown()) then instance:SetWindowAlphaForCombat(true, true) --> hida a janela else instance:SetWindowAlphaForCombat(false) --> deshida a janela end else instance:SetWindowAlphaForCombat(true, true) --> hida a janela end end function _detalhes:SetCombatAlpha(modify_type, alpha_amount, interacting) if(interacting) then if(self.hide_in_combat_type == 1) then --None return elseif(self.hide_in_combat_type == 2) then --While In Combat _detalhes:ScheduleTimer("DelayedCheckCombatAlpha", 0.3, self) elseif(self.hide_in_combat_type == 3) then --"While Out of Combat" _detalhes:ScheduleTimer("DelayedCheckOutOfCombatAlpha", 0.3, self) elseif(self.hide_in_combat_type == 4) then --"While Out of a Group" if(_detalhes.in_group) then self:SetWindowAlphaForCombat(false) --> deshida a janela else self:SetWindowAlphaForCombat(true, true) --> hida a janela end elseif(self.hide_in_combat_type == 5) then --"While Not Inside Instance" local isInInstance = IsInInstance() if(isInInstance or _detalhes.zone_type == "raid" or _detalhes.zone_type == "party") then self:SetWindowAlphaForCombat(false) --> deshida a janela else self:SetWindowAlphaForCombat(true, true) --> hida a janela end elseif(self.hide_in_combat_type == 6) then --"While Inside Instance" local isInInstance = IsInInstance() if(isInInstance or _detalhes.zone_type == "raid" or _detalhes.zone_type == "party") then self:SetWindowAlphaForCombat(true, true) --> hida a janela else self:SetWindowAlphaForCombat(false) --> deshida a janela end elseif(self.hide_in_combat_type == 7) then --"Raid Debug" = Out of Combat and Inside Raid or Dungeon _detalhes:ScheduleTimer("DelayedCheckOutOfCombatAndGroupAlpha", 0.3, self) elseif self.hide_in_combat_type == 8 then --"In Battlegrounds" local isInInstance = IsInInstance() if isInInstance and _detalhes.zone_type == "pvp" then self:SetWindowAlphaForCombat(true, true) --> hida a janela else self:SetWindowAlphaForCombat(false) --> deshida a janela end end return end if(not modify_type) then modify_type = self.hide_in_combat_type else if(modify_type == 1) then --> changed to none self:SetWindowAlphaForCombat(false) end end if(not alpha_amount) then alpha_amount = self.hide_in_combat_alpha end self.hide_in_combat_type = modify_type self.hide_in_combat_alpha = alpha_amount self:SetCombatAlpha(nil, nil, true) end function _detalhes:SetFrameStrata(strata) if(not strata) then strata = self.strata end self.strata = strata self.rowframe:SetFrameStrata(strata) self.baseframe:SetFrameStrata(strata) if(strata == "BACKGROUND") then self.break_snap_button:SetFrameStrata("LOW") self.baseframe.resize_esquerda:SetFrameStrata("LOW") self.baseframe.resize_direita:SetFrameStrata("LOW") self.baseframe.lock_button:SetFrameStrata("LOW") elseif(strata == "LOW") then self.break_snap_button:SetFrameStrata("MEDIUM") self.baseframe.resize_esquerda:SetFrameStrata("MEDIUM") self.baseframe.resize_direita:SetFrameStrata("MEDIUM") self.baseframe.lock_button:SetFrameStrata("MEDIUM") elseif(strata == "MEDIUM") then self.break_snap_button:SetFrameStrata("HIGH") self.baseframe.resize_esquerda:SetFrameStrata("HIGH") self.baseframe.resize_direita:SetFrameStrata("HIGH") self.baseframe.lock_button:SetFrameStrata("HIGH") elseif(strata == "HIGH") then self.break_snap_button:SetFrameStrata("DIALOG") self.baseframe.resize_esquerda:SetFrameStrata("DIALOG") self.baseframe.resize_direita:SetFrameStrata("DIALOG") self.baseframe.lock_button:SetFrameStrata("DIALOG") elseif(strata == "DIALOG") then self.break_snap_button:SetFrameStrata("FULLSCREEN") self.baseframe.resize_esquerda:SetFrameStrata("FULLSCREEN") self.baseframe.resize_direita:SetFrameStrata("FULLSCREEN") self.baseframe.lock_button:SetFrameStrata("FULLSCREEN") end self:StretchButtonAlwaysOnTop() 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(text with attribute name) function _detalhes:RefreshAttributeTextSize() if(self.attribute_text.enabled and self.total_buttons_shown and self.baseframe and self.menu_attribute_string) then local window_width = self:GetSize() if(self.auto_hide_menu.left and not self.is_interacting) then self.menu_attribute_string:SetWidth(window_width) self.menu_attribute_string:SetHeight(self.attribute_text.text_size + 2) return end local buttons_shown = self.total_buttons_shown local buttons_width, buttons_spacement = self.menu_icons_size * 16, self.menu_icons.space local width_by_buttons =(buttons_shown * buttons_width) +(buttons_spacement *(buttons_shown - 1)) local text_size = window_width - width_by_buttons - 6 self.menu_attribute_string:SetWidth(text_size) self.menu_attribute_string:SetHeight(self.attribute_text.text_size + 2) end end -- ~encounter ~timer function _detalhes:CheckForTextTimeCounter(combat_start) if(combat_start) then if(_detalhes.tabela_vigente.is_boss) then local lower = _detalhes:GetLowerInstanceNumber() if(lower) then local instance = _detalhes:GetInstance(lower) if(instance.baseframe and instance:IsEnabled()) then if(instance.attribute_text.show_timer[1]) then if(_detalhes.instance_title_text_timer[instance.meu_id]) then _detalhes:CancelTimer(_detalhes.instance_title_text_timer[instance.meu_id]) end _detalhes.instance_title_text_timer[instance.meu_id] = _detalhes:ScheduleRepeatingTimer("TitleTextTickTimer", 1, instance) end end else return end else if(_detalhes.in_combat and _detalhes.zone_type == "raid") then _detalhes:ScheduleTimer("CheckForTextTimeCounter", 3, true) end end else for _, instance in ipairs(_detalhes.tabela_instancias) do if(_detalhes.instance_title_text_timer[instance.meu_id] and instance.baseframe and instance:IsEnabled() and instance.menu_attribute_string) then _detalhes:CancelTimer(_detalhes.instance_title_text_timer[instance.meu_id]) local current_text = instance.menu_attribute_string:GetText() current_text = current_text:gsub("%[.*%] ", "") instance.menu_attribute_string:SetText(current_text) end end end end local format_timer = function(t) local m, s = _math_floor(t/60), _math_floor(t%60) if(m < 1) then m = "00" elseif(m < 10) then m = "0" .. m end if(s < 10) then s = "0" .. s end return "[" .. m .. ":" .. s .. "]" end function _detalhes:TitleTextTickTimer(instance) if(instance.attribute_text.enabled) then local current_text = instance.menu_attribute_string:GetText() if(not current_text:find("%[.*%]")) then instance.menu_attribute_string:SetText("[00:01] " .. current_text) else local timer = format_timer(_detalhes.tabela_vigente:GetCombatTime()) current_text = current_text:gsub("%[.*%]", timer) instance.menu_attribute_string:SetText(current_text) end end end function _detalhes:SetTitleBarText(text) if(self.attribute_text.enabled and self.menu_attribute_string) then self.menu_attribute_string:SetText(text) end end -- ~titletext function _detalhes:AttributeMenu(enabled, pos_x, pos_y, font, size, color, side, shadow, timer_encounter, timer_bg, timer_arena) 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 if(type(shadow) ~= "boolean") then shadow = self.attribute_text.shadow end if(type(timer_encounter) ~= "boolean") then timer_encounter = self.attribute_text.show_timer[1] end if(type(timer_bg) ~= "boolean") then timer_bg = self.attribute_text.show_timer[2] end if(type(timer_arena) ~= "boolean") then timer_arena = self.attribute_text.show_timer[3] 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 self.attribute_text.shadow = shadow self.attribute_text.show_timer[1] = timer_encounter self.attribute_text.show_timer[2] = timer_bg self.attribute_text.show_timer[3] = timer_arena --> enabled if(not enabled and self.menu_attribute_string) then return self.menu_attribute_string:Hide() elseif(not enabled) then return end --> protection against failed clean up framework table if(self.menu_attribute_string and not getmetatable(self.menu_attribute_string)) then self.menu_attribute_string = nil 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 local sName = instance:GetInstanceAttributeText() label.text = sName end end _detalhes:RegisterEvent(self.menu_attribute_string, "DETAILS_INSTANCE_CHANGEATTRIBUTE", self.menu_attribute_string.OnEvent) _detalhes:RegisterEvent(self.menu_attribute_string, "DETAILS_INSTANCE_CHANGEMODE", 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) --shadow _detalhes:SetFontOutline(self.menu_attribute_string, shadow) --refresh size self:RefreshAttributeTextSize() 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(transparency of buttons on the toolbar) ~autohide �utohide ~menuauto function _detalhes:SetAutoHideMenu(left, right, interacting) --30/07/2018: the separation by left and right menu icons doesn't exists for years, but it was still active in the code making --the toolbar icons show on initialization even when the options to auto hide them enabled. --the code to set the alpha was already updated to only one anhor(left) but this function was still calling to update the right anchor(deprecated) 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 if(self.baseframe.cabecalho.PluginIconsSeparator) then self.baseframe.cabecalho.PluginIconsSeparator:Show() end 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 if(self.baseframe.cabecalho.PluginIconsSeparator) then self.baseframe.cabecalho.PluginIconsSeparator:Hide() end 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 if(self.baseframe.cabecalho.PluginIconsSeparator) then self.baseframe.cabecalho.PluginIconsSeparator:Show() end else if(self.is_interacting) then self:InstanceButtonsColors(r, g, b, 1, true, true) --no save, only left if(self.baseframe.cabecalho.PluginIconsSeparator) then self.baseframe.cabecalho.PluginIconsSeparator:Show() end else self:InstanceButtonsColors(0, 0, 0, 0, true, true) --no save, only left if(self.baseframe.cabecalho.PluginIconsSeparator) then self.baseframe.cabecalho.PluginIconsSeparator:Hide() end 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 --]=] self:RefreshAttributeTextSize() --auto_hide_menu = {left = false, right = false}, end -- transparency for toolbar, borders and statusbar function _detalhes:SetMenuAlpha(enabled, onenter, onleave, ignorebars, 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 --ignorebars 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 if(ignorebars == nil) then ignorebars = self.menu_alpha.ignorebars end self.menu_alpha.enabled = enabled self.menu_alpha.onenter = onenter self.menu_alpha.onleave = onleave self.menu_alpha.ignorebars = ignorebars if(not enabled) then self.baseframe:SetAlpha(1) self.rowframe:SetAlpha(1) self:InstanceAlpha(self.color[4]) self:SetIconAlpha(1, nil, true) return self:InstanceColor(unpack(self.color)) --return self:SetWindowAlphaForInteract(self.color[4]) else local r, g, b = unpack(self.color) self:InstanceColor(r, g, b, 1) r, g, b = unpack(self.statusbar_info.overlay) self:StatusBarColor(r, g, b, 1) 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:MicroDisplaysLock(lockstate) if(lockstate == nil) then lockstate = self.micro_displays_locked end self.micro_displays_locked = lockstate if(lockstate) then --> is locked _detalhes.StatusBar:LockDisplays(self, true) else _detalhes.StatusBar:LockDisplays(self, false) end end function _detalhes:MicroDisplaysSide(side, fromuser) if(not side) then side = self.micro_displays_side end self.micro_displays_side = side _detalhes.StatusBar:ReloadAnchors(self) if(self.micro_displays_side == 2 and not self.show_statusbar) then --> bottom side _detalhes.StatusBar:Hide(self) if(fromuser) then _detalhes:Msg(Loc["STRING_OPTIONS_MICRODISPLAYWARNING"]) end elseif(self.micro_displays_side == 2) then _detalhes.StatusBar:Show(self) elseif(self.micro_displays_side == 1) then _detalhes.StatusBar:Show(self) end end function _detalhes:IsGroupedWith(instance) local id = instance:GetId() for side, instanceId in _pairs(self.snap) do if(instanceId == id) then return true end end return false end function _detalhes:GetInstanceGroup(instance_id) local instance = self if(instance_id) then instance = _detalhes:GetInstance(instance_id) if(not instance or not instance:IsEnabled()) then return end end local current_group = {instance} for side, insId in _pairs(instance.snap) do if(insId < instance:GetId()) then local last_id = instance:GetId() for i = insId, 1, -1 do local this_instance = _detalhes:GetInstance(i) local got = false if(this_instance and this_instance:IsEnabled()) then for side, id in _pairs(this_instance.snap) do if(id == last_id) then tinsert(current_group, this_instance) got = true last_id = i end end end if(not got) then break end end else local last_id = instance:GetId() for i = insId, _detalhes.instances_amount do local this_instance = _detalhes:GetInstance(i) local got = false if(this_instance and this_instance:IsEnabled()) then for side, id in _pairs(this_instance.snap) do if(id == last_id) then tinsert(current_group, this_instance) got = true last_id = i end end end if(not got) then break end end end end return current_group end function _detalhes:SetWindowScale(scale, from_options) if(not scale) then scale = self.window_scale end if(from_options) then local group = self:GetInstanceGroup() for _, instance in _ipairs(group) do instance.baseframe:SetScale(scale) instance.rowframe:SetScale(scale) instance.window_scale = scale end for _, instance in _ipairs(group) do _detalhes.move_janela_func(instance.baseframe, true, instance) _detalhes.move_janela_func(instance.baseframe, false, instance) end for _, instance in _ipairs(group) do instance:SaveMainWindowPosition() end else self.window_scale = scale self.baseframe:SetScale(scale) self.rowframe:SetScale(scale) --self:SaveMainWindowPosition() -- skin was replacing window_scale end end function _detalhes:ToolbarSide(side, only_update_anchors) if(not side) then side = self.toolbar_side end self.toolbar_side = side local skin = _detalhes.skins[self.skin] if(side == 1) then --> top local anchor_mod = not self.show_sidebars and skin.instance_cprops.show_sidebars_need_resize_by or 0 --> icon(ball) point self.baseframe.cabecalho.ball_point:ClearAllPoints() local x, y = unpack(skin.icon_point_anchor) x = x +(anchor_mod) self.baseframe.cabecalho.ball_point:SetPoint("bottomleft", self.baseframe, "topleft", x, y) --> ball if(self.hide_icon) then self.baseframe.cabecalho.ball:SetTexCoord(unpack(COORDS_LEFT_BALL_NO_ICON)) self.baseframe.cabecalho.emenda:SetTexCoord(unpack(COORDS_LEFT_CONNECTOR_NO_ICON)) else self.baseframe.cabecalho.ball:SetTexCoord(unpack(COORDS_LEFT_BALL)) self.baseframe.cabecalho.emenda:SetTexCoord(unpack(COORDS_LEFT_CONNECTOR)) end self.baseframe.cabecalho.ball:ClearAllPoints() local x, y = unpack(skin.left_corner_anchor) x = x +(anchor_mod) self.baseframe.cabecalho.ball:SetPoint("bottomleft", self.baseframe, "topleft", x, y) --> ball r self.baseframe.cabecalho.ball_r:SetTexCoord(unpack(COORDS_RIGHT_BALL)) self.baseframe.cabecalho.ball_r:ClearAllPoints() local x, y = unpack(skin.right_corner_anchor) x = x +((anchor_mod) * -1) self.baseframe.cabecalho.ball_r:SetPoint("bottomright", self.baseframe, "topright", x, y) --> tex coords self.baseframe.cabecalho.top_bg:SetTexCoord(unpack(COORDS_TOP_BACKGROUND)) --> up frames self.baseframe.UPFrame:SetPoint("left", self.baseframe.cabecalho.ball, "right", 0, -53) self.baseframe.UPFrame:SetPoint("right", self.baseframe.cabecalho.ball_r, "left", 0, -53) self.baseframe.UPFrameConnect:ClearAllPoints() self.baseframe.UPFrameConnect:SetPoint("bottomleft", self.baseframe, "topleft", 0, -1) self.baseframe.UPFrameConnect:SetPoint("bottomright", self.baseframe, "topright", 0, -1) self.baseframe.UPFrameLeftPart:ClearAllPoints() self.baseframe.UPFrameLeftPart:SetPoint("bottomleft", self.baseframe, "topleft", 0, 0) else --> bottom local y = 0 if(self.show_statusbar) then y = -14 end local anchor_mod = not self.show_sidebars and skin.instance_cprops.show_sidebars_need_resize_by or 0 --> ball point self.baseframe.cabecalho.ball_point:ClearAllPoints() local _x, _y = unpack(skin.icon_point_anchor_bottom) _x = _x +(anchor_mod) self.baseframe.cabecalho.ball_point:SetPoint("topleft", self.baseframe, "bottomleft", _x, _y + y) --> ball self.baseframe.cabecalho.ball:ClearAllPoints() local _x, _y = unpack(skin.left_corner_anchor_bottom) _x = _x +(anchor_mod) self.baseframe.cabecalho.ball:SetPoint("topleft", self.baseframe, "bottomleft", _x, _y + y) local l, r, t, b = unpack(COORDS_LEFT_BALL) self.baseframe.cabecalho.ball:SetTexCoord(l, r, b, t) --> ball r self.baseframe.cabecalho.ball_r:ClearAllPoints() local _x, _y = unpack(skin.right_corner_anchor_bottom) _x = _x +((anchor_mod) * -1) self.baseframe.cabecalho.ball_r:SetPoint("topright", self.baseframe, "bottomright", _x, _y + y) local l, r, t, b = unpack(COORDS_RIGHT_BALL) self.baseframe.cabecalho.ball_r:SetTexCoord(l, r, b, t) --> tex coords local l, r, t, b = unpack(COORDS_LEFT_CONNECTOR) self.baseframe.cabecalho.emenda:SetTexCoord(l, r, b, t) local l, r, t, b = unpack(COORDS_TOP_BACKGROUND) self.baseframe.cabecalho.top_bg:SetTexCoord(l, r, b, t) --> up frames self.baseframe.UPFrame:SetPoint("left", self.baseframe.cabecalho.ball, "right", 0, 53) self.baseframe.UPFrame:SetPoint("right", self.baseframe.cabecalho.ball_r, "left", 0, 53) self.baseframe.UPFrameConnect:ClearAllPoints() self.baseframe.UPFrameConnect:SetPoint("topleft", self.baseframe, "bottomleft", 0, 1) self.baseframe.UPFrameConnect:SetPoint("topright", self.baseframe, "bottomright", 0, 1) self.baseframe.UPFrameLeftPart:ClearAllPoints() self.baseframe.UPFrameLeftPart:SetPoint("topleft", self.baseframe, "bottomleft", 0, 0) end if(only_update_anchors) then --> ShowSideBars depends on this and creates a infinite loop return end --> update top menus self:LeftMenuAnchorSide() self:StretchButtonAnchor() self:HideMainIcon() if(self.show_sidebars) then self:ShowSideBars() end self:AttributeMenu() --> update the grow direction to update the gap between the titlebar and the baseframe self:SetBarGrowDirection() end function _detalhes:StretchButtonAlwaysOnTop(on_top) if(type(on_top) ~= "boolean") then on_top = self.grab_on_top end self.grab_on_top = on_top if(self.grab_on_top) then self.baseframe.button_stretch:SetFrameStrata("FULLSCREEN") else self.baseframe.button_stretch:SetFrameStrata(self.strata) end end function _detalhes:StretchButtonAnchor(side) if(not side) then side = self.stretch_button_side end if(side == 1 or string.lower(side) == "top") then self.baseframe.button_stretch:ClearAllPoints() local y = 0 if(self.toolbar_side == 2) then --bottom y = -20 end self.baseframe.button_stretch:SetPoint("bottom", self.baseframe, "top", 0, 20 + y) self.baseframe.button_stretch:SetPoint("right", self.baseframe, "right", -27, 0) self.baseframe.button_stretch.texture:SetTexCoord(unpack(COORDS_STRETCH)) self.stretch_button_side = 1 elseif(side == 2 or string.lower(side) == "bottom") then self.baseframe.button_stretch:ClearAllPoints() local y = 0 if(self.toolbar_side == 2) then --bottom y = y -20 end if(self.show_statusbar) then y = y -14 end self.baseframe.button_stretch:SetPoint("center", self.baseframe, "center") self.baseframe.button_stretch:SetPoint("top", self.baseframe, "bottom", 0, y) local l, r, t, b = unpack(COORDS_STRETCH) self.baseframe.button_stretch.texture:SetTexCoord(r, l, b, t) self.stretch_button_side = 2 end end function _detalhes:MenuAnchor(x, y) if(self.toolbar_side == 1) then --top if(not x) then x = self.menu_anchor[1] end if(not y) then y = self.menu_anchor[2] end self.menu_anchor[1] = x self.menu_anchor[2] = y elseif(self.toolbar_side == 2) then --bottom if(not x) then x = self.menu_anchor_down[1] end if(not y) then y = self.menu_anchor_down[2] end self.menu_anchor_down[1] = x self.menu_anchor_down[2] = y end local menu_points = self.menu_points -- = {MenuAnchorLeft, MenuAnchorRight} if(self.menu_anchor.side == 1) then --> left menu_points[1]:ClearAllPoints() if(self.toolbar_side == 1) then --> top menu_points[1]:SetPoint("bottomleft", self.baseframe.cabecalho.ball, "bottomright", x, y) -- y+2 else --> bottom menu_points[1]:SetPoint("topleft", self.baseframe.cabecalho.ball, "topright", x,(y*-1) - 4) end elseif(self.menu_anchor.side == 2) then --> right menu_points[2]:ClearAllPoints() if(self.toolbar_side == 1) then --> top menu_points[2]:SetPoint("topleft", self.baseframe.cabecalho.ball_r, "bottomleft", x, y+16) else --> bottom menu_points[2]:SetPoint("topleft", self.baseframe.cabecalho.ball_r, "topleft", x,(y*-1) - 4) end end self:ToolbarMenuButtons() end function _detalhes:HideMainIcon(value) if(type(value) ~= "boolean") then value = self.hide_icon end if(value) then self.hide_icon = true gump:Fade(self.baseframe.cabecalho.atributo_icon, 1) --self.baseframe.cabecalho.ball:SetParent(self.baseframe) if(self.toolbar_side == 1) then self.baseframe.cabecalho.ball:SetTexCoord(unpack(COORDS_LEFT_BALL_NO_ICON)) self.baseframe.cabecalho.emenda:SetTexCoord(unpack(COORDS_LEFT_CONNECTOR_NO_ICON)) elseif(self.toolbar_side == 2) then local l, r, t, b = unpack(COORDS_LEFT_BALL_NO_ICON) self.baseframe.cabecalho.ball:SetTexCoord(l, r, b, t) local l, r, t, b = unpack(COORDS_LEFT_CONNECTOR_NO_ICON) self.baseframe.cabecalho.emenda:SetTexCoord(l, r, b, t) end local skin = _detalhes.skins[self.skin] if(skin.icon_on_top) then self.baseframe.cabecalho.atributo_icon:SetParent(self.floatingframe) else self.baseframe.cabecalho.atributo_icon:SetParent(self.baseframe) end else self.hide_icon = false gump:Fade(self.baseframe.cabecalho.atributo_icon, 0) --self.baseframe.cabecalho.ball:SetParent(_detalhes.listener) if(self.toolbar_side == 1) then self.baseframe.cabecalho.ball:SetTexCoord(unpack(COORDS_LEFT_BALL)) self.baseframe.cabecalho.emenda:SetTexCoord(unpack(COORDS_LEFT_CONNECTOR)) elseif(self.toolbar_side == 2) then local l, r, t, b = unpack(COORDS_LEFT_BALL) self.baseframe.cabecalho.ball:SetTexCoord(l, r, b, t) local l, r, t, b = unpack(COORDS_LEFT_CONNECTOR) self.baseframe.cabecalho.emenda:SetTexCoord(l, r, b, t) end end end --> search key: ~desaturate function _detalhes:DesaturateMenu(value) if(value == nil) then value = self.desaturated_menu end if(value) then self.desaturated_menu = true self.baseframe.cabecalho.modo_selecao:GetNormalTexture():SetDesaturated(true) self.baseframe.cabecalho.segmento:GetNormalTexture():SetDesaturated(true) self.baseframe.cabecalho.atributo:GetNormalTexture():SetDesaturated(true) self.baseframe.cabecalho.report:GetNormalTexture():SetDesaturated(true) self.baseframe.cabecalho.reset:GetNormalTexture():SetDesaturated(true) self.baseframe.cabecalho.fechar:GetNormalTexture():SetDesaturated(true) if(self.meu_id == _detalhes:GetLowerInstanceNumber()) then for _, button in _ipairs(_detalhes.ToolBar.AllButtons) do button:GetNormalTexture():SetDesaturated(true) end end else self.desaturated_menu = false self.baseframe.cabecalho.modo_selecao:GetNormalTexture():SetDesaturated(false) self.baseframe.cabecalho.segmento:GetNormalTexture():SetDesaturated(false) self.baseframe.cabecalho.atributo:GetNormalTexture():SetDesaturated(false) self.baseframe.cabecalho.report:GetNormalTexture():SetDesaturated(false) self.baseframe.cabecalho.reset:GetNormalTexture():SetDesaturated(false) self.baseframe.cabecalho.fechar:GetNormalTexture():SetDesaturated(false) if(self.meu_id == _detalhes:GetLowerInstanceNumber()) then for _, button in _ipairs(_detalhes.ToolBar.AllButtons) do button:GetNormalTexture():SetDesaturated(false) end end end end function _detalhes:ShowSideBars(instancia) if(instancia) then self = instancia end self.show_sidebars = true self.baseframe.barra_esquerda:Show() self.baseframe.barra_direita:Show() --> set default spacings local this_skin = _detalhes.skins[self.skin] if(this_skin.instance_cprops and this_skin.instance_cprops.row_info and this_skin.instance_cprops.row_info.space) then self.row_info.space.left = this_skin.instance_cprops.row_info.space.left self.row_info.space.right = this_skin.instance_cprops.row_info.space.right else self.row_info.space.left = 3 self.row_info.space.right = -5 end if(self.show_statusbar) then self.baseframe.barra_esquerda:SetPoint("bottomleft", self.baseframe, "bottomleft", -56, -14) self.baseframe.barra_direita:SetPoint("bottomright", self.baseframe, "bottomright", 56, -14) if(self.toolbar_side == 2) then self.baseframe.barra_fundo:Show() local l, r, t, b = unpack(COORDS_BOTTOM_SIDE_BAR) self.baseframe.barra_fundo:SetTexCoord(l, r, b, t) self.baseframe.barra_fundo:ClearAllPoints() self.baseframe.barra_fundo:SetPoint("bottomleft", self.baseframe, "topleft", 0, -6) self.baseframe.barra_fundo:SetPoint("bottomright", self.baseframe, "topright", -1, -6) else self.baseframe.barra_fundo:Hide() end else self.baseframe.barra_esquerda:SetPoint("bottomleft", self.baseframe, "bottomleft", -56, 0) self.baseframe.barra_direita:SetPoint("bottomright", self.baseframe, "bottomright", 56, 0) self.baseframe.barra_fundo:Show() if(self.toolbar_side == 2) then --tooltbar on bottom local l, r, t, b = unpack(COORDS_BOTTOM_SIDE_BAR) self.baseframe.barra_fundo:SetTexCoord(l, r, b, t) self.baseframe.barra_fundo:ClearAllPoints() self.baseframe.barra_fundo:SetPoint("bottomleft", self.baseframe, "topleft", 0, -6) self.baseframe.barra_fundo:SetPoint("bottomright", self.baseframe, "topright", -1, -6) else --tooltbar on top self.baseframe.barra_fundo:SetTexCoord(unpack(COORDS_BOTTOM_SIDE_BAR)) self.baseframe.barra_fundo:ClearAllPoints() self.baseframe.barra_fundo:SetPoint("bottomleft", self.baseframe, "bottomleft", 0, -56) self.baseframe.barra_fundo:SetPoint("bottomright", self.baseframe, "bottomright", -1, -56) end end --self:SetBarGrowDirection() --passando true - apenas atulizar as anchors self:ToolbarSide(nil, true) end function _detalhes:HideSideBars(instancia) if(instancia) then self = instancia end self.show_sidebars = false local this_skin = _detalhes.skins[self.skin] local space_config = this_skin.instance_cprops and this_skin.instance_cprops.row_info and this_skin.instance_cprops.row_info.space if(space_config) then if(space_config.left_noborder) then self.row_info.space.left = space_config.left_noborder else self.row_info.space.left = 0 end if(space_config.right_noborder) then self.row_info.space.right = space_config.right_noborder else self.row_info.space.right = 0 end else self.row_info.space.left = 0 self.row_info.space.right = 0 end self.baseframe.barra_esquerda:Hide() self.baseframe.barra_direita:Hide() self.baseframe.barra_fundo:Hide() --self:SetBarGrowDirection() --j� � chamado no toolbarside --passando true - apenas atulizar as anchors self:ToolbarSide(nil, true) end function _detalhes:HideStatusBar(instancia) if(instancia) then self = instancia end self.show_statusbar = false self.baseframe.rodape.esquerdo:Hide() self.baseframe.rodape.direita:Hide() self.baseframe.rodape.top_bg:Hide() self.baseframe.rodape.StatusBarLeftAnchor:Hide() self.baseframe.rodape.StatusBarCenterAnchor:Hide() self.baseframe.DOWNFrame:Hide() --debug self.baseframe.rodape.direita_nostatusbar:Show() self.baseframe.rodape.esquerdo_nostatusbar:Show() -- if(self.toolbar_side == 2) then self:ToolbarSide() end if(self.show_sidebars) then self:ShowSideBars() end self:StretchButtonAnchor() if(self.micro_displays_side == 2) then --> bottom side _detalhes.StatusBar:Hide(self) --> mini displays widgets end 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.direita_nostatusbar:SetVertexColor(r, g, b) self.baseframe.rodape.esquerdo_nostatusbar:SetVertexColor(r, g, b) self.baseframe.rodape.direita_nostatusbar:SetAlpha(a) self.baseframe.rodape.esquerdo_nostatusbar: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 end self.show_statusbar = true self.baseframe.rodape.esquerdo:Show() self.baseframe.rodape.direita:Show() self.baseframe.rodape.top_bg:Show() self.baseframe.rodape.StatusBarLeftAnchor:Show() self.baseframe.rodape.StatusBarCenterAnchor:Show() self.baseframe.DOWNFrame:Show() --debug self.baseframe.rodape.direita_nostatusbar:Hide() self.baseframe.rodape.esquerdo_nostatusbar:Hide() -- self:ToolbarSide() self:StretchButtonAnchor() if(self.micro_displays_side == 2) then --> bottom side _detalhes.StatusBar:Show(self) --> mini displays widgets end end function _detalhes:SetTooltipBackdrop(border_texture, border_size, border_color) if(not border_texture) then border_texture = _detalhes.tooltip.border_texture end if(not border_size) then border_size = _detalhes.tooltip.border_size end if(not border_color) then border_color = _detalhes.tooltip.border_color end _detalhes.tooltip.border_texture = border_texture _detalhes.tooltip.border_size = border_size local c = _detalhes.tooltip.border_color local cc = _detalhes.tooltip_border_color c[1], c[2], c[3], c[4] = border_color[1], border_color[2], border_color[3], border_color[4] or 1 cc[1], cc[2], cc[3], cc[4] = border_color[1], border_color[2], border_color[3], border_color[4] or 1 _detalhes.tooltip_backdrop.edgeFile = SharedMedia:Fetch("border", border_texture) _detalhes.tooltip_backdrop.edgeSize = border_size end --> reset button functions local reset_button_onenter = function(self, _, forced, from_click) if(_detalhes.instances_menu_click_to_open and not forced) then return end local instancia = self._instance or self.widget._instance local baseframe = instancia.baseframe local GameCooltip = GameCooltip OnEnterMainWindow(self.instance, self) GameCooltip.buttonOver = true self.instance.baseframe.cabecalho.button_mouse_over = true if(self.instance.desaturated_menu) then self:GetNormalTexture():SetDesaturated(false) end GameCooltip:Reset() GameCooltip:SetType("menu") GameCooltip:SetOption("ButtonsYMod", -6) GameCooltip:SetOption("HeighMod", 6) GameCooltip:SetOption("YSpacingMod", -3) GameCooltip:SetOption("TextHeightMod", 0) GameCooltip:SetOption("IgnoreButtonAutoHeight", false) _detalhes:SetTooltipMinWidth() GameCooltip:AddLine(Loc["STRING_ERASE_DATA_OVERALL"], nil, 1, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus) GameCooltip:AddIcon([[Interface\Buttons\UI-StopButton]], 1, 1, 14, 14, 0, 1, 0, 1, "orange") GameCooltip:AddMenu(1, _detalhes.tabela_historico.resetar_overall) GameCooltip:AddLine("$div", nil, 1, nil, -5, -11) GameCooltip:AddLine(Loc["STRING_ERASE_DATA"], nil, 1, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus) GameCooltip:AddIcon([[Interface\Buttons\UI-StopButton]], 1, 1, 14, 14, 0, 1, 0, 1, "red") GameCooltip:AddMenu(1, _detalhes.tabela_historico.resetar) _detalhes:FormatCooltipBackdrop() --GameCooltip:SetWallpaper(1, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) --GameCooltip:SetBackdrop(1, menus_backdrop, nil, menus_bordercolor) show_anti_overlap(self.instance, self, "top") _detalhes:SetMenuOwner(self, self.instance) GameCooltip:ShowCooltip() end local reset_button_onleave = function(self) OnLeaveMainWindow(self.instance, self) if(self.instance.desaturated_menu) then self:GetNormalTexture():SetDesaturated(true) end hide_anti_overlap(self.instance.baseframe.anti_menu_overlap) GameCooltip.buttonOver = false self.instance.baseframe.cabecalho.button_mouse_over = false if(GameCooltip.active) then parameters_table[2] = 0 self:SetScript("OnUpdate", on_leave_menu) else self:SetScript("OnUpdate", nil) end end --> close button functions local close_button_onclick = function(self, button_type, button) if(self and not self.instancia and button and button.instancia) then self = button end self = self or button self:Disable() self.instancia:DesativarInstancia() --> n�o h� mais inst�ncias abertas, ent�o manda msg alertando if(_detalhes.opened_windows == 0) then _detalhes:Msg(Loc["STRING_CLOSEALL"]) end --> tutorial, how to fully delete a window --_detalhes:SetTutorialCVar("FULL_DELETE_WINDOW", false) if(not _detalhes:GetTutorialCVar("FULL_DELETE_WINDOW")) then _detalhes:SetTutorialCVar("FULL_DELETE_WINDOW", true) local panel = gump:Create1PxPanel(UIParent, 600, 100, "|cFFFFFFFFDetails!, the window hit the ground, bang bang...|r", nil, nil, nil, nil) panel:SetBackdropColor(0, 0, 0, 0.9) panel:SetPoint("center", UIParent, "center") local s = panel:CreateFontString(nil, "overlay", "GameFontNormal") s:SetPoint("center", panel, "center") s:SetText(Loc["STRING_TUTORIAL_FULLY_DELETE_WINDOW"]) panel:Show() end GameCooltip:Hide() end _detalhes.close_instancia_func = close_button_onclick local close_button_onenter = function(self) OnEnterMainWindow(self.instance, self, 3) if(self.instance.desaturated_menu) then self:GetNormalTexture():SetDesaturated(false) end local GameCooltip = GameCooltip GameCooltip.buttonOver = true self.instance.baseframe.cabecalho.button_mouse_over = true GameCooltip:Reset() GameCooltip:SetType("menu") GameCooltip:SetOption("ButtonsYMod", -7) GameCooltip:SetOption("ButtonsYModSub", -2) GameCooltip:SetOption("YSpacingMod", 0) GameCooltip:SetOption("YSpacingModSub", -3) GameCooltip:SetOption("TextHeightMod", 0) GameCooltip:SetOption("TextHeightModSub", 0) GameCooltip:SetOption("IgnoreButtonAutoHeight", false) GameCooltip:SetOption("IgnoreButtonAutoHeightSub", false) GameCooltip:SetOption("SubMenuIsTooltip", true) GameCooltip:SetOption("FixedWidthSub", 180) --GameCooltip:SetOption("FixedHeight", 30) GameCooltip:SetOption("HeighMod", 9) local font = SharedMedia:Fetch("font", "Friz Quadrata TT") GameCooltip:AddLine(Loc["STRING_MENU_CLOSE_INSTANCE"], nil, 1, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus) GameCooltip:AddIcon([[Interface\Buttons\UI-Panel-MinimizeButton-Up]], 1, 1, 14, 14, 0.2, 0.8, 0.2, 0.8) GameCooltip:AddMenu(1, close_button_onclick, self) GameCooltip:AddLine(Loc["STRING_MENU_CLOSE_INSTANCE_DESC"], nil, 2, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus) GameCooltip:AddIcon([[Interface\CHATFRAME\UI-ChatIcon-Minimize-Up]], 2, 1, 18, 18) GameCooltip:AddLine(Loc["STRING_MENU_CLOSE_INSTANCE_DESC2"], nil, 2, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus) GameCooltip:AddIcon([[Interface\PaperDollInfoFrame\UI-GearManager-LeaveItem-Transparent]], 2, 1, 18, 18) GameCooltip:SetWallpaper(1, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) GameCooltip:SetWallpaper(2, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) GameCooltip:SetBackdrop(1, menus_backdrop, nil, menus_bordercolor) GameCooltip:SetBackdrop(2, menus_backdrop, nil, menus_bordercolor) show_anti_overlap(self.instance, self, "top") _detalhes:SetMenuOwner(self, self.instance) GameCooltip:ShowCooltip() end local close_button_onleave = function(self) OnLeaveMainWindow(self.instance, self, 3) if(self.instance.desaturated_menu) then self:GetNormalTexture():SetDesaturated(true) end hide_anti_overlap(self.instance.baseframe.anti_menu_overlap) GameCooltip.buttonOver = false self.instance.baseframe.cabecalho.button_mouse_over = false if(GameCooltip.active) then parameters_table[2] = 0 self:SetScript("OnUpdate", on_leave_menu) else self:SetScript("OnUpdate", nil) end end ------------------------------------------------------------------------------------------------------------------------------------------------------------------ --> build upper menu bar local menu_can_open = function() if(GameCooltip.active) then local owner = GameCooltip:GetOwner() if(owner and owner:GetScript("OnUpdate") == on_leave_menu) then owner:SetScript("OnUpdate", nil) end return true end end local report_on_enter = function(self, motion, forced, from_click) local is_cooltip_opened = menu_can_open() -- and not is_cooltip_opened if(_detalhes.instances_menu_click_to_open and not forced) then return end local instancia = self._instance or self.widget._instance local baseframe = instancia.baseframe OnEnterMainWindow(instancia, self, 3) if(instancia.desaturated_menu) then self:GetNormalTexture():SetDesaturated(false) end GameCooltip.buttonOver = true baseframe.cabecalho.button_mouse_over = true GameCooltip:Reset() GameCooltip:SetType("menu") GameCooltip:SetOption("ButtonsYMod", -6) GameCooltip:SetOption("HeighMod", 6) GameCooltip:SetOption("YSpacingMod", -1) GameCooltip:SetOption("TextHeightMod", 0) GameCooltip:SetOption("IgnoreButtonAutoHeight", false) _detalhes:SetTooltipMinWidth() _detalhes:CheckLastReportsIntegrity() local last_reports = _detalhes.latest_report_table if(#last_reports > 0) then local amountReports = #last_reports amountReports = math.min(amountReports, 10) for index = amountReports, 1, -1 do local report = last_reports[index] local instance_number, attribute, subattribute, amt, report_where, custom_name = unpack(report) local name = _detalhes:GetSubAttributeName(attribute, subattribute, custom_name) local artwork = _detalhes.GetReportIconAndColor(report_where) GameCooltip:AddLine(name .. "(#" .. amt .. ")", nil, 1, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus) if(artwork) then GameCooltip:AddIcon(artwork.icon, 1, 1, 14, 14, artwork.coords[1], artwork.coords[2], artwork.coords[3], artwork.coords[4], artwork.color, nil, false) end GameCooltip:AddMenu(1, _detalhes.ReportFromLatest, index) end GameCooltip:AddLine("$div", nil, nil, -4) end GameCooltip:AddLine(Loc["STRING_REPORT_TOOLTIP"], nil, 1, "white", nil, _detalhes.font_sizes.menus, _detalhes.font_faces.menus) GameCooltip:AddIcon([[Interface\Addons\Details\Images\report_button]], 1, 1, 12, 19) GameCooltip:AddMenu(1, _detalhes.Reportar, instancia, nil, "INSTANCE" .. instancia.meu_id) _detalhes:FormatCooltipBackdrop() --GameCooltip:SetWallpaper(1, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) --GameCooltip:SetBackdrop(1, menus_backdrop, nil, menus_bordercolor) show_anti_overlap(instancia, self, "top") _detalhes:SetMenuOwner(self, instancia) GameCooltip:ShowCooltip() end local report_on_leave = function(self, motion, forced, from_click) local instancia = self._instance or self.widget._instance local baseframe = instancia.baseframe OnLeaveMainWindow(instancia, self, 3) hide_anti_overlap(instancia.baseframe.anti_menu_overlap) GameCooltip.buttonOver = false baseframe.cabecalho.button_mouse_over = false if(instancia.desaturated_menu) then self:GetNormalTexture():SetDesaturated(true) end if(GameCooltip.active) then parameters_table[2] = from_click and 1 or 0 self:SetScript("OnUpdate", on_leave_menu) else self:SetScript("OnUpdate", nil) end end local atributo_on_enter = function(self, motion, forced, from_click) local is_cooltip_opened = menu_can_open() -- and not is_cooltip_opened if(_detalhes.instances_menu_click_to_open and not forced) then return end local instancia = self._instance or self.widget._instance local baseframe = instancia.baseframe OnEnterMainWindow(instancia, self, 3) if(instancia.desaturated_menu) then self:GetNormalTexture():SetDesaturated(false) end GameCooltip.buttonOver = true baseframe.cabecalho.button_mouse_over = true show_anti_overlap(instancia, self, "top") GameCooltip:Reset() GameCooltip:SetType(3) GameCooltip:SetFixedParameter(instancia) if(_detalhes.solo and _detalhes.solo == instancia.meu_id) then _detalhes:MontaSoloOption(instancia) elseif(instancia:IsRaidMode()) then local have_plugins = _detalhes:MontaRaidOption(instancia) if(not have_plugins) then GameCooltip:SetType("tooltip") GameCooltip:SetOption("ButtonsYMod", 0) GameCooltip:SetOption("TextHeightMod", 0) GameCooltip:SetOption("IgnoreButtonAutoHeight", false) GameCooltip:AddLine("All raid plugins already\nin use or disabled.", nil, 1, "white", nil, 10, SharedMedia:Fetch("font", "Friz Quadrata TT")) GameCooltip:AddIcon([[Interface\GROUPFRAME\UI-GROUP-ASSISTANTICON]], 1, 1) GameCooltip:SetWallpaper(1, _detalhes.tooltip.menus_bg_texture, _detalhes.tooltip.menus_bg_coords, _detalhes.tooltip.menus_bg_color, true) end else _detalhes:MontaAtributosOption(instancia) GameCooltip:SetOption("YSpacingMod", -1) GameCooltip:SetOption("YSpacingModSub", -2) end --GameCooltip:SetBackdrop(1, menus_backdrop, nil, menus_bordercolor) --GameCooltip:SetBackdrop(2, menus_backdrop, nil, menus_bordercolor) GameCooltip:SetOption("TextSize", _detalhes.font_sizes.menus) _detalhes:FormatCooltipBackdrop() _detalhes:SetMenuOwner(self, instancia) if(instancia.toolbar_side == 2) then --bottom GameCooltip:SetOption("HeightAnchorMod", 0) end GameCooltip:ShowCooltip(self) end local atributo_on_leave = function(self, motion, forced, from_click) local instancia = self._instance or self.widget._instance local baseframe = instancia.baseframe OnLeaveMainWindow(instancia, self, 3) hide_anti_overlap(instancia.baseframe.anti_menu_overlap) if(instancia.desaturated_menu) then self:GetNormalTexture():SetDesaturated(true) end GameCooltip.buttonOver = false baseframe.cabecalho.button_mouse_over = false if(GameCooltip.active) then parameters_table[2] = 0 self:SetScript("OnUpdate", on_leave_menu) else self:SetScript("OnUpdate", nil) end end local segmento_on_enter = function(self, motion, forced, from_click) local is_cooltip_opened = menu_can_open() -- and not is_cooltip_opened if(_detalhes.instances_menu_click_to_open and not forced) then return end local instancia = self._instance or self.widget._instance local baseframe = instancia.baseframe OnEnterMainWindow(instancia, self, 3) if(instancia.desaturated_menu) then self:GetNormalTexture():SetDesaturated(false) end GameCooltip.buttonOver = true baseframe.cabecalho.button_mouse_over = true local passou = 0 if(_G.GameCooltip.active) then passou = 0.15 end parameters_table[1] = instancia parameters_table[2] = from_click and 1 or passou self:SetScript("OnUpdate", build_segment_list) end local segmento_on_leave = function(self, motion, forced, from_click) local instancia = self._instance or self.widget._instance local baseframe = instancia.baseframe OnLeaveMainWindow(instancia, self, 3) hide_anti_overlap(instancia.baseframe.anti_menu_overlap) if(instancia.desaturated_menu) then self:GetNormalTexture():SetDesaturated(true) end GameCooltip.buttonOver = false baseframe.cabecalho.button_mouse_over = false if(GameCooltip.active) then parameters_table[2] = 0 self:SetScript("OnUpdate", on_leave_menu) else self:SetScript("OnUpdate", nil) end end local modo_selecao_on_enter = function(self, motion, forced, from_click) local is_cooltip_opened = menu_can_open() -- not is_cooltip_opened if(_detalhes.instances_menu_click_to_open and not forced) then return end local instancia = self._instance or self.widget._instance local baseframe = instancia.baseframe OnEnterMainWindow(instancia, self, 3) if(instancia.desaturated_menu) then self:GetNormalTexture():SetDesaturated(false) end GameCooltip.buttonOver = true baseframe.cabecalho.button_mouse_over = true local passou = 0 if(_G.GameCooltip.active) then passou = 0.15 end local checked if(instancia.modo == 1) then checked = 4 elseif(instancia.modo == 2) then checked = 1 elseif(instancia.modo == 3) then checked = 2 elseif(instancia.modo == 4) then checked = 3 end parameters_table[1] = instancia parameters_table[2] = from_click and 1 or passou parameters_table[3] = checked self:SetScript("OnUpdate", build_mode_list) end local modo_selecao_on_leave = function(self) local instancia = self._instance or self.widget._instance local baseframe = instancia.baseframe OnLeaveMainWindow(instancia, self, 3) hide_anti_overlap(instancia.baseframe.anti_menu_overlap) if(instancia.desaturated_menu) then self:GetNormalTexture():SetDesaturated(true) end GameCooltip.buttonOver = false baseframe.cabecalho.button_mouse_over = false if(GameCooltip.active) then parameters_table[2] = 0 self:SetScript("OnUpdate", on_leave_menu) else self:SetScript("OnUpdate", nil) end end -- these can local title_bar_icons = { {texture =[[Interface\AddOns\Details\images\toolbar_icons]], texcoord = {0/256, 32/256, 0, 1}}, {texture =[[Interface\AddOns\Details\images\toolbar_icons]], texcoord = {32/256, 64/256, 0, 1}}, {texture =[[Interface\AddOns\Details\images\toolbar_icons]], texcoord = {66/256, 93/256, 0, 1}}, {texture =[[Interface\AddOns\Details\images\toolbar_icons]], texcoord = {96/256, 128/256, 0, 1}}, {texture =[[Interface\AddOns\Details\images\toolbar_icons]], texcoord = {128/256, 160/256, 0, 1}}, } function _detalhes:GetTitleBarIconsTexture(button, instance) if(instance or self.meu_id) then local textureFile = self.toolbar_icon_file or instance.toolbar_icon_file local t = title_bar_icons[button] if(t and textureFile) then t.texture = textureFile end return t or title_bar_icons end return title_bar_icons[button] or title_bar_icons end function _detalhes:CreateFakeWindow() local t = CreateFrame("frame") t:SetSize(200, 91) t:SetBackdrop({bgFile = "Interface\\AddOns\\Details\\images\\background", tile = true, tileSize = 16 }) t:SetBackdropColor(0.0941, 0.0941, 0.0941, 0.3) local tb = CreateFrame("frame", nil, t) tb:SetPoint("bottomleft", t, "topleft", 0, 0) tb:SetPoint("bottomright", t, "topright", 0, 0) tb:SetHeight(16) tb:SetBackdrop({bgFile = "Interface\\AddOns\\Details\\images\\background", tile = true, tileSize = 16 }) tb:SetBackdropColor(0.7, 0.7, 0.7, 0.4) local tt = tb:CreateFontString(nil, "overlay", "GameFontNormal") _detalhes:SetFontColor(tt, "white") _detalhes:SetFontSize(tt, 10) _detalhes:SetFontFace(tt, LibStub:GetLibrary("LibSharedMedia-3.0"):Fetch("font", "Accidental Presidency")) tt:SetPoint("bottomleft", tb, 3, 4) tt:SetText("Damage Done") t.TitleIcons = {} for i = 1, 5 do local b = tb:CreateTexture(nil, "overlay") b:SetSize(12, 12) b:SetPoint("bottomright", tb, "bottomright", -((_math_abs(i-6)-1)*11) - 1, 2) local button_texture_texcoord = _detalhes:GetTitleBarIconsTexture(i) b:SetTexture(button_texture_texcoord.texture) b:SetTexCoord(unpack(button_texture_texcoord.texcoord)) tinsert(t.TitleIcons, b) end t.TitleBar = tb t.TitleText = tt return t end local function click_to_change_segment(instancia, buttontype) if(buttontype == "LeftButton") then local segmento_goal = instancia.segmento + 1 if(segmento_goal > segments_used) then segmento_goal = -1 elseif(segmento_goal > _detalhes.segments_amount) then segmento_goal = -1 end local total_shown = segments_filled+2 local goal = segmento_goal+1 local select_ = _math_abs(goal - total_shown) GameCooltip:Select(1, select_) instancia:TrocaTabela(segmento_goal) segmento_on_enter(instancia.baseframe.cabecalho.segmento.widget, _, true, true) elseif(buttontype == "RightButton") then local segmento_goal = instancia.segmento - 1 if(segmento_goal < -1) then segmento_goal = segments_used end local total_shown = segments_filled+2 local goal = segmento_goal+1 local select_ = _math_abs(goal - total_shown) GameCooltip:Select(1, select_) instancia:TrocaTabela(segmento_goal) segmento_on_enter(instancia.baseframe.cabecalho.segmento.widget, _, true, true) elseif(buttontype == "MiddleButton") then local segmento_goal = 0 local total_shown = segments_filled+2 local goal = segmento_goal+1 local select_ = _math_abs(goal - total_shown) GameCooltip:Select(1, select_) instancia:TrocaTabela(segmento_goal) segmento_on_enter(instancia.baseframe.cabecalho.segmento.widget, _, true, true) end end function gump:CriaCabecalho(baseframe, instancia) baseframe.cabecalho = {} --> FECHAR INSTANCIA ---------------------------------------------------------------------------------------------------------------------------------------------------- baseframe.cabecalho.fechar = CreateFrame("button", "DetailsCloseInstanceButton" .. instancia.meu_id, baseframe) --, "UIPanelCloseButton" baseframe.cabecalho.fechar:SetWidth(18) baseframe.cabecalho.fechar:SetHeight(18) baseframe.cabecalho.fechar:SetFrameLevel(5) --> altura mais alta que os demais frames baseframe.cabecalho.fechar:SetPoint("bottomright", baseframe, "topright", 5, -6) --> seta o ponto dele fixando no base frame baseframe.cabecalho.fechar:SetNormalTexture([[Interface\AddOns\Details\images\toolbar_icons]]) baseframe.cabecalho.fechar:GetNormalTexture():SetTexCoord(160/256, 192/256, 0, 1) baseframe.cabecalho.fechar:SetHighlightTexture([[Interface\AddOns\Details\images\toolbar_icons]]) baseframe.cabecalho.fechar:GetHighlightTexture():SetTexCoord(160/256, 192/256, 0, 1) baseframe.cabecalho.fechar:SetPushedTexture([[Interface\AddOns\Details\images\toolbar_icons]]) baseframe.cabecalho.fechar:GetPushedTexture():SetTexCoord(160/256, 192/256, 0, 1) --baseframe.cabecalho.fechar:SetNormalTexture([[Interface\Buttons\UI-Panel-MinimizeButton-Up]]) --baseframe.cabecalho.fechar:SetHighlightTexture([[Interface\Buttons\UI-Panel-MinimizeButton-Highlight]]) --baseframe.cabecalho.fechar:SetPushedTexture([[Interface\Buttons\UI-Panel-MinimizeButton-Down]]) baseframe.cabecalho.fechar.instancia = instancia baseframe.cabecalho.fechar.instance = instancia baseframe.cabecalho.fechar:SetScript("OnEnter", close_button_onenter) baseframe.cabecalho.fechar:SetScript("OnLeave", close_button_onleave) baseframe.cabecalho.fechar:SetScript("OnClick", close_button_onclick) --> bola do canto esquedo superior --> primeiro criar a arma��o para apoiar as texturas baseframe.cabecalho.ball_point = instancia.floatingframe:CreateTexture(nil, "overlay") baseframe.cabecalho.ball_point:SetPoint("bottomleft", baseframe, "topleft", -37, 0) baseframe.cabecalho.ball_point:SetWidth(64) baseframe.cabecalho.ball_point:SetHeight(32) --> icone do atributo --baseframe.cabecalho.atributo_icon = _detalhes.listener:CreateTexture(nil, "artwork") baseframe.cabecalho.atributo_icon = baseframe:CreateTexture("DetailsAttributeIcon" .. instancia.meu_id, "background") local icon_anchor = _detalhes.skins["WoW Interface"].icon_anchor_main baseframe.cabecalho.atributo_icon:SetPoint("topright", baseframe.cabecalho.ball_point, "topright", icon_anchor[1], icon_anchor[2]) baseframe.cabecalho.atributo_icon:SetTexture(DEFAULT_SKIN) baseframe.cabecalho.atributo_icon:SetWidth(32) baseframe.cabecalho.atributo_icon:SetHeight(32) --> bola overlay --baseframe.cabecalho.ball = _detalhes.listener:CreateTexture(nil, "overlay") baseframe.cabecalho.ball = baseframe:CreateTexture(nil, "overlay") baseframe.cabecalho.ball:SetPoint("bottomleft", baseframe, "topleft", -107, 0) baseframe.cabecalho.ball:SetWidth(128) baseframe.cabecalho.ball:SetHeight(128) baseframe.cabecalho.ball:SetTexture(DEFAULT_SKIN) baseframe.cabecalho.ball:SetTexCoord(unpack(COORDS_LEFT_BALL)) --> emenda baseframe.cabecalho.emenda = baseframe:CreateTexture(nil, "background") baseframe.cabecalho.emenda:SetPoint("bottomleft", baseframe.cabecalho.ball, "bottomright") baseframe.cabecalho.emenda:SetWidth(8) baseframe.cabecalho.emenda:SetHeight(128) baseframe.cabecalho.emenda:SetTexture(DEFAULT_SKIN) baseframe.cabecalho.emenda:SetTexCoord(unpack(COORDS_LEFT_CONNECTOR)) baseframe.cabecalho.atributo_icon:Hide() baseframe.cabecalho.ball:Hide() --> bola do canto direito superior baseframe.cabecalho.ball_r = baseframe:CreateTexture(nil, "background") baseframe.cabecalho.ball_r:SetPoint("bottomright", baseframe, "topright", 96, 0) baseframe.cabecalho.ball_r:SetWidth(128) baseframe.cabecalho.ball_r:SetHeight(128) baseframe.cabecalho.ball_r:SetTexture(DEFAULT_SKIN) baseframe.cabecalho.ball_r:SetTexCoord(unpack(COORDS_RIGHT_BALL)) --> barra centro baseframe.cabecalho.top_bg = baseframe:CreateTexture(nil, "background") baseframe.cabecalho.top_bg:SetPoint("left", baseframe.cabecalho.emenda, "right", 0, 0) baseframe.cabecalho.top_bg:SetPoint("right", baseframe.cabecalho.ball_r, "left") baseframe.cabecalho.top_bg:SetTexture(DEFAULT_SKIN) baseframe.cabecalho.top_bg:SetTexCoord(unpack(COORDS_TOP_BACKGROUND)) baseframe.cabecalho.top_bg:SetWidth(512) baseframe.cabecalho.top_bg:SetHeight(128) --> frame invis�vel baseframe.UPFrame = CreateFrame("frame", "DetailsUpFrameInstance"..instancia.meu_id, baseframe) baseframe.UPFrame:SetPoint("left", baseframe.cabecalho.ball, "right", 0, -53) baseframe.UPFrame:SetPoint("right", baseframe.cabecalho.ball_r, "left", 0, -53) baseframe.UPFrame:SetHeight(20) baseframe.UPFrame.is_toolbar = true baseframe.UPFrame:Show() baseframe.UPFrame:EnableMouse(true) baseframe.UPFrame:SetMovable(true) baseframe.UPFrame:SetResizable(true) 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) baseframe.UPFrameConnect.is_toolbar = true BGFrame_scripts(baseframe.UPFrameConnect, baseframe, instancia) baseframe.UPFrameLeftPart = CreateFrame("frame", "DetailsUpFrameLeftPart"..instancia.meu_id, baseframe) baseframe.UPFrameLeftPart:SetPoint("bottomleft", baseframe, "topleft", 0, 0) baseframe.UPFrameLeftPart:SetSize(22, 20) baseframe.UPFrameLeftPart:EnableMouse(true) baseframe.UPFrameLeftPart:SetMovable(true) baseframe.UPFrameLeftPart:SetResizable(true) baseframe.UPFrameLeftPart.is_toolbar = true BGFrame_scripts(baseframe.UPFrameLeftPart, baseframe, instancia) --> anchors para os micro displays no lado de cima da janela local StatusBarLeftAnchor = CreateFrame("frame", "DetailsStatusBarLeftAnchor" .. instancia.meu_id, baseframe) StatusBarLeftAnchor:SetPoint("bottomleft", baseframe, "topleft", 0, 9) StatusBarLeftAnchor:SetWidth(1) StatusBarLeftAnchor:SetHeight(1) baseframe.cabecalho.StatusBarLeftAnchor = StatusBarLeftAnchor local StatusBarCenterAnchor = CreateFrame("frame", "DetailsStatusBarCenterAnchor" .. instancia.meu_id, baseframe) StatusBarCenterAnchor:SetPoint("center", baseframe, "center") StatusBarCenterAnchor:SetPoint("bottom", baseframe, "top", 0, 9) StatusBarCenterAnchor:SetWidth(1) StatusBarCenterAnchor:SetHeight(1) baseframe.cabecalho.StatusBarCenterAnchor = StatusBarCenterAnchor local StatusBarRightAnchor = CreateFrame("frame", "DetailsStatusBarRightAnchor" .. instancia.meu_id, baseframe) StatusBarRightAnchor:SetPoint("bottomright", baseframe, "topright", 0, 9) StatusBarRightAnchor:SetWidth(1) StatusBarRightAnchor:SetHeight(1) baseframe.cabecalho.StatusBarRightAnchor = StatusBarRightAnchor local MenuAnchorLeft = CreateFrame("frame", "DetailsMenuAnchorLeft"..instancia.meu_id, baseframe) MenuAnchorLeft:SetSize(1, 1) local MenuAnchorRight = CreateFrame("frame", "DetailsMenuAnchorRight"..instancia.meu_id, baseframe) MenuAnchorRight:SetSize(1, 1) local Menu2AnchorRight = CreateFrame("frame", "DetailsMenu2AnchorRight"..instancia.meu_id, baseframe) Menu2AnchorRight:SetSize(1, 1) instancia.menu_points = {MenuAnchorLeft, MenuAnchorRight} instancia.menu2_points = {Menu2AnchorRight} -- bot�es ------------------------------------------------------------------------------------------------------------------------------------------------- local CoolTip = _G.GameCooltip --> SELE��O DO MODO ---------------------------------------------------------------------------------------------------------------------------------------------------- local modo_selecao_button_click = function() if(_detalhes.instances_menu_click_to_open) then if(instancia.LastMenuOpened == "mode" and GameCooltipFrame1:IsShown()) then GameCooltip:ShowMe(false) instancia.LastMenuOpened = nil else modo_selecao_on_enter(instancia.baseframe.cabecalho.modo_selecao.widget, _, true, true) instancia.LastMenuOpened = "mode" end else _detalhes:OpenOptionsWindow(instancia) end end baseframe.cabecalho.modo_selecao = gump:NewButton(baseframe, nil, "DetailsModeButton"..instancia.meu_id, nil, 16, 16, modo_selecao_button_click, nil, nil,[[Interface\AddOns\Details\images\modo_icone]]) baseframe.cabecalho.modo_selecao:SetPoint("bottomleft", baseframe.cabecalho.ball, "bottomright", instancia.menu_anchor[1], instancia.menu_anchor[2]) baseframe.cabecalho.modo_selecao:SetFrameLevel(baseframe:GetFrameLevel()+5) baseframe.cabecalho.modo_selecao.widget._instance = instancia baseframe.cabecalho.modo_selecao:SetScript("OnEnter", modo_selecao_on_enter) baseframe.cabecalho.modo_selecao:SetScript("OnLeave", modo_selecao_on_leave) local b = baseframe.cabecalho.modo_selecao.widget b:SetNormalTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetNormalTexture():SetTexCoord(0/256, 32/256, 0, 1) b:SetHighlightTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetHighlightTexture():SetTexCoord(0/256, 32/256, 0, 1) b:SetPushedTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetPushedTexture():SetTexCoord(0/256, 32/256, 0, 1) --> SELECIONAR O SEGMENTO ---------------------------------------------------------------------------------------------------------------------------------------------------- local segmento_button_click = function(self, button, param1) if(_detalhes.instances_menu_click_to_open) then if(instancia.LastMenuOpened == "segments" and GameCooltipFrame1:IsShown()) then GameCooltip:ShowMe(false) instancia.LastMenuOpened = nil else segmento_on_enter(instancia.baseframe.cabecalho.segmento.widget, _, true, true) instancia.LastMenuOpened = "segments" end else click_to_change_segment(instancia, button) end end baseframe.cabecalho.segmento = gump:NewButton(baseframe, nil, "DetailsSegmentButton"..instancia.meu_id, nil, 16, 16, segmento_button_click, nil, nil,[[Interface\AddOns\Details\images\segmentos_icone]]) baseframe.cabecalho.segmento:SetFrameLevel(baseframe.UPFrame:GetFrameLevel()+1) baseframe.cabecalho.segmento.widget._instance = instancia baseframe.cabecalho.segmento:SetPoint("left", baseframe.cabecalho.modo_selecao, "right", 0, 0) --> ativa bot�o do meio e direito baseframe.cabecalho.segmento:SetClickFunction(segmento_button_click, nil, nil, "rightclick") baseframe.cabecalho.segmento:SetScript("OnEnter", segmento_on_enter) baseframe.cabecalho.segmento:SetScript("OnLeave", segmento_on_leave) local b = baseframe.cabecalho.segmento.widget b:SetNormalTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetNormalTexture():SetTexCoord(32/256, 64/256, 0, 1) b:SetHighlightTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetHighlightTexture():SetTexCoord(32/256, 64/256, 0, 1) b:SetPushedTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetPushedTexture():SetTexCoord(32/256, 64/256, 0, 1) --> SELECIONAR O ATRIBUTO ---------------------------------------------------------------------------------------------------------------------------------------------------- local atributo_button_click = function() if(_detalhes.instances_menu_click_to_open) then if(instancia.LastMenuOpened == "attributes" and GameCooltipFrame1:IsShown()) then GameCooltip:ShowMe(false) instancia.LastMenuOpened = nil else atributo_on_enter(instancia.baseframe.cabecalho.atributo.widget, _, true, true) instancia.LastMenuOpened = "attributes" end end end baseframe.cabecalho.atributo = gump:NewButton(baseframe, nil, "DetailsAttributeButton"..instancia.meu_id, nil, 16, 16, atributo_button_click) baseframe.cabecalho.atributo:SetFrameLevel(baseframe.UPFrame:GetFrameLevel()+1) baseframe.cabecalho.atributo.widget._instance = instancia baseframe.cabecalho.atributo:SetPoint("left", baseframe.cabecalho.segmento.widget, "right", 0, 0) baseframe.cabecalho.atributo:SetScript("OnEnter", atributo_on_enter) baseframe.cabecalho.atributo:SetScript("OnLeave", atributo_on_leave) local b = baseframe.cabecalho.atributo.widget b:SetNormalTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetNormalTexture():SetTexCoord(66/256, 93/256, 0, 1) b:SetHighlightTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetHighlightTexture():SetTexCoord(68/256, 93/256, 0, 1) b:SetPushedTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetPushedTexture():SetTexCoord(68/256, 93/256, 0, 1) --> REPORTAR ~report ---------------------------------------------------------------------------------------------------------------------------------------------------- local report_func = function() instancia:Reportar("INSTANCE" .. instancia.meu_id) GameCooltip2:Hide() end baseframe.cabecalho.report = gump:NewButton(baseframe, nil, "DetailsReportButton"..instancia.meu_id, nil, 8, 16, report_func) baseframe.cabecalho.report:SetFrameLevel(baseframe.UPFrame:GetFrameLevel()+1) baseframe.cabecalho.report.widget._instance = instancia baseframe.cabecalho.report:SetPoint("left", baseframe.cabecalho.atributo, "right", -6, 0) baseframe.cabecalho.report:SetScript("OnEnter", report_on_enter) baseframe.cabecalho.report:SetScript("OnLeave", report_on_leave) local b = baseframe.cabecalho.report.widget b:SetNormalTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetNormalTexture():SetTexCoord(96/256, 128/256, 0, 1) b:SetHighlightTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetHighlightTexture():SetTexCoord(96/256, 128/256, 0, 1) b:SetPushedTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetPushedTexture():SetTexCoord(96/256, 128/256, 0, 1) -- ~delete ~erase ~reset --> reset ---------------------------------------------------------------------------------------------------------------------------------------------------- local reset_func = function() if(_detalhes.instances_menu_click_to_open) then if(instancia.LastMenuOpened == "reset" and GameCooltipFrame1:IsShown()) then GameCooltip:ShowMe(false) instancia.LastMenuOpened = nil else reset_button_onenter(instancia.baseframe.cabecalho.reset, _, true, true) instancia.LastMenuOpened = "reset" end else if(not _detalhes.disable_reset_button) then _detalhes.tabela_historico:resetar() else _detalhes:Msg(Loc["STRING_OPTIONS_DISABLED_RESET"]) end end end baseframe.cabecalho.reset = CreateFrame("button", "DetailsClearSegmentsButton" .. instancia.meu_id, baseframe) baseframe.cabecalho.reset:SetFrameLevel(baseframe.UPFrame:GetFrameLevel()+1) baseframe.cabecalho.reset:SetSize(10, 16) baseframe.cabecalho.reset:SetPoint("right", baseframe.cabecalho.novo, "left") baseframe.cabecalho.reset.instance = instancia baseframe.cabecalho.reset._instance = instancia baseframe.cabecalho.reset:SetScript("OnClick", reset_func) baseframe.cabecalho.reset:SetScript("OnEnter", reset_button_onenter) baseframe.cabecalho.reset:SetScript("OnLeave", reset_button_onleave) local b = baseframe.cabecalho.reset b:SetNormalTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetNormalTexture():SetTexCoord(128/256, 160/256, 0, 1) b:SetHighlightTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetHighlightTexture():SetTexCoord(128/256, 160/256, 0, 1) b:SetPushedTexture([[Interface\AddOns\Details\images\toolbar_icons]]) b:GetPushedTexture():SetTexCoord(128/256, 160/256, 0, 1) end