vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
function DAB_PickupAction(action)
        DAB_Old_PickupAction(action);
        DAB_Update_ActionList();
end

function DAB_PlaceAction(action)
        DAB_Old_PlaceAction(action);
        DAB_Update_ActionList();
end

function DAB_ReputationWatchBar_Update(newLevel)
        DAB_Old_ReputationWatchBar_Update(newLevel);
        if (DAB_Settings[DAB_INDEX].MainMenuBar.showXP) then
                if ( not newLevel ) then
                        newLevel = UnitLevel("player");
                end
                ReputationWatchBar:ClearAllPoints();
                if ( newLevel < MAX_PLAYER_LEVEL ) then
                        ReputationWatchBar:SetPoint("TOP", MainMenuExpBar, "BOTTOM", 0, 0);
                else
                        ReputationWatchBar:SetPoint("TOP", DAB_XPBar, "TOP", 0, 0);
                end
        end
end

function DAB_Initialize()
        if (DAB_INITIALIZED) then return; end

        if (DAB_DL_VERSION > DL_VERSION) then
                DL_Error("** You need to install the latest version of the Discord Library, v"..DAB_DL_VERSION..", for Discord Action Bars to work right.  It should be included in the same .zip file from which you extracted this mod. **");
                return;
        end

        DAB_Old_SaveBindings = SaveBindings;
        SaveBindings = DAB_SaveBindings;
        for i=1,12 do
                setglobal("BINDING_NAME_ACTIONBUTTON"..i, DAB_TEXT.KBWarning);
                setglobal("BINDING_NAME_SELFACTIONBUTTON"..i, DAB_TEXT.KBWarning);
        end
        UpdateTalentButton = function () end;
        TalentMicroButton:UnregisterEvent("UNIT_LEVEL");
        TalentMicroButton:UnregisterEvent("PLAYER_ENTERING_WORLD");
        ActionBarUpButton:SetScript("OnClick", function() DAB_Bar_PageUp(1); PlaySound("UChatScrollButton"); end);
        ActionBarDownButton:SetScript("OnClick", function() DAB_Bar_PageDown(1); PlaySound("UChatScrollButton"); end);

        DAB_Old_PickupAction = PickupAction;
        PickupAction = DAB_PickupAction;
        DAB_Old_PlaceAction = PlaceAction;
        PlaceAction = DAB_PlaceAction;

        DAB_Old_ReputationWatchBar_Update = ReputationWatchBar_Update;
        ReputationWatchBar_Update = DAB_ReputationWatchBar_Update;

        if (not DAB_Settings) then
                DAB_Settings = {};
        elseif (not DAB_Settings["INITIALIZED3.0"]) then
                DAB_Settings = {};
        end
        DAB_Settings["INITIALIZED3.0"] = 1;

        DAB_PROFILE_INDEX = UnitName("player").." :: "..GetCVar("realmName");
        if (DAB_Settings[DAB_PROFILE_INDEX]) then
                DAB_INDEX = DAB_Settings[DAB_PROFILE_INDEX];
        else
                DAB_INDEX = DAB_TEXT.Default;
                DAB_Settings[DAB_PROFILE_INDEX] = DAB_TEXT.Default;
        end

        if (not DAB_Settings[DAB_INDEX]) then
                local err = DAB_Load_DefaultSettings();
                if (err) then
                        DL_Error("** Default settings not found for Discord Action Bars.  Unable to initialize. **");
                        return;
                end
        end

        if (DAB_CUSTOM_SETTINGS) then
                DAB_Settings.Custom = {};
                DL_Copy_Table(DAB_CUSTOM_SETTINGS, DAB_Settings.Custom);
                DAB_CUSTOM_SETTINGS = nil;
        end

        ActionButtonDown = function() DL_Error("You are trying to use the default UI's action button keybindings.  They will not work with Discord Action Bars."); end

        if (CT_ActionButton1) then
                DL_Error("You are running CT_BarMod along with Discord Action Bars.  Discord Action Bars will not run until you disable CT_BarMod.");
                return;
        end

        if (CT_BottomBarFrame) then
                DL_Error("You are running CT_BottomBar along with Discord Action Bars.  Discord Action Bars will not run until you disable CT_BottomBar.");
                return;
        end

        DAB_INITIALIZED = true;
        DAB_Conditions();
        DAB_Initialize_Everything();
end

function DAB_Get_NumButtonsAndBars()
        local count = 1;
        while (getglobal("DAB_ActionButton_"..count)) do
                DAB_NUM_BUTTONS = count;
                count = count + 1;
        end
        count = 1;
        while (getglobal("DAB_ActionBar_"..count)) do
                DAB_NUM_BARS = count;
                count = count + 1;
        end
end

