diff View.lua @ 18:a3328fffef5c

Split of main file into components
author wobin
date Thu, 07 May 2009 02:52:23 +1000
parents
children 431f2fce08f2
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/View.lua	Thu May 07 02:52:23 2009 +1000
@@ -0,0 +1,204 @@
+local View = Squawk.View
+local Model = Squawk.Model
+local Settings = Model.UserSettings
+local Controller = Squawk.Controller
+local Squawks = Model.Squawks
+
+-- View --
+
+function View:UpdateSquawkList()
+	self:Print("Updated Squawk List")
+	self:ShowMeMySquawks()
+end
+
+function View:NotifyOfPending(Name)
+	self:Print(Name.." will have to approve your request")
+end
+
+function View:NotifyOfPendingRequest(Name)
+	self:Print(Name.." wants to follow you.")
+end
+
+function View:NotifyOfNewFollowing(Name)
+	self:Print("You are now following "..Name)
+end
+
+function View:NotifyOfUnfollowing(Name)
+	self:Print("You are no longer following "..Name)
+end
+
+function View:NotifyOfNewFollower(Name)
+	self:Print(Name.." is now following you")
+end
+
+function View:ShowMeMySquawks()
+	for _,squawk in ipairs(Model.Squawks.Main) do
+		self:Print(squawk.Message)
+	end
+end
+
+function View:ShowMeMyFollowers()
+	self:Print("My followers are:")
+	for name,_ in pairs(Settings.Follower) do
+		self:Print(name)
+	end
+end
+
+function View:ShowMeWhoImFollowing()
+	self:Print("I am following:")
+	for name,_ in pairs(Settings.Following) do
+		self:Print(name)
+	end
+end
+
+function View:ShowMeWhoIveBlocked()
+	self:Print("I've blocked:")
+	for name,_ in pairs(Settings.Blocked) do
+		self:Print(name)
+	end
+end
+
+local TimeSpan = {	[1] = {"second",  60, 1},
+										[2] = {"minute", 3600, 60}, 
+										[3] = {"hour", 86400, 3600} }
+
+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
+			if lapsed < span[2] then
+				local timespan = math.floor(lapsed/span[3])
+				if timespan == 1 then
+					timespan = timespan .." ".. span[1]
+				else
+					timespan = timespan .. " ".. span[1].."s"
+				end
+				return timespan.. " ago"
+			end
+		end
+	end
+	return date("%I:%M %p %b %d", stime)
+end
+
+local LDBFeed = LibStub("LibDataBroker-1.1"):NewDataObject("Squawk", {type = "data source", text = "Awk!"})
+local QTip = LibStub("LibQTip-1.0")
+local QTipClick = LibStub("LibQTipClick-1.0")
+local tooltip = {}
+
+local function HideTooltip()
+	if MouseIsOver(tooltip) then return end
+	tooltip:SetScript("OnLeave", nil)
+	tooltip:Hide()
+	QTip:Release(tooltip)
+	tooltip = nil
+end
+
+local function ReplyToMe(cell, Owner, event)
+	View:Print("Replying to @"..Owner)
+end
+
+local function AddLine(tooltip, Line, Number, Owner, TimeStamp)
+	local x,y
+	if #Line < 79 then
+		y,x = tooltip:AddNormalLine(Number, Owner, Line, TimeStamp)
+	else
+		y,x = tooltip:AddNormalLine(Number, Owner, Line:sub(1, 80).."-", 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
+	-- Reply clickback finished
+end
+
+function LDBFeed:OnEnter()
+	tooltip = QTipClick:Acquire("Squawk",5, "LEFT", "CENTER", "LEFT", "RIGHT", "RIGHT")
+	tooltip:Clear()
+	tooltip:SetCallback("OnMouseDown", ReplyToMe)
+	self.tooltip = tooltip
+	for i,squawk in ipairs(Squawks:GetLast10()) do
+			local head = true
+			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))
+					head = false
+				else
+					AddLine(tooltip, line)
+				end
+			end
+	end
+	tooltip:SmartAnchorTo(self)
+	tooltip:SetScript("OnLeave", HideTooltip)
+	tooltip:Show()
+end
+
+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 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)
+editbox:Hide()
+editbox:SetAutoFocus(true)
+editbox:SetHeight(32)
+editbox:SetWidth(350)
+editbox:SetFrameStrata("HIGH")
+editbox:SetFontObject('GameFontHighlightSmall')
+lib.editbox = editbox
+
+editbox:SetScript("OnEscapePressed", editbox.ClearFocus)
+editbox:SetScript("OnEnterPressed", editbox.ClearFocus)
+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")
+	left:SetWidth(8) left:SetHeight(20)
+	left:SetPoint("LEFT", -5, 0)
+	left:SetTexture("Interface\\Common\\Common-Input-Border")
+	left:SetTexCoord(0, 0.0625, 0, 0.625)
+
+	local right = editbox:CreateTexture(nil, "BACKGROUND")
+	right:SetWidth(8) right:SetHeight(20)
+	right:SetPoint("RIGHT", 0, 0)
+	right:SetTexture("Interface\\Common\\Common-Input-Border")
+	right:SetTexCoord(0.9375, 1, 0, 0.625)
+
+	local center = editbox:CreateTexture(nil, "BACKGROUND")
+	center:SetHeight(20)
+	center:SetPoint("RIGHT", right, "LEFT", 0, 0)
+	center:SetPoint("LEFT", left, "RIGHT", 0, 0)
+	center:SetTexture("Interface\\Common\\Common-Input-Border")
+	center:SetTexCoord(0.0625, 0.9375, 0, 0.625)
+
+function lib.OpenEditbox(self)
+  editbox:SetText(self.val)
+  editbox:SetParent(self)
+  editbox:SetPoint("LEFT", self)
+  editbox:SetPoint("RIGHT", self)
+  editbox:Show()
+end
+--]]
+