khanat-opennel-code/code/ryzom/common/data_common/r2/r2_ui_tools.lua
2016-09-24 14:22:22 +02:00

149 lines
6.7 KiB
Lua

----------
-- 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