annotate View.lua @ 21:e066473450c2

qtipclick is a git not a svn
author wobin
date Wed, 22 Jul 2009 22:06:36 +1000
parents 431f2fce08f2
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