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
SetVariablePrefixper 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
LibEQOLintoInterface/AddOnsand enable it (loads automatically). - Embedded: place it under
libs/and includeLibEQOL.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/dragEnabledlet you allow/deny dragging;enableOverlayToggleopts 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 controlsisEnabled/disabledlogic on visible rows. - Keep
LibStubloading beforeLibEQOL.lua, and listLibEQOLinOptionalDepsif you load on demand.


