| 
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@270
 | 
     8 local pairs = _G.pairs
 | 
| 
jcallahan@267
 | 
     9 
 | 
| 
jcallahan@249
 | 
    10 -- ADDON NAMESPACE ----------------------------------------------------
 | 
| 
jcallahan@249
 | 
    11 
 | 
| 
jcallahan@249
 | 
    12 local ADDON_NAME, private = ...
 | 
| 
jcallahan@249
 | 
    13 
 | 
| 
jcallahan@249
 | 
    14 local LibStub = _G.LibStub
 | 
| 
jcallahan@249
 | 
    15 local WDP = LibStub("AceAddon-3.0"):GetAddon(ADDON_NAME)
 | 
| 
jcallahan@259
 | 
    16 local Dialog = LibStub("LibDialog-1.0")
 | 
| 
jcallahan@270
 | 
    17 local LQT = LibStub("LibQTip-1.0")
 | 
| 
jcallahan@249
 | 
    18 
 | 
| 
jcallahan@249
 | 
    19 local ParseGUID = private.ParseGUID
 | 
| 
jcallahan@260
 | 
    20 local ItemLinkToID = private.ItemLinkToID
 | 
| 
jcallahan@263
 | 
    21 local DBEntry = private.DBEntry
 | 
| 
jcallahan@249
 | 
    22 
 | 
| 
jcallahan@258
 | 
    23 -- CONSTANTS ----------------------------------------------------------
 | 
| 
jcallahan@258
 | 
    24 
 | 
| 
jcallahan@258
 | 
    25 local EDIT_MAXCHARS = 3000
 | 
| 
jcallahan@259
 | 
    26 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
 | 
    27 local LINK_COMMENT_TOOLTIP = "Click here to create a link to the comment page on WoWDB."
 | 
| 
jcallahan@261
 | 
    28 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
 | 
    29 
 | 
| 
jcallahan@259
 | 
    30 local URL_BASE = "http://www.wowdb.com/"
 | 
| 
jcallahan@259
 | 
    31 
 | 
| 
jcallahan@259
 | 
    32 local URL_TYPE_MAP = {
 | 
| 
jcallahan@267
 | 
    33     ACHIEVEMENT = "achievements",
 | 
| 
jcallahan@259
 | 
    34     ITEM = "items",
 | 
| 
jcallahan@259
 | 
    35     OBJECT = "objects",
 | 
| 
jcallahan@259
 | 
    36     NPC = "npcs",
 | 
| 
jcallahan@261
 | 
    37     QUEST = "quests",
 | 
| 
jcallahan@260
 | 
    38     SPELL = "spells",
 | 
| 
jcallahan@259
 | 
    39     VEHICLE = "npcs",
 | 
| 
jcallahan@259
 | 
    40 }
 | 
| 
jcallahan@259
 | 
    41 
 | 
| 
jcallahan@259
 | 
    42 Dialog:Register("WDP_CommentLink", {
 | 
| 
jcallahan@259
 | 
    43     text = "",
 | 
| 
jcallahan@259
 | 
    44     editboxes = {
 | 
| 
jcallahan@259
 | 
    45         {
 | 
| 
jcallahan@259
 | 
    46             text = _G.UNKNOWN,
 | 
| 
jcallahan@259
 | 
    47             on_escape_pressed = function(self)
 | 
| 
jcallahan@259
 | 
    48                 self:ClearFocus()
 | 
| 
jcallahan@259
 | 
    49             end,
 | 
| 
jcallahan@265
 | 
    50             on_enter_pressed = function(self)
 | 
| 
jcallahan@265
 | 
    51                 self:GetParent().buttons[1]:Click()
 | 
| 
jcallahan@265
 | 
    52             end,
 | 
| 
jcallahan@259
 | 
    53         },
 | 
| 
jcallahan@259
 | 
    54     },
 | 
| 
jcallahan@259
 | 
    55     buttons = {
 | 
| 
jcallahan@259
 | 
    56         {
 | 
| 
jcallahan@259
 | 
    57             text = _G.OKAY,
 | 
| 
jcallahan@259
 | 
    58         }
 | 
| 
jcallahan@259
 | 
    59     },
 | 
| 
jcallahan@259
 | 
    60     show_while_dead = true,
 | 
| 
jcallahan@259
 | 
    61     hide_on_escape = true,
 | 
| 
jcallahan@259
 | 
    62     is_exclusive = true,
 | 
| 
jcallahan@259
 | 
    63     on_show = function(self, data)
 | 
| 
jcallahan@259
 | 
    64         local editbox = self.editboxes[1]
 | 
| 
jcallahan@259
 | 
    65         editbox:SetWidth(self:GetWidth() - 20)
 | 
| 
jcallahan@259
 | 
    66         editbox:SetText(("%s%s/%d#related:comments"):format(URL_BASE, URL_TYPE_MAP[data.type_name], data.id))
 | 
| 
jcallahan@259
 | 
    67         editbox:HighlightText()
 | 
| 
jcallahan@259
 | 
    68         editbox:SetFocus()
 | 
| 
jcallahan@259
 | 
    69 
 | 
| 
jcallahan@261
 | 
    70         self.text:SetJustifyH("LEFT")
 | 
| 
jcallahan@259
 | 
    71         self.text:SetFormattedText(LINK_EDITBOX_DESC_FORMAT:format(data.label))
 | 
| 
jcallahan@259
 | 
    72     end,
 | 
| 
jcallahan@259
 | 
    73 })
 | 
| 
jcallahan@259
 | 
    74 
 | 
| 
jcallahan@270
 | 
    75 -- VARIABLES ----------------------------------------------------------
 | 
| 
jcallahan@270
 | 
    76 
 | 
| 
jcallahan@259
 | 
    77 local comment_subject = {}
 | 
| 
jcallahan@270
 | 
    78 local comment_frame
 | 
| 
jcallahan@275
 | 
    79 local comment_units = {}
 | 
| 
jcallahan@258
 | 
    80 
 | 
| 
jcallahan@249
 | 
    81 -- HELPERS ------------------------------------------------------------
 | 
| 
jcallahan@249
 | 
    82 
 | 
| 
jcallahan@270
 | 
    83 local function NewComment(type_name, label, id)
 | 
| 
jcallahan@270
 | 
    84     comment_subject.id = id
 | 
| 
jcallahan@270
 | 
    85     comment_subject.label = label
 | 
| 
jcallahan@270
 | 
    86     comment_subject.type_name = type_name
 | 
| 
jcallahan@270
 | 
    87 
 | 
| 
jcallahan@270
 | 
    88     comment_frame.subject_name:SetText(label)
 | 
| 
jcallahan@270
 | 
    89     comment_frame.subject_data:SetFormattedText("(%s #%d)", type_name, id)
 | 
| 
jcallahan@270
 | 
    90     comment_frame.scroll_frame.edit_box:SetText("")
 | 
| 
jcallahan@270
 | 
    91     _G.ShowUIPanel(comment_frame)
 | 
| 
jcallahan@270
 | 
    92 end
 | 
| 
jcallahan@270
 | 
    93 
 | 
| 
jcallahan@275
 | 
    94 local function CreateUnitComment(unit_id, is_command)
 | 
