Merge pull request #6 from yeah-its-gloria/main

This commit is contained in:
Campbell 2024-10-22 06:55:59 -04:00 committed by GitHub
commit 58d3f7bd3e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 344 additions and 63 deletions

129
NUSGet.py
View File

@ -11,14 +11,14 @@ from importlib.metadata import version
from PySide6.QtGui import QIcon from PySide6.QtGui import QIcon
from PySide6.QtWidgets import (QApplication, QMainWindow, QMessageBox, QTreeWidgetItem, QHeaderView, QStyle, from PySide6.QtWidgets import (QApplication, QMainWindow, QMessageBox, QTreeWidgetItem, QHeaderView, QStyle,
QStyleFactory) QStyleFactory, QFileDialog)
from PySide6.QtCore import QRunnable, Slot, QThreadPool, Signal, QObject, QLibraryInfo, QTranslator, QLocale from PySide6.QtCore import QRunnable, Slot, QThreadPool, Signal, QObject, QLibraryInfo, QTranslator, QLocale
from qt.py.ui_MainMenu import Ui_MainWindow from qt.py.ui_MainMenu import Ui_MainWindow
from modules.core import * from modules.core import *
from modules.download_wii import run_nus_download_wii from modules.download_wii import run_nus_download_wii, run_nus_download_wii_batch
from modules.download_dsi import run_nus_download_dsi from modules.download_dsi import run_nus_download_dsi, run_nus_download_dsi_batch
nusget_version = "1.2.0" nusget_version = "1.2.0"
@ -63,6 +63,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.ui.setupUi(self) self.ui.setupUi(self)
self.threadpool = QThreadPool() self.threadpool = QThreadPool()
self.ui.download_btn.clicked.connect(self.download_btn_pressed) self.ui.download_btn.clicked.connect(self.download_btn_pressed)
self.ui.script_btn.clicked.connect(self.script_btn_pressed)
self.ui.pack_archive_chkbox.clicked.connect(self.pack_wad_chkbox_toggled) self.ui.pack_archive_chkbox.clicked.connect(self.pack_wad_chkbox_toggled)
self.ui.tid_entry.textChanged.connect(self.tid_updated) self.ui.tid_entry.textChanged.connect(self.tid_updated)
# noinspection PyUnresolvedReferences # noinspection PyUnresolvedReferences
@ -124,6 +125,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
tree[0].insertTopLevelItems(0, self.tree_categories) tree[0].insertTopLevelItems(0, self.tree_categories)
# Connect the double click signal for handling when titles are selected. # Connect the double click signal for handling when titles are selected.
tree[0].itemDoubleClicked.connect(self.onItemClicked) tree[0].itemDoubleClicked.connect(self.onItemClicked)
# Prevent resizing, Qt makes us look stupid here
self.setFixedSize(self.size())
# Do a quick check to see if there's a newer release available, and inform the user if there is. # Do a quick check to see if there's a newer release available, and inform the user if there is.
worker = Worker(check_nusget_updates, app, nusget_version) worker = Worker(check_nusget_updates, app, nusget_version)
worker.signals.result.connect(self.prompt_for_update) worker.signals.result.connect(self.prompt_for_update)
@ -230,6 +235,24 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.log_text = f"{tid} - {selected_title.name}\nVersion: {selected_title.version}\n\n{danger_text}\n" self.log_text = f"{tid} - {selected_title.name}\nVersion: {selected_title.version}\n\n{danger_text}\n"
self.ui.log_text_browser.setText(self.log_text) self.ui.log_text_browser.setText(self.log_text)
def lock_ui_for_download(self):
# Lock the UI prior to the download beginning to avoid spawning multiple threads or changing info part way in.
# Also resets the log.
self.ui.tid_entry.setEnabled(False)
self.ui.version_entry.setEnabled(False)
self.ui.download_btn.setEnabled(False)
self.ui.script_btn.setEnabled(False)
self.ui.pack_archive_chkbox.setEnabled(False)
self.ui.keep_enc_chkbox.setEnabled(False)
self.ui.create_dec_chkbox.setEnabled(False)
self.ui.use_local_chkbox.setEnabled(False)
self.ui.use_wiiu_nus_chkbox.setEnabled(False)
self.ui.pack_vwii_mode_chkbox.setEnabled(False)
self.ui.archive_file_entry.setEnabled(False)
self.ui.console_select_dropdown.setEnabled(False)
self.log_text = ""
self.ui.log_text_browser.setText(self.log_text)
def download_btn_pressed(self): def download_btn_pressed(self):
# Throw an error and make a message box appear if you haven't selected any options to output the title. # Throw an error and make a message box appear if you haven't selected any options to output the title.
if (self.ui.pack_archive_chkbox.isChecked() is False and self.ui.keep_enc_chkbox.isChecked() is False and if (self.ui.pack_archive_chkbox.isChecked() is False and self.ui.keep_enc_chkbox.isChecked() is False and
@ -244,20 +267,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
"like the download to be saved.")) "like the download to be saved."))
msg_box.exec() msg_box.exec()
return return
# Lock the UI prior to the download beginning to avoid spawning multiple threads or changing info part way in.
self.ui.tid_entry.setEnabled(False) self.lock_ui_for_download()
self.ui.version_entry.setEnabled(False)
self.ui.download_btn.setEnabled(False)
self.ui.pack_archive_chkbox.setEnabled(False)
self.ui.keep_enc_chkbox.setEnabled(False)
self.ui.create_dec_chkbox.setEnabled(False)
self.ui.use_local_chkbox.setEnabled(False)
self.ui.use_wiiu_nus_chkbox.setEnabled(False)
self.ui.pack_vwii_mode_chkbox.setEnabled(False)
self.ui.archive_file_entry.setEnabled(False)
self.ui.console_select_dropdown.setEnabled(False)
self.log_text = ""
self.ui.log_text_browser.setText(self.log_text)
# Create a new worker object to handle the download in a new thread. # Create a new worker object to handle the download in a new thread.
if self.ui.console_select_dropdown.currentText() == "DSi": if self.ui.console_select_dropdown.currentText() == "DSi":
worker = Worker(run_nus_download_dsi, out_folder, self.ui.tid_entry.text(), worker = Worker(run_nus_download_dsi, out_folder, self.ui.tid_entry.text(),
@ -318,6 +330,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.ui.tid_entry.setEnabled(True) self.ui.tid_entry.setEnabled(True)
self.ui.version_entry.setEnabled(True) self.ui.version_entry.setEnabled(True)
self.ui.download_btn.setEnabled(True) self.ui.download_btn.setEnabled(True)
self.ui.script_btn.setEnabled(True)
self.ui.pack_archive_chkbox.setEnabled(True) self.ui.pack_archive_chkbox.setEnabled(True)
self.ui.keep_enc_chkbox.setEnabled(True) self.ui.keep_enc_chkbox.setEnabled(True)
self.ui.create_dec_chkbox.setEnabled(True) self.ui.create_dec_chkbox.setEnabled(True)
@ -347,6 +360,88 @@ class MainWindow(QMainWindow, Ui_MainWindow):
elif self.ui.console_select_dropdown.currentText() == "DSi": elif self.ui.console_select_dropdown.currentText() == "DSi":
self.ui.pack_vwii_mode_chkbox.setEnabled(False) self.ui.pack_vwii_mode_chkbox.setEnabled(False)
def script_btn_pressed(self):
file_name = QFileDialog.getOpenFileName(self, caption=app.translate("MainWindow", "Open NUS script"), filter=app.translate("MainWindow", "NUS Scripts (*.nus *.txt)"), options=QFileDialog.Option.ReadOnly)
if len(file_name[0]) == 0:
return
try:
file = open(file_name[0], "r")
except:
QMessageBox.critical(self, app.translate("MainWindow", "Script Failure"), app.translate("MainWindow", "Failed to open the script."), buttons=QMessageBox.StandardButton.Ok, defaultButton=QMessageBox.StandardButton.Ok)
return
content = file.readlines()
# Decoding NUS Scripts
# NUS Scripts are plaintext UTF-8 files that list a title per line, terminated with newlines.
# Every title is its u64 TID, a space and its u16 version, *both* written in hexadecimal.
# NUS itself expects versions as decimal notation, so they need to be decoded first, but TIDs are always written in hexadecimal notation.
titles = []
for index, title in enumerate(content):
decoded = title.replace("\n", "").split(" ", 1)
if len(decoded[0]) != 16:
QMessageBox.critical(self, app.translate("MainWindow", "Script Failure"), app.translate("MainWindow", "The TID for title #%n is not valid.", "", index+1), buttons=QMessageBox.StandardButton.Ok, defaultButton=QMessageBox.StandardButton.Ok)
return
elif len(decoded[1]) != 4:
QMessageBox.critical(self, app.translate("MainWindow", "Script Failure"), app.translate("MainWindow", "The version for title #%n is not valid.", "", index+1), buttons=QMessageBox.StandardButton.Ok, defaultButton=QMessageBox.StandardButton.Ok)
return
tid = decoded[0]
try:
version = int(decoded[1], 16)
except:
QMessageBox.critical(self, app.translate("MainWindow", "Script Failure"), app.translate("MainWindow", "The version for title #%n is not valid.", "", index+1), buttons=QMessageBox.StandardButton.Ok, defaultButton=QMessageBox.StandardButton.Ok)
return
title = None
for category in self.trees[self.ui.platform_tabs.currentIndex()][1]:
for title_ in self.trees[self.ui.platform_tabs.currentIndex()][1][category]:
# The last two digits are either identifying the title type (e.g IOS slot, BC type, etc) or a region code; in case of the latter, skip the region here to match it
if not ((title_["TID"][-2:] == "XX" and title_["TID"][:-2] == tid[:-2]) or title_["TID"] == tid):
continue
found_ver = False
for region in title_["Versions"]:
for db_version in title_["Versions"][region]:
if db_version == version:
found_ver = True
break
if not found_ver:
QMessageBox.critical(self, app.translate("MainWindow", "Script Failure"), app.translate("MainWindow", "The version for title #%n could not be discovered in the database.", "", index+1), buttons=QMessageBox.StandardButton.Ok, defaultButton=QMessageBox.StandardButton.Ok)
return
title = title_
break
if title == None:
QMessageBox.critical(self, app.translate("MainWindow", "Script Failure"), app.translate("MainWindow", "Title #%n could not be discovered in the database.", "", index+1), buttons=QMessageBox.StandardButton.Ok, defaultButton=QMessageBox.StandardButton.Ok)
return
titles.append((title["TID"], str(version), title["Archive Name"]))
self.lock_ui_for_download()
self.update_log_text(f"Found {len(titles)} titles, starting batch download.")
if self.ui.console_select_dropdown.currentText() == "DSi":
worker = Worker(run_nus_download_dsi_batch, out_folder, titles, self.ui.pack_archive_chkbox.isChecked(),
self.ui.keep_enc_chkbox.isChecked(), self.ui.create_dec_chkbox.isChecked(),
self.ui.use_local_chkbox.isChecked(), self.ui.archive_file_entry.text())
else:
worker = Worker(run_nus_download_wii_batch, out_folder, titles, self.ui.pack_archive_chkbox.isChecked(),
self.ui.keep_enc_chkbox.isChecked(), self.ui.create_dec_chkbox.isChecked(),
self.ui.use_wiiu_nus_chkbox.isChecked(), self.ui.use_local_chkbox.isChecked(),
self.ui.pack_vwii_mode_chkbox.isChecked(), self.ui.patch_ios_chkbox.isChecked())
worker.signals.result.connect(self.check_download_result)
worker.signals.progress.connect(self.update_log_text)
self.threadpool.start(worker)
if __name__ == "__main__": if __name__ == "__main__":
app = QApplication(sys.argv) app = QApplication(sys.argv)

View File

@ -3,6 +3,7 @@
import os import os
import pathlib import pathlib
from typing import List, Tuple
import libTWLPy import libTWLPy
@ -116,7 +117,7 @@ def run_nus_download_dsi(out_folder: pathlib.Path, tid: str, version: str, pack_
title.tad.set_cert_data(libTWLPy.download_cert()) title.tad.set_cert_data(libTWLPy.download_cert())
# Use a typed TAD name if there is one, and auto generate one based on the TID and version if there isn't. # Use a typed TAD name if there is one, and auto generate one based on the TID and version if there isn't.
progress_callback.emit("Packing TAD...") progress_callback.emit("Packing TAD...")
if tad_file_name != "": if tad_file_name != "" and tad_file_name is not None:
if tad_file_name[-4:] != ".tad": if tad_file_name[-4:] != ".tad":
tad_file_name = tad_file_name + ".tad" tad_file_name = tad_file_name + ".tad"
else: else:
@ -132,3 +133,13 @@ def run_nus_download_dsi(out_folder: pathlib.Path, tid: str, version: str, pack_
if (not pack_tad_enabled and pack_tad_chkbox) or (not decrypt_contents_enabled and decrypt_contents_chkbox): if (not pack_tad_enabled and pack_tad_chkbox) or (not decrypt_contents_enabled and decrypt_contents_chkbox):
return 1 return 1
return 0 return 0
def run_nus_download_dsi_batch(out_folder: pathlib.Path, titles: List[Tuple[str, str, str]], pack_tad_chkbox: bool, keep_enc_chkbox: bool,
decrypt_contents_chkbox: bool, use_local_chkbox: bool, progress_callback=None):
for title in titles:
result = run_nus_download_dsi(out_folder, title[0], title[1], pack_tad_chkbox, keep_enc_chkbox, decrypt_contents_chkbox, use_local_chkbox, f"{title[2]}-{title[1]}.tad", progress_callback)
if result != 0:
return result
progress_callback.emit(f"Batch download finished.")
return 0

View File

@ -3,6 +3,7 @@
import os import os
import pathlib import pathlib
from typing import List, Tuple
import libWiiPy import libWiiPy
@ -138,7 +139,7 @@ def run_nus_download_wii(out_folder: pathlib.Path, tid: str, version: str, pack_
title.wad.set_cert_data(libWiiPy.title.download_cert(wiiu_endpoint=wiiu_nus_enabled)) title.wad.set_cert_data(libWiiPy.title.download_cert(wiiu_endpoint=wiiu_nus_enabled))
# Use a typed WAD name if there is one, and auto generate one based on the TID and version if there isn't. # Use a typed WAD name if there is one, and auto generate one based on the TID and version if there isn't.
progress_callback.emit(" - Packing WAD...") progress_callback.emit(" - Packing WAD...")
if wad_file_name != "": if wad_file_name != "" and wad_file_name is not None:
if wad_file_name[-4:] != ".wad": if wad_file_name[-4:] != ".wad":
wad_file_name = wad_file_name + ".wad" wad_file_name = wad_file_name + ".wad"
else: else:
@ -165,3 +166,14 @@ def run_nus_download_wii(out_folder: pathlib.Path, tid: str, version: str, pack_
if (not pack_wad_enabled and pack_wad_chkbox) or (not decrypt_contents_enabled and decrypt_contents_chkbox): if (not pack_wad_enabled and pack_wad_chkbox) or (not decrypt_contents_enabled and decrypt_contents_chkbox):
return 1 return 1
return 0 return 0
def run_nus_download_wii_batch(out_folder: pathlib.Path, titles: List[Tuple[str, str, str]], pack_wad_chkbox: bool, keep_enc_chkbox: bool,
decrypt_contents_chkbox: bool, wiiu_nus_chkbox: bool, use_local_chkbox: bool,
repack_vwii_chkbox: bool, patch_ios: bool, progress_callback=None):
for title in titles:
result = run_nus_download_wii(out_folder, title[0], title[1], pack_wad_chkbox, keep_enc_chkbox, decrypt_contents_chkbox, wiiu_nus_chkbox, use_local_chkbox, repack_vwii_chkbox, patch_ios, f"{title[2]}-{title[1]}.wad", progress_callback)
if result != 0:
return result
progress_callback.emit(f"Batch download finished.")
return 0

View File

@ -3,7 +3,7 @@
################################################################################ ################################################################################
## Form generated from reading UI file 'MainMenu.ui' ## Form generated from reading UI file 'MainMenu.ui'
## ##
## Created by: Qt User Interface Compiler version 6.7.2 ## Created by: Qt User Interface Compiler version 6.8.0
## ##
## WARNING! All changes made in this file will be lost when recompiling UI file! ## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################ ################################################################################
@ -32,6 +32,7 @@ class Ui_MainWindow(object):
self.centralwidget.setObjectName(u"centralwidget") self.centralwidget.setObjectName(u"centralwidget")
self.horizontalLayout_3 = QHBoxLayout(self.centralwidget) self.horizontalLayout_3 = QHBoxLayout(self.centralwidget)
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
self.horizontalLayout_3.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint)
self.vertical_layout_trees = QVBoxLayout() self.vertical_layout_trees = QVBoxLayout()
self.vertical_layout_trees.setObjectName(u"vertical_layout_trees") self.vertical_layout_trees.setObjectName(u"vertical_layout_trees")
self.label_2 = QLabel(self.centralwidget) self.label_2 = QLabel(self.centralwidget)
@ -111,7 +112,7 @@ class Ui_MainWindow(object):
self.vertical_layout_controls = QVBoxLayout() self.vertical_layout_controls = QVBoxLayout()
self.vertical_layout_controls.setObjectName(u"vertical_layout_controls") self.vertical_layout_controls.setObjectName(u"vertical_layout_controls")
self.vertical_layout_controls.setSizeConstraint(QLayout.SetDefaultConstraint) self.vertical_layout_controls.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint)
self.horizontal_layout_title_entry = QHBoxLayout() self.horizontal_layout_title_entry = QHBoxLayout()
self.horizontal_layout_title_entry.setObjectName(u"horizontal_layout_title_entry") self.horizontal_layout_title_entry.setObjectName(u"horizontal_layout_title_entry")
self.tid_entry = QLineEdit(self.centralwidget) self.tid_entry = QLineEdit(self.centralwidget)
@ -145,15 +146,38 @@ class Ui_MainWindow(object):
self.vertical_layout_controls.addLayout(self.horizontal_layout_title_entry) self.vertical_layout_controls.addLayout(self.horizontal_layout_title_entry)
self.horizontalLayout = QHBoxLayout()
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.download_btn = QPushButton(self.centralwidget) self.download_btn = QPushButton(self.centralwidget)
self.download_btn.setObjectName(u"download_btn") self.download_btn.setObjectName(u"download_btn")
sizePolicy1 = QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.Fixed)
sizePolicy1.setHorizontalStretch(0)
sizePolicy1.setVerticalStretch(0)
sizePolicy1.setHeightForWidth(self.download_btn.sizePolicy().hasHeightForWidth())
self.download_btn.setSizePolicy(sizePolicy1)
self.vertical_layout_controls.addWidget(self.download_btn) self.horizontalLayout.addWidget(self.download_btn)
self.script_btn = QPushButton(self.centralwidget)
self.script_btn.setObjectName(u"script_btn")
sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
sizePolicy2.setHorizontalStretch(0)
sizePolicy2.setVerticalStretch(0)
sizePolicy2.setHeightForWidth(self.script_btn.sizePolicy().hasHeightForWidth())
self.script_btn.setSizePolicy(sizePolicy2)
self.horizontalLayout.addWidget(self.script_btn)
self.vertical_layout_controls.addLayout(self.horizontalLayout)
self.horizontalLayout_5 = QHBoxLayout() self.horizontalLayout_5 = QHBoxLayout()
self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
self.horizontalLayout_5.setSizeConstraint(QLayout.SizeConstraint.SetMinimumSize)
self.verticalLayout_7 = QVBoxLayout() self.verticalLayout_7 = QVBoxLayout()
self.verticalLayout_7.setSpacing(5)
self.verticalLayout_7.setObjectName(u"verticalLayout_7") self.verticalLayout_7.setObjectName(u"verticalLayout_7")
self.verticalLayout_7.setSizeConstraint(QLayout.SizeConstraint.SetMinimumSize)
self.label_3 = QLabel(self.centralwidget) self.label_3 = QLabel(self.centralwidget)
self.label_3.setObjectName(u"label_3") self.label_3.setObjectName(u"label_3")
self.label_3.setFont(font) self.label_3.setFont(font)
@ -161,20 +185,26 @@ class Ui_MainWindow(object):
self.verticalLayout_7.addWidget(self.label_3) self.verticalLayout_7.addWidget(self.label_3)
self.pack_archive_row = QHBoxLayout() self.pack_archive_row = QHBoxLayout()
self.pack_archive_row.setSpacing(10)
self.pack_archive_row.setObjectName(u"pack_archive_row") self.pack_archive_row.setObjectName(u"pack_archive_row")
self.pack_archive_chkbox = QCheckBox(self.centralwidget) self.pack_archive_chkbox = QCheckBox(self.centralwidget)
self.pack_archive_chkbox.setObjectName(u"pack_archive_chkbox") self.pack_archive_chkbox.setObjectName(u"pack_archive_chkbox")
sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Maximum, QSizePolicy.Policy.Fixed) sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Maximum, QSizePolicy.Policy.Fixed)
sizePolicy1.setHorizontalStretch(0) sizePolicy3.setHorizontalStretch(0)
sizePolicy1.setVerticalStretch(0) sizePolicy3.setVerticalStretch(0)
sizePolicy1.setHeightForWidth(self.pack_archive_chkbox.sizePolicy().hasHeightForWidth()) sizePolicy3.setHeightForWidth(self.pack_archive_chkbox.sizePolicy().hasHeightForWidth())
self.pack_archive_chkbox.setSizePolicy(sizePolicy1) self.pack_archive_chkbox.setSizePolicy(sizePolicy3)
self.pack_archive_chkbox.setText(u"") self.pack_archive_chkbox.setText(u"")
self.pack_archive_row.addWidget(self.pack_archive_chkbox) self.pack_archive_row.addWidget(self.pack_archive_chkbox)
self.label_7 = QLabel(self.centralwidget) self.label_7 = QLabel(self.centralwidget)
self.label_7.setObjectName(u"label_7") self.label_7.setObjectName(u"label_7")
sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.MinimumExpanding)
sizePolicy4.setHorizontalStretch(0)
sizePolicy4.setVerticalStretch(0)
sizePolicy4.setHeightForWidth(self.label_7.sizePolicy().hasHeightForWidth())
self.label_7.setSizePolicy(sizePolicy4)
self.label_7.setWordWrap(True) self.label_7.setWordWrap(True)
self.pack_archive_row.addWidget(self.label_7) self.pack_archive_row.addWidget(self.label_7)
@ -189,11 +219,12 @@ class Ui_MainWindow(object):
self.verticalLayout_7.addWidget(self.archive_file_entry) self.verticalLayout_7.addWidget(self.archive_file_entry)
self.keep_enc_row = QHBoxLayout() self.keep_enc_row = QHBoxLayout()
self.keep_enc_row.setSpacing(10)
self.keep_enc_row.setObjectName(u"keep_enc_row") self.keep_enc_row.setObjectName(u"keep_enc_row")
self.keep_enc_chkbox = QCheckBox(self.centralwidget) self.keep_enc_chkbox = QCheckBox(self.centralwidget)
self.keep_enc_chkbox.setObjectName(u"keep_enc_chkbox") self.keep_enc_chkbox.setObjectName(u"keep_enc_chkbox")
sizePolicy1.setHeightForWidth(self.keep_enc_chkbox.sizePolicy().hasHeightForWidth()) sizePolicy3.setHeightForWidth(self.keep_enc_chkbox.sizePolicy().hasHeightForWidth())
self.keep_enc_chkbox.setSizePolicy(sizePolicy1) self.keep_enc_chkbox.setSizePolicy(sizePolicy3)
self.keep_enc_chkbox.setText(u"") self.keep_enc_chkbox.setText(u"")
self.keep_enc_chkbox.setChecked(True) self.keep_enc_chkbox.setChecked(True)
@ -201,6 +232,8 @@ class Ui_MainWindow(object):
self.label_6 = QLabel(self.centralwidget) self.label_6 = QLabel(self.centralwidget)
self.label_6.setObjectName(u"label_6") self.label_6.setObjectName(u"label_6")
sizePolicy4.setHeightForWidth(self.label_6.sizePolicy().hasHeightForWidth())
self.label_6.setSizePolicy(sizePolicy4)
self.label_6.setWordWrap(True) self.label_6.setWordWrap(True)
self.keep_enc_row.addWidget(self.label_6) self.keep_enc_row.addWidget(self.label_6)
@ -209,17 +242,20 @@ class Ui_MainWindow(object):
self.verticalLayout_7.addLayout(self.keep_enc_row) self.verticalLayout_7.addLayout(self.keep_enc_row)
self.create_dec_row = QHBoxLayout() self.create_dec_row = QHBoxLayout()
self.create_dec_row.setSpacing(10)
self.create_dec_row.setObjectName(u"create_dec_row") self.create_dec_row.setObjectName(u"create_dec_row")
self.create_dec_chkbox = QCheckBox(self.centralwidget) self.create_dec_chkbox = QCheckBox(self.centralwidget)
self.create_dec_chkbox.setObjectName(u"create_dec_chkbox") self.create_dec_chkbox.setObjectName(u"create_dec_chkbox")
sizePolicy1.setHeightForWidth(self.create_dec_chkbox.sizePolicy().hasHeightForWidth()) sizePolicy3.setHeightForWidth(self.create_dec_chkbox.sizePolicy().hasHeightForWidth())
self.create_dec_chkbox.setSizePolicy(sizePolicy1) self.create_dec_chkbox.setSizePolicy(sizePolicy3)
self.create_dec_chkbox.setText(u"") self.create_dec_chkbox.setText(u"")
self.create_dec_row.addWidget(self.create_dec_chkbox) self.create_dec_row.addWidget(self.create_dec_chkbox)
self.create_dec_chkbox_lbl = QLabel(self.centralwidget) self.create_dec_chkbox_lbl = QLabel(self.centralwidget)
self.create_dec_chkbox_lbl.setObjectName(u"create_dec_chkbox_lbl") self.create_dec_chkbox_lbl.setObjectName(u"create_dec_chkbox_lbl")
sizePolicy4.setHeightForWidth(self.create_dec_chkbox_lbl.sizePolicy().hasHeightForWidth())
self.create_dec_chkbox_lbl.setSizePolicy(sizePolicy4)
self.create_dec_chkbox_lbl.setWordWrap(True) self.create_dec_chkbox_lbl.setWordWrap(True)
self.create_dec_row.addWidget(self.create_dec_chkbox_lbl) self.create_dec_row.addWidget(self.create_dec_chkbox_lbl)
@ -228,18 +264,21 @@ class Ui_MainWindow(object):
self.verticalLayout_7.addLayout(self.create_dec_row) self.verticalLayout_7.addLayout(self.create_dec_row)
self.use_local_row = QHBoxLayout() self.use_local_row = QHBoxLayout()
self.use_local_row.setSpacing(10)
self.use_local_row.setObjectName(u"use_local_row") self.use_local_row.setObjectName(u"use_local_row")
self.use_local_chkbox = QCheckBox(self.centralwidget) self.use_local_chkbox = QCheckBox(self.centralwidget)
self.use_local_chkbox.setObjectName(u"use_local_chkbox") self.use_local_chkbox.setObjectName(u"use_local_chkbox")
self.use_local_chkbox.setEnabled(True) self.use_local_chkbox.setEnabled(True)
sizePolicy1.setHeightForWidth(self.use_local_chkbox.sizePolicy().hasHeightForWidth()) sizePolicy3.setHeightForWidth(self.use_local_chkbox.sizePolicy().hasHeightForWidth())
self.use_local_chkbox.setSizePolicy(sizePolicy1) self.use_local_chkbox.setSizePolicy(sizePolicy3)
self.use_local_chkbox.setText(u"") self.use_local_chkbox.setText(u"")
self.use_local_row.addWidget(self.use_local_chkbox) self.use_local_row.addWidget(self.use_local_chkbox)
self.use_local_chkbox_lbl = QLabel(self.centralwidget) self.use_local_chkbox_lbl = QLabel(self.centralwidget)
self.use_local_chkbox_lbl.setObjectName(u"use_local_chkbox_lbl") self.use_local_chkbox_lbl.setObjectName(u"use_local_chkbox_lbl")
sizePolicy4.setHeightForWidth(self.use_local_chkbox_lbl.sizePolicy().hasHeightForWidth())
self.use_local_chkbox_lbl.setSizePolicy(sizePolicy4)
self.use_local_chkbox_lbl.setWordWrap(True) self.use_local_chkbox_lbl.setWordWrap(True)
self.use_local_row.addWidget(self.use_local_chkbox_lbl) self.use_local_row.addWidget(self.use_local_chkbox_lbl)
@ -248,12 +287,14 @@ class Ui_MainWindow(object):
self.verticalLayout_7.addLayout(self.use_local_row) self.verticalLayout_7.addLayout(self.use_local_row)
self.use_wiiu_nus_row = QHBoxLayout() self.use_wiiu_nus_row = QHBoxLayout()
self.use_wiiu_nus_row.setSpacing(10)
self.use_wiiu_nus_row.setObjectName(u"use_wiiu_nus_row") self.use_wiiu_nus_row.setObjectName(u"use_wiiu_nus_row")
self.use_wiiu_nus_row.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint)
self.use_wiiu_nus_chkbox = QCheckBox(self.centralwidget) self.use_wiiu_nus_chkbox = QCheckBox(self.centralwidget)
self.use_wiiu_nus_chkbox.setObjectName(u"use_wiiu_nus_chkbox") self.use_wiiu_nus_chkbox.setObjectName(u"use_wiiu_nus_chkbox")
sizePolicy1.setHeightForWidth(self.use_wiiu_nus_chkbox.sizePolicy().hasHeightForWidth()) sizePolicy.setHeightForWidth(self.use_wiiu_nus_chkbox.sizePolicy().hasHeightForWidth())
self.use_wiiu_nus_chkbox.setSizePolicy(sizePolicy1) self.use_wiiu_nus_chkbox.setSizePolicy(sizePolicy)
self.use_wiiu_nus_chkbox.setLayoutDirection(Qt.LeftToRight) self.use_wiiu_nus_chkbox.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
self.use_wiiu_nus_chkbox.setText(u"") self.use_wiiu_nus_chkbox.setText(u"")
self.use_wiiu_nus_chkbox.setChecked(True) self.use_wiiu_nus_chkbox.setChecked(True)
@ -261,6 +302,8 @@ class Ui_MainWindow(object):
self.use_wiiu_nus_chkbox_lbl = QLabel(self.centralwidget) self.use_wiiu_nus_chkbox_lbl = QLabel(self.centralwidget)
self.use_wiiu_nus_chkbox_lbl.setObjectName(u"use_wiiu_nus_chkbox_lbl") self.use_wiiu_nus_chkbox_lbl.setObjectName(u"use_wiiu_nus_chkbox_lbl")
sizePolicy4.setHeightForWidth(self.use_wiiu_nus_chkbox_lbl.sizePolicy().hasHeightForWidth())
self.use_wiiu_nus_chkbox_lbl.setSizePolicy(sizePolicy4)
self.use_wiiu_nus_chkbox_lbl.setWordWrap(True) self.use_wiiu_nus_chkbox_lbl.setWordWrap(True)
self.use_wiiu_nus_row.addWidget(self.use_wiiu_nus_chkbox_lbl) self.use_wiiu_nus_row.addWidget(self.use_wiiu_nus_chkbox_lbl)
@ -269,12 +312,13 @@ class Ui_MainWindow(object):
self.verticalLayout_7.addLayout(self.use_wiiu_nus_row) self.verticalLayout_7.addLayout(self.use_wiiu_nus_row)
self.patch_ios_row = QHBoxLayout() self.patch_ios_row = QHBoxLayout()
self.patch_ios_row.setSpacing(10)
self.patch_ios_row.setObjectName(u"patch_ios_row") self.patch_ios_row.setObjectName(u"patch_ios_row")
self.patch_ios_chkbox = QCheckBox(self.centralwidget) self.patch_ios_chkbox = QCheckBox(self.centralwidget)
self.patch_ios_chkbox.setObjectName(u"patch_ios_chkbox") self.patch_ios_chkbox.setObjectName(u"patch_ios_chkbox")
self.patch_ios_chkbox.setEnabled(False) self.patch_ios_chkbox.setEnabled(False)
sizePolicy1.setHeightForWidth(self.patch_ios_chkbox.sizePolicy().hasHeightForWidth()) sizePolicy3.setHeightForWidth(self.patch_ios_chkbox.sizePolicy().hasHeightForWidth())
self.patch_ios_chkbox.setSizePolicy(sizePolicy1) self.patch_ios_chkbox.setSizePolicy(sizePolicy3)
self.patch_ios_chkbox.setText(u"") self.patch_ios_chkbox.setText(u"")
self.patch_ios_row.addWidget(self.patch_ios_chkbox) self.patch_ios_row.addWidget(self.patch_ios_chkbox)
@ -282,6 +326,8 @@ class Ui_MainWindow(object):
self.patch_ios_lbl = QLabel(self.centralwidget) self.patch_ios_lbl = QLabel(self.centralwidget)
self.patch_ios_lbl.setObjectName(u"patch_ios_lbl") self.patch_ios_lbl.setObjectName(u"patch_ios_lbl")
self.patch_ios_lbl.setEnabled(True) self.patch_ios_lbl.setEnabled(True)
sizePolicy4.setHeightForWidth(self.patch_ios_lbl.sizePolicy().hasHeightForWidth())
self.patch_ios_lbl.setSizePolicy(sizePolicy4)
self.patch_ios_lbl.setWordWrap(True) self.patch_ios_lbl.setWordWrap(True)
self.patch_ios_row.addWidget(self.patch_ios_lbl) self.patch_ios_row.addWidget(self.patch_ios_lbl)
@ -289,11 +335,11 @@ class Ui_MainWindow(object):
self.verticalLayout_7.addLayout(self.patch_ios_row) self.verticalLayout_7.addLayout(self.patch_ios_row)
self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Ignored)
self.verticalLayout_7.addItem(self.verticalSpacer_2) self.verticalLayout_7.addItem(self.verticalSpacer_2)
self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.Minimum)
self.verticalLayout_7.addItem(self.horizontalSpacer) self.verticalLayout_7.addItem(self.horizontalSpacer)
@ -302,6 +348,7 @@ class Ui_MainWindow(object):
self.verticalLayout_8 = QVBoxLayout() self.verticalLayout_8 = QVBoxLayout()
self.verticalLayout_8.setObjectName(u"verticalLayout_8") self.verticalLayout_8.setObjectName(u"verticalLayout_8")
self.verticalLayout_8.setSizeConstraint(QLayout.SizeConstraint.SetMinimumSize)
self.label_4 = QLabel(self.centralwidget) self.label_4 = QLabel(self.centralwidget)
self.label_4.setObjectName(u"label_4") self.label_4.setObjectName(u"label_4")
self.label_4.setFont(font) self.label_4.setFont(font)
@ -313,8 +360,8 @@ class Ui_MainWindow(object):
self.pack_vwii_mode_chkbox = QCheckBox(self.centralwidget) self.pack_vwii_mode_chkbox = QCheckBox(self.centralwidget)
self.pack_vwii_mode_chkbox.setObjectName(u"pack_vwii_mode_chkbox") self.pack_vwii_mode_chkbox.setObjectName(u"pack_vwii_mode_chkbox")
self.pack_vwii_mode_chkbox.setEnabled(False) self.pack_vwii_mode_chkbox.setEnabled(False)
sizePolicy1.setHeightForWidth(self.pack_vwii_mode_chkbox.sizePolicy().hasHeightForWidth()) sizePolicy3.setHeightForWidth(self.pack_vwii_mode_chkbox.sizePolicy().hasHeightForWidth())
self.pack_vwii_mode_chkbox.setSizePolicy(sizePolicy1) self.pack_vwii_mode_chkbox.setSizePolicy(sizePolicy3)
self.pack_vwii_mode_chkbox.setText(u"") self.pack_vwii_mode_chkbox.setText(u"")
self.pack_vwii_mode_row.addWidget(self.pack_vwii_mode_chkbox) self.pack_vwii_mode_row.addWidget(self.pack_vwii_mode_chkbox)
@ -322,6 +369,11 @@ class Ui_MainWindow(object):
self.pack_vwii_mode_lbl = QLabel(self.centralwidget) self.pack_vwii_mode_lbl = QLabel(self.centralwidget)
self.pack_vwii_mode_lbl.setObjectName(u"pack_vwii_mode_lbl") self.pack_vwii_mode_lbl.setObjectName(u"pack_vwii_mode_lbl")
self.pack_vwii_mode_lbl.setEnabled(True) self.pack_vwii_mode_lbl.setEnabled(True)
sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred)
sizePolicy5.setHorizontalStretch(0)
sizePolicy5.setVerticalStretch(0)
sizePolicy5.setHeightForWidth(self.pack_vwii_mode_lbl.sizePolicy().hasHeightForWidth())
self.pack_vwii_mode_lbl.setSizePolicy(sizePolicy5)
self.pack_vwii_mode_lbl.setWordWrap(True) self.pack_vwii_mode_lbl.setWordWrap(True)
self.pack_vwii_mode_row.addWidget(self.pack_vwii_mode_lbl) self.pack_vwii_mode_row.addWidget(self.pack_vwii_mode_lbl)
@ -329,11 +381,11 @@ class Ui_MainWindow(object):
self.verticalLayout_8.addLayout(self.pack_vwii_mode_row) self.verticalLayout_8.addLayout(self.pack_vwii_mode_row)
self.verticalSpacer = QSpacerItem(20, 50, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) self.verticalSpacer = QSpacerItem(20, 50, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.MinimumExpanding)
self.verticalLayout_8.addItem(self.verticalSpacer) self.verticalLayout_8.addItem(self.verticalSpacer)
self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.Minimum)
self.verticalLayout_8.addItem(self.horizontalSpacer_2) self.verticalLayout_8.addItem(self.horizontalSpacer_2)
@ -380,6 +432,7 @@ class Ui_MainWindow(object):
self.label_5.setText(QCoreApplication.translate("MainWindow", u"Console:", None)) self.label_5.setText(QCoreApplication.translate("MainWindow", u"Console:", None))
self.console_select_dropdown.setCurrentText("") self.console_select_dropdown.setCurrentText("")
self.download_btn.setText(QCoreApplication.translate("MainWindow", u"Start Download", None)) self.download_btn.setText(QCoreApplication.translate("MainWindow", u"Start Download", None))
self.script_btn.setText(QCoreApplication.translate("MainWindow", u"Run Script", None))
self.label_3.setText(QCoreApplication.translate("MainWindow", u"General Settings", None)) self.label_3.setText(QCoreApplication.translate("MainWindow", u"General Settings", None))
self.label_7.setText(QCoreApplication.translate("MainWindow", u"Pack installable archive (WAD/TAD)", None)) self.label_7.setText(QCoreApplication.translate("MainWindow", u"Pack installable archive (WAD/TAD)", None))
self.archive_file_entry.setPlaceholderText(QCoreApplication.translate("MainWindow", u"File Name", None)) self.archive_file_entry.setPlaceholderText(QCoreApplication.translate("MainWindow", u"File Name", None))
@ -392,8 +445,11 @@ class Ui_MainWindow(object):
self.pack_vwii_mode_lbl.setText(QCoreApplication.translate("MainWindow", u"Re-encrypt title using the Wii Common Key", None)) self.pack_vwii_mode_lbl.setText(QCoreApplication.translate("MainWindow", u"Re-encrypt title using the Wii Common Key", None))
self.log_text_browser.setMarkdown("") self.log_text_browser.setMarkdown("")
self.log_text_browser.setHtml(QCoreApplication.translate("MainWindow", u"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" self.log_text_browser.setHtml(QCoreApplication.translate("MainWindow", u"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n" "p, li { white-space: pre-wrap; }\n"
"hr { height: 1px; border-width: 0; }\n"
"li.unchecked::marker { content: \"\\2610\"; }\n"
"li.checked::marker { content: \"\\2612\"; }\n"
"</style></head><body style=\" font-family:'Noto Sans'; font-size:10pt; font-weight:400; font-style:normal;\">\n" "</style></head><body style=\" font-family:'Noto Sans'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
"<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; font-family:'Sans Serif'; font-size:9pt;\"><br /></p></body></html>", None)) "<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; font-family:'Sans Serif'; font-size:9pt;\"><br /></p></body></html>", None))
# retranslateUi # retranslateUi

