promotional bannermobile promotional banner
premium banner
LibEQOL: QoL toolkit for WoW addons. Edit Mode overlays, handles, keyboard nudge, reset, overlay eye, overlap chooser, auto settings (checkbox/dropdown/slider/color). Settings Mode for Blizzard Settings with prefix safety and notify hooks.

Description

LibEQOL

Quality-of-life toolkit for WoW addons. Ships the Edit Mode helper sublib LibEQOLEditMode-1.0 (selection overlays, dialogs, widgets) and the Settings helper sublib LibEQOLSettingsMode-1.0 (helpers for the Blizzard Settings UI).

What you get

  • Edit Mode: selection overlay that plugs into Blizzard highlight, move handles, keyboard nudging (Shift for larger steps), per-frame reset and optional overlay toggle eye-button, overlap chooser when frames stack, callbacks for enter/exit/layout/spec, and an auto-built settings panel (checkbox, dropdown, multi dropdown, slider, color, checkbox+color, dropdown+color) with pooled widgets.
  • Settings Mode: helper layer for Blizzard Settings, powered by the same widget factory (checkbox/dropdown/multi dropdown/slider/color/sound); requires a unique SetVariablePrefix per addon to avoid collisions; supports per-control prefixes/variables, notify hooks, and "New" badges with auto-prefixed IDs.

Requirements

  • Retail WoW 10.0+ (uses Edit Mode APIs)
  • LibStub (bundled by most addon frameworks)

Install / embed

  • Standalone: drop LibEQOL into Interface/AddOns and enable it (loads automatically).
  • Embedded: place it under libs/ and include LibEQOL.xml:
  <Include file="libs/LibEQOL/LibEQOL.xml" />

Quick start (Edit Mode)

local EditMode = LibStub("LibEQOLEditMode-1.0")

EditMode:AddFrame(MyFrame, function(frame, layoutName, point, x, y)
    frame:ClearAllPoints()
    frame:SetPoint(point, UIParent, point, x, y)
end, { point = "CENTER", x = 0, y = 0 })

EditMode:AddFrameSettings(MyFrame, {
    {
        name = "Show title",
        kind = EditMode.SettingType.Checkbox,
        default = true,
        get = function(layout) return MyDB[layout].showTitle end,
        set = function(layout, value) MyDB[layout].showTitle = value end,
    },
})

Quick start (Settings Mode)

local SettingsLib = LibStub("LibEQOLSettingsMode-1.0")
SettingsLib:SetVariablePrefix("MyAddon_") -- required, unique per addon

local root = SettingsLib:CreateRootCategory("My AddOn")
SettingsLib:CreateCheckbox(root, {
    key = "ShowTitle",
    name = "Show title",
    default = true,
    get = function() return MyDB.showTitle end,
    set = function(value) MyDB.showTitle = value end,
    desc = "Toggle the title text on your frame.",
})
SettingsLib:CreateSlider(root, {
    key = "Scale",
    name = "Scale",
    min = 0.5, max = 2, step = 0.05,
    default = 1,
    get = function() return MyDB.scale end,
    set = function(value) MyDB.scale = value end,
    formatter = function(value) return string.format("%.2fx", value) end,
})

Tips

  • SetFrameDragEnabled/dragEnabled let you allow/deny dragging; enableOverlayToggle opts into per-frame eye buttons; the overlap chooser appears when multiple registered frames sit under the cursor.
  • Call lib.internal:RefreshSettings() after you change data that controls isEnabled/disabled logic on visible rows.
  • Keep LibStub loading before LibEQOL.lua, and list LibEQOL in OptionalDeps if you load on demand.