diff Libs/DF/slider.lua @ 39:7944c081e5b4

- framework update. - ToC Update.
author Tercio
date Tue, 19 Jul 2016 13:23:40 -0300
parents a9c4a360ccfe
children 7c0f819a85c6
line wrap: on
line diff
--- a/Libs/DF/slider.lua	Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/slider.lua	Tue Jul 19 13:23:40 2016 -0300
@@ -17,7 +17,18 @@
 
 local cleanfunction = function() end
 local APISliderFunctions = false
-DFSliderMetaFunctions = DFSliderMetaFunctions or {}
+
+do
+	local metaPrototype = {
+		WidgetType = "slider",
+		SetHook = DF.SetHook,
+		RunHooksForWidget = DF.RunHooksForWidget,
+	}
+
+	_G [DF.GlobalWidgetControlNames ["slider"]] = _G [DF.GlobalWidgetControlNames ["slider"]] or metaPrototype
+end
+
+local DFSliderMetaFunctions = _G [DF.GlobalWidgetControlNames ["slider"]]
 
 ------------------------------------------------------------------------------------------------------------
 --> metatables
@@ -87,19 +98,18 @@
 		return _object()
 	end	
 
-	local get_members_function_index = {
-		["tooltip"] = gmember_tooltip,
-		["shown"] = gmember_shown,
-		["width"] = gmember_width,
-		["height"] = gmember_height,
-		["locked"] = gmember_locked,
-		["fractional"] = gmember_fractional,
-		["value"] = gmember_value,
-	}
+	DFSliderMetaFunctions.GetMembers = DFSliderMetaFunctions.GetMembers or {}
+	DFSliderMetaFunctions.GetMembers ["tooltip"] = gmember_tooltip
+	DFSliderMetaFunctions.GetMembers ["shown"] = gmember_shown
+	DFSliderMetaFunctions.GetMembers ["width"] = gmember_width
+	DFSliderMetaFunctions.GetMembers ["height"] = gmember_height
+	DFSliderMetaFunctions.GetMembers ["locked"] = gmember_locked
+	DFSliderMetaFunctions.GetMembers ["fractional"] = gmember_fractional
+	DFSliderMetaFunctions.GetMembers ["value"] = gmember_value
 
 	DFSliderMetaFunctions.__index = function (_table, _member_requested)
 
-		local func = get_members_function_index [_member_requested]
+		local func = DFSliderMetaFunctions.GetMembers [_member_requested]
 		if (func) then
 			return func (_table, _member_requested)
 		end
@@ -163,20 +173,19 @@
 		_object (_value)
 	end
 	
-	local set_members_function_index = {
-		["tooltip"] = smember_tooltip,
-		["show"] = smember_show,
-		["hide"] = smember_hide,
-		["backdrop"] = smember_backdrop,
-		["width"] = smember_width,
-		["height"] = smember_height,
-		["locked"] = smember_locked,
-		["fractional"] = smember_fractional,
-		["value"] = smember_value,
-	}
+	DFSliderMetaFunctions.SetMembers = DFSliderMetaFunctions.SetMembers or {}
+	DFSliderMetaFunctions.SetMembers ["tooltip"] = smember_tooltip
+	DFSliderMetaFunctions.SetMembers ["show"] = smember_show
+	DFSliderMetaFunctions.SetMembers ["hide"] = smember_hide
+	DFSliderMetaFunctions.SetMembers ["backdrop"] = smember_backdrop
+	DFSliderMetaFunctions.SetMembers ["width"] = smember_width
+	DFSliderMetaFunctions.SetMembers ["height"] = smember_height
+	DFSliderMetaFunctions.SetMembers ["locked"] = smember_locked
+	DFSliderMetaFunctions.SetMembers ["fractional"] = smember_fractional
+	DFSliderMetaFunctions.SetMembers ["value"] = smember_value
 	
 	DFSliderMetaFunctions.__newindex = function (_table, _key, _value)
