Mercurial > wow > wowdb-profiler
comparison Comments.lua @ 249:3fe3e55c327e
Added command and GUI for prototype of an in-game comment-submission system.
| author | James D. Callahan III <jcallahan@curse.com> |
|---|---|
| date | Thu, 14 Mar 2013 16:36:36 -0500 |
| parents | |
| children | 88d2c426f876 |
comparison
equal
deleted
inserted
replaced
| 248:4cb26edfd905 | 249:3fe3e55c327e |
|---|---|
| 1 -- LUA API ------------------------------------------------------------ | |
| 2 | |
| 3 local _G = getfenv(0) | |
| 4 | |
| 5 local table = _G.table | |
| 6 | |
| 7 -- ADDON NAMESPACE ---------------------------------------------------- | |
| 8 | |
| 9 local ADDON_NAME, private = ... | |
| 10 | |
| 11 local LibStub = _G.LibStub | |
| 12 local WDP = LibStub("AceAddon-3.0"):GetAddon(ADDON_NAME) | |
| 13 | |
| 14 local ParseGUID = private.ParseGUID | |
| 15 | |
| 16 -- HELPERS ------------------------------------------------------------ | |
| 17 | |
| 18 local comment_frame | |
| 19 do | |
| 20 local panel = _G.CreateFrame("Frame", "WDP_CommentFrame", _G.UIParent, "TranslucentFrameTemplate") | |
| 21 panel:SetSize(480, 454) | |
| 22 panel:SetPoint("CENTER", _G.UIParent, "CENTER") | |
| 23 panel:SetFrameStrata("DIALOG") | |
| 24 panel.Bg:SetTexture([[Interface\FrameGeneral\UI-Background-Rock]], true, true) | |
| 25 panel.Bg:SetHorizTile(true) | |
| 26 panel.Bg:SetVertTile(true) | |
| 27 panel:Hide() | |
| 28 comment_frame = panel | |
| 29 | |
| 30 table.insert(_G.UISpecialFrames, panel:GetName()) | |
| 31 | |
| 32 local streaks = panel:CreateTexture("$parentTopTileStreaks", "BORDER", "_UI-Frame-TopTileStreaks", -6) | |
| 33 streaks:SetPoint("TOPLEFT", 13, -13) | |
| 34 streaks:SetPoint("BOTTOMRIGHT", panel, "TOPRIGHT", -13, -35) | |
| 35 | |
| 36 local header = _G.CreateFrame("Frame", "$parentHeader", panel, "TranslucentFrameTemplate") | |
| 37 -- header:SetSize(180, 45) | |
| 38 header:SetSize(128, 64) | |
| 39 header:SetPoint("CENTER", panel, "TOP", 0, -8) | |
| 40 header.Bg:SetTexture([[Interface\FrameGeneral\UI-Background-Marble]]) | |
| 41 header.Bg:SetHorizTile(true) | |
| 42 header.Bg:SetVertTile(true) | |
| 43 panel.header = header | |
| 44 | |
| 45 local logo = header:CreateTexture(nil, "ARTWORK") | |
| 46 logo:SetTexture([[Interface\AddOns\WoWDBProfiler\wowdb-logo]]) | |
| 47 logo:SetPoint("TOPLEFT", header, 10, -10) | |
| 48 logo:SetPoint("BOTTOMRIGHT", header, -10, 10) | |
| 49 | |
| 50 --[[ | |
| 51 local header_label = header:CreateFontString(nil, "ARTWORK", "GameFontNormal") | |
| 52 header_label:SetPoint("CENTER", 0, 0) | |
| 53 header_label:SetText(ADDON_NAME) | |
| 54 ]] | |
| 55 | |
| 56 local close = _G.CreateFrame("Button", nil, panel, "UIPanelCloseButton") | |
| 57 close:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -7, -7) | |
| 58 | |
| 59 local scroll_frame = _G.CreateFrame("ScrollFrame", "$parentScrollFrame", panel) | |
| 60 scroll_frame:SetSize(435, 150) | |
| 61 scroll_frame:SetPoint("BOTTOM", 0, 70) | |
| 62 | |
| 63 scroll_frame:SetScript("OnScrollRangeChanged", function(self, x, y) | |
| 64 _G.ScrollFrame_OnScrollRangeChanged(self, x, y) | |
| 65 end) | |
| 66 | |
| 67 scroll_frame:SetScript("OnVerticalScroll", function(self, offset) | |
| 68 local scrollbar = self.ScrollBar | |
| 69 scrollbar:SetValue(offset) | |
| 70 | |
| 71 local min, max = scrollbar:GetMinMaxValues() | |
| 72 | |
| 73 if offset == 0 then | |
| 74 scrollbar.ScrollUpButton:Disable() | |
| 75 else | |
| 76 scrollbar.ScrollUpButton:Enable() | |
| 77 end | |
| 78 | |
| 79 if (scrollbar:GetValue() - max) == 0 then | |
| 80 scrollbar.ScrollDownButton:Disable() | |
| 81 else | |
| 82 scrollbar.ScrollDownButton:Enable() | |
| 83 end | |
| 84 end) | |
| 85 | |
| 86 scroll_frame:SetScript("OnMouseWheel", function(self, delta) | |
| 87 _G.ScrollFrameTemplate_OnMouseWheel(self, delta) | |
| 88 end) | |
| 89 | |
| 90 local edit_container = _G.CreateFrame("Frame", nil, scroll_frame) | |
| 91 edit_container:SetPoint("TOPLEFT", scroll_frame, -7, 7) | |
| 92 edit_container:SetPoint("BOTTOMRIGHT", scroll_frame, 7, -7) | |
| 93 edit_container:SetFrameLevel(scroll_frame:GetFrameLevel() - 1) | |
| 94 edit_container:SetBackdrop({ | |
| 95 bgFile = [[Interface\Tooltips\UI-Tooltip-Background]], | |
| 96 edgeFile = [[Interface\Tooltips\UI-Tooltip-Border]], | |
| 97 tile = true, | |
| 98 tileSize = 16, | |
| 99 edgeSize = 16, | |
| 100 insets = { | |
| 101 left = 5, | |
| 102 right = 5, | |
| 103 top = 5, | |
| 104 bottom = 5 | |
| 105 } | |
| 106 }) | |
| 107 | |
| 108 edit_container:SetBackdropBorderColor(_G.TOOLTIP_DEFAULT_COLOR.r, _G.TOOLTIP_DEFAULT_COLOR.g, _G.TOOLTIP_DEFAULT_COLOR.b) | |
| 109 edit_container:SetBackdropColor(0, 0, 0) | |
| 110 | |
| 111 local edit_box = _G.CreateFrame("EditBox", nil, scroll_frame) | |
| 112 edit_box:SetMultiLine(true) | |
| 113 edit_box:SetMaxLetters(3000) | |
| 114 edit_box:EnableMouse(true) | |
| 115 edit_box:SetAutoFocus(false) | |
| 116 edit_box:SetFontObject("ChatFontNormal") | |
| 117 edit_box:SetSize(420, 220) | |
| 118 edit_box:HighlightText(0) | |
| 119 | |
| 120 edit_box:SetScript("OnCursorChanged", _G.ScrollingEdit_OnCursorChanged) | |
| 121 edit_box:SetScript("OnEscapePressed", _G.EditBox_ClearFocus) | |
| 122 edit_box:SetScript("OnShow", function(self) | |
| 123 _G.EditBox_SetFocus(self) | |
| 124 | |
| 125 if self:GetNumLetters() > 0 then | |
| 126 panel.submitButton:Enable() | |
| 127 else | |
| 128 panel.submitButton:Disable() | |
| 129 end | |
| 130 end) | |
| 131 | |
| 132 edit_box:SetScript("OnTextChanged", function(self, user_input) | |
| 133 local parent = self:GetParent() | |
| 134 local num_letters = self:GetNumLetters() | |
| 135 _G.ScrollingEdit_OnTextChanged(self, parent) | |
| 136 parent.charCount:SetText(self:GetMaxLetters() - num_letters) | |
| 137 | |
| 138 if num_letters > 0 then | |
| 139 panel.submitButton:Enable(); | |
| 140 end | |
| 141 end) | |
| 142 | |
| 143 edit_box:SetScript("OnUpdate", function(self, elapsed) | |
| 144 _G.ScrollingEdit_OnUpdate(self, elapsed, self:GetParent()) | |
| 145 end) | |
| 146 | |
| 147 scroll_frame:SetScrollChild(edit_box) | |
| 148 | |
| 149 local char_count = scroll_frame:CreateFontString(nil, "OVERLAY", "GameFontDisableLarge") | |
| 150 char_count:SetPoint("BOTTOMRIGHT", -15, 0) | |
| 151 scroll_frame.charCount = char_count | |
| 152 | |
| 153 local scroll_bar = _G.CreateFrame("Slider", "$parentScrollBar", scroll_frame, "UIPanelScrollBarTemplate") | |
| 154 scroll_bar:SetPoint("TOPLEFT", scroll_frame, "TOPRIGHT", -13, -16) | |
| 155 scroll_bar:SetPoint("BOTTOMLEFT", scroll_frame, "BOTTOMRIGHT", -13, 16) | |
| 156 scroll_frame.ScrollBar = scroll_bar | |
| 157 | |
| 158 _G.ScrollFrame_OnLoad(scroll_frame) | |
| 159 | |
| 160 local submit = _G.CreateFrame("Button", "$parentSubmit", panel, "GameMenuButtonTemplate") | |
| 161 submit:SetSize(160, 30) | |
| 162 submit:SetPoint("BOTTOM", 0, 15) | |
| 163 submit:SetText(_G.SUBMIT) | |
| 164 submit:Enable(false) | |
| 165 | |
| 166 submit:SetScript("OnClick", function() | |
| 167 -- TODO: Make this assign the comment to the correct SavedVariables entry. | |
| 168 edit_box:SetText("") | |
| 169 _G.HideUIPanel(panel) | |
| 170 end) | |
| 171 panel.submitButton = submit | |
| 172 end | |
| 173 | |
| 174 local function CreateUnitComment(unit_type, unit_idnum) | |
| 175 comment_frame:Show() | |
| 176 end | |
| 177 | |
| 178 local function CreateCursorComment() | |
| 179 -- TODO: Implement! | |
| 180 end | |
| 181 | |
| 182 -- METHODS ------------------------------------------------------------ | |
| 183 | |
| 184 function private.ProcessCommentCommand(arg) | |
| 185 if not arg or arg == "" then | |
| 186 WDP:Print("You must supply a valid comment type.") | |
| 187 return | |
| 188 end | |
| 189 | |
| 190 if arg == "cursor" then | |
| 191 WDP:Print("Not yet implemented.") | |
| 192 return | |
| 193 end | |
| 194 | |
| 195 if not _G.UnitExists(arg) then | |
| 196 WDP:Printf("Unit '%s' does not exist.", arg) | |
| 197 return | |
| 198 end | |
| 199 local unit_type, unit_idnum = ParseGUID(_G.UnitGUID(arg)) | |
| 200 | |
| 201 if not unit_idnum then | |
| 202 WDP:Printf("Unable to determine unit from '%s'", arg) | |
| 203 return | |
| 204 end | |
| 205 CreateUnitComment(unit_type, unit_idnum) | |
| 206 end |
