annotate 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
rev   line source
wobin@18 1 local View = Squawk.View
wobin@18 2 local Model = Squawk.Model
wobin@18 3 local Settings = Model.UserSettings
wobin@18 4 local Controller = Squawk.Controller
wobin@18 5 local Squawks = Model.Squawks
wobin@18 6
wobin@18 7 -- View --
wobin@18 8
wobin@18 9 function View:UpdateSquawkList()
wobin@18 10 self:Print("Updated Squawk List")
wobin@18 11 self:ShowMeMySquawks()
wobin@18 12 end
wobin@18 13
wobin@18 14 function View:NotifyOfPending(Name)
wobin@18 15 self:Print(Name.." will have to approve your request")
wobin@18 16 end
wobin@18 17
wobin@18 18 function View:NotifyOfPendingRequest(Name)
wobin@18 19 self:Print(Name.." wants to follow you.")
wobin@18 20 end
wobin@18 21
wobin@18 22 function View:NotifyOfNewFollowing(Name)
wobin@18 23 self:Print("You are now following "..Name)
wobin@18 24 end
wobin@18 25
wobin@18 26 function View:NotifyOfUnfollowing(Name)
wobin@18 27 self:Print("You are no longer following "..Name)
wobin@18 28 end
wobin@18 29
wobin@18 30 function View:NotifyOfNewFollower(Name)
wobin@18 31 self:Print(Name.." is now following you")
wobin@18 32 end
wobin@18 33
wobin@18 34 function View:ShowMeMySquawks()
wobin@18 35 for _,squawk in ipairs(Model.Squawks.Main) do
wobin@18 36 self:Print(squawk.Message)
wobin@18 37 end
wobin@18 38 end
wobin@18 39
wobin@18 40 function View:ShowMeMyFollowers()
wobin@18 41 self:Print("My followers are:")
wobin@18 42 for name,_ in pairs(Settings.Follower) do
wobin@18 43 self:Print(name)
wobin@18 44 end
wobin@18 45 end
wobin@18 46
wobin@18 47 function View:ShowMeWhoImFollowing()
wobin@18 48 self:Print("I am following:")
wobin@18 49 for name,_ in pairs(Settings.Following) do
wobin@18 50 self:Print(name)
wobin@18 51 end
wobin@18 52 end
wobin@18 53
wobin@18 54 function View:ShowMeWhoIveBlocked()
wobin@18 55 self:Print("I've blocked:")
wobin@18 56 for name,_ in pairs(Settings.Blocked) do
wobin@18 57 self:Print(name)
wobin@18 58 end
wobin@18 59 end
wobin@18 60
wobin@18 61 local TimeSpan = { [1] = {"second", 60, 1},
wobin@18 62 [2] = {"minute", 3600, 60},
wobin@18 63 [3] = {"hour", 86400, 3600} }
wobin@18 64
wobin@18 65 function View:GetTime(stime)
wobin@18 66 local lapsed = difftime(time(), stime)
wobin@18 67 if lapsed < 86400 then -- if we're still in the same day...
wobin@19 68 for inc,span in ipairs(TimeSpan) do
wobin@18 69 if lapsed < span[2] then
wobin@18 70 local timespan = math.floor(lapsed/span[3])
wobin@19 71 if inc == 3 then
wobin@19 72 timespan = tonumber(string.format("%.1f", lapsed/span[3]))
wobin@19 73 end
wobin@18 74 if timespan == 1 then
wobin@18 75 timespan = timespan .." ".. span[1]
wobin@18 76 else
wobin@18 77 timespan = timespan .. " ".. span[1].."s"
wobin@18 78 end
wobin@18 79 return timespan.. " ago"
wobin@18 80 end
wobin@18 81 end
wobin@18 82 end
wobin@18 83 return date("%I:%M %p %b %d", stime)
wobin@18 84 end
wobin@18 85
wobin@18 86 local LDBFeed = LibStub("LibDataBroker-1.1"):NewDataObject("Squawk", {type = "data source", text = "Awk!"})
wobin@18 87 local QTip = LibStub("LibQTip-1.0")
wobin@18 88 local QTipClick = LibStub("LibQTipClick-1.0")
wobin@18 89 local tooltip = {}
wobin@19 90 local editbox = CreateFrame('EditBox', nil, UIParent)
wobin@18 91
wobin@18 92 local function HideTooltip()
wobin@19 93 if not tooltip then return end
wobin@19 94 if MouseIsOver(tooltip) or MouseIsOver(editbox) then return end
wobin@18 95 tooltip:SetScript("OnLeave", nil)
wobin@18 96 tooltip:Hide()
wobin@18 97 QTip:Release(tooltip)
wobin@18 98 tooltip = nil
wobin@18 99 end
wobin@18 100
wobin@18 101 local function ReplyToMe(cell, Owner, event)
wobin@19 102 editbox.Timestamp = Owner[2]
wobin@19 103 LDBFeed.OnClick(LDBFeed, "LeftButton", "@"..Owner[1]:gsub("|c%x%x%x%x%x%x%x%x(.-)|r", "%1"))
wobin@18 104 end
wobin@18 105
wobin@18 106 local function AddLine(tooltip, Line, Number, Owner, TimeStamp)
wobin@18 107 local x,y
wobin@18 108 if #Line < 79 then
wobin@19 109 y,x = tooltip:AddNormalLine(Number, Owner, Line, View:GetTime(TimeStamp))
wobin@18 110 else
wobin@19 111 y,x = tooltip:AddNormalLine(Number, Owner, Line:sub(1, 80).."-", View:GetTime(TimeStamp))
wobin@18 112 AddLine(tooltip, Line:sub(81))
wobin@18 113 end
wobin@18 114 if not TimeStamp then return end
wobin@18 115
wobin@18 116 -- Now add the reply clickback
wobin@19 117 tooltip:SetCell(y, 5, "|TInterface\\Addons\\Squawk\\reply:0|t", {Owner, TimeStamp})
wobin@18 118 -- Reply clickback finished
wobin@18 119 end
wobin@18 120
wobin@18 121 function LDBFeed:OnEnter()
wobin@18 122 tooltip = QTipClick:Acquire("Squawk",5, "LEFT", "CENTER", "LEFT", "RIGHT", "RIGHT")
wobin@19 123 tooltip.type = "Squawk"
wobin@18 124 tooltip:Clear()
wobin@18 125 tooltip:SetCallback("OnMouseDown", ReplyToMe)
wobin@18 126 self.tooltip = tooltip
wobin@18 127 for i,squawk in ipairs(Squawks:GetLast10()) do
wobin@18 128 local head = true
wobin@18 129 local message = {strsplit("\n",squawk.Message)}
wobin@18 130 for _,line in ipairs(message) do
wobin@18 131 if head then
wobin@19 132 AddLine(tooltip, line, i..".", Squawks:OwnerString(squawk), squawk.Time)
wobin@18 133 head = false
wobin@18 134 else
wobin@18 135 AddLine(tooltip, line)
wobin@18 136 end
wobin@18 137 end
wobin@18 138 end
wobin@18 139 tooltip:SmartAnchorTo(self)
wobin@18 140 tooltip:SetScript("OnLeave", HideTooltip)
wobin@18 141 tooltip:Show()
wobin@18 142 end
wobin@18 143
wobin@18 144 function LDBFeed:OnLeave()
wobin@18 145 HideTooltip()
wobin@18 146 end
wobin@18 147
wobin@19 148
wobin@18 149
wobin@18 150 local function GetTipAnchor(frame)
wobin@19 151 local x,y = frame:GetCenter()
wobin@18 152 local hhalf = (x > UIParent:GetWidth()*2/3) and "RIGHT" or (x < UIParent:GetWidth()/3) and "LEFT" or ""
wobin@18 153 local vhalf = (y > UIParent:GetHeight()/2) and "TOP" or "BOTTOM"
wobin@18 154 return vhalf..hhalf, frame, (vhalf == "TOP" and "BOTTOM" or "TOP")..hhalf
wobin@18 155 end
wobin@18 156
wobin@19 157 function LDBFeed:OnClick(button, reply)
wobin@19 158 editbox:ClearAllPoints()
wobin@19 159 local frame -- begin terrible hack to place the editbox somewhere close to the tooltip/ldb
wobin@19 160 if GetMouseFocus():GetParent().type == "Squawk" then -- if we're a tooltip as designated above
wobin@19 161 frame = GetMouseFocus():GetParent() -- parent to the tooltip
wobin@19 162 else
wobin@19 163 frame = GetMouseFocus() -- else parent to the ldb feeder
wobin@19 164 end
wobin@19 165 editbox:SetPoint(GetTipAnchor(frame))
wobin@19 166 editbox:Show()
wobin@19 167 editbox:SetText("")
wobin@19 168 if reply then
wobin@19 169 editbox:SetText(reply)
wobin@19 170 end
wobin@19 171 HideTooltip(true)
wobin@19 172 end
wobin@19 173
wobin@19 174
wobin@18 175 editbox:Hide()
wobin@18 176 editbox:SetAutoFocus(true)
wobin@18 177 editbox:SetHeight(32)
wobin@18 178 editbox:SetWidth(350)
wobin@19 179 editbox:SetMaxLetters(140)
wobin@18 180 editbox:SetFrameStrata("HIGH")
wobin@18 181 editbox:SetFontObject('GameFontHighlightSmall')
wobin@19 182 LDBFeed.editbox = editbox
wobin@18 183
wobin@19 184 editbox:SetScript("OnEscapePressed", function()
wobin@19 185 editbox:SetText("")
wobin@19 186 editbox.Timestamp = nil
wobin@19 187 editbox:ClearFocus()
wobin@19 188 end)
wobin@19 189 editbox:SetScript("OnEnterPressed", function()
wobin@19 190 if #editbox:GetText() > 0 then
wobin@19 191 View:Print(editbox.Timestamp)
wobin@19 192 Controller:SendNewSquawk(editbox:GetText(), editbox.Timestamp)
wobin@19 193 end
wobin@19 194 editbox.Timestamp = nil
wobin@19 195 editbox:SetText("")
wobin@19 196 editbox:ClearFocus()
wobin@19 197 end)
wobin@18 198 editbox:SetScript("OnEditFocusLost", editbox.Hide)
wobin@18 199 editbox:SetScript("OnEditFocusGained", editbox.HighlightText)
wobin@18 200 editbox:SetScript("OnTextChanged", function(self)
wobin@18 201 end)
wobin@18 202
wobin@18 203 local left = editbox:CreateTexture(nil, "BACKGROUND")
wobin@18 204 left:SetWidth(8) left:SetHeight(20)
wobin@18 205 left:SetPoint("LEFT", -5, 0)
wobin@18 206 left:SetTexture("Interface\\Common\\Common-Input-Border")
wobin@18 207 left:SetTexCoord(0, 0.0625, 0, 0.625)
wobin@18 208
wobin@18 209 local right = editbox:CreateTexture(nil, "BACKGROUND")
wobin@18 210 right:SetWidth(8) right:SetHeight(20)
wobin@18 211 right:SetPoint("RIGHT", 0, 0)
wobin@18 212 right:SetTexture("Interface\\Common\\Common-Input-Border")
wobin@18 213 right:SetTexCoord(0.9375, 1, 0, 0.625)
wobin@18 214
wobin@18 215 local center = editbox:CreateTexture(nil, "BACKGROUND")
wobin@18 216 center:SetHeight(20)
wobin@18 217 center:SetPoint("RIGHT", right, "LEFT", 0, 0)
wobin@18 218 center:SetPoint("LEFT", left, "RIGHT", 0, 0)
wobin@18 219 center:SetTexture("Interface\\Common\\Common-Input-Border")
wobin@18 220 center:SetTexCoord(0.0625, 0.9375, 0, 0.625)
wobin@18 221
wobin@19 222 function LDBFeed.OpenEditbox(self)
wobin@18 223 editbox:SetText(self.val)
wobin@18 224 editbox:SetParent(self)
wobin@18 225 editbox:SetPoint("LEFT", self)
wobin@18 226 editbox:SetPoint("RIGHT", self)
wobin@18 227 editbox:Show()
wobin@18 228 end
wobin@18 229