changeset 40:a960d5372b0c

- framework update from v22 to v44.
author Tercio
date Wed, 31 Aug 2016 19:55:14 -0300
parents 7944c081e5b4
children b740f601e824
files Libs/DF/colors.lua Libs/DF/cooltip.lua Libs/DF/cooltip.xml Libs/DF/dropdown.lua Libs/DF/dropdown.xml Libs/DF/fw.lua Libs/DF/load.xml Libs/DF/normal_bar.lua Libs/DF/panel.lua Libs/DF/textentry.lua
diffstat 10 files changed, 779 insertions(+), 65 deletions(-) [+]
line wrap: on
line diff
--- a/Libs/DF/colors.lua	Tue Jul 19 13:23:40 2016 -0300
+++ b/Libs/DF/colors.lua	Wed Aug 31 19:55:14 2016 -0300
@@ -18,7 +18,8 @@
 		["WARRIOR"] = {0.78, 0.61, 0.43},
 		["DEATHKNIGHT"] = {0.77, 0.12, 0.23},
 		["MONK"] = {0.0, 1.00, 0.59},
-	
+		["DEMONHUNTER"] = {0.64, 0.19, 0.79},
+		
 		["aliceblue"] = {0.941176, 0.972549, 1, 1},
 		["antiquewhite"] = {0.980392, 0.921569, 0.843137, 1},
 		["aqua"] = {0, 1, 1, 1},
--- a/Libs/DF/cooltip.lua	Tue Jul 19 13:23:40 2016 -0300
+++ b/Libs/DF/cooltip.lua	Wed Aug 31 19:55:14 2016 -0300
@@ -156,6 +156,10 @@
 			frame1 = CreateFrame ("Frame", "GameCooltipFrame1", UIParent, "DFCooltipMainFrameTemplate")
 			tinsert (UISpecialFrames, "GameCooltipFrame1")
 			DF:CreateFlashAnimation (frame1)
+			
+			if (DF.CreateBorder) then
+				DF:CreateBorder (frame1, .3, .1, .03)
+			end
 		else
 			frame1 = GameCooltipFrame1
 		end
@@ -174,11 +178,15 @@
 			tinsert (UISpecialFrames, "GameCooltipFrame2")
 			DF:CreateFlashAnimation (frame2)
 			frame2:SetClampedToScreen (true)
+			
+			if (DF.CreateBorder) then
+				DF:CreateBorder (frame2, .3, .1, .03)
+			end
 		else
 			frame2 = GameCooltipFrame2
 		end
 
-		frame2:SetPoint ("bottomleft", frame1, "bottomright")
+		frame2:SetPoint ("bottomleft", frame1, "bottomright", 4, 0)
 		
 		GameCooltipFrame2_FrameBackgroundCenter:SetTexture (DF.folder .. "cooltip_background")
 		GameCooltipFrame2_FrameBackgroundCenter:SetTexCoord (0.10546875, 0.89453125, 0, 1)
@@ -593,16 +601,16 @@
 			frame.selectedTop:ClearAllPoints()
 			frame.selectedBottom:ClearAllPoints()
 		
-			frame.selectedTop:SetPoint ("topleft", button, "topleft", left, top) --
-			frame.selectedTop:SetPoint ("topright", button, "topright", right, top) --
+			frame.selectedTop:SetPoint ("topleft", button, "topleft", left+1, top) --
+			frame.selectedTop:SetPoint ("topright", button, "topright", right-1, top) --
 			
-			frame.selectedBottom:SetPoint ("bottomleft", button, "bottomleft", left, bottom) --
-			frame.selectedBottom:SetPoint ("bottomright", button, "bottomright", right, bottom) --
+			frame.selectedBottom:SetPoint ("bottomleft", button, "bottomleft", left+1, bottom) --
+			frame.selectedBottom:SetPoint ("bottomright", button, "bottomright", right-1, bottom) --
 
 			CoolTip:ShowSelectedTexture (frame)
 		end
 		
-		local OnClickFunctionButtonPrincipal = function (self)
+		local OnClickFunctionButtonPrincipal = function (self, button)
 					if (CoolTip.IndexesSub [self.index] and CoolTip.IndexesSub [self.index] > 0) then
 						CoolTip:ShowSub (self.index)
 						CoolTip.last_button = self.index
@@ -619,18 +627,18 @@
 					
 					if (CoolTip.FunctionsTableMain [self.index]) then
 						local parameterTable = CoolTip.ParametersTableMain [self.index]
-						CoolTip.FunctionsTableMain [self.index] (_, CoolTip.FixedValue, parameterTable [1], parameterTable [2], parameterTable [3])
+						CoolTip.FunctionsTableMain [self.index] (_, CoolTip.FixedValue, parameterTable [1], parameterTable [2], parameterTable [3], button)
 					end
 				end
 				
-		local OnClickFunctionButtonSecundario = function (self)
+		local OnClickFunctionButtonSecundario = function (self, button)
 					CoolTip.buttonClicked = true
 					
 					CoolTip:SetSelectedAnchor (frame2, self)
 					
 					if (CoolTip.FunctionsTableSub [self.mainIndex] and CoolTip.FunctionsTableSub [self.mainIndex] [self.index]) then
 						local parameterTable = CoolTip.ParametersTableSub [self.mainIndex] [self.index]
-						CoolTip.FunctionsTableSub [self.mainIndex] [self.index] (_, CoolTip.FixedValue, parameterTable [1], parameterTable [2], parameterTable [3])
+						CoolTip.FunctionsTableSub [self.mainIndex] [self.index] (_, CoolTip.FixedValue, parameterTable [1], parameterTable [2], parameterTable [3], button)
 					end
 					
 					local botao_p = frame1.Lines [self.mainIndex]
@@ -757,12 +765,6 @@
 					menuButton.rightText:SetWidth (0)
 				end
 				
-				if (CoolTip.OptionsTable.RightTextHeight) then
-					menuButton.rightText:SetHeight (CoolTip.OptionsTable.RightTextHeight)
-				else
-					menuButton.rightText:SetHeight (0)
-				end
-				
 				if (CoolTip.OptionsTable.TextFont and not rightTextTable [7]) then
 					if (_G [CoolTip.OptionsTable.TextFont]) then
 						menuButton.rightText:SetFontObject (CoolTip.OptionsTable.TextFont)
@@ -852,9 +854,18 @@
 				menuButton.rightIcon:SetHeight (CoolTip.OptionsTable.IconSize)
 			end
 			
+			menuButton.leftText:SetHeight (0)
+			menuButton.rightText:SetHeight (0)
+			
 			if (CoolTip.Type == 2) then
 				CoolTip:LeftTextSpace (menuButton)
 			end
+			if (CoolTip.OptionsTable.LeftTextHeight) then
+				menuButton.leftText:SetHeight (CoolTip.OptionsTable.LeftTextHeight)
+			end
+			if (CoolTip.OptionsTable.RightTextHeight) then
+				menuButton.rightText:SetHeight (CoolTip.OptionsTable.RightTextHeight)
+			end
 			
 			--> string length
 			if (not isSub) then --> main frame
@@ -866,7 +877,7 @@
 						end
 					end
 				else
-					menuButton.leftText:SetWidth (CoolTip.OptionsTable.FixedWidth - menuButton.leftIcon:GetWidth() - menuButton.rightText:GetStringWidth() - menuButton.rightIcon:GetWidth() - 30)
+					menuButton.leftText:SetWidth (CoolTip.OptionsTable.FixedWidth - menuButton.leftIcon:GetWidth() - menuButton.rightText:GetStringWidth() - menuButton.rightIcon:GetWidth() - 22)
 				end
 			else
 				if (not CoolTip.OptionsTable.FixedWidthSub) then