function DAB_Initialize_Everything()
        if (not DAB_INITIALIZED) then return; end
        DAB_Get_NumButtonsAndBars();
        DAB_Initialize_NewSettings();
        DAB_UPDATE_SPEED = 1 / DAB_Settings[DAB_INDEX].UpdateSpeed;
        for i=1,DAB_NUM_BARS do
                DAB_Bar_Location(i);
                DAB_Bar_Initialize(i);
                DAB_Bar_Label(i);
                DAB_Bar_Backdrop(i);
                DAB_Bar_ButtonTextures(i);
                DAB_Bar_ButtonText(i);
                DAB_Bar_ButtonSize(i);
                DAB_Bar_ButtonAlpha(i);
                DAB_Bar_Update(i);
                DAB_ControlBox_Initialize(i);
                DAB_Compile_Scripts("Bar", i);
                DAB_Compile_Scripts("ControlBox", i);
        end
        for i=11,14 do
                DAB_OtherBar_Initialize(i);
        end
        for i in DAB_Settings[DAB_INDEX].Floaters do
                DAB_Floater_Initialize(i);
                DAB_Compile_Scripts("Floaters", i);
        end
        DAB_VL_CHANGED = 1;
        DAB_EventMacro_Compile();
        DAB_Update_MainMenuBar();
        DAB_Set_Keybindings();
        DAB_Update_Keybindings();
        if (DAB_Options) then
                DAB_Init_MainMenuOptions();
                DAB_Init_MiscOptions();
                DAB_Set_OptionsScale(DAB_Settings[DAB_INDEX].optionsScale);
                DAB_Init_ButtonLayout();
        end
        DAB_Update_Locations();
        DAB_Update_ObjectList();
        DAB_Update_ActionList();
        DAB_Update_AnchorsList();
        DAB_Update_TextureList();
        DAB_Update_GroupList();
        DAB_Update_UnitList();
        DAB_Update_FontList();
        DAB_Update_FloaterList();
        DAB_Update_EventList();
        DAB_Update_ProfileList();
        DL_Update_Forms();
        for _,button in DAB_Settings[DAB_INDEX].FreeButtons do
                DAB_Settings[DAB_INDEX].Buttons[button] = {Conditions={}, Scripts={}, action=button};
                getglobal("DAB_ActionButton_"..button):Hide();
        end
end

function DAB_Initialize_NewSettings()
        if (not DAB_INITIALIZED) then return; end
        if (not DAB_Settings[DAB_INDEX]["INITIALIZED3.0H"]) then
                for i=1,DAB_NUM_BARS do
                        DAB_Settings[DAB_INDEX].ControlBox[i].changePageBar = 1;
                        DAB_Settings[DAB_INDEX].ControlBox[i].changePageType = 1;
                        DAB_Settings[DAB_INDEX].ControlBox[i].changePagePage = 1;
                end
        end
        if (not DAB_Settings[DAB_INDEX]["INITIALIZED3.1"]) then
                for bar=1, DAB_NUM_BARS do
                        DAB_Settings[DAB_INDEX].Bar[bar].pages = {};
                        DAB_Settings[DAB_INDEX].Bar[bar].pageconditions = {};
                        for page=1, DAB_Settings[DAB_INDEX].Bar[bar].numBars do
                                DAB_Settings[DAB_INDEX].Bar[bar].pages[page] = {};
                                DAB_Settings[DAB_INDEX].Bar[bar].pageconditions[page] = {};
                                local count = 0;
                                for b=1,DAB_NUM_BUTTONS do
                                        if (DAB_Settings[DAB_INDEX].Buttons[b].Bar == bar and DAB_Settings[DAB_INDEX].Buttons[b].Bar2 == page) then
                                                count = count + 1;
                                                DAB_Settings[DAB_INDEX].Bar[bar].pages[page][count] = b;
                                                DAB_Settings[DAB_INDEX].Bar[bar].pageconditions[page][count] = {};
                                                DL_Copy_Table(DAB_Settings[DAB_INDEX].Buttons[b].Conditions, DAB_Settings[DAB_INDEX].Bar[bar].pageconditions[page][count]);
                                        end
                                end
                        end
                end
                local count = {};
                for i=1,DAB_NUM_BUTTONS do
                        DAB_Settings[DAB_INDEX].Buttons[i].action = i;
                        local bar = DAB_Settings[DAB_INDEX].Buttons[i].Bar;
                        local page = DAB_Settings[DAB_INDEX].Buttons[i].Bar2;
                        DAB_Settings[DAB_INDEX].Buttons[i].Bar2 = nil;
                        if (bar and bar ~= "F" and page > 1) then
                                tinsert(DAB_Settings[DAB_INDEX].FreeButtons, i);
                                DAB_Settings[DAB_INDEX].Buttons[i].Bar = nil;
                                DAB_Settings[DAB_INDEX].Buttons[i].Conditions={};
                                DAB_Settings[DAB_INDEX].Buttons[i].Scripts={};
                        end
                end
        end
        -- Fixing some corrupted settings from the first 3.1 beta
        for bar = 1,10 do
                for page=1, DAB_Settings[DAB_INDEX].Bar[bar].numBars do
                        if (not DAB_Settings[DAB_INDEX].Bar[bar].pages) then
                                DAB_Settings[DAB_INDEX].Bar[bar].pages = {};
                        end
                        if (not DAB_Settings[DAB_INDEX].Bar[bar].pageconditions) then
                                DAB_Settings[DAB_INDEX].Bar[bar].pageconditions = {};
                        end
                        if (not DAB_Settings[DAB_INDEX].Bar[bar].pages[page]) then
                                DAB_Settings[DAB_INDEX].Bar[bar].pages[page] = {};
                                for button = 1, DAB_Settings[DAB_INDEX].Bar[bar].numButtons do
                                        DAB_Settings[DAB_INDEX].Bar[bar].pages[page][button] = 1;
                                end
                        end
                        if (not DAB_Settings[DAB_INDEX].Bar[bar].pageconditions[page]) then
                                DAB_Settings[DAB_INDEX].Bar[bar].pageconditions[page] = {};
                                for button = 1, DAB_Settings[DAB_INDEX].Bar[bar].numButtons do
                                        DAB_Settings[DAB_INDEX].Bar[bar].pageconditions[page][button] = {};
                                end
                        end
                        for button = 1, DAB_Settings[DAB_INDEX].Bar[bar].numButtons do
                                if (not DAB_Settings[DAB_INDEX].Bar[bar].pageconditions[page][button]) then
                                        DAB_Settings[DAB_INDEX].Bar[bar].pageconditions[page][button] = {};
                                end
                                if (not DAB_Settings[DAB_INDEX].Bar[bar].pages[page][button]) then
                                        DAB_Settings[DAB_INDEX].Bar[bar].pages[page][button] = 1;
                                end
                        end
                end
        end
        if (not DAB_Settings[DAB_INDEX]["INITIALIZED3.1g"]) then
                DAB_Settings[DAB_INDEX].SelfCast = 1;
                DAB_Settings[DAB_INDEX].DragLockOverride = 2;
                DAB_Settings[DAB_INDEX].ButtonLockOverride = 3;
                DAB_Settings[DAB_INDEX].CDFormat = 1;
        end
        if (not DAB_Settings[DAB_INDEX]["INITIALIZED3.1i"]) then
                DAB_Settings[DAB_INDEX].OtherBar[11].Cooldown = {color={r=1, g=1, b=0}, size=16, font="Fonts\\FRIZQT__.TTF"};
                DAB_Settings[DAB_INDEX].OtherBar[12].Cooldown = {color={r=1, g=1, b=0}, size=16, font="Fonts\\FRIZQT__.TTF"};
        end
        if (not DAB_Settings[DAB_INDEX]["INITIALIZED3.16"]) then
                DAB_Settings[DAB_INDEX].MainMenuBar.keyringscale = 1
        end
        DAB_Settings[DAB_INDEX]["INITIALIZED3.0H"] = 1;
        DAB_Settings[DAB_INDEX]["INITIALIZED3.1"] = 1;
        DAB_Settings[DAB_INDEX]["INITIALIZED3.1g"] = 1;
        DAB_Settings[DAB_INDEX]["INITIALIZED3.1i"] = 1;
        DAB_Settings[DAB_INDEX]["INITIALIZED3.16"] = 1;
