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
|