Mercurial > wow > breuesk
comparison SelectorList.lua @ 53:708d8a423b4c
Scroller functional
| author | John@Yosemite-PC |
|---|---|
| date | Sat, 24 Mar 2012 14:22:01 -0400 |
| parents | 7c7e80f63b51 |
| children | c8c17286af95 |
comparison
equal
deleted
inserted
replaced
| 52:7c7e80f63b51 | 53:708d8a423b4c |
|---|---|
| 30 end | 30 end |
| 31 end | 31 end |
| 32 | 32 |
| 33 local DEFAULT_SL_WIDTH = 175 | 33 local DEFAULT_SL_WIDTH = 175 |
| 34 --local DEFAULT_TREE_SIZABLE = true | 34 --local DEFAULT_TREE_SIZABLE = true |
| 35 | |
| 36 local function SL_OnMouseWheel(frame, delta) | |
| 37 local self = frame.obj | |
| 38 if self.showscroll then | |
| 39 local scrollbar = self.scrollbar | |
| 40 local min, max = scrollbar:GetMinMaxValues() | |
| 41 local value = scrollbar:GetValue() | |
| 42 local newvalue = math_min(max,math_max(min,value - delta)) | |
| 43 if value ~= newvalue then | |
| 44 scrollbar:SetValue(newvalue) | |
| 45 end | |
| 46 end | |
| 47 end | |
| 48 | |
| 49 local function OnScrollValueChanged(frame, value) | |
| 50 if frame.obj.noupdate then return end | |
| 51 local self = frame.obj | |
| 52 local status = self.status or self.localstatus | |
| 53 status.scrollvalue = value | |
| 54 self:Refresh() | |
| 55 AceGUI:ClearFocus() | |
| 56 end | |
| 57 | |
| 35 | 58 |
| 36 | 59 |
| 37 local function Layout(self) | 60 local function Layout(self) |
| 38 self:SetHeight(self.numlines * 18 + 20) | 61 self:SetHeight(self.numlines * 18 + 20) |
| 39 | 62 |
| 112 button.icon:SetTexCoord(0, 1, 0, 1) | 135 button.icon:SetTexCoord(0, 1, 0, 1) |
| 113 end | 136 end |
| 114 end | 137 end |
| 115 | 138 |
| 116 | 139 |
| 140 | |
| 117 local methods = { | 141 local methods = { |
| 118 | 142 |
| 119 ["OnAcquire"] = function(self) | 143 ["OnAcquire"] = function(self) |
| 120 self:SetWidth(DEFAULT_SL_WIDTH) | 144 self:SetWidth(DEFAULT_SL_WIDTH) |
| 121 self:SetNumLines() | 145 self:SetNumLines() |
| 135 end | 159 end |
| 136 self.numlines = value | 160 self.numlines = value |
| 137 Layout(self) | 161 Layout(self) |
| 138 end, | 162 end, |
| 139 ["SetList"] = function(self, list) | 163 ["SetList"] = function(self, list) |
| 164 self.lines = {} | |
| 140 for i,v in ipairs(list) do | 165 for i,v in ipairs(list) do |
| 141 self.lines[i] = v | 166 self.lines[i] = v |
| 142 end | 167 end |
| 143 self:Refresh() | 168 self:Refresh() |
| 144 end, | 169 end, |
| 170 | |
| 171 ["ShowScroll"] = function(self, show) | |
| 172 self.showscroll = show | |
| 173 if show then | |
| 174 self.scrollbar:Show() | |
| 175 if self.buttons[1] then | |
| 176 self.buttons[1]:SetPoint("TOPRIGHT", self.slframe,"TOPRIGHT",-22,-10) | |
| 177 end | |
| 178 else | |
| 179 self.scrollbar:Hide() | |
| 180 if self.buttons[1] then | |
| 181 self.buttons[1]:SetPoint("TOPRIGHT", self.slframe,"TOPRIGHT",0,-10) | |
| 182 end | |
| 183 end | |
| 184 end, | |
| 185 | |
| 145 ["Refresh"] = function(self) | 186 ["Refresh"] = function(self) |
| 146 local f = self.slframe | 187 local f = self.slframe |
| 147 local buttons = self.buttons | 188 local buttons = self.buttons |
| 148 local lines = self.lines | 189 local lines = self.lines |
| 190 local status = self.status or self.localstatus | |
| 191 | |
| 192 for i, v in ipairs(buttons) do | |
| 193 v:Hide() | |
| 194 end | |
| 195 local numlines = #lines | |
| 196 local maxlines = self.numlines | |
| 197 | |
| 198 if numlines <= maxlines then | |
| 199 status.scrollvalue = 0 | |
| 200 self:ShowScroll(false) | |
| 201 first, last = 1, numlines | |
| 202 else | |
| 203 self:ShowScroll(true) | |
| 204 self.noupdate = true | |
| 205 self.scrollbar:SetMinMaxValues(0, numlines - maxlines) | |
| 206 if numlines - status.scrollvalue < maxlines then | |
| 207 status.scrollvalue = numlines - maxlines | |
| 208 end | |
| 209 self.noupdate = nil | |
| 210 first, last = status.scrollvalue+1, status.scrollvalue + maxlines | |
| 211 | |
| 212 if self.scrollbar:GetValue() ~= status.scrollvalue then | |
| 213 self.scrollbar:SetValue(status.scrollvalue) | |
| 214 end | |
| 215 end | |
| 149 | 216 |
| 150 local bnum = 1 | 217 local bnum = 1 |
| 151 for i=1,self.numlines do | 218 for i= first, last do |
| 152 local l = lines[i] | 219 local l = lines[i] |
| 153 if not l then | |
| 154 break | |
| 155 end | |
| 156 local b = buttons[bnum] | 220 local b = buttons[bnum] |
| 157 if not b then | 221 if not b then |
| 158 b = CreateButton(self) | 222 b = CreateButton(self) |
| 159 buttons[bnum] = b | 223 buttons[bnum] = b |
| 160 b:SetParent(f) | 224 b:SetParent(f) |
| 161 b:SetFrameLevel(f:GetFrameLevel()+1) | 225 b:SetFrameLevel(f:GetFrameLevel()+1) |
| 162 b:ClearAllPoints() | 226 b:ClearAllPoints() |
| 163 if bnum == 1 then | 227 if bnum == 1 then |
| 164 -- todo: if scroll ... | 228 if self.showscroll then |
| 229 b:SetPoint("TOPRIGHT",-22,-10) | |
| 230 else | |
| 231 b:SetPoint("TOPRIGHT",0,-10) | |
| 232 end | |
| 165 b:SetPoint("TOPLEFT",0,-10) | 233 b:SetPoint("TOPLEFT",0,-10) |
| 166 b:SetPoint("TOPRIGHT",0,-10) | |
| 167 else | 234 else |
| 168 b:SetPoint("TOPRIGHT", buttons[bnum-1], "BOTTOMRIGHT", 0, 0) | 235 b:SetPoint("TOPRIGHT", buttons[bnum-1], "BOTTOMRIGHT", 0, 0) |
| 169 b:SetPoint("TOPLEFT", buttons[bnum-1], "BOTTOMLEFT", 0, 0) | 236 b:SetPoint("TOPLEFT", buttons[bnum-1], "BOTTOMLEFT", 0, 0) |
| 170 end | 237 end |
| 171 end | 238 end |
| 195 local num = AceGUI:GetNextWidgetNum(Type) | 262 local num = AceGUI:GetNextWidgetNum(Type) |
| 196 local frame = CreateFrame("Frame", nil, UIParent) | 263 local frame = CreateFrame("Frame", nil, UIParent) |
| 197 | 264 |
| 198 local slframe = CreateFrame("Frame", nil, frame) | 265 local slframe = CreateFrame("Frame", nil, frame) |
| 199 slframe:SetAllPoints() | 266 slframe:SetAllPoints() |
| 200 --slframe:SetPoint("TOPLEFT") | |
| 201 --slframe:SetPoint("BOTTOMLEFT") | |
| 202 --slframe:SetWidth(DEFAULT_SL_WIDTH) | |
| 203 --slframe:SetHeight(DEFAULT_SL_WIDTH) -- todo | |
| 204 slframe:EnableMouseWheel(true) | 267 slframe:EnableMouseWheel(true) |
| 205 slframe:SetBackdrop(PaneBackdrop) | 268 slframe:SetBackdrop(PaneBackdrop) |
| 206 slframe:SetBackdropColor(0.1, 0.1, 0.1, 0.5) | 269 slframe:SetBackdropColor(0.1, 0.1, 0.1, 0.5) |
| 207 slframe:SetBackdropBorderColor(0.4, 0.4, 0.4) | 270 slframe:SetBackdropBorderColor(0.4, 0.4, 0.4) |
| 208 --slframe:SetResizable(true) | 271 --slframe:SetResizable(true) |
| 209 --slframe:SetMinResize(100, 1) | 272 --slframe:SetMinResize(100, 1) |
| 210 --slframe:SetMaxResize(400, 1600) | 273 --slframe:SetMaxResize(400, 1600) |
| 211 --slframe:SetScript("OnUpdate", FirstFrameUpdate) | 274 --slframe:SetScript("OnUpdate", FirstFrameUpdate) |
| 212 --slframe:SetScript("OnSizeChanged", Tree_OnSizeChanged) | 275 --slframe:SetScript("OnSizeChanged", Tree_OnSizeChanged) |
| 213 --slframe:SetScript("OnMouseWheel", Tree_OnMouseWheel) | 276 slframe:SetScript("OnMouseWheel", SL_OnMouseWheel) |
| 214 | 277 |
| 215 --local scrollbar = CreateFrame("Slider", ("AceConfigDialogTreeGroup%dScrollBar"):format(num), slframe, "UIPanelScrollBarTemplate") | 278 local scrollbar = CreateFrame("Slider", ("SelectorList%dScrollBar"):format(num), slframe, "UIPanelScrollBarTemplate") |
| 216 --scrollbar:SetScript("OnValueChanged", nil) | 279 scrollbar:SetScript("OnValueChanged", nil) |
| 217 --scrollbar:SetPoint("TOPRIGHT", -10, -26) | 280 scrollbar:SetPoint("TOPRIGHT", -10, -26) |
| 218 --scrollbar:SetPoint("BOTTOMRIGHT", -10, 26) | 281 scrollbar:SetPoint("BOTTOMRIGHT", -10, 26) |
| 219 --scrollbar:SetMinMaxValues(0,0) | 282 scrollbar:SetMinMaxValues(0,0) |
| 220 --scrollbar:SetValueStep(1) | 283 scrollbar:SetValueStep(1) |
| 221 --scrollbar:SetValue(0) | 284 scrollbar:SetValue(0) |
| 222 --scrollbar:SetWidth(16) | 285 scrollbar:SetWidth(16) |
| 223 --scrollbar:SetScript("OnValueChanged", OnScrollValueChanged) | 286 scrollbar:SetScript("OnValueChanged", OnScrollValueChanged) |
| 224 | 287 |
| 225 --local scrollbg = scrollbar:CreateTexture(nil, "BACKGROUND") | 288 local scrollbg = scrollbar:CreateTexture(nil, "BACKGROUND") |
| 226 --scrollbg:SetAllPoints(scrollbar) | 289 scrollbg:SetAllPoints(scrollbar) |
| 227 --scrollbg:SetTexture(0,0,0,0.4) | 290 scrollbg:SetTexture(0,0,0,0.4) |
| 228 | |
| 229 --local border = CreateFrame("Frame",nil,frame) | |
| 230 --border:SetPoint("TOPLEFT", slframe, "TOPRIGHT") | |
| 231 --border:SetPoint("BOTTOMRIGHT") | |
| 232 --border:SetBackdrop(PaneBackdrop) | |
| 233 --border:SetBackdropColor(0.1, 0.1, 0.1, 0.5) | |
| 234 --border:SetBackdropBorderColor(0.4, 0.4, 0.4) | |
| 235 | |
| 236 ----Container Support | |
| 237 --local content = CreateFrame("Frame", nil, border) | |
| 238 --content:SetPoint("TOPLEFT", 10, -10) | |
| 239 --content:SetPoint("BOTTOMRIGHT", -10, 10) | |
| 240 | 291 |
| 241 local widget = { | 292 local widget = { |
| 242 frame = frame, | 293 frame = frame, |
| 243 lines = {}, | 294 lines = {}, |
| 244 --levels = {}, | 295 --levels = {}, |
| 245 buttons = {}, | 296 buttons = {}, |
| 246 --hasChildren = {}, | |
| 247 localstatus = { | 297 localstatus = { |
| 248 --groups = {}, | 298 --groups = {}, |
| 249 scrollvalue = 0 }, | 299 scrollvalue = 0 }, |
| 250 filter = false, | 300 filter = false, |
| 251 slframe = slframe, | 301 slframe = slframe, |
| 252 --dragger = dragger, | 302 scrollbar = scrollbar, |
| 253 --scrollbar = scrollbar, | |
| 254 --border = border, | |
| 255 --content = slframe, -- content is for containers | |
| 256 type = Type | 303 type = Type |
| 257 } | 304 } |
| 258 if methods then | 305 if methods then |
| 259 for method, func in pairs(methods) do | 306 for method, func in pairs(methods) do |
| 260 widget[method] = func | 307 widget[method] = func |
| 261 end | 308 end |
| 262 end | 309 end |
| 263 slframe.obj = widget | 310 slframe.obj = widget |
| 264 --dragger.obj = widget | 311 scrollbar.obj = widget |
| 265 --scrollbar.obj = widget | |
| 266 | 312 |
| 267 return AceGUI:RegisterAsWidget(widget) | 313 return AceGUI:RegisterAsWidget(widget) |
| 268 end | 314 end |
| 269 | 315 |
| 270 AceGUI:RegisterWidgetType(Type, Constructor, Version) | 316 AceGUI:RegisterWidgetType(Type, Constructor, Version) |
