function GlueScrollFrameTemplate_OnMouseWheel(self, value, scrollBar) scrollBar = scrollBar or _G[self:GetName() .. "ScrollBar"]; if ( value > 0 ) then scrollBar:SetValue(scrollBar:GetValue() - (scrollBar:GetHeight() / 2)); else scrollBar:SetValue(scrollBar:GetValue() + (scrollBar:GetHeight() / 2)); end end -- Function to handle the update of manually calculated scrollframes. Used mostly for listings with an indeterminate number of items function GlueScrollFrame_Update(frame, numItems, numToDisplay, valueStep, highlightFrame, smallHighlightWidth, bigHighlightWidth ) -- If more than one screen full of skills then show the scrollbar local frameName = frame:GetName(); local scrollBar = _G[ frameName.."ScrollBar" ]; if ( numItems > numToDisplay ) then frame:Show(); else scrollBar:SetValue(0); frame:Hide(); end if ( frame:IsShown() ) then local scrollChildFrame = _G[ frameName.."ScrollChildFrame" ]; local scrollUpButton = _G[ frameName.."ScrollBarScrollUpButton" ]; local scrollDownButton = _G[ frameName.."ScrollBarScrollDownButton" ]; local scrollFrameHeight = 0; local scrollChildHeight = 0; if ( numItems > 0 ) then scrollFrameHeight = (numItems - numToDisplay) * valueStep; scrollChildHeight = numItems * valueStep; if ( scrollFrameHeight < 0 ) then scrollFrameHeight = 0; end scrollChildFrame:Show(); else scrollChildFrame:Hide(); end scrollBar:SetMinMaxValues(0, scrollFrameHeight); scrollBar:SetValueStep(valueStep); scrollChildFrame:SetHeight(scrollChildHeight); -- Arrow button handling if ( scrollBar:GetValue() == 0 ) then scrollUpButton:Disable(); else scrollUpButton:Enable(); end if ((scrollBar:GetValue() - scrollFrameHeight) == 0) then scrollDownButton:Disable(); else scrollDownButton:Enable(); end -- Shrink because scrollbar is shown if ( highlightFrame ) then highlightFrame:SetWidth(smallHighlightWidth); end else -- Widen because scrollbar is hidden if ( highlightFrame ) then highlightFrame:SetWidth(bigHighlightWidth); end end end function GlueScrollFrame_OnScrollRangeChanged(self, yrange) local scrollbar = _G[self:GetName().."ScrollBar"]; if ( not yrange ) then yrange = self:GetVerticalScrollRange(); end local value = scrollbar:GetValue(); if ( value > yrange ) then value = yrange; end scrollbar:SetMinMaxValues(0, yrange); scrollbar:SetValue(value); if ( floor(yrange) == 0 ) then if (self.scrollBarHideable) then _G[self:GetName().."ScrollBar"]:Hide(); _G[scrollbar:GetName().."ScrollDownButton"]:Hide(); _G[scrollbar:GetName().."ScrollUpButton"]:Hide(); else _G[scrollbar:GetName().."ScrollDownButton"]:Disable(); _G[scrollbar:GetName().."ScrollUpButton"]:Disable(); _G[scrollbar:GetName().."ScrollDownButton"]:Show(); _G[scrollbar:GetName().."ScrollUpButton"]:Show(); end else _G[scrollbar:GetName().."ScrollDownButton"]:Show(); _G[scrollbar:GetName().."ScrollUpButton"]:Show(); _G[self:GetName().."ScrollBar"]:Show(); _G[scrollbar:GetName().."ScrollDownButton"]:Enable(); end end function GlueScrollFrame_OnVerticalScroll(self, value) local scrollbar = _G[self:GetName().."ScrollBar"]; scrollbar:SetValue(value); local min; local max; min, max = scrollbar:GetMinMaxValues(); if ( value == 0 ) then _G[scrollbar:GetName().."ScrollUpButton"]:Disable(); else _G[scrollbar:GetName().."ScrollUpButton"]:Enable(); end if ((scrollbar:GetValue() - max) == 0) then _G[scrollbar:GetName().."ScrollDownButton"]:Disable(); else _G[scrollbar:GetName().."ScrollDownButton"]:Enable(); end end function GlueScrollFrame_OnLoad(self) _G[self:GetName().."ScrollBarScrollDownButton"]:Disable(); _G[self:GetName().."ScrollBarScrollUpButton"]:Disable(); local scrollbar = _G[self:GetName().."ScrollBar"]; scrollbar:SetMinMaxValues(0, 0); scrollbar:SetValue(0); self.offset = 0; end -- Function to handle the update of manually calculated scrollframes. Used mostly for listings with an indeterminate number of items function FauxScrollFrame_Update(frame, numItems, numToDisplay, valueStep, button, smallWidth, bigWidth, highlightFrame, smallHighlightWidth, bigHighlightWidth, alwaysShowScrollBar ) -- If more than one screen full of skills then show the scrollbar local frameName = frame:GetName(); local scrollBar = _G[ frameName.."ScrollBar" ]; local showScrollBar; if ( numItems > numToDisplay or alwaysShowScrollBar ) then frame:Show(); showScrollBar = 1; else scrollBar:SetValue(0); frame:Hide(); end if ( frame:IsShown() ) then local scrollChildFrame = _G[ frameName.."ScrollChildFrame" ]; local scrollUpButton = _G[ frameName.."ScrollBarScrollUpButton" ]; local scrollDownButton = _G[ frameName.."ScrollBarScrollDownButton" ]; local scrollFrameHeight = 0; local scrollChildHeight = 0; if ( numItems > 0 ) then scrollFrameHeight = (numItems - numToDisplay) * valueStep; scrollChildHeight = numItems * valueStep; if ( scrollFrameHeight < 0 ) then scrollFrameHeight = 0; end scrollChildFrame:Show(); else scrollChildFrame:Hide(); end scrollBar:SetMinMaxValues(0, scrollFrameHeight); scrollBar:SetValueStep(valueStep); scrollChildFrame:SetHeight(scrollChildHeight); -- Arrow button handling if ( scrollBar:GetValue() == 0 ) then scrollUpButton:Disable(); else scrollUpButton:Enable(); end if ((scrollBar:GetValue() - scrollFrameHeight) == 0) then scrollDownButton:Disable(); else scrollDownButton:Enable(); end -- Shrink because scrollbar is shown if ( highlightFrame ) then highlightFrame:SetWidth(smallHighlightWidth); end if ( button ) then for i=1, numToDisplay do _G[button..i]:SetWidth(smallWidth); end end else -- Widen because scrollbar is hidden if ( highlightFrame ) then highlightFrame:SetWidth(bigHighlightWidth); end if ( button ) then for i=1, numToDisplay do _G[button..i]:SetWidth(bigWidth); end end end return showScrollBar; end function FauxScrollFrame_OnVerticalScroll(self, value, itemHeight, updateFunction) local scrollbar = _G[self:GetName().."ScrollBar"]; scrollbar:SetValue(value); self.offset = floor((value / itemHeight) + 0.5); updateFunction(self); end function FauxScrollFrame_GetOffset(frame) return frame.offset; end function FauxScrollFrame_SetOffset(frame, offset) frame.offset = offset; end --Tab stuffs function GlueTemplates_TabResize(padding, tab, absoluteSize) local tabName; if ( tab ) then tabName = tab:GetName(); end local buttonMiddle = _G[tabName.."Middle"]; local buttonMiddleDisabled = _G[tabName.."MiddleDisabled"]; local sideWidths = 2 * _G[tabName.."Left"]:GetWidth(); local tabText = _G[tab:GetName().."Text"]; local width, tabWidth; -- If there's an absolute size specified then use it if ( absoluteSize ) then if ( absoluteSize < sideWidths) then width = 1; tabWidth = sideWidths else width = absoluteSize - sideWidths; tabWidth = absoluteSize end tabText:SetWidth(width); else -- Otherwise try to use padding if ( padding ) then width = tabText:GetStringWidth() + padding; else width = tabText:GetStringWidth() + 24; end tabWidth = width + sideWidths; tabText:SetWidth(0); end if ( buttonMiddle ) then buttonMiddle:SetWidth(width); end if ( buttonMiddleDisabled ) then buttonMiddleDisabled:SetWidth(width); end tab:SetWidth(tabWidth); local highlightTexture = _G[tabName.."HighlightTexture"]; if ( highlightTexture ) then highlightTexture:SetWidth(tabWidth); end end function GlueTemplates_SetTab(frame, id) frame.selectedTab = id; GlueTemplates_UpdateTabs(frame); end function GlueTemplates_GetSelectedTab(frame) return frame.selectedTab; end function GlueTemplates_UpdateTabs(frame) if ( frame.selectedTab ) then local tab; for i=1, frame.numTabs, 1 do tab = _G[frame:GetName().."Tab"..i]; if ( tab.isDisabled ) then GlueTemplates_SetDisabledTabState(tab); elseif ( i == frame.selectedTab ) then GlueTemplates_SelectTab(tab); else GlueTemplates_DeselectTab(tab); end end end end function GlueTemplates_SetNumTabs(frame, numTabs) frame.numTabs = numTabs; end function GlueTemplates_DisableTab(frame, index) _G[frame:GetName().."Tab"..index].isDisabled = 1; GlueTemplates_UpdateTabs(frame); end function GlueTemplates_EnableTab(frame, index) local tab = _G[frame:GetName().."Tab"..index]; tab.isDisabled = nil; -- Reset text color tab:SetDisabledTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b); GlueTemplates_UpdateTabs(frame); end function GlueTemplates_DeselectTab(tab) local name = tab:GetName(); _G[name.."Left"]:Show(); _G[name.."Middle"]:Show(); _G[name.."Right"]:Show(); --tab:UnlockHighlight(); tab:Enable(); _G[name.."LeftDisabled"]:Hide(); _G[name.."MiddleDisabled"]:Hide(); _G[name.."RightDisabled"]:Hide(); end function GlueTemplates_SelectTab(tab) local name = tab:GetName(); _G[name.."Left"]:Hide(); _G[name.."Middle"]:Hide(); _G[name.."Right"]:Hide(); --tab:LockHighlight(); tab:Disable(); _G[name.."LeftDisabled"]:Show(); _G[name.."MiddleDisabled"]:Show(); _G[name.."RightDisabled"]:Show(); end function GlueTemplates_SetDisabledTabState(tab) local name = tab:GetName(); _G[name.."Left"]:Show(); _G[name.."Middle"]:Show(); _G[name.."Right"]:Show(); --tab:UnlockHighlight(); tab:Disable(); tab.text = tab:GetText(); -- Gray out text tab:SetDisabledTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b); _G[name.."LeftDisabled"]:Hide(); _G[name.."MiddleDisabled"]:Hide(); _G[name.."RightDisabled"]:Hide(); end function EditBox_HandleTabbing(self, tabList) local editboxName = self:GetName(); local index; for i=1, #tabList do if ( editboxName == tabList[i] ) then index = i; break; end end if ( IsShiftKeyDown() ) then index = index - 1; else index = index + 1; end if ( index == 0 ) then index = #tabList; elseif ( index > #tabList ) then index = 1; end local target = tabList[index]; _G[target]:SetFocus(); end