Mercurial > wow > askmrrobot
diff ui/AmrUiButton.lua @ 57:01b63b8ed811 v21
total rewrite to version 21
author | yellowfive |
---|---|
date | Fri, 05 Jun 2015 11:05:15 -0700 |
parents | |
children | 0515882856f1 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/AmrUiButton.lua Fri Jun 05 11:05:15 2015 -0700 @@ -0,0 +1,120 @@ +--[[----------------------------------------------------------------------------- +Button Widget +Based on the AceGUI button, but with a custom look for AMR. +-------------------------------------------------------------------------------]] +local Type, Version = "AmrUiButton", 1 +local AceGUI = LibStub and LibStub("AceGUI-3.0", true) +if not AceGUI or (AceGUI:GetWidgetVersion(Type) or 0) >= Version then return end + +local Amr = LibStub("AceAddon-3.0"):GetAddon("AskMrRobot") + +-- Lua APIs +local pairs = pairs + +-- WoW APIs +local _G = _G +local PlaySound, CreateFrame, UIParent = PlaySound, CreateFrame, UIParent + + +--[[----------------------------------------------------------------------------- +Scripts +-------------------------------------------------------------------------------]] +local function buttonOnClick(frame, ...) + AceGUI:ClearFocus() + PlaySound("igMainMenuOption") + frame.obj:Fire("OnClick", ...) +end + +--[[----------------------------------------------------------------------------- +Methods +-------------------------------------------------------------------------------]] +local methods = { + ["OnAcquire"] = function(self) + -- restore default values + self:SetHeight(24) + self:SetWidth(200) + self:SetDisabled(false) + self:SetText() + self:SetBackgroundColor({R = 0, G = 0, B = 0}) + self:SetFont(Amr.CreateFont("Regular", 16, Amr.Colors.White)) + self.frame:ClearAllPoints() + end, + + ["SetText"] = function(self, text) + self.frame:SetText(text) + end, + + ["SetFont"] = function(self, font) + self.frame:SetNormalFontObject(font) + end, + + -- color is an object with R, G, B + ["SetBackgroundColor"] = function(self, color) + self.texNormal:SetTexture(color.R, color.G, color.B, 1) + self.texPush:SetTexture(color.R, color.G, color.B, 1) + end, + + ["SetDisabled"] = function(self, disabled) + self.disabled = disabled + if disabled then + self.frame:Disable() + self.frame:SetAlpha(0.2) + else + self.frame:Enable() + self.frame:SetAlpha(1) + end + end, + + ["SetVisible"] = function(self, visible) + if visible then + self.frame:Show() + else + self.frame:Hide() + end + end +} + +--[[----------------------------------------------------------------------------- +Constructor +-------------------------------------------------------------------------------]] +local function Constructor() + local name = "AmrUiButton" .. AceGUI:GetNextWidgetNum(Type) + local frame = CreateFrame("Button", name, UIParent) + frame:Hide() + + frame:EnableMouse(true) + frame:SetScript("OnClick", buttonOnClick) + + Amr.DropShadow(frame) + + -- normal bg color, can be set with SetBackgroundColor + local texNormal = frame:CreateTexture(nil, "BORDER") + texNormal:SetAllPoints(true) + frame:SetNormalTexture(texNormal) + + -- gives a 1px down+right animation on press + local texPush = frame:CreateTexture(nil, "BORDER") + texPush:SetPoint("TOPLEFT", frame, "TOPLEFT", 1, -1) + texPush:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", 1, -1) + frame:SetPushedTexture(texPush) + + -- not perfect, but more or less achieves the effect of lightening the bg color slightly on hover + local texHigh = frame:CreateTexture(nil, "BORDER") + texHigh:SetTexture(1, 1, 1, 0.1) + texHigh:SetAllPoints(true) + frame:SetHighlightTexture(texHigh) + + local widget = { + texNormal = texNormal, + texPush = texPush, + frame = frame, + type = Type + } + for method, func in pairs(methods) do + widget[method] = func + end + + return AceGUI:RegisterAsWidget(widget) +end + +AceGUI:RegisterWidgetType(Type, Constructor, Version)