lotrointerface.com
Search Downloads

LoTROInterface SVN SortPack

[/] [trunk/] [JackdawPlugins/] [SortPack/] [Bag.lua] - Blame information for rev 165

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 163 MrJackdaw-1942
--[[Idea;
2 MrJackdaw-1942
 
3 MrJackdaw-1942
        Streamline the sort by using the new sorting function attached to listboxes.
4 MrJackdaw-1942
        1) Tag each backpack slot with the items weight when added (set to zero when removed)
5 MrJackdaw-1942
        2) When an item is added/moved to the pack, or the pack is opened, sort the group that contains it.
6 MrJackdaw-1942
 
7 MrJackdaw-1942
        This is a huge change, as it would no longer be nessecary (or desireable) to clear the bag when it is opened.
8 MrJackdaw-1942
        Indeed, this method could be so secure that it may be worth just resorting each group when the bag is opened/closed or changed (but only if visible!)
9 MrJackdaw-1942
 
10 MrJackdaw-1942
        ]]
11 MrJackdaw-1942
 
12 MrJackdaw-1942
 
13 MrJackdaw-1942
 
14 MrJackdaw-1942
 
15 148 MrJackdaw-1942
--Needs a tidy!
16 119 MrJackdaw-1942
--Check the bag datais valid.
17 127 MrJackdaw-1942
if SB==nil then SB={} end
18 148 MrJackdaw-1942
if SB.x==nil then                               SB.x=100                                                end     --}
19 MrJackdaw-1942
if      SB.y==nil then                          SB.y=100                                                end     --}Position
20 MrJackdaw-1942
if      SB.icx==nil then                        SB.icx=4                                                end     --]
21 MrJackdaw-1942
if      SB.icy==nil then                        SB.icy=3                                                end     --]Size, in icons
22 MrJackdaw-1942
if      SB.override==nil then   SB.override=false                       end     --Override default bags?
23 MrJackdaw-1942
if      SB.labelwidth==nil then         SB.labelwidth=80                        end     --Width of the text label for the group.
24 MrJackdaw-1942
if      SB.font==nil then                       SB.font="TrajanPro14"   end     --Label font
25 MrJackdaw-1942
if      SB.ShowItem==nil then   SB.ShowItem=true                        end     --un-hide a group when an item is looted in it?
26 119 MrJackdaw-1942
 
27 148 MrJackdaw-1942
 
28 127 MrJackdaw-1942
--font size
29 MrJackdaw-1942
SB.fontsize=string.sub(SB.font,-2)
30 MrJackdaw-1942
if SB.fontsize=="ed" then SB.fontsize=13-1 else SB.fontsize=tonumber(SB.fontsize)-1 end
31 104 MrJackdaw-1942
 
32 119 MrJackdaw-1942
--Frame padding
33 124 MrJackdaw-1942
pad={top=30,side=15,bottom=10}
34 105 MrJackdaw-1942
 
35 119 MrJackdaw-1942
--Calculate width and maximum height for the bag.
36 111 MrJackdaw-1942
SB.width=SB.labelwidth+36*SB.icx+2*pad.side
37 119 MrJackdaw-1942
SB.maxheight=Turbine.UI.Display.GetHeight()
38 105 MrJackdaw-1942
 
39 119 MrJackdaw-1942
--Functions
40 MrJackdaw-1942
        --Set the sizes of all the areas of the bag.
41 MrJackdaw-1942
        function SortBagSetSize()
42 151 MrJackdaw-1942
                SortBag.ListBox:SetSize( SB.labelwidth+SB.icx*36, SortBag:GetHeight()-(pad.top+pad.bottom)+1)
43 119 MrJackdaw-1942
                SortBag.ScrollBar:SetPosition(SB.labelwidth+SB.icx*36+10,pad.top+5)
44 MrJackdaw-1942
                SortBag.ScrollBar:SetHeight(SortBag:GetHeight()-(pad.top+pad.bottom)-10)
45 125 MrJackdaw-1942
                SortBag.Resize:SetPosition(SB.width-10,pad.top+10)
46 MrJackdaw-1942
                SortBag.Resize:SetSize(10,SortBag:GetHeight()-2*pad.top-10)
47 119 MrJackdaw-1942
                SortBag.ResizeBack:SetSize(10,SortBag:GetHeight()-pad.top-pad.bottom)
48 151 MrJackdaw-1942
                Search.label:SetSize(SB.labelwidth,SB.fontsize)
49 119 MrJackdaw-1942
        end
50 MrJackdaw-1942
 
51 MrJackdaw-1942
        --Adjust the sizes of the GroupBoxes.
52 MrJackdaw-1942
        function SetGroupBoxSize()
53 162 MrJackdaw-1942
 
54 138 MrJackdaw-1942
                if GroupBox==nil then return end
55 119 MrJackdaw-1942
                local height=0
56 162 MrJackdaw-1942
 
57 119 MrJackdaw-1942
                for j=0,#Groups do
58 MrJackdaw-1942
                        --Adjust GroupBox Widths
59 MrJackdaw-1942
                        GroupBox[j]:SetMaxItemsPerLine(SB.icx)
60 MrJackdaw-1942
                        GroupBox[j]:SetWidth(SB.icx*36)
61 MrJackdaw-1942
 
62 MrJackdaw-1942
                        --Hide the slot, or adjust its height
63 MrJackdaw-1942
                        if Groups[j].hide then
64 MrJackdaw-1942
                                GroupBox[j]:SetHeight(0)
65 MrJackdaw-1942
                                GroupBox[j].label:SetBackColor(Turbine.UI.Color( 1,0.4,0,0 ))