@@ -877,7 +888,7 @@
 						end
 					end
 				else
-					menuButton.leftText:SetWidth (CoolTip.OptionsTable.FixedWidthSub - menuButton.leftIcon:GetWidth() - 20)
+					menuButton.leftText:SetWidth (CoolTip.OptionsTable.FixedWidthSub - menuButton.leftIcon:GetWidth() - 12)
 				end
 			end
 			
@@ -1011,15 +1022,14 @@
 			--> setup statusbar
 			CoolTip:StatusBar (menuButton, CoolTip.StatusBarTableSub [mainMenuIndex] and CoolTip.StatusBarTableSub [mainMenuIndex] [index])
 
-
 			--> click
 			menuButton:RegisterForClicks ("LeftButtonDown")
 			
 			menuButton:ClearAllPoints()
 			menuButton:SetPoint ("center", frame2, "center")
 			menuButton:SetPoint ("top", frame2, "top", 0, (((index-1)*20)*-1)-3)
-			menuButton:SetPoint ("left", frame2, "left")
-			menuButton:SetPoint ("right", frame2, "right")
+			menuButton:SetPoint ("left", frame2, "left", -4, 0)
+			menuButton:SetPoint ("right", frame2, "right", 4, 0)
 			
 			DF:FadeFrame (menuButton, 0)
 			
@@ -1160,8 +1170,8 @@
 				menuButton:ClearAllPoints()
 				
 				menuButton:SetPoint ("center", frame2, "center")
-				menuButton:SetPoint ("left", frame2, "left")
-				menuButton:SetPoint ("right", frame2, "right")
+				menuButton:SetPoint ("left", frame2, "left", -4, 0)
+				menuButton:SetPoint ("right", frame2, "right", 4, 0)
 				
 				menuButton.rightText:SetText ("")
 				
@@ -1204,8 +1214,8 @@
 				if (CoolTip.OptionsTable.YSpacingModSub) then
 					spacing = spacing + CoolTip.OptionsTable.YSpacingModSub
 				end
-				menuButton:SetPoint ("left", frame2, "left")
-				menuButton:SetPoint ("right", frame2, "right")
+				menuButton:SetPoint ("left", frame2, "left", -4, 0)
+				menuButton:SetPoint ("right", frame2, "right", 4, 0)
 				
 				if (menuButton.divbar) then
 					menuButton.divbar:Hide()
@@ -1248,21 +1258,21 @@
 			local button = frame1.Lines [index]
 		
 			frame2:ClearAllPoints()
-			frame2:SetPoint ("left", button, "right")
+			frame2:SetPoint ("left", button, "right", 4, 0)
 			
 		elseif (CoolTip.OptionsTable.SubFollowButton and CoolTip.frame2_leftside) then
 		
 			local button = frame1.Lines [index]
 		
 			frame2:ClearAllPoints()
-			frame2:SetPoint ("right", button, "left")
+			frame2:SetPoint ("right", button, "left", -4, 0)
 			
 		elseif (CoolTip.frame2_leftside) then
 			frame2:ClearAllPoints()
-			frame2:SetPoint ("bottomright", frame1, "bottomleft")
+			frame2:SetPoint ("bottomright", frame1, "bottomleft", -4, 0)
 		else
 			frame2:ClearAllPoints()
-			frame2:SetPoint ("bottomleft", frame1, "bottomright")
+			frame2:SetPoint ("bottomleft", frame1, "bottomright", 4, 0)
 		end
 		
 	end
@@ -1339,8 +1349,8 @@
 			
 			menuButton:ClearAllPoints()
 			menuButton:SetPoint ("center", frame1, "center")
-			menuButton:SetPoint ("left", frame1, "left")
-			menuButton:SetPoint ("right", frame1, "right")
+			menuButton:SetPoint ("left", frame1, "left", -4, 0)
+			menuButton:SetPoint ("right", frame1, "right", 4, 0)
 			
 			--> height
 			if (CoolTip.OptionsTable.AlignAsBlizzTooltip) then
@@ -1531,8 +1541,8 @@
 				menuButton:SetHeight (4)
 				--> points
 				menuButton:ClearAllPoints()				
-				menuButton:SetPoint ("left", frame1, "left")
-				menuButton:SetPoint ("right", frame1, "right")
+				menuButton:SetPoint ("left", frame1, "left", -4, 0)
+				menuButton:SetPoint ("right", frame1, "right", 4, 0)
 				menuButton:SetPoint ("center", frame1, "center")
 				
 				local div_size_up = tonumber (CoolTip.LeftTextTable [i] [2])
@@ -1574,8 +1584,8 @@
 				if (CoolTip.OptionsTable.YSpacingMod) then
 					spacing = spacing + CoolTip.OptionsTable.YSpacingMod
 				end
-				menuButton:SetPoint ("left", frame1, "left")
-				menuButton:SetPoint ("right", frame1, "right")
+				menuButton:SetPoint ("left", frame1, "left", -4, 0)
+				menuButton:SetPoint ("right", frame1, "right", 4, 0)
 			
 				if (menuButton.divbar) then
 					menuButton.divbar:Hide()
@@ -1711,7 +1721,7 @@
 						CoolTip.overlap_checked = true
 						
 						frame2:ClearAllPoints()
-						frame2:SetPoint ("bottomright", frame1, "bottomleft")
+						frame2:SetPoint ("bottomright", frame1, "bottomleft", 4, 0)
 						CoolTip.frame2_leftside = true
 						--> diff
 						return CoolTip:SetMyPoint (host, CoolTip.internal_x_mod , CoolTip.internal_y_mod)
@@ -1743,7 +1753,7 @@
 						local diff = f2_start_point - f1_end_point
 
 						frame2:ClearAllPoints()
-						frame2:SetPoint ("bottomright", frame1, "bottomleft")
+						frame2:SetPoint ("bottomright", frame1, "bottomleft", 4, 0)
 						CoolTip.frame2_leftside = true
 					end
 				
@@ -1971,8 +1981,13 @@
 		function CoolTip:Reset()
 
 			frame2:ClearAllPoints()
-			frame2:SetPoint ("bottomleft", frame1, "bottomright")
-		
+			frame2:SetPoint ("bottomleft", frame1, "bottomright", 4, 0)
+
+			frame1:SetParent (UIParent)
+			frame2:SetParent (UIParent)
+			frame1:SetFrameStrata ("TOOLTIP")
+			frame2:SetFrameStrata ("TOOLTIP")
+			
 			CoolTip:HideSelectedTexture (frame1)
 			CoolTip:HideSelectedTexture (frame2)
 		
@@ -2846,6 +2861,11 @@
 		
 		function CoolTip:ShowCooltip (frame, menuType, color)
 
+			frame1:SetFrameStrata ("TOOLTIP")
+			frame2:SetFrameStrata ("TOOLTIP")
+			frame1:SetParent (UIParent)
+			frame2:SetParent (UIParent)
+		
 			CoolTip.had_interaction = false
 		
 			if (frame) then
@@ -3066,10 +3086,10 @@
 			self:SetOption ("YSpacingMod", -4)
 			self:SetOption ("IgnoreButtonAutoHeight", true)
 			
