Tercio@11: Tercio@11: local DF = _G ["DetailsFramework"] Tercio@11: Tercio@11: function DF:CreateScrollBar (master, slave, x, y) Tercio@11: return DF:NewScrollBar (master, slave, x, y) Tercio@11: end Tercio@11: Tercio@11: function DF:NewScrollBar (master, slave, x, y) Tercio@11: Tercio@11: local new_slider = CreateFrame ("Slider", nil, master) Tercio@11: new_slider.scrollMax = 560 --default - tamanho da janela de fundo Tercio@11: Tercio@11: -- ///// SLIDER ///// Tercio@11: new_slider:SetPoint ("TOPLEFT", master, "TOPRIGHT", x, y) Tercio@11: new_slider.ativo = true Tercio@11: Tercio@11: new_slider.bg = new_slider:CreateTexture (nil, "BACKGROUND") Tercio@11: new_slider.bg:SetAllPoints (true) Tercio@11: new_slider.bg:SetTexture (0, 0, 0, 0) Tercio@11: --coisinha do meio Tercio@11: new_slider.thumb = new_slider:CreateTexture (nil, "OVERLAY") Tercio@11: new_slider.thumb:SetTexture ("Interface\\Buttons\\UI-ScrollBar-Knob") Tercio@11: new_slider.thumb:SetSize (29, 30) Tercio@11: new_slider:SetThumbTexture (new_slider.thumb) Tercio@11: Tercio@11: new_slider:SetOrientation ("VERTICAL") Tercio@11: new_slider:SetSize(16, 100) Tercio@11: new_slider:SetMinMaxValues(0, new_slider.scrollMax) Tercio@11: new_slider:SetValue(0) Tercio@11: new_slider.ultimo = 0 Tercio@11: Tercio@11: local botao_cima = CreateFrame ("Button", nil, master) Tercio@11: Tercio@11: botao_cima:SetPoint ("BOTTOM", new_slider, "TOP", 0, -12) Tercio@11: botao_cima.x = 0 Tercio@11: botao_cima.y = -12 Tercio@11: Tercio@11: botao_cima:SetWidth (29) Tercio@11: botao_cima:SetHeight (32) Tercio@11: botao_cima:SetNormalTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Up") Tercio@11: botao_cima:SetPushedTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Down") Tercio@11: botao_cima:SetDisabledTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Disabled") Tercio@11: botao_cima:Show() Tercio@11: botao_cima:Disable() Tercio@11: Tercio@11: local botao_baixo = CreateFrame ("Button", nil, master) Tercio@11: botao_baixo:SetPoint ("TOP", new_slider, "BOTTOM", 0, 12) Tercio@11: botao_baixo.x = 0 Tercio@11: botao_baixo.y = 12 Tercio@11: Tercio@11: botao_baixo:SetWidth (29) Tercio@11: botao_baixo:SetHeight (32) Tercio@11: botao_baixo:SetNormalTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollDownButton-Up") Tercio@11: botao_baixo:SetPushedTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollDownButton-Down") Tercio@11: botao_baixo:SetDisabledTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollDownButton-Disabled") Tercio@11: botao_baixo:Show() Tercio@11: botao_baixo:Disable() Tercio@11: Tercio@11: master.baixo = botao_baixo Tercio@11: master.cima = botao_cima Tercio@11: master.slider = new_slider Tercio@11: Tercio@11: botao_baixo:SetScript ("OnMouseDown", function(self) Tercio@11: if (not new_slider:IsEnabled()) then Tercio@11: return Tercio@11: end Tercio@11: Tercio@11: local current = new_slider:GetValue() Tercio@11: local minValue, maxValue = new_slider:GetMinMaxValues() Tercio@11: if (current+5 < maxValue) then Tercio@11: new_slider:SetValue (current+5) Tercio@11: else Tercio@11: new_slider:SetValue (maxValue) Tercio@11: end Tercio@11: self.precionado = true Tercio@11: self.last_up = -0.3 Tercio@11: self:SetScript ("OnUpdate", function(self, elapsed) Tercio@11: self.last_up = self.last_up + elapsed Tercio@11: if (self.last_up > 0.03) then Tercio@11: self.last_up = 0 Tercio@11: local current = new_slider:GetValue() Tercio@11: local minValue, maxValue = new_slider:GetMinMaxValues() Tercio@11: if (current+2 < maxValue) then Tercio@11: new_slider:SetValue (current+2) Tercio@11: else Tercio@11: new_slider:SetValue (maxValue) Tercio@11: end Tercio@11: end Tercio@11: end) Tercio@11: end) Tercio@11: botao_baixo:SetScript ("OnMouseUp", function(self) Tercio@11: self.precionado = false Tercio@11: self:SetScript ("OnUpdate", nil) Tercio@11: end) Tercio@11: Tercio@11: botao_cima:SetScript ("OnMouseDown", function(self) Tercio@11: if (not new_slider:IsEnabled()) then Tercio@11: return Tercio@11: end Tercio@11: Tercio@11: local current = new_slider:GetValue() Tercio@11: if (current-5 > 0) then Tercio@11: new_slider:SetValue (current-5) Tercio@11: else Tercio@11: new_slider:SetValue (0) Tercio@11: end Tercio@11: self.precionado = true Tercio@11: self.last_up = -0.3 Tercio@11: self:SetScript ("OnUpdate", function(self, elapsed) Tercio@11: self.last_up = self.last_up + elapsed Tercio@11: if (self.last_up > 0.03) then Tercio@11: self.last_up = 0 Tercio@11: local current = new_slider:GetValue() Tercio@11: if (current-2 > 0) then Tercio@11: new_slider:SetValue (current-2) Tercio@11: else Tercio@11: new_slider:SetValue (0) Tercio@11: end Tercio@11: end Tercio@11: end) Tercio@11: end) Tercio@11: botao_cima:SetScript ("OnMouseUp", function(self) Tercio@11: self.precionado = false Tercio@11: self:SetScript ("OnUpdate", nil) Tercio@11: end) Tercio@11: --> isso aqui pra quando o slider ativar, o scroll fica na posição zero Tercio@11: botao_cima:SetScript ("OnEnable", function (self) Tercio@11: local current = new_slider:GetValue() Tercio@11: if (current == 0) then Tercio@11: botao_cima:Disable() Tercio@11: end Tercio@11: end) Tercio@11: Tercio@11: new_slider:SetScript ("OnValueChanged", function (self) Tercio@11: local current = self:GetValue() Tercio@11: master:SetVerticalScroll (current) Tercio@11: Tercio@11: local minValue, maxValue = new_slider:GetMinMaxValues() Tercio@11: Tercio@11: if (current == minValue) then Tercio@11: botao_cima:Disable() Tercio@11: elseif (not botao_cima:IsEnabled()) then Tercio@11: botao_cima:Enable() Tercio@11: end Tercio@11: Tercio@11: if (current == maxValue) then Tercio@11: botao_baixo:Disable() Tercio@11: elseif (not botao_baixo:IsEnabled()) then Tercio@11: botao_baixo:Enable() Tercio@11: end Tercio@11: Tercio@11: end) Tercio@11: Tercio@11: new_slider:SetScript ("OnShow", function (self) Tercio@11: botao_cima:Show() Tercio@11: botao_baixo:Show() Tercio@11: end) Tercio@11: Tercio@11: new_slider:SetScript ("OnDisable", function (self) Tercio@11: botao_cima:Disable() Tercio@11: botao_baixo:Disable() Tercio@11: end) Tercio@11: Tercio@11: new_slider:SetScript ("OnEnable", function (self) Tercio@11: botao_cima:Enable() Tercio@11: botao_baixo:Enable() Tercio@11: end) Tercio@11: Tercio@11: master:SetScript ("OnMouseWheel", function (self, delta) Tercio@11: if (not new_slider:IsEnabled()) then Tercio@11: return Tercio@11: end Tercio@11: Tercio@11: local current = new_slider:GetValue() Tercio@11: if (delta < 0) then Tercio@11: --baixo Tercio@11: local minValue, maxValue = new_slider:GetMinMaxValues() Tercio@11: if (current + (master.wheel_jump or 20) < maxValue) then Tercio@11: new_slider:SetValue (current + (master.wheel_jump or 20)) Tercio@11: else Tercio@11: new_slider:SetValue (maxValue) Tercio@11: end Tercio@11: elseif (delta > 0) then Tercio@11: --cima Tercio@11: if (current + (master.wheel_jump or 20) > 0) then Tercio@11: new_slider:SetValue (current - (master.wheel_jump or 20)) Tercio@11: else Tercio@11: new_slider:SetValue (0) Tercio@11: end Tercio@11: end Tercio@11: end) Tercio@11: Tercio@11: function new_slider:Altura (h) Tercio@11: self:SetHeight (h) Tercio@11: end Tercio@11: Tercio@11: function new_slider:Update (desativar) Tercio@11: Tercio@11: if (desativar) then Tercio@11: new_slider:Disable() Tercio@11: new_slider:SetValue(0) Tercio@11: new_slider.ativo = false Tercio@11: master:EnableMouseWheel (false) Tercio@11: return Tercio@11: end Tercio@11: Tercio@11: self.scrollMax = slave:GetHeight()-master:GetHeight() Tercio@11: if (self.scrollMax > 0) then Tercio@11: new_slider:SetMinMaxValues (0, self.scrollMax) Tercio@11: if (not new_slider.ativo) then Tercio@11: new_slider:Enable() Tercio@11: new_slider.ativo = true Tercio@11: master:EnableMouseWheel (true) Tercio@11: end Tercio@11: else Tercio@11: new_slider:Disable() Tercio@11: new_slider:SetValue(0) Tercio@11: new_slider.ativo = false Tercio@11: master:EnableMouseWheel (false) Tercio@11: end Tercio@11: end Tercio@11: Tercio@11: function new_slider:cimaPoint (x, y) Tercio@11: botao_cima:SetPoint ("BOTTOM", new_slider, "TOP", x, (y)-12) Tercio@11: end Tercio@11: Tercio@11: function new_slider:baixoPoint (x, y) Tercio@11: botao_baixo:SetPoint ("TOP", new_slider, "BOTTOM", x, (y)+12) Tercio@11: end Tercio@11: Tercio@11: return new_slider Tercio@11: end