forked from Bastion/Bastion
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.9 KiB
77 lines
1.9 KiB
--- @type StdUi
|
|
local StdUi = LibStub and LibStub('StdUi', true);
|
|
if not StdUi then
|
|
return
|
|
end
|
|
|
|
local module, version = 'ProgressBar', 3;
|
|
if not StdUi:UpgradeNeeded(module, version) then return end;
|
|
|
|
----------------------------------------------------
|
|
--- ProgressBar
|
|
----------------------------------------------------
|
|
|
|
local ProgressBarMethods = {
|
|
GetPercentageValue = function(self)
|
|
local _, max = self:GetMinMaxValues();
|
|
local value = self:GetValue();
|
|
return (value/max) * 100;
|
|
end,
|
|
|
|
TextUpdate = function(self) -- min, max, value
|
|
return Round(self:GetPercentageValue()) .. '%';
|
|
end
|
|
};
|
|
|
|
local ProgressBarEvents = {
|
|
OnValueChanged = function(self, value)
|
|
local min, max = self:GetMinMaxValues();
|
|
self.text:SetText(self:TextUpdate(min, max, value));
|
|
end,
|
|
|
|
OnMinMaxChanged = function(self)
|
|
local min, max = self:GetMinMaxValues();
|
|
local value = self:GetValue();
|
|
self.text:SetText(self:TextUpdate(min, max, value));
|
|
end
|
|
}
|
|
|
|
--- @return StatusBar
|
|
function StdUi:ProgressBar(parent, width, height, vertical)
|
|
vertical = vertical or false;
|
|
|
|
local progressBar = CreateFrame('StatusBar', nil, parent);
|
|
progressBar:SetStatusBarTexture(self.config.backdrop.texture);
|
|
progressBar:SetStatusBarColor(
|
|
self.config.progressBar.color.r,
|
|
self.config.progressBar.color.g,
|
|
self.config.progressBar.color.b,
|
|
self.config.progressBar.color.a
|
|
);
|
|
self:SetObjSize(progressBar, width, height);
|
|
|
|
progressBar.texture = progressBar:GetRegions();
|
|
progressBar.texture:SetDrawLayer('BORDER', -1);
|
|
|
|
if (vertical) then
|
|
progressBar:SetOrientation('VERTICAL');
|
|
end
|
|
|
|
progressBar.text = self:Label(progressBar, '');
|
|
progressBar.text:SetJustifyH('MIDDLE');
|
|
progressBar.text:SetAllPoints();
|
|
|
|
self:ApplyBackdrop(progressBar);
|
|
|
|
for k, v in pairs(ProgressBarMethods) do
|
|
progressBar[k] = v;
|
|
end
|
|
|
|
for k, v in pairs(ProgressBarEvents) do
|
|
progressBar:SetScript(k, v);
|
|
end
|
|
|
|
return progressBar;
|
|
end
|
|
|
|
StdUi:RegisterModule(module, version); |