end

function DAB_Compile_Scripts(object, index)
        for i = 1, 14 do
                local script = DAB_Settings[DAB_INDEX][object][index].Scripts[i];
                local name = DL_Get_MenuText(DAB_SCRIPTS, i);
                if (string.sub(name, -2) == " *") then
                        name = string.sub(name, 1, -2);
                end
                if (i == 2) then
                        name = "OnClickAfter"
                elseif (i == 12) then
                        name = "OnClickBefore"
                elseif (i == 10) then
                        name = "OnKeybindingDownAfter"
                elseif (i == 13) then
                        name = "OnKeybindingDownBefore"
                elseif (i == 11) then
                        name = "OnKeybindingUpAfter"
                elseif (i == 14) then
                        name = "OnKeybindingUpBefore"
                end
                if (script and script ~= "") then
                        RunScript("function DAB_"..object.."_"..index.."_"..name.."(param)\n"..script.."\nend");
                else
                        RunScript("DAB_"..object.."_"..index.."_"..name.." = nil");
                end
        end
        if (getglobal("DAB_"..object.."_"..index.."_OnLoad")) then
                if (object == "Bar") then
                        this = getglobal("DAB_ActionBar_"..index);
                else
                        this = getglobal("DAB_ActionButton_"..index);
                end
                getglobal("DAB_"..object.."_"..index.."_OnLoad")();
        end
end

function DAB_Conditions()
        DL_Alphabetic_Insert(DL_CONDITIONS_MENU, { text="Bar's Current Page", value=200, params=200, desc="Detects what page the specified bar is currently on." }, "text", 2);
        DL_CheckCondition[200] = function(conditions)
                if (DL_Compare(DAB_Bar_GetRealPage(conditions.bar), conditions.number, conditions.compare)) then
                        return true;
                end
        end
end