| 
jcallahan@275
 | 
    95     local unit_type, unit_idnum
 | 
| 
jcallahan@275
 | 
    96 
 | 
| 
jcallahan@275
 | 
    97     if is_command then
 | 
| 
jcallahan@275
 | 
    98         if not _G.UnitExists(unit_id) then
 | 
| 
jcallahan@275
 | 
    99             WDP:Printf("Unit '%s' does not exist.", unit_id)
 | 
| 
jcallahan@275
 | 
   100             return
 | 
| 
jcallahan@275
 | 
   101         end
 | 
| 
jcallahan@275
 | 
   102         unit_type, unit_idnum = ParseGUID(_G.UnitGUID(unit_id))
 | 
| 
jcallahan@275
 | 
   103     else
 | 
| 
jcallahan@275
 | 
   104         local unit_data = comment_units[unit_id]
 | 
| 
jcallahan@275
 | 
   105 
 | 
| 
jcallahan@275
 | 
   106         if not unit_data then
 | 
| 
jcallahan@275
 | 
   107             WDP:Printf("Unit '%s' does not exist.", unit_id)
 | 
| 
jcallahan@275
 | 
   108             return
 | 
| 
jcallahan@275
 | 
   109         end
 | 
| 
jcallahan@275
 | 
   110         unit_type = unit_data.type
 | 
| 
jcallahan@275
 | 
   111         unit_idnum = unit_data.idnum
 | 
| 
jcallahan@270
 | 
   112     end
 | 
| 
jcallahan@270
 | 
   113 
 | 
| 
jcallahan@270
 | 
   114     if not unit_idnum then
 | 
| 
jcallahan@270
 | 
   115         WDP:Printf("Unable to determine unit from '%s'", unit_id)
 | 
| 
jcallahan@270
 | 
   116         return
 | 
| 
jcallahan@270
 | 
   117     end
 | 
| 
MMOSimca@329
 | 
   118     local type_name = private.UNIT_TYPE_NAMES[unit_type]
 | 
| 
jcallahan@275
 | 
   119     local unit_name = is_command and _G.UnitName(unit_id) or comment_units[unit_id].name
 | 
| 
jcallahan@275
 | 
   120 
 | 
| 
jcallahan@275
 | 
   121     table.wipe(comment_units)
 | 
| 
jcallahan@270
 | 
   122     NewComment(type_name, unit_name, unit_idnum)
 | 
| 
jcallahan@270
 | 
   123 end
 | 
| 
jcallahan@270
 | 
   124 
 | 
| 
jcallahan@270
 | 
   125 local DATA_TYPE_MAPPING = {
 | 
| 
jcallahan@270
 | 
   126     merchant = "ITEM",
 | 
| 
jcallahan@270
 | 
   127 }
 | 
| 
jcallahan@270
 | 
   128 
 | 
| 
jcallahan@276
 | 
   129 local function CreateItemComment(is_command)
 | 
| 
jcallahan@276
 | 
   130     local item_name, item_id
 | 
| 
jcallahan@276
 | 
   131 
 | 
| 
jcallahan@276
 | 
   132     if is_command then
 | 
| 
jcallahan@276
 | 
   133         local item_link
 | 
| 
jcallahan@276
 | 
   134         item_name, item_link = _G.GameTooltip:GetItem()
 | 
| 
jcallahan@276
 | 
   135 
 | 
| 
jcallahan@276
 | 
   136         if not item_name and not item_link then
 | 
| 
jcallahan@276
 | 
   137             WDP:Print("Your mouse is not over an item.")
 | 
| 
jcallahan@276
 | 
   138             return
 | 
| 
jcallahan@276
 | 
   139         end
 | 
| 
jcallahan@276
 | 
   140         item_id = ItemLinkToID(item_link)
 | 
| 
jcallahan@276
 | 
   141     else
 | 
| 
jcallahan@276
 | 
   142         item_id = ItemLinkToID(comment_units.item.link)
 | 
| 
jcallahan@276
 | 
   143         item_name = comment_units.item.name
 | 
| 
jcallahan@276
 | 
   144     end
 | 
| 
jcallahan@276
 | 
   145     table.wipe(comment_units)
 | 
| 
jcallahan@276
 | 
   146     NewComment("ITEM", item_name, item_id)
 | 
| 
jcallahan@276
 | 
   147 end
 | 
| 
jcallahan@276
 | 
   148 
 | 
| 
jcallahan@277
 | 
   149 local function CreateSpellComment(is_command)
 | 
| 
jcallahan@277
 | 
   150     local spell_name, spell_rank, spell_id
 | 
| 
jcallahan@277
 | 
   151 
 | 
| 
jcallahan@277
 | 
   152     if is_command then
 | 
| 
jcallahan@277
 | 
   153         spell_name, spell_rank, spell_id = _G.GameTooltip:GetSpell()
 | 
| 
jcallahan@277
 | 
   154 
 | 
| 
jcallahan@277
 | 
   155         if not spell_name and not spell_id then
 | 
| 
jcallahan@277
 | 
   156             WDP:Print("Your mouse is not over a spell.")
 | 
| 
jcallahan@277
 | 
   157             return
 | 
| 
jcallahan@277
 | 
   158         end
 | 
| 
jcallahan@277
 | 
   159     else
 | 
| 
jcallahan@277
 | 
   160         local spell_rank = comment_units.spell.rank
 | 
| 
jcallahan@277
 | 
   161         spell_id = comment_units.spell.id
 | 
| 
jcallahan@277
 | 
   162         spell_name = ("%s%s"):format(comment_units.spell.name, (spell_rank ~= "") and (" (%s)"):format(spell_rank) or "")
 | 
| 
jcallahan@277
 | 
   163     end
 | 
| 
jcallahan@277
 | 
   164     table.wipe(comment_units)
 | 
| 
jcallahan@277
 | 
   165     NewComment("SPELL", spell_name, spell_id)
 | 
| 
jcallahan@277
 | 
   166 end
 | 
| 
jcallahan@277
 | 
   167 
 | 
| 
jcallahan@270
 | 
   168 local CreateCursorComment
 | 
| 
jcallahan@249
 | 
   169 do
 | 
| 
jcallahan@270
 | 
   170     local CURSOR_DATA_FUNCS = {
 | 
| 
jcallahan@270
 | 
   171         item = function(type_name, id_num, data_subtype)
 | 
| 
jcallahan@270
 | 
   172             local item_name = _G.GetItemInfo(id_num)
 | 
| 
jcallahan@270
 | 
   173             NewComment(type_name, item_name, id_num)
 | 
| 
jcallahan@270
 | 
   174         end,
 | 
| 
jcallahan@270
 | 
   175         merchant = function(type_name, item_index)
 | 
| 
jcallahan@270
 | 
   176             local item_link = _G.GetMerchantItemLink(item_index)
 | 
| 
jcallahan@270
 | 
   177             local item_name = _G.GetItemInfo(item_link)
 | 
| 
jcallahan@270
 | 
   178             NewComment(type_name, item_name, ItemLinkToID(item_link))
 | 
| 
jcallahan@270
 | 
   179         end,
 | 
| 
jcallahan@270
 | 
   180         spell = function(type_name, data, data_subtype, spell_id)
 | 
| 
jcallahan@270
 | 
   181             local spell_name = _G.GetSpellInfo(spell_id)
 | 
| 
jcallahan@270
 | 
   182             NewComment(type_name, spell_name, spell_id)
 | 
| 
jcallahan@270
 | 
   183         end,
 | 
| 
jcallahan@270
 | 
   184     }
 | 
