Lua: Wizards

Adds a simple lua file wizard, and a lua plugin wizard.

Change-Id: I0ea08cdc5eabe7396cb49abd265fce16f5960416
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Marcus Tillmanns
2024-05-16 10:10:45 +02:00
parent 2e9e107191
commit cb1f1bdd61
9 changed files with 272 additions and 0 deletions

View File

@@ -4,6 +4,7 @@ add_qtc_plugin(Lua
PUBLIC_DEPENDS lua546 sol2
PUBLIC_DEFINES LUA_AVAILABLE
SOURCES
wizards/wizards.qrc
bindings/action.cpp
bindings/async.cpp
bindings/core.cpp

View File

@@ -0,0 +1 @@
print("Hello, World!")

View File

@@ -0,0 +1,41 @@
{
"version": 1,
"supportedProjectTypes": [],
"id": "Q.Lua",
"category": "R.Lua",
"trDescription": "Creates a simple lua file.",
"trDisplayName": "Lua Script",
"trDisplayCategory": "Lua",
"iconText": "ts",
"enabled": "%{JS: value('Plugins').indexOf('Lua') >= 0}",
"options": [
{
"key": "DefaultSuffix",
"value": "%{JS: Util.preferredSuffix('text/x-lua')}"
}
],
"pages": [
{
"trDisplayName": "Location",
"trShortTitle": "Location",
"typeId": "File"
},
{
"trDisplayName": "Project Management",
"trShortTitle": "Summary",
"typeId": "Summary"
}
],
"generators": [
{
"typeId": "File",
"data": [
{
"source": "script.lua",
"target": "%{JS: Util.fileName(value('TargetPath'), value('DefaultSuffix'))}",
"openInEditor": true
}
]
}
]
}

View File

@@ -0,0 +1,9 @@
{
"workspace.library": [
"%{JS: Lua.metaFolder()}"
],
"hint.paramName": "Literal",
"hint.enable": true,
"hint.await": true,
"hint.arrayIndex": "Disable"
}

View File

@@ -0,0 +1,7 @@
local function setup()
print("Hello from Lua!")
end
return {
setup = setup
}

View File

@@ -0,0 +1,24 @@
return {
Name = "%{ProjectName}",
Version = "1.0.0",
CompatVersion = "1.0.0",
Vendor = "%{VendorName}",
Copyright = "%{Copyright}",
License = "%{License}",
Category = "My Plugins",
Description = "%{Description}",
Url = "%{Url}",
Experimental = true,
DisabledByDefault = false,
LongDescription = [[
This plugin provides some functionality.
You can describe it more here.
]],
Dependencies = {
{ Name = "Core", Version = "%{JS: Util.qtCreatorIdeVersion()}", Required = true },
{ Name = "Lua", Version = "%{JS: Util.qtCreatorIdeVersion()}", Required = true },
},
setup = function()
require 'init'.setup()
end
} --[[@as QtcPlugin]]

View File

@@ -0,0 +1,15 @@
{
"targets": [
{
"name": "Qt Creator",
"executable": "%\{IDE:Executable:FilePath\}",
"arguments": [
"-tcs",
"-load",
"Lua",
"-loadluaplugin",
"%\{ActiveProject:ProjectDirectory\}"
]
}
]
}

View File

@@ -0,0 +1,163 @@
{
"version": 1,
"supportedProjectTypes": [
"Qt4ProjectManager.Qt4Project"
],
"id": "R.QtCreatorLuaPlugin",
"category": "G.Library",
"trDescription": "Creates a custom Qt Creator Lua plugin.",
"trDisplayName": "Qt Creator Lua Plugin",
"trDisplayCategory": "Library",
"iconText": "LuaP",
"featuresRequired": [
"QtSupport.Wizards.FeatureQt",
"QtSupport.Wizards.FeatureDesktop"
],
"enabled": "%{JS: value('Plugins').indexOf('CMakeProjectManager') >= 0}",
"options": [
{
"key": "ProjectFile",
"value": "%{ProjectDirectory}/.qtcreator/project.json"
},
{
"key": "PluginNameLower",
"value": "%{JS: value('PluginName').toLowerCase()}"
},
{
"key": "PluginSpecFile",
"value": "%{JS: Util.fileName(value('PluginName').toLowerCase(), Util.preferredSuffix('text/x-lua'))}"
},
{
"key": "SrcFileName",
"value": "init.lua"
},
{
"key": "CN",
"value": "%{JS: Cpp.className(value('PluginName') + 'Plugin')}"
},
{
"key": "HasTranslation",
"value": "%{JS: value('TsFileName') !== ''}"
}
],
"pages": [
{
"trDisplayName": "Project Location",
"trShortTitle": "Location",
"typeId": "Project",
"data": {
"trDescription": "This wizard creates a custom Qt Creator lua plugin."
}
},
{
"trDisplayName": "Define Project Details",
"trShortTitle": "Details",
"typeId": "Fields",
"data": [
{
"name": "ClassPageDescription",
"type": "Label",
"data": {
"trText": "Specify details about your custom Qt Creator lua plugin.",
"wordWrap": true
}
},
{
"name": "PluginName",
"trDisplayName": "Plugin name:",
"mandatory": true,
"type": "LineEdit",
"data": {
"validator": "[a-zA-Z_][a-zA-Z_0-9]*",
"text": "%{JS: value('ProjectName').charAt(0).toUpperCase() + value('ProjectName').slice(1)}"
}
},
{
"name": "VendorName",
"persistenceKey": "VendorName",
"trDisplayName": "Vendor name:",
"mandatory": true,
"type": "LineEdit",
"data": {
"trText": "MyCompany"
}
},
{
"name": "Copyright",
"trDisplayName": "Copyright:",
"mandatory": true,
"type": "LineEdit",
"data": {
"trText": "(C) %{VendorName}"
}
},
{
"name": "License",
"trDisplayName": "License:",
"mandatory": true,
"type": "LineEdit",
"data": {
"trText": "Put short license information here"
}
},
{
"name": "Description",
"trDisplayName": "Description:",
"mandatory": true,
"type": "LineEdit",
"data": {
"trText": "Put a short description of your plugin here"
}
},
{
"name": "Url",
"persistenceKey": "VendorUrl",
"trDisplayName": "URL:",
"mandatory": true,
"type": "LineEdit",
"data": {
"text": "https://www.%{JS: encodeURIComponent(value('VendorName').toLowerCase())}.com"
}
}
]
},
{
"trDisplayName": "Kit Selection",
"trShortTitle": "Kits",
"typeId": "Kits",
"enabled": "%{JS: !value('IsSubproject')}",
"data": {
"projectFilePath": "%{ProjectFile}"
}
},
{
"trDisplayName": "Project Management",
"trShortTitle": "Summary",
"typeId": "Summary"
}
],
"generators": [
{
"typeId": "File",
"data": [
{
"source": "project.json",
"target": "%{ProjectFile}",
"openAsProject": true
},
{
"source": "init.lua.tpl",
"target": "%{SrcFileName}"
},
{
"source": ".luarc.json"
},
{
"source": "plugin.lua.tpl",
"target": "%{PluginSpecFile}",
"openInEditor": true
}
]
}
]
}

View File

@@ -0,0 +1,11 @@
<RCC>
<qresource prefix="/lua/wizards">
<file>luafile/wizard.json</file>
<file>luafile/script.lua</file>
<file>plugin/init.lua.tpl</file>
<file>plugin/plugin.lua.tpl</file>
<file>plugin/project.json</file>
<file>plugin/wizard.json</file>
<file>plugin/.luarc.json</file>
</qresource>
</RCC>