annotate Libs/DF/scrollbar.lua @ 11:2f09fe4be15c

Added an Options Panel.
author Tercio
date Mon, 20 Apr 2015 16:34:18 -0300
parents
children dc1c77254f80
rev   line source
Tercio@11 1
Tercio@11 2 local DF = _G ["DetailsFramework"]
Tercio@11 3
Tercio@11 4 function DF:CreateScrollBar (master, slave, x, y)
Tercio@11 5 return DF:NewScrollBar (master, slave, x, y)
Tercio@11 6 end
Tercio@11 7
Tercio@11 8 function DF:NewScrollBar (master, slave, x, y)
Tercio@11 9
Tercio@11 10 local new_slider = CreateFrame ("Slider", nil, master)
Tercio@11 11 new_slider.scrollMax = 560 --default - tamanho da janela de fundo
Tercio@11 12
Tercio@11 13 -- ///// SLIDER /////
Tercio@11 14 new_slider:SetPoint ("TOPLEFT", master, "TOPRIGHT", x, y)
Tercio@11 15 new_slider.ativo = true
Tercio@11 16
Tercio@11 17 new_slider.bg = new_slider:CreateTexture (nil, "BACKGROUND")
Tercio@11 18 new_slider.bg:SetAllPoints (true)
Tercio@11 19 new_slider.bg:SetTexture (0, 0, 0, 0)
Tercio@11 20 --coisinha do meio
Tercio@11 21 new_slider.thumb = new_slider:CreateTexture (nil, "OVERLAY")
Tercio@11 22 new_slider.thumb:SetTexture ("Interface\\Buttons\\UI-ScrollBar-Knob")
Tercio@11 23 new_slider.thumb:SetSize (29, 30)
Tercio@11 24 new_slider:SetThumbTexture (new_slider.thumb)
Tercio@11 25
Tercio@11 26 new_slider:SetOrientation ("VERTICAL")
Tercio@11 27 new_slider:SetSize(16, 100)
Tercio@11 28 new_slider:SetMinMaxValues(0, new_slider.scrollMax)
Tercio@11 29 new_slider:SetValue(0)
Tercio@11 30 new_slider.ultimo = 0
Tercio@11 31
Tercio@11 32 local botao_cima = CreateFrame ("Button", nil, master)
Tercio@11 33
Tercio@11 34 botao_cima:SetPoint ("BOTTOM", new_slider, "TOP", 0, -12)
Tercio@11 35 botao_cima.x = 0
Tercio@11 36 botao_cima.y = -12
Tercio@11 37
Tercio@11 38 botao_cima:SetWidth (29)
Tercio@11 39 botao_cima:SetHeight (32)
Tercio@11 40 botao_cima:SetNormalTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Up")
Tercio@11 41 botao_cima:SetPushedTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Down")
Tercio@11 42 botao_cima:SetDisabledTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollUpButton-Disabled")
Tercio@11 43 botao_cima:Show()
Tercio@11 44 botao_cima:Disable()
Tercio@11 45
Tercio@11 46 local botao_baixo = CreateFrame ("Button", nil, master)
Tercio@11 47 botao_baixo:SetPoint ("TOP", new_slider, "BOTTOM", 0, 12)
Tercio@11 48 botao_baixo.x = 0
Tercio@11 49 botao_baixo.y = 12
Tercio@11 50
Tercio@11 51 botao_baixo:SetWidth (29)
Tercio@11 52 botao_baixo:SetHeight (32)
Tercio@11 53 botao_baixo:SetNormalTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollDownButton-Up")
Tercio@11 54 botao_baixo:SetPushedTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollDownButton-Down")
Tercio@11 55 botao_baixo:SetDisabledTexture ("Interface\\BUTTONS\\UI-ScrollBar-ScrollDownButton-Disabled")
Tercio@11 56 botao_baixo:Show()
Tercio@11 57 botao_baixo:Disable()
Tercio@11 58
Tercio@11 59 master.baixo = botao_baixo
Tercio@11 60 master.cima = botao_cima
Tercio@11 61 master.slider = new_slider
Tercio@11 62
Tercio@11 63 botao_baixo:SetScript ("OnMouseDown", function(self)
Tercio@11 64 if (not new_slider:IsEnabled()) then
Tercio@11 65 return
Tercio@11 66 end
Tercio@11 67
Tercio@11 68 local current = new_slider:GetValue()
Tercio@11 69 local minValue, maxValue = new_slider:GetMinMaxValues()
Tercio@11 70 if (current+5 < maxValue) then
Tercio@11 71 new_slider:SetValue (current+5)
Tercio@11 72 else
Tercio@11 73 new_slider:SetValue (maxValue)
Tercio@11 74 end
Tercio@11 75 self.precionado = true
Tercio@11 76 self.last_up = -0.3
Tercio@11 77 self:SetScript ("OnUpdate", function(self, elapsed)
Tercio@11 78 self.last_up = self.last_up + elapsed
Tercio@11 79 if (self.last_up > 0.03) then
Tercio@11 80 self.last_up = 0
Tercio@11 81 local current = new_slider:GetValue()
Tercio@11 82 local minValue, maxValue = new_slider:GetMinMaxValues()
Tercio@11 83 if (current+2 < maxValue) then
Tercio@11 84 new_slider:SetValue (current+2)
Tercio@11 85 else
Tercio@11 86 new_slider:SetValue (maxValue)
Tercio@11 87 end
Tercio@11 88 end
Tercio@11 89 end)
Tercio@11 90 end)
Tercio@11 91 botao_baixo:SetScript ("OnMouseUp", function(self)
Tercio@11 92 self.precionado = false
Tercio@11 93 self:SetScript ("OnUpdate", nil)
Tercio@11 94 end)
Tercio@11 95
Tercio@11 96 botao_cima:SetScript ("OnMouseDown", function(self)
Tercio@11 97 if (not new_slider:IsEnabled()) then
Tercio@11 98 return
Tercio@11 99 end
Tercio@11 100
Tercio@11 101 local current = new_slider:GetValue()
Tercio@11 102 if (current-5 > 0) then
Tercio@11 103 new_slider:SetValue (current-5)
Tercio@11 104 else
Tercio@11 105 new_slider:SetValue (0)
Tercio@11 106 end
Tercio@11 107 self.precionado = true
Tercio@11 108 self.last_up = -0.3
Tercio@11 109 self:SetScript ("OnUpdate", function(self, elapsed)
Tercio@11 110 self.last_up = self.last_up + elapsed
Tercio@11 111 if (self.last_up > 0.03) then
Tercio@11 112 self.last_up = 0
Tercio@11 113 local current = new_slider:GetValue()
Tercio@11 114 if (current-2 > 0) then
Tercio@11 115 new_slider:SetValue (current-2)
Tercio@11 116 else
Tercio@11 117 new_slider:SetValue (0)
Tercio@11 118 end
Tercio@11 119 end
Tercio@11 120 end)
Tercio@11 121 end)
Tercio@11 122 botao_cima:SetScript ("OnMouseUp", function(self)
Tercio@11 123 self.precionado = false
Tercio@11 124 self:SetScript ("OnUpdate", nil)
Tercio@11 125 end)
Tercio@11 126 --> isso aqui pra quando o slider ativar, o scroll fica na posição zero
Tercio@11 127 botao_cima:SetScript ("OnEnable", function (self)
Tercio@11 128 local current = new_slider:GetValue()
Tercio@11 129 if (current == 0) then
Tercio@11 130 botao_cima:Disable()
Tercio@11 131 end
Tercio@11 132 end)
Tercio@11 133
Tercio@11 134 new_slider:SetScript ("OnValueChanged", function (self)
Tercio@11 135 local current = self:GetValue()
Tercio@11 136 master:SetVerticalScroll (current)
Tercio@11 137
Tercio@11 138 local minValue, maxValue = new_slider:GetMinMaxValues()
Tercio@11 139
Tercio@11 140 if (current == minValue) then
Tercio@11 141 botao_cima:Disable()
Tercio@11 142 elseif (not botao_cima:IsEnabled()) then
Tercio@11 143 botao_cima:Enable()
Tercio@11 144 end
Tercio@11 145
Tercio@11 146 if (current == maxValue) then
Tercio@11 147 botao_baixo:Disable()
Tercio@11 148 elseif (not botao_baixo:IsEnabled()) then
Tercio@11 149 botao_baixo:Enable()
Tercio@11 150 end
Tercio@11 151
Tercio@11 152 end)
Tercio@11 153
Tercio@11 154 new_slider:SetScript ("OnShow", function (self)
Tercio@11 155 botao_cima:Show()
Tercio@11 156 botao_baixo:Show()
Tercio@11 157 end)
Tercio@11 158
Tercio@11 159 new_slider:SetScript ("OnDisable", function (self)
Tercio@11 160 botao_cima:Disable()
Tercio@11 161 botao_baixo:Disable()
Tercio@11 162 end)
Tercio@11 163
Tercio@11 164 new_slider:SetScript ("OnEnable", function (self)
Tercio@11 165 botao_cima:Enable()
Tercio@11 166 botao_baixo:Enable()
Tercio@11 167 end)
Tercio@11 168
Tercio@11 169 master:SetScript ("OnMouseWheel", function (self, delta)
Tercio@11 170 if (not new_slider:IsEnabled()) then
Tercio@11 171 return
Tercio@11 172 end
Tercio@11 173
Tercio@11 174 local current = new_slider:GetValue()
Tercio@11 175 if (delta < 0) then
Tercio@11 176 --baixo
Tercio@11 177 local minValue, maxValue = new_slider:GetMinMaxValues()
Tercio@11 178 if (current + (master.wheel_jump or 20) < maxValue) then
Tercio@11 179 new_slider:SetValue (current + (master.wheel_jump or 20))
Tercio@11 180 else
Tercio@11 181 new_slider:SetValue (maxValue)
Tercio@11 182 end
Tercio@11 183 elseif (delta > 0) then
Tercio@11 184 --cima
Tercio@11 185 if (current + (master.wheel_jump or 20) > 0) then
Tercio@11 186 new_slider:SetValue (current - (master.wheel_jump or 20))
Tercio@11 187 else
Tercio@11 188 new_slider:SetValue (0)
Tercio@11 189 end
Tercio@11 190 end
Tercio@11 191 end)
Tercio@11 192
Tercio@11 193 function new_slider:Altura (h)
Tercio@11 194 self:SetHeight (h)
Tercio@11 195 end
Tercio@11 196
Tercio@11 197 function new_slider:Update (desativar)
Tercio@11 198
Tercio@11 199 if (desativar) then
Tercio@11 200 new_slider:Disable()
Tercio@11 201 new_slider:SetValue(0)
Tercio@11 202 new_slider.ativo = false
Tercio@11 203 master:EnableMouseWheel (false)
Tercio@11 204 return
Tercio@11 205 end
Tercio@11 206
Tercio@11 207 self.scrollMax = slave:GetHeight()-master:GetHeight()
Tercio@11 208 if (self.scrollMax > 0) then
Tercio@11 209 new_slider:SetMinMaxValues (0, self.scrollMax)
Tercio@11 210 if (not new_slider.ativo) then
Tercio@11 211 new_slider:Enable()
Tercio@11 212 new_slider.ativo = true
Tercio@11 213 master:EnableMouseWheel (true)
Tercio@11 214 end
Tercio@11 215 else
Tercio@11 216 new_slider:Disable()
Tercio@11 217 new_slider:SetValue(0)
Tercio@11 218 new_slider.ativo = false
Tercio@11 219 master:EnableMouseWheel (false)
Tercio@11 220 end
Tercio@11 221 end
Tercio@11 222
Tercio@11 223 function new_slider:cimaPoint (x, y)
Tercio@11 224 botao_cima:SetPoint ("BOTTOM", new_slider, "TOP", x, (y)-12)
Tercio@11 225 end
Tercio@11 226
Tercio@11 227 function new_slider:baixoPoint (x, y)
Tercio@11 228 botao_baixo:SetPoint ("TOP", new_slider, "BOTTOM", x, (y)+12)
Tercio@11 229 end
Tercio@11 230
Tercio@11 231 return new_slider
Tercio@11 232 end