From e39de2b16d076457594e30141fe0aa02f54ec297 Mon Sep 17 00:00:00 2001 From: Darthpred Date: Fri, 8 May 2015 04:08:37 +0400 Subject: [PATCH] Renamed the lib to make it more adequate --- .../LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.lua | 341 ++++++++++++++++++++ .../LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.toc | 7 + .../libs/LibElv-UIButtons-1.0/load_uibuttons.xml | 4 + .../libs/LibElv-UIButtons-1.0/locales/english.lua | 8 + .../LibElv-UIButtons-1.0/locales/load_locales.xml | 4 + .../libs/LibElv-UIButtons-1.0/locales/russian.lua | 22 ++ .../libs/LibUIButtons-1.0/LibUIButtons-1.0.lua | 341 -------------------- .../libs/LibUIButtons-1.0/LibUIButtons-1.0.toc | 7 - ElvUI_SLE/libs/LibUIButtons-1.0/load_uibuttons.xml | 4 - .../libs/LibUIButtons-1.0/locales/english.lua | 8 - .../libs/LibUIButtons-1.0/locales/load_locales.xml | 4 - .../libs/LibUIButtons-1.0/locales/russian.lua | 22 -- ElvUI_SLE/libs/load_libs.xml | 2 +- 13 files changed, 387 insertions(+), 387 deletions(-) create mode 100644 ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.lua create mode 100644 ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.toc create mode 100644 ElvUI_SLE/libs/LibElv-UIButtons-1.0/load_uibuttons.xml create mode 100644 ElvUI_SLE/libs/LibElv-UIButtons-1.0/locales/english.lua create mode 100644 ElvUI_SLE/libs/LibElv-UIButtons-1.0/locales/load_locales.xml create mode 100644 ElvUI_SLE/libs/LibElv-UIButtons-1.0/locales/russian.lua delete mode 100644 ElvUI_SLE/libs/LibUIButtons-1.0/LibUIButtons-1.0.lua delete mode 100644 ElvUI_SLE/libs/LibUIButtons-1.0/LibUIButtons-1.0.toc delete mode 100644 ElvUI_SLE/libs/LibUIButtons-1.0/load_uibuttons.xml delete mode 100644 ElvUI_SLE/libs/LibUIButtons-1.0/locales/english.lua delete mode 100644 ElvUI_SLE/libs/LibUIButtons-1.0/locales/load_locales.xml delete mode 100644 ElvUI_SLE/libs/LibUIButtons-1.0/locales/russian.lua diff --git a/ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.lua b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.lua new file mode 100644 index 0000000..824b27c --- /dev/null +++ b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.lua @@ -0,0 +1,341 @@ +local MAJOR, MINOR = "LibElv-UIButtons-1.0", 01 +local lib, oldminor = LibStub:NewLibrary(MAJOR, MINOR) + +if not lib then return end +local E, L, V, P, G = unpack(ElvUI) +local S = E:GetModule("Skins") + +local function EqualizeDB(db, default) + for key, value in pairs(default) do + if not db[key] and type(default[key]) ~= "table" then + db[key] = default[key] + elseif type(default[key]) == "table" then + EqualizeDB(db[key], default[key]) + end + end +end + +local function MoverSize(menu) + local db = menu.db + if db.position == "vertical" then + menu:SetWidth(db.size + (E.PixelMode and 2 or 4)) + menu:SetHeight((db.size*menu.NumBut)+((E.PixelMode and db.spacing or db.spacing+2)*(menu.NumBut-1))+2) + elseif db.position == "horizontal" then + menu:SetWidth((db.size*menu.NumBut)+((E.PixelMode and db.spacing or db.spacing+2)*(menu.NumBut-1))+2) + menu:SetHeight(db.size + (E.PixelMode and 2 or 4)) + end +end + +local function SetupMover(menu, name, own) + local exist = false + for i = 1, #E.ConfigModeLayouts do + if E.ConfigModeLayouts[i] == "UIButtons" then + exist = true + break + end + end + if not exist then + tinsert(E.ConfigModeLayouts, #(E.ConfigModeLayouts)+1, "UIButtons") + E.ConfigModeLocalizedStrings["UIButtons"] = L["UI Buttons"] + end + E:CreateMover(menu, menu:GetName().."Mover", name, nil, nil, nil, own or "ALL,UIButtons") +end + +local function ToggleCats(menu) + for i = 1, #menu.ToggleTable do + if menu.ToggleTable[i].opened then + menu.HoldersTable[i]:Show() + else + menu.HoldersTable[i]:Hide() + end + end +end + +local function OnEnter(self, menu) + menu:SetAlpha(1) +end + +local function OnLeave(self, menu) + if menu.db.mouse then + menu:SetAlpha(0) + end +end + +local function CreateCoreButton(menu, name, text) + if _G[menu:GetName().."_Core_"..name] then return end + local button, holder + if menu.style == "classic" then + menu[name] = CreateFrame("Button", menu:GetName().."_Core_"..name, menu) + button = menu[name] + elseif menu.style == "dropdown" then + menu[name] = CreateFrame("Frame", menu:GetName().."_Core_"..name, menu) + menu[name].Toggle = CreateFrame("Button", menu:GetName().."_Core_"..name.."Toggle", menu) + holder = menu[name] + holder:CreateBackdrop("Transparent") + button = menu[name].Toggle + else + lib:CustomStyleCoreButton(menu, name, text) + end + button:SetScript('OnEnter', function(self) OnEnter(self, menu) end) + button:SetScript('OnLeave', function(self) OnLeave(self, menu) end) + -- button:SetSize(17, 17) --For testing purposes + button.text = button:CreateFontString(nil, "OVERLAY") + button.text:SetPoint("CENTER", button, "CENTER", 0, 0) + + S:HandleButton(button) + + if text then + local t = button:CreateFontString(nil,"OVERLAY",button) + t:FontTemplate() + t:SetPoint("CENTER", button, 'CENTER', 0, -1) + t:SetJustifyH("CENTER") + t:SetText(text) + button:SetFontString(t) + end + + tinsert(menu.ToggleTable, button) + if holder then tinsert(menu.HoldersTable, holder) end + if menu.style == "dropdown" then + if not menu[name.."Table"] then + menu[name.."Table"] = {} + end + menu:ToggleSetup(button, holder) + tinsert(menu.GroupsTable, name) + end + + menu.NumBut = menu.NumBut + 1 +end + +local function CreateDropdownButton(menu, core, name, text, tooltip1, tooltip2, click, addon, always) + if addon then + local enabled = GetAddOnEnableState(menu.myname, addon) + if enabled == 0 then return end + end + if _G[menu:GetName().."_Core_"..core..name] or not menu[core.."Table"] then return end + menu[core][name] = CreateFrame("Button", menu:GetName().."_Core_"..core..name, menu[core]) + local b = menu[core][name] + local toggle = menu[core].Toggle + + b:SetScript("OnClick", function(self) + click() + toggle.opened = false + menu:ToggleCats() + end) + + if tooltip1 then + b:SetScript("OnEnter", function(self) + OnEnter(self, menu) + GameTooltip:SetOwner(self) + GameTooltip:AddLine(tooltip1, 1, .96, .41, .6, .6, 1) + if tooltip2 then GameTooltip:AddLine(tooltip2, 1, 1, 1, 1, 1, 1) end + GameTooltip:Show() + end) + b:SetScript("OnLeave", function(self) + OnLeave(self, menu) + GameTooltip:Hide() + end) + else + b:SetScript('OnEnter', function(self) OnEnter(self, menu) end) + b:SetScript('OnLeave', function(self) OnLeave(self, menu) end) + end + S:HandleButton(b) + + if text and type(text) == "string" then + b.text = b:CreateFontString(nil,"OVERLAY",b) + b.text:FontTemplate() + b.text:SetPoint("CENTER", b, 'CENTER', 0, -1) + b.text:SetJustifyH("CENTER") + b.text:SetText(text) + b:SetFontString(b.text) + end + + tinsert(menu[core.."Table"], b) +end + +local function CreateSeparator(menu, core, name, size, space) + if _G[menu:GetName().."_Core_"..core..name.."_Separator"] or not menu[core.."Table"] then return end + menu[core][name] = CreateFrame("Frame", menu:GetName().."_Core_"..core..name.."_Separator", menu[core]) + local f = menu[core][name] + f.isSeparator = true + f.size = size or 1 + f.space = space or 2 + f:CreateBackdrop("Transparent") + f:SetScript('OnEnter', function(self) OnEnter(self, menu) end) + f:SetScript('OnLeave', function(self) OnLeave(self, menu) end) + tinsert(menu[core.."Table"], f) +end + +local function ToggleSetup(menu, button, holder) + local db = menu.db + button.opened = false + holder:Hide() + button:SetScript("OnClick", function(self, button, down) + if button == "LeftButton" then + if self.opened then + self.opened = false + else + self.opened = true + for i = 1, #menu.ToggleTable do + if menu.ToggleTable[i] ~= self then menu.ToggleTable[i].opened = false end + end + end + menu:ToggleCats() + end + end) + holder:SetScript('OnEnter', function(self) OnEnter(self, menu) end) + holder:SetScript('OnLeave', function(self) OnLeave(self, menu) end) +end + +local function UpdateDropdownLayout(menu, group) + local count = -1 + local sepS, sepC = 0, 0 + local header = menu[group] + local db = menu.db + header:ClearAllPoints() + header:Point(db.point, header.Toggle, db.anchor, db.xoffset, db.yoffset) + local T = menu[group.."Table"] + for i = 1, #T do + local button, prev, next = T[i], T[i-1], T[i+1] + local y_offset = prev and ((E.PixelMode and -db.spacing or -(db.spacing+2))-(prev.isSeparator and prev.space or 0)-(button.isSeparator and button.space or 0)) or 0 + button:Point("TOP", (prev or header), (prev and "BOTTOM" or "TOP"), 0, y_offset) + count = button.isSeparator and count or count + 1 + sepS = (button.isSeparator and sepS + ((prev and 2 or 1)*button.space + button.size)) or sepS + sepC = button.isSeparator and sepC + 1 or sepC + end + header:Size(db.size * 3.1, (db.size * (count+1))+(db.spacing*(count))+sepS+(.5*sepC)) + if menu.db.dropdownBackdrop then + header.backdrop:Show() + else + header.backdrop:Hide() + end +end + +local function UpdateMouseOverSetting(menu) + if menu.db.mouse then + menu:SetAlpha(0) + else + menu:SetAlpha(1) + end +end + +local function Positioning(menu) + local db = menu.db + + --position check + local header = menu + if db.position == "vertical" then + for i = 1, #menu.ToggleTable do + local button, prev = menu.ToggleTable[i], menu.ToggleTable[i-1] + menu.ToggleTable[i]:ClearAllPoints() + menu.ToggleTable[i]:Point("TOP", (prev or header), prev and "BOTTOM" or "TOP", 0, prev and (E.PixelMode and -db.spacing or -(db.spacing+2)) or (E.PixelMode and -1 or -2)) + end + elseif db.position == "horizontal" then + for i = 1, #menu.ToggleTable do + local button, prev = menu.ToggleTable[i], menu.ToggleTable[i-1] + menu.ToggleTable[i]:ClearAllPoints() + menu.ToggleTable[i]:Point("LEFT", (prev or header), prev and "RIGHT" or "LEFT", prev and (E.PixelMode and db.spacing or db.spacing+2) or (E.PixelMode and 1 or 2), 0) + end + end + if menu.style == "dropdown" then + for i = 1, #menu.GroupsTable do + menu:UpdateDropdownLayout(menu.GroupsTable[i]) + end + end +end + +local function FrameSize(menu) + local db = menu.db + if not db.size then return end + menu:MoverSize() + + for i = 1, #menu.ToggleTable do + menu.ToggleTable[i]:Size(db.size) + end + + if menu.style == "dropdown" then + for i = 1, #menu.GroupsTable do + local group = menu.GroupsTable[i] + local mass = menu[group.."Table"] + for n = 1, #mass do + if mass[n].isSeparator then + mass[n]:Size((db.size * 3.1) - 2, mass[n].size) + else + mass[n]:Size(db.size * 3.1, db.size) + end + end + end + end + + menu:Positioning() +end + +local function UpdateBackdrop(menu) + if menu.db.menuBackdrop then + menu.backdrop:Show() + else + menu.backdrop:Hide() + end +end + +local function ToggleShow(menu) + if not menu.db.enable then + menu:Hide() + else + menu:Show() + menu:UpdateMouseOverSetting() + menu:UpdateBackdrop() + end +end + +function lib:CreateFrame(name, db, default, style, styleDefault) + if _G[name] then return end + if not name then print("Sorry but you didn't set a name for this menu bar. Aborting creation"); return end + if not db then print("Sorry but you didn't set database for this menu bar. Aborting creation"); return end + if not default then print("Sorry but you didn't set defaults for this menu bar. Aborting creation"); return end + if not style and not styleDefault then print("Sorry but you didn't set defaults for this menu bar's style. Aborting creation"); return end + local menu = CreateFrame("Frame", name, E.UIParent) + menu.db = db + EqualizeDB(menu.db, default) + if not style and styleDefault then style = styleDefault end + menu.style = style + + menu:SetFrameStrata("HIGH") + menu:SetFrameLevel(5) + menu:SetClampedToScreen(true) + menu:Point("LEFT", E.UIParent, "LEFT", -2, 0); + menu:Size(17, 17); --Cause the damn thing doesn't want to show up without default size lol + menu:SetScript('OnEnter', function(self) OnEnter(self, self) end) + menu:SetScript('OnLeave', function(self) OnLeave(self, self) end) + menu.myname = UnitName('player') + menu:CreateBackdrop() + + menu.NumBut = 0 + menu.ToggleTable = {} + menu.HoldersTable = {} + menu.GroupsTable = {} + + --Setting API + menu.CreateCoreButton = CreateCoreButton + menu.CreateDropdownButton = CreateDropdownButton + menu.CreateSeparator = CreateSeparator + menu.ToggleSetup = ToggleSetup + menu.ToggleCats = ToggleCats + menu.UpdateDropdownLayout = UpdateDropdownLayout + menu.Positioning = Positioning + menu.MoverSize = MoverSize + menu.UpdateMouseOverSetting = UpdateMouseOverSetting + menu.FrameSize = FrameSize + menu.SetupMover = SetupMover + menu.ToggleShow = ToggleShow + menu.UpdateBackdrop = UpdateBackdrop + + return menu +end + +--This function is for creating own menu style. Replacing is not encouraged, hooking recommended. +function lib:CustomStyleCoreButton(menu, name, text) +end + +if not LibStub("LibElvUIPlugin-1.0").plugins[MAJOR] then + LibStub("LibElvUIPlugin-1.0"):RegisterPlugin(MAJOR, function() end, true) +end \ No newline at end of file diff --git a/ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.toc b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.toc new file mode 100644 index 0000000..c8ba530 --- /dev/null +++ b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/LibElv-UIButtons-1.0.toc @@ -0,0 +1,7 @@ +## Interface: 40300 +## Author: Darth Predator +## Version: 1.0 +## Title: Lib UIButtons 1.0 +## RequiredDeps: ElvUI + +LibElv-UIButtons-1.0.lua \ No newline at end of file diff --git a/ElvUI_SLE/libs/LibElv-UIButtons-1.0/load_uibuttons.xml b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/load_uibuttons.xml new file mode 100644 index 0000000..1f3e540 --- /dev/null +++ b/ElvUI_SLE/libs/LibElv-UIButtons-1.0/load_uibuttons.xml @@ -0,0 +1,4 @@ + + +