Files
OpenRA/src/editor/menu_tools.lua
tmiv 56b9975804 Allow shortcuts to be added to tools menu items
The proposed change will allow keyboard shortcuts to tools menu items in the user file.

keymap[ID("tools.exec.ssm_compile")] = "Ctrl-B"
2015-10-20 14:34:26 -07:00

112 lines
2.7 KiB
Lua

-- Copyright 2011-15 Paul Kulchenko, ZeroBrane LLC
-- authors: Luxinia Dev (Eike Decker & Christoph Kubisch)
---------------------------------------------------------
local ide = ide
local frame = ide.frame
local menuBar = frame.menuBar
local unpack = table.unpack or unpack
--[=[
-- tool definition
-- main entries are optional
tool = {
fnmenu = function(frame,menubar),
-- can be used for init
-- and custom menu
exec = {
-- quick exec action
name = "",
description = "",
fn = function(filename, projectdir),
}
}
]=]
local toolArgs = {}
local cnt = 1
local function name2id(name) return ID("tools.exec."..name) end
do
local maxcnt = 10
local tools = {}
for name,tool in pairs(ide.tools) do
if (tool.exec and tool.exec.name) then
tool.fname = name
table.insert(tools,tool)
end
end
table.sort(tools,function(a,b) return a.exec.name < b.exec.name end)
-- todo config specifc ignore/priority list
for _, tool in ipairs(tools) do
local exec = tool.exec
if (exec and cnt < maxcnt and exec.name and exec.fn and exec.description) then
local id = name2id(tool.fname)
table.insert(toolArgs,{id, TR(exec.name) .. KSC(id), exec.description})
-- flag it
tool._execid = id
cnt = cnt + 1
end
end
end
local function addHandler(menu, id, command, updateui)
menu:Connect(id, wx.wxEVT_COMMAND_MENU_SELECTED,
function (event)
local editor = GetEditor()
if (not editor) then return end
command(ide:GetDocument(editor):GetFilePath(), ide:GetProject())
return true
end)
menu:Connect(id, wx.wxEVT_UPDATE_UI,
updateui or function(event) event:Enable(GetEditor() ~= nil) end)
end
if (cnt > 1) then
-- Build Menu
local toolMenu = wx.wxMenu{
unpack(toolArgs)
}
menuBar:Append(toolMenu, "&Tools")
-- connect auto execs
for _, tool in pairs(ide.tools) do
if tool._execid then addHandler(toolMenu, tool._execid, tool.exec.fn) end
end
end
-- Generate Custom Menus/Init
for _, tool in pairs(ide.tools) do
if tool.fninit then tool.fninit(frame, menuBar) end
end
function ToolsAddTool(name, command, updateui)
local toolMenu = ide:FindTopMenu('&Tools')
if not toolMenu then
local helpMenu, helpindex = ide:FindTopMenu('&Help')
if not helpMenu then helpindex = ide:GetMenuBar():GetMenuCount() end
toolMenu = wx.wxMenu{}
menuBar:Insert(helpindex, toolMenu, "&Tools")
end
local id = name2id(name)
toolMenu:Append(id, name)
addHandler(toolMenu, id, command, updateui)
end
function ToolsRemoveTool(name)
ide:RemoveMenuItem(name2id(name))
local toolMenu, toolindex = ide:FindTopMenu('&Tools')
if toolMenu and toolMenu:GetMenuItemCount() == 0 then
ide:GetMenuBar():Remove(toolindex)
end
end