View Single Post
07-29-16, 07:47 PM   #3
Benio
A Murloc Raider
Join Date: Jul 2016
Posts: 8
Thanks for a reply! Actually, ResetDB with CopyTable makes change permanent.
Unfortunatelly, it looks like I still need to reload UI in order to make GUI active again (clicking checkbox changes it's visuals, and related ADDON_NAME.db.global setting, but those are not saved on reloading UI).

Lua Code:
  1. ADDON_NAME.db:ResetDB("Default");
  2. ADDON_NAME.db.global = CopyTable(ADDON_NAME.default.global);
  3. ADDON_NAME.libs.ConfigRegistry:NotifyChange("ADDON_NAME");

edit: ResetProfile makes nothing, even with previously RegisterDefaults.

edit2: ResetDB defaults .db already thanks to second parameter of New, so no CopyTable is needed.
Instead, we need to just reinitialize database since it's reset:
Lua Code:
  1. ADDON_NAME.db:ResetDB("Default"); -- reset .db to default settings (passed as second parameter of ADDON_NAME.libs.DB:New)
  2. ADDON_NAME.db = ADDON_NAME.libs.DB:New("ADDON_NAMEDB", ADDON_NAME.default, true); -- reinitialize .db (same as first init above)
  3. ADDON_NAME.libs.ConfigRegistry:NotifyChange("ADDON_NAME"); -- finally, let GUI know to handle changes and work correctly after changing config

Works like a charm.

Final Note: Thanks, Ketho, for pointing out that passing table by reference won't work.
Thanks that, and the linked threads, connected with the "magic" issue, I found out how to handle it.
For futher reference, I am pasting the corrected code:
Lua Code:
  1. -- libs
  2. -- external /libs as ADDON_NAME.libs objects
  3. ADDON_NAME.libs = {};
  4. ADDON_NAME.libs.Config = LibStub("AceConfig-3.0");
  5. ADDON_NAME.libs.ConfigDialog = LibStub("AceConfigDialog-3.0");
  6. ADDON_NAME.libs.ConfigRegistry = LibStub("AceConfigRegistry-3.0");
  7. ADDON_NAME.libs.DB = LibStub("AceDB-3.0");
  8. ADDON_NAME.libs.Timer = LibStub("AceTimer-3.0");
Lua Code:
  1. -- options
  2. -- ADDON_NAME.default.global.MODULE_NAME
  3. -- ADDON_NAME.options.args.MODULE_NAME
  4. ADDON_NAME.default = {global = {}};
  5. ADDON_NAME.options = {
  6.     name = "ADDON_FULL_NAME",
  7.     type = "group",
  8.     args = {},
  9. };
Lua Code:
  1. -- add options
  2. ADDON_NAME.db = ADDON_NAME.libs.DB:New("ADDON_NAMEDB", ADDON_NAME.default, true);
  3. ADDON_NAME.libs.Config:RegisterOptionsTable("ADDON_NAME", ADDON_NAME.options);
  4. ADDON_NAME.frames = {options = ADDON_NAME.libs.ConfigDialog:AddToBlizOptions("ADDON_NAME")};
  5. ADDON_NAME.frames.options.default = function()
  6.     ADDON_NAME.db:ResetDB("Default");
  7.     ADDON_NAME.db = ADDON_NAME.libs.DB:New("ADDON_NAMEDB", ADDON_NAME.default, true);
  8.     ADDON_NAME.libs.ConfigRegistry:NotifyChange("ADDON_NAME");
  9. end;

Last edited by Benio : 07-29-16 at 08:41 PM.
  Reply With Quote