66 MrJackdaw-1942
                        else
67 MrJackdaw-1942
                                GroupBox[j]:SetHeight( math.ceil(GroupBox[j]:GetItemCount()/SB.icx)*36)
68 MrJackdaw-1942
                                GroupBox[j].label:SetBackColor(Turbine.UI.Color( 1,0,0,0.4 ))
69 MrJackdaw-1942
                        end
70 MrJackdaw-1942
 
71 MrJackdaw-1942
                        --Adjust Label Width,Height
72 MrJackdaw-1942
                        GroupBox[j].label:SetWidth(SB.labelwidth)
73 MrJackdaw-1942
                        if GroupBox[j]:GetItemCount()>0 then
74 MrJackdaw-1942
                                GroupBox[j].label:SetHeight(SB.fontsize)
75 MrJackdaw-1942
                        else
76 MrJackdaw-1942
                                GroupBox[j].label:SetHeight(0)
77 MrJackdaw-1942
                        end
78 MrJackdaw-1942
 
79 MrJackdaw-1942
                        --Add to the height variable
80 MrJackdaw-1942
                        height=height+math.max(GroupBox[j]:GetHeight(),GroupBox[j].label:GetHeight())
81 132 MrJackdaw-1942
 
82 119 MrJackdaw-1942
                end
83 132 MrJackdaw-1942
                if height>SB.maxheight-(pad.top+pad.bottom) then height=SB.maxheight-(pad.top+pad.bottom) end
84 MrJackdaw-1942
 
85 151 MrJackdaw-1942
                --Resize the window to fit the new height NOTE: The SB.fontsize is to accomodate the "search" box
86 MrJackdaw-1942
                        SortBag:SetHeight(height+pad.top+pad.bottom+SB.fontsize)
87 119 MrJackdaw-1942
 
88 MrJackdaw-1942
                        --Change the title to show how many empty slots are left
89 MrJackdaw-1942
                        SortBag:SetText(GroupBox[0]:GetItemCount().." empty slots left")
90 MrJackdaw-1942
        end
91 151 MrJackdaw-1942
 
92 MrJackdaw-1942
--Search function now added to the bag!
93 MrJackdaw-1942
        Search={}
94 105 MrJackdaw-1942
 
95 151 MrJackdaw-1942
        Search.label=Turbine.UI.Label()
96 MrJackdaw-1942
                Search.label:SetBackColor( Turbine.UI.Color( 1,0.1,0.1,0.1 ) )
97 MrJackdaw-1942
                Search.label:SetMultiline(true)
98 MrJackdaw-1942
                Search.label:SetTextAlignment( Turbine.UI.ContentAlignment.MiddleCenter )
99 MrJackdaw-1942
                Search.label:SetMouseVisible (true)
100 MrJackdaw-1942
                Search.label:SetSize(SB.labelwidth,SB.fontsize)
101 155 MrJackdaw-1942
                Search.label.MouseDown=function()
102 MrJackdaw-1942
                        Search.Textbox:SetText("")
103 163 MrJackdaw-1942
                        SearchBag("")
104 155 MrJackdaw-1942
                end
105 151 MrJackdaw-1942
 
106 MrJackdaw-1942
        Search.Textbox=Turbine.UI.TextBox()
107 MrJackdaw-1942
                Search.Textbox:SetSize(200,SB.fontsize)
108 MrJackdaw-1942
 
109 162 MrJackdaw-1942
        --Scan the text entered.
110 MrJackdaw-1942
        Search.Textbox.TextChanged=function()
111 MrJackdaw-1942
                SearchBag(Search.Textbox:GetText())
112 MrJackdaw-1942
        end
113 MrJackdaw-1942
 
114 MrJackdaw-1942
        function SearchBag(SearchString)
115 MrJackdaw-1942
                local txt1=string.lower(SearchString)
116 MrJackdaw-1942
                for i=1,size do
117 MrJackdaw-1942
                        local item = backpack:GetItem(i)
118 MrJackdaw-1942
                        if item~=nil then
119 MrJackdaw-1942
                                local itemInfo=item:GetItemInfo();
120 MrJackdaw-1942
                                local txt2=string.lower(itemInfo:GetName())
121 MrJackdaw-1942
                                if string.find(txt2,txt1) then
122 MrJackdaw-1942
                                        BackpackSlots[i]:SetVisible(true)
123 MrJackdaw-1942
                                else
124 MrJackdaw-1942
                                        BackpackSlots[i]:SetVisible(false)
125 MrJackdaw-1942
                                end
126 MrJackdaw-1942
                        end
127 151 MrJackdaw-1942
                end
128 162 MrJackdaw-1942
        end
129 MrJackdaw-1942
 
130 119 MrJackdaw-1942
        --populate the bag.
131 162 MrJackdaw-1942
        function populatebag()
132 119 MrJackdaw-1942
                SortBag.ListBox:ClearItems()
133 151 MrJackdaw-1942
 
134 MrJackdaw-1942
                --Add the search section. Fonts applied here too.
135 MrJackdaw-1942
                SortBag.ListBox:AddItem(Search.label)
136 MrJackdaw-1942
                SortBag.ListBox:AddItem(Search.Textbox)
137 MrJackdaw-1942
 
138 MrJackdaw-1942
                Search.Textbox:SetFont(Turbine.UI.Lotro.Font[SB.font])
139 MrJackdaw-1942
                Search.label:SetFont(Turbine.UI.Lotro.Font[SB.font])
140 MrJackdaw-1942
                Search.label:SetText( "Search" )
