wobin@18: local View = Squawk.View wobin@18: local Model = Squawk.Model wobin@18: local Settings = Model.UserSettings wobin@18: local Controller = Squawk.Controller wobin@18: local Squawks = Model.Squawks wobin@18: wobin@18: -- View -- wobin@18: wobin@18: function View:UpdateSquawkList() wobin@18: self:Print("Updated Squawk List") wobin@18: self:ShowMeMySquawks() wobin@18: end wobin@18: wobin@18: function View:NotifyOfPending(Name) wobin@18: self:Print(Name.." will have to approve your request") wobin@18: end wobin@18: wobin@18: function View:NotifyOfPendingRequest(Name) wobin@18: self:Print(Name.." wants to follow you.") wobin@18: end wobin@18: wobin@18: function View:NotifyOfNewFollowing(Name) wobin@18: self:Print("You are now following "..Name) wobin@18: end wobin@18: wobin@18: function View:NotifyOfUnfollowing(Name) wobin@18: self:Print("You are no longer following "..Name) wobin@18: end wobin@18: wobin@18: function View:NotifyOfNewFollower(Name) wobin@18: self:Print(Name.." is now following you") wobin@18: end wobin@18: wobin@18: function View:ShowMeMySquawks() wobin@18: for _,squawk in ipairs(Model.Squawks.Main) do wobin@18: self:Print(squawk.Message) wobin@18: end wobin@18: end wobin@18: wobin@18: function View:ShowMeMyFollowers() wobin@18: self:Print("My followers are:") wobin@18: for name,_ in pairs(Settings.Follower) do wobin@18: self:Print(name) wobin@18: end wobin@18: end wobin@18: wobin@18: function View:ShowMeWhoImFollowing() wobin@18: self:Print("I am following:") wobin@18: for name,_ in pairs(Settings.Following) do wobin@18: self:Print(name) wobin@18: end wobin@18: end wobin@18: wobin@18: function View:ShowMeWhoIveBlocked() wobin@18: self:Print("I've blocked:") wobin@18: for name,_ in pairs(Settings.Blocked) do wobin@18: self:Print(name) wobin@18: end wobin@18: end wobin@18: wobin@18: local TimeSpan = { [1] = {"second", 60, 1}, wobin@18: [2] = {"minute", 3600, 60}, wobin@18: [3] = {"hour", 86400, 3600} } wobin@18: wobin@18: function View:GetTime(stime) wobin@18: local lapsed = difftime(time(), stime) wobin@18: if lapsed < 86400 then -- if we're still in the same day... wobin@19: for inc,span in ipairs(TimeSpan) do wobin@18: if lapsed < span[2] then wobin@18: local timespan = math.floor(lapsed/span[3]) wobin@19: if inc == 3 then wobin@19: timespan = tonumber(string.format("%.1f", lapsed/span[3])) wobin@19: end wobin@18: if timespan == 1 then wobin@18: timespan = timespan .." ".. span[1] wobin@18: else wobin@18: timespan = timespan .. " ".. span[1].."s" wobin@18: end wobin@18: return timespan.. " ago" wobin@18: end wobin@18: end wobin@18: end wobin@18: return date("%I:%M %p %b %d", stime) wobin@18: end wobin@18: wobin@18: local LDBFeed = LibStub("LibDataBroker-1.1"):NewDataObject("Squawk", {type = "data source", text = "Awk!"}) wobin@18: local QTip = LibStub("LibQTip-1.0") wobin@18: local QTipClick = LibStub("LibQTipClick-1.0") wobin@18: local tooltip = {} wobin@19: local editbox = CreateFrame('EditBox', nil, UIParent) wobin@18: wobin@18: local function HideTooltip() wobin@19: if not tooltip then return end wobin@19: if MouseIsOver(tooltip) or MouseIsOver(editbox) then return end wobin@18: tooltip:SetScript("OnLeave", nil) wobin@18: tooltip:Hide() wobin@18: QTip:Release(tooltip) wobin@18: tooltip = nil wobin@18: end wobin@18: wobin@18: local function ReplyToMe(cell, Owner, event) wobin@19: editbox.Timestamp = Owner[2] wobin@19: LDBFeed.OnClick(LDBFeed, "LeftButton", "@"..Owner[1]:gsub("|c%x%x%x%x%x%x%x%x(.-)|r", "%1")) wobin@18: end wobin@18: wobin@18: local function AddLine(tooltip, Line, Number, Owner, TimeStamp) wobin@18: local x,y wobin@18: if #Line < 79 then wobin@19: y,x = tooltip:AddNormalLine(Number, Owner, Line, View:GetTime(TimeStamp)) wobin@18: else wobin@19: y,x = tooltip:AddNormalLine(Number, Owner, Line:sub(1, 80).."-", View:GetTime(TimeStamp)) wobin@18: AddLine(tooltip, Line:sub(81)) wobin@18: end wobin@18: if not TimeStamp then return end wobin@18: wobin@18: -- Now add the reply clickback wobin@19: tooltip:SetCell(y, 5, "|TInterface\\Addons\\Squawk\\reply:0|t", {Owner, TimeStamp}) wobin@18: -- Reply clickback finished wobin@18: end wobin@18: wobin@18: function LDBFeed:OnEnter() wobin@18: tooltip = QTipClick:Acquire("Squawk",5, "LEFT", "CENTER", "LEFT", "RIGHT", "RIGHT") wobin@19: tooltip.type = "Squawk" wobin@18: tooltip:Clear() wobin@18: tooltip:SetCallback("OnMouseDown", ReplyToMe) wobin@18: self.tooltip = tooltip wobin@18: for i,squawk in ipairs(Squawks:GetLast10()) do wobin@18: local head = true wobin@18: local message = {strsplit("\n",squawk.Message)} wobin@18: for _,line in ipairs(message) do wobin@18: if head then wobin@19: AddLine(tooltip, line, i..".", Squawks:OwnerString(squawk), squawk.Time) wobin@18: head = false wobin@18: else wobin@18: AddLine(tooltip, line) wobin@18: end wobin@18: end wobin@18: end wobin@18: tooltip:SmartAnchorTo(self) wobin@18: tooltip:SetScript("OnLeave", HideTooltip) wobin@18: tooltip:Show() wobin@18: end wobin@18: wobin@18: function LDBFeed:OnLeave() wobin@18: HideTooltip() wobin@18: end wobin@18: wobin@19: wobin@18: wobin@18: local function GetTipAnchor(frame) wobin@19: local x,y = frame:GetCenter() wobin@18: local hhalf = (x > UIParent:GetWidth()*2/3) and "RIGHT" or (x < UIParent:GetWidth()/3) and "LEFT" or "" wobin@18: local vhalf = (y > UIParent:GetHeight()/2) and "TOP" or "BOTTOM" wobin@18: return vhalf..hhalf, frame, (vhalf == "TOP" and "BOTTOM" or "TOP")..hhalf wobin@18: end wobin@18: wobin@19: function LDBFeed:OnClick(button, reply) wobin@19: editbox:ClearAllPoints() wobin@19: local frame -- begin terrible hack to place the editbox somewhere close to the tooltip/ldb wobin@19: if GetMouseFocus():GetParent().type == "Squawk" then -- if we're a tooltip as designated above wobin@19: frame = GetMouseFocus():GetParent() -- parent to the tooltip wobin@19: else wobin@19: frame = GetMouseFocus() -- else parent to the ldb feeder wobin@19: end wobin@19: editbox:SetPoint(GetTipAnchor(frame)) wobin@19: editbox:Show() wobin@19: editbox:SetText("") wobin@19: if reply then wobin@19: editbox:SetText(reply) wobin@19: end wobin@19: HideTooltip(true) wobin@19: end wobin@19: wobin@19: wobin@18: editbox:Hide() wobin@18: editbox:SetAutoFocus(true) wobin@18: editbox:SetHeight(32) wobin@18: editbox:SetWidth(350) wobin@19: editbox:SetMaxLetters(140) wobin@18: editbox:SetFrameStrata("HIGH") wobin@18: editbox:SetFontObject('GameFontHighlightSmall') wobin@19: LDBFeed.editbox = editbox wobin@18: wobin@19: editbox:SetScript("OnEscapePressed", function() wobin@19: editbox:SetText("") wobin@19: editbox.Timestamp = nil wobin@19: editbox:ClearFocus() wobin@19: end) wobin@19: editbox:SetScript("OnEnterPressed", function() wobin@19: if #editbox:GetText() > 0 then wobin@19: View:Print(editbox.Timestamp) wobin@19: Controller:SendNewSquawk(editbox:GetText(), editbox.Timestamp) wobin@19: end wobin@19: editbox.Timestamp = nil wobin@19: editbox:SetText("") wobin@19: editbox:ClearFocus() wobin@19: end) wobin@18: editbox:SetScript("OnEditFocusLost", editbox.Hide) wobin@18: editbox:SetScript("OnEditFocusGained", editbox.HighlightText) wobin@18: editbox:SetScript("OnTextChanged", function(self) wobin@18: end) wobin@18: wobin@18: local left = editbox:CreateTexture(nil, "BACKGROUND") wobin@18: left:SetWidth(8) left:SetHeight(20) wobin@18: left:SetPoint("LEFT", -5, 0) wobin@18: left:SetTexture("Interface\\Common\\Common-Input-Border") wobin@18: left:SetTexCoord(0, 0.0625, 0, 0.625) wobin@18: wobin@18: local right = editbox:CreateTexture(nil, "BACKGROUND") wobin@18: right:SetWidth(8) right:SetHeight(20) wobin@18: right:SetPoint("RIGHT", 0, 0) wobin@18: right:SetTexture("Interface\\Common\\Common-Input-Border") wobin@18: right:SetTexCoord(0.9375, 1, 0, 0.625) wobin@18: wobin@18: local center = editbox:CreateTexture(nil, "BACKGROUND") wobin@18: center:SetHeight(20) wobin@18: center:SetPoint("RIGHT", right, "LEFT", 0, 0) wobin@18: center:SetPoint("LEFT", left, "RIGHT", 0, 0) wobin@18: center:SetTexture("Interface\\Common\\Common-Input-Border") wobin@18: center:SetTexCoord(0.0625, 0.9375, 0, 0.625) wobin@18: wobin@19: function LDBFeed.OpenEditbox(self) wobin@18: editbox:SetText(self.val) wobin@18: editbox:SetParent(self) wobin@18: editbox:SetPoint("LEFT", self) wobin@18: editbox:SetPoint("RIGHT", self) wobin@18: editbox:Show() wobin@18: end wobin@18: