ESOUI SVN TaosGroupUltimate

[/] [trunk/] [TaosGroupUltimate/] [libs/] [LibAddonMenu-2.0/] [controls/] [submenu.lua] - Blame information for rev 2

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