141 MrJackdaw-1942
 
142 MrJackdaw-1942
 
143 119 MrJackdaw-1942
                GroupBox={}
144 MrJackdaw-1942
                BackpackSlots=nil
145 MrJackdaw-1942
                BackpackSlots={}
146 MrJackdaw-1942
 
147 124 MrJackdaw-1942
                --Check for font size errors
148 MrJackdaw-1942
                if SB.labelwidth<SB.fontsize then SB.labelwidth=SB.fontsize end
149 MrJackdaw-1942
 
150 119 MrJackdaw-1942
                --Build VirtPack
151 MrJackdaw-1942
 
152 151 MrJackdaw-1942
                VirtPack=analysepack()
153 119 MrJackdaw-1942
 
154 MrJackdaw-1942
                ---Build a box for this group of items. Box 0 is for empty slots.
155 MrJackdaw-1942
                for i=0,#Groups do
156 MrJackdaw-1942
                        GroupBox[i] = Turbine.UI.ListBox()
157 MrJackdaw-1942
                        GroupBox[i]:SetOrientation( Turbine.UI.Orientation.Horizontal )
158 MrJackdaw-1942
 
159 MrJackdaw-1942
                        GroupBox[i]:SetAllowDrop( true )
160 MrJackdaw-1942
                        GroupBox[i].DragDrop = function( sender, args )
161 MrJackdaw-1942
                                --Empty slots allow drag-drop. Hopefully!
162 MrJackdaw-1942
                                local shortcut = args.DragDropInfo:GetShortcut();
163 MrJackdaw-1942
 
164 MrJackdaw-1942
                                if ( shortcut ~= nil ) then
165 MrJackdaw-1942
                                        local item = GroupBox[i]:GetItemAt( args.X, args.Y );
166 143 MrJackdaw-1942
                                        local index
167 MrJackdaw-1942
                                        if item==nil then index=1 else index= item.id end
168 119 MrJackdaw-1942
 
169 MrJackdaw-1942
                                        backpack:PerformShortcutDrop( shortcut, index, Turbine.UI.Control.IsShiftKeyDown() )
170 MrJackdaw-1942
                                end
171 MrJackdaw-1942
                        end
172 MrJackdaw-1942
                end
173 MrJackdaw-1942
 
174 MrJackdaw-1942
                --Build the backpack Slots.
175 MrJackdaw-1942
                for i=1,size do
176 148 MrJackdaw-1942
                        item = backpack:GetItem(i)
177 MrJackdaw-1942
                        if item~=nil then AddCallback(item, "QuantityChanged",  BagQuantityChanged) end
178 119 MrJackdaw-1942
                        BackpackSlots[i]=Turbine.UI.Lotro.ItemControl( item )
179 MrJackdaw-1942
                        BackpackSlots[i].id=i --so it can be passed for item swopping.
180 MrJackdaw-1942
                        BackpackSlots[i]:SetBackground( "JackdawPlugins/SortPack/Back.tga" )
181 MrJackdaw-1942
                        BackpackSlots[i]:SetBlendMode( Turbine.UI.BlendMode.Overlay )
182 MrJackdaw-1942
                end
183 MrJackdaw-1942
 
184 MrJackdaw-1942
                --Move the items into the boxes
185 MrJackdaw-1942
                for i=1,#VirtPack do
186 134 MrJackdaw-1942
                        --if i<10 then Turbine.Shell.WriteLine(VirtPack[i].id) end --Re-enable if the "not sorting correctly" bug rears its head again.
187 119 MrJackdaw-1942
                        BackpackSlots[VirtPack[i].id].Group=VirtPack[i].Group
188 MrJackdaw-1942
                        GroupBox[VirtPack[i].Group]:AddItem(BackpackSlots[VirtPack[i].id])
189 MrJackdaw-1942
                end
190 MrJackdaw-1942
 
191 MrJackdaw-1942
                --Add the groups to the backpack
192 MrJackdaw-1942
                for j=0,#Groups do
193 MrJackdaw-1942
                        --Build a label
194 MrJackdaw-1942
                        GroupBox[j].label=Turbine.UI.Label()
195 MrJackdaw-1942
                                GroupBox[j].label:SetBackColor( Turbine.UI.Color( 1,0,0,0.4 ) )
196 MrJackdaw-1942
                                GroupBox[j].label:SetFont(Turbine.UI.Lotro.Font[SB.font])
197 124 MrJackdaw-1942
                                GroupBox[j].label:SetMultiline(true)
198 119 MrJackdaw-1942
                                GroupBox[j].label:SetTextAlignment( Turbine.UI.ContentAlignment.MiddleCenter )
199 MrJackdaw-1942
                                GroupBox[j].label:SetText( Groups[j].Name )
200 MrJackdaw-1942
                                GroupBox[j].label:SetMouseVisible (true)
201 MrJackdaw-1942
                                GroupBox[j].label:SetSize(SB.labelwidth,0)--Initially of height 0
202 132 MrJackdaw-1942
                                GroupBox[j].label.label=true
203 MrJackdaw-1942
 
204 119 MrJackdaw-1942
                        if j~=0 then
205 MrJackdaw-1942
                                --Add the label and GroupBox, but not for empty slots
206 MrJackdaw-1942
                                SortBag.ListBox:AddItem(GroupBox[j].label)
207 MrJackdaw-1942
                                SortBag.ListBox:AddItem(GroupBox[j])
208 MrJackdaw-1942
                        end
209 148 MrJackdaw-1942
 
210 MrJackdaw-1942
                        --Click events for the labels.
