Skip to content

Instantly share code, notes, and snippets.

@Meorawr
Last active October 7, 2021 10:40
Show Gist options
  • Save Meorawr/83e9264d03db9f031253ce3aeb585f97 to your computer and use it in GitHub Desktop.
Save Meorawr/83e9264d03db9f031253ce3aeb585f97 to your computer and use it in GitHub Desktop.
ScrollBox Element Callback Example
local ScrollableListButtonMixin = CreateFromMixins(CallbackRegistryMixin);
ScrollableListButtonMixin:GenerateCallbackEvents(
{
"OnClickThreeTimes",
}
);
function ScrollableListButtonMixin:OnLoad()
CallbackRegistryMixin.OnLoad(self);
self:SetScript("OnClick", self.OnClick);
end
function ScrollableListButtonMixin:Init(elementData)
self.clickCount = 0;
self:SetText(elementData);
end
function ScrollableListButtonMixin:OnClick(button, down)
self.clickCount = Wrap(self.clickCount + 1, 3);
if self.clickCount == 3 then
self:TriggerEvent("OnClickThreeTimes", self:GetElementData(), button, down);
end
end
---
ScrollableButtonListMixin = {};
function ScrollableButtonListMixin:OnLoad()
self.DataProvider = CreateDataProvider();
self.DataProvider:InsertTable({ "Button 1", "Button 2", "Button 3", "Button 4", "Button 5" });
self.ScrollView = CreateScrollBoxListLinearView();
self.ScrollView:SetDataProvider(self.DataProvider);
self.ScrollView:SetElementExtent(21);
self.ScrollView:SetElementInitializer("Button", "UIPanelButtonTemplate", GenerateClosure(self.OnElementInitialize, self));
self.ScrollView:SetElementResetter(GenerateClosure(self.OnElementReset, self));
-- Not using a scrollbar for this demo.
self.ScrollBox = CreateFrame("Frame", nil, self, "WowScrollBoxList");
self.ScrollBox:SetAllPoints(self);
self.ScrollBox:Init(self.ScrollView);
end
function ScrollableButtonListMixin:OnElementInitialize(button, elementData, isNew)
if isNew then
Mixin(button, ScrollableListButtonMixin);
button:OnLoad();
end
button:Init(elementData);
button:RegisterCallback("OnClickThreeTimes", self.OnElementClickThreeTimes, self);
end
function ScrollableButtonListMixin:OnElementReset(button)
button:UnregisterCallback("OnClickThreeTimes", self);
end
function ScrollableButtonListMixin:OnElementClickThreeTimes(elementData, button, down)
print("Clicked a button three times!", elementData, button, down);
end
---
ScrollableButtonList = Mixin(CreateFrame("Frame", nil, UIParent), ScrollableButtonListMixin);
ScrollableButtonList:OnLoad();
ScrollableButtonList:SetPoint("CENTER");
ScrollableButtonList:SetSize(200, 55);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment