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.
465 lines
13 KiB
465 lines
13 KiB
local _;
|
|
local pairs = pairs;
|
|
|
|
local VUHDO_BUFF_PANEL_X, VUHDO_BUFF_PANEL_Y;
|
|
local VUHDO_BUFF_PANEL_WIDTH;
|
|
local VUHDO_BUFF_PANEL_HEIGHT;
|
|
local VUHDO_PANEL_INSET_X = 10;
|
|
local VUHDO_PANEL_INSET_Y = 10;
|
|
local VUHDO_PANEL_MAX_HEIGHT = 435;
|
|
|
|
local BUFF_PANEL_BASE_HEIGHT = nil;
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_getGenericPanel(aCategoryName)
|
|
return _G["VuhDoBuffSetupPanel" .. aCategoryName .. "GenericPanel"];
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_getBuffPanelCheckBox(aCategoryName)
|
|
return _G["VuhDoBuffSetupPanel" .. aCategoryName .. "EnableCheckButton"];
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_buffSetupStoreSettings()
|
|
local tGenericPanel;
|
|
local tFound = false;
|
|
|
|
for tCategoryName, tCategoryBuffs in pairs(VUHDO_getPlayerClassBuffs()) do
|
|
local tSettings = VUHDO_BUFF_SETTINGS[tCategoryName];
|
|
tGenericPanel = VUHDO_getGenericPanel(tCategoryName);
|
|
|
|
if (VUHDO_getBuffPanelCheckBox(tCategoryName) ~= nil) then
|
|
tFound = true;
|
|
|
|
if (tSettings ~= nil) then
|
|
tSettings["enabled"] = VUHDO_forceBooleanValue(VUHDO_getBuffPanelCheckBox(tCategoryName):GetChecked());
|
|
end
|
|
|
|
if (tGenericPanel ~= nil) then
|
|
local tVariant = tCategoryBuffs[1];
|
|
local tBuffTarget = tVariant[2];
|
|
|
|
if (VUHDO_BUFF_TARGET_UNIQUE == tBuffTarget) then
|
|
local tEditBox = _G[tGenericPanel:GetName() .. "PlayerNameEditBox"];
|
|
tSettings["name"] = tEditBox:GetText();
|
|
else -- Aura, Totem, own group, self
|
|
if (#tCategoryBuffs > 1) then
|
|
local tCombo = _G[tGenericPanel:GetName() .. "DedicatedComboBox"];
|
|
tSettings["buff"] = VUHDO_comboGetSelectedBuff(tCombo);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if (tFound) then
|
|
VUHDO_reloadBuffPanel();
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_buffSetupNewRowCheck(aWidth, anAddHeight)
|
|
|
|
if (VUHDO_BUFF_PANEL_Y > VUHDO_BUFF_PANEL_HEIGHT) then
|
|
VUHDO_BUFF_PANEL_HEIGHT = VUHDO_BUFF_PANEL_Y;
|
|
end
|
|
|
|
if (VUHDO_BUFF_PANEL_Y + anAddHeight > VUHDO_PANEL_MAX_HEIGHT) then
|
|
VUHDO_BUFF_PANEL_X = VUHDO_BUFF_PANEL_X + aWidth;
|
|
VUHDO_BUFF_PANEL_Y = VUHDO_PANEL_INSET_Y;
|
|
end
|
|
|
|
if (VUHDO_BUFF_PANEL_X > VUHDO_BUFF_PANEL_WIDTH) then
|
|
VUHDO_BUFF_PANEL_WIDTH = VUHDO_BUFF_PANEL_X;
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
--
|
|
function VUHDO_buffChanged(aComponent)
|
|
VUHDO_buffSetupStoreSettings();
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_addGenericBuffFrame(aBuffVariant, aFrameTemplateName, aCategoryName, anIsPresent)
|
|
local tBuffPanel, tGenericFrame;
|
|
|
|
-- main panel
|
|
local tFrameName = "VuhDoBuffSetupPanel" .. aCategoryName;
|
|
tBuffPanel = _G[tFrameName];
|
|
if (tBuffPanel == nil) then
|
|
tBuffPanel = CreateFrame("Frame", tFrameName, VuhDoNewOptionsBuffsGeneric, "VuhDoBuffSetupPanelTemplate");
|
|
BUFF_PANEL_BASE_HEIGHT = tBuffPanel:GetHeight();
|
|
end
|
|
|
|
_G[tBuffPanel:GetName() .. "BuffNameLabelLabel"]:SetText(aCategoryName);
|
|
|
|
if (anIsPresent) then
|
|
_G[tBuffPanel:GetName() .. "BuffTextureTexture"]:SetTexture(VUHDO_BUFFS[aBuffVariant[1]].icon);
|
|
else
|
|
_G[tBuffPanel:GetName() .. "BuffTextureTexture"]:SetTexture("interface\\icons\\spell_chargenegative");
|
|
end
|
|
local tInFrameY = BUFF_PANEL_BASE_HEIGHT;
|
|
|
|
if (aFrameTemplateName ~= nil) then
|
|
tGenericFrame = _G[tFrameName .. "GenericPanel"];
|
|
if (tGenericFrame == nil) then
|
|
tGenericFrame = CreateFrame("Frame", "$parentGenericPanel", tBuffPanel, aFrameTemplateName);
|
|
end
|
|
tGenericFrame:SetPoint("TOPLEFT", tBuffPanel:GetName(), "TOPLEFT", 0, -tInFrameY);
|
|
tInFrameY = tInFrameY + tGenericFrame:GetHeight() + 5;
|
|
end
|
|
|
|
VUHDO_buffSetupNewRowCheck(tBuffPanel:GetWidth(), tInFrameY);
|
|
tBuffPanel:SetPoint("TOPLEFT", "VuhDoNewOptionsBuffsGeneric", "TOPLEFT", VUHDO_BUFF_PANEL_X, -VUHDO_BUFF_PANEL_Y);
|
|
tBuffPanel:SetHeight(tInFrameY);
|
|
tBuffPanel:Show();
|
|
|
|
VUHDO_BUFF_PANEL_Y = VUHDO_BUFF_PANEL_Y + tInFrameY;
|
|
|
|
return tBuffPanel, tGenericFrame;
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_setupStaticBuffPanel(aCategoryName, aBuffPanel, anIsPresent)
|
|
local tBuffSettings;
|
|
|
|
if (VUHDO_BUFF_SETTINGS[aCategoryName] == nil) then
|
|
VUHDO_BUFF_SETTINGS[aCategoryName] = { ["enabled"] = anIsPresent };
|
|
end
|
|
|
|
if (VUHDO_BUFF_SETTINGS[aCategoryName]["missingColor"] == nil) then
|
|
VUHDO_BUFF_SETTINGS[aCategoryName]["missingColor"] = {
|
|
["show"] = false,
|
|
["R"] = 1, ["G"] = 1, ["B"] = 1, ["O"] = 1,
|
|
["TR"] = 1, ["TG"] = 1, ["TB"] = 1, ["TO"] = 1,
|
|
["useText"] = true, ["useBackground"] = true, ["useOpacity"] = true,
|
|
}
|
|
end
|
|
|
|
tBuffSettings = VUHDO_BUFF_SETTINGS[aCategoryName];
|
|
|
|
local tEnableCheckButton = _G[aBuffPanel:GetName() .. "EnableCheckButton"];
|
|
tEnableCheckButton:SetChecked(tBuffSettings["enabled"]);
|
|
tEnableCheckButton:SetShown(anIsPresent);
|
|
VUHDO_lnfCheckButtonClicked(tEnableCheckButton);
|
|
|
|
local tMissButton = _G[aBuffPanel:GetName() .. "MissingCheckButton"];
|
|
VUHDO_lnfSetModel(tMissButton, "VUHDO_BUFF_SETTINGS." .. aCategoryName .. ".missingColor.show");
|
|
VUHDO_lnfSetTooltip(tMissButton, VUHDO_I18N_TT.K386);
|
|
tMissButton:Hide();
|
|
tMissButton:Show();
|
|
|
|
local tMissTexture = _G[aBuffPanel:GetName() .. "MissingTexture"];
|
|
VUHDO_lnfSetModel(tMissTexture, "VUHDO_BUFF_SETTINGS." .. aCategoryName .. ".missingColor");
|
|
VUHDO_lnfSetTooltip(tMissTexture, VUHDO_I18N_TT.K385);
|
|
tMissTexture:Hide();
|
|
tMissTexture:Show();
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_buffNameAvail(aBuffName)
|
|
return VUHDO_BUFFS[aBuffName] ~= nil and aBuffName or nil;
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_getAllBuffNamesAvail(someCategoryBuffs)
|
|
local tBuffNames = { };
|
|
local tName;
|
|
|
|
for _, tVariant in ipairs(someCategoryBuffs) do
|
|
tName = tVariant[1];
|
|
if (VUHDO_BUFFS[tName] ~= nil) then
|
|
tinsert(tBuffNames, tName);
|
|
end
|
|
end
|
|
|
|
return tBuffNames;
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_setBuffBoxIcon(aGenericPanel, aBuffName)
|
|
_G[aGenericPanel:GetParent():GetName() .. "BuffTextureTexture"]
|
|
:SetTexture((VUHDO_BUFFS[aBuffName] or {})["icon"]);
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_addBuffsToCombo(aComboBox, someBuffNames, aSelectedValue, tIsEmpty)
|
|
local tEntryTable = { };
|
|
|
|
if (tIsEmpty) then
|
|
tinsert(tEntryTable, { "", "-- " .. VUHDO_I18N_EMPTY_HOTS .. " --" } );
|
|
end
|
|
|
|
for _, tBuffName in ipairs(someBuffNames) do
|
|
tinsert(tEntryTable, { tBuffName, tBuffName });
|
|
end
|
|
|
|
aComboBox:SetAttribute("combo_table", tEntryTable);
|
|
VUHDO_lnfComboInitItems(aComboBox);
|
|
VUHDO_lnfComboSetSelectedValue(aComboBox, aSelectedValue);
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_setupGenericBuffPanel(aBuffVariant, aGenericPanel, someCategoryBuffs, aCategoryName)
|
|
local tBuffTarget = aBuffVariant[2];
|
|
local tSettings = VUHDO_BUFF_SETTINGS[aCategoryName];
|
|
|
|
if (VUHDO_BUFF_TARGET_RAID == tBuffTarget or VUHDO_BUFF_TARGET_SINGLE == tBuffTarget) then
|
|
if (#someCategoryBuffs > 1) then
|
|
local tCategBuffNames = VUHDO_getAllBuffNamesAvail(someCategoryBuffs);
|
|
local tCombo = _G[aGenericPanel:GetName() .. "DedicatedComboBox"];
|
|
VUHDO_addBuffsToCombo(tCombo, tCategBuffNames, tSettings["buff"], true);
|
|
VUHDO_setBuffBoxIcon(aGenericPanel, VUHDO_comboGetSelectedBuff(tCombo));
|
|
else
|
|
local tComboBox = _G[aGenericPanel:GetName() .. "ComboBox"];
|
|
VUHDO_setComboModel(tComboBox, "VUHDO_BUFF_SETTINGS." .. aCategoryName .. ".filter", VUHDO_BUFF_FILTER_COMBO_TABLE, VUHDO_I18N_TRACK_BUFFS_FOR);
|
|
VUHDO_lnfComboBoxInitFromModel(tComboBox);
|
|
end
|
|
elseif (VUHDO_BUFF_TARGET_UNIQUE == tBuffTarget) then
|
|
if (tSettings["name"] == nil) then
|
|
tSettings["name"] = VUHDO_PLAYER_NAME;
|
|
end
|
|
|
|
local tEditBox = _G[aGenericPanel:GetName() .. "PlayerNameEditBox"];
|
|
tEditBox:SetText(tSettings["name"]);
|
|
else -- Aura, Totem, own group, self
|
|
if (tSettings["buff"] == nil) then
|
|
tSettings["buff"] = VUHDO_buffNameAvail(aBuffVariant[1]);
|
|
end
|
|
|
|
if (#someCategoryBuffs > 1) then
|
|
local tCategBuffNames = VUHDO_getAllBuffNamesAvail(someCategoryBuffs);
|
|
local tCombo = _G[aGenericPanel:GetName() .. "DedicatedComboBox"];
|
|
VUHDO_addBuffsToCombo(tCombo, tCategBuffNames, tSettings["buff"], true);
|
|
VUHDO_setBuffBoxIcon(aGenericPanel, VUHDO_comboGetSelectedBuff(tCombo));
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--
|
|
local function VUHDO_buildBuffSetupGenericPanel(aCategoryName, someCategoryBuffs)
|
|
local tTargetType;
|
|
local tVariant;
|
|
local tBuffPanel;
|
|
local tGenericPanel;
|
|
local tPanelTemplate;
|
|
local tIsPresent;
|
|
|
|
local tKnownVariants = VUHDO_getAllBuffNamesAvail(someCategoryBuffs);
|
|
|
|
local tVariant = nil;
|
|
if (#tKnownVariants > 0) then
|
|
tVariant = VUHDO_getBuffInfoForName(tKnownVariants[1], aCategoryName);
|
|
tIsPresent = true;
|
|
else
|
|
tIsPresent = false;
|
|
end
|
|
|
|
if (tVariant == nil) then
|
|
tVariant = someCategoryBuffs[1];
|
|
end
|
|
|
|
tTargetType = tVariant[2];
|
|
|
|
if (VUHDO_BUFF_TARGET_UNIQUE == tTargetType) then
|
|
-- add player name panel
|
|
tPanelTemplate = "VuhDoBuffSetupUniqueSingleTargetPanelTemplate";
|
|
elseif (VUHDO_BUFF_TARGET_RAID == tTargetType or VUHDO_BUFF_TARGET_SINGLE == tTargetType) then
|
|
if (#someCategoryBuffs > 1) then
|
|
-- add Combo-Box having all spells
|
|
tPanelTemplate = "VuhDoBuffSetupDedicatedPanelTemplate";
|
|
else
|
|
tPanelTemplate = "VuhDoBuffSetupFilterTemplate";
|
|
end
|
|
else -- Totem, own group, self
|
|
-- If more than one mutual exclusive
|
|
if (#someCategoryBuffs > 1) then
|
|
-- add Combo-Box having all spells
|
|
tPanelTemplate = "VuhDoBuffSetupDedicatedPanelTemplate";
|
|
else
|
|
-- add basic panel only (only en-/disable)
|
|
tPanelTemplate = nil;
|
|
end
|
|
end
|
|
|
|
tBuffPanel, tGenericPanel = VUHDO_addGenericBuffFrame(tVariant, tPanelTemplate, aCategoryName, tIsPresent);
|
|
VUHDO_setupStaticBuffPanel(aCategoryName, tBuffPanel, tIsPresent);
|
|
VUHDO_setupGenericBuffPanel(tVariant, tGenericPanel, someCategoryBuffs, aCategoryName);
|
|
|
|
return tBuffPanel, tGenericPanel;
|
|
end
|
|
|
|
|
|
|
|
--
|
|
function VUHDO_buildAllBuffSetupGenerericPanel()
|
|
local tBuffPanel = nil;
|
|
local tCurPanel;
|
|
local tIndex;
|
|
|
|
VUHDO_BUFF_PANEL_X = VUHDO_PANEL_INSET_X;
|
|
VUHDO_BUFF_PANEL_Y = VUHDO_PANEL_INSET_Y;
|
|
VUHDO_BUFF_PANEL_WIDTH = 0;
|
|
VUHDO_BUFF_PANEL_HEIGHT = 0;
|
|
|
|
tIndex = 0;
|
|
for _, _ in pairs(VUHDO_getPlayerClassBuffs()) do
|
|
for tCategoryName, tAllCategoryBuffs in pairs(VUHDO_getPlayerClassBuffs()) do
|
|
local tNumber = VUHDO_BUFF_ORDER[tCategoryName];
|
|
if (tNumber == tIndex + 1) then
|
|
tIndex = tIndex + 1;
|
|
tCurPanel, _ = VUHDO_buildBuffSetupGenericPanel(tCategoryName, tAllCategoryBuffs);
|
|
if (tBuffPanel == nil) then
|
|
tBuffPanel = tCurPanel;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if (tBuffPanel == nil) then
|
|
return;
|
|
end
|
|
|
|
local tWidth = VUHDO_BUFF_PANEL_WIDTH + tBuffPanel:GetWidth();
|
|
local tScale = 528 / tWidth;
|
|
|
|
if (tScale < 1) then
|
|
VuhDoNewOptionsBuffsGeneric:SetScale(tScale);
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--
|
|
function VUHDO_buffWatchSetupDedicatedChanged(aComboBox, aValue)
|
|
if (aValue ~= aComboBox:GetAttribute("selected_value")) then
|
|
aComboBox:SetAttribute("selected_value", aValue);
|
|
VUHDO_buffChanged(aComboBox);
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--
|
|
function VUHDO_buffWatchSetupFilterChanged(aComboBox, aValue, anArrayModel)
|
|
if (aValue ~= nil) then
|
|
if (VUHDO_ID_ALL == aValue) then
|
|
table.wipe(anArrayModel);
|
|
anArrayModel[VUHDO_ID_ALL] = true;
|
|
else
|
|
anArrayModel[VUHDO_ID_ALL] = nil;
|
|
end
|
|
VUHDO_lnfComboSetSelectedValue(aComboBox, nil);
|
|
VUHDO_updateBuffRaidGroup();
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--
|
|
function VUHDO_comboGetSelectedBuff(aComboBox)
|
|
if (aComboBox == nil) then
|
|
return "";
|
|
else
|
|
return aComboBox:GetAttribute("selected_value");
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--
|
|
function VUHDO_buffUpButtonClicked(aButton)
|
|
local tCategName = strsub(aButton:GetParent():GetName(), 20);
|
|
local tIndex = nil;
|
|
local tPreIndex = nil;
|
|
|
|
for tCategSpec, tNumber in pairs(VUHDO_BUFF_ORDER) do
|
|
if (strfind(tCategSpec, tCategName, 1, true)) then
|
|
tIndex = tCategSpec;
|
|
break;
|
|
end
|
|
end
|
|
|
|
local tPredec = -1;
|
|
local tCurrOrder = VUHDO_BUFF_ORDER[tIndex];
|
|
if (tIndex ~= nil) then
|
|
for tCategSpec, tNumber in pairs(VUHDO_BUFF_ORDER) do
|
|
if (tNumber > tPredec and tNumber < tCurrOrder) then
|
|
tPredec = tNumber;
|
|
tPreIndex = tCategSpec;
|
|
end
|
|
end
|
|
end
|
|
|
|
if (tPredec > 0) then
|
|
VUHDO_BUFF_ORDER[tPreIndex] = tCurrOrder;
|
|
VUHDO_BUFF_ORDER[tIndex] = tPredec;
|
|
end
|
|
|
|
VUHDO_buildAllBuffSetupGenerericPanel();
|
|
VUHDO_buffSetupStoreSettings();
|
|
end
|
|
|
|
|
|
|
|
--
|
|
function VUHDO_buffDownButtonClicked(aButton)
|
|
local tCategName = strsub(aButton:GetParent():GetName(), 20);
|
|
local tIndex = nil;
|
|
local tPreIndex = nil;
|
|
|
|
for tCategSpec, tNumber in pairs(VUHDO_BUFF_ORDER) do
|
|
if (strfind(tCategSpec, tCategName, 1, true)) then
|
|
tIndex = tCategSpec;
|
|
break;
|
|
end
|
|
end
|
|
|
|
local tPredec = 1000;
|
|
local tCurrOrder = VUHDO_BUFF_ORDER[tIndex];
|
|
if (tIndex ~= nil) then
|
|
for tCategSpec, tNumber in pairs(VUHDO_BUFF_ORDER) do
|
|
if (tNumber < tPredec and tNumber > tCurrOrder) then
|
|
tPredec = tNumber;
|
|
tPreIndex = tCategSpec;
|
|
end
|
|
end
|
|
end
|
|
|
|
if (tPredec < 1000) then
|
|
VUHDO_BUFF_ORDER[tPreIndex] = tCurrOrder;
|
|
VUHDO_BUFF_ORDER[tIndex] = tPredec;
|
|
end
|
|
|
|
VUHDO_buildAllBuffSetupGenerericPanel();
|
|
VUHDO_buffSetupStoreSettings();
|
|
end
|
|
|
|
|