211 147 MrJackdaw-1942
                        GroupBox[j].label.MouseClick=function(sender,args)
212 MrJackdaw-1942
                                if ( args.Button == Turbine.UI.MouseButton.Left ) then
213 148 MrJackdaw-1942
                                        --Left Clicking the label collapses this group
214 147 MrJackdaw-1942
                                        Groups[j].hide=not(Groups[j].hide)
215 MrJackdaw-1942
                                else
216 148 MrJackdaw-1942
                                        --Right clicking either collapses all groups, if this one is shown, or opens all groups if not.
217 MrJackdaw-1942
                                                Groups[j].hide=not(Groups[j].hide)
218 147 MrJackdaw-1942
                                        for i=0,#Groups do
219 148 MrJackdaw-1942
                                                Groups[i].hide=Groups[j].hide
220 147 MrJackdaw-1942
                                        end
221 MrJackdaw-1942
                                end
222 119 MrJackdaw-1942
                                SetGroupBoxSize()
223 MrJackdaw-1942
                        end
224 MrJackdaw-1942
                end
225 MrJackdaw-1942
                        --Empty Slots group added last.
226 MrJackdaw-1942
                        SortBag.ListBox:AddItem(GroupBox[0].label)
227 MrJackdaw-1942
                        SortBag.ListBox:AddItem(GroupBox[0])
228 MrJackdaw-1942
 
229 MrJackdaw-1942
                --Function refresh the heights of the group boxes
230 MrJackdaw-1942
                SetGroupBoxSize()
231 131 MrJackdaw-1942
        end
232 MrJackdaw-1942
 
233 MrJackdaw-1942
        --Show the backpack
234 151 MrJackdaw-1942
        function openbag()
235 MrJackdaw-1942
                --Clear out any previous search
236 MrJackdaw-1942
                Search.Textbox:SetText("")
237 163 MrJackdaw-1942
                SearchBag("")
238 151 MrJackdaw-1942
                --Show the bag!
239 131 MrJackdaw-1942
                SortBag:SetVisible(true)
240 MrJackdaw-1942
        end
241 MrJackdaw-1942
 
242 MrJackdaw-1942
        --Events here replace the default bags with this one.
243 MrJackdaw-1942
        function SBOverride()
244 MrJackdaw-1942
 
245 MrJackdaw-1942
                if SB.override then SortBag:SetWantsKeyEvents( true );
246 119 MrJackdaw-1942
 
247 131 MrJackdaw-1942
                        SortBag.KeyDown = function( sender, args )
248 MrJackdaw-1942
                                if ( args.Action == Turbine.UI.Lotro.Action.Escape ) then
249 MrJackdaw-1942
                                        SortBag:Close()
250 MrJackdaw-1942
                                end
251 MrJackdaw-1942
 
252 MrJackdaw-1942
                                if ( args.Action == Turbine.UI.Lotro.Action.ToggleBags or
253 MrJackdaw-1942
                                         args.Action == Turbine.UI.Lotro.Action.ToggleBag1 or
254 MrJackdaw-1942
                                         args.Action == Turbine.UI.Lotro.Action.ToggleBag2 or
255 MrJackdaw-1942
                                         args.Action == Turbine.UI.Lotro.Action.ToggleBag3 or
256 MrJackdaw-1942
                                         args.Action == Turbine.UI.Lotro.Action.ToggleBag4 or
257 158 MrJackdaw-1942
                                         args.Action == Turbine.UI.Lotro.Action.ToggleBag5 or
258 MrJackdaw-1942
                                         args.Action == Turbine.UI.Lotro.Action.ToggleBag6)
259 131 MrJackdaw-1942
                                then
260 MrJackdaw-1942
                                        if SortBag:IsVisible() then
261 MrJackdaw-1942
                                                SortBag:Close()
262 MrJackdaw-1942
                                        else
263 MrJackdaw-1942
                                                openbag()
264 MrJackdaw-1942
                                        end
265 MrJackdaw-1942
                                end
266 MrJackdaw-1942
                        end
267 MrJackdaw-1942
                        Turbine.UI.Lotro.LotroUI.SetEnabled( Turbine.UI.Lotro.LotroUIElement.Backpack1, false )
268 MrJackdaw-1942
                        Turbine.UI.Lotro.LotroUI.SetEnabled( Turbine.UI.Lotro.LotroUIElement.Backpack2, false )
269 MrJackdaw-1942
                        Turbine.UI.Lotro.LotroUI.SetEnabled( Turbine.UI.Lotro.LotroUIElement.Backpack3, false )
270 MrJackdaw-1942
                        Turbine.UI.Lotro.LotroUI.SetEnabled( Turbine.UI.Lotro.LotroUIElement.Backpack4, false )
271 MrJackdaw-1942
                        Turbine.UI.Lotro.LotroUI.SetEnabled( Turbine.UI.Lotro.LotroUIElement.Backpack5, false )
272 158 MrJackdaw-1942
                        Turbine.UI.Lotro.LotroUI.SetEnabled( Turbine.UI.Lotro.LotroUIElement.Backpack6, false )
273 131 MrJackdaw-1942
                else
274 MrJackdaw-1942
                        SortBag:SetWantsKeyEvents( false )
275 MrJackdaw-1942
                        Turbine.UI.Lotro.LotroUI.SetEnabled( Turbine.UI.Lotro.LotroUIElement.Backpack1, true )
276 MrJackdaw-1942
                        Turbine.UI.Lotro.LotroUI.SetEnabled( Turbine.UI.Lotro.LotroUIElement.Backpack2, true )