-			--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)
+			self:SetBackdrop (2, preset2_backdrop, gray_table, black_table)
 		end
 	end
 	
--- a/Libs/DF/cooltip.xml	Tue Jul 19 13:23:40 2016 -0300
+++ b/Libs/DF/cooltip.xml	Wed Aug 31 19:55:14 2016 -0300
@@ -69,8 +69,8 @@
 			<Layer level="BACKGROUND" textureSubLevel="4">
 				<Texture name="$parent_FrameWallPaper" parentKey="frameWallpaper">
 					<Anchors>
-						<Anchor point="TOPLEFT" relativeTo="$parent" relativePoint="TOPLEFT" x="3" y="-3"/>
-						<Anchor point="BOTTOMRIGHT" relativeTo="$parent" relativePoint="BOTTOMRIGHT" x="-3" y="3"/>
+						<Anchor point="TOPLEFT" relativeTo="$parent" relativePoint="TOPLEFT" x="0" y="0"/>
+						<Anchor point="BOTTOMRIGHT" relativeTo="$parent" relativePoint="BOTTOMRIGHT" x="0" y="0"/>
 					</Anchors>
 				</Texture>
 			</Layer>
--- a/Libs/DF/dropdown.lua	Tue Jul 19 13:23:40 2016 -0300
+++ b/Libs/DF/dropdown.lua	Wed Aug 31 19:55:14 2016 -0300
@@ -592,7 +592,8 @@
 						local name = button:GetName() .. "Row" .. i
 						local parent = scrollChild
 						
-						_this_row = CreateFrame ("Button", name, parent, "DetailsFrameworkDropDownOptionTemplate")
+						--_this_row = CreateFrame ("Button", name, parent, "DetailsFrameworkDropDownOptionTemplate")
+						_this_row = DF:CreateDropdownButton (parent, name)
 						local anchor_i = i-1
 						_this_row:SetPoint ("topleft", parent, "topleft", 5, (-anchor_i*20)-5)
 						_this_row:SetPoint ("topright", parent, "topright", -5, (-anchor_i*20)-5)
@@ -600,6 +601,9 @@
 						object.menus [i] = _this_row
 					end
 					
+					_this_row:SetFrameStrata (_this_row:GetParent():GetFrameStrata())
+					_this_row:SetFrameLevel (_this_row:GetParent():GetFrameLevel()+10)
+					
 					_this_row.icon:SetTexture (_table.icon)
 					if (_table.icon) then
 					
@@ -697,8 +701,8 @@
 				scrollFrame:SetWidth (frame_witdh+20)
 				scrollChild:SetWidth (frame_witdh+20)
 				--height
-				scrollBorder:SetHeight (size+20)
-				scrollFrame:SetHeight (size)
+				scrollBorder:SetHeight (size+2)
+				scrollFrame:SetHeight (size+2)
 				scrollChild:SetHeight ((showing*20)+20)
 				--mouse over texture
 				mouseOverTexture:SetWidth (frame_witdh-7)
@@ -718,8 +722,8 @@
 				scrollFrame:SetWidth (frame_witdh)
 				scrollChild:SetWidth (frame_witdh)
 				--height
-				scrollBorder:SetHeight ((showing*20) + 25)
-				scrollFrame:SetHeight ((showing*20) + 25)
+				scrollBorder:SetHeight ((showing*20) + 10)
+				scrollFrame:SetHeight ((showing*20) + 10)
 				--mouse over texture
 				mouseOverTexture:SetWidth (frame_witdh-10)
 				--selected
@@ -933,7 +937,9 @@
 		--> misc
 		DropDownObject.container = container
 		
-	DropDownObject.dropdown = CreateFrame ("Button", name, parent, "DetailsFrameworkDropDownTemplate")
+	--DropDownObject.dropdown = CreateFrame ("Button", name, parent, "DetailsFrameworkDropDownTemplate")
+	DropDownObject.dropdown = DF:CreateNewDropdownFrame (parent, name)
+	
 	DropDownObject.widget = DropDownObject.dropdown
 	
 	DropDownObject.__it = {nil, nil}
@@ -1022,4 +1028,135 @@
 	
 	return DropDownObject
 
