LibrarianSettings = ZO_Object:Subclass() local timeFormats = { { name = "12 hour", value = TIME_FORMAT_PRECISION_TWELVE_HOUR }, { name = "24 hour", value = TIME_FORMAT_PRECISION_TWENTY_FOUR_HOUR } } local alertStyles = { { name = "None", value = "None", chat = false, alert = false }, { name = "Chat only", value = "Chat", chat = true, alert = false }, { name = "Alert only", value = "Alert", chat = false, alert = true }, { name = "Both", value = "Both", chat = true, alert = true }, } local reloadReminders = { { name = "Never", value = 0 }, { name = "1 new book", value = 1 }, { name = "5 new books", value = 5 }, { name = "10 new books", value = 10 } } function LibrarianSettings:New( ... ) local result = ZO_Object.New( self ) result:Initialise( ... ) return result end local function map(tbl, f) local t = {} for k,v in pairs(tbl) do t[k] = f(v) end return t end local function getSettingByName(tbl, name) for _,p in pairs(tbl) do if p.name == name then return p end end end local function getSettingByValue(tbl, value) for _,p in pairs(tbl) do if p.value == value then return p end end end function LibrarianSettings:Initialise(settings) self.settings = settings if self.settings.timeFormat == nil then self.settings.timeFormat = (GetCVar("Language.2") == "en") and TIME_FORMAT_PRECISION_TWELVE_HOUR or TIME_FORMAT_PRECISION_TWENTY_FOUR_HOUR end if self.settings.showAllBooks == nil then self.settings.showAllBooks = true end if self.settings.alertStyle == nil then self.settings.alertStyle = 'Both' self.settings.chatEnabled = true self.settings.alertEnabled = true end if self.settings.showUnreadIndicatorInReader == nil then self.settings.showUnreadIndicatorInReader = true end if self.settings.reloadReminderBookCount == nil then self.settings.reloadReminderBookCount = 5 end local LAM = LibStub("LibAddonMenu-1.0") local optionsPanel = LAM:CreateControlPanel("LibrarianOptions", "Librarian") LAM:AddHeader(optionsPanel, "LibrarianOptionsHeader", nil) LAM:AddDropdown(optionsPanel, "LibrarianOptionsTimeFormat", "Time Format", "Select a format to display times in.", map(timeFormats, function(item) return item.name end), function() return getSettingByValue(timeFormats, self.settings.timeFormat).name end, function(name) self.settings.timeFormat = getSettingByName(timeFormats, name).value LIBRARIAN:CommitScrollList() end) LAM:AddDropdown(optionsPanel, "LibrarianOptionsAlertSetting", "Alert Settings", "Select a style of alert.", map(alertStyles, function(item) return item.name end), function() return getSettingByValue(alertStyles, self.settings.alertStyle).name end, function(name) local setting = getSettingByName(alertStyles, name) self.settings.alertStyle = setting.value self.settings.chatEnabled = setting.chat self.settings.alertEnabled = setting.alert end) LAM:AddCheckbox(optionsPanel, "LibrarianOptionsUnreadIndicator", "Unread Indicator", "Show unread indicator in book reader.", function() return self.settings.showUnreadIndicatorInReader end, function(value) self.settings.showUnreadIndicatorInReader = value end) LAM:AddDropdown(optionsPanel, "LibrarianOptionsReloadReminder", "ReloadUI reminder after", "Reminder to /reloadui after this number of new books are discovered.", map(reloadReminders, function(item) return item.name end), function() return getSettingByValue(reloadReminders, self.settings.reloadReminderBookCount).name end, function(name) local setting = getSettingByName(reloadReminders, name) self.settings.reloadReminderBookCount = setting.value end) end