ESOUI SVN TaosGroupUltimate

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 Taonnor-14572
--[[editboxData = {
2 Taonnor-14572
    type = "editbox",
3 Taonnor-14572
    name = "My Editbox", -- or string id or function returning a string
4 Taonnor-14572
    getFunc = function() return db.text end,
5 Taonnor-14572
    setFunc = function(text) db.text = text doStuff() end,
6 Taonnor-14572
    tooltip = "Editbox's tooltip text.", -- or string id or function returning a string (optional)
7 Taonnor-14572
    isMultiline = true, --boolean (optional)
8 Taonnor-14572
    isExtraWide = true, --boolean (optional)
9 Taonnor-14572
    width = "full", --or "half" (optional)
10 Taonnor-14572
    disabled = function() return db.someBooleanSetting end, --or boolean (optional)
11 Taonnor-14572
    warning = "May cause permanent awesomeness.", -- or string id or function returning a string (optional)
12 Taonnor-14572
    requiresReload = false, -- boolean, if set to true, the warning text will contain a notice that changes are only applied after an UI reload and any change to the value will make the "Apply Settings" button appear on the panel which will reload the UI when pressed (optional)
13 Taonnor-14572
    default = defaults.text, -- default value or function that returns the default value (optional)
14 Taonnor-14572
    reference = "MyAddonEditbox" -- unique global reference to control (optional)
15 Taonnor-14572
} ]]
16 Taonnor-14572
 
17 Taonnor-14572
 
18 Taonnor-14572
local widgetVersion = 14
19 Taonnor-14572
local LAM = LibStub("LibAddonMenu-2.0")
20 Taonnor-14572
if not LAM:RegisterWidget("editbox", widgetVersion) then return end
21 Taonnor-14572
 
22 Taonnor-14572
local wm = WINDOW_MANAGER
23 Taonnor-14572
 
24 Taonnor-14572
local function UpdateDisabled(control)
25 Taonnor-14572
    local disable
26 Taonnor-14572
    if type(control.data.disabled) == "function" then
27 Taonnor-14572
        disable = control.data.disabled()
28 Taonnor-14572
    else
29 Taonnor-14572
        disable = control.data.disabled
30 Taonnor-14572
    end
31 Taonnor-14572
 
32 Taonnor-14572
    if disable then
33 Taonnor-14572
        control.label:SetColor(ZO_DEFAULT_DISABLED_COLOR:UnpackRGBA())
34 Taonnor-14572
        control.editbox:SetColor(ZO_DEFAULT_DISABLED_MOUSEOVER_COLOR:UnpackRGBA())
35 Taonnor-14572
    else
36 Taonnor-14572
        control.label:SetColor(ZO_DEFAULT_ENABLED_COLOR:UnpackRGBA())
37 Taonnor-14572
        control.editbox:SetColor(ZO_DEFAULT_ENABLED_COLOR:UnpackRGBA())
38 Taonnor-14572
    end
39 Taonnor-14572
    --control.editbox:SetEditEnabled(not disable)
40 Taonnor-14572
    control.editbox:SetMouseEnabled(not disable)
41 Taonnor-14572
end
42 Taonnor-14572
 
43 Taonnor-14572
local function UpdateValue(control, forceDefault, value)
44 Taonnor-14572
    if forceDefault then --if we are forcing defaults
45 Taonnor-14572
        value = LAM.util.GetDefaultValue(control.data.default)
46 Taonnor-14572
        control.data.setFunc(value)
47 Taonnor-14572
        control.editbox:SetText(value)
48 Taonnor-14572
    elseif value then
49 Taonnor-14572
        control.data.setFunc(value)
50 Taonnor-14572
        --after setting this value, let's refresh the others to see if any should be disabled or have their settings changed
51 Taonnor-14572
        LAM.util.RequestRefreshIfNeeded(control)
52 Taonnor-14572
    else
53 Taonnor-14572
        value = control.data.getFunc()
54 Taonnor-14572
        control.editbox:SetText(value)
55 Taonnor-14572
    end
56 Taonnor-14572
end
57 Taonnor-14572
 
58 Taonnor-14572
local MIN_HEIGHT = 24
59 Taonnor-14572
local HALF_WIDTH_LINE_SPACING = 2
60 Taonnor-14572
function LAMCreateControl.editbox(parent, editboxData, controlName)
61 Taonnor-14572
    local control = LAM.util.CreateLabelAndContainerControl(parent, editboxData, controlName)
62 Taonnor-14572
 
63 Taonnor-14572
    local container = control.container
64 Taonnor-14572
    control.bg = wm:CreateControlFromVirtual(nil, container, "ZO_EditBackdrop")
65 Taonnor-14572
    local bg = control.bg
66 Taonnor-14572
    bg:SetAnchorFill()
67 Taonnor-14572
 
68 Taonnor-14572
    if editboxData.isMultiline then
69 Taonnor-14572
        control.editbox = wm:CreateControlFromVirtual(nil, bg, "ZO_DefaultEditMultiLineForBackdrop")