-end
\ No newline at end of file
+end
+
+local default_backdrop = {bgFile = [[Interface\DialogFrame\UI-DialogBox-Background]], edgeFile = [[Interface\DialogFrame\UI-DialogBox-Border]], 
+edgeSize = 1, tile = true, tileSize = 16, insets = {left = 1, right = 1, top = 0, bottom = 1}}
+local border_backdrop = {edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, insets = {left = 0, right = 0, top = 0, bottom = 0}}
+local child_backdrop = {bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], tileSize = 256, insets = {left = 0, right = 0, top = 0, bottom = 0}}
+
+function DF:CreateNewDropdownFrame (parent, name)
+	local f = CreateFrame ("button", name, parent)
+	f:SetBackdrop (default_backdrop)
+	f:SetSize (150, 20)
+	
+	local statusbar = f:CreateTexture ("$parent_StatusBarTexture", "BACKGROUND")
+	statusbar:SetPoint ("topleft", f, "topleft", 3, -3)
+	statusbar:SetPoint ("bottomright", f, "bottomright", -3, 3)
+	f.statusbar = statusbar
+	
+	local icon = f:CreateTexture ("$parent_IconTexture", "ARTWORK")
+	icon:SetPoint ("left", f, "left", 2, 0)
+	icon:SetSize (20, 20)
+	icon:SetTexture ([[Interface\COMMON\UI-ModelControlPanel]])
+	icon:SetTexCoord (0.625, 0.78125, 0.328125, 0.390625)
+	icon:SetVertexColor (1, 1, 1, 0.4)
+	f.icon = icon
+	
+	local text = f:CreateFontString ("$parent_Text", "ARTWORK", "GameFontHighlightSmall")
+	text:SetPoint ("left", icon, "right", 5, 0)
+	text:SetJustifyH ("left")
+	text:SetText ("no option selected")
+	text:SetTextColor (1, 1, 1, 0.4)
+	DF:SetFontSize (text, 10)
+	f.text = text
+	
+	local arrow = f:CreateTexture ("$parent_ArrowTexture2", "OVERLAY")
+	arrow:SetPoint ("right", f, "right", 5, -1)
+	arrow:SetBlendMode ("ADD")
+	arrow:SetTexture ([[Interface\Buttons\UI-ScrollBar-ScrollDownButton-Highlight]])
+	arrow:Hide()
+	arrow:SetSize (32, 28)
+	f.arrowTexture2 = arrow
+	
+	local buttonTexture = f:CreateTexture ("$parent_ArrowTexture", "OVERLAY")
+	buttonTexture:SetPoint ("right", f, "right", 5, -1)
+	buttonTexture:SetTexture ([[Interface\Buttons\UI-ScrollBar-ScrollDownButton-Up]])
+	buttonTexture:SetSize (32, 28)
+	f.arrowTexture = buttonTexture
+	
+	--scripts
+	f:SetScript ("OnSizeChanged", DetailsFrameworkDropDownOnSizeChanged)
+	f:SetScript ("OnMouseDown", DetailsFrameworkDropDownOnMouseDown)
+	
+	--on load
+	f:SetBackdropColor (1, 1, 1, .5)
+	f.arrowTexture:SetDrawLayer ("OVERLAY", 1)
+	f.arrowTexture2:SetDrawLayer ("OVERLAY", 2)
+	
+	--dropdown
+	local border = CreateFrame ("frame", "$Parent_Border", f)
+	border:Hide()
+	border:SetFrameStrata ("FULLSCREEN")
+	border:SetSize (150, 150)
+	border:SetPoint ("topleft", f, "bottomleft")
+	border:SetBackdrop (border_backdrop)
+	border:SetScript ("OnHide", DetailsFrameworkDropDownOptionsFrameOnHide)
+	border:SetBackdropColor (0, 0, 0, 0.92)
+	border:SetBackdropBorderColor (0, 0, 0, 1)
+	f.dropdownborder = border
+	
+	local scroll = CreateFrame ("ScrollFrame", "$Parent_ScrollFrame", f)
+	scroll:Hide()
+	scroll:SetFrameStrata ("FULLSCREEN")
+	scroll:SetSize (150, 150)
+	scroll:SetPoint ("topleft", f, "bottomleft", 0, 0)
+	f.dropdownframe = scroll
+	
+	local child = CreateFrame ("frame", "$Parent_ScrollChild", scroll)
+	child:SetSize (150, 150)
+	child:SetPoint ("topleft", scroll, "topleft", 0, 0)
+	child:SetBackdrop (child_backdrop)
+	child:SetBackdropColor (0, 0, 0, 1)
+	
+	local selected = child:CreateTexture ("$parent_SelectedTexture", "BACKGROUND")
+	selected:SetSize (150, 16)
+	selected:Hide()
+	selected:SetPoint ("left", child, "left", 2, 0)
+	selected:SetTexture ([[Interface\RAIDFRAME\Raid-Bar-Hp-Fill]])
+	child.selected = selected
+	
+	local mouseover = child:CreateTexture ("$parent_MouseOverTexture", "ARTWORK")
+	mouseover:SetBlendMode ("ADD")
+	mouseover:Hide()
+	mouseover:SetTexture ([[Interface\Buttons\UI-Listbox-Highlight]])
+	mouseover:SetSize (150, 15)
+	mouseover:SetPoint ("left", child, "left", 2, 0)
+	child.mouseover = mouseover
+	
+	scroll:SetScrollChild (child)
+	tinsert (UISpecialFrames, f.dropdownborder:GetName())
+	tinsert (UISpecialFrames, f.dropdownframe:GetName())
+	
+	return f
+end
+
+function DF:CreateDropdownButton (parent, name)
+
+	local f = CreateFrame ("button", name, parent)
+	f:SetSize (150, 20)
+
+	local statusbar = f:CreateTexture ("$parent_StatusBarTexture", "ARTWORK")
+	statusbar:SetPoint ("left", f, "left", 1, 0)
+	statusbar:SetPoint ("right", f, "right", -10, 0)
+	statusbar:SetSize (150, 20)
+	f.statusbar = statusbar
+	
+	local icon = f:CreateTexture ("$parent_IconTexture", "OVERLAY")
+	icon:SetPoint ("left", f, "left", 2, 0)
+	icon:SetSize (20, 20)
+	icon:SetTexture ([[Interface\ICONS\Spell_ChargePositive]])
+	f.icon = icon
+	
+	local text = f:CreateFontString ("$parent_Text", "OVERLAY", "GameFontHighlightSmall")
+	text:SetPoint ("left", icon, "right", 5, 0)
+	text:SetJustifyH ("left")
+	DF:SetFontSize (text, 10)
+	f.label = text
+	
+	f:SetScript ("OnMouseDown", DetailsFrameworkDropDownOptionClick)
+	f:SetScript ("OnEnter", DetailsFrameworkDropDownOptionOnEnter)
+	f:SetScript ("OnLeave", DetailsFrameworkDropDownOptionOnLeave)
+
+	return f
+end
--- a/Libs/DF/dropdown.xml	Tue Jul 19 13:23:40 2016 -0300
+++ b/Libs/DF/dropdown.xml	Wed Aug 31 19:55:14 2016 -0300
@@ -79,13 +79,10 @@
 					<Anchor point="TOPLEFT" relativeTo="$Parent" relativePoint="BOTTOMLEFT"/>
 				</Anchors>
 				
-				<Backdrop bgFile="Interface\FrameGeneral\UI-Background-Marble" edgeFile="Interface\Buttons\WHITE8X8" tile="true">
+				<Backdrop edgeFile="Interface\Buttons\WHITE8X8">
 					<EdgeSize>
 						<AbsValue val="1"/>
 					</EdgeSize>
-					<TileSize>
-						<AbsValue val="256"/>
-					</TileSize>
 					<BackgroundInsets>
 						<AbsInset left="0" right="0" top="0" bottom="0"/>
 					</BackgroundInsets>
@@ -104,7 +101,7 @@
 			</Frame>	
 			
 			<ScrollFrame name="$Parent_ScrollFrame" parentKey="dropdownframe" hidden="true" frameStrata="FULLSCREEN">
-				<Size x="150" y="150"/>
+				<Size x="150" y="170"/>
 				<Anchors>
 					<Anchor point="TOPLEFT" relativeTo="$Parent" relativePoint="BOTTOMLEFT" x="0" y="-10" />
 				</Anchors>
@@ -112,12 +109,21 @@
 				<ScrollChild>
 					<Frame name="$Parent_ScrollChild" frameStrata="FULLSCREEN" parentKey="scrollchild">
 					
-						<Size x="150" y="150"/>
+						<Size x="150" y="170"/>
 						
 						<Anchors>
 							<Anchor point="TOPLEFT" relativeTo="$Parent" relativePoint="TOPLEFT" x="0" y="0" />
 						</Anchors>
 						
+						<Backdrop bgFile="Interface\FrameGeneral\UI-Background-Marble" tile="true">
+							<TileSize>
+								<AbsValue val="256"/>
+							</TileSize>
+							<BackgroundInsets>
+								<AbsInset left="0" right="0" top="0" bottom="0"/>
+							</BackgroundInsets>
+						</Backdrop>
+						
 						<Layers>
 							<Layer level="BACKGROUND">
 								<!-- selected texture // we don't know where the file is it -->
@@ -222,6 +228,10 @@
 		</Layers>
 		
 		<Scripts>
+			<OnLoad>
+				self:SetFrameStrata (self:GetParent():GetFrameStrata())
+				self:SetFrameLevel (self:GetParent():GetFrameLevel()+10)
+			</OnLoad>
 			<OnMouseDown>
 				DetailsFrameworkDropDownOptionClick (self);
 			</OnMouseDown>
--- a/Libs/DF/fw.lua	Tue Jul 19 13:23:40 2016 -0300
+++ b/Libs/DF/fw.lua	Wed Aug 31 19:55:14 2016 -0300
@@ -1,5 +1,5 @@
 
-local dversion = 22
+local dversion = 44
 local major, minor = "DetailsFramework-1.0", dversion
 local DF, oldminor = LibStub:NewLibrary (major, minor)
 
@@ -110,6 +110,11 @@
 	"SetFrameworkDebugState",
 	"FindHighestParent",
 	"OpenInterfaceProfile",
+	"CreateInCombatTexture",
+	"CreateAnimationHub",
+	"CreateAnimation",
+	"CreateScrollBox",
+	"CreateBorder",
 }
 
 DF.table = {}
@@ -562,6 +567,10 @@
 				slider.widget_type = "range"
 				slider:SetHook ("OnValueChange", widget_table.set)
 				
