Mercurial > wow > inventory
comparison Frames.lua @ 101:6ae44d372360
The confirmation window when refilling from the (guild) bank is enabled can now be skipped at the general config. It defaults to false.
Added a window displaying a list of movable items when at least one is available at the (guild) bank.
Resetting the queue when closing the storage.
| author | Zerotorescue | 
|---|---|
| date | Tue, 11 Jan 2011 19:48:35 +0100 | 
| parents | |
| children | 8502f02bf543 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 100:dbb239fcc91b | 101:6ae44d372360 | 
|---|---|
| 1 local addon = select(2, ...); | |
| 2 | |
| 3 local function ShowTooltip(self) | |
| 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; | |
| 6 | |
| 7 GameTooltip:SetOwner(this, "ANCHOR_NONE"); | |
| 8 if this.tooltipLocation and this.tooltipLocation == "TOP" then | |
| 9 GameTooltip:SetPoint("TOP", this, "TOP"); | |
| 10 else | |
| 11 GameTooltip:SetPoint("BOTTOM", this, "TOP"); | |
| 12 end | |
| 13 GameTooltip:SetText(this.tooltipTitle, 1, .82, 0, 1); | |
| 14 | |
| 15 if type(this.tooltip) == "string" then | |
| 16 GameTooltip:AddLine(this.tooltip, 1, 1, 1, 1); | |
| 17 end | |
| 18 | |
| 19 GameTooltip:Show(); | |
| 20 end | |
| 21 | |
| 22 local function HideTooltip() | |
| 23 GameTooltip:Hide(); | |
| 24 end | |
| 25 | |
| 26 function addon:CreateMoverFrame(onAccept, onCancel) | |
| 27 local frameWidth = 400; | |
| 28 | |
| 29 -- Main window | |
| 30 local frame = CreateFrame("Frame", "InventoriumItemMover", UIParent); | |
| 31 -- Hide by default | |
| 32 frame:Hide(); | |
| 33 -- Center the frame (will be adjusted later) | |
| 34 frame:SetPoint("CENTER", UIParent, "CENTER", 0, 0); | |
| 35 -- Put in front of other windows | |
| 36 frame:SetFrameStrata("FULLSCREEN_DIALOG"); | |
| 37 frame:SetToplevel(true); | |
| 38 -- Give it a size | |
| 39 frame:SetWidth(frameWidth); | |
| 40 frame:SetHeight(175); | |
| 41 -- Background | |
| 42 frame:SetBackdrop({ | |
| 43 bgFile = "Interface\\ChatFrame\\ChatFrameBackground", | |
| 44 edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border", | |
| 45 edgeSize = 13, | |
| 46 insets = { | |
| 47 left = 5, | |
| 48 right = 5, | |
| 49 top = 5, | |
| 50 bottom = 5, | |
| 51 }, | |
| 52 }); | |
| 53 frame:SetBackdropColor(0, 0, 0, .8); | |
| 54 -- Mouse functions | |
| 55 frame:EnableMouse(); | |
| 56 frame:SetMovable(true); | |
| 57 frame:SetResizable(true); | |
| 58 frame:SetMinResize(300, 175); | |
| 59 -- Set event handlers | |
| 60 frame:SetScript("OnMouseUp", function(this) this:StopMovingOrSizing(); end); | |
| 61 frame:SetScript("OnShow", function(this) | |
| 62 -- We wish to display our box at a similar position as the default interface's static popups, so we literally copied the code for these popups | |
| 63 local lastFrame = StaticPopup_DisplayedFrames[#StaticPopup_DisplayedFrames]; | |
| 64 if lastFrame then | |
| 65 this:SetPoint("TOP", lastFrame, "BOTTOM", 0, 0); | |
| 66 else | |
| 67 this:SetPoint("TOP", UIParent, "TOP", 0, -135); | |
| 68 end | |
| 69 | |
| 70 -- Position other static popups below this | |
| 71 tinsert(StaticPopup_DisplayedFrames, this); | |
| 72 | |
| 73 this:AdjustScrollTableRows(); | |
| 74 | |
| 75 PlaySound("OrcExploration"); | |
| 76 end); | |
| 77 | |
| 78 -- Title (AceGUI frame-widget-title used as example) | |
| 79 local titleBackground = frame:CreateTexture(nil, "OVERLAY"); | |
| 80 titleBackground:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header"); | |
| 81 titleBackground:SetTexCoord(0.31, 0.67, 0, 0.63); | |
| 82 titleBackground:SetPoint("TOP", 0, 12); | |
| 83 titleBackground:SetWidth(150); | |
| 84 titleBackground:SetHeight(40); | |
| 85 | |
| 86 local titleBackgroundLeft = frame:CreateTexture(nil, "OVERLAY"); | |
| 87 titleBackgroundLeft:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header"); | |
| 88 titleBackgroundLeft:SetTexCoord(0.21, 0.31, 0, 0.63); | |
| 89 titleBackgroundLeft:SetPoint("RIGHT", titleBackground, "LEFT"); | |
| 90 titleBackgroundLeft:SetWidth(30); | |
| 91 titleBackgroundLeft:SetHeight(40); | |
| 92 | |
| 93 local titleBackgroundRight = frame:CreateTexture(nil, "OVERLAY"); | |
| 94 titleBackgroundRight:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header"); | |
| 95 titleBackgroundRight:SetTexCoord(0.67, 0.77, 0, 0.63); | |
| 96 titleBackgroundRight:SetPoint("LEFT", titleBackground, "RIGHT"); | |
| 97 titleBackgroundRight:SetWidth(30); | |
| 98 titleBackgroundRight:SetHeight(40); | |
| 99 | |
| 100 local frmTitle = CreateFrame("Frame", nil, frame); | |
| 101 frmTitle:EnableMouse(true); | |
| 102 frmTitle:SetScript("OnMouseDown", function(this) this:GetParent():StartMoving(); end); | |
| 103 frmTitle:SetScript("OnMouseUp", function(this) this:GetParent():StopMovingOrSizing(); end); | |
| 104 frmTitle:SetAllPoints(titleBackground); | |
| 105 | |
| 106 local lblTitle = frmTitle:CreateFontString(nil, "OVERLAY", "GameFontNormal"); | |
| 107 lblTitle:SetPoint("TOP", titleBackground, "TOP", 0, -14); | |
| 108 lblTitle:SetText("Inventorium Bank Refill"); | |
| 109 | |
| 110 -- Resizer (vertical only) | |
| 111 local frmResizer = CreateFrame("Frame", nil, frame); | |
| 112 frmResizer:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 0, -10); | |
| 113 frmResizer:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", 0, -10); | |
| 114 frmResizer:SetHeight(20); | |
| 115 frmResizer:EnableMouse(); | |
| 116 frmResizer:SetScript("OnMouseDown", function(this) this:GetParent():StartSizing("BOTTOM"); end); | |
| 117 frmResizer:SetScript("OnMouseUp", function(this) this:GetParent():StopMovingOrSizing(); end); | |
| 118 | |
| 119 -- Description | |
| 120 local lblDescription = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal"); | |
| 121 lblDescription:SetPoint("TOPLEFT", frame, "TOPLEFT", 10, -23); | |
| 122 lblDescription:SetWidth(frameWidth - 10 - 10); -- 10 margin left & 10 margin right | |
| 123 lblDescription:SetJustifyH("LEFT"); | |
| 124 lblDescription:SetJustifyV("TOP"); | |
| 125 lblDescription:SetText("The items listed below can be refilled from this location, do you wish to move them to your bags?"); | |
| 126 | |
| 127 frame.lblDescription = lblDescription; | |
| 128 | |
| 129 -- Buttons | |
| 130 -- Move (proceed) | |
| 131 local btnMove = CreateFrame("Button", "$parentProceed", frame, "UIPanelButtonTemplate"); | |
| 132 btnMove:SetHeight(21); | |
| 133 btnMove:SetWidth(125); | |
| 134 btnMove:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 15, 10); | |
| 135 btnMove:SetText("Move Items"); | |
| 136 btnMove:SetScript("OnClick", onAccept); | |
| 137 btnMove:SetScript("OnEnter", ShowTooltip); | |
| 138 btnMove:SetScript("OnLeave", HideTooltip); | |
| 139 btnMove.tooltipTitle = "Move Items"; | |
| 140 btnMove.tooltip = "Start moving these items from the bank."; | |
| 141 | |
| 142 frame.btnMove = btnMove; | |
| 143 | |
| 144 -- Cancel | |
| 145 local btnCancel = CreateFrame("Button", "$parentCancel", frame, "UIPanelButtonTemplate"); | |
| 146 btnCancel:SetHeight(21); | |
| 147 btnCancel:SetWidth(125); | |
| 148 btnCancel:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -15, 10); | |
| 149 btnCancel:SetText("Cancel"); | |
| 150 btnCancel:SetScript("OnClick", onCancel); | |
| 151 btnCancel:SetScript("OnEnter", ShowTooltip); | |
| 152 btnCancel:SetScript("OnLeave", HideTooltip); | |
| 153 btnCancel.tooltipTitle = "Cancel"; | |
| 154 btnCancel.tooltip = "Do not move anything and close the window."; | |
| 155 | |
| 156 frame.btnCancel = btnCancel; | |
| 157 | |
| 158 -- 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 | |
| 159 local frmMeasureDummy = CreateFrame("Frame", nil, frame); | |
| 160 frmMeasureDummy:SetPoint("TOP", frame.lblDescription, "BOTTOM", 0, -20); | |
| 161 frmMeasureDummy:SetPoint("LEFT", frame.lblDescription, "LEFT", 10, 0); | |
| 162 frmMeasureDummy:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -10, 35); | |
| 163 | |
| 164 frame.frmMeasureDummy = frmMeasureDummy; | |
| 165 | |
| 166 -- Scrolling table with a list of items to be moved | |
| 167 local scrollTableWidth = ( frame.frmMeasureDummy:GetWidth() - 20 ); -- adjust width by the scrollbar size | |
| 168 local headers = { | |
| 169 { | |
| 170 ["name"] = "Item", | |
| 171 ["width"] = (scrollTableWidth * .5), | |
| 172 ["defaultsort"] = "asc", | |
| 173 ["comparesort"] = function(this, aRow, bRow, column) | |
| 174 local aName, _, aRarity = GetItemInfo(this:GetRow(aRow).colorargs[2]); | |
| 175 local bName, _, bRarity = GetItemInfo(this:GetRow(bRow).colorargs[2]); | |
| 176 local template = "%d%s"; | |
| 177 aName = template:format((10 - (aRarity or 10)), (aName or ""):lower()); | |
| 178 bName = template:format((10 - (bRarity or 10)), (bName or ""):lower()); | |
| 179 | |
| 180 if this.cols[column].sort == "dsc" then | |
| 181 return aName > bName; | |
| 182 else | |
| 183 return aName < bName; | |
| 184 end | |
| 185 end, | |
| 186 ["sort"] = "asc", -- when the data is set, use this column so sort the default data | |
| 187 }, | |
| 188 { | |
| 189 ["name"] = "Moving", | |
| 190 ["width"] = (scrollTableWidth * .15), | |
| 191 ["defaultsort"] = "dsc", | |
| 192 }, | |
| 193 { | |
| 194 ["name"] = "Missing", | |
| 195 ["width"] = (scrollTableWidth * .15), | |
| 196 ["defaultsort"] = "dsc", | |
| 197 }, | |
| 198 { | |
| 199 ["name"] = "Available", | |
| 200 ["width"] = (scrollTableWidth * .2), | |
| 201 ["defaultsort"] = "dsc", | |
| 202 }, | |
| 203 }; | |
| 204 | |
| 205 local ScrollingTable = LibStub("ScrollingTable"); | |
| 206 local table = ScrollingTable:CreateST(headers, 3, 15, nil, frame); | |
| 207 table:RegisterEvents({ | |
| 208 ["OnEnter"] = function(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...) | |
| 209 if row and realrow and data[realrow] and data[realrow].colorargs and data[realrow].colorargs[2] then | |
| 210 GameTooltip:SetOwner(rowFrame, "ANCHOR_NONE"); | |
| 211 GameTooltip:SetPoint("TOPLEFT", rowFrame, "BOTTOMLEFT"); | |
| 212 GameTooltip:SetHyperlink(("item:%d"):format(data[realrow].colorargs[2])); | |
| 213 GameTooltip:Show(); | |
| 214 end | |
| 215 end, | |
| 216 ["OnLeave"] = function(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...) | |
| 217 if row and realrow then | |
| 218 HideTooltip(); | |
| 219 end | |
| 220 end, | |
| 221 }); | |
| 222 | |
| 223 frame.scrollTable = table; | |
| 224 table.frame:SetPoint("TOP", frame.lblDescription, "BOTTOM", 0, -20); | |
| 225 table.frame:SetPoint("LEFT", frame.lblDescription, "LEFT", 10, 0); | |
| 226 table.frame:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -10, 35); | |
| 227 | |
| 228 -- Change the amount of displayed rows based on the size of the frame | |
| 229 frame.AdjustScrollTableRows = function(this) | |
| 230 local newRows = math.floor(( this.frmMeasureDummy:GetHeight() - 5 ) / 15); | |
| 231 newRows = (newRows < 3 and 3) or newRows; | |
| 232 | |
| 233 this.scrollTable:SetDisplayRows(newRows, 15); | |
| 234 end; | |
| 235 frame:SetScript("OnSizeChanged", frame.AdjustScrollTableRows); | |
| 236 end | |
| 237 | |
| 238 function addon:SetMoverFrameData(data) | |
| 239 InventoriumItemMover.scrollTable:SetData(data); | |
| 240 | |
| 241 InventoriumItemMover:Show(); | |
| 242 end | 
