# HG changeset patch
# User Tercio
# Date 1468945420 10800
# Node ID 7944c081e5b4c37f9c09874eae73365a9aee017a
# Parent 219f04e5ba555fdf793ecbd2fda33dfa171e24be
- framework update.
- ToC Update.
diff -r 219f04e5ba55 -r 7944c081e5b4 Hansgar_And_Franzok_Assist.toc
--- a/Hansgar_And_Franzok_Assist.toc Mon Jul 04 23:06:23 2016 -0300
+++ b/Hansgar_And_Franzok_Assist.toc Tue Jul 19 13:23:40 2016 -0300
@@ -1,4 +1,4 @@
-## Interface: 60200
+## Interface: 70000
## Title: Hansgar And Franzok Assist
## Notes: Helps with Smart Stampers on Mythic during this encounter.
## SavedVariables: Hansgar_And_Franzok_DB
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/button.lua
--- a/Libs/DF/button.lua Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/button.lua Tue Jul 19 13:23:40 2016 -0300
@@ -16,7 +16,18 @@
local cleanfunction = function() end
local APIButtonFunctions = false
-local ButtonMetaFunctions = {}
+
+do
+ local metaPrototype = {
+ WidgetType = "button",
+ SetHook = DF.SetHook,
+ RunHooksForWidget = DF.RunHooksForWidget,
+ }
+
+ _G [DF.GlobalWidgetControlNames ["button"]] = _G [DF.GlobalWidgetControlNames ["button"]] or metaPrototype
+end
+
+local ButtonMetaFunctions = _G [DF.GlobalWidgetControlNames ["button"]]
------------------------------------------------------------------------------------------------------------
--> metatables
@@ -75,26 +86,25 @@
return _rawget (_object, "is_locked")
end
- local get_members_function_index = {
- ["tooltip"] = gmember_tooltip,
- ["shown"] = gmember_shown,
- ["width"] = gmember_width,
- ["height"] = gmember_height,
- ["text"] = gmember_text,
- ["clickfunction"] = gmember_function,
- ["texture"] = gmember_texture,
- ["locked"] = gmember_locked,
- ["fontcolor"] = gmember_textcolor,
- ["fontface"] = gmember_textfont,
- ["fontsize"] = gmember_textsize,
- ["textcolor"] = gmember_textcolor, --alias
- ["textfont"] = gmember_textfont, --alias
- ["textsize"] = gmember_textsize --alias
- }
+ ButtonMetaFunctions.GetMembers = ButtonMetaFunctions.GetMembers or {}
+ ButtonMetaFunctions.GetMembers ["tooltip"] = gmember_tooltip
+ ButtonMetaFunctions.GetMembers ["shown"] = gmember_shown
+ ButtonMetaFunctions.GetMembers ["width"] = gmember_width
+ ButtonMetaFunctions.GetMembers ["height"] = gmember_height
+ ButtonMetaFunctions.GetMembers ["text"] = gmember_text
+ ButtonMetaFunctions.GetMembers ["clickfunction"] = gmember_function
+ ButtonMetaFunctions.GetMembers ["texture"] = gmember_texture
+ ButtonMetaFunctions.GetMembers ["locked"] = gmember_locked
+ ButtonMetaFunctions.GetMembers ["fontcolor"] = gmember_textcolor
+ ButtonMetaFunctions.GetMembers ["fontface"] = gmember_textfont
+ ButtonMetaFunctions.GetMembers ["fontsize"] = gmember_textsize
+ ButtonMetaFunctions.GetMembers ["textcolor"] = gmember_textcolor --alias
+ ButtonMetaFunctions.GetMembers ["textfont"] = gmember_textfont --alias
+ ButtonMetaFunctions.GetMembers ["textsize"] = gmember_textsize --alias
ButtonMetaFunctions.__index = function (_table, _member_requested)
- local func = get_members_function_index [_member_requested]
+ local func = ButtonMetaFunctions.GetMembers [_member_requested]
if (func) then
return func (_table, _member_requested)
end
@@ -206,25 +216,24 @@
_object.capsule_textalign = "right"
end
end
-
- local set_members_function_index = {
- ["tooltip"] = smember_tooltip,
- ["show"] = smember_show,
- ["hide"] = smember_hide,
- ["width"] = smember_width,
- ["height"] = smember_height,
- ["text"] = smember_text,
- ["clickfunction"] = smember_function,
- ["textcolor"] = smember_textcolor,
- ["textfont"] = smember_textfont,
- ["textsize"] = smember_textsize,
- ["texture"] = smember_texture,
- ["locked"] = smember_locked,
- ["textalign"] = smember_textalign,
- }
+
+ ButtonMetaFunctions.SetMembers = ButtonMetaFunctions.SetMembers or {}
+ ButtonMetaFunctions.SetMembers ["tooltip"] = smember_tooltip
+ ButtonMetaFunctions.SetMembers ["show"] = smember_show
+ ButtonMetaFunctions.SetMembers ["hide"] = smember_hide
+ ButtonMetaFunctions.SetMembers ["width"] = smember_width
+ ButtonMetaFunctions.SetMembers ["height"] = smember_height
+ ButtonMetaFunctions.SetMembers ["text"] = smember_text
+ ButtonMetaFunctions.SetMembers ["clickfunction"] = smember_function
+ ButtonMetaFunctions.SetMembers ["textcolor"] = smember_textcolor
+ ButtonMetaFunctions.SetMembers ["textfont"] = smember_textfont
+ ButtonMetaFunctions.SetMembers ["textsize"] = smember_textsize
+ ButtonMetaFunctions.SetMembers ["texture"] = smember_texture
+ ButtonMetaFunctions.SetMembers ["locked"] = smember_locked
+ ButtonMetaFunctions.SetMembers ["textalign"] = smember_textalign
ButtonMetaFunctions.__newindex = function (_table, _key, _value)
- local func = set_members_function_index [_key]
+ local func = ButtonMetaFunctions.SetMembers [_key]
if (func) then
return func (_table, _value)
else
@@ -473,15 +482,6 @@
return self.funcright()
end
---> hooks
- function ButtonMetaFunctions:SetHook (hookType, func)
- if (func) then
- _rawset (self, hookType.."Hook", func)
- else
- _rawset (self, hookType.."Hook", nil)
- end
- end
-
--> custom textures
function ButtonMetaFunctions:InstallCustomTexture (texture, rect, coords, use_split, side_textures, side_textures2)
@@ -587,6 +587,8 @@
local OnEnter = function (button)
+ local capsule = button.MyObject
+
if (button.textureTopLeft) then
button.textureLeft:SetTexCoord (0, 4/128, 40/128, 56/128)
button.textureRight:SetTexCoord (124/128, 1, 40/128, 56/128)
@@ -598,12 +600,10 @@
button.textureBottomLeft:SetTexCoord (0, 8/128, 56/128, 64/128)
button.textureBottomRight:SetTexCoord (120/128, 1, 56/128, 64/128)
end
-
- if (button.MyObject.OnEnterHook) then
- local interrupt = button.MyObject.OnEnterHook (button, button.MyObject)
- if (interrupt) then
- return
- end
+
+ local kill = capsule:RunHooksForWidget ("OnEnter", button, capsule)
+ if (kill) then
+ return
end
button.MyObject.is_mouse_over = true
@@ -637,6 +637,8 @@
local OnLeave = function (button)
+ local capsule = button.MyObject
+
if (button.textureLeft and not button.MyObject.is_mouse_down) then
button.textureLeft:SetTexCoord (0, 4/128, 9/128, 24/128)
button.textureRight:SetTexCoord (124/128, 1, 9/128, 24/128)
@@ -648,12 +650,10 @@
button.textureBottomLeft:SetTexCoord (0, 8/128, 24/128, 32/128)
button.textureBottomRight:SetTexCoord (120/128, 1, 24/128, 32/128)
end
-
- if (button.MyObject.OnLeaveHook) then
- local interrupt = button.MyObject.OnLeaveHook (button, button.MyObject)
- if (interrupt) then
- return
- end
+
+ local kill = capsule:RunHooksForWidget ("OnLeave", button, capsule)
+ if (kill) then
+ return
end
button.MyObject.is_mouse_over = false
@@ -682,27 +682,27 @@
end
local OnHide = function (button)
- if (button.MyObject.OnHideHook) then
- local interrupt = button.MyObject.OnHideHook (button, button.MyObject)
- if (interrupt) then
- return
- end
+ local capsule = button.MyObject
+ local kill = capsule:RunHooksForWidget ("OnHide", button, capsule)
+ if (kill) then
+ return
end
end
local OnShow = function (button)
- if (button.MyObject.OnShowHook) then
- local interrupt = button.MyObject.OnShowHook (button, button.MyObject)
- if (interrupt) then
- return
- end
+ local capsule = button.MyObject
+ local kill = capsule:RunHooksForWidget ("OnShow", button, capsule)
+ if (kill) then
+ return
end
end
local OnMouseDown = function (button, buttontype)
+ local capsule = button.MyObject
+
if (not button:IsEnabled()) then
return
- end
+ end
if (button.textureTopLeft) then
button.textureLeft:SetTexCoord (0, 4/128, 72/128, 88/128)
@@ -715,12 +715,10 @@
button.textureBottomLeft:SetTexCoord (0, 8/128, 88/128, 96/128)
button.textureBottomRight:SetTexCoord (120/128, 1, 88/128, 96/128)
end
-
- if (button.MyObject.OnMouseDownHook) then
- local interrupt = button.MyObject.OnMouseDownHook (button, buttontype, button.MyObject)
- if (interrupt) then
- return
- end
+
+ local kill = capsule:RunHooksForWidget ("OnMouseDown", button, capsule)
+ if (kill) then
+ return
end
button.MyObject.is_mouse_down = true
@@ -803,11 +801,10 @@
end
end
- if (button.MyObject.OnMouseUpHook) then
- local interrupt = button.MyObject.OnMouseUpHook (button, buttontype, button.MyObject)
- if (interrupt) then
- return
- end
+ local capsule = button.MyObject
+ local kill = capsule:RunHooksForWidget ("OnMouseUp", button, capsule)
+ if (kill) then
+ return
end
button.MyObject.is_mouse_down = false
@@ -957,20 +954,10 @@
end
--> default members:
- --> hooks
- ButtonObject.OnEnterHook = nil
- ButtonObject.OnLeaveHook = nil
- ButtonObject.OnHideHook = nil
- ButtonObject.OnShowHook = nil
- ButtonObject.OnMouseDownHook = nil
- ButtonObject.OnMouseUpHook = nil
- --> misc
ButtonObject.is_locked = true
ButtonObject.container = container
- ButtonObject.have_tooltip = nil
ButtonObject.options = {OnGrab = false}
-
ButtonObject.button = CreateFrame ("button", name, parent, "DetailsFrameworkButtonTemplate")
ButtonObject.widget = ButtonObject.button
@@ -1006,12 +993,15 @@
ButtonObject.button.text:SetText (text)
ButtonObject.button.text:SetPoint ("center", ButtonObject.button, "center")
-
+
local text_width = ButtonObject.button.text:GetStringWidth()
if (text_width > w-15 and ButtonObject.button.text:GetText() ~= "") then
- if (not short_method) then
+ if (short_method == false) then --> if is false, do not use auto resize
+ --do nothing
+ elseif (not short_method) then --> if the value is omitted, use the default resize
local new_width = text_width+15
ButtonObject.button:SetWidth (new_width)
+
elseif (short_method == 1) then
local loop = true
local textsize = 11
@@ -1051,6 +1041,15 @@
end
--> hooks
+ ButtonObject.HookList = {
+ OnEnter = {},
+ OnLeave = {},
+ OnHide = {},
+ OnShow = {},
+ OnMouseDown = {},
+ OnMouseUp = {},
+ }
+
ButtonObject.button:SetScript ("OnEnter", OnEnter)
ButtonObject.button:SetScript ("OnLeave", OnLeave)
ButtonObject.button:SetScript ("OnHide", OnHide)
@@ -1119,7 +1118,7 @@
--textura da cor
local img = DF:NewImage (button, nil, color_button_width, color_button_height, nil, nil, "color_texture", "$parentTex")
- img:SetTexture (1, 1, 1)
+ img:SetColorTexture (1, 1, 1)
img:SetPoint ("topleft", button.widget, "topleft", 1, -2)
img:SetPoint ("bottomright", button.widget, "bottomright", -1, 1)
img:SetDrawLayer ("background", 2)
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/button.xml
--- a/Libs/DF/button.xml Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/button.xml Tue Jul 19 13:23:40 2016 -0300
@@ -19,7 +19,7 @@
-
+
@@ -28,6 +28,8 @@
self.texture_disabled:Show()
+ self.texture_disabled:SetVertexColor (0, 0, 0)
+ self.texture_disabled:SetAlpha (.5)
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/cooltip.lua
--- a/Libs/DF/cooltip.lua Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/cooltip.lua Tue Jul 19 13:23:40 2016 -0300
@@ -2493,7 +2493,7 @@
end
--> check data integrity
- if (type (iconTexture) ~= "string" and (type (iconTexture) ~= "table" or not iconTexture.GetObjectType or iconTexture:GetObjectType() ~= "Texture") ) then
+ if ( (type (iconTexture) ~= "string" and type (iconTexture) ~= "number") and (type (iconTexture) ~= "table" or not iconTexture.GetObjectType or iconTexture:GetObjectType() ~= "Texture") ) then
return --> return error
end
@@ -3033,10 +3033,17 @@
--> all done
CoolTip:ClearAllOptions()
- local preset2_backdrop = {bgFile = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]], edgeFile = DF.folder .. "border_3", tile=true,
- edgeSize = 16, tileSize = 64, insets = {left = 3, right = 3, top = 4, bottom = 4}}
+-- local preset2_backdrop = {bgFile = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]], edgeFile = DF.folder .. "border_3", tile=true,
+-- edgeSize = 16, tileSize = 64, insets = {left = 3, right = 3, top = 4, bottom = 4}}
+ local preset2_backdrop = {bgFile = DF.folder .. "background", edgeFile = [[Interface\Buttons\WHITE8X8]], tile = true,
+ edgeSize = 1, tileSize = 16, insets = {left = 0, right = 0, top = 0, bottom = 0}}
+ local default_backdrop_color = {0.09019, 0.09019, 0.18823, 0.8}
+ local default_backdropborder_color = {1, 1, 1, 1}
+
+ local gray_table = {0.37, 0.37, 0.37, 0.95}
local white_table = {1, 1, 1, 1}
+ local black_table = {0.2, 0.2, 0.2, 1}
function CoolTip:Preset (number)
self:Reset()
@@ -3058,9 +3065,11 @@
self:SetOption ("ButtonsYMod", -4)
self:SetOption ("YSpacingMod", -4)
self:SetOption ("IgnoreButtonAutoHeight", true)
- self:SetColor (1, 0.5, 0.5, 0.5, 0.5)
- self:SetBackdrop (1, preset2_backdrop, nil, white_table)
+ --self:SetColor (1, 0.5, 0.5, 0.5, 0.5)
+ self:SetColor (1, 0.5, 0.5, 0.5, 0)
+
+ self:SetBackdrop (1, preset2_backdrop, gray_table, black_table)
end
end
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/dropdown.lua
--- a/Libs/DF/dropdown.lua Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/dropdown.lua Tue Jul 19 13:23:40 2016 -0300
@@ -16,7 +16,18 @@
local cleanfunction = function() end
local APIDropDownFunctions = false
-local DropDownMetaFunctions = {}
+
+do
+ local metaPrototype = {
+ WidgetType = "dropdown",
+ SetHook = DF.SetHook,
+ RunHooksForWidget = DF.RunHooksForWidget,
+ }
+
+ _G [DF.GlobalWidgetControlNames ["dropdown"]] = _G [DF.GlobalWidgetControlNames ["dropdown"]] or metaPrototype
+end
+
+local DropDownMetaFunctions = _G [DF.GlobalWidgetControlNames ["dropdown"]]
------------------------------------------------------------------------------------------------------------
--> metatables
@@ -65,21 +76,20 @@
return _rawget (self, "realsizeH")
end
- local get_members_function_index = {
- ["value"] = gmember_value,
- ["text"] = gmember_text,
- ["shown"] = gmember_shown,
- ["width"] = gmember_width,
- ["menuwidth"] = gmember_menuwidth,
- ["height"] = gmember_height,
- ["menuheight"] = gmember_menuheight,
- ["tooltip"] = gmember_tooltip,
- ["func"] = gmember_function,
- }
+ DropDownMetaFunctions.GetMembers = DropDownMetaFunctions.GetMembers or {}
+ DropDownMetaFunctions.GetMembers ["value"] = gmember_value
+ DropDownMetaFunctions.GetMembers ["text"] = gmember_text
+ DropDownMetaFunctions.GetMembers ["shown"] = gmember_shown
+ DropDownMetaFunctions.GetMembers ["width"] = gmember_width
+ DropDownMetaFunctions.GetMembers ["menuwidth"] = gmember_menuwidth
+ DropDownMetaFunctions.GetMembers ["height"] = gmember_height
+ DropDownMetaFunctions.GetMembers ["menuheight"] = gmember_menuheight
+ DropDownMetaFunctions.GetMembers ["tooltip"] = gmember_tooltip
+ DropDownMetaFunctions.GetMembers ["func"] = gmember_function
DropDownMetaFunctions.__index = function (_table, _member_requested)
- local func = get_members_function_index [_member_requested]
+ local func = DropDownMetaFunctions.GetMembers [_member_requested]
if (func) then
return func (_table, _member_requested)
end
@@ -135,19 +145,18 @@
_object:SetMenuSize (nil, _value)
end
- local set_members_function_index = {
- ["tooltip"] = smember_tooltip,
- ["show"] = smember_show,
- ["hide"] = smember_hide,
- ["width"] = smember_width,
- ["menuwidth"] = smember_menuwidth,
- ["height"] = smember_height,
- ["menuheight"] = smember_menuheight,
- ["func"] = smember_function,
- }
+ DropDownMetaFunctions.SetMembers = DropDownMetaFunctions.SetMembers or {}
+ DropDownMetaFunctions.SetMembers ["tooltip"] = smember_tooltip
+ DropDownMetaFunctions.SetMembers ["show"] = smember_show
+ DropDownMetaFunctions.SetMembers ["hide"] = smember_hide
+ DropDownMetaFunctions.SetMembers ["width"] = smember_width
+ DropDownMetaFunctions.SetMembers ["menuwidth"] = smember_menuwidth
+ DropDownMetaFunctions.SetMembers ["height"] = smember_height
+ DropDownMetaFunctions.SetMembers ["menuheight"] = smember_menuheight
+ DropDownMetaFunctions.SetMembers ["func"] = smember_function
DropDownMetaFunctions.__newindex = function (_table, _key, _value)
- local func = set_members_function_index [_key]
+ local func = DropDownMetaFunctions.SetMembers [_key]
if (func) then
return func (_table, _value)
else
@@ -285,15 +294,6 @@
_rawset (self, "FixedValue", value)
end
---> hooks
- function DropDownMetaFunctions:SetHook (hookType, func)
- if (func) then
- _rawset (self, hookType.."Hook", func)
- else
- _rawset (self, hookType.."Hook", nil)
- end
- end
-
------------------------------------------------------------------------------------------------------------
--> scripts
@@ -752,11 +752,10 @@
function DetailsFrameworkDropDownOnEnter (self)
- if (self.MyObject.OnEnterHook) then
- local interrupt = self.MyObject.OnEnterHook (self)
- if (interrupt) then
- return
- end
+ local capsule = self.MyObject
+ local kill = capsule:RunHooksForWidget ("OnEnter", self, capsule)
+ if (kill) then
+ return
end
if (self.MyObject.onenter_backdrop) then
@@ -787,11 +786,10 @@
end
function DetailsFrameworkDropDownOnLeave (self)
- if (self.MyObject.OnLeaveHook) then
- local interrupt = self.MyObject.OnLeaveHook (self)
- if (interrupt) then
- return
- end
+ local capsule = self.MyObject
+ local kill = capsule:RunHooksForWidget ("OnLeave", self, capsule)
+ if (kill) then
+ return
end
if (self.MyObject.onleave_backdrop) then
@@ -816,20 +814,18 @@
end
function DetailsFrameworkDropDownOnShow (self)
- if (self.MyObject and self.MyObject.OnShowHook) then
- local interrupt = self.MyObject.OnShowHook (self)
- if (interrupt) then
- return
- end
+ local capsule = self.MyObject
+ local kill = capsule:RunHooksForWidget ("OnShow", self, capsule)
+ if (kill) then
+ return
end
end
function DetailsFrameworkDropDownOnHide (self)
- if (self.MyObject and self.MyObject.OnHideHook) then
- local interrupt = self.MyObject.OnHideHook (self)
- if (interrupt) then
- return
- end
+ local capsule = self.MyObject
+ local kill = capsule:RunHooksForWidget ("OnHide", self, capsule)
+ if (kill) then
+ return
end
self.MyObject:Close()
@@ -934,15 +930,8 @@
end
--> default members:
- --> hooks
- DropDownObject.OnEnterHook = nil
- DropDownObject.OnLeaveHook = nil
- DropDownObject.OnHideHook = nil
- DropDownObject.OnShowHook = nil
- DropDownObject.OnMouseDownHook = nil
--> misc
DropDownObject.container = container
- DropDownObject.have_tooltip = nil
DropDownObject.dropdown = CreateFrame ("Button", name, parent, "DetailsFrameworkDropDownTemplate")
DropDownObject.widget = DropDownObject.dropdown
@@ -1002,11 +991,22 @@
DropDownObject:HideScroll()
DropDownObject.label:SetSize (DropDownObject.dropdown:GetWidth()-40, 10)
+ DropDownObject.HookList = {
+ OnEnter = {},
+ OnLeave = {},
+ OnHide = {},
+ OnShow = {},
+ }
+
+ DropDownObject.dropdown:SetScript ("OnShow", DetailsFrameworkDropDownOnShow)
+ DropDownObject.dropdown:SetScript ("OnHide", DetailsFrameworkDropDownOnHide)
+ DropDownObject.dropdown:SetScript ("OnEnter", DetailsFrameworkDropDownOnEnter)
+ DropDownObject.dropdown:SetScript ("OnLeave", DetailsFrameworkDropDownOnLeave)
+
--> setup class
_setmetatable (DropDownObject, DropDownMetaFunctions)
-
+
--> initialize first menu selected
-
if (type (default) == "string") then
DropDownObject:Select (default)
@@ -1020,6 +1020,6 @@
DropDownObject:SetTemplate (template)
end
- return DropDownObject
+ return DropDownObject
end
\ No newline at end of file
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/dropdown.xml
--- a/Libs/DF/dropdown.xml Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/dropdown.xml Tue Jul 19 13:23:40 2016 -0300
@@ -79,15 +79,15 @@
-
+
-
+
-
+
@@ -96,7 +96,8 @@
DetailsFrameworkDropDownOptionsFrameOnHide (self);
- self:SetBackdropColor (0, 0, 0, 0.95);
+ self:SetBackdropColor (0, 0, 0, 0.92);
+ self:SetBackdropBorderColor (0, 0, 0, 1);
@@ -109,7 +110,7 @@
-
+
@@ -160,19 +161,19 @@
- DetailsFrameworkDropDownOnShow (self);
+
- DetailsFrameworkDropDownOnHide (self);
+
- DetailsFrameworkDropDownOnEnter (self);
+
- DetailsFrameworkDropDownOnLeave (self);
+
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/fw.lua
--- a/Libs/DF/fw.lua Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/fw.lua Tue Jul 19 13:23:40 2016 -0300
@@ -1,5 +1,5 @@
-local dversion = 16
+local dversion = 22
local major, minor = "DetailsFramework-1.0", dversion
local DF, oldminor = LibStub:NewLibrary (major, minor)
@@ -30,6 +30,9 @@
DF.SwitchCounter = DF.SwitchCounter or init_counter
DF.SplitBarCounter = DF.SplitBarCounter or init_counter
+DF.FRAMELEVEL_OVERLAY = 750
+DF.FRAMELEVEL_BACKGROUND = 150
+
DF.FrameWorkVersion = tostring (dversion)
function DF:PrintVersion()
print ("Details! Framework Version:", DF.FrameWorkVersion)
@@ -104,6 +107,9 @@
"InstallTemplate",
"GetFrameworkFolder",
"ShowPanicWarning",
+ "SetFrameworkDebugState",
+ "FindHighestParent",
+ "OpenInterfaceProfile",
}
DF.table = {}
@@ -112,6 +118,10 @@
return DF.folder
end
+function DF:SetFrameworkDebugState (state)
+ DF.debug = state
+end
+
function DF:FadeFrame (frame, t)
if (t == 0) then
frame.hidden = false
@@ -332,11 +342,13 @@
FlashAnimation.fadeOut = FlashAnimation:CreateAnimation ("Alpha") --> fade out anime
FlashAnimation.fadeOut:SetOrder (1)
- FlashAnimation.fadeOut:SetChange (1)
+ FlashAnimation.fadeOut:SetFromAlpha (0)
+ FlashAnimation.fadeOut:SetToAlpha (1)
FlashAnimation.fadeIn = FlashAnimation:CreateAnimation ("Alpha") --> fade in anime
FlashAnimation.fadeIn:SetOrder (2)
- FlashAnimation.fadeIn:SetChange (-1)
+ FlashAnimation.fadeIn:SetFromAlpha (1)
+ FlashAnimation.fadeIn:SetToAlpha (0)
frame.FlashAnimation = FlashAnimation
FlashAnimation.frame = frame
@@ -473,6 +485,8 @@
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--> menus
+ local disable_on_combat = {}
+
function DF:BuildMenu (parent, menu, x_offset, y_offset, height, use_two_points, text_template, dropdown_template, switch_template, switch_is_box, slider_template, button_template)
if (not parent.widget_list) then
@@ -488,6 +502,8 @@
for index, widget_table in ipairs (menu) do
+ local widget_created
+
if (widget_table.type == "blank" or widget_table.type == "space") then
-- do nothing
@@ -513,6 +529,7 @@
end
tinsert (parent.widget_list, dropdown)
+ widget_created = dropdown
elseif (widget_table.type == "toggle" or widget_table.type == "switch") then
local switch = DF:NewSwitch (parent, nil, "$parentWidget" .. index, nil, 60, 20, nil, nil, widget_table.get(), nil, nil, nil, nil, switch_template)
@@ -535,6 +552,7 @@
end
tinsert (parent.widget_list, switch)
+ widget_created = switch
elseif (widget_table.type == "range" or widget_table.type == "slider") then
local is_decimanls = widget_table.usedecimals
@@ -554,6 +572,7 @@
end
tinsert (parent.widget_list, slider)
+ widget_created = slider
elseif (widget_table.type == "color" or widget_table.type == "color") then
local colorpick = DF:NewColorPickButton (parent, "$parentWidget" .. index, nil, widget_table.set, nil, button_template)
@@ -578,6 +597,7 @@
end
tinsert (parent.widget_list, colorpick)
+ widget_created = colorpick
elseif (widget_table.type == "execute" or widget_table.type == "button") then
@@ -596,8 +616,13 @@
end
tinsert (parent.widget_list, button)
+ widget_created = button
end
+
+ if (widget_table.nocombat) then
+ tinsert (disable_on_combat, widget_created)
+ end
if (widget_table.spacement) then
cur_y = cur_y - 30
@@ -605,16 +630,59 @@
cur_y = cur_y - 20
end
- if (cur_y < height) then
+ if (widget_table.type == "breakline" or cur_y < height) then
cur_y = y_offset
cur_x = cur_x + max_x + 30
-
max_x = 0
end
end
+ DF.RefreshUnsafeOptionsWidgets()
+
end
+
+ local lock_notsafe_widgets = function()
+ for _, widget in ipairs (disable_on_combat) do
+ widget:Disable()
+ end
+ end
+ local unlock_notsafe_widgets = function()
+ for _, widget in ipairs (disable_on_combat) do
+ widget:Enable()
+ end
+ end
+ function DF.RefreshUnsafeOptionsWidgets()
+ if (DF.PlayerHasCombatFlag) then
+ lock_notsafe_widgets()
+ else
+ unlock_notsafe_widgets()
+ end
+ end
+ DF.PlayerHasCombatFlag = false
+ local ProtectCombatFrame = CreateFrame ("frame")
+ ProtectCombatFrame:RegisterEvent ("PLAYER_REGEN_ENABLED")
+ ProtectCombatFrame:RegisterEvent ("PLAYER_REGEN_DISABLED")
+ ProtectCombatFrame:RegisterEvent ("PLAYER_ENTERING_WORLD")
+ ProtectCombatFrame:SetScript ("OnEvent", function (self, event)
+ if (event == "PLAYER_ENTERING_WORLD") then
+ if (InCombatLockdown()) then
+ DF.PlayerHasCombatFlag = true
+ else
+ DF.PlayerHasCombatFlag = false
+ end
+ DF.RefreshUnsafeOptionsWidgets()
+
+ elseif (event == "PLAYER_REGEN_ENABLED") then
+ DF.PlayerHasCombatFlag = false
+ DF.RefreshUnsafeOptionsWidgets()
+
+ elseif (event == "PLAYER_REGEN_DISABLED") then
+ DF.PlayerHasCombatFlag = true
+ DF.RefreshUnsafeOptionsWidgets()
+
+ end
+ end)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--> tutorials
@@ -922,3 +990,139 @@
end
return parentName
end
+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+--> widget scripts and hooks
+
+function DF:RunHooksForWidget (event, ...)
+ local hooks = self.HookList [event]
+
+ if (not hooks) then
+ print (self.widget:GetName(), "sem hook para", event)
+ return
+ end
+
+ for i, func in ipairs (hooks) do
+ local success, canInterrupt = pcall (func, ...)
+ if (not success) then
+ error ("Details! Framework: " .. event .. " hook for " .. self:GetName() .. ": " .. canInterrupt)
+ elseif (canInterrupt) then
+ return true
+ end
+ end
+end
+
+function DF:SetHook (hookType, func)
+ if (self.HookList [hookType]) then
+ if (type (func) == "function") then
+ local isRemoval = false
+ for i = #self.HookList [hookType], 1, -1 do
+ if (self.HookList [hookType] [i] == func) then
+ tremove (self.HookList [hookType], i)
+ isRemoval = true
+ break
+ end
+ end
+ if (not isRemoval) then
+ tinsert (self.HookList [hookType], func)
+ end
+ else
+ if (DF.debug) then
+ error ("Details! Framework: invalid function for widget " .. self.WidgetType .. ".")
+ end
+ end
+ else
+ if (DF.debug) then
+ error ("Details! Framework: unknown hook type for widget " .. self.WidgetType .. ": '" .. hookType .. "'.")
+ end
+ end
+end
+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+--> members
+
+DF.GlobalWidgetControlNames = {
+ textentry = "DF_TextEntryMetaFunctions",
+ button = "DF_ButtonMetaFunctions",
+ panel = "DF_PanelMetaFunctions",
+ dropdown = "DF_DropdownMetaFunctions",
+ label = "DF_LabelMetaFunctions",
+ normal_bar = "DF_NormalBarMetaFunctions",
+ image = "DF_ImageMetaFunctions",
+ slider = "DF_SliderMetaFunctions",
+ split_bar = "DF_SplitBarMetaFunctions",
+}
+
+function DF:AddMemberForWidget (widgetName, memberType, memberName, func)
+ if (DF.GlobalWidgetControlNames [widgetName]) then
+ if (type (memberName) == "string" and (memberType == "SET" or memberType == "GET")) then
+ if (func) then
+ local widgetControlObject = _G [DF.GlobalWidgetControlNames [widgetName]]
+
+ if (memberType == "SET") then
+ widgetControlObject ["SetMembers"] [memberName] = func
+ elseif (memberType == "GET") then
+ widgetControlObject ["GetMembers"] [memberName] = func
+ end
+ else
+ if (DF.debug) then
+ error ("Details! Framework: AddMemberForWidget invalid function.")
+ end
+ end
+ else
+ if (DF.debug) then
+ error ("Details! Framework: AddMemberForWidget unknown memberName or memberType.")
+ end
+ end
+ else
+ if (DF.debug) then
+ error ("Details! Framework: AddMemberForWidget unknown widget type: " .. (widgetName or "") .. ".")
+ end
+ end
+end
+
+-----------------------------
+
+function DF:OpenInterfaceProfile()
+ InterfaceOptionsFrame_OpenToCategory (self.__name)
+ InterfaceOptionsFrame_OpenToCategory (self.__name)
+ for i = 1, 100 do
+ local button = _G ["InterfaceOptionsFrameAddOnsButton" .. i]
+ if (button) then
+ local text = _G ["InterfaceOptionsFrameAddOnsButton" .. i .. "Text"]
+ if (text) then
+ text = text:GetText()
+ if (text == self.__name) then
+ local toggle = _G ["InterfaceOptionsFrameAddOnsButton" .. i .. "Toggle"]
+ if (toggle) then
+ if (toggle:GetNormalTexture():GetTexture():find ("PlusButton")) then
+ --is minimized, need expand
+ toggle:Click()
+ _G ["InterfaceOptionsFrameAddOnsButton" .. i+1]:Click()
+ elseif (toggle:GetNormalTexture():GetTexture():find ("MinusButton")) then
+ --isn't minimized
+ _G ["InterfaceOptionsFrameAddOnsButton" .. i+1]:Click()
+ end
+ end
+ break
+ end
+ end
+ else
+ self:Msg ("Couldn't not find the profile panel.")
+ break
+ end
+ end
+end
+
+-----------------------------
+--safe copy from blizz api
+function DF:Mixin (object, ...)
+ for i = 1, select("#", ...) do
+ local mixin = select(i, ...);
+ for k, v in pairs(mixin) do
+ object[k] = v;
+ end
+ end
+
+ return object;
+end
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/label.lua
--- a/Libs/DF/label.lua Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/label.lua Tue Jul 19 13:23:40 2016 -0300
@@ -15,7 +15,18 @@
local cleanfunction = function() end
local APILabelFunctions = false
-local LabelMetaFunctions = {}
+
+do
+ local metaPrototype = {
+ WidgetType = "label",
+ SetHook = DF.SetHook,
+ RunHooksForWidget = DF.RunHooksForWidget,
+ }
+
+ _G [DF.GlobalWidgetControlNames ["label"]] = _G [DF.GlobalWidgetControlNames ["label"]] or metaPrototype
+end
+
+local LabelMetaFunctions = _G [DF.GlobalWidgetControlNames ["label"]]
------------------------------------------------------------------------------------------------------------
--> metatables
@@ -58,23 +69,21 @@
return fontsize
end
-
- local get_members_function_index = {
- ["shown"] = gmember_shown,
- ["width"] = gmember_width,
- ["height"] = gmember_height,
- ["text"] = gmember_text,
- ["fontcolor"] = gmember_textcolor,
- ["fontface"] = gmember_textfont,
- ["fontsize"] = gmember_textsize,
- ["textcolor"] = gmember_textcolor, --alias
- ["textfont"] = gmember_textfont, --alias
- ["textsize"] = gmember_textsize --alias
- }
+ LabelMetaFunctions.GetMembers = LabelMetaFunctions.GetMembers or {}
+ LabelMetaFunctions.GetMembers ["shown"] = gmember_shown
+ LabelMetaFunctions.GetMembers ["width"] = gmember_width
+ LabelMetaFunctions.GetMembers ["height"] = gmember_height
+ LabelMetaFunctions.GetMembers ["text"] = gmember_text
+ LabelMetaFunctions.GetMembers ["fontcolor"] = gmember_textcolor
+ LabelMetaFunctions.GetMembers ["fontface"] = gmember_textfont
+ LabelMetaFunctions.GetMembers ["fontsize"] = gmember_textsize
+ LabelMetaFunctions.GetMembers ["textcolor"] = gmember_textcolor --alias
+ LabelMetaFunctions.GetMembers ["textfont"] = gmember_textfont --alias
+ LabelMetaFunctions.GetMembers ["textsize"] = gmember_textsize --alias
LabelMetaFunctions.__index = function (_table, _member_requested)
- local func = get_members_function_index [_member_requested]
+ local func = LabelMetaFunctions.GetMembers [_member_requested]
if (func) then
return func (_table, _member_requested)
end
@@ -157,27 +166,26 @@
DF:SetFontOutline (_object.label, _value)
end
- local set_members_function_index = {
- ["show"] = smember_show,
- ["hide"] = smember_hide,
- ["align"] = smember_textalign,
- ["valign"] = smember_textvalign,
- ["text"] = smember_text,
- ["width"] = smember_width,
- ["height"] = smember_height,
- ["fontcolor"] = smember_textcolor,
- ["color"] = smember_textcolor,--alias
- ["fontface"] = smember_textfont,
- ["fontsize"] = smember_textsize,
- ["textcolor"] = smember_textcolor,--alias
- ["textfont"] = smember_textfont,--alias
- ["textsize"] = smember_textsize,--alias
- ["shadow"] = smember_outline,
- ["outline"] = smember_outline,--alias
- }
+ LabelMetaFunctions.SetMembers = LabelMetaFunctions.SetMembers or {}
+ LabelMetaFunctions.SetMembers["show"] = smember_show
+ LabelMetaFunctions.SetMembers["hide"] = smember_hide
+ LabelMetaFunctions.SetMembers["align"] = smember_textalign
+ LabelMetaFunctions.SetMembers["valign"] = smember_textvalign
+ LabelMetaFunctions.SetMembers["text"] = smember_text
+ LabelMetaFunctions.SetMembers["width"] = smember_width
+ LabelMetaFunctions.SetMembers["height"] = smember_height
+ LabelMetaFunctions.SetMembers["fontcolor"] = smember_textcolor
+ LabelMetaFunctions.SetMembers["color"] = smember_textcolor--alias
+ LabelMetaFunctions.SetMembers["fontface"] = smember_textfont
+ LabelMetaFunctions.SetMembers["fontsize"] = smember_textsize
+ LabelMetaFunctions.SetMembers["textcolor"] = smember_textcolor--alias
+ LabelMetaFunctions.SetMembers["textfont"] = smember_textfont--alias
+ LabelMetaFunctions.SetMembers["textsize"] = smember_textsize--alias
+ LabelMetaFunctions.SetMembers["shadow"] = smember_outline
+ LabelMetaFunctions.SetMembers["outline"] = smember_outline--alias
LabelMetaFunctions.__newindex = function (_table, _key, _value)
- local func = set_members_function_index [_key]
+ local func = LabelMetaFunctions.SetMembers [_key]
if (func) then
return func (_table, _value)
else
@@ -305,7 +313,8 @@
DF:SetFontSize (LabelObject.label, size)
end
-
+ LabelObject.HookList = {
+ }
LabelObject.label:SetJustifyH ("LEFT")
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/load.xml
--- a/Libs/DF/load.xml Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/load.xml Tue Jul 19 13:23:40 2016 -0300
@@ -8,6 +8,7 @@
+
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/normal_bar.lua
--- a/Libs/DF/normal_bar.lua Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/normal_bar.lua Tue Jul 19 13:23:40 2016 -0300
@@ -15,9 +15,20 @@
local SharedMedia = LibStub:GetLibrary ("LibSharedMedia-3.0")
local cleanfunction = function() end
-local BarMetaFunctions = {}
local APIBarFunctions
+do
+ local metaPrototype = {
+ WidgetType = "normal_bar",
+ SetHook = DF.SetHook,
+ RunHooksForWidget = DF.RunHooksForWidget,
+ }
+
+ _G [DF.GlobalWidgetControlNames ["normal_bar"]] = _G [DF.GlobalWidgetControlNames ["normal_bar"]] or metaPrototype
+end
+
+local BarMetaFunctions = _G [DF.GlobalWidgetControlNames ["normal_bar"]]
+
------------------------------------------------------------------------------------------------------------
--> metatables
@@ -111,28 +122,27 @@
return _object.textleft:GetTextColor()
end
- local get_members_function_index = {
- ["tooltip"] = gmember_tooltip,
- ["shown"] = gmember_shown,
- ["width"] = gmember_width,
- ["height"] = gmember_height,
- ["value"] = gmember_value,
- ["lefttext"] = gmember_ltext,
- ["righttext"] = gmember_rtext,
- ["color"] = gmember_color,
- ["icon"] = gmember_icon,
- ["texture"] = gmember_texture,
- ["fontsize"] = gmember_textsize,
- ["fontface"] = gmember_textfont,
- ["fontcolor"] = gmember_textcolor,
- ["textsize"] = gmember_textsize, --alias
- ["textfont"] = gmember_textfont, --alias
- ["textcolor"] = gmember_textcolor --alias
- }
+ BarMetaFunctions.GetMembers = BarMetaFunctions.GetMembers or {}
+ BarMetaFunctions.GetMembers ["tooltip"] = gmember_tooltip
+ BarMetaFunctions.GetMembers ["shown"] = gmember_shown
+ BarMetaFunctions.GetMembers ["width"] = gmember_width
+ BarMetaFunctions.GetMembers ["height"] = gmember_height
+ BarMetaFunctions.GetMembers ["value"] = gmember_value
+ BarMetaFunctions.GetMembers ["lefttext"] = gmember_ltext
+ BarMetaFunctions.GetMembers ["righttext"] = gmember_rtext
+ BarMetaFunctions.GetMembers ["color"] = gmember_color
+ BarMetaFunctions.GetMembers ["icon"] = gmember_icon
+ BarMetaFunctions.GetMembers ["texture"] = gmember_texture
+ BarMetaFunctions.GetMembers ["fontsize"] = gmember_textsize
+ BarMetaFunctions.GetMembers ["fontface"] = gmember_textfont
+ BarMetaFunctions.GetMembers ["fontcolor"] = gmember_textcolor
+ BarMetaFunctions.GetMembers ["textsize"] = gmember_textsize --alias
+ BarMetaFunctions.GetMembers ["textfont"] = gmember_textfont --alias
+ BarMetaFunctions.GetMembers ["textcolor"] = gmember_textcolor --alias
BarMetaFunctions.__index = function (_table, _member_requested)
- local func = get_members_function_index [_member_requested]
+ local func = BarMetaFunctions.GetMembers [_member_requested]
if (func) then
return func (_table, _member_requested)
end
@@ -267,30 +277,29 @@
return DF:SetFontOutline (_object.textright, _value)
end
- local set_members_function_index = {
- ["tooltip"] = smember_tooltip,
- ["shown"] = smember_shown,
- ["width"] = smember_width,
- ["height"] = smember_height,
- ["value"] = smember_value,
- ["righttext"] = smember_rtext,
- ["lefttext"] = smember_ltext,
- ["color"] = smember_color,
- ["icon"] = smember_icon,
- ["texture"] = smember_texture,
- ["fontsize"] = smember_textsize,
- ["fontface"] = smember_textfont,
- ["fontcolor"] = smember_textcolor,
- ["textsize"] = smember_textsize, --alias
- ["textfont"] = smember_textfont, --alias
- ["textcolor"] = smember_textcolor, --alias
- ["shadow"] = smember_outline,
- ["outline"] = smember_outline, --alias
- }
+ BarMetaFunctions.SetMembers = BarMetaFunctions.SetMembers or {}
+ BarMetaFunctions.SetMembers["tooltip"] = smember_tooltip
+ BarMetaFunctions.SetMembers["shown"] = smember_shown
+ BarMetaFunctions.SetMembers["width"] = smember_width
+ BarMetaFunctions.SetMembers["height"] = smember_height
+ BarMetaFunctions.SetMembers["value"] = smember_value
+ BarMetaFunctions.SetMembers["righttext"] = smember_rtext
+ BarMetaFunctions.SetMembers["lefttext"] = smember_ltext
+ BarMetaFunctions.SetMembers["color"] = smember_color
+ BarMetaFunctions.SetMembers["icon"] = smember_icon
+ BarMetaFunctions.SetMembers["texture"] = smember_texture
+ BarMetaFunctions.SetMembers["fontsize"] = smember_textsize
+ BarMetaFunctions.SetMembers["fontface"] = smember_textfont
+ BarMetaFunctions.SetMembers["fontcolor"] = smember_textcolor
+ BarMetaFunctions.SetMembers["textsize"] = smember_textsize --alias
+ BarMetaFunctions.SetMembers["textfont"] = smember_textfont --alias
+ BarMetaFunctions.SetMembers["textcolor"] = smember_textcolor --alias
+ BarMetaFunctions.SetMembers["shadow"] = smember_outline
+ BarMetaFunctions.SetMembers["outline"] = smember_outline --alias
BarMetaFunctions.__newindex = function (_table, _key, _value)
- local func = set_members_function_index [_key]
+ local func = BarMetaFunctions.SetMembers [_key]
if (func) then
return func (_table, _value)
else
@@ -420,24 +429,14 @@
self.container = container
end
---> hooks
- function BarMetaFunctions:SetHook (hookType, func)
- if (func) then
- _rawset (self, hookType.."Hook", func)
- else
- _rawset (self, hookType.."Hook", nil)
- end
- end
-
------------------------------------------------------------------------------------------------------------
--> scripts
local OnEnter = function (frame)
- if (frame.MyObject.OnEnterHook) then
- local interrupt = frame.MyObject.OnEnterHook (frame, frame.MyObject)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnEnter", frame, capsule)
+ if (kill) then
+ return
end
frame.MyObject.background:Show()
@@ -451,11 +450,10 @@
end
local OnLeave = function (frame)
- if (frame.MyObject.OnLeaveHook) then
- local interrupt = frame.MyObject.OnLeaveHook (frame)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnLeave", frame, capsule)
+ if (kill) then
+ return
end
if (frame.MyObject.have_tooltip) then
@@ -464,29 +462,26 @@
end
local OnHide = function (frame)
- if (frame.MyObject.OnHideHook) then
- local interrupt = frame.MyObject.OnHideHook (frame)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnHide", frame, capsule)
+ if (kill) then
+ return
end
end
local OnShow = function (frame)
- if (frame.MyObject.OnShowHook) then
- local interrupt = frame.MyObject.OnShowHook (frame)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnShow", frame, capsule)
+ if (kill) then
+ return
end
end
local OnMouseDown = function (frame, button)
- if (frame.MyObject.OnMouseDownHook) then
- local interrupt = frame.MyObject.OnMouseDownHook (frame, button)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnMouseDown", frame, button, capsule)
+ if (kill) then
+ return
end
if (not frame.MyObject.container.isLocked and frame.MyObject.container:IsMovable()) then
@@ -498,11 +493,10 @@
end
local OnMouseUp = function (frame, button)
- if (frame.MyObject.OnMouseUpHook) then
- local interrupt = frame.MyObject.OnMouseUpHook (frame, button)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnMouseUp", frame, button, capsule)
+ if (kill) then
+ return
end
if (frame.MyObject.container.isMoving) then
@@ -674,18 +668,8 @@
h = h or 14
--> default members:
- --> hooks
- BarObject.OnEnterHook = nil
- BarObject.OnLeaveHook = nil
- BarObject.OnHideHook = nil
- BarObject.OnShowHook = nil
- BarObject.OnMouseDownHook = nil
- BarObject.OnMouseUpHook = nil
- BarObject.OnTimerEndHook = nil
--> misc
- BarObject.tooltip = nil
BarObject.locked = false
- BarObject.have_tooltip = nil
BarObject.container = container
@@ -729,6 +713,15 @@
BarObject.div_timer = _G [name .. "_sparkTimer"]
--> hooks
+ BarObject.HookList = {
+ OnEnter = {},
+ OnLeave = {},
+ OnHide = {},
+ OnShow = {},
+ OnMouseDown = {},
+ OnMouseUp = {},
+ }
+
BarObject.statusbar:SetScript ("OnEnter", OnEnter)
BarObject.statusbar:SetScript ("OnLeave", OnLeave)
BarObject.statusbar:SetScript ("OnHide", OnHide)
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/panel.lua
--- a/Libs/DF/panel.lua Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/panel.lua Tue Jul 19 13:23:40 2016 -0300
@@ -15,9 +15,20 @@
local loadstring = loadstring --> lua local
local cleanfunction = function() end
-local PanelMetaFunctions = {}
local APIFrameFunctions
+do
+ local metaPrototype = {
+ WidgetType = "panel",
+ SetHook = DF.SetHook,
+ RunHooksForWidget = DF.RunHooksForWidget,
+ }
+
+ _G [DF.GlobalWidgetControlNames ["panel"]] = _G [DF.GlobalWidgetControlNames ["panel"]] or metaPrototype
+end
+
+local PanelMetaFunctions = _G [DF.GlobalWidgetControlNames ["panel"]]
+
------------------------------------------------------------------------------------------------------------
--> metatables
@@ -58,19 +69,18 @@
return _rawget (_object, "is_locked")
end
- local get_members_function_index = {
- ["tooltip"] = gmember_tooltip,
- ["shown"] = gmember_shown,
- ["color"] = gmember_color,
- ["backdrop"] = gmember_backdrop,
- ["width"] = gmember_width,
- ["height"] = gmember_height,
- ["locked"] = gmember_locked,
- }
+ PanelMetaFunctions.GetMembers = PanelMetaFunctions.GetMembers or {}
+ PanelMetaFunctions.GetMembers ["tooltip"] = gmember_tooltip
+ PanelMetaFunctions.GetMembers ["shown"] = gmember_shown
+ PanelMetaFunctions.GetMembers ["color"] = gmember_color
+ PanelMetaFunctions.GetMembers ["backdrop"] = gmember_backdrop
+ PanelMetaFunctions.GetMembers ["width"] = gmember_width
+ PanelMetaFunctions.GetMembers ["height"] = gmember_height
+ PanelMetaFunctions.GetMembers ["locked"] = gmember_locked
PanelMetaFunctions.__index = function (_table, _member_requested)
- local func = get_members_function_index [_member_requested]
+ local func = PanelMetaFunctions.GetMembers [_member_requested]
if (func) then
return func (_table, _member_requested)
end
@@ -140,20 +150,19 @@
return _rawset (_object, "rightButtonClose", _value)
end
- local set_members_function_index = {
- ["tooltip"] = smember_tooltip,
- ["show"] = smember_show,
- ["hide"] = smember_hide,
- ["color"] = smember_color,
- ["backdrop"] = smember_backdrop,
- ["width"] = smember_width,
- ["height"] = smember_height,
- ["locked"] = smember_locked,
- ["close_with_right"] = smember_right_close,
- }
-
+ PanelMetaFunctions.SetMembers = PanelMetaFunctions.SetMembers or {}
+ PanelMetaFunctions.SetMembers["tooltip"] = smember_tooltip
+ PanelMetaFunctions.SetMembers["show"] = smember_show
+ PanelMetaFunctions.SetMembers["hide"] = smember_hide
+ PanelMetaFunctions.SetMembers["color"] = smember_color
+ PanelMetaFunctions.SetMembers["backdrop"] = smember_backdrop
+ PanelMetaFunctions.SetMembers["width"] = smember_width
+ PanelMetaFunctions.SetMembers["height"] = smember_height
+ PanelMetaFunctions.SetMembers["locked"] = smember_locked
+ PanelMetaFunctions.SetMembers["close_with_right"] = smember_right_close
+
PanelMetaFunctions.__newindex = function (_table, _key, _value)
- local func = set_members_function_index [_key]
+ local func = PanelMetaFunctions.SetMembers [_key]
if (func) then
return func (_table, _value)
else
@@ -309,24 +318,14 @@
end
end
---> hooks
- function PanelMetaFunctions:SetHook (hookType, func)
- if (func) then
- _rawset (self, hookType.."Hook", func)
- else
- _rawset (self, hookType.."Hook", nil)
- end
- end
-
------------------------------------------------------------------------------------------------------------
--> scripts
local OnEnter = function (frame)
- if (frame.MyObject.OnEnterHook) then
- local interrupt = frame.MyObject.OnEnterHook (frame, frame.MyObject)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnEnter", frame, capsule)
+ if (kill) then
+ return
end
if (frame.MyObject.have_tooltip) then
@@ -340,11 +339,10 @@
end
local OnLeave = function (frame)
- if (frame.MyObject.OnLeaveHook) then
- local interrupt = frame.MyObject.OnLeaveHook (frame, frame.MyObject)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnLeave", frame, capsule)
+ if (kill) then
+ return
end
if (frame.MyObject.have_tooltip) then
@@ -354,29 +352,26 @@
end
local OnHide = function (frame)
- if (frame.MyObject.OnHideHook) then
- local interrupt = frame.MyObject.OnHideHook (frame, frame.MyObject)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnHide", frame, capsule)
+ if (kill) then
+ return
end
end
local OnShow = function (frame)
- if (frame.MyObject.OnShowHook) then
- local interrupt = frame.MyObject.OnShowHook (frame, frame.MyObject)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnShow", frame, capsule)
+ if (kill) then
+ return
end
end
local OnMouseDown = function (frame, button)
- if (frame.MyObject.OnMouseDownHook) then
- local interrupt = frame.MyObject.OnMouseDownHook (frame, button, frame.MyObject)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnMouseDown", frame, button, capsule)
+ if (kill) then
+ return
end
if (frame.MyObject.container == UIParent) then
@@ -396,11 +391,10 @@
end
local OnMouseUp = function (frame, button)
- if (frame.MyObject.OnMouseUpHook) then
- local interrupt = frame.MyObject.OnMouseUpHook (frame, button, frame.MyObject)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnMouseUp", frame, button, capsule)
+ if (kill) then
+ return
end
if (button == "RightButton" and frame.MyObject.rightButtonClose) then
@@ -456,15 +450,7 @@
container = container.widget
end
-
--> default members:
- --> hooks
- PanelObject.OnEnterHook = nil
- PanelObject.OnLeaveHook = nil
- PanelObject.OnHideHook = nil
- PanelObject.OnShowHook = nil
- PanelObject.OnMouseDownHook = nil
- PanelObject.OnMouseUpHook = nil
--> misc
PanelObject.is_locked = true
PanelObject.container = container
@@ -491,6 +477,15 @@
PanelObject.frame.MyObject = PanelObject
+ PanelObject.HookList = {
+ OnEnter = {},
+ OnLeave = {},
+ OnHide = {},
+ OnShow = {},
+ OnMouseDown = {},
+ OnMouseUp = {},
+ }
+
--> hooks
PanelObject.frame:SetScript ("OnEnter", OnEnter)
PanelObject.frame:SetScript ("OnLeave", OnLeave)
@@ -968,8 +963,13 @@
iconwidget.line = index
iconwidget.index = real_index
- local result = results [index]:gsub (".-%\\", "")
- iconwidget._icon.texture = results [index]
+ --print (index, results [index])
+ if (type (results [index]) == "string") then
+ local result = results [index]:gsub (".-%\\", "")
+ iconwidget._icon.texture = results [index]
+ else
+ iconwidget._icon:SetTexture (results [index])
+ end
iconwidget:Show()
end
@@ -1494,8 +1494,27 @@
local SimplePanel_frame_backdrop_color = {0, 0, 0, 0.9}
local SimplePanel_frame_backdrop_border_color = {0, 0, 0, 1}
+function DF:CreateScaleBar (frame, config)
+ local scaleBar = DF:CreateSlider (frame, 120, 14, 0.6, 1.6, 0.1, config.scale, true, "ScaleBar", nil, "Scale:", DF:GetTemplate ("slider", "OPTIONS_SLIDER_TEMPLATE"), DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
+ scaleBar:SetPoint ("right", frame.Close, "left", -2, 0)
+ scaleBar:SetFrameLevel (DF.FRAMELEVEL_OVERLAY)
+ scaleBar.OnValueChanged = function (_, _, value)
+ config.scale = value
+ if (not scaleBar.IsValueChanging) then
+ frame:SetScale (config.scale)
+ end
+ end
+ scaleBar:SetHook ("OnMouseUp", function()
+ frame:SetScale (config.scale)
+ end)
+end
+
local no_options = {}
-function DF:CreateSimplePanel (parent, w, h, title, name, panel_options)
+function DF:CreateSimplePanel (parent, w, h, title, name, panel_options, db)
+
+ if (db and name and not db [name]) then
+ db [name] = {scale = 1}
+ end
if (not name) then
name = "DetailsFrameworkSimplePanel" .. DF.SimplePanelCounter
@@ -1533,6 +1552,7 @@
f.TitleBar = title_bar
local close = CreateFrame ("button", name and name .. "CloseButton", title_bar)
+ close:SetFrameLevel (DF.FRAMELEVEL_OVERLAY)
close:SetSize (16, 16)
close:SetNormalTexture (DF.folder .. "icons")
close:SetHighlightTexture (DF.folder .. "icons")
@@ -1549,6 +1569,11 @@
title_string:SetText (title or "")
f.Title = title_string
+ if (panel_options.UseScaleBar and db [name]) then
+ DF:CreateScaleBar (f, db [name])
+ f:SetScale (db [name].scale)
+ end
+
f.Title:SetPoint ("center", title_bar, "center")
f.Close:SetPoint ("right", title_bar, "right", -2, 0)
@@ -2477,7 +2502,7 @@
thisbox.type = type
thisbox.index = number
- thisbox.box:SetTexture (unpack (color))
+ thisbox.box:SetColorTexture (unpack (color))
thisbox.text:SetText (name)
thisbox.check:Show()
@@ -2519,7 +2544,7 @@
this_block:SetWidth (pixel*5)
end
- this_block:SetTexture (r, g, b, 0.25)
+ this_block:SetColorTexture (r, g, b, 0.25)
this_block:Show()
index = index + 1
@@ -2831,7 +2856,7 @@
title:SetPoint ("topleft", f, "topleft", 110, -13)
local bottom_texture = DF:NewImage (f, nil, 702, 25, "background", nil, nil, "$parentBottomTexture")
- bottom_texture:SetTexture (0, 0, 0, .6)
+ bottom_texture:SetColorTexture (0, 0, 0, .6)
bottom_texture:SetPoint ("bottomleft", f, "bottomleft", 8, 7)
bottom_texture:SetPoint ("bottomright", f, "bottomright", -8, 7)
@@ -2850,7 +2875,7 @@
local line = f:CreateTexture (nil, "border")
line:SetSize (1, h-45)
- line:SetTexture (1, 1, 1, .1)
+ line:SetColorTexture (1, 1, 1, .1)
line:SetPoint ("bottomleft", time, "topright", 0, -10)
line:Hide()
time.line = line
@@ -2882,7 +2907,7 @@
--div lines
for i = 1, 8, 1 do
local line = g:CreateTexture (nil, "overlay")
- line:SetTexture (1, 1, 1, .2)
+ line:SetColorTexture (1, 1, 1, .2)
line:SetWidth (670)
line:SetHeight (1.1)
@@ -2966,7 +2991,7 @@
t:SetWidth (1)
t:SetPoint ("topright", f, "topright")
t:SetPoint ("bottomright", f, "bottomright")
- t:SetTexture (1, 1, 1, .1)
+ t:SetColorTexture (1, 1, 1, .1)
f.grid = t
local b = f:CreateTexture (nil, "overlay")
@@ -3080,4 +3105,235 @@
f._maxlines = floor (f:GetWidth() / f._linewidth)
return f
-end
\ No newline at end of file
+end
+
+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+-- ~buttoncontainer
+
+function DF:CreateButtonContainer (parent, name)
+ local f = CreateFrame ("frame", name, parent)
+-- f.
+end
+
+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+--> options tabs and buttons -dot
+
+function DF:FindHighestParent (self)
+ local f
+ if (self:GetParent() == UIParent) then
+ f = self
+ end
+ if (not f) then
+ f = self
+ for i = 1, 6 do
+ local parent = f:GetParent()
+ if (parent == UIParent) then
+ break
+ else
+ f = parent
+ end
+ end
+ end
+
+ return f
+end
+
+DF.TabContainerFunctions = {}
+
+local button_tab_template = DF.table.copy ({}, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"))
+button_tab_template.backdropbordercolor = nil
+
+DF.TabContainerFunctions.CreateUnderlineGlow = function (button)
+ local selectedGlow = button:CreateTexture (nil, "background", -4)
+ selectedGlow:SetPoint ("topleft", button.widget, "bottomleft", -7, 0)
+ selectedGlow:SetPoint ("topright", button.widget, "bottomright", 7, 0)
+ selectedGlow:SetTexture ([[Interface\BUTTONS\UI-Panel-Button-Glow]])
+ selectedGlow:SetTexCoord (0, 95/128, 30/64, 38/64)
+ selectedGlow:SetBlendMode ("ADD")
+ selectedGlow:SetHeight (8)
+ selectedGlow:SetAlpha (.75)
+ selectedGlow:Hide()
+ button.selectedUnderlineGlow = selectedGlow
+end
+
+DF.TabContainerFunctions.OnMouseDown = function (self, button)
+ --> search for UIParent
+ local f = DF:FindHighestParent (self)
+ local container = self:GetParent()
+
+ if (button == "LeftButton") then
+ if (not f.IsMoving and f:IsMovable()) then
+ f:StartMoving()
+ f.IsMoving = true
+ end
+ elseif (button == "RightButton") then
+ if (not f.IsMoving and container.IsContainer) then
+ if (self.IsFrontPage) then
+ if (container.CanCloseWithRightClick) then
+ if (f.CloseFunction) then
+ f:CloseFunction()
+ else
+ f:Hide()
+ end
+ end
+ else
+ --goes back to front page
+ DF.TabContainerFunctions.SelectIndex (self, _, 1)
+ end
+ end
+ end
+end
+
+DF.TabContainerFunctions.OnMouseUp = function (self, button)
+ local f = DF:FindHighestParent (self)
+ if (f.IsMoving) then
+ f:StopMovingOrSizing()
+ f.IsMoving = false
+ end
+end
+
+DF.TabContainerFunctions.SelectIndex = function (self, fixedParam, menuIndex)
+ local mainFrame = self.AllFrames and self or self.mainFrame or self:GetParent()
+
+ for i = 1, #mainFrame.AllFrames do
+ mainFrame.AllFrames[i]:Hide()
+ if (mainFrame.ButtonNotSelectedBorderColor) then
+ mainFrame.AllButtons[i]:SetBackdropBorderColor (unpack (mainFrame.ButtonNotSelectedBorderColor))
+ end
+ if (mainFrame.AllButtons[i].selectedUnderlineGlow) then
+ mainFrame.AllButtons[i].selectedUnderlineGlow:Hide()
+ end
+ end
+
+ mainFrame.AllFrames[menuIndex]:Show()
+ if (mainFrame.ButtonSelectedBorderColor) then
+ mainFrame.AllButtons[menuIndex]:SetBackdropBorderColor (unpack (mainFrame.ButtonSelectedBorderColor))
+ end
+ if (mainFrame.AllButtons[menuIndex].selectedUnderlineGlow) then
+ mainFrame.AllButtons[menuIndex].selectedUnderlineGlow:Show()
+ end
+ mainFrame.CurrentIndex = menuIndex
+end
+
+DF.TabContainerFunctions.SetIndex = function (self, index)
+ self.CurrentIndex = index
+end
+
+local tab_container_on_show = function (self)
+ local index = self.CurrentIndex
+ self.SelectIndex (self.AllButtons[index], nil, index)
+end
+
+function DF:CreateTabContainer (parent, title, frame_name, frame_list, options_table)
+
+ local options_text_template = DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE")
+ local options_dropdown_template = DF:GetTemplate ("dropdown", "OPTIONS_DROPDOWN_TEMPLATE")
+ local options_switch_template = DF:GetTemplate ("switch", "OPTIONS_CHECKBOX_TEMPLATE")
+ local options_slider_template = DF:GetTemplate ("slider", "OPTIONS_SLIDER_TEMPLATE")
+ local options_button_template = DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE")
+
+ options_table = options_table or {}
+ local frame_width = parent:GetWidth()
+ local frame_height = parent:GetHeight()
+ local y_offset = options_table.y_offset or 0
+ local button_width = options_table.button_width or 160
+ local button_height = options_table.button_height or 20
+ local button_anchor_x = options_table.button_x or 230
+ local button_anchor_y = options_table.button_y or -32
+ local button_text_size = options_table.button_text_size or 10
+
+ local mainFrame = CreateFrame ("frame", frame_name, parent.widget or parent)
+ mainFrame:SetAllPoints()
+ DF:Mixin (mainFrame, DF.TabContainerFunctions)
+
+ local mainTitle = DF:CreateLabel (mainFrame, title, 24, "white")
+ mainTitle:SetPoint ("topleft", mainFrame, "topleft", 10, -30 + y_offset)
+
+ mainFrame:SetFrameLevel (200)
+
+ mainFrame.AllFrames = {}
+ mainFrame.AllButtons = {}
+ mainFrame.CurrentIndex = 1
+ mainFrame.IsContainer = true
+ mainFrame.ButtonSelectedBorderColor = options_table.button_selected_border_color or {1, 1, 0, 1}
+ mainFrame.ButtonNotSelectedBorderColor = options_table.button_border_color or {0, 0, 0, 0}
+
+ if (options_table.right_click_interact ~= nil) then
+ mainFrame.CanCloseWithRightClick = options_table.right_click_interact
+ else
+ mainFrame.CanCloseWithRightClick = true
+ end
+
+ for i, frame in ipairs (frame_list) do
+ local f = CreateFrame ("frame", "$parent" .. frame.name, mainFrame)
+ f:SetAllPoints()
+ f:SetFrameLevel (210)
+ f:Hide()
+
+ local title = DF:CreateLabel (f, frame.title, 16, "silver")
+ title:SetPoint ("topleft", mainTitle, "bottomleft", 0, 0)
+
+ local tabButton = DF:CreateButton (mainFrame, DF.TabContainerFunctions.SelectIndex, button_width, button_height, frame.title, i, nil, nil, nil, nil, false, button_tab_template)
+ tabButton:SetFrameLevel (220)
+ tabButton.textsize = button_text_size
+ tabButton.mainFrame = mainFrame
+ DF.TabContainerFunctions.CreateUnderlineGlow (tabButton)
+
+ if (i == 1) then
+ local right_click_to_back = DF:CreateLabel (f, "right click to close", 10, "gray")
+ right_click_to_back:SetPoint ("bottomright", f, "bottomright", -1, 0)
+ f.IsFrontPage = true
+ else
+ local right_click_to_back = DF:CreateLabel (f, "right click to go back to main menu", 10, "gray")
+ right_click_to_back:SetPoint ("bottomright", f, "bottomright", -1, 0)
+ end
+
+ f:SetScript ("OnMouseDown", DF.TabContainerFunctions.OnMouseDown)
+ f:SetScript ("OnMouseUp", DF.TabContainerFunctions.OnMouseUp)
+
+ tinsert (mainFrame.AllFrames, f)
+ tinsert (mainFrame.AllButtons, tabButton)
+ end
+
+ --order buttons
+ local x = button_anchor_x
+ local y = button_anchor_y
+ local space_for_buttons = frame_width - (#frame_list*3) - button_anchor_x
+ local amount_buttons_per_row = floor (space_for_buttons / button_width)
+ local last_button = mainFrame.AllButtons[1]
+
+ mainFrame.AllButtons[1]:SetPoint ("topleft", mainTitle, "topleft", x, y)
+ x = x + button_width + 2
+
+ for i = 2, #mainFrame.AllButtons do
+ local button = mainFrame.AllButtons [i]
+ button:SetPoint ("topleft", mainTitle, "topleft", x, y)
+ x = x + button_width + 2
+
+ if (i % amount_buttons_per_row == 0) then
+ x = button_anchor_x
+ y = y - button_height - 1
+ end
+ end
+
+ --> when show the frame, reset to the current internal index
+ mainFrame:SetScript ("OnShow", tab_container_on_show)
+ --> select the first frame
+ mainFrame.SelectIndex (mainFrame.AllButtons[1], nil, 1)
+
+ return mainFrame
+end
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/picture.lua
--- a/Libs/DF/picture.lua Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/picture.lua Tue Jul 19 13:23:40 2016 -0300
@@ -15,7 +15,18 @@
local cleanfunction = function() end
local APIImageFunctions = false
-local ImageMetaFunctions = {}
+
+do
+ local metaPrototype = {
+ WidgetType = "image",
+ SetHook = DF.SetHook,
+ RunHooksForWidget = DF.RunHooksForWidget,
+ }
+
+ _G [DF.GlobalWidgetControlNames ["image"]] = _G [DF.GlobalWidgetControlNames ["image"]] or metaPrototype
+end
+
+local ImageMetaFunctions = _G [DF.GlobalWidgetControlNames ["image"]]
------------------------------------------------------------------------------------------------------------
--> metatables
@@ -48,17 +59,16 @@
return _object.image:GetAlpha()
end
- local get_members_function_index = {
- ["shown"] = gmember_shown,
- ["alpha"] = gmember_alpha,
- ["width"] = gmember_width,
- ["height"] = gmember_height,
- ["texture"] = gmember_texture,
- }
-
+ ImageMetaFunctions.GetMembers = ImageMetaFunctions.GetMembers or {}
+ ImageMetaFunctions.GetMembers ["shown"] = gmember_shown
+ ImageMetaFunctions.GetMembers ["alpha"] = gmember_alpha
+ ImageMetaFunctions.GetMembers ["width"] = gmember_width
+ ImageMetaFunctions.GetMembers ["height"] = gmember_height
+ ImageMetaFunctions.GetMembers ["texture"] = gmember_texture
+
ImageMetaFunctions.__index = function (_table, _member_requested)
- local func = get_members_function_index [_member_requested]
+ local func = ImageMetaFunctions.GetMembers [_member_requested]
if (func) then
return func (_table, _member_requested)
end
@@ -146,20 +156,19 @@
end
end
- local set_members_function_index = {
- ["show"] = smember_show,
- ["hide"] = smember_hide,
- ["alpha"] = smember_alpha,
- ["width"] = smember_width,
- ["height"] = smember_height,
- ["texture"] = smember_texture,
- ["texcoord"] = smember_texcoord,
- ["color"] = smember_color,
- ["blackwhite"] = smember_desaturated,
- }
-
+ ImageMetaFunctions.SetMembers = ImageMetaFunctions.SetMembers or {}
+ ImageMetaFunctions.SetMembers ["show"] = smember_show
+ ImageMetaFunctions.SetMembers ["hide"] = smember_hide
+ ImageMetaFunctions.SetMembers ["alpha"] = smember_alpha
+ ImageMetaFunctions.SetMembers ["width"] = smember_width
+ ImageMetaFunctions.SetMembers ["height"] = smember_height
+ ImageMetaFunctions.SetMembers ["texture"] = smember_texture
+ ImageMetaFunctions.SetMembers ["texcoord"] = smember_texcoord
+ ImageMetaFunctions.SetMembers ["color"] = smember_color
+ ImageMetaFunctions.SetMembers ["blackwhite"] = smember_desaturated
+
ImageMetaFunctions.__newindex = function (_table, _key, _value)
- local func = set_members_function_index [_key]
+ local func = ImageMetaFunctions.SetMembers [_key]
if (func) then
return func (_table, _value)
else
@@ -280,6 +289,9 @@
ImageObject.image:SetTexCoord (unpack (coords))
end
+ ImageObject.HookList = {
+ }
+
setmetatable (ImageObject, ImageMetaFunctions)
return ImageObject
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/slider.lua
--- 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
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/split_bar.lua
--- a/Libs/DF/split_bar.lua Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/split_bar.lua Tue Jul 19 13:23:40 2016 -0300
@@ -13,9 +13,20 @@
local _math_floor = math.floor --> lua local
local cleanfunction = function() end
-local SplitBarMetaFunctions = {}
local APISplitBarFunctions
+do
+ local metaPrototype = {
+ WidgetType = "split_bar",
+ SetHook = DF.SetHook,
+ RunHooksForWidget = DF.RunHooksForWidget,
+ }
+
+ _G [DF.GlobalWidgetControlNames ["split_bar"]] = _G [DF.GlobalWidgetControlNames ["split_bar"]] or metaPrototype
+end
+
+local SplitBarMetaFunctions = _G [DF.GlobalWidgetControlNames ["split_bar"]]
+
------------------------------------------------------------------------------------------------------------
--> metatables
@@ -122,30 +133,29 @@
return _object.textleft:GetTextColor()
end
- local get_members_function_index = {
- ["tooltip"] = gmember_tooltip,
- ["shown"] = gmember_shown,
- ["width"] = gmember_width,
- ["height"] = gmember_height,
- ["value"] = gmember_value,
- ["righttext"] = gmember_rtext,
- ["lefttext"] = gmember_ltext,
- ["rightcolor"] = gmember_rcolor,
- ["leftcolor"] = gmember_lcolor,
- ["righticon"] = gmember_ricon,
- ["lefticon"] = gmember_licon,
- ["texture"] = gmember_texture,
- ["fontsize"] = gmember_textsize,
- ["fontface"] = gmember_textfont,
- ["fontcolor"] = gmember_textcolor,
- ["textsize"] = gmember_textsize, --alias
- ["textfont"] = gmember_textfont, --alias
- ["textcolor"] = gmember_textcolor --alias
- }
+ SplitBarMetaFunctions.GetMembers = SplitBarMetaFunctions.GetMembers or {}
+ SplitBarMetaFunctions.GetMembers ["tooltip"] = gmember_tooltip
+ SplitBarMetaFunctions.GetMembers ["shown"] = gmember_shown
+ SplitBarMetaFunctions.GetMembers ["width"] = gmember_width
+ SplitBarMetaFunctions.GetMembers ["height"] = gmember_height
+ SplitBarMetaFunctions.GetMembers ["value"] = gmember_value
+ SplitBarMetaFunctions.GetMembers ["righttext"] = gmember_rtext
+ SplitBarMetaFunctions.GetMembers ["lefttext"] = gmember_ltext
+ SplitBarMetaFunctions.GetMembers ["rightcolor"] = gmember_rcolor
+ SplitBarMetaFunctions.GetMembers ["leftcolor"] = gmember_lcolor
+ SplitBarMetaFunctions.GetMembers ["righticon"] = gmember_ricon
+ SplitBarMetaFunctions.GetMembers ["lefticon"] = gmember_licon
+ SplitBarMetaFunctions.GetMembers ["texture"] = gmember_texture
+ SplitBarMetaFunctions.GetMembers ["fontsize"] = gmember_textsize
+ SplitBarMetaFunctions.GetMembers ["fontface"] = gmember_textfont
+ SplitBarMetaFunctions.GetMembers ["fontcolor"] = gmember_textcolor
+ SplitBarMetaFunctions.GetMembers ["textsize"] = gmember_textsize --alias
+ SplitBarMetaFunctions.GetMembers ["textfont"] = gmember_textfont --alias
+ SplitBarMetaFunctions.GetMembers ["textcolor"] = gmember_textcolor --alias
SplitBarMetaFunctions.__index = function (_table, _member_requested)
- local func = get_members_function_index [_member_requested]
+ local func = SplitBarMetaFunctions.GetMembers [_member_requested]
if (func) then
return func (_table, _member_requested)
end
@@ -274,29 +284,28 @@
return _object.textright:SetTextColor (_value1, _value2, _value3, _value4)
end
- local set_members_function_index = {
- ["tooltip"] = smember_tooltip,
- ["shown"] = smember_shown,
- ["width"] = smember_width,
- ["height"] = smember_height,
- ["value"] = smember_value,
- ["righttext"] = smember_rtext,
- ["lefttext"] = smember_ltext,
- ["rightcolor"] = smember_rcolor,
- ["leftcolor"] = smember_lcolor,
- ["righticon"] = smember_ricon,
- ["lefticon"] = smember_licon,
- ["texture"] = smember_texture,
- ["fontsize"] = smember_textsize,
- ["fontface"] = smember_textfont,
- ["fontcolor"] = smember_textcolor,
- ["textsize"] = smember_textsize, --alias
- ["textfont"] = smember_textfont, --alias
- ["textcolor"] = smember_textcolor --alias
- }
+ SplitBarMetaFunctions.SetMembers = SplitBarMetaFunctions.SetMembers or {}
+ SplitBarMetaFunctions.SetMembers ["tooltip"] = smember_tooltip
+ SplitBarMetaFunctions.SetMembers ["shown"] = smember_shown
+ SplitBarMetaFunctions.SetMembers ["width"] = smember_width
+ SplitBarMetaFunctions.SetMembers ["height"] = smember_height
+ SplitBarMetaFunctions.SetMembers ["value"] = smember_value
+ SplitBarMetaFunctions.SetMembers ["righttext"] = smember_rtext
+ SplitBarMetaFunctions.SetMembers ["lefttext"] = smember_ltext
+ SplitBarMetaFunctions.SetMembers ["rightcolor"] = smember_rcolor
+ SplitBarMetaFunctions.SetMembers ["leftcolor"] = smember_lcolor
+ SplitBarMetaFunctions.SetMembers ["righticon"] = smember_ricon
+ SplitBarMetaFunctions.SetMembers ["lefticon"] = smember_licon
+ SplitBarMetaFunctions.SetMembers ["texture"] = smember_texture
+ SplitBarMetaFunctions.SetMembers ["fontsize"] = smember_textsize
+ SplitBarMetaFunctions.SetMembers ["fontface"] = smember_textfont
+ SplitBarMetaFunctions.SetMembers ["fontcolor"] = smember_textcolor
+ SplitBarMetaFunctions.SetMembers ["textsize"] = smember_textsize --alias
+ SplitBarMetaFunctions.SetMembers ["textfont"] = smember_textfont --alias
+ SplitBarMetaFunctions.SetMembers ["textcolor"] = smember_textcolor --alias
SplitBarMetaFunctions.__newindex = function (_table, _key, _value)
- local func = set_members_function_index [_key]
+ local func = SplitBarMetaFunctions.SetMembers [_key]
if (func) then
return func (_table, _value)
else
@@ -425,23 +434,13 @@
end
end
---> hooks
- function SplitBarMetaFunctions:SetHook (hookType, func)
- if (func) then
- _rawset (self, hookType.."Hook", func)
- else
- _rawset (self, hookType.."Hook", nil)
- end
- end
-
------------------------------------------------------------------------------------------------------------
--> scripts
local OnEnter = function (frame)
- if (frame.MyObject.OnEnterHook) then
- local interrupt = frame.MyObject.OnEnterHook (frame)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnEnter", frame, capsule)
+ if (kill) then
+ return
end
frame.MyObject.div:SetPoint ("left", frame, "left", frame:GetValue() * (frame:GetWidth()/100) - 18, 0)
@@ -454,11 +453,10 @@
end
local OnLeave = function (frame)
- if (frame.MyObject.OnLeaveHook) then
- local interrupt = frame.MyObject.OnLeaveHook (frame)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnLeave", frame, capsule)
+ if (kill) then
+ return
end
if (frame.MyObject.have_tooltip) then
@@ -467,29 +465,26 @@
end
local OnHide = function (frame)
- if (frame.MyObject.OnHideHook) then
- local interrupt = frame.MyObject.OnHideHook (frame)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnHide", frame, capsule)
+ if (kill) then
+ return
end
end
local OnShow = function (frame)
- if (frame.MyObject.OnShowHook) then
- local interrupt = frame.MyObject.OnShowHook (frame)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnShow", frame, capsule)
+ if (kill) then
+ return
end
end
local OnMouseDown = function (frame, button)
- if (frame.MyObject.OnMouseDownHook) then
- local interrupt = frame.MyObject.OnMouseDownHook (frame, button)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnMouseDown", frame, button, capsule)
+ if (kill) then
+ return
end
if (not frame.MyObject.container.isLocked and frame.MyObject.container:IsMovable()) then
@@ -501,11 +496,10 @@
end
local OnMouseUp = function (frame, button)
- if (frame.MyObject.OnMouseUpHook) then
- local interrupt = frame.MyObject.OnMouseUpHook (frame, button)
- if (interrupt) then
- return
- end
+ local capsule = frame.MyObject
+ local kill = capsule:RunHooksForWidget ("OnMouseUp", frame, button, capsule)
+ if (kill) then
+ return
end
if (frame.MyObject.container.isMoving) then
@@ -564,17 +558,8 @@
end
--> default members:
- --> hooks
- SplitBarObject.OnEnterHook = nil
- SplitBarObject.OnLeaveHook = nil
- SplitBarObject.OnHideHook = nil
- SplitBarObject.OnShowHook = nil
- SplitBarObject.OnMouseDownHook = nil
- SplitBarObject.OnMouseUpHook = nil
--> misc
- SplitBarObject.tooltip = nil
SplitBarObject.locked = false
- SplitBarObject.have_tooltip = nil
SplitBarObject.container = container
--> create widgets
@@ -610,15 +595,25 @@
SplitBarObject.div = _G [name .. "_Spark"]
-
+
--> hooks
- SplitBarObject.statusbar:SetScript ("OnEnter", OnEnter)
- SplitBarObject.statusbar:SetScript ("OnLeave", OnLeave)
- SplitBarObject.statusbar:SetScript ("OnHide", OnHide)
- SplitBarObject.statusbar:SetScript ("OnShow", OnShow)
- SplitBarObject.statusbar:SetScript ("OnMouseDown", OnMouseDown)
- SplitBarObject.statusbar:SetScript ("OnMouseUp", OnMouseUp)
- SplitBarObject.statusbar:SetScript ("OnSizeChanged", OnSizeChanged)
+ SplitBarObject.HookList = {
+ OnEnter = {},
+ OnLeave = {},
+ OnHide = {},
+ OnShow = {},
+ OnMouseDown = {},
+ OnMouseUp = {},
+ OnSizeChanged = {},
+ }
+
+ SplitBarObject.statusbar:SetScript ("OnEnter", OnEnter)
+ SplitBarObject.statusbar:SetScript ("OnLeave", OnLeave)
+ SplitBarObject.statusbar:SetScript ("OnHide", OnHide)
+ SplitBarObject.statusbar:SetScript ("OnShow", OnShow)
+ SplitBarObject.statusbar:SetScript ("OnMouseDown", OnMouseDown)
+ SplitBarObject.statusbar:SetScript ("OnMouseUp", OnMouseUp)
+ SplitBarObject.statusbar:SetScript ("OnSizeChanged", OnSizeChanged)
_setmetatable (SplitBarObject, SplitBarMetaFunctions)
diff -r 219f04e5ba55 -r 7944c081e5b4 Libs/DF/textentry.lua
--- a/Libs/DF/textentry.lua Mon Jul 04 23:06:23 2016 -0300
+++ b/Libs/DF/textentry.lua Tue Jul 19 13:23:40 2016 -0300
@@ -16,9 +16,19 @@
local cleanfunction = function() end
local APITextEntryFunctions = false
-local TextEntryMetaFunctions = {}
-DF.TextEntryCounter = 1
+do
+ local metaPrototype = {
+ WidgetType = "textentry",
+ SetHook = DF.SetHook,
+ RunHooksForWidget = DF.RunHooksForWidget,
+ }
+
+ _G [DF.GlobalWidgetControlNames ["textentry"]] = _G [DF.GlobalWidgetControlNames ["textentry"]] or metaPrototype
+end
+
+local TextEntryMetaFunctions = _G [DF.GlobalWidgetControlNames ["textentry"]]
+DF.TextEntryCounter = DF.TextEntryCounter or 1
------------------------------------------------------------------------------------------------------------
--> metatables
@@ -51,17 +61,15 @@
return _object.editbox:GetText()
end
- local get_members_function_index = {
- ["tooltip"] = gmember_tooltip,
- ["shown"] = gmember_shown,
- ["width"] = gmember_width,
- ["height"] = gmember_height,
- ["text"] = gmember_text,
- }
+ TextEntryMetaFunctions.GetMembers = TextEntryMetaFunctions.GetMembers or {}
+ TextEntryMetaFunctions.GetMembers ["tooltip"] = gmember_tooltip
+ TextEntryMetaFunctions.GetMembers ["shown"] = gmember_shown
+ TextEntryMetaFunctions.GetMembers ["width"] = gmember_width
+ TextEntryMetaFunctions.GetMembers ["height"] = gmember_height
+ TextEntryMetaFunctions.GetMembers ["text"] = gmember_text
TextEntryMetaFunctions.__index = function (_table, _member_requested)
-
- local func = get_members_function_index [_member_requested]
+ local func = TextEntryMetaFunctions.GetMembers [_member_requested]
if (func) then
return func (_table, _member_requested)
end
@@ -121,19 +129,18 @@
return _object.editbox:SetJustifyH (string.lower (_value))
end
- local set_members_function_index = {
- ["tooltip"] = smember_tooltip,
- ["show"] = smember_show,
- ["hide"] = smember_hide,
- ["width"] = smember_width,
- ["height"] = smember_height,
- ["text"] = smember_text,
- ["multiline"] = smember_multiline,
- ["align"] = smember_horizontalpos,
- }
+ TextEntryMetaFunctions.SetMembers = TextEntryMetaFunctions.SetMembers or {}
+ TextEntryMetaFunctions.SetMembers ["tooltip"] = smember_tooltip
+ TextEntryMetaFunctions.SetMembers ["show"] = smember_show
+ TextEntryMetaFunctions.SetMembers ["hide"] = smember_hide
+ TextEntryMetaFunctions.SetMembers ["width"] = smember_width
+ TextEntryMetaFunctions.SetMembers ["height"] = smember_height
+ TextEntryMetaFunctions.SetMembers ["text"] = smember_text
+ TextEntryMetaFunctions.SetMembers ["multiline"] = smember_multiline
+ TextEntryMetaFunctions.SetMembers ["align"] = smember_horizontalpos
TextEntryMetaFunctions.__newindex = function (_table, _key, _value)
- local func = set_members_function_index [_key]
+ local func = TextEntryMetaFunctions.SetMembers [_key]
if (func) then
return func (_table, _value)
else
@@ -143,6 +150,21 @@
------------------------------------------------------------------------------------------------------------
--> methods
+ local cleanfunction = function()end
+ function TextEntryMetaFunctions:SetEnterFunction (func, param1, param2)
+ if (func) then
+ _rawset (self, "func", func)
+ else
+ _rawset (self, "func", cleanfunction)
+ end
+
+ if (param1 ~= nil) then
+ _rawset (self, "param1", param1)
+ end
+ if (param2 ~= nil) then
+ _rawset (self, "param2", param2)
+ end
+ end
--> set point
function TextEntryMetaFunctions:SetPoint (MyAnchor, SnapTo, HisAnchor, x, y, Width)
@@ -252,14 +274,6 @@
end
--> hooks
- function TextEntryMetaFunctions:SetHook (hookType, func)
- if (func) then
- _rawset (self, hookType.."Hook", func)
- else
- _rawset (self, hookType.."Hook", nil)
- end
- end
-
function TextEntryMetaFunctions:Enable()
if (not self.editbox:IsEnabled()) then
self.editbox:Enable()
@@ -291,19 +305,19 @@
end
------------------------------------------------------------------------------------------------------------
---> scripts
+--> scripts and hooks
+
local OnEnter = function (textentry)
+ local capsule = textentry.MyObject
+
+ local kill = capsule:RunHooksForWidget ("OnEnter", textentry, capsule)
+ if (kill) then
+ return
+ end
- if (textentry.MyObject.OnEnterHook) then
- local interrupt = textentry.MyObject.OnEnterHook (textentry)
- if (interrupt) then
- return
- end
- end
-
- if (textentry.MyObject.have_tooltip) then
+ if (capsule.have_tooltip) then
GameCooltip2:Preset (2)
- GameCooltip2:AddLine (textentry.MyObject.have_tooltip)
+ GameCooltip2:AddLine (capsule.have_tooltip)
GameCooltip2:ShowCooltip (textentry, "tooltip")
end
@@ -313,17 +327,16 @@
textentry.current_bordercolor = textentry.current_bordercolor or {textentry:GetBackdropBorderColor()}
textentry:SetBackdropBorderColor (1, 1, 1, 1)
end
-
end
local OnLeave = function (textentry)
- if (textentry.MyObject.OnLeaveHook) then
- local interrupt = textentry.MyObject.OnLeaveHook (textentry)
- if (interrupt) then
- return
- end
+ local capsule = textentry.MyObject
+
+ local kill = capsule:RunHooksForWidget ("OnLeave", textentry, capsule)
+ if (kill) then
+ return
end
-
+
if (textentry.MyObject.have_tooltip) then
GameCooltip2:ShowMe (false)
end
@@ -333,34 +346,32 @@
if (textentry:IsEnabled()) then
textentry:SetBackdropBorderColor (unpack (textentry.current_bordercolor))
end
-
end
local OnHide = function (textentry)
- if (textentry.MyObject.OnHideHook) then
- local interrupt = textentry.MyObject.OnHideHook (textentry)
- if (interrupt) then
- return
- end
+ local capsule = textentry.MyObject
+
+ local kill = capsule:RunHooksForWidget ("OnHide", textentry, capsule)
+ if (kill) then
+ return
end
end
local OnShow = function (textentry)
- if (textentry.MyObject.OnShowHook) then
- local interrupt = textentry.MyObject.OnShowHook (textentry)
- if (interrupt) then
- return
- end
+ local capsule = textentry.MyObject
+
+ local kill = capsule:RunHooksForWidget ("OnShow", textentry, capsule)
+ if (kill) then
+ return
end
end
- local OnEnterPressed = function (textentry, byScript)
+ local OnEnterPressed = function (textentry, byScript)
+ local capsule = textentry.MyObject
- if (textentry.MyObject.OnEnterPressedHook) then
- local interrupt = textentry.MyObject.OnEnterPressedHook (textentry)
- if (interrupt) then
- return
- end
+ local kill = capsule:RunHooksForWidget ("OnEnterPressed", textentry, capsule)
+ if (kill) then
+ return
end
local texto = DF:trim (textentry:GetText())
@@ -373,38 +384,47 @@
textentry:SetText ("")
textentry.MyObject.currenttext = ""
end
- textentry.focuslost = true --> perdeu_focus isso aqui pra quando estiver editando e clicar em outra caixa
- textentry:ClearFocus()
- if (textentry.MyObject.tab_on_enter and textentry.MyObject.next) then
- textentry.MyObject.next:SetFocus()
+ if (not capsule.NoClearFocusOnEnterPressed) then
+ textentry.focuslost = true --> quando estiver editando e clicar em outra caixa
+ textentry:ClearFocus()
+
+ if (textentry.MyObject.tab_on_enter and textentry.MyObject.next) then
+ textentry.MyObject.next:SetFocus()
+ end
end
end
local OnEscapePressed = function (textentry)
+ local capsule = textentry.MyObject
- if (textentry.MyObject.OnEscapePressedHook) then
- local interrupt = textentry.MyObject.OnEscapePressedHook (textentry)
- if (interrupt) then
- return
- end
- end
-
- --textentry:SetText("")
- --textentry.MyObject.currenttext = ""
+ local kill = capsule:RunHooksForWidget ("OnEscapePressed", textentry, capsule)
+ if (kill) then
+ return
+ end
+
textentry.focuslost = true
textentry:ClearFocus()
end
+ local OnSpacePressed = function (textentry)
+ local capsule = textentry.MyObject
+
+ local kill = capsule:RunHooksForWidget ("OnSpacePressed", textentry, capsule)
+ if (kill) then
+ return
+ end
+ end
+
local OnEditFocusLost = function (textentry)
+ local capsule = textentry.MyObject
+
if (textentry:IsShown()) then
- if (textentry.MyObject.OnEditFocusLostHook) then
- local interrupt = textentry.MyObject.OnEditFocusLostHook (textentry)
- if (interrupt) then
- return
- end
+ local kill = capsule:RunHooksForWidget ("OnEditFocusLost", textentry, capsule)
+ if (kill) then
+ return
end
if (not textentry.focuslost) then
@@ -428,39 +448,42 @@
end
local OnEditFocusGained = function (textentry)
- if (textentry.MyObject.OnEditFocusGainedHook) then
- local interrupt = textentry.MyObject.OnEditFocusGainedHook (textentry)
- if (interrupt) then
- return
- end
+
+ local capsule = textentry.MyObject
+
+ local kill = capsule:RunHooksForWidget ("OnEditFocusGained", textentry, capsule)
+ if (kill) then
+ return
end
+
textentry.MyObject.label:SetTextColor (1, 1, 1, 1)
end
- local OnChar = function (textentry, text)
- if (textentry.MyObject.OnCharHook) then
- local interrupt = textentry.MyObject.OnCharHook (textentry, text)
- if (interrupt) then
- return
- end
+ local OnChar = function (textentry, char)
+ local capsule = textentry.MyObject
+
+ local kill = capsule:RunHooksForWidget ("OnChar", textentry, char, capsule)
+ if (kill) then
+ return
end
end
local OnTextChanged = function (textentry, byUser)
- if (textentry.MyObject.OnTextChangedHook) then
- local interrupt = textentry.MyObject.OnTextChangedHook (textentry, byUser)
- if (interrupt) then
- return
- end
+ local capsule = textentry.MyObject
+
+ local kill = capsule:RunHooksForWidget ("OnTextChanged", textentry, byUser, capsule)
+ if (kill) then
+ return
end
end
local OnTabPressed = function (textentry)
- if (textentry.MyObject.OnTabPressedHook) then
- local interrupt = textentry.MyObject.OnTabPressedHook (textentry, byUser)
- if (interrupt) then
- return
- end
+
+ local capsule = textentry.MyObject
+
+ local kill = capsule:RunHooksForWidget ("OnTabPressed", textentry, byUser, capsule)
+ if (kill) then
+ return
end
if (textentry.MyObject.next) then
@@ -583,7 +606,7 @@
w = space
elseif (w and space) then
if (DF.debug) then
- print ("warning: you are using width and space, try use only space for better results.")
+ --print ("warning: you are using width and space, try use only space for better results.")
end
end
@@ -617,6 +640,22 @@
TextEntryObject.editbox:SetBackdrop ({bgFile = DF.folder .. "background", tileSize = 64, edgeFile = DF.folder .. "border_2", edgeSize = 10, insets = {left = 1, right = 1, top = 1, bottom = 1}})
--> hooks
+
+ TextEntryObject.HookList = {
+ OnEnter = {},
+ OnLeave = {},
+ OnHide = {},
+ OnShow = {},
+ OnEnterPressed = {},
+ OnEscapePressed = {},
+ OnSpacePressed = {},
+ OnEditFocusLost = {},
+ OnEditFocusGained = {},
+ OnChar = {},
+ OnTextChanged = {},
+ OnTabPressed = {},
+ }
+
TextEntryObject.editbox:SetScript ("OnEnter", OnEnter)
TextEntryObject.editbox:SetScript ("OnLeave", OnLeave)
TextEntryObject.editbox:SetScript ("OnHide", OnHide)
@@ -624,6 +663,7 @@
TextEntryObject.editbox:SetScript ("OnEnterPressed", OnEnterPressed)
TextEntryObject.editbox:SetScript ("OnEscapePressed", OnEscapePressed)
+ TextEntryObject.editbox:SetScript ("OnSpacePressed", OnSpacePressed)
TextEntryObject.editbox:SetScript ("OnEditFocusLost", OnEditFocusLost)
TextEntryObject.editbox:SetScript ("OnEditFocusGained", OnEditFocusGained)
TextEntryObject.editbox:SetScript ("OnChar", OnChar)
@@ -653,8 +693,8 @@
function DF:NewSpellEntry (parent, func, w, h, param1, param2, member, name)
local editbox = DF:NewTextEntry (parent, parent, name, member, w, h, func, param1, param2)
- editbox:SetHook ("OnEditFocusGained", SpellEntryOnEditFocusGained)
- editbox:SetHook ("OnTextChanged", SpellEntryOnTextChanged)
+-- editbox:SetHook ("OnEditFocusGained", SpellEntryOnEditFocusGained)
+-- editbox:SetHook ("OnTextChanged", SpellEntryOnTextChanged)
return editbox
end
@@ -734,4 +774,275 @@
borderframe.editbox.borderframe = borderframe
return borderframe
-end
\ No newline at end of file
+end
+
+
+------------------------------------------------------------------------------------
+--auto complete
+
+-- block -------------------
+--code author Saiket from http://www.wowinterface.com/forums/showpost.php?p=245759&postcount=6
+--- @return StartPos, EndPos of highlight in this editbox.
+local function GetTextHighlight ( self )
+ local Text, Cursor = self:GetText(), self:GetCursorPosition();
+ self:Insert( "" ); -- Delete selected text
+ local TextNew, CursorNew = self:GetText(), self:GetCursorPosition();
+ -- Restore previous text
+ self:SetText( Text );
+ self:SetCursorPosition( Cursor );
+ local Start, End = CursorNew, #Text - ( #TextNew - CursorNew );
+ self:HighlightText( Start, End );
+ return Start, End;
+end
+local StripColors;
+do
+ local CursorPosition, CursorDelta;
+ --- Callback for gsub to remove unescaped codes.
+ local function StripCodeGsub ( Escapes, Code, End )
+ if ( #Escapes % 2 == 0 ) then -- Doesn't escape Code
+ if ( CursorPosition and CursorPosition >= End - 1 ) then
+ CursorDelta = CursorDelta - #Code;
+ end
+ return Escapes;
+ end
+ end
+ --- Removes a single escape sequence.
+ local function StripCode ( Pattern, Text, OldCursor )
+ CursorPosition, CursorDelta = OldCursor, 0;
+ return Text:gsub( Pattern, StripCodeGsub ), OldCursor and CursorPosition + CursorDelta;
+ end
+ --- Strips Text of all color escape sequences.
+ -- @param Cursor Optional cursor position to keep track of.
+ -- @return Stripped text, and the updated cursor position if Cursor was given.
+ function StripColors ( Text, Cursor )
+ Text, Cursor = StripCode( "(|*)(|c%x%x%x%x%x%x%x%x)()", Text, Cursor );
+ return StripCode( "(|*)(|r)()", Text, Cursor );
+ end
+end
+
+local COLOR_END = "|r";
+--- Wraps this editbox's selected text with the given color.
+local function ColorSelection ( self, ColorCode )
+ local Start, End = GetTextHighlight( self );
+ local Text, Cursor = self:GetText(), self:GetCursorPosition();
+ if ( Start == End ) then -- Nothing selected
+ --Start, End = Cursor, Cursor; -- Wrap around cursor
+ return; -- Wrapping the cursor in a color code and hitting backspace crashes the client!
+ end
+ -- Find active color code at the end of the selection
+ local ActiveColor;
+ if ( End < #Text ) then -- There is text to color after the selection
+ local ActiveEnd;
+ local CodeEnd, _, Escapes, Color = 0;
+ while ( true ) do
+ _, CodeEnd, Escapes, Color = Text:find( "(|*)(|c%x%x%x%x%x%x%x%x)", CodeEnd + 1 );
+ if ( not CodeEnd or CodeEnd > End ) then
+ break;
+ end
+ if ( #Escapes % 2 == 0 ) then -- Doesn't escape Code
+ ActiveColor, ActiveEnd = Color, CodeEnd;
+ end
+ end
+
+ if ( ActiveColor ) then
+ -- Check if color gets terminated before selection ends
+ CodeEnd = 0;
+ while ( true ) do
+ _, CodeEnd, Escapes = Text:find( "(|*)|r", CodeEnd + 1 );
+ if ( not CodeEnd or CodeEnd > End ) then
+ break;
+ end
+ if ( CodeEnd > ActiveEnd and #Escapes % 2 == 0 ) then -- Terminates ActiveColor
+ ActiveColor = nil;
+ break;
+ end
+ end
+ end
+ end
+
+ local Selection = Text:sub( Start + 1, End );
+ -- Remove color codes from the selection
+ local Replacement, CursorReplacement = StripColors( Selection, Cursor - Start );
+
+ self:SetText( ( "" ):join(
+ Text:sub( 1, Start ),
+ ColorCode, Replacement, COLOR_END,
+ ActiveColor or "", Text:sub( End + 1 )
+ ) );
+
+ -- Restore cursor and highlight, adjusting for wrapper text
+ Cursor = Start + CursorReplacement;
+ if ( CursorReplacement > 0 ) then -- Cursor beyond start of color code
+ Cursor = Cursor + #ColorCode;
+ end
+ if ( CursorReplacement >= #Replacement ) then -- Cursor beyond end of color
+ Cursor = Cursor + #COLOR_END;
+ end
+
+ self:SetCursorPosition( Cursor );
+ -- Highlight selection and wrapper
+ self:HighlightText( Start, #ColorCode + ( #Replacement - #Selection ) + #COLOR_END + End );
+end
+-- end of the block ---------------------
+
+local get_last_word = function (self)
+ self.lastword = ""
+ local cursor_pos = self.editbox:GetCursorPosition()
+ local text = self.editbox:GetText()
+ for i = cursor_pos, 1, -1 do
+ local character = text:sub (i, i)
+ if (character:match ("%a")) then
+ self.lastword = character .. self.lastword
+ else
+ break
+ end
+ end
+end
+
+--On Text Changed
+local AutoComplete_OnTextChanged = function (editboxWidget, byUser, capsule)
+ capsule = capsule or editboxWidget.MyObject
+
+ local chars_now = editboxWidget:GetText():len()
+ if (not editboxWidget.ignore_textchange) then
+ --> backspace
+ if (chars_now == capsule.characters_count -1) then
+ capsule.lastword = capsule.lastword:sub (1, capsule.lastword:len()-1)
+ --> delete lots of text
+ elseif (chars_now < capsule.characters_count) then
+ --o auto complete selecionou outra palavra bem menor e caiu nesse filtro
+ editboxWidget.end_selection = nil
+ capsule:GetLastWord()
+ end
+ else
+ editboxWidget.ignore_textchange = nil
+ end
+ capsule.characters_count = chars_now
+end
+
+local AutoComplete_OnSpacePressed = function (editboxWidget, capsule)
+ capsule = capsule or editboxWidget.MyObject
+
+-- if (not gotMatch) then
+ --editboxWidget.end_selection = nil
+-- end
+end
+
+local AutoComplete_OnEscapePressed = function (editboxWidget)
+ editboxWidget.end_selection = nil
+end
+
+local AutoComplete_OnEnterPressed = function (editboxWidget)
+
+ local capsule = editboxWidget.MyObject
+ if (editboxWidget.end_selection) then
+ editboxWidget:SetCursorPosition (editboxWidget.end_selection)
+ editboxWidget:HighlightText (0, 0)
+ editboxWidget.end_selection = nil
+ --editboxWidget:Insert (" ") --estava causando a adição de uma palavra a mais quando o próximo catactere for um espaço
+ else
+ if (editboxWidget:IsMultiLine()) then
+ editboxWidget:Insert ("\n")
+ --reseta a palavra se acabou de ganhar focus e apertou enter
+ if (editboxWidget.focusGained) then
+ capsule.lastword = ""
+ editboxWidget.focusGained = nil
+ end
+ else
+ editboxWidget:Insert ("")
+ editboxWidget.focuslost = true
+ editboxWidget:ClearFocus()
+ end
+ end
+ capsule.lastword = ""
+
+end
+
+local AutoComplete_OnEditFocusGained = function (editboxWidget)
+ local capsule = editboxWidget.MyObject
+ capsule:GetLastWord()
+ editboxWidget.end_selection = nil
+ editboxWidget.focusGained = true
+ capsule.characters_count = editboxWidget:GetText():len()
+end
+
+local AutoComplete_OnChar = function (editboxWidget, char, capsule)
+ if (char == "") then
+ return
+ end
+
+ capsule = capsule or editboxWidget.MyObject
+ editboxWidget.end_selection = nil
+
+ if (editboxWidget.ignore_input) then
+ return
+ end
+
+ --reseta a palavra se acabou de ganhar focus e apertou espaço
+ if (editboxWidget.focusGained and char == " ") then
+ capsule.lastword = ""
+ editboxWidget.focusGained = nil
+ else
+ editboxWidget.focusGained = nil
+ end
+
+ if (char:match ("%a") or (char == " " and capsule.lastword ~= "")) then
+ capsule.lastword = capsule.lastword .. char
+ else
+ capsule.lastword = ""
+ end
+
+ editboxWidget.ignore_input = true
+ if (capsule.lastword:len() >= 2) then
+
+ local wordList = capsule [capsule.poolName]
+ if (not wordList) then
+ if (DF.debug) then
+ error ("Details! Framework: Invalid word list table.")
+ end
+ return
+ end
+
+ for i = 1, #wordList do
+ local thisWord = wordList [i]
+ if (thisWord and (thisWord:find ("^" .. capsule.lastword) or thisWord:lower():find ("^" .. capsule.lastword))) then
+ local rest = thisWord:gsub (capsule.lastword, "")
+ rest = rest:lower():gsub (capsule.lastword, "")
+ local cursor_pos = editboxWidget:GetCursorPosition()
+ editboxWidget:Insert (rest)
+ editboxWidget:HighlightText (cursor_pos, cursor_pos + rest:len())
+ editboxWidget:SetCursorPosition (cursor_pos)
+ editboxWidget.end_selection = cursor_pos + rest:len()
+ editboxWidget.ignore_textchange = true
+ break
+ end
+ end
+
+ end
+ editboxWidget.ignore_input = false
+end
+
+function TextEntryMetaFunctions:SetAsAutoComplete (poolName)
+
+ self.lastword = ""
+ self.characters_count = 0
+ self.poolName = poolName
+ self.GetLastWord = get_last_word --editbox:GetLastWord()
+ self.NoClearFocusOnEnterPressed = true --avoid auto clear focus
+
+ self:SetHook ("OnEditFocusGained", AutoComplete_OnEditFocusGained)
+ self.editbox:HookScript ("OnEscapePressed", AutoComplete_OnEscapePressed)
+
+-- self:SetHook ("OnTextChanged", AutoComplete_OnTextChanged)
+ self:SetHook ("OnEnterPressed", AutoComplete_OnEnterPressed)
+-- self:SetHook ("OnChar", AutoComplete_OnChar)
+-- self:SetHook ("OnSpacePressed", AutoComplete_OnSpacePressed)
+
+ self.editbox:SetScript ("OnTextChanged", AutoComplete_OnTextChanged)
+-- self.editbox:SetScript ("OnEnterPressed", AutoComplete_OnEnterPressed)
+ self.editbox:SetScript ("OnChar", AutoComplete_OnChar)
+ self.editbox:SetScript ("OnSpacePressed", AutoComplete_OnSpacePressed)
+
+end
+
+-- endp
\ No newline at end of file