-
Notifications
You must be signed in to change notification settings - Fork 0
/
DynamicUI.lua
81 lines (63 loc) · 2.57 KB
/
DynamicUI.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
local ADDON_NAME = "DynamicUI"
local BUILTIN_LAYOUTS = 2
local DEBUG = false
local DynamicUI = {};
-- Value can be either "true" to always trigger or a function
-- accepting the arguments of the event which returns true when it should trigger.
local events = {
["DISPLAY_SIZE_CHANGED"] = true,
["PLAYER_ENTERING_WORLD"] = true,
}
function DynamicUI:WriteLog(message)
if DEBUG == true then
print("[" .. ADDON_NAME .. "] " .. message)
end
end
function DynamicUI:SwitchUI()
local layouts = C_EditMode.GetLayouts()
local width, height = GetPhysicalScreenSize()
local strict = width .. "x" .. height
local loose = height .. "p"
local looseMatch = nil
DynamicUI:WriteLog("Looking for matching profiles: " .. strict .. " or " .. loose .. "...")
for l, layout in pairs(layouts.layouts) do
DynamicUI:WriteLog("> Comparing: " .. strict .. " to: " .. layout.layoutName .. "...")
local index = l + BUILTIN_LAYOUTS
if layout.layoutName == strict then
DynamicUI:WriteLog("Using strict profile match " .. strict .. "...")
DynamicUI:WriteLog("> Comparing to: " .. layout.layoutName)
DynamicUI:WriteLog("> Comparing: " .. layouts.activeLayout .. " to: " .. index .. "...")
if (layouts.activeLayout ~= index) then
DynamicUI:WriteLog("Switching profile...")
C_EditMode.SetActiveLayout(index)
end
return
end
DynamicUI:WriteLog("> Comparing: " .. loose .. " to: " .. layout.layoutName .. "...")
if layout.layoutName == loose then
DynamicUI:WriteLog("Found potential loose match with index " .. index .. "...")
looseMatch = index
end
end
if looseMatch ~= nil then
DynamicUI:WriteLog("Using loose profile match " .. loose .. "...")
DynamicUI:WriteLog("> Comparing: " .. layouts.activeLayout .. " to: " .. looseMatch .. "...")
if (layouts.activeLayout ~= looseMatch) then
DynamicUI:WriteLog("Switching profile...")
C_EditMode.SetActiveLayout(looseMatch)
end
return
end
DynamicUI:WriteLog("Couldn't find a matching profile...")
end
local Frame = CreateFrame("EventFrame", "EventFrame")
Frame:SetScript("OnEvent", function(self, event, ...)
if events[event] ~= nil and (events[event] == true or events[event](...)) then
DynamicUI:WriteLog("Triggered on " .. event .. ".")
DynamicUI:SwitchUI()
end
end)
for event, _ in pairs(events) do
Frame:RegisterEvent(event)
end
_G[ADDON_NAME] = DynamicUI