Details | Compare with Previous | View Log
Line No. | Rev | Author | Line |
---|---|---|---|
1 | 2 | Taonnor-14572 | --[[submenuData = { |
2 | Taonnor-14572 | type = "submenu", |
|
3 | Taonnor-14572 | name = "Submenu Title", -- or string id or function returning a string |
|
4 | Taonnor-14572 | tooltip = "My submenu tooltip", -- -- or string id or function returning a string (optional) |
|
5 | Taonnor-14572 | controls = {sliderData, buttonData} --(optional) used by LAM |
|
6 | Taonnor-14572 | reference = "MyAddonSubmenu" --(optional) unique global reference to control |
|
7 | Taonnor-14572 | } ]] |
|
8 | Taonnor-14572 | ||
9 | Taonnor-14572 | local widgetVersion = 11 |
|
10 | Taonnor-14572 | local LAM = LibStub("LibAddonMenu-2.0") |
|
11 | Taonnor-14572 | if not LAM:RegisterWidget("submenu", widgetVersion) then return end |
|
12 | Taonnor-14572 | ||
13 | Taonnor-14572 | local wm = WINDOW_MANAGER |
|
14 | Taonnor-14572 | local am = ANIMATION_MANAGER |
|
15 | Taonnor-14572 | ||
16 | Taonnor-14572 | local function UpdateValue(control) |
|
17 | Taonnor-14572 | control.label:SetText(LAM.util.GetStringFromValue(control.data.name)) |
|
18 | Taonnor-14572 | if control.data.tooltip then |
|
19 | Taonnor-14572 | control.label.data.tooltipText = LAM.util.GetStringFromValue(control.data.tooltip) |
|
20 | Taonnor-14572 | end |
|
21 | Taonnor-14572 | end |
|
22 | Taonnor-14572 | ||
23 | Taonnor-14572 | local function AnimateSubmenu(clicked) |
|
24 | Taonnor-14572 | local control = clicked:GetParent() |
|
25 | Taonnor-14572 | control.open = not control.open |
|
26 | Taonnor-14572 | ||
27 | Taonnor-14572 | if control.open then |
|
28 | Taonnor-14572 | control.animation:PlayFromStart() |
|
29 | Taonnor-14572 | else |
|
30 | Taonnor-14572 | control.animation:PlayFromEnd() |
|
31 | Taonnor-14572 | end |
|
32 | Taonnor-14572 | end |
|
33 | Taonnor-14572 | ||
34 | Taonnor-14572 | function LAMCreateControl.submenu(parent, submenuData, controlName) |
|
35 | Taonnor-14572 | local width = parent:GetWidth() - 45 |
|
36 | Taonnor-14572 | local control = wm:CreateControl(controlName or submenuData.reference, parent.scroll or parent, CT_CONTROL) |
|
37 | Taonnor-14572 | control.panel = parent |
|
38 | Taonnor-14572 | control.data = submenuData |
|
39 | Taonnor-14572 | ||
40 | Taonnor-14572 | control.label = wm:CreateControlFromVirtual(nil, control, "ZO_Options_SectionTitleLabel") |
|
41 | Taonnor-14572 | local label = control.label |
|
42 | Taonnor-14572 | label:SetAnchor(TOPLEFT, control, TOPLEFT, 5, 5) |
|
43 | Taonnor-14572 | label:SetDimensions(width, 30) |
|
44 | Taonnor-14572 | label:SetWrapMode(TEXT_WRAP_MODE_ELLIPSIS) |
|
45 | Taonnor-14572 | label:SetText(LAM.util.GetStringFromValue(submenuData.name)) |
|
46 | Taonnor-14572 | label:SetMouseEnabled(true) |
|
47 | Taonnor-14572 | if submenuData.tooltip then |
|
48 | Taonnor-14572 | label.data = {tooltipText = LAM.util.GetStringFromValue(submenuData.tooltip)} |
|
49 | Taonnor-14572 | label:SetHandler("OnMouseEnter", ZO_Options_OnMouseEnter) |
|
50 | Taonnor-14572 | label:SetHandler("OnMouseExit", ZO_Options_OnMouseExit) |
|
51 | Taonnor-14572 | end |
|
52 | Taonnor-14572 | ||
53 | Taonnor-14572 | control.scroll = wm:CreateControl(nil, control, CT_SCROLL) |
|
54 | Taonnor-14572 | local scroll = control.scroll |
|
55 | Taonnor-14572 | scroll:SetParent(control) |
|
56 | Taonnor-14572 | scroll:SetAnchor(TOPLEFT, label, BOTTOMLEFT, 0, 10) |
|
57 | Taonnor-14572 | scroll:SetDimensionConstraints(width + 5, 0, width + 5, 0) |
|
58 | Taonnor-14572 | ||
59 | Taonnor-14572 | control.bg = wm:CreateControl(nil, label, CT_BACKDROP) |
|
60 | Taonnor-14572 | local bg = control.bg |
|
61 | Taonnor-14572 | bg:SetAnchor(TOPLEFT, label, TOPLEFT, -5, -5) |
|
62 | Taonnor-14572 | bg:SetAnchor(BOTTOMRIGHT, scroll, BOTTOMRIGHT, -7, 0) |
|
63 | Taonnor-14572 | bg:SetEdgeTexture("EsoUI\\Art\\Tooltips\\UI-Border.dds", 128, 16) |
|
64 | Taonnor-14572 | bg:SetCenterTexture("EsoUI\\Art\\Tooltips\\UI-TooltipCenter.dds") |
|
65 | Taonnor-14572 | bg:SetInsets(16, 16, -16, -16) |
|
66 | Taonnor-14572 | ||
67 | Taonnor-14572 | control.arrow = wm:CreateControl(nil, bg, CT_TEXTURE) |
|
68 | Taonnor-14572 | local arrow = control.arrow |
|
69 | Taonnor-14572 | arrow:SetDimensions(28, 28) |
|
70 | Taonnor-14572 | arrow:SetTexture("EsoUI\\Art\\Miscellaneous\\list_sortdown.dds") --list_sortup for the other way |
|
71 | Taonnor-14572 | arrow:SetAnchor(TOPRIGHT, bg, TOPRIGHT, -5, 5) |
|
72 | Taonnor-14572 | ||
73 | Taonnor-14572 | --figure out the cool animation later... |
|
74 | Taonnor-14572 | control.animation = am:CreateTimeline() |
|
75 | Taonnor-14572 | local animation = control.animation |
|
76 | Taonnor-14572 | animation:SetPlaybackType(ANIMATION_SIZE, 0) --2nd arg = loop count |
|
77 | Taonnor-14572 | ||
78 | Taonnor-14572 | control:SetResizeToFitDescendents(true) |
|
79 | Taonnor-14572 | control.open = false |
|
80 | Taonnor-14572 | label:SetHandler("OnMouseUp", AnimateSubmenu) |
|
81 | Taonnor-14572 | animation:SetHandler("OnStop", function(self, completedPlaying) |
|
82 | Taonnor-14572 | scroll:SetResizeToFitDescendents(control.open) |
|
83 | Taonnor-14572 | if control.open then |
|
84 | Taonnor-14572 | control.arrow:SetTexture("EsoUI\\Art\\Miscellaneous\\list_sortup.dds") |
|
85 | Taonnor-14572 | scroll:SetResizeToFitPadding(5, 20) |
|
86 | Taonnor-14572 | else |
|
87 | Taonnor-14572 | control.arrow:SetTexture("EsoUI\\Art\\Miscellaneous\\list_sortdown.dds") |
|
88 | Taonnor-14572 | scroll:SetResizeToFitPadding(5, 0) |
|
89 | Taonnor-14572 | scroll:SetHeight(0) |
|
90 | Taonnor-14572 | end |
|
91 | Taonnor-14572 | end) |
|
92 | Taonnor-14572 | ||
93 | Taonnor-14572 | --small strip at the bottom of the submenu that you can click to close it |
|
94 | Taonnor-14572 | control.btmToggle = wm:CreateControl(nil, control, CT_TEXTURE) |
|
95 | Taonnor-14572 | local btmToggle = control.btmToggle |
|
96 | Taonnor-14572 | btmToggle:SetMouseEnabled(true) |
|
97 | Taonnor-14572 | btmToggle:SetAnchor(BOTTOMLEFT, control.scroll, BOTTOMLEFT) |
|
98 | Taonnor-14572 | btmToggle:SetAnchor(BOTTOMRIGHT, control.scroll, BOTTOMRIGHT) |
|
99 | Taonnor-14572 | btmToggle:SetHeight(15) |
|
100 | Taonnor-14572 | btmToggle:SetAlpha(0) |
|
101 | Taonnor-14572 | btmToggle:SetHandler("OnMouseUp", AnimateSubmenu) |
|
102 | Taonnor-14572 | ||
103 | Taonnor-14572 | control.UpdateValue = UpdateValue |
|
104 | Taonnor-14572 | ||
105 | Taonnor-14572 | LAM.util.RegisterForRefreshIfNeeded(control) |
|
106 | Taonnor-14572 | ||
107 | Taonnor-14572 | return control |
|
108 | Taonnor-14572 | end |