-		local func = set_members_function_index [_key]
+		local func = DFSliderMetaFunctions.SetMembers [_key]
 		if (func) then
 			return func (_table, _value)
 		else
@@ -324,16 +333,6 @@
 		
 		return _rawset (self, "lockdown", true)
 	end
-	--print ("iskar disable:", DFSliderMetaFunctions.Disable)
-
---> hooks
-	function DFSliderMetaFunctions:SetHook (hookType, func)
-		if (func) then
-			_rawset (self, hookType.."Hook", func)
-		else
-			_rawset (self, hookType.."Hook", nil)
-		end
-	end
 
 ------------------------------------------------------------------------------------------------------------
 --> scripts
@@ -346,11 +345,10 @@
 	
 		DetailsFrameworkSliderButtons1:ShowMe (slider)
 	
-		if (slider.MyObject.OnEnterHook) then
-			local interrupt = slider.MyObject.OnEnterHook (slider)
-			if (interrupt) then
-				return
-			end
+		local capsule = slider.MyObject
+		local kill = capsule:RunHooksForWidget ("OnEnter", slider, capsule)
+		if (kill) then
+			return
 		end
 
 		slider.thumb:SetAlpha (1)
@@ -379,11 +377,10 @@
 	
 		DetailsFrameworkSliderButtons1:PrepareToHide()
 	
-		if (slider.MyObject.OnLeaveHook) then
-			local interrupt = slider.MyObject.OnLeaveHook (slider)
-			if (interrupt) then
-				return
-			end
+		local capsule = slider.MyObject
+		local kill = capsule:RunHooksForWidget ("OnLeave", slider, capsule)
+		if (kill) then
+			return
 		end
 		
 		slider.thumb:SetAlpha (.7)
@@ -435,6 +432,8 @@
 	
 	local button_plus = CreateFrame ("button", "DetailsFrameworkSliderButtonsPlusButton", f)
 	local button_minor = CreateFrame ("button", "DetailsFrameworkSliderButtonsMinorButton", f)
