149 lines
6.7 KiB
Lua
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
|
|
|
|
|