tercio@0
|
1 --[[
|
tercio@0
|
2 Name: LibSharedMedia-3.0
|
tercio@0
|
3 Revision: $Revision: 69 $
|
tercio@0
|
4 Author: Elkano (elkano@gmx.de)
|
tercio@0
|
5 Inspired By: SurfaceLib by Haste/Otravi (troeks@gmail.com)
|
tercio@0
|
6 Website: http://www.wowace.com/projects/libsharedmedia-3-0/
|
tercio@0
|
7 Description: Shared handling of media data (fonts, sounds, textures, ...) between addons.
|
tercio@0
|
8 Dependencies: LibStub, CallbackHandler-1.0
|
tercio@0
|
9 License: LGPL v2.1
|
tercio@0
|
10 ]]
|
tercio@0
|
11
|
tercio@0
|
12 local MAJOR, MINOR = "LibSharedMedia-3.0", 4030402 -- increase manualy on changes
|
tercio@0
|
13 local lib = LibStub:NewLibrary(MAJOR, MINOR)
|
tercio@0
|
14
|
tercio@0
|
15 if not lib then return end
|
tercio@0
|
16
|
tercio@0
|
17 local _G = getfenv(0)
|
tercio@0
|
18
|
tercio@0
|
19 local pairs = _G.pairs
|
tercio@0
|
20 local type = _G.type
|
tercio@0
|
21
|
tercio@0
|
22 local band = _G.bit.band
|
tercio@0
|
23
|
tercio@0
|
24 local table_insert = _G.table.insert
|
tercio@0
|
25 local table_sort = _G.table.sort
|
tercio@0
|
26
|
tercio@0
|
27 local locale = GetLocale()
|
tercio@0
|
28 local locale_is_western
|
tercio@0
|
29 local LOCALE_MASK = 0
|
tercio@0
|
30 lib.LOCALE_BIT_koKR = 1
|
tercio@0
|
31 lib.LOCALE_BIT_ruRU = 2
|
tercio@0
|
32 lib.LOCALE_BIT_zhCN = 4
|
tercio@0
|
33 lib.LOCALE_BIT_zhTW = 8
|
tercio@0
|
34 lib.LOCALE_BIT_western = 128
|
tercio@0
|
35
|
tercio@0
|
36 local CallbackHandler = LibStub:GetLibrary("CallbackHandler-1.0")
|
tercio@0
|
37
|
tercio@0
|
38 lib.callbacks = lib.callbacks or CallbackHandler:New(lib)
|
tercio@0
|
39
|
tercio@0
|
40 lib.DefaultMedia = lib.DefaultMedia or {}
|
tercio@0
|
41 lib.MediaList = lib.MediaList or {}
|
tercio@0
|
42 lib.MediaTable = lib.MediaTable or {}
|
tercio@0
|
43 lib.MediaType = lib.MediaType or {}
|
tercio@0
|
44 lib.OverrideMedia = lib.OverrideMedia or {}
|
tercio@0
|
45
|
tercio@0
|
46 local defaultMedia = lib.DefaultMedia
|
tercio@0
|
47 local mediaList = lib.MediaList
|
tercio@0
|
48 local mediaTable = lib.MediaTable
|
tercio@0
|
49 local overrideMedia = lib.OverrideMedia
|
tercio@0
|
50
|
tercio@0
|
51
|
tercio@0
|
52 -- create mediatype constants
|
tercio@0
|
53 lib.MediaType.BACKGROUND = "background" -- background textures
|
tercio@0
|
54 lib.MediaType.BORDER = "border" -- border textures
|
tercio@0
|
55 lib.MediaType.FONT = "font" -- fonts
|
tercio@0
|
56 lib.MediaType.STATUSBAR = "statusbar" -- statusbar textures
|
tercio@0
|
57 lib.MediaType.SOUND = "sound" -- sound files
|
tercio@0
|
58
|
tercio@0
|
59 -- populate lib with default Blizzard data
|
tercio@0
|
60 -- BACKGROUND
|
tercio@0
|
61 if not lib.MediaTable.background then lib.MediaTable.background = {} end
|
tercio@0
|
62 lib.MediaTable.background["None"] = [[]]
|
tercio@0
|
63 lib.MediaTable.background["Blizzard Dialog Background"] = [[Interface\DialogFrame\UI-DialogBox-Background]]
|
tercio@0
|
64 lib.MediaTable.background["Blizzard Dialog Background Dark"] = [[Interface\DialogFrame\UI-DialogBox-Background-Dark]]
|
tercio@0
|
65 lib.MediaTable.background["Blizzard Dialog Background Gold"] = [[Interface\DialogFrame\UI-DialogBox-Gold-Background]]
|
tercio@0
|
66 lib.MediaTable.background["Blizzard Low Health"] = [[Interface\FullScreenTextures\LowHealth]]
|
tercio@0
|
67 lib.MediaTable.background["Blizzard Marble"] = [[Interface\FrameGeneral\UI-Background-Marble]]
|
tercio@0
|
68 lib.MediaTable.background["Blizzard Out of Control"] = [[Interface\FullScreenTextures\OutOfControl]]
|
tercio@0
|
69 lib.MediaTable.background["Blizzard Parchment"] = [[Interface\AchievementFrame\UI-Achievement-Parchment-Horizontal]]
|
tercio@0
|
70 lib.MediaTable.background["Blizzard Parchment 2"] = [[Interface\AchievementFrame\UI-GuildAchievement-Parchment-Horizontal]]
|
tercio@0
|
71 lib.MediaTable.background["Blizzard Rock"] = [[Interface\FrameGeneral\UI-Background-Rock]]
|
tercio@0
|
72 lib.MediaTable.background["Blizzard Tabard Background"] = [[Interface\TabardFrame\TabardFrameBackground]]
|
tercio@0
|
73 lib.MediaTable.background["Blizzard Tooltip"] = [[Interface\Tooltips\UI-Tooltip-Background]]
|
tercio@0
|
74 lib.MediaTable.background["Solid"] = [[Interface\Buttons\WHITE8X8]]
|
tercio@0
|
75 lib.DefaultMedia.background = "None"
|
tercio@0
|
76
|
tercio@0
|
77 -- BORDER
|
tercio@0
|
78 if not lib.MediaTable.border then lib.MediaTable.border = {} end
|
tercio@0
|
79 lib.MediaTable.border["None"] = [[]]
|
tercio@0
|
80 lib.MediaTable.border["Blizzard Achievement Wood"] = [[Interface\AchievementFrame\UI-Achievement-WoodBorder]]
|
tercio@0
|
81 lib.MediaTable.border["Blizzard Chat Bubble"] = [[Interface\Tooltips\ChatBubble-Backdrop]]
|
tercio@0
|
82 lib.MediaTable.border["Blizzard Dialog"] = [[Interface\DialogFrame\UI-DialogBox-Border]]
|
tercio@0
|
83 lib.MediaTable.border["Blizzard Dialog Gold"] = [[Interface\DialogFrame\UI-DialogBox-Gold-Border]]
|
tercio@0
|
84 lib.MediaTable.border["Blizzard Party"] = [[Interface\CHARACTERFRAME\UI-Party-Border]]
|
tercio@0
|
85 lib.MediaTable.border["Blizzard Tooltip"] = [[Interface\Tooltips\UI-Tooltip-Border]]
|
tercio@0
|
86 lib.DefaultMedia.border = "None"
|
tercio@0
|
87
|
tercio@0
|
88 -- FONT
|
tercio@0
|
89 if not lib.MediaTable.font then lib.MediaTable.font = {} end
|
tercio@0
|
90 local SML_MT_font = lib.MediaTable.font
|
tercio@0
|
91 if locale == "koKR" then
|
tercio@0
|
92 LOCALE_MASK = lib.LOCALE_BIT_koKR
|
tercio@0
|
93 --
|
tercio@0
|
94 SML_MT_font["굵은 글꼴"] = [[Fonts\2002B.TTF]]
|
tercio@0
|
95 SML_MT_font["기본 글꼴"] = [[Fonts\2002.TTF]]
|
tercio@0
|
96 SML_MT_font["데미지 글꼴"] = [[Fonts\K_Damage.TTF]]
|
tercio@0
|
97 SML_MT_font["퀘스트 글꼴"] = [[Fonts\K_Pagetext.TTF]]
|
tercio@0
|
98 --
|
tercio@0
|
99 lib.DefaultMedia["font"] = "기본 글꼴" -- someone from koKR please adjust if needed
|
tercio@0
|
100 --
|
tercio@0
|
101 elseif locale == "zhCN" then
|
tercio@0
|
102 LOCALE_MASK = lib.LOCALE_BIT_zhCN
|
tercio@0
|
103 --
|
tercio@0
|
104 SML_MT_font["伤害数字"] = [[Fonts\ARKai_C.ttf]]
|
tercio@0
|
105 SML_MT_font["默认"] = [[Fonts\ARKai_T.ttf]]
|
tercio@0
|
106 SML_MT_font["聊天"] = [[Fonts\ARHei.ttf]]
|
tercio@0
|
107 --
|
tercio@0
|
108 lib.DefaultMedia["font"] = "默认" -- someone from zhCN please adjust if needed
|
tercio@0
|
109 --
|
tercio@0
|
110 elseif locale == "zhTW" then
|
tercio@0
|
111 LOCALE_MASK = lib.LOCALE_BIT_zhTW
|
tercio@0
|
112 --
|
tercio@0
|
113 SML_MT_font["提示訊息"] = [[Fonts\bHEI00M.ttf]]
|
tercio@0
|
114 SML_MT_font["聊天"] = [[Fonts\bHEI01B.ttf]]
|
tercio@0
|
115 SML_MT_font["傷害數字"] = [[Fonts\bKAI00M.ttf]]
|
tercio@0
|
116 SML_MT_font["預設"] = [[Fonts\bLEI00D.ttf]]
|
tercio@0
|
117 --
|
tercio@0
|
118 lib.DefaultMedia["font"] = "預設" -- someone from zhTW please adjust if needed
|
tercio@0
|
119
|
tercio@0
|
120 elseif locale == "ruRU" then
|
tercio@0
|
121 LOCALE_MASK = lib.LOCALE_BIT_ruRU
|
tercio@0
|
122 --
|
tercio@0
|
123 SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]]
|
tercio@0
|
124 SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT__.TTF]]
|
tercio@0
|
125 SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS.TTF]]
|
tercio@0
|
126 SML_MT_font["Nimrod MT"] = [[Fonts\NIM_____.ttf]]
|
tercio@0
|
127 SML_MT_font["Skurri"] = [[Fonts\SKURRI.TTF]]
|
tercio@0
|
128 --
|
tercio@0
|
129 lib.DefaultMedia.font = "Friz Quadrata TT"
|
tercio@0
|
130 --
|
tercio@0
|
131 else
|
tercio@0
|
132 LOCALE_MASK = lib.LOCALE_BIT_western
|
tercio@0
|
133 locale_is_western = true
|
tercio@0
|
134 --
|
tercio@0
|
135 SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]]
|
tercio@0
|
136 SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT__.TTF]]
|
tercio@0
|
137 SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS.TTF]]
|
tercio@0
|
138 SML_MT_font["Skurri"] = [[Fonts\SKURRI.TTF]]
|
tercio@0
|
139 --
|
tercio@0
|
140 lib.DefaultMedia.font = "Friz Quadrata TT"
|
tercio@0
|
141 --
|
tercio@0
|
142 end
|
tercio@0
|
143
|
tercio@0
|
144 -- STATUSBAR
|
tercio@0
|
145 if not lib.MediaTable.statusbar then lib.MediaTable.statusbar = {} end
|
tercio@0
|
146 lib.MediaTable.statusbar["Blizzard"] = [[Interface\TargetingFrame\UI-StatusBar]]
|
tercio@0
|
147 lib.MediaTable.statusbar["Blizzard Character Skills Bar"] = [[Interface\PaperDollInfoFrame\UI-Character-Skills-Bar]]
|
tercio@0
|
148 lib.DefaultMedia.statusbar = "Blizzard"
|
tercio@0
|
149
|
tercio@0
|
150 -- SOUND
|
tercio@0
|
151 if not lib.MediaTable.sound then lib.MediaTable.sound = {} end
|
tercio@0
|
152 lib.MediaTable.sound["None"] = [[Interface\Quiet.ogg]] -- Relies on the fact that PlaySound[File] doesn't error on non-existing input.
|
tercio@0
|
153 lib.DefaultMedia.sound = "None"
|
tercio@0
|
154
|
tercio@0
|
155 local function rebuildMediaList(mediatype)
|
tercio@0
|
156 local mtable = mediaTable[mediatype]
|
tercio@0
|
157 if not mtable then return end
|
tercio@0
|
158 if not mediaList[mediatype] then mediaList[mediatype] = {} end
|
tercio@0
|
159 local mlist = mediaList[mediatype]
|
tercio@0
|
160 -- list can only get larger, so simply overwrite it
|
tercio@0
|
161 local i = 0
|
tercio@0
|
162 for k in pairs(mtable) do
|
tercio@0
|
163 i = i + 1
|
tercio@0
|
164 mlist[i] = k
|
tercio@0
|
165 end
|
tercio@0
|
166 table_sort(mlist)
|
tercio@0
|
167 end
|
tercio@0
|
168
|
tercio@0
|
169 function lib:Register(mediatype, key, data, langmask)
|
tercio@0
|
170 if type(mediatype) ~= "string" then
|
tercio@0
|
171 error(MAJOR..":Register(mediatype, key, data, langmask) - mediatype must be string, got "..type(mediatype))
|
tercio@0
|
172 end
|
tercio@0
|
173 if type(key) ~= "string" then
|
tercio@0
|
174 error(MAJOR..":Register(mediatype, key, data, langmask) - key must be string, got "..type(key))
|
tercio@0
|
175 end
|
tercio@0
|
176 mediatype = mediatype:lower()
|
tercio@0
|
177 if mediatype == lib.MediaType.FONT and ((langmask and band(langmask, LOCALE_MASK) == 0) or not (langmask or locale_is_western)) then return false end
|
tercio@0
|
178 if not mediaTable[mediatype] then mediaTable[mediatype] = {} end
|
tercio@0
|
179 local mtable = mediaTable[mediatype]
|
tercio@0
|
180 if mtable[key] then return false end
|
tercio@0
|
181
|
tercio@0
|
182 mtable[key] = data
|
tercio@0
|
183 rebuildMediaList(mediatype)
|
tercio@0
|
184 self.callbacks:Fire("LibSharedMedia_Registered", mediatype, key)
|
tercio@0
|
185 return true
|
tercio@0
|
186 end
|
tercio@0
|
187
|
tercio@0
|
188 function lib:Fetch(mediatype, key, noDefault)
|
tercio@0
|
189 local mtt = mediaTable[mediatype]
|
tercio@0
|
190 local overridekey = overrideMedia[mediatype]
|
tercio@0
|
191 local result = mtt and ((overridekey and mtt[overridekey] or mtt[key]) or (not noDefault and defaultMedia[mediatype] and mtt[defaultMedia[mediatype]])) or nil
|
tercio@0
|
192 return result ~= "" and result or nil
|
tercio@0
|
193 end
|
tercio@0
|
194
|
tercio@0
|
195 function lib:IsValid(mediatype, key)
|
tercio@0
|
196 return mediaTable[mediatype] and (not key or mediaTable[mediatype][key]) and true or false
|
tercio@0
|
197 end
|
tercio@0
|
198
|
tercio@0
|
199 function lib:HashTable(mediatype)
|
tercio@0
|
200 return mediaTable[mediatype]
|
tercio@0
|
201 end
|
tercio@0
|
202
|
tercio@0
|
203 function lib:List(mediatype)
|
tercio@0
|
204 if not mediaTable[mediatype] then
|
tercio@0
|
205 return nil
|
tercio@0
|
206 end
|
tercio@0
|
207 if not mediaList[mediatype] then
|
tercio@0
|
208 rebuildMediaList(mediatype)
|
tercio@0
|
209 end
|
tercio@0
|
210 return mediaList[mediatype]
|
tercio@0
|
211 end
|
tercio@0
|
212
|
tercio@0
|
213 function lib:GetGlobal(mediatype)
|
tercio@0
|
214 return overrideMedia[mediatype]
|
tercio@0
|
215 end
|
tercio@0
|
216
|
tercio@0
|
217 function lib:SetGlobal(mediatype, key)
|
tercio@0
|
218 if not mediaTable[mediatype] then
|
tercio@0
|
219 return false
|
tercio@0
|
220 end
|
tercio@0
|
221 overrideMedia[mediatype] = (key and mediaTable[mediatype][key]) and key or nil
|
tercio@0
|
222 self.callbacks:Fire("LibSharedMedia_SetGlobal", mediatype, overrideMedia[mediatype])
|
tercio@0
|
223 return true
|
tercio@0
|
224 end
|
tercio@0
|
225
|
tercio@0
|
226 function lib:GetDefault(mediatype)
|
tercio@0
|
227 return defaultMedia[mediatype]
|
tercio@0
|
228 end
|
tercio@0
|
229
|
tercio@0
|
230 function lib:SetDefault(mediatype, key)
|
tercio@0
|
231 if mediaTable[mediatype] and mediaTable[mediatype][key] and not defaultMedia[mediatype] then
|
tercio@0
|
232 defaultMedia[mediatype] = key
|
tercio@0
|
233 return true
|
tercio@0
|
234 else
|
tercio@0
|
235 return false
|
tercio@0
|
236 end
|
tercio@0
|
237 end
|