jcallahan@249: -- LUA API ------------------------------------------------------------ jcallahan@249: jcallahan@249: local _G = getfenv(0) jcallahan@249: jcallahan@249: local table = _G.table jcallahan@249: jcallahan@249: -- ADDON NAMESPACE ---------------------------------------------------- jcallahan@249: jcallahan@249: local ADDON_NAME, private = ... jcallahan@249: jcallahan@249: local LibStub = _G.LibStub jcallahan@249: local WDP = LibStub("AceAddon-3.0"):GetAddon(ADDON_NAME) jcallahan@249: jcallahan@249: local ParseGUID = private.ParseGUID jcallahan@249: jcallahan@249: -- HELPERS ------------------------------------------------------------ jcallahan@249: jcallahan@249: local comment_frame jcallahan@249: do jcallahan@249: local panel = _G.CreateFrame("Frame", "WDP_CommentFrame", _G.UIParent, "TranslucentFrameTemplate") jcallahan@249: panel:SetSize(480, 454) jcallahan@249: panel:SetPoint("CENTER", _G.UIParent, "CENTER") jcallahan@249: panel:SetFrameStrata("DIALOG") jcallahan@249: panel.Bg:SetTexture([[Interface\FrameGeneral\UI-Background-Rock]], true, true) jcallahan@249: panel.Bg:SetHorizTile(true) jcallahan@249: panel.Bg:SetVertTile(true) jcallahan@249: panel:Hide() jcallahan@249: comment_frame = panel jcallahan@249: jcallahan@249: table.insert(_G.UISpecialFrames, panel:GetName()) jcallahan@249: jcallahan@249: local streaks = panel:CreateTexture("$parentTopTileStreaks", "BORDER", "_UI-Frame-TopTileStreaks", -6) jcallahan@249: streaks:SetPoint("TOPLEFT", 13, -13) jcallahan@249: streaks:SetPoint("BOTTOMRIGHT", panel, "TOPRIGHT", -13, -35) jcallahan@249: jcallahan@249: local header = _G.CreateFrame("Frame", "$parentHeader", panel, "TranslucentFrameTemplate") jcallahan@249: -- header:SetSize(180, 45) jcallahan@249: header:SetSize(128, 64) jcallahan@249: header:SetPoint("CENTER", panel, "TOP", 0, -8) jcallahan@249: header.Bg:SetTexture([[Interface\FrameGeneral\UI-Background-Marble]]) jcallahan@249: header.Bg:SetHorizTile(true) jcallahan@249: header.Bg:SetVertTile(true) jcallahan@249: panel.header = header jcallahan@249: jcallahan@249: local logo = header:CreateTexture(nil, "ARTWORK") jcallahan@249: logo:SetTexture([[Interface\AddOns\WoWDBProfiler\wowdb-logo]]) jcallahan@249: logo:SetPoint("TOPLEFT", header, 10, -10) jcallahan@249: logo:SetPoint("BOTTOMRIGHT", header, -10, 10) jcallahan@249: jcallahan@249: --[[ jcallahan@249: local header_label = header:CreateFontString(nil, "ARTWORK", "GameFontNormal") jcallahan@249: header_label:SetPoint("CENTER", 0, 0) jcallahan@249: header_label:SetText(ADDON_NAME) jcallahan@249: ]] jcallahan@249: jcallahan@249: local close = _G.CreateFrame("Button", nil, panel, "UIPanelCloseButton") jcallahan@249: close:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -7, -7) jcallahan@249: jcallahan@249: local scroll_frame = _G.CreateFrame("ScrollFrame", "$parentScrollFrame", panel) jcallahan@249: scroll_frame:SetSize(435, 150) jcallahan@249: scroll_frame:SetPoint("BOTTOM", 0, 70) jcallahan@249: jcallahan@249: scroll_frame:SetScript("OnScrollRangeChanged", function(self, x, y) jcallahan@249: _G.ScrollFrame_OnScrollRangeChanged(self, x, y) jcallahan@249: end) jcallahan@249: jcallahan@249: scroll_frame:SetScript("OnVerticalScroll", function(self, offset) jcallahan@249: local scrollbar = self.ScrollBar jcallahan@249: scrollbar:SetValue(offset) jcallahan@249: jcallahan@249: local min, max = scrollbar:GetMinMaxValues() jcallahan@249: jcallahan@249: if offset == 0 then jcallahan@249: scrollbar.ScrollUpButton:Disable() jcallahan@249: else jcallahan@249: scrollbar.ScrollUpButton:Enable() jcallahan@249: end jcallahan@249: jcallahan@249: if (scrollbar:GetValue() - max) == 0 then jcallahan@249: scrollbar.ScrollDownButton:Disable() jcallahan@249: else jcallahan@249: scrollbar.ScrollDownButton:Enable() jcallahan@249: end jcallahan@249: end) jcallahan@249: jcallahan@249: scroll_frame:SetScript("OnMouseWheel", function(self, delta) jcallahan@249: _G.ScrollFrameTemplate_OnMouseWheel(self, delta) jcallahan@249: end) jcallahan@249: jcallahan@249: local edit_container = _G.CreateFrame("Frame", nil, scroll_frame) jcallahan@249: edit_container:SetPoint("TOPLEFT", scroll_frame, -7, 7) jcallahan@249: edit_container:SetPoint("BOTTOMRIGHT", scroll_frame, 7, -7) jcallahan@249: edit_container:SetFrameLevel(scroll_frame:GetFrameLevel() - 1) jcallahan@249: edit_container:SetBackdrop({ jcallahan@249: bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], jcallahan@249: edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]], jcallahan@249: tile = true, jcallahan@249: tileSize = 16, jcallahan@249: edgeSize = 16, jcallahan@249: insets = { jcallahan@249: left = 5, jcallahan@249: right = 5, jcallahan@249: top = 5, jcallahan@249: bottom = 5 jcallahan@249: } jcallahan@249: }) jcallahan@249: jcallahan@249: edit_container:SetBackdropBorderColor(_G.TOOLTIP_DEFAULT_COLOR.r, _G.TOOLTIP_DEFAULT_COLOR.g, _G.TOOLTIP_DEFAULT_COLOR.b) jcallahan@249: edit_container:SetBackdropColor(0, 0, 0) jcallahan@249: jcallahan@249: local edit_box = _G.CreateFrame("EditBox", nil, scroll_frame) jcallahan@249: edit_box:SetMultiLine(true) jcallahan@249: edit_box:SetMaxLetters(3000) jcallahan@249: edit_box:EnableMouse(true) jcallahan@249: edit_box:SetAutoFocus(false) jcallahan@249: edit_box:SetFontObject("ChatFontNormal") jcallahan@249: edit_box:SetSize(420, 220) jcallahan@249: edit_box:HighlightText(0) jcallahan@249: jcallahan@249: edit_box:SetScript("OnCursorChanged", _G.ScrollingEdit_OnCursorChanged) jcallahan@249: edit_box:SetScript("OnEscapePressed", _G.EditBox_ClearFocus) jcallahan@249: edit_box:SetScript("OnShow", function(self) jcallahan@249: _G.EditBox_SetFocus(self) jcallahan@249: jcallahan@249: if self:GetNumLetters() > 0 then jcallahan@249: panel.submitButton:Enable() jcallahan@249: else jcallahan@249: panel.submitButton:Disable() jcallahan@249: end jcallahan@249: end) jcallahan@249: jcallahan@249: edit_box:SetScript("OnTextChanged", function(self, user_input) jcallahan@249: local parent = self:GetParent() jcallahan@249: local num_letters = self:GetNumLetters() jcallahan@249: _G.ScrollingEdit_OnTextChanged(self, parent) jcallahan@249: parent.charCount:SetText(self:GetMaxLetters() - num_letters) jcallahan@249: jcallahan@249: if num_letters > 0 then jcallahan@249: panel.submitButton:Enable(); jcallahan@249: end jcallahan@249: end) jcallahan@249: jcallahan@249: edit_box:SetScript("OnUpdate", function(self, elapsed) jcallahan@249: _G.ScrollingEdit_OnUpdate(self, elapsed, self:GetParent()) jcallahan@249: end) jcallahan@249: jcallahan@249: scroll_frame:SetScrollChild(edit_box) jcallahan@249: jcallahan@249: local char_count = scroll_frame:CreateFontString(nil, "OVERLAY", "GameFontDisableLarge") jcallahan@249: char_count:SetPoint("BOTTOMRIGHT", -15, 0) jcallahan@249: scroll_frame.charCount = char_count jcallahan@249: jcallahan@249: local scroll_bar = _G.CreateFrame("Slider", "$parentScrollBar", scroll_frame, "UIPanelScrollBarTemplate") jcallahan@249: scroll_bar:SetPoint("TOPLEFT", scroll_frame, "TOPRIGHT", -13, -16) jcallahan@249: scroll_bar:SetPoint("BOTTOMLEFT", scroll_frame, "BOTTOMRIGHT", -13, 16) jcallahan@249: scroll_frame.ScrollBar = scroll_bar jcallahan@249: jcallahan@249: _G.ScrollFrame_OnLoad(scroll_frame) jcallahan@249: jcallahan@249: local submit = _G.CreateFrame("Button", "$parentSubmit", panel, "GameMenuButtonTemplate") jcallahan@249: submit:SetSize(160, 30) jcallahan@249: submit:SetPoint("BOTTOM", 0, 15) jcallahan@249: submit:SetText(_G.SUBMIT) jcallahan@249: submit:Enable(false) jcallahan@249: jcallahan@249: submit:SetScript("OnClick", function() jcallahan@249: -- TODO: Make this assign the comment to the correct SavedVariables entry. jcallahan@249: edit_box:SetText("") jcallahan@249: _G.HideUIPanel(panel) jcallahan@249: end) jcallahan@249: panel.submitButton = submit jcallahan@249: end jcallahan@249: jcallahan@249: local function CreateUnitComment(unit_type, unit_idnum) jcallahan@249: comment_frame:Show() jcallahan@249: end jcallahan@249: jcallahan@249: local function CreateCursorComment() jcallahan@249: -- TODO: Implement! jcallahan@249: end jcallahan@249: jcallahan@249: -- METHODS ------------------------------------------------------------ jcallahan@249: jcallahan@249: function private.ProcessCommentCommand(arg) jcallahan@249: if not arg or arg == "" then jcallahan@249: WDP:Print("You must supply a valid comment type.") jcallahan@249: return jcallahan@249: end jcallahan@249: jcallahan@249: if arg == "cursor" then jcallahan@249: WDP:Print("Not yet implemented.") jcallahan@249: return jcallahan@249: end jcallahan@249: jcallahan@249: if not _G.UnitExists(arg) then jcallahan@249: WDP:Printf("Unit '%s' does not exist.", arg) jcallahan@249: return jcallahan@249: end jcallahan@249: local unit_type, unit_idnum = ParseGUID(_G.UnitGUID(arg)) jcallahan@249: jcallahan@249: if not unit_idnum then jcallahan@249: WDP:Printf("Unable to determine unit from '%s'", arg) jcallahan@249: return jcallahan@249: end jcallahan@249: CreateUnitComment(unit_type, unit_idnum) jcallahan@249: end