comparison HotCorners.lua @ 1:018fc9f0c471

continuing the development.
author tercio
date Sat, 09 Aug 2014 17:28:04 -0300
parents fc346da3afd9
children a6fb0ff113b1
comparison
equal deleted inserted replaced
0:fc346da3afd9 1:018fc9f0c471
1 1
2 LibHotCorners = LibStub ("AceAddon-3.0"):NewAddon ("HotCorners", "AceConsole-3.0", "AceEvent-3.0", "AceTimer-3.0") 2 LibHotCorners = LibStub ("AceAddon-3.0"):NewAddon ("HotCorners", "AceConsole-3.0", "AceEvent-3.0", "AceTimer-3.0")
3 _G.HotCorners = LibHotCorners
3 local LibHotCorners = LibHotCorners 4 local LibHotCorners = LibHotCorners
4 5
5 local LBD = LibStub ("LibDataBroker-1.1") 6 local LBD = LibStub ("LibDataBroker-1.1")
6 7
7 local debug = false 8 local debug = false
9 10
10 local default_db = { 11 local default_db = {
11 profile = { 12 profile = {
12 is_enabled = true, 13 is_enabled = true,
13 topleft_enabled = true, 14 topleft_enabled = true,
14 quickfunc = false, 15 topleft_quickfunc = false,
15 clicks = {}, 16 clicks = {},
16 disabled = {} 17 disabled = {}
17 }, 18 },
18 } 19 }
20
21 LibHotCorners.RegistredQuickFunctions = {}
22 LibHotCorners.QuickFunctions = {topleft = false}
19 23
20 function LibHotCorners:OnEnable() 24 function LibHotCorners:OnEnable()
21 25
22 end 26 end
23 27
47 desc = "Enable or Disable the Top Left bar.", 51 desc = "Enable or Disable the Top Left bar.",
48 order = 2, 52 order = 2,
49 get = function() return LibHotCorners.db.profile.topleft_enabled end, 53 get = function() return LibHotCorners.db.profile.topleft_enabled end,
50 set = function (self, val) LibHotCorners.db.profile.topleft_enabled = not LibHotCorners.db.profile.topleft_enabled; refresh_topleft() end, 54 set = function (self, val) LibHotCorners.db.profile.topleft_enabled = not LibHotCorners.db.profile.topleft_enabled; refresh_topleft() end,
51 }, 55 },
56 QuickClickFunc = {
57 type = "select",
58 name = "Quick Click",
59 desc = "Select the behavior when clicking over the absolute topleft corner.",
60 values = function()
61 local options = {}
62 for index, quickfunc in ipairs (LibHotCorners.RegistredQuickFunctions) do
63 options [quickfunc.name] = quickfunc.name
64 end
65 return options
66 end,
67 get = function() return LibHotCorners.db.profile.topleft_quickfunc or "" end,
68 set = function (self, funcname)
69 LibHotCorners.db.profile.topleft_quickfunc = funcname;
70 for index, quickfunc in ipairs (LibHotCorners.RegistredQuickFunctions) do
71 if (quickfunc.name == funcname) then
72 LibHotCorners.QuickFunctions.topleft = quickfunc.func
73 break
74 end
75 end
76 end,
77 order = 4,
78 }
52 } 79 }
53 } 80 }
54 81
55 function LibHotCorners:OnInitialize() 82 function LibHotCorners:OnInitialize()
56 83
90 117
91 LibHotCorners.embeds = LibHotCorners.embeds or {} 118 LibHotCorners.embeds = LibHotCorners.embeds or {}
92 local embed_functions = { 119 local embed_functions = {
93 "RegisterHotCornerButton", 120 "RegisterHotCornerButton",
94 "HideHotCornerButton", 121 "HideHotCornerButton",
95 "QuickHotCornerEnable"
96 } 122 }
97 123
98 function LibHotCorners:Embed (target) 124 function LibHotCorners:Embed (target)
99 for k, v in pairs (embed_functions) do 125 for k, v in pairs (embed_functions) do
100 target[v] = self[v] 126 target[v] = self[v]
113 139
114 local function test (corner) 140 local function test (corner)
115 assert (corner == "topleft" or corner == "bottomleft" or corner == "topright" or corner == "bottomright", "LibHotCorners:RegisterAddon expects a corner on #1 argument.") 141 assert (corner == "topleft" or corner == "bottomleft" or corner == "topright" or corner == "bottomright", "LibHotCorners:RegisterAddon expects a corner on #1 argument.")
116 end 142 end
117 143
118 function LibHotCorners:RegisterHotCornerButton (name, corner, savedtable, fname, icon, tooltip, clickfunc, menus, quickfunc, onenter, onleave, is_install) 144 function LibHotCorners:AddQuickFunction (quickfunc, corner)
145
146 local current_quickfunc = LibHotCorners.db.profile [corner .. "_quickfunc"] or ""
147
148 --> passed only one table
149 if (quickfunc.name) then
150 --> check if already exists
151 local already_exists = false
152 for _, registred in ipairs (LibHotCorners.RegistredQuickFunctions) do
153 if (registred.name == quickfunc.name) then
154 registred.func = quickfunc.func
155 if (current_quickfunc == quickfunc.name) then
156 LibHotCorners.QuickFunctions [corner] = quickfunc.func
157 end
158 already_exists = true
159 break
160 end
161 end
162 --> add table
163 if (not already_exists) then
164 table.insert (LibHotCorners.RegistredQuickFunctions, quickfunc)
165 if (current_quickfunc == quickfunc.name) then
166 LibHotCorners.QuickFunctions [corner] = quickfunc.func
167 end
168 end
169 --> check if there is a quickfunc to be use
170 if (current_quickfunc == "") then
171 LibHotCorners.db.profile [corner .. "_quickfunc"] = quickfunc.name
172 LibHotCorners.QuickFunctions [corner] = quickfunc.func
173 end
174 else
175 --> passed a table of tables
176 for _, this_quickfunc in ipairs (quickfunc) do
177 --> check if already exists
178 local already_exists = false
179 for _, registred in ipairs (LibHotCorners.RegistredQuickFunctions) do
180 if (registred.name == this_quickfunc.name) then
181 registred.func = this_quickfunc.func
182 if (current_quickfunc == this_quickfunc.name) then
183 LibHotCorners.QuickFunctions [corner] = this_quickfunc.func
184 end
185 already_exists = true
186 break
187 end
188 end
189 --> add table
190 if (not already_exists) then
191 table.insert (LibHotCorners.RegistredQuickFunctions, this_quickfunc)
192 if (current_quickfunc == this_quickfunc.name) then
193 LibHotCorners.QuickFunctions [corner] = this_quickfunc.func
194 end
195 end
196 --> check if there is a quickfunc to be use
197 if (current_quickfunc == "") then
198 LibHotCorners.db.profile [corner .. "_quickfunc"] = this_quickfunc.name
199 LibHotCorners.QuickFunctions [corner] = this_quickfunc.func
200 current_quickfunc = this_quickfunc.name
201 end
202 end
203 end
204
205 end
206
207 function LibHotCorners:RegisterHotCornerButton (name, corner, optionstable, fname, icon, tooltip, clickfunc, menus, quickfunc, onenter, onleave, is_install)
119 corner = string.lower (corner) 208 corner = string.lower (corner)
120 test (corner) 209 test (corner)
121 210
211 optionstable = optionstable or {hide = false}
212
122 if (is_install) then 213 if (is_install) then
123 --> overwrite if already exists a widget 214 --> overwrite if already exists a widget
124 for i, widget in ipairs (LibHotCorners [corner]) do 215 for i, widget in ipairs (LibHotCorners [corner]) do
125 if (widget.name == name) then 216 if (widget.name == name) then
126 table.remove (LibHotCorners [corner], i) 217 table.remove (LibHotCorners [corner], i)
127 table.insert (LibHotCorners [corner], i, {name = name, fname = fname, savedtable = savedtable, icon = icon, tooltip = tooltip, click = clickfunc, menus = menus, quickfunc = quickfunc, onenter = onenter, onleave = onleave, is_install = true}) 218 table.insert (LibHotCorners [corner], i, {name = name, fname = fname, optionstable = optionstable, icon = icon, tooltip = tooltip, click = clickfunc, menus = menus, quickfunc = quickfunc, onenter = onenter, onleave = onleave, is_install = true})
219 if (quickfunc) then
220 LibHotCorners:AddQuickFunction (quickfunc, corner)
221 end
128 return LibHotCorners [corner].map [name] 222 return LibHotCorners [corner].map [name]
129 end 223 end
130 end 224 end
131 225 --> add
132 table.insert (LibHotCorners [corner], {name = name, fname = fname, savedtable = savedtable, icon = icon, tooltip = tooltip, click = clickfunc, menus = menus, quickfunc = quickfunc, onenter = onenter, onleave = onleave, is_install = true}) 226 table.insert (LibHotCorners [corner], {name = name, fname = fname, optionstable = optionstable, icon = icon, tooltip = tooltip, click = clickfunc, menus = menus, quickfunc = quickfunc, onenter = onenter, onleave = onleave, is_install = true})
133 LibHotCorners [corner].map [name] = #LibHotCorners [corner] 227 LibHotCorners [corner].map [name] = #LibHotCorners [corner]
228 if (quickfunc) then
229 LibHotCorners:AddQuickFunction (quickfunc, corner)
230 end
134 return LibHotCorners [corner].map [name] 231 return LibHotCorners [corner].map [name]
135 else 232 else
136 tinsert (LibHotCorners [corner], {name = name, fname = fname, savedtable = savedtable, icon = icon, tooltip = tooltip, click = clickfunc, menus = menus, quickfunc = quickfunc, onenter = onenter, onleave = onleave}) 233 --> check if already exists
234 for i, widget in ipairs (LibHotCorners [corner]) do
235 if (widget.name == name) then
236 return
237 end
238 end
239 --> add
240 table.insert (LibHotCorners [corner], {name = name, fname = fname, optionstable = optionstable, icon = icon, tooltip = tooltip, click = clickfunc, menus = menus, quickfunc = quickfunc, onenter = onenter, onleave = onleave})
137 LibHotCorners [corner].map [name] = #LibHotCorners [corner] 241 LibHotCorners [corner].map [name] = #LibHotCorners [corner]
242 if (quickfunc) then
243 LibHotCorners:AddQuickFunction (quickfunc, corner)
244 end
138 return LibHotCorners [corner].map [name] 245 return LibHotCorners [corner].map [name]
139 end 246 end
140 end 247 end
141 248
142 function LibHotCorners:QuickHotCornerEnable (name, corner, value) 249 function LibHotCorners:HideHotCornerButton (name, corner, value)
143 250
144 corner = string.lower (corner) 251 corner = string.lower (corner)
145 test (corner) 252 test (corner)
146 253
147 local corner_table = LibHotCorners [corner] 254 local corner_table = LibHotCorners [corner]
148 local addon_table = corner_table [corner_table.map [name]] 255 local addon_table = corner_table [corner_table.map [name]]
149 256
150 addon_table.savedtable [corner .. "_quickclick"] = value 257 if (addon_table) then
151 258 addon_table.optionstable.hide = value
152 if (value and addon_table.quickfunc) then 259 end
153 corner_table.quickfunc = addon_table.quickfunc 260
154 else
155 local got = false
156 for index, button_table in ipairs (corner_table) do
157 if (button_table.savedtable.quickclick) then
158 corner_table.quickfunc = button_table.quickfunc
159 got = true
160 break
161 end
162 end
163
164 if (not got) then
165 corner_table.quickfunc = nil
166 end
167 end
168 end
169
170 function LibHotCorners:HideHotCornerButton (name, corner, value)
171
172 corner = string.lower (corner)
173 test (corner)
174
175 local corner_table = LibHotCorners [corner]
176 local addon_table = corner_table [corner_table.map [name]]
177
178 addon_table.savedtable.hide = value
179
180 --print (LibHotCorners, corner)
181 LibHotCorners [corner].is_enabled = false 261 LibHotCorners [corner].is_enabled = false
182 262
183 for index, button_table in ipairs (corner_table) do 263 for index, button_table in ipairs (corner_table) do
184 if (not button_table.savedtable.hide) then 264 if (not button_table.optionstable.hide) then
185 LibHotCorners [corner].is_enabled = true 265 LibHotCorners [corner].is_enabled = true
186 break 266 break
187 end 267 end
188 end 268 end
189 269
279 LibHotCorners:CreateAddonWidget (self, button_table, index, self.position) 359 LibHotCorners:CreateAddonWidget (self, button_table, index, self.position)
280 end 360 end
281 361
282 button_table.widget:ClearAllPoints() 362 button_table.widget:ClearAllPoints()
283 363
284 if (not disabled [button_table.name]) then 364 if (not disabled [button_table.name] and not button_table.optionstable.hide) then
285 if (self.position == "topleft" or self.position == "topright") then 365 if (self.position == "topleft" or self.position == "topright") then
286 local y = i * 35 * -1 366 local y = i * 35 * -1
287 button_table.widget:SetPoint ("topleft", self, "topleft", 4, y) 367 button_table.widget:SetPoint ("topleft", self, "topleft", 4, y)
288 button_table.widget.y = y 368 button_table.widget.y = y
289 else 369 else
310 390
311 --> corner frame on leave 391 --> corner frame on leave
312 function HotCornersOnLeave (self) 392 function HotCornersOnLeave (self)
313 self:SetSize (1, 1) 393 self:SetSize (1, 1)
314 for index, button_table in ipairs (LibHotCorners [self.position]) do 394 for index, button_table in ipairs (LibHotCorners [self.position]) do
315 button_table.widget:Hide() 395 if (button_table.widget) then
396 button_table.widget:Hide()
397 end
316 end 398 end
317 local OptionsButton = LibHotCorners [self.position].optionsbutton 399 local OptionsButton = LibHotCorners [self.position].optionsbutton
318 OptionsButton:Hide() 400 OptionsButton:Hide()
319 end 401 end
320 402
321 --> quick corner on click 403 --> quick corner on click
322 function HotCornersOnQuickClick (self, button) 404 function HotCornersOnQuickClick (self, button)
323 local parent_position = self:GetParent().position 405 local parent_position = self:GetParent().position
324 if (LibHotCorners [parent_position].quickfunc) then 406 local func = LibHotCorners.QuickFunctions [parent_position]
325 LibHotCorners [parent_position].quickfunc (self, button) 407 if (func) then
408 func (self, button)
326 end 409 end
327 end 410 end
328 411
329 --> options button onenter 412 --> options button onenter
330 function HotCornersOptionsButtonOnEnter (self) 413 function HotCornersOptionsButtonOnEnter (self)