p3lim-wow / Wasabi

Library for implementing addon configs
Other
6 stars 1 forks source link

Database rework reminder! #3

Closed ghost closed 6 years ago

ghost commented 7 years ago

This is just a reminder for the Database rework.

https://www.wowinterface.com/downloads/info24061-Wasabi.html#comments From the link above you can see my examples.

Hey, p3lim. Once again thank you for your work.

Currently, I noticed you have to use a Database for each module you make. The below example should explain more.

local General = LibStub("Wasabi"):New(K.Title, "GeneralDB", C.General)
General:AddSlash("/kkthnxui")
General:Initialize(function(self)
  local Title = self:CreateTitle()
    Title:SetPoint("TOPLEFT", 16, -16)
    Title:SetText("General Options")

    local AutoScale_OnEnter = function(self)
        GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT")
        GameTooltip:AddLine("Automatically scale the User Interface based on your screen resolution", 0, 1, 0)
        GameTooltip:Show()
    end

  local AutoScale = self:CreateCheckButton("AutoScale")
    AutoScale:SetPoint("TOPLEFT", Title, "BOTTOMLEFT", 0, -8)
    AutoScale:SetText("Auto Scale Resolution")
    AutoScale:SetScript("OnEnter", AutoScale_OnEnter)
    AutoScale:SetScript("OnLeave", GameTooltip_Hide)

    local FontSize_OnEnter = function(self)
        GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT")
        GameTooltip:AddLine("Set the font size for everything in UI. Note: This doesn't effect somethings that have their own seperate options (UnitFrame Font, Datatext Font, ect..)", 0, 1, 0)
        GameTooltip:Show()
    end

    local FontSize = self:CreateSlider("FontSize")
    FontSize:SetRange(10, 20)
    FontSize:SetStep(1)
    FontSize:SetPoint("TOPLEFT", AutoScale, "BOTTOMLEFT", 0, -8)
    FontSize:SetText("Set UI Font Size")
    FontSize:SetScript("OnEnter", FontSize_OnEnter)
    FontSize:SetScript("OnLeave", GameTooltip_Hide)
end)

local ActionBar = General:CreateChild("ActionBar", "ActionBarDB", C.ActionBar)
ActionBar:Initialize(function(self)
  local Title = self:CreateTitle()
    Title:SetPoint("TOPLEFT", 16, -16)
    Title:SetText("ActionBar Options")

end)

So, in theory, I am wondering something here. I am wanting to just use one SavedVariable for everything. I just want to use KkthnxUIDB instead of filling ActionBarDB, GeneralDB, NameplatesDB and so on. Now I could have overlooked this as I am still checking out your Lib.

To kinda show what I am wanting is more of a compact Database from your config. Would be a lot cleaner.

KkthnxUIData = {
    ["Stormreaver"] = {
        ["Gripsohard"] = {
            ["SplitBars"] = true,
            ["Movers"] = {
                ["Loot / Alert Frames"] = {
                    "CENTER", -- [1]
                    "UIParent", -- [2]
                    "CENTER", -- [3]
                    -334, -- [4]
                    60.9999656677246, -- [5]
                },
            },
            ["BottomBars"] = 2,
            ["RightBars"] = 1,
            ["InstallComplete"] = true,
            ["BarsLocked"] = true,
        },
        ["Pervie"] = {
            ["SplitBars"] = true,
            ["Movers"] = {
                ["Loot / Alert Frames"] = {
                    "CENTER", -- [1]
                    "UIParent", -- [2]
                    "CENTER", -- [3]
                    -334, -- [4]
                    60.9999656677246, -- [5]
                },
                ["KkthnxUIBuffHeader"] = {
                    "RIGHT", -- [1]
                    "UIParent", -- [2]
                    "RIGHT", -- [3]
                    -324.000183105469, -- [4]
                    119.999938964844, -- [5]
                },
            },
            ["BottomBars"] = 2,
            ["RightBars"] = 1,
            ["InstallComplete"] = true,
            ["BarsLocked"] = true,
        },
    },
}
p3lim commented 7 years ago

I could add an option to specify a table key to use within an existing table. It wouldn't be completely merged like you wanted, but it would be in one parent table. Something like this: Wasabi:New(name, 'KkthnxUIData', 'General', defaults)

KkthnxUIData = {
    ["General"] = {
        ["AutoScale"] = true,
        ["FontSize"] = 13,
    },
    ["ActionBars"] = {
        ["BarsLocked"] = true,
    },
}

Another alternative is simply allowing no savedvariable passed to sub-frames, let them leech off the main one. I'll see what I'll do.

Also, next version will have profile management, so yo won't need to implement that yourself.

ghost commented 7 years ago

You simply rock! Looking forward to the profile management. Thank you for the info.

p3lim commented 6 years ago

This one is sadly delayed as I can't really find a good way to implement this. Profiles are still being considered though, but sub-tables sadly won't be.

Superseded by #1.