diff --git a/.pkgmeta b/.pkgmeta index 9f52a48..0c837ca 100644 --- a/.pkgmeta +++ b/.pkgmeta @@ -15,3 +15,4 @@ externals: Libs/LibSharedMedia-3.0: svn://svn.wowace.com/wow/libsharedmedia-3-0/mainline/trunk/LibSharedMedia-3.0 Libs/AceGUI-3.0-SharedMediaWidgets: svn://svn.wowace.com/wow/ace-gui-3-0-shared-media-widgets/mainline/trunk/AceGUI-3.0-SharedMediaWidgets Libs/LibSink-2.0: svn://svn.wowace.com/wow/libsink-2-0/mainline/trunk/LibSink-2.0 + Libs/LibDBIcon-1.0: svn://svn.wowace.com/wow/libdbicon-1-0/mainline/trunk/LibDBIcon-1.0 diff --git a/Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua b/Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua new file mode 100644 index 0000000..364602e --- /dev/null +++ b/Libs/LibDataBroker-1.1/LibDataBroker-1.1.lua @@ -0,0 +1,66 @@ + +assert(LibStub, "LibDataBroker-1.1 requires LibStub") +assert(LibStub:GetLibrary("CallbackHandler-1.0", true), "LibDataBroker-1.1 requires CallbackHandler-1.0") + +local lib, oldminor = LibStub:NewLibrary("LibDataBroker-1.1", 3) +if not lib then return end +oldminor = oldminor or 0 + + +lib.callbacks = lib.callbacks or LibStub:GetLibrary("CallbackHandler-1.0"):New(lib) +lib.attributestorage, lib.namestorage, lib.proxystorage = lib.attributestorage or {}, lib.namestorage or {}, lib.proxystorage or {} +local attributestorage, namestorage, callbacks = lib.attributestorage, lib.namestorage, lib.callbacks + +if oldminor < 2 then + lib.domt = { + __metatable = "access denied", + __index = function(self, key) return attributestorage[self] and attributestorage[self][key] end, + } +end + +if oldminor < 3 then + lib.domt.__newindex = function(self, key, value) + if not attributestorage[self] then attributestorage[self] = {} end + if attributestorage[self][key] == value then return end + attributestorage[self][key] = value + local name = namestorage[self] + if not name then return end + callbacks:Fire("LibDataBroker_AttributeChanged", name, key, value, self) + callbacks:Fire("LibDataBroker_AttributeChanged_"..name, name, key, value, self) + callbacks:Fire("LibDataBroker_AttributeChanged_"..name.."_"..key, name, key, value, self) + callbacks:Fire("LibDataBroker_AttributeChanged__"..key, name, key, value, self) + end +end + +if oldminor < 2 then + function lib:NewDataObject(name, dataobj) + if self.proxystorage[name] then return end + + if dataobj then + assert(type(dataobj) == "table", "Invalid dataobj, must be nil or a table") + self.attributestorage[dataobj] = {} + for i,v in pairs(dataobj) do + self.attributestorage[dataobj][i] = v + dataobj[i] = nil + end + end + dataobj = setmetatable(dataobj or {}, self.domt) + self.proxystorage[name], self.namestorage[dataobj] = dataobj, name + self.callbacks:Fire("LibDataBroker_DataObjectCreated", name, dataobj) + return dataobj + end +end + +if oldminor < 1 then + function lib:DataObjectIterator() + return pairs(self.proxystorage) + end + + function lib:GetDataObjectByName(dataobjectname) + return self.proxystorage[dataobjectname] + end + + function lib:GetNameByDataObject(dataobject) + return self.namestorage[dataobject] + end +end diff --git a/Localization/deDE.lua b/Localization/deDE.lua index 2fe990c..188ffe1 100644 --- a/Localization/deDE.lua +++ b/Localization/deDE.lua @@ -33,12 +33,14 @@ L["Alpha"] = "Sichtbarkeit" L["Controls the transparency of the main Omen window."] = "Kontrolliert die Sichtbarkeit des Omen Hauptfensters" L["Scale"] = "Skalierung" L["Controls the scaling of the main Omen window."] = "Kontrolliert die Skalierung des Omen Hauptfensters" -L["Tells Omen to additionally check your 'focus' and 'focustarget' before your 'target' and 'targettarget' in that order for threat display."] = true -L["Tells Omen to enter Test Mode so that you can configure Omen's display much more easily."] = true -L["Autocollapse"] = "Automatisches Zusammenklappen" +L["Tells Omen to additionally check your 'focus' and 'focustarget' before your 'target' and 'targettarget' in that order for threat display."] = "Lässt Omen zusätzlich den Fokus und das Fokusziel vor dem Ziel und dem Ziel des Ziels für die Bedrohungsanzeige überprüfen" +L["Tells Omen to enter Test Mode so that you can configure Omen's display much more easily."] = "Startet den Omen Testmodus um das Einstellen der Anzeige zu vereinfachen" L["Collapse to show a minimum number of bars"] = "Zusammenklappen um nur eine minimale Anzahl an Balken zu zeigen" L["Lock Omen"] = "Omen verankern" L["Locks Omen in place and prevents it from being dragged or resized."] = "Verankert Omen um zu verhindern, dass es verschoben oder die Größe geändert wird." +L["Show minimap button"] = "Zeige Minimap Icon" +L["Show the Omen minimap button"] = "Zeige das Omen Minimap Icon" +L["Autocollapse"] = "Automatisches Zusammenklappen" L["Autocollapse Options"] = "Optionen für das automatische Zusammenklappen" L["Grow bars upwards"] = "Balken nach oben aufbauen" L["Hide Omen on 0 bars"] = "Omen ausblenden wenn keine Balken vorhanden sind" diff --git a/Localization/enUS.lua b/Localization/enUS.lua index 59d24ae..dac64ca 100644 --- a/Localization/enUS.lua +++ b/Localization/enUS.lua @@ -35,10 +35,12 @@ L["Scale"] = true L["Controls the scaling of the main Omen window."] = true L["Tells Omen to additionally check your 'focus' and 'focustarget' before your 'target' and 'targettarget' in that order for threat display."] = true L["Tells Omen to enter Test Mode so that you can configure Omen's display much more easily."] = true -L["Autocollapse"] = true L["Collapse to show a minimum number of bars"] = true L["Lock Omen"] = true L["Locks Omen in place and prevents it from being dragged or resized."] = true +L["Show minimap button"] = true +L["Show the Omen minimap button"] = true +L["Autocollapse"] = true L["Autocollapse Options"] = true L["Grow bars upwards"] = true L["Hide Omen on 0 bars"] = true diff --git a/Localization/frFR.lua b/Localization/frFR.lua index 2af2ae4..891f5ee 100644 --- a/Localization/frFR.lua +++ b/Localization/frFR.lua @@ -35,10 +35,12 @@ L["Scale"] = "Échelle" L["Controls the scaling of the main Omen window."] = "Contrôle l'échelle de la fenêtre principale de Omen." L["Tells Omen to additionally check your 'focus' and 'focustarget' before your 'target' and 'targettarget' in that order for threat display."] = true L["Tells Omen to enter Test Mode so that you can configure Omen's display much more easily."] = true -L["Autocollapse"] = "Réduire auto." L["Collapse to show a minimum number of bars"] = "Réduit Omen afin de n'afficher qu'un nombre minimal de barres." L["Lock Omen"] = "Verrouiller Omen" L["Locks Omen in place and prevents it from being dragged or resized."] = "Verrouille Omen afin d'empêcher tout déplacement ou redimensionnement de la fenêtre." +L["Show minimap button"] = true +L["Show the Omen minimap button"] = true +L["Autocollapse"] = "Réduire auto." L["Autocollapse Options"] = "Options de la réduction automatique" L["Grow bars upwards"] = "Ajouter vers le haut" L["Hide Omen on 0 bars"] = "Cacher si 0 barre" diff --git a/Localization/koKR.lua b/Localization/koKR.lua index 9e1634c..5eac22d 100644 --- a/Localization/koKR.lua +++ b/Localization/koKR.lua @@ -35,10 +35,12 @@ L["Scale"] = "크기" L["Controls the scaling of the main Omen window."] = "Omen 창의 크기를 조절합니다." L["Tells Omen to additionally check your 'focus' and 'focustarget' before your 'target' and 'targettarget' in that order for threat display."] = true L["Tells Omen to enter Test Mode so that you can configure Omen's display much more easily."] = true -L["Autocollapse"] = "자동 접기" L["Collapse to show a minimum number of bars"] = "최소한의 바를 표시하기 위해 접기를 합니다." L["Lock Omen"] = "Omen 잠금" L["Locks Omen in place and prevents it from being dragged or resized."] = "Omen의 위치나 크기를 조절하지 못하도록 잠급니다." +L["Show minimap button"] = true +L["Show the Omen minimap button"] = true +L["Autocollapse"] = "자동 접기" L["Autocollapse Options"] = "자동 접기 옵션" L["Grow bars upwards"] = "바 위로 확장" L["Hide Omen on 0 bars"] = "바가 0일때 Omen 숨김" diff --git a/Localization/zhCN.lua b/Localization/zhCN.lua index 438a3ca..b6ecbb7 100644 --- a/Localization/zhCN.lua +++ b/Localization/zhCN.lua @@ -35,10 +35,12 @@ L["Scale"] = "缩放" L["Controls the scaling of the main Omen window."] = "控制 Omen 主窗口的尺寸。" L["Tells Omen to additionally check your 'focus' and 'focustarget' before your 'target' and 'targettarget' in that order for threat display."] = true L["Tells Omen to enter Test Mode so that you can configure Omen's display much more easily."] = true -L["Autocollapse"] = "自动收起" L["Collapse to show a minimum number of bars"] = "收起以显示最小数量的计量条" L["Lock Omen"] = "锁定 Omen" L["Locks Omen in place and prevents it from being dragged or resized."] = "锁定 Omen,使其无法移动或拉伸。" +L["Show minimap button"] = true +L["Show the Omen minimap button"] = true +L["Autocollapse"] = "自动收起" L["Autocollapse Options"] = "自动收起选项" L["Grow bars upwards"] = "计量条向上生长" L["Hide Omen on 0 bars"] = "当没有计量条时隐藏 Omen" diff --git a/Localization/zhTW.lua b/Localization/zhTW.lua index d339f6d..7f30623 100644 --- a/Localization/zhTW.lua +++ b/Localization/zhTW.lua @@ -35,10 +35,12 @@ L["Scale"] = "縮放" L["Controls the scaling of the main Omen window."] = "控制主視窗的尺寸" L["Tells Omen to additionally check your 'focus' and 'focustarget' before your 'target' and 'targettarget' in that order for threat display."] = true L["Tells Omen to enter Test Mode so that you can configure Omen's display much more easily."] = true -L["Autocollapse"] = "自動收起" L["Collapse to show a minimum number of bars"] = "收起以顯示最小數量的計量條" L["Lock Omen"] = "鎖定Omen" L["Locks Omen in place and prevents it from being dragged or resized."] = "鎖定Omen, 使其無法移動或拉伸." +L["Show minimap button"] = true +L["Show the Omen minimap button"] = true +L["Autocollapse"] = "自動收起" L["Autocollapse Options"] = "自動收起設定" L["Grow bars upwards"] = "計量條向上成長" L["Hide Omen on 0 bars"] = "當長條棒數量為零時隱藏Omen" diff --git a/Omen.lua b/Omen.lua index 1a3439a..8627bbf 100644 --- a/Omen.lua +++ b/Omen.lua @@ -12,6 +12,8 @@ LoadAddOn("AceGUI-3.0-SharedMediaWidgets") LoadAddOn("LibSink-2.0") LoadAddOn("LibRock-1.0") LoadAddOn("FuBarPlugin-3.0") +LoadAddOn("LibDataBroker-1.1") +LoadAddOn("LibDBIcon-1.0") ----------------------------------------------------------------------------- @@ -19,6 +21,8 @@ LoadAddOn("FuBarPlugin-3.0") local Omen = LibStub("AceAddon-3.0"):NewAddon("Omen", "AceConsole-3.0", "AceEvent-3.0", "AceTimer-3.0", "LibSink-2.0") local L = LibStub("AceLocale-3.0"):GetLocale("Omen", false) local LSM = LibStub("LibSharedMedia-3.0") +local LDB = LibStub("LibDataBroker-1.1") +local LDBIcon = LibStub("LibDBIcon-1.0") _G["Omen"] = Omen @@ -156,6 +160,11 @@ local defaults = { SoundFile = "Fel Nova", DisableWhileTanking = true, }, + MinimapIcon = { + hide = false, + minimapPos = 220, + radius = 80, + }, }, } local guidNameLookup = {} -- Format: guidNameLookup[guid] = "Unit Name" @@ -451,17 +460,18 @@ function Omen:PLAYER_LOGIN() self:UpdateGrips() self:UnregisterEvent("PLAYER_LOGIN") - -- Optional launcher support for LDB-1.1 if present, this code is placed here so - -- that it runs after all other addons have loaded since we don't embed LDB-1.1 - if LibStub("LibDataBroker-1.1", true) and not IsAddOnLoaded("Broker2FuBar") then - local LDB = LibStub("LibDataBroker-1.1", true) - local launcher = LDB:NewDataObject("Omen", { - type = "launcher", - icon = "Interface\\AddOns\\Omen\\icon", - OnClick = function(clickedframe, button) - if button == "RightButton" then Omen:ShowConfig() else Omen:Toggle() end - end, - }) + OmenLauncher = LDB:NewDataObject("Omen", { + type = "launcher", + icon = "Interface\\AddOns\\Omen\\icon", + OnClick = function(clickedframe, button) + if button == "RightButton" then Omen:ShowConfig() else Omen:Toggle() end + end, + }) + LDBIcon:Register("Omen", OmenLauncher, db.MinimapIcon) + OmenLauncher.OnTooltipShow = function(tt) + tt:AddLine(self.defaultTitle) + tt:AddLine("|cffffff00" .. L["Click|r to toggle the Omen window"]) + tt:AddLine("|cffffff00" .. L["Right-click|r to open the options menu"]) end -- Optional launcher support for LFBP-3.0 if present, this code is placed here so @@ -481,6 +491,7 @@ function Omen:PLAYER_LOGIN() self:SetFuBarOption("tooltipHiddenWhenEmpty", true) LFBP:OnEmbedInitialize(self) function Omen:OnUpdateFuBarTooltip() + GameTooltip:AddLine(self.defaultTitle) GameTooltip:AddLine("|cffffff00" .. L["Click|r to toggle the Omen window"]) GameTooltip:AddLine("|cffffff00" .. L["Right-click|r to open the options menu"]) end @@ -1686,11 +1697,22 @@ local options = { Omen:UpdateBars() end, }, + MinimapIcon = { + type = "toggle", + name = L["Show minimap button"], + desc = L["Show the Omen minimap button"], + order = 10, + get = function(info) return not db.MinimapIcon.hide end, + set = function(info, value) + db.MinimapIcon.hide = not value + if value then LDBIcon:Show("Omen") else LDBIcon:Hide("Omen") end + end, + }, Autocollapse = { type = "toggle", name = L["Autocollapse"], desc = L["Collapse to show a minimum number of bars"], - order = 10, + order = 20, set = function(info, value) db.Autocollapse = value Omen.Anchor:SetHeight(6*db.Bar.Height + 5*db.Bar.Spacing + Omen.Title:GetHeight() + 2*db.Background.BarInset) @@ -1704,7 +1726,7 @@ local options = { type = "group", name = L["Autocollapse Options"], guiInline = true, - order = 11, + order = 21, disabled = function() return not db.Autocollapse end, set = function(info, value) db[ info[#info] ] = value @@ -1741,7 +1763,7 @@ local options = { type = "group", name = L["Background Options"], guiInline = true, - order = 21, + order = 31, get = function(info) return db.Background[ info[#info] ] end, set = function(info, value) db.Background[ info[#info] ] = value diff --git a/Omen.toc b/Omen.toc index 139e946..aeb765c 100644 --- a/Omen.toc +++ b/Omen.toc @@ -8,7 +8,7 @@ ## Notes-zhTW: 一個輕量級、有彈性、可監視多個目標的仇恨統計插件。 ## Notes-koKR: 다중-대상에 대한 위협수준 미터기로 보여줍니다. ## Author: Xinhuan -## OptionalDeps: Ace3, LibSharedMedia-3.0, AceGUI-3.0-SharedMediaWidgets, LibSink-2.0 +## OptionalDeps: Ace3, LibSharedMedia-3.0, AceGUI-3.0-SharedMediaWidgets, LibSink-2.0, LibDBIcon-1.0 ## X-Category: Combat ## SavedVariables: Omen3DB @@ -28,6 +28,10 @@ Libs\LibSharedMedia-3.0\lib.xml Libs\AceGUI-3.0-SharedMediaWidgets\widget.xml Libs\LibSink-2.0\lib.xml #@end-no-lib-strip@ +Libs\LibDataBroker-1.1\LibDataBroker-1.1.lua +#@no-lib-strip@ +Libs\LibDBIcon-1.0\LibDBIcon-1.0.lua +#@end-no-lib-strip@ Localization\enUS.lua Localization\deDE.lua