+				if (widget_table.thumbscale) then
+					slider:SetThumbSize (slider.thumb:GetWidth()*widget_table.thumbscale, nil)
+				end
+				
 				local label = DF:NewLabel (parent, nil, "$parentLabel" .. index, nil, widget_table.name .. (use_two_points and ": " or ""), "GameFontNormal", widget_table.text_template or text_template or 12)
 				slider:SetPoint ("left", label, "right", 2)
 				label:SetPoint (cur_x, cur_y)
@@ -683,6 +692,34 @@
 			
 		end
 	end)
+	
+	function DF:CreateInCombatTexture (frame)
+		if (DF.debug and not frame) then
+			error ("Details! Framework: CreateInCombatTexture invalid frame on parameter 1.")
+		end
+	
+		local in_combat_background = DF:CreateImage (frame)
+		in_combat_background:SetColorTexture (.6, 0, 0, .1)
+		in_combat_background:Hide()
+
+		local in_combat_label = Plater:CreateLabel (frame, "you are in combat", 24, "silver")
+		in_combat_label:SetPoint ("right", in_combat_background, "right", -10, 0)
+		in_combat_label:Hide()
+
+		frame:RegisterEvent ("PLAYER_REGEN_DISABLED")
+		frame:RegisterEvent ("PLAYER_REGEN_ENABLED")
+		frame:SetScript ("OnEvent", function (self, event)
+			if (event == "PLAYER_REGEN_DISABLED") then
+				in_combat_background:Show()
+				in_combat_label:Show()
+			elseif (event == "PLAYER_REGEN_ENABLED") then
+				in_combat_background:Hide()
+				in_combat_label:Hide()
+			end
+		end)
+		
+		return in_combat_background
+	end
 
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 --> tutorials
@@ -1051,6 +1088,7 @@
 	image = "DF_ImageMetaFunctions",
 	slider = "DF_SliderMetaFunctions",
 	split_bar = "DF_SplitBarMetaFunctions",
+	aura_tracker = "DF_AuraTracker",
 }
 
 function DF:AddMemberForWidget (widgetName, memberType, memberName, func)
@@ -1126,3 +1164,251 @@
 
 	return object;
 end
