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