| 
jcallahan@270
 | 
   185 
 | 
| 
jcallahan@270
 | 
   186     function CreateCursorComment()
 | 
| 
jcallahan@270
 | 
   187         local data_type, data, data_subtype, subdata = _G.GetCursorInfo()
 | 
| 
jcallahan@270
 | 
   188         local comment_func = CURSOR_DATA_FUNCS[data_type]
 | 
| 
jcallahan@270
 | 
   189 
 | 
| 
jcallahan@270
 | 
   190         if not comment_func then
 | 
| 
jcallahan@270
 | 
   191             WDP:Print("Unable to determine comment subject from cursor.")
 | 
| 
jcallahan@270
 | 
   192             return
 | 
| 
jcallahan@270
 | 
   193         end
 | 
| 
jcallahan@270
 | 
   194         comment_func(DATA_TYPE_MAPPING[data_type] or data_type:upper(), data, data_subtype, subdata)
 | 
| 
jcallahan@270
 | 
   195     end
 | 
| 
jcallahan@270
 | 
   196 end -- do-block
 | 
| 
jcallahan@270
 | 
   197 
 | 
| 
jcallahan@270
 | 
   198 local function CreateQuestComment()
 | 
| 
MMOSimca@581
 | 
   199     local index = _G.C_QuestLog.GetSelectedQuest()
 | 
| 
jcallahan@270
 | 
   200 
 | 
| 
MMOSimca@335
 | 
   201     if not index or not _G.QuestMapFrame:IsVisible() then
 | 
| 
MMOSimca@335
 | 
   202         WDP:Print("You must select a quest from the World Map's Quest frame.")
 | 
| 
jcallahan@270
 | 
   203         return
 | 
| 
jcallahan@270
 | 
   204     end
 | 
| 
MMOSimca@581
 | 
   205     local info = _G.C_QuestLog.GetInfo(index)
 | 
| 
jcallahan@270
 | 
   206 
 | 
| 
MMOSimca@581
 | 
   207     if not info or info.isHeader then
 | 
| 
MMOSimca@335
 | 
   208         WDP:Print("You must select a quest from the World Map's Quest frame.")
 | 
| 
jcallahan@270
 | 
   209         return
 | 
| 
jcallahan@270
 | 
   210     end
 | 
| 
MMOSimca@581
 | 
   211     NewComment("QUEST", info.title, info.questID)
 | 
| 
jcallahan@270
 | 
   212 end
 | 
| 
jcallahan@270
 | 
   213 
 | 
| 
jcallahan@270
 | 
   214 local function CreateAchievementComment()
 | 
| 
MMOSimca@335
 | 
   215     if not _G.AchievementFrame or not _G.AchievementFrame:IsVisible() or not _G.AchievementFrameAchievements.selection then
 | 
| 
jcallahan@270
 | 
   216         WDP:Print("You must select an achievement from the Achievement frame.")
 | 
| 
jcallahan@270
 | 
   217         return
 | 
| 
jcallahan@270
 | 
   218     end
 | 
| 
jcallahan@270
 | 
   219 
 | 
| 
jcallahan@270
 | 
   220     for _, button in next, _G.AchievementFrameAchievementsContainer.buttons do
 | 
| 
jcallahan@270
 | 
   221         if button.selected then
 | 
| 
jcallahan@270
 | 
   222             NewComment("ACHIEVEMENT", button.label:GetText(), button.id)
 | 
| 
jcallahan@270
 | 
   223             break
 | 
| 
jcallahan@270
 | 
   224         end
 | 
| 
jcallahan@270
 | 
   225     end
 | 
| 
jcallahan@270
 | 
   226 end
 | 
| 
jcallahan@270
 | 
   227 
 | 
| 
jcallahan@270
 | 
   228 local ShowPossibleSubjects
 | 
| 
jcallahan@270
 | 
   229 do
 | 
| 
jcallahan@270
 | 
   230     local display
 | 
| 
jcallahan@270
 | 
   231     local old_x, old_y, click_time
 | 
| 
jcallahan@270
 | 
   232 
 | 
| 
jcallahan@270
 | 
   233     _G.WorldFrame:HookScript("OnMouseDown", function(frame, ...)
 | 
| 
jcallahan@270
 | 
   234         old_x, old_y = _G.GetCursorPosition()
 | 
| 
jcallahan@270
 | 
   235         click_time = _G.GetTime()
 | 
| 
jcallahan@270
 | 
   236     end)
 | 
| 
jcallahan@270
 | 
   237 
 | 
| 
jcallahan@270
 | 
   238     _G.WorldFrame:HookScript("OnMouseUp", function(frame, ...)
 | 
| 
jcallahan@270
 | 
   239         if not display then
 | 
| 
jcallahan@270
 | 
   240             return
 | 
| 
jcallahan@270
 | 
   241         end
 | 
| 
jcallahan@270
 | 
   242         local x, y = _G.GetCursorPosition()
 | 
| 
jcallahan@270
 | 
   243 
 | 
| 
jcallahan@270
 | 
   244         if not old_x or not old_y or not x or not y or not click_time then
 | 
| 
jcallahan@270
 | 
   245             display = display:Release()
 | 
| 
jcallahan@270
 | 
   246             return
 | 
| 
jcallahan@270
 | 
   247         end
 | 
| 
jcallahan@270
 | 
   248 
 | 
| 
jcallahan@270
 | 
   249         if (_G.math.abs(x - old_x) + _G.math.abs(y - old_y)) <= 5 and _G.GetTime() - click_time < 1 then
 | 
| 
jcallahan@270
 | 
   250             display = display:Release()
 | 
| 
jcallahan@270
 | 
   251         end
 | 
| 
jcallahan@270
 | 
   252     end)
 | 
| 
jcallahan@270
 | 
   253 
 | 
| 
jcallahan@270
 | 
   254     local function CreateComment(cell, func)
 | 
| 
jcallahan@271
 | 
   255         if _G.type(func) == "table" then
 | 
| 
jcallahan@271
 | 
   256             func[1](func[2])
 | 
| 
jcallahan@271
 | 
   257         else
 | 
| 
jcallahan@271
 | 
   258             func()
 | 
| 
jcallahan@271
 | 
   259         end
 | 
| 
jcallahan@270
 | 
   260         display = display:Release()
 | 
| 
jcallahan@270
 | 
   261     end
 | 
| 
jcallahan@270
 | 
   262 
 | 
