Compare with Previous | Blame | View Log
--- AceDBOptions-3.0 provides a universal AceConfig options screen for managing AceDB-3.0 profiles. -- @class file -- @name AceDBOptions-3.0 -- @release $Id: AceDBOptions-3.0.lua 765 2009-04-03 19:14:41Z nevcairiel $ local ACEDBO_MAJOR, ACEDBO_MINOR = "AceDBOptions-3.0", 10 local AceDBOptions, oldminor = LibStub:NewLibrary(ACEDBO_MAJOR, ACEDBO_MINOR) if not AceDBOptions then return end -- No upgrade needed AceDBOptions.optionTables = AceDBOptions.optionTables or {} AceDBOptions.handlers = AceDBOptions.handlers or {} --[[ Localization of AceDBOptions-3.0 ]] local L = { default = "Default", intro = "You can change the active database profile, so you can have different settings for every character.", reset_desc = "Reset the current profile back to its default values, in case your configuration is broken, or you simply want to start over.", reset = "Reset Profile", reset_sub = "Reset the current profile to the default", choose_desc = "You can either create a new profile by entering a name in the editbox, or choose one of the already exisiting profiles.", new = "New", new_sub = "Create a new empty profile.", choose = "Existing Profiles", choose_sub = "Select one of your currently available profiles.", copy_desc = "Copy the settings from one existing profile into the currently active profile.", copy = "Copy From", delete_desc = "Delete existing and unused profiles from the database to save space, and cleanup the SavedVariables file.", delete = "Delete a Profile", delete_sub = "Deletes a profile from the database.", delete_confirm = "Are you sure you want to delete the selected profile?", profiles = "Profiles", profiles_sub = "Manage Profiles", } local LOCALE = GetLocale() if LOCALE == "deDE" then L["default"] = "Standard" L["intro"] = "Hier kannst du das aktive Datenbankprofile \195\164ndern, damit du verschiedene Einstellungen f\195\188r jeden Charakter erstellen kannst, wodurch eine sehr flexible Konfiguration m\195\182glich wird." L["reset_desc"] = "Setzt das momentane Profil auf Standardwerte zur\195\188ck, f\195\188r den Fall das mit der Konfiguration etwas schief lief oder weil du einfach neu starten willst." L["reset"] = "Profil zur\195\188cksetzen" L["reset_sub"] = "Das aktuelle Profil auf Standard zur\195\188cksetzen." L["choose_desc"] = "Du kannst ein neues Profil erstellen, indem du einen neuen Namen in der Eingabebox 'Neu' eingibst, oder w\195\164hle eines der vorhandenen Profile aus." L["new"] = "Neu" L["new_sub"] = "Ein neues Profil erstellen." L["choose"] = "Vorhandene Profile" L["choose_sub"] = "W\195\164hlt ein bereits vorhandenes Profil aus." L["copy_desc"] = "Kopiere die Einstellungen von einem vorhandenen Profil in das aktive Profil." L["copy"] = "Kopieren von..." L["delete_desc"] = "L\195\182sche vorhandene oder unbenutzte Profile aus der Datenbank um Platz zu sparen und um die SavedVariables Datei 'sauber' zu halten." L["delete"] = "Profil l\195\182schen" L["delete_sub"] = "L\195\182scht ein Profil aus der Datenbank." L["delete_confirm"] = "Willst du das ausgew\195\164hlte Profil wirklich l\195\182schen?" L["profiles"] = "Profile" L["profiles_sub"] = "Profile verwalten" elseif LOCALE == "frFR" then L["default"] = "D\195\169faut" L["intro"] = "Vous pouvez changer le profil actuel afin d'avoir des param\195\168tres diff\195\169rents pour chaque personnage, permettant ainsi d'avoir une configuration tr\195\168s flexible." L["reset_desc"] = "R\195\169initialise le profil actuel au cas o\195\185 votre configuration est corrompue ou si vous voulez tout simplement faire table rase." L["reset"] = "R\195\169initialiser le profil" L["reset_sub"] = "R\195\169initialise le profil actuel avec les param\195\168tres par d\195\169faut." L["choose_desc"] = "Vous pouvez cr\195\169er un nouveau profil en entrant un nouveau nom dans la bo\195\174te de saisie, ou en choississant un des profils d\195\169j\195\160 existants." L["new"] = "Nouveau" L["new_sub"] = "Cr\195\169\195\169e un nouveau profil vierge." L["choose"] = "Profils existants" L["choose_sub"] = "Permet de choisir un des profils d\195\169j\195\160 disponibles." L["copy_desc"] = "Copie les param\195\168tres d'un profil d\195\169j\195\160 existant dans le profil actuellement actif." L["copy"] = "Copier \195\160 partir de" L["delete_desc"] = "Supprime les profils existants inutilis\195\169s de la base de donn\195\169es afin de gagner de la place et de nettoyer le fichier SavedVariables." L["delete"] = "Supprimer un profil" L["delete_sub"] = "Supprime un profil de la base de donn\195\169es." L["delete_confirm"] = "Etes-vous s\195\187r de vouloir supprimer le profil s\195\169lectionn\195\169 ?" L["profiles"] = "Profils" L["profiles_sub"] = "Gestion des profils" elseif LOCALE == "koKR" then L["default"] = "기본ê°" L["intro"] = "모ë ìºë¦í°ì ë¤ìí ì¤ì ê³¼ ì¬ì©ì¤ì¸ ë°ì´í°ë² ì´ì¤ íë¡í, ì´ëê²ì´ëì§ ë§¤ì° ë¤ë£¨ê¸° ì½ê² ë°ê¿ì ììµëë¤." L["reset_desc"] = "ë¨ìí ë¤ì ìë¡ê² 구ì±ì ìíë ê²½ì°, íì¬ íë¡íì 기본ê°ì¼ë¡ ì´ê¸°í í©ëë¤." L["reset"] = "íë¡í ì´ê¸°í" L["reset_sub"] = "íì¬ì íë¡íì 기본ê°ì¼ë¡ ì´ê¸°í í©ëë¤" L["choose_desc"] = "ìë¡ì´ ì´ë¦ì ì ë ¥íê±°ë, ì´ë¯¸ ìë íë¡íì¤ íë를 ì ííì¬ ìë¡ì´ íë¡íì ë§ë¤ ì ììµëë¤." L["new"] = "ìë¡ì´ íë¡í" L["new_sub"] = "ìë¡ì´ íë¡íì ë§ëëë¤." L["choose"] = "íë¡í ì í" L["choose_sub"] = "ë¹ì ì´ íì¬ ì´ì©í ì ìë íë¡íì ì íí©ëë¤." L["copy_desc"] = "íì¬ ì¬ì©ì¤ì¸ íë¡íì, ì íí íë¡íì ì¤ì ì ë³µì¬í©ëë¤." L["copy"] = "ë³µì¬" L["delete_desc"] = "ë°ì´í°ë² ì´ì¤ì ì¬ì©ì¤ì´ê±°ë ì ì¥ë íë¡íì¼ ìì ë¡ SavedVariables íì¼ì ì 리ì ê³µê° ì ì½ì´ ë©ëë¤." L["delete"] = "íë¡í ìì " L["delete_sub"] = "ë°ì´í°ë² ì´ì¤ì íë¡íì ìì í©ëë¤." L["delete_confirm"] = "ì ë§ë¡ ì íí íë¡íì ìì 를 ìíìëê¹?" L["profiles"] = "íë¡í" L["profiles_sub"] = "íë¡í ì¤ì " elseif LOCALE == "esES" then L["default"] = "Por defecto" L["intro"] = "Puedes cambiar el perfil activo de tal manera que cada personaje tenga diferentes configuraciones." L["reset_desc"] = "Reinicia el perfil actual a los valores por defectos, en caso de que se haya estropeado la configuración o quieras volver a empezar de nuevo." L["reset"] = "Reiniciar Perfil" L["reset_sub"] = "Reinicar el perfil actual al de por defecto" L["choose_desc"] = "Puedes crear un nuevo perfil introduciendo un nombre en el recuadro o puedes seleccionar un perfil de los ya existentes." L["new"] = "Nuevo" L["new_sub"] = "Crear un nuevo perfil vacio." L["choose"] = "Perfiles existentes" L["choose_sub"] = "Selecciona uno de los perfiles disponibles." L["copy_desc"] = "Copia los ajustes de un perfil existente al perfil actual." L["copy"] = "Copiar de" L["delete_desc"] = "Borra los perfiles existentes y sin uso de la base de datos para ganar espacio y limpiar el archivo SavedVariables." L["delete"] = "Borrar un Perfil" L["delete_sub"] = "Borra un perfil de la base de datos." L["delete_confirm"] = "¿Estas seguro que quieres borrar el perfil seleccionado?" L["profiles"] = "Perfiles" L["profiles_sub"] = "Manejar Perfiles" elseif LOCALE == "zhTW" then L["default"] = "é è¨" L["intro"] = "ä½ å¯ä»¥é¸æä¸åæ´»åçè³æè¨å®æªï¼éæ¨£ä½ çæ¯åè§è²å°±å¯ä»¥ææä¸åçè¨å®å¼ï¼å¯ä»¥çµ¦ä½ çæ件è¨å®å¸¶ä¾æ¥µå¤§çéæ´»æ§ã" L["reset_desc"] = "å°ç¶åçè¨å®æªæ¢å¾©å°å®çé è¨å¼ï¼ç¨æ¼ä½ çè¨å®æªæå£ï¼æè ä½ åªæ¯æ³éä¾çæ æ³ã" L["reset"] = "éç½®è¨å®æª" L["reset_sub"] = "å°ç¶åçè¨å®æªæ¢å¾©çºé è¨å¼" L["choose_desc"] = "ä½ å¯ä»¥ééå¨ææ¬æ¡å §è¼¸å ¥ä¸ååååµç«ä¸åæ°çè¨å®æªï¼ä¹å¯ä»¥é¸æä¸åå·²ç¶åå¨çè¨å®æªã" L["new"] = "æ°å»º" L["new_sub"] = "æ°å»ºä¸å空çè¨å®æªã" L["choose"] = "ç¾æçè¨å®æª" L["choose_sub"] = "å¾ç¶åå¯ç¨çè¨å®æªè£é¢é¸æä¸åã" L["copy_desc"] = "å¾ç¶åæåå·²ä¿åçè¨å®æªè¤è£½å°ç¶åæ£ä½¿ç¨çè¨å®æªã" L["copy"] = "è¤è£½èª" L["delete_desc"] = "å¾è³æ庫è£åªé¤ä¸å使ç¨çè¨å®æªï¼ä»¥ç¯ç空éï¼ä¸¦ä¸æ¸ çSavedVariablesæªã" L["delete"] = "åªé¤ä¸åè¨å®æª" L["delete_sub"] = "å¾è³æ庫è£åªé¤ä¸åè¨å®æªã" L["delete_confirm"] = "ä½ ç¢ºå®è¦åªé¤æé¸æçè¨å®æªåï¼" L["profiles"] = "è¨å®æª" L["profiles_sub"] = "管çè¨å®æª" elseif LOCALE == "zhCN" then L["default"] = "é»è®¤" L["intro"] = "ä½ å¯ä»¥éæ©ä¸ä¸ªæ´»å¨çæ°æ®é ç½®æ件ï¼è¿æ ·ä½ çæ¯ä¸ªè§è²å°±å¯ä»¥æ¥æä¸åç设置å¼ï¼å¯ä»¥ç»ä½ çæ件é 置带æ¥æ大ççµæ´»æ§ã" L["reset_desc"] = "å°å½åçé ç½®æ件æ¢å¤å°å®çé»è®¤å¼ï¼ç¨äºä½ çé ç½®æ件æåï¼æè ä½ åªæ¯æ³éæ¥çæ åµã" L["reset"] = "éç½®é ç½®æ件" L["reset_sub"] = "å°å½åçé ç½®æ件æ¢å¤ä¸ºé»è®¤å¼" L["choose_desc"] = "ä½ å¯ä»¥éè¿å¨ææ¬æ¡å è¾å ¥ä¸ä¸ªåååç«ä¸ä¸ªæ°çé ç½®æ件ï¼ä¹å¯ä»¥éæ©ä¸ä¸ªå·²ç»åå¨çé ç½®æ件ã" L["new"] = "æ°å»º" L["new_sub"] = "æ°å»ºä¸ä¸ªç©ºçé ç½®æ件ã" L["choose"] = "ç°æçé ç½®æ件" L["choose_sub"] = "ä»å½åå¯ç¨çé ç½®æ件éé¢éæ©ä¸ä¸ªã" L["copy_desc"] = "ä»å½åæ个已ä¿åçé ç½®æ件å¤å¶å°å½åæ£ä½¿ç¨çé ç½®æ件ã" L["copy"] = "å¤å¶èª" L["delete_desc"] = "ä»æ°æ®åºéå é¤ä¸å使ç¨çé ç½®æ件ï¼ä»¥èç空é´ï¼å¹¶ä¸æ¸ çSavedVariablesæ件ã" L["delete"] = "å é¤ä¸ä¸ªé ç½®æ件" L["delete_sub"] = "ä»æ°æ®åºéå é¤ä¸ä¸ªé ç½®æ件ã" L["delete_confirm"] = "ä½ ç¡®å®è¦å é¤æéæ©çé ç½®æ件ä¹ï¼" L["profiles"] = "é ç½®æ件" L["profiles_sub"] = "管çé ç½®æ件" elseif LOCALE == "ruRU" then L["default"] = "Ðо ÑмолÑаниÑ" L["intro"] = "ÐзменÑÑ Ð°ÐºÑивнÑй пÑоÑилÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе задаÑÑ ÑазлиÑнÑе наÑÑÑойки модиÑикаÑий Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ пеÑÑонажа." L["reset_desc"] = "ÐÑли ваÑа конÑигÑÑаÑии иÑпоÑÑена или еÑли Ð²Ñ Ñ Ð¾ÑиÑе наÑÑÑоиÑÑ Ð²ÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾ - ÑбÑоÑÑÑе ÑекÑÑий пÑоÑÐ¸Ð»Ñ Ð½Ð° ÑÑандаÑÑнÑе знаÑениÑ." L["reset"] = "СбÑÐ¾Ñ Ð¿ÑоÑилÑ" L["reset_sub"] = "СбÑÐ¾Ñ ÑекÑÑего пÑоÑÐ¸Ð»Ñ Ð½Ð° ÑÑандаÑÑнÑй" L["choose_desc"] = "ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð½Ð¾Ð²Ñй пÑоÑилÑ, Ð²Ð²ÐµÐ´Ñ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ в поле ввода, или вÑбÑаÑÑ Ð¾Ð´Ð¸Ð½ из Ñже ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ð¿ÑоÑилей." L["new"] = "ÐовÑй" L["new_sub"] = "СоздаÑÑ Ð½Ð¾Ð²Ñй ÑиÑÑÑй пÑоÑилÑ" L["choose"] = "СÑÑеÑÑвÑÑÑие пÑоÑили" L["choose_sub"] = "ÐÑÐ±Ð¾Ñ Ð¾Ð´Ð¸Ð½Ð¾Ð³Ð¾ из Ñже доÑÑÑпнÑÑ Ð¿ÑоÑилей" L["copy_desc"] = "СкопиÑоваÑÑ Ð½Ð°ÑÑÑойки из вÑбÑанного пÑоÑÐ¸Ð»Ñ Ð² акÑивнÑй." L["copy"] = "СкопиÑоваÑÑ Ð¸Ð·" L["delete_desc"] = "УдалиÑÑ ÑÑÑеÑÑвÑÑÑий и неиÑполÑзÑемÑй пÑоÑÐ¸Ð»Ñ Ð¸Ð· ÐÐ Ð´Ð»Ñ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¼ÐµÑÑа, и оÑиÑÑиÑÑ SavedVariables Ñайл." L["delete"] = "УдалиÑÑ Ð¿ÑоÑилÑ" L["delete_sub"] = "Удаление пÑоÑÐ¸Ð»Ñ Ð¸Ð· ÐÐ" L["delete_confirm"] = "ÐÑ ÑвеÑенÑ, ÑÑо Ð²Ñ Ñ Ð¾ÑиÑе ÑдалиÑÑ Ð²ÑбÑаннÑй пÑоÑилÑ?" L["profiles"] = "ÐÑоÑили" L["profiles_sub"] = "УпÑавление пÑоÑилÑми" end local defaultProfiles local tmpprofiles = {} -- Get a list of available profiles for the specified database. -- You can specify which profiles to include/exclude in the list using the two boolean parameters listed below. -- @param db The db object to retrieve the profiles from -- @param common If true, getProfileList will add the default profiles to the return list, even if they have not been created yet -- @param nocurrent If true, then getProfileList will not display the current profile in the list -- @return Hashtable of all profiles with the internal name as keys and the display name as value. local function getProfileList(db, common, nocurrent) local profiles = {} -- copy existing profiles into the table local currentProfile = db:GetCurrentProfile() for i,v in pairs(db:GetProfiles(tmpprofiles)) do if not (nocurrent and v == currentProfile) then profiles[v] = v end end -- add our default profiles to choose from ( or rename existing profiles) for k,v in pairs(defaultProfiles) do if (common or profiles[k]) and not (nocurrent and k == currentProfile) then profiles[k] = v end end return profiles end --[[ OptionsHandlerPrototype prototype class for handling the options in a sane way ]] local OptionsHandlerPrototype = {} --[[ Reset the profile ]] function OptionsHandlerPrototype:Reset() self.db:ResetProfile() end --[[ Set the profile to value ]] function OptionsHandlerPrototype:SetProfile(info, value) self.db:SetProfile(value) end --[[ returns the currently active profile ]] function OptionsHandlerPrototype:GetCurrentProfile() return self.db:GetCurrentProfile() end --[[ List all active profiles you can control the output with the .arg variable currently four modes are supported (empty) - return all available profiles "nocurrent" - returns all available profiles except the currently active profile "common" - returns all avaialble profiles + some commonly used profiles ("char - realm", "realm", "class", "Default") "both" - common except the active profile ]] function OptionsHandlerPrototype:ListProfiles(info) local arg = info.arg local profiles if arg == "common" and not self.noDefaultProfiles then profiles = getProfileList(self.db, true, nil) elseif arg == "nocurrent" then profiles = getProfileList(self.db, nil, true) elseif arg == "both" then -- currently not used profiles = getProfileList(self.db, (not self.noDefaultProfiles) and true, true) else profiles = getProfileList(self.db) end return profiles end function OptionsHandlerPrototype:HasNoProfiles(info) local profiles = self:ListProfiles(info) return ((not next(profiles)) and true or false) end --[[ Copy a profile ]] function OptionsHandlerPrototype:CopyProfile(info, value) self.db:CopyProfile(value) end --[[ Delete a profile from the db ]] function OptionsHandlerPrototype:DeleteProfile(info, value) self.db:DeleteProfile(value) end --[[ fill defaultProfiles with some generic values ]] local function generateDefaultProfiles(db) defaultProfiles = { ["Default"] = L["default"], [db.keys.char] = db.keys.char, [db.keys.realm] = db.keys.realm, [db.keys.class] = UnitClass("player") } end --[[ create and return a handler object for the db, or upgrade it if it already existed ]] local function getOptionsHandler(db, noDefaultProfiles) if not defaultProfiles then generateDefaultProfiles(db) end local handler = AceDBOptions.handlers[db] or { db = db, noDefaultProfiles = noDefaultProfiles } for k,v in pairs(OptionsHandlerPrototype) do handler[k] = v end AceDBOptions.handlers[db] = handler return handler end --[[ the real options table ]] local optionsTable = { desc = { order = 1, type = "description", name = L["intro"] .. "\n", }, descreset = { order = 9, type = "description", name = L["reset_desc"], }, reset = { order = 10, type = "execute", name = L["reset"], desc = L["reset_sub"], func = "Reset", }, choosedesc = { order = 20, type = "description", name = "\n" .. L["choose_desc"], }, new = { name = L["new"], desc = L["new_sub"], type = "input", order = 30, get = false, set = "SetProfile", }, choose = { name = L["choose"], desc = L["choose_sub"], type = "select", order = 40, get = "GetCurrentProfile", set = "SetProfile", values = "ListProfiles", arg = "common", }, copydesc = { order = 50, type = "description", name = "\n" .. L["copy_desc"], }, copyfrom = { order = 60, type = "select", name = L["copy"], desc = L["copy_desc"], get = false, set = "CopyProfile", values = "ListProfiles", disabled = "HasNoProfiles", arg = "nocurrent", }, deldesc = { order = 70, type = "description", name = "\n" .. L["delete_desc"], }, delete = { order = 80, type = "select", name = L["delete"], desc = L["delete_sub"], get = false, set = "DeleteProfile", values = "ListProfiles", disabled = "HasNoProfiles", arg = "nocurrent", confirm = true, confirmText = L["delete_confirm"], }, } --- Get/Create a option table that you can use in your addon to control the profiles of AceDB-3.0. -- @param db The database object to create the options table for. -- @return The options table to be used in AceConfig-3.0 -- @usage -- -- Assuming `options` is your top-level options table and `self.db` is your database: -- options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db) function AceDBOptions:GetOptionsTable(db, noDefaultProfiles) local tbl = AceDBOptions.optionTables[db] or { type = "group", name = L["profiles"], desc = L["profiles_sub"], } tbl.handler = getOptionsHandler(db, noDefaultProfiles) tbl.args = optionsTable AceDBOptions.optionTables[db] = tbl return tbl end -- upgrade existing tables for db,tbl in pairs(AceDBOptions.optionTables) do tbl.handler = getOptionsHandler(db) tbl.args = optionsTable end