+
+-----------------------------
+--> animations
+
+function DF:CreateAnimationHub (parent, onPlay, onFinished)
+	local newAnimation = parent:CreateAnimationGroup()
+	newAnimation:SetScript ("OnPlay", onPlay)
+	newAnimation:SetScript ("OnFinished", onFinished)
+	newAnimation.NextAnimation = 1
+	return newAnimation
+end
+
+function DF:CreateAnimation (animation, type, order, duration, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
+	local anim = animation:CreateAnimation (type)
+	
+	anim:SetOrder (order or animation.NextAnimation)
+	anim:SetDuration (duration)
+	
+	type = string.upper (type)
+	
+	if (type == "ALPHA") then
+		anim:SetFromAlpha (arg1)
+		anim:SetToAlpha (arg2)
+	
+	elseif (type == "SCALE") then
+		anim:SetFromScale (arg1, arg2)
+		anim:SetToScale (arg3, arg4)
+		anim:SetOrigin (arg5 or "center", arg6 or 0, arg7 or 0) --point, x, y
+	
+	elseif (type == "ROTATION") then
+		anim:SetDegrees (arg1) --degree
+		anim:SetOrigin (arg2 or "center", arg3 or 0, arg4 or 0) --point, x, y
+		
+	elseif (type == "TRANSLATION") then
+		anim:SetOffset (arg1, arg2)
+		
+	end
+	
+	animation.NextAnimation = animation.NextAnimation + 1	
+	return anim
+end
+
+
+-----------------------------
+--> borders
+
+local default_border_color1 = .5
+local default_border_color2 = .3
+local default_border_color3 = .1
+
+local SetBorderAlpha = function (self, alpha1, alpha2, alpha3)
+	self.Borders.Alpha1 = alpha1 or self.Borders.Alpha1
+	self.Borders.Alpha2 = alpha2 or self.Borders.Alpha2
+	self.Borders.Alpha3 = alpha3 or self.Borders.Alpha3
+	
+	for _, texture in ipairs (self.Borders.Layer1) do
+		texture:SetAlpha (self.Borders.Alpha1)
+	end
+	for _, texture in ipairs (self.Borders.Layer2) do
+		texture:SetAlpha (self.Borders.Alpha2)
+	end
+	for _, texture in ipairs (self.Borders.Layer3) do
+		texture:SetAlpha (self.Borders.Alpha3)
+	end
+end
+
+function DF:CreateBorder (parent, alpha1, alpha2, alpha3)
+	
+	parent.Borders = {
+		Layer1 = {},
+		Layer2 = {},
+		Layer3 = {},
+		Alpha1 = alpha1 or default_border_color1,
+		Alpha2 = alpha2 or default_border_color2,
+		Alpha3 = alpha3 or default_border_color3,
+	}
+	
+	parent.SetBorderAlpha = SetBorderAlpha
+	
+	local border1 = parent:CreateTexture (nil, "background")
+	border1:SetPoint ("topleft", parent, "topleft", -1, 1)
+	border1:SetPoint ("bottomleft", parent, "bottomleft", -1, -1)
+	border1:SetColorTexture (0, 0, 0, alpha1 or default_border_color1)
+	local border2 = parent:CreateTexture (nil, "background")
+	border2:SetPoint ("topleft", parent, "topleft", -2, 2)
+	border2:SetPoint ("bottomleft", parent, "bottomleft", -2, -2)
+	border2:SetColorTexture (0, 0, 0, alpha2 or default_border_color2)
+	local border3 = parent:CreateTexture (nil, "background")
+	border3:SetPoint ("topleft", parent, "topleft", -3, 3)
+	border3:SetPoint ("bottomleft", parent, "bottomleft", -3, -3)
+	border3:SetColorTexture (0, 0, 0, alpha3 or default_border_color3)
+	
+	tinsert (parent.Borders.Layer1, border1)
+	tinsert (parent.Borders.Layer2, border2)
+	tinsert (parent.Borders.Layer3, border3)
+	
+	local border1 = parent:CreateTexture (nil, "background")
+	border1:SetPoint ("topleft", parent, "topleft", 0, 1)
+	border1:SetPoint ("topright", parent, "topright", 1, 1)
+	border1:SetColorTexture (0, 0, 0, alpha1 or default_border_color1)
+	local border2 = parent:CreateTexture (nil, "background")
+	border2:SetPoint ("topleft", parent, "topleft", -1, 2)
+	border2:SetPoint ("topright", parent, "topright", 2, 2)
+	border2:SetColorTexture (0, 0, 0, alpha2 or default_border_color2)
+	local border3 = parent:CreateTexture (nil, "background")
+	border3:SetPoint ("topleft", parent, "topleft", -2, 3)
+	border3:SetPoint ("topright", parent, "topright", 3, 3)
+	border3:SetColorTexture (0, 0, 0, alpha3 or default_border_color3)
+	
+	tinsert (parent.Borders.Layer1, border1)
+	tinsert (parent.Borders.Layer2, border2)
+	tinsert (parent.Borders.Layer3, border3)	
+	
+	local border1 = parent:CreateTexture (nil, "background")
+	border1:SetPoint ("topright", parent, "topright", 1, 0)
+	border1:SetPoint ("bottomright", parent, "bottomright", 1, -1)
+	border1:SetColorTexture (0, 0, 0, alpha1 or default_border_color1)
+	local border2 = parent:CreateTexture (nil, "background")
+	border2:SetPoint ("topright", parent, "topright", 2, 1)
+	border2:SetPoint ("bottomright", parent, "bottomright", 2, -2)
+	border2:SetColorTexture (0, 0, 0, alpha2 or default_border_color2)
+	local border3 = parent:CreateTexture (nil, "background")
+	border3:SetPoint ("topright", parent, "topright", 3, 2)
+	border3:SetPoint ("bottomright", parent, "bottomright", 3, -3)
+	border3:SetColorTexture (0, 0, 0, alpha3 or default_border_color3)
+	
+	tinsert (parent.Borders.Layer1, border1)
+	tinsert (parent.Borders.Layer2, border2)
+	tinsert (parent.Borders.Layer3, border3)	
+	
+	local border1 = parent:CreateTexture (nil, "background")
+	border1:SetPoint ("bottomleft", parent, "bottomleft", 0, -1)
+	border1:SetPoint ("bottomright", parent, "bottomright", 0, -1)
+	border1:SetColorTexture (0, 0, 0, alpha1 or default_border_color1)
+	local border2 = parent:CreateTexture (nil, "background")
+	border2:SetPoint ("bottomleft", parent, "bottomleft", -1, -2)
+	border2:SetPoint ("bottomright", parent, "bottomright", 1, -2)
+	border2:SetColorTexture (0, 0, 0, alpha2 or default_border_color2)
+	local border3 = parent:CreateTexture (nil, "background")
+	border3:SetPoint ("bottomleft", parent, "bottomleft", -2, -3)
+	border3:SetPoint ("bottomright", parent, "bottomright", 2, -3)
+	border3:SetColorTexture (0, 0, 0, alpha3 or default_border_color3)
+	
+	tinsert (parent.Borders.Layer1, border1)
+	tinsert (parent.Borders.Layer2, border2)
+	tinsert (parent.Borders.Layer3, border3)
+	
+end
+
+function DF:ReskinSlider (slider, heightOffset)
+	if (slider.slider) then
+		slider.cima:SetNormalTexture ([[Interface\Buttons\Arrow-Up-Up]])
+		slider.cima:SetPushedTexture ([[Interface\Buttons\Arrow-Up-Down]])
+		slider.cima:SetDisabledTexture ([[Interface\Buttons\Arrow-Up-Disabled]])
+		slider.cima:GetNormalTexture():ClearAllPoints()
+		slider.cima:GetPushedTexture():ClearAllPoints()
+		slider.cima:GetDisabledTexture():ClearAllPoints()
+		slider.cima:GetNormalTexture():SetPoint ("center", slider.cima, "center", 1, 1)
+		slider.cima:GetPushedTexture():SetPoint ("center", slider.cima, "center", 1, 1)
+		slider.cima:GetDisabledTexture():SetPoint ("center", slider.cima, "center", 1, 1)
+		slider.cima:SetSize (16, 16)
+		slider.cima:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]})
+		slider.cima:SetBackdropColor (0, 0, 0, 0.3)
+		slider.cima:SetBackdropBorderColor (0, 0, 0, 1)
+		
+		slider.baixo:SetNormalTexture ([[Interface\Buttons\Arrow-Down-Up]])
+		slider.baixo:SetPushedTexture ([[Interface\Buttons\Arrow-Down-Down]])
+		slider.baixo:SetDisabledTexture ([[Interface\Buttons\Arrow-Down-Disabled]])
+		slider.baixo:GetNormalTexture():ClearAllPoints()
+		slider.baixo:GetPushedTexture():ClearAllPoints()
+		slider.baixo:GetDisabledTexture():ClearAllPoints()
+		slider.baixo:GetNormalTexture():SetPoint ("center", slider.baixo, "center", 1, -5)
+		slider.baixo:GetPushedTexture():SetPoint ("center", slider.baixo, "center", 1, -5)
+		slider.baixo:GetDisabledTexture():SetPoint ("center", slider.baixo, "center", 1, -5)
+		slider.baixo:SetSize (16, 16)
+		slider.baixo:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]})
+		slider.baixo:SetBackdropColor (0, 0, 0, 0.35)
+		slider.baixo:SetBackdropBorderColor (0, 0, 0, 1)
+		
+		slider.slider:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = [[Interface\AddOns\Details\images\background]]})
+		slider.slider:SetBackdropColor (0, 0, 0, 0.35)
+		slider.slider:SetBackdropBorderColor (0, 0, 0, 1)
+		
+		--slider.slider:Altura (164)
+		slider.slider:cimaPoint (0, 13)
+		slider.slider:baixoPoint (0, -13)
+		slider.slider.thumb:SetTexture ([[Interface\AddOns\Details\images\icons2]])
+		slider.slider.thumb:SetTexCoord (482/512, 492/512, 104/512, 120/512)
+		slider.slider.thumb:SetSize (12, 12)
+		slider.slider.thumb:SetVertexColor (0.6, 0.6, 0.6, 0.95)
+	else
+
+		slider.ScrollBar.ScrollUpButton:SetNormalTexture ([[Interface\Buttons\Arrow-Up-Up]])
+		slider.ScrollBar.ScrollUpButton:GetNormalTexture():SetTexCoord (0, 1, 0, 1)
+		slider.ScrollBar.ScrollUpButton:SetPushedTexture ([[Interface\Buttons\Arrow-Up-Down]])
+		slider.ScrollBar.ScrollUpButton:GetPushedTexture():SetTexCoord (0, 1, 0, 1)
+		slider.ScrollBar.ScrollUpButton:SetDisabledTexture ([[Interface\Buttons\Arrow-Up-Disabled]])
+		slider.ScrollBar.ScrollUpButton:GetDisabledTexture():SetTexCoord (0, 1, 0, 1)
+
+		slider.ScrollBar.ScrollUpButton:SetSize (16, 16)
+		slider.ScrollBar.ScrollUpButton:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = "Interface\\Tooltips\\UI-Tooltip-Background"})
+		slider.ScrollBar.ScrollUpButton:SetBackdropColor (0, 0, 0, 0.3)
+		slider.ScrollBar.ScrollUpButton:SetBackdropBorderColor (0, 0, 0, 1)
+
+		slider.ScrollBar.ScrollUpButton:GetNormalTexture():ClearAllPoints()
+		slider.ScrollBar.ScrollUpButton:GetPushedTexture():ClearAllPoints()
+		slider.ScrollBar.ScrollUpButton:GetDisabledTexture():ClearAllPoints()
+		slider.ScrollBar.ScrollUpButton:GetNormalTexture():SetPoint ("center", slider.ScrollBar.ScrollUpButton, "center", 1, 1)
+		slider.ScrollBar.ScrollUpButton:GetPushedTexture():SetPoint ("center", slider.ScrollBar.ScrollUpButton, "center", 1, 1)
+		slider.ScrollBar.ScrollUpButton:GetDisabledTexture():SetPoint ("center", slider.ScrollBar.ScrollUpButton, "center", 1, 1)
+	
+		--
+		
+		slider.ScrollBar.ScrollDownButton:SetNormalTexture ([[Interface\Buttons\Arrow-Down-Up]])
+		slider.ScrollBar.ScrollDownButton:GetNormalTexture():SetTexCoord (0, 1, 0, 1)
+		slider.ScrollBar.ScrollDownButton:SetPushedTexture ([[Interface\Buttons\Arrow-Down-Down]])
+		slider.ScrollBar.ScrollDownButton:GetPushedTexture():SetTexCoord (0, 1, 0, 1)
+		slider.ScrollBar.ScrollDownButton:SetDisabledTexture ([[Interface\Buttons\Arrow-Down-Disabled]])
+		slider.ScrollBar.ScrollDownButton:GetDisabledTexture():SetTexCoord (0, 1, 0, 1)
+		
+		slider.ScrollBar.ScrollDownButton:SetSize (16, 16)
+		slider.ScrollBar.ScrollDownButton:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = "Interface\\Tooltips\\UI-Tooltip-Background"})
+		slider.ScrollBar.ScrollDownButton:SetBackdropColor (0, 0, 0, 0.3)
+		slider.ScrollBar.ScrollDownButton:SetBackdropBorderColor (0, 0, 0, 1)
+	
+		slider.ScrollBar.ScrollDownButton:GetNormalTexture():ClearAllPoints()
+		slider.ScrollBar.ScrollDownButton:GetPushedTexture():ClearAllPoints()
+		slider.ScrollBar.ScrollDownButton:GetDisabledTexture():ClearAllPoints()
+		slider.ScrollBar.ScrollDownButton:GetNormalTexture():SetPoint ("center", slider.ScrollBar.ScrollDownButton, "center", 1, -5)
+		slider.ScrollBar.ScrollDownButton:GetPushedTexture():SetPoint ("center", slider.ScrollBar.ScrollDownButton, "center", 1, -5)
+		slider.ScrollBar.ScrollDownButton:GetDisabledTexture():SetPoint ("center", slider.ScrollBar.ScrollDownButton, "center", 1, -5)
+	
+		--
+		slider.ScrollBar:SetPoint ("TOPLEFT", slider, "TOPRIGHT", 6, -16)
+		slider.ScrollBar:SetPoint ("BOTTOMLEFT", slider, "BOTTOMRIGHT", 6, 16 + (heightOffset and heightOffset*-1 or 0))
+		
+		slider.ScrollBar.ThumbTexture:SetColorTexture (.5, .5, .5, .3)
+		slider.ScrollBar.ThumbTexture:SetSize (12, 8)
+		
+		--
+		
+		slider.ScrollBar:SetBackdrop ({edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1, bgFile = "Interface\\Tooltips\\UI-Tooltip-Background"})
+		slider.ScrollBar:SetBackdropColor (0, 0, 0, 0.35)
+		slider.ScrollBar:SetBackdropBorderColor (0, 0, 0, 1)
+	end
+end
+
+--doo elsee 
\ No newline at end of file
--- a/Libs/DF/load.xml	Tue Jul 19 13:23:40 2016 -0300
+++ b/Libs/DF/load.xml	Wed Aug 31 19:55:14 2016 -0300
@@ -20,4 +20,5 @@
 	<Include file="panel.xml"/>
 
 	<Script file="pictureedit.lua"/>