| 
jcallahan@270
 | 
   263     local CURSOR_NAME_FUNCS = {
 | 
| 
jcallahan@270
 | 
   264         item = function(id_num)
 | 
| 
jcallahan@270
 | 
   265             return _G.GetItemInfo(id_num)
 | 
| 
jcallahan@270
 | 
   266         end,
 | 
| 
jcallahan@270
 | 
   267         merchant = function(item_index)
 | 
| 
jcallahan@270
 | 
   268             return _G.GetItemInfo(_G.GetMerchantItemLink(item_index))
 | 
| 
jcallahan@270
 | 
   269         end,
 | 
| 
jcallahan@270
 | 
   270         spell = function(data, data_subtype, spell_id)
 | 
| 
jcallahan@270
 | 
   271             return _G.GetSpellInfo(spell_id)
 | 
| 
jcallahan@270
 | 
   272         end,
 | 
| 
jcallahan@270
 | 
   273     }
 | 
| 
jcallahan@270
 | 
   274 
 | 
| 
jcallahan@270
 | 
   275     local VALID_UNITS = {
 | 
| 
jcallahan@270
 | 
   276         boss1 = true,
 | 
| 
jcallahan@270
 | 
   277         boss2 = true,
 | 
| 
jcallahan@270
 | 
   278         boss3 = true,
 | 
| 
jcallahan@270
 | 
   279         boss4 = true,
 | 
| 
jcallahan@270
 | 
   280         focus = true,
 | 
| 
jcallahan@270
 | 
   281         mouseover = true,
 | 
| 
jcallahan@270
 | 
   282         npc = true,
 | 
| 
jcallahan@270
 | 
   283         target = true,
 | 
| 
jcallahan@270
 | 
   284     }
 | 
| 
jcallahan@270
 | 
   285 
 | 
| 
jcallahan@270
 | 
   286     function ShowPossibleSubjects(anchor)
 | 
| 
jcallahan@270
 | 
   287         if not display then
 | 
| 
jcallahan@270
 | 
   288             display = LQT:Acquire(ADDON_NAME, 1, "LEFT")
 | 
| 
jcallahan@270
 | 
   289             display:EnableMouse(true)
 | 
| 
jcallahan@270
 | 
   290         end
 | 
| 
jcallahan@270
 | 
   291 
 | 
| 
jcallahan@270
 | 
   292         if anchor then
 | 
| 
jcallahan@270
 | 
   293             display:SmartAnchorTo(anchor)
 | 
| 
jcallahan@270
 | 
   294             display:SetAutoHideDelay(0.2, anchor)
 | 
| 
jcallahan@270
 | 
   295         else
 | 
| 
jcallahan@270
 | 
   296             display:SetPoint("CENTER", _G.UIParent, "CENTER", 0, 0)
 | 
| 
jcallahan@270
 | 
   297         end
 | 
| 
jcallahan@270
 | 
   298         display:Clear()
 | 
| 
jcallahan@270
 | 
   299         display:AddHeader("Choose comment subject:", "CENTER")
 | 
| 
jcallahan@270
 | 
   300         display:AddSeparator()
 | 
| 
jcallahan@270
 | 
   301         display:AddSeparator()
 | 
| 
jcallahan@270
 | 
   302 
 | 
| 
jcallahan@270
 | 
   303         local line
 | 
| 
jcallahan@270
 | 
   304 
 | 
| 
jcallahan@270
 | 
   305         for unit_id in pairs(VALID_UNITS) do
 | 
| 
jcallahan@270
 | 
   306             if _G.UnitExists(unit_id) then
 | 
| 
jcallahan@270
 | 
   307                 local unit_type, unit_idnum = ParseGUID(_G.UnitGUID(unit_id))
 | 
| 
jcallahan@275
 | 
   308                 local unit_name = _G.UnitName(unit_id)
 | 
| 
jcallahan@270
 | 
   309 
 | 
| 
jcallahan@270
 | 
   310                 if unit_idnum then
 | 
| 
jcallahan@275
 | 
   311                     comment_units[unit_id] = {
 | 
| 
jcallahan@275
 | 
   312                         idnum = unit_idnum,
 | 
| 
jcallahan@275
 | 
   313                         name = unit_name,
 | 
| 
jcallahan@275
 | 
   314                         type = unit_type,
 | 
| 
jcallahan@275
 | 
   315                     }
 | 
| 
jcallahan@275
 | 
   316                     line = display:AddLine(("%s: %s"):format(unit_id:gsub("^%l", _G.string.upper), unit_name))
 | 
| 
jcallahan@271
 | 
   317                     display:SetLineScript(line, "OnMouseUp", CreateComment, { CreateUnitComment, unit_id })
 | 
| 
jcallahan@270
 | 
   318                 end
 | 
| 
jcallahan@270
 | 
   319             end
 | 
| 
jcallahan@270
 | 
   320         end
 | 
| 
jcallahan@270
 | 
   321 
 | 
| 
MMOSimca@335
 | 
   322         if _G.AchievementFrame and _G.AchievementFrame:IsVisible() and _G.AchievementFrameAchievements.selection then
 | 
| 
jcallahan@270
 | 
   323             for _, button in next, _G.AchievementFrameAchievementsContainer.buttons do
 | 
| 
jcallahan@270
 | 
   324                 if button.selected then
 | 
| 
jcallahan@270
 | 
   325                     line = display:AddLine(("Achievement: %s"):format(button.label:GetText()))
 | 
| 
jcallahan@270
 | 
   326                     display:SetLineScript(line, "OnMouseUp", CreateComment, CreateAchievementComment)
 | 
| 
jcallahan@270
 | 
   327                     break
 | 
| 
jcallahan@270
 | 
   328                 end
 | 
| 
jcallahan@270
 | 
   329             end
 | 
| 
jcallahan@270
 | 
   330         end
 | 
| 
jcallahan@270
 | 
   331         local data_type, data, data_subtype, subdata = _G.GetCursorInfo()
 | 
| 
jcallahan@270
 | 
   332         local name_func = CURSOR_NAME_FUNCS[data_type]
 | 
| 
jcallahan@270
 | 
   333 
 | 
| 
jcallahan@270
 | 
   334         if name_func then
 | 
| 
jcallahan@270
 | 
   335             line = display:AddLine(("Cursor: %s"):format(name_func(data, data_subtype, subdata)))
 | 
| 
jcallahan@270
 | 
   336             display:SetLineScript(line, "OnMouseUp", CreateComment, CreateCursorComment)
 | 
| 
jcallahan@270
 | 
   337         end
 | 
| 
jcallahan@277
 | 
   338         local spell_name, spell_rank, spell_id = _G.GameTooltip:GetSpell()
 | 
| 
jcallahan@277
 | 
   339 
 | 
| 
jcallahan@277
 | 
   340         if spell_name and spell_rank and spell_id then
 | 
| 
jcallahan@277
 | 
   341             comment_units.spell = {
 | 
| 
jcallahan@277
 | 
   342                 id = spell_id,
 | 
| 
jcallahan@277
 | 
   343                 name = spell_name,
 | 
| 
jcallahan@277
 | 
   344                 rank = spell_rank,
 | 
| 
jcallahan@277
 | 
   345             }
 | 
| 
jcallahan@277
 | 
   346 
 | 
| 
jcallahan@277
 | 
   347             line = display:AddLine(("Spell: %s%s"):format(spell_name, (spell_rank ~= "") and (" (%s)"):format(spell_rank) or ""))
 | 