277 MrJackdaw-1942
                        Turbine.UI.Lotro.LotroUI.SetEnabled( Turbine.UI.Lotro.LotroUIElement.Backpack3, true )
278 MrJackdaw-1942
                        Turbine.UI.Lotro.LotroUI.SetEnabled( Turbine.UI.Lotro.LotroUIElement.Backpack4, true )
279 MrJackdaw-1942
                        Turbine.UI.Lotro.LotroUI.SetEnabled( Turbine.UI.Lotro.LotroUIElement.Backpack5, true )
280 158 MrJackdaw-1942
                        Turbine.UI.Lotro.LotroUI.SetEnabled( Turbine.UI.Lotro.LotroUIElement.Backpack6, true )
281 131 MrJackdaw-1942
                end
282 MrJackdaw-1942
        end
283 MrJackdaw-1942
 
284 MrJackdaw-1942
        --Next three items update the bag if items are added or removed.
285 MrJackdaw-1942
 
286 MrJackdaw-1942
 
287 MrJackdaw-1942
                BagAdd=function( sender, args )
288 162 MrJackdaw-1942
 
289 119 MrJackdaw-1942
                        --args.Index    = Bag slot
290 MrJackdaw-1942
                        --args.Item             = Item object
291 MrJackdaw-1942
 
292 MrJackdaw-1942
                        --Remove the slot from the group it is in.
293 MrJackdaw-1942
 
294 MrJackdaw-1942
                        for i=0,#Groups do
295 MrJackdaw-1942
                                if GroupBox[i]:ContainsItem(BackpackSlots[args.Index]) then GroupBox[i]:RemoveItem(BackpackSlots[args.Index]) end
296 MrJackdaw-1942
                        end
297 147 MrJackdaw-1942
 
298 119 MrJackdaw-1942
                        --Determine which group it belongs to
299 156 MrJackdaw-1942
                        local destination=ItemGroup[ItemCategory[GetCat(args.Item)]]
300 147 MrJackdaw-1942
 
301 134 MrJackdaw-1942
                        if destination==nil then destination=0 end
302 147 MrJackdaw-1942
 
303 119 MrJackdaw-1942
                        --Insert the item in that group
304 MrJackdaw-1942
                        BackpackSlots[args.Index]:SetItem(args.Item)
305 MrJackdaw-1942
                        BackpackSlots[args.Index].Group=destination
306 MrJackdaw-1942
 
307 MrJackdaw-1942
                        GroupBox[destination]:InsertItem(position,BackpackSlots[args.Index])
308 MrJackdaw-1942
 
309 134 MrJackdaw-1942
                        if destination~=0 then
310 MrJackdaw-1942
                                --Remove every item from that groupbox one at a time and resort them.
311 MrJackdaw-1942
                                local temp={}
312 MrJackdaw-1942
                                --cycle through the elements checking for weights
313 MrJackdaw-1942
                                for i=GroupBox[destination]:GetItemCount(),1,-1 do
314 MrJackdaw-1942
                                        temp[i]=GroupBox[destination]:GetItem(i)
315 MrJackdaw-1942
                                        temp[i].Weight=weight(temp[i].id)
316 MrJackdaw-1942
                                        temp[i].Name=GroupBox[destination]:GetItem(i):GetItem():GetName()
317 MrJackdaw-1942
                                end
318 MrJackdaw-1942
 
319 MrJackdaw-1942
                                --Remove all the items
320 MrJackdaw-1942
                                GroupBox[destination]:ClearItems()
321 MrJackdaw-1942
 
322 MrJackdaw-1942
                                --Sort the items according to weight (ignoring alpha. I am happy with this compromise)
323 MrJackdaw-1942
                                table.sort(temp, function (a,b)
324 MrJackdaw-1942
                                        if a.Weight == b.Weight then
325 MrJackdaw-1942
                                                --return a.Name < b.Name
326 MrJackdaw-1942
                                                --return strip(a.Name)< strip(b.Name)
327 MrJackdaw-1942
                                                if revorder then return strip(a.Name)> strip(b.Name) else return strip(a.Name)< strip(b.Name) end
328 MrJackdaw-1942
                                        else
329 MrJackdaw-1942
                                                if revorder then return (a.Weight > b.Weight) else return (a.Weight < b.Weight) end
330 MrJackdaw-1942
                                        end
331 MrJackdaw-1942
                                 end)
332 MrJackdaw-1942
 
333 MrJackdaw-1942
                                --Put the items in the group
334 MrJackdaw-1942
                                for i=1,#temp do
335 MrJackdaw-1942
                                        GroupBox[destination]:AddItem(temp[i])
336 MrJackdaw-1942
                                end
337 119 MrJackdaw-1942
                        end
338 132 MrJackdaw-1942
 
339 119 MrJackdaw-1942
                        --Refresh heights
340 MrJackdaw-1942
                        SetGroupBoxSize()
341 148 MrJackdaw-1942
 
342 MrJackdaw-1942
                        --Add the quantity changed event
343 MrJackdaw-1942
                        AddCallback(args.Item, "QuantityChanged",       BagQuantityChanged)
344 MrJackdaw-1942
                        unhide(args.Item)
345 119 MrJackdaw-1942
                end
346 131 MrJackdaw-1942
 
347 MrJackdaw-1942
                BagRemove=function( sender, args )
348 162 MrJackdaw-1942
 
349 142 MrJackdaw-1942
                        --Turbine.Shell.WriteLine("BagRemove "..args.Index)
350 121 MrJackdaw-1942
                        --Note: this is sometimes called when looting *and no item is removed* causing the "empty slot" bug. Annoying, and not my fault!
