comparison Modules/Queue.lua @ 145:6a52272a0e5a

Added a craft button to the queue window. This is still very experimental.
author Zerotorescue
date Thu, 20 Jan 2011 00:07:47 +0100
parents 12a8ea5af671
children ebe6f90c4bb9
comparison
equal deleted inserted replaced
144:12a8ea5af671 145:6a52272a0e5a
43 "Just finished restocking this item.", 43 "Just finished restocking this item.",
44 50, 44 50,
45 }, 45 },
46 }; 46 };
47 47
48 local function Compare(a, b, this, aRow, bRow, columnNo)
49 if a == b then
50 local column = this.cols[columnNo];
51 if column.sortnext then
52 local nextcol = this.cols[column.sortnext];
53 if not(nextcol.sort) then
54 if nextcol.comparesort then
55 return nextcol.comparesort(this, aRow, bRow, column.sortnext);
56 else
57 return this:CompareSort(this, bRow, column.sortnext);
58 end
59 else
60 return false;
61 end
62 else
63 return false;
64 end
65 elseif (this.cols[columnNo].sort or this.cols[columnNo].defaultsort or "asc") == "dsc" then
66 return a > b;
67 else
68 return a < b;
69 end
70 end
71
48 local function MakeQueueWindow() 72 local function MakeQueueWindow()
49 if not InventoriumQueuer then 73 if not InventoriumQueuer then
50 addon:CreateQueueFrame(); 74 addon:CreateQueueFrame();
51 75
52 local frame = InventoriumQueuer; -- both for speed as code-consistency 76 local frame = InventoriumQueuer; -- both for speed as code-consistency
56 local headers = { 80 local headers = {
57 { 81 {
58 ["name"] = "Item", 82 ["name"] = "Item",
59 ["width"] = (scrollTableWidth * .65), 83 ["width"] = (scrollTableWidth * .65),
60 ["defaultsort"] = "asc", 84 ["defaultsort"] = "asc",
61 ["comparesort"] = function(this, aRow, bRow, column) 85 ["comparesort"] = function(this, aRow, bRow, columnNo)
62 local aName, _, aRarity = GetItemInfo(this:GetRow(aRow).rowData.itemId); 86 local aName, _, aRarity = GetItemInfo(this:GetRow(aRow).rowData.itemId);
63 local bName, _, bRarity = GetItemInfo(this:GetRow(bRow).rowData.itemId); 87 local bName, _, bRarity = GetItemInfo(this:GetRow(bRow).rowData.itemId);
64 local template = "%d%s"; 88 aName = sformat("%d%s", (10 - (aRarity or 10)), slower(aName or ""));
65 aName = sformat(template, (10 - (aRarity or 10)), slower(aName or "")); 89 bName = sformat("%d%s", (10 - (bRarity or 10)), slower(bName or ""));
66 bName = sformat(template, (10 - (bRarity or 10)), slower(bName or "")); 90
67 91 return Compare(aName, bName, this, aRow, bRow, columnNo);
68 if this.cols[column].sort == "dsc" then
69 return aName > bName;
70 else
71 return aName < bName;
72 end
73 end, 92 end,
74 ["sort"] = "asc", -- when the data is set, use this column so sort the default data 93 ["sort"] = "asc", -- when the data is set, use this column so sort the default data
75 ["tooltipTitle"] = "Item", 94 ["tooltipTitle"] = "Item",
76 ["tooltip"] = "Click to sort the list by item quality then item name.", 95 ["tooltip"] = "Click to sort the list by item quality then item name.",
77 }, 96 },
78 { 97 {
79 ["name"] = "Amount", 98 ["name"] = "Amount",
80 ["width"] = (scrollTableWidth * .15), 99 ["width"] = (scrollTableWidth * .15),
81 ["align"] = "RIGHT", 100 ["align"] = "RIGHT",
82 ["defaultsort"] = "dsc", 101 ["defaultsort"] = "dsc",
83 ["comparesort"] = function(this, aRow, bRow, column) 102 ["comparesort"] = function(this, aRow, bRow, columnNo)
84 if this.cols[column].sort == "dsc" then 103 local a = this:GetRow(aRow).rowData.amount;
85 return (this:GetRow(aRow).rowData.amount > this:GetRow(bRow).rowData.amount); 104 local b = this:GetRow(bRow).rowData.amount;
86 else 105
87 return (this:GetRow(aRow).rowData.amount < this:GetRow(bRow).rowData.amount); 106 return Compare(a, b, this, aRow, bRow, columnNo);
88 end
89 end, 107 end,
90 ["sortnext"] = 1, 108 ["sortnext"] = 1,
91 ["tooltipTitle"] = "Amount needed", 109 ["tooltipTitle"] = "Amount needed",
92 ["tooltip"] = "Click to sort the list by the amount of items needed to reach the restock target.", 110 ["tooltip"] = "Click to sort the list by the amount of items needed to reach the restock target.",
93 }, 111 },
94 { 112 {
95 ["name"] = "Extra", 113 ["name"] = "Extra",
96 ["width"] = (scrollTableWidth * .15), 114 ["width"] = (scrollTableWidth * .15),
97 ["align"] = "RIGHT", 115 ["align"] = "RIGHT",
98 ["defaultsort"] = "dsc", 116 ["defaultsort"] = "dsc",
99 ["comparesort"] = function(this, aRow, bRow, column) 117 ["comparesort"] = function(this, aRow, bRow, columnNo)
100 if this.cols[column].sort == "dsc" then 118 local a = this:GetRow(aRow).rowData.bonus;
101 return (this:GetRow(aRow).rowData.bonus > this:GetRow(bRow).rowData.bonus); 119 local b = this:GetRow(bRow).rowData.bonus;
102 else 120
103 return (this:GetRow(aRow).rowData.bonus < this:GetRow(bRow).rowData.bonus); 121 return Compare(a, b, this, aRow, bRow, columnNo);
104 end
105 end, 122 end,
106 ["sortnext"] = 1, 123 ["sortnext"] = 1,
107 ["tooltipTitle"] = "Extra items", 124 ["tooltipTitle"] = "Extra items",
108 ["tooltip"] = "Click to sort the list by the amount of bonus items.", 125 ["tooltip"] = "Click to sort the list by the amount of bonus items.",
109 }, 126 },
135 local unqueueablesHeaders = { 152 local unqueueablesHeaders = {
136 { 153 {
137 ["name"] = "Item", 154 ["name"] = "Item",
138 ["width"] = (scrollTableWidth * .6), 155 ["width"] = (scrollTableWidth * .6),
139 ["defaultsort"] = "asc", 156 ["defaultsort"] = "asc",
140 ["comparesort"] = function(this, aRow, bRow, column) 157 ["comparesort"] = function(this, aRow, bRow, columnNo)
141 local aName, _, aRarity = GetItemInfo(this:GetRow(aRow).rowData.itemId); 158 local aName, _, aRarity = GetItemInfo(this:GetRow(aRow).rowData.itemId);
142 local bName, _, bRarity = GetItemInfo(this:GetRow(bRow).rowData.itemId); 159 local bName, _, bRarity = GetItemInfo(this:GetRow(bRow).rowData.itemId);
143 local template = "%d%s"; 160 aName = sformat("%d%s", (10 - (aRarity or 10)), slower(aName or ""));
144 aName = sformat(template, (10 - (aRarity or 10)), slower(aName or "")); 161 bName = sformat("%d%s", (10 - (bRarity or 10)), slower(bName or ""));
145 bName = sformat(template, (10 - (bRarity or 10)), slower(bName or "")); 162
146 163 return Compare(aName, bName, this, aRow, bRow, columnNo);
147 if this.cols[column].sort == "dsc" then
148 return aName > bName;
149 else
150 return aName < bName;
151 end
152 end, 164 end,
153 ["tooltipTitle"] = "Item", 165 ["tooltipTitle"] = "Item",
154 ["tooltip"] = "Click to sort the list by item quality then item name.", 166 ["tooltip"] = "Click to sort the list by item quality then item name.",
155 }, 167 },
156 { 168 {
157 ["name"] = "Reason", 169 ["name"] = "Reason",
158 ["width"] = (scrollTableWidth * .4), 170 ["width"] = (scrollTableWidth * .4),
159 ["defaultsort"] = "dsc", 171 ["defaultsort"] = "dsc",
160 ["comparesort"] = function(this, aRow, bRow, column) 172 ["comparesort"] = function(this, aRow, bRow, columnNo)
161 if this.cols[column].sort == "dsc" then 173 local a = this:GetRow(aRow).rowData.reason[3];
162 return this:GetRow(aRow).rowData.reason[3] > this:GetRow(bRow).rowData.reason[3]; 174 local b = this:GetRow(bRow).rowData.reason[3];
163 else 175
164 return this:GetRow(aRow).rowData.reason[3] < this:GetRow(bRow).rowData.reason[3]; 176 return Compare(a, b, this, aRow, bRow, columnNo);
165 end
166 end, 177 end,
167 ["sort"] = "dsc", -- when the data is set, use this column to sort the default data 178 ["sort"] = "dsc", -- when the data is set, use this column to sort the default data
168 ["sortnext"] = 1, 179 ["sortnext"] = 1,
169 ["tooltipTitle"] = "Reason", 180 ["tooltipTitle"] = "Reason",
170 ["tooltip"] = "Click to sort the list by the reason the items couldn't be queued.", 181 ["tooltip"] = "Click to sort the list by the reason the items couldn't be queued.",
181 text = "Cancel", 192 text = "Cancel",
182 tooltipTitle = "Cancel", 193 tooltipTitle = "Cancel",
183 tooltip = "Do not queue anything and close the window.", 194 tooltip = "Do not queue anything and close the window.",
184 onClick = function() mod:QueueAbort(); end, 195 onClick = function() mod:QueueAbort(); end,
185 }; 196 };
186 197 local craftButton = {
187 addon:SetQueueFrameSettings("Inventorium Queue", "The following items can be added to the queue of your crafting addon. Do you wish to proceed?", proceedButton, cancelButton, headers, unqueueablesHeaders); 198 text = "Craft",
199 tooltipTitle = "Craft",
200 tooltip = "Start crafting the first item.",
201 onClick = function() mod:StartCrafting(); end,
202 };
203
204 addon:SetQueueFrameSettings("Inventorium Queue", "The following items can be added to the queue of your crafting addon. Do you wish to proceed?", proceedButton, cancelButton, craftButton, headers, unqueueablesHeaders);
188 end 205 end
189 end 206 end
190 207
191 function mod:BuildQueue() 208 function mod:BuildQueue()
192 MakeQueueWindow(); 209 MakeQueueWindow();
266 function mod:StartCrafting(test) 283 function mod:StartCrafting(test)
267 local frame = InventoriumQueuer; -- both for speed as code-consistency 284 local frame = InventoriumQueuer; -- both for speed as code-consistency
268 285
269 local selectedIndex = frame.scrollTable:GetSelection(); -- gets realrow index 286 local selectedIndex = frame.scrollTable:GetSelection(); -- gets realrow index
270 287
271 addon:Debug("%d was selected.", tostring(selectedIndex)); 288 addon:Debug("%s was selected.", tostring(selectedIndex));
272 289
273 if not selectedIndex then 290 if not selectedIndex then
274 -- Select the top most element (scrolltable with index of 1 will contain a index of the related realrow of the data table) 291 -- Select the top most element (scrolltable with index of 1 will contain a index of the related realrow of the data table)
275 selectedIndex = ((frame.scrollTable.sorttable and frame.scrollTable.sorttable[1]) or 1); 292 selectedIndex = ((frame.scrollTable.sorttable and frame.scrollTable.sorttable[1]) or 1);
276 293
277 addon:Debug("%d should be the top record.", tostring(selectedIndex)); 294 addon:Debug("%s should be the top record.", tostring(selectedIndex));
278 end 295 end
279 296
280 local nextQueue = frame.scrollTable.data[selectedIndex] or frame.scrollTable.data[1]; -- if the selected index still fails, try to get the first record 297 local nextQueue = frame.scrollTable.data[selectedIndex].rowData or frame.scrollTable.data[1].rowData; -- if the selected index still fails, try to get the first record
281 298
282 if nextQueue then 299 if nextQueue then
283 if not test then 300 if not test then
301 self:ResetTradeSkillFilters();
302
284 -- Initiate spell (test will be used while debugging to fake crafts) 303 -- Initiate spell (test will be used while debugging to fake crafts)
285 DoTradeSkill(nextQueue.craft.no, ceil(nextQueue.amount / nextQueue.craft.quantity)); 304 DoTradeSkill(nextQueue.craft.no, ceil(nextQueue.amount / nextQueue.craft.quantity));
286 end 305 end
287 306
288 -- Remember what we're crafting (saves many loops and/or table storing) 307 -- Remember what we're crafting (saves many loops and/or table storing)
583 self:QueueGroup(groupName); 602 self:QueueGroup(groupName);
584 end 603 end
585 end 604 end
586 605
587 do -- Trade skill recipes region 606 do -- Trade skill recipes region
588 -- Expand all categories so no crafts are hidden
589 local function ExpandSubClasses()
590 for i = GetNumTradeSkills(), 1, -1 do
591 local _, skillType, _, isExpanded = GetTradeSkillInfo(i);
592
593 if skillType == "header" and not isExpanded then
594 ExpandTradeSkillSubClass(i);
595 end
596 end
597 end
598
599 -- Reset all filters so no crafts are hidden 607 -- Reset all filters so no crafts are hidden
600 local function ResetFilters() 608 function mod:ResetTradeSkillFilters()
601 SetTradeSkillSubClassFilter(0, 1, 1); 609 SetTradeSkillSubClassFilter(0, 1, 1);
602 SetTradeSkillItemNameFilter(""); 610 SetTradeSkillItemNameFilter("");
603 SetTradeSkillItemLevelFilter(0, 0); 611 SetTradeSkillItemLevelFilter(0, 0);
604 TradeSkillOnlyShowSkillUps(false); 612 TradeSkillOnlyShowSkillUps(false);
605 TradeSkillOnlyShowMakeable(false); 613 TradeSkillOnlyShowMakeable(false);
614
615 -- Expand all categories so no crafts are hidden
616 for i = GetNumTradeSkills(), 1, -1 do
617 local _, skillType, _, isExpanded = GetTradeSkillInfo(i);
618
619 if skillType == "header" and not isExpanded then
620 ExpandTradeSkillSubClass(i);
621 end
622 end
606 end 623 end
607 624
608 -- Get all craftable items into a table. Each record contains "no", "spellId" and "quantity". The last is the average amount made per craft. 625 -- Get all craftable items into a table. Each record contains "no", "spellId" and "quantity". The last is the average amount made per craft.
609 function mod:GetTradeskillCraftables() 626 function mod:GetTradeskillCraftables()
610 local craftables = {}; 627 local craftables = {};
611 628
612 if GetTradeSkillLine() ~= "UNKNOWN" then 629 if GetTradeSkillLine() ~= "UNKNOWN" then
613 ExpandSubClasses(); 630 self:ResetTradeSkillFilters();
614 ResetFilters();
615 631
616 -- Cache all craftable items 632 -- Cache all craftable items
617 for i = 1, GetNumTradeSkills() do 633 for i = 1, GetNumTradeSkills() do
618 local itemLink = GetTradeSkillItemLink(i); 634 local itemLink = GetTradeSkillItemLink(i);
619 635