Mercurial > wow > inventory
comparison Libs/AceGUI-3.0/widgets/AceGUIWidget-EditBox.lua @ 0:c6ff7ba0e8f6
Reasonably functional now. Cleaning up some stuff which might have to be reverted.
| author | Zerotorescue |
|---|---|
| date | Thu, 07 Oct 2010 17:17:43 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:c6ff7ba0e8f6 |
|---|---|
| 1 --[[----------------------------------------------------------------------------- | |
| 2 EditBox Widget | |
| 3 -------------------------------------------------------------------------------]] | |
| 4 local Type, Version = "EditBox", 21 | |
| 5 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) | |
| 6 if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end | |
| 7 | |
| 8 -- Lua APIs | |
| 9 local tostring, pairs = tostring, pairs | |
| 10 | |
| 11 -- WoW APIs | |
| 12 local PlaySound = PlaySound | |
| 13 local GetCursorInfo, ClearCursor, GetSpellName = GetCursorInfo, ClearCursor, GetSpellName | |
| 14 local CreateFrame, UIParent = CreateFrame, UIParent | |
| 15 local _G = _G | |
| 16 | |
| 17 -- Global vars/functions that we don't upvalue since they might get hooked, or upgraded | |
| 18 -- List them here for Mikk's FindGlobals script | |
| 19 -- GLOBALS: AceGUIEditBoxInsertLink, ChatFontNormal, OKAY | |
| 20 | |
| 21 --[[----------------------------------------------------------------------------- | |
| 22 Support functions | |
| 23 -------------------------------------------------------------------------------]] | |
| 24 if not AceGUIEditBoxInsertLink then | |
| 25 -- upgradeable hook | |
| 26 hooksecurefunc("ChatEdit_InsertLink", function(...) return _G.AceGUIEditBoxInsertLink(...) end) | |
| 27 end | |
| 28 | |
| 29 function _G.AceGUIEditBoxInsertLink(text) | |
| 30 for i = 1, AceGUI:GetWidgetCount(Type) do | |
| 31 local editbox = _G["AceGUI-3.0EditBox"..i] | |
| 32 if editbox and editbox:IsVisible() and editbox:HasFocus() then | |
| 33 editbox:Insert(text) | |
| 34 return true | |
| 35 end | |
| 36 end | |
| 37 end | |
| 38 | |
| 39 local function ShowButton(self) | |
| 40 if not self.disablebutton then | |
| 41 self.button:Show() | |
| 42 self.editbox:SetTextInsets(0, 20, 3, 3) | |
| 43 end | |
| 44 end | |
| 45 | |
| 46 local function HideButton(self) | |
| 47 self.button:Hide() | |
| 48 self.editbox:SetTextInsets(0, 0, 3, 3) | |
| 49 end | |
| 50 | |
| 51 --[[----------------------------------------------------------------------------- | |
| 52 Scripts | |
| 53 -------------------------------------------------------------------------------]] | |
| 54 local function Control_OnEnter(frame) | |
| 55 frame.obj:Fire("OnEnter") | |
| 56 end | |
| 57 | |
| 58 local function Control_OnLeave(frame) | |
| 59 frame.obj:Fire("OnLeave") | |
| 60 end | |
| 61 | |
| 62 local function EditBox_OnEscapePressed(frame) | |
| 63 AceGUI:ClearFocus() | |
| 64 end | |
| 65 | |
| 66 local function EditBox_OnEnterPressed(frame) | |
| 67 local self = frame.obj | |
| 68 local value = frame:GetText() | |
| 69 local cancel = self:Fire("OnEnterPressed", value) | |
| 70 if not cancel then | |
| 71 PlaySound("igMainMenuOptionCheckBoxOn") | |
| 72 HideButton(self) | |
| 73 end | |
| 74 end | |
| 75 | |
| 76 local function EditBox_OnReceiveDrag(frame) | |
| 77 local self = frame.obj | |
| 78 local type, id, info = GetCursorInfo() | |
| 79 if type == "item" then | |
| 80 self:SetText(info) | |
| 81 self:Fire("OnEnterPressed", info) | |
| 82 ClearCursor() | |
| 83 elseif type == "spell" then | |
| 84 local name, rank = GetSpellName(id, info) | |
| 85 if rank and rank:match("%d") then | |
| 86 name = name.."("..rank..")" | |
| 87 end | |
| 88 self:SetText(name) | |
| 89 self:Fire("OnEnterPressed", name) | |
| 90 ClearCursor() | |
| 91 end | |
| 92 HideButton(self) | |
| 93 AceGUI:ClearFocus() | |
| 94 end | |
| 95 | |
| 96 local function EditBox_OnTextChanged(frame) | |
| 97 local self = frame.obj | |
| 98 local value = frame:GetText() | |
| 99 if tostring(value) ~= tostring(self.lasttext) then | |
| 100 self:Fire("OnTextChanged", value) | |
| 101 self.lasttext = value | |
| 102 ShowButton(self) | |
| 103 end | |
| 104 end | |
| 105 | |
| 106 local function Button_OnClick(frame) | |
| 107 local editbox = frame.obj.editbox | |
| 108 editbox:ClearFocus() | |
| 109 EditBox_OnEnterPressed(editbox) | |
| 110 end | |
| 111 | |
| 112 --[[----------------------------------------------------------------------------- | |
| 113 Methods | |
| 114 -------------------------------------------------------------------------------]] | |
| 115 local methods = { | |
| 116 ["OnAcquire"] = function(self) | |
| 117 -- height is controlled by SetLabel | |
| 118 self:SetWidth(200) | |
| 119 self:SetDisabled(false) | |
| 120 self:SetLabel() | |
| 121 self:SetText() | |
| 122 self:DisableButton(false) | |
| 123 self:SetMaxLetters(0) | |
| 124 end, | |
| 125 | |
| 126 -- ["OnRelease"] = nil, | |
| 127 | |
| 128 ["SetDisabled"] = function(self, disabled) | |
| 129 self.disabled = disabled | |
| 130 if disabled then | |
| 131 self.editbox:EnableMouse(false) | |
| 132 self.editbox:ClearFocus() | |
| 133 self.editbox:SetTextColor(0.5,0.5,0.5) | |
| 134 self.label:SetTextColor(0.5,0.5,0.5) | |
| 135 else | |
| 136 self.editbox:EnableMouse(true) | |
| 137 self.editbox:SetTextColor(1,1,1) | |
| 138 self.label:SetTextColor(1,.82,0) | |
| 139 end | |
| 140 end, | |
| 141 | |
| 142 ["SetText"] = function(self, text) | |
| 143 self.lasttext = text or "" | |
| 144 self.editbox:SetText(text or "") | |
| 145 self.editbox:SetCursorPosition(0) | |
| 146 HideButton(self) | |
| 147 end, | |
| 148 | |
| 149 ["SetLabel"] = function(self, text) | |
| 150 if text and text ~= "" then | |
| 151 self.label:SetText(text) | |
| 152 self.label:Show() | |
| 153 self.editbox:SetPoint("TOPLEFT",self.frame,"TOPLEFT",7,-18) | |
| 154 self:SetHeight(44) | |
| 155 self.alignoffset = 30 | |
| 156 else | |
| 157 self.label:SetText("") | |
| 158 self.label:Hide() | |
| 159 self.editbox:SetPoint("TOPLEFT",self.frame,"TOPLEFT",7,0) | |
| 160 self:SetHeight(26) | |
| 161 self.alignoffset = 12 | |
| 162 end | |
| 163 end, | |
| 164 | |
| 165 ["DisableButton"] = function(self, disabled) | |
| 166 self.disablebutton = disabled | |
| 167 end, | |
| 168 | |
| 169 ["SetMaxLetters"] = function (self, num) | |
| 170 self.editbox:SetMaxLetters(num or 0) | |
| 171 end | |
| 172 } | |
| 173 | |
| 174 --[[----------------------------------------------------------------------------- | |
| 175 Constructor | |
| 176 -------------------------------------------------------------------------------]] | |
| 177 local function Constructor() | |
| 178 local num = AceGUI:GetNextWidgetNum(Type) | |
| 179 local frame = CreateFrame("Frame", nil, UIParent) | |
| 180 frame:Hide() | |
| 181 | |
| 182 local editbox = CreateFrame("EditBox", "AceGUI-3.0EditBox"..num, frame, "InputBoxTemplate") | |
| 183 editbox:SetAutoFocus(false) | |
| 184 editbox:SetFontObject(ChatFontNormal) | |
| 185 editbox:SetScript("OnEnter", Control_OnEnter) | |
| 186 editbox:SetScript("OnLeave", Control_OnLeave) | |
| 187 editbox:SetScript("OnEscapePressed", EditBox_OnEscapePressed) | |
| 188 editbox:SetScript("OnEnterPressed", EditBox_OnEnterPressed) | |
| 189 editbox:SetScript("OnTextChanged", EditBox_OnTextChanged) | |
| 190 editbox:SetScript("OnReceiveDrag", EditBox_OnReceiveDrag) | |
| 191 editbox:SetScript("OnMouseDown", EditBox_OnReceiveDrag) | |
| 192 editbox:SetTextInsets(0, 0, 3, 3) | |
| 193 editbox:SetMaxLetters(256) | |
| 194 editbox:SetPoint("BOTTOMLEFT", 6, 0) | |
| 195 editbox:SetPoint("BOTTOMRIGHT") | |
| 196 editbox:SetHeight(19) | |
| 197 | |
| 198 local label = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall") | |
| 199 label:SetPoint("TOPLEFT", 0, -2) | |
| 200 label:SetPoint("TOPRIGHT", 0, -2) | |
| 201 label:SetJustifyH("LEFT") | |
| 202 label:SetHeight(18) | |
| 203 | |
| 204 local button = CreateFrame("Button", nil, editbox, "UIPanelButtonTemplate") | |
| 205 button:SetWidth(40) | |
| 206 button:SetHeight(20) | |
| 207 button:SetPoint("RIGHT", -2, 0) | |
| 208 button:SetText(OKAY) | |
| 209 button:SetScript("OnClick", Button_OnClick) | |
| 210 button:Hide() | |
| 211 | |
| 212 local widget = { | |
| 213 alignoffset = 30, | |
| 214 editbox = editbox, | |
| 215 label = label, | |
| 216 button = button, | |
| 217 frame = frame, | |
| 218 type = Type | |
| 219 } | |
| 220 for method, func in pairs(methods) do | |
| 221 widget[method] = func | |
| 222 end | |
| 223 editbox.obj, button.obj = widget, widget | |
| 224 | |
| 225 return AceGUI:RegisterAsWidget(widget) | |
| 226 end | |
| 227 | |
| 228 AceGUI:RegisterWidgetType(Type, Constructor, Version) |
