Update to 1.6 version (#6)
* Merge from origin https://gitlab.com/Tsoukie/clique-3.3.5 * Linting * Ascension Modifications Fixes Spec swap and adds the 12 slots Fixes ascension compact raid frame support Fixes ascension spell panel integration * Add profile dropdown to binding window * Fix menu buttons showing as invisible * cleanup xml button definitions * enable or disable Bind Spell button when spellbook is visible * give the labels a bit more spacing for default UI
This commit is contained in:
committed by
GitHub
parent
c2bb10665d
commit
9c36ee6e47
@@ -0,0 +1,207 @@
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- AddonCore.lua
|
||||
--
|
||||
-- This is a very simple, bare-minimum core for addon development. It provide
|
||||
-- methods to register events, call initialization functions, and sets up the
|
||||
-- localization table so it can be used elsewhere. This file is designed to be
|
||||
-- loaded first, as it has no further dependencies.
|
||||
--
|
||||
-- Events registered:
|
||||
-- * ADDON_LOADED - Watch for saved variables to be loaded, and call the
|
||||
-- 'Initialize' function in response.
|
||||
-- * PLAYER_LOGIN - Call the 'Enable' method once the major UI elements
|
||||
-- have been loaded and initialized.
|
||||
-------------------------------------------------------------------------]] --
|
||||
local addonName, addon = ...
|
||||
|
||||
-- Set global name of addon
|
||||
_G[addonName] = addon
|
||||
|
||||
-- Extract version information from TOC file
|
||||
addon.version = GetAddOnMetadata(addonName, "Version")
|
||||
if addon.version == "@project-version" or addon.version == "wowi:version" then addon.version = "SCM" end
|
||||
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- Debug support
|
||||
-------------------------------------------------------------------------]] --
|
||||
|
||||
local EMERGENCY_DEBUG = false
|
||||
if EMERGENCY_DEBUG then
|
||||
local private = {}
|
||||
for k, v in pairs(addon) do
|
||||
rawset(private, k, v)
|
||||
rawset(addon, k, nil)
|
||||
end
|
||||
|
||||
setmetatable(addon, {
|
||||
__index = function(t, k)
|
||||
local value = rawget(private, k)
|
||||
if type(value) == "function" then print("CALL", addonName .. "." .. tostring(k)) end
|
||||
return value
|
||||
end,
|
||||
__newindex = function(t, k, v)
|
||||
print(addonName, "NEWINDEX", k, v)
|
||||
rawset(private, k, v)
|
||||
end
|
||||
})
|
||||
end
|
||||
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- Print/Printf support
|
||||
-------------------------------------------------------------------------]] --
|
||||
|
||||
local printHeader = "|cFF33FF99%s|r: "
|
||||
|
||||
function addon:Printf(msg, ...)
|
||||
msg = printHeader .. msg
|
||||
local success, txt = pcall(string.format, msg, addonName, ...)
|
||||
if success then
|
||||
print(txt)
|
||||
else
|
||||
error(string.gsub(txt, "'%?'", string.format("'%s'", "Printf")), 3)
|
||||
end
|
||||
end
|
||||
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- Event registration and dispatch
|
||||
-------------------------------------------------------------------------]] --
|
||||
|
||||
addon.eventFrame = CreateFrame("Frame", addonName .. "EventFrame", UIParent)
|
||||
local eventMap = {}
|
||||
|
||||
function addon:RegisterEvent(event, handler)
|
||||
assert(eventMap[event] == nil, "Attempt to re-register event: " .. tostring(event))
|
||||
eventMap[event] = handler and handler or event
|
||||
addon.eventFrame:RegisterEvent(event)
|
||||
end
|
||||
|
||||
function addon:UnregisterEvent(event)
|
||||
assert(type(event) == "string", "Invalid argument to 'UnregisterEvent'")
|
||||
eventMap[event] = nil
|
||||
addon.eventFrame:UnregisterEvent(event)
|
||||
end
|
||||
|
||||
addon.eventFrame:SetScript("OnEvent", function(frame, event, ...)
|
||||
local handler = eventMap[event]
|
||||
local handler_t = type(handler)
|
||||
if handler_t == "function" then
|
||||
handler(event, ...)
|
||||
elseif handler_t == "string" and addon[handler] then
|
||||
addon[handler](addon, event, ...)
|
||||
end
|
||||
end)
|
||||
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- Message support
|
||||
-------------------------------------------------------------------------]] --
|
||||
|
||||
local messageMap = {}
|
||||
|
||||
function addon:RegisterMessage(name, handler)
|
||||
assert(messageMap[name] == nil, "Attempt to re-register message: " .. tostring(name))
|
||||
messageMap[name] = handler and handler or name
|
||||
end
|
||||
|
||||
function addon:UnregisterMessage(name)
|
||||
assert(type(event) == "string", "Invalid argument to 'UnregisterMessage'")
|
||||
messageMap[name] = nil
|
||||
end
|
||||
|
||||
function addon:FireMessage(name, ...)
|
||||
assert(type(name) == "string", "Invalid argument to 'FireMessage'")
|
||||
local handler = messageMap[name]
|
||||
local handler_t = type(handler)
|
||||
if handler_t == "function" then
|
||||
handler(name, ...)
|
||||
elseif handler_t == "string" and addon[handler] then
|
||||
addon[handler](addon, event, ...)
|
||||
end
|
||||
end
|
||||
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- Setup Initialize/Enable support
|
||||
-------------------------------------------------------------------------]] --
|
||||
|
||||
addon:RegisterEvent("PLAYER_LOGIN", "Enable")
|
||||
addon:RegisterEvent("ADDON_LOADED", function(event, ...)
|
||||
if ... == addonName then
|
||||
addon:UnregisterEvent("ADDON_LOADED")
|
||||
if type(addon["Initialize"]) == "function" then addon["Initialize"](addon) end
|
||||
|
||||
-- If this addon was loaded-on-demand, trigger 'Enable' as well
|
||||
if IsLoggedIn() and type(addon["Enable"]) == "function" then addon["Enable"](addon) end
|
||||
end
|
||||
end)
|
||||
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- Support for deferred execution (when in-combat)
|
||||
-------------------------------------------------------------------------]] --
|
||||
|
||||
local deferframe = CreateFrame("Frame")
|
||||
deferframe.queue = {}
|
||||
|
||||
local function runDeferred(thing)
|
||||
local thing_t = type(thing)
|
||||
if thing_t == "string" and addon[thing] then
|
||||
addon[thing](addon)
|
||||
elseif thing_t == "function" then
|
||||
thing(addon)
|
||||
end
|
||||
end
|
||||
|
||||
-- This method will defer the execution of a method or function until the
|
||||
-- player has exited combat. If they are already out of combat, it will
|
||||
-- execute the function immediately.
|
||||
function addon:Defer(...)
|
||||
for i = 1, select("#", ...) do
|
||||
local thing = select(i, ...)
|
||||
local thing_t = type(thing)
|
||||
if thing_t == "string" or thing_t == "function" then
|
||||
if InCombatLockdown() then
|
||||
deferframe.queue[#deferframe.queue + 1] = select(i, ...)
|
||||
else
|
||||
runDeferred(thing)
|
||||
end
|
||||
else
|
||||
error("Invalid object passed to 'Defer'")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
deferframe:RegisterEvent("PLAYER_REGEN_ENABLED")
|
||||
deferframe:SetScript("OnEvent", function(self, event, ...)
|
||||
for idx, thing in ipairs(deferframe.queue) do runDeferred(thing) end
|
||||
table.wipe(deferframe.queue)
|
||||
end)
|
||||
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- Localization
|
||||
-------------------------------------------------------------------------]] --
|
||||
|
||||
addon.L = addon.L or setmetatable({}, {
|
||||
__index = function(t, k)
|
||||
rawset(t, k, k)
|
||||
return k
|
||||
end,
|
||||
__newindex = function(t, k, v)
|
||||
if v == true then
|
||||
rawset(t, k, k)
|
||||
else
|
||||
rawset(t, k, v)
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
function addon:RegisterLocale(locale, tbl)
|
||||
if locale == "enUS" or locale == GetLocale() then
|
||||
for k, v in pairs(tbl) do
|
||||
if v == true then
|
||||
self.L[k] = k
|
||||
elseif type(v) == "string" then
|
||||
self.L[k] = v
|
||||
else
|
||||
self.L[k] = k
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,12 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
||||
http://wowprogramming.com/FrameXML/UI.xsd">
|
||||
|
||||
<Button name="ClickCastUnitTemplate" virtual="true" inherits="SecureActionButtonTemplate,SecureHandlerEnterLeaveTemplate">
|
||||
<Attributes>
|
||||
<Attribute name="_onenter" type="string" value="local snippet = self:GetAttribute('clickcast_onenter'); if snippet then self:Run(snippet) end"/>
|
||||
<Attribute name="_onleave" type="string" value="local snippet = self:GetAttribute('clickcast_onleave'); if snippet then self:Run(snippet) end"/>
|
||||
</Attributes>
|
||||
</Button>
|
||||
</Ui>
|
||||
+890
-827
File diff suppressed because it is too large
Load Diff
+24
-21
@@ -1,26 +1,29 @@
|
||||
## Interface: 30300
|
||||
## Title: Clique
|
||||
## Author: Cladhaire, Jobus
|
||||
## Version: wowi:revision
|
||||
## Notes: Simply powerful click-casting interface. Tailored for Ascension.
|
||||
## SavedVariables: CliqueDB
|
||||
## OptionalDeps: Dongle
|
||||
## X-Curse-Packaged-Version: r143-release
|
||||
## X-Curse-Project-Name: Clique
|
||||
## X-Curse-Project-ID: clique
|
||||
## X-Curse-Repository-ID: wow/clique/mainline
|
||||
## Author: Cladhaire, Tsoukie
|
||||
## Version: 1.6
|
||||
## Notes: Simply powerful click-casting interface
|
||||
## SavedVariables: CliqueDB, CliqueDB3
|
||||
|
||||
AddonCore.lua
|
||||
i18n\Localization.enUS.lua
|
||||
i18n\Localization.ruRU.lua
|
||||
i18n\Localization.zhCN.lua
|
||||
i18n\Localization.zhTW.lua
|
||||
|
||||
DatabaseDefaults.lua
|
||||
ClickCastTemplate.xml
|
||||
|
||||
Dongle.lua
|
||||
Clique.xml
|
||||
Clique.lua
|
||||
Localization.enUS.lua
|
||||
Localization.esES.lua
|
||||
Localization.esMX.lua
|
||||
Localization.frFR.lua
|
||||
Localization.deDE.lua
|
||||
Localization.koKR.lua
|
||||
Localization.ruRU.lua
|
||||
Localization.zhCN.lua
|
||||
Localization.zhTW.lua
|
||||
CliqueOptions.lua
|
||||
CliqueUtils.lua
|
||||
|
||||
Utils.lua
|
||||
ImportExport.lua
|
||||
|
||||
config\BindConfig.lua
|
||||
config\OptionsPanel.lua
|
||||
config\BlizzardFramesConfig.lua
|
||||
config\DenylistConfig.lua
|
||||
|
||||
modules\Blizzard_utils.lua
|
||||
modules\Blizzard_wrath.lua
|
||||
|
||||
+529
-90
@@ -1,96 +1,535 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
|
||||
..\FrameXML\UI.xsd">
|
||||
<CheckButton name="CliqueIconTemplate" virtual="true">
|
||||
<Size>
|
||||
<AbsDimension x="36" y="36"/>
|
||||
</Size>
|
||||
<Layers>
|
||||
<Layer level="BACKGROUND">
|
||||
<Texture file="Interface\Buttons\UI-EmptySlot-Disabled">
|
||||
<Size>
|
||||
<AbsDimension x="64" y="64"/>
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="CENTER">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="-1"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
</Layer>
|
||||
</Layers>
|
||||
<NormalTexture name="$parentIcon">
|
||||
<Size>
|
||||
<AbsDimension x="36" y="36"/>
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="CENTER">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="-1"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</NormalTexture>
|
||||
<HighlightTexture alphaMode="ADD" file="Interface\Buttons\ButtonHilight-Square"/>
|
||||
<CheckedTexture alphaMode="ADD" file="Interface\Buttons\CheckButtonHilight"/>
|
||||
<?xml version="1.0"?>
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/ http://wowprogramming.com/FrameXML/UI.xsd">
|
||||
<Button name="CliqueRowTemplate" enableMouse="true" virtual="true">
|
||||
<Size x="298" y="30"/>
|
||||
<Layers>
|
||||
<Layer level="BORDER">
|
||||
<Texture name="$parentIcon" parentKey="icon" file="Interface\Icons\INV_Misc_QuestionMark">
|
||||
<Size x="25" y="25"/>
|
||||
<Anchors>
|
||||
<Anchor point="LEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="5" y="0"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</Texture>
|
||||
<FontString name="$parentName" parentKey="name" inherits="GameFontHighlight" justifyH="LEFT" text="An error has occurred">
|
||||
<Size>
|
||||
<AbsDimension x="175" y="12"/>
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="$parentIcon" relativePoint="TOPRIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="3" y="0"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
<FontString name="$parentInfo" parentKey="info" inherits="GameFontNormalSmall" justifyH="LEFT" text="Spell">
|
||||
<Size>
|
||||
<AbsDimension x="175" y="12"/>
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="$parentName" relativePoint="BOTTOMLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="-2"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Color r="0.6" g="0.6" b="0.6"/>
|
||||
</FontString>
|
||||
<FontString name="$parentBind" parentKey="bind" inherits="GameFontHighlightSmall" justifyH="RIGHT" text="Alt-LeftClick">
|
||||
<Size>
|
||||
<AbsDimension x="106" y="12"/>
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="$parentName" relativePoint="TOPRIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="0" y="0"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
</Layer>
|
||||
</Layers>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
self:RegisterForClicks("RightButtonDown")
|
||||
</OnLoad>
|
||||
<OnClick>
|
||||
CliqueConfig:Row_OnClick(self, button)
|
||||
</OnClick>
|
||||
<OnMouseWheel>
|
||||
local slider = CliqueConfig.page1.slider
|
||||
slider:SetValue(slider:GetValue() - delta)
|
||||
</OnMouseWheel>
|
||||
</Scripts>
|
||||
<HighlightTexture setAllPoints="true" file="Interface\QuestFrame\UI-QuestTitleHighlight" alphaMode="ADD">
|
||||
<Size x="315" y="28"/>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset x="1" y="0"/>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</HighlightTexture>
|
||||
</Button>
|
||||
|
||||
<Button name="CliqueColumnTemplate" inherits="WhoFrameColumnHeaderTemplate" virtual="true">
|
||||
<Scripts>
|
||||
<OnClick>
|
||||
Clique:SetSpellIcon(self)
|
||||
PlaySound("igMainMenuOptionCheckBoxOn");
|
||||
CliqueConfig:Column_OnClick(self, button)
|
||||
</OnClick>
|
||||
</Scripts>
|
||||
</CheckButton>
|
||||
</Button>
|
||||
|
||||
<Frame name="CliqueEditTemplate" virtual="true" hidden="true">
|
||||
<Size>
|
||||
<AbsDimension x="286" y="106"/>
|
||||
</Size>
|
||||
<Backdrop bgFile="Interface\DialogFrame\UI-DialogBox-Background" edgeFile="Interface\Tooltips\UI-Tooltip-Border" tile="true">
|
||||
<BackgroundInsets>
|
||||
<AbsInset left="4" right="4" top="4" bottom="4" />
|
||||
</BackgroundInsets>
|
||||
<TileSize>
|
||||
<AbsValue val="16" />
|
||||
</TileSize>
|
||||
<EdgeSize>
|
||||
<AbsValue val="16" />
|
||||
</EdgeSize>
|
||||
</Backdrop>
|
||||
<Frames>
|
||||
<ScrollFrame name="$parentScrollFrame" inherits="UIPanelScrollFrameTemplate">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset><AbsDimension x="8" y="-8"/></Offset>
|
||||
</Anchor>
|
||||
<Anchor point="BOTTOMRIGHT">
|
||||
<Offset><AbsDimension x="-8" y="8"/></Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<ScrollChild>
|
||||
<EditBox name="$parentEditBox" multiLine="true" letters="255" autoFocus="false">
|
||||
<Size>
|
||||
<AbsDimension x="270" y="90"/>
|
||||
</Size>
|
||||
<Scripts>
|
||||
<OnTextChanged>
|
||||
local scrollBar = getglobal(this:GetParent():GetName().."ScrollBar")
|
||||
this:GetParent():UpdateScrollChildRect();
|
||||
local min;
|
||||
local max;
|
||||
min, max = scrollBar:GetMinMaxValues();
|
||||
if ( max > 0 and (this.max ~= max) ) then
|
||||
this.max = max;
|
||||
scrollBar:SetValue(max);
|
||||
end
|
||||
</OnTextChanged>
|
||||
<OnEscapePressed>
|
||||
this:ClearFocus();
|
||||
</OnEscapePressed>
|
||||
</Scripts>
|
||||
<FontString inherits="GameFontHighlightSmall"/>
|
||||
</EditBox>
|
||||
</ScrollChild>
|
||||
</ScrollFrame>
|
||||
</Frames>
|
||||
</Frame>
|
||||
<Button name="CliqueSpellbookButtonTemplate" setAllPoints="true" hidden="true" virtual="true">
|
||||
<Scripts>
|
||||
<OnEnter>
|
||||
local parent = self:GetParent()
|
||||
if parent:IsEnabled() == 1 then
|
||||
SpellButton_OnEnter(parent)
|
||||
else
|
||||
self:GetHighlightTexture():Hide()
|
||||
end
|
||||
|
||||
CliqueConfig:Spellbook_EnableKeyboard(self, motion)
|
||||
</OnEnter>
|
||||
<OnLeave>
|
||||
GameTooltip:Hide()
|
||||
CliqueConfig:Spellbook_DisableKeyboard(self, motion)
|
||||
</OnLeave>
|
||||
<OnClick>
|
||||
CliqueConfig:Spellbook_OnBinding(self, button)
|
||||
</OnClick>
|
||||
<OnKeyDown>
|
||||
CliqueConfig:Spellbook_OnBinding(self, key)
|
||||
</OnKeyDown>
|
||||
<OnMouseWheel>
|
||||
if time() ~= self.last_mousewheel then
|
||||
local button = (delta > 0) and "MOUSEWHEELUP" or "MOUSEWHEELDOWN"
|
||||
CliqueConfig:Spellbook_OnBinding(self, button)
|
||||
self.last_mousewheel = time()
|
||||
end
|
||||
</OnMouseWheel>
|
||||
</Scripts>
|
||||
<HighlightTexture file="Interface\BUTTONS\ButtonHilight-Square" alphaMode="ADD"/>
|
||||
</Button>
|
||||
|
||||
<CheckButton name="CliqueSpellTab" inherits="SpellBookSkillLineTabTemplate" parent="AscensionSpellbookFrameSideBarTab1" hidden="false">
|
||||
<Scripts>
|
||||
<OnClick>
|
||||
CliqueConfig:SpellTab_OnClick()
|
||||
</OnClick>
|
||||
<OnShow>
|
||||
if CliqueConfig:IsVisible() then
|
||||
self:SetChecked(true)
|
||||
end
|
||||
|
||||
local num = GetNumSpellTabs()
|
||||
self:ClearAllPoints()
|
||||
local lastTab = _G["AscensionSpellbookFrameSideBarTab" .. num]
|
||||
self:SetPoint("TOPLEFT", lastTab, "BOTTOMLEFT", 0, -17)
|
||||
</OnShow>
|
||||
</Scripts>
|
||||
<NormalTexture file="Interface\AddOns\Clique\images\icon_square_64"/>
|
||||
</CheckButton>
|
||||
|
||||
<Frame name="CliqueTabAlert" parentKey="alert" inherits="GlowBoxTemplate" parent="AscensionSpellbookFrame" enableMouse="true" hidden="true" frameStrata="DIALOG" framelevel="2">
|
||||
<Size x="220" y="100"/>
|
||||
<Anchors>
|
||||
<Anchor point="LEFT" relativeTo="CliqueSpellTab" relativePoint="RIGHT" x="20" y="0"/>
|
||||
</Anchors>
|
||||
<Layers>
|
||||
<Layer level="OVERLAY">
|
||||
<FontString name="$parentText" parentKey="text" inherits="GameFontHighlightLeft" justifyV="TOP" text="" >
|
||||
<Size x="188" y="0"/>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" x="16" y="-24"/>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
</Layer>
|
||||
</Layers>
|
||||
<Frames>
|
||||
<Button name="$parentClose" parentKey="close" inherits="UIPanelCloseButton">
|
||||
<Anchors>
|
||||
<Anchor point="TOPRIGHT" x="6" y="6"/>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnClick>
|
||||
Clique.settings.alerthidden = true
|
||||
CliqueTabAlert:Hide();
|
||||
</OnClick>
|
||||
</Scripts>
|
||||
</Button>
|
||||
<Frame name="$parentArrow" parentKey="arrow" inherits="GlowBoxArrowTemplate">
|
||||
<Anchors>
|
||||
<Anchor point="RIGHT" relativePoint="LEFT" x="0" y="0"/>
|
||||
</Anchors>
|
||||
</Frame>
|
||||
</Frames>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
self.arrow:SetSize(21, 53)
|
||||
self.arrow.arrow = _G[self.arrow:GetName() .. "Arrow"]
|
||||
self.arrow.glow = _G[self.arrow:GetName() .. "Glow"]
|
||||
self.arrow.arrow:SetAllPoints(true)
|
||||
self.arrow.glow:SetAllPoints(true)
|
||||
-- Rotate 90 degrees
|
||||
-- left, bottom, right, bottom, left, top, right, top
|
||||
self.arrow.arrow:SetTexCoord(0.78515625, 0.58789063, 0.99218750, 0.58789063, 0.78515625, 0.54687500, 0.99218750, 0.54687500)
|
||||
self.arrow.glow:SetTexCoord(0.40625000, 0.82812500, 0.66015625, 0.82812500, 0.40625000, 0.77343750, 0.66015625, 0.77343750)
|
||||
self.text:SetSpacing(4)
|
||||
|
||||
</OnLoad>
|
||||
<OnShow>
|
||||
self:SetHeight(self.text:GetHeight() + 42)
|
||||
</OnShow>
|
||||
</Scripts>
|
||||
</Frame>
|
||||
|
||||
<Frame name="CliqueDialog" toplevel="true" enableMouse="true" movable="true" inherits="BasicFrameTemplate" parent="UIParent" frameStrata="DIALOG" hidden="true">
|
||||
<Size x="350" y="160"/>
|
||||
<Layers>
|
||||
<Layer level="OVERLAY">
|
||||
<FontString name="$parentDesc" parentKey="desc" inherits="GameFontHighlightSmallLeftTop">
|
||||
<Size x="340" y="60"/>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" x="5" y="-25"/>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
<FontString name="$parentBindText" parentKey="bindText" JustifyH="CENTER" inherits="GameFontHighlightSmallLeftTop">
|
||||
<Size x="200" y="12"/>
|
||||
<Anchors>
|
||||
<Anchor point="BOTTOM" x="0" y="35"/>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
</Layer>
|
||||
</Layers>
|
||||
<Frames>
|
||||
<Button name="$parentDragButton">
|
||||
<Size x="0" y="20"/>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT"/>
|
||||
<Anchor point="TOPRIGHT"/>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
self:RegisterForClicks("LeftButton")
|
||||
</OnLoad>
|
||||
<OnMouseDown>
|
||||
CliqueDialog:SetUserPlaced(false)
|
||||
CliqueDialog:StartMoving()
|
||||
</OnMouseDown>
|
||||
<OnMouseUp>
|
||||
CliqueDialog:SetUserPlaced(false)
|
||||
CliqueDialog:StopMovingOrSizing()
|
||||
</OnMouseUp>
|
||||
<OnHide>
|
||||
CliqueDialog:SetUserPlaced(false)
|
||||
CliqueDialog:StopMovingOrSizing()
|
||||
</OnHide>
|
||||
</Scripts>
|
||||
</Button>
|
||||
<Button name="$parentButtonBinding" parentKey="button_binding" inherits="UIPanelButtonTemplate2">
|
||||
<Size x="160" y="22"/>
|
||||
<Anchors>
|
||||
<Anchor point="TOP" relativeTo="$parentDesc" relativePoint="BOTTOM" x="0" y="0"/>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
self:RegisterForClicks("AnyUp")
|
||||
self:EnableKeyboard(false)
|
||||
</OnLoad>
|
||||
<OnEnter>
|
||||
if motion then
|
||||
self:EnableKeyboard(true)
|
||||
end
|
||||
</OnEnter>
|
||||
<OnLeave>
|
||||
self:EnableKeyboard(false)
|
||||
</OnLeave>
|
||||
<OnClick>
|
||||
CliqueConfig:BindingButton_OnClick(self, button)
|
||||
</OnClick>
|
||||
<OnKeyDown>
|
||||
CliqueConfig:BindingButton_OnClick(self, key)
|
||||
</OnKeyDown>
|
||||
<OnMouseWheel>
|
||||
local button = (delta > 0) and "MOUSEWHEELUP" or "MOUSEWHEELDOWN"
|
||||
CliqueConfig:BindingButton_OnClick(self, button)
|
||||
</OnMouseWheel>
|
||||
</Scripts>
|
||||
</Button>
|
||||
<Button name="$parentButtonAccept" parentKey="button_accept" inherits="UIPanelButtonTemplate2">
|
||||
<Size x="80" y="22"/>
|
||||
<Anchors>
|
||||
<Anchor point="BOTTOMRIGHT" x="-3" y="3"/>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnClick>
|
||||
CliqueConfig:AcceptSetBinding()
|
||||
</OnClick>
|
||||
</Scripts>
|
||||
</Button>
|
||||
</Frames>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
table.insert(UISpecialFrames, "CliqueDialog")
|
||||
</OnLoad>
|
||||
</Scripts>
|
||||
</Frame>
|
||||
|
||||
<!-- Main configuration frame -->
|
||||
<Frame name="CliqueConfig" inherits="ButtonFrameTemplate" parent="UIParent" hidden="true">
|
||||
<Size>
|
||||
<AbsDimension x="333" y="475"/>
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="CENTER" x="0" y="0"/>
|
||||
</Anchors>
|
||||
<Frames>
|
||||
<!-- Dropdown menu for utility -->
|
||||
<Frame name="$parentDropdown" parentKey="dropdown" inherits="UIDropDownMenuTemplate"/>
|
||||
|
||||
<!-- Page definitions - Configuration List -->
|
||||
<Frame name="$parentPage1" parentKey="page1" hidden="true">
|
||||
<Frames>
|
||||
<Button name="$parentColumn1" parentKey="column1" inherits="CliqueColumnTemplate">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT">
|
||||
<Offset x="0" y="0"/>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
WhoFrameColumn_SetWidth(self, 203);
|
||||
</OnLoad>
|
||||
</Scripts>
|
||||
</Button>
|
||||
<Button name="$parentColumn2" parentKey="column2" inherits="CliqueColumnTemplate">
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativePoint="TOPRIGHT" relativeTo="$parentColumn1">
|
||||
<Offset x="-2" y="0"/>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
WhoFrameColumn_SetWidth(self, 120);
|
||||
</OnLoad>
|
||||
</Scripts>
|
||||
<ButtonText>
|
||||
<Anchors>
|
||||
<Anchor point="RIGHT">
|
||||
<Offset>
|
||||
<AbsDimension x="-8" y="0"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
</ButtonText>
|
||||
</Button>
|
||||
<Slider name="$parent_VSlider" parentKey="slider" valueStep="1.0" hidden="true" orientation="VERTICAL">
|
||||
<Size x="18" y="0"/>
|
||||
<Anchors>
|
||||
<Anchor point="TOPRIGHT" x="0" y="-20"/>
|
||||
<Anchor point="BOTTOMRIGHT"/>
|
||||
</Anchors>
|
||||
<Backdrop edgeFile="Interface\Buttons\UI-SliderBar-Border" bgFile="Interface\Buttons\UI-SliderBar-Background" tile="true">
|
||||
<EdgeSize>
|
||||
<AbsValue val="8"/>
|
||||
</EdgeSize>
|
||||
<TileSize>
|
||||
<AbsValue val="8"/>
|
||||
</TileSize>
|
||||
<BackgroundInsets>
|
||||
<AbsInset left="3" right="3" top="6" bottom="6"/>
|
||||
</BackgroundInsets>
|
||||
</Backdrop>
|
||||
<Scripts>
|
||||
<OnValueChanged>
|
||||
CliqueConfig:UpdateList()
|
||||
</OnValueChanged>
|
||||
</Scripts>
|
||||
<ThumbTexture name="$parentThumbTexture" file="Interface\Buttons\UI-ScrollBar-Knob">
|
||||
<Size x="24" y="24"/>
|
||||
</ThumbTexture>
|
||||
</Slider>
|
||||
</Frames>
|
||||
<Scripts>
|
||||
<OnShow>
|
||||
CliqueConfig:EnableSpellbookButtons()
|
||||
</OnShow>
|
||||
<OnHide>
|
||||
CliqueConfig:EnableSpellbookButtons()
|
||||
</OnHide>
|
||||
</Scripts>
|
||||
</Frame> <!-- Page 1 - Configuration List -->
|
||||
|
||||
<!-- Page definitions - Edit Page -->
|
||||
<Frame name="$parentPage2" parentKey="page2" hidden="true">
|
||||
<Layers>
|
||||
<Layer level="OVERLAY">
|
||||
<FontString name="$parentDesc" parentKey="desc" inherits="GameFontHighlightSmallLeftTop">
|
||||
<Size x="0" y="200"/>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" x="5" y="-5"/>
|
||||
<Anchor point="TOPRIGHT" x="-5" y="-5"/>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
<FontString name="$parentBindText" parentKey="bindText" JustifyH="CENTER" inherits="GameFontHighlightSmallLeftTop">
|
||||
<Size x="200" y="12"/>
|
||||
<Anchors>
|
||||
<Anchor point="CENTER" relativeTo="$parent" x="0" y="-24"/>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
</Layer>
|
||||
</Layers>
|
||||
<Frames>
|
||||
<Button name="$parentButtonBinding" parentKey="button_binding" inherits="UIPanelButtonTemplate2">
|
||||
<Size x="160" y="22"/>
|
||||
<Anchors>
|
||||
<Anchor point="CENTER" relativeTo="$parent" x="0" y="0"/>
|
||||
</Anchors>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
self:RegisterForClicks("AnyUp")
|
||||
self:EnableKeyboard(false)
|
||||
</OnLoad>
|
||||
<OnEnter>
|
||||
if motion then
|
||||
self:EnableKeyboard(true)
|
||||
end
|
||||
if CliqueConfig.page2.editbox:HasFocus() then
|
||||
CliqueConfig.page2.editbox:ClearFocus()
|
||||
end
|
||||
</OnEnter>
|
||||
<OnLeave>
|
||||
self:EnableKeyboard(false)
|
||||
</OnLeave>
|
||||
<OnClick>
|
||||
CliqueConfig:MacroBindingButton_OnClick(self, button)
|
||||
</OnClick>
|
||||
<OnKeyDown>
|
||||
CliqueConfig:MacroBindingButton_OnClick(self, key)
|
||||
</OnKeyDown>
|
||||
<OnMouseWheel>
|
||||
local button = (delta > 0) and "MOUSEWHEELUP" or "MOUSEWHEELDOWN"
|
||||
CliqueConfig:MacroBindingButton_OnClick(self, button)
|
||||
</OnMouseWheel>
|
||||
</Scripts>
|
||||
</Button>
|
||||
|
||||
<!-- Wrap the scroll frame in a frame that can capture clicks -->
|
||||
<Button name="CliqueClickGrabber" parentKey="clickGrabber">
|
||||
<Size x="320" y="160"/>
|
||||
<Anchors>
|
||||
<Anchor point="BOTTOMLEFT" relativeTo="$parent" relativePoint="BOTTOMLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="1" y="0"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<Backdrop bgFile="Interface\Tooltips\UI-Tooltip-Background" edgeFile="Interface\Tooltips\UI-Tooltip-Border" tile="true">
|
||||
<EdgeSize>
|
||||
<AbsValue val="16"/>
|
||||
</EdgeSize>
|
||||
<TileSize>
|
||||
<AbsValue val="16"/>
|
||||
</TileSize>
|
||||
<BackgroundInsets>
|
||||
<AbsInset left="5" right="5" top="5" bottom="5"/>
|
||||
</BackgroundInsets>
|
||||
</Backdrop>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
self:SetBackdropColor(0.3, 0.3, 0.3)
|
||||
self:SetBackdropBorderColor(0.5, 0.5, 0.5)
|
||||
</OnLoad>
|
||||
<OnClick>
|
||||
CliqueScrollFrameEditBox:SetFocus()
|
||||
</OnClick>
|
||||
</Scripts>
|
||||
<Frames>
|
||||
<ScrollFrame name="CliqueScrollFrame" parentKey="scrollFrame" inherits="UIPanelScrollFrameTemplate">
|
||||
<Size>
|
||||
<AbsDimension x="288" y="150"/>
|
||||
</Size>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" relativeTo="$parent" relativePoint="TOPLEFT">
|
||||
<Offset>
|
||||
<AbsDimension x="5" y="-5"/>
|
||||
</Offset>
|
||||
</Anchor>
|
||||
</Anchors>
|
||||
<ScrollChild>
|
||||
<EditBox name="$parentEditBox" parentKey="editbox" multiLine="true" autoFocus="false" countInvisibleLetters="true">
|
||||
<Size>
|
||||
<AbsDimension x="288" y="85"/>
|
||||
</Size>
|
||||
<Scripts>
|
||||
<OnTextChanged>
|
||||
ScrollingEdit_OnTextChanged(self, self:GetParent());
|
||||
</OnTextChanged>
|
||||
<OnCursorChanged function="ScrollingEdit_OnCursorChanged"/>
|
||||
<OnUpdate>
|
||||
ScrollingEdit_OnUpdate(self, elapsed, self:GetParent());
|
||||
</OnUpdate>
|
||||
<OnEscapePressed function="EditBox_ClearFocus"/>
|
||||
</Scripts>
|
||||
<FontString inherits="GameFontHighlightSmall"/>
|
||||
</EditBox>
|
||||
</ScrollChild>
|
||||
</ScrollFrame>
|
||||
</Frames>
|
||||
</Button>
|
||||
</Frames>
|
||||
</Frame> <!-- Page 3 - Macro Edit Page -->
|
||||
|
||||
<!-- Alert above the spellbook to show we're in binding mode -->
|
||||
<Frame name="CliqueConfigBindAlert" parentKey="bindAlert" inherits="GlowBoxTemplate" hidden="false" frameStrata="DIALOG" framelevel="2">
|
||||
<Size x="235" y="43"/>
|
||||
<Anchors>
|
||||
<Anchor point="BOTTOMLEFT" relativeTo="AscensionSpellbookFrameContentSpellsSpellButton1" relativePoint="TOP" x="-40" y="25"/>
|
||||
</Anchors>
|
||||
<Layers>
|
||||
<Layer level="OVERLAY">
|
||||
<FontString name="$parentText" parentKey="text" inherits="GameFontHighlightLeft" justifyV="TOP" text="" >
|
||||
<Size x="230" y="0"/>
|
||||
<Anchors>
|
||||
<Anchor point="TOPLEFT" x="16" y="-15"/>
|
||||
</Anchors>
|
||||
</FontString>
|
||||
</Layer>
|
||||
</Layers>
|
||||
<Frames>
|
||||
<Frame name="$parentArrow" parentKey="arrow" inherits="GlowBoxArrowTemplate">
|
||||
<Anchors>
|
||||
<Anchor point="TOP" relativePoint="BOTTOMLEFT" x="40" y="1"/>
|
||||
</Anchors>
|
||||
</Frame>
|
||||
</Frames>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
self.text:SetSpacing(4)
|
||||
</OnLoad>
|
||||
</Scripts>
|
||||
</Frame> <!-- End bindAlert -->
|
||||
</Frames>
|
||||
<Scripts>
|
||||
<OnLoad>
|
||||
CliqueConfigPortrait:SetTexture("Interface\\Addons\\Clique\\images\\icon_circle_128")
|
||||
CliqueConfig.page1:SetParent(CliqueConfig.Inset)
|
||||
CliqueConfig.page2:SetParent(CliqueConfig.Inset)
|
||||
CliqueConfig.page1:SetAllPoints(CliqueConfig.Inset)
|
||||
CliqueConfig.page2:SetAllPoints(CliqueConfig.Inset)
|
||||
</OnLoad>
|
||||
<OnShow>
|
||||
CliqueConfig:OnShow()
|
||||
</OnShow>
|
||||
<OnHide>
|
||||
CliqueConfig:OnHide()
|
||||
</OnHide>
|
||||
</Scripts>
|
||||
</Frame> <!-- CliqueConfig -->
|
||||
</Ui>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,47 +0,0 @@
|
||||
local buttonMap = setmetatable({
|
||||
[1] = "LeftButton",
|
||||
[2] = "RightButton",
|
||||
[3] = "MiddleButton",
|
||||
}, {
|
||||
__index = function(t, k)
|
||||
return "Button" .. k
|
||||
end
|
||||
})
|
||||
|
||||
function Clique:GetModifierText()
|
||||
local modifier = ""
|
||||
|
||||
if IsShiftKeyDown() then
|
||||
modifier = "Shift-"..modifier
|
||||
end
|
||||
if IsControlKeyDown() then
|
||||
modifier = "Ctrl-"..modifier
|
||||
end
|
||||
if IsAltKeyDown() then
|
||||
modifier = "Alt-"..modifier
|
||||
end
|
||||
|
||||
return modifier
|
||||
end
|
||||
|
||||
function Clique:GetButtonNumber(button)
|
||||
return SecureButton_GetButtonSuffix(button)
|
||||
end
|
||||
|
||||
function Clique:GetButtonText(num)
|
||||
if not num then return "" end
|
||||
if type(num) == "string" then
|
||||
num = num:gsub("helpbutton", "")
|
||||
num = num:gsub("harmbutton", "")
|
||||
end
|
||||
num = tonumber(num) and tonumber(num) or num
|
||||
return buttonMap[num] or ""
|
||||
end
|
||||
|
||||
function Clique:CheckBinding(key)
|
||||
for k,v in pairs(self.editSet) do
|
||||
if k == key then
|
||||
return v
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,25 @@
|
||||
local addonName, addon = ...
|
||||
local L = addon.L
|
||||
|
||||
addon.defaults = {
|
||||
char = {
|
||||
blacklist = {},
|
||||
blizzframes = {
|
||||
PlayerFrame = true,
|
||||
PetFrame = true,
|
||||
TargetFrame = true,
|
||||
TargetFrameToT = true,
|
||||
FocusFrame = true,
|
||||
FocusFrameToT = true,
|
||||
arena = true,
|
||||
party = true,
|
||||
compactraid = true,
|
||||
compactparty = true,
|
||||
boss = true
|
||||
},
|
||||
stopcastingfix = false
|
||||
},
|
||||
profile = {
|
||||
bindings = {}
|
||||
}
|
||||
}
|
||||
-1434
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,34 @@
|
||||
local addonName, addon = ...
|
||||
|
||||
local LibSerialize = LibStub("LibSerialize")
|
||||
local LibDeflate = LibStub("LibDeflate")
|
||||
|
||||
function addon:GetExportString()
|
||||
local data = addon.db.profile.bindings
|
||||
local serialized = LibSerialize:Serialize(data)
|
||||
local compressed = LibDeflate:CompressDeflate(serialized)
|
||||
local encoded = LibDeflate:EncodeForPrint(compressed)
|
||||
|
||||
return string.format("CL01:%s", encoded)
|
||||
end
|
||||
|
||||
function addon:DecodeExportString(text)
|
||||
local header = string.sub(text, 1, 5)
|
||||
if header ~= "CL01:" then return end
|
||||
|
||||
local payload = string.sub(text, 6, string.len(text))
|
||||
local decoded = LibDeflate:DecodeForPrint(payload)
|
||||
if not decoded then return end
|
||||
local decompressed = LibDeflate:DecompressDeflate(decoded)
|
||||
if not decompressed then return end
|
||||
local success, data = LibSerialize:Deserialize(decompressed)
|
||||
if not success then return end
|
||||
return data
|
||||
end
|
||||
|
||||
function addon:ImportBindings(importBindings)
|
||||
self.db.profile.bindings = importBindings
|
||||
self.bindings = self.db.profile.bindings
|
||||
addon:Printf("Importing new bindings into current profile")
|
||||
self:FireMessage("BINDINGS_CHANGED")
|
||||
end
|
||||
@@ -1,110 +0,0 @@
|
||||
--[[---------------------------------------------------------------------------------
|
||||
Localisation for deDE. Any commented lines need to be updated
|
||||
----------------------------------------------------------------------------------]]
|
||||
|
||||
local L = Clique.Locals
|
||||
|
||||
if GetLocale() == "deDE" then
|
||||
L.RANK = "Rang"
|
||||
L.RANK_PATTERN = "Rang (%d+)"
|
||||
L.CAST_FORMAT = "%s(Rang %s)"
|
||||
|
||||
L.RACIAL_PASSIVE = "Volk Passiv"
|
||||
L.PASSIVE = SPELL_PASSIVE
|
||||
|
||||
L.CLICKSET_DEFAULT = "Standard"
|
||||
L.CLICKSET_HARMFUL = "Schadhafte Aktionen"
|
||||
L.CLICKSET_HELPFUL = "Hilfreiche Aktionen"
|
||||
L.CLICKSET_OOC = "Au\195\159erhalb des Kampfes"
|
||||
L.CLICKSET_BEARFORM = "B\195\164ren Gestalt"
|
||||
L.CLICKSET_CATFORM = "Katzen Gestalt"
|
||||
L.CLICKSET_AQUATICFORM = "Wasser Gestalt"
|
||||
L.CLICKSET_TRAVELFORM = "Reise Gestalt"
|
||||
L.CLICKSET_MOONKINFORM = "Moonkin Gestalt"
|
||||
L.CLICKSET_TREEOFLIFE = "Baum des Lebens Gestalt"
|
||||
L.CLICKSET_SHADOWFORM = "Schattengestalt"
|
||||
L.CLICKSET_STEALTHED = "Getarnt"
|
||||
L.CLICKSET_BATTLESTANCE = "Kampfhaltung"
|
||||
L.CLICKSET_DEFENSIVESTANCE = "Verteidigungshaltung"
|
||||
L.CLICKSET_BERSERKERSTANCE = "Berserkerhaltung"
|
||||
|
||||
L.BEAR_FORM = "B\195\164ren Gestalt"
|
||||
L.DIRE_BEAR_FORM = "Dire B\195\164ren Gestalt"
|
||||
L.CAT_FORM = "Katzen Gestalt"
|
||||
L.AQUATIC_FORM = "Wasser Gestalt"
|
||||
L.TRAVEL_FORM = "Reise Gestalt"
|
||||
L.TREEOFLIFE = "Baum des Lebens"
|
||||
L.MOONKIN_FORM = "oonkin Gestalt"
|
||||
L.STEALTH = "Tarnen"
|
||||
L.SHADOWFORM = "Schattengestalt"
|
||||
L.BATTLESTANCE = "Kampfhaltung"
|
||||
L.DEFENSIVESTANCE = "Verteidigungshaltung"
|
||||
L.BERSERKERSTANCE = "Berserkerhaltung"
|
||||
|
||||
L.BINDING_NOT_DEFINED = "Belegung nicht definiert."
|
||||
|
||||
L.CANNOT_CHANGE_COMBAT = "\195\132nderungen w\195\164rend des Kampfes nicht m\195\182glich. \195\132nderungen werden bis Kampfende verschoben."
|
||||
L.APPLY_QUEUE = "Au\195\159erhalb des Kampfes. Ausstehende \195\132nderungen werden durchgef\195\188hrt."
|
||||
L.PROFILE_CHANGED = "Profil gewechselt zu '%s'."
|
||||
L.PROFILE_DELETED = "Profile '%s' wurde gel\195\182scht."
|
||||
|
||||
L.ACTION_ACTIONBAR = "Wechsel Aktionsleiste"
|
||||
L.ACTION_ACTION = "Aktion Taste"
|
||||
L.ACTION_PET = "Tier Aktion Taste"
|
||||
L.ACTION_SPELL = "Zauber ausf\195\188hren"
|
||||
L.ACTION_ITEM = "Benutze Gegenstand"
|
||||
L.ACTION_MACRO = "Starte eigenes Makro"
|
||||
L.ACTION_STOP = "Zauber Unterbrechen"
|
||||
L.ACTION_TARGET = "Ziel ausw\195\164hlen"
|
||||
L.ACTION_FOCUS = "Setze Fokus"
|
||||
L.ACTION_ASSIST = "Assistiere Einheit"
|
||||
L.ACTION_CLICK = "Klicke Taste"
|
||||
L.ACTION_MENU = "Zeige Men\195\188"
|
||||
|
||||
L.HELP_TEXT = "Willkomen zu Clique. Zuerst suchst du einfach im Zauberbuch einen Spruch aus, welchen du an eine Taste binden m\195\182chtest. Dann klickst du mit der entsprechenden Taste diesen Zauber an. Als Beispiel, gehe zu \"Blitzheilung\" und klicke darauf mit Shift+LinkeMaustaste um diesen Zauber auf Shift+LinkeMaustaste zu legen."
|
||||
L.CUSTOM_HELP = "Dies ist das Clique konfigurations Fenster. Von hier aus kannst du alle Klick-Kombinationen, die uns die UI erlaubt, konfigurieren. W\195\164hle eine Grundfunktion aus der linken Spalte. Klicke dann auf den unteren Button mit einer Tastenkombination deiner Wahl, und erg\195\164nze (falls ben\195\182tigt) die Parameter."
|
||||
|
||||
L.BS_ACTIONBAR_HELP = "Wechselt die Aktionsleiste. 'increment' Wechselt eine Leiste rauf, 'decrement' mach das Gegenteil. Gibst du eine Zahl ein, wird nur die enstprechende Leiste gezeigt. Die Eingabe von 1,3 w\195\188rde zwischen Leiste 1 und 3 wechseln"
|
||||
L.BS_ACTIONBAR_ARG1_LABEL = "Aktion:"
|
||||
|
||||
L.BS_ACTION_HELP = "Simuliert einen Klick auf eine Aktions Taste. Gebe die Nummer der Aktions Taste an."
|
||||
L.BS_ACTION_ARG1_LABEL = "Tasten Nummer:"
|
||||
L.BS_ACTION_ARG2_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_PET_HELP = "Simuliert einen Klick auf eine Tier Aktions Taste. Gebe die Nummer der Aktions Taste an."
|
||||
L.BS_PET_ARG1_LABEL = "Tier Tasten Nummer:"
|
||||
L.BS_PET_ARG2_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_SPELL_HELP = "F\195\188hrt einen Zauber aus dem Zauberbuch aus. M\195\182glich sind Zaubername, und optional Rucksack/Platz, oder Gegenstand-Name als Ziel eines Zaubers.(zB. Tier f\195\188ttern)"
|
||||
L.BS_SPELL_ARG1_LABEL = "Zauber Name:"
|
||||
L.BS_SPELL_ARG2_LABEL = "*Rang/Rucksack Nr:"
|
||||
L.BS_SPELL_ARG3_LABEL = "*Platz Nummer:"
|
||||
L.BS_SPELL_ARG4_LABEL = "*Gegenstands Name:"
|
||||
L.BS_SPELL_ARG5_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_ITEM_HELP = "Benutze Gegenstand. Angabe von Rucksack/Platz, oder Gegenstand-Name."
|
||||
L.BS_ITEM_ARG1_LABEL = "Rucksack Nummer:"
|
||||
L.BS_ITEM_ARG2_LABEL = "Platz Nummer:"
|
||||
L.BS_ITEM_ARG3_LABEL = "Gegenstands Name:"
|
||||
L.BS_ITEM_ARG4_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_MACRO_HELP = "Benutzt eigenes Makro aus vorhandenem index"
|
||||
L.BS_ARG1_LABEL = "Makro Index:"
|
||||
L.BS_ARG2_LABEL = "Makro Text:"
|
||||
|
||||
L.BS_STOP_HELP = "Unterbricht den laufenden Zauberspruch"
|
||||
|
||||
L.BS_TARGET_HELP = "Visiert \"unit\" als Ziel an"
|
||||
L.BS_TARGET_ARG1_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_FOCUS_HELP = "W\195\164hlt \"focus\" Einheit aus."
|
||||
L.BS_FOCUS_ARG1_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_ASSIST_HELP = "Assistiert der Einheit \"unit\""
|
||||
L.BS_ASSIST_ARG1_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_CLICK_HELP = "Simuliert Klick auf eine Aktions Taste"
|
||||
L.BS_CLICK_ARG1_LABEL = "Tasten Name:"
|
||||
|
||||
L.BS_MENU_HELP = "Zeigt das Einheiten Pop-Up Men\195\188"
|
||||
end
|
||||
@@ -1,134 +0,0 @@
|
||||
--[[---------------------------------------------------------------------------------
|
||||
Localisation for English
|
||||
----------------------------------------------------------------------------------]]
|
||||
|
||||
local L = Clique.Locals
|
||||
|
||||
-- This is the default locale.
|
||||
if GetLocale() then
|
||||
L.RANK = "Rank"
|
||||
L.RANK_PATTERN = "Rank (%d+)"
|
||||
L.CAST_FORMAT = "%s(Rank %s)"
|
||||
|
||||
L.RACIAL_PASSIVE = "Racial Passive"
|
||||
L.PASSIVE = SPELL_PASSIVE
|
||||
|
||||
L.CLICKSET_DEFAULT = "Default"
|
||||
L.CLICKSET_HARMFUL = "Harmful actions"
|
||||
L.CLICKSET_HELPFUL = "Helpful actions"
|
||||
L.CLICKSET_OOC = "Out of Combat"
|
||||
L.CLICKSET_BEARFORM = "Bear Form"
|
||||
L.CLICKSET_CATFORM = "Cat Form"
|
||||
L.CLICKSET_AQUATICFORM = "Aquatic Form"
|
||||
L.CLICKSET_TRAVELFORM = "Travel Form"
|
||||
L.CLICKSET_MOONKINFORM = "Moonkin Form"
|
||||
L.CLICKSET_TREEOFLIFE = "Tree of Life Form"
|
||||
L.CLICKSET_SHADOWFORM = "Shadowform"
|
||||
L.CLICKSET_STEALTHED = "Stealthed"
|
||||
L.CLICKSET_BATTLESTANCE = "Battle Stance"
|
||||
L.CLICKSET_DEFENSIVESTANCE = "Defensive Stance"
|
||||
L.CLICKSET_BERSERKERSTANCE = "Berserker Stance"
|
||||
|
||||
L.BEAR_FORM = "Bear Form"
|
||||
L.DIRE_BEAR_FORM = "Dire Bear Form"
|
||||
L.CAT_FORM = "Cat Form"
|
||||
L.AQUATIC_FORM = "Aquatic Form"
|
||||
L.TRAVEL_FORM = "Travel Form"
|
||||
L.TREEOFLIFE = "Tree of Life"
|
||||
L.MOONKIN_FORM = "Moonkin Form"
|
||||
L.STEALTH = "Stealth"
|
||||
L.SHADOWFORM = "Shadowform"
|
||||
L.BATTLESTANCE = "Battle Stance"
|
||||
L.DEFENSIVESTANCE = "Defensive Stance"
|
||||
L.BERSERKERSTANCE = "Berserker Stance"
|
||||
|
||||
L.BINDING_NOT_DEFINED = "Binding not defined"
|
||||
L.CANNOT_CHANGE_COMBAT = "Cannot make changes in combat. These changes will be delayed until you exit combat."
|
||||
L.APPLY_QUEUE = "Out of combat. Applying all queued changes."
|
||||
L.PROFILE_CHANGED = "Profile has changed to '%s'."
|
||||
L.PROFILE_DELETED = "Profile '%s' has been deleted."
|
||||
L.PROFILE_RESET = "Your profile '%s' has been reset."
|
||||
|
||||
L.ACTION_ACTIONBAR = "Change ActionBar"
|
||||
L.ACTION_ACTION = "Action Button"
|
||||
L.ACTION_PET = "Pet Action Button"
|
||||
L.ACTION_SPELL = "Cast Spell"
|
||||
L.ACTION_ITEM = "Use Item"
|
||||
L.ACTION_MACRO = "Run Custom Macro"
|
||||
L.ACTION_STOP = "Stop Casting"
|
||||
L.ACTION_TARGET = "Target Unit"
|
||||
L.ACTION_FOCUS = "Set Focus"
|
||||
L.ACTION_ASSIST = "Assist Unit"
|
||||
L.ACTION_CLICK = "Click Button"
|
||||
L.ACTION_MENU = "Show Menu"
|
||||
|
||||
L.HELP_TEXT = "Welcome to Clique. For basic operation, you can navigate the spellbook and decide what spell you'd like to bind to a specific click. Then click on that spell with whatever click-binding you would like. For example, navigate to \"Flash Heal\" and shift-LeftClick on it to bind that spell to Shift-LeftClick."
|
||||
L.CUSTOM_HELP = "This is the Clique custom edit screen. From here you can configure any of the combinations that the UI makes available to us in response to clicks. Select a base action from the left column. You can then click on the button below to set the binding you'd like, and then supply the arguments required (if any)."
|
||||
|
||||
L.BS_ACTIONBAR_HELP = "Change the actionbar. 'increment' will move it up one page, 'decrement' does the opposite. If you supply a number, the action bar will be turned to that page. You can specify 1,3 to toggle between pages 1 and 3"
|
||||
L.BS_ACTIONBAR_ARG1_LABEL = "Action:"
|
||||
|
||||
L.BS_ACTION_HELP = "Simulate a click on an action button. Specify the number of the action button."
|
||||
L.BS_ACTION_ARG1_LABEL = "Button Number:"
|
||||
L.BS_ACTION_ARG2_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_PET_HELP = "Simulate a click on an pet's action button. Specify the number of the button."
|
||||
L.BS_PET_ARG1_LABEL = "Pet Button Number:"
|
||||
L.BS_PET_ARG2_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_SPELL_HELP = "Cast a spell from the spellbook. Takes a spell name, and optionally a bag and slot, or item name to use as the target of the spell (i.e. Feed Pet)"
|
||||
L.BS_SPELL_ARG1_LABEL = "Spell Name:"
|
||||
L.BS_SPELL_ARG2_LABEL = "*Rank/Bag Number:"
|
||||
L.BS_SPELL_ARG3_LABEL = "*Slot Number:"
|
||||
L.BS_SPELL_ARG4_LABEL = "*Item Name:"
|
||||
L.BS_SPELL_ARG5_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_ITEM_HELP = "Use an item. Can take either a bag and slot, or an item name."
|
||||
L.BS_ITEM_ARG1_LABEL = "Bag Number:"
|
||||
L.BS_ITEM_ARG2_LABEL = "Slot Number:"
|
||||
L.BS_ITEM_ARG3_LABEL = "Item Name:"
|
||||
L.BS_ITEM_ARG4_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_MACRO_HELP = "Use a custom macro in a given index"
|
||||
L.BS_MACRO_ARG1_LABEL = "Macro Index:"
|
||||
L.BS_MACRO_ARG2_LABEL = "Macro Text:"
|
||||
|
||||
L.BS_STOP_HELP = "Stops casting the current spell"
|
||||
|
||||
L.BS_TARGET_HELP = "Targets the unit"
|
||||
L.BS_TARGET_ARG1_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_FOCUS_HELP = "Sets your \"focus\" unit"
|
||||
L.BS_FOCUS_ARG1_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_ASSIST_HELP = "Assists the unit"
|
||||
L.BS_ASSIST_ARG1_LABEL = "(Optional) Unit:"
|
||||
|
||||
L.BS_CLICK_HELP = "Simulate click on a button"
|
||||
L.BS_CLICK_ARG1_LABEL = "Button Name:"
|
||||
|
||||
L.BS_MENU_HELP = "Shows the unit pop up menu"
|
||||
|
||||
L.CUSTOM = "Custom"
|
||||
L.FRAMES = "Frames"
|
||||
L.PROFILES = "Profiles"
|
||||
L.DELETE = "Delete"
|
||||
L.EDIT = "Edit"
|
||||
|
||||
L["Clique Options"] = "Clique Options"
|
||||
L["Spec 1:"] = "Spec 1:"
|
||||
L["Spec 2:"] = "Spec 2:"
|
||||
L["Spec 3:"] = "Spec 3:"
|
||||
L["Spec 4:"] = "Spec 4:"
|
||||
L["Spec 5:"] = "Spec 5:"
|
||||
L["Spec 6:"] = "Spec 6:"
|
||||
L["Spec 7:"] = "Spec 7:"
|
||||
L["Spec 8:"] = "Spec 8:"
|
||||
L["Spec 9:"] = "Spec 9:"
|
||||
L["Spec 10:"] = "Spec 10:"
|
||||
L["Spec 11:"] = "Spec 11:"
|
||||
L["Spec 12:"] = "Spec 12:"
|
||||
L.DOWNCLICK_LABEL = "Trigger clicks on the 'down' portion of the click"
|
||||
L.SPECSWITCH_LABEL = "Change profile when switching talent specs"
|
||||
end
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
--[[---------------------------------------------------------------------------------
|
||||
Localisation for esES (Spanish)
|
||||
----------------------------------------------------------------------------------]]
|
||||
|
||||
local L = Clique.Locals
|
||||
|
||||
-- This is the default locale.
|
||||
if GetLocale() == "esES" then
|
||||
L.RANK = "Rango"
|
||||
L.RANK_PATTERN = "Rango (%d+)"
|
||||
L.CAST_FORMAT = "%s(Rango %s)"
|
||||
L.RACIAL_PASSIVE = "Pasivo racial"
|
||||
L.PASSIVE = SPELL_PASSIVE
|
||||
L.CLICKSET_DEFAULT = "Por Defecto"
|
||||
L.CLICKSET_HARMFUL = "Aciones de Daño"
|
||||
L.CLICKSET_HELPFUL = "Acciones de Ayuda"
|
||||
L.CLICKSET_OOC = "Fuera de Combate"
|
||||
L.CLICKSET_BEARFORM = "Forma de Oso"
|
||||
L.CLICKSET_CATFORM = "Forma Felina"
|
||||
L.CLICKSET_AQUATICFORM = "Forma Acuática"
|
||||
L.CLICKSET_TRAVELFORM = "Forma de Viaje"
|
||||
L.CLICKSET_MOONKINFORM = "Forma de Moonkin"
|
||||
L.CLICKSET_TREEOFLIFE = "Forma de Arbol de Vida"
|
||||
L.CLICKSET_SHADOWFORM = "Forma de las Sombras"
|
||||
L.CLICKSET_STEALTHED = "En Sigilo"
|
||||
L.CLICKSET_BATTLESTANCE = "Actitud de Batalla"
|
||||
L.CLICKSET_DEFENSIVESTANCE = "Actitud Defensiva"
|
||||
L.CLICKSET_BERSERKERSTANCE = "Actitud Rabiosa"
|
||||
|
||||
L.BEAR_FORM = "Forma de Oso"
|
||||
L.DIRE_BEAR_FORM = "Forma de Oso Temible"
|
||||
L.CAT_FORM = "Forma Felina"
|
||||
L.AQUATIC_FORM = "Forma Acuática"
|
||||
L.TRAVEL_FORM = "Forma de Viaje"
|
||||
L.TREEOFLIFE = "Arbol de Vida"
|
||||
L.MOONKIN_FORM = "Forma de Moonkin"
|
||||
L.STEALTH = "Sigilo"
|
||||
L.SHADOWFORM = "Forma de las Sombras"
|
||||
L.BATTLESTANCE = "Actitud de Batalla"
|
||||
L.DEFENSIVESTANCE = "Actitud Defensiva"
|
||||
L.BERSERKERSTANCE = "Actitud Rabiosa"
|
||||
|
||||
L.BINDING_NOT_DEFINED = "Binding no definido"
|
||||
L.CANNOT_CHANGE_COMBAT = "No puede hacer cambios en combate. Los cambios se realizarán cuando salga de combate."
|
||||
L.APPLY_QUEUE = "Fuera de combate. Aplicando todos los cambios pendientes."
|
||||
L.PROFILE_CHANGED = "El perfil ha cambiado a '%s'."
|
||||
L.PROFILE_DELETED = "El perfil '%s' ha sido borrado."
|
||||
L.PROFILE_RESET = "Su perfil '%s' ha sido resetiado."
|
||||
L.ACTION_ACTIONBAR = "Cambiar Barra de Acción"
|
||||
L.ACTION_ACTION = "Botón de Acción"
|
||||
L.ACTION_PET = "Botón de Acción Mascota"
|
||||
L.ACTION_SPELL = "Lanzar Hechizo"
|
||||
L.ACTION_ITEM = "Usar Item"
|
||||
L.ACTION_MACRO = "Ejecutar macro por defecto"
|
||||
L.ACTION_STOP = "Parar Lanzamiento"
|
||||
L.ACTION_TARGET = "Apuntar Unidad"
|
||||
L.ACTION_FOCUS = "Fijar Foco"
|
||||
L.ACTION_ASSIST = "Asistir Unidad"
|
||||
L.ACTION_CLICK = "Click Botón"
|
||||
L.ACTION_MENU = "Mostrar Menú"
|
||||
|
||||
L.HELP_TEXT = "Bienvenido a Clique. Para su operación básica, usted puede navegar por el Libro de Hechizos (Spellbook) y determinar que hechizo le gustaría asociar a un click específico. Luego haga click sobre el hechizo, con la combinación de teclas que a usted le guste (click o click + teclado). Por ejemplo, un sacerdote puede buscar en su libro de hechizos la \"Sanación Relámpago\" (Flash Heal) y realizar sobre este un Shift+LeftClick, lo cual asociará dicho hechizo a las combinación de teclas Shift+LeftClick."
|
||||
L.CUSTOM_HELP = "Esta es la pantalla de edición por defecto de Clique. Desde aquí usted puede configurar cualquiera de las combinaciones que el UI tiene disponible para nosotros en respuesta a los clicks. Seleccione una acción base de la columna izquierda. Usted puede hacer clic en el botón de abajo para asociar las convinaciones de clicks + teclas que desee, y entonces proporcionar los argumentos requeridos (if any)."
|
||||
|
||||
L.BS_ACTIONBAR_HELP = "Cambie la barra de acción. 'increment' lo moverá arriba de una pagina, 'decrement' hará lo contrario. Si usted proporciona un número, la barra de acción será girada a esa página. Usted puede especificar 1,3 para alternar entre las páginas 1 y 3."
|
||||
|
||||
L.BS_ACTIONBAR_ARG1_LABEL = "Acción:"
|
||||
|
||||
L.BS_ACTION_HELP = "Simular un click sobre un botón de acción. Especificar el número del botón de acción."
|
||||
L.BS_ACTION_ARG1_LABEL = "Número de Botón:"
|
||||
L.BS_ACTION_ARG2_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_PET_HELP = "Simular un click sobre el botón de acción de mascotas. Especificar el número de botón."
|
||||
L.BS_PET_ARG1_LABEL = "Número de Boton Mascota:"
|
||||
L.BS_PET_ARG2_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_SPELL_HELP = "Lanzar un hechizo desde el libro de hechizos. Toma un nombre de hechizo y opcionalmente una bolsa (bag) y ranura (slot) o un nombre de ítem para usar como objetivo del hechizo (i.e. Alimentar Mascota)"
|
||||
L.BS_SPELL_ARG1_LABEL = "Nombre del Hechizo:"
|
||||
L.BS_SPELL_ARG2_LABEL = "*Número de Rango/Bolsa:"
|
||||
L.BS_SPELL_ARG3_LABEL = "*Número de Ranura (Slot):"
|
||||
L.BS_SPELL_ARG4_LABEL = "*Nombre del Item:"
|
||||
L.BS_SPELL_ARG5_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_ITEM_HELP = "Use un item. Puede tomar una bolsa y ranura o un nombre de item."
|
||||
L.BS_ITEM_ARG1_LABEL = "Número de Bolsa:"
|
||||
L.BS_ITEM_ARG2_LABEL = "Número de Ranura (Slot):"
|
||||
L.BS_ITEM_ARG3_LABEL = "Nombre del Item:"
|
||||
L.BS_ITEM_ARG4_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_MACRO_HELP = "Use una macro por defecto en un indice en particular"
|
||||
L.BS_MACRO_ARG1_LABEL = "Indice Macro:"
|
||||
L.BS_MACRO_ARG2_LABEL = "Texto Macro:"
|
||||
|
||||
L.BS_STOP_HELP = "Parar de lanzar hechizos en curso"
|
||||
|
||||
L.BS_TARGET_HELP = "Apuntar unidad"
|
||||
L.BS_TARGET_ARG1_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_FOCUS_HELP = "Fijar su \"foco\" en unidad"
|
||||
L.BS_FOCUS_ARG1_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_ASSIST_HELP = "Asistir la unidad"
|
||||
L.BS_ASSIST_ARG1_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_CLICK_HELP = "Simular click sobre un botón"
|
||||
L.BS_CLICK_ARG1_LABEL = "Nombre del Botón:"
|
||||
|
||||
L.BS_MENU_HELP = "Muestra menú emergente de la unidad"
|
||||
end
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
--[[---------------------------------------------------------------------------------
|
||||
Localisation for esMX (Spanish)
|
||||
----------------------------------------------------------------------------------]]
|
||||
|
||||
local L = Clique.Locals
|
||||
|
||||
-- This is the default locale.
|
||||
if GetLocale() == "esMX" then
|
||||
L.RANK = "Rango"
|
||||
L.RANK_PATTERN = "Rango (%d+)"
|
||||
L.CAST_FORMAT = "%s(Rango %s)"
|
||||
L.RACIAL_PASSIVE = "Pasivo racial"
|
||||
L.PASSIVE = SPELL_PASSIVE
|
||||
L.CLICKSET_DEFAULT = "Por Defecto"
|
||||
L.CLICKSET_HARMFUL = "Aciones de Daño"
|
||||
L.CLICKSET_HELPFUL = "Acciones de Ayuda"
|
||||
L.CLICKSET_OOC = "Fuera de Combate"
|
||||
L.CLICKSET_BEARFORM = "Forma de Oso"
|
||||
L.CLICKSET_CATFORM = "Forma Felina"
|
||||
L.CLICKSET_AQUATICFORM = "Forma Acuática"
|
||||
L.CLICKSET_TRAVELFORM = "Forma de Viaje"
|
||||
L.CLICKSET_MOONKINFORM = "Forma de Moonkin"
|
||||
L.CLICKSET_TREEOFLIFE = "Forma de Arbol de Vida"
|
||||
L.CLICKSET_SHADOWFORM = "Forma de las Sombras"
|
||||
L.CLICKSET_STEALTHED = "En Sigilo"
|
||||
L.CLICKSET_BATTLESTANCE = "Actitud de Batalla"
|
||||
L.CLICKSET_DEFENSIVESTANCE = "Actitud Defensiva"
|
||||
L.CLICKSET_BERSERKERSTANCE = "Actitud Rabiosa"
|
||||
|
||||
L.BEAR_FORM = "Forma de Oso"
|
||||
L.DIRE_BEAR_FORM = "Forma de Oso Temible"
|
||||
L.CAT_FORM = "Forma Felina"
|
||||
L.AQUATIC_FORM = "Forma Acuática"
|
||||
L.TRAVEL_FORM = "Forma de Viaje"
|
||||
L.TREEOFLIFE = "Arbol de Vida"
|
||||
L.MOONKIN_FORM = "Forma de Moonkin"
|
||||
L.STEALTH = "Sigilo"
|
||||
L.SHADOWFORM = "Forma de las Sombras"
|
||||
L.BATTLESTANCE = "Actitud de Batalla"
|
||||
L.DEFENSIVESTANCE = "Actitud Defensiva"
|
||||
L.BERSERKERSTANCE = "Actitud Rabiosa"
|
||||
|
||||
L.BINDING_NOT_DEFINED = "Binding no definido"
|
||||
L.CANNOT_CHANGE_COMBAT = "No puede hacer cambios en combate. Los cambios se realizarán cuando salga de combate."
|
||||
L.APPLY_QUEUE = "Fuera de combate. Aplicando todos los cambios pendientes."
|
||||
L.PROFILE_CHANGED = "El perfil ha cambiado a '%s'."
|
||||
L.PROFILE_DELETED = "El perfil '%s' ha sido borrado."
|
||||
L.PROFILE_RESET = "Su perfil '%s' ha sido resetiado."
|
||||
L.ACTION_ACTIONBAR = "Cambiar Barra de Acción"
|
||||
L.ACTION_ACTION = "Botón de Acción"
|
||||
L.ACTION_PET = "Botón de Acción Mascota"
|
||||
L.ACTION_SPELL = "Lanzar Hechizo"
|
||||
L.ACTION_ITEM = "Usar Item"
|
||||
L.ACTION_MACRO = "Ejecutar macro por defecto"
|
||||
L.ACTION_STOP = "Parar Lanzamiento"
|
||||
L.ACTION_TARGET = "Apuntar Unidad"
|
||||
L.ACTION_FOCUS = "Fijar Foco"
|
||||
L.ACTION_ASSIST = "Asistir Unidad"
|
||||
L.ACTION_CLICK = "Click Botón"
|
||||
L.ACTION_MENU = "Mostrar Menú"
|
||||
|
||||
L.HELP_TEXT = "Bienvenido a Clique. Para su operación básica, usted puede navegar por el Libro de Hechizos (Spellbook) y determinar que hechizo le gustaría asociar a un click específico. Luego haga click sobre el hechizo, con la combinación de teclas que a usted le guste (click o click + teclado). Por ejemplo, un sacerdote puede buscar en su libro de hechizos la \"Sanación Relámpago\" (Flash Heal) y realizar sobre este un Shift+LeftClick, lo cual asociará dicho hechizo a las combinación de teclas Shift+LeftClick."
|
||||
L.CUSTOM_HELP = "Esta es la pantalla de edición por defecto de Clique. Desde aquí usted puede configurar cualquiera de las combinaciones que el UI tiene disponible para nosotros en respuesta a los clicks. Seleccione una acción base de la columna izquierda. Usted puede hacer clic en el botón de abajo para asociar las convinaciones de clicks + teclas que desee, y entonces proporcionar los argumentos requeridos (if any)."
|
||||
|
||||
L.BS_ACTIONBAR_HELP = "Cambie la barra de acción. 'increment' lo moverá arriba de una pagina, 'decrement' hará lo contrario. Si usted proporciona un número, la barra de acción será girada a esa página. Usted puede especificar 1,3 para alternar entre las páginas 1 y 3."
|
||||
|
||||
L.BS_ACTIONBAR_ARG1_LABEL = "Acción:"
|
||||
|
||||
L.BS_ACTION_HELP = "Simular un click sobre un botón de acción. Especificar el número del botón de acción."
|
||||
L.BS_ACTION_ARG1_LABEL = "Número de Botón:"
|
||||
L.BS_ACTION_ARG2_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_PET_HELP = "Simular un click sobre el botón de acción de mascotas. Especificar el número de botón."
|
||||
L.BS_PET_ARG1_LABEL = "Número de Boton Mascota:"
|
||||
L.BS_PET_ARG2_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_SPELL_HELP = "Lanzar un hechizo desde el libro de hechizos. Toma un nombre de hechizo y opcionalmente una bolsa (bag) y ranura (slot) o un nombre de ítem para usar como objetivo del hechizo (i.e. Alimentar Mascota)"
|
||||
L.BS_SPELL_ARG1_LABEL = "Nombre del Hechizo:"
|
||||
L.BS_SPELL_ARG2_LABEL = "*Número de Rango/Bolsa:"
|
||||
L.BS_SPELL_ARG3_LABEL = "*Número de Ranura (Slot):"
|
||||
L.BS_SPELL_ARG4_LABEL = "*Nombre del Item:"
|
||||
L.BS_SPELL_ARG5_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_ITEM_HELP = "Use un item. Puede tomar una bolsa y ranura o un nombre de item."
|
||||
L.BS_ITEM_ARG1_LABEL = "Número de Bolsa:"
|
||||
L.BS_ITEM_ARG2_LABEL = "Número de Ranura (Slot):"
|
||||
L.BS_ITEM_ARG3_LABEL = "Nombre del Item:"
|
||||
L.BS_ITEM_ARG4_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_MACRO_HELP = "Use una macro por defecto en un indice en particular"
|
||||
L.BS_MACRO_ARG1_LABEL = "Indice Macro:"
|
||||
L.BS_MACRO_ARG2_LABEL = "Texto Macro:"
|
||||
|
||||
L.BS_STOP_HELP = "Parar de lanzar hechizos en curso"
|
||||
|
||||
L.BS_TARGET_HELP = "Apuntar unidad"
|
||||
L.BS_TARGET_ARG1_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_FOCUS_HELP = "Fijar su \"foco\" en unidad"
|
||||
L.BS_FOCUS_ARG1_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_ASSIST_HELP = "Asistir la unidad"
|
||||
L.BS_ASSIST_ARG1_LABEL = "(Opcional) Unidad:"
|
||||
|
||||
L.BS_CLICK_HELP = "Simular click sobre un botón"
|
||||
L.BS_CLICK_ARG1_LABEL = "Nombre del Botón:"
|
||||
|
||||
L.BS_MENU_HELP = "Muestra menú emergente de la unidad"
|
||||
end
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
--[[---------------------------------------------------------------------------------
|
||||
Localisation for frFR. Any commented lines need to be updated
|
||||
----------------------------------------------------------------------------------]]
|
||||
|
||||
local L = Clique.Locals
|
||||
|
||||
if GetLocale() == "frFR" then
|
||||
L.RANK = "Rang"
|
||||
L.RANK_PATTERN = "Rang (%d+)"
|
||||
L.CAST_FORMAT = "%s(Rang %d)"
|
||||
|
||||
-- L.RACIAL_PASSIVE = "Racial Passive"
|
||||
|
||||
-- L.CLICKSET_DEFAULT = "Default"
|
||||
-- L.CLICKSET_HARMFUL = "Harmful actions"
|
||||
-- L.CLICKSET_HELPFUL = "Helpful actions"
|
||||
-- L.CLICKSET_OOC = "Out of Combat"
|
||||
|
||||
-- L.BINDING_NOT_DEFINED = "Binding not defined"
|
||||
|
||||
-- L.HELP_TEXT = "Welcome to Clique. For basic operation, you can navigate the spellbook and decide what spell you'd like to bind to a specific click. Then click on that spell with whatever click-binding you would like. For example, navigate to \"Flash Heal\" and shift-LeftClick on it to bind that spell to Shift-LeftClick."
|
||||
-- L.CUSTOM_HELP = "This is the Clique custom edit screen. From here you can configure any of the combinations that the UI makes available to us in response to clicks. Select a base action from the left column. You can then click on the button below to set the binding you'd like, and then supply the arguments required (if any)."
|
||||
end
|
||||
@@ -1,23 +0,0 @@
|
||||
--[[---------------------------------------------------------------------------------
|
||||
Localisation for koKR. Any commented lines need to be updated
|
||||
----------------------------------------------------------------------------------]]
|
||||
|
||||
local L = Clique.Locals
|
||||
|
||||
if GetLocale() == "koKR" then
|
||||
L.RANK = "레벨"
|
||||
L.RANK_PATTERN = "(%d+) 레벨"
|
||||
L.CAST_FORMAT = "%s(%d 레벨)"
|
||||
|
||||
-- L.RACIAL_PASSIVE = "Racial Passive"
|
||||
|
||||
-- L.CLICKSET_DEFAULT = "Default"
|
||||
-- L.CLICKSET_HARMFUL = "Harmful actions"
|
||||
-- L.CLICKSET_HELPFUL = "Helpful actions"
|
||||
-- L.CLICKSET_OOC = "Out of Combat"
|
||||
|
||||
-- L.BINDING_NOT_DEFINED = "Binding not defined"
|
||||
|
||||
-- L.HELP_TEXT = "Welcome to Clique. For basic operation, you can navigate the spellbook and decide what spell you'd like to bind to a specific click. Then click on that spell with whatever click-binding you would like. For example, navigate to \"Flash Heal\" and shift-LeftClick on it to bind that spell to Shift-LeftClick."
|
||||
-- L.CUSTOM_HELP = "This is the Clique custom edit screen. From here you can configure any of the combinations that the UI makes available to us in response to clicks. Select a base action from the left column. You can then click on the button below to set the binding you'd like, and then supply the arguments required (if any)."
|
||||
end
|
||||
@@ -1,112 +0,0 @@
|
||||
--[[---------------------------------------------------------------------------------
|
||||
Localisation for Russian
|
||||
Перевод на русский от Сини
|
||||
----------------------------------------------------------------------------------]]
|
||||
|
||||
local L = Clique.Locals
|
||||
|
||||
-- This is the default locale.
|
||||
if GetLocale() == "ruRU" then
|
||||
L.RANK = "Уровень"
|
||||
L.RANK_PATTERN = "Уровень (%d+)"
|
||||
L.CAST_FORMAT = "%s(Уровень %s)"
|
||||
|
||||
L.RACIAL_PASSIVE = "Пассивный расовый навык"
|
||||
L.PASSIVE = SPELL_PASSIVE
|
||||
|
||||
L.CLICKSET_DEFAULT = "Стандартный"
|
||||
L.CLICKSET_HARMFUL = "Вредящие действия"
|
||||
L.CLICKSET_HELPFUL = "Помогающие действия"
|
||||
L.CLICKSET_OOC = "Вне боя"
|
||||
L.CLICKSET_BEARFORM = "Облик медведя"
|
||||
L.CLICKSET_CATFORM = "Облик кошки"
|
||||
L.CLICKSET_AQUATICFORM = "Водный облик"
|
||||
L.CLICKSET_TRAVELFORM = "Походный облик"
|
||||
L.CLICKSET_MOONKINFORM = "Облик лунного совуха"
|
||||
L.CLICKSET_TREEOFLIFE = "Древо Жизни"
|
||||
L.CLICKSET_SHADOWFORM = "Облик Тьмы"
|
||||
L.CLICKSET_STEALTHED = "Незаметность"
|
||||
L.CLICKSET_BATTLESTANCE = "Боевая стойка"
|
||||
L.CLICKSET_DEFENSIVESTANCE = "Оборонительная стойка"
|
||||
L.CLICKSET_BERSERKERSTANCE = "Стойка берсерка"
|
||||
|
||||
L.BEAR_FORM = "Облик медведя"
|
||||
L.DIRE_BEAR_FORM = "Облик лютого медведя"
|
||||
L.CAT_FORM = "Облик кошки"
|
||||
L.AQUATIC_FORM = "Водный облик"
|
||||
L.TRAVEL_FORM = "Походный облик"
|
||||
L.TREEOFLIFE = "Древо Жизни"
|
||||
L.MOONKIN_FORM = "Облик лунного совуха"
|
||||
L.STEALTH = "Незаметность"
|
||||
L.SHADOWFORM = "Облик Тьмы"
|
||||
L.BATTLESTANCE = "Боевая стойка"
|
||||
L.DEFENSIVESTANCE = "Оборонительная стойка"
|
||||
L.BERSERKERSTANCE = "Стойка берсерка"
|
||||
|
||||
L.BINDING_NOT_DEFINED = "Действие не определено"
|
||||
L.CANNOT_CHANGE_COMBAT = "Во время боя применить изменения невозможно. Они будут отложены, пока Вы не выйдете из боя."
|
||||
L.APPLY_QUEUE = "Бой окончен. Применяю все запланированные изменения."
|
||||
L.PROFILE_CHANGED = "Профиль сменен на '%s'."
|
||||
L.PROFILE_DELETED = "Профить '%s' был удален."
|
||||
L.PROFILE_RESET = "Ваш профиль '%s' был сброшен."
|
||||
|
||||
L.ACTION_ACTIONBAR = "Сменить панель команд"
|
||||
L.ACTION_ACTION = "Кнопка действия"
|
||||
L.ACTION_PET = "Кнопка действия питомца"
|
||||
L.ACTION_SPELL = "Колдовать заклинание"
|
||||
L.ACTION_ITEM = "Использовать предмет"
|
||||
L.ACTION_MACRO = "Выполнить макрос"
|
||||
L.ACTION_STOP = "Прекратить колдование"
|
||||
L.ACTION_TARGET = "Выбрать цель"
|
||||
L.ACTION_FOCUS = "Установить фокус"
|
||||
L.ACTION_ASSIST = "Помочь"
|
||||
L.ACTION_CLICK = "Щелкнуть кнопкой"
|
||||
L.ACTION_MENU = "Показать меню"
|
||||
|
||||
L.HELP_TEXT = "Добро пожаловать в Clique. Для начала простого использования, откройте книгу заклинаний и выберите заклинание, которое Вы хотели бы назначить на определенный щелчок мышью. Затем щелкните по заклинанию именно таким щелчком, какой Вы выбрали. Например, зайдите на страницу с заклинанием \"Быстрое исцеление\" и щелкните по нему, удерживая Shift, чтобы закрепить \"Shift+Щелчок\" за этим заклинанием."
|
||||
L.CUSTOM_HELP = "Это экран ручной настройки Clique. Отсюда Вы можете настроить любую комбинацию, которая предоставляется интерфейсом Warcraft как цель для щелчков мышью. Выберите базовое действие из левой колонки. Затем Вы сможете щелкнуть по кнопке внизу, чтобы установить любое нужно действие, и ввести требуемые аргументы (если необходимо)."
|
||||
|
||||
L.BS_ACTIONBAR_HELP = "Сменить панель команд. 'increment' сдвинет на одну панель вверх, 'decrement' - в обратную сторону. Если Вы введете номер, то будет выбираться соответсвующая панель команд. Вы можете ввести 1,3 чтобы переключаться между 1-ой и 3-ей панелями."
|
||||
L.BS_ACTIONBAR_ARG1_LABEL = "Действие:"
|
||||
|
||||
L.BS_ACTION_HELP = "Эмулировать щелчок мышью по кнопке действия. Введите номер кнопки действия."
|
||||
L.BS_ACTION_ARG1_LABEL = "Номер кнопки:"
|
||||
L.BS_ACTION_ARG2_LABEL = "(необязательно) Цель:"
|
||||
|
||||
L.BS_PET_HELP = "Эмулировать щелчок мышью по кнопке действия питомца. Введите номер кнопки."
|
||||
L.BS_PET_ARG1_LABEL = "Номер кнопки питомца:"
|
||||
L.BS_PET_ARG2_LABEL = "(необязательно) Цель:"
|
||||
|
||||
L.BS_SPELL_HELP = "Колдовать заклинание из книги заклинаний. В качестве аргументов принимается название заклинания, необязательно - номер сумки и позиция внутри сумки, или название предмета как цели заклинания (например \"Накормить питомца\")."
|
||||
L.BS_SPELL_ARG1_LABEL = "Название заклинания:"
|
||||
L.BS_SPELL_ARG2_LABEL = "*Уровень/Номер сумки:"
|
||||
L.BS_SPELL_ARG3_LABEL = "*Номер позиции:"
|
||||
L.BS_SPELL_ARG4_LABEL = "*Название предмета:"
|
||||
L.BS_SPELL_ARG5_LABEL = "(необязательно) Цель:"
|
||||
|
||||
L.BS_ITEM_HELP = "Использовать предмет. Принимается номер сумки и позиции внутри сумки, или название предмета."
|
||||
L.BS_ITEM_ARG1_LABEL = "Номер сумки:"
|
||||
L.BS_ITEM_ARG2_LABEL = "Номер позиции:"
|
||||
L.BS_ITEM_ARG3_LABEL = "Название предмета:"
|
||||
L.BS_ITEM_ARG4_LABEL = "(необязательно) Цель:"
|
||||
|
||||
L.BS_MACRO_HELP = "Использовать макрос из указанного номера ячейки."
|
||||
L.BS_MACRO_ARG1_LABEL = "Номер ячейки макроса:"
|
||||
L.BS_MACRO_ARG2_LABEL = "Текст макроса:"
|
||||
|
||||
L.BS_STOP_HELP = "Прекратить колдование текущего заклинания."
|
||||
|
||||
L.BS_TARGET_HELP = "Выбрать цель."
|
||||
L.BS_TARGET_ARG1_LABEL = "(необязательно) Цель:"
|
||||
|
||||
L.BS_FOCUS_HELP = "Установаить \"фокус\" на цели."
|
||||
L.BS_FOCUS_ARG1_LABEL = "(необязательно) Цель:"
|
||||
|
||||
L.BS_ASSIST_HELP = "Помочь цели."
|
||||
L.BS_ASSIST_ARG1_LABEL = "(необязательно) Цель:"
|
||||
|
||||
L.BS_CLICK_HELP = "Эмулировать щелчок по кнопке."
|
||||
L.BS_CLICK_ARG1_LABEL = "Название кнопки:"
|
||||
|
||||
L.BS_MENU_HELP = "Показать всплывающее меню цели."
|
||||
end
|
||||
@@ -1,111 +0,0 @@
|
||||
-------------------------------------------------------------------------------
|
||||
-- Localization --
|
||||
-- Simple Chinese Translated by 昏睡墨鱼&Costa<CWDG> --
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
local L = Clique.Locals
|
||||
|
||||
if GetLocale() == "zhCN" then
|
||||
L.RANK = "等级"
|
||||
L.RANK_PATTERN = "等级 (%d+)"
|
||||
L.CAST_FORMAT = "%s(等级 %s)"
|
||||
|
||||
L.RACIAL_PASSIVE = "种族被动技能"
|
||||
L.PASSIVE = SPELL_PASSIVE
|
||||
|
||||
L.CLICKSET_DEFAULT = "默认"
|
||||
L.CLICKSET_HARMFUL = "对敌方动作"
|
||||
L.CLICKSET_HELPFUL = "对友方动作"
|
||||
L.CLICKSET_OOC = "非战斗中动作"
|
||||
L.CLICKSET_BEARFORM = "熊形态"
|
||||
L.CLICKSET_CATFORM = "猎豹形态"
|
||||
L.CLICKSET_AQUATICFORM = "水栖形态"
|
||||
L.CLICKSET_TRAVELFORM = "旅行形态"
|
||||
L.CLICKSET_MOONKINFORM = "枭兽形态"
|
||||
L.CLICKSET_TREEOFLIFE = "树形"
|
||||
L.CLICKSET_SHADOWFORM = "暗影形态"
|
||||
L.CLICKSET_STEALTHED = "潜行状态"
|
||||
L.CLICKSET_BATTLESTANCE = "战斗姿态"
|
||||
L.CLICKSET_DEFENSIVESTANCE = "防御姿态"
|
||||
L.CLICKSET_BERSERKERSTANCE = "狂暴姿态"
|
||||
|
||||
L.BEAR_FORM = "熊形态"
|
||||
L.DIRE_BEAR_FORM = "巨熊形态"
|
||||
L.CAT_FORM = "猎豹形态"
|
||||
L.AQUATIC_FORM = "水栖形态"
|
||||
L.TRAVEL_FORM = "旅行形态"
|
||||
L.TREEOFLIFE = "树形"
|
||||
L.MOONKIN_FORM = "枭兽形态"
|
||||
L.STEALTH = "潜行状态"
|
||||
L.SHADOWFORM = "暗影形态"
|
||||
L.BATTLESTANCE = "战斗姿态"
|
||||
L.DEFENSIVESTANCE = "防御姿态"
|
||||
L.BERSERKERSTANCE = "狂暴姿态"
|
||||
|
||||
L.BINDING_NOT_DEFINED = "未定义绑定"
|
||||
L.CANNOT_CHANGE_COMBAT = "战斗状态中无法改变. 这些改变被推迟到脱离战斗状态后."
|
||||
L.APPLY_QUEUE = "脱离战斗状态. 进行所有预定了的改变."
|
||||
L.PROFILE_CHANGED = "已经切换到设置 '%s'."
|
||||
L.PROFILE_DELETED = "你的设置 '%s' 已经被删除."
|
||||
L.PROFILE_RESET = "你的设置 '%s' 已经被重值."
|
||||
|
||||
L.ACTION_ACTIONBAR = "切换动作条"
|
||||
L.ACTION_ACTION = "动作按钮"
|
||||
L.ACTION_PET = "宠物动作按钮"
|
||||
L.ACTION_SPELL = "释放法术"
|
||||
L.ACTION_ITEM = "使用物品"
|
||||
L.ACTION_MACRO = "运行自定义宏"
|
||||
L.ACTION_STOP = "终止施法"
|
||||
L.ACTION_TARGET = "目标单位"
|
||||
L.ACTION_FOCUS = "指定目标单位"
|
||||
L.ACTION_ASSIST = "协助某单位"
|
||||
L.ACTION_CLICK = "点击按钮"
|
||||
L.ACTION_MENU = "显示菜单"
|
||||
|
||||
L.HELP_TEXT = "欢迎使用Clique. 最基本的操作,你可以浏览法术书然后给喜欢的法术绑定按键.例如,你可以找到\快速治疗\ 然后按住shift点左键,这样shift+左键就被设置为释放快速治疗了."
|
||||
L.CUSTOM_HELP = "这是Clique自定义窗口.在这里,你可以设置任何点击影射到界面允许的组合按键. 从左侧选择一个基本的动作,然后可以可以点击下边的按钮来映射到任何你希望的操作. "
|
||||
|
||||
L.BS_ACTIONBAR_HELP = "切换动作条. 'increment' 会向后翻一页, 'decrement' 则相反. 如果你提供了一个编号, 动作条就会翻到那一页.你可以定义1,3来在1和3页之间翻动."
|
||||
L.BS_ACTIONBAR_ARG1_LABEL = "动作条:"
|
||||
|
||||
L.BS_ACTION_HELP = "将一种点击影射到某动作条的按钮上. 请指定动作条的编号."
|
||||
L.BS_ACTION_ARG1_LABEL = "按钮编号:"
|
||||
L.BS_ACTION_ARG2_LABEL = "(可选) 单位:"
|
||||
|
||||
L.BS_PET_HELP = "将一种点击影射到宠物动作条的按钮上. 请指定按钮编号."
|
||||
L.BS_PET_ARG1_LABEL = "宠物按钮编号:"
|
||||
L.BS_PET_ARG2_LABEL = "(可选) 单位:"
|
||||
|
||||
L.BS_SPELL_HELP = "从法术书上选择施法. 设定法术名称, 以及包裹与物品槽编号或者物品名称(可选), 来对目标进行施法 (例如喂养宠物)"
|
||||
L.BS_SPELL_ARG1_LABEL = "法术名称:"
|
||||
L.BS_SPELL_ARG2_LABEL = "*包裹编号:"
|
||||
L.BS_SPELL_ARG3_LABEL = "*物品槽编号:"
|
||||
L.BS_SPELL_ARG4_LABEL = "*物品名称:"
|
||||
L.BS_SPELL_ARG5_LABEL = "(可选) 单位:"
|
||||
|
||||
L.BS_ITEM_HELP = "使用一个物品. 可以通过包裹与物品槽的编号,或者物品名称来指定."
|
||||
L.BS_ITEM_ARG1_LABEL = "包裹编号:"
|
||||
L.BS_ITEM_ARG2_LABEL = "物品槽编号:"
|
||||
L.BS_ITEM_ARG3_LABEL = "物品名称:"
|
||||
L.BS_ITEM_ARG4_LABEL = "(可选) 单位:"
|
||||
|
||||
L.BS_MACRO_HELP = "使用给定索引的自定义宏"
|
||||
L.BS_MACRO_ARG1_LABEL = "宏索引:"
|
||||
L.BS_MACRO_ARG2_LABEL = "宏内容:"
|
||||
|
||||
L.BS_STOP_HELP = "中断当前施法"
|
||||
|
||||
L.BS_TARGET_HELP = "将单位设定为目标"
|
||||
L.BS_TARGET_ARG1_LABEL = "(可选) 单位:"
|
||||
|
||||
L.BS_FOCUS_HELP = "设定你的 \"目标\" 单位"
|
||||
L.BS_FOCUS_ARG1_LABEL = "(可选) 单位:"
|
||||
|
||||
L.BS_ASSIST_HELP = "协助某单位"
|
||||
L.BS_ASSIST_ARG1_LABEL = "(可选) 单位:"
|
||||
|
||||
L.BS_CLICK_HELP = "使用按钮模拟点击"
|
||||
L.BS_CLICK_ARG1_LABEL = "按钮名称:"
|
||||
|
||||
L.BS_MENU_HELP = "显示单位的弹出菜单"
|
||||
end
|
||||
@@ -1,111 +0,0 @@
|
||||
-------------------------------------------------------------------------------
|
||||
-- Localization --
|
||||
-- Simple Chinese Translated by 昏睡墨魚&Costa<CWDG> --
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
local L = Clique.Locals
|
||||
|
||||
if GetLocale() == "zhTW" then
|
||||
L.RANK = "等級"
|
||||
L.RANK_PATTERN = "等級 (%d+)"
|
||||
L.CAST_FORMAT = "%s(等級 %s)"
|
||||
|
||||
L.RACIAL_PASSIVE = "種族被動技能"
|
||||
L.PASSIVE = SPELL_PASSIVE
|
||||
|
||||
L.CLICKSET_DEFAULT = "默認"
|
||||
L.CLICKSET_HARMFUL = "對敵方動作"
|
||||
L.CLICKSET_HELPFUL = "對友方動作"
|
||||
L.CLICKSET_OOC = "非戰鬥中動作"
|
||||
L.CLICKSET_BEARFORM = "熊形態"
|
||||
L.CLICKSET_CATFORM = "獵豹形態"
|
||||
L.CLICKSET_AQUATICFORM = "水棲形態"
|
||||
L.CLICKSET_TRAVELFORM = "旅行形態"
|
||||
L.CLICKSET_MOONKINFORM = "梟獸形態"
|
||||
L.CLICKSET_TREEOFLIFE = "樹形"
|
||||
L.CLICKSET_SHADOWFORM = "暗影形態"
|
||||
L.CLICKSET_STEALTHED = "潛行狀態"
|
||||
L.CLICKSET_BATTLESTANCE = "戰鬥姿態"
|
||||
L.CLICKSET_DEFENSIVESTANCE = "防禦姿態"
|
||||
L.CLICKSET_BERSERKERSTANCE = "狂暴姿態"
|
||||
|
||||
L.BEAR_FORM = "熊形態"
|
||||
L.DIRE_BEAR_FORM = "巨熊形態"
|
||||
L.CAT_FORM = "獵豹形態"
|
||||
L.AQUATIC_FORM = "水棲形態"
|
||||
L.TRAVEL_FORM = "旅行形態"
|
||||
L.TREEOFLIFE = "樹形"
|
||||
L.MOONKIN_FORM = "梟獸形態"
|
||||
L.STEALTH = "潛行狀態"
|
||||
L.SHADOWFORM = "暗影形態"
|
||||
L.BATTLESTANCE = "戰鬥姿態"
|
||||
L.DEFENSIVESTANCE = "防禦姿態"
|
||||
L.BERSERKERSTANCE = "狂暴姿態"
|
||||
|
||||
L.BINDING_NOT_DEFINED = "未定義綁定"
|
||||
L.CANNOT_CHANGE_COMBAT = "戰鬥狀態中無法改變. 這些改變被推遲到脫離戰鬥狀態後."
|
||||
L.APPLY_QUEUE = "脫離戰鬥狀態. 進行所有預定了的改變."
|
||||
L.PROFILE_CHANGED = "已經切換到設置 '%s'."
|
||||
L.PROFILE_DELETED = "你的設置 '%s' 已經被刪除."
|
||||
L.PROFILE_RESET = "你的設置 '%s' 已經被重值."
|
||||
|
||||
L.ACTION_ACTIONBAR = "切換動作條"
|
||||
L.ACTION_ACTION = "動作按鈕"
|
||||
L.ACTION_PET = "寵物動作按鈕"
|
||||
L.ACTION_SPELL = "釋放法術"
|
||||
L.ACTION_ITEM = "使用物品"
|
||||
L.ACTION_MACRO = "運行自定義宏"
|
||||
L.ACTION_STOP = "終止施法"
|
||||
L.ACTION_TARGET = "目標單位"
|
||||
L.ACTION_FOCUS = "指定目標單位"
|
||||
L.ACTION_ASSIST = "協助某單位"
|
||||
L.ACTION_CLICK = "點擊按鈕"
|
||||
L.ACTION_MENU = "顯示功能表"
|
||||
|
||||
L.HELP_TEXT = "歡迎使用Clique. 最基本的操作,你可以流覽法術書然後給喜歡的法術綁定按鍵.例如,你可以找到\快速治療\ 然後按住shift點左鍵,這樣shift+左鍵就被設置為釋放快速治療了."
|
||||
L.CUSTOM_HELP = "這是Clique自定義視窗.在這裏,你可以設置任何點擊影射到介面允許的組合按鍵. 從左側選擇一個基本的動作,然後可以可以點擊下邊的按鈕來映射到任何你希望的操作. "
|
||||
|
||||
L.BS_ACTIONBAR_HELP = "切換動作條. 'increment' 會向後翻一頁, 'decrement' 則相反. 如果你提供了一個編號, 動作條就會翻到那一頁.你可以定義1,3來在1和3頁之間翻動."
|
||||
L.BS_ACTIONBAR_ARG1_LABEL = "動作條:"
|
||||
|
||||
L.BS_ACTION_HELP = "將一種點擊影射到某動作條的按鈕上. 請指定動作條的編號."
|
||||
L.BS_ACTION_ARG1_LABEL = "按鈕編號:"
|
||||
L.BS_ACTION_ARG2_LABEL = "(可選) 單位:"
|
||||
|
||||
L.BS_PET_HELP = "將一種點擊影射到寵物動作條的按鈕上. 請指定按鈕編號."
|
||||
L.BS_PET_ARG1_LABEL = "寵物按鈕編號:"
|
||||
L.BS_PET_ARG2_LABEL = "(可選) 單位:"
|
||||
|
||||
L.BS_SPELL_HELP = "從法術書上選擇施法. 設定法術名稱, 以及包裹與物品槽編號或者物品名稱(可選), 來對目標進行施法 (例如餵養寵物)"
|
||||
L.BS_SPELL_ARG1_LABEL = "法術名稱:"
|
||||
L.BS_SPELL_ARG2_LABEL = "*包裹編號:"
|
||||
L.BS_SPELL_ARG3_LABEL = "*物品槽編號:"
|
||||
L.BS_SPELL_ARG4_LABEL = "*物品名稱:"
|
||||
L.BS_SPELL_ARG5_LABEL = "(可選) 單位:"
|
||||
|
||||
L.BS_ITEM_HELP = "使用一個物品. 可以通過包裹與物品槽的編號,或者物品名稱來指定."
|
||||
L.BS_ITEM_ARG1_LABEL = "包裹編號:"
|
||||
L.BS_ITEM_ARG2_LABEL = "物品槽編號:"
|
||||
L.BS_ITEM_ARG3_LABEL = "物品名稱:"
|
||||
L.BS_ITEM_ARG4_LABEL = "(可選) 單位:"
|
||||
|
||||
L.BS_MACRO_HELP = "使用給定索引的自定義巨集"
|
||||
L.BS_MACRO_ARG1_LABEL = "巨集索引:"
|
||||
L.BS_MACRO_ARG2_LABEL = "巨集內容:"
|
||||
|
||||
L.BS_STOP_HELP = "中斷當前施法"
|
||||
|
||||
L.BS_TARGET_HELP = "將單位設定為目標"
|
||||
L.BS_TARGET_ARG1_LABEL = "(可選) 單位:"
|
||||
|
||||
L.BS_FOCUS_HELP = "設定你的 \"目標\" 單位"
|
||||
L.BS_FOCUS_ARG1_LABEL = "(可選) 單位:"
|
||||
|
||||
L.BS_ASSIST_HELP = "協助某單位"
|
||||
L.BS_ASSIST_ARG1_LABEL = "(可選) 單位:"
|
||||
|
||||
L.BS_CLICK_HELP = "使用按鈕類比點擊"
|
||||
L.BS_CLICK_ARG1_LABEL = "按鈕名稱:"
|
||||
|
||||
L.BS_MENU_HELP = "顯示單位的彈出功能表"
|
||||
end
|
||||
@@ -0,0 +1,296 @@
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- Utils.lua
|
||||
--
|
||||
-- This file contains a series of general utility functions that could be
|
||||
-- used throughout the addon, although in practice they are mostly used in
|
||||
-- the GUI.
|
||||
--
|
||||
-- Events registered:
|
||||
-- None
|
||||
-------------------------------------------------------------------------]] --
|
||||
local addonName, addon = ...
|
||||
local L = addon.L
|
||||
|
||||
local strconcat = strconcat
|
||||
---@diagnostic disable-next-line: undefined-field
|
||||
local strsplit = string.split
|
||||
|
||||
-- Returns the prefix string for the current keyboard state.
|
||||
--
|
||||
-- Arguments:
|
||||
-- split - Whether or not to split the modifier keys into left and right components
|
||||
|
||||
function addon:GetPrefixString(split)
|
||||
local shift, lshift, rshift = IsShiftKeyDown(), IsLeftShiftKeyDown(), IsRightShiftKeyDown()
|
||||
local ctrl, lctrl, rctrl = IsControlKeyDown(), IsLeftControlKeyDown(), IsRightControlKeyDown()
|
||||
local alt, lalt, ralt = IsAltKeyDown(), IsLeftAltKeyDown()
|
||||
IsRightAltKeyDown()
|
||||
|
||||
if not extended then
|
||||
shift = shift or lshift or rshift
|
||||
ctrl = ctrl or lctrl or rctrl
|
||||
alt = alt or lalt or ralt
|
||||
|
||||
lshift, rshift = false, false
|
||||
lctrl, rctrl = false, false
|
||||
lalt, ralt = false, false
|
||||
end
|
||||
|
||||
local prefix = ""
|
||||
if shift then prefix = ((lshift and "LSHIFT-") or (rshift and "RSHIFT-") or "SHIFT-") .. prefix end
|
||||
if ctrl then prefix = ((lctrl and "LCTRL-") or (rctrl and "RCTRL-") or "CTRL-") .. prefix end
|
||||
if alt then prefix = ((lalt and "LALT-") or (ralt and "RALT-") or "ALT-") .. prefix end
|
||||
|
||||
return prefix
|
||||
end
|
||||
|
||||
-- This function can return a substring of a UTF-8 string, properly handling
|
||||
-- UTF-8 codepoints. Rather than taking a start index and optionally an end
|
||||
-- index, it takes the string, the start index and the number of characters
|
||||
-- to select from the string.
|
||||
--
|
||||
-- UTF-8 Reference:
|
||||
-- 0xxxxxx - ASCII character
|
||||
-- 110yyyxx - 2 byte UTF codepoint
|
||||
-- 1110yyyy - 3 byte UTF codepoint
|
||||
-- 11110zzz - 4 byte UTF codepoint
|
||||
|
||||
local function utf8sub(str, start, numChars)
|
||||
local currentIndex = start
|
||||
while numChars > 0 and currentIndex <= #str do
|
||||
local char = string.byte(str, currentIndex)
|
||||
if char >= 240 then
|
||||
currentIndex = currentIndex + 4
|
||||
elseif char >= 225 then
|
||||
currentIndex = currentIndex + 3
|
||||
elseif char >= 192 then
|
||||
currentIndex = currentIndex + 2
|
||||
else
|
||||
currentIndex = currentIndex + 1
|
||||
end
|
||||
numChars = numChars - 1
|
||||
end
|
||||
return str:sub(start, currentIndex - 1)
|
||||
end
|
||||
|
||||
local convertMap = setmetatable({
|
||||
LSHIFT = L["LShift"],
|
||||
RSHIFT = L["RShift"],
|
||||
SHIFT = L["Shift"],
|
||||
LCTRL = L["LCtrl"],
|
||||
RCTRL = L["RCtrl"],
|
||||
CTRL = L["Ctrl"],
|
||||
LALT = L["LAlt"],
|
||||
RALT = L["RAlt"],
|
||||
ALT = L["Alt"],
|
||||
BUTTON1 = L["LeftButton"],
|
||||
BUTTON2 = L["RightButton"],
|
||||
BUTTON3 = L["MiddleButton"],
|
||||
MOUSEWHEELUP = L["MousewheelUp"],
|
||||
MOUSEWHEELDOWN = L["MousewheelDown"]
|
||||
}, {
|
||||
__index = function(t, k, v)
|
||||
if k:match("^BUTTON(%d+)$") then
|
||||
return k:gsub("^BUTTON(%d+)$", "Button%1")
|
||||
else
|
||||
if utf8sub(k, 1, 1) ~= k:sub(1, 1) then
|
||||
-- If the first character is a multi-byte UTF-8 character
|
||||
return k
|
||||
else
|
||||
-- Make the first character upper-case, lower the rest
|
||||
return tostring(k:sub(1, 1):upper()) .. tostring(k:sub(2, -1):lower())
|
||||
end
|
||||
end
|
||||
end
|
||||
})
|
||||
|
||||
local function convert(item, ...)
|
||||
if not item then
|
||||
return ""
|
||||
else
|
||||
local mapItem = convertMap[item]
|
||||
item = mapItem and mapItem or item
|
||||
|
||||
if select("#", ...) > 0 then
|
||||
return item, "-", convert(...)
|
||||
else
|
||||
return item, convert(...)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function addon:GetBindingIcon(binding)
|
||||
if type(binding) ~= "table" or not binding.type then return "Interface\\Icons\\INV_Misc_QuestionMark" end
|
||||
|
||||
local btype = binding.type
|
||||
if btype == "menu" then
|
||||
return "Interface\\Icons\\ability_hunter_snipershot"
|
||||
elseif btype == "target" then
|
||||
return "Interface\\Icons\\ability_vanish"
|
||||
else
|
||||
return binding.icon or "Interface\\Icons\\INV_Misc_QuestionMark"
|
||||
end
|
||||
end
|
||||
|
||||
function addon:GetBindingKeyComboText(binding)
|
||||
if type(binding) == "table" and binding.key then
|
||||
return strconcat(convert(strsplit("-", binding.key)))
|
||||
elseif type(binding) == "string" then
|
||||
return strconcat(convert(strsplit("-", binding)))
|
||||
else
|
||||
return L["Unknown"]
|
||||
end
|
||||
end
|
||||
|
||||
function addon:SpellTextWithSubName(binding)
|
||||
if binding.spellSubName then
|
||||
return string.format("%s(%s)", binding.spell, binding.spellSubName)
|
||||
else
|
||||
return binding.spell
|
||||
end
|
||||
end
|
||||
|
||||
function addon:GetBindingActionText(btype, binding)
|
||||
if btype == "menu" then
|
||||
return L["Show unit menu"]
|
||||
elseif btype == "target" then
|
||||
return L["Target clicked unit"]
|
||||
elseif btype == "spell" then
|
||||
return L["Cast %s"]:format(addon:SpellTextWithSubName(binding))
|
||||
elseif btype == "macro" and type(binding) == "table" then
|
||||
return L["Run macro '%s'"]:format(tostring(binding.macrotext))
|
||||
elseif btype == "macro" then
|
||||
return L["Run macro"]:format(tostring(binding.macrotext))
|
||||
else
|
||||
return L["Unknown binding type '%s'"]:format(tostring(btype))
|
||||
end
|
||||
end
|
||||
|
||||
function addon:GetBindingKey(binding)
|
||||
if type(binding) ~= "table" or not binding.key then return "UNKNOWN" end
|
||||
|
||||
local key = binding.key:match("[^%-]+$")
|
||||
return key
|
||||
end
|
||||
|
||||
local binMap = {
|
||||
ALT = 1,
|
||||
LALT = 2,
|
||||
RALT = 3,
|
||||
CTRL = 4,
|
||||
LCTRL = 5,
|
||||
LCTRL = 6,
|
||||
SHIFT = 7,
|
||||
LSHIFT = 8,
|
||||
RSHIFT = 9
|
||||
}
|
||||
|
||||
function addon:GetBinaryBindingKey(binding)
|
||||
if type(binding) ~= "table" or not binding.key then return "000000000" end
|
||||
|
||||
local ret = {"0", "0", "0", "0", "0", "0", "0", "0", "0"}
|
||||
local splits = {strsplit("-", binding.key)}
|
||||
for idx, modifier in ipairs(splits) do
|
||||
local bit = binMap[modifier]
|
||||
if bit then
|
||||
ret[bit] = "1"
|
||||
else
|
||||
ret[10] = modifier
|
||||
end
|
||||
end
|
||||
return table.concat(ret)
|
||||
end
|
||||
|
||||
local invalidKeys = {
|
||||
["UNKNOWN"] = true,
|
||||
["LSHIFT"] = true,
|
||||
["RSHIFT"] = true,
|
||||
["LCTRL"] = true,
|
||||
["RCTRL"] = true,
|
||||
["LALT"] = true,
|
||||
["RALT"] = true,
|
||||
["ESCAPE"] = true
|
||||
}
|
||||
|
||||
function addon:GetCapturedKey(key)
|
||||
-- We can't bind modifiers or invalid keys
|
||||
if invalidKeys[key] then return end
|
||||
|
||||
-- Remap any mouse buttons
|
||||
if key == "LeftButton" then
|
||||
key = "BUTTON1"
|
||||
elseif key == "RightButton" then
|
||||
key = "BUTTON2"
|
||||
elseif key == "MiddleButton" then
|
||||
key = "BUTTON3"
|
||||
elseif key == "-" then
|
||||
key = "DASH"
|
||||
elseif key == "\\" then
|
||||
key = "BACKSLASH"
|
||||
elseif key == "\"" then
|
||||
key = "DOUBLEQUOTE"
|
||||
else
|
||||
local buttonNum = key:match("Button(%d+)")
|
||||
if buttonNum and tonumber(buttonNum) <= 31 then key = "BUTTON" .. buttonNum end
|
||||
end
|
||||
|
||||
-- TODO: Support NOT splitting the modifier keys
|
||||
local prefix = addon:GetPrefixString(true)
|
||||
return tostring(prefix) .. tostring(key)
|
||||
end
|
||||
|
||||
function addon:GetBindingInfoText(binding)
|
||||
if type(binding) ~= "table" or not binding.sets then return L["This binding is invalid, please delete"] end
|
||||
|
||||
local sets = binding.sets
|
||||
if not sets then
|
||||
return ""
|
||||
elseif not next(sets) then
|
||||
-- No bindings set, so display a message
|
||||
return L["This binding is DISABLED"]
|
||||
else
|
||||
local bits = {}
|
||||
for k, v in pairs(sets) do table.insert(bits, k) end
|
||||
table.sort(bits)
|
||||
return table.concat(bits, ", ")
|
||||
end
|
||||
end
|
||||
|
||||
function addon:ConvertSpecialKeys(binding)
|
||||
if type(binding) ~= "table" or not binding.key then return "UNKNOWN" end
|
||||
|
||||
local mods, key = binding.key:match("^(.-)([^%-]+)$")
|
||||
if key == "DASH" then
|
||||
key = "-"
|
||||
elseif key == "BACKSLASH" then
|
||||
key = "\\"
|
||||
elseif key == "DOUBLEQUOTE" then
|
||||
key = "\""
|
||||
end
|
||||
|
||||
return tostring(mods) .. tostring(key)
|
||||
end
|
||||
|
||||
function addon:GetBindingPrefixSuffix(binding, global)
|
||||
if type(binding) ~= "table" or not binding.key then return "UNKNOWN", "UNKNOWN" end
|
||||
|
||||
local prefix, suffix = binding.key:match("^(.-)([^%-]+)$")
|
||||
if prefix:sub(-1, -1) == "-" then prefix = prefix:sub(1, -2) end
|
||||
|
||||
prefix = prefix:lower()
|
||||
|
||||
local prefixKey = prefix:gsub("[%A]", "")
|
||||
local buttonNum = suffix:match("^BUTTON(%d+)$")
|
||||
|
||||
if buttonNum and global then
|
||||
suffix = "cliquemouse" .. tostring(prefixKey) .. tostring(buttonNum)
|
||||
prefix = ""
|
||||
elseif buttonNum then
|
||||
suffix = buttonNum
|
||||
else
|
||||
suffix = "cliquebutton" .. tostring(prefixKey) .. tostring(suffix)
|
||||
prefix = ""
|
||||
end
|
||||
|
||||
return prefix, suffix
|
||||
end
|
||||
@@ -0,0 +1,775 @@
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- BindConfig.lua
|
||||
--
|
||||
-- This file contains the definitions of the binding configuration panel.
|
||||
--
|
||||
-- Events registered:
|
||||
-- None
|
||||
-------------------------------------------------------------------------]] --
|
||||
local addonName, addon = ...
|
||||
local L = addon.L
|
||||
|
||||
local MAX_ROWS = 12
|
||||
|
||||
function CliqueConfig:ShowWithSpellBook()
|
||||
self:ClearAllPoints()
|
||||
self:SetParent(AscensionSpellbookFrame)
|
||||
self:SetPoint("LEFT", AscensionSpellbookFrame, "RIGHT", 55, 0)
|
||||
self:Show()
|
||||
end
|
||||
|
||||
function CliqueConfig:OnShow()
|
||||
if not self.initialized then
|
||||
self:SetupGUI()
|
||||
self:HijackSpellbook()
|
||||
self.initialized = true
|
||||
end
|
||||
|
||||
-- Hide the alertTab if the spellbook isn't shown
|
||||
if AscensionSpellbookFrameContentSpellsSpellButton1:IsVisible() then
|
||||
self.bindAlert:Show()
|
||||
else
|
||||
self.bindAlert:Hide()
|
||||
end
|
||||
|
||||
CliqueSpellTab:SetChecked(true)
|
||||
self:UpdateList()
|
||||
self:UpdateProfileDisplay()
|
||||
UIDropDownMenu_Refresh(self.page1.profileDropdown)
|
||||
self:EnableSpellbookButtons()
|
||||
self:UpdateBindSpellButtonState()
|
||||
self:UpdateAlert()
|
||||
end
|
||||
|
||||
function CliqueConfig:OnHide()
|
||||
self:ClearAllPoints()
|
||||
self:SetParent(UIParent)
|
||||
HideUIPanel(self)
|
||||
CliqueSpellTab:SetChecked(false)
|
||||
self:UpdateAlert()
|
||||
end
|
||||
|
||||
function CliqueConfig:SetupGUI()
|
||||
self.rows = {}
|
||||
for i = 1, MAX_ROWS do self.rows[i] = CreateFrame("Button", "CliqueRow" .. i, self.page1, "CliqueRowTemplate") end
|
||||
|
||||
self.rows[1]:ClearAllPoints()
|
||||
self.rows[1]:SetPoint("TOPLEFT", "CliqueConfigPage1Column1", "BOTTOMLEFT", 0, -3)
|
||||
self.rows[1]:SetPoint("RIGHT", CliqueConfigPage1Column2, "RIGHT", 0, 0)
|
||||
|
||||
for i = 2, MAX_ROWS do
|
||||
self.rows[i]:ClearAllPoints()
|
||||
self.rows[i]:SetPoint("TOPLEFT", self.rows[i - 1], "BOTTOMLEFT")
|
||||
self.rows[i]:SetPoint("RIGHT", CliqueConfigPage1Column2, "RIGHT", 0, 0)
|
||||
end
|
||||
|
||||
_G[self:GetName() .. "TitleText"]:SetText(L["Clique Binding Configuration"])
|
||||
|
||||
self.dialog = _G["CliqueDialog"]
|
||||
self.dialog.title = _G["CliqueDialogTitleText"]
|
||||
self.dialog:SetUserPlaced(false)
|
||||
self.dialog:ClearAllPoints()
|
||||
self.dialog:SetPoint("CENTER", self, "CENTER", 30, 0)
|
||||
|
||||
self.dialog.title:SetText(L["Set binding"])
|
||||
self.dialog.button_accept:SetText(L["Accept"])
|
||||
|
||||
self.dialog.button_binding:SetText(L["Set binding"])
|
||||
local desc =
|
||||
L["In order to specify a binding, move your mouse over the button labelled 'Set binding' and either click with your mouse or press a key on your keyboard. You can modify the binding by holding down a combination of the alt, control and shift keys on your keyboard."]
|
||||
self.dialog.desc:SetText(desc)
|
||||
|
||||
self.alert = _G["CliqueTabAlert"]
|
||||
|
||||
self.bindAlert.text:SetText(L["You are in Clique binding mode"])
|
||||
|
||||
self.close = _G[self:GetName() .. "CloseButton"]
|
||||
self.close:SetScript("OnClick", function() HideUIPanel(CliqueConfig) end)
|
||||
|
||||
self.page1.column1:SetText(L["Action"])
|
||||
self.page1.column2:SetText(L["Binding"])
|
||||
|
||||
-- Set columns up to handle sorting
|
||||
self.page1.column1.sortType = "name"
|
||||
self.page1.column2.sortType = "key"
|
||||
self.page1.sortType = self.page1.column2.sortType
|
||||
|
||||
self.page2.button_binding:SetText(L["Set binding"])
|
||||
local desc =
|
||||
L["You can use this page to create a custom macro to be run when activating a binding on a unit. When creating this macro you should keep in mind that you will need to specify the target of any actions in the macro by using the 'mouseover' unit, which is the unit you are clicking on. For example, you can do any of the following:\n\n/cast [target=mouseover] Regrowth\n/cast [@mouseover] Regrowth\n/cast [@mouseovertarget] Taunt\n\nHover over the 'Set binding' button below and either click or press a key with any modifiers you would like included. Then edit the box below to contain the macro you would like to have run when this binding is activated."]
|
||||
|
||||
self.page2.desc:SetText(desc)
|
||||
self.page2.editbox = CliqueScrollFrameEditBox
|
||||
|
||||
-- Create profile UI elements programmatically
|
||||
self:CreateProfileUI()
|
||||
|
||||
-- Create page 2 buttons programmatically
|
||||
self:CreatePage2Buttons()
|
||||
|
||||
self.page1:Show()
|
||||
end
|
||||
|
||||
function CliqueConfig:CreateProfileUI()
|
||||
-- Create profile label with support for long names and multiple lines
|
||||
self.page1.profileLabel = self.page1:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
|
||||
self.page1.profileLabel:SetJustifyH("LEFT")
|
||||
self.page1.profileLabel:SetJustifyV("TOP")
|
||||
self.page1.profileLabel:SetSize(265, 24) -- Increased height for two lines
|
||||
self.page1.profileLabel:SetPoint("TOPLEFT", self, "TOPLEFT", 60, -30)
|
||||
self.page1.profileLabel:SetWordWrap(true) -- Enable word wrapping
|
||||
self.page1.profileLabel:SetText(L["Current Profile: "])
|
||||
|
||||
-- Create profile dropdown in bottom left corner
|
||||
self.page1.profileDropdown = CreateFrame("Frame", "CliqueConfigProfileDropdown", self.page1, "UIDropDownMenuTemplate")
|
||||
self.page1.profileDropdown:SetPoint("BOTTOMLEFT", self, "BOTTOMLEFT", -15, -2)
|
||||
self.page1.profileDropdown:SetFrameLevel(self.page1:GetFrameLevel() + 10) -- Ensure dropdown is on top
|
||||
UIDropDownMenu_SetWidth(self.page1.profileDropdown, 100)
|
||||
UIDropDownMenu_Initialize(self.page1.profileDropdown, function(dropdown, level) self:ProfileDropdown_Initialize(dropdown, level) end)
|
||||
|
||||
-- Create buttons programmatically since XML-defined ones weren't showing
|
||||
-- Bind spell button
|
||||
self.page1.button_spell = CreateFrame("Button", nil, self.page1, "UIPanelButtonTemplate")
|
||||
self.page1.button_spell:SetSize(70, 22)
|
||||
self.page1.button_spell:SetPoint("TOPLEFT", self.page1.profileDropdown, "TOPRIGHT", -15, -2)
|
||||
self.page1.button_spell:SetText(L["Bind spell"])
|
||||
self.page1.button_spell:SetScript("OnClick", function(button) self:Button_OnClick(button) end)
|
||||
self.page1.button_spell:Show()
|
||||
|
||||
-- Bind other button
|
||||
self.page1.button_other = CreateFrame("Button", nil, self.page1, "UIPanelButtonTemplate")
|
||||
self.page1.button_other:SetSize(70, 22)
|
||||
self.page1.button_other:SetPoint("LEFT", self.page1.button_spell, "RIGHT", 0, 0)
|
||||
self.page1.button_other:SetText(L["Bind other"])
|
||||
self.page1.button_other:SetScript("OnClick", function(button) self:Button_OnClick(button) end)
|
||||
self.page1.button_other:Show()
|
||||
|
||||
-- Options button
|
||||
self.page1.button_options = CreateFrame("Button", nil, self.page1, "UIPanelButtonTemplate")
|
||||
self.page1.button_options:SetSize(70, 22)
|
||||
self.page1.button_options:SetPoint("LEFT", self.page1.button_other, "RIGHT", 0, 0)
|
||||
self.page1.button_options:SetText(L["Options"])
|
||||
self.page1.button_options:SetScript("OnClick", function(button) self:Button_OnClick(button) end)
|
||||
self.page1.button_options:Show()
|
||||
end
|
||||
|
||||
function CliqueConfig:CreatePage2Buttons()
|
||||
-- Set binding button is working fine from XML, only create Save and Cancel buttons
|
||||
|
||||
-- Create Save button in bottom left corner
|
||||
self.page2.button_save = CreateFrame("Button", nil, self.page2, "UIPanelButtonTemplate")
|
||||
self.page2.button_save:SetSize(90, 22)
|
||||
self.page2.button_save:SetPoint("BOTTOMLEFT", self.page2, "BOTTOMLEFT", 0, -22)
|
||||
self.page2.button_save:SetText(L["Save"])
|
||||
self.page2.button_save:SetScript("OnClick", function(button) self:Button_OnClick(button) end)
|
||||
self.page2.button_save:SetFrameLevel(self.page2:GetFrameLevel() + 10)
|
||||
self.page2.button_save:Disable() -- Start disabled
|
||||
self.page2.button_save:Show()
|
||||
|
||||
-- Create Cancel button in bottom right corner
|
||||
self.page2.button_cancel = CreateFrame("Button", nil, self.page2, "UIPanelButtonTemplate")
|
||||
self.page2.button_cancel:SetSize(90, 22)
|
||||
self.page2.button_cancel:SetPoint("BOTTOMRIGHT", self.page2, "BOTTOMRIGHT", 0, -22)
|
||||
self.page2.button_cancel:SetText(L["Cancel"])
|
||||
self.page2.button_cancel:SetScript("OnClick", function(button) self:Button_OnClick(button) end)
|
||||
self.page2.button_cancel:SetFrameLevel(self.page2:GetFrameLevel() + 10)
|
||||
self.page2.button_cancel:Show()
|
||||
end
|
||||
|
||||
function CliqueConfig:UpdateBindSpellButtonState()
|
||||
if not self.page1 or not self.page1.button_spell then
|
||||
return -- Button doesn't exist yet
|
||||
end
|
||||
|
||||
if AscensionSpellbookFrame:IsVisible() then
|
||||
self.page1.button_spell:Disable()
|
||||
else
|
||||
self.page1.button_spell:Enable()
|
||||
end
|
||||
end
|
||||
|
||||
function CliqueConfig:Column_OnClick(frame, button)
|
||||
self.page1.sortType = frame.sortType
|
||||
self:UpdateList()
|
||||
end
|
||||
|
||||
function CliqueConfig:HijackSpellbook()
|
||||
self.spellbookButtons = {}
|
||||
|
||||
for idx = 1, 12 do
|
||||
local parent = _G["AscensionSpellbookFrameContentSpellsSpellButton" .. idx]
|
||||
local button = CreateFrame("Button", "CliqueSpellbookButton" .. idx, parent, "CliqueSpellbookButtonTemplate")
|
||||
button.spellbutton = parent
|
||||
button:EnableKeyboard(false)
|
||||
button:EnableMouseWheel(true)
|
||||
button:RegisterForClicks("AnyDown")
|
||||
button:SetID(parent:GetID())
|
||||
self.spellbookButtons[idx] = button
|
||||
end
|
||||
|
||||
AscensionSpellbookFrame:HookScript("OnShow", function(frame)
|
||||
self:EnableSpellbookButtons()
|
||||
self:UpdateBindSpellButtonState()
|
||||
end)
|
||||
AscensionSpellbookFrame:HookScript("OnHide", function(frame)
|
||||
self:EnableSpellbookButtons()
|
||||
self:UpdateBindSpellButtonState()
|
||||
end)
|
||||
|
||||
self:EnableSpellbookButtons()
|
||||
end
|
||||
|
||||
function CliqueConfig:EnableSpellbookButtons()
|
||||
local enabled;
|
||||
|
||||
if self.page1:IsVisible() and AscensionSpellbookFrame:IsVisible() then enabled = true end
|
||||
|
||||
if self.spellbookButtons then
|
||||
for idx, button in ipairs(self.spellbookButtons) do
|
||||
if enabled and button.spellbutton:IsEnabled() == 1 then
|
||||
button:Show()
|
||||
else
|
||||
button:Hide()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Spellbook button functions
|
||||
function CliqueConfig:Spellbook_EnableKeyboard(button, motion) button:EnableKeyboard(true) end
|
||||
|
||||
function CliqueConfig:Spellbook_DisableKeyboard(button, motion) button:EnableKeyboard(false) end
|
||||
|
||||
function CliqueConfig:Spellbook_OnBinding(button, key)
|
||||
if key == "ESCAPE" then
|
||||
HideUIPanel(CliqueConfig)
|
||||
return
|
||||
end
|
||||
|
||||
local name = getglobal(button.spellbutton:GetName() .. "SpellName"):GetText()
|
||||
local spellSubName = getglobal(button.spellbutton:GetName() .. "SubSpellName"):GetText()
|
||||
local texture = getglobal(button.spellbutton:GetName() .. "IconTexture"):GetTexture()
|
||||
-- Only enable spellSubName if ShowAllSpellRanks is checked
|
||||
if not AscensionSpellbookFrameContentSpellsShowAllSpellRanks:GetChecked() then
|
||||
spellSubName = nil
|
||||
elseif spellSubName == "" then
|
||||
spellSubName = nil
|
||||
end
|
||||
|
||||
local key = addon:GetCapturedKey(key)
|
||||
if not key then return end
|
||||
|
||||
local succ, err = addon:AddBinding{
|
||||
key = key,
|
||||
type = "spell",
|
||||
spell = name,
|
||||
spellSubName = spellSubName,
|
||||
icon = texture
|
||||
}
|
||||
|
||||
CliqueConfig:UpdateList()
|
||||
end
|
||||
|
||||
function CliqueConfig:UpdateProfileDisplay()
|
||||
local currentProfile = addon.db:GetCurrentProfile()
|
||||
local displayText = L["Current Profile: "] .. currentProfile
|
||||
|
||||
-- Check if spec swap is enabled
|
||||
if addon.settings.specswap then
|
||||
local currentSpec = addon.talentGroup or 1
|
||||
displayText = displayText .. " " .. L["(Spec "] .. currentSpec .. ")"
|
||||
else
|
||||
displayText = displayText .. " " .. L["(All specs)"]
|
||||
end
|
||||
|
||||
self.page1.profileLabel:SetText(displayText)
|
||||
|
||||
-- Update dropdown text
|
||||
UIDropDownMenu_SetText(self.page1.profileDropdown, currentProfile)
|
||||
end
|
||||
|
||||
function CliqueConfig:ProfileDropdown_Initialize(dropdown, level)
|
||||
local profiles = addon.db:GetProfiles()
|
||||
local currentProfile = addon.db:GetCurrentProfile()
|
||||
|
||||
-- Create sorted list of profiles
|
||||
local sortedProfiles = {}
|
||||
for idx, profileName in ipairs(profiles) do table.insert(sortedProfiles, profileName) end
|
||||
table.sort(sortedProfiles)
|
||||
|
||||
-- Add each profile as a menu item
|
||||
for _, profileName in ipairs(sortedProfiles) do
|
||||
local info = UIDropDownMenu_CreateInfo()
|
||||
info.text = profileName
|
||||
info.value = profileName
|
||||
info.func = function() self:ProfileDropdown_OnClick(profileName) end
|
||||
info.checked = (profileName == currentProfile)
|
||||
UIDropDownMenu_AddButton(info, level)
|
||||
end
|
||||
end
|
||||
|
||||
function CliqueConfig:ProfileDropdown_OnClick(profileName)
|
||||
if addon.settings.specswap then
|
||||
-- When spec swap is enabled, change the profile for the current specialization
|
||||
local currentSpec = addon.talentGroup or 1
|
||||
addon.settings["specswap" .. currentSpec] = profileName
|
||||
-- Also switch to that profile immediately
|
||||
addon.db:SetProfile(profileName)
|
||||
else
|
||||
-- When spec swap is disabled, just change the current profile
|
||||
addon.db:SetProfile(profileName)
|
||||
end
|
||||
|
||||
self:UpdateProfileDisplay()
|
||||
self:UpdateList()
|
||||
CloseDropDownMenus()
|
||||
end
|
||||
|
||||
function CliqueConfig:Button_OnClick(button)
|
||||
-- Click handler for "Bind spell" button
|
||||
if button == self.page1.button_spell then
|
||||
ShowUIPanel(AscensionSpellbookFrame)
|
||||
CliqueConfig:ShowWithSpellBook()
|
||||
|
||||
-- Click handler for "Bind other" button
|
||||
elseif button == self.page1.button_other then
|
||||
local config = CliqueConfig
|
||||
local menu = {{
|
||||
text = L["Select a binding type"],
|
||||
isTitle = true,
|
||||
notCheckable = true
|
||||
}, {
|
||||
text = L["Target clicked unit"],
|
||||
func = function() self:SetupCaptureDialog("target") end,
|
||||
notCheckable = true
|
||||
}, {
|
||||
text = L["Open unit menu"],
|
||||
func = function() self:SetupCaptureDialog("menu") end,
|
||||
notCheckable = true
|
||||
}, {
|
||||
text = L["Run custom macro"],
|
||||
func = function()
|
||||
config.page1:Hide()
|
||||
config.page2.bindType = "macro"
|
||||
-- Clear out the entries
|
||||
config.page2.bindText:SetText(L["No binding set"])
|
||||
config.page2.editbox:SetText("")
|
||||
config.page2.button_save:Disable()
|
||||
config.page2:Show()
|
||||
end,
|
||||
notCheckable = true
|
||||
}}
|
||||
UIDropDownMenu_SetAnchor(self.dropdown, 0, 0, "BOTTOMLEFT", self.page1.button_other, "TOP")
|
||||
EasyMenu(menu, self.dropdown, nil, 0, 0, "MENU", nil)
|
||||
|
||||
-- Click handler for "Options" button
|
||||
elseif button == self.page1.button_options then
|
||||
local menu = {{
|
||||
text = L["Select an options category"],
|
||||
isTitle = true,
|
||||
notCheckable = true
|
||||
}, {
|
||||
text = L["Clique general options"],
|
||||
func = function()
|
||||
HideUIPanel(AscensionSpellbookFrame)
|
||||
HideUIPanel(CliqueConfig)
|
||||
InterfaceOptionsFrame_OpenToCategory(addon.optpanels["GENERAL"])
|
||||
end,
|
||||
notCheckable = true
|
||||
}, {
|
||||
text = L["Frame blacklist"],
|
||||
func = function()
|
||||
HideUIPanel(AscensionSpellbookFrame)
|
||||
HideUIPanel(CliqueConfig)
|
||||
InterfaceOptionsFrame_OpenToCategory(addon.optpanels["BLACKLIST"])
|
||||
end,
|
||||
notCheckable = true
|
||||
}, {
|
||||
text = L["Blizzard frame integration options"],
|
||||
func = function()
|
||||
HideUIPanel(AscensionSpellbookFrame)
|
||||
HideUIPanel(CliqueConfig)
|
||||
InterfaceOptionsFrame_OpenToCategory(addon.optpanels["BLIZZFRAMES"])
|
||||
end,
|
||||
notCheckable = true
|
||||
}}
|
||||
UIDropDownMenu_SetAnchor(self.dropdown, 0, 0, "BOTTOMLEFT", self.page1.button_options, "TOP")
|
||||
EasyMenu(menu, self.dropdown, nil, 0, 0, "MENU", nil)
|
||||
elseif button == self.page2.button_save then
|
||||
-- Check the input
|
||||
local key = self.page2.key
|
||||
local macrotext = self.page2.editbox:GetText()
|
||||
|
||||
if self.page2.binding then
|
||||
self.page2.binding.key = key
|
||||
self.page2.binding.macrotext = macrotext
|
||||
self.page2.binding = nil
|
||||
addon:FireMessage("BINDINGS_CHANGED")
|
||||
else
|
||||
local succ, err = addon:AddBinding{
|
||||
key = key,
|
||||
type = "macro",
|
||||
macrotext = macrotext
|
||||
}
|
||||
end
|
||||
self:UpdateList()
|
||||
self.page2:Hide()
|
||||
self.page1:Show()
|
||||
elseif button == self.page2.button_cancel then
|
||||
self.page2.binding = nil
|
||||
self.page2:Hide()
|
||||
self.page1:Show()
|
||||
end
|
||||
end
|
||||
|
||||
local memoizeBindings = setmetatable({}, {
|
||||
__index = function(t, k, v)
|
||||
local binbits = addon:GetBinaryBindingKey(k)
|
||||
rawset(t, k, binbits)
|
||||
return binbits
|
||||
end
|
||||
})
|
||||
|
||||
local compareFunctions;
|
||||
compareFunctions = {
|
||||
name = function(a, b)
|
||||
local texta = addon:GetBindingActionText(a.type, a)
|
||||
local textb = addon:GetBindingActionText(b.type, b)
|
||||
if texta == textb then return compareFunctions.key(a, b) end
|
||||
return texta < textb
|
||||
end,
|
||||
key = function(a, b)
|
||||
local keya = addon:GetBindingKey(a)
|
||||
local keyb = addon:GetBindingKey(b)
|
||||
if keya == keyb then
|
||||
return memoizeBindings[a] < memoizeBindings[b]
|
||||
elseif not keya or not keyb then
|
||||
return false
|
||||
else
|
||||
return keya < keyb
|
||||
end
|
||||
end,
|
||||
binding = function(a, b)
|
||||
local mem = memoizeBindings
|
||||
if mem[a] == mem[b] then
|
||||
return compareFunctions.name(a, b)
|
||||
else
|
||||
return mem[a] < mem[b]
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
-- Mapping between binding entry and index in profile
|
||||
function CliqueConfig:UpdateList()
|
||||
local page = self.page1
|
||||
local binds = addon.bindings
|
||||
|
||||
-- GUI not created yet
|
||||
if not self.initialized then
|
||||
return
|
||||
elseif not self:IsVisible() then
|
||||
return
|
||||
end
|
||||
|
||||
-- Sort the bindings
|
||||
local sort = {}
|
||||
for idx, entry in pairs(binds) do sort[#sort + 1] = entry end
|
||||
|
||||
if page.sortType then
|
||||
table.sort(sort, compareFunctions[page.sortType])
|
||||
else
|
||||
table.sort(sort, compareFunctions.key)
|
||||
end
|
||||
|
||||
-- Enable or disable the scroll bar
|
||||
if #sort > MAX_ROWS - 1 then
|
||||
-- Set up the scrollbar for the item list
|
||||
page.slider:SetMinMaxValues(0, #sort - MAX_ROWS)
|
||||
|
||||
-- Adjust and show
|
||||
if not page.slider:IsShown() then
|
||||
-- Adjust column positions
|
||||
for idx, row in ipairs(self.rows) do row.bind:SetWidth(90) end
|
||||
page.slider:SetValue(0)
|
||||
page.slider:Show()
|
||||
end
|
||||
elseif page.slider:IsShown() then
|
||||
-- Move column positions back and hide the slider
|
||||
for idx, row in ipairs(self.rows) do row.bind:SetWidth(105) end
|
||||
page.slider:Hide()
|
||||
end
|
||||
|
||||
-- Update the rows in the list
|
||||
local offset = page.slider:GetValue() or 0
|
||||
for idx, row in ipairs(self.rows) do
|
||||
local offsetIndex = offset + idx
|
||||
if sort[offsetIndex] then
|
||||
local bind = sort[offsetIndex]
|
||||
row.icon:SetTexture(addon:GetBindingIcon(bind))
|
||||
row.name:SetText(addon:GetBindingActionText(bind.type, bind))
|
||||
row.info:SetText(addon:GetBindingInfoText(bind))
|
||||
row.bind:SetText(addon:GetBindingKeyComboText(bind))
|
||||
row.binding = bind
|
||||
row:Show()
|
||||
else
|
||||
row:Hide()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function CliqueConfig:ClearEditPage() end
|
||||
|
||||
function CliqueConfig:ShowEditPage()
|
||||
self:ClearEditPage()
|
||||
self.page1:Hide()
|
||||
self.page3:Show()
|
||||
end
|
||||
|
||||
function CliqueConfig:Save_OnClick(button, down) end
|
||||
|
||||
function CliqueConfig:Cancel_OnClick(button, down)
|
||||
self:ClearEditPage()
|
||||
self.page3:Hide()
|
||||
self.page1:Show()
|
||||
end
|
||||
|
||||
function CliqueConfig:SetupCaptureDialog(type, binding)
|
||||
self.dialog.bindType = type
|
||||
self.dialog.binding = binding
|
||||
|
||||
if not binding then
|
||||
local actionText = addon:GetBindingActionText(type, binding)
|
||||
self.dialog.title:SetText(L["Set binding: %s"]:format(actionText))
|
||||
else
|
||||
-- This is a change to an existing binding
|
||||
local actionText = addon:GetBindingActionText(type, binding)
|
||||
self.dialog.title:SetText(L["Change binding: %s"]:format(actionText))
|
||||
end
|
||||
|
||||
self.dialog.bindText:SetText("")
|
||||
self.dialog:Show()
|
||||
end
|
||||
|
||||
function CliqueConfig:BindingButton_OnClick(button, key)
|
||||
local dialog = CliqueDialog
|
||||
dialog.key = addon:GetCapturedKey(key)
|
||||
if dialog.key then CliqueDialog.bindText:SetText(addon:GetBindingKeyComboText(dialog.key)) end
|
||||
end
|
||||
|
||||
function CliqueConfig:MacroBindingButton_OnClick(button, key)
|
||||
local key = addon:GetCapturedKey(key)
|
||||
if key then
|
||||
self.page2.key = key
|
||||
self.page2.bindText:SetText(addon:GetBindingKeyComboText(key))
|
||||
self.page2.button_save:Enable()
|
||||
else
|
||||
self.page2.bindText:SetText(L["No binding set"])
|
||||
self.page2.button_save:Disable()
|
||||
end
|
||||
end
|
||||
|
||||
function CliqueConfig:AcceptSetBinding()
|
||||
local dialog = CliqueDialog
|
||||
local key = dialog.key
|
||||
|
||||
if dialog.binding then
|
||||
-- This was a CHANGE binding instead of a SET binding
|
||||
dialog.binding.key = key
|
||||
dialog.binding = nil
|
||||
-- Do not forget to update the attributes as well
|
||||
self:UpdateList()
|
||||
addon:FireMessage("BINDINGS_CHANGED")
|
||||
else
|
||||
local succ, err = addon:AddBinding{
|
||||
key = key,
|
||||
type = dialog.bindType
|
||||
}
|
||||
if succ then self:UpdateList() end
|
||||
end
|
||||
dialog:Hide()
|
||||
end
|
||||
|
||||
local function toggleSet(binding, set, ...)
|
||||
local exclude = {}
|
||||
for i = 1, select("#", ...) do
|
||||
local item = select(i, ...)
|
||||
table.insert(exclude, item)
|
||||
end
|
||||
|
||||
return function()
|
||||
if not binding.sets then binding.sets = {} end
|
||||
if binding.sets[set] then
|
||||
binding.sets[set] = nil
|
||||
else
|
||||
binding.sets[set] = true
|
||||
end
|
||||
|
||||
for idx, exclset in ipairs(exclude) do binding.sets[exclset] = nil end
|
||||
|
||||
UIDropDownMenu_Refresh(UIDROPDOWNMENU_OPEN_MENU, nil, UIDROPDOWNMENU_MENU_LEVEL)
|
||||
CliqueConfig:UpdateList()
|
||||
addon:FireMessage("BINDINGS_CHANGED")
|
||||
end
|
||||
end
|
||||
|
||||
function CliqueConfig:Row_OnClick(frame, button)
|
||||
local binding = frame.binding
|
||||
local actionText = addon:GetBindingActionText(binding.type, binding)
|
||||
|
||||
local menu = {{
|
||||
text = L["Configure binding: '%s'"]:format(actionText:sub(1, 15)),
|
||||
notCheckable = true,
|
||||
isTitle = true
|
||||
}, {
|
||||
text = L["Change binding"],
|
||||
func = function()
|
||||
local binding = frame.binding
|
||||
self:SetupCaptureDialog(binding.type, binding)
|
||||
end,
|
||||
notCheckable = true
|
||||
}, {
|
||||
text = L["Delete binding"],
|
||||
func = function()
|
||||
addon:DeleteBinding(frame.binding)
|
||||
self:UpdateList()
|
||||
end,
|
||||
notCheckable = true
|
||||
}}
|
||||
|
||||
if binding.type == "spell" and binding.spellSubName then
|
||||
-- Enable a 'Remove Rank' option
|
||||
menu[#menu + 1] = {
|
||||
text = L["Remove spell rank"],
|
||||
func = function()
|
||||
local binding = frame.binding
|
||||
binding.spellSubName = nil
|
||||
self:UpdateList()
|
||||
addon:FireMessage("BINDINGS_CHANGED")
|
||||
end,
|
||||
notCheckable = true
|
||||
}
|
||||
end
|
||||
|
||||
if binding.type == "macro" then
|
||||
-- Replace 'Change Binding' with 'Edit macro'
|
||||
menu[2] = {
|
||||
text = L["Edit macro"],
|
||||
func = function()
|
||||
self.page2.bindType = "macro"
|
||||
local bindText = addon:GetBindingKeyComboText(binding)
|
||||
self.page2.bindText:SetText(bindText)
|
||||
self.page2.binding = binding
|
||||
self.page2.key = binding.key
|
||||
self.page2.editbox:SetText(binding.macrotext)
|
||||
self.page2.button_save:Enable()
|
||||
self.page1:Hide()
|
||||
self.page2:Show()
|
||||
end,
|
||||
notCheckable = true
|
||||
}
|
||||
end
|
||||
|
||||
local submenu = {
|
||||
text = L["Enable/Disable binding-sets"],
|
||||
hasArrow = true,
|
||||
notCheckable = true,
|
||||
menuList = {}
|
||||
}
|
||||
table.insert(menu, submenu)
|
||||
|
||||
table.insert(submenu.menuList, {
|
||||
text = L["Default"],
|
||||
checked = function() return binding.sets["default"] end,
|
||||
func = toggleSet(binding, "default"),
|
||||
tooltipTitle = L["Clique: 'default' binding-set"],
|
||||
tooltipText = L["A binding that belongs to the 'default' binding-set will always be active on your unit frames, unless you override it with another binding."]
|
||||
-- keepShownOnClick = true,
|
||||
})
|
||||
|
||||
table.insert(submenu.menuList, {
|
||||
text = L["Friend"],
|
||||
checked = function() return binding.sets["friend"] end,
|
||||
func = toggleSet(binding, "friend"),
|
||||
tooltipTitle = L["Clique: 'friend' binding-set"],
|
||||
tooltipText = L["A binding that belongs to the 'frield' binding-set will only be active when clicking on unit frames that display friendly units, i.e. those you can heal and assist. If you click on a unit that you cannot heal or assist, nothing will happen."]
|
||||
-- keepShownOnClick = true,
|
||||
})
|
||||
|
||||
table.insert(submenu.menuList, {
|
||||
text = L["Enemy"],
|
||||
checked = function() return binding.sets["enemy"] end,
|
||||
func = toggleSet(binding, "enemy"),
|
||||
tooltipTitle = L["Clique: 'enemy' binding-set"],
|
||||
tooltipText = L["A binding that belongs to the 'enemy' binding-set will always be active when clicking on unit frames that display enemy units, i.e. those you can attack. If you click on a unit that you cannot attack, nothing will happen."]
|
||||
-- keepShownOnClick = true,
|
||||
})
|
||||
|
||||
table.insert(submenu.menuList, {
|
||||
text = L["Out-of-combat (ONLY)"],
|
||||
checked = function() return binding.sets["ooc"] end,
|
||||
func = toggleSet(binding, "ooc"),
|
||||
tooltipTitle = L["Clique: 'ooc' binding-set"],
|
||||
tooltipText = L["A binding that belongs to the 'ooc' binding-set will only be active when the player is out-of-combat, regardless of the other binding-sets this binding belongs to. As soon as the player enters combat, these bindings will no longer be active, so be careful when choosing this binding-set for any spells you use frequently."]
|
||||
-- keepShownOnClick = true,
|
||||
})
|
||||
|
||||
table.insert(submenu.menuList, {
|
||||
text = L["Primary talent spec (ONLY)"],
|
||||
checked = function() return binding.sets["pritalent"] end,
|
||||
func = toggleSet(binding, "pritalent"),
|
||||
tooltipTitle = L["Clique: 'pritalent' binding-set"],
|
||||
tooltipText = L["A binding that belongs to the 'pritalent' binding-set is only active when the player is currently using their primary talent spec, regardless of the other binding-sets that this binding belongs to."]
|
||||
-- keepShownOnClick = true,
|
||||
})
|
||||
|
||||
table.insert(submenu.menuList, {
|
||||
text = L["Secondary talent spec (ONLY)"],
|
||||
checked = function() return binding.sets["sectalent"] end,
|
||||
func = toggleSet(binding, "sectalent"),
|
||||
tooltipTitle = L["Clique: 'sectalent' binding-set"],
|
||||
tooltipText = L["A binding that belongs to the 'sectalent' binding-set is only active when the player is currently using their secondary talent spec, regardless of the other binding-sets that this binding belongs to."]
|
||||
-- keepShownOnClick = true,
|
||||
})
|
||||
|
||||
table.insert(submenu.menuList, {
|
||||
text = L["Hovercast bindings (target required)"],
|
||||
checked = function() return binding.sets["hovercast"] end,
|
||||
func = toggleSet(binding, "hovercast", "global"),
|
||||
tooltipTitle = L["Clique: 'hovercast' binding-set"],
|
||||
tooltipText = L["A binding that belongs to the 'hovercast' binding-set is active whenever the mouse is over a unit frame, or a character in the 3D world. This allows you to use 'hovercasting', where you hover over a unit in the world and press a key to cast a spell on them. THese bindings are also active over unit frames."]
|
||||
-- keepShownOnClick = true,
|
||||
})
|
||||
|
||||
table.insert(submenu.menuList, {
|
||||
text = L["Global bindings (no target)"],
|
||||
checked = function() return binding.sets["global"] end,
|
||||
func = toggleSet(binding, "global", "hovercast"),
|
||||
tooltipTitle = L["Clique: 'global' binding-set"],
|
||||
tooltipText = L["A binding that belongs to the 'global' binding-set is always active. If the spell requires a target, you will be given the 'casting hand', otherwise the spell will be cast. If the spell is an AOE spell, then you will be given the ground targeting circle."]
|
||||
-- keepShownOnClick = true,
|
||||
})
|
||||
|
||||
EasyMenu(menu, self.dropdown, "cursor", 0, 0, "MENU", nil)
|
||||
end
|
||||
|
||||
function CliqueConfig:SpellTab_OnClick(frame)
|
||||
if self:IsVisible() then
|
||||
HideUIPanel(CliqueConfig)
|
||||
elseif AscensionSpellbookFrame:IsVisible() then
|
||||
self:ShowWithSpellBook()
|
||||
else
|
||||
ShowUIPanel(CliqueConfig)
|
||||
end
|
||||
end
|
||||
|
||||
function CliqueConfig:UpdateAlert(type)
|
||||
local alert = CliqueTabAlert
|
||||
if not addon.settings.alerthidden and AscensionSpellbookFrame:IsVisible() and CliqueConfig:IsVisible() then
|
||||
alert.type = type
|
||||
alert.text:SetText(
|
||||
L["When both the Clique binding configuration window and the spellbook are open, you can set new bindings simply by performing them on the spell icon in your spellbook. Simply move your mouse over a spell and then click or press a key on your keyboard along with any combination of the alt, control, and shift keys. The new binding will be added to your binding configuration."])
|
||||
alert:Show()
|
||||
else
|
||||
alert:Hide()
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,125 @@
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- BlizzardFrames.lua
|
||||
--
|
||||
-- This file contains the definitions of the blizzard frame integration
|
||||
-- options. These settings will not apply until the user interface is
|
||||
-- reloaded.
|
||||
--
|
||||
-- Events registered:
|
||||
-- * ADDON_LOADED - To watch for loading of the ArenaUI
|
||||
-------------------------------------------------------------------------]] --
|
||||
local addonName, addon = ...
|
||||
local L = addon.L
|
||||
|
||||
--[[---------------------------------------------------------------------------
|
||||
-- Options panel definition
|
||||
---------------------------------------------------------------------------]] --
|
||||
|
||||
local panel = CreateFrame("Frame")
|
||||
panel.name = "Blizzard Frame Options"
|
||||
panel.parent = addonName
|
||||
|
||||
addon.optpanels["BLIZZFRAMES"] = panel
|
||||
|
||||
panel:SetScript("OnShow", function(self)
|
||||
if not panel.initialized then
|
||||
panel:CreateOptions()
|
||||
panel.refresh()
|
||||
end
|
||||
end)
|
||||
|
||||
local function make_checkbox(name, label)
|
||||
local frame = CreateFrame("CheckButton", "CliqueOptionsBlizzFrame" .. name, panel, "UICheckButtonTemplate")
|
||||
frame.text = _G[frame:GetName() .. "Text"]
|
||||
frame.type = "checkbox"
|
||||
frame.text:SetText(label)
|
||||
return frame
|
||||
end
|
||||
|
||||
local function make_label(name, template)
|
||||
local label = panel:CreateFontString("OVERLAY", "CliqueOptionsBlizzFrame" .. name, template)
|
||||
label:SetWidth(panel:GetWidth())
|
||||
label:SetJustifyH("LEFT")
|
||||
label.type = "label"
|
||||
return label
|
||||
end
|
||||
|
||||
function panel:CreateOptions()
|
||||
panel.initialized = true
|
||||
|
||||
local bits = {}
|
||||
self.intro = make_label("Intro", "GameFontHighlightSmall")
|
||||
self.intro:SetText(
|
||||
L["These options control whether or not Clique automatically registers certain Blizzard-created frames for binding. Changes made to these settings will not take effect until the user interface is reloaded."])
|
||||
self.intro:SetPoint("RIGHT")
|
||||
self.intro:SetJustifyV("TOP")
|
||||
self.intro:SetHeight(40)
|
||||
|
||||
self.PlayerFrame = make_checkbox("PlayerFrame", L["Player frame"])
|
||||
self.PetFrame = make_checkbox("PetFrame", L["Player's pet frame"])
|
||||
self.TargetFrame = make_checkbox("TargetFrame", L["Player's target frame"])
|
||||
self.TargetFrameToT = make_checkbox("TargetFrameToT", L["Target of target frame"])
|
||||
self.FocusFrame = make_checkbox("FocusFrame", L["Player's focus frame"])
|
||||
self.FocusFrameToT = make_checkbox("FocusFrameToT", L["Target of focus frame"])
|
||||
self.arena = make_checkbox("ArenaEnemy", L["Arena enemy frames"])
|
||||
self.party = make_checkbox("Party", L["Party member frames"])
|
||||
self.compactraid = make_checkbox("CompactRaid", L["Compact raid frames"])
|
||||
-- self.compactparty = make_checkbox("CompactParty", L["Compact party frames"])
|
||||
self.boss = make_checkbox("BossTarget", L["Boss target frames"])
|
||||
|
||||
table.insert(bits, self.intro)
|
||||
table.insert(bits, self.PlayerFrame)
|
||||
table.insert(bits, self.PetFrame)
|
||||
table.insert(bits, self.TargetFrame)
|
||||
table.insert(bits, self.FocusFrame)
|
||||
table.insert(bits, self.FocusFrameToT)
|
||||
|
||||
-- Group these together
|
||||
bits[1]:SetPoint("TOPLEFT", 5, -5)
|
||||
|
||||
for i = 2, #bits, 1 do bits[i]:SetPoint("TOPLEFT", bits[i - 1], "BOTTOMLEFT", 0, 0) end
|
||||
|
||||
local last = bits[#bits]
|
||||
|
||||
table.wipe(bits)
|
||||
table.insert(bits, self.arena)
|
||||
table.insert(bits, self.party)
|
||||
table.insert(bits, self.compactraid)
|
||||
-- table.insert(bits, self.compactparty)
|
||||
table.insert(bits, self.boss)
|
||||
|
||||
bits[1]:SetPoint("TOPLEFT", last, "BOTTOMLEFT", 0, -15)
|
||||
|
||||
for i = 2, #bits, 1 do bits[i]:SetPoint("TOPLEFT", bits[i - 1], "BOTTOMLEFT", 0, 0) end
|
||||
end
|
||||
|
||||
function panel.refresh()
|
||||
local opt = addon.settings.blizzframes
|
||||
|
||||
panel.PlayerFrame:SetChecked(opt.PlayerFrame)
|
||||
panel.PetFrame:SetChecked(opt.PetFrame)
|
||||
panel.TargetFrame:SetChecked(opt.TargetFrame)
|
||||
panel.FocusFrame:SetChecked(opt.FocusFrame)
|
||||
panel.FocusFrameToT:SetChecked(opt.FocusFrameToT)
|
||||
panel.arena:SetChecked(opt.arena)
|
||||
panel.party:SetChecked(opt.party)
|
||||
panel.compactraid:SetChecked(opt.compactraid)
|
||||
-- panel.compactparty:SetChecked(opt.compactparty)
|
||||
panel.boss:SetChecked(opt.boss)
|
||||
end
|
||||
|
||||
function panel.okay()
|
||||
local opt = addon.settings.blizzframes
|
||||
opt.PlayerFrame = not not panel.PlayerFrame:GetChecked()
|
||||
opt.PetFrame = not not panel.PetFrame:GetChecked()
|
||||
opt.TargetFrame = not not panel.TargetFrame:GetChecked()
|
||||
opt.FocusFrame = not not panel.FocusFrame:GetChecked()
|
||||
opt.FocusFrameToT = not not panel.FocusFrameToT:GetChecked()
|
||||
opt.arena = not not panel.arena:GetChecked()
|
||||
opt.party = not not panel.party:GetChecked()
|
||||
opt.compactraid = not not panel.compactraid:GetChecked()
|
||||
-- opt.compactparty = not not panel.compactparty:GetChecked()
|
||||
opt.boss = not not panel.boss:GetChecked()
|
||||
end
|
||||
|
||||
InterfaceOptions_AddCategory(panel, addon.optpanels.ABOUT)
|
||||
@@ -0,0 +1,169 @@
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- FrameOptionsPanel.lua
|
||||
--
|
||||
-- This file contains the definitions of the frame blacklist options panel.
|
||||
--
|
||||
-- Events registered:
|
||||
-- None
|
||||
-------------------------------------------------------------------------]] --
|
||||
local addonName, addon = ...
|
||||
local L = addon.L
|
||||
|
||||
local panel = CreateFrame("Frame")
|
||||
panel.name = "Frame Blacklist"
|
||||
panel.parent = addonName
|
||||
|
||||
addon.optpanels["BLACKLIST"] = panel
|
||||
|
||||
panel:SetScript("OnShow", function(self)
|
||||
if not panel.initialized then
|
||||
panel:CreateOptions()
|
||||
panel.refresh()
|
||||
end
|
||||
panel.refresh()
|
||||
end)
|
||||
|
||||
local function make_label(name, template)
|
||||
local label = panel:CreateFontString("OVERLAY", "CliqueOptionsBlacklist" .. name, template)
|
||||
label:SetWidth(panel:GetWidth())
|
||||
label:SetJustifyH("LEFT")
|
||||
label:SetJustifyV("TOP")
|
||||
label.type = "label"
|
||||
return label
|
||||
end
|
||||
|
||||
local function make_checkbox(name, parent, label)
|
||||
local frame = CreateFrame("CheckButton", "CliqueOptionsBlacklist" .. name, parent, "UICheckButtonTemplate")
|
||||
frame.text = _G[frame:GetName() .. "Text"]
|
||||
frame.type = "checkbox"
|
||||
frame.text:SetText(label)
|
||||
return frame
|
||||
end
|
||||
|
||||
local state = {}
|
||||
|
||||
function panel:CreateOptions()
|
||||
panel.initialized = true
|
||||
|
||||
self.intro = make_label("Intro", "GameFontHighlightSmall")
|
||||
self.intro:SetPoint("TOPLEFT", panel, 5, -5)
|
||||
self.intro:SetPoint("RIGHT", panel, -5, 0)
|
||||
self.intro:SetHeight(45)
|
||||
self.intro:SetText(
|
||||
L["This panel allows you to blacklist certain frames from being included for Clique bindings. Any frames that are selected in this list will not be registered, although you may have to reload your user interface to have them return to their original bindings."])
|
||||
|
||||
self.scrollframe = CreateFrame("ScrollFrame", "CliqueOptionsBlacklistScrollFrame", self, "FauxScrollFrameTemplate")
|
||||
self.scrollframe:SetPoint("TOPLEFT", self.intro, "BOTTOMLEFT", 0, -5)
|
||||
self.scrollframe:SetPoint("RIGHT", self, "RIGHT", -30, 0)
|
||||
self.scrollframe:SetHeight(320)
|
||||
self.scrollframe:Show()
|
||||
|
||||
local function row_onclick(row) state[row.frameName] = not not row:GetChecked() end
|
||||
|
||||
self.rows = {}
|
||||
|
||||
-- Create and anchor some items
|
||||
for idx = 1, 10 do
|
||||
self.rows[idx] = make_checkbox("Item" .. idx, self.scrollframe, L["Frame name"])
|
||||
self.rows[idx]:SetScript("OnClick", row_onclick)
|
||||
|
||||
if idx == 1 then
|
||||
self.rows[idx]:SetPoint("TOPLEFT", self.scrollframe, "TOPLEFT", 0, 0)
|
||||
else
|
||||
self.rows[idx]:SetPoint("TOPLEFT", self.rows[idx - 1], "BOTTOMLEFT", 0, 0)
|
||||
end
|
||||
end
|
||||
|
||||
self.rowheight = self.rows[1]:GetHeight()
|
||||
|
||||
-- Number of items?
|
||||
local function update() self:UpdateScrollFrame() end
|
||||
|
||||
self.scrollframe:SetScript("OnVerticalScroll", function(frame, offset) FauxScrollFrame_OnVerticalScroll(frame, offset, self.rowheight, update) end)
|
||||
|
||||
self.selectall = CreateFrame("Button", "CliqueOptionsBlacklistSelectAll", self, "UIPanelButtonTemplate2")
|
||||
self.selectall:SetText(L["Select All"])
|
||||
self.selectall:SetPoint("BOTTOMLEFT", 10, 10)
|
||||
self.selectall:SetWidth(100)
|
||||
self.selectall:SetScript("OnClick", function(button)
|
||||
for frame in pairs(addon.ccframes) do
|
||||
local name = frame:GetName()
|
||||
if name then state[name] = true end
|
||||
end
|
||||
|
||||
for name, frame in pairs(addon.hccframes) do state[name] = true end
|
||||
|
||||
self:UpdateScrollFrame()
|
||||
end)
|
||||
|
||||
self.selectnone = CreateFrame("Button", "CliqueOptionsBlacklistSelectNone", self, "UIPanelButtonTemplate2")
|
||||
self.selectnone:SetText(L["Select None"])
|
||||
self.selectnone:SetPoint("BOTTOMLEFT", self.selectall, "BOTTOMRIGHT", 5, 0)
|
||||
self.selectnone:SetWidth(100)
|
||||
self.selectnone:SetScript("OnClick", function(button)
|
||||
for frame in pairs(addon.ccframes) do
|
||||
local name = frame:GetName()
|
||||
if name then state[name] = false end
|
||||
end
|
||||
|
||||
for name, frame in pairs(addon.hccframes) do state[name] = false end
|
||||
|
||||
self:UpdateScrollFrame()
|
||||
end)
|
||||
end
|
||||
|
||||
function panel:UpdateScrollFrame()
|
||||
local sort = {}
|
||||
for frame in pairs(addon.ccframes) do
|
||||
local name = frame:GetName()
|
||||
if name then table.insert(sort, name) end
|
||||
end
|
||||
|
||||
for name, frame in pairs(addon.hccframes) do table.insert(sort, name) end
|
||||
|
||||
table.sort(sort)
|
||||
|
||||
local offset = FauxScrollFrame_GetOffset(self.scrollframe)
|
||||
FauxScrollFrame_Update(self.scrollframe, #sort, 10, self.rowheight)
|
||||
|
||||
for i = 1, 10 do
|
||||
local idx = offset + i
|
||||
local row = self.rows[i]
|
||||
if idx <= #sort then
|
||||
row.frameName = sort[idx]
|
||||
row.text:SetText(sort[idx])
|
||||
row:SetChecked(state[sort[idx]])
|
||||
row:Show()
|
||||
else
|
||||
row:Hide()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function panel.okay()
|
||||
-- Clear the existing blacklist
|
||||
for frame, value in pairs(state) do
|
||||
if not not value then
|
||||
addon.settings.blacklist[frame] = true
|
||||
else
|
||||
addon.settings.blacklist[frame] = nil
|
||||
end
|
||||
end
|
||||
|
||||
addon:FireMessage("BLACKLIST_CHANGED")
|
||||
end
|
||||
|
||||
function panel.refresh()
|
||||
for frame in pairs(addon.ccframes) do
|
||||
local name = frame:GetName()
|
||||
if name then state[name] = false end
|
||||
end
|
||||
|
||||
for name, frame in pairs(addon.hccframes) do state[name] = false end
|
||||
|
||||
for frame, value in pairs(addon.settings.blacklist) do state[frame] = value end
|
||||
|
||||
panel:UpdateScrollFrame()
|
||||
end
|
||||
|
||||
InterfaceOptions_AddCategory(panel, addon.optpanels.ABOUT)
|
||||
@@ -0,0 +1,554 @@
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- OptionsPanel.lua
|
||||
--
|
||||
-- This file contains the definitions of the main interface options panel.
|
||||
-- Any other options panels are sub-categories of this main panel.
|
||||
--
|
||||
-- Events registered:
|
||||
-- None
|
||||
-------------------------------------------------------------------------]] --
|
||||
local addonName, addon = ...
|
||||
local L = addon.L
|
||||
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- Addon 'About' Dialog for Interface Options
|
||||
--
|
||||
-- Some of this code was taken from/inspired by tekKonfigAboutPanel
|
||||
--- and it's been moved from AddonCore due to taint issues.
|
||||
-------------------------------------------------------------------------]] --
|
||||
|
||||
local about = CreateFrame("Frame", addonName .. "AboutPanel", InterfaceOptionsFramePanelContainer)
|
||||
about.name = addonName
|
||||
about:Hide()
|
||||
|
||||
function about.OnShow(frame)
|
||||
local fields = {"Version", "Author", "Backported"}
|
||||
local notes = GetAddOnMetadata(addonName, "Notes")
|
||||
|
||||
local title = frame:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge")
|
||||
|
||||
title:SetPoint("TOPLEFT", 16, -16)
|
||||
title:SetText(addonName)
|
||||
|
||||
local subtitle = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
|
||||
subtitle:SetHeight(32)
|
||||
subtitle:SetPoint("TOPLEFT", title, "BOTTOMLEFT", 0, -8)
|
||||
subtitle:SetPoint("RIGHT", about, -32, 0)
|
||||
subtitle:SetNonSpaceWrap(true)
|
||||
subtitle:SetJustifyH("LEFT")
|
||||
subtitle:SetJustifyV("TOP")
|
||||
subtitle:SetText(notes)
|
||||
|
||||
local anchor
|
||||
for _, field in pairs(fields) do
|
||||
local val
|
||||
if (field == "Backported") then
|
||||
val = "Tsoukie (Based on v3.4.14)"
|
||||
else
|
||||
val = GetAddOnMetadata(addonName, field)
|
||||
end
|
||||
if val then
|
||||
local title = frame:CreateFontString(nil, "ARTWORK", "GameFontNormalSmall")
|
||||
title:SetWidth(75)
|
||||
if not anchor then
|
||||
title:SetPoint("TOPLEFT", subtitle, "BOTTOMLEFT", -2, -8)
|
||||
else
|
||||
title:SetPoint("TOPLEFT", anchor, "BOTTOMLEFT", 0, -6)
|
||||
end
|
||||
title:SetJustifyH("RIGHT")
|
||||
title:SetText(field)
|
||||
|
||||
local detail = frame:CreateFontString(nil, "ARTWORK", "GameFontHighlightSmall")
|
||||
detail:SetPoint("LEFT", title, "RIGHT", 4, 0)
|
||||
detail:SetPoint("RIGHT", -16, 0)
|
||||
detail:SetJustifyH("LEFT")
|
||||
detail:SetText(val)
|
||||
|
||||
anchor = title
|
||||
end
|
||||
end
|
||||
|
||||
-- Clear the OnShow so it only happens once
|
||||
frame:SetScript("OnShow", nil)
|
||||
end
|
||||
|
||||
addon.optpanels = addon.optpanels or {}
|
||||
addon.optpanels.ABOUT = about
|
||||
|
||||
about:SetScript("OnShow", about.OnShow)
|
||||
InterfaceOptions_AddCategory(addon.optpanels.ABOUT)
|
||||
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- End Dialog
|
||||
-------------------------------------------------------------------------]] --
|
||||
|
||||
local panel = CreateFrame("Frame")
|
||||
panel.name = L["General Options"]
|
||||
panel.parent = addonName
|
||||
|
||||
addon.optpanels.GENERAL = panel
|
||||
|
||||
panel:SetScript("OnShow", function(self)
|
||||
if not panel.initialized then
|
||||
panel:CreateOptions()
|
||||
panel.refresh()
|
||||
end
|
||||
end)
|
||||
|
||||
local function make_checkbox(name, parent)
|
||||
local frame = CreateFrame("CheckButton", name, parent, "UICheckButtonTemplate")
|
||||
frame.text = _G[frame:GetName() .. "Text"]
|
||||
frame.type = "checkbox"
|
||||
return frame
|
||||
end
|
||||
|
||||
local function make_dropdown(name, parent)
|
||||
local frame = CreateFrame("Frame", name, parent, "UIDropDownMenuTemplate")
|
||||
frame:SetClampedToScreen(true)
|
||||
frame.type = "dropdown"
|
||||
return frame
|
||||
end
|
||||
|
||||
local function make_label(name, parent, template)
|
||||
local label = parent:CreateFontString("OVERLAY", name, template)
|
||||
label:SetWidth(120)
|
||||
label:SetJustifyH("LEFT")
|
||||
label.type = "label"
|
||||
return label
|
||||
end
|
||||
|
||||
local function make_editbox_with_button(editName, buttonName, parent)
|
||||
local editbox = CreateFrame("EditBox", editName, parent)
|
||||
editbox:SetHeight(32)
|
||||
editbox:SetWidth(200)
|
||||
editbox:SetAutoFocus(false)
|
||||
editbox:SetFontObject('GameFontHighlightSmall')
|
||||
editbox.type = "editbox"
|
||||
|
||||
local left = editbox:CreateTexture(nil, "BACKGROUND")
|
||||
left:SetWidth(8)
|
||||
left:SetHeight(20)
|
||||
left:SetPoint("LEFT", -5, 0)
|
||||
left:SetTexture("Interface\\Common\\Common-Input-Border")
|
||||
left:SetTexCoord(0, 0.0625, 0, 0.625)
|
||||
|
||||
local right = editbox:CreateTexture(nil, "BACKGROUND")
|
||||
right:SetWidth(8)
|
||||
right:SetHeight(20)
|
||||
right:SetPoint("RIGHT", 0, 0)
|
||||
right:SetTexture("Interface\\Common\\Common-Input-Border")
|
||||
right:SetTexCoord(0.9375, 1, 0, 0.625)
|
||||
|
||||
local center = editbox:CreateTexture(nil, "BACKGROUND")
|
||||
center:SetHeight(20)
|
||||
center:SetPoint("RIGHT", right, "LEFT", 0, 0)
|
||||
center:SetPoint("LEFT", left, "RIGHT", 0, 0)
|
||||
center:SetTexture("Interface\\Common\\Common-Input-Border")
|
||||
center:SetTexCoord(0.0625, 0.9375, 0, 0.625)
|
||||
|
||||
editbox:SetScript("OnEscapePressed", editbox.ClearFocus)
|
||||
editbox:SetScript("OnEnterPressed", editbox.ClearFocus)
|
||||
editbox:SetScript("OnEditFocusGained", function() editbox:HighlightText(0, MAX_HIGHLIGHT_LEN) end)
|
||||
|
||||
local button = CreateFrame("Button", buttonName, editbox, "UIPanelButtonTemplate2")
|
||||
button:Show()
|
||||
button:SetHeight(22)
|
||||
button:SetWidth(75)
|
||||
button:SetPoint("LEFT", editbox, "RIGHT", 0, 0)
|
||||
return editbox, button
|
||||
end
|
||||
|
||||
function panel:CreateOptions()
|
||||
-- Ensure the panel isn't created twice (thanks haste)
|
||||
panel.initialized = true
|
||||
|
||||
-- Create the general options panel here:
|
||||
local bits = {}
|
||||
|
||||
self.updown = make_checkbox("CliqueOptionsUpDownClick", self)
|
||||
self.updown.text:SetText(L["Trigger bindings on the 'down' portion of the click (experimental)"])
|
||||
|
||||
self.fastooc = make_checkbox("CliqueOptionsFastOoc", self)
|
||||
self.fastooc.text:SetText(L["Disable out of combat clicks when party members enter combat"])
|
||||
|
||||
self.specswap = make_checkbox("CliqueOptionsSpecSwap", self)
|
||||
self.specswap.text:SetText(L["Swap profiles based on talent spec"])
|
||||
self.specswap.EnableDisable = function()
|
||||
if self.specswap:GetChecked() then
|
||||
for i = 1, 12 do UIDropDownMenu_EnableDropDown(panel["specswap" .. i]) end
|
||||
else
|
||||
for i = 1, 12 do UIDropDownMenu_DisableDropDown(panel["specswap" .. i]) end
|
||||
end
|
||||
end
|
||||
self.specswap:SetScript("PostClick", self.specswap.EnableDisable)
|
||||
|
||||
for i = 1, 12 do
|
||||
self["specswap" .. i .. "label"] = make_label("CliqueOptionsSpecSwap" .. i .. "Label", self, "GameFontNormalSmall")
|
||||
self["specswap" .. i .. "label"]:SetText(L["Specialization Slot "] .. i .. L[":"])
|
||||
self["specswap" .. i] = make_dropdown("CliqueOptionsSpecSwap" .. i, self)
|
||||
UIDropDownMenu_SetWidth(self["specswap" .. i], 200)
|
||||
BlizzardOptionsPanel_SetupDependentControl(self.specswap, self["specswap" .. i])
|
||||
end
|
||||
|
||||
self.profilelabel = make_label("CliqueOptionsProfileMgmtLabel", self, "GameFontNormalSmall")
|
||||
self.profilelabel:SetText(L["Profile Management:"])
|
||||
self.profiledd = make_dropdown("CliqueOptionsProfileMgmt", self)
|
||||
UIDropDownMenu_SetWidth(self.profiledd, 200)
|
||||
|
||||
self.stopcastingfix = make_checkbox("CliqueOptionsStopCastingFix", self)
|
||||
self.stopcastingfix.text:SetText(L["Attempt to fix the issue introduced in 4.3 with casting on dead targets"])
|
||||
|
||||
self.exportbindingslabel = make_label("CliqueOptionsExportBindingsLabel", self, "GameFontNormalSmall")
|
||||
self.exportbindingslabel:SetText(L["Export bindings:"])
|
||||
self.exportbindingseditbox, self.exportbindingsbutton = make_editbox_with_button("CliqueOptionsExportBindingsEditbox", "CliqueOptionsExportBindingsEditboxButton", self)
|
||||
|
||||
self.exportbindingsbutton:SetText(L["Generate"])
|
||||
self.exportbindingsbutton:SetScript("OnClick", function(self, button)
|
||||
local payload = addon:GetExportString()
|
||||
local editbox = self:GetParent()
|
||||
editbox:SetText(payload)
|
||||
editbox:SetFocus()
|
||||
editbox:HighlightText(0, MAX_HIGHLIGHT_LEN)
|
||||
end)
|
||||
|
||||
self.importbindingslabel = make_label("CliqueOptionsImportBindingsLabel", self, "GameFontNormalSmall")
|
||||
self.importbindingslabel:SetText(L["Import bindings:"])
|
||||
local importEditbox, importButton = make_editbox_with_button("CliqueOptionsImportBindingsEditbox", "CliqueOptionsImportBindingsEditboxButton", self)
|
||||
self.importbindingseditbox, self.importbindingsbutton = importEditbox, importButton
|
||||
self.importbindingseditbox:SetScript("OnTextChanged", function(self, userInput)
|
||||
importButton.validated = false
|
||||
importButton:SetText(L["Validate"])
|
||||
end)
|
||||
|
||||
self.importbindingsbutton.validated = false
|
||||
self.importbindingsbutton:SetText(L["Validate"])
|
||||
self.importbindingsbutton:SetScript("OnClick", function(self, button)
|
||||
if self.validated then
|
||||
if not InCombatLockdown() then addon:ImportBindings(self.bindingData) end
|
||||
self:SetText(L["Success!"])
|
||||
importEditbox:SetText("")
|
||||
else
|
||||
local editbox = self:GetParent()
|
||||
local payload = editbox:GetText()
|
||||
|
||||
local bindingData = addon:DecodeExportString(payload)
|
||||
if bindingData then
|
||||
self:SetText(L["Import"])
|
||||
self.validated = true
|
||||
self.bindingData = bindingData
|
||||
else
|
||||
self:SetText(L["Invalid"])
|
||||
self.validated = false
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
-- Collect and anchor the bits together
|
||||
table.insert(bits, self.updown)
|
||||
table.insert(bits, self.fastooc)
|
||||
table.insert(bits, self.stopcastingfix)
|
||||
table.insert(bits, self.specswap)
|
||||
table.insert(bits, self.profilelabel)
|
||||
table.insert(bits, self.profiledd)
|
||||
table.insert(bits, self.exportbindingslabel)
|
||||
table.insert(bits, self.exportbindingseditbox)
|
||||
table.insert(bits, self.importbindingslabel)
|
||||
table.insert(bits, self.importbindingseditbox)
|
||||
for i = 1, 12 do
|
||||
table.insert(bits, self["specswap" .. i .. "label"])
|
||||
table.insert(bits, self["specswap" .. i])
|
||||
end
|
||||
|
||||
bits[1]:SetPoint("TOPLEFT", 5, -5)
|
||||
|
||||
local bump = 1
|
||||
for i = 2, #bits, 1 do
|
||||
if bits[i].type == "label" then
|
||||
bits[i]:SetPoint("TOPLEFT", bits[i - bump], "BOTTOMLEFT", 0, -15)
|
||||
if bump == 1 then bump = 2 end
|
||||
elseif bits[i].type == "dropdown" then
|
||||
bits[i]:SetPoint("LEFT", bits[i - 1], "RIGHT", 5, -5)
|
||||
elseif bits[i].type == "editbox" then
|
||||
bits[i]:SetPoint("LEFT", bits[i - 1], "RIGHT", 5, 0)
|
||||
else
|
||||
bits[i]:SetPoint("TOPLEFT", bits[i - 1], "BOTTOMLEFT", 0, -5)
|
||||
end
|
||||
end
|
||||
|
||||
-- Trigger bindings on 'down' clicks instead of 'up' clicks
|
||||
-- Automatically switch profile based on spec
|
||||
-- Dropdown to select primary profile
|
||||
-- Dropdown to select secondary profile
|
||||
-- Profile managerment
|
||||
-- * set profile
|
||||
-- * delete profile
|
||||
-- * add profile
|
||||
end
|
||||
|
||||
StaticPopupDialogs["CLIQUE_CONFIRM_PROFILE_DELETE"] = {
|
||||
button1 = YES,
|
||||
button2 = NO,
|
||||
hideOnEscape = 1,
|
||||
timeout = 0,
|
||||
whileDead = 1
|
||||
}
|
||||
|
||||
StaticPopupDialogs["CLIQUE_NEW_PROFILE"] = {
|
||||
text = TEXT("Enter the name of a new profile you'd like to create"),
|
||||
button1 = TEXT(OKAY),
|
||||
button2 = TEXT(CANCEL),
|
||||
OnAccept = function(self)
|
||||
local base = self:GetName()
|
||||
local editbox = _G[base .. "EditBox"]
|
||||
local profileName = editbox:GetText()
|
||||
addon.db:SetProfile(profileName)
|
||||
end,
|
||||
timeout = 0,
|
||||
whileDead = 1,
|
||||
exclusive = 1,
|
||||
showAlert = 1,
|
||||
hideOnEscape = 1,
|
||||
hasEditBox = 1,
|
||||
maxLetters = 32,
|
||||
OnShow = function(self)
|
||||
_G[self:GetName() .. "Button1"]:Disable();
|
||||
_G[self:GetName() .. "EditBox"]:SetFocus();
|
||||
end,
|
||||
EditBoxOnEnterPressed = function(self)
|
||||
if (_G[self:GetParent():GetName() .. "Button1"]:IsEnabled() == 1) then
|
||||
local base = self:GetParent():GetName()
|
||||
local editbox = _G[base .. "EditBox"]
|
||||
local profileName = editbox:GetText()
|
||||
addon.db:SetProfile(profileName)
|
||||
end
|
||||
self:GetParent():Hide();
|
||||
end,
|
||||
EditBoxOnTextChanged = function(self)
|
||||
local editBox = _G[self:GetParent():GetName() .. "EditBox"];
|
||||
local txt = editBox:GetText()
|
||||
if #txt > 0 then
|
||||
_G[self:GetParent():GetName() .. "Button1"]:Enable();
|
||||
else
|
||||
_G[self:GetParent():GetName() .. "Button1"]:Disable();
|
||||
end
|
||||
end,
|
||||
EditBoxOnEscapePressed = function(self)
|
||||
self:GetParent():Hide();
|
||||
ClearCursor();
|
||||
end
|
||||
}
|
||||
|
||||
local function getsorttbl()
|
||||
local profiles = addon.db:GetProfiles()
|
||||
local sort = {}
|
||||
for idx, profileName in ipairs(profiles) do table.insert(sort, profileName) end
|
||||
table.sort(sort)
|
||||
return sort
|
||||
end
|
||||
|
||||
local function spec_initialize(dropdown, level)
|
||||
local sort = getsorttbl()
|
||||
local paged = (#sort >= 15)
|
||||
|
||||
if not level or level == 1 then
|
||||
if not paged then
|
||||
-- Display the profiles un-paged
|
||||
for idx, entry in ipairs(sort) do
|
||||
local info = UIDropDownMenu_CreateInfo()
|
||||
info.text = entry
|
||||
info.value = entry
|
||||
info.func = function(frame, ...) UIDropDownMenu_SetSelectedValue(dropdown, entry) end
|
||||
UIDropDownMenu_AddButton(info, level)
|
||||
end
|
||||
else
|
||||
-- Page the results into sub-menus
|
||||
for idx = 1, #sort, 10 do
|
||||
-- Make the submenus for each group
|
||||
local lastidx = (idx + 9 > #sort) and #sort or (idx + 9)
|
||||
local info = UIDropDownMenu_CreateInfo()
|
||||
local first = sort[idx]
|
||||
local last = sort[lastidx]
|
||||
info.text = first:sub(1, 5):trim() .. ".." .. last:sub(1, 5):trim()
|
||||
info.value = idx
|
||||
info.hasArrow = true
|
||||
info.notCheckable = true
|
||||
UIDropDownMenu_AddButton(info, level)
|
||||
end
|
||||
end
|
||||
elseif level == 2 then
|
||||
-- Generate the appropriate submenus depending on need
|
||||
if paged then
|
||||
-- Generate the frame submenu
|
||||
local startIdx = UIDROPDOWNMENU_MENU_VALUE
|
||||
local lastIdx = (startIdx + 9 > #sort) and #sort or (startIdx + 9)
|
||||
for idx = startIdx, lastIdx do
|
||||
local info = UIDropDownMenu_CreateInfo()
|
||||
info.text = sort[idx]
|
||||
info.value = sort[idx]
|
||||
info.func = function(frame, ...) UIDropDownMenu_SetSelectedValue(dropdown, sort[idx]) end
|
||||
UIDropDownMenu_AddButton(info, level)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function mgmt_initialize(dropdown, level)
|
||||
local sort = getsorttbl()
|
||||
local paged = (#sort >= 15)
|
||||
local currentProfile = addon.db:GetCurrentProfile()
|
||||
|
||||
if not level or level == 1 then
|
||||
if not paged then
|
||||
-- Display the profiles un-paged
|
||||
for idx, entry in ipairs(sort) do
|
||||
local info = UIDropDownMenu_CreateInfo()
|
||||
info.text = entry
|
||||
info.value = entry
|
||||
info.notCheckable = true
|
||||
info.hasArrow = true
|
||||
UIDropDownMenu_AddButton(info, level)
|
||||
end
|
||||
else
|
||||
-- Page the results into sub-menus
|
||||
for idx = 1, #sort, 10 do
|
||||
-- Make the submenus for each group
|
||||
local lastidx = (idx + 9 > #sort) and #sort or (idx + 9)
|
||||
local info = UIDropDownMenu_CreateInfo()
|
||||
local first = sort[idx]
|
||||
local last = sort[lastidx]
|
||||
info.text = first:sub(1, 5):trim() .. ".." .. last:sub(1, 5):trim()
|
||||
info.value = idx
|
||||
info.notCheckable = true
|
||||
info.hasArrow = true
|
||||
UIDropDownMenu_AddButton(info, level)
|
||||
end
|
||||
end
|
||||
|
||||
-- Create the 'Add profile' option regardless
|
||||
local info = UIDropDownMenu_CreateInfo()
|
||||
info.text = L["Add new profile"]
|
||||
info.value = "add"
|
||||
info.notCheckable = true
|
||||
info.func = function()
|
||||
HideDropDownMenu(1)
|
||||
StaticPopup_Show("CLIQUE_NEW_PROFILE")
|
||||
end
|
||||
UIDropDownMenu_AddButton(info, level)
|
||||
elseif level == 2 then
|
||||
-- Generate the appropriate submenus depending on need
|
||||
if paged then
|
||||
-- Generate the frame submenu
|
||||
local startIdx = UIDROPDOWNMENU_MENU_VALUE
|
||||
local lastIdx = (startIdx + 9 > #sort) and #sort or (startIdx + 9)
|
||||
for idx = startIdx, lastIdx do
|
||||
local info = UIDropDownMenu_CreateInfo()
|
||||
info.text = sort[idx]
|
||||
info.value = sort[idx]
|
||||
info.hasArrow = true
|
||||
info.notCheckable = true
|
||||
UIDropDownMenu_AddButton(info, level)
|
||||
end
|
||||
else
|
||||
local info = UIDropDownMenu_CreateInfo()
|
||||
info.text = L["Select profile: %s"]:format(UIDROPDOWNMENU_MENU_VALUE)
|
||||
info.value = sort[UIDROPDOWNMENU_MENU_VALUE]
|
||||
info.notCheckable = true
|
||||
-- Don't disable this, allow the user to make their own mistakes
|
||||
-- info.disabled = addon.settings.specswap
|
||||
info.func = function(frame)
|
||||
UIDropDownMenu_SetSelectedValue(dropdown, UIDROPDOWNMENU_MENU_VALUE)
|
||||
UIDropDownMenu_SetText(dropdown, UIDROPDOWNMENU_MENU_VALUE)
|
||||
addon.db:SetProfile(UIDROPDOWNMENU_MENU_VALUE)
|
||||
end
|
||||
UIDropDownMenu_AddButton(info, level)
|
||||
|
||||
info = UIDropDownMenu_CreateInfo()
|
||||
info.text = L["Delete profile: %s"]:format(UIDROPDOWNMENU_MENU_VALUE)
|
||||
info.disabled = UIDROPDOWNMENU_MENU_VALUE == currentProfile
|
||||
info.value = sort[UIDROPDOWNMENU_MENU_VALUE]
|
||||
info.notCheckable = true
|
||||
info.func = function(frame)
|
||||
local dialog = StaticPopupDialogs["CLIQUE_CONFIRM_PROFILE_DELETE"]
|
||||
dialog.text = L["Delete profile '%s'"]:format(UIDROPDOWNMENU_MENU_VALUE)
|
||||
dialog.OnAccept = function(self) addon.db:DeleteProfile(UIDROPDOWNMENU_MENU_VALUE) end
|
||||
HideDropDownMenu(1)
|
||||
StaticPopup_Show("CLIQUE_CONFIRM_PROFILE_DELETE")
|
||||
end
|
||||
UIDropDownMenu_AddButton(info, level)
|
||||
end
|
||||
elseif level == 3 then
|
||||
local info = UIDropDownMenu_CreateInfo()
|
||||
info.text = L["Select profile: %s"]:format(UIDROPDOWNMENU_MENU_VALUE)
|
||||
info.value = sort[UIDROPDOWNMENU_MENU_VALUE]
|
||||
-- info.disabled = addon.settings.specswap
|
||||
info.disabled = UIDROPDOWNMENU_MENU_VALUE == currentProfile
|
||||
|
||||
info.func = function(frame)
|
||||
UIDropDownMenu_SetSelectedValue(dropdown, UIDROPDOWNMENU_MENU_VALUE)
|
||||
UIDropDownMenu_SetText(dropdown, UIDROPDOWNMENU_MENU_VALUE)
|
||||
addon.db:SetProfile(UIDROPDOWNMENU_MENU_VALUE)
|
||||
end
|
||||
UIDropDownMenu_AddButton(info, level)
|
||||
|
||||
info = UIDropDownMenu_CreateInfo()
|
||||
info.text = L["Delete profile: %s"]:format(UIDROPDOWNMENU_MENU_VALUE)
|
||||
info.disabled = UIDROPDOWNMENU_MENU_VALUE == currentProfile
|
||||
info.value = sort[UIDROPDOWNMENU_MENU_VALUE]
|
||||
info.func = function(frame)
|
||||
local dialog = StaticPopupDialogs["CLIQUE_CONFIRM_PROFILE_DELETE"]
|
||||
dialog.text = L["Delete profile '%s'"]:format(UIDROPDOWNMENU_MENU_VALUE)
|
||||
dialog.OnAccept = function(self) addon.db:DeleteProfile(UIDROPDOWNMENU_MENU_VALUE) end
|
||||
HideDropDownMenu(1)
|
||||
StaticPopup_Show("CLIQUE_CONFIRM_PROFILE_DELETE")
|
||||
end
|
||||
UIDropDownMenu_AddButton(info, level)
|
||||
end
|
||||
end
|
||||
|
||||
-- Update the elements on the panel to the current state
|
||||
function panel.refresh()
|
||||
-- Initialize the dropdowns
|
||||
local settings = addon.settings
|
||||
local currentProfile = addon.db:GetCurrentProfile()
|
||||
|
||||
UIDropDownMenu_Initialize(panel.profiledd, mgmt_initialize)
|
||||
UIDropDownMenu_SetSelectedValue(panel.profiledd, currentProfile)
|
||||
UIDropDownMenu_SetText(panel.profiledd, L["Current: "] .. currentProfile)
|
||||
|
||||
for i = 1, 12 do
|
||||
UIDropDownMenu_Initialize(panel["specswap" .. i], spec_initialize)
|
||||
UIDropDownMenu_SetSelectedValue(panel["specswap" .. i], settings["specswap" .. i] or currentProfile)
|
||||
UIDropDownMenu_SetText(panel["specswap" .. i], settings["specswap" .. i] or currentProfile)
|
||||
end
|
||||
|
||||
panel.updown:SetChecked(settings.downclick)
|
||||
panel.fastooc:SetChecked(settings.fastooc)
|
||||
panel.stopcastingfix:SetChecked(settings.stopcastingfix)
|
||||
panel.specswap:SetChecked(settings.specswap)
|
||||
panel.specswap.EnableDisable()
|
||||
end
|
||||
|
||||
function panel.okay()
|
||||
local settings = addon.settings
|
||||
local currentProfile = addon.db:GetCurrentProfile()
|
||||
|
||||
local changed = (not not panel.stopcastingfix:GetChecked()) ~= settings.stopcastingfix
|
||||
|
||||
-- Update the saved variables
|
||||
settings.downclick = not not panel.updown:GetChecked()
|
||||
settings.stopcastingfix = not not panel.stopcastingfix:GetChecked()
|
||||
settings.fastooc = not not panel.fastooc:GetChecked()
|
||||
settings.specswap = not not panel.specswap:GetChecked()
|
||||
for i = 1, 12 do settings["specswap" .. i] = UIDropDownMenu_GetSelectedValue(panel["specswap" .. i]) end
|
||||
|
||||
if newProfile ~= currentProfile then addon.db:SetProfile(newProfile) end
|
||||
addon:UpdateCombatWatch()
|
||||
|
||||
if changed then addon:FireMessage("BINDINGS_CHANGED") end
|
||||
end
|
||||
|
||||
panel.cancel = panel.refresh
|
||||
|
||||
function addon:UpdateOptionsPanel() if panel:IsVisible() and panel.initialized then panel.refresh() end end
|
||||
|
||||
InterfaceOptions_AddCategory(panel, addon.optpanels.ABOUT)
|
||||
@@ -0,0 +1,107 @@
|
||||
local addonName, addon = ...
|
||||
local baseLocale = {
|
||||
["A binding that belongs to the 'default' binding-set will always be active on your unit frames, unless you override it with another binding."] = "A binding that belongs to the 'default' binding-set will always be active on your unit frames, unless you override it with another binding.",
|
||||
["A binding that belongs to the 'enemy' binding-set will always be active when clicking on unit frames that display enemy units, i.e. those you can attack. If you click on a unit that you cannot attack, nothing will happen."] = "A binding that belongs to the 'enemy' binding-set will always be active when clicking on unit frames that display enemy units, i.e. those you can attack. If you click on a unit that you cannot attack, nothing will happen.",
|
||||
["A binding that belongs to the 'frield' binding-set will only be active when clicking on unit frames that display friendly units, i.e. those you can heal and assist. If you click on a unit that you cannot heal or assist, nothing will happen."] = "A binding that belongs to the 'frield' binding-set will only be active when clicking on unit frames that display friendly units, i.e. those you can heal and assist. If you click on a unit that you cannot heal or assist, nothing will happen.",
|
||||
["A binding that belongs to the 'global' binding-set is always active. If the spell requires a target, you will be given the 'casting hand', otherwise the spell will be cast. If the spell is an AOE spell, then you will be given the ground targeting circle."] = "A binding that belongs to the 'global' binding-set is always active. If the spell requires a target, you will be given the 'casting hand', otherwise the spell will be cast. If the spell is an AOE spell, then you will be given the ground targeting circle.",
|
||||
["A binding that belongs to the 'hovercast' binding-set is active whenever the mouse is over a unit frame, or a character in the 3D world. This allows you to use 'hovercasting', where you hover over a unit in the world and press a key to cast a spell on them. These bindings are also active over unit frames."] = "A binding that belongs to the 'hovercast' binding-set is active whenever the mouse is over a unit frame, or a character in the 3D world. This allows you to use 'hovercasting', where you hover over a unit in the world and press a key to cast a spell on them. These bindings are also active over unit frames.",
|
||||
["A binding that belongs to the 'ooc' binding-set will only be active when the player is out-of-combat. As soon as the player enters combat, these bindings will no longer be active, so be careful when choosing this binding-set for any spells you use frequently."] = "A binding that belongs to the 'ooc' binding-set will only be active when the player is out-of-combat. As soon as the player enters combat, these bindings will no longer be active, so be careful when choosing this binding-set for any spells you use frequently.",
|
||||
["Accept"] = "Accept",
|
||||
["Action"] = "Action",
|
||||
["Add new profile"] = "Add new profile",
|
||||
["Alt"] = "Alt",
|
||||
["Arena enemy frames"] = "Arena enemy frames",
|
||||
["Bind other"] = "Bind other",
|
||||
["Bind spell"] = "Bind spell",
|
||||
["Binding"] = "Binding",
|
||||
["Blizzard frame integration options"] = "Blizzard frame integration options",
|
||||
["Boss target frames"] = "Boss target frames",
|
||||
["Cancel"] = "Cancel",
|
||||
["Cast %s"] = "Cast %s",
|
||||
["Change binding"] = "Change binding",
|
||||
["Change binding: %s"] = "Change binding: %s",
|
||||
["Clique Binding Configuration"] = "Clique Binding Configuration",
|
||||
["Clique binding configuration"] = "Clique binding configuration",
|
||||
["Clique general options"] = "Clique general options",
|
||||
["Current Profile: "] = "Current Profile: ",
|
||||
["(All specs)"] = "(All specs)",
|
||||
["(Spec "] = "(Spec ",
|
||||
["(Spec-specific)"] = "(Spec-specific)",
|
||||
["Clique: 'default' binding-set"] = "Clique: 'default' binding-set",
|
||||
["Clique: 'enemy' binding-set"] = "Clique: 'enemy' binding-set",
|
||||
["Clique: 'friend' binding-set"] = "Clique: 'friend' binding-set",
|
||||
["Clique: 'global' binding-set"] = "Clique: 'global' binding-set",
|
||||
["Clique: 'hovercast' binding-set"] = "Clique: 'hovercast' binding-set",
|
||||
["Clique: 'ooc' binding-set"] = "Clique: 'ooc' binding-set",
|
||||
["Compact party frames"] = "Compact party frames",
|
||||
["Compact raid frames"] = "Compact raid frames",
|
||||
["Configure binding: '%s'"] = "Configure binding: '%s'",
|
||||
["Ctrl"] = "Ctrl",
|
||||
["Current: "] = "Current: ",
|
||||
["Default"] = "Default",
|
||||
["Delete binding"] = "Delete binding",
|
||||
["Delete profile '%s'"] = "Delete profile '%s'",
|
||||
["Delete profile: %s"] = "Delete profile: %s",
|
||||
["Disable out of combat clicks when party members enter combat"] = "Disable out of combat clicks when party members enter combat",
|
||||
["Edit macro"] = "Edit macro",
|
||||
["Enable/Disable binding-sets"] = "Enable/Disable binding-sets",
|
||||
["Enemy"] = "Enemy",
|
||||
["Frame blacklist"] = "Frame blacklist",
|
||||
["Frame name"] = "Frame name",
|
||||
["Friend"] = "Friend",
|
||||
["Global bindings (no target)"] = "Global bindings (no target)",
|
||||
["Hovercast bindings (target required)"] = "Hovercast bindings (target required)",
|
||||
["In order to specify a binding, move your mouse over the button labelled 'Set binding' and either click with your mouse or press a key on your keyboard. You can modify the binding by holding down a combination of the alt, control and shift keys on your keyboard."] = "In order to specify a binding, move your mouse over the button labelled 'Set binding' and either click with your mouse or press a key on your keyboard. You can modify the binding by holding down a combination of the alt, control and shift keys on your keyboard.",
|
||||
["LAlt"] = "LAlt",
|
||||
["LCtrl"] = "LCtrl",
|
||||
["LShift"] = "LShift",
|
||||
["LeftButton"] = "LeftButton",
|
||||
["MiddleButton"] = "MiddleButton",
|
||||
["MousewheelDown"] = "MousewheelDown",
|
||||
["MousewheelUp"] = "MousewheelUp",
|
||||
["No binding set"] = "No binding set",
|
||||
["Open unit menu"] = "Open unit menu",
|
||||
["Options"] = "Options",
|
||||
["Out-of-combat only"] = "Out-of-combat only",
|
||||
["Party member frames"] = "Party member frames",
|
||||
["Player frame"] = "Player frame",
|
||||
["Player's focus frame"] = "Player's focus frame",
|
||||
["Player's pet frame"] = "Player's pet frame",
|
||||
["Player's target frame"] = "Player's target frame",
|
||||
["Profile Management:"] = "Profile Management:",
|
||||
["RAlt"] = "RAlt",
|
||||
["RCtrl"] = "RCtrl",
|
||||
["RShift"] = "RShift",
|
||||
["Remove spell rank"] = "Remove spell rank",
|
||||
["RightButton"] = "RightButton",
|
||||
["Run custom macro"] = "Run custom macro",
|
||||
["Run macro"] = "Run macro",
|
||||
["Run macro '%s'"] = "Run macro '%s'",
|
||||
["Save"] = "Save",
|
||||
["Select All"] = "Select All",
|
||||
["Select None"] = "Select None",
|
||||
["Select a binding type"] = "Select a binding type",
|
||||
["Select an options category"] = "Select an options category",
|
||||
["Select profile: %s"] = "Select profile: %s",
|
||||
["Set binding"] = "Set binding",
|
||||
["Set binding: %s"] = "Set binding: %s",
|
||||
["Shift"] = "Shift",
|
||||
["Show unit menu"] = "Show unit menu",
|
||||
["Specialization Slot "] = "Specialization Slot ",
|
||||
["Swap profiles based on talent spec"] = "Swap profiles based on talent spec",
|
||||
["Target clicked unit"] = "Target clicked unit",
|
||||
["Target of focus frame"] = "Target of focus frame",
|
||||
["Target of target frame"] = "Target of target frame",
|
||||
["These options control whether or not Clique automatically registers certain Blizzard-created frames for binding. Changes made to these settings will not take effect until the user interface is reloaded."] = "These options control whether or not Clique automatically registers certain Blizzard-created frames for binding. Changes made to these settings will not take effect until the user interface is reloaded.",
|
||||
["This binding is DISABLED"] = "This binding is DISABLED",
|
||||
["This binding is invalid, please delete"] = "This binding is invalid, please delete",
|
||||
["This panel allows you to blacklist certain frames from being included for Clique bindings. Any frames that are selected in this list will not be registered, although you may have to reload your user interface to have them return to their original bindings."] = "This panel allows you to blacklist certain frames from being included for Clique bindings. Any frames that are selected in this list will not be registered, although you may have to reload your user interface to have them return to their original bindings.",
|
||||
["Trigger bindings on the 'down' portion of the click (experimental)"] = "Trigger bindings on the 'down' portion of the click (experimental)",
|
||||
["Unknown"] = "Unknown",
|
||||
["Unknown binding type '%s'"] = "Unknown binding type '%s'",
|
||||
["When both the Clique binding configuration window and the spellbook are open, you can set new bindings simply by performing them on the spell icon in your spellbook. Simply move your mouse over a spell and then click or press a key on your keyboard along with any combination of the alt, control, and shift keys. The new binding will be added to your binding configuration."] = "When both the Clique binding configuration window and the spellbook are open, you can set new bindings simply by performing them on the spell icon in your spellbook. Simply move your mouse over a spell and then click or press a key on your keyboard along with any combination of the alt, control, and shift keys. The new binding will be added to your binding configuration.",
|
||||
["You are in Clique binding mode"] = "You are in Clique binding mode",
|
||||
["You can use this page to create a custom macro to be run when activating a binding on a unit. When creating this macro you should keep in mind that you will need to specify the target of any actions in the macro by using the 'mouseover' unit, which is the unit you are clicking on. For example, you can do any of the following:\n\n/cast [target=mouseover] Regrowth\n/cast [@mouseover] Regrowth\n/cast [@mouseovertarget] Taunt\n\nHover over the 'Set binding' button below and either click or press a key with any modifiers you would like included. Then edit the box below to contain the macro you would like to have run when this binding is activated."] = "You can use this page to create a custom macro to be run when activating a binding on a unit. When creating this macro you should keep in mind that you will need to specify the target of any actions in the macro by using the 'mouseover' unit, which is the unit you are clicking on. For example, you can do any of the following:\n\n/cast [target=mouseover] Regrowth\n/cast [@mouseover] Regrowth\n/cast [@mouseovertarget] Taunt\n\nHover over the 'Set binding' button below and either click or press a key with any modifiers you would like included. Then edit the box below to contain the macro you would like to have run when this binding is activated."
|
||||
}
|
||||
|
||||
addon:RegisterLocale('enUS', baseLocale)
|
||||
@@ -0,0 +1,109 @@
|
||||
-- by StingerSoft
|
||||
if (GetLocale() ~= 'ruRU') then return end
|
||||
|
||||
local _, addon = ...
|
||||
local baseLocale = {
|
||||
["A binding that belongs to the 'default' binding-set will always be active on your unit frames, unless you override it with another binding."] = "Назначения что относится к набору назначений 'по умолчанию' всегда будут активны на ваших рамках, пока вы не замените его другими назначениями.",
|
||||
["A binding that belongs to the 'enemy' binding-set will always be active when clicking on unit frames that display enemy units, i.e. those you can attack. If you click on a unit that you cannot attack, nothing will happen."] = "Назначения что относится к набору назначений 'враг' всегда будут активны при нажатии на рамку цели которую вы можете атаковать. Если вы кликните на цель которую не можете атаковать, ничего не произойдет.",
|
||||
["A binding that belongs to the 'frield' binding-set will only be active when clicking on unit frames that display friendly units, i.e. those you can heal and assist. If you click on a unit that you cannot heal or assist, nothing will happen."] = "Назначения что относится к набору назначений 'друг' всегда будут активны при нажатии на рамку цели которая отображает дружественных игроков которых вы можете помогать и исцелять их. Если вы кликните на цель которую не можете исцелить или помочь, ничего не произойдет.",
|
||||
["A binding that belongs to the 'global' binding-set is always active. If the spell requires a target, you will be given the 'casting hand', otherwise the spell will be cast. If the spell is an AOE spell, then you will be given the ground targeting circle."] = "Назначения что относится к набору назначений 'общие' всегда активна. Если заклинание требует цель, вам будет предоставлена 'рука применения', в противном случае заклинание будет наложено. Если заклинание является AOE заклинанием, то вам будет предоставлен круг наведения на цель.",
|
||||
["A binding that belongs to the 'hovercast' binding-set is active whenever the mouse is over a unit frame, or a character in the 3D world. This allows you to use 'hovercasting', where you hover over a unit in the world and press a key to cast a spell on them. These bindings are also active over unit frames."] = "Назначения что относится к набору назначений 'применения при наводе' будут активны при наведении курсора мыши на рамку игрока, или персонажа в 3D мире. Это позволяет использовать 'применения при наводе', где наведении мыши на игрока в мире, и нажатии клавиши для применения на них заклинания. Эти назначения также распространяются на рамки игроков.",
|
||||
["A binding that belongs to the 'ooc' binding-set will only be active when the player is out-of-combat. As soon as the player enters combat, these bindings will no longer be active, so be careful when choosing this binding-set for any spells you use frequently."] = "Назначения что относится к набору назначений 'внб' будут активны только когда игрок вне боя. Как только игрок войдет в бой, эти назначения больше не будут работоспособными, так что будьте осторожны при выборе этого набора назначений для любого часто используемого заклинания.",
|
||||
["Accept"] = "Принять",
|
||||
["Action"] = "Действие",
|
||||
["Add new profile"] = "Добавить новый профиль",
|
||||
["Alt"] = "Alt",
|
||||
["Arena enemy frames"] = "Рамки портретов на арене",
|
||||
["Bind other"] = "Назначить другое",
|
||||
["Bind spell"] = "Назначить заклинание",
|
||||
["Binding"] = "Назначение клавиш",
|
||||
["Blizzard frame integration options"] = "Опции интеграции рамок Blizzard",
|
||||
["Boss target frames"] = "Рамка портрета босса",
|
||||
["Cancel"] = "Отмена",
|
||||
["Cast %s"] = "Применение %s",
|
||||
["Change binding"] = "Сменить назначение",
|
||||
["Change binding: %s"] = "Сменить назначение: %s",
|
||||
["Clique Binding Configuration"] = "Конфигураци назначения Clique",
|
||||
["Clique binding configuration"] = "Конфигураци назначения Clique",
|
||||
["Clique general options"] = "Общие настройки Clique",
|
||||
["Current Profile: "] = "Текущий профиль: ",
|
||||
["(All specs)"] = "(Все специализации)",
|
||||
["(Spec "] = "(Спек ",
|
||||
["(Spec-specific)"] = "(Специфично для спека)",
|
||||
["Clique: 'default' binding-set"] = "Clique: набор назначений 'по умолчанию'",
|
||||
["Clique: 'enemy' binding-set"] = "Clique: набор назначений 'враг'",
|
||||
["Clique: 'friend' binding-set"] = "Clique: набор назначений 'друг'",
|
||||
["Clique: 'global' binding-set"] = "Clique: набор назначений 'общие'",
|
||||
["Clique: 'hovercast' binding-set"] = "Clique: набор назначений 'применения при наводе'",
|
||||
["Clique: 'ooc' binding-set"] = "Clique: набор назначений 'внб'",
|
||||
["Compact party frames"] = "Компактные рамки группы",
|
||||
["Compact raid frames"] = "Компактные рамки рейда",
|
||||
["Configure binding: '%s'"] = "Настройка назначения: '%s'",
|
||||
["Ctrl"] = "Ctrl",
|
||||
["Current: "] = "Текущее: ",
|
||||
["Default"] = "По умолчанию",
|
||||
["Delete binding"] = "Удалить назначение",
|
||||
["Delete profile '%s'"] = "Удалить профиль: '%s'",
|
||||
["Delete profile: %s"] = "Удалить профиль: %s",
|
||||
["Disable out of combat clicks when party members enter combat"] = "Отключить клики вне боя когда участники группы вступают в бой",
|
||||
["Edit macro"] = "Править макрос",
|
||||
["Enable/Disable click-sets"] = "Вкл/выкл наборы-кликов",
|
||||
["Enemy"] = "Враг",
|
||||
["Frame blacklist"] = "Черный список рамок",
|
||||
["Frame name"] = "Название рамки",
|
||||
["Friend"] = "Друг",
|
||||
["Global bindings (no target)"] = "Общие назначения (без цели)",
|
||||
["Hovercast bindings (target required)"] = "Назначения применения при наводе (требуется цель)", -- ?????
|
||||
["In order to specify a binding, move your mouse over the button labelled 'Set binding' and either click with your mouse or press a key on your keyboard. You can modify the binding by holding down a combination of the alt, control and shift keys on your keyboard."] = "Для того, чтобы указать назначение, наведите курсор мыши на кнопку 'Установка назначения' и нажмите клавишу мышки или клавишу на клавиатуре. Вы можете изменить назначение, удерживая сочетание клавиш Alt, Ctrl и Shift.",
|
||||
["LAlt"] = 'Л-Alt',
|
||||
["LCtrl"] = 'Л-Ctrl',
|
||||
["LShift"] = 'Л-Shift',
|
||||
["LeftButton"] = "ЛКМ",
|
||||
["MiddleButton"] = "СКМ",
|
||||
["MousewheelDown"] = "КМВ",
|
||||
["MousewheelUp"] = "КМВ",
|
||||
["No binding set"] = "Нет назначения клавиш",
|
||||
["Open unit menu"] = "Открыть меню объекта",
|
||||
["Options"] = "Настройки",
|
||||
["Out-of-combat only"] = "Только вне боя",
|
||||
["Party member frames"] = "Рамки портретов группы",
|
||||
["Player frame"] = "Рамки группы",
|
||||
["Player's focus frame"] = "Рамка фокуса игрока",
|
||||
["Player's pet frame"] = "Рамка питомца игрока",
|
||||
["Player's target frame"] = "Рамка цели игрока",
|
||||
["Profile Management:"] = "Управление профилями:",
|
||||
["RAlt"] = 'П-Alt',
|
||||
["RCtrl"] = 'П-Ctrl',
|
||||
["RShift"] = 'П-Shift',
|
||||
["RightButton"] = "ПКМ",
|
||||
["Run custom macro"] = "Запустить свой макрос",
|
||||
["Run macro"] = "Запустить макрос",
|
||||
["Run macro '%s'"] = "Запустить макрос '%s'",
|
||||
["Save"] = "Сохранить",
|
||||
["Select All"] = "Выбрать все",
|
||||
["Select None"] = "Отменить выбор",
|
||||
["Select a binding type"] = "Выбрать тип назначания",
|
||||
["Select an options category"] = "Выбор категории опций",
|
||||
["Select profile: %s"] = "Выберите профиль: %s",
|
||||
["Set binding"] = "Установка назначения",
|
||||
["Set binding: %s"] = "Установка назначения: %s",
|
||||
["Shift"] = "Shift",
|
||||
["Show unit menu"] = "Показать меню объекта",
|
||||
["Specialization Slot "] = "Слот специализации ",
|
||||
["Swap profiles based on talent spec"] = "Переключать профиль в зависимости от набора талантов",
|
||||
["Target clicked unit"] = "Цель нажатия",
|
||||
["Target of focus frame"] = "Рамка цели фокуса",
|
||||
["Target of target frame"] = "Рамка цели цели",
|
||||
["These options control whether or not Clique automatically registers certain Blizzard-created frames for binding. Changes made to these settings will not take effect until the user interface is reloaded."] = "Эти опции управляют автоматическим регистрированием Clique определенных создаваемых рамок Blizzard для назначения. Внесенные изменения в эти параметры вступят в силу только после перезагрузки пользовательского интерфейса.",
|
||||
["This binding is DISABLED"] = "Это назначение ОТКЛЮЧЕНО",
|
||||
["This binding is invalid, please delete"] = "Это назначение является недействительным, пожалуйста удалите",
|
||||
["This panel allows you to blacklist certain frames from being included for Clique bindings. Any frames that are selected in this list will not be registered, although you may have to reload your user interface to have them return to their original bindings."] = "Данная панель позволяет внести в черный список определенные рамки назначений Clique. Любые рамки, которые включены в этот список не будет регистрироваться. Для возврата их к своему первоначальному назначению, потребуется перезагрузить ваш пользовательский интерфейс.",
|
||||
["Trigger bindings on the 'down' portion of the click (requires reload)"] = "Триггер назначения на 'нижнюю' часть клика (требуется перезагрузка)", -- ??
|
||||
["Unknown"] = "Неизвестно",
|
||||
["Unknown binding type '%s'"] = "Неизвестный тип назначения '%s'",
|
||||
["When both the Clique binding configuration window and the spellbook are open, you can set new bindings simply by performing them on the spell icon in your spellbook. Simply move your mouse over a spell and then click or press a key on your keyboard along with any combination of the alt, control, and shift keys. The new binding will be added to your binding configuration."] = "Когда открыты оба окна, книга заклинаний и окно конфигурации назначений, вы можете установить новые назначения просто используя их на иконку заклинания в вашей книге заклинаний. Просто наведите курсор мыши на заклинания, а затем нажмите кнопку мышки или клавишу на клавиатуре вместе с любой комбинацией Alt, Ctrl и Shift. Новые назначения будет добавлен в вашу конфигурацию назначений.",
|
||||
["You are in Clique binding mode"] = "Вы находитесь в режиме назначения Clique",
|
||||
["You can use this page to create a custom macro to be run when activating a binding on a unit. When creating this macro you should keep in mind that you will need to specify the target of any actions in the macro by using the 'mouseover' unit, which is the unit you are clicking on. For example, you can do any of the following:\n\n/cast [target=mouseover] Regrowth\n/cast [@mouseover] Regrowth\n/cast [@mouseovertarget] Taunt\n\nHover over the 'Set binding' button below and either click or press a key with any modifiers you would like included. Then edit the box below to contain the macro you would like to have run when this binding is activated."] = "Вы можете использовать эту страницу для создания пользовательских макросов для запуска при нажатии назначение на объекте. При создании этого макроса Вы должны учесть, что вам будет необходимо указать цель любого действия в макросе, используя 'mouseover', на какую цель вы нажимаете. Например, вы можете сделать любой из следующих:\n\n/cast [target=mouseover] Восстановление\n/cast [@mouseover] Восстановление\n/cast [@mouseovertarget] Провокацияn\nНаведите курсор мышки на кнопку ниже 'Установка назначения' и нажате кнопку мышки или клавишу с любым модификаторов. Затем отредактируйте поле ниже, для добавления макроса, который вы хотите запускать при применении этого назначения."
|
||||
}
|
||||
|
||||
addon:RegisterLocale('ruRU', baseLocale)
|
||||
@@ -0,0 +1,105 @@
|
||||
-- by yaroot (yaroot#gmail.com)
|
||||
if (GetLocale() ~= 'zhCN') then return end
|
||||
|
||||
local _, addon = ...
|
||||
local baseLocale = {
|
||||
["A binding that belongs to the 'default' binding-set will always be active on your unit frames, unless you override it with another binding."] = "默认组别, 设置将对所有框体有效, 除非有其他组别的相同的按键设置",
|
||||
["A binding that belongs to the 'enemy' binding-set will always be active when clicking on unit frames that display enemy units, i.e. those you can attack. If you click on a unit that you cannot attack, nothing will happen."] = "敌对组别, 设置只对敌对的框体有效, 当你对敌对的框体点击施法时, 这个设置将被触发.",
|
||||
["A binding that belongs to the 'frield' binding-set will only be active when clicking on unit frames that display friendly units, i.e. those you can heal and assist. If you click on a unit that you cannot heal or assist, nothing will happen."] = "友善组别, 该组别设置只对友善的框体有效, 当你对友善的框体点击施法时, 该设置将被触发.",
|
||||
["A binding that belongs to the 'hovercast' binding-set is active whenever the mouse is over a unit frame, or a character in the 3D world. This allows you to use 'hovercasting', where you hover over a unit in the world and press a key to cast a spell on them. These bindings are also active over unit frames."] = "全局组别, 该组别按键设置为悬浮式施法, 将鼠标移动到其他玩家/怪物或者头像框体上将可以直接对其施法.",
|
||||
["A binding that belongs to the 'ooc' binding-set will only be active when the player is out-of-combat. As soon as the player enters combat, these bindings will no longer be active, so be careful when choosing this binding-set for any spells you use frequently."] = "非战斗组别, 这个组别的设置只在不战斗时有效.",
|
||||
["Accept"] = "接受",
|
||||
["Action"] = "动作",
|
||||
["Add new profile"] = "添加新配置",
|
||||
["Alt"] = "Alt",
|
||||
["Arena enemy frames"] = "竞技场敌对框体",
|
||||
["Bind other"] = "绑定其他",
|
||||
["Bind spell"] = "绑定技能",
|
||||
["Binding"] = "绑定",
|
||||
["Boss target frames"] = "首领目标框体",
|
||||
["Cancel"] = "取消",
|
||||
["Cast %s"] = "施放 %s",
|
||||
["Change binding"] = "修改绑定",
|
||||
["Change binding: %s"] = "修改绑定: %s",
|
||||
["Clique Binding Configuration"] = "Clique 设置",
|
||||
["Clique binding configuration"] = "Clique 设置",
|
||||
["Current Profile: "] = "当前配置: ",
|
||||
["(All specs)"] = "(所有专精)",
|
||||
["(Spec "] = "(专精 ",
|
||||
["(Spec-specific)"] = "(专精特定)",
|
||||
["Clique: 'default' binding-set"] = "组别: 默认",
|
||||
["Clique: 'enemy' binding-set"] = "组别: 敌对",
|
||||
["Clique: 'friend' binding-set"] = "组别: 友善",
|
||||
["Clique: 'global' binding-set"] = "组别: 全局",
|
||||
["Clique: 'hovercast' binding-set"] = "组别: 悬浮施法",
|
||||
["Clique: 'ooc' binding-set"] = "组别: 非战斗",
|
||||
|
||||
["Compact party frames"] = "小队框体",
|
||||
["Compact raid frames"] = "团队框体",
|
||||
["Configure binding: '%s'"] = "设置绑定: '%s'",
|
||||
["Ctrl"] = "Ctrl",
|
||||
["Current: "] = "当前: ",
|
||||
["Default"] = "默认",
|
||||
["Delete binding"] = "删除绑定",
|
||||
["Delete profile '%s'"] = "删除配置: '%s'",
|
||||
["Delete profile: %s"] = "Delete profile: %s",
|
||||
["Disable out of combat clicks when party members enter combat"] = "当队友进入战斗时禁用 '非战斗' 组别的快捷键",
|
||||
["Edit macro"] = "编辑宏",
|
||||
["Enable/Disable click-sets"] = "设置组别...",
|
||||
["Enemy"] = "敌对",
|
||||
["Frame name"] = "框体名",
|
||||
["Friend"] = "友善",
|
||||
["Global bindings (no target)"] = "全局按键 (无目标)",
|
||||
["Hovercast bindings (target required)"] = "悬浮按键 (需要目标)",
|
||||
["In order to specify a binding, move your mouse over the button labelled 'Set binding' and either click with your mouse or press a key on your keyboard. You can modify the binding by holding down a combination of the alt, control and shift keys on your keyboard."] = "设置绑定先要将鼠标移动到 '设置绑定' 按钮上, 然后点击需要设置的快捷键. 你可以使用crtl/shift/alt之类的组合键.",
|
||||
["LAlt"] = '左Alt',
|
||||
["LCtrl"] = '左Ctrl',
|
||||
["LShift"] = '左Shift',
|
||||
["LeftButton"] = "左键点击",
|
||||
["MiddleButton"] = "中间点击",
|
||||
["MousewheelDown"] = "滚轮向下滚动",
|
||||
["MousewheelUp"] = "滚轮向上滚动",
|
||||
["No binding set"] = "无组别",
|
||||
["Open unit menu"] = "打开右键菜单",
|
||||
["Options"] = "设置",
|
||||
["Out-of-combat only"] = "非战斗",
|
||||
["Party member frames"] = "小队框体",
|
||||
["Player frame"] = "玩家头像",
|
||||
["Player's focus frame"] = "焦点头像",
|
||||
["Player's pet frame"] = "宠物头像",
|
||||
["Player's target frame"] = "目标头像",
|
||||
["Profile Management:"] = "配置管理",
|
||||
["RAlt"] = '右Alt',
|
||||
["RCtrl"] = '右Ctrl',
|
||||
["RShift"] = '右Shift',
|
||||
["RightButton"] = "右键点击",
|
||||
["Run custom macro"] = "运行自定义宏",
|
||||
["Run macro"] = "运行宏",
|
||||
["Run macro '%s'"] = "运行宏 '%s'",
|
||||
["Save"] = "保存",
|
||||
["Select All"] = "选择所有",
|
||||
["Select None"] = "清除所有选择",
|
||||
["Select a binding type"] = "选择绑定类型",
|
||||
["Select profile: %s"] = "选择配置: %s",
|
||||
["Set binding"] = "设置绑定",
|
||||
["Set binding: %s"] = "设置绑定: %s",
|
||||
["Shift"] = true,
|
||||
["Show unit menu"] = "打开右键菜单",
|
||||
["Specialization Slot "] = "天赋栏 ",
|
||||
["Swap profiles based on talent spec"] = "随天赋切换配置",
|
||||
["Target clicked unit"] = "选中点击单位",
|
||||
["Target of focus frame"] = "焦点的目标",
|
||||
["Target of target frame"] = "目标的目标",
|
||||
["These options control whether or not Clique automatically registers certain Blizzard-created frames for binding. Changes made to these settings will not take effect until the user interface is reloaded."] = "这些设置将决定 Clique 是否将原始界面的框体注册按键绑定. 修改该设置将只在重载界面后有效.",
|
||||
["This binding is DISABLED"] = "此项设置已被 >禁用<",
|
||||
["This binding is invalid, please delete"] = "非法设置, 请删除",
|
||||
["This panel allows you to blacklist certain frames from being included for Clique bindings. Any frames that are selected in this list will not be registered, although you may have to reload your user interface to have them return to their original bindings."] = "在这页设置里, 你可以勾选框体以将其加入黑名单来防止 Clique 设置其点击施法. 任何你选中的框体都不会被 Clique 注册, 该页设置改动将在重载后生效.",
|
||||
["Trigger bindings on the 'down' portion of the click (requires reload)"] = "在'按下'按键时触发(需要重载)",
|
||||
["Unknown"] = "未知",
|
||||
["Unknown binding type '%s'"] = "未知绑定类型 '%s'",
|
||||
["When both the Clique binding configuration window and the spellbook are open, you can set new bindings simply by performing them on the spell icon in your spellbook. Simply move your mouse over a spell and then click or press a key on your keyboard along with any combination of the alt, control, and shift keys. The new binding will be added to your binding configuration."] = "当 Clique 设置界面 和 法术书 同时打开时, 你只要用需要设置的快捷键点击法术就可以将其添加到 Clique 设置中. 将鼠标移动到法术图标上, 同时可以按下 ctrl, alt 和 shift 中的一个或多个, 然后点击鼠标的某一个按键, 这项设置就会被添加.",
|
||||
["You are in Clique binding mode"] = "你现在处于 Clique 设置模式中",
|
||||
["You can use this page to create a custom macro to be run when activating a binding on a unit. When creating this macro you should keep in mind that you will need to specify the target of any actions in the macro by using the 'mouseover' unit, which is the unit you are clicking on. For example, you can do any of the following:\n\n/cast [target=mouseover] Regrowth\n/cast [@mouseover] Regrowth\n/cast [@mouseovertarget] Taunt\n\nHover over the 'Set binding' button below and either click or press a key with any modifiers you would like included. Then edit the box below to contain the macro you would like to have run when this binding is activated."] = "你可以在这页创建一个用于点击施放的自定义宏. 撰写宏时需要注意, 你必须将施法动作的目标指定为 'mouseover'. 例如, 你可以使用以下内容:\n\n/cast [target=mouseover] 愈合\n/cast [@mouseovertarget] 嘲讽\n\n将鼠标移动到 设置绑定 按钮上然后按下鼠标和ctrl/alt/shift键来创建绑定. 然后撰写你需要运行的宏"
|
||||
}
|
||||
|
||||
addon:RegisterLocale('zhCN', baseLocale)
|
||||
@@ -0,0 +1,106 @@
|
||||
-- by yaroot (yaroot#gmail.com)
|
||||
|
||||
if(GetLocale() ~= 'zhTW') then return end
|
||||
|
||||
local _, addon = ...
|
||||
local baseLocale = {
|
||||
["A binding that belongs to the 'default' binding-set will always be active on your unit frames, unless you override it with another binding."] = "默認組別, 設置將對所有框體有效, 除非有其他組別的相同的按鍵設置",
|
||||
["A binding that belongs to the 'enemy' binding-set will always be active when clicking on unit frames that display enemy units, ie those you can attack. If you click on a unit that you cannot attack, nothing will happen." ] = "敵對組別, 設置只對敵對的框體有效, 當你對敵對的框體點擊施法時, 這個設置將被觸發.",
|
||||
["A binding that belongs to the 'frield' binding-set will only be active when clicking on unit frames that display friendly units, ie those you can heal and assist. If you click on a unit that you cannot heal or assist, nothing will happen."] = "友善組別, 該組別設置只對友善的框體有效, 當你對友善的框體點擊施法時, 該設置將被觸發.",
|
||||
["A binding that belongs to the 'hovercast' binding-set is active whenever the mouse is over a unit frame, or a character in the 3D world. This allows you to use 'hovercasting', where you hover over a unit in the world and press a key to cast a spell on them. These bindings are also active over unit frames."] = "全局組別, 該組別按鍵設置為懸浮式施法, 將鼠標移動到其他玩家/怪物或者頭像框體上將可以直接對其施法.",
|
||||
["A binding that belongs to the 'ooc' binding-set will only be active when the player is out-of-combat. As soon as the player enters combat, these bindings will no longer be active, so be careful when choosing this binding-set for any spells you use frequently."] = "非戰鬥組別, 這個組別的設置只在不戰鬥時有效.",
|
||||
["Accept"] = "接受",
|
||||
["Action"] = "動作",
|
||||
["Add new profile"] = "添加新配置",
|
||||
["Alt"] = "Alt",
|
||||
["Arena enemy frames"] = "競技場敵對框體",
|
||||
["Bind other"] = "綁定其他",
|
||||
["Bind spell"] = "綁定技能",
|
||||
["Binding"] = "綁定",
|
||||
["Boss target frames"] = "首領目標框體",
|
||||
["Cancel"] = "取消",
|
||||
["Cast %s"] = "施放 %s",
|
||||
["Change binding"] = "修改綁定",
|
||||
["Change binding: %s"] = "修改綁定: %s",
|
||||
["Clique Binding Configuration"] = "Clique 設置",
|
||||
["Clique binding configuration"] = "Clique 設置",
|
||||
["Current Profile: "] = "當前配置: ",
|
||||
["(All specs)"] = "(所有專精)",
|
||||
["(Spec "] = "(專精 ",
|
||||
["(Spec-specific)"] = "(專精特定)",
|
||||
["Clique: 'default' binding-set"] = "組別: 默認",
|
||||
["Clique: 'enemy' binding-set"] = "組別: 敵對",
|
||||
["Clique: 'friend' binding-set"] = "組別: 友善",
|
||||
["Clique: 'global' binding-set"] = "組別: 全局",
|
||||
["Clique: 'hovercast' binding-set"] = "組別: 懸浮施法",
|
||||
["Clique: 'ooc' binding-set"] = "組別: 非戰鬥",
|
||||
|
||||
["Compact party frames"] = "小隊框體",
|
||||
["Compact raid frames"] = "團隊框體",
|
||||
["Configure binding: '%s'"] = "設置綁定: '%s'",
|
||||
["Ctrl"] = "Ctrl",
|
||||
["Current: "] = "當前: ",
|
||||
["Default"] = "默認",
|
||||
["Delete binding"] = "刪除綁定",
|
||||
["Delete profile '%s'"] = "刪除配置: '%s'",
|
||||
["Delete profile: %s"] = "Delete profile: %s",
|
||||
["Disable out of combat clicks when party members enter combat"] = "當隊友進入戰鬥時禁用'非戰鬥' 組別的快捷鍵",
|
||||
["Edit macro"] = "編輯宏",
|
||||
["Enable/Disable click-sets"] = "設置組別...",
|
||||
["Enemy"] = "敵對",
|
||||
["Frame name"] = "框體名",
|
||||
["Friend"] = "友善",
|
||||
["Global bindings (no target)"] = "全局按鍵(無目標)",
|
||||
["Hovercast bindings (target required)"] = "懸浮按鍵(需要目標)",
|
||||
["In order to specify a binding, move your mouse over the button labelled 'Set binding' and either click with your mouse or press a key on your keyboard. You can modify the binding by holding down a combination of the alt, control and shift keys on your keyboard."] = "設置綁定先要將鼠標移動到'設置綁定' 按鈕上, 然後點擊需要設置的快捷鍵. 你可以使用crtl/shift/alt之類的組合鍵." ,
|
||||
["LAlt"] = '左Alt',
|
||||
["LCtrl"] = '左Ctrl',
|
||||
["LShift"] = '左Shift',
|
||||
["LeftButton"] = "左鍵點擊",
|
||||
["MiddleButton"] = "中間點擊",
|
||||
["MousewheelDown"] = "滾輪向下滾動",
|
||||
["MousewheelUp"] = "滾輪向上滾動",
|
||||
["No binding set"] = "無組別",
|
||||
["Open unit menu"] = "打開右鍵菜單",
|
||||
["Options"] = "設置",
|
||||
["Out-of-combat only"] = "非戰鬥",
|
||||
["Party member frames"] = "小隊框體",
|
||||
["Player frame"] = "玩家頭像",
|
||||
["Player's focus frame"] = "焦點頭像",
|
||||
["Player's pet frame"] = "寵物頭像",
|
||||
["Player's target frame"] = "目標頭像",
|
||||
["Profile Management:"] = "配置管理",
|
||||
["RAlt"] = '右Alt',
|
||||
["RCtrl"] = '右Ctrl',
|
||||
["RShift"] = '右Shift',
|
||||
["RightButton"] = "右鍵點擊",
|
||||
["Run custom macro"] = "運行自定義宏",
|
||||
["Run macro"] = "運行宏",
|
||||
["Run macro '%s'"] = "運行宏 '%s'",
|
||||
["Save"] = "保存",
|
||||
["Select All"] = "選擇所有",
|
||||
["Select None"] = "清除所有選擇",
|
||||
["Select a binding type"] = "選擇綁定類型",
|
||||
["Select profile: %s"] = "選擇配置: %s",
|
||||
["Set binding"] = "設置綁定",
|
||||
["Set binding: %s"] = "設置綁定: %s",
|
||||
["Shift"] = true,
|
||||
["Show unit menu"] = "打開右鍵菜單",
|
||||
["Specialization Slot "] = "天賦欄 ",
|
||||
["Swap profiles based on talent spec"] = "隨天賦切換配置",
|
||||
["Target clicked unit"] = "選中點擊單位",
|
||||
["Target of focus frame"] = "焦點的目標",
|
||||
["Target of target frame"] = "目標的目標",
|
||||
["These options control whether or not Clique automatically registers certain Blizzard-created frames for binding. Changes made to these settings will not take effect until the user interface is reloaded."] = "這些設置將決定Clique 是否將原始界面的框體註冊按鍵綁定. 修改該設置將只在重載界面後有效.",
|
||||
["This binding is DISABLED"] = "此項設置已被>禁用<",
|
||||
["This binding is invalid, please delete"] = "非法設置, 請刪除",
|
||||
["This panel allows you to blacklist certain frames from being included for Clique bindings. Any frames that are selected in this list will not be registered, although you may have to reload your user interface to have them return to their original bindings."] = "在這頁設置裡, 你可以勾選框體以將其加入黑名單來防止Clique 設置其點擊施法. 任何你選中的框體都不會被Clique 註冊, 該頁設置改動將在重載後生效.",
|
||||
["Trigger bindings on the 'down' portion of the click (requires reload)"] = "在'按下'按鍵時觸發(需要重載)",
|
||||
["Unknown"] = "未知",
|
||||
["Unknown binding type '%s'"] = "未知綁定類型'%s'",
|
||||
["When both the Clique binding configuration window and the spellbook are open, you can set new bindings simply by performing them on the spell icon in your spellbook. Simply move your mouse over a spell and then click or press a key on your keyboard along with any combination of the alt, control, and shift keys. The new binding will be added to your binding configuration."] = "當Clique 設置界面和法術書同時打開時, 你只要用需要設置的快捷鍵點擊法術就可以將其添加到Clique 設置中. 將鼠標移動到法術圖標上, 同時可以按下ctrl, alt 和shift 中的一個或多個, 然後點擊鼠標的某一個按鍵, 這項設置就會被添加." ,
|
||||
["You are in Clique binding mode"] = "你現在處於Clique 設置模式中",
|
||||
["You can use this page to create a custom macro to be run when activating a binding on a unit. When creating this macro you should keep in mind that you will need to specify the target of any actions in the macro by using the ' mouseover' unit, which is the unit you are clicking on. For example, you can do any of the following:\n\n/cast [target=mouseover] Regrowth\n/cast [@mouseover] Regrowth\n/cast [ @mouseovertarget] Taunt\n\nHover over the 'Set binding' button below and either click or press a key with any modifiers you would like included. Then edit the box below to contain the macro you would like to have run when this binding is activated."] = "你可以在這頁創建一個用於點擊施放的自定義宏. 撰寫宏時需要注意, 你必須將施法動作的目標指定為'mouseover'. 例如, 你可以使用以下內容:\ n\n/cast [target=mouseover] 癒合\n/cast [@mouseovertarget] 嘲諷\n\n將鼠標移動到設置綁定按鈕上然後按下鼠標和ctrl/alt/shift鍵來創建綁定. 然後撰寫你需要運行的宏",
|
||||
}
|
||||
|
||||
addon:RegisterLocale('zhTW', baseLocale)
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,45 @@
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- BlizzardFrames.lua
|
||||
--
|
||||
-- This file contains the definitions of the blizzard frame integration
|
||||
-- options. These settings will not apply until the user interface is
|
||||
-- reloaded.
|
||||
--
|
||||
-- Events registered:
|
||||
-- * ADDON_LOADED - To watch for loading of the ArenaUI
|
||||
-------------------------------------------------------------------------]] --
|
||||
local addonName, addon = ...
|
||||
local L = addon.L
|
||||
|
||||
-- Register a Blizzard frame for click-casting, with some additional protection
|
||||
function addon:RegisterBlizzardFrame(frame)
|
||||
-- Stash the frame in case we later convert it
|
||||
local frameName = frame
|
||||
|
||||
-- Convert a frame name to the global object
|
||||
if type(frame) == "string" then
|
||||
frameName = frame
|
||||
frame = _G[frameName]
|
||||
if not frame then
|
||||
addon:Printf("Error registering frame: %s", tostring(frameName))
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
if not frame then
|
||||
addon:Printf("Unable to register empty frame: %s", tostring(frameName))
|
||||
return
|
||||
end
|
||||
|
||||
-- Never allow forbidden frames, we can't do anything with those!
|
||||
local forbidden = frame.IsForbidden and frame:IsForbidden()
|
||||
if forbidden then return end
|
||||
|
||||
local buttonish = frame and frame.RegisterForClicks
|
||||
local protected = frame.IsProtected and frame:IsProtected()
|
||||
local anchorRestricted = frame.IsAnchoringRestricted and frame:IsAnchoringRestricted()
|
||||
|
||||
-- A frame must be a button, and must be protected, and must not be a nameplate, anchor restricted
|
||||
local valid = buttonish and protected and (not anchorRestricted)
|
||||
if valid then addon:RegisterFrame(frame) end
|
||||
end
|
||||
@@ -0,0 +1,77 @@
|
||||
--[[-------------------------------------------------------------------------
|
||||
-- Blizzard_wrath.lua
|
||||
--
|
||||
-- This file contains the definitions of the blizzard frame integration
|
||||
-- options. These settings will not apply until the user interface is
|
||||
-- reloaded.
|
||||
--
|
||||
-- Events registered:
|
||||
-- * ADDON_LOADED - To watch for loading of the ArenaUI
|
||||
-------------------------------------------------------------------------]] --
|
||||
local addonName, addon = ...
|
||||
local L = addon.L
|
||||
|
||||
-- addon:Printf("Loading Blizzard_wrath integration")
|
||||
|
||||
local waitForAddon
|
||||
|
||||
function addon:IntegrateBlizzardFrames()
|
||||
self:Wrath_BlizzSelfFrames()
|
||||
self:Wrath_BlizzPartyFrames()
|
||||
self:Wrath_BlizzBossFrames()
|
||||
|
||||
-- Check for both standard CompactRaidFrame and Ascension version
|
||||
if IsAddOnLoaded("CompactRaidFrame") or IsAddOnLoaded("Ascension_CompactRaidFrames") then
|
||||
self:Wrath_BlizzCompactUnitFrames()
|
||||
else
|
||||
waitForAddon = CreateFrame("Frame")
|
||||
waitForAddon["CompactRaidFrame"] = "Wrath_BlizzCompactUnitFrames"
|
||||
waitForAddon["Ascension_CompactRaidFrames"] = "Wrath_BlizzCompactUnitFrames"
|
||||
end
|
||||
|
||||
if waitForAddon then
|
||||
waitForAddon:RegisterEvent("ADDON_LOADED")
|
||||
waitForAddon:SetScript("OnEvent", function(frame, event, ...) if waitForAddon[...] then self[waitForAddon[...]](self) end end)
|
||||
|
||||
if not next(waitForAddon) then
|
||||
waitForAddon:UnregisterEvent("ADDON_LOADED")
|
||||
waitForAddon:SetScript("OnEvent", nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function addon:Wrath_BlizzCompactUnitFrames()
|
||||
if not addon.settings.blizzframes.compactraid then return end
|
||||
|
||||
-- For standard CompactRaidFrame addon
|
||||
if CompactUnitFrame_SetUpFrame then hooksecurefunc("CompactUnitFrame_SetUpFrame", function(frame, ...) addon:RegisterBlizzardFrame(frame) end) end
|
||||
|
||||
-- For Ascension CompactRaidFrames addon
|
||||
if CompactUnitMixin then hooksecurefunc(CompactUnitMixin, "SetUpFrame", function(frame, ...) addon:RegisterBlizzardFrame(frame) end) end
|
||||
end
|
||||
|
||||
function addon:Wrath_BlizzSelfFrames()
|
||||
local frames = {"PlayerFrame", "PetFrame", "TargetFrame", "TargetFrameToT"}
|
||||
|
||||
-- Add focus frames for Wrath
|
||||
table.insert(frames, "FocusFrame")
|
||||
table.insert(frames, "FocusFrameToT")
|
||||
|
||||
for idx, frame in ipairs(frames) do if addon.settings.blizzframes[frame] then addon:RegisterBlizzardFrame(frame) end end
|
||||
end
|
||||
|
||||
function addon:Wrath_BlizzPartyFrames()
|
||||
if not addon.settings.blizzframes.party then return end
|
||||
|
||||
local frames = {"PartyMemberFrame1", "PartyMemberFrame2", "PartyMemberFrame3", "PartyMemberFrame4", -- "PartyMemberFrame5",
|
||||
"PartyMemberFrame1PetFrame", "PartyMemberFrame2PetFrame", "PartyMemberFrame3PetFrame", "PartyMemberFrame4PetFrame" -- "PartyMemberFrame5PetFrame",
|
||||
}
|
||||
for idx, frame in ipairs(frames) do addon:RegisterBlizzardFrame(frame) end
|
||||
end
|
||||
|
||||
function addon:Wrath_BlizzBossFrames()
|
||||
if not addon.settings.blizzframes.boss then return end
|
||||
|
||||
local frames = {"Boss1TargetFrame", "Boss2TargetFrame", "Boss3TargetFrame", "Boss4TargetFrame"}
|
||||
for idx, frame in ipairs(frames) do addon:RegisterBlizzardFrame(frame) end
|
||||
end
|
||||
Reference in New Issue
Block a user