function DAB_Load_Options()
        if (DAB_Options) then return; end
        UIParentLoadAddOn("DiscordActionBarsOptions");
        DL_Set_OptionsTitle("DAB_Options", "DiscordActionBarsOptions\\title", DAB_VERSION);
        DL_Layout_Menu("DAB_DropMenu", DAB_DropMenu_OnClick);
        DL_Layout_ScrollButtons("DAB_Options_BarBrowser_Button", 15, DAB_BarBrowser_OnClick);
        DL_Layout_ScrollButtons("DAB_KeybindingOptions_KeybindingBrowser_Button", 10);
        DAB_Options_BarBrowser_Button2:SetChecked(1);
        DAB_Options_BarBrowser_Button2Text:SetTextColor(1, 0, 0);
        DL_Layout_ScrollButtons("DAB_ScrollMenu_Button", 10, DAB_ScrollMenu_OnClick);
        DL_Layout_ScrollButtons("DAB_BarOptions_BarControl_ConditionMenu_Button", 5);
        DL_Layout_ScrollButtons("DAB_FloaterOptions_Control_ConditionMenu_Button", 5);
        DL_Layout_ScrollButtons("DAB_SetActionIDs_ScrollMenu_Button", 19);
        DL_Layout_ScrollButtons("DAB_ChangeActions_ScrollMenu_Button", 13);
        DL_Layout_ScrollButtons("DAB_BarOptions_ButtonControl_ButtonsMenu_Button", 4, DAB_Select_BarButton);
        DAB_BarOptions_BarAppearance_PaddingLabel:SetText(DAB_TEXT.Padding);
        DAB_BarOptions_BarAppearance_InsetsLabel:SetText(DAB_TEXT.Insets);
        DAB_OtherBarOptions_PaddingLabel:SetText(DAB_TEXT.Padding);
        DAB_OtherBarOptions_InsetsLabel:SetText(DAB_TEXT.Insets);
        DAB_BarOptions_Label_InsetsLabel:SetText(DAB_TEXT.Insets);
        DAB_BarOptions_ButtonAppearance_PaddingLabel:SetText(DAB_TEXT.ButtonBorderPadding);
        DAB_BarOptions_ButtonAppearance_TextLabel:SetText(DAB_TEXT.ButtonText);
        DAB_BarOptions_ButtonAppearance_TextureLabel:SetText(DAB_TEXT.ButtonTextures);
        DAB_BarOptions_ButtonAppearance_ColorLabel:SetText(DAB_TEXT.ButtonConditionalColor);
        DAB_BarOptions_BarControl_ParamLabel:SetText(DAB_TEXT.Parameters);
        DAB_BarOptions_BarControl_ResponseLabel:SetText(DAB_TEXT.Parameters);
        DAB_NumButtons_ButtonLabel:SetText(DAB_TEXT.Buttons);
        DAB_NumButtons_PagesLabel:SetText(DAB_TEXT.Pages);
        DAB_NumButtons_Floaters_Label:SetText(DAB_TEXT.Floaters);
        DAB_NumButtons_Floaters_Label:SetTextColor(1, 1, 0);
        DAB_CBoxOptions_Config_AnchorLabel:SetText(DAB_TEXT.AnchorFrame);
        DAB_CBoxOptions_Config_AnchorPointLabel:SetText(DAB_TEXT.AnchorPoint);
        DAB_CBoxOptions_Config_AnchorToLabel:SetText(DAB_TEXT.AnchorTo);
        DAB_CBoxOptions_Config_HideLabel:SetText(DAB_TEXT.Hide);
        DAB_CBoxOptions_Config_BorderLabel:SetText(DAB_TEXT.Border);
        DAB_CBoxOptions_Config_WidthLabel:SetText(DAB_TEXT.Width);
        DAB_CBoxOptions_Config_TextureLabel:SetText(DAB_TEXT.Texture);
        DAB_FloaterOptions_AdvConfig_PaddingLabel:SetText(DAB_TEXT.ButtonBorderPadding);
        DAB_FloaterOptions_AdvConfig_TextLabel:SetText(DAB_TEXT.ButtonText);
        DAB_KeybindingOptions_KeybindingBrowser_OptionsLabel:SetText(DAB_TEXT.Options);
        DAB_KeybindingOptions_KeybindingBrowser_Key1Label:SetText(DAB_TEXT.Key1);
        DAB_KeybindingOptions_KeybindingBrowser_Key2Label:SetText(DAB_TEXT.Key2);
        DL_Init_MenuControl(DAB_SetActionIDs_FilterMenu1, 1);
        DAB_Init_BarOptions();
        DAB_Init_MainMenuOptions();
        DAB_Init_MiscOptions();
        DAB_Set_OptionsScale(DAB_Settings[DAB_INDEX].optionsScale);
        DAB_Init_ButtonLayout();
        DL_Update_Forms();
        DAB_Update_ScriptsList();
        DAB_BarBrowser_Update();
        DAB_Update_ActionIDsList();
end

function DAB_Load_DefaultSettings()
        DAB_Settings[DAB_INDEX] = {};
        if (DAB_DEFAULT_SETTINGS) then
                DL_Copy_Table(DAB_DEFAULT_SETTINGS, DAB_Settings[DAB_INDEX]);
        else
                return true;
        end
end

function DAB_Delete_Profile(index)
        if ((not index) or index == "") then
                if (DAB_Options) then
                        index = DAB_MiscOptions_LoadProfile_Setting:GetText();
                end
                if ((not index) or index == "") then return; end
        end
        if (DAB_Options) then
                DAB_MiscOptions_LoadProfile_Setting:SetText("");
        end
        if (index == DAB_INDEX) then
                DL_Error("You cannot delete the profile you current have loaded.");
                return;
        end
        DAB_Settings[index] = nil;
        DAB_Update_ProfileList();
        DL_Feedback("Profile name "..index.." deleted.");
end

function DAB_Load_Profile(index)
        if (not DAB_INITIALIZED) then return; end
        if ((not index) or index == "") then
                if (DAB_Options) then
                        index = DAB_MiscOptions_LoadProfile_Setting:GetText();
                end
                if ((not index) or index == "") then return; end
        end
        if (index == DAB_INDEX) then return; end
        if (DAB_Options) then
                DAB_MiscOptions_LoadProfile_Setting:SetText("");
        end
        DAB_INDEX = index;
        DAB_Settings[DAB_PROFILE_INDEX] = index;
        DAB_Initialize_Everything();
        DL_Feedback("Profile named "..index.." loaded.");
end

function DAB_SafeLoad_Profile(index)
        if (not DAB_INITIALIZED) then return; end
        if ((not index) or index == "") then
                if (DAB_Options) then
                        index = DAB_MiscOptions_LoadProfile_Setting:GetText();
                end
                if ((not index) or index == "") then return; end
        end
        if (index == DAB_INDEX) then return; end
        DAB_Settings[DAB_PROFILE_INDEX] = index;
        ReloadUI();
end

function DAB_New_Profile(index)
        if ((not index) or index == "") then
                if (DAB_Options) then
                        index = DAB_MiscOptions_NewProfile:GetText();
                end
                if ((not index) or index == "") then return; end
        end
        if (DAB_Options) then
                DAB_MiscOptions_NewProfile:SetText("");
                DAB_MiscOptions_NewProfile:ClearFocus();
        end
        if (DAB_Settings[index]) then
                DL_Error("You are trying to create a new profile with the same name as another profile.  You must delete the other profile first.");
                return;
        elseif (string.find(index, " :: ")) then
                DL_Error("You tried to create a profile using the reserved characters ::.  Use a different name.");
                return;
        elseif (index == "Custom") then
                DL_Error("You tried to create a profile using the reserved word Custom.  Use a different name.");
                return;
        end
        DAB_Settings[index] = {};
        DL_Copy_Table(DAB_Settings[DAB_INDEX], DAB_Settings[index]);
        DAB_INDEX = index;
        DAB_Settings[DAB_PROFILE_INDEX] = index;
        DL_Feedback("New profile, "..index..", created.");
        DAB_Update_ProfileList();
        if (DAB_Options) then
                DAB_MiscOptions_CurrentProfile:SetText(DAB_TEXT.CurrentProfile.." |cFFFFFFFF"..index);
        end