351 MrJackdaw-1942
 
352 119 MrJackdaw-1942
                        --Also called if a stack is merged.
353 MrJackdaw-1942
                        --args.Index    = Bag slot
354 148 MrJackdaw-1942
 
355 MrJackdaw-1942
                        --Remove the quantity changed callback
356 MrJackdaw-1942
                        item = backpack:GetItem(args.Index)
357 MrJackdaw-1942
                        RemoveCallback(item, "QuantityChanged",         BagQuantityChanged)
358 119 MrJackdaw-1942
 
359 MrJackdaw-1942
                        --Remove item from group
360 MrJackdaw-1942
                        GroupBox[BackpackSlots[args.Index].Group]:RemoveItem(BackpackSlots[args.Index])
361 MrJackdaw-1942
                        --Make the item for that slot nil
362 MrJackdaw-1942
                        BackpackSlots[args.Index]:SetItem(nil)
363 MrJackdaw-1942
                        BackpackSlots[args.Index].Group=0
364 MrJackdaw-1942
                        --Add it to empty slots.
365 MrJackdaw-1942
                        GroupBox[0]:AddItem(BackpackSlots[args.Index])
366 MrJackdaw-1942
 
367 MrJackdaw-1942
                        --Refesh Heights
368 MrJackdaw-1942
                        SetGroupBoxSize()
369 MrJackdaw-1942
                end
370 MrJackdaw-1942
 
371 131 MrJackdaw-1942
                BagMove=function( sender, args )
372 142 MrJackdaw-1942
                        --15/12/11 This has changed completely! The notes below are now false.
373 147 MrJackdaw-1942
 
374 142 MrJackdaw-1942
                        --Turbine.Shell.WriteLine("BagMove Old Index"..args.OldIndex.." New Index "..args.NewIndex)
375 119 MrJackdaw-1942
                        --[[
376 MrJackdaw-1942
                        1) If an item has just been moved to an empty slot then just this fires.
377 MrJackdaw-1942
                        2) If an item has been swopped with another; Say A in slot n1 with B in slot n2
378 MrJackdaw-1942
                                        ItemRemoved fires on slot n1
379 MrJackdaw-1942
                                        ItemMoved fires with B from n2 to n1
380 MrJackdaw-1942
                                        ItemAdded fires on slot n2 with item A
381 MrJackdaw-1942
 
382 132 MrJackdaw-1942
                        Essentially, item A (the moved item) gets held "in hand" making the target slot empty.
383 MrJackdaw-1942
 
384 MrJackdaw-1942
                        Recently I have come to the belief that it is this that causes the bug, and not ItemRemoved.
385 MrJackdaw-1942
                        ]]
386 119 MrJackdaw-1942
 
387 MrJackdaw-1942
                        --args.Item             =Item object of the item that has been moved.
388 MrJackdaw-1942
                        --args.NewIndex =Target Slot
389 MrJackdaw-1942
                        --args.OldIndex =Destination Slot
390 MrJackdaw-1942
 
391 MrJackdaw-1942
                        BackpackSlots[args.NewIndex],BackpackSlots[args.OldIndex]=BackpackSlots[args.OldIndex],BackpackSlots[args.NewIndex]
392 132 MrJackdaw-1942
 
393 MrJackdaw-1942
                        --Refresh heights
394 MrJackdaw-1942
                        SetGroupBoxSize()
395 MrJackdaw-1942
 
396 119 MrJackdaw-1942
                end
397 MrJackdaw-1942
 
398 148 MrJackdaw-1942
                BagQuantityChanged=function(sender,args)
399 MrJackdaw-1942
                        unhide(sender)
400 MrJackdaw-1942
                end
401 MrJackdaw-1942
 
402 MrJackdaw-1942
        function unhide(item)
403 MrJackdaw-1942
                if not(SB.ShowItem) then return end
404 156 MrJackdaw-1942
                local destination=ItemGroup[ItemCategory[GetCat(item)]]
405 148 MrJackdaw-1942
 
406 MrJackdaw-1942
                if destination==nil then destination=0 end
407 MrJackdaw-1942
 
408 MrJackdaw-1942
                --Un-Hide this group
409 MrJackdaw-1942
                if Groups[destination].hide then
410 MrJackdaw-1942
                        Groups[destination].hide=false
411 MrJackdaw-1942
                        SetGroupBoxSize()
412 MrJackdaw-1942
                end
413 MrJackdaw-1942
        end
414 MrJackdaw-1942
 
415 MrJackdaw-1942
        AddCallback(backpack, "ItemAdded",                      BagAdd)
416 MrJackdaw-1942
        AddCallback(backpack, "ItemRemoved",            BagRemove)
417 MrJackdaw-1942
        AddCallback(backpack, "ItemMoved",                      BagMove)
418 119 MrJackdaw-1942
 
419 MrJackdaw-1942
--Main Structure; Create the window to hold the backpack slots and populate it.
420 MrJackdaw-1942
 
421 111 MrJackdaw-1942
SortBag = Turbine.UI.Lotro.Window()
422 MrJackdaw-1942
        SortBag:SetPosition( SB.x,SB.y )
423 146 MrJackdaw-1942
        SortBag:SetText("SortBag")
424 104 MrJackdaw-1942
 
425 MrJackdaw-1942
SortBag.ListBox = Turbine.UI.ListBox()
426 111 MrJackdaw-1942
        SortBag.ListBox:SetParent( SortBag )
427 104 MrJackdaw-1942
        SortBag.ListBox:SetPosition( pad.side, pad.top )
428 105 MrJackdaw-1942
        SortBag.ListBox:SetMaxItemsPerLine(2)
