1
0
Fork 0
mirror of synced 2024-06-17 01:54:46 +12:00

Move EGL Sync page into the main LegendarySettings page and make it useful. (WIP)

Move GameInfo to its own file.
Use get_pixmap in GameDlcWidget to get the pixmap.
Remove unused function from RareSettings.
Convert About to FormLayout.
This commit is contained in:
Stelios Tsampas 2021-09-12 14:23:40 +03:00
parent 7a9daad2b1
commit 228c3ab03e
10 changed files with 924 additions and 907 deletions

View file

@ -114,6 +114,7 @@ class InstallDialog(QDialog, Ui_InstallDialog):
self.dl_item.options.sdl_list = ['']
for cb in self.sdl_list_checks:
if data := cb.isChecked():
# noinspection PyTypeChecker
self.dl_item.options.sdl_list.extend(data)
def get_download_info(self):

View file

@ -1,22 +1,12 @@
import json
import os
import platform
from PyQt5.QtCore import Qt, pyqtSignal
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QKeyEvent
from PyQt5.QtWidgets import QWidget, QTabWidget, QMessageBox
from PyQt5.QtWidgets import QWidget, QTabWidget
from qtawesome import icon
from legendary.core import LegendaryCore
from legendary.models.game import Game, InstalledGame
from rare import data_dir
from rare.components.tabs.games.game_info.game_dlc import GameDlc
from rare.components.tabs.games.game_info.game_info import GameInfo
from rare.components.tabs.games.game_info.game_settings import GameSettings
from rare.ui.components.tabs.games.game_info.game_info import Ui_GameInfo
from rare.utils.extra_widgets import SideTabBar
from rare.utils.legendary_utils import VerifyThread
from rare.utils.steam_grades import SteamWorker
from rare.utils.utils import get_size, get_pixmap
class InfoTabs(QTabWidget):
@ -58,113 +48,3 @@ class InfoTabs(QTabWidget):
def keyPressEvent(self, e: QKeyEvent):
if e.key() == Qt.Key_Escape:
self.parent().layout.setCurrentIndex(0)
class GameInfo(QWidget, Ui_GameInfo):
igame: InstalledGame
game: Game
uninstall_game = pyqtSignal(str)
update_list = pyqtSignal(str)
verify_game = pyqtSignal(str)
verify_threads = {}
def __init__(self, core: LegendaryCore, parent):
super(GameInfo, self).__init__(parent=parent)
self.setupUi(self)
self.core = core
self.ratings = {"platinum": self.tr("Platinum"),
"gold": self.tr("Gold"),
"silver": self.tr("Silver"),
"bronze": self.tr("Bronze"),
"fail": self.tr("Could not get grade"),
"pending": self.tr("Not enough reports")}
if os.path.exists(p := os.path.join(data_dir, "game_list.json")):
self.grade_table = json.load(open(p))
else:
self.grade_table = {}
if platform.system() == "Windows":
self.lbl_grade.setVisible(False)
self.grade.setVisible(False)
if platform.system() != "Windows":
self.steam_worker = SteamWorker(self.core)
self.steam_worker.rating_signal.connect(self.grade.setText)
self.game_actions_stack.setCurrentIndex(0)
self.game_actions_stack.resize(self.game_actions_stack.minimumSize())
self.uninstall_button.clicked.connect(self.uninstall)
self.verify_button.clicked.connect(self.verify)
self.repair_button.clicked.connect(self.repair)
def uninstall(self):
self.uninstall_game.emit(self.game.app_name)
self.update_list.emit(self.game.app_name)
def repair(self):
repair_file = os.path.join(self.core.lgd.get_tmp_path(), f'{self.game.app_name}.repair')
if not os.path.exists(repair_file):
QMessageBox.warning(self, "Warning", self.tr(
"Repair file does not exist or game does not need a repair. Please verify game first"))
return
self.verify_game.emit(self.game.app_name)
def verify(self):
self.verify_widget.setCurrentIndex(1)
verify_thread = VerifyThread(self.core, self.game.app_name)
verify_thread.status.connect(self.verify_satistics)
verify_thread.summary.connect(self.finish_verify)
verify_thread.start()
self.verify_progress.setValue(0)
self.verify_threads[self.game.app_name] = verify_thread
def verify_satistics(self, progress):
# checked, max, app_name
if progress[2] == self.game.app_name:
self.verify_progress.setValue(progress[0] * 100 / progress[1])
def finish_verify(self, failed):
failed, missing, app_name = failed
if failed == 0 and missing == 0:
QMessageBox.information(self, "Summary",
"Game was verified successfully. No missing or corrupt files found")
else:
ans = QMessageBox.question(self, "Summary", self.tr(
'Verification failed, {} file(s) corrupted, {} file(s) are missing. Do you want to repair them?').format(
failed, missing), QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
if ans == QMessageBox.Yes:
self.verify_game.emit(self.game.app_name)
self.verify_widget.setCurrentIndex(0)
self.verify_threads.pop(app_name)
def update_game(self, app_name):
self.game = self.core.get_game(app_name)
self.igame = self.core.get_installed_game(app_name)
self.game_title.setText(f"<h2>{self.game.app_title}</h2>")
pixmap = get_pixmap(app_name)
w = 200
pixmap = pixmap.scaled(w, int(w * 4 / 3))
self.image.setPixmap(pixmap)
self.app_name.setText(self.game.app_name)
self.version.setText(self.game.app_version)
self.dev.setText(self.game.metadata["developer"])
self.install_size.setText(get_size(self.igame.install_size))
self.install_path.setText(self.igame.install_path)
if platform.system() != "Windows":
self.grade.setText(self.tr("Loading"))
self.steam_worker.set_app_name(app_name)
self.steam_worker.start()
if len(self.verify_threads.keys()) == 0 or not self.verify_threads.get(app_name):
self.verify_widget.setCurrentIndex(0)
elif self.verify_threads.get(app_name):
self.verify_widget.setCurrentIndex(1)
self.verify_progress.setValue(
self.verify_threads[app_name].num / self.verify_threads[app_name].total * 100
)

View file

@ -1,15 +1,11 @@
import os
from PyQt5.QtCore import pyqtSignal, QSettings, QSize
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QFrame, QWidget, QMessageBox
from legendary.core import LegendaryCore
from legendary.models.game import Game
from rare import data_dir
from rare.utils.utils import download_image
from rare.ui.components.tabs.games.game_info.game_dlc import Ui_GameDlc
from rare.ui.components.tabs.games.game_info.game_dlc_widget import Ui_GameDlcWidget
from rare.utils.utils import get_pixmap
class GameDlc(QWidget, Ui_GameDlc):
@ -72,32 +68,9 @@ class GameDlcWidget(QFrame, Ui_GameDlcWidget):
super(GameDlcWidget, self).__init__(parent=parent)
self.setupUi(self)
self.dlc = dlc
image_dir = QSettings().value("img_dir", os.path.join(data_dir, "images"))
if installed:
if os.path.exists(os.path.join(image_dir, dlc.app_name, "FinalArt.png")):
pixmap = QPixmap(os.path.join(image_dir, dlc.app_name, "FinalArt.png"))
elif os.path.exists(os.path.join(image_dir, dlc.app_name, "DieselGameBoxTall.png")):
pixmap = QPixmap(os.path.join(image_dir, dlc.app_name, "DieselGameBoxTall.png"))
elif os.path.exists(os.path.join(image_dir, dlc.app_name, "DieselGameBoxLogo.png")):
pixmap = QPixmap(os.path.join(image_dir, dlc.app_name, "DieselGameBoxLogo.png"))
else:
print(f"No Image found: {dlc.app_title}")
pixmap = None
if not pixmap or pixmap.isNull():
print(dlc.app_title + " has corrupt Image")
download_image(dlc, force=True)
pixmap = QPixmap(f"{image_dir}/{dlc.app_name}/UninstalledArt.png")
else:
if os.path.exists(f"{image_dir}/{dlc.app_name}/UninstalledArt.png"):
pixmap = QPixmap(f"{image_dir}/{dlc.app_name}/DieselGameBoxTall.png")
else:
pixmap = None
if not pixmap or pixmap.isNull():
print(dlc.app_title + " has corrupt Image")
download_image(dlc, force=True)
pixmap = QPixmap(f"{image_dir}/{dlc.app_name}/UninstalledArt.png")
self.image.setPixmap(pixmap.scaledToHeight(pixmap.height()*0.5))
pixmap = get_pixmap(dlc.app_name)
self.image.setPixmap(pixmap.scaledToHeight(pixmap.height() * 0.5))
self.dlc_name.setText(dlc.app_title)
self.version.setText(dlc.app_version)

View file

@ -0,0 +1,122 @@
import json
import os
import platform
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QWidget, QMessageBox
from legendary.core import LegendaryCore
from legendary.models.game import Game, InstalledGame
from rare.ui.components.tabs.games.game_info.game_info import Ui_GameInfo
from rare import data_dir
from rare.utils.legendary_utils import VerifyThread
from rare.utils.steam_grades import SteamWorker
from rare.utils.utils import get_size, get_pixmap
class GameInfo(QWidget, Ui_GameInfo):
igame: InstalledGame
game: Game
uninstall_game = pyqtSignal(str)
update_list = pyqtSignal(str)
verify_game = pyqtSignal(str)
verify_threads = {}
def __init__(self, core: LegendaryCore, parent):
super(GameInfo, self).__init__(parent=parent)
self.setupUi(self)
self.core = core
self.ratings = {"platinum": self.tr("Platinum"),
"gold": self.tr("Gold"),
"silver": self.tr("Silver"),
"bronze": self.tr("Bronze"),
"fail": self.tr("Could not get grade"),
"pending": self.tr("Not enough reports")}
if os.path.exists(p := os.path.join(data_dir, "game_list.json")):
self.grade_table = json.load(open(p))
else:
self.grade_table = {}
if platform.system() == "Windows":
self.lbl_grade.setVisible(False)
self.grade.setVisible(False)
else:
self.steam_worker = SteamWorker(self.core)
self.steam_worker.rating_signal.connect(self.grade.setText)
self.game_actions_stack.setCurrentIndex(0)
self.game_actions_stack.resize(self.game_actions_stack.minimumSize())
self.uninstall_button.clicked.connect(self.uninstall)
self.verify_button.clicked.connect(self.verify)
self.repair_button.clicked.connect(self.repair)
def uninstall(self):
self.uninstall_game.emit(self.game.app_name)
self.update_list.emit(self.game.app_name)
def repair(self):
repair_file = os.path.join(self.core.lgd.get_tmp_path(), f'{self.game.app_name}.repair')
if not os.path.exists(repair_file):
QMessageBox.warning(self, "Warning", self.tr(
"Repair file does not exist or game does not need a repair. Please verify game first"))
return
self.verify_game.emit(self.game.app_name)
def verify(self):
self.verify_widget.setCurrentIndex(1)
verify_thread = VerifyThread(self.core, self.game.app_name)
verify_thread.status.connect(self.verify_satistics)
verify_thread.summary.connect(self.finish_verify)
verify_thread.start()
self.verify_progress.setValue(0)
self.verify_threads[self.game.app_name] = verify_thread
def verify_satistics(self, progress):
# checked, max, app_name
if progress[2] == self.game.app_name:
self.verify_progress.setValue(progress[0] * 100 / progress[1])
def finish_verify(self, failed):
failed, missing, app_name = failed
if failed == 0 and missing == 0:
QMessageBox.information(self, "Summary",
"Game was verified successfully. No missing or corrupt files found")
else:
ans = QMessageBox.question(self, "Summary", self.tr(
'Verification failed, {} file(s) corrupted, {} file(s) are missing. Do you want to repair them?').format(
failed, missing), QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
if ans == QMessageBox.Yes:
self.verify_game.emit(self.game.app_name)
self.verify_widget.setCurrentIndex(0)
self.verify_threads.pop(app_name)
def update_game(self, app_name):
self.game = self.core.get_game(app_name)
self.igame = self.core.get_installed_game(app_name)
self.game_title.setText(f'<h2>{self.game.app_title}</h2>')
pixmap = get_pixmap(app_name)
w = 200
pixmap = pixmap.scaled(w, int(w * 4 / 3))
self.image.setPixmap(pixmap)
self.app_name.setText(self.game.app_name)
self.version.setText(self.game.app_version)
self.dev.setText(self.game.metadata["developer"])
self.install_size.setText(get_size(self.igame.install_size))
self.install_path.setText(self.igame.install_path)
if platform.system() != "Windows":
self.grade.setText(self.tr("Loading"))
self.steam_worker.set_app_name(app_name)
self.steam_worker.start()
if len(self.verify_threads.keys()) == 0 or not self.verify_threads.get(app_name):
self.verify_widget.setCurrentIndex(0)
elif self.verify_threads.get(app_name):
self.verify_widget.setCurrentIndex(1)
self.verify_progress.setValue(
self.verify_threads[app_name].num / self.verify_threads[app_name].total * 100
)

View file

@ -2,20 +2,20 @@ import os.path
import platform
from logging import getLogger
from PyQt5.QtWidgets import QFileDialog, QMessageBox, QStackedWidget, QVBoxLayout, QDialog, QCheckBox, QLabel, \
from PyQt5.QtWidgets import QFileDialog, QMessageBox, QVBoxLayout, QDialog, QCheckBox, QLabel, \
QHBoxLayout, QPushButton, QGroupBox, QWidget
from legendary.core import LegendaryCore
from rare.ui.components.tabs.settings.legendary import Ui_legendary_settings
from rare.ui.components.tabs.settings.legendary import Ui_LegendarySettings
from rare.utils.extra_widgets import PathEdit
from rare.utils.utils import get_size
logger = getLogger("LegendarySettings")
class LegendarySettings(QStackedWidget, Ui_legendary_settings):
def __init__(self, core: LegendaryCore):
super(LegendarySettings, self).__init__()
class LegendarySettings(QWidget, Ui_LegendarySettings):
def __init__(self, core: LegendaryCore, parent=None):
super(LegendarySettings, self).__init__(parent=parent)
self.setupUi(self)
self.core = core
@ -24,22 +24,22 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings):
self.install_dir = PathEdit(core.get_default_install_dir(),
file_type=QFileDialog.DirectoryOnly,
save_func=self.save_path)
self.layout_install_dir.addWidget(self.install_dir)
self.install_dir_layout.addWidget(self.install_dir)
# Max Workers
max_workers = self.core.lgd.config["Legendary"].getint("max_workers", fallback=0)
max_workers = self.core.lgd.config['Legendary'].getint('max_workers', fallback=0)
self.max_worker_spin.setValue(max_workers)
self.max_worker_spin.valueChanged.connect(self.max_worker_save)
# Max memory
max_memory = self.core.lgd.config["Legendary"].getint("max_memory", fallback=0)
max_memory = self.core.lgd.config['Legendary'].getint('max_memory', fallback=0)
self.max_memory_spin.setValue(max_memory)
self.max_memory_spin.valueChanged.connect(self.max_memory_save)
# Preferred CDN
preferred_cdn = self.core.lgd.config["Legendary"].get("preferred_cdn", fallback="")
preferred_cdn = self.core.lgd.config['Legendary'].get('preferred_cdn', fallback="")
self.preferred_cdn_line.setText(preferred_cdn)
self.preferred_cdn_line.textChanged.connect(self.preferred_cdn_save)
# Disable HTTPS
disable_https = self.core.lgd.config["Legendary"].getboolean("disable_https", fallback=False)
disable_https = self.core.lgd.config['Legendary'].getboolean('disable_https', fallback=False)
self.disable_https_check.setChecked(disable_https)
self.disable_https_check.stateChanged.connect(self.disable_https_save)
@ -50,11 +50,8 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings):
self.clean_keep_manifests_button.clicked.connect(
lambda: self.cleanup(True)
)
self.setCurrentIndex(0)
self.back_button.clicked.connect(lambda: self.setCurrentIndex(0))
self.path_info.setText(self.tr("EGL path is at C:\\ProgramData\\Epic\\EpicGamesLauncher\\Data\\Manifests"))
self.manifest_path_info.setText(self.tr("EGL path is at C:\\ProgramData\\Epic\\EpicGamesLauncher\\Data\\Manifests"))
path = os.path.expanduser("~/")
if self.core.egl.programdata_path:
path = self.core.egl.programdata_path
@ -65,14 +62,14 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings):
if os.path.exists(p := os.path.join(i, "drive_c/ProgramData/Epic/EpicGamesLauncher/Data/Manifests")):
path = p
self.path_edit = PathEdit(path, QFileDialog.DirectoryOnly, save_func=self.save_egl_path)
self.pathedit_placeholder.addWidget(self.path_edit)
self.manifest_path_edit = PathEdit(path, QFileDialog.DirectoryOnly, save_func=self.save_egl_path)
self.manifest_path_layout.addWidget(self.manifest_path_edit)
if platform.system() != "Windows":
self.core.lgd.config.set("Legendary", "egl_programdata")
self.core.lgd.config.set('Legendary', 'egl_programdata', path)
self.core.egl.programdata_path = path
self.importable_widgets = []
self.exportable_widgets = []
self.importable_widgets = list()
self.exportable_widgets = list()
if self.core.egl_sync_enabled:
self.egl_sync_button.setText(self.tr("Disable sync"))
@ -86,7 +83,7 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings):
def enable_sync(self):
if not self.core.egl.programdata_path:
if os.path.exists(path := self.path_edit.text()):
if os.path.exists(path := self.manifest_path_edit.text()):
self.core.lgd.config.set("Legendary", "egl_programdata", path)
self.core.lgd.save_config()
self.core.egl.programdata_path = path
@ -98,16 +95,18 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings):
self.enable_sync_button.setDisabled(True)
def export_all(self):
for w in self.exportable_widgets:
w.export_game()
for ew in self.exportable_widgets:
ew.export_game()
self.exportable_widgets.clear()
def import_all(self):
for w in self.importable_widgets:
w.import_game()
for iw in self.importable_widgets:
iw.import_game()
self.importable_widgets.clear()
def save_egl_path(self):
self.core.lgd.config.set("Legendary", "egl_programdata", self.path_edit.text())
self.core.egl.programdata_path = self.path_edit.text()
self.core.lgd.config.set("Legendary", "egl_programdata", self.manifest_path_edit.text())
self.core.egl.programdata_path = self.manifest_path_edit.text()
self.core.lgd.save_config()
self.update_egl_widget()
@ -131,42 +130,49 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings):
# enable sync
self.enable_sync_button.setDisabled(False)
self.update_egl_widget()
self.setCurrentIndex(1)
def update_egl_widget(self):
self.exportable_widgets = []
QWidget().setLayout(self.exportable_games.layout())
QWidget().setLayout(self.importable_games.layout())
importable_layout = QVBoxLayout()
self.importable_games.setLayout(importable_layout)
exportable_layout = QVBoxLayout()
self.exportable_games.setLayout(exportable_layout)
self.import_scroll.setVisible(bool(self.core.egl.programdata_path))
self.export_scroll.setVisible(bool(self.core.egl.programdata_path))
self.export_all_button.setDisabled(not bool(self.core.egl.programdata_path))
self.import_all_button.setDisabled(not bool(self.core.egl.programdata_path))
if not self.core.egl.programdata_path:
self.importable_games.setVisible(False)
self.exportable_games.setVisible(False)
self.export_all_button.setVisible(False)
self.import_all_button.setVisible(False)
return
self.importable_games.setVisible(True)
self.exportable_games.setVisible(True)
self.export_all_button.setVisible(True)
self.import_all_button.setVisible(True)
if self.exportable_widgets:
for ew in self.exportable_widgets:
# FIXME: Handle this using signals to properly update the list on python's side
try:
ew.deleteLater()
except RuntimeError as e:
print(e)
self.exportable_widgets.clear()
exportable_games = self.core.egl_get_exportable()
for igame in exportable_games:
ew = EGLSyncWidget(igame, True, self.core)
self.exportable_widgets.append(ew)
self.exportable_layout.addWidget(ew)
self.export_group.setEnabled(bool(exportable_games))
self.export_all_button.setEnabled(bool(exportable_games))
self.export_label.setVisible(not bool(exportable_games))
for igame in self.core.egl_get_exportable():
w = EGLSyncWidget(igame, True, self.core)
self.importable_widgets.append(w)
self.exportable_games.layout().addWidget(w)
if len(self.core.egl_get_exportable()) == 0:
self.exportable_games.layout().addWidget(QLabel(self.tr("No games to export")))
self.importable_widgets = []
for game in self.core.egl_get_importable():
w = EGLSyncWidget(game, False, self.core)
self.importable_widgets.append(w)
self.importable_games.layout().addWidget(w)
if len(self.core.egl_get_importable()) == 0:
self.importable_games.layout().addWidget(QLabel(self.tr("No games to import")))
if self.importable_widgets:
for iw in self.importable_widgets:
# FIXME: Handle this using signals to properly update the list on python's side
try:
iw.deleteLater()
except RuntimeError as e:
print(e)
self.importable_widgets.clear()
importable_games = self.core.egl_get_importable()
for game in importable_games:
iw = EGLSyncWidget(game, False, self.core)
self.importable_widgets.append(iw)
self.importable_layout.addWidget(iw)
self.import_group.setEnabled(bool(importable_games))
self.import_all_button.setEnabled(bool(importable_games))
self.import_label.setVisible(not bool(importable_games))
def save_path(self):
self.core.lgd.config["Legendary"]["install_dir"] = self.install_dir.text()
@ -192,7 +198,7 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings):
def preferred_cdn_save(self, cdn: str):
if cdn:
self.core.lgd.config.set("Legendary", "preferred_cdn", cdn.strip(" "))
self.core.lgd.config.set("Legendary", "preferred_cdn", cdn.strip())
else:
self.core.lgd.config.remove_option("Legendary", "preferred_cdn")
self.core.lgd.save_config()
@ -228,8 +234,8 @@ class LegendarySettings(QStackedWidget, Ui_legendary_settings):
class DisableSyncDialog(QDialog):
info = 1, False
def __init__(self):
super(DisableSyncDialog, self).__init__()
def __init__(self, parent=None):
super(DisableSyncDialog, self).__init__(parent=parent)
self.layout = QVBoxLayout()
self.question = QLabel(self.tr("Do you really want to disable sync with Epic Games Store"))
@ -268,8 +274,8 @@ class DisableSyncDialog(QDialog):
class EGLSyncWidget(QGroupBox):
def __init__(self, game, export: bool, core: LegendaryCore):
super(EGLSyncWidget, self).__init__()
def __init__(self, game, export: bool, core: LegendaryCore, parent=None):
super(EGLSyncWidget, self).__init__(parent=parent)
self.layout = QVBoxLayout()
self.export = export
self.core = core
@ -292,6 +298,12 @@ class EGLSyncWidget(QGroupBox):
def export_game(self):
self.core.egl_export(self.game.app_name)
# FIXME: on update_egl_widget this is going to crash because
# FIXME: the item is not removed from the list in the python's side
self.deleteLater()
def import_game(self):
self.core.egl_import(self.game.app_name)
# FIXME: on update_egl_widget this is going to crash because
# FIXME: the item is not removed from the list in the python's side
self.deleteLater()