+	<Script file="auras.lua"/>
 </Ui>
\ No newline at end of file
--- a/Libs/DF/normal_bar.lua	Tue Jul 19 13:23:40 2016 -0300
+++ b/Libs/DF/normal_bar.lua	Wed Aug 31 19:55:14 2016 -0300
@@ -509,12 +509,12 @@
 --> timer
 	
 	function BarMetaFunctions:OnTimerEnd()
-		if (self.OnTimerEndHook) then
-			local interrupt = self.OnTimerEndHook (self)
-			if (interrupt) then
-				return
-			end
+		local capsule = self
+		local kill = capsule:RunHooksForWidget ("OnTimerEnd", self.widget, capsule)
+		if (kill) then
+			return
 		end
+		
 		self.timer_texture:Hide()
 		self.timer_textureR:Hide()
 		self.div_timer:Hide()
@@ -720,6 +720,7 @@
 			OnShow = {},
 			OnMouseDown = {},
 			OnMouseUp = {},
+			OnTimerEnd = {},
 		}
 	
 		BarObject.statusbar:SetScript ("OnEnter", OnEnter)
--- a/Libs/DF/panel.lua	Tue Jul 19 13:23:40 2016 -0300
+++ b/Libs/DF/panel.lua	Wed Aug 31 19:55:14 2016 -0300
@@ -1496,7 +1496,7 @@
 
 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:SetPoint ("right", frame.Close, "left", -26, 0)
 	scaleBar:SetFrameLevel (DF.FRAMELEVEL_OVERLAY)
 	scaleBar.OnValueChanged = function (_, _, value)
 		config.scale = value
@@ -2523,7 +2523,7 @@
 
 	local pixel = self.Graphic:GetWidth() / self.TimeScale
 	local index = 1
-	local r, g, b = unpack (color)
+	local r, g, b = unpack (color or line_default_color)
 	
 	for i = 1, #overlayData, 2 do
 		local aura_start = overlayData [i]
@@ -3009,7 +3009,7 @@
 	
 	local timeline = f:CreateFontString (nil, "overlay", "GameFontNormal")
 	timeline:SetPoint ("bottomright", f, "bottomright", -2, 0)
-	_detalhes:SetFontSize (timeline, 8)
+	DF:SetFontSize (timeline, 8)
 	f.timeline = timeline
 	
 	return f
@@ -3050,8 +3050,11 @@
 		end
 	end
 	
+	self.MaxValue = max_value
+	
 	local o = 1
 	local lastvalue = self:GetHeight()/2
+	max_value = math.max (max_value, 0.0000001)
 	
 	for i = 1, min (amtlines, self._maxlines) do
 		
@@ -3096,6 +3099,8 @@
 	f.Reset = gframe_reset
 	f.UpdateLines = gframe_update
 	
+	f.MaxValue = 0
+	
 	f._lines = {}
 	
 	f._onenter_line = onenter
@@ -3330,10 +3335,263 @@
 
 
 
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+-- ~listbox
 
+local simple_list_box_ResetWidgets = function (self)
+	for _, widget in ipairs (self.widgets) do 
+		widget:Hide()
+	end
+	self.nextWidget = 1
+end
 
+local simple_list_box_onenter = function (self, capsule)
+	self:GetParent().options.onenter (self, capsule, capsule.value)
+end
 
+local simple_list_box_onleave = function (self, capsule)
+	self:GetParent().options.onleave (self, capsule, capsule.value)
+	GameTooltip:Hide()
+end
 
+local simple_list_box_GetOrCreateWidget = function (self)
+	local index = self.nextWidget
+	local widget = self.widgets [index]
+	if (not widget) then
+		widget = DF:CreateButton (self, function()end, self.options.width, self.options.row_height, "", nil, nil, nil, nil, nil, nil, DF:GetTemplate ("button", "OPTIONS_BUTTON_TEMPLATE"))
+		widget:SetHook ("OnEnter", simple_list_box_onenter)
+		widget:SetHook ("OnLeave", simple_list_box_onleave)
+		widget.textcolor = self.options.textcolor
+		tinsert (self.widgets, widget)
+	end
+	self.nextWidget = self.nextWidget + 1
+	return widget
+end
 
