vanilla-wow-addons – Rev 1
?pathlinks?
-----------------------------------------------------------------------------------------
-- Nurfed Options Menu
-----------------------------------------------------------------------------------------
local utility = Nurfed_Utility:New();
local framelib = Nurfed_Frames:New();
local menus = {};
local activemenu = nil;
StaticPopupDialogs["NRF_RELOADUI"] = {
text = "Reload User Interface?",
button1 = TEXT(ACCEPT),
button2 = TEXT(CANCEL),
OnAccept = function()
ReloadUI();
end,
timeout = 10,
whileDead = 1,
hideOnEscape = 1,
};
local templates = {
nrf_menu_button = {
type = "Button",
size = { 80, 14 },
TextFontObject = "GameFontNormalSmall",
TextColor = { 0.5, 0.5, 0.5 },
HighlightTextColor = { 1, 1, 1 },
DisabledTextColor = { 1, 1, 1 },
PushedTextOffset = { 1, -1 },
children = {
NormalTexture = {
type = "Texture",
layer = "BACKGROUND",
Anchor = "all",
Texture = NRF_IMG.."statusbar8",
Gradient = { "VERTICAL", 1, 0.5, 0, 0.2, 0, 0 },
},
DisabledTexture = {
type = "Texture",
layer = "BACKGROUND",
Anchor = "all",
Texture = NRF_IMG.."statusbar8",
Gradient = { "VERTICAL", 0, 0.75, 1, 0, 0, 0.2 },
},
},
},
nrf_options = {
type = "Frame",
size = { 411, 271 },
Anchor = { "TOPRIGHT", "$parentheader", "BOTTOMRIGHT", 1, 0 },
Backdrop = { bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 8, insets = { left = 2, right = 2, top = 2, bottom = 2 }, },
BackdropColor = { 0, 0, 0, 0.95 },
Alpha = 0,
Hide = true,
},
nrf_addon_row = {
type = "Frame",
size = { 400, 14 },
children = {
check = {
type = "CheckButton",
size = { 16, 16 },
uitemp = "UICheckButtonTemplate",
Anchor = { "BOTTOMLEFT", "$parent", "BOTTOMLEFT", 2, 0 },
OnClick = function() Nurfed_ToggleAddOn() end,
},
name = {
type = "FontString",
layer = "ARTWORK",
size = { 190, 14 },
Anchor = { "LEFT", "$parentcheck", "RIGHT", 5, 0 },
FontObject = "GameFontNormal",
JustifyH = "LEFT",
TextColor = { 1, 1, 1 },
},
loaded = {
type = "FontString",
layer = "ARTWORK",
size = { 105, 14 },
Anchor = { "LEFT", "$parentname", "RIGHT", 5, 0 },
FontObject = "GameFontNormal",
JustifyH = "LEFT",
TextColor = { 1, 1, 1 },
},
reload = {
type = "FontString",
layer = "ARTWORK",
size = { 100, 14 },
Anchor = { "LEFT", "$parentloaded", "RIGHT", 5, 0 },
FontObject = "GameFontNormal",
JustifyH = "LEFT",
TextColor = { 1, 0, 0 },
},
},
},
nrf_button = {
type = "Button",
size = { 30, 18 },
Backdrop = { bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 8, insets = { left = 2, right = 2, top = 2, bottom = 2 }, },
BackdropColor = { 0, 0, 0, 0.75 },
Font = { "Fonts\\ARIALN.TTF", 10, "NONE" },
TextColor = { 0.65, 0.65, 0.65 },
HighlightTextColor = { 1, 1, 1 },
PushedTextOffset = { 1, -1 },
OnShow = function() Nurfed_Options_buttonOnShow() end,
},
nrf_check = {
type = "CheckButton",
size = { 20, 20 },
uitemp = "UICheckButtonTemplate",
OnShow = function() Nurfed_Options_OnShow() end,
OnClick = function() Nurfed_Options_checkOnClick() end,
},
nrf_smallcheck = {
type = "CheckButton",
size = { 16, 16 },
uitemp = "UICheckButtonTemplate",
OnShow = function() Nurfed_Options_OnShow() end,
OnClick = function() Nurfed_Options_checkOnClick() end,
},
nrf_radio = {
type = "CheckButton",
size = { 14, 14 },
uitemp = "UIRadioButtonTemplate",
OnShow = function() Nurfed_Options_OnShow() end,
OnClick = function() Nurfed_Options_radioOnClick() end,
},
nrf_slider = {
type = "Slider",
uitemp = "OptionsSliderTemplate",
children = {
value = {
type = "FontString",
layer = "ARTWORK",
FontObject = "GameFontNormalSmall",
JustifyH = "CENTER",
TextColor = { 0, 1, 0 },
},
},
OnShow = function() Nurfed_Options_OnShow() end,
OnMouseUp = function() Nurfed_Options_sliderOnMouseUp() end,
OnValueChanged = function() Nurfed_Options_sliderOnValueChanged() end,
},
nrf_editbox = {
type = "EditBox",
AutoFocus = false,
Backdrop = { bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 8, insets = { left = 2, right = 2, top = 2, bottom = 2 }, },
BackdropColor = { 0, 0, 0.2, 0.75 },
FontObject = "GameFontNormalSmall",
TextColor = { 1, 1, 1 },
TextInsets = { 3, 9, 0, 0 },
OnEscapePressed = function() this:ClearFocus() end,
OnEditFocusLost = function() this:HighlightText(0, 0) end,
OnEditFocusGained = function() this:HighlightText() end,
},
nrf_input = {
type = "Frame",
size = { 130, 30 },
children = {
Text = {
type = "FontString",
layer = "ARTWORK",
Anchor = { "TOPLEFT", "$parent", "TOPLEFT", 3, 0 },
FontObject = "GameFontNormalSmall",
JustifyH = "LEFT",
},
input = {
template = "nrf_editbox",
size = { 100, 18 },
Anchor = { "BOTTOMLEFT", "$parent", "BOTTOMLEFT", 0, 0 },
OnEnterPressed = function() Nurfed_Options_inputOnClick() end,
},
set = {
template = "nrf_button",
Anchor = { "LEFT", "$parentinput", "RIGHT", 1, 0 },
OnClick = function() Nurfed_Options_inputOnClick() end,
vars = { text = "Set" },
},
},
OnShow = function() Nurfed_Options_inputOnShow() end,
},
nrf_color = {
type = "Button",
size = { 18, 18 },
children = {
bg = {
type = "Texture",
Texture = "Interface\\ChatFrame\\ChatFrameColorSwatch",
layer = "BACKGROUND",
Anchor = "all",
VertexColor = { 1, 1, 1 },
},
Text = {
type = "FontString",
layer = "ARTWORK",
Anchor = { "LEFT", "$parent", "RIGHT", 1, 0 },
FontObject = "GameFontNormalSmall",
JustifyH = "LEFT",
},
},
OnShow = function() Nurfed_Options_swatchOnShow() end,
OnClick = function() Nurfed_Options_swatchOpenColorPicker() end,
},
nrf_scroll = {
type = "ScrollFrame",
Anchor = "all",
uitemp = "FauxScrollFrameTemplate",
OnVerticalScroll = function() FauxScrollFrame_OnVerticalScroll(100, Nurfed_Options_ScrollMenu) end,
OnShow = function() Nurfed_Options_ScrollMenu() end,
},
nrf_optionpane = {
type = "Frame",
Backdrop = { bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 8, insets = { left = 2, right = 2, top = 2, bottom = 2 }, },
BackdropColor = { 0, 0, 0, 0.5 },
BackdropBorderColor = { 0.75, 0.75, 0.75, 1 },
children = {
title = {
type = "FontString",
layer = "ARTWORK",
Anchor = { "BOTTOMLEFT", "$parent", "TOPLEFT", 10, -2 },
FontObject = "GameFontNormalSmall",
JustifyH = "LEFT",
},
},
OnShow = function() Nurfed_Options_paneOnShow() end,
},
nrf_paneeditbox = {
type = "EditBox",
AutoFocus = false,
Backdrop = { bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = nil, tile = true, tileSize = 16, edgeSize = 8, insets = { left = 2, right = 2, top = 2, bottom = 2 }, },
BackdropColor = { 0.5, 0.5, 0.5, 0.85 },
FontObject = "GameFontNormalSmall",
TextColor = { 1, 1, 0 },
TextInsets = { 3, 9, 0, 0 },
OnEscapePressed = function() this:ClearFocus() end,
OnEditFocusLost = function() this:HighlightText(0, 0) end,
OnEditFocusGained = function() this:HighlightText() end,
OnEnterPressed = function() Nurfed_Options_paneAddOption() end,
},
nrf_panescroll = {
type = "ScrollFrame",
Anchor = "all",
uitemp = "FauxScrollFrameTemplate",
Scale = 0.75,
OnVerticalScroll = function() FauxScrollFrame_OnVerticalScroll(13, Nurfed_Options_ScrollPane) end,
OnShow = function() Nurfed_Options_ScrollPane() end,
},
nrf_pane_row = {
type = "Button",
children = {
text = {
type = "FontString",
layer = "ARTWORK",
Anchor = "all",
FontObject = "GameFontNormalSmall",
JustifyH = "LEFT",
TextColor = { 0, 1, 1 },
},
HighlightTexture = {
type = "Texture",
layer = "BACKGROUND",
Texture = "Interface\\QuestFrame\\UI-QuestTitleHighlight",
BlendMode = "ADD",
Anchor = "all",
},
},
OnClick = function() Nurfed_Options_PaneSelect() end,
},
};
local layout = {
type = "Frame",
size = { 500, 300 },
FrameStrata = "LOW",
Anchor = { "CENTER", "$parent", "CENTER", 0, 0 },
Backdrop = { bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 16, insets = { left = 5, right = 4, top = 5, bottom = 4 }, },
BackdropColor = { 0, 0, 0, 0.25 },
children = {
header = {
type = "Frame",
size = { 490, 20 },
Anchor = { "TOP", "$parent", "TOP", 0, -5 },
children = {
bg = {
type = "Texture",
layer = "BACKGROUND",
Anchor = "all",
Texture = NRF_IMG.."statusbar8",
Gradient = { "HORIZONTAL", 0, 0.75, 1, 0, 0, 0.2 },
},
title = {
type = "FontString",
layer = "ARTWORK",
Anchor = "all",
Font = { "Fonts\\FRIZQT__.TTF", 13, "OUTLINE" },
JustifyH = "LEFT",
TextColor = { 1, 1, 1 },
},
version = {
type = "FontString",
layer = "ARTWORK",
Anchor = "all",
Font = { "Fonts\\MORPHEUS.ttf", 13, "NONE" },
JustifyH = "RIGHT",
TextColor = { 1, 1, 1 },
},
border = {
type = "Texture",
size = { 490, 3 },
layer = "OVERLAY",
Anchor = { "TOP", "$parent", "BOTTOM", 0, 1 },
Texture = "Interface\\ClassTrainerFrame\\UI-ClassTrainer-HorizontalBar",
TexCoord = { 0.2, 1, 0, 0.25 },
},
},
},
menubg = {
type = "Frame",
FrameStrata = "BACKGROUND",
size = { 85, 278 },
Anchor = { "TOPLEFT", "$parentheader", "BOTTOMLEFT", -3, 5 },
Backdrop = { bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 8, insets = { left = 3, right = 2, top = 3, bottom = 2 }, },
BackdropColor = { 0, 0, 0, 0.95 },
},
button1 = {
template = "nrf_menu_button",
Anchor = { "TOPLEFT", "$parentheader", "BOTTOMLEFT", 0, 0 },
Text = "AddOns",
OnClick = function() Nurfed_MenuClick(this.id) end,
vars = {
id = 1,
},
},
button2 = {
template = "nrf_menu_button",
Anchor = { "TOPLEFT", "$parentbutton1", "BOTTOMLEFT", 0, -1 },
Text = "Profiles",
OnClick = function() Nurfed_MenuClick(this.id) end,
vars = {
id = 2,
},
},
},
Hide = true,
};
function Nurfed_OptionsInit()
for k, v in pairs(templates) do
framelib:CreateTemplate(k, v);
end
local count = GetNumAddOns();
local add = {};
for i = 1, count do
local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo(i);
local loaded = IsAddOnLoaded(i);
if (string.find(name, "^Nurfed") and loaded) then
local text = string.gsub(name, "Nurfed_", "");
if (Nurfed_OptionsMenus[text]) then
table.insert(add, text);
end
end
end
for k, v in pairs(add) do
layout.children["button"..k + 2] = {
template = "nrf_menu_button",
Anchor = { "TOPLEFT", "$parentbutton"..k + 1, "BOTTOMLEFT", 0, -1 },
OnClick = function() Nurfed_MenuClick(this.id) end,
Text = v,
vars = {
id = k + 2,
},
};
end
local last = table.getn(add) + 2;
layout.children["reloadui"] = {
template = "nrf_menu_button",
Anchor = { "TOPLEFT", "$parentbutton"..last, "BOTTOMLEFT", 0, -1 },
OnClick = function() StaticPopup_Show("NRF_RELOADUI") end,
Text = "Reload UI",
};
layout.children["close"] = {
template = "nrf_menu_button",
Anchor = { "TOPLEFT", "$parentreloadui", "BOTTOMLEFT", 0, -1 },
OnClick = function() HideUIPanel(this:GetParent()) end,
Text = CLOSE,
};
local frame = framelib:ObjectInit("Nurfed_OptionsFrame", layout);
UIPanelWindows["Nurfed_OptionsFrame"] = { area = "center", pushable = 0, whileDead = 1 };
Nurfed_OptionsFrameheadertitle:SetText("Nurfed Options Menu");
Nurfed_OptionsFrameheaderversion:SetText(GetAddOnMetadata("Nurfed_Options", "Version"));
templates = nil;
layout = nil;
end
function Nurfed_MenuClick(id)
this:Disable();
local i = 1;
local name = string.gsub(this:GetName(), id, "");
local button = getglobal(name..i);
while (button) do
if (button.id ~= id and button:IsEnabled() == 0) then
button:Enable();
Nurfed_HideMenu(button:GetText());
end
i = i + 1;
button = getglobal(name..i);
end
Nurfed_ShowMenu(this:GetText());
end
function Nurfed_ShowMenu(menu)
if (not menus[menu]) then
local opt = framelib:ObjectInit("Nurfed_OptionsFrame"..menu, Nurfed_OptionsMenus[menu], Nurfed_OptionsFrame);
menus[menu] = opt;
Nurfed_OptionsMenus[menu] = nil;
if (menu == "AddOns") then
Nurfed_GenerateAddOnsMenu();
end
local scroll = getglobal(opt:GetName().."scrollScrollBar");
if (scroll) then
scroll:SetPoint("RIGHT", scroll:GetParent():GetName(), "RIGHT", -25, 0);
end
end
PlaySound("igAbiliityPageTurn");
activemenu = menu;
menus[menu]:Show();
UIFrameFadeIn(menus[menu], 0.25);
end
function Nurfed_HideMenu(menu)
menus[menu]:SetAlpha(0);
menus[menu]:Hide();
end
-----------------------------------------------------------------------------------------
-- Nurfed AddOns Menu
-----------------------------------------------------------------------------------------
function Nurfed_GenerateAddOnsMenu()
for i = 1, 19 do
local row = framelib:ObjectInit("Nurfed_AddOnsRow"..i, "nrf_addon_row", Nurfed_OptionsFrameAddOns);
if (i == 1) then
row:SetPoint("TOPLEFT", "Nurfed_OptionsFrameAddOns", "TOPLEFT", 0, -3);
else
row:SetPoint("TOPLEFT", "Nurfed_AddOnsRow"..i - 1, "BOTTOMLEFT", 0, 0);
end
end
end
function Nurfed_ToggleAddOn()
if (this:GetChecked()) then
EnableAddOn(this:GetID());
PlaySound("igMainMenuOptionCheckBoxOn");
else
DisableAddOn(this:GetID());
PlaySound("igMainMenuOptionCheckBoxOff");
end
local reload = getglobal(this:GetParent():GetName().."reload");
reload:SetText("(Reload UI)");
end
function Nurfed_ScrollAddOns()
local line, offset, row;
local function format_row(row, num)
local name, title, notes, enabled, loadable, reason, security = GetAddOnInfo(num);
local loaded = IsAddOnLoaded(num);
local text = name;
if (title) then
text = title;
end
local check = getglobal(row.."check");
local na = getglobal(row.."name");
local load = getglobal(row.."loaded");
na:SetText(text);
if (enabled) then
na:SetTextColor(1, 1, 1);
else
na:SetTextColor(0.5, 0.5, 0.5);
end
if (name == "Nurfed_Options") then
check:Hide();
else
check:Show();
check:SetChecked(enabled);
check:SetID(num);
end
if (loaded) then
load:SetText("Loaded");
load:SetTextColor(1, 1, 1);
elseif (loadable) then
load:SetText("On Demand");
load:SetTextColor(1, 1, 1);
else
local y = getglobal("ADDON_"..reason);
load:SetText(y);
load:SetTextColor(0.5, 0.5, 0.5);
end
end
local count = GetNumAddOns();
FauxScrollFrame_Update(this, count, 19, 14);
for line = 1, 19 do
offset = line + FauxScrollFrame_GetOffset(this);
row = getglobal("Nurfed_AddOnsRow"..line);
if offset < count then
format_row("Nurfed_AddOnsRow"..line, offset);
row:Show();
else
row:Hide();
end
end
end
-----------------------------------------------------------------------------------------
-- Nurfed Options Functions
-----------------------------------------------------------------------------------------
-- scroll
function Nurfed_Options_ScrollMenu()
FauxScrollFrame_Update(this, this.pages, 1, 100);
local page = FauxScrollFrame_GetOffset(this) + 1;
local children = { this:GetParent():GetChildren() };
for _, child in ipairs(children) do
if (not string.find(child:GetName(), "scroll", 1, true)) then
if (child.page == page) then
child:Show();
else
child:Hide();
end
end
end
end
-- display
function Nurfed_Options_OnShow()
local text = getglobal(this:GetName().."Text");
text:SetText(this.text);
if (this.right) then
text:ClearAllPoints()
text:SetPoint("RIGHT", this:GetName(), "LEFT", -1, 1);
end
if (this.color) then
text:SetTextColor(unpack(this.color));
end
if (this.option) then
local objtype = this:GetObjectType();
local option = utility:GetOption(activemenu, this.option);
if (objtype == "CheckButton") then
this:SetChecked(option);
elseif (objtype == "Slider") then
local low = getglobal(this:GetName().."Low");
local high = getglobal(this:GetName().."High");
low:SetText(this.low);
high:SetText(this.high);
this:SetMinMaxValues(this.min, this.max);
this:SetValueStep(this.step);
this:SetValue(option);
end
end
this:SetScript("OnShow", nil);
end
local function optionInit()
local text = getglobal(this:GetName().."Text");
text:SetText(this.text);
if (this.right) then
text:ClearAllPoints()
text:SetPoint("RIGHT", this:GetName(), "LEFT", -1, 1);
end
if (this.color) then
text:SetTextColor(unpack(this.color));
end
if (this.option and not this.id) then
return utility:GetOption(activemenu, this.option);
end
end
-- buttons
function Nurfed_Options_buttonOnShow()
this:SetText(this.text);
local width = string.len(this.text);
this:SetWidth(width*6 + 10);
end
-- checks
function Nurfed_Options_checkOnClick()
local value = 0;
local func = this.func;
if (this:GetChecked()) then
value = 1;
PlaySound("igMainMenuOptionCheckBoxOn");
else
PlaySound("igMainMenuOptionCheckBoxOff");
end
if (this.id and not this:GetParent().selected) then
return;
end
utility:SetOption(activemenu, this.option, value, this.id, this:GetParent().selected);
if (this.id) then
func = this:GetParent().func;
end
if (func) then
func();
end
end
-- sliders
function Nurfed_Options_sliderOnMouseUp()
local value = this:GetValue();
local func = this.func;
if (this.id and not this:GetParent().selected) then
return;
end
utility:SetOption(activemenu, this.option, value, this.id, this:GetParent().selected);
if (this.id) then
func = this:GetParent().func;
end
if (func) then
func();
end
end
function Nurfed_Options_sliderOnValueChanged()
local value = this:GetValue();
local text = getglobal(this:GetName().."value");
text:ClearAllPoints();
if (value > (this.max / 2)) then
text:SetPoint("LEFT", this:GetName(), "LEFT", 1, 1);
else
text:SetPoint("RIGHT", this:GetName(), "RIGHT", -1, 1);
end
text:SetText("("..format(this.format, value)..")");
end
-- editbox
function Nurfed_Options_inputOnShow()
local option = optionInit();
if (not option) then
return;
end
local inputtext = getglobal(this:GetName().."input");
inputtext:SetText(option);
end
function Nurfed_Options_inputOnClick()
local inputtext = getglobal(this:GetParent():GetName().."input");
if (not inputtext:GetText() or inputtext:GetText() == "") then
return;
end
utility:SetOption(activemenu, this:GetParent().option, inputtext:GetText());
inputtext:ClearFocus();
if (this:GetParent().func) then
this:GetParent().func();
end
end
-- color swatches
function Nurfed_Options_swatchSetColor(frame)
local option = frame.option;
local r,g,b = ColorPickerFrame:GetColorRGB();
local a = OpacitySliderFrame:GetValue();
local swatch = getglobal(frame:GetName().."bg");
swatch:SetVertexColor(r, g, b);
frame.r = r;
frame.g = g;
frame.b = b;
utility:SetOption(activemenu, frame.option, { r, g, b, a });
if (frame.func) then
frame.func();
end
end
function Nurfed_Options_swatchCancelColor(frame, prev)
local option = frame.option;
local r = prev.r;
local g = prev.g;
local b = prev.b;
local a = prev.a;
local swatch = getglobal(frame:GetName().."bg");
swatch:SetVertexColor(r, g, b);
frame.r = r;
frame.g = g;
frame.b = b;
utility:SetOption(activemenu, frame.option, { r, g, b, a });
if (frame.func) then
frame.func();
end
end
function Nurfed_Options_swatchOnShow()
if (this:IsShown()) then
local option = optionInit();
if (not option) then
return;
end
local frame = this;
local swatch = getglobal(this:GetName().."bg");
swatch:SetVertexColor(option[1], option[2], option[3]);
this.r = option[1];
this.g = option[2];
this.b = option[3];
this.swatchFunc = function() Nurfed_Options_swatchSetColor(frame) end;
this.cancelFunc = function(x) Nurfed_Options_swatchCancelColor(frame, x) end;
if (frame.opacity) then
this.hasOpacity = frame.opacity;
this.opacityFunc = function() Nurfed_Options_swatchSetColor(frame) end;
this.opacity = option[4];
end
end
end
function Nurfed_Options_swatchOpenColorPicker()
CloseMenus();
ColorPickerFrame.func = this.swatchFunc;
ColorPickerFrame.hasOpacity = this.hasOpacity;
ColorPickerFrame.opacityFunc = this.opacityFunc;
ColorPickerFrame.opacity = this.opacity;
ColorPickerFrame:SetColorRGB(this.r, this.g, this.b);
ColorPickerFrame.previousValues = {r = this.r, g = this.g, b = this.b, a = this.opacity};
ColorPickerFrame.cancelFunc = this.cancelFunc;
ColorPickerFrame:Show();
end
-- radios
function Nurfed_Options_radioOnClick(frame, index, noupdate)
if (not index) then
index = this.index;
end
if (not frame) then
frame = this:GetParent();
end
local children = { frame:GetChildren() };
for _, child in ipairs(children) do
if (child.index == index) then
child:SetChecked(1);
else
child:SetChecked(nil);
end
end
PlaySound("igMainMenuOptionCheckBoxOn");
if (not frame:GetParent().selected or noupdate) then
return;
end
utility:SetOption(activemenu, frame.option, index, frame.id, frame:GetParent().selected);
local func = frame:GetParent().func;
if (func) then
func();
end
end
function Nurfed_Options_radioGetSelected(frame)
if (not frame) then
frame = this:GetParent();
end
local children = { frame:GetChildren() };
for _, child in ipairs(children) do
if (child:GetChecked()) then
return child.index;
end
end
end
-- panes
function Nurfed_Options_paneOnShow()
local title = getglobal(this:GetName().."title");
if (this.text) then
title:SetText(this.text);
end
local scroll = getglobal(this:GetName().."scrollScrollBar");
if (scroll) then
scroll:SetPoint("RIGHT", scroll:GetParent():GetName(), "RIGHT", -26, 0);
end
local children = { this:GetChildren() };
for _, child in ipairs(children) do
local objtype = child:GetObjectType();
if (objtype == "CheckButton") then
child:SetChecked(child.default);
elseif (objtype == "Slider") then
local low = getglobal(child:GetName().."Low");
local high = getglobal(child:GetName().."High");
low:SetText(child.low);
high:SetText(child.high);
child:SetMinMaxValues(child.min, child.max);
child:SetValueStep(child.step);
child:SetValue(child.default);
elseif (objtype == "Frame" and child.isradio) then
Nurfed_Options_radioOnClick(child, child.default, true);
end
child.option = this.option;
end
this:SetScript("OnShow", nil);
end
function Nurfed_Options_paneUpdateOptions(frame)
local option = utility:GetOption(activemenu, frame.option);
local selected = option[frame.selected];
local children = { frame:GetChildren() };
for _, child in ipairs(children) do
local objtype = child:GetObjectType();
if (objtype == "CheckButton") then
child:SetChecked(selected[child.id]);
elseif (objtype == "Slider") then
child:SetValue(selected[child.id]);
elseif (objtype == "Frame" and child.isradio) then
Nurfed_Options_radioOnClick(child, selected[child.id], true);
end
end
end
function Nurfed_Options_paneGetOptions()
local tbl = {};
local children = { this:GetParent():GetChildren() };
for _, child in ipairs(children) do
if (child.id) then
local objtype = child:GetObjectType();
if (objtype == "Slider") then
tbl[child.id] = child:GetValue();
elseif (objtype == "CheckButton") then
if (child:GetChecked()) then
tbl[child.id] = 1;
else
tbl[child.id] = 0;
end
elseif (objtype == "Frame" and child.isradio) then
tbl[child.id] = Nurfed_Options_radioGetSelected(child);
end
end
end
return tbl;
end
function Nurfed_Options_paneAddOption()
local frame = this:GetParent();
local objtype = this:GetObjectType();
if (objtype == "EditBox") then
if (this:GetText() and this:GetText() ~= "") then
if (frame.up) then
this:SetText(string.gsub(this:GetText(), "^%l", string.upper));
end
if (frame.notbl) then
utility:SetOption(activemenu, frame.option, true, this:GetText());
else
local tbl = Nurfed_Options_paneGetOptions();
utility:SetOption(activemenu, frame.option, tbl, this:GetText());
end
end
this:ClearFocus();
this:SetText("");
else
local option = utility:GetOption(activemenu, frame.option);
local name = table.getn(option) + 1;
local tbl = Nurfed_Options_paneGetOptions();
utility:SetOption(activemenu, frame.option, tbl, name);
end
Nurfed_Options_ScrollPane(frame);
if (frame.func) then
frame.func();
end
end
function Nurfed_Options_paneRemoveOption()
local frame = this:GetParent();
if (frame.selected) then
utility:SetOption(activemenu, frame.option, nil, frame.selected);
frame.selected = nil;
end
Nurfed_Options_ScrollPane(frame);
if (frame.func) then
frame.func();
end
end
function Nurfed_Options_ScrollPane(frame)
if (not frame) then
frame = this:GetParent();
else
this = getglobal(frame:GetName().."scroll");
end
local rows = frame.rows;
local selected = frame.selected;
local line, offset, row, text, count, temp;
local option = utility:GetOption(activemenu, frame.option);
if (table.getn(option) > 0) then
count = table.getn(option);
else
temp = {};
for k in pairs(option) do
table.insert(temp, k);
end
count = table.getn(temp);
end
FauxScrollFrame_Update(this, count, rows, 13);
for line = 1, rows do
offset = line + FauxScrollFrame_GetOffset(this);
row = getglobal(frame:GetName().."row"..line);
text = getglobal(row:GetName().."text");
if offset <= count then
if (temp) then
text:SetText(temp[offset]);
if (selected == temp[offset]) then
row:LockHighlight();
else
row:UnlockHighlight();
end
else
text:SetText(frame.prefix.." "..offset);
row.id = offset;
if (selected == offset) then
row:LockHighlight();
else
row:UnlockHighlight();
end
end
row:Show();
else
row:Hide();
end
end
end
function Nurfed_Options_PaneSelect()
local frame = this:GetParent();
local selected = frame.selected;
if (this.id) then
if (selected == this.id) then
frame.selected = nil;
this:UnlockHighlight();
else
frame.selected = this.id;
this:LockHighlight();
end
else
local text = getglobal(this:GetName().."text"):GetText();
if (selected == text) then
frame.selected = nil;
this:UnlockHighlight();
else
frame.selected = text;
this:LockHighlight();
end
end
if (frame.selected) then
Nurfed_Options_paneUpdateOptions(frame);
end
Nurfed_Options_ScrollPane(frame);
end
Generated by GNU Enscript 1.6.5.90.