end

function DAB_Set_Keybindings()
        local binding, key1, key2;
        for i=1,120 do
                binding = "DAB_"..i;
                key1, key2 = GetBindingKey(binding);
                if (key1) then SetBinding(key1, ""); end
                if (key2) then SetBinding(key2, ""); end
                if (DAB_Settings[DAB_INDEX].Keybindings[i].key1) then
                        SetBinding(DAB_Settings[DAB_INDEX].Keybindings[i].key1, "");
                        SetBinding(DAB_Settings[DAB_INDEX].Keybindings[i].key1, binding);
                end
                if (DAB_Settings[DAB_INDEX].Keybindings[i].key2) then
                        SetBinding(DAB_Settings[DAB_INDEX].Keybindings[i].key2, "");
                        SetBinding(DAB_Settings[DAB_INDEX].Keybindings[i].key2, binding);
                end
        end
        SaveBindings(GetCurrentBindingSet());
end

function DAB_Toggle_State(setting, frame)
        if (setting) then
                if (not frame.oldShow) then
                        frame.oldShow = frame.Show;
                        frame.Show = function() end;
                end
                frame:Hide();
        else
                if (frame.oldShow) then
                        frame.Show = frame.oldShow;
                        frame.oldShow = nil;
                end
                frame:Show();
        end
end

function DAB_Update_ActionList()
        DAB_ACTIONS = {};
        for i=1, 120 do
                DAB_ACTIONS[i] = { text="["..i.."] "..DAB_Get_ActionName(i), value=i };
        end
end

function DAB_Update_AnchorsList()
        for i=1,10 do
                DL_AddToMenu(DL_ANCHOR_FRAMES, DAB_TEXT.Bar.." "..i, "DAB_ActionBar_"..i);
        end
        DL_AddToMenu(DL_ANCHOR_FRAMES, DAB_TEXT.PetBar, "DAB_OtherBar_Pet");
        DL_AddToMenu(DL_ANCHOR_FRAMES, DAB_TEXT.ShapeshiftBar, "DAB_OtherBar_Form");
        DL_AddToMenu(DL_ANCHOR_FRAMES, DAB_TEXT.BagBar, "DAB_OtherBar_Bag");
        DL_AddToMenu(DL_ANCHOR_FRAMES, DAB_TEXT.MenuBar, "DAB_OtherBar_Menu");
        for i=1,10 do
                DL_AddToMenu(DL_ANCHOR_FRAMES, DAB_TEXT.ControlBox.." "..i, "DAB_ControlBox_"..i);
        end
        for i=1,120 do
                if (DAB_Settings[DAB_INDEX].Floaters[i]) then
                        DL_AddToMenu(DL_ANCHOR_FRAMES, "[F "..i.."] "..DAB_Get_ActionName(DAB_Settings[DAB_INDEX].Buttons[i].action), "DAB_ActionButton_"..i);
                end
        end
        for i=1,10 do
                DL_AddToMenu(DL_ANCHOR_FRAMES, DAB_Settings[DAB_INDEX].Bar[i].Anchor.frame);
                DL_AddToMenu(DL_ANCHOR_FRAMES, DAB_Settings[DAB_INDEX].ControlBox[i].Anchor.frame);
        end
        for i=11,14 do
                DL_AddToMenu(DL_ANCHOR_FRAMES, DAB_Settings[DAB_INDEX].OtherBar[i].Anchor.frame);
        end
        for i in DAB_Settings[DAB_INDEX].Floaters do
                DL_AddToMenu(DL_ANCHOR_FRAMES, DAB_Settings[DAB_INDEX].Floaters[i].Anchor.frame);
        end
end

function DAB_Update_EventList()
        for event, val in DAB_Settings[DAB_INDEX].CustomEvents do
                DL_AddToMenu(DAB_EVENTS, val.text, event, val.desc);
        end
        for index,val in DAB_EVENTS do
                if (DAB_Settings[DAB_INDEX].EventMacros[val.value] and DAB_Settings[DAB_INDEX].EventMacros[val.value] ~= "") then
                        if (string.sub(DAB_EVENTS[index].text, -2) ~= " *") then
                                DAB_EVENTS[index].text = DAB_EVENTS[index].text.." *";
                        end
                elseif (string.sub(DAB_EVENTS[index].text, -2) == " *") then
                        DAB_EVENTS[index].text = string.sub(DAB_EVENTS[index].text, 1, -2);
                end
        end
end

function DAB_Update_FloaterList()
        DAB_FLOATERS = {};
        for i=1,120 do
                if (DAB_Settings[DAB_INDEX].Floaters[i]) then
                        DL_AddToMenu(DAB_FLOATERS, "[F "..i.."] "..DAB_Get_ActionName(DAB_Settings[DAB_INDEX].Buttons[i].action), i);
                end
        end
end

