comparison 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
comparison
equal deleted inserted replaced
38:219f04e5ba55 39:7944c081e5b4
15 15
16 local SharedMedia = LibStub:GetLibrary("LibSharedMedia-3.0") 16 local SharedMedia = LibStub:GetLibrary("LibSharedMedia-3.0")
17 17
18 local cleanfunction = function() end 18 local cleanfunction = function() end
19 local APISliderFunctions = false 19 local APISliderFunctions = false
20 DFSliderMetaFunctions = DFSliderMetaFunctions or {} 20
21 do
22 local metaPrototype = {
23 WidgetType = "slider",
24 SetHook = DF.SetHook,
25 RunHooksForWidget = DF.RunHooksForWidget,
26 }
27
28 _G [DF.GlobalWidgetControlNames ["slider"]] = _G [DF.GlobalWidgetControlNames ["slider"]] or metaPrototype
29 end
30
31 local DFSliderMetaFunctions = _G [DF.GlobalWidgetControlNames ["slider"]]
21 32
22 ------------------------------------------------------------------------------------------------------------ 33 ------------------------------------------------------------------------------------------------------------
23 --> metatables 34 --> metatables
24 35
25 DFSliderMetaFunctions.__call = function (_table, value) 36 DFSliderMetaFunctions.__call = function (_table, value)
85 --> value 96 --> value
86 local gmember_value = function (_object) 97 local gmember_value = function (_object)
87 return _object() 98 return _object()
88 end 99 end
89 100
90 local get_members_function_index = { 101 DFSliderMetaFunctions.GetMembers = DFSliderMetaFunctions.GetMembers or {}
91 ["tooltip"] = gmember_tooltip, 102 DFSliderMetaFunctions.GetMembers ["tooltip"] = gmember_tooltip
92 ["shown"] = gmember_shown, 103 DFSliderMetaFunctions.GetMembers ["shown"] = gmember_shown
93 ["width"] = gmember_width, 104 DFSliderMetaFunctions.GetMembers ["width"] = gmember_width
94 ["height"] = gmember_height, 105 DFSliderMetaFunctions.GetMembers ["height"] = gmember_height
95 ["locked"] = gmember_locked, 106 DFSliderMetaFunctions.GetMembers ["locked"] = gmember_locked
96 ["fractional"] = gmember_fractional, 107 DFSliderMetaFunctions.GetMembers ["fractional"] = gmember_fractional
97 ["value"] = gmember_value, 108 DFSliderMetaFunctions.GetMembers ["value"] = gmember_value
98 }
99 109
100 DFSliderMetaFunctions.__index = function (_table, _member_requested) 110 DFSliderMetaFunctions.__index = function (_table, _member_requested)
101 111
102 local func = get_members_function_index [_member_requested] 112 local func = DFSliderMetaFunctions.GetMembers [_member_requested]
103 if (func) then 113 if (func) then
104 return func (_table, _member_requested) 114 return func (_table, _member_requested)
105 end 115 end
106 116
107 local fromMe = _rawget (_table, _member_requested) 117 local fromMe = _rawget (_table, _member_requested)
161 --> value 171 --> value
162 local smember_value = function (_object, _value) 172 local smember_value = function (_object, _value)
163 _object (_value) 173 _object (_value)
164 end 174 end
165 175
166 local set_members_function_index = { 176 DFSliderMetaFunctions.SetMembers = DFSliderMetaFunctions.SetMembers or {}
167 ["tooltip"] = smember_tooltip, 177 DFSliderMetaFunctions.SetMembers ["tooltip"] = smember_tooltip
168 ["show"] = smember_show, 178 DFSliderMetaFunctions.SetMembers ["show"] = smember_show
169 ["hide"] = smember_hide, 179 DFSliderMetaFunctions.SetMembers ["hide"] = smember_hide
170 ["backdrop"] = smember_backdrop, 180 DFSliderMetaFunctions.SetMembers ["backdrop"] = smember_backdrop
171 ["width"] = smember_width, 181 DFSliderMetaFunctions.SetMembers ["width"] = smember_width
172 ["height"] = smember_height, 182 DFSliderMetaFunctions.SetMembers ["height"] = smember_height
173 ["locked"] = smember_locked, 183 DFSliderMetaFunctions.SetMembers ["locked"] = smember_locked
174 ["fractional"] = smember_fractional, 184 DFSliderMetaFunctions.SetMembers ["fractional"] = smember_fractional
175 ["value"] = smember_value, 185 DFSliderMetaFunctions.SetMembers ["value"] = smember_value
176 }
177 186
178 DFSliderMetaFunctions.__newindex = function (_table, _key, _value) 187 DFSliderMetaFunctions.__newindex = function (_table, _key, _value)
179 local func = set_members_function_index [_key] 188 local func = DFSliderMetaFunctions.SetMembers [_key]
180 if (func) then 189 if (func) then
181 return func (_table, _value) 190 return func (_table, _value)
182 else 191 else
183 return _rawset (_table, _key, _value) 192 return _rawset (_table, _key, _value)
184 end 193 end
322 331
323 --print ("result 2:", self.checked_texture:IsShown(), self.checked_texture:GetAlpha(), self.checked_texture:GetSize()) 332 --print ("result 2:", self.checked_texture:IsShown(), self.checked_texture:GetAlpha(), self.checked_texture:GetSize())
324 333
325 return _rawset (self, "lockdown", true) 334 return _rawset (self, "lockdown", true)
326 end 335 end
327 --print ("iskar disable:", DFSliderMetaFunctions.Disable)
328
329 --> hooks
330 function DFSliderMetaFunctions:SetHook (hookType, func)
331 if (func) then
332 _rawset (self, hookType.."Hook", func)
333 else
334 _rawset (self, hookType.."Hook", nil)
335 end
336 end
337 336
338 ------------------------------------------------------------------------------------------------------------ 337 ------------------------------------------------------------------------------------------------------------
339 --> scripts 338 --> scripts
340 339
341 local OnEnter = function (slider) 340 local OnEnter = function (slider)
344 return 343 return
345 end 344 end
346 345
347 DetailsFrameworkSliderButtons1:ShowMe (slider) 346 DetailsFrameworkSliderButtons1:ShowMe (slider)
348 347
349 if (slider.MyObject.OnEnterHook) then 348 local capsule = slider.MyObject
350 local interrupt = slider.MyObject.OnEnterHook (slider) 349 local kill = capsule:RunHooksForWidget ("OnEnter", slider, capsule)
351 if (interrupt) then 350 if (kill) then
352 return 351 return
353 end
354 end 352 end
355 353
356 slider.thumb:SetAlpha (1) 354 slider.thumb:SetAlpha (1)
357 355
358 if (slider.MyObject.onenter_backdrop_border_color) then 356 if (slider.MyObject.onenter_backdrop_border_color) then
377 return 375 return
378 end 376 end
379 377
380 DetailsFrameworkSliderButtons1:PrepareToHide() 378 DetailsFrameworkSliderButtons1:PrepareToHide()
381 379
382 if (slider.MyObject.OnLeaveHook) then 380 local capsule = slider.MyObject
383 local interrupt = slider.MyObject.OnLeaveHook (slider) 381 local kill = capsule:RunHooksForWidget ("OnLeave", slider, capsule)
384 if (interrupt) then 382 if (kill) then
385 return 383 return
386 end
387 end 384 end
388 385
389 slider.thumb:SetAlpha (.7) 386 slider.thumb:SetAlpha (.7)
390 387
391 if (slider.MyObject.onleave_backdrop_border_color) then 388 if (slider.MyObject.onleave_backdrop_border_color) then
433 f:SetScript ("OnUpdate", going_hide) 430 f:SetScript ("OnUpdate", going_hide)
434 end 431 end
435 432
436 local button_plus = CreateFrame ("button", "DetailsFrameworkSliderButtonsPlusButton", f) 433 local button_plus = CreateFrame ("button", "DetailsFrameworkSliderButtonsPlusButton", f)
437 local button_minor = CreateFrame ("button", "DetailsFrameworkSliderButtonsMinorButton", f) 434 local button_minor = CreateFrame ("button", "DetailsFrameworkSliderButtonsMinorButton", f)
435 button_plus:SetFrameStrata (f:GetFrameStrata())
436 button_minor:SetFrameStrata (f:GetFrameStrata())
438 437
439 button_plus:SetScript ("OnEnter", function (self) 438 button_plus:SetScript ("OnEnter", function (self)
440 if (f.is_going_hide) then 439 if (f.is_going_hide) then
441 f:SetScript ("OnUpdate", nil) 440 f:SetScript ("OnUpdate", nil)
442 f.is_going_hide = false 441 f.is_going_hide = false
648 DFSliderMetaFunctions.editbox_typevalue:Show() 647 DFSliderMetaFunctions.editbox_typevalue:Show()
649 end 648 end
650 end 649 end
651 650
652 local OnMouseDown = function (slider, button) 651 local OnMouseDown = function (slider, button)
652 slider.MyObject.IsValueChanging = true
653
654 local capsule = slider.MyObject
655 local kill = capsule:RunHooksForWidget ("OnMouseDown", slider, button, capsule)
656 if (kill) then
657 return
658 end
659
653 if (button == "RightButton") then 660 if (button == "RightButton") then
654 slider.MyObject:TypeValue() 661 slider.MyObject:TypeValue()
655 end 662 end
656 end 663 end
657 664
658 local OnMouseUp = function (slider, button) 665 local OnMouseUp = function (slider, button)
659 --if (button == "RightButton") then 666 slider.MyObject.IsValueChanging = nil
660 -- if (slider.MyObject.typing_value) then 667
661 -- slider.MyObject:SetValue (slider.MyObject.previous_value [2]) 668 local capsule = slider.MyObject
662 -- end 669 local kill = capsule:RunHooksForWidget ("OnMouseUp", slider, button, capsule)
663 --end 670 if (kill) then
671 return
672 end
664 end 673 end
665 674
666 local OnHide = function (slider) 675 local OnHide = function (slider)
667 if (slider.MyObject.OnHideHook) then 676 local capsule = slider.MyObject
668 local interrupt = slider.MyObject.OnHideHook (slider) 677 local kill = capsule:RunHooksForWidget ("OnHide", slider, capsule)
669 if (interrupt) then 678 if (kill) then
670 return 679 return
671 end
672 end 680 end
673 681
674 if (slider.MyObject.typing_value) then 682 if (slider.MyObject.typing_value) then
675 DFSliderMetaFunctions.editbox_typevalue:ClearFocus() 683 DFSliderMetaFunctions.editbox_typevalue:ClearFocus()
676 DFSliderMetaFunctions.editbox_typevalue:SetText ("") 684 DFSliderMetaFunctions.editbox_typevalue:SetText ("")
677 slider.MyObject.typing_valu = false 685 slider.MyObject.typing_valu = false
678 end 686 end
679 end 687 end
680 688
681 local OnShow = function (slider) 689 local OnShow = function (slider)
682 if (slider.MyObject.OnShowHook) then 690 local capsule = slider.MyObject
683 local interrupt = slider.MyObject.OnShowHook (slider) 691 local kill = capsule:RunHooksForWidget ("OnShow", slider, capsule)
684 if (interrupt) then 692 if (kill) then
685 return 693 return
686 end
687 end 694 end
688 end 695 end
689 696
690 local table_insert = table.insert 697 local table_insert = table.insert
691 local table_remove = table.remove 698 local table_remove = table.remove
705 end 712 end
706 713
707 table_insert (slider.MyObject.previous_value, 1, amt) 714 table_insert (slider.MyObject.previous_value, 1, amt)
708 table_remove (slider.MyObject.previous_value, 4) 715 table_remove (slider.MyObject.previous_value, 4)
709 716
710 if (slider.MyObject.OnValueChangeHook) then 717 local capsule = slider.MyObject
711 local interrupt = slider.MyObject.OnValueChangeHook (slider, slider.MyObject.FixedValue, amt) 718 local kill = capsule:RunHooksForWidget ("OnValueChanged", slider, capsule.FixedValue, amt, capsule)
712 if (interrupt) then 719 if (kill) then
713 return 720 return
714 end 721 end
715 end 722 local kill = capsule:RunHooksForWidget ("OnValueChange", slider, capsule.FixedValue, amt, capsule)
716 723 if (kill) then
724 return
725 end
726
717 if (slider.MyObject.OnValueChanged) then 727 if (slider.MyObject.OnValueChanged) then
718 slider.MyObject.OnValueChanged (slider, slider.MyObject.FixedValue, amt) 728 slider.MyObject.OnValueChanged (slider, slider.MyObject.FixedValue, amt)
719 end 729 end
720 730
721 if (amt < 10 and amt >= 1) then 731 if (amt < 10 and amt >= 1) then
1082 1092
1083 w = w or 130 1093 w = w or 130
1084 h = h or 19 1094 h = h or 19
1085 1095
1086 --> default members: 1096 --> default members:
1087 --> hooks
1088 SliderObject.OnEnterHook = nil
1089 SliderObject.OnLeaveHook = nil
1090 SliderObject.OnHideHook = nil
1091 SliderObject.OnShowHook = nil
1092 SliderObject.OnValueChangeHook = nil
1093 --> misc
1094 SliderObject.lockdown = false 1097 SliderObject.lockdown = false
1095 SliderObject.container = container 1098 SliderObject.container = container
1096 SliderObject.have_tooltip = nil
1097 SliderObject.FixedValue = nil
1098 SliderObject.useDecimals = isDecemal or false 1099 SliderObject.useDecimals = isDecemal or false
1099 1100
1100 SliderObject.slider = CreateFrame ("slider", name, parent) 1101 SliderObject.slider = CreateFrame ("slider", name, parent)
1101 SliderObject.widget = SliderObject.slider 1102 SliderObject.widget = SliderObject.slider
1102 1103
1122 SliderObject.slider:SetValue (defaultv) 1123 SliderObject.slider:SetValue (defaultv)
1123 SliderObject.ivalue = defaultv 1124 SliderObject.ivalue = defaultv
1124 1125
1125 SliderObject.slider:SetBackdrop ({edgeFile = "Interface\\Buttons\\UI-SliderBar-Border", edgeSize = 8}) 1126 SliderObject.slider:SetBackdrop ({edgeFile = "Interface\\Buttons\\UI-SliderBar-Border", edgeSize = 8})
1126 SliderObject.slider:SetBackdropColor (0.9, 0.7, 0.7, 1.0) 1127 SliderObject.slider:SetBackdropColor (0.9, 0.7, 0.7, 1.0)
1128 --SliderObject.slider:SetBackdropColor (0, 0, 0, 1)
1127 1129
1128 SliderObject.thumb = SliderObject.slider:CreateTexture (nil, "artwork") 1130 SliderObject.thumb = SliderObject.slider:CreateTexture (nil, "artwork")
1129 SliderObject.thumb:SetTexture ("Interface\\Buttons\\UI-ScrollBar-Knob") 1131 SliderObject.thumb:SetTexture ("Interface\\Buttons\\UI-ScrollBar-Knob")
1130 SliderObject.thumb:SetSize (30+(h*0.2), h*1.2) 1132 SliderObject.thumb:SetSize (30+(h*0.2), h*1.2)
1131 SliderObject.thumb:SetAlpha (0.7) 1133 SliderObject.thumb:SetAlpha (0.7)
1154 SliderObject.slider.amt = SliderObject.amt 1156 SliderObject.slider.amt = SliderObject.amt
1155 1157
1156 SliderObject.previous_value = {defaultv or 0, 0, 0} 1158 SliderObject.previous_value = {defaultv or 0, 0, 0}
1157 1159
1158 --> hooks 1160 --> hooks
1159 SliderObject.slider:SetScript ("OnEnter", OnEnter) 1161 SliderObject.HookList = {
1160 SliderObject.slider:SetScript ("OnLeave", OnLeave) 1162 OnEnter = {},
1161 SliderObject.slider:SetScript ("OnHide", OnHide) 1163 OnLeave = {},
1162 SliderObject.slider:SetScript ("OnShow", OnShow) 1164 OnHide = {},
1163 SliderObject.slider:SetScript ("OnValueChanged", OnValueChanged) 1165 OnShow = {},
1164 SliderObject.slider:SetScript ("OnMouseDown", OnMouseDown) 1166 OnMouseDown = {},
1165 SliderObject.slider:SetScript ("OnMouseUp", OnMouseUp) 1167 OnMouseUp = {},
1166 1168
1167 1169 OnValueChange = {},
1170 OnValueChanged = {},
1171 }
1172
1173 SliderObject.slider:SetScript ("OnEnter", OnEnter)
1174 SliderObject.slider:SetScript ("OnLeave", OnLeave)
1175 SliderObject.slider:SetScript ("OnHide", OnHide)
1176 SliderObject.slider:SetScript ("OnShow", OnShow)
1177 SliderObject.slider:SetScript ("OnValueChanged", OnValueChanged)
1178 SliderObject.slider:SetScript ("OnMouseDown", OnMouseDown)
1179 SliderObject.slider:SetScript ("OnMouseUp", OnMouseUp)
1180
1168 _setmetatable (SliderObject, DFSliderMetaFunctions) 1181 _setmetatable (SliderObject, DFSliderMetaFunctions)
1169 1182
1170 if (with_label) then 1183 if (with_label) then
1171 local label = DF:CreateLabel (SliderObject.slider, with_label, nil, nil, nil, "label", nil, "overlay") 1184 local label = DF:CreateLabel (SliderObject.slider, with_label, nil, nil, nil, "label", nil, "overlay")
1172 label.text = with_label 1185 label.text = with_label