mirror of
https://github.com/Blaststar/Questie-Octo-Vanilla.git
synced 2026-10-27 07:30:49 +00:00
431 lines
14 KiB
Lua
431 lines
14 KiB
Lua
-- Constants
|
|
TITAN_PANEL_UPDATE_BUTTON = 1;
|
|
TITAN_PANEL_UPDATE_TOOLTIP = 2;
|
|
TITAN_PANEL_UPDATE_ALL = 3;
|
|
TITAN_PANEL_LABEL_SEPARATOR = " "
|
|
|
|
TITAN_PANEL_BUTTON_TYPE_TEXT = 1;
|
|
TITAN_PANEL_BUTTON_TYPE_ICON = 2;
|
|
TITAN_PANEL_BUTTON_TYPE_COMBO = 3;
|
|
TITAN_PANEL_BUTTON_TYPE_CUSTOM = 4;
|
|
|
|
function TitanOptionSlider_TooltipText(text, value)
|
|
return text .. GREEN_FONT_COLOR_CODE .. value .. FONT_COLOR_CODE_CLOSE;
|
|
end
|
|
|
|
function TitanPanelButton_OnLoad(isChildButton)
|
|
if (isChildButton) then
|
|
this:RegisterForClicks("LeftButtonUp", "RightButtonUp");
|
|
else
|
|
TitanUtils_RegisterPlugin(this.registry);
|
|
local plugin = TitanUtils_GetPlugin();
|
|
if (plugin) then
|
|
this:RegisterForClicks("LeftButtonUp", "RightButtonUp");
|
|
local frequency = plugin.frequency;
|
|
if (frequency and frequency > 0) then
|
|
this.timer = 0;
|
|
this.frequency = frequency;
|
|
this.updateType = plugin.updateType;
|
|
if (not this.updateType) then
|
|
this.updateType = TITAN_PANEL_UPDATE_ALL;
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function TitanPanelButton_OnShow()
|
|
local id = TitanUtils_GetButtonID();
|
|
if (id) then
|
|
TitanPanelButton_UpdateButton(id, 1);
|
|
end
|
|
end
|
|
|
|
function TitanPanelButton_OnClick(button, isChildButton)
|
|
local id = TitanUtils_Ternary(isChildButton, TitanUtils_GetParentButtonID(), TitanUtils_GetButtonID());
|
|
|
|
if (id) then
|
|
local controlFrame = TitanUtils_GetControlFrame(id);
|
|
local rightClickMenu = getglobal("TitanPanelRightClickMenu");
|
|
|
|
if (button == "LeftButton") then
|
|
local isControlFrameShown;
|
|
if (not controlFrame) then
|
|
isControlFrameShown = false;
|
|
elseif (controlFrame:IsVisible()) then
|
|
isControlFrameShown = false;
|
|
else
|
|
isControlFrameShown = true;
|
|
end
|
|
|
|
TitanUtils_CloseAllControlFrames();
|
|
TitanPanelRightClickMenu_Close();
|
|
|
|
local position = TitanPanelGetVar("Position");
|
|
local scale = TitanPanelGetVar("Scale");
|
|
if (isControlFrameShown) then
|
|
local buttonCenter = (this:GetLeft() + this:GetRight()) / 2 * scale;
|
|
local controlFrameRight = buttonCenter + controlFrame:GetWidth() / 2;
|
|
if ( position == TITAN_PANEL_PLACE_TOP ) then
|
|
controlFrame:ClearAllPoints();
|
|
controlFrame:SetPoint("TOP", "UIParent", "TOPLEFT", buttonCenter, -24 * scale);
|
|
|
|
-- Adjust control frame position if it's off the screen
|
|
local offscreenX, offscreenY = TitanUtils_GetOffscreen(controlFrame);
|
|
if ( offscreenX == -1 ) then
|
|
controlFrame:ClearAllPoints();
|
|
controlFrame:SetPoint("TOPLEFT", "UIParent", "TOPLEFT", 0, -24 * scale);
|
|
elseif ( offscreenX == 1 ) then
|
|
controlFrame:ClearAllPoints();
|
|
controlFrame:SetPoint("TOPRIGHT", "UIParent", "TOPRIGHT", 0, -24 * scale);
|
|
end
|
|
else
|
|
controlFrame:ClearAllPoints();
|
|
controlFrame:SetPoint("BOTTOM", "UIParent", "BOTTOMLEFT", buttonCenter, 24 * scale);
|
|
|
|
-- Adjust control frame position if it's off the screen
|
|
local offscreenX, offscreenY = TitanUtils_GetOffscreen(controlFrame);
|
|
if ( offscreenX == -1 ) then
|
|
controlFrame:ClearAllPoints();
|
|
controlFrame:SetPoint("BOTTOMLEFT", "UIParent", "BOTTOMLEFT", 0, 24 * scale);
|
|
elseif ( offscreenX == 1 ) then
|
|
controlFrame:ClearAllPoints();
|
|
controlFrame:SetPoint("BOTTOMRIGHT", "UIParent", "BOTTOMRIGHT", 0, 24 * scale);
|
|
end
|
|
end
|
|
|
|
controlFrame:Show();
|
|
end
|
|
elseif (button == "RightButton") then
|
|
TitanUtils_CloseAllControlFrames();
|
|
|
|
-- Show RightClickMenu anyway
|
|
if (TitanPanelRightClickMenu_IsVisible()) then
|
|
TitanPanelRightClickMenu_Close();
|
|
end
|
|
TitanPanelRightClickMenu_Toggle();
|
|
end
|
|
|
|
GameTooltip:Hide();
|
|
end
|
|
end
|
|
|
|
function TitanPanelButton_OnUpdate(elapsed)
|
|
local id = TitanUtils_GetButtonID();
|
|
|
|
if (id) then
|
|
if (this.frequency) then
|
|
local timeLeft = this.timer - elapsed;
|
|
if (timeLeft <= 0) then
|
|
this.timer = this.frequency;
|
|
if (this.updateType == TITAN_PANEL_UPDATE_ALL or
|
|
this.updateType == TITAN_PANEL_UPDATE_BUTTON) then
|
|
TitanPanelButton_UpdateButton(id);
|
|
end
|
|
if (this.updateType == TITAN_PANEL_UPDATE_ALL or
|
|
this.updateType == TITAN_PANEL_UPDATE_TOOLTIP) then
|
|
TitanPanelButton_UpdateTooltip();
|
|
end
|
|
else
|
|
this.timer = timeLeft;
|
|
end
|
|
end
|
|
end
|
|
if TITAN_PANEL_MOVING == 3 then
|
|
TITAN_PANEL_MOVING = 0;
|
|
|
|
local dropoff = TitanUtils_GetCurrentIndex(TitanPanelSettings.Buttons,TITAN_PANEL_DROPOFF_ADDON);
|
|
local pickup = TitanUtils_GetCurrentIndex(TitanPanelSettings.Buttons,TITAN_PANEL_MOVE_ADDON);
|
|
local dropoffbar = TitanUtils_GetWhichBar(TITAN_PANEL_DROPOFF_ADDON);
|
|
local side = TitanPanel_GetPluginSide(TITAN_PANEL_DROPOFF_ADDON);
|
|
local nextaddon = TitanUtils_GetNextButtonOnBar(dropoffbar,TITAN_PANEL_DROPOFF_ADDON,side);
|
|
|
|
if dropoff ~= nil then
|
|
if dropoff < pickup then
|
|
table.remove(TitanPanelSettings.Buttons, pickup);
|
|
table.remove(TitanPanelSettings.Location, pickup);
|
|
table.insert(TitanPanelSettings.Buttons, dropoff ,TITAN_PANEL_MOVE_ADDON);
|
|
table.insert(TitanPanelSettings.Location, dropoff ,dropoffbar);
|
|
|
|
else
|
|
table.insert(TitanPanelSettings.Buttons, dropoff ,TITAN_PANEL_MOVE_ADDON);
|
|
table.insert(TitanPanelSettings.Location, dropoff ,dropoffbar);
|
|
table.remove(TitanPanelSettings.Buttons, pickup);
|
|
table.remove(TitanPanelSettings.Location, pickup);
|
|
end
|
|
TitanPanel_InitPanelButtons();
|
|
TITAN_PANEL_MOVE_ADDON = nil;
|
|
TITAN_PANEL_DROPOFF_ADDON = nil;
|
|
TITAN_PANEL_NEXT_ADDON = nil;
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
function TitanPanelButton_OnEnter(isChildButton)
|
|
local id = TitanUtils_Ternary(isChildButton, TitanUtils_GetParentButtonID(), TitanUtils_GetButtonID());
|
|
|
|
if (id) then
|
|
TitanUtils_StopAutoHideCounting(this:GetName());
|
|
local controlFrame = TitanUtils_GetControlFrame(id);
|
|
if (controlFrame and controlFrame:IsVisible()) then
|
|
return;
|
|
elseif (TitanPanelRightClickMenu_IsVisible()) then
|
|
return;
|
|
else
|
|
TitanPanelButton_SetTooltip(id);
|
|
end
|
|
end
|
|
end
|
|
|
|
function TitanPanelButton_OnLeave(isChildButton)
|
|
local id = TitanUtils_Ternary(isChildButton, TitanUtils_GetParentButtonID(), TitanUtils_GetButtonID());
|
|
|
|
if (id) then
|
|
TitanUtils_StartAutoHideCounting();
|
|
GameTooltip:Hide();
|
|
end
|
|
end
|
|
|
|
function TitanPanelButton_UpdateButton(id, setButtonWidth)
|
|
local button, id = TitanUtils_GetButton(id, true);
|
|
|
|
if ( TitanPanelButton_IsText(id) ) then
|
|
-- Update textButton
|
|
TitanPanelButton_SetButtonText(id);
|
|
TitanPanelButton_SetTextButtonWidth(id, setButtonWidth);
|
|
|
|
elseif ( TitanPanelButton_IsIcon(id) ) then
|
|
-- Update iconButton
|
|
TitanPanelButton_SetButtonIcon(id);
|
|
TitanPanelButton_SetIconButtonWidth(id);
|
|
|
|
elseif ( TitanPanelButton_IsCombo(id) ) then
|
|
-- Update comboButton
|
|
TitanPanelButton_SetButtonText(id);
|
|
TitanPanelButton_SetButtonIcon(id);
|
|
TitanPanelButton_SetComboButtonWidth(id, setButtonWidth);
|
|
end
|
|
end
|
|
|
|
function TitanPanelButton_UpdateTooltip()
|
|
if (GameTooltip:IsOwned(this)) then
|
|
local id = TitanUtils_GetButtonID();
|
|
TitanPanelButton_SetTooltip(id);
|
|
end
|
|
end
|
|
|
|
-- id is required
|
|
function TitanPanelButton_SetButtonText(id)
|
|
if (id and TitanUtils_IsPluginRegistered(id)) then
|
|
local button = TitanUtils_GetButton(id);
|
|
local buttonText = getglobal(button:GetName().."Text");
|
|
local buttonTextFunction = getglobal(TitanUtils_GetPlugin(id).buttonTextFunction);
|
|
if (buttonTextFunction) then
|
|
local label1, value1, label2, value2, label3, value3, label4, value4 = buttonTextFunction(id);
|
|
local text = "";
|
|
if ( label1 and not ( label2 or label3 or label4 or value1 or value2 or value3 or value4 ) ) then
|
|
text = label1;
|
|
elseif (TitanGetVar(id, "ShowLabelText")) then
|
|
if (label1 or value1) then
|
|
text = TitanUtils_ToString(label1)..TitanUtils_ToString(value1);
|
|
if (label2 or value2) then
|
|
text = text..TITAN_PANEL_LABEL_SEPARATOR..TitanUtils_ToString(label2)..TitanUtils_ToString(value2);
|
|
if (label3 or value3) then
|
|
text = text..TITAN_PANEL_LABEL_SEPARATOR..TitanUtils_ToString(label3)..TitanUtils_ToString(value3);
|
|
if (label4 or value4) then
|
|
text = text..TITAN_PANEL_LABEL_SEPARATOR..TitanUtils_ToString(label4)..TitanUtils_ToString(value4);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if (value1) then
|
|
text = TitanUtils_ToString(value1);
|
|
if (value2) then
|
|
text = text..TITAN_PANEL_LABEL_SEPARATOR..TitanUtils_ToString(value2);
|
|
if (value3) then
|
|
text = text..TITAN_PANEL_LABEL_SEPARATOR..TitanUtils_ToString(value3);
|
|
if (value4) then
|
|
text = text..TITAN_PANEL_LABEL_SEPARATOR..TitanUtils_ToString(value4);
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
buttonText:SetText(text);
|
|
end
|
|
end
|
|
end
|
|
|
|
-- id is required
|
|
function TitanPanelButton_SetButtonIcon(id)
|
|
if (id and TitanUtils_IsPluginRegistered(id)) then
|
|
local button = TitanUtils_GetButton(id);
|
|
local icon = getglobal(button:GetName().."Icon");
|
|
local iconTexture = TitanUtils_GetPlugin(id).icon;
|
|
local iconWidth = TitanUtils_GetPlugin(id).iconWidth;
|
|
|
|
if (iconTexture) then
|
|
icon:SetTexture(iconTexture);
|
|
end
|
|
if (iconWidth) then
|
|
icon:SetWidth(iconWidth);
|
|
end
|
|
end
|
|
end
|
|
|
|
-- id is required
|
|
function TitanPanelButton_SetTextButtonWidth(id, setButtonWidth)
|
|
if (id) then
|
|
local button = TitanUtils_GetButton(id);
|
|
local text = getglobal(button:GetName().."Text");
|
|
if ( setButtonWidth or
|
|
button:GetWidth() == 0 or
|
|
button:GetWidth() - text:GetWidth() > TITAN_PANEL_BUTTON_WIDTH_CHANGE_TOLERANCE or
|
|
button:GetWidth() - text:GetWidth() < -TITAN_PANEL_BUTTON_WIDTH_CHANGE_TOLERANCE ) then
|
|
button:SetWidth(text:GetWidth());
|
|
TitanPanelButton_Justify();
|
|
end
|
|
end
|
|
end
|
|
|
|
-- id is required
|
|
function TitanPanelButton_SetIconButtonWidth(id)
|
|
if (id) then
|
|
local button = TitanUtils_GetButton(id);
|
|
local icon = getglobal(button:GetName().."Icon");
|
|
if ( TitanUtils_GetPlugin(id).iconButtonWidth ) then
|
|
button:SetWidth(TitanUtils_GetPlugin(id).iconButtonWidth);
|
|
end
|
|
end
|
|
end
|
|
|
|
-- id is required
|
|
function TitanPanelButton_SetComboButtonWidth(id, setButtonWidth)
|
|
if (id) then
|
|
local button = TitanUtils_GetButton(id);
|
|
local text = getglobal(button:GetName().."Text");
|
|
local icon = getglobal(button:GetName().."Icon");
|
|
local iconWidth, iconButtonWidth, newButtonWidth;
|
|
|
|
-- Get icon button width
|
|
iconButtonWidth = 0;
|
|
if ( TitanUtils_GetPlugin(id).iconButtonWidth ) then
|
|
iconButtonWidth = TitanUtils_GetPlugin(id).iconButtonWidth;
|
|
elseif ( icon:GetWidth() ) then
|
|
iconButtonWidth = icon:GetWidth();
|
|
end
|
|
|
|
if ( TitanGetVar(id, "ShowIcon") and ( iconButtonWidth ~= 0 ) ) then
|
|
icon:Show();
|
|
text:ClearAllPoints();
|
|
text:SetPoint("LEFT", icon:GetName(), "RIGHT", 2, 1);
|
|
|
|
newButtonWidth = text:GetWidth() + iconButtonWidth + 2;
|
|
else
|
|
icon:Hide();
|
|
text:ClearAllPoints();
|
|
text:SetPoint("LEFT", button:GetName(), "Left", 0, 1);
|
|
|
|
newButtonWidth = text:GetWidth();
|
|
end
|
|
|
|
if ( setButtonWidth or
|
|
button:GetWidth() == 0 or
|
|
button:GetWidth() - newButtonWidth > TITAN_PANEL_BUTTON_WIDTH_CHANGE_TOLERANCE or
|
|
button:GetWidth() - newButtonWidth < -TITAN_PANEL_BUTTON_WIDTH_CHANGE_TOLERANCE ) then
|
|
button:SetWidth(newButtonWidth);
|
|
TitanPanelButton_Justify();
|
|
end
|
|
end
|
|
end
|
|
|
|
-- id is required
|
|
function TitanPanelButton_SetTooltip(id)
|
|
if (id and TitanUtils_IsPluginRegistered(id)) then
|
|
local plugin = TitanUtils_GetPlugin(id);
|
|
if ( plugin.tooltipCustomFunction ) then
|
|
this.tooltipCustomFunction = plugin.tooltipCustomFunction;
|
|
TitanTooltip_SetPanelTooltip(id);
|
|
elseif ( plugin.tooltipTitle ) then
|
|
this.tooltipTitle = plugin.tooltipTitle;
|
|
local tooltipTextFunc = getglobal(plugin.tooltipTextFunction);
|
|
if ( tooltipTextFunc ) then
|
|
this.tooltipText = tooltipTextFunc();
|
|
end
|
|
TitanTooltip_SetPanelTooltip(id);
|
|
end
|
|
end
|
|
end
|
|
|
|
function TitanPanelButton_GetType(id)
|
|
-- id is required
|
|
if (not id) then
|
|
return;
|
|
end
|
|
|
|
local button = TitanUtils_GetButton(id);
|
|
local type;
|
|
if button then
|
|
local text = getglobal(button:GetName().."Text");
|
|
local icon = getglobal(button:GetName().."Icon");
|
|
|
|
if (text and icon) then
|
|
type = TITAN_PANEL_BUTTON_TYPE_COMBO;
|
|
elseif (text and not icon) then
|
|
type = TITAN_PANEL_BUTTON_TYPE_TEXT;
|
|
elseif (not text and icon) then
|
|
type = TITAN_PANEL_BUTTON_TYPE_ICON;
|
|
elseif (not text and not icon) then
|
|
type = TITAN_PANEL_BUTTON_TYPE_CUSTOM;
|
|
end
|
|
else
|
|
type = TITAN_PANEL_BUTTON_TYPE_COMBO;
|
|
end
|
|
|
|
return type;
|
|
end
|
|
|
|
function TitanPanelButton_IsText(id)
|
|
if (TitanPanelButton_GetType(id) == TITAN_PANEL_BUTTON_TYPE_TEXT) then
|
|
return 1;
|
|
end
|
|
end
|
|
|
|
function TitanPanelButton_IsIcon(id)
|
|
if (TitanPanelButton_GetType(id) == TITAN_PANEL_BUTTON_TYPE_ICON) then
|
|
return 1;
|
|
end
|
|
end
|
|
|
|
function TitanPanelButton_IsCombo(id)
|
|
if (TitanPanelButton_GetType(id) == TITAN_PANEL_BUTTON_TYPE_COMBO) then
|
|
return 1;
|
|
end
|
|
end
|
|
|
|
function TitanPanelButton_IsCustom(id)
|
|
if (TitanPanelButton_GetType(id) == TITAN_PANEL_BUTTON_TYPE_CUSTOM) then
|
|
return 1;
|
|
end
|
|
end
|
|
|
|
function TitanPanelButton_OnMouseDown(button)
|
|
local frname = getglobal("TitanPanel" .. TitanUtils_GetButtonID() .. "Button");
|
|
if( button == "LeftButton" and IsShiftKeyDown() ) then
|
|
--frname:StartMoving();
|
|
--frname.isMoving = true;
|
|
TITAN_PANEL_MOVE_ADDON = TitanUtils_GetButtonID();
|
|
TITAN_PANEL_MOVING = 1;
|
|
end
|
|
end
|
|
|
|
function TitanPanelButton_OnMouseUp(button)
|
|
local frname = getglobal("TitanPanel" .. TitanUtils_GetButtonID() .. "Button");
|
|
if( button == "LeftButton" and TITAN_PANEL_MOVING == 1 ) then
|
|
--frname:StopMovingOrSizing();
|
|
--frname.isMoving = false;
|
|
TITAN_PANEL_MOVING = 2;
|
|
end
|
|
end |