added a customizable plugin system

- the base LUA functionality has been implemented as a mandatory plugin
- the jtacautolase functionality has been implemented as a plugin
- added a VEAF framework plugin

The plugins have GUI elements in the Settings window.
This commit is contained in:
David Pierron
2020-10-12 17:27:13 +02:00
parent c77bfe9da2
commit d22943d755
20 changed files with 330 additions and 65 deletions

90
plugin/veaf_plugin.py Normal file
View File

@@ -0,0 +1,90 @@
from PySide2.QtCore import QSize, Qt, QItemSelectionModel, QPoint
from PySide2.QtWidgets import QLabel, QDialog, QGridLayout, QListView, QStackedLayout, QComboBox, QWidget, \
QAbstractItemView, QPushButton, QGroupBox, QCheckBox, QVBoxLayout, QSpinBox
from .base_plugin import BasePlugin
class VeafPlugin(BasePlugin):
nameInUI:str = "VEAF framework"
nameInSettings:str = "plugin.veaf"
enabledDefaultValue:bool = False
#Allow spawn option
nameInUI_allowSpawn:str = "Allow units spawn via markers and CTLD (not implemented yet)"
nameInSettings_allowSpawn:str = "plugin.veaf.allowSpawn"
def setupUI(self, settingsWindow, row:int):
# call the base method to add the plugin selection checkbox
super().setupUI(settingsWindow, row)
if settingsWindow.pluginsOptionsPageLayout:
self.optionsGroup = QGroupBox(self.nameInUI)
optionsGroupLayout = QGridLayout();
optionsGroupLayout.setAlignment(Qt.AlignTop)
self.optionsGroup.setLayout(optionsGroupLayout)
settingsWindow.pluginsOptionsPageLayout.addWidget(self.optionsGroup)
# allow spawn of objects
if not self.nameInSettings_allowSpawn in self.settings.plugins:
self.settings.plugins[self.nameInSettings_allowSpawn] = True
self.uiWidget_allowSpawn = QCheckBox()
self.uiWidget_allowSpawn.setChecked(self.settings.plugins[self.nameInSettings_allowSpawn])
self.uiWidget_allowSpawn.setEnabled(False)
self.uiWidget_allowSpawn.toggled.connect(lambda: self.applySetting(settingsWindow))
optionsGroupLayout.addWidget(QLabel(self.nameInUI_allowSpawn), 0, 0)
optionsGroupLayout.addWidget(self.uiWidget_allowSpawn, 0, 1, Qt.AlignRight)
# disable or enable the UI in the plugins special page
self.enableOptionsGroup()
def enableOptionsGroup(self):
pluginEnabled = self.uiWidget.isChecked()
self.optionsGroup.setEnabled(pluginEnabled)
def applySetting(self, settingsWindow):
# call the base method to apply the plugin selection checkbox value
super().applySetting(settingsWindow)
# save the "allow spawn" option
self.settings.plugins[self.nameInSettings_allowSpawn] = self.uiWidget_allowSpawn.isChecked()
# disable or enable the UI in the plugins special page
self.enableOptionsGroup()
def injectScripts(self, operation):
if super().injectScripts(operation):
# bypass JTACAutoLase
operation.bypassPluginScript("veaf", "jtacautolase")
# inject the required scripts
operation.injectPluginScript("veaf", "src\\scripts\\mist.lua", "mist")
operation.injectPluginScript("veaf", "src\\scripts\\Moose.lua", "moose")
operation.injectPluginScript("veaf", "src\\scripts\\CTLD.lua", "ctld")
operation.injectPluginScript("veaf", "src\\scripts\\NIOD.lua", "niod")
operation.injectPluginScript("veaf", "src\\scripts\\WeatherMark.lua", "weathermark")
operation.injectPluginScript("veaf", "src\\scripts\\veaf.lua", "veaf")
operation.injectPluginScript("veaf", "src\\scripts\\dcsUnits.lua", "dcsunits")
operation.injectPluginScript("veaf", "src\\scripts\\veafAssets.lua", "veafassets")
operation.injectPluginScript("veaf", "src\\scripts\\veafCarrierOperations.lua", "veafcarrieroperations")
operation.injectPluginScript("veaf", "src\\scripts\\veafCasMission.lua", "veafcasmission")
operation.injectPluginScript("veaf", "src\\scripts\\veafCombatMission.lua", "veafcombatmission")
operation.injectPluginScript("veaf", "src\\scripts\\veafCombatZone.lua", "veafcombatzone")
operation.injectPluginScript("veaf", "src\\scripts\\veafGrass.lua", "veafgrass")
operation.injectPluginScript("veaf", "src\\scripts\\veafInterpreter.lua", "veafinterpreter")
operation.injectPluginScript("veaf", "src\\scripts\\veafMarkers.lua", "veafmarkers")
operation.injectPluginScript("veaf", "src\\scripts\\veafMove.lua", "veafmove")
operation.injectPluginScript("veaf", "src\\scripts\\veafNamedPoints.lua", "veafnamedpoints")
operation.injectPluginScript("veaf", "src\\scripts\\veafRadio.lua", "veafradio")
operation.injectPluginScript("veaf", "src\\scripts\\veafRemote.lua", "veafremote")
operation.injectPluginScript("veaf", "src\\scripts\\veafSecurity.lua", "veafsecurity")
operation.injectPluginScript("veaf", "src\\scripts\\veafShortcuts.lua", "veafshortcuts")
operation.injectPluginScript("veaf", "src\\scripts\\veafSpawn.lua", "veafspawn")
operation.injectPluginScript("veaf", "src\\scripts\\veafTransportMission.lua", "veaftransportmission")
operation.injectPluginScript("veaf", "src\\scripts\\veafUnits.lua", "veafunits")
def injectConfiguration(self, operation):
if super().injectConfiguration(operation):
operation.injectPluginScript("veaf", "src\\config\\missionConfig.lua", "missionconfig")