function DAB_Update_FontList()
        for i=1,10 do
                DL_AddToMenu(DL_FONTS_LIST, DAB_Settings[DAB_INDEX].Bar[i].Keybinding.font, nil, 1);
                DL_AddToMenu(DL_FONTS_LIST, DAB_Settings[DAB_INDEX].Bar[i].Cooldown.font, nil, 1);
                DL_AddToMenu(DL_FONTS_LIST, DAB_Settings[DAB_INDEX].Bar[i].Macro.font, nil, 1);
                DL_AddToMenu(DL_FONTS_LIST, DAB_Settings[DAB_INDEX].Bar[i].Count.font, nil, 1);
                DL_AddToMenu(DL_FONTS_LIST, DAB_Settings[DAB_INDEX].Bar[i].Label.font, nil, 1);
                DL_AddToMenu(DL_FONTS_LIST, DAB_Settings[DAB_INDEX].ControlBox[i].font, nil, 1);
        end
        for i in DAB_Settings[DAB_INDEX].Floaters do
                DL_AddToMenu(DL_FONTS_LIST, DAB_Settings[DAB_INDEX].Floaters[i].Keybinding.font);
                DL_AddToMenu(DL_FONTS_LIST, DAB_Settings[DAB_INDEX].Floaters[i].Cooldown.font);
                DL_AddToMenu(DL_FONTS_LIST, DAB_Settings[DAB_INDEX].Floaters[i].Macro.font);
                DL_AddToMenu(DL_FONTS_LIST, DAB_Settings[DAB_INDEX].Floaters[i].Count.font);
        end
end

function DAB_Update_GroupList()
        DAB_GROUPS = {};
        DAB_GROUPS[1] = {text=""};
        for i=1,10 do
                DAB_GROUPS[i + 1] = {text=i, value=i};
        end
        for i=1,10 do
                DL_AddToMenu(DAB_GROUPS, DAB_Settings[DAB_INDEX].Bar[i].cbgroup);
        end
        for i=11,14 do
                DL_AddToMenu(DAB_GROUPS, DAB_Settings[DAB_INDEX].OtherBar[i].cbgroup);
        end
        for i in DAB_Settings[DAB_INDEX].Floaters do
                DL_AddToMenu(DAB_GROUPS, DAB_Settings[DAB_INDEX].Floaters[i].cbgroup);
        end
end

function DAB_Update_Keybindings()
        if (not DAB_INITIALIZED) then return; end
        local kb, name, kbtext, button;
        for i=1,120 do
                getglobal("DAB_ActionButton_"..i.."_HotKey"):SetText("");
                getglobal("DAB_ActionButton_"..i).basekb = "";
        end
        for i=1,120 do
                kb = DAB_Settings[DAB_INDEX].Keybindings[i];
                kbtext = DL_Get_KeybindingText("DAB_"..i, nil, 1);
                if (kb.option == 1 or kb.option == 10) then
                        name = "|cFF"..DAB_KB_COLOR[kb.option][kb.suboption].."   ";
                elseif (kb.option == 12) then
                        local _, _, bar, page = string.find(kb.suboption, "(%d*)_(%d*)");
                        bar = tonumber(bar);
                        page = tonumber(page);
                        name = "|cFF"..DAB_KB_COLOR[kb.option][bar].."   ";
                else
                        name = "|cFF"..DAB_KB_COLOR[kb.option].."   ";
                end
                if (kb.option == 1) then
                        name = name.."["..DAB_TEXT.Bar.." "..kb.suboption.."] "..DAB_Settings[DAB_INDEX].Bar[kb.suboption].Label.text.." :: "..DAB_TEXT.Button.." "..kb.suboption2;
                        for page = 1, DAB_Settings[DAB_INDEX].Bar[kb.suboption].numBars do
                                local button = DAB_Get_BarButtonID(kb.suboption, page, kb.suboption2);
                                if (button and kbtext ~= "") then
                                        getglobal("DAB_ActionButton_"..button.."_HotKey"):SetText(kbtext);
                                        getglobal("DAB_ActionButton_"..button).basekb = kbtext;
                                end
                        end
                elseif (kb.option == 2) then
                        name = name..DAB_TEXT.Group.." "..kb.suboption.." :: "..DAB_TEXT.Button.." "..kb.suboption2;
                elseif (kb.option == 3) then
                        name = name.."[F "..kb.suboption.."] "..DAB_Get_ActionName(DAB_Settings[DAB_INDEX].Buttons[kb.suboption].action);
                        if (kbtext ~= "") then
                                getglobal("DAB_ActionButton_"..kb.suboption.."_HotKey"):SetText(kbtext);
                        end
                elseif (kb.option == 4) then
                        name = name..DAB_TEXT.ControlBox.." "..kb.suboption;
                elseif (kb.option == 5) then
                        name = name..DAB_TEXT.SetKBGroup;
                        name = string.gsub(name, "$g", kb.suboption);
                        name = string.gsub(name, "$b", kb.suboption2);
                elseif (kb.option == 6) then
                        name = name..DAB_TEXT.SetBarPage;
                        name = string.gsub(name, "$b", kb.suboption);
                        name = string.gsub(name, "$p", kb.suboption2);
                elseif (kb.option == 7) then
                        name = name..DAB_TEXT.BarPageUp;
                        name = string.gsub(name, "$b", kb.suboption);
                elseif (kb.option == 8) then
                        name = name..DAB_TEXT.BarPageDown;
                        name = string.gsub(name, "$b", kb.suboption);
                elseif (kb.option == 9) then
                        if (DAB_VARIABLE_KEYBINDINGS[kb.suboption] ~= 1) then
                                DAB_VARIABLE_KEYBINDINGS[kb.suboption] = 2;
                        end
                        name = name..DAB_TEXT.VariableKeybinding;
                        name = string.gsub(name, "$n", kb.suboption);
                elseif (kb.option == 10) then
                        name = name.."Self-cast ["..DAB_TEXT.Bar.." "..kb.suboption.."] "..DAB_Settings[DAB_INDEX].Bar[kb.suboption].Label.text.." :: "..DAB_TEXT.Button.." "..kb.suboption2;
                elseif (kb.option == 11) then
                        name = name.."Self-cast [F "..kb.suboption.."] "..DAB_Get_ActionName(DAB_Settings[DAB_INDEX].Buttons[kb.suboption].action);
                elseif (kb.option == 12) then
                        local _, _, bar, page = string.find(kb.suboption, "(%d*)_(%d*)");
                        bar = tonumber(bar);
                        page = tonumber(page);
                        name = name.."["..DAB_TEXT.Bar.." "..bar..", "..DAB_TEXT.Page.." "..page.."] "..DAB_Settings[DAB_INDEX].Bar[bar].Label.text.." :: "..DAB_TEXT.Button.." "..kb.suboption2;
                        local button = DAB_Get_BarButtonID(bar, page, kb.suboption2);
                        if (button and kbtext ~= "") then
                                getglobal("DAB_ActionButton_"..button.."_HotKey"):SetText(kbtext);
                                getglobal("DAB_ActionButton_"..button).basekb = kbtext;
                        end
                elseif (kb.option == 13) then
                        name = name.."Use Action: "..DAB_Get_ActionName(kb.suboption);
                elseif (kb.option == 14) then
                        name = name.."Self-cast Action: "..DAB_Get_ActionName(kb.suboption);
                else
                        name = name..DAB_TEXT.Undefined;
                end
                setglobal("BINDING_NAME_DAB_"..i, name);
        end

        for group, bar in DAB_Settings[DAB_INDEX].KBGroups do
                DAB_Set_KeybindingGroup(group, bar);
        end
