Mercurial > wow > breuesk
comparison SelectorList.lua @ 54:c8c17286af95
Added power to tooltips (can show item popups)
Added interactive and non-interactive modes (ie items are not selectable)
| author | John@Yosemite-PC |
|---|---|
| date | Sun, 25 Mar 2012 13:08:38 -0400 |
| parents | 708d8a423b4c |
| children | 9b1588bd4398 |
comparison
equal
deleted
inserted
replaced
| 53:708d8a423b4c | 54:c8c17286af95 |
|---|---|
| 1 -- no bsk namespace here - we're hooking into AceGUI | |
| 2 | |
| 3 local Type, Version = "SelectorList", 34 | 1 local Type, Version = "SelectorList", 34 |
| 4 local AceGUI = LibStub and LibStub("AceGUI-3.0",true) | 2 local AceGUI = LibStub and LibStub("AceGUI-3.0",true) |
| 5 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 |
| 6 | 4 |
| 5 local con = LibStub("AceConsole-3.0",true) | |
| 7 local next, pairs, ipairs, assert, type = next, pairs, ipairs, assert, type | 6 local next, pairs, ipairs, assert, type = next, pairs, ipairs, assert, type |
| 8 local math_min, math_max, floor = math.min, math.max, floor | 7 local math_min, math_max, floor = math.min, math.max, floor |
| 9 local select, tremove, unpack, tconcat = select, table.remove, unpack, table.concat | 8 local select, tremove, unpack, tconcat = select, table.remove, unpack, table.concat |
| 10 | 9 |
| 11 local CreateFrame, UIParent = CreateFrame, UIParent | 10 local CreateFrame, UIParent = CreateFrame, UIParent |
| 53 status.scrollvalue = value | 52 status.scrollvalue = value |
| 54 self:Refresh() | 53 self:Refresh() |
| 55 AceGUI:ClearFocus() | 54 AceGUI:ClearFocus() |
| 56 end | 55 end |
| 57 | 56 |
| 58 | 57 local function Button_OnClick(frame) |
| 58 local self = frame.obj | |
| 59 local status = self.status or self.localstatus | |
| 60 --self:Fire("OnClick", frame.uniquevalue, frame.selected) | |
| 61 if status.selected == frame.value then | |
| 62 status.selected = nil | |
| 63 else | |
| 64 status.selected = frame.value | |
| 65 end | |
| 66 self:Refresh() | |
| 67 AceGUI:ClearFocus() | |
| 68 end | |
| 69 | |
| 70 local function Button_OnEnter(frame) | |
| 71 local self = frame.obj | |
| 72 --self:Fire("OnButtonEnter", frame.uniquevalue, frame) | |
| 73 | |
| 74 if self.localstatus.enabletooltips then | |
| 75 GameTooltip:SetOwner(frame, "ANCHOR_NONE") | |
| 76 GameTooltip:SetPoint("LEFT",frame,"RIGHT") | |
| 77 if frame.link then | |
| 78 GameTooltip:SetHyperlink(frame.link) | |
| 79 else | |
| 80 GameTooltip:SetText(frame.text:GetText() or "", 1, .82, 0, 1) | |
| 81 end | |
| 82 | |
| 83 GameTooltip:Show() | |
| 84 end | |
| 85 end | |
| 86 | |
| 87 local function Button_OnLeave(frame) | |
| 88 local self = frame.obj | |
| 89 --self:Fire("OnButtonLeave", frame.uniquevalue, frame) | |
| 90 | |
| 91 if self.localstatus.enabletooltips then | |
| 92 GameTooltip:Hide() | |
| 93 end | |
| 94 end | |
| 59 | 95 |
| 60 local function Layout(self) | 96 local function Layout(self) |
| 61 self:SetHeight(self.numlines * 18 + 20) | 97 self:SetHeight(self.numlines * 18 + 20) |
| 62 | 98 |
| 63 end | 99 end |
| 86 local text = line.text or "" | 122 local text = line.text or "" |
| 87 local icon = line.icon | 123 local icon = line.icon |
| 88 local iconCoords = line.iconCoords | 124 local iconCoords = line.iconCoords |
| 89 local level = line.level or 1 | 125 local level = line.level or 1 |
| 90 local value = line.value | 126 local value = line.value |
| 127 local link = line.link | |
| 91 local uniquevalue = line.uniquevalue | 128 local uniquevalue = line.uniquevalue |
| 92 local disabled = line.disabled | 129 local disabled = line.disabled |
| 130 local status = self.localstatus | |
| 93 | 131 |
| 94 button.line = line | 132 button.line = line |
| 95 button.value = value | 133 button.value = value |
| 134 button.link = link | |
| 96 button.uniquevalue = uniquevalue | 135 button.uniquevalue = uniquevalue |
| 97 if selected then | 136 if selected and status.enableInteractive then |
| 98 button:LockHighlight() | 137 button:LockHighlight() |
| 99 button.selected = true | 138 button.selected = true |
| 100 else | 139 else |
| 101 button:UnlockHighlight() | 140 button:UnlockHighlight() |
| 102 button.selected = false | 141 button.selected = false |
| 142 end | |
| 143 if status.enableInteractive then | |
| 144 button:Enable() | |
| 145 else | |
| 146 button:Disable() | |
| 103 end | 147 end |
| 104 local normalTexture = button:GetNormalTexture() | 148 local normalTexture = button:GetNormalTexture() |
| 105 local line = button.line | 149 local line = button.line |
| 106 button.level = level | 150 button.level = level |
| 107 if ( level == 1 ) then | 151 if ( level == 1 ) then |
| 114 button.text:SetPoint("LEFT", (icon and 16 or 0) + 8 * level, 2) | 158 button.text:SetPoint("LEFT", (icon and 16 or 0) + 8 * level, 2) |
| 115 end | 159 end |
| 116 | 160 |
| 117 if disabled then | 161 if disabled then |
| 118 button:EnableMouse(false) | 162 button:EnableMouse(false) |
| 119 button.text:SetText("|cff808080"..text..FONT_COLOR_CODE_CLOSE) | 163 local newText = text |
| 164 newText = newText:gsub("\124c[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F](.*)"..FONT_COLOR_CODE_CLOSE,"%1") | |
| 165 button.text:SetText("|cff808080"..newText..FONT_COLOR_CODE_CLOSE) | |
| 120 else | 166 else |
| 121 button.text:SetText(text) | 167 button.text:SetText(text) |
| 122 button:EnableMouse(true) | 168 button:EnableMouse(true) |
| 123 end | 169 end |
| 124 | 170 |
| 141 local methods = { | 187 local methods = { |
| 142 | 188 |
| 143 ["OnAcquire"] = function(self) | 189 ["OnAcquire"] = function(self) |
| 144 self:SetWidth(DEFAULT_SL_WIDTH) | 190 self:SetWidth(DEFAULT_SL_WIDTH) |
| 145 self:SetNumLines() | 191 self:SetNumLines() |
| 146 --self:EnableButtonTooltips(true) | 192 self:EnableButtonTooltips(false) |
| 147 end, | 193 self:SetInteractive(true) |
| 148 --["SetWidth"] = function(self, width) | 194 end, |
| 149 -- self.slframe:SetWidth(width) | 195 |
| 150 | |
| 151 -- local status = self.status or self.localstatus | |
| 152 -- status.width = width | |
| 153 -- status.treesizable = resizable | |
| 154 | |
| 155 --end, | |
| 156 ["SetNumLines"] = function(self,value) | 196 ["SetNumLines"] = function(self,value) |
| 157 if not value or value < 4 then | 197 if not value or value < 4 then |
| 158 value = 4 | 198 value = 4 |
| 159 end | 199 end |
| 160 self.numlines = value | 200 self.numlines = value |
| 161 Layout(self) | 201 Layout(self) |
| 162 end, | 202 end, |
| 203 | |
| 204 ["EnableButtonTooltips"] = function(self, enable) | |
| 205 self.localstatus.enabletooltips = enable | |
| 206 end, | |
| 207 | |
| 163 ["SetList"] = function(self, list) | 208 ["SetList"] = function(self, list) |
| 164 self.lines = {} | 209 self.lines = {} |
| 165 for i,v in ipairs(list) do | 210 for i,v in ipairs(list) do |
| 166 self.lines[i] = v | 211 self.lines[i] = v |
| 167 end | 212 end |
| 213 local status = self.status or self.localstatus | |
| 214 status.selected = nil | |
| 215 status.scrollvalue = 0 | |
| 168 self:Refresh() | 216 self:Refresh() |
| 169 end, | 217 end, |
| 170 | 218 |
| 171 ["ShowScroll"] = function(self, show) | 219 ["SetInteractive"] = function(self, value) |
| 220 self.localstatus.enableInteractive = value | |
| 221 end, | |
| 222 | |
| 223 ["ShowScroll"] = function(self, show) -- todo: not a user function. hide. | |
| 172 self.showscroll = show | 224 self.showscroll = show |
| 173 if show then | 225 if show then |
| 174 self.scrollbar:Show() | 226 self.scrollbar:Show() |
| 175 if self.buttons[1] then | 227 if self.buttons[1] then |
| 176 self.buttons[1]:SetPoint("TOPRIGHT", self.slframe,"TOPRIGHT",-22,-10) | 228 self.buttons[1]:SetPoint("TOPRIGHT", self.slframe,"TOPRIGHT",-22,-10) |
| 234 else | 286 else |
| 235 b:SetPoint("TOPRIGHT", buttons[bnum-1], "BOTTOMRIGHT", 0, 0) | 287 b:SetPoint("TOPRIGHT", buttons[bnum-1], "BOTTOMRIGHT", 0, 0) |
| 236 b:SetPoint("TOPLEFT", buttons[bnum-1], "BOTTOMLEFT", 0, 0) | 288 b:SetPoint("TOPLEFT", buttons[bnum-1], "BOTTOMLEFT", 0, 0) |
| 237 end | 289 end |
| 238 end | 290 end |
| 239 UpdateButton(b, l) | 291 UpdateButton(b, l, status.selected == l.value) |
| 240 b:Show() | 292 b:Show() |
| 241 bnum = bnum + 1 | 293 bnum = bnum + 1 |
| 242 end | 294 end |
| 243 end, | 295 end, |
| 244 } | 296 } |
| 290 scrollbg:SetTexture(0,0,0,0.4) | 342 scrollbg:SetTexture(0,0,0,0.4) |
| 291 | 343 |
| 292 local widget = { | 344 local widget = { |
| 293 frame = frame, | 345 frame = frame, |
| 294 lines = {}, | 346 lines = {}, |
| 295 --levels = {}, | |
| 296 buttons = {}, | 347 buttons = {}, |
| 297 localstatus = { | 348 localstatus = { |
| 298 --groups = {}, | 349 --groups = {}, |
| 299 scrollvalue = 0 }, | 350 enabletooltips= false, |
| 300 filter = false, | 351 scrollvalue = 0, |
| 352 }, | |
| 301 slframe = slframe, | 353 slframe = slframe, |
| 302 scrollbar = scrollbar, | 354 scrollbar = scrollbar, |
| 303 type = Type | 355 type = Type |
| 304 } | 356 } |
| 305 if methods then | 357 if methods then |
