Mercurial > wow > squawk
comparison View.lua @ 19:431f2fce08f2
Added in link stripping
Coloured class names
Reply to specific squawk
Related squawks fixed
new arrow to indicate reply
limit to 140 characters
| author | wobin |
|---|---|
| date | Tue, 12 May 2009 00:57:59 +1000 |
| parents | a3328fffef5c |
| children |
comparison
equal
deleted
inserted
replaced
| 18:a3328fffef5c | 19:431f2fce08f2 |
|---|---|
| 63 [3] = {"hour", 86400, 3600} } | 63 [3] = {"hour", 86400, 3600} } |
| 64 | 64 |
| 65 function View:GetTime(stime) | 65 function View:GetTime(stime) |
| 66 local lapsed = difftime(time(), stime) | 66 local lapsed = difftime(time(), stime) |
| 67 if lapsed < 86400 then -- if we're still in the same day... | 67 if lapsed < 86400 then -- if we're still in the same day... |
| 68 for _,span in ipairs(TimeSpan) do | 68 for inc,span in ipairs(TimeSpan) do |
| 69 if lapsed < span[2] then | 69 if lapsed < span[2] then |
| 70 local timespan = math.floor(lapsed/span[3]) | 70 local timespan = math.floor(lapsed/span[3]) |
| 71 if inc == 3 then | |
| 72 timespan = tonumber(string.format("%.1f", lapsed/span[3])) | |
| 73 end | |
| 71 if timespan == 1 then | 74 if timespan == 1 then |
| 72 timespan = timespan .." ".. span[1] | 75 timespan = timespan .." ".. span[1] |
| 73 else | 76 else |
| 74 timespan = timespan .. " ".. span[1].."s" | 77 timespan = timespan .. " ".. span[1].."s" |
| 75 end | 78 end |
| 82 | 85 |
| 83 local LDBFeed = LibStub("LibDataBroker-1.1"):NewDataObject("Squawk", {type = "data source", text = "Awk!"}) | 86 local LDBFeed = LibStub("LibDataBroker-1.1"):NewDataObject("Squawk", {type = "data source", text = "Awk!"}) |
| 84 local QTip = LibStub("LibQTip-1.0") | 87 local QTip = LibStub("LibQTip-1.0") |
| 85 local QTipClick = LibStub("LibQTipClick-1.0") | 88 local QTipClick = LibStub("LibQTipClick-1.0") |
| 86 local tooltip = {} | 89 local tooltip = {} |
| 90 local editbox = CreateFrame('EditBox', nil, UIParent) | |
| 87 | 91 |
| 88 local function HideTooltip() | 92 local function HideTooltip() |
| 89 if MouseIsOver(tooltip) then return end | 93 if not tooltip then return end |
| 94 if MouseIsOver(tooltip) or MouseIsOver(editbox) then return end | |
| 90 tooltip:SetScript("OnLeave", nil) | 95 tooltip:SetScript("OnLeave", nil) |
| 91 tooltip:Hide() | 96 tooltip:Hide() |
| 92 QTip:Release(tooltip) | 97 QTip:Release(tooltip) |
| 93 tooltip = nil | 98 tooltip = nil |
| 94 end | 99 end |
| 95 | 100 |
| 96 local function ReplyToMe(cell, Owner, event) | 101 local function ReplyToMe(cell, Owner, event) |
| 97 View:Print("Replying to @"..Owner) | 102 editbox.Timestamp = Owner[2] |
| 103 LDBFeed.OnClick(LDBFeed, "LeftButton", "@"..Owner[1]:gsub("|c%x%x%x%x%x%x%x%x(.-)|r", "%1")) | |
| 98 end | 104 end |
| 99 | 105 |
| 100 local function AddLine(tooltip, Line, Number, Owner, TimeStamp) | 106 local function AddLine(tooltip, Line, Number, Owner, TimeStamp) |
| 101 local x,y | 107 local x,y |
| 102 if #Line < 79 then | 108 if #Line < 79 then |
| 103 y,x = tooltip:AddNormalLine(Number, Owner, Line, TimeStamp) | 109 y,x = tooltip:AddNormalLine(Number, Owner, Line, View:GetTime(TimeStamp)) |
| 104 else | 110 else |
| 105 y,x = tooltip:AddNormalLine(Number, Owner, Line:sub(1, 80).."-", TimeStamp) | 111 y,x = tooltip:AddNormalLine(Number, Owner, Line:sub(1, 80).."-", View:GetTime(TimeStamp)) |
| 106 AddLine(tooltip, Line:sub(81)) | 112 AddLine(tooltip, Line:sub(81)) |
| 107 end | 113 end |
| 108 if not TimeStamp then return end | 114 if not TimeStamp then return end |
| 109 | 115 |
| 110 -- Now add the reply clickback | 116 -- Now add the reply clickback |
| 111 tooltip:SetCell(y, 5, " ", Owner) | 117 tooltip:SetCell(y, 5, "|TInterface\\Addons\\Squawk\\reply:0|t", {Owner, TimeStamp}) |
| 112 tooltip.lines[y].cells[5]:SetBackdrop({bgFile= "Interface\\Addons\\Squawk\\reply"}) | |
| 113 if not tooltip.lines[y].cells[5]:GetScript("OnHide") then | |
| 114 tooltip.lines[y].cells[5]:SetScript("OnHide", function(self) self:SetBackdrop(nil) self:SetScript("OnHide", nil) end) | |
| 115 end | |
| 116 -- Reply clickback finished | 118 -- Reply clickback finished |
| 117 end | 119 end |
| 118 | 120 |
| 119 function LDBFeed:OnEnter() | 121 function LDBFeed:OnEnter() |
| 120 tooltip = QTipClick:Acquire("Squawk",5, "LEFT", "CENTER", "LEFT", "RIGHT", "RIGHT") | 122 tooltip = QTipClick:Acquire("Squawk",5, "LEFT", "CENTER", "LEFT", "RIGHT", "RIGHT") |
| 123 tooltip.type = "Squawk" | |
| 121 tooltip:Clear() | 124 tooltip:Clear() |
| 122 tooltip:SetCallback("OnMouseDown", ReplyToMe) | 125 tooltip:SetCallback("OnMouseDown", ReplyToMe) |
| 123 self.tooltip = tooltip | 126 self.tooltip = tooltip |
| 124 for i,squawk in ipairs(Squawks:GetLast10()) do | 127 for i,squawk in ipairs(Squawks:GetLast10()) do |
| 125 local head = true | 128 local head = true |
| 126 local message = {strsplit("\n",squawk.Message)} | 129 local message = {strsplit("\n",squawk.Message)} |
| 127 for _,line in ipairs(message) do | 130 for _,line in ipairs(message) do |
| 128 if head then | 131 if head then |
| 129 AddLine(tooltip, line, i..".", squawk.Owner, View:GetTime(squawk.Time)) | 132 AddLine(tooltip, line, i..".", Squawks:OwnerString(squawk), squawk.Time) |
| 130 head = false | 133 head = false |
| 131 else | 134 else |
| 132 AddLine(tooltip, line) | 135 AddLine(tooltip, line) |
| 133 end | 136 end |
| 134 end | 137 end |
| 139 end | 142 end |
| 140 | 143 |
| 141 function LDBFeed:OnLeave() | 144 function LDBFeed:OnLeave() |
| 142 HideTooltip() | 145 HideTooltip() |
| 143 end | 146 end |
| 144 --[[ | 147 |
| 145 | 148 |
| 146 function LDBFeed:OnClick(button) | |
| 147 editbox:ClearAllPoints() | |
| 148 editbox:SetPoint(GetTipAnchor(self)) | |
| 149 editbox:Show() | |
| 150 end | |
| 151 | 149 |
| 152 local function GetTipAnchor(frame) | 150 local function GetTipAnchor(frame) |
| 153 if not x or not y then return "TOPLEFT", frame, "BOTTOMLEFT" end | 151 local x,y = frame:GetCenter() |
| 154 local hhalf = (x > UIParent:GetWidth()*2/3) and "RIGHT" or (x < UIParent:GetWidth()/3) and "LEFT" or "" | 152 local hhalf = (x > UIParent:GetWidth()*2/3) and "RIGHT" or (x < UIParent:GetWidth()/3) and "LEFT" or "" |
| 155 local vhalf = (y > UIParent:GetHeight()/2) and "TOP" or "BOTTOM" | 153 local vhalf = (y > UIParent:GetHeight()/2) and "TOP" or "BOTTOM" |
| 156 return vhalf..hhalf, frame, (vhalf == "TOP" and "BOTTOM" or "TOP")..hhalf | 154 return vhalf..hhalf, frame, (vhalf == "TOP" and "BOTTOM" or "TOP")..hhalf |
| 157 end | 155 end |
| 158 | 156 |
| 159 local editbox = CreateFrame('EditBox', nil, UIParent) | 157 function LDBFeed:OnClick(button, reply) |
| 158 editbox:ClearAllPoints() | |
| 159 local frame -- begin terrible hack to place the editbox somewhere close to the tooltip/ldb | |
| 160 if GetMouseFocus():GetParent().type == "Squawk" then -- if we're a tooltip as designated above | |
| 161 frame = GetMouseFocus():GetParent() -- parent to the tooltip | |
| 162 else | |
| 163 frame = GetMouseFocus() -- else parent to the ldb feeder | |
| 164 end | |
| 165 editbox:SetPoint(GetTipAnchor(frame)) | |
| 166 editbox:Show() | |
| 167 editbox:SetText("") | |
| 168 if reply then | |
| 169 editbox:SetText(reply) | |
| 170 end | |
| 171 HideTooltip(true) | |
| 172 end | |
| 173 | |
| 174 | |
| 160 editbox:Hide() | 175 editbox:Hide() |
| 161 editbox:SetAutoFocus(true) | 176 editbox:SetAutoFocus(true) |
| 162 editbox:SetHeight(32) | 177 editbox:SetHeight(32) |
| 163 editbox:SetWidth(350) | 178 editbox:SetWidth(350) |
| 179 editbox:SetMaxLetters(140) | |
| 164 editbox:SetFrameStrata("HIGH") | 180 editbox:SetFrameStrata("HIGH") |
| 165 editbox:SetFontObject('GameFontHighlightSmall') | 181 editbox:SetFontObject('GameFontHighlightSmall') |
| 166 lib.editbox = editbox | 182 LDBFeed.editbox = editbox |
| 167 | 183 |
| 168 editbox:SetScript("OnEscapePressed", editbox.ClearFocus) | 184 editbox:SetScript("OnEscapePressed", function() |
| 169 editbox:SetScript("OnEnterPressed", editbox.ClearFocus) | 185 editbox:SetText("") |
| 186 editbox.Timestamp = nil | |
| 187 editbox:ClearFocus() | |
| 188 end) | |
| 189 editbox:SetScript("OnEnterPressed", function() | |
| 190 if #editbox:GetText() > 0 then | |
| 191 View:Print(editbox.Timestamp) | |
| 192 Controller:SendNewSquawk(editbox:GetText(), editbox.Timestamp) | |
| 193 end | |
| 194 editbox.Timestamp = nil | |
| 195 editbox:SetText("") | |
| 196 editbox:ClearFocus() | |
| 197 end) | |
| 170 editbox:SetScript("OnEditFocusLost", editbox.Hide) | 198 editbox:SetScript("OnEditFocusLost", editbox.Hide) |
| 171 editbox:SetScript("OnEditFocusGained", editbox.HighlightText) | 199 editbox:SetScript("OnEditFocusGained", editbox.HighlightText) |
| 172 editbox:SetScript("OnTextChanged", function(self) | 200 editbox:SetScript("OnTextChanged", function(self) |
| 173 self:SetText(self:GetParent().val) | |
| 174 self:HighlightText() | |
| 175 end) | 201 end) |
| 176 | 202 |
| 177 local left = editbox:CreateTexture(nil, "BACKGROUND") | 203 local left = editbox:CreateTexture(nil, "BACKGROUND") |
| 178 left:SetWidth(8) left:SetHeight(20) | 204 left:SetWidth(8) left:SetHeight(20) |
| 179 left:SetPoint("LEFT", -5, 0) | 205 left:SetPoint("LEFT", -5, 0) |
| 191 center:SetPoint("RIGHT", right, "LEFT", 0, 0) | 217 center:SetPoint("RIGHT", right, "LEFT", 0, 0) |
| 192 center:SetPoint("LEFT", left, "RIGHT", 0, 0) | 218 center:SetPoint("LEFT", left, "RIGHT", 0, 0) |
| 193 center:SetTexture("Interface\\Common\\Common-Input-Border") | 219 center:SetTexture("Interface\\Common\\Common-Input-Border") |
| 194 center:SetTexCoord(0.0625, 0.9375, 0, 0.625) | 220 center:SetTexCoord(0.0625, 0.9375, 0, 0.625) |
| 195 | 221 |
| 196 function lib.OpenEditbox(self) | 222 function LDBFeed.OpenEditbox(self) |
| 197 editbox:SetText(self.val) | 223 editbox:SetText(self.val) |
| 198 editbox:SetParent(self) | 224 editbox:SetParent(self) |
| 199 editbox:SetPoint("LEFT", self) | 225 editbox:SetPoint("LEFT", self) |
| 200 editbox:SetPoint("RIGHT", self) | 226 editbox:SetPoint("RIGHT", self) |
| 201 editbox:Show() | 227 editbox:Show() |
| 202 end | 228 end |
| 203 --]] | 229 |
| 204 |
