Zerotorescue@0: --- AceDBOptions-3.0 provides a universal AceConfig options screen for managing AceDB-3.0 profiles. Zerotorescue@0: -- @class file Zerotorescue@0: -- @name AceDBOptions-3.0 Zerotorescue@0: -- @release $Id: AceDBOptions-3.0.lua 938 2010-06-13 07:21:38Z nevcairiel $ Zerotorescue@0: local ACEDBO_MAJOR, ACEDBO_MINOR = "AceDBOptions-3.0", 12 Zerotorescue@0: local AceDBOptions, oldminor = LibStub:NewLibrary(ACEDBO_MAJOR, ACEDBO_MINOR) Zerotorescue@0: Zerotorescue@0: if not AceDBOptions then return end -- No upgrade needed Zerotorescue@0: Zerotorescue@0: -- Lua APIs Zerotorescue@0: local pairs, next = pairs, next Zerotorescue@0: Zerotorescue@0: -- WoW APIs Zerotorescue@0: local UnitClass = UnitClass Zerotorescue@0: Zerotorescue@0: -- Global vars/functions that we don't upvalue since they might get hooked, or upgraded Zerotorescue@0: -- List them here for Mikk's FindGlobals script Zerotorescue@0: -- GLOBALS: NORMAL_FONT_COLOR_CODE, FONT_COLOR_CODE_CLOSE Zerotorescue@0: Zerotorescue@0: AceDBOptions.optionTables = AceDBOptions.optionTables or {} Zerotorescue@0: AceDBOptions.handlers = AceDBOptions.handlers or {} Zerotorescue@0: Zerotorescue@0: --[[ Zerotorescue@0: Localization of AceDBOptions-3.0 Zerotorescue@0: ]] Zerotorescue@0: Zerotorescue@0: local L = { Zerotorescue@0: default = "Default", Zerotorescue@0: intro = "You can change the active database profile, so you can have different settings for every character.", Zerotorescue@0: reset_desc = "Reset the current profile back to its default values, in case your configuration is broken, or you simply want to start over.", Zerotorescue@0: reset = "Reset Profile", Zerotorescue@0: reset_sub = "Reset the current profile to the default", Zerotorescue@0: choose_desc = "You can either create a new profile by entering a name in the editbox, or choose one of the already existing profiles.", Zerotorescue@0: new = "New", Zerotorescue@0: new_sub = "Create a new empty profile.", Zerotorescue@0: choose = "Existing Profiles", Zerotorescue@0: choose_sub = "Select one of your currently available profiles.", Zerotorescue@0: copy_desc = "Copy the settings from one existing profile into the currently active profile.", Zerotorescue@0: copy = "Copy From", Zerotorescue@0: delete_desc = "Delete existing and unused profiles from the database to save space, and cleanup the SavedVariables file.", Zerotorescue@0: delete = "Delete a Profile", Zerotorescue@0: delete_sub = "Deletes a profile from the database.", Zerotorescue@0: delete_confirm = "Are you sure you want to delete the selected profile?", Zerotorescue@0: profiles = "Profiles", Zerotorescue@0: profiles_sub = "Manage Profiles", Zerotorescue@0: current = "Current Profile:", Zerotorescue@0: } Zerotorescue@0: Zerotorescue@0: local LOCALE = GetLocale() Zerotorescue@0: if LOCALE == "deDE" then Zerotorescue@0: L["default"] = "Standard" Zerotorescue@0: 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." Zerotorescue@0: 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." Zerotorescue@0: L["reset"] = "Profil zur\195\188cksetzen" Zerotorescue@0: L["reset_sub"] = "Das aktuelle Profil auf Standard zur\195\188cksetzen." Zerotorescue@0: 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." Zerotorescue@0: L["new"] = "Neu" Zerotorescue@0: L["new_sub"] = "Ein neues Profil erstellen." Zerotorescue@0: L["choose"] = "Vorhandene Profile" Zerotorescue@0: L["choose_sub"] = "W\195\164hlt ein bereits vorhandenes Profil aus." Zerotorescue@0: L["copy_desc"] = "Kopiere die Einstellungen von einem vorhandenen Profil in das aktive Profil." Zerotorescue@0: L["copy"] = "Kopieren von..." Zerotorescue@0: 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." Zerotorescue@0: L["delete"] = "Profil l\195\182schen" Zerotorescue@0: L["delete_sub"] = "L\195\182scht ein Profil aus der Datenbank." Zerotorescue@0: L["delete_confirm"] = "Willst du das ausgew\195\164hlte Profil wirklich l\195\182schen?" Zerotorescue@0: L["profiles"] = "Profile" Zerotorescue@0: L["profiles_sub"] = "Profile verwalten" Zerotorescue@0: --L["current"] = "Current Profile:" Zerotorescue@0: elseif LOCALE == "frFR" then Zerotorescue@0: L["default"] = "D\195\169faut" Zerotorescue@0: 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." Zerotorescue@0: 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." Zerotorescue@0: L["reset"] = "R\195\169initialiser le profil" Zerotorescue@0: L["reset_sub"] = "R\195\169initialise le profil actuel avec les param\195\168tres par d\195\169faut." Zerotorescue@0: 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." Zerotorescue@0: L["new"] = "Nouveau" Zerotorescue@0: L["new_sub"] = "Cr\195\169\195\169e un nouveau profil vierge." Zerotorescue@0: L["choose"] = "Profils existants" Zerotorescue@0: L["choose_sub"] = "Permet de choisir un des profils d\195\169j\195\160 disponibles." Zerotorescue@0: L["copy_desc"] = "Copie les param\195\168tres d'un profil d\195\169j\195\160 existant dans le profil actuellement actif." Zerotorescue@0: L["copy"] = "Copier \195\160 partir de" Zerotorescue@0: 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." Zerotorescue@0: L["delete"] = "Supprimer un profil" Zerotorescue@0: L["delete_sub"] = "Supprime un profil de la base de donn\195\169es." Zerotorescue@0: L["delete_confirm"] = "Etes-vous s\195\187r de vouloir supprimer le profil s\195\169lectionn\195\169 ?" Zerotorescue@0: L["profiles"] = "Profils" Zerotorescue@0: L["profiles_sub"] = "Gestion des profils" Zerotorescue@0: --L["current"] = "Current Profile:" Zerotorescue@0: elseif LOCALE == "koKR" then Zerotorescue@0: L["default"] = "기본값" Zerotorescue@0: L["intro"] = "모든 캐릭터의 다양한 설정과 사용중인 데이터베이스 프로필, 어느것이던지 매우 다루기 쉽게 바꿀수 있습니다." Zerotorescue@0: L["reset_desc"] = "단순히 다시 새롭게 구성을 원하는 경우, 현재 프로필을 기본값으로 초기화 합니다." Zerotorescue@0: L["reset"] = "프로필 초기화" Zerotorescue@0: L["reset_sub"] = "현재의 프로필을 기본값으로 초기화 합니다" Zerotorescue@0: L["choose_desc"] = "새로운 이름을 입력하거나, 이미 있는 프로필중 하나를 선택하여 새로운 프로필을 만들 수 있습니다." Zerotorescue@0: L["new"] = "새로운 프로필" Zerotorescue@0: L["new_sub"] = "새로운 프로필을 만듭니다." Zerotorescue@0: L["choose"] = "프로필 선택" Zerotorescue@0: L["choose_sub"] = "당신이 현재 이용할수 있는 프로필을 선택합니다." Zerotorescue@0: L["copy_desc"] = "현재 사용중인 프로필에, 선택한 프로필의 설정을 복사합니다." Zerotorescue@0: L["copy"] = "복사" Zerotorescue@0: L["delete_desc"] = "데이터베이스에 사용중이거나 저장된 프로파일 삭제로 SavedVariables 파일의 정리와 공간 절약이 됩니다." Zerotorescue@0: L["delete"] = "프로필 삭제" Zerotorescue@0: L["delete_sub"] = "데이터베이스의 프로필을 삭제합니다." Zerotorescue@0: L["delete_confirm"] = "정말로 선택한 프로필의 삭제를 원하십니까?" Zerotorescue@0: L["profiles"] = "프로필" Zerotorescue@0: L["profiles_sub"] = "프로필 설정" Zerotorescue@0: --L["current"] = "Current Profile:" Zerotorescue@0: elseif LOCALE == "esES" or LOCALE == "esMX" then Zerotorescue@0: L["default"] = "Por defecto" Zerotorescue@0: L["intro"] = "Puedes cambiar el perfil activo de tal manera que cada personaje tenga diferentes configuraciones." Zerotorescue@0: 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." Zerotorescue@0: L["reset"] = "Reiniciar Perfil" Zerotorescue@0: L["reset_sub"] = "Reinicar el perfil actual al de por defecto" Zerotorescue@0: L["choose_desc"] = "Puedes crear un nuevo perfil introduciendo un nombre en el recuadro o puedes seleccionar un perfil de los ya existentes." Zerotorescue@0: L["new"] = "Nuevo" Zerotorescue@0: L["new_sub"] = "Crear un nuevo perfil vacio." Zerotorescue@0: L["choose"] = "Perfiles existentes" Zerotorescue@0: L["choose_sub"] = "Selecciona uno de los perfiles disponibles." Zerotorescue@0: L["copy_desc"] = "Copia los ajustes de un perfil existente al perfil actual." Zerotorescue@0: L["copy"] = "Copiar de" Zerotorescue@0: L["delete_desc"] = "Borra los perfiles existentes y sin uso de la base de datos para ganar espacio y limpiar el archivo SavedVariables." Zerotorescue@0: L["delete"] = "Borrar un Perfil" Zerotorescue@0: L["delete_sub"] = "Borra un perfil de la base de datos." Zerotorescue@0: L["delete_confirm"] = "¿Estas seguro que quieres borrar el perfil seleccionado?" Zerotorescue@0: L["profiles"] = "Perfiles" Zerotorescue@0: L["profiles_sub"] = "Manejar Perfiles" Zerotorescue@0: --L["current"] = "Current Profile:" Zerotorescue@0: elseif LOCALE == "zhTW" then Zerotorescue@0: L["default"] = "預設" Zerotorescue@0: L["intro"] = "你可以選擇一個活動的資料設定檔,這樣你的每個角色就可以擁有不同的設定值,可以給你的插件設定帶來極大的靈活性。" Zerotorescue@0: L["reset_desc"] = "將當前的設定檔恢復到它的預設值,用於你的設定檔損壞,或者你只是想重來的情況。" Zerotorescue@0: L["reset"] = "重置設定檔" Zerotorescue@0: L["reset_sub"] = "將當前的設定檔恢復為預設值" Zerotorescue@0: L["choose_desc"] = "你可以通過在文本框內輸入一個名字創立一個新的設定檔,也可以選擇一個已經存在的設定檔。" Zerotorescue@0: L["new"] = "新建" Zerotorescue@0: L["new_sub"] = "新建一個空的設定檔。" Zerotorescue@0: L["choose"] = "現有的設定檔" Zerotorescue@0: L["choose_sub"] = "從當前可用的設定檔裏面選擇一個。" Zerotorescue@0: L["copy_desc"] = "從當前某個已保存的設定檔複製到當前正使用的設定檔。" Zerotorescue@0: L["copy"] = "複製自" Zerotorescue@0: L["delete_desc"] = "從資料庫裏刪除不再使用的設定檔,以節省空間,並且清理SavedVariables檔。" Zerotorescue@0: L["delete"] = "刪除一個設定檔" Zerotorescue@0: L["delete_sub"] = "從資料庫裏刪除一個設定檔。" Zerotorescue@0: L["delete_confirm"] = "你確定要刪除所選擇的設定檔嗎?" Zerotorescue@0: L["profiles"] = "設定檔" Zerotorescue@0: L["profiles_sub"] = "管理設定檔" Zerotorescue@0: --L["current"] = "Current Profile:" Zerotorescue@0: elseif LOCALE == "zhCN" then Zerotorescue@0: L["default"] = "默认" Zerotorescue@0: L["intro"] = "你可以选择一个活动的数据配置文件,这样你的每个角色就可以拥有不同的设置值,可以给你的插件配置带来极大的灵活性。" Zerotorescue@0: L["reset_desc"] = "将当前的配置文件恢复到它的默认值,用于你的配置文件损坏,或者你只是想重来的情况。" Zerotorescue@0: L["reset"] = "重置配置文件" Zerotorescue@0: L["reset_sub"] = "将当前的配置文件恢复为默认值" Zerotorescue@0: L["choose_desc"] = "你可以通过在文本框内输入一个名字创立一个新的配置文件,也可以选择一个已经存在的配置文件。" Zerotorescue@0: L["new"] = "新建" Zerotorescue@0: L["new_sub"] = "新建一个空的配置文件。" Zerotorescue@0: L["choose"] = "现有的配置文件" Zerotorescue@0: L["choose_sub"] = "从当前可用的配置文件里面选择一个。" Zerotorescue@0: L["copy_desc"] = "从当前某个已保存的配置文件复制到当前正使用的配置文件。" Zerotorescue@0: L["copy"] = "复制自" Zerotorescue@0: L["delete_desc"] = "从数据库里删除不再使用的配置文件,以节省空间,并且清理SavedVariables文件。" Zerotorescue@0: L["delete"] = "删除一个配置文件" Zerotorescue@0: L["delete_sub"] = "从数据库里删除一个配置文件。" Zerotorescue@0: L["delete_confirm"] = "你确定要删除所选择的配置文件么?" Zerotorescue@0: L["profiles"] = "配置文件" Zerotorescue@0: L["profiles_sub"] = "管理配置文件" Zerotorescue@0: --L["current"] = "Current Profile:" Zerotorescue@0: elseif LOCALE == "ruRU" then Zerotorescue@0: L["default"] = "По умолчанию" Zerotorescue@0: L["intro"] = "Изменяя активный профиль, вы можете задать различные настройки модификаций для каждого персонажа." Zerotorescue@0: L["reset_desc"] = "Если ваша конфигурации испорчена или если вы хотите настроить всё заново - сбросьте текущий профиль на стандартные значения." Zerotorescue@0: L["reset"] = "Сброс профиля" Zerotorescue@0: L["reset_sub"] = "Сброс текущего профиля на стандартный" Zerotorescue@0: L["choose_desc"] = "Вы можете создать новый профиль, введя название в поле ввода, или выбрать один из уже существующих профилей." Zerotorescue@0: L["new"] = "Новый" Zerotorescue@0: L["new_sub"] = "Создать новый чистый профиль" Zerotorescue@0: L["choose"] = "Существующие профили" Zerotorescue@0: L["choose_sub"] = "Выбор одиного из уже доступных профилей" Zerotorescue@0: L["copy_desc"] = "Скопировать настройки из выбранного профиля в активный." Zerotorescue@0: L["copy"] = "Скопировать из" Zerotorescue@0: L["delete_desc"] = "Удалить существующий и неиспользуемый профиль из БД для сохранения места, и очистить SavedVariables файл." Zerotorescue@0: L["delete"] = "Удалить профиль" Zerotorescue@0: L["delete_sub"] = "Удаление профиля из БД" Zerotorescue@0: L["delete_confirm"] = "Вы уверены, что вы хотите удалить выбранный профиль?" Zerotorescue@0: L["profiles"] = "Профили" Zerotorescue@0: L["profiles_sub"] = "Управление профилями" Zerotorescue@0: --L["current"] = "Current Profile:" Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: local defaultProfiles Zerotorescue@0: local tmpprofiles = {} Zerotorescue@0: Zerotorescue@0: -- Get a list of available profiles for the specified database. Zerotorescue@0: -- You can specify which profiles to include/exclude in the list using the two boolean parameters listed below. Zerotorescue@0: -- @param db The db object to retrieve the profiles from Zerotorescue@0: -- @param common If true, getProfileList will add the default profiles to the return list, even if they have not been created yet Zerotorescue@0: -- @param nocurrent If true, then getProfileList will not display the current profile in the list Zerotorescue@0: -- @return Hashtable of all profiles with the internal name as keys and the display name as value. Zerotorescue@0: local function getProfileList(db, common, nocurrent) Zerotorescue@0: local profiles = {} Zerotorescue@0: Zerotorescue@0: -- copy existing profiles into the table Zerotorescue@0: local currentProfile = db:GetCurrentProfile() Zerotorescue@0: for i,v in pairs(db:GetProfiles(tmpprofiles)) do Zerotorescue@0: if not (nocurrent and v == currentProfile) then Zerotorescue@0: profiles[v] = v Zerotorescue@0: end Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: -- add our default profiles to choose from ( or rename existing profiles) Zerotorescue@0: for k,v in pairs(defaultProfiles) do Zerotorescue@0: if (common or profiles[k]) and not (nocurrent and k == currentProfile) then Zerotorescue@0: profiles[k] = v Zerotorescue@0: end Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: return profiles Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: --[[ Zerotorescue@0: OptionsHandlerPrototype Zerotorescue@0: prototype class for handling the options in a sane way Zerotorescue@0: ]] Zerotorescue@0: local OptionsHandlerPrototype = {} Zerotorescue@0: Zerotorescue@0: --[[ Reset the profile ]] Zerotorescue@0: function OptionsHandlerPrototype:Reset() Zerotorescue@0: self.db:ResetProfile() Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: --[[ Set the profile to value ]] Zerotorescue@0: function OptionsHandlerPrototype:SetProfile(info, value) Zerotorescue@0: self.db:SetProfile(value) Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: --[[ returns the currently active profile ]] Zerotorescue@0: function OptionsHandlerPrototype:GetCurrentProfile() Zerotorescue@0: return self.db:GetCurrentProfile() Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: --[[ Zerotorescue@0: List all active profiles Zerotorescue@0: you can control the output with the .arg variable Zerotorescue@0: currently four modes are supported Zerotorescue@0: Zerotorescue@0: (empty) - return all available profiles Zerotorescue@0: "nocurrent" - returns all available profiles except the currently active profile Zerotorescue@0: "common" - returns all avaialble profiles + some commonly used profiles ("char - realm", "realm", "class", "Default") Zerotorescue@0: "both" - common except the active profile Zerotorescue@0: ]] Zerotorescue@0: function OptionsHandlerPrototype:ListProfiles(info) Zerotorescue@0: local arg = info.arg Zerotorescue@0: local profiles Zerotorescue@0: if arg == "common" and not self.noDefaultProfiles then Zerotorescue@0: profiles = getProfileList(self.db, true, nil) Zerotorescue@0: elseif arg == "nocurrent" then Zerotorescue@0: profiles = getProfileList(self.db, nil, true) Zerotorescue@0: elseif arg == "both" then -- currently not used Zerotorescue@0: profiles = getProfileList(self.db, (not self.noDefaultProfiles) and true, true) Zerotorescue@0: else Zerotorescue@0: profiles = getProfileList(self.db) Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: return profiles Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: function OptionsHandlerPrototype:HasNoProfiles(info) Zerotorescue@0: local profiles = self:ListProfiles(info) Zerotorescue@0: return ((not next(profiles)) and true or false) Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: --[[ Copy a profile ]] Zerotorescue@0: function OptionsHandlerPrototype:CopyProfile(info, value) Zerotorescue@0: self.db:CopyProfile(value) Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: --[[ Delete a profile from the db ]] Zerotorescue@0: function OptionsHandlerPrototype:DeleteProfile(info, value) Zerotorescue@0: self.db:DeleteProfile(value) Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: --[[ fill defaultProfiles with some generic values ]] Zerotorescue@0: local function generateDefaultProfiles(db) Zerotorescue@0: defaultProfiles = { Zerotorescue@0: ["Default"] = L["default"], Zerotorescue@0: [db.keys.char] = db.keys.char, Zerotorescue@0: [db.keys.realm] = db.keys.realm, Zerotorescue@0: [db.keys.class] = UnitClass("player") Zerotorescue@0: } Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: --[[ create and return a handler object for the db, or upgrade it if it already existed ]] Zerotorescue@0: local function getOptionsHandler(db, noDefaultProfiles) Zerotorescue@0: if not defaultProfiles then Zerotorescue@0: generateDefaultProfiles(db) Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: local handler = AceDBOptions.handlers[db] or { db = db, noDefaultProfiles = noDefaultProfiles } Zerotorescue@0: Zerotorescue@0: for k,v in pairs(OptionsHandlerPrototype) do Zerotorescue@0: handler[k] = v Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: AceDBOptions.handlers[db] = handler Zerotorescue@0: return handler Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: --[[ Zerotorescue@0: the real options table Zerotorescue@0: ]] Zerotorescue@0: local optionsTable = { Zerotorescue@0: desc = { Zerotorescue@0: order = 1, Zerotorescue@0: type = "description", Zerotorescue@0: name = L["intro"] .. "\n", Zerotorescue@0: }, Zerotorescue@0: descreset = { Zerotorescue@0: order = 9, Zerotorescue@0: type = "description", Zerotorescue@0: name = L["reset_desc"], Zerotorescue@0: }, Zerotorescue@0: reset = { Zerotorescue@0: order = 10, Zerotorescue@0: type = "execute", Zerotorescue@0: name = L["reset"], Zerotorescue@0: desc = L["reset_sub"], Zerotorescue@0: func = "Reset", Zerotorescue@0: }, Zerotorescue@0: current = { Zerotorescue@0: order = 11, Zerotorescue@0: type = "description", Zerotorescue@0: name = function(info) return L["current"] .. " " .. NORMAL_FONT_COLOR_CODE .. info.handler:GetCurrentProfile() .. FONT_COLOR_CODE_CLOSE end, Zerotorescue@0: width = "default", Zerotorescue@0: }, Zerotorescue@0: choosedesc = { Zerotorescue@0: order = 20, Zerotorescue@0: type = "description", Zerotorescue@0: name = "\n" .. L["choose_desc"], Zerotorescue@0: }, Zerotorescue@0: new = { Zerotorescue@0: name = L["new"], Zerotorescue@0: desc = L["new_sub"], Zerotorescue@0: type = "input", Zerotorescue@0: order = 30, Zerotorescue@0: get = false, Zerotorescue@0: set = "SetProfile", Zerotorescue@0: }, Zerotorescue@0: choose = { Zerotorescue@0: name = L["choose"], Zerotorescue@0: desc = L["choose_sub"], Zerotorescue@0: type = "select", Zerotorescue@0: order = 40, Zerotorescue@0: get = "GetCurrentProfile", Zerotorescue@0: set = "SetProfile", Zerotorescue@0: values = "ListProfiles", Zerotorescue@0: arg = "common", Zerotorescue@0: }, Zerotorescue@0: copydesc = { Zerotorescue@0: order = 50, Zerotorescue@0: type = "description", Zerotorescue@0: name = "\n" .. L["copy_desc"], Zerotorescue@0: }, Zerotorescue@0: copyfrom = { Zerotorescue@0: order = 60, Zerotorescue@0: type = "select", Zerotorescue@0: name = L["copy"], Zerotorescue@0: desc = L["copy_desc"], Zerotorescue@0: get = false, Zerotorescue@0: set = "CopyProfile", Zerotorescue@0: values = "ListProfiles", Zerotorescue@0: disabled = "HasNoProfiles", Zerotorescue@0: arg = "nocurrent", Zerotorescue@0: }, Zerotorescue@0: deldesc = { Zerotorescue@0: order = 70, Zerotorescue@0: type = "description", Zerotorescue@0: name = "\n" .. L["delete_desc"], Zerotorescue@0: }, Zerotorescue@0: delete = { Zerotorescue@0: order = 80, Zerotorescue@0: type = "select", Zerotorescue@0: name = L["delete"], Zerotorescue@0: desc = L["delete_sub"], Zerotorescue@0: get = false, Zerotorescue@0: set = "DeleteProfile", Zerotorescue@0: values = "ListProfiles", Zerotorescue@0: disabled = "HasNoProfiles", Zerotorescue@0: arg = "nocurrent", Zerotorescue@0: confirm = true, Zerotorescue@0: confirmText = L["delete_confirm"], Zerotorescue@0: }, Zerotorescue@0: } Zerotorescue@0: Zerotorescue@0: --- Get/Create a option table that you can use in your addon to control the profiles of AceDB-3.0. Zerotorescue@0: -- @param db The database object to create the options table for. Zerotorescue@0: -- @return The options table to be used in AceConfig-3.0 Zerotorescue@0: -- @usage Zerotorescue@0: -- -- Assuming `options` is your top-level options table and `self.db` is your database: Zerotorescue@0: -- options.args.profiles = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db) Zerotorescue@0: function AceDBOptions:GetOptionsTable(db, noDefaultProfiles) Zerotorescue@0: local tbl = AceDBOptions.optionTables[db] or { Zerotorescue@0: type = "group", Zerotorescue@0: name = L["profiles"], Zerotorescue@0: desc = L["profiles_sub"], Zerotorescue@0: } Zerotorescue@0: Zerotorescue@0: tbl.handler = getOptionsHandler(db, noDefaultProfiles) Zerotorescue@0: tbl.args = optionsTable Zerotorescue@0: Zerotorescue@0: AceDBOptions.optionTables[db] = tbl Zerotorescue@0: return tbl Zerotorescue@0: end Zerotorescue@0: Zerotorescue@0: -- upgrade existing tables Zerotorescue@0: for db,tbl in pairs(AceDBOptions.optionTables) do Zerotorescue@0: tbl.handler = getOptionsHandler(db) Zerotorescue@0: tbl.args = optionsTable Zerotorescue@0: end