| 
jcallahan@277
 | 
   348             display:SetLineScript(line, "OnMouseUp", CreateComment, CreateSpellComment)
 | 
| 
jcallahan@277
 | 
   349         end
 | 
| 
jcallahan@277
 | 
   350 
 | 
| 
jcallahan@276
 | 
   351         local item_name, item_link = _G.GameTooltip:GetItem()
 | 
| 
jcallahan@276
 | 
   352 
 | 
| 
jcallahan@276
 | 
   353         if item_name and item_link then
 | 
| 
jcallahan@276
 | 
   354             comment_units.item = {
 | 
| 
jcallahan@276
 | 
   355                 link = item_link,
 | 
| 
jcallahan@276
 | 
   356                 name = item_name,
 | 
| 
jcallahan@276
 | 
   357             }
 | 
| 
jcallahan@277
 | 
   358 
 | 
| 
jcallahan@276
 | 
   359             line = display:AddLine(("Item: %s"):format(item_name))
 | 
| 
jcallahan@276
 | 
   360             display:SetLineScript(line, "OnMouseUp", CreateComment, CreateItemComment)
 | 
| 
jcallahan@276
 | 
   361         end
 | 
| 
jcallahan@270
 | 
   362 
 | 
| 
MMOSimca@581
 | 
   363         local quest_index = _G.C_QuestLog.GetSelectedQuest()
 | 
| 
jcallahan@270
 | 
   364 
 | 
| 
MMOSimca@335
 | 
   365         if quest_index and _G.QuestMapFrame:IsVisible() and not _G.QuestScrollFrame:IsVisible() then
 | 
| 
MMOSimca@581
 | 
   366             local info = _G.C_QuestLog.GetInfo(quest_index)
 | 
| 
jcallahan@270
 | 
   367 
 | 
| 
MMOSimca@581
 | 
   368             if info and not info.isHeader then
 | 
| 
MMOSimca@581
 | 
   369                 line = display:AddLine(("Quest: %s"):format(info.title))
 | 
| 
jcallahan@270
 | 
   370                 display:SetLineScript(line, "OnMouseUp", CreateComment, CreateQuestComment)
 | 
| 
jcallahan@270
 | 
   371             end
 | 
| 
jcallahan@270
 | 
   372         end
 | 
| 
jcallahan@270
 | 
   373 
 | 
| 
jcallahan@270
 | 
   374         if display:GetLineCount() == 3 then
 | 
| 
jcallahan@272
 | 
   375             display = display:Release()
 | 
| 
jcallahan@270
 | 
   376             WDP:Print("There are no possible comment subjects.")
 | 
| 
jcallahan@270
 | 
   377             return
 | 
| 
jcallahan@270
 | 
   378         end
 | 
| 
jcallahan@270
 | 
   379         display:Show()
 | 
| 
jcallahan@270
 | 
   380     end
 | 
| 
jcallahan@272
 | 
   381 
 | 
| 
jcallahan@272
 | 
   382     WDP.ShowPossibleSubjects = ShowPossibleSubjects -- For Keybinding.
 | 
| 
jcallahan@270
 | 
   383 end -- do-block
 | 
| 
jcallahan@270
 | 
   384 
 | 
| 
jcallahan@270
 | 
   385 -- METHODS ------------------------------------------------------------
 | 
| 
jcallahan@270
 | 
   386 
 | 
| 
jcallahan@270
 | 
   387 function private.ProcessCommentCommand(arg)
 | 
| 
jcallahan@270
 | 
   388     if not arg or arg == "" then
 | 
| 
jcallahan@270
 | 
   389         ShowPossibleSubjects(nil)
 | 
| 
jcallahan@270
 | 
   390         return
 | 
| 
jcallahan@270
 | 
   391     end
 | 
| 
jcallahan@270
 | 
   392 
 | 
| 
jcallahan@270
 | 
   393     if arg == "achievement" then
 | 
| 
jcallahan@270
 | 
   394         CreateAchievementComment()
 | 
| 
jcallahan@270
 | 
   395         return
 | 
| 
jcallahan@270
 | 
   396     elseif arg == "cursor" then
 | 
| 
jcallahan@270
 | 
   397         CreateCursorComment()
 | 
| 
jcallahan@270
 | 
   398         return
 | 
| 
jcallahan@276
 | 
   399     elseif arg == "item" then
 | 
| 
jcallahan@276
 | 
   400         CreateItemComment(true)
 | 
| 
jcallahan@276
 | 
   401         return
 | 
| 
jcallahan@270
 | 
   402     elseif arg == "quest" then
 | 
| 
jcallahan@270
 | 
   403         CreateQuestComment()
 | 
| 
jcallahan@270
 | 
   404         return
 | 
| 
jcallahan@277
 | 
   405     elseif arg == "spell" then
 | 
| 
MMOSimca@429
 | 
   406         CreateSpellComment(true)
 | 
| 
jcallahan@277
 | 
   407         return
 | 
| 
jcallahan@270
 | 
   408     end
 | 
| 
jcallahan@275
 | 
   409     CreateUnitComment(arg, true)
 | 
| 
jcallahan@270
 | 
   410 end
 | 
| 
jcallahan@270
 | 
   411 
 | 
| 
jcallahan@270
 | 
   412 function private.InitializeCommentSystem()
 | 
| 
jcallahan@249
 | 
   413     local panel = _G.CreateFrame("Frame", "WDP_CommentFrame", _G.UIParent, "TranslucentFrameTemplate")
 | 
| 
jcallahan@258
 | 
   414     panel:SetSize(480, 350)
 | 
| 
jcallahan@249
 | 
   415     panel:SetPoint("CENTER", _G.UIParent, "CENTER")
 | 
| 
jcallahan@249
 | 
   416     panel:SetFrameStrata("DIALOG")
 | 
| 
jcallahan@249
 | 
   417     panel.Bg:SetTexture([[Interface\FrameGeneral\UI-Background-Rock]], true, true)
 | 
| 
jcallahan@249
 | 
   418     panel.Bg:SetHorizTile(true)
 | 
| 
jcallahan@249
 | 
   419     panel.Bg:SetVertTile(true)
 | 
| 
jcallahan@264
 | 
   420     panel:EnableMouse(true)
 | 
| 
jcallahan@264
 | 
   421     panel:SetMovable(true)
 | 
| 
jcallahan@249
 | 
   422     panel:Hide()
 | 
| 
jcallahan@249
 | 
   423     comment_frame = panel
 | 
| 
jcallahan@249
 | 
   424 
 | 
| 
jcallahan@249
 | 
   425     table.insert(_G.UISpecialFrames, panel:GetName())
 | 
| 
jcallahan@249
 | 
   426 
 | 
| 
jcallahan@249
 | 
   427     local streaks = panel:CreateTexture("$parentTopTileStreaks", "BORDER", "_UI-Frame-TopTileStreaks", -6)
 | 
| 
jcallahan@249
 | 
   428     streaks:SetPoint("TOPLEFT", 13, -13)
 | 
| 
jcallahan@249
 | 
   429     streaks:SetPoint("BOTTOMRIGHT", panel, "TOPRIGHT", -13, -35)
 | 
