-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Expand file tree
/
Copy pathBuildSetListControl.lua
More file actions
151 lines (142 loc) · 5.59 KB
/
Copy pathBuildSetListControl.lua
File metadata and controls
151 lines (142 loc) · 5.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
-- Path of Building
--
-- Class: Build Set List
-- Build set list control.
--
local t_insert = table.insert
local t_remove = table.remove
local m_max = math.max
local s_format = string.format
local BuildSetListClass = newClass("BuildSetListControl", "ListControl", function(self, anchor, rect, buildMode, treeTab)
self.ListControl(anchor, rect, 16, "VERTICAL", true, buildMode.treeTab.specList)
self.buildMode = buildMode
self.controls.copy = new("ButtonControl", { "BOTTOMLEFT", self, "TOP" }, { 2, -4, 60, 18 }, "Copy", function()
local build = buildMode:GetLoadoutByName(self.selValue.title)
self:CopyLoadoutClick(build)
end)
self.controls.copy.enabled = function()
return self.selValue ~= nil
end
self.controls.delete = new("ButtonControl", { "LEFT", self.controls.copy, "RIGHT" }, { 4, 0, 60, 18 }, "Delete",
function()
self:OnSelDelete(self.selIndex, self.selValue)
end)
self.controls.delete.enabled = function()
return self.selValue ~= nil and #self.list > 1
end
self.controls.rename = new("ButtonControl", { "BOTTOMRIGHT", self, "TOP" }, { -2, -4, 60, 18 }, "Rename", function()
self:RenameLoadout(self.selValue)
end)
self.controls.rename.enabled = function()
return self.selValue ~= nil
end
self.controls.new = new("ButtonControl", { "RIGHT", self.controls.rename, "LEFT" }, { -4, 0, 60, 18 }, "New",
function()
self:NewLoadout()
end)
end)
function BuildSetListClass:RenameLoadout(spec, addOnName)
local controls = {}
local specName = spec.title or "Default"
controls.label = new("LabelControl", nil, { 0, 20, 0, 16 }, "^7Enter name for this loadout:")
controls.edit = new("EditControl", nil, { 0, 40, 350, 20 }, specName, nil, nil, 100, function(buf)
controls.save.enabled = buf:match("%S")
end)
controls.save = new("ButtonControl", nil, { -45, 70, 80, 20 }, "Save", function()
local newTitle = controls.edit.buf
self.buildMode:RenameLoadout(specName, newTitle, function()
self.buildMode:SyncLoadouts()
self.buildMode.modFlag = true
end)
if addOnName then
self.selIndex = self.buildMode.treeTab.specListIdToOrderId[spec.id]
self.selValue = spec
end
main:ClosePopup()
end)
controls.save.enabled = false
controls.cancel = new("ButtonControl", nil, { 45, 70, 80, 20 }, "Cancel", function()
main:ClosePopup()
end)
main:OpenPopup(370, 100, specName and "Rename Loadout" or "Set Name", controls, "save", "edit", "cancel")
end
function BuildSetListClass:CopyLoadoutClick(build)
local controls = {}
local buildName = self.buildMode.treeTab.specList[build.specId].title
controls.label = new("LabelControl", nil, { 0, 20, 0, 16 }, "^7Enter name for this loadout:")
controls.edit = new("EditControl", nil, { 0, 40, 350, 20 }, buildName, nil, nil, 100, function(buf)
controls.save.enabled = buf:match("%S")
end)
controls.save = new("ButtonControl", nil, { -45, 70, 80, 20 }, "Save", function()
local newBuildName = controls.edit.buf
local newSpec = self.buildMode:CopyLoadout(build.specId, build.itemSetId, build.skillSetId, build.configSetId,
newBuildName)
self.buildMode:SyncLoadouts()
self.buildMode.modFlag = true
self.buildMode.controls.buildLoadouts:SetSel(newSpec.id + 1)
main:ClosePopup()
end)
controls.save.enabled = false
controls.cancel = new("ButtonControl", nil, { 45, 70, 80, 20 }, "Cancel", function()
main:ClosePopup()
end)
main:OpenPopup(370, 100, buildName and "Rename" or "Set Name", controls, "save", "edit", "cancel")
end
function BuildSetListClass:NewLoadout()
local controls = {}
controls.label = new("LabelControl", nil, { 0, 20, 0, 16 }, "^7Enter name for this loadout:")
controls.edit = new("EditControl", nil, { 0, 40, 350, 20 }, "New Loadout", nil, nil, 100, function(buf)
controls.save.enabled = buf:match("%S")
end)
controls.save = new("ButtonControl", nil, { -45, 70, 80, 20 }, "Save", function()
self.buildMode:NewLoadout(controls.edit.buf, function()
self.buildMode:SyncLoadouts()
self.buildMode.modFlag = true
self.buildMode.controls.buildLoadouts:SetSel(1)
main:ClosePopup()
end)
end)
controls.save.enabled = false
controls.cancel = new("ButtonControl", nil, { 45, 70, 80, 20 }, "Cancel", function()
main:ClosePopup()
end)
main:OpenPopup(370, 100, "Set Name", controls, "save", "edit", "cancel")
end
function BuildSetListClass:GetRowValue(column, index, spec)
if column == 1 then
local used = spec:CountAllocNodes()
return (spec.treeVersion ~= latestTreeVersion and ("[" .. treeVersions[spec.treeVersion].display .. "] ") or "")
.. (spec.title or "Default")
..
" (" ..
(spec.curAscendClassName ~= "None" and spec.curAscendClassName or spec.curClassName) ..
", " .. used .. " points)"
.. (index == self.buildMode.treeTab.activeSpec and " ^9(Current)" or "")
end
end
function BuildSetListClass:OnOrderChange()
self.buildMode.modFlag = true
end
function BuildSetListClass:OnSelClick(index, spec, doubleClick)
if doubleClick and index ~= self.buildMode.treeTab.activeSpec then
self.buildMode.controls.buildLoadouts:SetSel(index + 1)
end
end
function BuildSetListClass:OnSelDelete(index, spec)
if #self.list > 1 then
main:OpenConfirmPopup("Delete Loadout", "Are you sure you want to delete '" .. (spec.title or "Default") .. "'?",
"Delete", function()
t_remove(self.list, index)
local nextLoadoutIndex = index == self.buildMode.treeTab.activeSpec and m_max(1, index - 1) or index
local nextLoadout = self.list[nextLoadoutIndex]
self.buildMode:DeleteLoadout(spec.title or "Default", nextLoadout.title or "Default")
self.selIndex = nil
self.selValue = nil
end)
end
end
function BuildSetListClass:OnSelKeyDown(index, spec, key)
if key == "F2" then
self:RenameLoadout(spec)
end
end