429 104 MrJackdaw-1942
        SortBag.ListBox:SetOrientation( Turbine.UI.Orientation.Horizontal )
430 MrJackdaw-1942
 
431 105 MrJackdaw-1942
        SortBag.ScrollBar=Turbine.UI.Lotro.ScrollBar()
432 MrJackdaw-1942
                SortBag.ScrollBar:SetOrientation( Turbine.UI.Orientation.Vertical )
433 MrJackdaw-1942
                SortBag.ListBox:SetVerticalScrollBar( SortBag.ScrollBar )
434 111 MrJackdaw-1942
                SortBag.ScrollBar:SetParent(SortBag)
435 105 MrJackdaw-1942
                SortBag.ScrollBar:SetPosition(SB.labelwidth+SB.icx*36+10,pad.top+5)
436 MrJackdaw-1942
                SortBag.ScrollBar:SetWidth(10)
437 MrJackdaw-1942
 
438 114 MrJackdaw-1942
        --Remove this control when Turbine fix the backpack bug. again.
439 MrJackdaw-1942
        SortBag.Control=Turbine.UI.Control()
440 MrJackdaw-1942
                SortBag.Control:SetParent(SortBag)
441 MrJackdaw-1942
                SortBag.Control:SetMouseVisible(true)
442 MrJackdaw-1942
                SortBag.Control:SetBackground(0x41007e26)
443 MrJackdaw-1942
                SortBag.Control:SetSize(16,16)
444 MrJackdaw-1942
                SortBag.Control:SetPosition(pad.side-15,pad.top-15)
445 MrJackdaw-1942
 
446 MrJackdaw-1942
        SortBag.Control.MouseClick=function()
447 MrJackdaw-1942
                --This was, originally, in Button.lua. And is better there imho.
448 MrJackdaw-1942
                local contextMenu = Turbine.UI.ContextMenu()
449 150 MrJackdaw-1942
                contextMenu.items = contextMenu:GetItems()
450 151 MrJackdaw-1942
 
451 MrJackdaw-1942
                local option2=Turbine.UI.MenuItem("Re-stack the items - WARNING! EXPERIMENTAL!",true)
452 MrJackdaw-1942
                        option2.Click = function () import "JackdawPlugins.SortPack.Stack"      Turbine.Shell.WriteLine("<rgb=#888888>Starting stack")  Stack() end
453 114 MrJackdaw-1942
 
454 150 MrJackdaw-1942
                local option3=Turbine.UI.MenuItem("Override default bags",true,SB.override)
455 MrJackdaw-1942
                        option3.Click = function () SB.override=not(SB.override) SBOverride() end
456 MrJackdaw-1942
 
457 MrJackdaw-1942
                local option4=Turbine.UI.MenuItem("Open the sort order panel",true)
458 MrJackdaw-1942
                        option4.Click = function () import"JackdawPlugins.SortPack.ListOption" ShowListOption() end
459 MrJackdaw-1942
 
460 MrJackdaw-1942
                local option6=Turbine.UI.MenuItem("Create/Edit custom Categories",true)
461 MrJackdaw-1942
                        option6.Click = function () import"JackdawPlugins.SortPack.CustomOption" ShowCustomOption() end
462 MrJackdaw-1942
 
463 MrJackdaw-1942
                local option7=Turbine.UI.MenuItem("Show a group on item gain.",true,SB.ShowItem)
464 MrJackdaw-1942
                        option7.Click = function () SB.ShowItem=not(SB.ShowItem) end
465 165 MrJackdaw-1942
 
466 MrJackdaw-1942
                local option8=Turbine.UI.MenuItem("Open the Debug Window",true)
467 MrJackdaw-1942
                        option8.Click = function () import"JackdawPlugins.SortPack.Debug" Debug() end
468 150 MrJackdaw-1942
 
469 MrJackdaw-1942
                local option5 = Turbine.UI.MenuItem("Select SortBag label font;")
470 MrJackdaw-1942
                        contextMenu.SubMenuItems = option5:GetItems()
471 MrJackdaw-1942
                        local suboption5={}
472 MrJackdaw-1942
                        local font={}
473 MrJackdaw-1942
                        j=1
474 MrJackdaw-1942
                        for i in pairs(Turbine.UI.Lotro.Font) do
475 MrJackdaw-1942
                                font[j]=i
476 MrJackdaw-1942
                                j=j+1
477 MrJackdaw-1942
                        end
478 MrJackdaw-1942
                        table.sort(font, function (a,b)
479 MrJackdaw-1942
                                        return (a < b)
480 MrJackdaw-1942
                         end)
481 MrJackdaw-1942
                         for i=1,#font do
482 MrJackdaw-1942
                                suboption5[i] = Turbine.UI.MenuItem(font[i],true,font[i]==SB.font)
483 MrJackdaw-1942
                                suboption5[i].Click = function ()
484 MrJackdaw-1942
                                        SB.font=font[i]
485 MrJackdaw-1942
                                        SB.fontsize=string.sub(SB.font,-2)
486 MrJackdaw-1942
                                        if SB.fontsize=="ed" then SB.fontsize=13-1 else SB.fontsize=tonumber(SB.fontsize)-1 end
487 MrJackdaw-1942
                                        populatebag()
488 MrJackdaw-1942
                                end
489 114 MrJackdaw-1942
 
490 150 MrJackdaw-1942
                                contextMenu.SubMenuItems:Add(suboption5[i])
491 114 MrJackdaw-1942
                        end
492 150 MrJackdaw-1942
 