end

function DAB_Update_Locations()
        for frameName, settings in DAB_Settings[DAB_INDEX].FrameLocs do
                frame = getglobal(frameName);
                frame:ClearAllPoints();
                frame:SetPoint(settings.point, settings.frame, settings.to, settings.x, settings.y);
        end
end

function DAB_Update_MainMenuBar()
        local settings = DAB_Settings[DAB_INDEX].MainMenuBar;
        BonusActionBarFrame.Show = function() end;
        BonusActionBarFrame:SetScript("OnEvent", function() end);
        BonusActionBarFrame:Hide();
        for i=1,12 do
                local button = getglobal("ActionButton"..i);
                button.Show = function() end;
                button:SetScript("OnEvent", function() end);
                button:SetParent(UIParent);
                button:Hide();
                button = getglobal("BonusActionButton"..i);
                button.Show = function() end;
                button:SetScript("OnEvent", function() end);
                button:SetParent(UIParent);
                button:Hide();
                if (i <= 10) then
                        button = getglobal("ShapeshiftButton"..i.."NormalTexture");
                        button.Show = function() end;
                        button:SetAlpha(0);
                        button:Hide();
                end
        end
        DAB_Toggle_State(settings.hideEverything, MainMenuBar);
        DAB_Toggle_State(settings.hideEverything, MainMenuBarArtFrame);
        if (settings.showXP) then
                MainMenuExpBar:SetParent(DAB_XPBar);
                MainMenuExpBar:SetFrameStrata("LOW");
                MainMenuExpBar:SetFrameLevel(DAB_XPBar:GetFrameLevel() - 1);
                MainMenuExpBar:Show();
                MainMenuExpBar:ClearAllPoints();
                MainMenuExpBar:SetPoint("TOP", DAB_XPBar, "TOP", 0, 0);
                ExhaustionTick:SetParent(MainMenuExpBar);
                DAB_XPBar:Show();
                MainMenuBarPerformanceBarFrame:Hide();
                MainMenuExpBar:SetStatusBarColor(settings.xpcolor.r, settings.xpcolor.g, settings.xpcolor.b);
                for i=1,4 do
                        if (settings.hideXPborder) then
                                getglobal("DAB_XPBar_"..i):Hide();
                        else
                                getglobal("DAB_XPBar_"..i):Show();
                        end
                end
                DAB_XPBar:SetScale(settings.xpscale);
                DAB_XPBar:SetAlpha(settings.xpalpha);
                ReputationWatchBar:SetParent(DAB_XPBar);
                ReputationWatchBar:SetFrameStrata("LOW");
        else
                ReputationWatchBar:SetParent(MainMenuBar);
                MainMenuExpBar:SetParent(MainMenuBar);
                MainMenuExpBar:ClearAllPoints();
                MainMenuExpBar:SetPoint("TOP", MainMenuBar, "TOP", 0, 0);
                DAB_XPBar:Hide();
        end
        if (settings.showLatency) then
                DAB_LatencyBar:Show();
                MainMenuBarPerformanceBarFrame:SetParent(DAB_LatencyBar);
                MainMenuBarPerformanceBarFrame:SetFrameStrata("BACKGROUND");
                MainMenuBarPerformanceBarFrame:Show();
                if (not MainMenuBarPerformanceBarFrame.OLD_SetPoint) then
                        MainMenuBarPerformanceBarFrame:ClearAllPoints();
                        MainMenuBarPerformanceBarFrame:SetPoint("CENTER", DAB_LatencyBar, "CENTER", 4, 0);
                        MainMenuBarPerformanceBarFrame.OLD_SetPoint = MainMenuBarPerformanceBarFrame.SetPoint
                        MainMenuBarPerformanceBarFrame.SetPoint = function() MainMenuBarPerformanceBarFrame:OLD_SetPoint("CENTER", DAB_LatencyBar, "CENTER", 4, 0); end
                end
                DAB_LatencyBar:SetScale(settings.latencyscale);
        else
                DAB_LatencyBar:Hide();
                MainMenuBarPerformanceBarFrame:SetParent(MainMenuExpBar);
                MainMenuBarPerformanceBarFrame:SetFrameStrata("LOW");
                if (MainMenuBarPerformanceBarFrame.OLD_SetPoint) then
                        MainMenuBarPerformanceBarFrame.SetPoint = MainMenuBarPerformanceBarFrame.OLD_SetPoint
                        MainMenuBarPerformanceBarFrame.OLD_SetPoint = nil
                end
                MainMenuBarPerformanceBarFrame:ClearAllPoints();
                MainMenuBarPerformanceBarFrame:SetPoint("BOTTOMRIGHT", MainMenuExpBar, "BOTTOMRIGHT", -227, -50);
        end
        if (settings.showKeyring) then
                DAB_KeyringBox:Show()
                KeyRingButton:SetParent(DAB_KeyringBox)
                KeyRingButton:SetFrameStrata("LOW")
                KeyRingButton:Show()
                if (not KeyRingButton.OLD_SetPoint) then
                        KeyRingButton:ClearAllPoints()
                        KeyRingButton:SetPoint("CENTER", DAB_KeyringBox, "CENTER", 0, 0)
                        KeyRingButton.OLD_SetPoint = KeyRingButton.SetPoint
                        KeyRingButton.SetPoint = function() KeyRingButton:OLD_SetPoint("CENTER", DAB_KeyringBox, "CENTER", 0, 0) end
                end
                DAB_KeyringBox:SetScale(settings.keyringscale)
        else
                DAB_KeyringBox:Hide()
                KeyRingButton:SetParent(MainMenuBarArtFrame)
                if (KeyRingButton.OLD_SetPoint) then
                        KeyRingButton.SetPoint = KeyRingButton.OLD_SetPoint
                        KeyRingButton.OLD_SetPoint = nil
                end
                KeyRingButton:ClearAllPoints()
                KeyRingButton:SetPoint("RIGHT", CharacterBag3Slot, "LEFT", -5, 0)
        end
        ReputationWatchBar_Update();
