Mercurial > wow > hansgar_and_franzok_assist
diff Libs/DF/scrollbar.lua @ 11:2f09fe4be15c
Added an Options Panel.
| author | Tercio |
|---|---|
| date | Mon, 20 Apr 2015 16:34:18 -0300 |
| parents | |
| children | dc1c77254f80 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Libs/DF/scrollbar.lua Mon Apr 20 16:34:18 2015 -0300 @@ -0,0 +1,232 @@ + +local DF = _G ["DetailsFramework"] + +function DF:CreateScrollBar (master, slave, x, y) + return DF:NewScrollBar (master, slave, x, y) +end + +function DF:NewScrollBar (master, slave, x, y) + + local new_slider = CreateFrame ("Slider", nil, master) + new_slider.scrollMax = 560 --default - tamanho da janela de fundo + + -- ///// SLIDER ///// + new_slider:SetPoint ("TOPLEFT", master, "TOPRIGHT", x, y) + new_slider.ativo = true + + new_slider.bg = new_slider:CreateTexture (nil, "BACKGROUND") + new_slider.bg:SetAllPoints (true) + new_slider.bg:SetTexture (0, 0, 0, 0) + --coisinha do meio + new_slider.thumb = new_slider:CreateTexture (nil, "OVERLAY") + new_slider.thumb:SetTexture ("Interface\\Buttons\\UI-ScrollBar-Knob") + new_slider.thumb:SetSize (29, 30) + new_slider:SetThumbTexture (new_slider.thumb) + + new_slider:SetOrientation ("VERTICAL") + new_slider:SetSize(16, 100) + new_slider:SetMinMaxValues(0, new_slider.scrollMax) + new_slider:SetValue(0) + new_slider.ultimo = 0 + + local botao_cima = CreateFrame ("Button", nil, master) + + botao_cima:SetPoint ("BOTTOM", new_slider, "TOP", 0, -12) + botao_cima.x = 0 + botao_cima.y = -12 + + botao_cima:SetWidth (29) + botao_cima:SetHeight (32) + botao_cima:SetNormalTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Up") + botao_cima:SetPushedTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Down") + botao_cima:SetDisabledTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Disabled") + botao_cima:Show() + botao_cima:Disable() + + local botao_baixo = CreateFrame ("Button", nil, master) + botao_baixo:SetPoint ("TOP", new_slider, "BOTTOM", 0, 12) + botao_baixo.x = 0 + botao_baixo.y = 12 + + botao_baixo:SetWidth (29) + botao_baixo:SetHeight (32) + botao_baixo:SetNormalTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollDownButton-Up") + botao_baixo:SetPushedTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollDownButton-Down") + botao_baixo:SetDisabledTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollDownButton-Disabled") + botao_baixo:Show() + botao_baixo:Disable() + + master.baixo = botao_baixo + master.cima = botao_cima + master.slider = new_slider + + botao_baixo:SetScript ("OnMouseDown", function(self) + if (not new_slider:IsEnabled()) then + return + end + + local current = new_slider:GetValue() + local minValue, maxValue = new_slider:GetMinMaxValues() + if (current+5 < maxValue) then + new_slider:SetValue (current+5) + else + new_slider:SetValue (maxValue) + 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 + local current = new_slider:GetValue() + local minValue, maxValue = new_slider:GetMinMaxValues() + if (current+2 < maxValue) then + new_slider:SetValue (current+2) + else + new_slider:SetValue (maxValue) + end + end + end) + end) + botao_baixo:SetScript ("OnMouseUp", function(self) + self.precionado = false + self:SetScript ("OnUpdate", nil) + end) + + botao_cima:SetScript ("OnMouseDown", function(self) + if (not new_slider:IsEnabled()) then + return + end + + local current = new_slider:GetValue() + if (current-5 > 0) then + new_slider:SetValue (current-5) + else + new_slider:SetValue (0) + 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 + local current = new_slider:GetValue() + if (current-2 > 0) then + new_slider:SetValue (current-2) + else + new_slider:SetValue (0) + end + end + end) + end) + botao_cima:SetScript ("OnMouseUp", function(self) + self.precionado = false + self:SetScript ("OnUpdate", nil) + end) + --> isso aqui pra quando o slider ativar, o scroll fica na posição zero + botao_cima:SetScript ("OnEnable", function (self) + local current = new_slider:GetValue() + if (current == 0) then + botao_cima:Disable() + end + end) + + new_slider:SetScript ("OnValueChanged", function (self) + local current = self:GetValue() + master:SetVerticalScroll (current) + + local minValue, maxValue = new_slider:GetMinMaxValues() + + if (current == minValue) then + botao_cima:Disable() + elseif (not botao_cima:IsEnabled()) then + botao_cima:Enable() + end + + if (current == maxValue) then + botao_baixo:Disable() + elseif (not botao_baixo:IsEnabled()) then + botao_baixo:Enable() + end + + end) + + new_slider:SetScript ("OnShow", function (self) + botao_cima:Show() + botao_baixo:Show() + end) + + new_slider:SetScript ("OnDisable", function (self) + botao_cima:Disable() + botao_baixo:Disable() + end) + + new_slider:SetScript ("OnEnable", function (self) + botao_cima:Enable() + botao_baixo:Enable() + end) + + master:SetScript ("OnMouseWheel", function (self, delta) + if (not new_slider:IsEnabled()) then + return + end + + local current = new_slider:GetValue() + if (delta < 0) then + --baixo + local minValue, maxValue = new_slider:GetMinMaxValues() + if (current + (master.wheel_jump or 20) < maxValue) then + new_slider:SetValue (current + (master.wheel_jump or 20)) + else + new_slider:SetValue (maxValue) + end + elseif (delta > 0) then + --cima + if (current + (master.wheel_jump or 20) > 0) then + new_slider:SetValue (current - (master.wheel_jump or 20)) + else + new_slider:SetValue (0) + end + end + end) + + function new_slider:Altura (h) + self:SetHeight (h) + end + + function new_slider:Update (desativar) + + if (desativar) then + new_slider:Disable() + new_slider:SetValue(0) + new_slider.ativo = false + master:EnableMouseWheel (false) + return + end + + self.scrollMax = slave:GetHeight()-master:GetHeight() + if (self.scrollMax > 0) then + new_slider:SetMinMaxValues (0, self.scrollMax) + if (not new_slider.ativo) then + new_slider:Enable() + new_slider.ativo = true + master:EnableMouseWheel (true) + end + else + new_slider:Disable() + new_slider:SetValue(0) + new_slider.ativo = false + master:EnableMouseWheel (false) + end + end + + function new_slider:cimaPoint (x, y) + botao_cima:SetPoint ("BOTTOM", new_slider, "TOP", x, (y)-12) + end + + function new_slider:baixoPoint (x, y) + botao_baixo:SetPoint ("TOP", new_slider, "BOTTOM", x, (y)+12) + end + + return new_slider +end \ No newline at end of file
