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.
339 lines
8.7 KiB
339 lines
8.7 KiB
|
2 years ago
|
local _;
|
||
|
|
local selectedIdx = 1;
|
||
|
|
local tIsAssignmentPending = false;
|
||
|
|
local VUHDO_FRAMES = { };
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local function VUHDO_setHint(aText)
|
||
|
|
VuhDoNewOptionsSpellKeysLocalHintLabelLabel:SetText(aText or "");
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_updateEditButton(aFrame)
|
||
|
|
local tEditBox = _G[aFrame:GetName() .. "EditBox"];
|
||
|
|
|
||
|
|
local tEditButton = _G[aFrame:GetName() .. "EditButton"];
|
||
|
|
local _, _, _, _, tType = VUHDO_isActionValid(tEditBox:GetText(), true);
|
||
|
|
if ("CUS" == tType) then
|
||
|
|
tEditButton:Show();
|
||
|
|
else
|
||
|
|
tEditButton:Hide();
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
local function VUHDO_setAssignButtonText(aButton, aBinding)
|
||
|
|
if (aBinding ~= nil) then
|
||
|
|
aButton:SetText(GetBindingText(aBinding, "KEY_"));
|
||
|
|
else
|
||
|
|
aButton:SetText(NOT_BOUND);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local function VUHDO_addKeyboardMacroSlot(aScrollPanel, anIndex, someDefs)
|
||
|
|
local tName = aScrollPanel:GetName() .. "E" .. anIndex;
|
||
|
|
if (_G[tName] == nil) then
|
||
|
|
tinsert(VUHDO_FRAMES, CreateFrame("Frame", tName, aScrollPanel, "VuhDoInternalMacroSlotContainer"));
|
||
|
|
end
|
||
|
|
local tFrame = _G[tName];
|
||
|
|
tFrame:Show();
|
||
|
|
tFrame:SetAttribute("list_index", anIndex);
|
||
|
|
tFrame:SetPoint("TOPLEFT", aScrollPanel:GetName(), "TOPLEFT", 5, -(anIndex - 1) * tFrame:GetHeight() - 7);
|
||
|
|
|
||
|
|
local tEditBox = _G[tFrame:GetName() .. "EditBox"];
|
||
|
|
VUHDO_lnfSetModel(tEditBox, "VUHDO_SPELLS_KEYBOARD.INTERNAL.##" .. anIndex .. ".##1");
|
||
|
|
VUHDO_lnfEditBoxInitFromModel(tEditBox);
|
||
|
|
|
||
|
|
local tButton = _G[tFrame:GetName() .. "Assignment1Button"];
|
||
|
|
local tBinding = VUHDO_SPELLS_KEYBOARD["INTERNAL"][anIndex][2];
|
||
|
|
VUHDO_setAssignButtonText(tButton, tBinding)
|
||
|
|
|
||
|
|
if (anIndex == selectedIdx) then
|
||
|
|
tFrame:SetBackdropColor(0.8, 0.8, 1, 1);
|
||
|
|
tEditBox:SetFocus();
|
||
|
|
else
|
||
|
|
tFrame:SetBackdropColor(1, 1, 1, 1);
|
||
|
|
end
|
||
|
|
|
||
|
|
return tFrame;
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_keyboardlocalSpellsScrollPanelOnShow(aScrollPanel)
|
||
|
|
|
||
|
|
local tFrame = nil;
|
||
|
|
|
||
|
|
for _, tFrame in pairs(VUHDO_FRAMES) do
|
||
|
|
tFrame:Hide();
|
||
|
|
end
|
||
|
|
|
||
|
|
for tIndex, tDefs in ipairs(VUHDO_SPELLS_KEYBOARD["INTERNAL"]) do
|
||
|
|
tFrame = VUHDO_addKeyboardMacroSlot(aScrollPanel, tIndex, tDefs);
|
||
|
|
end
|
||
|
|
|
||
|
|
if (tFrame ~= nil) then
|
||
|
|
aScrollPanel:SetHeight((#VUHDO_SPELLS_KEYBOARD["INTERNAL"] + 1) * tFrame:GetHeight() + 18);
|
||
|
|
end
|
||
|
|
|
||
|
|
VUHDO_setHint("");
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_newOptionsKeyLocalSelectItem(aFrame)
|
||
|
|
if (not tIsAssignmentPending) then
|
||
|
|
selectedIdx = aFrame:GetAttribute("list_index");
|
||
|
|
VUHDO_keyboardlocalSpellsScrollPanelOnShow(aFrame:GetParent());
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
--------------------------------------------------------------------------
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_setOriginalType(aFrame)
|
||
|
|
local tEditBox = _G[aFrame:GetName() .. "EditBox"];
|
||
|
|
aFrame["originalName"] = tEditBox:GetText();
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
local tOldFrame = nil;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
local function VUHDO_yesNoDeleteCustomMacroCallback(aDecision)
|
||
|
|
local tIndex = tOldFrame:GetAttribute("list_index");
|
||
|
|
if (VUHDO_YES == aDecision) then
|
||
|
|
VUHDO_SPELLS_KEYBOARD["INTERNAL"][tIndex][3] = nil;
|
||
|
|
VUHDO_setHint(VUHDO_I18N_LKA_CUSTOM_MACRO_DISCARDED);
|
||
|
|
else
|
||
|
|
VUHDO_SPELLS_KEYBOARD["INTERNAL"][tIndex][1] = tOldFrame["originalName"];
|
||
|
|
local tEditBox = _G[tOldFrame:GetName() .. "EditBox"];
|
||
|
|
VUHDO_lnfEditBoxInitFromModel(tEditBox);
|
||
|
|
VUHDO_setHint(VUHDO_I18N_NAME_CHANGE_DISCARDED);
|
||
|
|
end
|
||
|
|
tOldFrame = nil;
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_checkTypeChange(aFrame)
|
||
|
|
local _, _, _, _, tOrigType = VUHDO_isActionValid(aFrame["originalName"], true);
|
||
|
|
tIndex = aFrame:GetAttribute("list_index");
|
||
|
|
if ("CUS" == tOrigType and (VUHDO_SPELLS_KEYBOARD["INTERNAL"][tIndex] ~= nil and VUHDO_SPELLS_KEYBOARD["INTERNAL"][tIndex][3] or "") ~= "") then
|
||
|
|
local tEditBox = _G[aFrame:GetName() .. "EditBox"];
|
||
|
|
local _, _, _, _, tNewType = VUHDO_isActionValid(tEditBox:GetText(), true);
|
||
|
|
if (tNewType ~= "CUS") then
|
||
|
|
if (tOldFrame == nil) then
|
||
|
|
tOldFrame = aFrame;
|
||
|
|
end
|
||
|
|
VuhDoYesNoFrameText:SetText(VUHDO_I18N_LKA_TYPE_CHANGED);
|
||
|
|
VuhDoYesNoFrame:SetAttribute("callback", VUHDO_yesNoDeleteCustomMacroCallback);
|
||
|
|
VuhDoYesNoFrame:Show();
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
local tAssignIndex;
|
||
|
|
local tAssignButton = nil;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_spellsKeysLocalStopAssignment()
|
||
|
|
if (tAssignButton ~= nil) then
|
||
|
|
VUHDO_UIFrameFlashStop(tAssignButton);
|
||
|
|
end
|
||
|
|
tIsAssignmentPending = false;
|
||
|
|
VuhDoNewOptionsSpellKeysLocalPanelClearBindingButton:SetAlpha(0.5);
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_spellsKeysLocalStartAssignment(aButton)
|
||
|
|
if (tIsAssignmentPending) then
|
||
|
|
VUHDO_spellsKeysLocalStopAssignment();
|
||
|
|
VUHDO_setHint(VUHDO_I18N_ASSIGN_ABORTED);
|
||
|
|
return;
|
||
|
|
end
|
||
|
|
|
||
|
|
VUHDO_spellsKeysLocalStopAssignment();
|
||
|
|
|
||
|
|
tIsAssignmentPending = true;
|
||
|
|
tAssignButton = aButton;
|
||
|
|
tAssignIndex = aButton:GetParent():GetAttribute("list_index");
|
||
|
|
VUHDO_UIFrameFlash(aButton, 0.3, 0.3, 10000, true, 0.2, 0);
|
||
|
|
VuhDoNewOptionsSpellKeysLocalPanelClearBindingButton:SetAlpha(1);
|
||
|
|
VUHDO_setHint(VUHDO_I18N_LKA_PRESS_ASSIGN_KEY);
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
local function VUHDO_removeKeyFromList(aKey)
|
||
|
|
local tResult = nil;
|
||
|
|
for tIndex, tEntries in pairs(VUHDO_SPELLS_KEYBOARD["INTERNAL"]) do
|
||
|
|
if (tEntries[2] == aKey) then
|
||
|
|
tEntries[2] = nil;
|
||
|
|
tResult = tEntries[1];
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local tButton;
|
||
|
|
for _, tFrame in pairs(VUHDO_FRAMES) do
|
||
|
|
tButton = _G[tFrame:GetName() .. "Assignment1Button"];
|
||
|
|
if (tButton:GetText() == GetBindingText(aKey, "KEY_")) then
|
||
|
|
VUHDO_setAssignButtonText(tButton, nil);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
return tResult;
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_spellsKeysLocalAssignKey(self, aKey)
|
||
|
|
|
||
|
|
if (not tIsAssignmentPending) then
|
||
|
|
return;
|
||
|
|
end
|
||
|
|
|
||
|
|
if (aKey == "LSHIFT" or aKey == "RSHIFT"
|
||
|
|
or aKey == "LCTRL" or aKey == "RCTRL"
|
||
|
|
or aKey == "LALT" or aKey == "RALT"
|
||
|
|
or aKey == "UNKNOWN") then
|
||
|
|
|
||
|
|
return;
|
||
|
|
end
|
||
|
|
if (IsShiftKeyDown()) then
|
||
|
|
aKey = "SHIFT-"..aKey;
|
||
|
|
end
|
||
|
|
|
||
|
|
if (IsControlKeyDown()) then
|
||
|
|
aKey = "CTRL-" .. aKey;
|
||
|
|
end
|
||
|
|
|
||
|
|
if (IsAltKeyDown()) then
|
||
|
|
aKey = "ALT-" .. aKey;
|
||
|
|
end
|
||
|
|
|
||
|
|
local tIsSameKey = VUHDO_SPELLS_KEYBOARD["INTERNAL"][tAssignIndex][2] == aKey;
|
||
|
|
local tFormerName = VUHDO_removeKeyFromList(aKey);
|
||
|
|
if (tFormerName == nil or tIsSameKey) then
|
||
|
|
VUHDO_setHint(VUHDO_I18N_LKA_SUCCESS_ASSIGNED);
|
||
|
|
else
|
||
|
|
VUHDO_setHint(format(VUHDO_I18N_LKA_ASSIGNED_CLEARED, tFormerName));
|
||
|
|
end
|
||
|
|
|
||
|
|
VUHDO_SPELLS_KEYBOARD["INTERNAL"][tAssignIndex][2] = aKey;
|
||
|
|
VUHDO_setAssignButtonText(tAssignButton, aKey);
|
||
|
|
VUHDO_spellsKeysLocalStopAssignment();
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_spellsKeysLocalClearBindingClicked()
|
||
|
|
if (not tIsAssignmentPending) then
|
||
|
|
return;
|
||
|
|
end
|
||
|
|
|
||
|
|
if (VUHDO_SPELLS_KEYBOARD["INTERNAL"][tAssignIndex][2] ~= nil) then
|
||
|
|
VUHDO_setHint(VUHDO_I18N_LKA_BIND_CLEARED);
|
||
|
|
VUHDO_SPELLS_KEYBOARD["INTERNAL"][tAssignIndex][2] = nil;
|
||
|
|
VUHDO_setAssignButtonText(tAssignButton, nil);
|
||
|
|
end
|
||
|
|
VUHDO_spellsKeysLocalStopAssignment();
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_spellsKeysLocalAddClicked(aButton)
|
||
|
|
tinsert(VUHDO_SPELLS_KEYBOARD["INTERNAL"], { VUHDO_I18N_LKA_NEW_BIND, nil, nil });
|
||
|
|
selectedIdx = #VUHDO_SPELLS_KEYBOARD["INTERNAL"];
|
||
|
|
|
||
|
|
local tScroll = _G[aButton:GetParent():GetName() .. "ScrollPanel"];
|
||
|
|
local tChild = _G[tScroll:GetName() .. "Child"];
|
||
|
|
VUHDO_keyboardlocalSpellsScrollPanelOnShow(tChild);
|
||
|
|
if (#VUHDO_SPELLS_KEYBOARD["INTERNAL"] > 6) then
|
||
|
|
tScroll:SetVerticalScroll(#VUHDO_SPELLS_KEYBOARD["INTERNAL"] * 45 + 18);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_spellsKeysLocalRemoveClicked(aButton)
|
||
|
|
local tScroll = _G[aButton:GetParent():GetName() .. "ScrollPanel"];
|
||
|
|
local tChild = _G[tScroll:GetName() .. "Child"];
|
||
|
|
tremove(VUHDO_SPELLS_KEYBOARD["INTERNAL"], selectedIdx);
|
||
|
|
|
||
|
|
if (selectedIdx > 1 and selectedIdx > #VUHDO_SPELLS_KEYBOARD["INTERNAL"]) then
|
||
|
|
selectedIdx = selectedIdx - 1;
|
||
|
|
end
|
||
|
|
VUHDO_keyboardlocalSpellsScrollPanelOnShow(tChild);
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
-------------------------------------------------------------------------------------------
|
||
|
|
-- Macro editor
|
||
|
|
-------------------------------------------------------------------------------------------
|
||
|
|
|
||
|
|
local tMacroEditor;
|
||
|
|
local tMacroPanel;
|
||
|
|
local tMultiLine;
|
||
|
|
local tMacroEntry;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_spellKeysLocalEditMacroClicked(aFrame)
|
||
|
|
local tIndex = aFrame:GetAttribute("list_index");
|
||
|
|
|
||
|
|
tMacroEntry = VUHDO_SPELLS_KEYBOARD["INTERNAL"][tIndex];
|
||
|
|
if (tMacroEntry[3] == nil) then
|
||
|
|
tMacroEntry[3] = "";
|
||
|
|
end
|
||
|
|
|
||
|
|
VuhDoNewOptionsSpellKeysLocal:Hide();
|
||
|
|
tMacroEditor = VuhDoNewOptionsSpellKeysLocalMacroEdit;
|
||
|
|
tMacroPanel = VuhDoNewOptionsSpellKeysLocalMacroPanel;
|
||
|
|
tMacroEditor:Show();
|
||
|
|
_G[tMacroPanel:GetName() .. "FileLabelLabel"]:SetText(VUHDO_I18N_LKA_EDITED_MACRO .. tMacroEntry[1]);
|
||
|
|
|
||
|
|
tMultiLine = _G[tMacroPanel:GetName() .. "ScrollFrameEditBox"];
|
||
|
|
tMultiLine:SetTextInsets(10,10,10,10);
|
||
|
|
tMultiLine:SetText(tMacroEntry[3]);
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--
|
||
|
|
function VUHDO_spellsKeysLocalAcceptMacroClicked()
|
||
|
|
tMacroEntry[3] = tMultiLine:GetText();
|
||
|
|
tMacroEditor:Hide();
|
||
|
|
VuhDoNewOptionsSpellKeysLocal:Show();
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
function VUHDO_spellsKeysLocalDiscardMacroClicked()
|
||
|
|
tMacroEditor:Hide();
|
||
|
|
VuhDoNewOptionsSpellKeysLocal:Show();
|
||
|
|
end
|