View file

@ -1,6 +1,5 @@
import os
import platform
import shutil
import subprocess
import sys
from logging import getLogger
@ -8,7 +7,7 @@ from logging import getLogger
from PyQt5.QtCore import QSettings, Qt
from PyQt5.QtWidgets import QWidget
from rare import cache_dir, data_dir
from rare import cache_dir
from rare.components.tabs.settings.rpc_settings import RPCSettings
from rare.ui.components.tabs.settings.rare import Ui_RareSettings
from rare.utils import utils
@ -40,7 +39,6 @@ class RareSettings(QWidget, Ui_RareSettings):
]
self.settings = QSettings()
self.img_dir_path = self.settings.value("img_dir", os.path.join(data_dir, "images"), type=str)
language = self.settings.value("language", get_lang(), type=str)
self.logdir = os.path.join(cache_dir, "logs")
@ -192,26 +190,6 @@ class RareSettings(QWidget, Ui_RareSettings):
self.settings.setValue("language", languages[i][0])
self.interface_info.setVisible(True)
def update_path(self):
old_path = self.img_dir_path
new_path = self.img_dir.text()
if old_path != new_path:
if not os.path.exists(new_path):
os.makedirs(new_path)
elif len(os.listdir(new_path)) > 0:
logger.warning("New directory is not empty")
return
logger.info("Move Images")
for i in os.listdir(old_path):
try:
shutil.move(os.path.join(old_path, i), os.path.join(new_path, i))
except:
pass
os.rmdir(old_path)
self.img_dir_path = new_path
self.settings.setValue("img_dir", new_path)
def init_checkboxes(self, checkboxes):
for cb in checkboxes:
widget, option, default = cb

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'about.ui'
# Form implementation generated from reading ui file 'rare/ui/components/tabs/settings/about.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
@ -14,80 +14,82 @@ from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_About(object):
def setupUi(self, About):
About.setObjectName("About")
About.resize(499, 396)
self.gridLayout = QtWidgets.QGridLayout(About)
self.gridLayout.setObjectName("gridLayout")
self.open_browser = QtWidgets.QPushButton(About)
self.open_browser.setObjectName("open_browser")
self.gridLayout.addWidget(self.open_browser, 4, 1, 1, 1)
About.resize(722, 345)
self.about_layout = QtWidgets.QFormLayout(About)
self.about_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.about_layout.setObjectName("about_layout")
self.title = QtWidgets.QLabel(About)
self.title.setObjectName("title")
self.about_layout.setWidget(0, QtWidgets.QFormLayout.SpanningRole, self.title)
self.version_label = QtWidgets.QLabel(About)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.version_label.setFont(font)
self.version_label.setObjectName("version_label")
self.gridLayout.addWidget(self.version_label, 2, 0, 1, 1, QtCore.Qt.AlignRight)
self.license_label = QtWidgets.QLabel(About)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.license_label.setFont(font)
self.license_label.setObjectName("license_label")
self.gridLayout.addWidget(self.license_label, 7, 0, 1, 1, QtCore.Qt.AlignRight)
self.lgd_dev_label = QtWidgets.QLabel(About)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.lgd_dev_label.setFont(font)
self.lgd_dev_label.setObjectName("lgd_dev_label")
self.gridLayout.addWidget(self.lgd_dev_label, 6, 0, 1, 1, QtCore.Qt.AlignRight)
self.dev = QtWidgets.QLabel(About)
self.dev.setText("<a href=\'https://github.com/Dummerle\'>Dummerle</a>")
self.dev.setOpenExternalLinks(True)
self.dev.setObjectName("dev")
self.gridLayout.addWidget(self.dev, 5, 1, 1, 1)
self.about_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.version_label)
self.version = QtWidgets.QLabel(About)
self.version.setText("error")
self.version.setObjectName("version")
self.about_layout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.version)
self.update_label = QtWidgets.QLabel(About)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.update_label.setFont(font)
self.update_label.setObjectName("update_label")
self.gridLayout.addWidget(self.update_label, 3, 0, 1, 1, QtCore.Qt.AlignRight)
self.version = QtWidgets.QLabel(About)
self.version.setText("error")
self.version.setObjectName("version")
self.gridLayout.addWidget(self.version, 2, 1, 1, 1)
self.about_layout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.update_label)
self.update = QtWidgets.QLabel(About)
self.update.setText("error")
self.update.setObjectName("update")
self.about_layout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.update)
self.open_browser = QtWidgets.QPushButton(About)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.open_browser.sizePolicy().hasHeightForWidth())
self.open_browser.setSizePolicy(sizePolicy)
self.open_browser.setObjectName("open_browser")
self.about_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.open_browser)
self.dev_label = QtWidgets.QLabel(About)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.dev_label.setFont(font)
self.dev_label.setObjectName("dev_label")
self.gridLayout.addWidget(self.dev_label, 5, 0, 1, 1, QtCore.Qt.AlignRight)
self.license = QtWidgets.QLabel(About)
self.license.setObjectName("license")
self.gridLayout.addWidget(self.license, 7, 1, 1, 1)
self.update = QtWidgets.QLabel(About)
self.update.setText("error")
self.update.setObjectName("update")
self.gridLayout.addWidget(self.update, 3, 1, 1, 1)
self.about_layout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.dev_label)
self.dev = QtWidgets.QLabel(About)
self.dev.setText("<a href=\'https://github.com/Dummerle\'>Dummerle</a>")
self.dev.setOpenExternalLinks(True)
self.dev.setObjectName("dev")
self.about_layout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.dev)
self.lgd_dev_label = QtWidgets.QLabel(About)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.lgd_dev_label.setFont(font)
self.lgd_dev_label.setObjectName("lgd_dev_label")
self.about_layout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.lgd_dev_label)
self.lgd_dev = QtWidgets.QLabel(About)
self.lgd_dev.setText("<a href=\'https://github.com/derrod/\'>derrod</a>")
self.lgd_dev.setOpenExternalLinks(True)
self.lgd_dev.setObjectName("lgd_dev")
self.gridLayout.addWidget(self.lgd_dev, 6, 1, 1, 1)
self.about_layout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.lgd_dev)
self.license_label = QtWidgets.QLabel(About)
font = QtGui.QFont()
font.setBold(True)
font.setWeight(75)
self.license_label.setFont(font)
self.license_label.setObjectName("license_label")
self.about_layout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.license_label)
self.license = QtWidgets.QLabel(About)
self.license.setObjectName("license")
self.about_layout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.license)
self.info_text = QtWidgets.QLabel(About)
self.info_text.setWordWrap(True)
self.info_text.setOpenExternalLinks(True)
self.info_text.setObjectName("info_text")
self.gridLayout.addWidget(self.info_text, 14, 0, 1, 3)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem, 15, 0, 1, 3)
self.title = QtWidgets.QLabel(About)
self.title.setObjectName("title")
self.gridLayout.addWidget(self.title, 1, 0, 1, 3)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.gridLayout.addItem(spacerItem1, 2, 2, 6, 1)
self.about_layout.setWidget(7, QtWidgets.QFormLayout.SpanningRole, self.info_text)
self.retranslateUi(About)
QtCore.QMetaObject.connectSlotsByName(About)
@ -95,23 +97,22 @@ class Ui_About(object):
def retranslateUi(self, About):
_translate = QtCore.QCoreApplication.translate
About.setWindowTitle(_translate("About", "About"))
self.open_browser.setText(_translate("About", "Download latest release"))
self.version_label.setText(_translate("About", "Version"))
self.license_label.setText(_translate("About", "License"))
self.lgd_dev_label.setText(_translate("About", "Legendary Developer"))
self.dev.setToolTip(_translate("About", "Github"))
self.update_label.setText(_translate("About", "Update available"))
self.dev_label.setText(_translate("About", "Rare Developer"))
self.license.setText(_translate("About", "GNU General Public License v3.0"))
self.lgd_dev.setToolTip(_translate("About", "Github"))
self.info_text.setText(_translate("About",
"This is a beta version, so you can get bugs. If you get a bug, please report it by creating an Issue on <a href=\'https://github.com/Dummerle/Rare/issues\'>Github</a>. You can also contact me on Discord (Dummerle#7419). Or you can join the <a href=\'https://discord.gg/YvmABK9YSk\'>Discord server</a>"))
self.title.setText(_translate("About", "<h2>About</h2>"))
self.version_label.setText(_translate("About", "Version"))
self.update_label.setText(_translate("About", "Update available"))
self.open_browser.setText(_translate("About", "Download latest release"))
self.dev_label.setText(_translate("About", "Rare Developer"))
self.dev.setToolTip(_translate("About", "Github"))
self.lgd_dev_label.setText(_translate("About", "Legendary Developer"))
self.lgd_dev.setToolTip(_translate("About", "Github"))
self.license_label.setText(_translate("About", "License"))
self.license.setText(_translate("About", "GNU General Public License v3.0"))
self.info_text.setText(_translate("About", "This is a beta version, so you can get bugs. If you get a bug, please report it by creating an Issue on <a href=\'https://github.com/Dummerle/Rare/issues\'>Github</a>. You can also contact me on Discord (Dummerle#7419). Or you can join the <a href=\'https://discord.gg/YvmABK9YSk\'>Discord server</a>\n"
""))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
About = QtWidgets.QWidget()
ui = Ui_About()

