Mercurial > wow > squawk
diff 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 |
line wrap: on
line diff
--- a/View.lua Thu May 07 02:52:23 2009 +1000 +++ b/View.lua Tue May 12 00:57:59 2009 +1000 @@ -65,9 +65,12 @@ function View:GetTime(stime) local lapsed = difftime(time(), stime) if lapsed < 86400 then -- if we're still in the same day... - for _,span in ipairs(TimeSpan) do + for inc,span in ipairs(TimeSpan) do if lapsed < span[2] then local timespan = math.floor(lapsed/span[3]) + if inc == 3 then + timespan = tonumber(string.format("%.1f", lapsed/span[3])) + end if timespan == 1 then timespan = timespan .." ".. span[1] else @@ -84,9 +87,11 @@ local QTip = LibStub("LibQTip-1.0") local QTipClick = LibStub("LibQTipClick-1.0") local tooltip = {} +local editbox = CreateFrame('EditBox', nil, UIParent) local function HideTooltip() - if MouseIsOver(tooltip) then return end + if not tooltip then return end + if MouseIsOver(tooltip) or MouseIsOver(editbox) then return end tooltip:SetScript("OnLeave", nil) tooltip:Hide() QTip:Release(tooltip) @@ -94,30 +99,28 @@ end local function ReplyToMe(cell, Owner, event) - View:Print("Replying to @"..Owner) + editbox.Timestamp = Owner[2] + LDBFeed.OnClick(LDBFeed, "LeftButton", "@"..Owner[1]:gsub("|c%x%x%x%x%x%x%x%x(.-)|r", "%1")) end local function AddLine(tooltip, Line, Number, Owner, TimeStamp) local x,y if #Line < 79 then - y,x = tooltip:AddNormalLine(Number, Owner, Line, TimeStamp) + y,x = tooltip:AddNormalLine(Number, Owner, Line, View:GetTime(TimeStamp)) else - y,x = tooltip:AddNormalLine(Number, Owner, Line:sub(1, 80).."-", TimeStamp) + y,x = tooltip:AddNormalLine(Number, Owner, Line:sub(1, 80).."-", View:GetTime(TimeStamp)) AddLine(tooltip, Line:sub(81)) end if not TimeStamp then return end -- Now add the reply clickback - tooltip:SetCell(y, 5, " ", Owner) - tooltip.lines[y].cells[5]:SetBackdrop({bgFile= "Interface\\Addons\\Squawk\\reply"}) - if not tooltip.lines[y].cells[5]:GetScript("OnHide") then - tooltip.lines[y].cells[5]:SetScript("OnHide", function(self) self:SetBackdrop(nil) self:SetScript("OnHide", nil) end) - end + tooltip:SetCell(y, 5, "|TInterface\\Addons\\Squawk\\reply:0|t", {Owner, TimeStamp}) -- Reply clickback finished end function LDBFeed:OnEnter() tooltip = QTipClick:Acquire("Squawk",5, "LEFT", "CENTER", "LEFT", "RIGHT", "RIGHT") + tooltip.type = "Squawk" tooltip:Clear() tooltip:SetCallback("OnMouseDown", ReplyToMe) self.tooltip = tooltip @@ -126,7 +129,7 @@ local message = {strsplit("\n",squawk.Message)} for _,line in ipairs(message) do if head then - AddLine(tooltip, line, i..".", squawk.Owner, View:GetTime(squawk.Time)) + AddLine(tooltip, line, i..".", Squawks:OwnerString(squawk), squawk.Time) head = false else AddLine(tooltip, line) @@ -141,37 +144,60 @@ function LDBFeed:OnLeave() HideTooltip() end ---[[ -function LDBFeed:OnClick(button) - editbox:ClearAllPoints() - editbox:SetPoint(GetTipAnchor(self)) - editbox:Show() -end + local function GetTipAnchor(frame) - if not x or not y then return "TOPLEFT", frame, "BOTTOMLEFT" end + local x,y = frame:GetCenter() local hhalf = (x > UIParent:GetWidth()*2/3) and "RIGHT" or (x < UIParent:GetWidth()/3) and "LEFT" or "" local vhalf = (y > UIParent:GetHeight()/2) and "TOP" or "BOTTOM" return vhalf..hhalf, frame, (vhalf == "TOP" and "BOTTOM" or "TOP")..hhalf end -local editbox = CreateFrame('EditBox', nil, UIParent) +function LDBFeed:OnClick(button, reply) + editbox:ClearAllPoints() + local frame -- begin terrible hack to place the editbox somewhere close to the tooltip/ldb + if GetMouseFocus():GetParent().type == "Squawk" then -- if we're a tooltip as designated above + frame = GetMouseFocus():GetParent() -- parent to the tooltip + else + frame = GetMouseFocus() -- else parent to the ldb feeder + end + editbox:SetPoint(GetTipAnchor(frame)) + editbox:Show() + editbox:SetText("") + if reply then + editbox:SetText(reply) + end + HideTooltip(true) +end + + editbox:Hide() editbox:SetAutoFocus(true) editbox:SetHeight(32) editbox:SetWidth(350) +editbox:SetMaxLetters(140) editbox:SetFrameStrata("HIGH") editbox:SetFontObject('GameFontHighlightSmall') -lib.editbox = editbox +LDBFeed.editbox = editbox -editbox:SetScript("OnEscapePressed", editbox.ClearFocus) -editbox:SetScript("OnEnterPressed", editbox.ClearFocus) +editbox:SetScript("OnEscapePressed", function() + editbox:SetText("") + editbox.Timestamp = nil + editbox:ClearFocus() + end) +editbox:SetScript("OnEnterPressed", function() + if #editbox:GetText() > 0 then + View:Print(editbox.Timestamp) + Controller:SendNewSquawk(editbox:GetText(), editbox.Timestamp) + end + editbox.Timestamp = nil + editbox:SetText("") + editbox:ClearFocus() + end) editbox:SetScript("OnEditFocusLost", editbox.Hide) editbox:SetScript("OnEditFocusGained", editbox.HighlightText) editbox:SetScript("OnTextChanged", function(self) - self:SetText(self:GetParent().val) - self:HighlightText() end) local left = editbox:CreateTexture(nil, "BACKGROUND") @@ -193,12 +219,11 @@ center:SetTexture("Interface\\Common\\Common-Input-Border") center:SetTexCoord(0.0625, 0.9375, 0, 0.625) -function lib.OpenEditbox(self) +function LDBFeed.OpenEditbox(self) editbox:SetText(self.val) editbox:SetParent(self) editbox:SetPoint("LEFT", self) editbox:SetPoint("RIGHT", self) editbox:Show() end ---]]