70 Taonnor-14572
        control.editbox:SetHandler("OnMouseWheel", function(self, delta)
71 Taonnor-14572
            if self:HasFocus() then --only set focus to new spots if the editbox is currently in use
72 Taonnor-14572
                local cursorPos = self:GetCursorPosition()
73 Taonnor-14572
                local text = self:GetText()
74 Taonnor-14572
                local textLen = text:len()
75 Taonnor-14572
                local newPos
76 Taonnor-14572
                if delta > 0 then --scrolling up
77 Taonnor-14572
                    local reverseText = text:reverse()
78 Taonnor-14572
                    local revCursorPos = textLen - cursorPos
79 Taonnor-14572
                    local revPos = reverseText:find("\n", revCursorPos+1)
80 Taonnor-14572
                    newPos = revPos and textLen - revPos
81 Taonnor-14572
                else --scrolling down
82 Taonnor-14572
                    newPos = text:find("\n", cursorPos+1)
83 Taonnor-14572
                end
84 Taonnor-14572
                if newPos then --if we found a new line, then scroll, otherwise don't
85 Taonnor-14572
                    self:SetCursorPosition(newPos)
86 Taonnor-14572
                end
87 Taonnor-14572
            end
88 Taonnor-14572
        end)
89 Taonnor-14572
    else
90 Taonnor-14572
        control.editbox = wm:CreateControlFromVirtual(nil, bg, "ZO_DefaultEditForBackdrop")
91 Taonnor-14572
    end
92 Taonnor-14572
    local editbox = control.editbox
93 Taonnor-14572
    editbox:SetText(editboxData.getFunc())
94 Taonnor-14572
    editbox:SetMaxInputChars(3000)
95 Taonnor-14572
    editbox:SetHandler("OnFocusLost", function(self) control:UpdateValue(false, self:GetText()) end)
96 Taonnor-14572
    editbox:SetHandler("OnEscape", function(self) self:LoseFocus() control:UpdateValue(false, self:GetText()) end)
97 Taonnor-14572
    editbox:SetHandler("OnMouseEnter", function() ZO_Options_OnMouseEnter(control) end)
98 Taonnor-14572
    editbox:SetHandler("OnMouseExit", function() ZO_Options_OnMouseExit(control) end)
99 Taonnor-14572
 
100 Taonnor-14572
    local MIN_WIDTH = (parent.GetWidth and (parent:GetWidth() / 10)) or (parent.panel.GetWidth and (parent.panel:GetWidth() / 10)) or 0
101 Taonnor-14572
 
102 Taonnor-14572
    control.label:ClearAnchors()
103 Taonnor-14572
    container:ClearAnchors()
104 Taonnor-14572
 
105 Taonnor-14572
    control.label:SetAnchor(TOPLEFT, control, TOPLEFT, 0, 0)
106 Taonnor-14572
    container:SetAnchor(BOTTOMRIGHT, control, BOTTOMRIGHT, 0, 0)
107 Taonnor-14572
 
108 Taonnor-14572
    if control.isHalfWidth then
109 Taonnor-14572
        container:SetAnchor(BOTTOMRIGHT, control, BOTTOMRIGHT, 0, 0)
110 Taonnor-14572
    end
111 Taonnor-14572
 
112 Taonnor-14572
    if editboxData.isExtraWide then
113 Taonnor-14572
        container:SetAnchor(BOTTOMLEFT, control, BOTTOMLEFT, 0, 0)
114 Taonnor-14572
    else
115 Taonnor-14572
        container:SetWidth(MIN_WIDTH * 3.2)
116 Taonnor-14572
    end
117 Taonnor-14572
 
118 Taonnor-14572
    if editboxData.isMultiline then
119 Taonnor-14572
        container:SetHeight(MIN_HEIGHT * 3)
120 Taonnor-14572
    else
121 Taonnor-14572
        container:SetHeight(MIN_HEIGHT)
122 Taonnor-14572
    end
123 Taonnor-14572
 
124 Taonnor-14572
    if control.isHalfWidth ~= true and editboxData.isExtraWide ~= true then
125 Taonnor-14572
        control:SetHeight(container:GetHeight())
126 Taonnor-14572
    else
127 Taonnor-14572
        control:SetHeight(container:GetHeight() + control.label:GetHeight())
128 Taonnor-14572
    end
129 Taonnor-14572
 
130 Taonnor-14572
    editbox:ClearAnchors()
131 Taonnor-14572
    editbox:SetAnchor(TOPLEFT, container, TOPLEFT, 2, 2)
132 Taonnor-14572
    editbox:SetAnchor(BOTTOMRIGHT, container, BOTTOMRIGHT, -2, -2)
133 Taonnor-14572
 
134 Taonnor-14572
    if editboxData.warning ~= nil or editboxData.requiresReload then
135 Taonnor-14572
        control.warning = wm:CreateControlFromVirtual(nil, control, "ZO_Options_WarningIcon")
136 Taonnor-14572
        if editboxData.isExtraWide then
137 Taonnor-14572
            control.warning:SetAnchor(BOTTOMRIGHT, control.bg, TOPRIGHT, 2, 0)
138 Taonnor-14572
        else
139 Taonnor-14572
            control.warning:SetAnchor(TOPRIGHT, control.bg, TOPLEFT, -5, 0)
140 Taonnor-14572
        end
141 Taonnor-14572
        control.UpdateWarning = LAM.util.UpdateWarning
142 Taonnor-14572
        control:UpdateWarning()
143 Taonnor-14572
    end
144 Taonnor-14572
 
145 Taonnor-14572
    control.UpdateValue = UpdateValue
146 Taonnor-14572
    control:UpdateValue()
147 Taonnor-14572
    if editboxData.disabled ~= nil then
148 Taonnor-14572
        control.UpdateDisabled = UpdateDisabled
149 Taonnor-14572
        control:UpdateDisabled()
150 Taonnor-14572
    end
151 Taonnor-14572
 
152 Taonnor-14572
    LAM.util.RegisterForRefreshIfNeeded(control)
153 Taonnor-14572
    LAM.util.RegisterForReloadIfNeeded(control)
154 Taonnor-14572
 
155 Taonnor-14572
    return control
156 Taonnor-14572
end