diff Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua @ 0:169f5211fc7f

First public revision. At this point ItemAuditor watches mail for auctions sold or purchased, watches for buy/sell (money and 1 item type change) and conversions/tradeskills. Milling isn't working yet because there is too much time between the first event and the last event.
author Asa Ayers <Asa.Ayers@Gmail.com>
date Thu, 20 May 2010 19:22:19 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Libs/AceGUI-3.0/widgets/AceGUIWidget-ColorPicker.lua	Thu May 20 19:22:19 2010 -0700
@@ -0,0 +1,181 @@
+local AceGUI = LibStub("AceGUI-3.0")
+
+-- WoW APIs
+local CreateFrame, UIParent = CreateFrame, UIParent
+
+-- Global vars/functions that we don't upvalue since they might get hooked, or upgraded
+-- List them here for Mikk's FindGlobals script
+-- GLOBALS: ShowUIPanel, HideUIPanel, ColorPickerFrame, OpacitySliderFrame
+
+--------------------------
+-- ColorPicker		  --
+--------------------------
+do
+	local Type = "ColorPicker"
+	local Version = 11
+	
+	local function OnAcquire(self)
+		self.HasAlpha = false
+		self:SetColor(0,0,0,1)
+		self:SetHeight(24)
+		self:SetWidth(200)
+	end
+	
+	local function SetLabel(self, text)
+		self.text:SetText(text)
+	end
+
+	local function SetColor(self,r,g,b,a)
+		self.r = r
+		self.g = g
+		self.b = b
+		self.a = a or 1
+		self.colorSwatch:SetVertexColor(r,g,b,a)
+	end
+
+	local function Control_OnEnter(this)
+		this.obj:Fire("OnEnter")
+	end
+
+	local function Control_OnLeave(this)
+		this.obj:Fire("OnLeave")
+	end
+	
+	local function SetHasAlpha(self, HasAlpha)
+		self.HasAlpha = HasAlpha
+	end
+
+	local function ColorCallback(self,r,g,b,a,isAlpha)
+		if not self.HasAlpha then
+			a = 1
+		end
+		self:SetColor(r,g,b,a)
+		if ColorPickerFrame:IsVisible() then
+			--colorpicker is still open
+
+			self:Fire("OnValueChanged",r,g,b,a)
+		else
+			--colorpicker is closed, color callback is first, ignore it,
+			--alpha callback is the final call after it closes so confirm now
+			if isAlpha then
+				self:Fire("OnValueConfirmed",r,g,b,a)
+			end
+		end
+	end
+	
+	local function ColorSwatch_OnClick(this)
+		HideUIPanel(ColorPickerFrame)
+		local self = this.obj
+		if not self.disabled then
+			ColorPickerFrame:SetFrameStrata("FULLSCREEN_DIALOG")
+			
+			ColorPickerFrame.func = function()
+				local r,g,b = ColorPickerFrame:GetColorRGB()
+				local a = 1 - OpacitySliderFrame:GetValue()
+				ColorCallback(self,r,g,b,a)
+			end
+			
+			ColorPickerFrame.hasOpacity = self.HasAlpha
+			ColorPickerFrame.opacityFunc = function()
+				local r,g,b = ColorPickerFrame:GetColorRGB()
+				local a = 1 - OpacitySliderFrame:GetValue()
+				ColorCallback(self,r,g,b,a,true)
+			end
+			local r, g, b, a = self.r, self.g, self.b, self.a
+			if self.HasAlpha then
+				ColorPickerFrame.opacity = 1 - (a or 0)
+			end
+			ColorPickerFrame:SetColorRGB(r, g, b)
+			
+			ColorPickerFrame.cancelFunc = function()
+				ColorCallback(self,r,g,b,a,true)
+			end
+			ShowUIPanel(ColorPickerFrame)
+		end
+		AceGUI:ClearFocus()
+	end
+
+	local function OnRelease(self)
+		self.frame:ClearAllPoints()
+		self.frame:Hide()
+	end
+
+	local function SetDisabled(self, disabled)
+		self.disabled = disabled
+		if self.disabled then
+			self.frame:Disable()
+			self.text:SetTextColor(0.5,0.5,0.5)
+		else
+			self.frame:Enable()
+			self.text:SetTextColor(1,1,1)
+		end
+	end
+
+	local function Constructor()
+		local frame = CreateFrame("Button",nil,UIParent)
+		local self = {}
+		self.type = Type
+
+		self.OnRelease = OnRelease
+		self.OnAcquire = OnAcquire
+		
+		self.SetLabel = SetLabel
+		self.SetColor = SetColor
+		self.SetDisabled = SetDisabled
+		self.SetHasAlpha = SetHasAlpha
+		
+		self.frame = frame
+		frame.obj = self
+		
+		local text = frame:CreateFontString(nil,"OVERLAY","GameFontHighlight")
+		self.text = text
+		text:SetJustifyH("LEFT")
+		text:SetTextColor(1,1,1)
+		frame:SetHeight(24)
+		frame:SetWidth(200)
+		text:SetHeight(24)
+		frame:SetScript("OnClick", ColorSwatch_OnClick)
+		frame:SetScript("OnEnter",Control_OnEnter)
+		frame:SetScript("OnLeave",Control_OnLeave)
+	
+		local colorSwatch = frame:CreateTexture(nil, "OVERLAY")
+		self.colorSwatch = colorSwatch
+		colorSwatch:SetWidth(19)
+		colorSwatch:SetHeight(19)
+		colorSwatch:SetTexture("Interface\\ChatFrame\\ChatFrameColorSwatch")
+		local texture = frame:CreateTexture(nil, "BACKGROUND")
+		colorSwatch.texture = texture
+		texture:SetWidth(16)
+		texture:SetHeight(16)
+		texture:SetTexture(1,1,1)
+		texture:Show()
+		
+		local checkers = frame:CreateTexture(nil, "BACKGROUND")
+		colorSwatch.checkers = checkers
+		checkers:SetTexture("Tileset\\Generic\\Checkers")
+		checkers:SetDesaturated(true)
+		checkers:SetVertexColor(1,1,1,0.75)
+		checkers:SetTexCoord(.25,0,0.5,.25)
+		checkers:SetWidth(14)
+		checkers:SetHeight(14)
+		checkers:Show()
+	
+		local highlight = frame:CreateTexture(nil, "BACKGROUND")
+		self.highlight = highlight
+		highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight")
+		highlight:SetBlendMode("ADD")
+		highlight:SetAllPoints(frame)
+		highlight:Hide()
+	
+		texture:SetPoint("CENTER", colorSwatch, "CENTER")
+		checkers:SetPoint("CENTER", colorSwatch, "CENTER")
+		colorSwatch:SetPoint("LEFT", frame, "LEFT", 0, 0)
+		text:SetPoint("LEFT",colorSwatch,"RIGHT",2,0)
+		text:SetPoint("RIGHT",frame,"RIGHT")
+
+		AceGUI:RegisterAsWidget(self)
+		return self
+	end
+	
+	AceGUI:RegisterWidgetType(Type,Constructor,Version)
+end