| 
jcallahan@249
 | 
   430 
 | 
| 
jcallahan@249
 | 
   431     local header = _G.CreateFrame("Frame", "$parentHeader", panel, "TranslucentFrameTemplate")
 | 
| 
jcallahan@249
 | 
   432     header:SetSize(128, 64)
 | 
| 
jcallahan@249
 | 
   433     header:SetPoint("CENTER", panel, "TOP", 0, -8)
 | 
| 
jcallahan@249
 | 
   434     header.Bg:SetTexture([[Interface\FrameGeneral\UI-Background-Marble]])
 | 
| 
jcallahan@249
 | 
   435     header.Bg:SetHorizTile(true)
 | 
| 
jcallahan@249
 | 
   436     header.Bg:SetVertTile(true)
 | 
| 
jcallahan@264
 | 
   437     header:SetMovable(true)
 | 
| 
jcallahan@264
 | 
   438 
 | 
| 
jcallahan@264
 | 
   439     header:SetScript("OnMouseDown", function()
 | 
| 
jcallahan@264
 | 
   440         panel:StartMoving()
 | 
| 
jcallahan@264
 | 
   441     end)
 | 
| 
jcallahan@264
 | 
   442 
 | 
| 
jcallahan@264
 | 
   443     header:SetScript("OnMouseUp", function()
 | 
| 
jcallahan@264
 | 
   444         panel:StopMovingOrSizing()
 | 
| 
jcallahan@264
 | 
   445     end)
 | 
| 
jcallahan@264
 | 
   446 
 | 
| 
jcallahan@249
 | 
   447     panel.header = header
 | 
| 
jcallahan@249
 | 
   448 
 | 
| 
jcallahan@249
 | 
   449     local logo = header:CreateTexture(nil, "ARTWORK")
 | 
| 
jcallahan@249
 | 
   450     logo:SetTexture([[Interface\AddOns\WoWDBProfiler\wowdb-logo]])
 | 
| 
jcallahan@249
 | 
   451     logo:SetPoint("TOPLEFT", header, 10, -10)
 | 
| 
jcallahan@249
 | 
   452     logo:SetPoint("BOTTOMRIGHT", header, -10, 10)
 | 
| 
jcallahan@249
 | 
   453 
 | 
| 
jcallahan@258
 | 
   454     local subject_name = panel:CreateFontString(nil, "ARTWORK", "GameFontNormal")
 | 
| 
jcallahan@258
 | 
   455     subject_name:SetPoint("TOP", header, "BOTTOM", 0, -10)
 | 
| 
jcallahan@258
 | 
   456     panel.subject_name = subject_name
 | 
| 
jcallahan@258
 | 
   457 
 | 
| 
jcallahan@258
 | 
   458     local subject_data = panel:CreateFontString(nil, "ARTWORK", "GameFontNormal")
 | 
| 
jcallahan@258
 | 
   459     subject_data:SetPoint("TOP", subject_name, "BOTTOM", 0, -3)
 | 
| 
jcallahan@258
 | 
   460     panel.subject_data = subject_data
 | 
| 
jcallahan@249
 | 
   461 
 | 
| 
jcallahan@249
 | 
   462     local close = _G.CreateFrame("Button", nil, panel, "UIPanelCloseButton")
 | 
| 
jcallahan@249
 | 
   463     close:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -7, -7)
 | 
| 
jcallahan@249
 | 
   464 
 | 
| 
jcallahan@249
 | 
   465     local scroll_frame = _G.CreateFrame("ScrollFrame", "$parentScrollFrame", panel)
 | 
| 
jcallahan@249
 | 
   466     scroll_frame:SetSize(435, 150)
 | 
| 
jcallahan@249
 | 
   467     scroll_frame:SetPoint("BOTTOM", 0, 70)
 | 
| 
jcallahan@249
 | 
   468 
 | 
| 
jcallahan@249
 | 
   469     scroll_frame:SetScript("OnScrollRangeChanged", function(self, x, y)
 | 
| 
jcallahan@249
 | 
   470         _G.ScrollFrame_OnScrollRangeChanged(self, x, y)
 | 
| 
jcallahan@249
 | 
   471     end)
 | 
| 
jcallahan@249
 | 
   472 
 | 
| 
jcallahan@249
 | 
   473     scroll_frame:SetScript("OnVerticalScroll", function(self, offset)
 | 
| 
jcallahan@249
 | 
   474         local scrollbar = self.ScrollBar
 | 
| 
jcallahan@249
 | 
   475         scrollbar:SetValue(offset)
 | 
| 
jcallahan@249
 | 
   476 
 | 
| 
jcallahan@249
 | 
   477         local min, max = scrollbar:GetMinMaxValues()
 | 
| 
jcallahan@249
 | 
   478 
 | 
| 
jcallahan@249
 | 
   479         if offset == 0 then
 | 
| 
jcallahan@249
 | 
   480             scrollbar.ScrollUpButton:Disable()
 | 
| 
jcallahan@249
 | 
   481         else
 | 
| 
jcallahan@249
 | 
   482             scrollbar.ScrollUpButton:Enable()
 | 
| 
jcallahan@249
 | 
   483         end
 | 
| 
jcallahan@249
 | 
   484 
 | 
| 
jcallahan@249
 | 
   485         if (scrollbar:GetValue() - max) == 0 then
 | 
| 
jcallahan@249
 | 
   486             scrollbar.ScrollDownButton:Disable()
 | 
| 
jcallahan@249
 | 
   487         else
 | 
| 
jcallahan@249
 | 
   488             scrollbar.ScrollDownButton:Enable()
 | 
| 
jcallahan@249
 | 
   489         end
 | 
| 
jcallahan@249
 | 
   490     end)
 | 
| 
jcallahan@249
 | 
   491 
 | 
| 
jcallahan@249
 | 
   492     scroll_frame:SetScript("OnMouseWheel", function(self, delta)
 | 
| 
jcallahan@249
 | 
   493         _G.ScrollFrameTemplate_OnMouseWheel(self, delta)
 | 
| 
jcallahan@249
 | 
   494     end)
 | 
| 
jcallahan@249
 | 
   495 
 | 
| 
jcallahan@266
 | 
   496     -- 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
 | 
   497     scroll_frame:SetScript("OnMouseUp", function(self)
 | 
| 
jcallahan@266
 | 
   498         _G.EditBox_SetFocus(self.edit_box)
 | 
| 
jcallahan@266
 | 
   499     end)
 | 
| 
jcallahan@266
 | 
   500 
 | 
| 
jcallahan@258
 | 
   501     panel.scroll_frame = scroll_frame
 | 
| 
jcallahan@258
 | 
   502 
 | 
| 
MMOSimca@581
 | 
   503     local edit_container = _G.CreateFrame("Frame", nil, scroll_frame, BackdropTemplateMixin and "BackdropTemplate")
 | 
| 
jcallahan@249
 | 
   504     edit_container:SetPoint("TOPLEFT", scroll_frame, -7, 7)
 | 
| 
jcallahan@249
 | 
   505     edit_container:SetPoint("BOTTOMRIGHT", scroll_frame, 7, -7)
 | 
