vanilla-wow-addons – Rev 1
?pathlinks?
function DFM_Add_LoDFunc()
DFM_LoDFrame_Func:ClearFocus();
local func = DFM_LoDFrame_Func:GetText();
if (not getglobal(func)) then return; end
tinsert(DFM_Settings.LoadOnDemandFunctions, func);
DFM_LoDMenu_Update();
RunScript(string.gsub(DFM_LODHOOKFUNC, "$f", func));
DL_Hook(func, "DFM");
end
function DFM_AddNewFrame()
local frame = DFM_Options_AddFrame:GetText();
local name = DFM_Options_AddName:GetText();
if (name == "") then name = nil; end
local header = DFM_Options_AddHeader:GetText();
if (header == "") then header = nil; end
local children = DFM_Options_AddChildren:GetChecked();
local updateFlag;
if (DFM_SELECTED_INDEX and frame == DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame) then
updateFlag = 1;
end
DFM_Add_Frame(frame, name, header, children, nil, updateFlag);
DFM_Options_AddFrame:SetText("");
DFM_Options_AddName:SetText("");
DFM_Options_AddHeader:SetText("");
DFM_Options_AddFrame:ClearFocus();
DFM_Options_AddName:ClearFocus();
DFM_Options_AddHeader:ClearFocus();
DFM_Options_AddChildren:SetChecked(0);
end
function DFM_CheckBox_OnClick()
local value;
if (this:GetChecked()) then
value = 1;
end
DFM_Update_Setting(this:GetParent().index, value);
end
function DFM_ColorPicker_OnClick()
local basecolor = DFM_Get_Setting(this:GetParent().index);
if (not basecolor) then return; end
local color = {};
color.r = basecolor.r;
color.g = basecolor.g;
color.b = basecolor.b;
ColorPickerFrame.hasOpacity = nil;
ColorPickerFrame.previousValues = color;
ColorPickerFrame.cancelFunc = DFM_ColorPicker_ColorCancelled;
ColorPickerFrame.opacityFunc = DFM_ColorPicker_ColorChanged;
ColorPickerFrame.func = DFM_ColorPicker_ColorChanged;
ColorPickerFrame.colorBox = this:GetName();
ColorPickerFrame.index = this:GetParent().index;
ColorPickerFrame:SetColorRGB(color.r, color.g, color.b);
ColorPickerFrame:ClearAllPoints();
if (DFM_Options:GetRight() < UIParent:GetWidth() / 2) then
ColorPickerFrame:SetPoint("LEFT", "DFM_Options", "RIGHT", 10, 0);
else
ColorPickerFrame:SetPoint("RIGHT", "DFM_Options", "LEFT", -10, 0);
end
ColorPickerFrame:Show();
end
function DFM_ColorPicker_ColorCancelled()
local color = ColorPickerFrame.previousValues;
getglobal(ColorPickerFrame.colorBox):SetBackdropColor(color.r, color.g, color.b);
DFM_Update_Setting(ColorPickerFrame.index, color);
end
function DFM_ColorPicker_ColorChanged()
local r, g, b = ColorPickerFrame:GetColorRGB();
local color = { r=r, g=g, b=b };
getglobal(ColorPickerFrame.colorBox):SetBackdropColor(color.r, color.g, color.b);
DFM_Update_Setting(ColorPickerFrame.index, color);
end
function DFM_Copy_Settings()
if (not DFM_SELECTED_INDEX) then return; end
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
DFM_BUFFER = {};
DL_Copy_Table(DFM_Settings[DFM_INDEX][header][frame], DFM_BUFFER);
end
function DFM_Create_NewFrame()
local frameType = DFM_CreateFrameForm_FrameType_Setting:GetText();
local frame = DFM_CreateFrameForm_AddFrame:GetText();
local name = DFM_CreateFrameForm_AddName:GetText();
local header = DFM_CreateFrameForm_AddHeader:GetText();
if (header == "" or (not header)) then
header = DFM_TEXT.UserAdded;
end
if (name == "" or (not name)) then
name = frame;
end
DFM_Add_Frame(frame, name, header, nil, 1, nil, 1);
DFM_Settings[DFM_INDEX][header][frame].customFrame = 1;
DFM_Settings[DFM_INDEX][header][frame].frameType = frameType;
DFM_Initialize_Frame(header, frame);
DFM_CreateFrameForm_FrameType_Setting:SetText("Frame");
DFM_CreateFrameForm_AddFrame:SetText("");
DFM_CreateFrameForm_AddName:SetText("");
DFM_CreateFrameForm_AddHeader:SetText("");
DFM_Update_FrameList();
DFM_FrameMenu_Update();
DL_Feedback("Custom frame named "..name.." created beneath the "..header.." header.");
end
function DFM_Delete_LoDFunc()
local index = this:GetParent().index;
local func = DFM_Settings.LoadOnDemandFunctions[index];
table.remove(DFM_Settings.LoadOnDemandFunctions, index);
DFM_LoDMenu_Update();
local oldFunc = getglobal("DFM_Old_"..func);
func = getglobal(func);
func = oldFunc;
oldFunc = nil;
end
function DFM_Delete_Profile(index)
if (not index) then
if (DFM_Options) then
index = DFM_Options_LoadProfile_Setting:GetText();
if (not index or index == "") then return; end
else
return;
end
end
if (index == "Default") then
DL_Error("You cannot delete the Default profile.");
return;
elseif (index == DFM_INDEX) then
DL_Error("You cannot delete the profile you're currently using.");
return;
end
DFM_Settings[index] = nil;
DFM_Update_Profiles();
DFM_Options_LoadProfile_Setting:SetText("");
end
function DFM_DropMenu_OnClick()
if (DFM_DropMenu.controlbox) then
getglobal(DFM_DropMenu.controlbox):SetText(getglobal(this:GetName().."_Text"):GetText());
end
DFM_DropMenu:Hide();
if (DFM_DropMenu.index == "point" or DFM_DropMenu.index == "to") then
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
if (not DFM_Settings[DFM_INDEX][header][frame].Location) then return; end
DFM_Settings[DFM_INDEX][header][frame].Location[DFM_DropMenu.index] = this.value;
DFM_Initialize_FrameLocation(header, frame);
elseif (DFM_DropMenu.index == "headeroption") then
DFM_Settings[DFM_INDEX][DFM_FRAME_LIST[DFM_DropMenu.subindex].text] = nil;
DFM_SELECTED_INDEX = nil;
DFM_OPTIONS_LIST = {};
DFM_Update_FrameList();
DFM_FrameMenu_Update();
DFM_OptionsMenu_Update();
DFM_ReloadUIFrame:Show();
elseif (DFM_DropMenu.index == "FRAMETYPE") then
return;
elseif (DFM_DropMenu.index ~= "profile") then
DFM_Update_Setting(DFM_DropMenu.index, this.value);
end
end
function DFM_EditBox_OnEnterPressed(scrollMenu)
local value;
if (this.number) then
value = this:GetNumber();
if (not value) then
value = 0;
end
else
value = this:GetText();
if (not value) then
value = "";
end
end
this:ClearFocus();
this.prevvalue = value;
if (scrollMenu) then
DFM_Update_Setting(this:GetParent():GetParent().index, value);
else
DFM_Update_Setting(this:GetParent().index, value);
end
end
function DFM_FrameFinder_OnUpdate()
local obj = GetMouseFocus();
local name;
if (obj and obj.GetName) then
name = obj:GetName();
end
if (this.currentframe ~= name) then
this.currentframe = name;
DFM_FrameFinder_Update(obj);
end
end
function DFM_FrameFinder_Update(frame, setlock)
if (DFM_FINDER_LOCKED and (not setlock)) then return; end
if (setlock) then
DFM_FINDER_LOCKED = true;
DFM_FrameFinder_LockText:SetText(DFM_TEXT.Locked);
end
if (frame) then
local text = DFM_TEXT.MouseIsOver;
if (frame.GetName and frame:GetName()) then
text = text..frame:GetName();
else
text = text..DFM_TEXT.UnnamedFrame;
end
if (frame.GetParent and frame:GetParent() and frame:GetParent().GetName and frame:GetParent():GetName()) then
text = text..DFM_TEXT.FrameParent..frame:GetParent():GetName();
if (frame:GetParent().GetParent and frame:GetParent():GetParent() and frame:GetParent():GetParent().GetName and frame:GetParent():GetParent():GetName()) then
text = text..DFM_TEXT.FrameParentParent..frame:GetParent():GetParent():GetName();
end
end
if (frame.GetChildren) then
local children = {frame:GetChildren()};
if (children) then
text = text..DFM_TEXT.Children;
for _, child in children do
if (child.GetName and child:GetName()) then
text = text..child:GetName().."\n";
end
end
end
end
if (frame.GetRegions) then
local children = {frame:GetRegions()};
if (children) then
text = text..DFM_TEXT.Regions;
for _, child in children do
if (child.GetName and child:GetName()) then
text = text..child:GetName().."\n";
end
end
end
end
DFM_FrameFinder_ScrollFrame_Text:SetText(text);
else
DFM_FrameFinder_ScrollFrame_Text:SetText("");
end
end
function DFM_FrameMenu_OnClick()
DFM_DropMenu:Hide();
DFM_ScrollMenu:Hide();
for i=1,14 do
button = getglobal("DFM_Options_FrameMenu_Button"..i);
buttontext = getglobal("DFM_Options_FrameMenu_Button"..i.."Text");
if (button:GetID() == this:GetID()) then
button:SetChecked(1);
buttontext:SetTextColor(1, 0, 0);
buttontext:SetFont("Fonts\\FRIZQT__.TTF", 12);
elseif (button.headerFlag) then
button:SetChecked(0);
buttontext:SetTextColor(1, .82, 0);
buttontext:SetFont("Fonts\\MORPHEUS.ttf", 13);
else
button:SetChecked(0);
if (DFM_FRAME_LIST[button.index] and DFM_FRAME_LIST[button.index].modified) then
buttontext:SetTextColor(0, 1, 1);
else
buttontext:SetTextColor(1, 1, 1);
end
buttontext:SetFont("Fonts\\ARIALN.TTF", 12);
end
end
if (arg1 == "RightButton") then
DFM_FrameMenu_Update();
local oldIndex = this.index;
if (this.headerFlag) then
this.table = "DFM_HEADER_OPTIONS";
this.menu = "DFM_DropMenu";
this.subindex = this.index;
this.index = "headeroption";
else
this.table = "DFM_HEADERS_LIST";
this.menu = "DFM_ScrollMenu";
this.index = "scrolltoheader";
end
this:SetChecked(0);
DL_Show_Menu();
DFM_DropMenu.controlbox = nil;
this.index = oldIndex;
elseif (this.headerFlag) then
this:SetChecked(0);
getglobal(this:GetName().."Text"):SetTextColor(1, .82, 0);
getglobal(this:GetName().."Text"):SetFont("Fonts\\MORPHEUS.ttf", 13);
return;
elseif (IsShiftKeyDown()) then
DFM_FrameFinder:Show();
DFM_FrameFinder_Update(getglobal(DFM_FRAME_LIST[this.index].frame), 1);
DFM_FrameMenu_Update();
else
DFM_SELECTED_INDEX = this.index;
DFM_Options_AddFrame:SetText(DFM_FRAME_LIST[this.index].frame);
DFM_Options_AddName:SetText(DFM_FRAME_LIST[this.index].text);
DFM_Options_AddHeader:SetText(DFM_FRAME_LIST[this.index].header);
DFM_Options_AddChildren:SetChecked(0);
DFM_Update_OptionsList();
end
end
function DFM_FrameMenu_Update()
local numOptions = table.getn(DFM_FRAME_LIST);
local offset = FauxScrollFrame_GetOffset(DFM_Options_FrameMenu);
if (not offset) then
offset = 0;
end
local index, button;
for i=1, 14 do
button = getglobal("DFM_Options_FrameMenu_Button"..i);
buttontext = getglobal("DFM_Options_FrameMenu_Button"..i.."Text");
index = offset + i;
button.index = index;
button.desc = nil;
button.headerFlag = nil;
if ( DFM_FRAME_LIST[index] ) then
buttontext:SetText(DFM_FRAME_LIST[index].text);
buttontext:SetJustifyH("LEFT");
button:Show();
if (DFM_FRAME_LIST[index].headerFlag) then
buttontext:SetJustifyH("CENTER");
button:SetChecked(0);
buttontext:SetTextColor(1, .82, 0);
buttontext:SetFont("Fonts\\MORPHEUS.ttf", 13);
button.headerFlag = true;
elseif (DFM_SELECTED_INDEX == button.index) then
button:SetChecked(1);
buttontext:SetTextColor(1, 0, 0);
buttontext:SetFont("Fonts\\FRIZQT__.TTF", 12);
button.desc = DFM_FRAME_LIST[index].frame;
if (string.len(button.desc) > 23) then
button.desc = string.sub(button.desc, 1, 23).."\n"..string.sub(button.desc, 24);
end
button.desc = button.desc.."\n"..DFM_TEXT.Type..DFM_FRAME_LIST[index].frameType;
else
button:SetChecked(0);
if (DFM_FRAME_LIST[index].modified) then
buttontext:SetTextColor(0, 1, 1);
else
buttontext:SetTextColor(1, 1, 1);
end
buttontext:SetFont("Fonts\\ARIALN.TTF", 12);
button.desc = DFM_FRAME_LIST[index].frame;
if (string.len(button.desc) > 23) then
button.desc = string.sub(button.desc, 1, 23).."\n"..string.sub(button.desc, 24);
end
button.desc = button.desc.."\n"..DFM_TEXT.Type..DFM_FRAME_LIST[index].frameType;
end
else
button:Hide();
end
end
FauxScrollFrame_Update(DFM_Options_FrameMenu, numOptions, 14, 20 );
DFM_Options_FrameMenu:Show();
end
function DFM_Get_LocSettings(header, frame)
if (DFM_Settings[DFM_INDEX][header][frame].Location) then
return DFM_Settings[DFM_INDEX][header][frame].Location;
else
frame = getglobal(frame);
if (frame.GetNumPoints and frame:GetNumPoints()) then
local point, relativeObject, relativePoint, x, y = frame:GetPoint(1);
if (not relativeObject) then
relativeObject = UIParent;
end
return {frame=relativeObject:GetName(), point=point, to=relativePoint, x=DL_round(x, 1), y=DL_round(y, 1)};
else
local x, y;
if (frame.GetCenter) then
x, y = DL_Get_Offsets(getglobal(frame), UIParent, "CENTER", "CENTER");
end
if (not x) then x=0; end
if (not y) then y=0; end
x = DL_round(x, 1);
y = DL_round(y, 1);
return {frame="UIParent", point="CENTER", to="CENTER", x=x, y=y};
end
end
end
function DFM_Get_MethodSetting(method, index)
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
if (DFM_Settings[DFM_INDEX][header][frame]) then
if (DFM_Settings[DFM_INDEX][header][frame][method]) then
return DFM_Settings[DFM_INDEX][header][frame][method][index];
end
end
end
function DFM_Get_Setting(index)
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
local method = DFM_OPTIONS_LIST[index].method;
local param = DFM_OPTIONS_LIST[index].param;
if (DFM_Settings[DFM_INDEX][header][frame]) then
if (index == 1) then
return DFM_Settings[DFM_INDEX][header][frame].forceHide;
elseif (DFM_Settings[DFM_INDEX][header][frame][method]) then
return DFM_Settings[DFM_INDEX][header][frame][method][param];
end
end
end
function DFM_Init_Settings(method)
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
if (not DFM_Settings[DFM_INDEX][header][frame][method]) then
DFM_Settings[DFM_INDEX][header][frame][method] = {};
end
for param,value in DFM_METHODS_LIST[method].options do
if (not DFM_Settings[DFM_INDEX][header][frame][method][param]) then
DFM_Settings[DFM_INDEX][header][frame][method][param] = value.default;
end
end
end
function DFM_LockCheckBox_OnClick()
if (this:GetChecked()) then
DFM_Update_MethodSetting(this.method, "lock", 1);
else
DFM_Update_MethodSetting(this.method, "lock");
DFM_ReloadUIFrame:Show();
end
end
function DFM_LockLocationCheckBox_OnClick()
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
if (this:GetChecked()) then
if (not DFM_Settings[DFM_INDEX][header][frame].Location) then
DFM_Settings[DFM_INDEX][header][frame].Location = DFM_Get_LocSettings(header, frame);
end
DFM_Settings[DFM_INDEX][header][frame].Location.lock = 1;
else
DFM_Settings[DFM_INDEX][header][frame].Location.lock = nil;
end
DFM_Initialize_FrameLocation(header, frame);
end
function DFM_LoDMenu_Update()
local numOptions = table.getn(DFM_Settings.LoadOnDemandFunctions);
local offset = FauxScrollFrame_GetOffset(DFM_LoDFrame_Menu);
local index, button;
for i=1, 7 do
button = getglobal("DFM_LoDFrame_Menu_Button"..i);
buttontext = getglobal("DFM_LoDFrame_Menu_Button"..i.."_Text");
index = offset + i;
button.index = index;
if ( DFM_Settings.LoadOnDemandFunctions[index] ) then
buttontext:SetText(DFM_Settings.LoadOnDemandFunctions[index]);
button:Show();
else
button:Hide();
end
end
FauxScrollFrame_Update(DFM_LoDFrame_Menu, numOptions, 7, 20 );
end
function DFM_MinusButton_OnClick()
local value = this:GetParent():GetNumber();
if (not value) then
value = 0;
end
value = value - 1;
this:GetParent():SetText(value);
DFM_Update_Setting(this:GetParent():GetParent().index, value);
end
function DFM_Nudge(button, dragframe)
if (not DFM_SELECTED_INDEX) then return; end
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
if (not DFM_Settings[DFM_INDEX][header][frame].Location) then return; end
if (not DFM_Settings[DFM_INDEX][header][frame].Location.use) then return; end
local dir = this:GetID();
local amt = 1;
if (button == "RightButton") then
amt = 10;
elseif (button == "MiddleButton") then
amt = 3;
end
local x = DFM_Settings[DFM_INDEX][header][frame].Location.x;
local y = DFM_Settings[DFM_INDEX][header][frame].Location.y;
if (dir == 0) then
DFM_Options_XOffset:SetText(0);
DFM_Options_YOffset:SetText(0);
x = 0;
y = 0;
elseif (dir == 1) then
getglobal(this.updateFrame):SetText(y + amt);
y = y + amt;
elseif (dir == 2) then
getglobal(this.updateFrame):SetText(y - amt);
y = y - amt;
elseif (dir == 3) then
getglobal(this.updateFrame):SetText(x - amt);
x = x - amt;
elseif (dir == 4) then
getglobal(this.updateFrame):SetText(x + amt);
x = x + amt;
end
DFM_Settings[DFM_INDEX][header][frame].Location.x = x;
DFM_Settings[DFM_INDEX][header][frame].Location.y = y;
DFM_Initialize_FrameLocation(header, frame);
if (dragframe or DFM_DRAG_INDEX == DFM_SELECTED_INDEX) then
DFM_Summon_DragFrame(1);
end
end
function DFM_Nudge_OnUpdate(elapsed)
if (not DFM_SELECTED_INDEX) then return; end
if (not this.timer) then
this.timer = 1 / 30;
end
if (this.movingframe) then
this.timer = this.timer - elapsed;
if (this.timer < 0) then
this.timer = 1 / 30;
DFM_Nudge("MiddleButton");
end
end
end
function DFM_OptionsMenu_OnClick()
DFM_DropMenu:Hide();
DFM_ScrollMenu:Hide();
end
function DFM_OptionsMenu_Update()
DFM_DropMenu:Hide();
DFM_ScrollMenu:Hide();
local numOptions = table.getn(DFM_OPTIONS_LIST);
local offset = FauxScrollFrame_GetOffset(DFM_Options_OptionsMenu);
if (not offset) then
offset = 0;
end
local index, button, buttonName, border, lockButton, useButton;
for i=1, 7 do
buttonName = "DFM_Options_OptionsMenu_Button"..i;
button = getglobal(buttonName);
border = getglobal(buttonName.."_Border");
lockButton = getglobal(buttonName.."_Lock");
useButton = getglobal(buttonName.."_Use");
helpButton = getglobal(buttonName.."_Help");
buttontext = getglobal("DFM_Options_OptionsMenu_Button"..i.."_Text");
index = offset + i;
button.index = index;
button.help = nil;
if ( DFM_OPTIONS_LIST[index] ) then
button:Show();
buttontext:SetText(DFM_TEXT[DFM_OPTIONS_LIST[index].name]);
button.help = DFM_OPTIONS_LIST[index].help;
for j=1,7 do
getglobal(buttonName.."_"..j):Hide();
end
local option = getglobal(buttonName.."_"..DFM_OPTIONS_LIST[index].option);
option:Show();
local offset = buttontext:GetStringWidth() + 9;
buttontext:ClearAllPoints();
if (option.dynamicPosition) then
buttontext:SetPoint("LEFT", button, "LEFT", 0, 0);
option:ClearAllPoints();
option:SetPoint("LEFT", button, "LEFT", offset + option.dynamicPosition, 0);
else
buttontext:SetPoint("TOPLEFT", button, "TOPLEFT", 0, 0);
end
local setting = DFM_Get_Setting(index);
if (not setting) then
local frame = getglobal(DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame);
if (DFM_OPTIONS_LIST[index].name == "TextAlpha" and frame.GetTextColor) then
_, _, _, setting = frame:GetTextColor();
elseif (DFM_OPTIONS_LIST[index].name == "TextureAlpha") then
if (frame.GetVertexColor) then
_, _, _, setting = frame:GetVertexColor();
else
setting = 1;
end
elseif (DFM_OPTIONS_LIST[index].name == "ShadowAlpha") then
_, _, _, setting = frame:GetShadowColor();
elseif (DFM_OPTIONS_LIST[index].name == "ShadowOffsetX") then
setting = frame:GetShadowOffset();
elseif (DFM_OPTIONS_LIST[index].name == "ShadowOffsetY") then
_, setting = frame:GetShadowOffset();
elseif (DFM_OPTIONS_LIST[index].detection and string.find(DFM_OPTIONS_LIST[index].detection, "FontObject")) then
if (frame[DFM_OPTIONS_LIST[index].detection] and frame[DFM_OPTIONS_LIST[index].detection](frame) and frame[DFM_OPTIONS_LIST[index].detection](frame).GetName and frame[DFM_OPTIONS_LIST[index].detection](frame):GetName()) then
setting = frame[DFM_OPTIONS_LIST[index].detection](frame):GetName();
else
setting = "";
end
elseif (DFM_OPTIONS_LIST[index].detection == "GetScrollChild" and frame.GetScrollChild and frame:GetScrollChild() and frame:GetScrollChild().GetName and frame:GetScrollChild():GetName()) then
setting = frame:GetScrollChild():GetName();
elseif (DFM_OPTIONS_LIST[index].detection and string.find(DFM_OPTIONS_LIST[index].detection, "Color") and frame[DFM_OPTIONS_LIST[index].detection]) then
setting = {};
setting.r, setting.g, setting.b = frame[DFM_OPTIONS_LIST[index].detection](frame);
elseif (DFM_OPTIONS_LIST[index].detection == "GetParent" and frame.GetParent and frame:GetParent() and frame:GetParent().GetName and frame:GetParent():GetName()) then
setting = frame:GetParent():GetName();
elseif (DFM_OPTIONS_LIST[index].detection == "GetFont") then
local font, fontHeight = frame:GetFont();
if (font and DFM_OPTIONS_LIST[index].option == 3) then
setting = font;
elseif (fontHeight and DFM_OPTIONS_LIST[index].option == 4) then
setting = fontHeight;
else
setting = DFM_OPTIONS_LIST[index].default;
end
elseif (DFM_OPTIONS_LIST[index].detection and frame[DFM_OPTIONS_LIST[index].detection]) then
setting = frame[DFM_OPTIONS_LIST[index].detection](frame);
else
setting = DFM_OPTIONS_LIST[index].default;
end
end
if (DFM_OPTIONS_LIST[index].scale) then
setting = setting * DFM_OPTIONS_LIST[index].scale;
end
if (type(setting) == "number") then
setting = DL_round(setting, 1);
end
if (DFM_OPTIONS_LIST[index].option == 1 or DFM_OPTIONS_LIST[index].option == 7) then
DL_Init_EditBox(option, setting);
elseif (DFM_OPTIONS_LIST[index].option == 2) then
option.menu = "DFM_DropMenu";
option.table = DFM_OPTIONS_LIST[index].table;
option.index = index;
DL_Init_MenuControl(option, setting);
elseif (DFM_OPTIONS_LIST[index].option == 3) then
option.menu = "DFM_ScrollMenu";
option.table = DFM_OPTIONS_LIST[index].table;
option.index = index;
DL_Init_MenuControl(option, setting, 1);
elseif (DFM_OPTIONS_LIST[index].option == 4) then
option:SetMinMaxValues(DFM_OPTIONS_LIST[index].min, DFM_OPTIONS_LIST[index].max);
getglobal(option:GetName().."Low"):SetText(DFM_OPTIONS_LIST[index].min);
getglobal(option:GetName().."High"):SetText(DFM_OPTIONS_LIST[index].max);
option:SetValue(setting);
getglobal(option:GetName().."_Display"):SetText(setting);
elseif (DFM_OPTIONS_LIST[index].option == 5) then
DL_Init_CheckBox(option, setting);
elseif (DFM_OPTIONS_LIST[index].option == 6) then
DL_Init_ColorPicker(option, setting);
end
if (DFM_OPTIONS_LIST[index + 1] and DFM_OPTIONS_LIST[index + 1].method == DFM_OPTIONS_LIST[index].method) then
border:Hide();
else
border:Show();
end
if (index == 1 or DFM_OPTIONS_LIST[index - 1].method == DFM_OPTIONS_LIST[index].method) then
useButton:Hide();
lockButton:Hide();
if (index == 1) then
helpButton:Show();
else
helpButton:Hide();
end
else
useButton.method = DFM_OPTIONS_LIST[index].method;
lockButton.method = DFM_OPTIONS_LIST[index].method;
useButton:Show();
lockButton:Show();
helpButton:Show();
DL_Init_CheckBox(useButton, DFM_Get_MethodSetting(useButton.method, "use"));
DL_Init_CheckBox(lockButton, DFM_Get_MethodSetting(lockButton.method, "lock"));
end
if (not button.help) then
helpButton:Hide();
end
else
button:Hide();
end
end
FauxScrollFrame_Update(DFM_Options_OptionsMenu, numOptions, 7, 40);
DFM_Options_OptionsMenu:Show();
end
function DFM_Paste_Settings()
if (not DFM_BUFFER) then return; end
local buffer = {};
DL_Copy_Table(DFM_BUFFER, buffer);
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frameName = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
local frame = getglobal(frameName);
for method in buffer do
if (tonumber(method)) then
local m = DFM_METHODS_LIST[method].method;
if (not frame[m]) then
buffer[method] = nil;
end
end
end
local oldName = DFM_Settings[DFM_INDEX][header][frameName].name;
DFM_Settings[DFM_INDEX][header][frameName] = {};
DL_Copy_Table(buffer, DFM_Settings[DFM_INDEX][header][frameName]);
DFM_Settings[DFM_INDEX][header][frameName].name = oldName;
DFM_Initialize_Frame(header, frameName);
DFM_OptionsMenu_Update();
DFM_Update_LocationSettings();
DFM_ReloadUIFrame:Show();
end
function DFM_PlusButton_OnClick()
local value = this:GetParent():GetNumber();
if (not value) then
value = 0;
end
value = value + 1;
this:GetParent():SetText(value);
DFM_Update_Setting(this:GetParent():GetParent().index, value);
end
function DFM_Remove_Frame()
if (not DFM_SELECTED_INDEX) then return; end
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
if (DFM_Settings[DFM_INDEX][header][frame].customFrame) then
local f = getglobal(frame);
f:Hide();
f.Show = function() end;
if (f.UnregisterAllEvents) then
f:UnregisterAllEvents();
end
end
DFM_Settings[DFM_INDEX][header][frame] = nil;
DFM_SELECTED_INDEX = nil;
DFM_OPTIONS_LIST = {};
DFM_Update_FrameList();
DFM_FrameMenu_Update();
DFM_OptionsMenu_Update();
DFM_ReloadUIFrame:Show();
end
function DFM_Reset_Frame()
if (not DFM_SELECTED_INDEX) then return; end
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
local oldName = DFM_Settings[DFM_INDEX][header][frame].name;
DFM_Settings[DFM_INDEX][header][frame] = {name=oldName};
DFM_OptionsMenu_Update();
DFM_Update_LocationSettings();
DFM_ReloadUIFrame:Show();
end
function DFM_ScrollMenu_OnClick()
this:GetParent():Hide();
if (DFM_ScrollMenu.index == "scrolltoheader") then
DFM_Options_FrameMenuScrollBar:SetValue(20 * (this.value - 1));
else
local text = "";
local list = getglobal(DFM_ScrollMenu.table);
for _, value in list do
if (value.value == this.value) then
text = value.text;
end
end
getglobal(DFM_ScrollMenu.controlbox):SetText(text);
DFM_Update_Setting(DFM_ScrollMenu.index, this.value);
end
end
function DFM_ScrollMenu_Update()
local list = getglobal(this:GetParent().table);
if (not list) then return; end
local numOptions = table.getn(list);
local offset = FauxScrollFrame_GetOffset(DFM_ScrollMenu_ScrollFrame);
if (not offset) then offset = 0; end
local index, button;
for i=1, 10 do
button = getglobal("DFM_ScrollMenu_Button"..i);
buttontext = getglobal("DFM_ScrollMenu_Button"..i.."Text");
index = offset + i;
if ( list[index] ) then
buttontext:SetText(list[index].text);
button:Show();
button:SetChecked(0);
button.value = list[index].value;
button.desc = list[index].desc;
else
button:Hide();
end
end
FauxScrollFrame_Update(DFM_ScrollMenu_ScrollFrame, numOptions, 10, 20 );
end
function DFM_Slider_OnValueChanged()
if (not DFM_INITIALIZED) then return; end
local optionIndex = this:GetParent().index;
local setting = DFM_Get_Setting(optionIndex);
if (not setting) then return; end
if (DFM_OPTIONS_LIST[optionIndex].scale) then
setting = setting * DFM_OPTIONS_LIST[optionIndex].scale;
end
if (setting == this:GetValue()) then return; end
local min, max = this:GetMinMaxValues();
if (setting < min or setting > max) then
return;
end
local value = this:GetValue();
value = DL_round(value, 2);
getglobal(this:GetName().."_Display"):SetText(value);
if (DFM_OPTIONS_LIST[optionIndex].scale) then
value = value / DFM_OPTIONS_LIST[optionIndex].scale;
end
DFM_Update_Setting(optionIndex, value);
end
function DFM_SliderEditBox_OnEnterPressed()
local value = this:GetNumber();
local optionIndex = this:GetParent():GetParent().index;
if (not value) then value = 0; end
local min, max = this:GetParent():GetMinMaxValues();
if (this:GetParent().minlocked and value < min) then value = min; end
if (this:GetParent().maxlocked and value > max) then value = max; end
this:SetText(value);
if (value >= min and value <= max) then
this:GetParent():SetValue(value);
end
this:ClearFocus();
if (DFM_OPTIONS_LIST[optionIndex].scale) then
value = value / DFM_OPTIONS_LIST[optionIndex].scale;
end
DFM_Update_Setting(optionIndex, value);
end
function DFM_Start_Dragging()
local frame = getglobal(DFM_DragFrame.frameindex);
if (not frame) then return; end
frame:ClearAllPoints();
if (frame.DFM_SetPoint) then
frame:DFM_SetPoint("CENTER", this, "CENTER", 0, 0);
else
frame:SetPoint("CENTER", this, "CENTER", 0, 0);
end
this:StartMoving();
end
function DFM_Stop_Dragging()
this:StopMovingOrSizing();
if (not DFM_DRAG_INDEX) then return; end
local header = DFM_FRAME_LIST[DFM_DRAG_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_DRAG_INDEX].frame;
local settings = DFM_Settings[DFM_INDEX][header][frame].Location;
local x, y = DL_Get_Offsets(DFM_DragFrame, getglobal(settings.frame), settings.point, settings.to);
settings.x = x;
settings.y = y;
DFM_Initialize_FrameLocation(header, frame);
if (DFM_DRAG_INDEX == DFM_SELECTED_INDEX) then
DFM_Update_LocationSettings();
end
end
function DFM_Summon_DragFrame(override)
if (not DFM_SELECTED_INDEX) then return; end
if (DFM_DragFrame:IsVisible() and (not override)) then
DFM_Stop_Dragging();
DFM_DragFrame:Hide();
DFM_DRAG_INDEX = nil;
return;
end
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
local settings = DFM_Settings[DFM_INDEX][header][frame].Location;
if (not settings) then return; end
if (not settings.use) then return; end
DFM_DragFrame.frameindex = frame;
DFM_DragFrame_FrameName:SetText(frame);
frame = getglobal(frame);
local height = frame:GetHeight();
local width = frame:GetWidth();
if (height < 50) then height = 50; end
if (width < 50) then width = 50; end
local scale;
if (frame.GetEffectiveScale) then
scale = frame:GetEffectiveScale();
else
scale = 1;
end
DFM_DragFrame:SetHeight(height);
DFM_DragFrame:SetWidth(width);
DFM_DragFrame:SetScale(scale);
DFM_DragFrame:ClearAllPoints();
DFM_DragFrame:SetPoint(settings.point, settings.frame, settings.to, settings.x, settings.y);
DFM_DragFrame:Show();
DFM_DRAG_INDEX = DFM_SELECTED_INDEX;
end
function DFM_Update_AnchorFrame()
this:ClearFocus();
local value = this:GetText();
if ((not value) or value == "" or (not getglobal(value))) then
this:SetText(this.prevvalue);
return;
end
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
if (not DFM_Settings[DFM_INDEX][header][frame].Location) then
this:SetText(this.prevvalue);
else
DFM_Settings[DFM_INDEX][header][frame].Location.frame = value;
DFM_Initialize_FrameLocation(header, frame);
end
end
function DFM_Update_FrameList()
DFM_FRAME_LIST = {};
DFM_HEADERS_LIST = {};
local headers = {};
local index = 1;
for header in DFM_Settings[DFM_INDEX] do
headers[index] = header;
index = index + 1;
end
DL_Sort(headers);
index = 0;
hindex = 0;
for _, header in headers do
hindex = hindex + 1;
index = index + 1;
DFM_HEADERS_LIST[hindex] = {text=header, value=index};
DFM_FRAME_LIST[index] = {text=header, headerFlag=true};
local frames = {};
local frameRealName = {};
local i = 0;
for frame in DFM_Settings[DFM_INDEX][header] do
if (getglobal(frame)) then
i = i + 1;
frames[i] = DFM_Settings[DFM_INDEX][header][frame].name;
frameRealName[frames[i]] = frame;
end
end
DL_Sort(frames);
for i=1, table.getn(frames) do
index = index + 1;
local frameType = "";
local frame = getglobal(frameRealName[frames[i]]);
if (frame.GetFrameType) then
frameType = frame:GetFrameType();
elseif (frame.SetFont) then
frameType = "FontString";
else
frameType = "Texture";
end
DFM_FRAME_LIST[index] = {text=frames[i], header=header, frame=frameRealName[frames[i]], frameType=frameType};
for m,v in DFM_Settings[DFM_INDEX][header][frameRealName[frames[i]]] do
if (tonumber(m) and v.use) then
DFM_FRAME_LIST[index].modified = 1;
elseif (m == "Location" and v.use) then
DFM_FRAME_LIST[index].modified = 1;
elseif (m == "forceHide" and v) then
DFM_FRAME_LIST[index].modified = 1;
elseif (m == "customFrame") then
DFM_FRAME_LIST[index].modified = 1;
end
end
end
end
end
function DFM_Update_LocationSettings()
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
local settings = DFM_Get_LocSettings(header, frame);
DL_Init_EditBox(DFM_Options_XOffset, settings.x);
DL_Init_EditBox(DFM_Options_YOffset, settings.y);
DL_Init_EditBox(DFM_Options_AnchorFrame, settings.frame);
DL_Init_MenuControl(DFM_Options_AnchorPoint, settings.point);
DL_Init_MenuControl(DFM_Options_AnchorTo, settings.to);
DL_Init_CheckBox(DFM_Options_UseLocation, settings.use);
DL_Init_CheckBox(DFM_Options_LockLocation, settings.lock);
end
function DFM_Update_MethodSetting(method, index, value)
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
if (not DFM_Settings[DFM_INDEX][header][frame]) then
DFM_Settings[DFM_INDEX][header][frame] = {};
end
if (not DFM_Settings[DFM_INDEX][header][frame][method]) then
DFM_Settings[DFM_INDEX][header][frame][method] = {};
end
DFM_Settings[DFM_INDEX][header][frame][method][index] = value;
DFM_Initialize_Frame(header, frame);
end
function DFM_Update_OptionsList()
local headertext = string.upper(string.gsub(DFM_TEXT.Options, "$f", DFM_FRAME_LIST[DFM_SELECTED_INDEX].text));
DFM_Options_OptionsMenu_OuterBorder_Header:SetText(headertext);
DFM_OPTIONS_LIST = {};
DFM_OPTIONS_LIST[1] = {name="ForceHide", option=5, help="Hides the frame in a way that will keep anything else from being able to show it."};
local frame = getglobal(DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame);
local index = 1;
for methodIndex,value in DFM_METHODS_LIST do
if (frame[value.method]) then
for param,option in value.options do
index = index + 1;
DFM_OPTIONS_LIST[index] = {};
DL_Copy_Table(option, DFM_OPTIONS_LIST[index]);
DFM_OPTIONS_LIST[index].method = methodIndex;
DFM_OPTIONS_LIST[index].param = param;
DFM_OPTIONS_LIST[index].detection = value.detection;
DFM_OPTIONS_LIST[index].help = value.help;
end
end
end
DFM_OptionsMenu_Update();
DFM_Update_LocationSettings();
end
function DFM_Update_Profiles()
DFM_PROFILES = {};
for profile in DFM_Settings do
if ((not string.find(profile, "INITIALIZED")) and (not string.find(profile, " :: ")) and profile ~= "LoadOnDemandFunctions" and profile ~= "usetooltipanchor" and profile ~= "usecontaineranchors") then
local i = table.getn(DFM_PROFILES) + 1;
DFM_PROFILES[i] = { text=profile, value=profile };
if (profile == "Default") then
DFM_PROFILES[i].desc = "This profile will be used initially by any new character you create or characters on whom you haven't loaded Discord Frame Modifier yet.";
elseif (profile == "Custom") then
DFM_PROFILES[i].desc = "This profile holds settings from the DFM_Custom.lua file in the mod's folder. CHANGES TO THIS PROFILE WILL NOT BE SAVED. Load this profile and immediately create a new profile if you want to make changes.";
end
end
end
end
function DFM_Update_Setting(index, value)
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
local method = DFM_OPTIONS_LIST[index].method;
local param = DFM_OPTIONS_LIST[index].param;
if (index == 1) then
DFM_Settings[DFM_INDEX][header][frame].forceHide = value;
if (not value) then
DFM_ReloadUIFrame:Show();
end
else
if (not DFM_Settings[DFM_INDEX][header][frame][method]) then
DFM_Settings[DFM_INDEX][header][frame][method] = {};
end
DFM_Settings[DFM_INDEX][header][frame][method][param] = value;
end
DFM_Initialize_Frame(header, frame);
end
function DFM_Update_XOffset()
this:ClearFocus();
local value = this:GetNumber();
if (not value or value == "") then
value = 0;
this:SetText(0);
end
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
if (not DFM_Settings[DFM_INDEX][header][frame].Location) then
this:SetText(this.prevvalue);
return;
end
DFM_Settings[DFM_INDEX][header][frame].Location.x = value;
DFM_Initialize_FrameLocation(header, frame);
end
function DFM_Update_YOffset()
this:ClearFocus();
local value = this:GetNumber();
if (not value or value == "") then
value = 0;
this:SetText(0);
end
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
if (not DFM_Settings[DFM_INDEX][header][frame].Location) then
this:SetText(this.prevvalue);
return;
end
DFM_Settings[DFM_INDEX][header][frame].Location.y = value;
DFM_Initialize_FrameLocation(header, frame);
end
function DFM_UseCheckBox_OnClick()
if (this:GetChecked()) then
DFM_Init_Settings(this.method);
DFM_Update_MethodSetting(this.method, "use", 1);
DFM_OptionsMenu_Update();
else
DFM_Update_MethodSetting(this.method, "use");
DFM_ReloadUIFrame:Show();
end
end
function DFM_UseLocationCheckBox_OnClick()
local header = DFM_FRAME_LIST[DFM_SELECTED_INDEX].header;
local frame = DFM_FRAME_LIST[DFM_SELECTED_INDEX].frame;
if (this:GetChecked()) then
if (not DFM_Settings[DFM_INDEX][header][frame].Location) then
DFM_Settings[DFM_INDEX][header][frame].Location = DFM_Get_LocSettings(header, frame);
end
DFM_Settings[DFM_INDEX][header][frame].Location.use = 1;
DFM_Initialize_FrameLocation(header, frame);
else
DFM_Settings[DFM_INDEX][header][frame].Location.use = nil;
DFM_ReloadUIFrame:Show();
end
end
Generated by GNU Enscript 1.6.5.90.