Add bar label options (font, outline, size, color). Fix bug with profile changing.

This commit is contained in:
Xinhuan
2008-10-09 14:44:24 +08:00
parent 9895c8c1ca
commit a256497c81
3 changed files with 165 additions and 56 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
<Bindings>
<Binding name="OMENTOGGLE" description="Toggle the Omen window" header="OMEN">
<Binding name="OMENTOGGLE" header="OMEN">
Omen:Toggle()
</Binding>
</Bindings>
+26 -1
View File
@@ -3,7 +3,7 @@ local L = AceLocale:NewLocale("Omen", "enUS", true)
if not L then return end
-- Main Omen window
L["Unknown"] = true
L["<Unknown>"] = true
-- Config module titles
L["General Settings"] = true
@@ -59,6 +59,31 @@ L["Bar Height"] = true
L["Height of each bar"] = true
L["Bar Spacing"] = true
L["Spacing between each bar"] = true
L["Bar Label Options"] = true
L["Font"] = true
L["The font that the labels will use"] = true
L["Font Size"] = true
L["Control the font size of the labels"] = true
L["Font Color"] = true
L["The color of the labels"] = true
L["Font Outline"] = true
L["The outline that the labels will use"] = true
L["None"] = true
L["Outline"] = true
L["Thick Outline"] = true
L["Classes"] = true
L["DEATHKNIGHT"] = "Death Knight"
L["DRUID"] = "Druid"
L["HUNTER"] = "Hunter"
L["MAGE"] = "Mage"
L["PALADIN"] = "Paladin"
L["PET"] = "Pet"
L["PRIEST"] = "Priest"
L["ROGUE"] = "Rogue"
L["SHAMAN"] = "Shaman"
L["WARLOCK"] = "Warlock"
L["WARRIOR"] = "Warrior"
-- Config strings, slash command section
L["OMEN_SLASH_DESC"] = "These buttons execute the same functions as the ones in the slash command /omen"
+138 -54
View File
@@ -70,6 +70,10 @@ local defaults = {
Spacing = 0,
AnimateBars = true,
ShortNumbers = true,
Font = "Friz Quadrata TT",
FontOutline = "",
FontColor = {r = 1, g = 1, b = 1, a = 1,},
FontSize = 10,
},
ShowWith = {
Pet = true,
@@ -308,11 +312,12 @@ function Omen:Disable()
self:Toggle(false)
end
function Omen:OnProfileChanged(db, name)
db = self.db.profile
function Omen:OnProfileChanged(event, database, newProfileKey)
db = database.profile
self:SetAnchors(true)
self:ResizeBars()
self:ReAnchorBars()
self:UpdateBarLabelSettings()
self:UpdateVisible()
self:UpdateBars()
end
@@ -388,8 +393,9 @@ end
-- Omen bar stuff
do
local function animate(self, v)
self.animationCursor = self.animationCursor + v
-- OnUpdate function for bar animation
local function animate(self, elapsed)
self.animationCursor = self.animationCursor + elapsed
if self.animationCursor > self.animationTime then
self.texture:SetWidth(self.animations[1])
tremove(self.animations, 1)
@@ -404,6 +410,7 @@ do
end
end
-- function to start/queue bar animations
local function AnimateTo(self, val)
if val == 1/0 or val == -1/0 then return end
if val == 0 then val = 1 end
@@ -415,33 +422,33 @@ do
tinsert(self.animations, val)
tinsert(self.animations, currentWidth)
tinsert(self.animations, diff)
if #self.animations > 0 then
self:SetScript("OnUpdate", self.animate)
end
self:SetScript("OnUpdate", animate)
end
-- Create bars on demand
setmetatable(bars, {__index = function(self, barID)
local bar = CreateFrame("Frame", nil, Omen.BarList)
self[barID] = bar
bar:SetWidth(Omen.BarList:GetWidth())
bar:SetHeight(db.Bar.Height)
bar:SetPoint("TOPLEFT", Omen.BarList, "TOPLEFT", 0, (barID-1) * -(db.Bar.Height + db.Bar.Spacing))
local color = db.Bar.FontColor
bar.Text1 = bar:CreateFontString(nil, nil, "GameFontNormalSmall")
bar.Text1:SetPoint("LEFT", bar, "LEFT", 10, 0)
bar.Text1:SetPoint("LEFT", bar, "LEFT", 5, 0)
bar.Text1:SetJustifyH("LEFT")
bar.Text1:SetTextColor(1, 1, 1, 1)
bar.Text1:SetText("abc")
bar.Text1:SetFont(LSM:Fetch("font", db.Bar.Font), db.Bar.FontSize, db.Bar.FontOutline)
bar.Text1:SetTextColor(color.r, color.g, color.b, color.a)
bar.Text2 = bar:CreateFontString(nil, nil, "GameFontNormalSmall")
bar.Text2:SetPoint("RIGHT", bar, "RIGHT", -10, 0)
bar.Text2:SetPoint("RIGHT", bar, "RIGHT", -5, 0)
bar.Text2:SetJustifyH("RIGHT")
bar.Text2:SetTextColor(1, 1, 1, 1)
bar.Text2:SetText("def")
bar.Text2:SetFont(LSM:Fetch("font", db.Bar.Font), db.Bar.FontSize, db.Bar.FontOutline)
bar.Text2:SetTextColor(color.r, color.g, color.b, color.a)
bar.texture = bar:CreateTexture()
--bar.texture:SetTexture(1, 1, 1, 0.6)
bar.texture:SetTexture(LSM:Fetch("statusbar", db.Bar.Texture))
bar.texture:SetPoint("TOPLEFT", bar, "TOPLEFT")
bar.texture:SetPoint("BOTTOMLEFT", bar, "BOTTOMLEFT")
@@ -449,13 +456,38 @@ do
bar.animations = {}
bar.animationCursor = 0
bar.animationTime = 0.25
bar.animate = animate
bar.AnimateTo = AnimateTo
return bar
end})
end
function Omen:ResizeBars()
local w = Omen.BarList:GetWidth()
for i = 1, #bars do
bars[i]:SetWidth(w)
bars[i]:SetHeight(db.Bar.Height)
end
end
function Omen:ReAnchorBars()
for i = 1, #bars do
bars[i]:SetPoint("TOPLEFT", self.BarList, "TOPLEFT", 0, (i-1) * -(db.Bar.Height + db.Bar.Spacing))
end
end
function Omen:UpdateBarLabelSettings()
local font = LSM:Fetch("font", db.Bar.Font)
local size = db.Bar.FontSize
local flags = db.Bar.FontOutline
local color = db.Bar.FontColor
for i = 1, #bars do
bars[i].Text1:SetFont(font, size, flags)
bars[i].Text2:SetFont(font, size, flags)
bars[i].Text1:SetTextColor(color.r, color.g, color.b, color.a)
bars[i].Text2:SetTextColor(color.r, color.g, color.b, color.a)
end
end
-----------------------------------------------------------------------------
-- Omen event functions
@@ -625,6 +657,7 @@ function Omen:UpdateBars()
-- It has to be attackable and not human controlled, otherwise return
local mob = "target"
if UnitIsPlayer(mob) or UnitPlayerControlled(mob) or not UnitCanAttack("player", mob) then
guidNameLookup[UnitGUID(mob)] = UnitName(mob)
mob = "targettarget"
end
if not UnitExists(mob) or UnitIsPlayer(mob) or UnitPlayerControlled(mob) or not UnitCanAttack("player", mob) then
@@ -723,7 +756,7 @@ function Omen:UpdateBars()
end
local bar = bars[j]
local threat = threatTable[guid]
bar.Text1:SetText(guidNameLookup[guid] or L["Unknown"])
bar.Text1:SetText(guidNameLookup[guid] or L["<Unknown>"])
if db.Bar.ShortNumbers and threat > 100000 then
bar.Text2:SetFormattedText("%2.1fk [%d%%]", threat / 100000, tankThreat == 0 and 0 or threat / tankThreat * 100)
else
@@ -763,24 +796,16 @@ function Omen:ClearAll()
end
end
function Omen:ResizeBars()
local w = Omen.BarList:GetWidth()
for i = 1, #bars do
bars[i]:SetWidth(w)
bars[i]:SetHeight(db.Bar.Height)
end
end
function Omen:ReAnchorBars()
for i = 1, #bars do
bars[i]:SetPoint("TOPLEFT", self.BarList, "TOPLEFT", 0, (i-1) * -(db.Bar.Height + db.Bar.Spacing))
end
end
-----------------------------------------------------------------------------
-- Omen config stuff
local outlines = {
[""] = L["None"],
["OUTLINE"] = L["Outline"],
["THICKOUTLINE"] = L["Thick Outline"],
}
local function GetLSMIndex(t, value)
for k, v in pairs(LSM:List(t)) do
if v == value then
@@ -793,8 +818,8 @@ end
local options = {
type = "group",
name = "Omen",
get = function(info) return Omen.db.profile[ info[#info] ] end,
set = function(info, value) Omen.db.profile[ info[#info] ] = value end,
get = function(info) return db[ info[#info] ] end,
set = function(info, value) db[ info[#info] ] = value end,
args = {
general = {
order = 1,
@@ -861,9 +886,9 @@ local options = {
name = L["Autocollapse Options"],
guiInline = true,
order = 11,
disabled = function() return not Omen.db.profile.Autocollapse end,
disabled = function() return not db.Autocollapse end,
set = function(info, value)
Omen.db.profile[ info[#info] ] = value
db[ info[#info] ] = value
Omen:UpdateVisible()
Omen:UpdateBars()
end,
@@ -899,9 +924,9 @@ local options = {
type = "group",
name = L["Show When..."],
desc = L["Show Omen when..."],
get = function(info) return Omen.db.profile.ShowWith[ info[#info] ] end,
get = function(info) return db.ShowWith[ info[#info] ] end,
set = function(info, value)
Omen.db.profile.ShowWith[ info[#info] ] = value
db.ShowWith[ info[#info] ] = value
Omen:UpdateVisible()
Omen:UpdateBars()
end,
@@ -952,9 +977,9 @@ local options = {
type = "group",
name = L["Bar Settings"],
desc = L["Bar Settings"],
get = function(info) return Omen.db.profile.Bar[ info[#info] ] end,
get = function(info) return db.Bar[ info[#info] ] end,
set = function(info, value)
Omen.db.profile.Bar[ info[#info] ] = value
db.Bar[ info[#info] ] = value
Omen:UpdateBars()
end,
args = {
@@ -965,30 +990,19 @@ local options = {
},
AnimateBars = {
type = "toggle",
order = 2,
name = L["Animate Bars"],
desc = L["Smoothly animate bar changes"],
},
ShortNumbers = {
type = "toggle",
order = 3,
name = L["Short Numbers"],
desc = L["Display large numbers in Ks"],
},
Texture = {
type = "select",
name = L["Bar Texture"],
desc = L["The texture that the bar will use"],
values = function() return LSM:List("statusbar") end,
get = function(info) return GetLSMIndex("statusbar", db.Bar.Texture) end,
set = function(info, v)
db.Bar.Texture = LSM:List("statusbar")[v]
local texturepath = LSM:Fetch("statusbar", db.Bar.Texture)
for i = 1, #bars do
bars[i].texture:SetTexture(texturepath)
end
end
},
Height = {
type = "range",
order = 4,
name = L["Bar Height"],
desc = L["Height of each bar"],
min = 5, max = 50, step = 1, bigStep = 1,
@@ -1001,6 +1015,7 @@ local options = {
},
Spacing = {
type = "range",
order = 5,
name = L["Bar Spacing"],
desc = L["Spacing between each bar"],
min = 0, max = 20, step = 1, bigStep = 1,
@@ -1010,6 +1025,75 @@ local options = {
Omen:UpdateBars()
end,
},
Texture = {
type = "select",
order = 10,
name = L["Bar Texture"],
desc = L["The texture that the bar will use"],
values = function() return LSM:List("statusbar") end,
get = function(info) return GetLSMIndex("statusbar", db.Bar.Texture) end,
set = function(info, v)
db.Bar.Texture = LSM:List("statusbar")[v]
local texturepath = LSM:Fetch("statusbar", db.Bar.Texture)
for i = 1, #bars do
bars[i].texture:SetTexture(texturepath)
end
end,
},
BarLabelsGroup = {
type = "group",
name = L["Bar Label Options"],
guiInline = true,
order = 20,
set = function(info, v)
db.Bar[ info[#info] ] = v
Omen:UpdateBarLabelSettings()
end,
args = {
Font = {
type = "select",
order = 1,
name = L["Font"],
desc = L["The font that the labels will use"],
values = function() return LSM:List("font") end,
get = function(info) return GetLSMIndex("font", db.Bar.Font) end,
set = function(info, v)
db.Bar.Font = LSM:List("font")[v]
Omen:UpdateBarLabelSettings()
end,
},
FontOutline = {
type = "select",
order = 2,
name = L["Font Outline"],
desc = L["The outline that the labels will use"],
values = outlines,
},
FontColor = {
type = "color",
order = 3,
name = L["Font Color"],
desc = L["The color of the labels"],
hasAlpha = true,
get = function(info)
local t = db.Bar.FontColor
return t.r, t.g, t.b, t.a
end,
set = function(info, r, g, b, a)
local t = db.Bar.FontColor
t.r, t.g, t.b, t.a = r, g, b, a
Omen:UpdateBarLabelSettings()
end,
},
FontSize = {
type = "range",
order = 4,
name = L["Font Size"],
desc = L["Control the font size of the labels"],
min = 4, max = 30, step = 1,
},
},
},
},
},
Help = {