Mercurial > wow > ouroloot
comparison AceGUIWidget-DoTimerEditBoxDropDown.lua @ 54:6d5fcbdc0590
DoTimerEditBoxDropDown widget to ver 5, warn (once) about missing item cache entries in the filter list dropdown.
| author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
|---|---|
| date | Sat, 07 Apr 2012 04:59:27 +0000 |
| parents | 822b6ca3ef89 |
| children |
comparison
equal
deleted
inserted
replaced
| 53:7af58a7dce7d | 54:6d5fcbdc0590 |
|---|---|
| 1 local Type, Version = "EditBoxDropDown", 3 | 1 local Type, Version = "EditBoxDropDown", 5 |
| 2 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) | 2 local AceGUI = LibStub and LibStub("AceGUI-3.0", true) |
| 3 if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end | 3 if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end |
| 4 | 4 |
| 5 --[[ | 5 --[[ |
| 6 This is a from-scratch AceGUI-style implementation of the combination drop- | 6 This is a from-scratch AceGUI-style implementation of the combination drop- |
| 18 Version 2 is a rehash to follow the same form of the rest of the AceGUI widgets | 18 Version 2 is a rehash to follow the same form of the rest of the AceGUI widgets |
| 19 after their rewrite, and to work with the new EditBox behavior. | 19 after their rewrite, and to work with the new EditBox behavior. |
| 20 | 20 |
| 21 Version 3 adds the EditBoxDropDownOptionControl variant, specifically for use | 21 Version 3 adds the EditBoxDropDownOptionControl variant, specifically for use |
| 22 as a 'dialogControl' in AceConfig option tables. Details follow; the more | 22 as a 'dialogControl' in AceConfig option tables. Details follow; the more |
| 23 disappointing restrictions are because AceConfig never gives the end user any | 23 disappointing restrictions are because AceConfig never gives the programmer any |
| 24 direct link to the widgets in use. | 24 direct link to the widgets in use. |
| 25 - 'desc' option field ignored | 25 - 'desc' option field ignored |
| 26 - 'name' field may contain an embedded tab ('\t') followed by more text to be | 26 - 'name' field may contain an embedded tab ('\t') followed by more text to be |
| 27 used as the tooltip text when hovering over the editbox field | 27 used as the tooltip text when hovering over the editbox field |
| 28 - 'get' field must be a function, returning a function to be used as the | 28 - 'get' field must be a function, returning a function to be used as the |
| 29 OnTextEnterPressed callback; this is typically how new entries should be | 29 OnTextEnterPressed callback; this is typically how new entries should be |
| 30 added to data | 30 added to data |
| 31 - 'values' field must be a function, returning the usual list of entries, PLUS | 31 - 'values' field must be a function, returning the usual list of entries, PLUS |
| 32 the callback used for 'get', e.g., | 32 the callback used for 'get' as a key, e.g., |
| 33 values = function() | 33 values = function() |
| 34 local ret = build_real_dropdown_values() | 34 local ret = build_real_dropdown_table() |
| 35 ret[get_callback] = true -- assuming "function get_callback (widget, event, text)" | 35 ret[get_callback] = true -- assuming "function get_callback (widget, event, text) .... end" |
| 36 return ret | 36 return ret |
| 37 end | 37 end |
| 38 The callback will be immediately removed from the table, but is required to | 38 The callback will be immediately removed from the table, but is required to |
| 39 be present to pass tests in the AceConfig source. | 39 be present to pass tests in the AceConfig source. |
| 40 - 'set' receives the key of the dropdown table, but that entry will already be | 40 - 'set' receives the key of the dropdown table, but that entry will already be |
| 41 removed by the time the 'set' function is called | 41 removed by the time the 'set' function is called |
| 42 | 42 |
| 43 Version 4 was never released. | |
| 44 | |
| 45 Version 5 adds the OnDropdownShown callback. | |
| 46 | |
| 43 | 47 |
| 44 EditBoxDropDown API | 48 EditBoxDropDown API |
| 45 | 49 |
| 46 :SetLabel(txt) | 50 :SetLabel(txt) |
| 47 forwards to the editbox's SetLabel | 51 forwards to the editbox's SetLabel |
| 71 | 75 |
| 72 OnListItemClicked | 76 OnListItemClicked |
| 73 similar to a Dropdown widget's OnValueChanged, the key and value from the | 77 similar to a Dropdown widget's OnValueChanged, the key and value from the |
| 74 table given to :SetList are passed | 78 table given to :SetList are passed |
| 75 | 79 |
| 76 | 80 OnDropdownShown |
| 77 farmbuyer | 81 when the down arrow is clicked to display the list |
| 82 | |
| 83 | |
| 84 farmbuyer@gmail.com | |
| 78 ]] | 85 ]] |
| 79 | 86 |
| 80 local button_hover_text_default = "Click on entries to remove them." | 87 local button_hover_text_default = "Click on entries to remove them." |
| 81 local maps -- from actual editbox frame back to this widget | 88 local maps -- from actual editbox frame back to this widget |
| 82 | 89 |
| 140 else | 147 else |
| 141 dd.is_on = true | 148 dd.is_on = true |
| 142 local t = BuildList(button.obj) | 149 local t = BuildList(button.obj) |
| 143 EasyMenu (t, button.obj.dropdown, button.obj.frame, 0, 0, "MENU") | 150 EasyMenu (t, button.obj.dropdown, button.obj.frame, 0, 0, "MENU") |
| 144 PlaySound("igMainMenuOptionCheckBoxOn") | 151 PlaySound("igMainMenuOptionCheckBoxOn") |
| 152 button.obj:Fire("OnDropdownShown") | |
| 145 end | 153 end |
| 146 end | 154 end |
| 147 | 155 |
| 148 local function Button_OnEnter (button) | 156 local function Button_OnEnter (button) |
| 149 if button.tooltip_text then | 157 if button.tooltip_text then |
| 151 GameTooltip:SetText(button.tooltip_text, nil, nil, nil, nil, 1) | 159 GameTooltip:SetText(button.tooltip_text, nil, nil, nil, nil, 1) |
| 152 end | 160 end |
| 153 end | 161 end |
| 154 | 162 |
| 155 | 163 |
| 164 --local base_SetWidth = AceGUI.WidgetBase.SetWidth | |
| 156 local methods = { | 165 local methods = { |
| 157 ["OnAcquire"] = function (self) | 166 ["OnAcquire"] = function (self) |
| 158 self:SetHeight(20) | 167 self:SetHeight(20) |
| 159 self:SetWidth(100) | 168 self:SetWidth(100) |
| 160 self.button.tooltip_text = button_hover_text_default | 169 self.button.tooltip_text = button_hover_text_default |
| 162 self.editbox:DisableButton(true) | 171 self.editbox:DisableButton(true) |
| 163 | 172 |
| 164 maps = maps or {} | 173 maps = maps or {} |
| 165 maps[self.editbox.editbox] = self | 174 maps[self.editbox.editbox] = self |
| 166 end, | 175 end, |
| 167 | 176 --[=[ |
| 177 ["SetWidth"] = function (self, width) | |
| 178 print("got",width) | |
| 179 base_SetWidth(self, width) | |
| 180 self.frame.width = width + 45 | |
| 181 end, | |
| 182 | |
| 183 ["GetWidth"] = function (self) | |
| 184 return self.frame:GetWidth() + 45 | |
| 185 end, | |
| 186 ]=] | |
| 168 ["OnRelease"] = function (self) | 187 ["OnRelease"] = function (self) |
| 169 self.frame:ClearAllPoints() | 188 self.frame:ClearAllPoints() |
| 170 self.frame:Hide() | 189 self.frame:Hide() |
| 171 self.editbox.tooltip_text = nil | 190 self.editbox.tooltip_text = nil |
| 172 self.button.tooltip_text = nil | 191 self.button.tooltip_text = nil |
| 237 -- formal containter. Inspired by new-style InteractiveLabel. | 256 -- formal containter. Inspired by new-style InteractiveLabel. |
| 238 local editbox = AceGUI:Create("EditBox") | 257 local editbox = AceGUI:Create("EditBox") |
| 239 local frame = editbox.frame | 258 local frame = editbox.frame |
| 240 editbox:SetHeight(20) | 259 editbox:SetHeight(20) |
| 241 editbox:SetWidth(100) | 260 editbox:SetWidth(100) |
| 242 frame:SetWidth(frame:GetWidth()+6) | 261 --frame:SetWidth(frame:GetWidth()+15) |
| 262 --frame.width = frame:GetWidth() + 15 | |
| 243 editbox:SetCallback("OnEnter", ddEditBox_OnMouseEnter) | 263 editbox:SetCallback("OnEnter", ddEditBox_OnMouseEnter) |
| 244 editbox:SetCallback("OnLeave", ddEditBox_OnMouseLeave) | 264 editbox:SetCallback("OnLeave", ddEditBox_OnMouseLeave) |
| 245 editbox:SetCallback("OnEnterPressed", ddEditBox_OnEnterPressed) | 265 editbox:SetCallback("OnEnterPressed", ddEditBox_OnEnterPressed) |
| 246 editbox.editbox:SetScript("OnEditFocusGained", ddEditBox_Clear) | 266 editbox.editbox:SetScript("OnEditFocusGained", ddEditBox_Clear) |
| 247 editbox.editbox:SetScript("OnEditFocusLost", ddEditBox_Reset) | 267 editbox.editbox:SetScript("OnEditFocusLost", ddEditBox_Reset) |
