annotate Frames.lua @ 120:00cf4fc1697f

addon.Locations table is used at multiple modules, definition moved to Core.lua.
author Zerotorescue
date Sat, 15 Jan 2011 17:09:08 +0100
parents dc6f405c1a5d
children 8460855e3d90
rev   line source
Zerotorescue@101 1 local addon = select(2, ...);
Zerotorescue@101 2
Zerotorescue@101 3 local function ShowTooltip(self)
Zerotorescue@101 4 -- If this function is called from a widget, self is the widget and self.frame the actual frame
Zerotorescue@101 5 local this = self.frame or self;
Zerotorescue@101 6
Zerotorescue@106 7 if not this.tooltipTitle then return; end
Zerotorescue@106 8
Zerotorescue@101 9 GameTooltip:SetOwner(this, "ANCHOR_NONE");
Zerotorescue@104 10 if this.tooltipLocation and this.tooltipLocation == "BOTTOM" then
Zerotorescue@104 11 GameTooltip:SetPoint("TOP", this, "BOTTOM");
Zerotorescue@101 12 else
Zerotorescue@101 13 GameTooltip:SetPoint("BOTTOM", this, "TOP");
Zerotorescue@101 14 end
Zerotorescue@101 15 GameTooltip:SetText(this.tooltipTitle, 1, .82, 0, 1);
Zerotorescue@101 16
Zerotorescue@101 17 if type(this.tooltip) == "string" then
Zerotorescue@101 18 GameTooltip:AddLine(this.tooltip, 1, 1, 1, 1);
Zerotorescue@101 19 end
Zerotorescue@101 20
Zerotorescue@101 21 GameTooltip:Show();
Zerotorescue@101 22 end
Zerotorescue@101 23
Zerotorescue@101 24 local function HideTooltip()
Zerotorescue@101 25 GameTooltip:Hide();
Zerotorescue@101 26 end
Zerotorescue@101 27
Zerotorescue@110 28 function addon:CreateMoverFrame()
Zerotorescue@101 29 local frameWidth = 400;
Zerotorescue@101 30
Zerotorescue@101 31 -- Main window
Zerotorescue@101 32 local frame = CreateFrame("Frame", "InventoriumItemMover", UIParent);
Zerotorescue@101 33 -- Hide by default
Zerotorescue@101 34 frame:Hide();
Zerotorescue@101 35 -- Center the frame (will be adjusted later)
Zerotorescue@101 36 frame:SetPoint("CENTER", UIParent, "CENTER", 0, 0);
Zerotorescue@101 37 -- Put in front of other windows
Zerotorescue@101 38 frame:SetFrameStrata("FULLSCREEN_DIALOG");
Zerotorescue@101 39 frame:SetToplevel(true);
Zerotorescue@101 40 -- Give it a size
Zerotorescue@101 41 frame:SetWidth(frameWidth);
Zerotorescue@101 42 frame:SetHeight(175);
Zerotorescue@101 43 -- Background
Zerotorescue@101 44 frame:SetBackdrop({
Zerotorescue@101 45 bgFile = "Interface\\ChatFrame\\ChatFrameBackground",
Zerotorescue@101 46 edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Border",
Zerotorescue@104 47 edgeSize = 20,
Zerotorescue@101 48 insets = {
Zerotorescue@101 49 left = 5,
Zerotorescue@101 50 right = 5,
Zerotorescue@101 51 top = 5,
Zerotorescue@101 52 bottom = 5,
Zerotorescue@101 53 },
Zerotorescue@101 54 });
Zerotorescue@101 55 frame:SetBackdropColor(0, 0, 0, .8);
Zerotorescue@101 56 -- Mouse functions
Zerotorescue@101 57 frame:EnableMouse();
Zerotorescue@101 58 frame:SetMovable(true);
Zerotorescue@101 59 frame:SetResizable(true);
Zerotorescue@101 60 frame:SetMinResize(300, 175);
Zerotorescue@101 61 -- Set event handlers
Zerotorescue@101 62 frame:SetScript("OnMouseUp", function(this) this:StopMovingOrSizing(); end);
Zerotorescue@101 63 frame:SetScript("OnShow", function(this)
Zerotorescue@104 64 if not tContains(StaticPopup_DisplayedFrames, this) then
Zerotorescue@104 65 -- 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
Zerotorescue@104 66 local lastFrame = StaticPopup_DisplayedFrames[#StaticPopup_DisplayedFrames];
Zerotorescue@104 67 if lastFrame then
Zerotorescue@104 68 this:SetPoint("TOP", lastFrame, "BOTTOM", 0, 0);
Zerotorescue@104 69 else
Zerotorescue@104 70 this:SetPoint("TOP", UIParent, "TOP", 0, -135);
Zerotorescue@104 71 end
Zerotorescue@104 72
Zerotorescue@104 73 -- Position other static popups below this
Zerotorescue@104 74 tinsert(StaticPopup_DisplayedFrames, this);
Zerotorescue@101 75 end
Zerotorescue@101 76
Zerotorescue@101 77 this:AdjustScrollTableRows();
Zerotorescue@101 78
Zerotorescue@101 79 PlaySound("OrcExploration");
Zerotorescue@101 80 end);
Zerotorescue@110 81 frame:SetScript("OnHide", function(this)
Zerotorescue@110 82 StaticPopup_CollapseTable(this);
Zerotorescue@110 83 end);
Zerotorescue@101 84
Zerotorescue@101 85 -- Title (AceGUI frame-widget-title used as example)
Zerotorescue@101 86 local titleBackground = frame:CreateTexture(nil, "OVERLAY");
Zerotorescue@101 87 titleBackground:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header");
Zerotorescue@101 88 titleBackground:SetTexCoord(0.31, 0.67, 0, 0.63);
Zerotorescue@101 89 titleBackground:SetPoint("TOP", 0, 12);
Zerotorescue@101 90 titleBackground:SetWidth(150);
Zerotorescue@101 91 titleBackground:SetHeight(40);
Zerotorescue@119 92
Zerotorescue@119 93 frame.titleBackground = titleBackground;
Zerotorescue@119 94
Zerotorescue@101 95 local titleBackgroundLeft = frame:CreateTexture(nil, "OVERLAY");
Zerotorescue@101 96 titleBackgroundLeft:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header");
Zerotorescue@101 97 titleBackgroundLeft:SetTexCoord(0.21, 0.31, 0, 0.63);
Zerotorescue@101 98 titleBackgroundLeft:SetPoint("RIGHT", titleBackground, "LEFT");
Zerotorescue@101 99 titleBackgroundLeft:SetWidth(30);
Zerotorescue@101 100 titleBackgroundLeft:SetHeight(40);
Zerotorescue@101 101
Zerotorescue@101 102 local titleBackgroundRight = frame:CreateTexture(nil, "OVERLAY");
Zerotorescue@101 103 titleBackgroundRight:SetTexture("Interface\\DialogFrame\\UI-DialogBox-Header");
Zerotorescue@101 104 titleBackgroundRight:SetTexCoord(0.67, 0.77, 0, 0.63);
Zerotorescue@101 105 titleBackgroundRight:SetPoint("LEFT", titleBackground, "RIGHT");
Zerotorescue@101 106 titleBackgroundRight:SetWidth(30);
Zerotorescue@101 107 titleBackgroundRight:SetHeight(40);
Zerotorescue@101 108
Zerotorescue@101 109 local frmTitle = CreateFrame("Frame", nil, frame);
Zerotorescue@101 110 frmTitle:EnableMouse(true);
Zerotorescue@101 111 frmTitle:SetScript("OnMouseDown", function(this) this:GetParent():StartMoving(); end);
Zerotorescue@101 112 frmTitle:SetScript("OnMouseUp", function(this) this:GetParent():StopMovingOrSizing(); end);
Zerotorescue@101 113 frmTitle:SetAllPoints(titleBackground);
Zerotorescue@101 114
Zerotorescue@101 115 local lblTitle = frmTitle:CreateFontString(nil, "OVERLAY", "GameFontNormal");
Zerotorescue@101 116 lblTitle:SetPoint("TOP", titleBackground, "TOP", 0, -14);
Zerotorescue@110 117
Zerotorescue@110 118 frame.lblTitle = lblTitle;
Zerotorescue@101 119
Zerotorescue@101 120 -- Resizer (vertical only)
Zerotorescue@101 121 local frmResizer = CreateFrame("Frame", nil, frame);
Zerotorescue@101 122 frmResizer:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 0, -10);
Zerotorescue@101 123 frmResizer:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", 0, -10);
Zerotorescue@101 124 frmResizer:SetHeight(20);
Zerotorescue@101 125 frmResizer:EnableMouse();
Zerotorescue@101 126 frmResizer:SetScript("OnMouseDown", function(this) this:GetParent():StartSizing("BOTTOM"); end);
Zerotorescue@101 127 frmResizer:SetScript("OnMouseUp", function(this) this:GetParent():StopMovingOrSizing(); end);
Zerotorescue@101 128
Zerotorescue@101 129 -- Description
Zerotorescue@101 130 local lblDescription = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal");
Zerotorescue@106 131 lblDescription:SetPoint("TOPLEFT", frame, "TOPLEFT", 15, -27);
Zerotorescue@104 132 lblDescription:SetWidth(frameWidth - 15 - 15); -- 10 margin left & 10 margin right
Zerotorescue@101 133 lblDescription:SetJustifyH("LEFT");
Zerotorescue@101 134 lblDescription:SetJustifyV("TOP");
Zerotorescue@101 135
Zerotorescue@101 136 frame.lblDescription = lblDescription;
Zerotorescue@101 137
Zerotorescue@101 138 -- Buttons
Zerotorescue@101 139 -- Move (proceed)
Zerotorescue@101 140 local btnMove = CreateFrame("Button", "$parentProceed", frame, "UIPanelButtonTemplate");
Zerotorescue@101 141 btnMove:SetHeight(21);
Zerotorescue@101 142 btnMove:SetWidth(125);
Zerotorescue@104 143 btnMove:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 15, 11);
Zerotorescue@101 144 btnMove:SetText("Move Items");
Zerotorescue@110 145 btnMove:SetScript("OnClick", function(this) this.OnClick(this); end);
Zerotorescue@101 146 btnMove:SetScript("OnEnter", ShowTooltip);
Zerotorescue@101 147 btnMove:SetScript("OnLeave", HideTooltip);
Zerotorescue@101 148
Zerotorescue@101 149 frame.btnMove = btnMove;
Zerotorescue@101 150
Zerotorescue@101 151 -- Cancel
Zerotorescue@101 152 local btnCancel = CreateFrame("Button", "$parentCancel", frame, "UIPanelButtonTemplate");
Zerotorescue@101 153 btnCancel:SetHeight(21);
Zerotorescue@101 154 btnCancel:SetWidth(125);
Zerotorescue@104 155 btnCancel:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -15, 11);
Zerotorescue@110 156 btnCancel:SetScript("OnClick", function(this) this.OnClick(this); end);
Zerotorescue@101 157 btnCancel:SetScript("OnEnter", ShowTooltip);
Zerotorescue@101 158 btnCancel:SetScript("OnLeave", HideTooltip);
Zerotorescue@101 159
Zerotorescue@101 160 frame.btnCancel = btnCancel;
Zerotorescue@101 161
Zerotorescue@101 162 -- 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
Zerotorescue@101 163 local frmMeasureDummy = CreateFrame("Frame", nil, frame);
Zerotorescue@106 164 frmMeasureDummy:SetPoint("TOP", frame.lblDescription, "BOTTOM", 0, -18);
Zerotorescue@106 165 frmMeasureDummy:SetPoint("LEFT", frame, "LEFT", 15, 0);
Zerotorescue@104 166 frmMeasureDummy:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -15, 35);
Zerotorescue@101 167
Zerotorescue@101 168 frame.frmMeasureDummy = frmMeasureDummy;
Zerotorescue@101 169
Zerotorescue@101 170 -- Scrolling table with a list of items to be moved
Zerotorescue@101 171 local ScrollingTable = LibStub("ScrollingTable");
Zerotorescue@110 172 local table = ScrollingTable:CreateST({}, 4, 15, nil, frame); -- inserting a dummy cols, real cols to be set in SetFrameSettings
Zerotorescue@110 173 table.frame:SetPoint("TOP", frame.lblDescription, "BOTTOM", 0, -18);
Zerotorescue@110 174 table.frame:SetPoint("LEFT", frame, "LEFT", 15, 0);
Zerotorescue@110 175 table.frame:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -15, 35);
Zerotorescue@106 176 -- When moving over a row, provide a tooltip for the item
Zerotorescue@101 177 table:RegisterEvents({
Zerotorescue@101 178 ["OnEnter"] = function(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...)
Zerotorescue@106 179 if row and realrow then
Zerotorescue@106 180 -- Data row
Zerotorescue@106 181
Zerotorescue@112 182 if data[realrow] and data[realrow].rowData and data[realrow].rowData.itemId then
Zerotorescue@106 183 GameTooltip:SetOwner(rowFrame, "ANCHOR_NONE");
Zerotorescue@106 184 GameTooltip:SetPoint("TOPLEFT", rowFrame, "BOTTOMLEFT");
Zerotorescue@112 185 GameTooltip:SetHyperlink(("item:%d"):format(data[realrow].rowData.itemId));
Zerotorescue@106 186 GameTooltip:Show();
Zerotorescue@106 187 end
Zerotorescue@106 188 else
Zerotorescue@106 189 -- Header row
Zerotorescue@106 190
Zerotorescue@106 191 if cols[column].tooltipTitle and type(cols[column].tooltipTitle) == "string" then
Zerotorescue@106 192 cellFrame.tooltipTitle = cols[column].tooltipTitle;
Zerotorescue@106 193 if cols[column].tooltip then
Zerotorescue@106 194 cellFrame.tooltip = cols[column].tooltip; -- Optional
Zerotorescue@106 195 else
Zerotorescue@106 196 cellFrame.tooltip = nil;
Zerotorescue@106 197 end
Zerotorescue@106 198
Zerotorescue@106 199 ShowTooltip(cellFrame);
Zerotorescue@106 200 end
Zerotorescue@101 201 end
Zerotorescue@101 202 end,
Zerotorescue@101 203 ["OnLeave"] = function(rowFrame, cellFrame, data, cols, row, realrow, column, scrollingTable, ...)
Zerotorescue@106 204 HideTooltip();
Zerotorescue@101 205 end,
Zerotorescue@101 206 });
Zerotorescue@101 207
Zerotorescue@101 208 frame.scrollTable = table;
Zerotorescue@110 209
Zerotorescue@106 210 -- Change the amount of displayed rows based on the size of the frame
Zerotorescue@106 211 frame.AdjustScrollTableRows = function(this)
Zerotorescue@106 212 local newRows = math.floor(( this.frmMeasureDummy:GetHeight() - 5 ) / 15);
Zerotorescue@110 213 newRows = (newRows < 4 and 4) or newRows;
Zerotorescue@106 214
Zerotorescue@106 215 this.scrollTable:SetDisplayRows(newRows, 15);
Zerotorescue@106 216 end;
Zerotorescue@106 217 frame:SetScript("OnSizeChanged", frame.AdjustScrollTableRows);
Zerotorescue@101 218 end
Zerotorescue@101 219
Zerotorescue@101 220 function addon:SetMoverFrameData(data)
Zerotorescue@101 221 InventoriumItemMover.scrollTable:SetData(data);
Zerotorescue@101 222
Zerotorescue@101 223 InventoriumItemMover:Show();
Zerotorescue@101 224 end
Zerotorescue@110 225
Zerotorescue@110 226 function addon:SetFrameSettings(title, description, proceed, cancel, headers)
Zerotorescue@110 227 local frame = InventoriumItemMover;
Zerotorescue@110 228
Zerotorescue@110 229 frame.lblTitle:SetText(title);
Zerotorescue@119 230 -- Adjust size for the title background
Zerotorescue@119 231 frame.titleBackground:SetWidth((frame.lblTitle:GetWidth() or 0) + 10); -- 10 pixels margin
Zerotorescue@110 232
Zerotorescue@110 233 frame.lblDescription:SetText(description);
Zerotorescue@110 234
Zerotorescue@110 235 frame.btnMove:SetText(proceed.text);
Zerotorescue@110 236 frame.btnMove.tooltipTitle = proceed.tooltipTitle;
Zerotorescue@110 237 frame.btnMove.tooltip = proceed.tooltip;
Zerotorescue@110 238 frame.btnMove.OnClick = proceed.onClick;
Zerotorescue@110 239
Zerotorescue@110 240 frame.btnCancel:SetText(cancel.text);
Zerotorescue@110 241 frame.btnCancel.tooltipTitle = cancel.tooltipTitle;
Zerotorescue@110 242 frame.btnCancel.tooltip = cancel.tooltip;
Zerotorescue@110 243 frame.btnCancel.OnClick = cancel.onClick;
Zerotorescue@110 244
Zerotorescue@110 245 frame.scrollTable:SetDisplayCols(headers);
Zerotorescue@110 246 end