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
---]]