476 lines
15 KiB
Lua
476 lines
15 KiB
Lua
--[[
|
|
Informant - An addon for World of Warcraft that shows pertinent information about
|
|
an item in a tooltip when you hover over the item in the game.
|
|
Version: 5.9.4961 (WhackyWallaby)
|
|
Revision: $Id: InfSettings.lua 4533 2009-11-21 03:43:55Z Hirsute $
|
|
URL: http://auctioneeraddon.com/dl/Informant/
|
|
|
|
Command handler. Assumes responsibility for allowing the user to set the
|
|
options via slash command, MyAddon etc.
|
|
|
|
License:
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program(see GPL.txt); if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
Note:
|
|
This AddOn's source code is specifically designed to work with
|
|
World of Warcraft's interpreted AddOn system.
|
|
You have an implicit license to use this AddOn with these facilities
|
|
since that is its designated purpose as per:
|
|
http://www.fsf.org/licensing/licenses/gpl-faq.html#InterpreterIncompat
|
|
|
|
|
|
data layout:
|
|
InformantConfig = {
|
|
|
|
["profile.test4"] = {
|
|
["all"] = true,
|
|
["enable"] = true,
|
|
},
|
|
|
|
["profiles"] = {
|
|
"Default", -- [1]
|
|
"test4", -- [2]
|
|
},
|
|
|
|
["users.Foobar.Picksell"] = "test4",
|
|
|
|
["profile.Default"] = {
|
|
["miniicon.angle"] = 187,
|
|
["miniicon.distance"] = 15,
|
|
},
|
|
|
|
}
|
|
|
|
if user does not have a set profile name, they get the default profile
|
|
|
|
|
|
Usage:
|
|
def = Informant.Settings.GetDefault('TooltipShowValues')
|
|
val = Informant.Settings.GetSetting('TooltipShowValues')
|
|
Informant.Settings.SetSetting('TooltipShowValues', true );
|
|
|
|
|
|
]]
|
|
Informant_RegisterRevision("$URL: http://svn.norganna.org/auctioneer/branches/5.9/Informant/InfSettings.lua $", "$Rev: 4533 $")
|
|
|
|
local lib = {}
|
|
Informant.Settings = lib
|
|
local private = {}
|
|
local gui
|
|
local debugPrint
|
|
|
|
local function getUserSig()
|
|
local userSig = string.format("users.%s.%s", GetRealmName(), UnitName("player"))
|
|
return userSig
|
|
end
|
|
|
|
local function getUserProfileName()
|
|
if (not InformantConfig) then InformantConfig = {} end
|
|
local userSig = getUserSig()
|
|
return InformantConfig[userSig] or "Default"
|
|
end
|
|
|
|
local function getUserProfile()
|
|
if (not InformantConfig) then InformantConfig = {} end
|
|
local profileName = getUserProfileName()
|
|
if (not InformantConfig["profile."..profileName]) then
|
|
if profileName ~= "Default" then
|
|
profileName = "Default"
|
|
InformantConfig[getUserSig()] = "Default"
|
|
end
|
|
if profileName == "Default" then
|
|
InformantConfig["profile."..profileName] = {}
|
|
end
|
|
end
|
|
return InformantConfig["profile."..profileName]
|
|
end
|
|
|
|
|
|
local function cleanse( profile )
|
|
if (profile) then
|
|
profile = {}
|
|
end
|
|
end
|
|
|
|
|
|
-- reset all settings for the current user
|
|
function lib.RestoreDefaults()
|
|
local profile = getUserProfile()
|
|
cleanse(profile)
|
|
end
|
|
|
|
|
|
-- Default setting values
|
|
-- moved from InfMain.lua filterDefaults
|
|
local settingDefaults = {
|
|
['all'] = true,
|
|
['locale'] = 'default',
|
|
['embed'] = false,
|
|
['show-vendor'] = true,
|
|
['show-vendor-buy'] = true,
|
|
['show-vendor-sell'] = true,
|
|
['show-usage'] = true,
|
|
['show-stack'] = true,
|
|
['show-merchant'] = true,
|
|
['show-zero-merchants'] = true,
|
|
['show-quest'] = true,
|
|
['show-ilevel'] = true,
|
|
['show-link'] = false,
|
|
['auto-update'] = false,
|
|
['ModTTShow'] = false,
|
|
|
|
-- leave this option off until we have real data to test with
|
|
-- enable only for dev testing
|
|
['show-crafted'] = false,
|
|
}
|
|
|
|
local function getDefault(setting)
|
|
|
|
-- lookup the simple settings
|
|
local result = settingDefaults[setting];
|
|
|
|
-- no idea what this setting is, so log it for debugging purposes
|
|
if (result == nil) then
|
|
debugPrint("GetDefault", ENX_INFO, "Unknown key", "default requested for unknown key:" .. setting)
|
|
end
|
|
|
|
return result
|
|
|
|
end
|
|
|
|
function lib.GetDefault(setting)
|
|
local val = getDefault(setting);
|
|
return val;
|
|
end
|
|
|
|
local function setter(setting, value)
|
|
if (not InformantConfig) then InformantConfig = {} end
|
|
|
|
-- turn value into a canonical true or false
|
|
if value == 'on' then
|
|
value = true
|
|
elseif value == 'off' then
|
|
value = false
|
|
end
|
|
|
|
-- for defaults, just remove the value and it'll fall through
|
|
if (value == 'default') or (value == getDefault(setting)) then
|
|
-- Don't save default values
|
|
value = nil
|
|
end
|
|
|
|
local a,b,c = strsplit(".", setting)
|
|
if (a == "profile") then
|
|
if (setting == "profile.save") then
|
|
value = gui.elements["profile.name"]:GetText()
|
|
|
|
-- Create the new profile
|
|
InformantConfig["profile."..value] = {}
|
|
|
|
-- Set the current profile to the new profile
|
|
InformantConfig[getUserSig()] = value
|
|
-- Get the new current profile
|
|
local newProfile = getUserProfile()
|
|
|
|
-- Clean it out and then resave all data
|
|
cleanse(newProfile)
|
|
gui:Resave()
|
|
|
|
-- Add the new profile to the profiles list
|
|
local profiles = InformantConfig["profiles"]
|
|
if (not profiles) then
|
|
profiles = { "Default" }
|
|
InformantConfig["profiles"] = profiles
|
|
end
|
|
|
|
-- Check to see if it already exists
|
|
local found = false
|
|
for pos, name in ipairs(profiles) do
|
|
if (name == value) then found = true end
|
|
end
|
|
|
|
-- If not, add it and then sort it
|
|
if (not found) then
|
|
table.insert(profiles, value)
|
|
table.sort(profiles)
|
|
end
|
|
|
|
DEFAULT_CHAT_FRAME:AddMessage(_TRANS("INF_Help_ChatProfileSaved")..value)
|
|
|
|
elseif (setting == "profile.delete") then
|
|
-- User clicked the Delete button, see what the select box's value is.
|
|
value = gui.elements["profile"].value
|
|
|
|
-- If there's a profile name supplied
|
|
if (value) then
|
|
-- Clean it's profile container of values
|
|
cleanse(InformantConfig["profile."..value])
|
|
|
|
-- Delete it's profile container
|
|
InformantConfig["profile."..value] = nil
|
|
|
|
-- Find it's entry in the profiles list
|
|
local profiles = InformantConfig["profiles"]
|
|
if (profiles) then
|
|
for pos, name in ipairs(profiles) do
|
|
-- If this is it, then extract it
|
|
if (name == value and name ~= "Default") then
|
|
table.remove(profiles, pos)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- If the user was using this one, then move them to Default
|
|
if (getUserProfileName() == value) then
|
|
InformantConfig[getUserSig()] = 'Default'
|
|
end
|
|
|
|
DEFAULT_CHAT_FRAME:AddMessage(_TRANS("INF_Help_ChatProfileDeleted")..value)
|
|
|
|
end
|
|
|
|
elseif (setting == "profile.default") then
|
|
-- User clicked the reset settings button
|
|
|
|
-- Get the current profile from the select box
|
|
value = gui.elements["profile"].value
|
|
|
|
-- Clean it's profile container of values
|
|
InformantConfig["profile."..value] = {}
|
|
|
|
DEFAULT_CHAT_FRAME:AddMessage(_TRANS("INF_Help_ChatProfileReset")..value)
|
|
|
|
elseif (setting == "profile") then
|
|
-- User selected a different value in the select box, get it
|
|
value = gui.elements["profile"].value
|
|
|
|
-- Change the user's current profile to this new one
|
|
InformantConfig[getUserSig()] = value
|
|
|
|
DEFAULT_CHAT_FRAME:AddMessage(_TRANS("INF_Help_ChatProfileUsing")..value)
|
|
|
|
end
|
|
|
|
-- Refresh all values to reflect current data
|
|
gui:Refresh()
|
|
|
|
else
|
|
-- Set the value for this setting in the current profile
|
|
local db = getUserProfile()
|
|
db[setting] = value
|
|
end
|
|
|
|
if (a == "sideIcon") and Informant.SideIcon then
|
|
-- not implemented yet
|
|
-- Informant.SideIcon.Update()
|
|
end
|
|
|
|
end
|
|
|
|
function lib.SetSetting(...)
|
|
setter(...)
|
|
if (gui) then
|
|
gui:Refresh()
|
|
end
|
|
end
|
|
|
|
|
|
local function getter(setting)
|
|
if (not InformantConfig) then InformantConfig = {} end
|
|
if not setting then return end
|
|
|
|
local a,b,c = strsplit(".", setting)
|
|
if (a == 'profile') then
|
|
if (b == 'profiles') then
|
|
local pList = InformantConfig["profiles"]
|
|
if (not pList) then
|
|
pList = { "Default" }
|
|
end
|
|
return pList
|
|
end
|
|
end
|
|
|
|
if (setting == 'profile') then
|
|
return getUserProfileName()
|
|
end
|
|
|
|
local db = getUserProfile()
|
|
if ( db[setting] ~= nil ) then
|
|
return db[setting]
|
|
else
|
|
return getDefault(setting)
|
|
end
|
|
end
|
|
|
|
function lib.GetSetting(setting, default)
|
|
local option = getter(setting)
|
|
if ( option ~= nil ) then
|
|
return option
|
|
else
|
|
return default
|
|
end
|
|
end
|
|
|
|
function lib.UpdateGuiConfig()
|
|
if gui then
|
|
if gui:IsVisible() then
|
|
gui:Hide()
|
|
end
|
|
gui = nil
|
|
lib.MakeGuiConfig()
|
|
end
|
|
end
|
|
|
|
function lib.MakeGuiConfig()
|
|
if gui then return end
|
|
|
|
local id, last, cont
|
|
local Configator = LibStub:GetLibrary("Configator")
|
|
gui = Configator:Create(setter, getter)
|
|
lib.Gui = gui
|
|
|
|
gui:AddCat("Informant") -- TODO - localize me!
|
|
|
|
id = gui:AddTab("General")
|
|
gui:AddControl(id, "Header", 0, _TRANS('INF_Interface_GeneralOptions'))
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "all", _TRANS('INF_Interface_EnableInformant') )
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_EnableInformant'))
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "embed", _TRANS('INF_Interface_Embed') )
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_Embed'))
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "show-vendor", _TRANS('INF_Interface_VendorToggle'))
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_VendorToggle'))
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "show-vendor-buy", _TRANS('INF_Interface_ShowVendorBuy'))
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ShowVendorBuy'))
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "show-vendor-sell", _TRANS('INF_Interface_ShowVendorSell'))
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ShowVendorSell'))
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "show-usage", _TRANS('INF_Interface_ShowUsage'))
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ShowUsage'))
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "show-stack", _TRANS('INF_Interface_ShowStack'))
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ShowStack'))
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "show-merchant", _TRANS('INF_Interface_ShowMerchant'))
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ShowMerchant'))
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "show-zero-merchants", _TRANS('INF_Interface_ShowZeroMerchants'))
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ShowZeroMerchants'))
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "show-quest", _TRANS('INF_Interface_ShowQuest'))
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ShowQuest'))
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "show-ilevel", _TRANS('INF_Interface_ShowIlevel'))
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ShowIlevel'))
|
|
|
|
gui:AddControl(id, "Checkbox", 0, 1, "show-link", _TRANS('INF_Interface_ShowLink'))
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ShowLink'))
|
|
gui:AddControl(id, "Checkbox", 0, 1, "show-crafted", _TRANS('INF_Interface_ShowCrafted'))
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ShowCrafted'))
|
|
gui:AddControl(id, "Checkbox", 0, 1, "ModTTShow", _TRANS('INF_Interface_ModTTShow'))--Only show tooltip if Alt is pressed.
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ModTTShow'))--This will prevent the display of Informant's extra tooltip unless Alt is pressed.
|
|
|
|
-- TODO - localize me!
|
|
gui:AddControl(id, "Checkbox", 0, 1, "auto-update", _TRANS('INF_Interface_AutoUpdate')) --"Automatically update item information at merchants"
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_AutoUpdate')) --"Allow Informant to scan your bags and merchant inventory for updates"
|
|
|
|
-- TODO - localize me!
|
|
gui:AddHelp(id, "what is",
|
|
_TRANS('INF_Help_WhatIs'), --"What is Informant?"
|
|
_TRANS('INF_Help_WhatIsAnswer')) --"Informant provides extra information about items in tooltips, in an information window, and to other addons."
|
|
|
|
gui:AddHelp(id, "how to use information window",
|
|
_TRANS('INF_Help_HowInfoWin'), --"How do I use the Information Window?"
|
|
_TRANS('INF_Help_HowInfoWinAnswer')) --"You can bind a key to toggle the Informant information window to get more detailed information about items. To do this, you need to open game options, select \"Key Bindings\" and look for Informant: Toggle Information Window."
|
|
|
|
--Copied from ADV
|
|
id = gui:AddTab("Profiles")
|
|
|
|
gui:AddControl(id, "Header", 0, _TRANS('INF_Interface_SetupProfile')) --"Setup, Configure and Edit Profiles"
|
|
|
|
gui:AddControl(id, "Subhead", 0, _TRANS('INF_Interface_ActivateProfile')) --"Activate a current profile"
|
|
gui:AddControl(id, "Selectbox", 0, 1, "profile.profiles", "profile", "Switch to the given profile") --This string isn't shown?
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ActivateProfile')) --"Select the profile that you wish to use for this character"
|
|
|
|
gui:AddControl(id, "Button", 0, 1, "profile.delete", _TRANS('INF_Interface_Delete')) --"Delete"
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_DeleteProfile')) --"Deletes the currently selected profile"
|
|
|
|
gui:AddControl(id, "Button", 0, 1, "profile.default", _TRANS('INF_Interface_DefaultProfile'))
|
|
gui:AddTip(id, _TRANS('INF_Helptooltip_DefaultProfile')) -- Reset all settings for the current profile"
|
|
|
|
gui:AddControl(id, "Subhead", 0, _TRANS('INF_Interface_CreateProfile')) --"Create or replace a profile"
|
|
|
|
gui:AddControl(id, "Text", 0, 1, "profile.name", _TRANS('INF_Interface_ProfileName')) --"New profile name:"
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ProfileName')) --"Enter the name of the profile that you wish to create"
|
|
|
|
gui:AddControl(id, "Button", 0, 1, "profile.save", _TRANS('INF_Interface_SaveProfile')) --"Save"
|
|
gui:AddTip(id, _TRANS('INF_HelpTooltip_ProfileSave')) --"Click this button to create or overwrite the specified profile name")
|
|
|
|
-- TODO - localize me!
|
|
-- these are stolen from EnhTT
|
|
gui:AddHelp(id, "what is",
|
|
"What is a profile?",
|
|
"A profile is used to contain a group of settings, you can use different profiles for different characters, or switch between profiles for the same character when doing different tasks."
|
|
)
|
|
gui:AddHelp(id, "how to create",
|
|
"How do I create a new profile?",
|
|
"You enter the name of the new profile that you wish to create into the text box labelled \"New profile name\", and then click the \"Save\" button. A profile may be called whatever you wish, but it should reflect the purpose of the profile so that you may more easily recall that purpose at a later date."
|
|
)
|
|
gui:AddHelp(id, "how to delete",
|
|
"How do I delete a profile?",
|
|
"To delete a profile, simply select the profile you wish to delete with the drop-down selection box and then click the Delete button."
|
|
)
|
|
gui:AddHelp(id, "why delete",
|
|
"Why would I want to delete a profile?",
|
|
"You can delete a profile when you don't want to use it anymore, or you want to create it from scratch again with default values. Deleting a profile will also affect any other characters who are using the profile."
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
-------------------------------------------------------------------------------
|
|
-- Prints the specified message to nLog.
|
|
--
|
|
-- syntax:
|
|
-- errorCode, message = debugPrint([message][, title][, errorCode][, level])
|
|
--
|
|
-- parameters:
|
|
-- message - (string) the error message
|
|
-- nil, no error message specified
|
|
-- title - (string) the title for the debug message
|
|
-- nil, no title specified
|
|
-- errorCode - (number) the error code
|
|
-- nil, no error code specified
|
|
-- level - (string) nLog message level
|
|
-- Any nLog.levels string is valid.
|
|
-- nil, no level specified
|
|
--
|
|
-- returns:
|
|
-- errorCode - (number) errorCode, if one is specified
|
|
-- nil, otherwise
|
|
-- message - (string) message, if one is specified
|
|
-- nil, otherwise
|
|
-------------------------------------------------------------------------------
|
|
function debugPrint(message, title, errorCode, level)
|
|
return Informant.DebugPrint(message, "InfSettings", title, errorCode, level)
|
|
end
|
|
|