493 151 MrJackdaw-1942
                contextMenu.items:Add(option2)
494 150 MrJackdaw-1942
                contextMenu.items:Add(option5)
495 MrJackdaw-1942
                contextMenu.items:Add(option3)
496 MrJackdaw-1942
                contextMenu.items:Add(option7)
497 MrJackdaw-1942
                contextMenu.items:Add(option4)
498 MrJackdaw-1942
                contextMenu.items:Add(option6)
499 165 MrJackdaw-1942
                contextMenu.items:Add(option8)
500 150 MrJackdaw-1942
 
501 MrJackdaw-1942
                contextMenu:ShowMenu()
502 MrJackdaw-1942
        end
503 114 MrJackdaw-1942
 
504 104 MrJackdaw-1942
        SortBag.Resize=Turbine.UI.Control()
505 111 MrJackdaw-1942
                SortBag.Resize:SetParent(SortBag)
506 104 MrJackdaw-1942
                SortBag.Resize:SetZOrder(99)
507 MrJackdaw-1942
 
508 MrJackdaw-1942
                SortBag.ResizeBack=Turbine.UI.Control()
509 MrJackdaw-1942
                SortBag.ResizeBack:SetParent(SortBag.Resize)
510 111 MrJackdaw-1942
                SortBag.ResizeBack:SetBackColor(Turbine.UI.Color(0.7,0.3,0.3,1))
511 104 MrJackdaw-1942
                SortBag.ResizeBack:SetVisible(false)
512 MrJackdaw-1942
                SortBag.ResizeBack:SetMouseVisible(false)
513 MrJackdaw-1942
 
514 MrJackdaw-1942
                SortBag.Resize.MouseEnter=function() SortBag.ResizeBack:SetVisible(true) end
515 MrJackdaw-1942
                SortBag.Resize.MouseLeave=function() SortBag.ResizeBack:SetVisible(false)  end
516 MrJackdaw-1942
 
517 MrJackdaw-1942
                SortBag.Resize.MouseDown=function ()
518 MrJackdaw-1942
                        draggingr=true
519 MrJackdaw-1942
                end
520 MrJackdaw-1942
                SortBag.Resize.MouseUp=function ()
521 MrJackdaw-1942
                        draggingr=false
522 MrJackdaw-1942
                end
523 105 MrJackdaw-1942
                SortBag.Resize.MouseMove=function(sender,args)
524 104 MrJackdaw-1942
                        if draggingr then
525 105 MrJackdaw-1942
                                local oldwidth=SB.width
526 151 MrJackdaw-1942
                                SB.width,dummy=SortBag:GetMousePosition()
527 111 MrJackdaw-1942
 
528 105 MrJackdaw-1942
                                if SortBag:IsAltKeyDown() then
529 MrJackdaw-1942
                                        SB.labelwidth=SB.width-oldwidth+SB.labelwidth
530 124 MrJackdaw-1942
                                        if SB.labelwidth<SB.fontsize then SB.labelwidth=SB.fontsize end
531 105 MrJackdaw-1942
                                else
532 MrJackdaw-1942
                                        SB.icx=math.floor((SB.width-2*pad.side-SB.labelwidth)/36)
533 111 MrJackdaw-1942
                                        SB.icy=math.floor((SB.maxheight-(pad.top+pad.bottom))/36)
534 104 MrJackdaw-1942
                                        if SB.icx<3 then SB.icx=3 end
535 MrJackdaw-1942
                                        if SB.icy<1 then SB.icy=1 end
536 105 MrJackdaw-1942
                                end
537 MrJackdaw-1942
                                        SB.width=36*SB.icx+2*pad.side+SB.labelwidth
538 111 MrJackdaw-1942
                                        SortBag:SetSize(SB.width,SB.maxheight)
539 104 MrJackdaw-1942
                        end
540 111 MrJackdaw-1942
                end
541 104 MrJackdaw-1942
 
542 121 MrJackdaw-1942
SortBag.SizeChanged=function()
543 130 MrJackdaw-1942
        SortBagSetSize()
544 MrJackdaw-1942
        SetGroupBoxSize()
545 MrJackdaw-1942
 
546 MrJackdaw-1942
        --Now, if the size of the bag would take the bottom of the bag off the screen, then re-position it.
547 MrJackdaw-1942
        local x,y=SortBag:GetPosition()
548 MrJackdaw-1942
        if y+SortBag:GetHeight()>SB.maxheight then y=SB.maxheight-SortBag:GetHeight() end
549 MrJackdaw-1942
        SortBag:SetPosition(x,y)
550 111 MrJackdaw-1942
end
551 MrJackdaw-1942
 
552 121 MrJackdaw-1942
SortBag:SetSize(SB.width,SB.maxheight)
553 111 MrJackdaw-1942
 
554 MrJackdaw-1942
SortBag.PositionChanged=function()
555 MrJackdaw-1942
        local x,y=SortBag:GetPosition()
556 MrJackdaw-1942
                if x<0 then x=0 end
557 MrJackdaw-1942
                if y<0 then y=0 end
558 MrJackdaw-1942
                SortBag:SetPosition(x,y)
559 MrJackdaw-1942
                SB.x,SB.y=x,y
560 MrJackdaw-1942
end
561 110 MrJackdaw-1942
 
562 119 MrJackdaw-1942
populatebag()
563 110 MrJackdaw-1942
 
564 114 MrJackdaw-1942
SBOverride()

All times are GMT -5. The time now is 11:38 PM.


Our Network
EQInterface | EQ2Interface | Minion | WoWInterface | ESOUI | LoTROInterface | MMOUI | Swtorui