vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:

if (not Nurfed_Options) then

        local framelib = Nurfed_Frames:New();

        Nurfed_Options = {};
        
        function Nurfed_Options:New ()
                local object = {};
                setmetatable(object, self);
                self.__index = self;
                return object;
        end

        function Nurfed_Options:GetMenu(addon)
                if (not UIPanelWindows["Nurfed_OptionsFrame"]) then
                        UIPanelWindows["Nurfed_OptionsFrame"] = { area = "center", pushable = 0, whileDead = 1 };
                end
                if (Nurfed_OptionsFrame:IsShown() and Nurfed_OptionsFrame.shown == addon) then
                        HideUIPanel(Nurfed_OptionsFrame);
                else
                        local title = string.gsub(addon, "_", " ");
                        local version = getglobal(string.upper(addon).."_VERS");
                        Nurfed_OptionsFrametitle:SetText(title);
                        Nurfed_OptionsFrameversion:SetText(version);
                        Nurfed_OptionsFrame.shown = addon;
                        Nurfed_OptionsFrame.addon = string.gsub(addon, "Nurfed_", "");
                        ShowUIPanel(Nurfed_OptionsFrame);
                        UIFrameFadeIn(Nurfed_OptionsFrame, COMBOFRAME_FADE_IN);

                        local menus = { Nurfed_OptionsFrame:GetChildren() };
                        for _, menu in ipairs(menus) do
                                if (menu:GetName()) then
                                        if (string.find(menu:GetName(), "^"..addon)) then
                                                menu:Show();
                                                Nurfed_OptionsFrame:SetWidth(menu.width);
                                                Nurfed_OptionsFrame:SetHeight(menu.height);
                                                Nurfed_OptionsFrameclose:Show();
                                                menu:SetWidth(menu.width - 12);
                                                menu:SetHeight(menu.height - 31);
                                                if (menu.page) then
                                                        self:GetMenuPage(menu);
                                                end
                                        else
                                                menu:Hide();
                                        end
                                end
                        end
                end
        end

        function Nurfed_Options:GetMenuPage(menu)
                local i = 1;
                local page = getglobal(menu:GetName().."page"..i);
                while (page) do
                        if (i == menu.page) then
                                UIFrameFadeIn(page, COMBOFRAME_FADE_IN);
                        else
                                page:Hide();
                        end
                        i = i + 1;
                        page = getglobal(menu:GetName().."page"..i);
                end
        end

        function Nurfed_Options:GetOption(addon, option)
                addon = string.upper("NURFED_"..addon);
                local player = UnitName("player").." - "..GetRealmName();
                if (not player or not getglobal(addon.."_SAVED")) then
                        return;
                end
                local tbl = getglobal(addon.."_SAVED")[player];
                if (not tbl[option]) then
                        local value = getglobal(addon.."_DEFAULT")[option];
                        tbl[option] = value;
                end
                return tbl[option];
        end

        function Nurfed_Options:SetOption(addon, option, value, name, id)
                addon = string.upper("NURFED_"..addon);
                local player = UnitName("player").." - "..GetRealmName();
                local tbl = getglobal(addon.."_SAVED")[player];
                if (name and id) then
                        tbl[option][name][id] = value;
                else
                        tbl[option] = value;
                end
        end

        function Nurfed_Options:SetMultiOption(addon, option, name, value)
                addon = string.upper("NURFED_"..addon);
                local player = UnitName("player").." - "..GetRealmName();
                local tbl = getglobal(addon.."_SAVED")[player][option];
                tbl[name] = value;
        end

        -- Display
        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(this.color[1], this.color[2], this.color[3]);
                end
                if (this.option) then
                        return Nurfed_Options:GetOption(Nurfed_OptionsFrame.addon, this.option);
                end
        end

        --Generic Button
        local function buttonOnEnter()
                this:SetBackdropColor(0, 0.75, 1, 0.75)
                getglobal(this:GetName().."text"):SetTextColor(1, 1, 1)
        end

        local function buttonOnLeave()
                this:SetBackdropColor(0, 0, 0, 0.75)
                getglobal(this:GetName().."text"):SetTextColor(0.65, 0.65, 0.65)
        end

        local function buttonOnShow()
                optionInit();
                local width = string.len(this.text);
                this:SetWidth(width*6 + 5);
        end

        local function buttonOnMouseDown()
                this:SetBackdropColor(1, 0, 0, 0.75);
        end

        local function buttonOnMouseUp()
                this:SetBackdropColor(0, 0.75, 1, 0.75);
        end

        -- Tabs
        local function tabOnShow()
                buttonOnShow();
                if (this.page == this:GetParent().page) then
                        this.selected = true;
                        this:SetBackdropColor(0, 0.85, 1, 0.75);
                        getglobal(this:GetName().."text"):SetTextColor(1, 1, 1);
                else
                        this.selected = nil;
                        this:SetBackdropColor(0, 0, 0, 0.75);
                        getglobal(this:GetName().."text"):SetTextColor(0.65, 0.65, 0.65);
                end
        end

        local function tabOnEnter()
                if (not this.selected) then
                        this:SetBackdropColor(0, 0.75, 1, 0.75);
                        getglobal(this:GetName().."text"):SetTextColor(1, 1, 1);
                end
        end

        local function tabOnLeave()
                if (not this.selected) then
                        this:SetBackdropColor(0, 0, 0, 0.75);
                        getglobal(this:GetName().."text"):SetTextColor(0.65, 0.65, 0.65);
                end
        end

        local function tabOnClick()
                local parent = this:GetParent();
                parent.page = this.page;

                local i = 1;
                local tab = getglobal(parent:GetName().."tab"..i);
                while(tab) do
                        if (parent.page ~= tab.page) then
                                tab.selected = nil;
                                tab:SetBackdropColor(0, 0, 0, 0.75);
                                getglobal(tab:GetName().."text"):SetTextColor(0.65, 0.65, 0.65);
                        else
                                tab.selected = true;
                                tab:SetBackdropColor(0, 0.85, 1, 0.75);
                                getglobal(tab:GetName().."text"):SetTextColor(1, 1, 1);
                                Nurfed_Options:GetMenuPage(parent);
                        end
                        i = i + 1;
                        tab = getglobal(parent:GetName().."tab"..i);
                end
        end

        -- Check Boxes
        local function checkText()
                if (not this.color) then
                        local text = getglobal(this:GetName().."text");
                        if (this:GetChecked()) then
                                text:SetTextColor(1, 1, 1);
                        else
                                text:SetTextColor(0.65, 0.65, 0.65);
                        end
                end
        end

        local function checkOnShow()
                if (this:IsShown()) then
                        local option = optionInit();
                        if (this.init) then
                                this:SetChecked(this.init);
                        else
                                this:SetChecked(option);
                        end
                        checkText();
                end
        end

        local function checkOnClick()
                local value;
                if (this:GetChecked()) then
                        value = 1;
                        PlaySound("igMainMenuOptionCheckBoxOn");
                else
                        value = 0;
                        PlaySound("igMainMenuOptionCheckBoxOff");
                end
                if (this.option) then
                        Nurfed_Options:SetOption(Nurfed_OptionsFrame.addon, this.option, value);
                        if (this.func) then
                                this.func();
                        end
                elseif (this.id and this:GetParent().selected) then
                        Nurfed_Options:SetOption(Nurfed_OptionsFrame.addon, this:GetParent().option, value, this:GetParent().selected, this.id);
                        if (this:GetParent().func) then
                                this:GetParent().func();
                        end
                end
                checkText();
        end

        --Sliders
        local function sliderOnShow()
                if (this:IsShown()) then
                        local option = optionInit();
                        local max = getglobal(this:GetName().."high");
                        local min = getglobal(this:GetName().."low");
                        max:SetText(this.max);
                        min:SetText(this.min);
                        this:SetMinMaxValues(this.min, this.max);
                        this:SetValueStep(this.step);
                        if (this.init) then
                                this:SetValue(this.init);
                        elseif (option) then
                                this:SetValue(option);
                        end
                end
        end

        local function 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

        local function sliderOnMouseUp()
                local value = this:GetValue();
                if (this.option) then
                        Nurfed_Options:SetOption(Nurfed_OptionsFrame.addon, this.option, value);
                        if (this.func) then
                                this.func();
                        end
                elseif (this.id and this:GetParent().selected) then
                        Nurfed_Options:SetOption(Nurfed_OptionsFrame.addon, this:GetParent().option, value, this:GetParent().selected, this.id);
                        if (this:GetParent().func) then
                                this:GetParent().func();
                        end
                end
        end

        -- Color Swatches
        local function 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;
                Nurfed_Options:SetOption(Nurfed_OptionsFrame.addon, frame.option, { r, g, b, a });
                if (frame.func) then
                        frame.func();
                end
        end

        local function 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;
                Nurfed_Options:SetOption(Nurfed_OptionsFrame.addon, frame.option, { r, g, b, a });
                if (frame.func) then
                        frame.func();
                end
        end

        local function 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() swatchSetColor(frame) end;
                        this.cancelFunc = function(x) swatchCancelColor(frame, x) end;
                        if (frame.opacity) then
                                this.hasOpacity = frame.opacity;
                                this.opacityFunc = function() swatchSetColor(frame) end;
                                this.opacity = option[4];
                        end
                end
        end

        local function 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

        -- Input
        local function inputOnShow()
                local option = optionInit();
                if (not option) then
                        return;
                end
                local inputtext = getglobal(this:GetName().."input");
                inputtext:SetText(option);
        end

        local function inputOnClick()
                local inputtext = getglobal(this:GetParent():GetName().."input");
                if (not inputtext:GetText() or inputtext:GetText() == "") then
                        return;
                end
                Nurfed_Options:SetOption(Nurfed_OptionsFrame.addon, this:GetParent().option, inputtext:GetText());
                inputtext:ClearFocus();
        end

        --Input Select
        local function inputselectSetOptions(opt, frame)
                if (not frame) then
                        frame = this:GetParent();
                end
                local option = Nurfed_Options:GetOption(Nurfed_OptionsFrame.addon, frame.option);
                local children = { frame:GetChildren() };
                for _, child in ipairs(children) do
                        local objtype, value;
                        if (child.id) then
                                objtype = child:GetObjectType();
                                if (objtype == "Slider") then
                                        child:SetValue(option[opt][child.id]);
                                elseif (objtype == "CheckButton") then
                                        child:SetChecked(option[opt][child.id]);
                                end
                        end
                end
        end

        local function inputselectUpdate(frame, pre)
                local option = Nurfed_Options:GetOption(Nurfed_OptionsFrame.addon, frame.option);
                local i = 1;
                local button = getglobal(frame:GetName().."button"..i);
                local text = getglobal(frame:GetName().."button"..i.."text");
                for opt in option do
                        if (text) then
                                if (pre) then
                                        text:SetText(pre..opt);
                                        button.pre = pre;
                                else
                                        text:SetText(opt);
                                end
                                if (button.selected) then
                                        inputselectSetOptions(opt, frame);
                                end
                        end
                        i = i + 1;
                        text = getglobal(frame:GetName().."button"..i.."text");
                        button = getglobal(frame:GetName().."button"..i);
                end
                while (i <= 10) do
                        text = getglobal(frame:GetName().."button"..i.."text");
                        text:SetText(nil);
                        i = i + 1;
                end
        end

        local function inputselectOnShow()
                local option = optionInit();
                if (not option) then
                        return;
                end
                inputselectUpdate(this, this.pre);
        end

        local function inputselectGetOptions()
                local tbl = {};
                local children = { this:GetParent():GetChildren() };
                for _, child in ipairs(children) do
                        local objtype, value;
                        if (child.id) then
                                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
                                end
                        end
                end
                return tbl;
        end

        local function inputselectOnEnterPressed()
                if (not this:GetText() or this:GetText() == "") then
                        return;
                end
                local value = inputselectGetOptions();
                Nurfed_Options:SetMultiOption(Nurfed_OptionsFrame.addon, this:GetParent().option, this:GetText(), value);
                inputselectUpdate(this:GetParent());
                this:SetText("");
                if (this:GetParent().func) then
                        this:GetParent().func();
                end
        end

        local function inputremoveOnClick()
                for i = 1, 10 do
                        local button = getglobal(this:GetParent():GetName().."button"..i);
                        local highlight = getglobal(button:GetName().."highlight");
                        local text = getglobal(button:GetName().."text");
                        local option = text:GetText();
                        if (option) then
                                if (this:GetParent().pre) then
                                        option = string.gsub(option, this:GetParent().pre, "");
                                        option = tonumber(option);
                                end
                                if (button.selected) then
                                        Nurfed_Options:SetMultiOption(Nurfed_OptionsFrame.addon, this:GetParent().option, option, nil);
                                        button.selected = nil;
                                        highlight:Hide();
                                end
                        end
                end
                inputselectUpdate(this:GetParent(), this:GetParent().pre);
                if (this:GetParent().func) then
                        this:GetParent().func();
                end
        end

        local function inputupdateOnClick()
                local value = inputselectGetOptions();
                for i = 1, 10 do
                        local button = getglobal(this:GetParent():GetName().."button"..i);
                        local text = getglobal(button:GetName().."text");
                        local option = text:GetText();
                        if (option) then
                                if (this:GetParent().pre) then
                                        option = string.gsub(option, this:GetParent().pre, "");
                                        option = tonumber(option);
                                end
                                if (button.selected) then
                                        Nurfed_Options:SetMultiOption(Nurfed_OptionsFrame.addon, this:GetParent().option, option, value);
                                end
                        end
                end
                if (this:GetParent().func) then
                        this:GetParent().func();
                end
        end

        local function inputaddOnClick()
                local value = inputselectGetOptions();
                local option = Nurfed_Options:GetOption(Nurfed_OptionsFrame.addon, this:GetParent().option);
                if (option) then
                        local nextopt = table.getn(option) + 1;
                        Nurfed_Options:SetMultiOption(Nurfed_OptionsFrame.addon, this:GetParent().option, nextopt, value);
                        inputselectUpdate(this:GetParent(), this:GetParent().pre);
                        if (this:GetParent().func) then
                                this:GetParent().func();
                        end
                end
        end

        local function inputselectbuttonOnClick()
                local text = getglobal(this:GetName().."text");
                local option = text:GetText();
                if (not option) then
                        return;
                end
                for i = 1, 10 do
                        local button = getglobal(this:GetParent():GetName().."button"..i);
                        if (this:GetName() ~= button:GetName()) then
                                local highlight = getglobal(button:GetName().."highlight");
                                button.selected = nil;
                                highlight:Hide();
                        end
                end
                if (this.pre) then
                        option = string.gsub(option, this.pre, "");
                        option = tonumber(option);
                end
                this:GetParent().selected = nil;
                if (option) then
                        local highlight = getglobal(this:GetName().."highlight");
                        if (highlight:IsVisible()) then
                                highlight:Hide();
                                this.selected = nil;
                        else
                                highlight:Show();
                                this.selected = true;
                                this:GetParent().selected = option;
                                inputselectSetOptions(option);
                        end
                end
        end

        local tbl = {
                Nurfed_OptionButton = {
                        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 },
                        children = {
                                text = {
                                        type = "FontString",
                                        layer = "ARTWORK",
                                        Anchor = "all",
                                        Font = { NRF_FONT.."framd.ttf", 9, "OUTLINE" },
                                        JustifyH = "CENTER",
                                        TextColor = { 0.65, 0.65, 0.65 },
                                },
                        },
                        OnMouseDown = function() buttonOnMouseDown() end,
                        OnMouseUp = function() buttonOnMouseUp() end,
                        OnEnter = function() buttonOnEnter() end,
                        OnLeave = function() buttonOnLeave() end,
                        OnShow = function() buttonOnShow() end,
                },
                Nurfed_OptionTab = {
                        type = "Button",
                        size = { 75, 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 },
                        children = {
                                text = {
                                        type = "FontString",
                                        layer = "ARTWORK",
                                        Anchor = "all",
                                        Font = { NRF_FONT.."framd.ttf", 9, "OUTLINE" },
                                        JustifyH = "CENTER",
                                        TextColor = { 0.5, 0.5, 0.5 },
                                },
                        },
                        OnShow = function() tabOnShow() end,
                        OnMouseDown = function() buttonOnMouseDown() end,
                        OnMouseUp = function() buttonOnMouseUp() end,
                        OnClick = function() tabOnClick() end,
                        OnEnter = function() tabOnEnter() end,
                        OnLeave = function() tabOnLeave() end,
                },
                Nurfed_OptionCheck = {
                        type = "CheckButton",
                        size = { 18, 18 },
                        NormalTexture = "Interface\\Buttons\\UI-CheckBox-Up",
                        PushedTexture = "Interface\\Buttons\\UI-CheckBox-Down",
                        HighlightTexture = "Interface\\Buttons\\UI-CheckBox-Highlight",
                        CheckedTexture = "Interface\\Buttons\\UI-CheckBox-Check",
                        DisabledCheckedTexture = "Interface\\Buttons\\UI-CheckBox-Check-Disabled",
                        children = {
                                text = {
                                        type = "FontString",
                                        layer = "ARTWORK",
                                        Anchor = { "LEFT", "$parent", "RIGHT", 1, 1 },
                                        Font = { NRF_FONT.."framd.ttf", 11, "NONE" },
                                        JustifyH = "LEFT",
                                        TextColor = { 0.5, 0.5, 0.5 },
                                },
                        },
                        OnShow = function() checkOnShow() end,
                        OnClick = function() checkOnClick() end,
                },
                Nurfed_OptionSlider = {
                        type = "Slider",
                        size = { 128, 17 },
                        Backdrop = { bgFile = "Interface\\Buttons\\UI-SliderBar-Background", edgeFile = "Interface\\Buttons\\UI-SliderBar-Border", tile = true, tileSize = 8, edgeSize = 8, insets = { left = 3, right = 3, top = 6, bottom = 6 }, },
                        ThumbTexture = "Interface\\Buttons\\UI-SliderBar-Button-Horizontal",
                        Orientation = "HORIZONTAL",
                        children = {
                                text = {
                                        type = "FontString",
                                        layer = "ARTWORK",
                                        Anchor = { "BOTTOM", "$parent", "TOP", 0, 1 },
                                        Font = { NRF_FONT.."framd.ttf", 11, "NONE" },
                                        JustifyH = "CENTER",
                                        TextColor = { 1, 1, 1 },
                                },
                                high = {
                                        type = "FontString",
                                        layer = "ARTWORK",
                                        Anchor = { "TOPRIGHT", "$parent", "BOTTOMRIGHT", 0, 1 },
                                        Font = { NRF_FONT.."framd.ttf", 10, "NONE" },
                                        JustifyH = "CENTER",
                                        TextColor = { 1, 1, 0 },
                                },
                                low = {
                                        type = "FontString",
                                        layer = "ARTWORK",
                                        Anchor = { "TOPLEFT", "$parent", "BOTTOMLEFT", 0, 1 },
                                        Font = { NRF_FONT.."framd.ttf", 10, "NONE" },
                                        JustifyH = "CENTER",
                                        TextColor = { 1, 1, 0 },
                                },
                                value = {
                                        type = "FontString",
                                        layer = "ARTWORK",
                                        Font = { NRF_FONT.."framd.ttf", 10, "NONE" },
                                        JustifyH = "CENTER",
                                        TextColor = { 0, 1, 0 },
                                },
                        },
                        OnShow = function() sliderOnShow() end,
                        OnMouseUp = function() sliderOnMouseUp() end,
                        OnValueChanged = function() sliderOnValueChanged() end,
                },
                Nurfed_OptionColorSwatch= {
                        type = "Button",
                        size = { 16, 16 },
                        children = {
                                bg = {
                                        type = "Texture",
                                        Texture = "Interface\\ChatFrame\\ChatFrameColorSwatch",
                                        size = { 16, 16 },
                                        layer = "BACKGROUND",
                                        Anchor = { "CENTER", "$parent", "CENTER", 0, 0 },
                                        VertexColor = { 1, 1, 1 },
                                },
                                text = {
                                        type = "FontString",
                                        layer = "ARTWORK",
                                        Anchor = { "LEFT", "$parent", "RIGHT", 1, 0 },
                                        Font = { NRF_FONT.."framd.ttf", 11, "NONE" },
                                        JustifyH = "LEFT",
                                        TextColor = { 1, 1, 1 },
                                },
                        },
                        OnShow = function() swatchOnShow() end,
                        OnClick = function() swatchOpenColorPicker() end,
                },
                Nurfed_OptionInput = {
                        type = "Frame",
                        size = { 130, 30 },
                        children = {
                                text = {
                                        type = "FontString",
                                        layer = "ARTWORK",
                                        Anchor = { "TOPLEFT", "$parent", "TOPLEFT", 3, 0 },
                                        Font = { NRF_FONT.."framd.ttf", 11, "NONE" },
                                        JustifyH = "LEFT",
                                        TextColor = { 1, 1, 1 },
                                },
                                input = {
                                        type = "EditBox",
                                        size = { 100, 18 },
                                        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.2, 0.2, 0.75 },
                                        Anchor = { "BOTTOMLEFT", "$parent", "BOTTOMLEFT", 0, 0 },
                                        Font = { NRF_FONT.."framd.ttf", 10, "NONE" },
                                        TextInsets = { 3, 9, 0, 0 },
                                        OnEnterPressed = function() inputOnClick() end,
                                        OnEscapePressed = function() this:ClearFocus() end,
                                },
                                set = {
                                        template = "Nurfed_OptionButton",
                                        properties = {
                                                Anchor = { "LEFT", "$parentinput", "RIGHT", 1, 0 },
                                                OnClick = function() inputOnClick() end,
                                                vars = {
                                                        text = "Set",
                                                },
                                        },
                                },
                        },
                        OnShow = function() inputOnShow() end,
                },
                Nurfed_OptionInputSelectButton = {
                        type = "Button",
                        size = { 80, 10 },
                        children = {
                                highlight = {
                                        type = "Texture",
                                        layer = "BACKGROUND",
                                        Texture = "Interface\\QuestFrame\\UI-QuestTitleHighlight",
                                        BlendMode = "ADD",
                                        Anchor = "all",
                                        Alpha = 0.75;
                                        Hide = true;
                                },
                                text = {
                                        type = "FontString",
                                        layer = "ARTWORK",
                                        Anchor = "all",
                                        Font = { NRF_FONT.."framd.ttf", 10, "NONE" },
                                        JustifyH = "LEFT",
                                        TextColor = { 1, 1, 1 },
                                },
                        },
                        OnClick = function() inputselectbuttonOnClick() end,
                },
                Nurfed_OptionNumSelect = {
                        type = "Frame",
                        size = { 106, 158 },
                        Backdrop = { bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 12, insets = { left = 2, right = 2, top = 2, bottom = 2 }, },
                        BackdropColor = { 0, 0, 0, 0 },
                        children = {
                                text = {
                                        type = "FontString",
                                        layer = "ARTWORK",
                                        Anchor = { "TOP", "$parent", "TOP", 0, -4 },
                                        Font = { NRF_FONT.."framd.ttf", 11, "NONE" },
                                        JustifyH = "CENTER",
                                        TextColor = { 1, 1, 1 },
                                },
                                button1 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parent", "TOPLEFT", 3, -15 },
                                        },
                                },
                                button2 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton1", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button3 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton2", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button4 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton3", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button5 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton4", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button6 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton5", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button7 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton6", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button8 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton7", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button9 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton8", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button10 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton9", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                --[[
                                update = {
                                        template = "Nurfed_OptionButton",
                                        properties = {
                                                FrameStrata = "MEDIUM",
                                                Anchor = { "BOTTOMLEFT", "$parent", "BOTTOMLEFT", 2, 2 },
                                                vars = {
                                                        text = "Update",
                                                },
                                                OnClick = function() inputupdateOnClick() end,
                                        },
                                },
                                ]]
                                add = {
                                        template = "Nurfed_OptionButton",
                                        properties = {
                                                FrameStrata = "MEDIUM",
                                                Anchor = { "BOTTOMLEFT", "$parent", "BOTTOMLEFT", 2, 2 },
                                                --Anchor = { "BOTTOM", "$parent", "BOTTOM", 0, 2 },
                                                vars = {
                                                        text = "Add",
                                                },
                                                OnClick = function() inputaddOnClick() end,
                                        },
                                },
                                remove = {
                                        template = "Nurfed_OptionButton",
                                        properties = {
                                                FrameStrata = "MEDIUM",
                                                Anchor = { "BOTTOMRIGHT", "$parent", "BOTTOMRIGHT", -2, 2 },
                                                vars = {
                                                        text = REMOVE,
                                                },
                                                OnClick = function() inputremoveOnClick() end,
                                        },
                                },
                        },
                        OnShow = function() inputselectOnShow() end,
                },
                Nurfed_OptionInputSelect = {
                        type = "Frame",
                        size = { 106, 170 },
                        Backdrop = { bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 12, insets = { left = 2, right = 2, top = 2, bottom = 2 }, },
                        BackdropColor = { 0, 0, 0, 0 },
                        children = {
                                text = {
                                        type = "FontString",
                                        layer = "ARTWORK",
                                        Anchor = { "TOP", "$parent", "TOP", 0, -4 },
                                        Font = { NRF_FONT.."framd.ttf", 11, "NONE" },
                                        JustifyH = "CENTER",
                                        TextColor = { 1, 1, 1 },
                                },
                                input = {
                                        type = "EditBox",
                                        size = { 100, 18 },
                                        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.2, 0.2, 0.75 },
                                        Anchor = { "TOPLEFT", "$parent", "TOPLEFT", 3, -15 },
                                        Font = { NRF_FONT.."framd.ttf", 10, "NONE" },
                                        TextInsets = { 3, 9, 0, 0 },
                                        OnEnterPressed = function() inputselectOnEnterPressed() end,
                                        OnEscapePressed = function() this:ClearFocus() end,
                                },
                                button1 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentinput", "BOTTOMLEFT", 3, -2 },
                                        },
                                },
                                button2 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton1", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button3 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton2", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button4 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton3", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button5 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton4", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button6 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton5", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button7 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton6", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button8 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton7", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button9 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton8", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                button10 = {
                                        template = "Nurfed_OptionInputSelectButton",
                                        properties = {
                                                Anchor = { "TOPLEFT", "$parentbutton9", "BOTTOMLEFT", 0, -1 },
                                        },
                                },
                                --[[
                                update = {
                                        template = "Nurfed_OptionButton",
                                        properties = {
                                                FrameStrata = "MEDIUM",
                                                Anchor = { "BOTTOMLEFT", "$parent", "BOTTOMLEFT", 2, 2 },
                                                vars = {
                                                        text = "Update",
                                                },
                                                OnClick = function() inputupdateOnClick() end,
                                        },
                                },
                                ]]
                                remove = {
                                        template = "Nurfed_OptionButton",
                                        properties = {
                                                FrameStrata = "MEDIUM",
                                                Anchor = { "BOTTOMRIGHT", "$parent", "BOTTOMRIGHT", -2, 2 },
                                                vars = {
                                                        text = REMOVE,
                                                },
                                                OnClick = function() inputremoveOnClick() end,
                                        },
                                },
                        },
                        OnShow = function() inputselectOnShow() end,
                },
        };

        local menutbl = {
                type = "Frame",
                FrameStrata = "LOW",
                Anchor = { "CENTER", "$parent", "CENTER", 150, 0 },
                Backdrop = { bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 16, insets = { left = 5, right = 5, top = 5, bottom = 5 }, },
                BackdropColor = { 0, 0, 0, 0.75 },
                children = {
                        titlebg = {
                                type = "Texture",
                                size = { 340, 20 },
                                layer = "BACKGROUND",
                                Anchor = { "TOPLEFT", "$parent", "TOPLEFT", 5, -5 },
                                Texture = NRF_IMG.."statusbar6.tga",
                                Gradient = { "HORIZONTAL", 0, 0.75, 1, 0, 0, 0.2 },
                        },
                        title = {
                                type = "FontString",
                                size = { 150, 12 },
                                layer = "ARTWORK",
                                Anchor = { "TOPLEFT", "$parent", "TOPLEFT", 6, -8 },
                                Font = { NRF_FONT.."framd.ttf", 12, "OUTLINE" },
                                JustifyH = "LEFT",
                                TextColor = { 1, 1, 1 },
                        },
                        version = {
                                type = "FontString",
                                size = { 150, 12 },
                                layer = "ARTWORK",
                                Anchor = { "TOPRIGHT", "$parent", "TOPRIGHT", -6, -8 },
                                Font = { NRF_FONT.."framd.ttf", 12, "OUTLINE" },
                                JustifyH = "RIGHT",
                                TextColor = { 1, 1, 1 },
                        },
                        close = {
                                template = "Nurfed_OptionButton",
                                properties = {
                                        FrameStrata = "MEDIUM",
                                        Anchor = { "BOTTOMRIGHT", "$parent", "BOTTOMRIGHT", -4, 4 },
                                        vars = {
                                                text = CLOSE,
                                        },
                                        OnClick = function() HideUIPanel(Nurfed_OptionsFrame) end,
                                },
                        },
                },
                Hide = true,
        };

        for temp, spec in pairs(tbl) do
                framelib:CreateTemplate(temp, spec);
        end
        framelib:ObjectInit("Nurfed_OptionsFrame", menutbl, UIParent);
        tbl = nil;
        menutbl = nil;
end

Generated by GNU Enscript 1.6.5.90.