Mercurial > wow > breuesk
comparison Core.lua @ 1:21c58930f74e
Refactoring
| author | John@Yosemite-PC |
|---|---|
| date | Fri, 02 Mar 2012 22:32:12 -0500 |
| parents | 47fac96968e1 |
| children | 431ddc8bdb4a |
comparison
equal
deleted
inserted
replaced
| 0:47fac96968e1 | 1:21c58930f74e |
|---|---|
| 1 -- ideas: last attended data and/or remove people who haven't attended in X days | 1 -- ideas: last attended data and/or remove people who haven't attended in X days |
| 2 -- and/or just a "remove from all lists" option | 2 -- and/or just a "remove from all lists" option |
| 3 | 3 |
| 4 | 4 |
| 5 -- order of implementation | 5 -- order of implementation |
| 6 -- ( ) lists fully functional (/script interface) | 6 -- (_) lists fully functional (/script interface) |
| 7 -- ( ) lists single-user functional via command line interface | 7 -- (_) lists single-user functional via command line interface |
| 8 -- ( ) all actions should reference the player list | |
| 8 -- ( ) single user + admin gui (manual suicides) | 9 -- ( ) single user + admin gui (manual suicides) |
| 9 -- ( ) single user + admin gui (master loot) | 10 -- ( ) single user + admin gui (master loot) |
| 10 -- ( ) communication and list trimming | 11 -- ( ) communication and list trimming |
| 11 -- ( ) admins | 12 -- ( ) admins |
| 12 -- ( ) players gui | 13 -- ( ) players gui |
| 13 -- ( ) crypto / protection against tampering | 14 -- ( ) crypto / protection against tampering |
| 14 -- ( ) alt tracking | 15 -- ( ) alt tracking |
| 15 -- ( ) reserves | 16 -- ( ) reserves |
| 16 | 17 |
| 17 -- important things to remember: | 18 -- important things to remember: |
| 18 -- 1) ipairs iterates from 1 until the first missing int index -> no gaps | 19 -- 1) ipairs iterates from 1 until the first missing int index -> no gaps if int |
| 20 -- indexing | |
| 19 -- 2) a.x === a["x"] | 21 -- 2) a.x === a["x"] |
| 20 -- 3) a["1"] =/= a[1] | 22 -- 3) a["1"] =/= a[1] |
| 21 | 23 |
| 22 bsk = LibStub("AceAddon-3.0"):NewAddon("bsk","AceConsole-3.0", "AceHook-3.0", "AceComm-3.0", "AceSerializer-3.0") | 24 bsk = LibStub("AceAddon-3.0"):NewAddon("bsk","AceConsole-3.0", "AceHook-3.0", "AceComm-3.0", "AceSerializer-3.0") |
| 23 local L = LibStub("AceLocale-3.0"):GetLocale("bsk", false) | 25 local L = LibStub("AceLocale-3.0"):GetLocale("bsk", false) |
| 31 self.options.args.profile = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db) | 33 self.options.args.profile = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db) |
| 32 LibStub("AceConfig-3.0"):RegisterOptionsTable("bsk", self.options) | 34 LibStub("AceConfig-3.0"):RegisterOptionsTable("bsk", self.options) |
| 33 self.optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("bsk", "bsk") | 35 self.optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("bsk", "bsk") |
| 34 | 36 |
| 35 self:RegisterChatCommand("bsk", "HandleCommand") | 37 self:RegisterChatCommand("bsk", "HandleCommand") |
| 36 bsk:CreateWorkingStateFromChanges() | |
| 37 end | 38 end |
| 38 | 39 |
| 39 function bsk:OnEnable() | 40 function bsk:OnEnable() |
| 41 bsk:CreateWorkingStateFromChanges() | |
| 40 --self:HandleCommand() | 42 --self:HandleCommand() |
| 41 end | 43 end |
| 42 | 44 |
| 43 function bsk:HandleCommand(paramIn) | 45 function bsk:HandleCommand(paramIn) |
| 44 local param = { strsplit(" ", paramIn) } | 46 local param = { strsplit(" ", paramIn) } |
| 63 if param[3] == nil or param[3] == "" then | 65 if param[3] == nil or param[3] == "" then |
| 64 bsk:PrintTable(param) | 66 bsk:PrintTable(param) |
| 65 return | 67 return |
| 66 end | 68 end |
| 67 if param[2] == "player" then | 69 if param[2] == "player" then |
| 68 --if param[3] == "all" then | 70 if param[3] == "all" then |
| 69 -- bsk:Pop | 71 bsk:AddMissingPlayers() |
| 70 --else | 72 else |
| 71 local player = FixPlayerName(param[3]) | 73 local player = FixPlayerName(param[3]) |
| 72 bsk:AddPlayer(player) | 74 bsk:AddPlayer(player) |
| 73 --end | 75 end |
| 74 elseif param[2] == "list" then | 76 elseif param[2] == "list" then |
| 75 bsk:CreateList(param[3]) | 77 bsk:CreateList(param[3]) |
| 76 end | 78 end |
| 77 elseif param[1] == "suicide" then | 79 elseif param[1] == "suicide" then |
| 78 if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then | 80 if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then |
| 88 return | 90 return |
| 89 end | 91 end |
| 90 bsk:PrintLists(param[2]) | 92 bsk:PrintLists(param[2]) |
| 91 end | 93 end |
| 92 | 94 |
| 93 -- TODO: add options | |
| 94 -- | |
| 95 -- for now: launch GUI | |
| 96 -- | |
| 97 | |
| 98 --if self.frame == nil then | 95 --if self.frame == nil then |
| 99 --self:CreateGUI() | 96 --self:CreateGUI() |
| 100 --self:ShowGUI() | 97 --self:ShowGUI() |
| 101 --else | 98 --else |
| 102 --self:ShowGUI() | 99 --self:ShowGUI() |
| 103 --end | 100 --end |
| 104 | 101 |
| 105 end | |
| 106 --MULTIBYTE_FIRST_CHAR = "^([\192-\255]?%a?[\128-\191]*)" | |
| 107 --function GetNamePattern(name) | |
| 108 -- local u = name:match(MULTIBYTE_FIRST_CHAR):upper() | |
| 109 | |
| 110 -- if not u or u:len() == 0 then Prat.Print("GetNamePattern: name error", name) return end | |
| 111 -- local l = u:lower() | |
| 112 -- local namepat | |
| 113 -- if u == l then | |
| 114 -- namepat = name:lower() | |
| 115 -- elseif u:len() == 1 then | |
| 116 -- namepat = "["..u..l.."]"..name:sub(2):lower() | |
| 117 -- elseif u:len() > 1 then | |
| 118 -- namepat = "" | |
| 119 -- for i=1,u:len() do | |
| 120 -- namepat = namepat .. "[" .. u:sub(i,i)..l:sub(i,i).."]" | |
| 121 -- end | |
| 122 -- namepat = namepat .. name:sub(u:len()+1) | |
| 123 -- end | |
| 124 -- return "%f[%a\192-\255]"..namepat.."%f[^%a\128-\255]" | |
| 125 --end | |
| 126 --AnyNamePattern = "%f[%a\192-\255]([%a\192-\255]+)%f[^%a\128-\255]" | |
| 127 | |
| 128 | |
| 129 function bsk:CreateGUI() | |
| 130 | |
| 131 -- Create a container frame | |
| 132 self.frame = AceGUI:Create("Frame") | |
| 133 self.frame:SetCallback("OnClose",function(widget) AceGUI:Release(widget) end) | |
| 134 self.frame:SetTitle("BSK") | |
| 135 self.frame:SetLayout("Flow") | |
| 136 self.frame:SetHeight(700) | |
| 137 self.frame:SetWidth(350) | |
| 138 local tab = AceGUI:Create("TabGroup") | |
| 139 tab:SetLayout("Flow") | |
| 140 tab:SetTabs( | |
| 141 { | |
| 142 { | |
| 143 text="Tab 1", | |
| 144 value="tab1" | |
| 145 }, | |
| 146 | |
| 147 { | |
| 148 text="Tab 2", | |
| 149 value="tab2" | |
| 150 }, | |
| 151 { | |
| 152 text="Tab 3", | |
| 153 value="tab3" | |
| 154 }, | |
| 155 { | |
| 156 text="Tab 4", | |
| 157 value="tab4" | |
| 158 } | |
| 159 } | |
| 160 ) | |
| 161 tab.width = "fill" | |
| 162 tab.height = "fill" | |
| 163 | |
| 164 tab:SetCallback("OnGroupSelected",ChangeTab) | |
| 165 tab:SelectTab("tab1") | |
| 166 self.frame:AddChild(tab) | |
| 167 | |
| 168 -- Create a button | |
| 169 --local btn = AceGUI:Create("Button") | |
| 170 --btn:SetWidth(170) | |
| 171 --btn:SetText("Button !") | |
| 172 --btn:SetCallback("OnClick", function() print("Click!") end) | |
| 173 -- Add the button to the container | |
| 174 --self.frame:AddChild(btn) | |
| 175 end | 102 end |
| 176 | 103 |
| 177 bsk.defaults = { | 104 bsk.defaults = { |
| 178 profile = { | 105 profile = { |
| 179 players = {}, | 106 players = {}, |
| 180 changes = {}, | 107 changes = {}, |
| 181 listBase = {} | 108 listBase = {} |
| 182 } | 109 } |
| 183 } | 110 } |
| 184 | 111 |
| 185 bsk.options = { | |
| 186 name= 'bsk', | |
| 187 type = 'group', | |
| 188 args = | |
| 189 { | |
| 190 version = | |
| 191 { | |
| 192 type = "execute", | |
| 193 name = "Version query", | |
| 194 desc = "Check others' versions", | |
| 195 func = function(self) self:Print("TODO") end | |
| 196 } | |
| 197 } | |
| 198 } | |
| 199 function ChangeTab(container, event, group) | |
| 200 container:ReleaseChildren() | |
| 201 if group == "tab2" then | |
| 202 local desc = AceGUI:Create("Label") | |
| 203 desc:SetText("This is Tab 1") | |
| 204 desc:SetFullWidth(true) | |
| 205 container:AddChild(desc) | |
| 206 | 112 |
| 207 local button = AceGUI:Create("Button") | |
| 208 button:SetText("Tab 1 Button") | |
| 209 button:SetWidth(200) | |
| 210 container:AddChild(button) | |
| 211 elseif group == "tab1" then | |
| 212 local item2 = {string="item2!", color = {r=1,g=0,b=0.5} } | |
| 213 local itemList = {"Item1", item2, "Item3", "Item4"} | |
| 214 | |
| 215 local myMultiSelect = AceGUI:Create("MultiSelect") | |
| 216 myMultiSelect:SetLabel("My Multi Select") | |
| 217 myMultiSelect:SetWidth(200) | |
| 218 myMultiSelect:SetHeight(400) | |
| 219 myMultiSelect:SetItemList(itemList) | |
| 220 myMultiSelect:SetMultiSelect(false) | |
| 221 container:AddChild(myMultiSelect) | |
| 222 end | |
| 223 end | |
| 224 | |
| 225 | |
| 226 | |
| 227 | |
| 228 | |
| 229 | |
| 230 | |
| 231 | |
| 232 | |
| 233 | |
| 234 | |
| 235 --[[---------------------------------- | |
| 236 -- MultiSelect widget for AceGUI-3.0 | |
| 237 -- Written by Shirokuma | |
| 238 --]]---------------------------------- | |
| 239 | |
| 240 | |
| 241 --[[----------------- | |
| 242 -- AceGUI | |
| 243 --]]----------------- | |
| 244 --local AceGUI = LibStub("AceGUI-3.0") | |
| 245 | |
| 246 --[[----------------- | |
| 247 -- Lua APIs | |
| 248 --]]----------------- | |
| 249 local format, pairs, tostring = string.format, pairs, tostring | |
| 250 | |
| 251 --[[----------------- | |
| 252 -- WoW APIs | |
| 253 --]]----------------- | |
| 254 local CreateFrame, UIParent = CreateFrame, UIParent | |
| 255 | |
| 256 --[[----------------- | |
| 257 -- Frame Elements | |
| 258 --]]----------------- | |
| 259 local FrameBackdrop = { | |
| 260 bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", | |
| 261 edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", | |
| 262 tile = true, tileSize = 16, edgeSize = 16, | |
| 263 insets = { left = 3, right = 3, top = 3, bottom = 3 } | |
| 264 } | |
| 265 | |
| 266 | |
| 267 --[[----------------- | |
| 268 -- Widget Info | |
| 269 --]]----------------- | |
| 270 local widgetType = "MultiSelect" | |
| 271 local widgetVersion = 1 | |
| 272 | |
| 273 | |
| 274 --[[----------------- | |
| 275 -- Event Code | |
| 276 --]]----------------- | |
| 277 local function Label_OnEnter(label) | |
| 278 local self = label.obj | |
| 279 local value = label | |
| 280 self:Fire("OnLabelEnter", value) | |
| 281 end | |
| 282 | |
| 283 local function Label_OnLeave(label) | |
| 284 local self = label.obj | |
| 285 local value = label | |
| 286 self:Fire("OnLabelEnter", value) | |
| 287 end | |
| 288 | |
| 289 local function Label_OnClick(label) | |
| 290 local self = label.obj | |
| 291 local value = label | |
| 292 self:Fire("OnLabelClick", value) | |
| 293 AceGUI:ClearFocus() | |
| 294 end | |
| 295 | |
| 296 | |
| 297 --[[----------------- | |
| 298 -- MultiSelect Code | |
| 299 --]]----------------- | |
| 300 do | |
| 301 local function OnAcquire(self) -- set up the default size | |
| 302 self:SetWidth(200) | |
| 303 self:SetHeight(400) | |
| 304 end | |
| 305 | |
| 306 local function SetWidth(self, w) -- override the SetWidth function to include the labelframe | |
| 307 self.frame:SetWidth(w) | |
| 308 self.labelframe:SetWidth(w-33) | |
| 309 end | |
| 310 | |
| 311 local function SetLabel(self, text) -- sets the multiselect label text | |
| 312 self.label:SetText(text) | |
| 313 end | |
| 314 | |
| 315 local function SetMultiSelect(self, value) -- set if multiple values can be selected simultaneously | |
| 316 self.multiselect = value | |
| 317 end | |
| 318 | |
| 319 local function AddItem(self, str, color) -- add an item (create a new item label object) | |
| 320 local color = color | |
| 321 local label = CreateFrame("Button", nil, self.labelframe) | |
| 322 label.selected = false | |
| 323 label.obj = self | |
| 324 label:SetHeight(18) | |
| 325 label:SetPoint("TOPLEFT", self.labelframe, "TOPLEFT", 0, -(getn(self.labels) * 18)) | |
| 326 label:SetPoint("TOPRIGHT", self.labelframe, "TOPRIGHT", 0, -(getn(self.labels) * 18)) | |
| 327 self.labels[getn(self.labels) + 1] = label | |
| 328 self.labelframe:SetHeight(getn(self.labels) * 18) | |
| 329 | |
| 330 local text = label:CreateFontString(nil,"OVERLAY","GameFontNormalSmall") | |
| 331 text:SetJustifyH("LEFT") | |
| 332 text:SetPoint("TOPLEFT",label,"TOPLEFT",5,0) | |
| 333 text:SetPoint("BOTTOMRIGHT",label,"BOTTOMRIGHT",-5,0) | |
| 334 if color ~= nil then | |
| 335 text:SetTextColor(color.r,color.g,color.b) | |
| 336 end | |
| 337 text:SetText(str) | |
| 338 label.text = text | |
| 339 | |
| 340 local highlight = label:CreateTexture(nil, "OVERLAY") | |
| 341 highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") | |
| 342 highlight:SetBlendMode("ADD") | |
| 343 highlight:SetHeight(14) | |
| 344 highlight:ClearAllPoints() | |
| 345 highlight:SetPoint("RIGHT",label,"RIGHT",0,0) | |
| 346 highlight:SetPoint("LEFT",label,"LEFT",0,0) | |
| 347 highlight:Hide() | |
| 348 label.highlight = highlight | |
| 349 | |
| 350 label:SetScript("OnEnter", function(this) | |
| 351 this.highlight:Show() | |
| 352 Label_OnEnter(this) | |
| 353 end) | |
| 354 label:SetScript("OnLeave", function(this) | |
| 355 if not this.selected then | |
| 356 this.highlight:Hide() | |
| 357 end | |
| 358 end) | |
| 359 label:SetScript("OnClick", function(this) | |
| 360 if not this.selected then | |
| 361 this.selected = true | |
| 362 if not self.multiselect then | |
| 363 for index, items in pairs(self.labels) do | |
| 364 if self.labels[index] ~= this and self.labels[index].selected then | |
| 365 self.labels[index].selected = false | |
| 366 self.labels[index].highlight:Hide() | |
| 367 end | |
| 368 end | |
| 369 end | |
| 370 else | |
| 371 this.selected = false | |
| 372 end | |
| 373 Label_OnClick(this) | |
| 374 end) | |
| 375 end | |
| 376 | |
| 377 local function GetItem(self, text) -- find an object based on the text parameter | |
| 378 for _, value in pairs(self.labels) do | |
| 379 if value.text:GetText() == text then | |
| 380 return value | |
| 381 end | |
| 382 end | |
| 383 return nil | |
| 384 end | |
| 385 | |
| 386 local function GetText(self, value) -- get the text of a label object | |
| 387 for _,item in pairs(self.labels) do | |
| 388 if value == item then | |
| 389 return item.text:GetText() | |
| 390 end | |
| 391 end | |
| 392 return nil | |
| 393 end | |
| 394 | |
| 395 local function SetText(self, value, text) -- set the text of a label object | |
| 396 for _, item in pairs(self.labels) do | |
| 397 if value == item then | |
| 398 value.text:SetText(text) | |
| 399 end | |
| 400 end | |
| 401 end | |
| 402 | |
| 403 local function IsSelected(self, value) -- return if the label object is currently selected | |
| 404 for _, item in pairs(self.labels) do | |
| 405 if value == item then | |
| 406 return item.selected | |
| 407 end | |
| 408 end | |
| 409 return nil | |
| 410 end | |
| 411 | |
| 412 local function GetSelected(self) -- return a table of the currently selected label objects | |
| 413 local selectedList = {} | |
| 414 for _, item in pairs(self.labels) do | |
| 415 if item.selected then | |
| 416 table.insert(selectedList, item) | |
| 417 end | |
| 418 end | |
| 419 return selectedList | |
| 420 end | |
| 421 | |
| 422 local function SetItemList(self, list) -- create new labels from a list of strings | |
| 423 for _,item in pairs(self.labels) do | |
| 424 item:Hide() | |
| 425 item:ClearAllPoints() | |
| 426 end | |
| 427 | |
| 428 self.labels = {} | |
| 429 | |
| 430 if list then | |
| 431 for _,item in pairs(list) do | |
| 432 if type(item) == "string" then | |
| 433 self:AddItem(item) | |
| 434 elseif type(item) == "table" then | |
| 435 if item.string ~= nil and type(item.string) == "string" then | |
| 436 if item.color ~= nil then | |
| 437 if type(item.color) == "table" and item.color.r ~= nil and item.color.g ~= nil and item.color.b ~= nil then | |
| 438 self:AddItem(item.string, item.color) | |
| 439 else | |
| 440 assert(false and "setitemlist: item.color is set, but nonsense") | |
| 441 end | |
| 442 else | |
| 443 self:AddItem(item.string) | |
| 444 end | |
| 445 else | |
| 446 assert( false and "setitemlist: item is table without .string member") | |
| 447 end | |
| 448 else | |
| 449 assert(false and "SetItemList: nonsense list entry") | |
| 450 end | |
| 451 end | |
| 452 end | |
| 453 end | |
| 454 | |
| 455 local function RemoveItem(self, item) -- delete an item | |
| 456 local function RedrawFrame() | |
| 457 for index,value in pairs(self.labels) do | |
| 458 value:SetPoint("TOPLEFT", self.labelframe, "TOPLEFT", 0, (-(index-1) * 18)) | |
| 459 value:SetPoint("TOPRIGHT", self.labelframe, "TOPRIGHT", 0,(-(index-1) * 18)) | |
| 460 end | |
| 461 end | |
| 462 | |
| 463 for index, value in pairs(self.labels) do | |
| 464 if value == item then | |
| 465 table.remove(self.labels, index) | |
| 466 item:Hide() | |
| 467 item:ClearAllPoints() | |
| 468 RedrawFrame() | |
| 469 end | |
| 470 end | |
| 471 end | |
| 472 | |
| 473 local function SetSelected(self, item, value) | |
| 474 if value then | |
| 475 if not self.multiselect then -- test | |
| 476 for _, value in pairs(self.labels) do | |
| 477 value.selected = false | |
| 478 value.highlight:Hide() | |
| 479 end | |
| 480 end | |
| 481 item.selected = true | |
| 482 item.highlight:Show() | |
| 483 else | |
| 484 item.selected = false | |
| 485 item.highlight:Hide() | |
| 486 end | |
| 487 end | |
| 488 | |
| 489 local function Constructor() -- widget constructor | |
| 490 local frame = CreateFrame("Frame", nil, UIParent) | |
| 491 local backdrop = CreateFrame("Frame", nil, frame) | |
| 492 local self = {} | |
| 493 local labels = {} | |
| 494 | |
| 495 self.type = widgetType | |
| 496 self.frame = frame | |
| 497 self.backdrop = backdrop | |
| 498 self.labels = {} | |
| 499 self.multiselect = true | |
| 500 frame.obj = self | |
| 501 | |
| 502 local label = frame:CreateFontString(nil,"OVERLAY","GameFontNormalSmall") | |
| 503 label:SetJustifyH("LEFT") | |
| 504 label:SetPoint("TOPLEFT", 5, 0) | |
| 505 label:SetPoint("TOPRIGHT", -5, 0) | |
| 506 label:SetHeight(14) | |
| 507 label:SetText("MultiSelect") | |
| 508 self.label = label | |
| 509 | |
| 510 backdrop:SetBackdrop(FrameBackdrop) | |
| 511 backdrop:SetBackdropColor(0, 0, 0) | |
| 512 backdrop:SetBackdropBorderColor(0.4, 0.4, 0.4) | |
| 513 backdrop:SetPoint("TOPLEFT", frame, "TOPLEFT", 5, -14) | |
| 514 backdrop:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -5, 0) | |
| 515 | |
| 516 local scrollframe = CreateFrame("ScrollFrame", format("%s@%s@%s", widgetType, "ScrollFrame", tostring(self)), frame, "UIPanelScrollFrameTemplate") | |
| 517 scrollframe:SetPoint("TOPLEFT", backdrop, "TOPLEFT", 5, -6) | |
| 518 scrollframe:SetPoint("BOTTOMRIGHT", backdrop, "BOTTOMRIGHT", -28, 6) | |
| 519 scrollframe.obj = self | |
| 520 self.scrollframe = scrollframe | |
| 521 | |
| 522 local labelframe = CreateFrame("Frame", nil, scrollframe) | |
| 523 labelframe:SetAllPoints() | |
| 524 labelframe.obj = self | |
| 525 scrollframe:SetScrollChild(labelframe) | |
| 526 self.labelframe = labelframe | |
| 527 | |
| 528 -- method listing | |
| 529 self.OnAcquire = OnAcquire | |
| 530 self.SetLabel = SetLabel | |
| 531 self.AddItem = AddItem | |
| 532 self.SetWidth = SetWidth | |
| 533 self.SetMultiSelect = SetMultiSelect | |
| 534 self.SetItemList = SetItemList | |
| 535 self.GetItem = GetItem | |
| 536 self.RemoveItem = RemoveItem | |
| 537 self.GetText = GetText | |
| 538 self.SetText = SetText | |
| 539 self.IsSelected = IsSelected | |
| 540 self.GetSelected = GetSelected | |
| 541 self.SetSelected = SetSelected | |
| 542 | |
| 543 AceGUI:RegisterAsWidget(self) | |
| 544 return self | |
| 545 end | |
| 546 AceGUI:RegisterWidgetType(widgetType, Constructor, widgetVersion) | |
| 547 end | |
| 548 |
