jcallahan@249
|
1 -- LUA API ------------------------------------------------------------
|
jcallahan@249
|
2
|
jcallahan@249
|
3 local _G = getfenv(0)
|
jcallahan@249
|
4
|
jcallahan@249
|
5 local table = _G.table
|
jcallahan@249
|
6
|
jcallahan@267
|
7 local next = _G.next
|
jcallahan@267
|
8
|
jcallahan@249
|
9 -- ADDON NAMESPACE ----------------------------------------------------
|
jcallahan@249
|
10
|
jcallahan@249
|
11 local ADDON_NAME, private = ...
|
jcallahan@249
|
12
|
jcallahan@249
|
13 local LibStub = _G.LibStub
|
jcallahan@249
|
14 local WDP = LibStub("AceAddon-3.0"):GetAddon(ADDON_NAME)
|
jcallahan@259
|
15 local Dialog = LibStub("LibDialog-1.0")
|
jcallahan@249
|
16
|
jcallahan@249
|
17 local ParseGUID = private.ParseGUID
|
jcallahan@260
|
18 local ItemLinkToID = private.ItemLinkToID
|
jcallahan@263
|
19 local DBEntry = private.DBEntry
|
jcallahan@249
|
20
|
jcallahan@258
|
21 -- CONSTANTS ----------------------------------------------------------
|
jcallahan@258
|
22
|
jcallahan@258
|
23 local EDIT_MAXCHARS = 3000
|
jcallahan@259
|
24 local EDIT_DESCRIPTION_FORMAT = "Enter your comment below, being as descriptive as possible. Comments are limited to %s characters, including newlines and spaces."
|
jcallahan@259
|
25 local LINK_COMMENT_TOOLTIP = "Click here to create a link to the comment page on WoWDB."
|
jcallahan@261
|
26 local LINK_EDITBOX_DESC_FORMAT = "Copy the highlighted text and paste it into your browser to visit the comments for |cffffd200%s|r."
|
jcallahan@259
|
27
|
jcallahan@259
|
28 local URL_BASE = "http://www.wowdb.com/"
|
jcallahan@259
|
29
|
jcallahan@259
|
30 local URL_TYPE_MAP = {
|
jcallahan@267
|
31 ACHIEVEMENT = "achievements",
|
jcallahan@259
|
32 ITEM = "items",
|
jcallahan@259
|
33 OBJECT = "objects",
|
jcallahan@259
|
34 NPC = "npcs",
|
jcallahan@261
|
35 QUEST = "quests",
|
jcallahan@260
|
36 SPELL = "spells",
|
jcallahan@259
|
37 VEHICLE = "npcs",
|
jcallahan@259
|
38 }
|
jcallahan@259
|
39
|
jcallahan@259
|
40 Dialog:Register("WDP_CommentLink", {
|
jcallahan@259
|
41 text = "",
|
jcallahan@259
|
42 editboxes = {
|
jcallahan@259
|
43 {
|
jcallahan@259
|
44 text = _G.UNKNOWN,
|
jcallahan@259
|
45 on_escape_pressed = function(self)
|
jcallahan@259
|
46 self:ClearFocus()
|
jcallahan@259
|
47 end,
|
jcallahan@265
|
48 on_enter_pressed = function(self)
|
jcallahan@265
|
49 self:GetParent().buttons[1]:Click()
|
jcallahan@265
|
50 end,
|
jcallahan@259
|
51 },
|
jcallahan@259
|
52 },
|
jcallahan@259
|
53 buttons = {
|
jcallahan@259
|
54 {
|
jcallahan@259
|
55 text = _G.OKAY,
|
jcallahan@259
|
56 }
|
jcallahan@259
|
57 },
|
jcallahan@259
|
58 show_while_dead = true,
|
jcallahan@259
|
59 hide_on_escape = true,
|
jcallahan@259
|
60 is_exclusive = true,
|
jcallahan@259
|
61 on_show = function(self, data)
|
jcallahan@259
|
62 local editbox = self.editboxes[1]
|
jcallahan@259
|
63 editbox:SetWidth(self:GetWidth() - 20)
|
jcallahan@259
|
64 editbox:SetText(("%s%s/%d#related:comments"):format(URL_BASE, URL_TYPE_MAP[data.type_name], data.id))
|
jcallahan@259
|
65 editbox:HighlightText()
|
jcallahan@259
|
66 editbox:SetFocus()
|
jcallahan@259
|
67
|
jcallahan@261
|
68 self.text:SetJustifyH("LEFT")
|
jcallahan@259
|
69 self.text:SetFormattedText(LINK_EDITBOX_DESC_FORMAT:format(data.label))
|
jcallahan@259
|
70 end,
|
jcallahan@259
|
71 })
|
jcallahan@259
|
72
|
jcallahan@259
|
73 local comment_subject = {}
|
jcallahan@258
|
74
|
jcallahan@249
|
75 -- HELPERS ------------------------------------------------------------
|
jcallahan@249
|
76
|
jcallahan@249
|
77 local comment_frame
|
jcallahan@249
|
78 do
|
jcallahan@249
|
79 local panel = _G.CreateFrame("Frame", "WDP_CommentFrame", _G.UIParent, "TranslucentFrameTemplate")
|
jcallahan@258
|
80 panel:SetSize(480, 350)
|
jcallahan@249
|
81 panel:SetPoint("CENTER", _G.UIParent, "CENTER")
|
jcallahan@249
|
82 panel:SetFrameStrata("DIALOG")
|
jcallahan@249
|
83 panel.Bg:SetTexture([[Interface\FrameGeneral\UI-Background-Rock]], true, true)
|
jcallahan@249
|
84 panel.Bg:SetHorizTile(true)
|
jcallahan@249
|
85 panel.Bg:SetVertTile(true)
|
jcallahan@264
|
86 panel:EnableMouse(true)
|
jcallahan@264
|
87 panel:SetMovable(true)
|
jcallahan@249
|
88 panel:Hide()
|
jcallahan@249
|
89 comment_frame = panel
|
jcallahan@249
|
90
|
jcallahan@249
|
91 table.insert(_G.UISpecialFrames, panel:GetName())
|
jcallahan@249
|
92
|
jcallahan@249
|
93 local streaks = panel:CreateTexture("$parentTopTileStreaks", "BORDER", "_UI-Frame-TopTileStreaks", -6)
|
jcallahan@249
|
94 streaks:SetPoint("TOPLEFT", 13, -13)
|
jcallahan@249
|
95 streaks:SetPoint("BOTTOMRIGHT", panel, "TOPRIGHT", -13, -35)
|
jcallahan@249
|
96
|
jcallahan@249
|
97 local header = _G.CreateFrame("Frame", "$parentHeader", panel, "TranslucentFrameTemplate")
|
jcallahan@249
|
98 header:SetSize(128, 64)
|
jcallahan@249
|
99 header:SetPoint("CENTER", panel, "TOP", 0, -8)
|
jcallahan@249
|
100 header.Bg:SetTexture([[Interface\FrameGeneral\UI-Background-Marble]])
|
jcallahan@249
|
101 header.Bg:SetHorizTile(true)
|
jcallahan@249
|
102 header.Bg:SetVertTile(true)
|
jcallahan@264
|
103 header:SetMovable(true)
|
jcallahan@264
|
104
|
jcallahan@264
|
105 header:SetScript("OnMouseDown", function()
|
jcallahan@264
|
106 panel:StartMoving()
|
jcallahan@264
|
107 end)
|
jcallahan@264
|
108
|
jcallahan@264
|
109 header:SetScript("OnMouseUp", function()
|
jcallahan@264
|
110 panel:StopMovingOrSizing()
|
jcallahan@264
|
111 end)
|
jcallahan@264
|
112
|
jcallahan@249
|
113 panel.header = header
|
jcallahan@249
|
114
|
jcallahan@249
|
115 local logo = header:CreateTexture(nil, "ARTWORK")
|
jcallahan@249
|
116 logo:SetTexture([[Interface\AddOns\WoWDBProfiler\wowdb-logo]])
|
jcallahan@249
|
117 logo:SetPoint("TOPLEFT", header, 10, -10)
|
jcallahan@249
|
118 logo:SetPoint("BOTTOMRIGHT", header, -10, 10)
|
jcallahan@249
|
119
|
jcallahan@258
|
120 local subject_name = panel:CreateFontString(nil, "ARTWORK", "GameFontNormal")
|
jcallahan@258
|
121 subject_name:SetPoint("TOP", header, "BOTTOM", 0, -10)
|
jcallahan@258
|
122 panel.subject_name = subject_name
|
jcallahan@258
|
123
|
jcallahan@258
|
124 local subject_data = panel:CreateFontString(nil, "ARTWORK", "GameFontNormal")
|
jcallahan@258
|
125 subject_data:SetPoint("TOP", subject_name, "BOTTOM", 0, -3)
|
jcallahan@258
|
126 panel.subject_data = subject_data
|
jcallahan@249
|
127
|
jcallahan@249
|
128 local close = _G.CreateFrame("Button", nil, panel, "UIPanelCloseButton")
|
jcallahan@249
|
129 close:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -7, -7)
|
jcallahan@249
|
130
|
jcallahan@249
|
131 local scroll_frame = _G.CreateFrame("ScrollFrame", "$parentScrollFrame", panel)
|
jcallahan@249
|
132 scroll_frame:SetSize(435, 150)
|
jcallahan@249
|
133 scroll_frame:SetPoint("BOTTOM", 0, 70)
|
jcallahan@249
|
134
|
jcallahan@249
|
135 scroll_frame:SetScript("OnScrollRangeChanged", function(self, x, y)
|
jcallahan@249
|
136 _G.ScrollFrame_OnScrollRangeChanged(self, x, y)
|
jcallahan@249
|
137 end)
|
jcallahan@249
|
138
|
jcallahan@249
|
139 scroll_frame:SetScript("OnVerticalScroll", function(self, offset)
|
jcallahan@249
|
140 local scrollbar = self.ScrollBar
|
jcallahan@249
|
141 scrollbar:SetValue(offset)
|
jcallahan@249
|
142
|
jcallahan@249
|
143 local min, max = scrollbar:GetMinMaxValues()
|
jcallahan@249
|
144
|
jcallahan@249
|
145 if offset == 0 then
|
jcallahan@249
|
146 scrollbar.ScrollUpButton:Disable()
|
jcallahan@249
|
147 else
|
jcallahan@249
|
148 scrollbar.ScrollUpButton:Enable()
|
jcallahan@249
|
149 end
|
jcallahan@249
|
150
|
jcallahan@249
|
151 if (scrollbar:GetValue() - max) == 0 then
|
jcallahan@249
|
152 scrollbar.ScrollDownButton:Disable()
|
jcallahan@249
|
153 else
|
jcallahan@249
|
154 scrollbar.ScrollDownButton:Enable()
|
jcallahan@249
|
155 end
|
jcallahan@249
|
156 end)
|
jcallahan@249
|
157
|
jcallahan@249
|
158 scroll_frame:SetScript("OnMouseWheel", function(self, delta)
|
jcallahan@249
|
159 _G.ScrollFrameTemplate_OnMouseWheel(self, delta)
|
jcallahan@249
|
160 end)
|
jcallahan@249
|
161
|
jcallahan@266
|
162 -- This is needed because the EditBox starts with a height of a single line, so getting focus on click would require finding the EditBox blindly.
|
jcallahan@266
|
163 scroll_frame:SetScript("OnMouseUp", function(self)
|
jcallahan@266
|
164 _G.EditBox_SetFocus(self.edit_box)
|
jcallahan@266
|
165 end)
|
jcallahan@266
|
166
|
jcallahan@258
|
167 panel.scroll_frame = scroll_frame
|
jcallahan@258
|
168
|
jcallahan@249
|
169 local edit_container = _G.CreateFrame("Frame", nil, scroll_frame)
|
jcallahan@249
|
170 edit_container:SetPoint("TOPLEFT", scroll_frame, -7, 7)
|
jcallahan@249
|
171 edit_container:SetPoint("BOTTOMRIGHT", scroll_frame, 7, -7)
|
jcallahan@249
|
172 edit_container:SetFrameLevel(scroll_frame:GetFrameLevel() - 1)
|
jcallahan@249
|
173 edit_container:SetBackdrop({
|
jcallahan@249
|
174 bgFile = [[Interface\Tooltips\UI-Tooltip-Background]],
|
jcallahan@249
|
175 edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]],
|
jcallahan@249
|
176 tile = true,
|
jcallahan@249
|
177 tileSize = 16,
|
jcallahan@249
|
178 edgeSize = 16,
|
jcallahan@249
|
179 insets = {
|
jcallahan@249
|
180 left = 5,
|
jcallahan@249
|
181 right = 5,
|
jcallahan@249
|
182 top = 5,
|
jcallahan@249
|
183 bottom = 5
|
jcallahan@249
|
184 }
|
jcallahan@249
|
185 })
|
jcallahan@249
|
186
|
jcallahan@249
|
187 edit_container:SetBackdropBorderColor(_G.TOOLTIP_DEFAULT_COLOR.r, _G.TOOLTIP_DEFAULT_COLOR.g, _G.TOOLTIP_DEFAULT_COLOR.b)
|
jcallahan@249
|
188 edit_container:SetBackdropColor(0, 0, 0)
|
jcallahan@249
|
189
|
jcallahan@259
|
190 local link_button = _G.CreateFrame("Button", "$parentLinkButton", panel)
|
jcallahan@259
|
191 link_button:SetSize(32, 16)
|
jcallahan@259
|
192 link_button:SetPoint("TOPRIGHT", edit_container, "BOTTOMRIGHT", 5, 0)
|
jcallahan@259
|
193
|
jcallahan@259
|
194 link_button:SetNormalTexture([[Interface\TradeSkillFrame\UI-TradeSkill-LinkButton]])
|
jcallahan@259
|
195 link_button:GetNormalTexture():SetTexCoord(0, 1, 0, 0.5)
|
jcallahan@259
|
196
|
jcallahan@259
|
197 link_button:SetHighlightTexture([[Interface\TradeSkillFrame\UI-TradeSkill-LinkButton]])
|
jcallahan@259
|
198 link_button:GetHighlightTexture():SetTexCoord(0, 1, 0.5, 1)
|
jcallahan@259
|
199
|
jcallahan@259
|
200 link_button:SetScript("OnClick", function(self)
|
jcallahan@259
|
201 Dialog:Spawn("WDP_CommentLink", { type_name = comment_subject.type_name, id = comment_subject.id, label = comment_subject.label })
|
jcallahan@259
|
202 end)
|
jcallahan@259
|
203
|
jcallahan@259
|
204 link_button:SetScript("OnEnter", function(self)
|
jcallahan@259
|
205 _G.GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT")
|
jcallahan@259
|
206 _G.GameTooltip:SetText(LINK_COMMENT_TOOLTIP, nil, nil, nil, nil, 1)
|
jcallahan@259
|
207 _G.GameTooltip:Show()
|
jcallahan@259
|
208 end)
|
jcallahan@259
|
209
|
jcallahan@259
|
210 link_button:SetScript("OnLeave", _G.GameTooltip_Hide)
|
jcallahan@259
|
211
|
jcallahan@266
|
212 local edit_description = edit_container:CreateFontString(nil, "ARTWORK", "GameFontHighlight")
|
jcallahan@258
|
213 edit_description:SetHeight(36)
|
jcallahan@258
|
214 edit_description:SetPoint("BOTTOMLEFT", edit_container, "TOPLEFT", 5, 3)
|
jcallahan@258
|
215 edit_description:SetPoint("BOTTOMRIGHT", edit_container, "TOPRIGHT", 5, 3)
|
jcallahan@258
|
216 edit_description:SetFormattedText(EDIT_DESCRIPTION_FORMAT, _G.BreakUpLargeNumbers(EDIT_MAXCHARS))
|
jcallahan@258
|
217 edit_description:SetWordWrap(true)
|
jcallahan@258
|
218 edit_description:SetJustifyH("LEFT")
|
jcallahan@258
|
219
|
jcallahan@266
|
220 local edit_box = _G.CreateFrame("EditBox", "$parentEditBox", scroll_frame)
|
jcallahan@249
|
221 edit_box:SetMultiLine(true)
|
jcallahan@258
|
222 edit_box:SetMaxLetters(EDIT_MAXCHARS)
|
jcallahan@249
|
223 edit_box:EnableMouse(true)
|
jcallahan@249
|
224 edit_box:SetAutoFocus(false)
|
jcallahan@249
|
225 edit_box:SetFontObject("ChatFontNormal")
|
jcallahan@249
|
226 edit_box:SetSize(420, 220)
|
jcallahan@249
|
227 edit_box:HighlightText(0)
|
jcallahan@266
|
228 edit_box:SetFrameLevel(scroll_frame:GetFrameLevel() + 1)
|
jcallahan@249
|
229
|
jcallahan@249
|
230 edit_box:SetScript("OnCursorChanged", _G.ScrollingEdit_OnCursorChanged)
|
jcallahan@249
|
231 edit_box:SetScript("OnEscapePressed", _G.EditBox_ClearFocus)
|
jcallahan@249
|
232 edit_box:SetScript("OnShow", function(self)
|
jcallahan@249
|
233 _G.EditBox_SetFocus(self)
|
jcallahan@249
|
234
|
jcallahan@249
|
235 if self:GetNumLetters() > 0 then
|
jcallahan@249
|
236 panel.submitButton:Enable()
|
jcallahan@249
|
237 else
|
jcallahan@249
|
238 panel.submitButton:Disable()
|
jcallahan@249
|
239 end
|
jcallahan@249
|
240 end)
|
jcallahan@249
|
241
|
jcallahan@249
|
242 edit_box:SetScript("OnTextChanged", function(self, user_input)
|
jcallahan@249
|
243 local parent = self:GetParent()
|
jcallahan@249
|
244 local num_letters = self:GetNumLetters()
|
jcallahan@249
|
245 _G.ScrollingEdit_OnTextChanged(self, parent)
|
jcallahan@258
|
246 parent.charCount:SetFormattedText(_G.BreakUpLargeNumbers(self:GetMaxLetters() - num_letters))
|
jcallahan@249
|
247
|
jcallahan@249
|
248 if num_letters > 0 then
|
jcallahan@249
|
249 panel.submitButton:Enable();
|
jcallahan@258
|
250 else
|
jcallahan@258
|
251 panel.submitButton:Disable()
|
jcallahan@249
|
252 end
|
jcallahan@249
|
253 end)
|
jcallahan@249
|
254
|
jcallahan@249
|
255 edit_box:SetScript("OnUpdate", function(self, elapsed)
|
jcallahan@249
|
256 _G.ScrollingEdit_OnUpdate(self, elapsed, self:GetParent())
|
jcallahan@249
|
257 end)
|
jcallahan@249
|
258
|
jcallahan@258
|
259 scroll_frame.edit_box = edit_box
|
jcallahan@249
|
260 scroll_frame:SetScrollChild(edit_box)
|
jcallahan@249
|
261
|
jcallahan@249
|
262 local char_count = scroll_frame:CreateFontString(nil, "OVERLAY", "GameFontDisableLarge")
|
jcallahan@249
|
263 char_count:SetPoint("BOTTOMRIGHT", -15, 0)
|
jcallahan@249
|
264 scroll_frame.charCount = char_count
|
jcallahan@249
|
265
|
jcallahan@249
|
266 local scroll_bar = _G.CreateFrame("Slider", "$parentScrollBar", scroll_frame, "UIPanelScrollBarTemplate")
|
jcallahan@249
|
267 scroll_bar:SetPoint("TOPLEFT", scroll_frame, "TOPRIGHT", -13, -16)
|
jcallahan@249
|
268 scroll_bar:SetPoint("BOTTOMLEFT", scroll_frame, "BOTTOMRIGHT", -13, 16)
|
jcallahan@249
|
269 scroll_frame.ScrollBar = scroll_bar
|
jcallahan@249
|
270
|
jcallahan@249
|
271 _G.ScrollFrame_OnLoad(scroll_frame)
|
jcallahan@249
|
272
|
jcallahan@249
|
273 local submit = _G.CreateFrame("Button", "$parentSubmit", panel, "GameMenuButtonTemplate")
|
jcallahan@249
|
274 submit:SetSize(160, 30)
|
jcallahan@249
|
275 submit:SetPoint("BOTTOM", 0, 15)
|
jcallahan@249
|
276 submit:SetText(_G.SUBMIT)
|
jcallahan@249
|
277 submit:Enable(false)
|
jcallahan@249
|
278
|
jcallahan@249
|
279 submit:SetScript("OnClick", function()
|
jcallahan@263
|
280 local entry = DBEntry(URL_TYPE_MAP[comment_subject.type_name], comment_subject.id)
|
jcallahan@263
|
281
|
jcallahan@263
|
282 if not entry then
|
jcallahan@263
|
283 WDP:Print("An error has occurred; please report at http://wow.curseforge.com/addons/wowdb-profiler/create-ticket/")
|
jcallahan@263
|
284 return
|
jcallahan@263
|
285 end
|
jcallahan@263
|
286 entry.comments = entry.comments or {}
|
jcallahan@263
|
287 entry.comments[#entry.comments + 1] = edit_box:GetText()
|
jcallahan@263
|
288
|
jcallahan@249
|
289 edit_box:SetText("")
|
jcallahan@249
|
290 _G.HideUIPanel(panel)
|
jcallahan@249
|
291 end)
|
jcallahan@249
|
292 panel.submitButton = submit
|
jcallahan@249
|
293 end
|
jcallahan@249
|
294
|
jcallahan@260
|
295 local function CreateUnitComment(unit_id)
|
jcallahan@260
|
296 if not _G.UnitExists(unit_id) then
|
jcallahan@260
|
297 WDP:Printf("Unit '%s' does not exist.", unit_id)
|
jcallahan@260
|
298 return
|
jcallahan@260
|
299 end
|
jcallahan@260
|
300 local unit_type, unit_idnum = ParseGUID(_G.UnitGUID(unit_id))
|
jcallahan@260
|
301
|
jcallahan@260
|
302 if not unit_idnum then
|
jcallahan@260
|
303 WDP:Printf("Unable to determine unit from '%s'", unit_id)
|
jcallahan@260
|
304 return
|
jcallahan@260
|
305 end
|
jcallahan@259
|
306 local type_name = private.UNIT_TYPE_NAMES[unit_type + 1]
|
jcallahan@259
|
307 local unit_name = _G.UnitName(unit_id)
|
jcallahan@259
|
308 comment_subject.type_name = type_name
|
jcallahan@259
|
309 comment_subject.id = unit_idnum
|
jcallahan@259
|
310 comment_subject.label = unit_name
|
jcallahan@259
|
311
|
jcallahan@259
|
312 comment_frame.subject_name:SetText(unit_name)
|
jcallahan@259
|
313 comment_frame.subject_data:SetFormattedText("(%s #%d)", type_name, unit_idnum)
|
jcallahan@258
|
314 comment_frame.scroll_frame.edit_box:SetText("")
|
jcallahan@262
|
315 _G.ShowUIPanel(comment_frame)
|
jcallahan@249
|
316 end
|
jcallahan@249
|
317
|
jcallahan@260
|
318 local DATA_TYPE_MAPPING = {
|
jcallahan@260
|
319 merchant = "ITEM",
|
jcallahan@260
|
320 }
|
jcallahan@260
|
321
|
jcallahan@260
|
322 local CURSOR_DATA_FUNCS = {
|
jcallahan@260
|
323 item = function(data_type, data, data_subtype)
|
jcallahan@260
|
324 local item_name = _G.GetItemInfo(data)
|
jcallahan@260
|
325 comment_subject.type_name = data_type
|
jcallahan@260
|
326 comment_subject.id = data
|
jcallahan@260
|
327 comment_subject.label = item_name
|
jcallahan@260
|
328
|
jcallahan@260
|
329 comment_frame.subject_name:SetText(item_name)
|
jcallahan@260
|
330 comment_frame.subject_data:SetFormattedText("(%s #%d)", data_type, data)
|
jcallahan@260
|
331 end,
|
jcallahan@260
|
332 merchant = function(data_type, data)
|
jcallahan@260
|
333 local item_link = _G.GetMerchantItemLink(data)
|
jcallahan@260
|
334 local item_name = _G.GetItemInfo(item_link)
|
jcallahan@260
|
335 local item_id = ItemLinkToID(item_link)
|
jcallahan@260
|
336 comment_subject.type_name = data_type
|
jcallahan@260
|
337 comment_subject.id = item_id
|
jcallahan@260
|
338 comment_subject.label = item_name
|
jcallahan@260
|
339
|
jcallahan@260
|
340 comment_frame.subject_name:SetText(item_name)
|
jcallahan@260
|
341 comment_frame.subject_data:SetFormattedText("(%s #%d)", data_type, item_id)
|
jcallahan@260
|
342 end,
|
jcallahan@260
|
343 spell = function(data_type, data, data_subtype, subdata)
|
jcallahan@260
|
344 local spell_name = _G.GetSpellInfo(subdata)
|
jcallahan@260
|
345 comment_subject.type_name = data_type
|
jcallahan@260
|
346 comment_subject.id = subdata
|
jcallahan@260
|
347 comment_subject.label = spell_name
|
jcallahan@260
|
348
|
jcallahan@260
|
349 comment_frame.subject_name:SetText(spell_name)
|
jcallahan@260
|
350 comment_frame.subject_data:SetFormattedText("(%s #%d)", data_type, subdata)
|
jcallahan@260
|
351 end,
|
jcallahan@260
|
352 }
|
jcallahan@260
|
353
|
jcallahan@249
|
354 local function CreateCursorComment()
|
jcallahan@260
|
355 local data_type, data, data_subtype, subdata = _G.GetCursorInfo()
|
jcallahan@260
|
356
|
jcallahan@260
|
357 if not CURSOR_DATA_FUNCS[data_type] then
|
jcallahan@260
|
358 WDP:Print("Unable to determine comment subject from cursor.")
|
jcallahan@260
|
359 return
|
jcallahan@260
|
360 end
|
jcallahan@260
|
361 CURSOR_DATA_FUNCS[data_type](DATA_TYPE_MAPPING[data_type] or data_type:upper(), data, data_subtype, subdata)
|
jcallahan@260
|
362 comment_frame.scroll_frame.edit_box:SetText("")
|
jcallahan@262
|
363 _G.ShowUIPanel(comment_frame)
|
jcallahan@249
|
364 end
|
jcallahan@249
|
365
|
jcallahan@261
|
366 local function CreateQuestComment()
|
jcallahan@261
|
367 local index = _G.GetQuestLogSelection()
|
jcallahan@261
|
368
|
jcallahan@261
|
369 if not index or not _G.QuestLogFrame:IsShown() then
|
jcallahan@261
|
370 WDP:Print("You must select a quest from the Quest frame.")
|
jcallahan@261
|
371 return
|
jcallahan@261
|
372 end
|
jcallahan@261
|
373 local title, _, tag, _, is_header, _, _, _, idnum = _G.GetQuestLogTitle(index)
|
jcallahan@261
|
374
|
jcallahan@261
|
375 if is_header then
|
jcallahan@261
|
376 WDP:Print("You must select a quest from the Quest frame.")
|
jcallahan@261
|
377 return
|
jcallahan@261
|
378 end
|
jcallahan@261
|
379 comment_subject.type_name = "QUEST"
|
jcallahan@261
|
380 comment_subject.id = idnum
|
jcallahan@261
|
381 comment_subject.label = title
|
jcallahan@261
|
382
|
jcallahan@261
|
383 comment_frame.subject_name:SetText(title)
|
jcallahan@261
|
384 comment_frame.subject_data:SetFormattedText("(%s #%d)", "QUEST", idnum)
|
jcallahan@261
|
385 comment_frame.scroll_frame.edit_box:SetText("")
|
jcallahan@262
|
386 _G.ShowUIPanel(comment_frame)
|
jcallahan@261
|
387 end
|
jcallahan@261
|
388
|
jcallahan@267
|
389 local function CreateAchievementComment()
|
jcallahan@267
|
390 if not _G.AchievementFrame or not _G.AchievementFrameAchievements.selection then
|
jcallahan@267
|
391 WDP:Print("You must select an achievement from the Achievement frame.")
|
jcallahan@267
|
392 return
|
jcallahan@267
|
393 end
|
jcallahan@267
|
394
|
jcallahan@267
|
395 for _, button in next, _G.AchievementFrameAchievementsContainer.buttons do
|
jcallahan@267
|
396 if button.selected then
|
jcallahan@267
|
397 local title = button.label:GetText()
|
jcallahan@267
|
398
|
jcallahan@267
|
399 comment_subject.type_name = "ACHIEVEMENT"
|
jcallahan@267
|
400 comment_subject.id = button.id
|
jcallahan@267
|
401 comment_subject.label = title
|
jcallahan@267
|
402
|
jcallahan@267
|
403 comment_frame.subject_name:SetText(title)
|
jcallahan@267
|
404 comment_frame.subject_data:SetFormattedText("(%s #%d)", "ACHIEVEMENT", button.id)
|
jcallahan@267
|
405 comment_frame.scroll_frame.edit_box:SetText("")
|
jcallahan@267
|
406 _G.ShowUIPanel(comment_frame)
|
jcallahan@267
|
407 break
|
jcallahan@267
|
408 end
|
jcallahan@267
|
409 end
|
jcallahan@267
|
410 end
|
jcallahan@267
|
411
|
jcallahan@249
|
412 -- METHODS ------------------------------------------------------------
|
jcallahan@249
|
413
|
jcallahan@249
|
414 function private.ProcessCommentCommand(arg)
|
jcallahan@249
|
415 if not arg or arg == "" then
|
jcallahan@249
|
416 WDP:Print("You must supply a valid comment type.")
|
jcallahan@249
|
417 return
|
jcallahan@249
|
418 end
|
jcallahan@249
|
419
|
jcallahan@267
|
420 if arg == "achievement" then
|
jcallahan@267
|
421 CreateAchievementComment()
|
jcallahan@267
|
422 return
|
jcallahan@267
|
423 elseif arg == "cursor" then
|
jcallahan@260
|
424 CreateCursorComment()
|
jcallahan@249
|
425 return
|
jcallahan@261
|
426 elseif arg == "quest" then
|
jcallahan@261
|
427 CreateQuestComment()
|
jcallahan@261
|
428 return
|
jcallahan@249
|
429 end
|
jcallahan@260
|
430 CreateUnitComment(arg)
|
jcallahan@249
|
431 end
|