Mercurial > wow > squawk
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 +--]] +