--[[
	actionBarGlobal.lua
		Scripts for the Global Actionbar Options Panel
		This panel does things like enabling altcast, toggling range coloring, etc	
--]]

local frameName = "BOptionsPanelActionBar";


--[[ Global Pane ]]--
function BOptionsActionBarGlobal_OnLoad()
	getglobal(frameName .. "AltCastLabel"):SetText("Selfcast Key");
	UIDropDownMenu_Initialize(getglobal(frameName .. "AltCast"), BOptionsAltCast_Initialize);
end

function BOptionsActionBarGlobal_OnShow()
	this.onShow = 1;
	
	getglobal(frameName .. "Tooltips"):SetChecked(BActionSets_TooltipsShown());
	getglobal(frameName .. "Range"):SetChecked(BActionSets_ColorOutOfRange());
	getglobal(frameName .. "SelfCast"):SetChecked(GetCVar("autoSelfCast"));
	getglobal(frameName .. "MacroText"):SetChecked(not BActionSets_MacrosShown());
	getglobal(frameName .. "HotkeysText"):SetChecked(not BActionSets_HotkeysShown());
	local rangeColor = BActionSets_GetRangeColor();
	getglobal(frameName .. "RangeColorNormalTexture"):SetVertexColor(rangeColor.r, rangeColor.g, rangeColor.b);
	
	UIDropDownMenu_SetSelectedValue(getglobal(frameName .. "AltCast"), BActionSets_GetSelfCastMode());
	
	getglobal(frameName .. "NumActionBars"):SetValue(BActionBar:GetNumber())
	this.onShow = nil;
end

--[[ 
	Altcast Key Dropdown
--]]

function BOptionsAltCast_OnShow()
	UIDropDownMenu_Initialize(this, BOptionsAltCast_Initialize);
	
	UIDropDownMenu_SetWidth(72, this);
end

function BOptionsAltCast_OnClick()
	UIDropDownMenu_SetSelectedValue(getglobal(frameName .. "AltCast"), this.value);
	BActionSets_SetSelfCastMode(this.value);
end

local function AddAltCastButton(text, value, selectedValue)
	--no hotkey
	local info = {};
	info.text = text;
	info.func = BOptionsAltCast_OnClick;
	info.value = value;
	if value == selectedValue then
		info.checked = 1;
	end
	UIDropDownMenu_AddButton(info);
end


--add all buttons to the dropdown menu
function BOptionsAltCast_Initialize()
	local selectedValue = UIDropDownMenu_GetSelectedValue( getglobal(frameName .. "AltCast") );

	AddAltCastButton("None", nil, selectedValue)
	AddAltCastButton("Alt", 1, selectedValue)
	AddAltCastButton("Control", 2, selectedValue)
	AddAltCastButton("Shift", 3, selectedValue)
end

--[[
	Out of Range Coloring Functions 
--]]
--set the background of the frame between opaque/transparent
function BOptionsRangeColor_OnClick()
	if ColorPickerFrame:IsShown() then
		ColorPickerFrame:Hide();
	else
		local settings = BActionSets_GetRangeColor()
		
		ColorPickerFrame.func = BOptionsRangeColor_ColorChange;	
		ColorPickerFrame.cancelFunc = BOptionsRangeColor_CancelChanges;
		
		getglobal(frameName .. "RangeColorNormalTexture"):SetVertexColor(settings.r, settings.g, settings.b);
		ColorPickerFrame:SetColorRGB(settings.r, settings.g, settings.b);
		ColorPickerFrame.previousValues = {r = settings.r, g = settings.g, b = settings.b};
		
		ShowUIPanel(ColorPickerFrame);
	end
end

function BOptionsRangeColor_ColorChange()
	local r, g, b = ColorPickerFrame:GetColorRGB();
	
	BActionSets_SetRangeColor(r, g, b)
	
	getglobal(frameName .. "RangeColorNormalTexture"):SetVertexColor(r, g, b);
end


function BOptionsRangeColor_CancelChanges() 
	local prevValues = ColorPickerFrame.previousValues;
	
	BActionSets_SetRangeColor(prevValues.r, prevValues.g, prevValues.b)
	
	getglobal(frameName .. "RangeColorNormalTexture"):SetVertexColor(prevValues.r, prevValues.g, prevValues.b);
end