You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
3.3 KiB

if not WeakAuras.IsCorrectVersion() then return end
local AddonName, OptionsPrivate = ...
-- Lua APIs
local pairs = pairs
-- WoW APIs
local CreateFrame = CreateFrame
local AceGUI = LibStub("AceGUI-3.0")
local SharedMedia = LibStub("LibSharedMedia-3.0")
local IndentationLib = IndentationLib
local WeakAuras = WeakAuras
local L = WeakAuras.L
local codeReview
local tableColor = "|c00ff3333"
local arithmeticColor = "|c00ff3333"
local relationColor = "|c00ff3333"
local logicColor = "|c004444ff"
local colorScheme = {
[IndentationLib.tokens.TOKEN_SPECIAL] = "|c00ff3333",
[IndentationLib.tokens.TOKEN_KEYWORD] = "|c004444ff",
[IndentationLib.tokens.TOKEN_COMMENT_SHORT] = "|c0000aa00",
[IndentationLib.tokens.TOKEN_COMMENT_LONG] = "|c0000aa00",
[IndentationLib.tokens.TOKEN_NUMBER] = "|c00ff9900",
[IndentationLib.tokens.TOKEN_STRING] = "|c00999999",
-- ellipsis, curly braces, table access
["..."] = tableColor,
["{"] = tableColor,
["}"] = tableColor,
["["] = tableColor,
["]"] = tableColor,
-- arithmetic operators
["+"] = arithmeticColor,
["-"] = arithmeticColor,
["/"] = arithmeticColor,
["*"] = arithmeticColor,
[".."] = arithmeticColor,
-- relational operators
["=="] = relationColor,
["<"] = relationColor,
["<="] = relationColor,
[">"] = relationColor,
[">="] = relationColor,
["~="] = relationColor,
-- logical operators
["and"] = logicColor,
["or"] = logicColor,
["not"] = logicColor,
-- misc
[0] = "|r",
}
local function ConstructCodeReview(frame)
local group = AceGUI:Create("InlineGroup");
group.frame:SetParent(frame);
group.frame:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -17, 30);
group.frame:SetPoint("TOPLEFT", frame, "TOPLEFT", 17, -10);
group.frame:Hide();
group:SetLayout("flow");
local codeTree = AceGUI:Create("TreeGroup");
group.codeTree = codeTree;
group:SetLayout("fill");
group:AddChild(codeTree);
local codebox = AceGUI:Create("MultiLineEditBox");
codebox.frame:SetAllPoints(codeTree.content);
codebox.frame:SetFrameStrata("FULLSCREEN");
codebox:SetLabel("");
group:AddChild(codebox);
codebox.button:Hide();
IndentationLib.enable(codebox.editBox, colorScheme, 4);
local fontPath = SharedMedia:Fetch("font", "Fira Mono Medium");
if(fontPath) then
codebox.editBox:SetFont(fontPath, 12);
end
group.codebox = codebox;
codeTree:SetCallback("OnGroupSelected", function(self, event, value)
for _, v in pairs(group.data) do
if (v.value == value) then
codebox:SetText(v.code);
end
end
end);
local cancel = CreateFrame("Button", nil, group.frame, "UIPanelButtonTemplate");
cancel:SetScript("OnClick", function() group:Close() end);
cancel:SetPoint("bottomright", frame, "bottomright", -27, 11);
cancel:SetHeight(20);
cancel:SetWidth(100);
cancel:SetText(L["Okay"]);
function group.Open(self, data)
if frame.window == "codereview" then
return
end
local _, firstEntry = next(data)
self.data = data;
self.codeTree:SetTree(data);
self.codeTree:SelectByValue(firstEntry.value)
WeakAuras.ShowOptions();
frame.window = "codereview";
frame:UpdateFrameVisible()
end
function group.Close()
frame.window = "default";
frame:UpdateFrameVisible()
end
return group
end
function OptionsPrivate.CodeReview(frame)
codeReview = codeReview or ConstructCodeReview(frame)
return codeReview
end