mirror of
https://github.com/ModOrganizer2/modorganizer-installer_wizard.git
synced 2026-07-27 14:07:59 -07:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0c8d7261fd | ||
|
|
3cf15300fb | ||
|
|
fb91a1d2b6 | ||
|
|
9f71ac1517 | ||
|
|
775d764950 | ||
|
|
538a0f73e9 | ||
|
|
ecefc5eb8a | ||
|
|
b9653b8322 | ||
|
|
b39be8c295 | ||
|
|
28deb0ce25 |
@@ -8,7 +8,12 @@ src/ui/*.py
|
||||
.tox
|
||||
.vscode
|
||||
|
||||
# MO2 build files:
|
||||
vsbuild
|
||||
mob.log
|
||||
|
||||
# Generated files:
|
||||
lib
|
||||
src/lib
|
||||
installer_wizard
|
||||
installer_wizard-*.zip
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
project(installer_wizard LANGUAGES NONE)
|
||||
set(project_type python_module_plugin)
|
||||
set(enable_warnings OFF)
|
||||
|
||||
if(DEFINED DEPENDENCIES_DIR)
|
||||
include(${DEPENDENCIES_DIR}/modorganizer_super/cmake_common/project.cmake)
|
||||
else()
|
||||
include(../cmake_common/project.cmake)
|
||||
endif()
|
||||
|
||||
add_subdirectory(src)
|
||||
+2
-1
@@ -6,7 +6,8 @@ $target = ".\installer_wizard\"
|
||||
|
||||
Remove-Item -Recurse -Force -ErrorAction Ignore $target
|
||||
New-Item -Path $target -Type Directory | Out-Null
|
||||
Copy-Item -Recurse -Path .\src\* -Exclude "*.ui", "__pycache__" -Destination .\installer_wizard
|
||||
Copy-Item -Recurse -Path .\src\* -Exclude "*.ui" -Destination $target
|
||||
Get-ChildItem -Recurse $target -Include "__pycache__" | Remove-Item -Recurse -Force
|
||||
Copy-Item .\installer_wizard_en.ts, .\README.md, .\LICENSE $target
|
||||
|
||||
# Find the version:
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Install the lib:
|
||||
pip install --target=.\src\lib --upgrade git+https://github.com/Holt59/bain-wizard-interpreter | Out-Null
|
||||
pip install --target=.\src\lib --upgrade -r .\plugin-requirements.txt | Out-Null
|
||||
|
||||
# Convert ui files:
|
||||
Get-ChildItem -Recurse -File -Include "*.ui" | ForEach-Object {
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
git+https://github.com/Holt59/bain-wizard-interpreter@v0.0.3
|
||||
+1
-1
@@ -4,4 +4,4 @@ mypy
|
||||
flake8
|
||||
flake8-black
|
||||
mobase-stubs
|
||||
git+https://github.com/Holt59/bain-wizard-interpreter
|
||||
git+https://github.com/Holt59/bain-wizard-interpreter.git@v0.0.3
|
||||
|
||||
@@ -37,8 +37,8 @@ deps =
|
||||
mypy
|
||||
flake8
|
||||
flake8-black
|
||||
mobase-stubs==2.4.0.a3
|
||||
git+https://github.com/Holt59/bain-wizard-interpreter
|
||||
mobase-stubs==2.4.0
|
||||
git+https://github.com/Holt59/bain-wizard-interpreter@v0.0.3
|
||||
commands =
|
||||
black src --check --diff --exclude "lib" --exclude "ui"
|
||||
flake8 src
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
if(DEFINED DEPENDENCIES_DIR)
|
||||
include(${DEPENDENCIES_DIR}/modorganizer_super/cmake_common/src.cmake)
|
||||
else()
|
||||
include(../../cmake_common/src.cmake)
|
||||
endif()
|
||||
+37
-31
@@ -1,36 +1,35 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
from pathlib import Path
|
||||
from typing import Any, List, Mapping, Optional, Tuple
|
||||
|
||||
from PyQt5.QtCore import Qt, pyqtSignal
|
||||
from PyQt5.QtGui import QPixmap, QKeySequence, QFontDatabase
|
||||
from PyQt5 import QtWidgets
|
||||
from typing import Any, Dict, List, Mapping, Optional, Set, Tuple
|
||||
|
||||
import mobase
|
||||
|
||||
from .ui.wizardinstallerdialog import Ui_WizardInstallerDialog
|
||||
from .ui.wizardinstallerpage import Ui_WizardInstallerPage
|
||||
from .ui.wizardinstallerrequires import Ui_WizardInstallerRequires
|
||||
from .ui.wizardinstallercomplete import Ui_WizardInstallerComplete
|
||||
from .ui.wizardinstallererror import Ui_WizardInstallerError
|
||||
|
||||
from antlr4 import ParserRuleContext
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt5.QtCore import Qt, pyqtSignal
|
||||
from PyQt5.QtGui import QFontDatabase, QKeySequence, QPixmap
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
from wizard.contexts import (
|
||||
WizardInterpreterContext,
|
||||
WizardTopLevelContext,
|
||||
WizardSelectContext,
|
||||
WizardSelectOneContext,
|
||||
WizardSelectManyContext,
|
||||
WizardRequireVersionsContext,
|
||||
WizardSelectContext,
|
||||
WizardSelectManyContext,
|
||||
WizardSelectOneContext,
|
||||
WizardTerminationContext,
|
||||
WizardTopLevelContext,
|
||||
)
|
||||
from wizard.errors import WizardError
|
||||
from wizard.interpreter import WizardInterpreter
|
||||
from wizard.manager import SelectOption
|
||||
from wizard.runner import WizardRunnerState, WizardRunnerKeywordVisitor
|
||||
from wizard.runner import WizardRunnerKeywordVisitor, WizardRunnerState
|
||||
from wizard.tweaks import WizardINISetting
|
||||
from wizard.value import Plugin
|
||||
|
||||
from .ui.wizardinstallercomplete import Ui_WizardInstallerComplete
|
||||
from .ui.wizardinstallerdialog import Ui_WizardInstallerDialog
|
||||
from .ui.wizardinstallererror import Ui_WizardInstallerError
|
||||
from .ui.wizardinstallerpage import Ui_WizardInstallerPage
|
||||
from .ui.wizardinstallerrequires import Ui_WizardInstallerRequires
|
||||
from .utils import make_ini_tweaks
|
||||
|
||||
WizardRunnerContext = WizardInterpreterContext[WizardRunnerState, Any]
|
||||
@@ -278,7 +277,7 @@ class WizardInstallerCompletePage(QtWidgets.QWidget):
|
||||
kvisitor: WizardRunnerKeywordVisitor = context.factory.kvisitor # type: ignore
|
||||
|
||||
# The list of plugins in selected sub-packages:
|
||||
plugins: List[str] = []
|
||||
plugins: Set[Plugin] = set()
|
||||
|
||||
# SubPackages:
|
||||
for sp in kvisitor.subpackages:
|
||||
@@ -289,13 +288,19 @@ class WizardInstallerCompletePage(QtWidgets.QWidget):
|
||||
else:
|
||||
item.setCheckState(Qt.Unchecked)
|
||||
item.setFlags(item.flags() & ~Qt.ItemIsUserCheckable) # type: ignore
|
||||
plugins.extend(kvisitor.plugins_for(sp))
|
||||
plugins.update(kvisitor.plugins_for(sp))
|
||||
self.ui.subpackagesList.addItem(item)
|
||||
|
||||
# Switch the renamed plugins:
|
||||
for plugin in list(plugins):
|
||||
if plugin in self.state.renames:
|
||||
plugins.remove(plugin)
|
||||
plugins.add(Plugin(self.state.renames[plugin]))
|
||||
|
||||
# Plugins:
|
||||
for plugin in sorted(plugins):
|
||||
item = QtWidgets.QListWidgetItem()
|
||||
item.setText(plugin)
|
||||
item.setText(plugin.name)
|
||||
if plugin in self.state.plugins:
|
||||
item.setCheckState(Qt.Checked)
|
||||
else:
|
||||
@@ -353,17 +358,16 @@ class WizardInstallerCompletePage(QtWidgets.QWidget):
|
||||
sp.append(item.text())
|
||||
return sp
|
||||
|
||||
def plugins(self) -> List[str]:
|
||||
def plugins(self) -> Dict[str, bool]:
|
||||
"""
|
||||
Returns:
|
||||
The list of plugins selected in the UI (either automatically by the
|
||||
interpreter or by the user).
|
||||
"""
|
||||
sp: List[str] = []
|
||||
sp: Dict[str, bool] = {}
|
||||
for i in range(self.ui.pluginsList.count()):
|
||||
item = self.ui.pluginsList.item(i)
|
||||
if item.checkState() == Qt.Checked:
|
||||
sp.append(item.text())
|
||||
sp[item.text()] = item.checkState() == Qt.Checked
|
||||
return sp
|
||||
|
||||
def tweaks(self) -> Mapping[str, List[WizardINISetting]]:
|
||||
@@ -524,7 +528,7 @@ class WizardInstallerDialog(QtWidgets.QDialog):
|
||||
assert isinstance(widget, WizardInstallerCompletePage)
|
||||
return widget.subpackages()
|
||||
|
||||
def plugins(self):
|
||||
def plugins(self) -> Dict[str, bool]:
|
||||
"""
|
||||
Returns:
|
||||
The list of plugins to install and enable. Only valid if exec() returned
|
||||
@@ -543,7 +547,9 @@ class WizardInstallerDialog(QtWidgets.QDialog):
|
||||
"""
|
||||
widget = self.ui.stackedWidget.currentWidget()
|
||||
assert isinstance(widget, WizardInstallerCompletePage)
|
||||
return widget.state.renames
|
||||
return {
|
||||
plugin.name: new_name for plugin, new_name in widget.state.renames.items()
|
||||
}
|
||||
|
||||
def tweaks(self) -> Mapping[str, List[WizardINISetting]]:
|
||||
"""
|
||||
@@ -624,13 +630,13 @@ class WizardInstallerDialog(QtWidgets.QDialog):
|
||||
|
||||
name: str = self.ui.nextBtn.text()
|
||||
if isinstance(widget, WizardInstallerSelectPage):
|
||||
name = self._tr("Next")
|
||||
name = self.__tr("Next")
|
||||
elif isinstance(widget, WizardInstallerRequiresVersionPage):
|
||||
name = self._tr("Install anyway")
|
||||
name = self.__tr("Install anyway")
|
||||
elif isinstance(widget, (WizardInstallerCancelPage, WizardInstallerErrorPage)):
|
||||
self.ui.nextBtn.setDisabled(True)
|
||||
else:
|
||||
name = self._tr("Install")
|
||||
name = self.__tr("Install")
|
||||
|
||||
self.ui.nextBtn.setText(name)
|
||||
|
||||
@@ -683,5 +689,5 @@ class WizardInstallerDialog(QtWidgets.QDialog):
|
||||
self._update_focus()
|
||||
return super().exec()
|
||||
|
||||
def _tr(self, txt: str) -> str:
|
||||
return QtWidgets.QApplication.translate("WizardInstaller", txt)
|
||||
def __tr(self, str):
|
||||
return QApplication.translate("WizardInstallerDialog", str)
|
||||
|
||||
+20
-11
@@ -1,19 +1,17 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
import re
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
from collections import defaultdict
|
||||
from pathlib import Path
|
||||
from typing import Dict, Optional, List, Union
|
||||
from typing import Dict, List, Optional, Union
|
||||
|
||||
import mobase
|
||||
from PyQt5 import QtWidgets
|
||||
|
||||
# MO2 ships with PyQt5, so you can use it in your plugins:
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
from PyQt5 import QtWidgets
|
||||
|
||||
import mobase
|
||||
|
||||
from wizard.runner import WizardRunnerState
|
||||
|
||||
from .dialog import WizardInstallerDialog
|
||||
@@ -53,11 +51,14 @@ class WizardInstaller(mobase.IPluginInstallerSimple):
|
||||
def name(self):
|
||||
return "BAIN Wizard Installer"
|
||||
|
||||
def localizedName(self) -> str:
|
||||
return self.__tr("BAIN Wizard Installer")
|
||||
|
||||
def author(self):
|
||||
return "Holt59"
|
||||
|
||||
def description(self):
|
||||
return self._tr("Installer for BAIN archive containing wizard scripts.")
|
||||
return self.__tr("Installer for BAIN archive containing wizard scripts.")
|
||||
|
||||
def version(self):
|
||||
return mobase.VersionInfo(1, 0, 2)
|
||||
@@ -134,10 +135,10 @@ class WizardInstaller(mobase.IPluginInstallerSimple):
|
||||
|
||||
def _hasFomodInstaller(self) -> bool:
|
||||
# Do not consider the NCC installer.
|
||||
return bool(self._organizer.pluginSetting("Fomod Installer", "enabled"))
|
||||
return self._organizer.isPluginEnabled("Fomod Installer")
|
||||
|
||||
def _hasOmodInstaller(self) -> bool:
|
||||
return bool(self._organizer.pluginSetting("Omod Installer", "enabled"))
|
||||
return self._organizer.isPluginEnabled("Omod Installer")
|
||||
|
||||
def _getWizardArchiveBase(
|
||||
self, tree: mobase.IFileTree, data_name: str, checker: mobase.ModDataChecker
|
||||
@@ -332,6 +333,14 @@ class WizardInstaller(mobase.IPluginInstallerSimple):
|
||||
|
||||
tree.move(entry, new)
|
||||
|
||||
# Move not selected plugins to optional:
|
||||
for plugin, enabled in dialog.plugins().items():
|
||||
if not enabled:
|
||||
entry = tree.find(plugin)
|
||||
if not entry:
|
||||
continue # silently fail since the plugin should be disabled
|
||||
tree.addDirectory("optional").insert(entry)
|
||||
|
||||
# TODO: INI Tweaks:
|
||||
alltweaks = dialog.tweaks()
|
||||
|
||||
@@ -385,7 +394,7 @@ class WizardInstaller(mobase.IPluginInstallerSimple):
|
||||
else:
|
||||
return mobase.InstallResult.CANCELED
|
||||
|
||||
def _tr(self, str):
|
||||
def __tr(self, str) -> str:
|
||||
# We need this to translate string in Python. Check the common documentation
|
||||
# for more details:
|
||||
return QApplication.translate("WizardInstaller", str)
|
||||
|
||||
@@ -1,34 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS><TS version="2.0">
|
||||
<context>
|
||||
<name>WizardInstallerComplete</name>
|
||||
<name>WizardInstaller</name>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallercomplete.py" line="151"/>
|
||||
<source>Form</source>
|
||||
<location filename="installer.py" line="61"/>
|
||||
<source>Installer for BAIN archive containing wizard scripts.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallercomplete.py" line="152"/>
|
||||
<location filename="installer.py" line="55"/>
|
||||
<source>BAIN Wizard Installer</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WizardInstallerComplete</name>
|
||||
<message>
|
||||
<location filename="ui/wizardinstallercomplete.ui" line="40"/>
|
||||
<source>The installer script has finished. The following sub-packages and plugins will be installed.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallercomplete.py" line="153"/>
|
||||
<location filename="ui/wizardinstallercomplete.ui" line="111"/>
|
||||
<source>Sub-Packages:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallercomplete.py" line="154"/>
|
||||
<location filename="ui/wizardinstallercomplete.ui" line="128"/>
|
||||
<source>Plugins:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallercomplete.py" line="155"/>
|
||||
<location filename="ui/wizardinstallercomplete.ui" line="180"/>
|
||||
<source>INI Tweaks:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallercomplete.py" line="156"/>
|
||||
<location filename="ui/wizardinstallercomplete.ui" line="236"/>
|
||||
<source>Notes:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -36,73 +44,60 @@
|
||||
<context>
|
||||
<name>WizardInstallerDialog</name>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerdialog.py" line="75"/>
|
||||
<source>BAIN Wizard Installer</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerdialog.py" line="76"/>
|
||||
<source>Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerdialog.py" line="77"/>
|
||||
<source>Manual</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerdialog.py" line="78"/>
|
||||
<source>Script</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerdialog.py" line="79"/>
|
||||
<source>Back</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerdialog.py" line="80"/>
|
||||
<location filename="ui/wizardinstallerdialog.ui" line="102"/>
|
||||
<source>Next</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerdialog.py" line="81"/>
|
||||
<location filename="dialog.py" line="635"/>
|
||||
<source>Install anyway</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="dialog.py" line="639"/>
|
||||
<source>Install</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ui/wizardinstallerdialog.ui" line="14"/>
|
||||
<source>BAIN Wizard Installer</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ui/wizardinstallerdialog.ui" line="25"/>
|
||||
<source>Name</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ui/wizardinstallerdialog.ui" line="56"/>
|
||||
<source>Manual</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ui/wizardinstallerdialog.ui" line="66"/>
|
||||
<source>Script</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ui/wizardinstallerdialog.ui" line="92"/>
|
||||
<source>Back</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="ui/wizardinstallerdialog.ui" line="109"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WizardInstallerError</name>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallererror.py" line="52"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallererror.py" line="54"/>
|
||||
<source>TextLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>WizardInstallerPage</name>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerpage.py" line="91"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerpage.py" line="92"/>
|
||||
<source>TextLabel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerpage.py" line="93"/>
|
||||
<location filename="ui/wizardinstallerpage.ui" line="114"/>
|
||||
<source>Options:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerpage.py" line="94"/>
|
||||
<location filename="ui/wizardinstallerpage.ui" line="148"/>
|
||||
<source>Description:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
@@ -110,52 +105,47 @@
|
||||
<context>
|
||||
<name>WizardInstallerRequires</name>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerrequires.py" line="113"/>
|
||||
<source>Form</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerrequires.py" line="114"/>
|
||||
<location filename="ui/wizardinstallerrequires.ui" line="34"/>
|
||||
<source><html><head/><body><p><span style=" font-weight:600;">Warning:</span> The following version requirements are not met for using this installer.</p></body></html></source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerrequires.py" line="115"/>
|
||||
<location filename="ui/wizardinstallerrequires.ui" line="44"/>
|
||||
<source>Requirements</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerrequires.py" line="116"/>
|
||||
<location filename="ui/wizardinstallerrequires.ui" line="52"/>
|
||||
<source>Graphics Extender</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerrequires.py" line="117"/>
|
||||
<location filename="ui/wizardinstallerrequires.ui" line="76"/>
|
||||
<source>Wrye Bash</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerrequires.py" line="118"/>
|
||||
<location filename="ui/wizardinstallerrequires.ui" line="86"/>
|
||||
<source>Need</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerrequires.py" line="119"/>
|
||||
<location filename="ui/wizardinstallerrequires.ui" line="103"/>
|
||||
<source>Game</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerrequires.py" line="122"/>
|
||||
<location filename="ui/wizardinstallerrequires.ui" line="151"/>
|
||||
<source>N/A</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerrequires.py" line="121"/>
|
||||
<location filename="ui/wizardinstallerrequires.ui" line="141"/>
|
||||
<source>Have</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="src/ui/wizardinstallerrequires.py" line="123"/>
|
||||
<location filename="ui/wizardinstallerrequires.ui" line="165"/>
|
||||
<source>Script Extender</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
+1
-3
@@ -1,17 +1,15 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
import sys
|
||||
|
||||
from pathlib import Path
|
||||
from typing import Iterable, List, Optional
|
||||
|
||||
import mobase
|
||||
|
||||
from wizard.interpreter import WizardInterpreter
|
||||
from wizard.manager import ManagerModInterface
|
||||
from wizard.severity import SeverityContext
|
||||
from wizard.value import SubPackage, SubPackages
|
||||
from wizard.utils import make_runner_context_factory
|
||||
from wizard.value import SubPackage, SubPackages
|
||||
|
||||
|
||||
class MO2SubPackage(SubPackage):
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="leftMargin">
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="leftMargin">
|
||||
@@ -45,7 +45,7 @@
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -68,7 +68,7 @@
|
||||
<item>
|
||||
<widget class="QLabel" name="titleLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
@@ -82,6 +82,16 @@
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="markdown">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="html">
|
||||
<string notr="true"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="leftMargin">
|
||||
@@ -93,7 +93,7 @@
|
||||
<enum>QFrame::Sunken</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<property name="leftMargin">
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
import re
|
||||
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Mapping
|
||||
|
||||
|
||||
Reference in New Issue
Block a user