----------
-- TOOL --
----------
-- Manage display of current selected tool into the ui
------------------------------------------------------------------------------------------------------------


-- base Name for the tool bar in the ui
local toolBarPath		= "ui:interface:r2ed_toolbar:"
local geoToolPath		= "ui:interface:r2ed_palette:content:sbtree_geo:geo_features:enclosing:geo_feature_list:"
local featuresToolPath  = "ui:interface:r2ed_palette:content:sbtree_features:features:enclosing:feature_list:"


r2.ToolUI =
{
	-- ref to current hightlighted tool in the ui	
	ActiveToolUI = nil,

	-- For named tools, map the name to the ui path
	ToolNameToUIPath = 
	{
		selectMove					= toolBarPath     .. "r2ed_tool_select",
		selectRotate				= toolBarPath     .. "r2ed_tool_rotate",
		teleport					= toolBarPath     .. "r2ed_tool_teleport",
		drawRoad					= geoToolPath     .. "r2ed_tool_draw_road:tool",
		drawRegion					= geoToolPath     .. "r2ed_tool_draw_region:tool",
		createFeatureBanditCamp		= featuresToolPath .. "r2ed_create_feature_bandit_camp:tool",
		createFeatureTimer			= featuresToolPath .. "r2ed_create_feature_timer:tool",
		createFeatureTimeTrigger	= featuresToolPath .. "r2ed_create_feature_time_trigger:tool",
		createFeatureFauna			= featuresToolPath .. "r2ed_create_feature_fauna:tool",
		createFeatureBossSpawner	= featuresToolPath .. "r2ed_create_feature_boss_spawner:tool",
		createFeatureZoneTrigger	= featuresToolPath .. "r2ed_create_feature_zone_trigger:tool",
		createFeatureUserTrigger	= featuresToolPath .. "r2ed_create_user_trigger:tool",
		createFeatureEasterEgg		= featuresToolPath .."r2ed_create_easter:tool",
		createFeatureLootSpawner	= featuresToolPath .."r2ed_create_feature_loot_spawner:tool",
		createDialog				= featuresToolPath .."r2ed_create_dialog:tool",
		createFeatureGiveItem		= featuresToolPath .."r2ed_create_feature_give_item:tool",
		createFeatureRequestItem	= featuresToolPath .."r2ed_create_feature_request_item:tool",
		createFeatureTalkTo			= featuresToolPath .."r2ed_create_feature_talk_to:tool",
		createFeatureAmbush			= featuresToolPath.."r2ed_create_feature_ambush:tool",
		createFeatureTimedSpawner	= featuresToolPath.."r2ed_create_feature_timed_spawner:tool",
		createFeatureManHunt		= featuresToolPath.."r2ed_create_feature_man_hunt:tool",

		
	}
}

------------------------------------------------------------------------------------------------------------
-- PRIVATE : hightlight a tool button by a ref on the tool ui
function r2.ToolUI:highlightToolUI(tool, hightlighted)
   if not tool then return end
   tool:find("selected").active = hightlighted
   tool:find("unselected").active = not hightlighted
end

------------------------------------------------------------------------------------------------------------
-- Get reference to a tool in the ui by its name (for named tools)
function r2.ToolUI:getToolUIByName(toolName)
	if toolName == "" then return nil end
   -- get Name of the ui button from the tool Name
	local uiPath = self.ToolNameToUIPath[toolName]
	if uiPath == nil then
		debugWarning("Can't find ui for tool : " .. tostring(toolName))
		return nil
    end	
	return getUI(uiPath)
end

------------------------------------------------------------------------------------------------------------
-- Get the current highlighted tool
function r2.ToolUI:getActiveToolUI()
	if self.CurrentToolUI and not self.CurrentToolUI.isNil then 
		return self.CurrentToolUI
	else
		return nil
	end
end


------------------------------------------------------------------------------------------------------------
-- Set the current highlighted tool
function r2.ToolUI:setActiveToolUI(tool)
	if self:getActiveToolUI() then
		self:highlightToolUI(self:getActiveToolUI(), false)
	end
	self.CurrentToolUI = tool
	self:highlightToolUI(tool, true)
end


------------------------------------------------------------------------------------------------------------
-- This function will be called by the framework when it wants to highlight a tool in the 
-- ui. It doesn't change the actual tool in the editor, just the ui
function r2.ToolUI:setActiveToolUIByName(toolName)
    self:setActiveToolUI(self:getToolUIByName(toolName))
end

------------------------------------------------------------------------------------------------------------
function r2.ToolUI:updateTooltip(onClickL, paramsL)	
   onClickL = defaulting(onClickL, getUICaller().onclick_l)
   paramsL = defaulting(paramsL, getUICaller().params_l)
   local expr = string.format("getKey('%s', '%s')", onClickL, paramsL)
   local keyName = ucstring(runExpr(expr))
	if keyName == i18n.get("uiNotAssigned") then
		-- no associated key
		setContextHelpText(getUICaller().tooltip)
	else
		setContextHelpText(concatUCString(getUICaller().tooltip, "@{6F6F} (", keyName, ")"))
	end
end

----------------------------------------------------------------------------
-- Update the undo / redo buttons grayed states
function r2.ToolUI:updateUndoRedo()	
	local toolbar = getUI("ui:interface:r2ed_toolbar")	
	toolbar:find("r2ed_tool_undo").unselected.active = r2:canUndo()
	toolbar:find("r2ed_tool_undo").disabled.active = not r2:canUndo()
	toolbar:find("r2ed_tool_redo").unselected.active = r2:canRedo()
	toolbar:find("r2ed_tool_redo").disabled.active = not r2:canRedo()	
end


----------------------------------------------------------------------------
-- Update the toggle windows buttons
function r2.ToolUI:updateToggleWindowButtons()
	local windowsBar = getUI("ui:interface:r2ed_windows_bar")	
	local active = (r2.Mode == "Edit")
	windowsBar.active = active
	if active then
		windowsBar:find("r2ed_tool_map_window").selected.active = getUI("ui:interface:map").active
		windowsBar:find("r2ed_tool_map_window").unselected.active = not getUI("ui:interface:map").active
		windowsBar:find("r2ed_tool_scenario_window").selected.active = getUI("ui:interface:r2ed_scenario").active
		windowsBar:find("r2ed_tool_scenario_window").unselected.active = not getUI("ui:interface:r2ed_scenario").active
		windowsBar:find("r2ed_tool_palette_window").selected.active = getUI("ui:interface:r2ed_palette").active
		windowsBar:find("r2ed_tool_palette_window").unselected.active = not getUI("ui:interface:r2ed_palette").active
	end
end

----------------------------------------------------------------------------
-- Update the toggle windows buttons
function r2.ToolUI:updateToggleWindowDMButtons()
	local windowsDMBar = getUI("ui:interface:r2ed_windows_dm_bar")	
	windowsDMBar:find("r2ed_live").selected.active = getUI("ui:interface:r2ed_scenario_control").active
	windowsDMBar:find("r2ed_live").unselected.active = not getUI("ui:interface:r2ed_scenario_control").active
	windowsDMBar:find("player_control").selected.active = getUI("ui:interface:ring_chars_tracking").active
	windowsDMBar:find("player_control").unselected.active = not getUI("ui:interface:ring_chars_tracking").active
end