133
qt/ui/MainMenu.ui Normal file → Executable file
View File

@ -27,13 +27,15 @@
</property> </property>
<widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="centralwidget">
<layout class="QHBoxLayout" name="horizontalLayout_3"> <layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="sizeConstraint">
<enum>QLayout::SizeConstraint::SetDefaultConstraint</enum>
</property>
<item> <item>
<layout class="QVBoxLayout" name="vertical_layout_trees"> <layout class="QVBoxLayout" name="vertical_layout_trees">
<item> <item>
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_2">
<property name="font"> <property name="font">
<font> <font>
<weight>75</weight>
<bold>true</bold> <bold>true</bold>
</font> </font>
</property> </property>
@ -159,7 +161,7 @@
<item> <item>
<layout class="QVBoxLayout" name="vertical_layout_controls"> <layout class="QVBoxLayout" name="vertical_layout_controls">
<property name="sizeConstraint"> <property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum> <enum>QLayout::SizeConstraint::SetDefaultConstraint</enum>
</property> </property>
<item> <item>
<layout class="QHBoxLayout" name="horizontal_layout_title_entry"> <layout class="QHBoxLayout" name="horizontal_layout_title_entry">
@ -221,22 +223,53 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
<widget class="QPushButton" name="download_btn"> <widget class="QPushButton" name="download_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Start Download</string> <string>Start Download</string>
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QPushButton" name="script_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Run Script</string>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_5"> <layout class="QHBoxLayout" name="horizontalLayout_5">
<property name="sizeConstraint">
<enum>QLayout::SizeConstraint::SetMinimumSize</enum>
</property>
<item> <item>
<layout class="QVBoxLayout" name="verticalLayout_7"> <layout class="QVBoxLayout" name="verticalLayout_7">
<property name="spacing">
<number>5</number>
</property>
<property name="sizeConstraint">
<enum>QLayout::SizeConstraint::SetMinimumSize</enum>
</property>
<item> <item>
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="label_3">
<property name="font"> <property name="font">
<font> <font>
<weight>75</weight>
<bold>true</bold> <bold>true</bold>
</font> </font>
</property> </property>
@ -247,6 +280,9 @@
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="pack_archive_row"> <layout class="QHBoxLayout" name="pack_archive_row">
<property name="spacing">
<number>10</number>
</property>
<item> <item>
<widget class="QCheckBox" name="pack_archive_chkbox"> <widget class="QCheckBox" name="pack_archive_chkbox">
<property name="sizePolicy"> <property name="sizePolicy">
@ -262,6 +298,12 @@
</item> </item>
<item> <item>
<widget class="QLabel" name="label_7"> <widget class="QLabel" name="label_7">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Pack installable archive (WAD/TAD)</string> <string>Pack installable archive (WAD/TAD)</string>
</property> </property>
@ -284,6 +326,9 @@
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="keep_enc_row"> <layout class="QHBoxLayout" name="keep_enc_row">
<property name="spacing">
<number>10</number>
</property>
<item> <item>
<widget class="QCheckBox" name="keep_enc_chkbox"> <widget class="QCheckBox" name="keep_enc_chkbox">
<property name="sizePolicy"> <property name="sizePolicy">
@ -302,6 +347,12 @@
</item> </item>
<item> <item>
<widget class="QLabel" name="label_6"> <widget class="QLabel" name="label_6">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Keep encrypted contents</string> <string>Keep encrypted contents</string>
</property> </property>
@ -314,6 +365,9 @@
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="create_dec_row"> <layout class="QHBoxLayout" name="create_dec_row">
<property name="spacing">
<number>10</number>
</property>
<item> <item>
<widget class="QCheckBox" name="create_dec_chkbox"> <widget class="QCheckBox" name="create_dec_chkbox">
<property name="sizePolicy"> <property name="sizePolicy">
@ -329,6 +383,12 @@
</item> </item>
<item> <item>
<widget class="QLabel" name="create_dec_chkbox_lbl"> <widget class="QLabel" name="create_dec_chkbox_lbl">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Create decrypted contents (*.app)</string> <string>Create decrypted contents (*.app)</string>
</property> </property>
@ -341,6 +401,9 @@
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="use_local_row"> <layout class="QHBoxLayout" name="use_local_row">
<property name="spacing">
<number>10</number>
</property>
<item> <item>
<widget class="QCheckBox" name="use_local_chkbox"> <widget class="QCheckBox" name="use_local_chkbox">
<property name="enabled"> <property name="enabled">
@ -359,6 +422,12 @@
</item> </item>
<item> <item>
<widget class="QLabel" name="use_local_chkbox_lbl"> <widget class="QLabel" name="use_local_chkbox_lbl">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Use local files, if they exist</string> <string>Use local files, if they exist</string>
</property> </property>
@ -371,16 +440,22 @@
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="use_wiiu_nus_row"> <layout class="QHBoxLayout" name="use_wiiu_nus_row">
<property name="spacing">
<number>10</number>
</property>
<property name="sizeConstraint">
<enum>QLayout::SizeConstraint::SetDefaultConstraint</enum>
</property>
<item> <item>
<widget class="QCheckBox" name="use_wiiu_nus_chkbox"> <widget class="QCheckBox" name="use_wiiu_nus_chkbox">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed"> <sizepolicy hsizetype="Maximum" vsizetype="Expanding">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="layoutDirection"> <property name="layoutDirection">
<enum>Qt::LeftToRight</enum> <enum>Qt::LayoutDirection::LeftToRight</enum>
</property> </property>
<property name="text"> <property name="text">
<string notr="true"/> <string notr="true"/>
@ -392,6 +467,12 @@
</item> </item>
<item> <item>
<widget class="QLabel" name="use_wiiu_nus_chkbox_lbl"> <widget class="QLabel" name="use_wiiu_nus_chkbox_lbl">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Use the Wii U NUS (faster, only effects Wii/vWii)</string> <string>Use the Wii U NUS (faster, only effects Wii/vWii)</string>
</property> </property>
@ -404,6 +485,9 @@
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="patch_ios_row"> <layout class="QHBoxLayout" name="patch_ios_row">
<property name="spacing">
<number>10</number>
</property>
<item> <item>
<widget class="QCheckBox" name="patch_ios_chkbox"> <widget class="QCheckBox" name="patch_ios_chkbox">
<property name="enabled"> <property name="enabled">
@ -425,6 +509,12 @@
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Apply patches to IOS (Applies to WADs only)</string> <string>Apply patches to IOS (Applies to WADs only)</string>
</property> </property>
@ -438,10 +528,10 @@
<item> <item>
<spacer name="verticalSpacer_2"> <spacer name="verticalSpacer_2">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Orientation::Vertical</enum>
</property> </property>
<property name="sizeType"> <property name="sizeType">
<enum>QSizePolicy::Expanding</enum> <enum>QSizePolicy::Policy::Ignored</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
@ -454,7 +544,10 @@
<item> <item>
<spacer name="horizontalSpacer"> <spacer name="horizontalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::MinimumExpanding</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
@ -468,11 +561,13 @@
</item> </item>
<item> <item>
<layout class="QVBoxLayout" name="verticalLayout_8"> <layout class="QVBoxLayout" name="verticalLayout_8">
<property name="sizeConstraint">
<enum>QLayout::SizeConstraint::SetMinimumSize</enum>
</property>
<item> <item>
<widget class="QLabel" name="label_4"> <widget class="QLabel" name="label_4">
<property name="font"> <property name="font">
<font> <font>
<weight>75</weight>
<bold>true</bold> <bold>true</bold>
</font> </font>
</property> </property>
@ -504,6 +599,12 @@
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Re-encrypt title using the Wii Common Key</string> <string>Re-encrypt title using the Wii Common Key</string>
</property> </property>
@ -517,10 +618,10 @@
<item> <item>
<spacer name="verticalSpacer"> <spacer name="verticalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Orientation::Vertical</enum>
</property> </property>
<property name="sizeType"> <property name="sizeType">
<enum>QSizePolicy::Expanding</enum> <enum>QSizePolicy::Policy::MinimumExpanding</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
@ -533,7 +634,10 @@
<item> <item>
<spacer name="horizontalSpacer_2"> <spacer name="horizontalSpacer_2">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::MinimumExpanding</enum>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
@ -560,8 +664,11 @@
</property> </property>
<property name="html"> <property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt; <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt; &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; }
hr { height: 1px; border-width: 0; }
li.unchecked::marker { content: &quot;\2610&quot;; }
li.checked::marker { content: &quot;\2612&quot;; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Noto Sans'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt; &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Noto Sans'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> &lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>