| 
jcallahan@249
 | 
   506     edit_container:SetFrameLevel(scroll_frame:GetFrameLevel() - 1)
 | 
| 
jcallahan@249
 | 
   507     edit_container:SetBackdrop({
 | 
| 
jcallahan@249
 | 
   508         bgFile = [[Interface\Tooltips\UI-Tooltip-Background]],
 | 
| 
jcallahan@249
 | 
   509         edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]],
 | 
| 
jcallahan@249
 | 
   510         tile = true,
 | 
| 
jcallahan@249
 | 
   511         tileSize = 16,
 | 
| 
jcallahan@249
 | 
   512         edgeSize = 16,
 | 
| 
jcallahan@249
 | 
   513         insets = {
 | 
| 
jcallahan@249
 | 
   514             left = 5,
 | 
| 
jcallahan@249
 | 
   515             right = 5,
 | 
| 
jcallahan@249
 | 
   516             top = 5,
 | 
| 
jcallahan@249
 | 
   517             bottom = 5
 | 
| 
jcallahan@249
 | 
   518         }
 | 
| 
jcallahan@249
 | 
   519     })
 | 
| 
jcallahan@249
 | 
   520 
 | 
| 
jcallahan@249
 | 
   521     edit_container:SetBackdropBorderColor(_G.TOOLTIP_DEFAULT_COLOR.r, _G.TOOLTIP_DEFAULT_COLOR.g, _G.TOOLTIP_DEFAULT_COLOR.b)
 | 
| 
jcallahan@249
 | 
   522     edit_container:SetBackdropColor(0, 0, 0)
 | 
| 
MMOSimca@581
 | 
   523 	edit_container:ApplyBackdrop()
 | 
| 
jcallahan@249
 | 
   524 
 | 
| 
jcallahan@259
 | 
   525     local link_button = _G.CreateFrame("Button", "$parentLinkButton", panel)
 | 
| 
jcallahan@259
 | 
   526     link_button:SetSize(32, 16)
 | 
| 
jcallahan@259
 | 
   527     link_button:SetPoint("TOPRIGHT", edit_container, "BOTTOMRIGHT", 5, 0)
 | 
| 
jcallahan@259
 | 
   528 
 | 
| 
jcallahan@259
 | 
   529     link_button:SetNormalTexture([[Interface\TradeSkillFrame\UI-TradeSkill-LinkButton]])
 | 
| 
jcallahan@259
 | 
   530     link_button:GetNormalTexture():SetTexCoord(0, 1, 0, 0.5)
 | 
| 
jcallahan@259
 | 
   531 
 | 
| 
jcallahan@259
 | 
   532     link_button:SetHighlightTexture([[Interface\TradeSkillFrame\UI-TradeSkill-LinkButton]])
 | 
| 
jcallahan@259
 | 
   533     link_button:GetHighlightTexture():SetTexCoord(0, 1, 0.5, 1)
 | 
| 
jcallahan@259
 | 
   534 
 | 
| 
jcallahan@259
 | 
   535     link_button:SetScript("OnClick", function(self)
 | 
| 
jcallahan@259
 | 
   536         Dialog:Spawn("WDP_CommentLink", { type_name = comment_subject.type_name, id = comment_subject.id, label = comment_subject.label })
 | 
| 
jcallahan@259
 | 
   537     end)
 | 
| 
jcallahan@259
 | 
   538 
 | 
| 
jcallahan@259
 | 
   539     link_button:SetScript("OnEnter", function(self)
 | 
| 
jcallahan@259
 | 
   540         _G.GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT")
 | 
| 
jcallahan@259
 | 
   541         _G.GameTooltip:SetText(LINK_COMMENT_TOOLTIP, nil, nil, nil, nil, 1)
 | 
| 
jcallahan@259
 | 
   542         _G.GameTooltip:Show()
 | 
| 
jcallahan@259
 | 
   543     end)
 | 
| 
jcallahan@259
 | 
   544 
 | 
| 
jcallahan@259
 | 
   545     link_button:SetScript("OnLeave", _G.GameTooltip_Hide)
 | 
| 
jcallahan@259
 | 
   546 
 | 
| 
jcallahan@266
 | 
   547     local edit_description = edit_container:CreateFontString(nil, "ARTWORK", "GameFontHighlight")
 | 
| 
jcallahan@258
 | 
   548     edit_description:SetHeight(36)
 | 
| 
jcallahan@258
 | 
   549     edit_description:SetPoint("BOTTOMLEFT", edit_container, "TOPLEFT", 5, 3)
 | 
| 
jcallahan@258
 | 
   550     edit_description:SetPoint("BOTTOMRIGHT", edit_container, "TOPRIGHT", 5, 3)
 | 
| 
jcallahan@258
 | 
   551     edit_description:SetFormattedText(EDIT_DESCRIPTION_FORMAT, _G.BreakUpLargeNumbers(EDIT_MAXCHARS))
 | 
| 
jcallahan@258
 | 
   552     edit_description:SetWordWrap(true)
 | 
| 
jcallahan@258
 | 
   553     edit_description:SetJustifyH("LEFT")
 | 
| 
jcallahan@258
 | 
   554 
 | 
| 
jcallahan@266
 | 
   555     local edit_box = _G.CreateFrame("EditBox", "$parentEditBox", scroll_frame)
 | 
| 
jcallahan@249
 | 
   556     edit_box:SetMultiLine(true)
 | 
| 
jcallahan@258
 | 
   557     edit_box:SetMaxLetters(EDIT_MAXCHARS)
 | 
| 
jcallahan@249
 | 
   558     edit_box:EnableMouse(true)
 | 
| 
jcallahan@249
 | 
   559     edit_box:SetAutoFocus(false)
 | 
| 
jcallahan@249
 | 
   560     edit_box:SetFontObject("ChatFontNormal")
 | 
| 
jcallahan@249
 | 
   561     edit_box:SetSize(420, 220)
 | 
| 
jcallahan@249
 | 
   562     edit_box:HighlightText(0)
 | 
| 
jcallahan@266
 | 
   563     edit_box:SetFrameLevel(scroll_frame:GetFrameLevel() + 1)
 | 
| 
jcallahan@249
 | 
   564 
 | 
| 
jcallahan@249
 | 
   565     edit_box:SetScript("OnCursorChanged", _G.ScrollingEdit_OnCursorChanged)
 | 
| 
jcallahan@249
 | 
   566     edit_box:SetScript("OnEscapePressed", _G.EditBox_ClearFocus)
 | 
| 
jcallahan@249
 | 
   567     edit_box:SetScript("OnShow", function(self)
 | 
| 
jcallahan@249
 | 
   568         _G.EditBox_SetFocus(self)
 | 
| 
jcallahan@249
 | 
   569 
 | 
| 
jcallahan@249
 | 
   570         if self:GetNumLetters() > 0 then
 | 
| 
jcallahan@249
 | 
   571             panel.submitButton:Enable()
 | 
| 
jcallahan@249
 | 
   572         else
 | 
| 
jcallahan@249
 | 
   573             panel.submitButton:Disable()
 | 
| 
jcallahan@249
 | 
   574         end
 | 
| 
jcallahan@249
 | 
   575     end)
 | 