View file

@ -1,190 +1,170 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>About</class>
<widget class="QWidget" name="About">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>499</width>
<height>396</height>
</rect>
</property>
<property name="windowTitle">
<string>About</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="4" column="1">
<widget class="QPushButton" name="open_browser">
<property name="text">
<string>Download latest release</string>
</property>
</widget>
</item>
<item row="2" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="version_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Version</string>
</property>
</widget>
</item>
<item row="7" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="license_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>License</string>
</property>
</widget>
</item>
<item row="6" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="lgd_dev_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Legendary Developer</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLabel" name="dev">
<property name="toolTip">
<string>Github</string>
</property>
<property name="text">
<string notr="true">&lt;a href='https://github.com/Dummerle'&gt;Dummerle&lt;/a&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="update_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Update available</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="version">
<property name="text">
<string notr="true">error</string>
</property>
</widget>
</item>
<item row="5" column="0" alignment="Qt::AlignRight">
<widget class="QLabel" name="dev_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Rare Developer</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLabel" name="license">
<property name="text">
<string>GNU General Public License v3.0</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="update">
<property name="text">
<string notr="true">error</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLabel" name="lgd_dev">
<property name="toolTip">
<string>Github</string>
</property>
<property name="text">
<string notr="true">&lt;a href='https://github.com/derrod/'&gt;derrod&lt;/a&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="14" column="0" colspan="3">
<widget class="QLabel" name="info_text">
<property name="text">
<string>This is a beta version, so you can get bugs. If you get a bug, please report it by
creating an Issue on &lt;a href='https://github.com/Dummerle/Rare/issues'&gt;Github&lt;/a&gt;.
You can also contact me on Discord (Dummerle#7419). Or you can join the &lt;a
href='https://discord.gg/YvmABK9YSk'&gt;Discord server&lt;/a&gt;
</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="15" column="0" colspan="3">
<spacer name="about_vspacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0" colspan="3">
<widget class="QLabel" name="title">
<property name="text">
<string>&lt;h2&gt;About&lt;/h2&gt;</string>
</property>
</widget>
</item>
<item row="2" column="2" rowspan="6">
<spacer name="about_hspacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
<class>About</class>
<widget class="QWidget" name="About">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>722</width>
<height>345</height>
</rect>
</property>
<property name="windowTitle">
<string>About</string>
</property>
<layout class="QFormLayout" name="about_layout">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="title">
<property name="text">
<string>&lt;h2&gt;About&lt;/h2&gt;</string>
</property>
</widget>
<resources/>
<connections/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="version_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Version</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="version">
<property name="text">
<string notr="true">error</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="update_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Update available</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="update">
<property name="text">
<string notr="true">error</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="open_browser">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Download latest release</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="dev_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Rare Developer</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLabel" name="dev">
<property name="toolTip">
<string>Github</string>
</property>
<property name="text">
<string notr="true">&lt;a href='https://github.com/Dummerle'&gt;Dummerle&lt;/a&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="lgd_dev_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Legendary Developer</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QLabel" name="lgd_dev">
<property name="toolTip">
<string>Github</string>
</property>
<property name="text">
<string notr="true">&lt;a href='https://github.com/derrod/'&gt;derrod&lt;/a&gt;</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="license_label">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>License</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLabel" name="license">
<property name="text">
<string>GNU General Public License v3.0</string>
</property>
</widget>
</item>
<item row="7" column="0" colspan="2">
<widget class="QLabel" name="info_text">
<property name="text">
<string>This is a beta version, so you can get bugs. If you get a bug, please report it by creating an Issue on &lt;a href='https://github.com/Dummerle/Rare/issues'&gt;Github&lt;/a&gt;. You can also contact me on Discord (Dummerle#7419). Or you can join the &lt;a href='https://discord.gg/YvmABK9YSk'&gt;Discord server&lt;/a&gt;
</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View file

@ -11,22 +11,20 @@
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_legendary_settings(object):
def setupUi(self, legendary_settings):
legendary_settings.setObjectName("legendary_settings")
legendary_settings.resize(810, 535)
self.settings = QtWidgets.QWidget()
self.settings.setObjectName("settings")
self.settings_layout = QtWidgets.QHBoxLayout(self.settings)
class Ui_LegendarySettings(object):
def setupUi(self, LegendarySettings):
LegendarySettings.setObjectName("LegendarySettings")
LegendarySettings.resize(796, 732)
self.settings_layout = QtWidgets.QHBoxLayout(LegendarySettings)
self.settings_layout.setObjectName("settings_layout")
self.left_layout = QtWidgets.QVBoxLayout()
self.left_layout.setObjectName("left_layout")
self.install_dir_group = QtWidgets.QGroupBox(self.settings)
self.install_dir_group = QtWidgets.QGroupBox(LegendarySettings)
self.install_dir_group.setObjectName("install_dir_group")
self.layout_install_dir = QtWidgets.QVBoxLayout(self.install_dir_group)
self.layout_install_dir.setObjectName("layout_install_dir")
self.install_dir_layout = QtWidgets.QVBoxLayout(self.install_dir_group)
self.install_dir_layout.setObjectName("install_dir_layout")
self.left_layout.addWidget(self.install_dir_group)
self.download_group = QtWidgets.QGroupBox(self.settings)
self.download_group = QtWidgets.QGroupBox(LegendarySettings)
self.download_group.setObjectName("download_group")
self.download_layout = QtWidgets.QFormLayout(self.download_group)
self.download_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
@ -48,7 +46,7 @@ class Ui_legendary_settings(object):
sizePolicy.setHeightForWidth(self.max_worker_spin.sizePolicy().hasHeightForWidth())
self.max_worker_spin.setSizePolicy(sizePolicy)
self.max_worker_spin.setMinimum(0)
self.max_worker_spin.setMaximum(128)
self.max_worker_spin.setMaximum(16)
self.max_worker_spin.setProperty("value", 4)
self.max_worker_spin.setObjectName("max_worker_spin")
self.max_workers_layout.addWidget(self.max_worker_spin)
@ -97,123 +95,152 @@ class Ui_legendary_settings(object):
self.disable_https_check.setObjectName("disable_https_check")
self.download_layout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.disable_https_check)
self.left_layout.addWidget(self.download_group)
self.egl_sync_group = QtWidgets.QGroupBox(LegendarySettings)
self.egl_sync_group.setObjectName("egl_sync_group")
self.egl_sync_layout = QtWidgets.QVBoxLayout(self.egl_sync_group)
self.egl_sync_layout.setObjectName("egl_sync_layout")
self.manifest_path_layout = QtWidgets.QVBoxLayout()
self.manifest_path_layout.setObjectName("manifest_path_layout")
self.egl_sync_layout.addLayout(self.manifest_path_layout)
self.manifest_path_info = QtWidgets.QLabel(self.egl_sync_group)
self.manifest_path_info.setObjectName("manifest_path_info")
self.egl_sync_layout.addWidget(self.manifest_path_info)
self.export_import_layout = QtWidgets.QHBoxLayout()
self.export_import_layout.setObjectName("export_import_layout")
self.export_group = QtWidgets.QGroupBox(self.egl_sync_group)
self.export_group.setObjectName("export_group")
self.export_layout = QtWidgets.QVBoxLayout(self.export_group)
self.export_layout.setObjectName("export_layout")
self.export_label = QtWidgets.QLabel(self.export_group)
self.export_label.setObjectName("export_label")
self.export_layout.addWidget(self.export_label)
self.export_scroll = QtWidgets.QScrollArea(self.export_group)
self.export_scroll.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
self.export_scroll.setWidgetResizable(True)
self.export_scroll.setObjectName("export_scroll")
self.export_contents = QtWidgets.QWidget()
self.export_contents.setGeometry(QtCore.QRect(0, 0, 264, 16))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.export_contents.sizePolicy().hasHeightForWidth())
self.export_contents.setSizePolicy(sizePolicy)
self.export_contents.setObjectName("export_contents")
self.exportable_layout = QtWidgets.QVBoxLayout(self.export_contents)
self.exportable_layout.setObjectName("exportable_layout")
self.export_scroll.setWidget(self.export_contents)
self.export_layout.addWidget(self.export_scroll)
self.export_all_button = QtWidgets.QPushButton(self.export_group)
self.export_all_button.setObjectName("export_all_button")
self.export_layout.addWidget(self.export_all_button, 0, QtCore.Qt.AlignRight)
self.export_import_layout.addWidget(self.export_group)
self.import_group = QtWidgets.QGroupBox(self.egl_sync_group)
self.import_group.setObjectName("import_group")
self.import_layout = QtWidgets.QVBoxLayout(self.import_group)
self.import_layout.setObjectName("import_layout")
self.import_label = QtWidgets.QLabel(self.import_group)
self.import_label.setObjectName("import_label")
self.import_layout.addWidget(self.import_label)
self.import_scroll = QtWidgets.QScrollArea(self.import_group)
self.import_scroll.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustIgnored)
self.import_scroll.setWidgetResizable(True)
self.import_scroll.setObjectName("import_scroll")
self.import_contents = QtWidgets.QWidget()
self.import_contents.setGeometry(QtCore.QRect(0, 0, 264, 16))
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.import_contents.sizePolicy().hasHeightForWidth())
self.import_contents.setSizePolicy(sizePolicy)
self.import_contents.setObjectName("import_contents")
self.importable_layout = QtWidgets.QVBoxLayout(self.import_contents)
self.importable_layout.setObjectName("importable_layout")
self.import_scroll.setWidget(self.import_contents)
self.import_layout.addWidget(self.import_scroll)
self.import_all_button = QtWidgets.QPushButton(self.import_group)
self.import_all_button.setObjectName("import_all_button")
self.import_layout.addWidget(self.import_all_button, 0, QtCore.Qt.AlignRight)
self.export_import_layout.addWidget(self.import_group)
self.egl_sync_layout.addLayout(self.export_import_layout)
self.enable_sync_group = QtWidgets.QGroupBox(self.egl_sync_group)
self.enable_sync_group.setObjectName("enable_sync_group")
self.enable_sync_layout = QtWidgets.QHBoxLayout(self.enable_sync_group)
self.enable_sync_layout.setObjectName("enable_sync_layout")
self.sync_once_button = QtWidgets.QPushButton(self.enable_sync_group)
self.sync_once_button.setObjectName("sync_once_button")
self.enable_sync_layout.addWidget(self.sync_once_button, 0, QtCore.Qt.AlignRight)
self.enable_sync_button = QtWidgets.QPushButton(self.enable_sync_group)
self.enable_sync_button.setObjectName("enable_sync_button")
self.enable_sync_layout.addWidget(self.enable_sync_button, 0, QtCore.Qt.AlignRight)
self.egl_sync_layout.addWidget(self.enable_sync_group)
self.left_layout.addWidget(self.egl_sync_group)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.left_layout.addItem(spacerItem)
self.settings_layout.addLayout(self.left_layout)
self.right_layout = QtWidgets.QVBoxLayout()
self.right_layout.setObjectName("right_layout")
self.cleanup_group = QtWidgets.QGroupBox(self.settings)
self.cleanup_group = QtWidgets.QGroupBox(LegendarySettings)
self.cleanup_group.setObjectName("cleanup_group")
self.layout_clean = QtWidgets.QVBoxLayout(self.cleanup_group)
self.layout_clean.setObjectName("layout_clean")
self.cleanup_layout = QtWidgets.QVBoxLayout(self.cleanup_group)
self.cleanup_layout.setObjectName("cleanup_layout")
self.clean_keep_manifests_button = QtWidgets.QPushButton(self.cleanup_group)
self.clean_keep_manifests_button.setObjectName("clean_keep_manifests_button")
self.layout_clean.addWidget(self.clean_keep_manifests_button)
self.cleanup_layout.addWidget(self.clean_keep_manifests_button)
self.clean_button = QtWidgets.QPushButton(self.cleanup_group)
self.clean_button.setObjectName("clean_button")
self.layout_clean.addWidget(self.clean_button)
self.cleanup_layout.addWidget(self.clean_button)
self.right_layout.addWidget(self.cleanup_group)
self.egl_sync = QtWidgets.QGroupBox(self.settings)
self.egl_sync = QtWidgets.QGroupBox(LegendarySettings)
self.egl_sync.setObjectName("egl_sync")
self.verticalLayout = QtWidgets.QVBoxLayout(self.egl_sync)
self.verticalLayout.setObjectName("verticalLayout")
self.egl_sync_layout_3 = QtWidgets.QVBoxLayout(self.egl_sync)
self.egl_sync_layout_3.setObjectName("egl_sync_layout_3")
self.egl_sync_button = QtWidgets.QPushButton(self.egl_sync)
self.egl_sync_button.setObjectName("egl_sync_button")
self.verticalLayout.addWidget(self.egl_sync_button)
self.egl_sync_layout_3.addWidget(self.egl_sync_button)
self.right_layout.addWidget(self.egl_sync)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.right_layout.addItem(spacerItem1)
self.settings_layout.addLayout(self.right_layout)
legendary_settings.addWidget(self.settings)
self.egl_sync_page = QtWidgets.QWidget()
self.egl_sync_page.setObjectName("egl_sync_page")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.egl_sync_page)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.back_button = QtWidgets.QPushButton(self.egl_sync_page)
self.back_button.setObjectName("back_button")
self.verticalLayout_2.addWidget(self.back_button)
self.title = QtWidgets.QLabel(self.egl_sync_page)
self.title.setObjectName("title")
self.verticalLayout_2.addWidget(self.title)
self.pathedit_placeholder = QtWidgets.QVBoxLayout()
self.pathedit_placeholder.setObjectName("pathedit_placeholder")
self.verticalLayout_2.addLayout(self.pathedit_placeholder)
self.path_info = QtWidgets.QLabel(self.egl_sync_page)
self.path_info.setObjectName("path_info")
self.verticalLayout_2.addWidget(self.path_info)
self.layout_export_import = QtWidgets.QGridLayout()
self.layout_export_import.setObjectName("layout_export_import")
self.exportable_games = QtWidgets.QGroupBox(self.egl_sync_page)
self.exportable_games.setObjectName("exportable_games")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.exportable_games)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.layout_export_import.addWidget(self.exportable_games, 0, 0, 1, 1)
self.importable_games = QtWidgets.QGroupBox(self.egl_sync_page)
self.importable_games.setObjectName("importable_games")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.importable_games)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.layout_export_import.addWidget(self.importable_games, 0, 1, 1, 1)
self.export_all_button = QtWidgets.QPushButton(self.egl_sync_page)
self.export_all_button.setObjectName("export_all_button")
self.layout_export_import.addWidget(self.export_all_button, 1, 0, 1, 1)
self.import_all_button = QtWidgets.QPushButton(self.egl_sync_page)
self.import_all_button.setObjectName("import_all_button")
self.layout_export_import.addWidget(self.import_all_button, 1, 1, 1, 1)
self.verticalLayout_2.addLayout(self.layout_export_import)
self.groupBox = QtWidgets.QGroupBox(self.egl_sync_page)
self.groupBox.setObjectName("groupBox")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox)
self.horizontalLayout.setObjectName("horizontalLayout")
self.sync_once_button = QtWidgets.QPushButton(self.groupBox)
self.sync_once_button.setObjectName("sync_once_button")
self.horizontalLayout.addWidget(self.sync_once_button)
self.enable_sync_button = QtWidgets.QPushButton(self.groupBox)
self.enable_sync_button.setObjectName("enable_sync_button")
self.horizontalLayout.addWidget(self.enable_sync_button)
self.verticalLayout_2.addWidget(self.groupBox)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_2.addItem(spacerItem2)
legendary_settings.addWidget(self.egl_sync_page)
self.retranslateUi(legendary_settings)
legendary_settings.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(legendary_settings)
self.retranslateUi(LegendarySettings)
QtCore.QMetaObject.connectSlotsByName(LegendarySettings)
def retranslateUi(self, legendary_settings):
def retranslateUi(self, LegendarySettings):
_translate = QtCore.QCoreApplication.translate
legendary_settings.setWindowTitle(_translate("legendary_settings", "LegendarySettings"))
self.install_dir_group.setTitle(_translate("legendary_settings", "Default Installation Directory"))
self.download_group.setTitle(_translate("legendary_settings", "Download Settings"))
self.max_workers_label.setText(_translate("legendary_settings", "Max Workers"))
self.max_workers_info_label.setText(_translate("legendary_settings", "Less is slower (0: Default)"))
self.max_memory_label.setText(_translate("legendary_settings", "Max Memory"))
self.max_memory_spin.setSuffix(_translate("legendary_settings", "MiB"))
self.max_memory_info_label.setText(_translate("legendary_settings", "Less is slower (0: Default)"))
self.preferred_cdn_label.setText(_translate("legendary_settings", "Preferred CDN"))
self.preferred_cdn_line.setPlaceholderText(_translate("legendary_settings", "Default"))
self.disable_https_label.setText(_translate("legendary_settings", "Disable HTTPS"))
self.cleanup_group.setTitle(_translate("legendary_settings", "Cleanup"))
self.clean_keep_manifests_button.setText(_translate("legendary_settings", "Clean, but keep manifests"))
self.clean_button.setText(_translate("legendary_settings", "Remove everything"))
self.egl_sync.setTitle(_translate("legendary_settings", "EGL Sync"))
self.egl_sync_button.setText(_translate("legendary_settings", "Sync Settings"))
self.back_button.setText(_translate("legendary_settings", "Back"))
self.title.setText(_translate("legendary_settings", "<h2>Sync Games with Epic Games Store</h2>"))
self.path_info.setText(_translate("legendary_settings", "TextLabel"))
self.exportable_games.setTitle(_translate("legendary_settings", "Exportable Games"))
self.importable_games.setTitle(_translate("legendary_settings", "Importable"))
self.export_all_button.setText(_translate("legendary_settings", "Export all Games"))
self.import_all_button.setText(_translate("legendary_settings", "Import all Games"))
self.groupBox.setTitle(_translate("legendary_settings", "Enable Sync"))
self.sync_once_button.setText(_translate("legendary_settings", "Sync once"))
self.enable_sync_button.setText(_translate("legendary_settings", "Enable automatic sync"))
LegendarySettings.setWindowTitle(_translate("LegendarySettings", "LegendarySettings"))
self.install_dir_group.setTitle(_translate("LegendarySettings", "Default Installation Directory"))
self.download_group.setTitle(_translate("LegendarySettings", "Download Settings"))
self.max_workers_label.setText(_translate("LegendarySettings", "Max Workers"))
self.max_workers_info_label.setText(_translate("LegendarySettings", "Less is slower (0: Default)"))
self.max_memory_label.setText(_translate("LegendarySettings", "Max Memory"))
self.max_memory_spin.setSuffix(_translate("LegendarySettings", "MiB"))
self.max_memory_info_label.setText(_translate("LegendarySettings", "Less is slower (0: Default)"))
self.preferred_cdn_label.setText(_translate("LegendarySettings", "Preferred CDN"))
self.preferred_cdn_line.setPlaceholderText(_translate("LegendarySettings", "Default"))
self.disable_https_label.setText(_translate("LegendarySettings", "Disable HTTPS"))
self.egl_sync_group.setTitle(_translate("LegendarySettings", "Sync with Epic Games Launcher"))
self.manifest_path_info.setText(_translate("LegendarySettings", "TextLabel"))
self.export_group.setTitle(_translate("LegendarySettings", "Exportable Games"))
self.export_label.setText(_translate("LegendarySettings", "No games to export to EGS"))
self.export_all_button.setText(_translate("LegendarySettings", "Export all Games"))
self.import_group.setTitle(_translate("LegendarySettings", "Importable"))
self.import_label.setText(_translate("LegendarySettings", "No games to import from EGS"))
self.import_all_button.setText(_translate("LegendarySettings", "Import all Games"))
self.enable_sync_group.setTitle(_translate("LegendarySettings", "Enable Sync"))
self.sync_once_button.setText(_translate("LegendarySettings", "Sync once"))
self.enable_sync_button.setText(_translate("LegendarySettings", "Enable automatic sync"))
self.cleanup_group.setTitle(_translate("LegendarySettings", "Cleanup"))
self.clean_keep_manifests_button.setText(_translate("LegendarySettings", "Clean, but keep manifests"))
self.clean_button.setText(_translate("LegendarySettings", "Remove everything"))
self.egl_sync.setTitle(_translate("LegendarySettings", "EGL Sync"))
self.egl_sync_button.setText(_translate("LegendarySettings", "Sync Settings"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
legendary_settings = QtWidgets.QStackedWidget()
ui = Ui_legendary_settings()
ui.setupUi(legendary_settings)
legendary_settings.show()
LegendarySettings = QtWidgets.QWidget()
ui = Ui_LegendarySettings()
ui.setupUi(LegendarySettings)
LegendarySettings.show()
sys.exit(app.exec_())

View file

@ -1,340 +1,383 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>legendary_settings</class>
<widget class="QStackedWidget" name="legendary_settings">
<class>LegendarySettings</class>
<widget class="QWidget" name="LegendarySettings">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>810</width>
<height>535</height>
<width>796</width>
<height>732</height>
</rect>
</property>
<property name="windowTitle">
<string>LegendarySettings</string>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="settings">
<layout class="QHBoxLayout" name="settings_layout">
<item>
<layout class="QVBoxLayout" name="left_layout">
<item>
<widget class="QGroupBox" name="install_dir_group">
<property name="title">
<string>Default Installation Directory</string>
<layout class="QHBoxLayout" name="settings_layout">
<item>
<layout class="QVBoxLayout" name="left_layout">
<item>
<widget class="QGroupBox" name="install_dir_group">
<property name="title">
<string>Default Installation Directory</string>
</property>
<layout class="QVBoxLayout" name="install_dir_layout"/>
</widget>
</item>
<item>
<widget class="QGroupBox" name="download_group">
<property name="title">
<string>Download Settings</string>
</property>
<layout class="QFormLayout" name="download_layout">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<layout class="QVBoxLayout" name="layout_install_dir"/>
</widget>
</item>
<item>
<widget class="QGroupBox" name="download_group">
<property name="title">
<string>Download Settings</string>
</property>
<layout class="QFormLayout" name="download_layout">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="max_workers_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Max Workers</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="max_workers_layout">
<item>
<widget class="QSpinBox" name="max_worker_spin">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>128</number>
</property>
<property name="value">
<number>4</number>
<item row="0" column="0">
<widget class="QLabel" name="max_workers_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Max Workers</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="max_workers_layout">
<item>
<widget class="QSpinBox" name="max_worker_spin">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>16</number>
</property>
<property name="value">
<number>4</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="max_workers_info_label">
<property name="font">
<font>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Less is slower (0: Default)</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="max_memory_label">
<property name="text">
<string>Max Memory</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="max_memory_layout">
<item>
<widget class="QSpinBox" name="max_memory_spin">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string>MiB</string>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>10240</number>
</property>
<property name="singleStep">
<number>128</number>
</property>
<property name="value">
<number>1024</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="max_memory_info_label">
<property name="font">
<font>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Less is slower (0: Default)</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="preferred_cdn_label">
<property name="text">
<string>Preferred CDN</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="preferred_cdn_line">
<property name="placeholderText">
<string>Default</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="disable_https_label">
<property name="text">
<string>Disable HTTPS</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="disable_https_check">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="egl_sync_group">
<property name="title">
<string>Sync with Epic Games Launcher</string>
</property>
<layout class="QVBoxLayout" name="egl_sync_layout">
<item>
<layout class="QVBoxLayout" name="manifest_path_layout"/>
</item>
<item>
<widget class="QLabel" name="manifest_path_info">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="export_import_layout">
<item>
<widget class="QGroupBox" name="export_group">
<property name="title">
<string>Exportable Games</string>
</property>
<layout class="QVBoxLayout" name="export_layout">
<item>
<widget class="QLabel" name="export_label">
<property name="text">
<string>No games to export to EGS</string>
</property>
</widget>
</item>
<item>
<widget class="QScrollArea" name="export_scroll">
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustIgnored</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="export_contents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>264</width>
<height>16</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="exportable_layout"/>
</widget>
</widget>
</item>
<item alignment="Qt::AlignRight">
<widget class="QPushButton" name="export_all_button">
<property name="text">
<string>Export all Games</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="import_group">
<property name="title">
<string>Importable</string>
</property>
<layout class="QVBoxLayout" name="import_layout">
<item>
<widget class="QLabel" name="import_label">
<property name="text">
<string>No games to import from EGS</string>
</property>
</widget>
</item>
<item>
<widget class="QScrollArea" name="import_scroll">
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustIgnored</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="import_contents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>264</width>
<height>16</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="importable_layout"/>
</widget>
</widget>
</item>
<item alignment="Qt::AlignRight">
<widget class="QPushButton" name="import_all_button">
<property name="text">
<string>Import all Games</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="enable_sync_group">
<property name="title">
<string>Enable Sync</string>
</property>
<layout class="QHBoxLayout" name="enable_sync_layout">
<item alignment="Qt::AlignRight">
<widget class="QPushButton" name="sync_once_button">
<property name="text">
<string>Sync once</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="max_workers_info_label">
<property name="font">
<font>
<italic>true</italic>
</font>
</property>
<item alignment="Qt::AlignRight">
<widget class="QPushButton" name="enable_sync_button">
<property name="text">
<string>Less is slower (0: Default)</string>
<string>Enable automatic sync</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<widget class="QLabel" name="max_memory_label">
<property name="text">
<string>Max Memory</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="max_memory_layout">
<item>
<widget class="QSpinBox" name="max_memory_spin">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string>MiB</string>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>10240</number>
</property>
<property name="singleStep">
<number>128</number>
</property>
<property name="value">
<number>1024</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="max_memory_info_label">
<property name="font">
<font>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Less is slower (0: Default)</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="preferred_cdn_label">
<property name="text">
<string>Preferred CDN</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="preferred_cdn_line">
<property name="placeholderText">
<string>Default</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="disable_https_label">
<property name="text">
<string>Disable HTTPS</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QCheckBox" name="disable_https_check">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="left_vspacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="right_layout">
<item>
<widget class="QGroupBox" name="cleanup_group">
<property name="title">
<string>Cleanup</string>
</property>
<layout class="QVBoxLayout" name="layout_clean">
<item>
<widget class="QPushButton" name="clean_keep_manifests_button">
<property name="text">
<string>Clean, but keep manifests</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="clean_button">
<property name="text">
<string>Remove everything</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="egl_sync">
<property name="title">
<string>EGL Sync</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="egl_sync_button">
<property name="text">
<string>Sync Settings</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="right_vspacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="egl_sync_page">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QPushButton" name="back_button">
<property name="text">
<string>Back</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="title">
<property name="text">
<string>&lt;h2&gt;Sync Games with Epic Games Store&lt;/h2&gt;</string>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="pathedit_placeholder"/>
</item>
<item>
<widget class="QLabel" name="path_info">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<layout class="QGridLayout" name="layout_export_import">
<item row="0" column="0">
<widget class="QGroupBox" name="exportable_games">
<property name="title">
<string>Exportable Games</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3"/>
</widget>
</item>
<item row="0" column="1">
<widget class="QGroupBox" name="importable_games">
<property name="title">
<string>Importable</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_4"/>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="export_all_button">
<property name="text">
<string>Export all Games</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="import_all_button">
<property name="text">
<string>Import all Games</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Enable Sync</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="sync_once_button">
<property name="text">
<string>Sync once</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="enable_sync_button">
<property name="text">
<string>Enable automatic sync</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="left_vspacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="right_layout">
<item>
<widget class="QGroupBox" name="cleanup_group">
<property name="title">
<string>Cleanup</string>
</property>
<layout class="QVBoxLayout" name="cleanup_layout">
<item>
<widget class="QPushButton" name="clean_keep_manifests_button">
<property name="text">
<string>Clean, but keep manifests</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="clean_button">
<property name="text">
<string>Remove everything</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="egl_sync">
<property name="title">
<string>EGL Sync</string>
</property>
<layout class="QVBoxLayout" name="egl_sync_layout_3">
<item>
<widget class="QPushButton" name="egl_sync_button">
<property name="text">
<string>Sync Settings</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="right_vspacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>