Mercurial > wow > inventory
comparison Frames.lua @ 132:8460855e3d90
Rewrote queueing module to insert a GUI.
Minor mover window changes.
| author | Zerotorescue |
|---|---|
| date | Tue, 18 Jan 2011 00:30:15 +0100 |
| parents | dc6f405c1a5d |
| children | 5ed50feddeb0 |
comparison
equal
deleted
inserted
replaced
| 131:a27948591159 | 132:8460855e3d90 |
|---|---|
| 2 | 2 |
| 3 local function ShowTooltip(self) | 3 local function ShowTooltip(self) |
| 4 -- If this function is called from a widget, self is the widget and self.frame the actual frame | 4 -- If this function is called from a widget, self is the widget and self.frame the actual frame |
| 5 local this = self.frame or self; | 5 local this = self.frame or self; |
| 6 | 6 |
| 7 if not this.tooltipTitle then return; end | 7 if not this.tooltipTitle or addon.db.profile.defaults.hideHelp then return; end |
| 8 | 8 |
| 9 GameTooltip:SetOwner(this, "ANCHOR_NONE"); | 9 GameTooltip:SetOwner(this, "ANCHOR_NONE"); |
| 10 if this.tooltipLocation and this.tooltipLocation == "BOTTOM" then | 10 if this.tooltipLocation and this.tooltipLocation == "BOTTOM" then |
| 11 GameTooltip:SetPoint("TOP", this, "BOTTOM"); | 11 GameTooltip:SetPoint("TOP", this, "BOTTOM"); |
| 12 else | 12 else |
| 24 local function HideTooltip() | 24 local function HideTooltip() |
| 25 GameTooltip:Hide(); | 25 GameTooltip:Hide(); |
| 26 end | 26 end |
| 27 | 27 |
| 28 function addon:CreateMoverFrame() | 28 function addon:CreateMoverFrame() |
| 29 if InventoriumItemMover then | |
| 30 return; | |
| 31 end | |
| 32 | |
| 29 local frameWidth = 400; | 33 local frameWidth = 400; |
| 30 | 34 |
| 31 -- Main window | 35 -- Main window |
| 32 local frame = CreateFrame("Frame", "InventoriumItemMover", UIParent); | 36 local frame = CreateFrame("Frame", "InventoriumItemMover", UIParent); |
| 33 -- Hide by default | 37 -- Hide by default |
| 134 lblDescription:SetJustifyV("TOP"); | 138 lblDescription:SetJustifyV("TOP"); |
| 135 | 139 |
| 136 frame.lblDescription = lblDescription; | 140 frame.lblDescription = lblDescription; |
| 137 | 141 |
| 138 -- Buttons | 142 -- Buttons |
| 139 -- Move (proceed) | 143 -- Proceed |
| 140 local btnMove = CreateFrame("Button", "$parentProceed", frame, "UIPanelButtonTemplate"); | 144 local btnProceed = CreateFrame("Button", "$parentProceed", frame, "UIPanelButtonTemplate"); |
| 141 btnMove:SetHeight(21); | 145 btnProceed:SetHeight(21); |
| 142 btnMove:SetWidth(125); | 146 btnProceed:SetWidth(125); |
| 143 btnMove:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 15, 11); | 147 btnProceed:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 15, 11); |
| 144 btnMove:SetText("Move Items"); | 148 btnProceed:SetScript("OnClick", function(this) this.OnClick(this); end); |
| 145 btnMove:SetScript("OnClick", function(this) this.OnClick(this); end); | 149 btnProceed:SetScript("OnEnter", ShowTooltip); |
| 146 btnMove:SetScript("OnEnter", ShowTooltip); | 150 btnProceed:SetScript("OnLeave", HideTooltip); |
| 147 btnMove:SetScript("OnLeave", HideTooltip); | 151 |
| 148 | 152 frame.btnProceed = btnProceed; |
| 149 frame.btnMove = btnMove; | |
| 150 | 153 |
| 151 -- Cancel | 154 -- Cancel |
| 152 local btnCancel = CreateFrame("Button", "$parentCancel", frame, "UIPanelButtonTemplate"); | 155 local btnCancel = CreateFrame("Button", "$parentCancel", frame, "UIPanelButtonTemplate"); |
| 153 btnCancel:SetHeight(21); | 156 btnCancel:SetHeight(21); |
| 154 btnCancel:SetWidth(125); | 157 btnCancel:SetWidth(125); |
| 167 | 170 |
| 168 frame.frmMeasureDummy = frmMeasureDummy; | 171 frame.frmMeasureDummy = frmMeasureDummy; |
| 169 | 172 |
| 170 -- Scrolling table with a list of items to be moved | 173 -- Scrolling table with a list of items to be moved |
| 171 local ScrollingTable = LibStub("ScrollingTable"); | 174 local ScrollingTable = LibStub("ScrollingTable"); |
| 172 local table = ScrollingTable:CreateST({}, 4, 15, nil, frame); -- inserting a dummy cols, real cols to be set in SetFrameSettings | 175 local scrollTable = ScrollingTable:CreateST({}, 4, 15, nil, frame); -- inserting a dummy cols, real cols to be set in SetFrameSettings |
| 173 table.frame:SetPoint("TOP", frame.lblDescription, "BOTTOM", 0, -18); | 176 scrollTable.frame:SetPoint("TOP", frame.lblDescription, "BOTTOM", 0, -18); |
| 174 table.frame:SetPoint("LEFT", frame, "LEFT", 15, 0); | 177 scrollTable.frame:SetPoint("LEFT", frame, "LEFT", 15, 0); |
| 175 table.frame:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -15, 35); | 178 scrollTable.frame:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -15, 35); |
| 176 -- When moving over a row, provide a tooltip for the item | 179 -- When moving over a row, provide a tooltip for the item |
| 177 table:RegisterEvents({ | 180 scrollTable:RegisterEvents({ |
| 178 ["OnEnter"] = function(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...) | 181 ["OnEnter"] = function(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...) |
| 179 if row and realrow then | 182 if row and realrow then |
| 180 -- Data row | 183 -- Data row |
| 181 | 184 |
| 182 if data[realrow] and data[realrow].rowData and data[realrow].rowData.itemId then | 185 if data[realrow] and data[realrow].rowData and data[realrow].rowData.itemId then |
| 203 ["OnLeave"] = function(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...) | 206 ["OnLeave"] = function(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...) |
| 204 HideTooltip(); | 207 HideTooltip(); |
| 205 end, | 208 end, |
| 206 }); | 209 }); |
| 207 | 210 |
| 208 frame.scrollTable = table; | 211 frame.scrollTable = scrollTable; |
| 209 | 212 |
| 210 -- Change the amount of displayed rows based on the size of the frame | 213 -- Change the amount of displayed rows based on the size of the frame |
| 211 frame.AdjustScrollTableRows = function(this) | 214 frame.AdjustScrollTableRows = function(this) |
| 212 local newRows = math.floor(( this.frmMeasureDummy:GetHeight() - 5 ) / 15); | 215 local newRows = math.floor(( this.frmMeasureDummy:GetHeight() - 5 ) / 15); |
| 213 newRows = (newRows < 4 and 4) or newRows; | 216 newRows = (newRows < 4 and 4) or newRows; |
| 221 InventoriumItemMover.scrollTable:SetData(data); | 224 InventoriumItemMover.scrollTable:SetData(data); |
| 222 | 225 |
| 223 InventoriumItemMover:Show(); | 226 InventoriumItemMover:Show(); |
| 224 end | 227 end |
| 225 | 228 |
| 226 function addon:SetFrameSettings(title, description, proceed, cancel, headers) | 229 function addon:SetMoverFrameSettings(title, description, proceed, cancel, headers) |
| 227 local frame = InventoriumItemMover; | 230 local frame = InventoriumItemMover; |
| 228 | 231 |
| 229 frame.lblTitle:SetText(title); | 232 frame.lblTitle:SetText(title); |
| 230 -- Adjust size for the title background | 233 -- Adjust size for the title background |
| 231 frame.titleBackground:SetWidth((frame.lblTitle:GetWidth() or 0) + 10); -- 10 pixels margin | 234 frame.titleBackground:SetWidth((frame.lblTitle:GetWidth() or 0) + 10); -- 10 pixels margin |
| 232 | 235 |
| 233 frame.lblDescription:SetText(description); | 236 frame.lblDescription:SetText(description); |
| 234 | 237 |
| 235 frame.btnMove:SetText(proceed.text); | 238 frame.btnProceed:SetText(proceed.text); |
| 236 frame.btnMove.tooltipTitle = proceed.tooltipTitle; | 239 frame.btnProceed.tooltipTitle = proceed.tooltipTitle; |
| 237 frame.btnMove.tooltip = proceed.tooltip; | 240 frame.btnProceed.tooltip = proceed.tooltip; |
| 238 frame.btnMove.OnClick = proceed.onClick; | 241 frame.btnProceed.OnClick = proceed.onClick; |
| 239 | 242 |
| 240 frame.btnCancel:SetText(cancel.text); | 243 frame.btnCancel:SetText(cancel.text); |
| 241 frame.btnCancel.tooltipTitle = cancel.tooltipTitle; | 244 frame.btnCancel.tooltipTitle = cancel.tooltipTitle; |
| 242 frame.btnCancel.tooltip = cancel.tooltip; | 245 frame.btnCancel.tooltip = cancel.tooltip; |
| 243 frame.btnCancel.OnClick = cancel.onClick; | 246 frame.btnCancel.OnClick = cancel.onClick; |
| 244 | 247 |
| 245 frame.scrollTable:SetDisplayCols(headers); | 248 frame.scrollTable:SetDisplayCols(headers); |
| 246 end | 249 end |
| 250 | |
| 251 function addon:CreateQueueFrame() | |
| 252 if InventoriumQueuer then | |
| 253 return; | |
| 254 end | |
| 255 | |
| 256 do | |
| 257 local frameWidth = 400; | |
| 258 | |
| 259 -- Main window | |
| 260 local frame = CreateFrame("Frame", "InventoriumQueuer", UIParent); | |
| 261 -- Hide by default | |
| 262 frame:Hide(); | |
| 263 -- Center the frame (will be adjusted later) | |
| 264 frame:SetPoint("CENTER", UIParent, "CENTER", 0, 0); | |
| 265 -- Put in front of other windows | |
| 266 frame:SetFrameStrata("FULLSCREEN_DIALOG"); | |
| 267 frame:SetToplevel(true); | |
| 268 -- Give it a size | |
| 269 frame:SetWidth(frameWidth); | |
| 270 frame:SetHeight(430); | |
| 271 -- Background | |
| 272 frame:SetBackdrop({ | |
| 273 bgFile = "Interface\\ChatFrame\\ChatFrameBackground", | |
| 274 edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", | |
| 275 edgeSize = 20, | |
| 276 insets = { | |
| 277 left = 5, | |
| 278 right = 5, | |
| 279 top = 5, | |
| 280 bottom = 5, | |
| 281 }, | |
| 282 }); | |
| 283 frame:SetBackdropColor(0, 0, 0, .8); | |
| 284 -- Mouse functions | |
| 285 frame:EnableMouse(); | |
| 286 frame:SetMovable(true); | |
| 287 -- Set event handlers | |
| 288 frame:SetScript("OnMouseUp", function(this) this:StopMovingOrSizing(); end); | |
| 289 frame:SetScript("OnShow", function(this) | |
| 290 this:AdjustScrollTableRows(); | |
| 291 end); | |
| 292 | |
| 293 -- Title (AceGUI frame-widget-title used as example) | |
| 294 local titleBackground = frame:CreateTexture(nil, "OVERLAY"); | |
| 295 titleBackground:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header"); | |
| 296 titleBackground:SetTexCoord(0.31, 0.67, 0, 0.63); | |
| 297 titleBackground:SetPoint("TOP", 0, 12); | |
| 298 titleBackground:SetWidth(150); | |
| 299 titleBackground:SetHeight(40); | |
| 300 | |
| 301 frame.titleBackground = titleBackground; | |
| 302 | |
| 303 local titleBackgroundLeft = frame:CreateTexture(nil, "OVERLAY"); | |
| 304 titleBackgroundLeft:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header"); | |
| 305 titleBackgroundLeft:SetTexCoord(0.21, 0.31, 0, 0.63); | |
| 306 titleBackgroundLeft:SetPoint("RIGHT", titleBackground, "LEFT"); | |
| 307 titleBackgroundLeft:SetWidth(30); | |
| 308 titleBackgroundLeft:SetHeight(40); | |
| 309 | |
| 310 local titleBackgroundRight = frame:CreateTexture(nil, "OVERLAY"); | |
| 311 titleBackgroundRight:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header"); | |
| 312 titleBackgroundRight:SetTexCoord(0.67, 0.77, 0, 0.63); | |
| 313 titleBackgroundRight:SetPoint("LEFT", titleBackground, "RIGHT"); | |
| 314 titleBackgroundRight:SetWidth(30); | |
| 315 titleBackgroundRight:SetHeight(40); | |
| 316 | |
| 317 local frmTitle = CreateFrame("Frame", nil, frame); | |
| 318 frmTitle:EnableMouse(true); | |
| 319 frmTitle:SetScript("OnMouseDown", function(this) this:GetParent():StartMoving(); end); | |
| 320 frmTitle:SetScript("OnMouseUp", function(this) this:GetParent():StopMovingOrSizing(); end); | |
| 321 frmTitle:SetAllPoints(titleBackground); | |
| 322 | |
| 323 local lblTitle = frmTitle:CreateFontString(nil, "OVERLAY", "GameFontNormal"); | |
| 324 lblTitle:SetPoint("TOP", titleBackground, "TOP", 0, -14); | |
| 325 | |
| 326 frame.lblTitle = lblTitle; | |
| 327 | |
| 328 -- Expand button | |
| 329 local btnExpander = CreateFrame("Button", "$parentExpander", frame); | |
| 330 btnExpander:SetWidth(32); | |
| 331 btnExpander:SetHeight(32); | |
| 332 btnExpander:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -10, -10); | |
| 333 btnExpander:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Up"); | |
| 334 btnExpander:SetPushedTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Down"); | |
| 335 btnExpander:SetDisabledTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Disabled"); | |
| 336 btnExpander:SetHighlightTexture("Interface\\Buttons\\UI-Common-MouseHilight", "ADD"); | |
| 337 btnExpander.tooltipTitle = "Show unqueueables"; | |
| 338 btnExpander.tooltip = "Click to show a list of all unqueueable but tracked items."; | |
| 339 btnExpander:SetScript("OnEnter", ShowTooltip); | |
| 340 btnExpander:SetScript("OnLeave", HideTooltip); | |
| 341 btnExpander:SetScript("OnClick", function(this) | |
| 342 if this.Expanded then | |
| 343 -- Collapsing | |
| 344 this.Expanded = nil; | |
| 345 InventoriumQueuerUnqueueables:Hide(); | |
| 346 PlaySound("igCharacterInfoClose"); | |
| 347 | |
| 348 -- Next is an expand | |
| 349 this:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Up"); | |
| 350 this:SetPushedTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Down"); | |
| 351 this:SetDisabledTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Disabled"); | |
| 352 else | |
| 353 -- Expanding | |
| 354 this.Expanded = true; | |
| 355 | |
| 356 -- Position the frame against the queuer window | |
| 357 InventoriumQueuerUnqueueables:ClearAllPoints(); | |
| 358 InventoriumQueuerUnqueueables:SetPoint("TOPLEFT", this:GetParent(), "TOPRIGHT", 0, 0); | |
| 359 InventoriumQueuerUnqueueables:SetPoint("BOTTOMLEFT", this:GetParent(), "BOTTOMLEFT", 0, 0); | |
| 360 InventoriumQueuerUnqueueables:Show(); | |
| 361 PlaySound("igCharacterInfoOpen"); | |
| 362 | |
| 363 -- Next is a collapse | |
| 364 this:SetNormalTexture("Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Up"); | |
| 365 this:SetPushedTexture("Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Down"); | |
| 366 this:SetDisabledTexture("Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Disabled"); | |
| 367 end | |
| 368 end); | |
| 369 | |
| 370 -- Description | |
| 371 local lblDescription = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal"); | |
| 372 lblDescription:SetPoint("TOPLEFT", frame, "TOPLEFT", 15, -27); | |
| 373 lblDescription:SetPoint("RIGHT", btnExpander, "LEFT", -15, 0); | |
| 374 lblDescription:SetJustifyH("LEFT"); | |
| 375 lblDescription:SetJustifyV("TOP"); | |
| 376 lblDescription:SetWidth(frameWidth - 70); | |
| 377 | |
| 378 frame.lblDescription = lblDescription; | |
| 379 | |
| 380 -- Buttons | |
| 381 -- Proceed | |
| 382 local btnProceed = CreateFrame("Button", "$parentProceed", frame, "UIPanelButtonTemplate"); | |
| 383 btnProceed:SetHeight(21); | |
| 384 btnProceed:SetWidth(125); | |
| 385 btnProceed:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 15, 11); | |
| 386 btnProceed:SetScript("OnClick", function(this) this.OnClick(this); end); | |
| 387 btnProceed:SetScript("OnEnter", ShowTooltip); | |
| 388 btnProceed:SetScript("OnLeave", HideTooltip); | |
| 389 | |
| 390 frame.btnProceed = btnProceed; | |
| 391 | |
| 392 -- Cancel | |
| 393 local btnCancel = CreateFrame("Button", "$parentCancel", frame, "UIPanelButtonTemplate"); | |
| 394 btnCancel:SetHeight(21); | |
| 395 btnCancel:SetWidth(125); | |
| 396 btnCancel:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -15, 11); | |
| 397 btnCancel:SetScript("OnClick", function(this) this.OnClick(this); end); | |
| 398 btnCancel:SetScript("OnEnter", ShowTooltip); | |
| 399 btnCancel:SetScript("OnLeave", HideTooltip); | |
| 400 | |
| 401 frame.btnCancel = btnCancel; | |
| 402 | |
| 403 -- Because the scrolling table code-behind will change the scrolltable element's height, we can't rely on that. Make a dummy frame which we can measure | |
| 404 local frmMeasureDummy = CreateFrame("Frame", nil, frame); | |
| 405 frmMeasureDummy:SetPoint("TOP", frame.lblDescription, "BOTTOM", 0, -18); | |
| 406 frmMeasureDummy:SetPoint("LEFT", frame, "LEFT", 15, 0); | |
| 407 frmMeasureDummy:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -15, 35); | |
| 408 | |
| 409 frame.frmMeasureDummy = frmMeasureDummy; | |
| 410 | |
| 411 -- Scrolling table with a list of items to be queued | |
| 412 local ScrollingTable = LibStub("ScrollingTable"); | |
| 413 local scrollTable = ScrollingTable:CreateST({}, 4, 15, nil, frame); -- inserting a dummy cols, real cols to be set in SetFrameSettings | |
| 414 scrollTable.frame:SetPoint("TOP", frame.lblDescription, "BOTTOM", 0, -18); | |
| 415 scrollTable.frame:SetPoint("LEFT", frame, "LEFT", 15, 0); | |
| 416 scrollTable.frame:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -15, 35); | |
| 417 -- When moving over a row, provide a tooltip for the item | |
| 418 scrollTable:RegisterEvents({ | |
| 419 ["OnEnter"] = function(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...) | |
| 420 if row and realrow then | |
| 421 -- Data row | |
| 422 | |
| 423 if data[realrow] and data[realrow].rowData and data[realrow].rowData.itemId then | |
| 424 GameTooltip:SetOwner(rowFrame, "ANCHOR_NONE"); | |
| 425 GameTooltip:SetPoint("TOPLEFT", rowFrame, "BOTTOMLEFT"); | |
| 426 GameTooltip:SetHyperlink(("item:%d"):format(data[realrow].rowData.itemId)); | |
| 427 GameTooltip:Show(); | |
| 428 end | |
| 429 else | |
| 430 -- Header row | |
| 431 | |
| 432 if cols[column].tooltipTitle and type(cols[column].tooltipTitle) == "string" then | |
| 433 cellFrame.tooltipTitle = cols[column].tooltipTitle; | |
| 434 if cols[column].tooltip then | |
| 435 cellFrame.tooltip = cols[column].tooltip; -- Optional | |
| 436 else | |
| 437 cellFrame.tooltip = nil; | |
| 438 end | |
| 439 | |
| 440 ShowTooltip(cellFrame); | |
| 441 end | |
| 442 end | |
| 443 end, | |
| 444 ["OnLeave"] = function(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...) | |
| 445 HideTooltip(); | |
| 446 end, | |
| 447 }); | |
| 448 | |
| 449 frame.scrollTable = scrollTable; | |
| 450 | |
| 451 -- Change the amount of displayed rows based on the size of the frame | |
| 452 frame.AdjustScrollTableRows = function(this) | |
| 453 local newRows = math.floor(( this.frmMeasureDummy:GetHeight() - 5 ) / 15); | |
| 454 newRows = (newRows < 4 and 4) or newRows; | |
| 455 | |
| 456 this.scrollTable:SetDisplayRows(newRows, 15); | |
| 457 end; | |
| 458 frame:SetScript("OnSizeChanged", frame.AdjustScrollTableRows); | |
| 459 end | |
| 460 do | |
| 461 local frameWidth = 300; | |
| 462 | |
| 463 -- Main window | |
| 464 local frame = CreateFrame("Frame", "InventoriumQueuerUnqueueables", InventoriumQueuer); | |
| 465 -- Hide by default | |
| 466 frame:Hide(); | |
| 467 -- Position the frame against the queuer window | |
| 468 frame:SetPoint("TOPLEFT", InventoriumQueuer, "TOPRIGHT", 0, 0); | |
| 469 frame:SetPoint("BOTTOMLEFT", InventoriumQueuer, "BOTTOMLEFT", 0, 0); | |
| 470 -- Put in front of other windows | |
| 471 frame:SetFrameStrata("FULLSCREEN_DIALOG"); | |
| 472 frame:SetToplevel(true); | |
| 473 -- Give it a size | |
| 474 frame:SetWidth(frameWidth); | |
| 475 -- Background | |
| 476 frame:SetBackdrop({ | |
| 477 bgFile = "Interface\\ChatFrame\\ChatFrameBackground", | |
| 478 edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", | |
| 479 edgeSize = 20, | |
| 480 insets = { | |
| 481 left = 5, | |
| 482 right = 5, | |
| 483 top = 5, | |
| 484 bottom = 5, | |
| 485 }, | |
| 486 }); | |
| 487 frame:SetBackdropColor(0, 0, 0, .8); | |
| 488 -- Mouse functions | |
| 489 frame:EnableMouse(); | |
| 490 frame:SetMovable(true); | |
| 491 -- Set event handlers | |
| 492 frame:SetScript("OnMouseUp", function(this) this:StopMovingOrSizing(); end); | |
| 493 frame:SetScript("OnShow", function(this) | |
| 494 this:AdjustScrollTableRows(); | |
| 495 end); | |
| 496 | |
| 497 -- Title (AceGUI frame-widget-title used as example) | |
| 498 local titleBackground = frame:CreateTexture(nil, "OVERLAY"); | |
| 499 titleBackground:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header"); | |
| 500 titleBackground:SetTexCoord(0.31, 0.67, 0, 0.63); | |
| 501 titleBackground:SetPoint("TOP", 0, 12); | |
| 502 titleBackground:SetWidth(90); | |
| 503 titleBackground:SetHeight(40); | |
| 504 | |
| 505 frame.titleBackground = titleBackground; | |
| 506 | |
| 507 local titleBackgroundLeft = frame:CreateTexture(nil, "OVERLAY"); | |
| 508 titleBackgroundLeft:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header"); | |
| 509 titleBackgroundLeft:SetTexCoord(0.21, 0.31, 0, 0.63); | |
| 510 titleBackgroundLeft:SetPoint("RIGHT", titleBackground, "LEFT"); | |
| 511 titleBackgroundLeft:SetWidth(30); | |
| 512 titleBackgroundLeft:SetHeight(40); | |
| 513 | |
| 514 local titleBackgroundRight = frame:CreateTexture(nil, "OVERLAY"); | |
| 515 titleBackgroundRight:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header"); | |
| 516 titleBackgroundRight:SetTexCoord(0.67, 0.77, 0, 0.63); | |
| 517 titleBackgroundRight:SetPoint("LEFT", titleBackground, "RIGHT"); | |
| 518 titleBackgroundRight:SetWidth(30); | |
| 519 titleBackgroundRight:SetHeight(40); | |
| 520 | |
| 521 local frmTitle = CreateFrame("Frame", nil, frame); | |
| 522 frmTitle:EnableMouse(true); | |
| 523 frmTitle:SetScript("OnMouseDown", function(this) this:GetParent():StartMoving(); end); | |
| 524 frmTitle:SetScript("OnMouseUp", function(this) this:GetParent():StopMovingOrSizing(); end); | |
| 525 frmTitle:SetAllPoints(titleBackground); | |
| 526 | |
| 527 local lblTitle = frmTitle:CreateFontString(nil, "OVERLAY", "GameFontNormal"); | |
| 528 lblTitle:SetPoint("TOP", titleBackground, "TOP", 0, -14); | |
| 529 lblTitle:SetText("Unqueueables"); | |
| 530 | |
| 531 -- Because the scrolling table code-behind will change this element's height, we can't rely on that. Make a dummy frame which we can measure | |
| 532 local frmMeasureDummy = CreateFrame("Frame", nil, frame); | |
| 533 frmMeasureDummy:SetPoint("TOPLEFT", frame, "TOPLEFT", 15, -42); | |
| 534 frmMeasureDummy:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -15, 15); | |
| 535 | |
| 536 frame.frmMeasureDummy = frmMeasureDummy; | |
| 537 | |
| 538 -- Scrolling table with a list of items to be queued | |
| 539 local ScrollingTable = LibStub("ScrollingTable"); | |
| 540 local scrollTable = ScrollingTable:CreateST({}, 4, 15, nil, frame); -- inserting a dummy cols, real cols to be set in SetFrameSettings | |
| 541 scrollTable.frame:SetPoint("TOPLEFT", frame, "TOPLEFT", 15, -42); | |
| 542 scrollTable.frame:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -15, 15); | |
| 543 -- When moving over a row, provide a tooltip for the item | |
| 544 scrollTable:RegisterEvents({ | |
| 545 ["OnEnter"] = function(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...) | |
| 546 if row and realrow then | |
| 547 -- Data row | |
| 548 | |
| 549 if data[realrow] and data[realrow].rowData and data[realrow].rowData.itemId then | |
| 550 if column == 1 then | |
| 551 GameTooltip:SetOwner(rowFrame, "ANCHOR_NONE"); | |
| 552 GameTooltip:SetPoint("TOPLEFT", rowFrame, "BOTTOMLEFT"); | |
| 553 GameTooltip:SetHyperlink(("item:%d"):format(data[realrow].rowData.itemId)); | |
| 554 GameTooltip:Show(); | |
| 555 else | |
| 556 GameTooltip:SetOwner(cellFrame, "ANCHOR_NONE"); | |
| 557 GameTooltip:SetPoint("TOPLEFT", cellFrame, "BOTTOMLEFT"); | |
| 558 GameTooltip:SetText(data[realrow].rowData.reason[1]); | |
| 559 GameTooltip:AddLine(data[realrow].rowData.reason[2], 1, 1, 1, 1); | |
| 560 GameTooltip:Show(); | |
| 561 end | |
| 562 end | |
| 563 else | |
| 564 -- Header row | |
| 565 | |
| 566 if cols[column].tooltipTitle and type(cols[column].tooltipTitle) == "string" then | |
| 567 cellFrame.tooltipTitle = cols[column].tooltipTitle; | |
| 568 if cols[column].tooltip then | |
| 569 cellFrame.tooltip = cols[column].tooltip; -- Optional | |
| 570 else | |
| 571 cellFrame.tooltip = nil; | |
| 572 end | |
| 573 | |
| 574 ShowTooltip(cellFrame); | |
| 575 end | |
| 576 end | |
| 577 end, | |
| 578 ["OnLeave"] = function(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...) | |
| 579 HideTooltip(); | |
| 580 end, | |
| 581 }); | |
| 582 | |
| 583 frame.scrollTable = scrollTable; | |
| 584 | |
| 585 -- Change the amount of displayed rows based on the size of the frame | |
| 586 frame.AdjustScrollTableRows = function(this) | |
| 587 local newRows = math.floor(( this.frmMeasureDummy:GetHeight() - 5 ) / 15); | |
| 588 newRows = (newRows < 4 and 4) or newRows; | |
| 589 | |
| 590 this.scrollTable:SetDisplayRows(newRows, 15); | |
| 591 end; | |
| 592 frame:SetScript("OnSizeChanged", frame.AdjustScrollTableRows); | |
| 593 end | |
| 594 end | |
| 595 | |
| 596 function addon:SetQueueFrameData(queueable, unqueueables) | |
| 597 InventoriumQueuer.scrollTable:SetData(queueable); | |
| 598 InventoriumQueuerUnqueueables.scrollTable:SetData(unqueueables); | |
| 599 | |
| 600 InventoriumQueuer:Show(); | |
| 601 end | |
| 602 | |
| 603 function addon:SetQueueFrameSettings(title, description, proceed, cancel, headers, unqueueablesHeaders) | |
| 604 local frame = InventoriumQueuer; | |
| 605 | |
| 606 frame.lblTitle:SetText(title); | |
| 607 -- Adjust size for the title background | |
| 608 frame.titleBackground:SetWidth((frame.lblTitle:GetWidth() or 0) + 10); -- 10 pixels margin | |
| 609 | |
| 610 frame.lblDescription:SetText(description); | |
| 611 | |
| 612 frame.btnProceed:SetText(proceed.text); | |
| 613 frame.btnProceed.tooltipTitle = proceed.tooltipTitle; | |
| 614 frame.btnProceed.tooltip = proceed.tooltip; | |
| 615 frame.btnProceed.OnClick = proceed.onClick; | |
| 616 | |
| 617 frame.btnCancel:SetText(cancel.text); | |
| 618 frame.btnCancel.tooltipTitle = cancel.tooltipTitle; | |
| 619 frame.btnCancel.tooltip = cancel.tooltip; | |
| 620 frame.btnCancel.OnClick = cancel.onClick; | |
| 621 | |
| 622 frame.scrollTable:SetDisplayCols(headers); | |
| 623 | |
| 624 InventoriumQueuerUnqueueables.scrollTable:SetDisplayCols(unqueueablesHeaders); | |
| 625 end |