+local simple_list_box_RefreshWidgets = function (self)
+	self:ResetWidgets()
+	local amt = 0
+	for value, _ in pairs (self.list_table) do
+		local widget = self:GetOrCreateWidget()
+		widget:SetPoint ("topleft", self, "topleft", 1, -self.options.row_height * (self.nextWidget-2) - 4)
+		widget:SetPoint ("topright", self, "topright", -1, -self.options.row_height * (self.nextWidget-2) - 4)
+		widget:SetClickFunction (self.func, value)
+		widget.value = value
+		
+		if (self.options.icon) then
+			if (type (self.options.icon) == "string" or type (self.options.icon) == "number") then
+				widget:SetIcon (self.options.icon, self.options.row_height, self.options.row_height)
+			elseif (type (self.options.icon) == "function") then
+				local icon = self.options.icon (value)
+				if (icon) then
+					widget:SetIcon (icon, self.options.row_height, self.options.row_height)
+				end
+			end
+		else
+			widget:SetIcon ("", self.options.row_height, self.options.row_height)
+		end
+		
+		if (self.options.text) then
+			if (type (self.options.text) == "function") then
+				local text = self.options.text (value)
+				if (text) then
+					widget:SetText (text)
+				else
+					widget:SetText ("")
+				end
+			else
+				widget:SetText (self.options.text or "")
+			end
+		else
+			widget:SetText ("")
+		end
+		
+		widget.value = value
+		widget:Show()
+		amt = amt + 1
+	end
+	if (amt == 0) then
+		self.EmptyLabel:Show()
+	else
+		self.EmptyLabel:Hide()
+	end
+end
 
+local backdrop = {bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", tile = true, tileSize = 16, edgeFile = [[Interface\Buttons\WHITE8X8]], edgeSize = 1}
+local default_options = {
+	height = 400, 
+	row_height = 16,
+	width = 230, 
+	icon = false, 
+	text = "",
+	textcolor = "wheat",
+	onenter = function (self, capsule)
+		if (capsule) then
+			capsule.textcolor = "white"
+		end
+	end,
+	onleave = function (self, capsule)
+		if (capsule) then
+			capsule.textcolor = self:GetParent().options.textcolor
+		end
+		GameTooltip:Hide()
+	end,
+}
 
+local simple_list_box_SetData = function (self, t)
+	self.list_table = t
+end
+
+function DF:CreateSimpleListBox (parent, name, title, empty_text, list_table, onclick, options)
+	local f = CreateFrame ("frame", name, parent)
+	
+	f.ResetWidgets = simple_list_box_ResetWidgets
+	f.GetOrCreateWidget = simple_list_box_GetOrCreateWidget
+	f.Refresh = simple_list_box_RefreshWidgets
+	f.SetData = simple_list_box_SetData
+	f.nextWidget = 1
+	f.list_table = list_table
+	f.func = function (self, button, value)
+		onclick (value)
+		f:Refresh()
+	end
+	f.widgets = {}
+	f:SetBackdrop (backdrop)
+	f:SetBackdropColor (0, 0, 0, 0.3)
+	f:SetBackdropBorderColor (0, 0, 0, 0.5)
+	f.options = options or {}
+	self.table.deploy (f.options, default_options)
+	
+	f:SetSize (f.options.width + 2, f.options.height)
+	
+	local name = DF:CreateLabel (f, title, 12, "silver")
+	name:SetTemplate (DF:GetTemplate ("font", "OPTIONS_FONT_TEMPLATE"))
+	name:SetPoint ("bottomleft", f, "topleft", 0, 2)
+	f.Title = name
+	
+	local emptyLabel = DF:CreateLabel (f, empty_text, 12, "gray")
+	emptyLabel:SetAlpha (.6)
+	emptyLabel:SetSize (f.options.width-10, f.options.height)
+	emptyLabel:SetPoint ("center", 0, 0)
+	emptyLabel:Hide()
+	emptyLabel.align = "center"
+	f.EmptyLabel = emptyLabel
+	
+	return f
+end
+
+
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+-- ~scrollbox
+
+
+-- preciso de uma fauxscroll que seja facil de lidar
+-- ele cria scroll aqui, preciso falar a função que cria a linha e a função que atualiza
+-- precisa passsar o tamanho em height width quantas barras vai mostrar
+-- search box incluso opcionalmente
+
+
+DF.SortFunctions = {}
+
+local SortMember = ""
+local SortByMember = function (t1, t2)
+	return t1[SortMember] > t2[SortMember]
+end
+local SortByMemberReverse = function (t1, t2)
+	return t1[SortMember] < t2[SortMember]
+end
+
+DF.SortFunctions.Sort = function (self, t, by, is_reverse)
+	SortMember = by
+	if (not is_reverse) then
+		table.sort (t, SortByMember)
+	else
+		table.sort (t, SortByMemberReverse)
+	end
+end
+
+
+DF.ScrollBoxFunctions = {}
+
+DF.ScrollBoxFunctions.Refresh = function (self)
+	for _, frame in ipairs (self.Frames) do 
+		frame:Hide()
+		frame._InUse = nil
+	end
+	
+	local offset = 0
+	if (self.IsFauxScroll) then
+		FauxScrollFrame_Update (self, #self.data, self.LineAmount, self.LineHeight+1)
+		offset = FauxScrollFrame_GetOffset (self)
+	end	
+	
+	local okay, totalLines = pcall (self.refresh_func, self, self.data, offset, #self.Frames)
+	if (not okay) then
+		error ("Details! FrameWork: Refresh(): " .. totalLines)
+	end
+
+	for _, frame in ipairs (self.Frames) do 
+		if (not frame._InUse) then
+			frame:Hide()
+		else
+			frame:Show()
+		end
+	end
+	
+	self:Show()
+	
+	return self.Frames
+end
+
+DF.ScrollBoxFunctions.OnVerticalScroll = function (self, offset)
+	FauxScrollFrame_OnVerticalScroll (self, offset, self.LineHeight, self.Refresh)
+	return true
+end
+
+DF.ScrollBoxFunctions.CreateLine = function (self, func)
+	local okay, newLine = pcall (func, self, #self.Frames+1)
+	if (okay) then
+		tinsert (self.Frames, newLine)
+		return newLine
+	else
+		error ("Details! FrameWork: CreateLine(): " .. newLine)
+	end
+end
+
+DF.ScrollBoxFunctions.GetLine = function (self, line_index)
+	local line = self.Frames [line_index]
+	if (line) then
+		line._InUse = true
+	end
+	return line
+end
+
+DF.ScrollBoxFunctions.SetData = function (self, data)
+	self.data = data
+end
+DF.ScrollBoxFunctions.GetData = function (self)
+	return self.data
+end
+
+function DF:CreateScrollBox (parent, name, refresh_func, data, width, height, line_amount, line_height)
+	local scroll = CreateFrame ("scrollframe", name, parent, "FauxScrollFrameTemplate")
+	
+	scroll:SetSize (width, height)
+	scroll.LineAmount = line_amount
+	scroll.LineHeight = line_height
+	scroll.IsFauxScroll = true
+	scroll.Frames = {}
+	
+	DF:Mixin (scroll, DF.SortFunctions)
+	DF:Mixin (scroll, DF.ScrollBoxFunctions)
+	
+	scroll.refresh_func = refresh_func
+	scroll.data = data
+	
+	scroll:SetScript ("OnVerticalScroll", scroll.OnVerticalScroll)
+	
+	return scroll
+end
+
+
+
--- a/Libs/DF/textentry.lua	Tue Jul 19 13:23:40 2016 -0300
+++ b/Libs/DF/textentry.lua	Wed Aug 31 19:55:14 2016 -0300
@@ -655,7 +655,7 @@
 			OnTextChanged = {},
 			OnTabPressed = {},
 		}
-	
+		
 		TextEntryObject.editbox:SetScript ("OnEnter", OnEnter)
 		TextEntryObject.editbox:SetScript ("OnLeave", OnLeave)
 		TextEntryObject.editbox:SetScript ("OnHide", OnHide)