+	button_plus:SetFrameStrata (f:GetFrameStrata())
+	button_minor:SetFrameStrata (f:GetFrameStrata())
 	
 	button_plus:SetScript ("OnEnter", function (self)
 		if (f.is_going_hide) then
@@ -650,25 +649,34 @@
 	end
 	
 	local OnMouseDown = function (slider, button)
+		slider.MyObject.IsValueChanging = true
+		
+		local capsule = slider.MyObject
+		local kill = capsule:RunHooksForWidget ("OnMouseDown", slider, button, capsule)
+		if (kill) then
+			return
+		end
+		
 		if (button == "RightButton") then
 			slider.MyObject:TypeValue()
 		end
 	end
 	
 	local OnMouseUp = function (slider, button)
-		--if (button == "RightButton") then
-		--	if (slider.MyObject.typing_value) then
-		--		slider.MyObject:SetValue (slider.MyObject.previous_value [2])
-		--	end
-		--end
+		slider.MyObject.IsValueChanging = nil
+		
+		local capsule = slider.MyObject
+		local kill = capsule:RunHooksForWidget ("OnMouseUp", slider, button, capsule)
+		if (kill) then
+			return
+		end
 	end
 	
 	local OnHide = function (slider)
-		if (slider.MyObject.OnHideHook) then
-			local interrupt = slider.MyObject.OnHideHook (slider)
-			if (interrupt) then
-				return
-			end
+		local capsule = slider.MyObject
+		local kill = capsule:RunHooksForWidget ("OnHide", slider, capsule)
+		if (kill) then
+			return
 		end
 		
 		if (slider.MyObject.typing_value) then
@@ -679,11 +687,10 @@
 	end
 	
 	local OnShow = function (slider)
-		if (slider.MyObject.OnShowHook) then
-			local interrupt = slider.MyObject.OnShowHook (slider)
-			if (interrupt) then
-				return
-			end
+		local capsule = slider.MyObject
+		local kill = capsule:RunHooksForWidget ("OnShow", slider, capsule)
+		if (kill) then
+			return
 		end
 	end
 	
@@ -707,13 +714,16 @@
 		table_insert (slider.MyObject.previous_value, 1, amt)
 		table_remove (slider.MyObject.previous_value, 4)
 		
-		if (slider.MyObject.OnValueChangeHook) then
-			local interrupt = slider.MyObject.OnValueChangeHook (slider, slider.MyObject.FixedValue, amt)
-			if (interrupt) then
-				return
-			end
+		local capsule = slider.MyObject
+		local kill = capsule:RunHooksForWidget ("OnValueChanged", slider, capsule.FixedValue, amt, capsule)
+		if (kill) then
+			return
 		end
-
+		local kill = capsule:RunHooksForWidget ("OnValueChange", slider, capsule.FixedValue, amt, capsule)
+		if (kill) then
+			return
+		end
+		
 		if (slider.MyObject.OnValueChanged) then
 			slider.MyObject.OnValueChanged (slider, slider.MyObject.FixedValue, amt)
 		end
@@ -1084,17 +1094,8 @@
 	h = h or 19
 	
 	--> default members:
-		--> hooks
-		SliderObject.OnEnterHook = nil
-		SliderObject.OnLeaveHook = nil
-		SliderObject.OnHideHook = nil
-		SliderObject.OnShowHook = nil
-		SliderObject.OnValueChangeHook = nil
-		--> misc
 		SliderObject.lockdown = false
 		SliderObject.container = container
-		SliderObject.have_tooltip = nil
-		SliderObject.FixedValue = nil
 		SliderObject.useDecimals = isDecemal or false
 		
 	SliderObject.slider = CreateFrame ("slider", name, parent)
@@ -1124,6 +1125,7 @@
 
 	SliderObject.slider:SetBackdrop ({edgeFile = "Interface\\Buttons\\UI-SliderBar-Border", edgeSize = 8})
 	SliderObject.slider:SetBackdropColor (0.9, 0.7, 0.7, 1.0)
+	--SliderObject.slider:SetBackdropColor (0, 0, 0, 1)
 
 	SliderObject.thumb = SliderObject.slider:CreateTexture (nil, "artwork")
 	SliderObject.thumb:SetTexture ("Interface\\Buttons\\UI-ScrollBar-Knob")
@@ -1156,15 +1158,26 @@
 	SliderObject.previous_value = {defaultv or 0, 0, 0}
 	
 	--> hooks
-		SliderObject.slider:SetScript ("OnEnter", OnEnter)
-		SliderObject.slider:SetScript ("OnLeave", OnLeave)
-		SliderObject.slider:SetScript ("OnHide", OnHide)
-		SliderObject.slider:SetScript ("OnShow", OnShow)
-		SliderObject.slider:SetScript ("OnValueChanged", OnValueChanged)
-		SliderObject.slider:SetScript ("OnMouseDown", OnMouseDown)
-		SliderObject.slider:SetScript ("OnMouseUp", OnMouseUp)
+	SliderObject.HookList = {
+		OnEnter = {},
+		OnLeave = {},
+		OnHide = {},
+		OnShow = {},
+		OnMouseDown = {},
+		OnMouseUp = {},
 		
-		
+		OnValueChange = {},
+		OnValueChanged = {},
+	}
+	
+	SliderObject.slider:SetScript ("OnEnter", OnEnter)
+	SliderObject.slider:SetScript ("OnLeave", OnLeave)
+	SliderObject.slider:SetScript ("OnHide", OnHide)
+	SliderObject.slider:SetScript ("OnShow", OnShow)
+	SliderObject.slider:SetScript ("OnValueChanged", OnValueChanged)
+	SliderObject.slider:SetScript ("OnMouseDown", OnMouseDown)
+	SliderObject.slider:SetScript ("OnMouseUp", OnMouseUp)
+
 	_setmetatable (SliderObject, DFSliderMetaFunctions)
 	
 	if (with_label) then