| 
jcallahan@249
 | 
   576 
 | 
| 
jcallahan@249
 | 
   577     edit_box:SetScript("OnTextChanged", function(self, user_input)
 | 
| 
jcallahan@249
 | 
   578         local parent = self:GetParent()
 | 
| 
jcallahan@249
 | 
   579         local num_letters = self:GetNumLetters()
 | 
| 
jcallahan@249
 | 
   580         _G.ScrollingEdit_OnTextChanged(self, parent)
 | 
| 
jcallahan@258
 | 
   581         parent.charCount:SetFormattedText(_G.BreakUpLargeNumbers(self:GetMaxLetters() - num_letters))
 | 
| 
jcallahan@249
 | 
   582 
 | 
| 
jcallahan@249
 | 
   583         if num_letters > 0 then
 | 
| 
jcallahan@249
 | 
   584             panel.submitButton:Enable();
 | 
| 
jcallahan@258
 | 
   585         else
 | 
| 
jcallahan@258
 | 
   586             panel.submitButton:Disable()
 | 
| 
jcallahan@249
 | 
   587         end
 | 
| 
jcallahan@249
 | 
   588     end)
 | 
| 
jcallahan@249
 | 
   589 
 | 
| 
jcallahan@249
 | 
   590     edit_box:SetScript("OnUpdate", function(self, elapsed)
 | 
| 
jcallahan@249
 | 
   591         _G.ScrollingEdit_OnUpdate(self, elapsed, self:GetParent())
 | 
| 
jcallahan@249
 | 
   592     end)
 | 
| 
jcallahan@249
 | 
   593 
 | 
| 
jcallahan@258
 | 
   594     scroll_frame.edit_box = edit_box
 | 
| 
jcallahan@249
 | 
   595     scroll_frame:SetScrollChild(edit_box)
 | 
| 
jcallahan@249
 | 
   596 
 | 
| 
jcallahan@249
 | 
   597     local char_count = scroll_frame:CreateFontString(nil, "OVERLAY", "GameFontDisableLarge")
 | 
| 
jcallahan@249
 | 
   598     char_count:SetPoint("BOTTOMRIGHT", -15, 0)
 | 
| 
jcallahan@249
 | 
   599     scroll_frame.charCount = char_count
 | 
| 
jcallahan@249
 | 
   600 
 | 
| 
jcallahan@249
 | 
   601     local scroll_bar = _G.CreateFrame("Slider", "$parentScrollBar", scroll_frame, "UIPanelScrollBarTemplate")
 | 
| 
jcallahan@249
 | 
   602     scroll_bar:SetPoint("TOPLEFT", scroll_frame, "TOPRIGHT", -13, -16)
 | 
| 
jcallahan@249
 | 
   603     scroll_bar:SetPoint("BOTTOMLEFT", scroll_frame, "BOTTOMRIGHT", -13, 16)
 | 
| 
jcallahan@249
 | 
   604     scroll_frame.ScrollBar = scroll_bar
 | 
| 
jcallahan@249
 | 
   605 
 | 
| 
jcallahan@249
 | 
   606     _G.ScrollFrame_OnLoad(scroll_frame)
 | 
| 
jcallahan@249
 | 
   607 
 | 
| 
jcallahan@249
 | 
   608     local submit = _G.CreateFrame("Button", "$parentSubmit", panel, "GameMenuButtonTemplate")
 | 
| 
jcallahan@249
 | 
   609     submit:SetSize(160, 30)
 | 
| 
jcallahan@249
 | 
   610     submit:SetPoint("BOTTOM", 0, 15)
 | 
| 
jcallahan@249
 | 
   611     submit:SetText(_G.SUBMIT)
 | 
| 
jcallahan@249
 | 
   612     submit:Enable(false)
 | 
| 
jcallahan@249
 | 
   613 
 | 
| 
jcallahan@249
 | 
   614     submit:SetScript("OnClick", function()
 | 
| 
jcallahan@263
 | 
   615         local entry = DBEntry(URL_TYPE_MAP[comment_subject.type_name], comment_subject.id)
 | 
| 
jcallahan@263
 | 
   616 
 | 
| 
jcallahan@263
 | 
   617         if not entry then
 | 
| 
jcallahan@263
 | 
   618             WDP:Print("An error has occurred; please report at http://wow.curseforge.com/addons/wowdb-profiler/create-ticket/")
 | 
| 
jcallahan@263
 | 
   619             return
 | 
| 
jcallahan@263
 | 
   620         end
 | 
| 
jcallahan@263
 | 
   621         entry.comments = entry.comments or {}
 | 
| 
jcallahan@263
 | 
   622         entry.comments[#entry.comments + 1] = edit_box:GetText()
 | 
| 
jcallahan@263
 | 
   623 
 | 
| 
jcallahan@249
 | 
   624         edit_box:SetText("")
 | 
| 
jcallahan@249
 | 
   625         _G.HideUIPanel(panel)
 | 
| 
jcallahan@249
 | 
   626     end)
 | 
| 
jcallahan@249
 | 
   627     panel.submitButton = submit
 | 
| 
jcallahan@270
 | 
   628 
 | 
| 
jcallahan@275
 | 
   629     --    local data_obj = LibStub("LibDataBroker-1.1"):NewDataObject(ADDON_NAME, {
 | 
| 
jcallahan@275
 | 
   630     --        type = "data source",
 | 
| 
jcallahan@275
 | 
   631     --        label = ADDON_NAME,
 | 
| 
jcallahan@275
 | 
   632     --        text = " ",
 | 
| 
jcallahan@275
 | 
   633     --        icon = [[Interface\CHATFRAME\UI-ChatIcon-Chat-Up]],
 | 
| 
jcallahan@275
 | 
   634     --        OnClick = function(self, button, down)
 | 
| 
jcallahan@275
 | 
   635     --            ShowPossibleSubjects(self)
 | 
| 
jcallahan@275
 | 
   636     --        end,
 | 
| 
jcallahan@275
 | 
   637     --        OnTooltipShow = function(self)
 | 
| 
jcallahan@275
 | 
   638     --            self:AddLine(_G.CLICK_TO_ENTER_COMMENT)
 | 
| 
jcallahan@275
 | 
   639     --        end,
 | 
| 
jcallahan@275
 | 
   640     --    })
 | 
| 
jcallahan@275
 | 
   641     --
 | 
| 
jcallahan@275
 | 
   642     --    private.data_obj = data_obj
 | 
| 
jcallahan@275
 | 
   643     --    LibStub("LibDBIcon-1.0"):Register(ADDON_NAME, data_obj, private.db.global.config.minimap_icon)
 | 
| 
jcallahan@270
 | 
   644 
 | 
| 
MMOSimca@581
 | 
   645 	TooltipDataProcessor.AddTooltipPostCall(Enum.TooltipDataType.Item, function(self)
 | 
| 
jcallahan@276
 | 
   646     end)
 | 
| 
jcallahan@276
 | 
   647 
 | 
| 
jcallahan@272
 | 
   648     _G["BINDING_HEADER_WOWDB_PROFILER"] = "WoWDB Profiler"
 | 
| 
jcallahan@249
 | 
   649 end
 |