comparison Modules/Config.lua @ 152:311eb97cb983

Added mass export to the extra panel of the config. Next step is to support an easy way to backup settings. :)
author Zerotorescue
date Thu, 20 Jan 2011 20:13:00 +0100
parents cd461a41723c
children 39df534c9856
comparison
equal deleted inserted replaced
151:31d498e95512 152:311eb97cb983
832 desc = "Export the group data for the currently selected group. Press CTRL-A to select all and CTRL-C to copy the text.", 832 desc = "Export the group data for the currently selected group. Press CTRL-A to select all and CTRL-C to copy the text.",
833 set = false, 833 set = false,
834 get = function(info) 834 get = function(info)
835 local groupName = groupIdToName[info[2]]; 835 local groupName = groupIdToName[info[2]];
836 836
837 -- We want to include the group name, so we copy the table then set another value 837 return mod:ExportGroup(groupName);
838 local temp = CopyTable(addon.db.profile.groups[groupName]);
839 temp.name = groupName;
840 temp.trackAtCharacters = nil;
841 temp.overrideTrackAtCharacters = nil;
842
843 if not AceSerializer then
844 AceSerializer = LibStub("AceSerializer-3.0");
845 end
846
847 return AceSerializer:Serialize(temp);
848 end, 838 end,
849 }, 839 },
850 }, 840 },
851 }, 841 },
852 }, 842 },
1262 local Widgets = addon:GetModule("Widgets"); 1252 local Widgets = addon:GetModule("Widgets");
1263 Widgets:ItemLinkButton(); 1253 Widgets:ItemLinkButton();
1264 Widgets:ConfigItemLinkButton(); 1254 Widgets:ConfigItemLinkButton();
1265 end 1255 end
1266 1256
1257 function mod:ExportGroup(groupName)
1258 -- We want to include the group name, so we copy the table then set another value
1259 local temp = CopyTable(addon.db.profile.groups[groupName]);
1260 temp.name = groupName;
1261 temp.trackAtCharacters = nil;
1262 temp.overrideTrackAtCharacters = nil;
1263
1264 if not AceSerializer then
1265 AceSerializer = LibStub("AceSerializer-3.0");
1266 end
1267
1268 return AceSerializer:Serialize(temp);
1269 end
1270
1267 function mod:RefreshConfig() 1271 function mod:RefreshConfig()
1268 self:PremadeGroupsCheck(); 1272 self:PremadeGroupsCheck();
1269 1273
1270 self:FillGroupOptions(); 1274 self:FillGroupOptions();
1271 end 1275 end
1653 }, 1657 },
1654 }; 1658 };
1655 end 1659 end
1656 1660
1657 function mod:FillExtraOptions() 1661 function mod:FillExtraOptions()
1662 local selectedExportGroups = {};
1658 options.args.extra = { 1663 options.args.extra = {
1659 order = 300, 1664 order = 300,
1660 type = "group", 1665 type = "group",
1661 name = "Extra", 1666 name = "Extra",
1662 desc = "Change additional (but completely optional) settings.", 1667 desc = "Change additional (but completely optional) settings.",
1713 if values.trackAtCharacters then 1718 if values.trackAtCharacters then
1714 values.trackAtCharacters[name] = nil; 1719 values.trackAtCharacters[name] = nil;
1715 end 1720 end
1716 end 1721 end
1717 end 1722 end
1723 end,
1724 },
1725 },
1726 },
1727 export = {
1728 order = 30,
1729 type = "group",
1730 inline = true,
1731 name = "Export groups",
1732 args = {
1733 localItemData = {
1734 order = 0,
1735 type = "multiselect",
1736 name = "Select groups",
1737 desc = "Select which groups should be included in the export.",
1738 values = function()
1739 local temp = {};
1740
1741 if addon.db.profile.groups then
1742 temp["*InverseAll"] = "Inverse";
1743
1744 for groupName, _ in pairs(addon.db.profile.groups) do
1745 temp[groupName] = groupName;
1746 end
1747 end
1748
1749 return temp;
1750 end,
1751 get = function(info, value)
1752 --local groupName = groupIdToName[info[2]];
1753 --local optionName = info[#info];
1754
1755 return selectedExportGroups[value];
1756 end,
1757 set = function(info, name, value)
1758 --local groupName = groupIdToName[info[2]];
1759 --local optionName = info[#info];
1760
1761 if name == "*InverseAll" then
1762 for groupName, _ in pairs(addon.db.profile.groups) do
1763 if selectedExportGroups[groupName] then
1764 selectedExportGroups[groupName] = nil;
1765 else
1766 selectedExportGroups[groupName] = true;
1767 end
1768 end
1769 else
1770 if selectedExportGroups[name] then
1771 selectedExportGroups[name] = nil;
1772 else
1773 selectedExportGroups[name] = true;
1774 end
1775 end
1776 end,
1777 },
1778 input = {
1779 order = 10,
1780 type = "input",
1781 multiline = true,
1782 width = "full",
1783 name = "Exported data",
1784 desc = "Export the group data for the currently selected group. Press CTRL-A to select all and CTRL-C to copy the text.",
1785 set = false,
1786 get = function(info)
1787 local result = "";
1788 for groupName, v in pairs(selectedExportGroups) do
1789 if v then
1790 result = result .. mod:ExportGroup(groupName) .. "\n";
1791 end
1792 end
1793
1794 return result;
1718 end, 1795 end,
1719 }, 1796 },
1720 }, 1797 },
1721 }, 1798 },
1722 colorCodes = { 1799 colorCodes = {
1998 desc = "Paste the group data as provided by a group export. If you are trying to import multiple groups at the same time, make sure to use newlines to seperate them.", 2075 desc = "Paste the group data as provided by a group export. If you are trying to import multiple groups at the same time, make sure to use newlines to seperate them.",
1999 set = function(info, value) 2076 set = function(info, value)
2000 local data = { string.split("\n", value or "") }; 2077 local data = { string.split("\n", value or "") };
2001 2078
2002 for _, current in pairs(data) do 2079 for _, current in pairs(data) do
2003 if not AceSerializer then 2080 if current and string.trim(current) ~= "" then
2004 AceSerializer = LibStub("AceSerializer-3.0"); 2081 if not AceSerializer then
2005 end 2082 AceSerializer = LibStub("AceSerializer-3.0");
2006 2083 end
2007 local result, temp = AceSerializer:Deserialize(current);
2008
2009 if not temp.name then
2010 addon:Print("The provided data is not supported.", addon.Colors.Red);
2011 elseif ValidateGroupName(nil, temp.name) ~= true then
2012 addon:Print(("Aborting: A group named \"%s\" already exists."):format(temp.name), addon.Colors.Red);
2013 else
2014 local name = temp.name;
2015 temp.name = nil;
2016 addon:Print(("Importing %s..."):format(name));
2017 2084
2018 if temp.items then 2085 local result, temp = AceSerializer:Deserialize(current);
2019 -- Remove items that are already in another group 2086
2020 for value, count in pairs(temp.items) do 2087 if not temp.name then
2021 local itemId = tonumber(value); 2088 addon:Print("The provided data is not supported.", addon.Colors.Red);
2022 2089 elseif ValidateGroupName(nil, temp.name) ~= true then
2023 local itemData = addon.ItemData:New(itemId); 2090 addon:Print(("Aborting: A group named \"%s\" already exists."):format(temp.name), addon.Colors.Red);
2024 2091 else
2025 if not itemId then 2092 local name = temp.name;
2026 addon:Print(("\"%s\" is not a number."):format(value), addon.Colors.Red); 2093 temp.name = nil;
2027 temp.items[value] = nil; 2094 addon:Print(("Importing %s..."):format(name));
2028 elseif itemData:InGroup() then 2095
2029 addon:Print(("Skipping %s as it is already in the group |cfffed000%s|r."):format( (itemData.link or unknownItemName:format(itemId)), itemData:InGroup() ), addon.Colors.Red); 2096 if temp.items then
2030 temp.items[value] = nil; 2097 -- Remove items that are already in another group
2031 else 2098 for value, count in pairs(temp.items) do
2032 -- Ensure the keys are numeric 2099 local itemId = tonumber(value);
2033 temp.items[value] = nil; 2100
2034 temp.items[itemId] = tonumber(count) or 0; 2101 local itemData = addon.ItemData:New(itemId);
2102
2103 if not itemId then
2104 addon:Print(("\"%s\" is not a number."):format(value), addon.Colors.Red);
2105 temp.items[value] = nil;
2106 elseif itemData:InGroup() then
2107 addon:Print(("Skipping %s as it is already in the group |cfffed000%s|r."):format( (itemData.link or unknownItemName:format(itemId)), itemData:InGroup() ), addon.Colors.Red);
2108 temp.items[value] = nil;
2109 else
2110 -- Ensure the keys are numeric
2111 temp.items[value] = nil;
2112 temp.items[itemId] = tonumber(count) or 0;
2113 end
2035 end 2114 end
2036 end 2115 end
2116
2117 -- Ensure this data isn't received (this would be silly/buggy as exports from other accounts - with different characters - won't know what to do with this)
2118 temp.trackAtCharacters = nil;
2119 temp.overrideTrackAtCharacters = nil;
2120
2121 addon.db.profile.groups[name] = temp;
2037 end 2122 end
2038
2039 -- Ensure this data isn't received (this would be silly/buggy as exports from other accounts - with different characters - won't know what to do with this)
2040 temp.trackAtCharacters = nil;
2041 temp.overrideTrackAtCharacters = nil;
2042
2043 addon.db.profile.groups[name] = temp;
2044 end 2123 end
2045 end 2124 end
2046 2125
2047 self:FillGroupOptions(); 2126 self:FillGroupOptions();
2048 end, 2127 end,