end

function DAB_Update_ObjectList()
        DAB_BAR_LIST = {};
        DAB_BAR_LIST[1] = { text=DAB_TEXT.Bars, header=true };
        for i=1,10 do
                DAB_BAR_LIST[i + 1] = { text="[Bar "..i.."] "..DAB_Settings[DAB_INDEX].Bar[i].Label.text, value=i };
                DAB_BAR_LIST[i + 17] = { text="[CB "..i.."] "..DAB_Settings[DAB_INDEX].ControlBox[i].text, value=i };
        end
        DAB_BAR_LIST[12] = { text=DAB_TEXT.OtherBars, header=true };
        DAB_BAR_LIST[13] = { text=DAB_TEXT.PetBar, value=11 };
        DAB_BAR_LIST[14] = { text=DAB_TEXT.ShapeshiftBar, value=12 };
        DAB_BAR_LIST[15] = { text=DAB_TEXT.BagBar, value=13 };
        DAB_BAR_LIST[16] = { text=DAB_TEXT.MenuBar, value=14 };
        DAB_BAR_LIST[17] = { text=DAB_TEXT.ControlBoxes, header=true };
        DAB_BAR_LIST[28] = { text=DAB_TEXT.Floaters, header=true };
        local index = 29;
        for i=1,120 do
                if (DAB_Settings[DAB_INDEX].Floaters[i]) then
                        DAB_BAR_LIST[index] = { text="[F "..i.."] "..DAB_Get_ActionName(DAB_Settings[DAB_INDEX].Buttons[i].action), value=i };
                        index = index + 1;
                end
        end
end

function DAB_Update_ProfileList()
        DAB_PROFILES = {};
        for profile in DAB_Settings do
                if ((not string.find(profile, " :: ")) and profile ~= "INITIALIZED3.0") then
                        if (profile == DAB_TEXT.Default) then
                                DL_AddToMenu(DAB_PROFILES, profile, nil, "All new characters will start out using this profile.");
                        elseif (profile == "Custom") then
                                DL_AddToMenu(DAB_PROFILES, profile, nil, "You cannot make changes to this profile.  It is used only to load settings from your current DAB_Custom.lua file.  Start a new profile before making any changes.");
                        else
                                DL_AddToMenu(DAB_PROFILES, profile);
                        end
                end
        end
end

function DAB_Update_TextureList()
        for i=1,10 do
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].Bar[i].Background.texture, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].Bar[i].Background.btexture, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].Bar[i].buttonbg, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].Bar[i].checked, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].Bar[i].highlight, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].Bar[i].Label.texture, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].Bar[i].Label.btexture, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].Bar[i].ButtonBorder.texture, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].ControlBox[i].texture, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].ControlBox[i].b1texture, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].ControlBox[i].b2texture, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].ControlBox[i].b3texture, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].ControlBox[i].b4texture, nil, 1);
        end
        for i=11,14 do
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].OtherBar[i].Background.texture, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].OtherBar[i].Background.btexture, nil, 1);
        end
        for i in DAB_Settings[DAB_INDEX].Floaters do
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].Floaters[i].buttonbg, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].Floaters[i].checked, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].Floaters[i].highlight, nil, 1);
                DL_AddToMenu(DL_TEXTURES_LIST, DAB_Settings[DAB_INDEX].Floaters[i].ButtonBorder.texture, nil, 1);
        end
end

function DAB_Update_UnitList()
        for i=1,10 do
                DL_AddToMenu(DL_UNITS_LIST, DAB_Settings[DAB_INDEX].Bar[i].target);
        end
        for i in DAB_Settings[DAB_INDEX].Floaters do
                DL_AddToMenu(DL_UNITS_LIST, DAB_Settings[DAB_INDEX].Floaters[i].target);
        end
end

function DAB_SaveBindings(flag)
        DAB_Old_SaveBindings(flag);
        DAB_Save_Keybindings();
        DAB_Update_Keybindings();
end

Generated by GNU Enscript 1.6.5.90.