1
0
Fork 0
mirror of synced 2024-06-24 01:00:43 +12:00

Rename ImportSync files to indicate what the underlying widget is.

Split Import/Export lists to separate widgets to reduce code duplication.

Signed-off-by: Stelios Tsampas <loathingkernel@gmail.com>
This commit is contained in:
Stelios Tsampas 2021-10-17 02:17:54 +03:00 committed by Dummerle
parent d8f39857db
commit 458e233327
No known key found for this signature in database
GPG key ID: AB68CC59CA39F2F1
12 changed files with 400 additions and 499 deletions

View file

@ -1,8 +1,8 @@
from PyQt5.QtWidgets import QVBoxLayout, QWidget, QLabel, QSpacerItem, QSizePolicy
from rare.utils.extra_widgets import SideTabWidget
from .egl_sync_widget import EGLSyncGroup
from .import_widget import ImportGroup
from .egl_sync_group import EGLSyncGroup
from .import_group import ImportGroup
class ImportSyncTabs(SideTabWidget):
@ -42,8 +42,9 @@ class ImportSyncWidget(QWidget):
def __init__(self, widget: QWidget, title: str, info: str, parent=None):
super(ImportSyncWidget, self).__init__(parent=parent)
self.layout = QVBoxLayout()
# self.title = QLabel(f"<h2>{title}</h2")
# self.layout.addWidget(self.title)
self.title = QLabel(f"<h2>{title}</h2")
self.layout.addWidget(self.title)
self.title.setVisible(False)
self.group = widget
self.layout.addWidget(self.group)
self.info = QLabel(f"<h4>{info}</h4>")

View file

@ -1,32 +1,28 @@
import os
import platform
from glob import glob
from typing import Tuple
from logging import getLogger
from typing import List, Tuple
from PyQt5.QtCore import Qt, QThread, QFileSystemWatcher
from PyQt5.QtWidgets import QHBoxLayout, QVBoxLayout, QLabel, QGroupBox, \
QCheckBox, QPushButton, QListWidgetItem, QDialog, QFileDialog, QSizePolicy
QCheckBox, QPushButton, QListWidgetItem, QDialog, QFileDialog
import rare.shared as shared
from rare.ui.components.tabs.games.import_sync.egl_sync_widget import Ui_EGLSyncGroup
from rare.ui.components.tabs.games.import_sync.egl_sync_group import Ui_EGLSyncGroup
from rare.ui.components.tabs.games.import_sync.egl_sync_list_group import Ui_EGLSyncListGroup
from rare.utils.extra_widgets import PathEdit
from rare.utils.utils import WineResolver
from rare.utils.models import PathSpec
from rare.utils.utils import WineResolver
logger = getLogger("EGLSync")
class EGLSyncGroup(QGroupBox, Ui_EGLSyncGroup):
importable_items = list()
exportable_items = list()
wine_resolver: QThread
def __init__(self, parent=None):
super(EGLSyncGroup, self).__init__(parent=parent)
self.setupUi(self)
self.export_list.setProperty("noBorder", 1)
self.import_list.setProperty("noBorder", 1)
self.core = shared.core
@ -88,24 +84,10 @@ class EGLSyncGroup(QGroupBox, Ui_EGLSyncGroup):
self.egl_sync_check.setChecked(shared.core.egl_sync_enabled)
self.egl_sync_check.stateChanged.connect(self.egl_sync_changed)
self.export_list.itemDoubleClicked.connect(
lambda item:
item.setCheckState(Qt.Unchecked) if item.checkState() != Qt.Unchecked else item.setCheckState(Qt.Checked))
self.import_list.itemDoubleClicked.connect(
lambda item:
item.setCheckState(Qt.Unchecked) if item.checkState() != Qt.Unchecked else item.setCheckState(Qt.Checked))
self.export_select_all_button.clicked.connect(
lambda: self.select_items(self.exportable_items, Qt.Checked))
self.export_select_none_button.clicked.connect(
lambda: self.select_items(self.exportable_items, Qt.Unchecked))
self.import_select_all_button.clicked.connect(
lambda: self.select_items(self.importable_items, Qt.Checked))
self.import_select_none_button.clicked.connect(
lambda: self.select_items(self.importable_items, Qt.Unchecked))
self.export_button.clicked.connect(self.export_selected)
self.import_button.clicked.connect(self.import_selected)
self.import_list = EGLSyncListGroup(export=False, parent=self)
self.import_export_layout.addWidget(self.import_list)
self.export_list = EGLSyncListGroup(export=True, parent=self)
self.import_export_layout.addWidget(self.export_list)
self.update_lists()
@ -173,73 +155,15 @@ class EGLSyncGroup(QGroupBox, Ui_EGLSyncGroup):
self.egl_sync_label.setEnabled(have_path)
self.egl_sync_check.setEnabled(have_path)
self.import_export_widget.setEnabled(have_path)
self.import_label.setVisible(not have_path)
self.import_list.setVisible(have_path)
self.import_buttons_widget.setVisible(have_path)
self.export_label.setVisible(not have_path)
self.export_list.setVisible(have_path)
self.export_buttons_widget.setVisible(have_path)
if not have_path:
return
self.update_import_list()
self.update_export_list()
def update_import_list(self):
self.import_list.clear()
self.importable_items.clear()
importable_games = shared.core.egl_get_importable()
for game in importable_games:
iw = EGLSyncItem(game, False, self.import_list)
self.importable_items.append(iw)
self.import_list.addItem(iw)
have_importable = bool(importable_games)
self.import_label.setVisible(not have_importable)
self.import_list.setVisible(have_importable)
self.import_buttons_widget.setVisible(have_importable)
def update_export_list(self):
self.export_list.clear()
self.exportable_items.clear()
exportable_games = shared.core.egl_get_exportable()
for igame in exportable_games:
ew = EGLSyncItem(igame, True, self.export_list)
self.exportable_items.append(ew)
self.export_list.addItem(ew)
have_exportable = bool(exportable_games)
self.export_label.setVisible(not have_exportable)
self.export_list.setVisible(have_exportable)
self.export_buttons_widget.setVisible(have_exportable)
@staticmethod
def select_items(item_list, state):
for w in item_list:
w.setCheckState(state)
def import_selected(self):
for iw in self.importable_items:
if iw.is_checked:
iw.import_game()
self.import_list.takeItem(self.import_list.row(iw))
self.core.egl_sync()
self.update_import_list()
def export_selected(self):
for ew in self.exportable_items:
if ew.is_checked():
ew.export_game()
self.export_list.takeItem(self.export_list.row(ew))
self.core.egl_sync()
self.update_export_list()
self.import_list.populate(have_path)
self.import_list.setEnabled(have_path)
self.export_list.populate(have_path)
self.export_list.setEnabled(have_path)
class EGLSyncItem(QListWidgetItem):
class EGLSyncListItem(QListWidgetItem):
def __init__(self, game, export: bool, parent=None):
super(EGLSyncItem, self).__init__(parent=parent)
super(EGLSyncListItem, self).__init__(parent=parent)
self.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsUserCheckable)
self.setCheckState(Qt.Unchecked)
self.game = game
@ -252,11 +176,67 @@ class EGLSyncItem(QListWidgetItem):
def is_checked(self):
return True if self.checkState() == Qt.Checked else False
def export_game(self):
shared.core.egl_export(self.game.app_name)
def action(self):
if self.export:
shared.core.egl_export(self.game.app_name)
else:
shared.core.egl_import(self.game.app_name)
def import_game(self):
shared.core.egl_import(self.game.app_name)
class EGLSyncListGroup(QGroupBox, Ui_EGLSyncListGroup):
def __init__(self, export: bool, parent=None):
super(EGLSyncListGroup, self).__init__(parent=parent)
self.setupUi(self)
self.list.setProperty("noBorder", 1)
self.export = export
if export:
self.setTitle(self.tr('Exportable games'))
self.label.setText(self.tr('No games to export to EGL'))
self.action_button.setText(self.tr('Export'))
self.list_func = shared.core.egl_get_exportable
else:
self.setTitle(self.tr('Importable games'))
self.label.setText(self.tr('No games to import from EGL'))
self.action_button.setText(self.tr('Import'))
self.list_func = shared.core.egl_get_importable
self.list.itemDoubleClicked.connect(
lambda item:
item.setCheckState(Qt.Unchecked) if item.checkState() != Qt.Unchecked else item.setCheckState(Qt.Checked)
)
self.select_all_button.clicked.connect(lambda: self.mark(Qt.Checked))
self.select_none_button.clicked.connect(lambda: self.mark(Qt.Unchecked))
self.action_button.clicked.connect(self.action)
def mark(self, state):
for item in self.items:
item.setCheckState(state)
def populate(self, enabled: bool):
if enabled:
self.list.clear()
for item in self.list_func():
self.list.addItem(EGLSyncListItem(item, self.export, self.list))
self.label.setVisible(not enabled or not bool(self.list.count()))
self.list.setVisible(enabled and bool(self.list.count()))
self.buttons_widget.setVisible(enabled and bool(self.list.count()))
def action(self):
for item in self.items:
if item.is_checked:
item.action()
self.list.takeItem(self.list.row(item))
self.core.egl_sync()
self.populate(True)
@property
def items(self) -> List[EGLSyncListItem]:
return [self.list.item(i) for i in range(self.list.count())]
class DisableSyncDialog(QDialog):

View file

@ -6,7 +6,7 @@ from typing import Tuple
from PyQt5.QtWidgets import QFileDialog, QGroupBox
import rare.shared as shared
from rare.ui.components.tabs.games.import_sync.import_widget import Ui_ImportGroup
from rare.ui.components.tabs.games.import_sync.import_group import Ui_ImportGroup
from rare.utils import legendary_utils
from rare.utils.extra_widgets import IndicatorLineEdit, PathEdit

View file

@ -12,10 +12,7 @@
}
QLabel {
border-width: 1px;
border-style: solid;
border-radius: 2px;
border-color: transparent;
border-width: 0px;
background-color: transparent;
padding: 0px;
selection-background-color: #2f4f4f;

View file

@ -0,0 +1,67 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/import_sync/egl_sync_group.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_EGLSyncGroup(object):
def setupUi(self, EGLSyncGroup):
EGLSyncGroup.setObjectName("EGLSyncGroup")
EGLSyncGroup.resize(478, 106)
EGLSyncGroup.setWindowTitle("EGLSyncGroup")
EGLSyncGroup.setCheckable(False)
EGLSyncGroup.setChecked(False)
self.egl_sync_layout = QtWidgets.QFormLayout(EGLSyncGroup)
self.egl_sync_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.egl_sync_layout.setObjectName("egl_sync_layout")
self.egl_path_label = QtWidgets.QLabel(EGLSyncGroup)
self.egl_path_label.setObjectName("egl_path_label")
self.egl_sync_layout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.egl_path_label)
self.egl_path_layout = QtWidgets.QHBoxLayout()
self.egl_path_layout.setObjectName("egl_path_layout")
self.egl_sync_layout.setLayout(0, QtWidgets.QFormLayout.FieldRole, self.egl_path_layout)
self.egl_path_info_label = QtWidgets.QLabel(EGLSyncGroup)
self.egl_path_info_label.setObjectName("egl_path_info_label")
self.egl_sync_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.egl_path_info_label)
self.egl_path_info = QtWidgets.QLabel(EGLSyncGroup)
self.egl_path_info.setText("error")
self.egl_path_info.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.egl_path_info.setObjectName("egl_path_info")
self.egl_sync_layout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.egl_path_info)
self.egl_sync_check = QtWidgets.QCheckBox(EGLSyncGroup)
self.egl_sync_check.setText("")
self.egl_sync_check.setObjectName("egl_sync_check")
self.egl_sync_layout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.egl_sync_check)
self.import_export_layout = QtWidgets.QVBoxLayout()
self.import_export_layout.setObjectName("import_export_layout")
self.egl_sync_layout.setLayout(3, QtWidgets.QFormLayout.SpanningRole, self.import_export_layout)
self.egl_sync_label = QtWidgets.QLabel(EGLSyncGroup)
self.egl_sync_label.setObjectName("egl_sync_label")
self.egl_sync_layout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.egl_sync_label)
self.retranslateUi(EGLSyncGroup)
QtCore.QMetaObject.connectSlotsByName(EGLSyncGroup)
def retranslateUi(self, EGLSyncGroup):
_translate = QtCore.QCoreApplication.translate
EGLSyncGroup.setTitle(_translate("EGLSyncGroup", "Sync with Epic Games Launcher"))
self.egl_path_label.setText(_translate("EGLSyncGroup", "Prefix/Manifest path"))
self.egl_path_info_label.setText(_translate("EGLSyncGroup", "Estimated path"))
self.egl_sync_label.setText(_translate("EGLSyncGroup", "Enable automatic sync"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
EGLSyncGroup = QtWidgets.QGroupBox()
ui = Ui_EGLSyncGroup()
ui.setupUi(EGLSyncGroup)
EGLSyncGroup.show()
sys.exit(app.exec_())

View file

@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>EGLSyncGroup</class>
<widget class="QGroupBox" name="EGLSyncGroup">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>478</width>
<height>106</height>
</rect>
</property>
<property name="windowTitle">
<string notr="true">EGLSyncGroup</string>
</property>
<property name="title">
<string>Sync with Epic Games Launcher</string>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QFormLayout" name="egl_sync_layout">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="egl_path_label">
<property name="text">
<string>Prefix/Manifest path</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="egl_path_layout"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="egl_path_info_label">
<property name="text">
<string>Estimated path</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="egl_path_info">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="egl_sync_check">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<layout class="QVBoxLayout" name="import_export_layout"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="egl_sync_label">
<property name="text">
<string>Enable automatic sync</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View file

@ -0,0 +1,71 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/import_sync/egl_sync_list_group.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_EGLSyncListGroup(object):
def setupUi(self, EGLSyncListGroup):
EGLSyncListGroup.setObjectName("EGLSyncListGroup")
EGLSyncListGroup.resize(461, 206)
EGLSyncListGroup.setWindowTitle("EGLSyncListGroup")
EGLSyncListGroup.setTitle("")
self.egl_sync_list_layout = QtWidgets.QVBoxLayout(EGLSyncListGroup)
self.egl_sync_list_layout.setObjectName("egl_sync_list_layout")
self.label = QtWidgets.QLabel(EGLSyncListGroup)
self.label.setText("")
self.label.setObjectName("label")
self.egl_sync_list_layout.addWidget(self.label)
self.list = QtWidgets.QListWidget(EGLSyncListGroup)
self.list.setAlternatingRowColors(True)
self.list.setObjectName("list")
self.egl_sync_list_layout.addWidget(self.list)
self.buttons_widget = QtWidgets.QWidget(EGLSyncListGroup)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.buttons_widget.sizePolicy().hasHeightForWidth())
self.buttons_widget.setSizePolicy(sizePolicy)
self.buttons_widget.setObjectName("buttons_widget")
self.buttons_layout = QtWidgets.QHBoxLayout(self.buttons_widget)
self.buttons_layout.setContentsMargins(0, 0, 0, 0)
self.buttons_layout.setObjectName("buttons_layout")
self.select_all_button = QtWidgets.QPushButton(self.buttons_widget)
self.select_all_button.setObjectName("select_all_button")
self.buttons_layout.addWidget(self.select_all_button)
self.select_none_button = QtWidgets.QPushButton(self.buttons_widget)
self.select_none_button.setObjectName("select_none_button")
self.buttons_layout.addWidget(self.select_none_button)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.buttons_layout.addItem(spacerItem)
self.action_button = QtWidgets.QPushButton(self.buttons_widget)
self.action_button.setText("Action")
self.action_button.setObjectName("action_button")
self.buttons_layout.addWidget(self.action_button)
self.egl_sync_list_layout.addWidget(self.buttons_widget)
self.retranslateUi(EGLSyncListGroup)
QtCore.QMetaObject.connectSlotsByName(EGLSyncListGroup)
def retranslateUi(self, EGLSyncListGroup):
_translate = QtCore.QCoreApplication.translate
self.list.setSortingEnabled(True)
self.select_all_button.setText(_translate("EGLSyncListGroup", "Select all"))
self.select_none_button.setText(_translate("EGLSyncListGroup", "Select none"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
EGLSyncListGroup = QtWidgets.QGroupBox()
ui = Ui_EGLSyncListGroup()
ui.setupUi(EGLSyncListGroup)
EGLSyncListGroup.show()
sys.exit(app.exec_())

View file

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>EGLSyncListGroup</class>
<widget class="QGroupBox" name="EGLSyncListGroup">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>461</width>
<height>206</height>
</rect>
</property>
<property name="windowTitle">
<string notr="true">EGLSyncListGroup</string>
</property>
<property name="title">
<string notr="true"/>
</property>
<layout class="QVBoxLayout" name="egl_sync_list_layout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item>
<widget class="QListWidget" name="list">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="spacing">
<number>1</number>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="buttons_widget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="buttons_layout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="select_all_button">
<property name="text">
<string>Select all</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="select_none_button">
<property name="text">
<string>Select none</string>
</property>
</widget>
</item>
<item>
<spacer name="buttons_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>
<item>
<widget class="QPushButton" name="action_button">
<property name="text">
<string notr="true">Action</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View file

@ -1,140 +0,0 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/import_sync/egl_sync_widget.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_EGLSyncGroup(object):
def setupUi(self, EGLSyncGroup):
EGLSyncGroup.setObjectName("EGLSyncGroup")
EGLSyncGroup.resize(814, 702)
EGLSyncGroup.setCheckable(False)
EGLSyncGroup.setChecked(False)
self.egl_sync_layout = QtWidgets.QFormLayout(EGLSyncGroup)
self.egl_sync_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.egl_sync_layout.setObjectName("egl_sync_layout")
self.egl_path_label = QtWidgets.QLabel(EGLSyncGroup)
self.egl_path_label.setObjectName("egl_path_label")
self.egl_sync_layout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.egl_path_label)
self.egl_path_layout = QtWidgets.QHBoxLayout()
self.egl_path_layout.setObjectName("egl_path_layout")
self.egl_sync_layout.setLayout(0, QtWidgets.QFormLayout.FieldRole, self.egl_path_layout)
self.egl_path_info_label = QtWidgets.QLabel(EGLSyncGroup)
self.egl_path_info_label.setObjectName("egl_path_info_label")
self.egl_sync_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.egl_path_info_label)
self.egl_path_info = QtWidgets.QLabel(EGLSyncGroup)
self.egl_path_info.setText("error")
self.egl_path_info.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse)
self.egl_path_info.setObjectName("egl_path_info")
self.egl_sync_layout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.egl_path_info)
self.egl_sync_label = QtWidgets.QLabel(EGLSyncGroup)
self.egl_sync_label.setObjectName("egl_sync_label")
self.egl_sync_layout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.egl_sync_label)
self.egl_sync_check = QtWidgets.QCheckBox(EGLSyncGroup)
self.egl_sync_check.setText("")
self.egl_sync_check.setObjectName("egl_sync_check")
self.egl_sync_layout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.egl_sync_check)
self.import_export_widget = QtWidgets.QWidget(EGLSyncGroup)
self.import_export_widget.setObjectName("import_export_widget")
self.import_export_layout = QtWidgets.QVBoxLayout(self.import_export_widget)
self.import_export_layout.setContentsMargins(0, 0, 0, 0)
self.import_export_layout.setObjectName("import_export_layout")
self.import_group = QtWidgets.QGroupBox(self.import_export_widget)
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_list = QtWidgets.QListWidget(self.import_group)
self.import_list.setAlternatingRowColors(True)
self.import_list.setObjectName("import_list")
self.import_layout.addWidget(self.import_list)
self.import_buttons_widget = QtWidgets.QWidget(self.import_group)
self.import_buttons_widget.setObjectName("import_buttons_widget")
self.import_buttons_layout = QtWidgets.QHBoxLayout(self.import_buttons_widget)
self.import_buttons_layout.setContentsMargins(0, 0, 0, 0)
self.import_buttons_layout.setObjectName("import_buttons_layout")
self.import_select_all_button = QtWidgets.QPushButton(self.import_buttons_widget)
self.import_select_all_button.setObjectName("import_select_all_button")
self.import_buttons_layout.addWidget(self.import_select_all_button)
self.import_select_none_button = QtWidgets.QPushButton(self.import_buttons_widget)
self.import_select_none_button.setObjectName("import_select_none_button")
self.import_buttons_layout.addWidget(self.import_select_none_button)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.import_buttons_layout.addItem(spacerItem)
self.import_button = QtWidgets.QPushButton(self.import_buttons_widget)
self.import_button.setObjectName("import_button")
self.import_buttons_layout.addWidget(self.import_button)
self.import_layout.addWidget(self.import_buttons_widget, 0, QtCore.Qt.AlignLeft)
self.import_export_layout.addWidget(self.import_group)
self.export_group = QtWidgets.QGroupBox(self.import_export_widget)
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_list = QtWidgets.QListWidget(self.export_group)
self.export_list.setAlternatingRowColors(True)
self.export_list.setObjectName("export_list")
self.export_layout.addWidget(self.export_list)
self.export_buttons_widget = QtWidgets.QWidget(self.export_group)
self.export_buttons_widget.setObjectName("export_buttons_widget")
self.export_buttons_layout = QtWidgets.QHBoxLayout(self.export_buttons_widget)
self.export_buttons_layout.setContentsMargins(0, 0, 0, 0)
self.export_buttons_layout.setObjectName("export_buttons_layout")
self.export_select_all_button = QtWidgets.QPushButton(self.export_buttons_widget)
self.export_select_all_button.setObjectName("export_select_all_button")
self.export_buttons_layout.addWidget(self.export_select_all_button)
self.export_select_none_button = QtWidgets.QPushButton(self.export_buttons_widget)
self.export_select_none_button.setObjectName("export_select_none_button")
self.export_buttons_layout.addWidget(self.export_select_none_button)
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.export_buttons_layout.addItem(spacerItem1)
self.export_button = QtWidgets.QPushButton(self.export_buttons_widget)
self.export_button.setObjectName("export_button")
self.export_buttons_layout.addWidget(self.export_button)
self.export_layout.addWidget(self.export_buttons_widget, 0, QtCore.Qt.AlignLeft)
self.import_export_layout.addWidget(self.export_group)
self.egl_sync_layout.setWidget(3, QtWidgets.QFormLayout.SpanningRole, self.import_export_widget)
self.retranslateUi(EGLSyncGroup)
QtCore.QMetaObject.connectSlotsByName(EGLSyncGroup)
def retranslateUi(self, EGLSyncGroup):
_translate = QtCore.QCoreApplication.translate
EGLSyncGroup.setWindowTitle(_translate("EGLSyncGroup", "EGLSyncGroup"))
EGLSyncGroup.setTitle(_translate("EGLSyncGroup", "Sync with Epic Games Launcher"))
self.egl_path_label.setText(_translate("EGLSyncGroup", "Prefix/Manifest path"))
self.egl_path_info_label.setText(_translate("EGLSyncGroup", "Estimated path"))
self.egl_sync_label.setText(_translate("EGLSyncGroup", "Enable automatic sync"))
self.import_group.setTitle(_translate("EGLSyncGroup", "Importable games"))
self.import_label.setText(_translate("EGLSyncGroup", "No games to import from EGS"))
self.import_list.setSortingEnabled(True)
self.import_select_all_button.setText(_translate("EGLSyncGroup", "Select all"))
self.import_select_none_button.setText(_translate("EGLSyncGroup", "Select none"))
self.import_button.setText(_translate("EGLSyncGroup", "Import"))
self.export_group.setTitle(_translate("EGLSyncGroup", "Exportable games"))
self.export_label.setText(_translate("EGLSyncGroup", "No games to export to EGS"))
self.export_list.setSortingEnabled(True)
self.export_select_all_button.setText(_translate("EGLSyncGroup", "Select all"))
self.export_select_none_button.setText(_translate("EGLSyncGroup", "Select none"))
self.export_button.setText(_translate("EGLSyncGroup", "Export"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
EGLSyncGroup = QtWidgets.QGroupBox()
ui = Ui_EGLSyncGroup()
ui.setupUi(EGLSyncGroup)
EGLSyncGroup.show()
sys.exit(app.exec_())

View file

@ -1,254 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>EGLSyncGroup</class>
<widget class="QGroupBox" name="EGLSyncGroup">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>814</width>
<height>702</height>
</rect>
</property>
<property name="windowTitle">
<string>EGLSyncGroup</string>
</property>
<property name="title">
<string>Sync with Epic Games Launcher</string>
</property>
<property name="checkable">
<bool>false</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<layout class="QFormLayout" name="egl_sync_layout">
<property name="labelAlignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<item row="0" column="0">
<widget class="QLabel" name="egl_path_label">
<property name="text">
<string>Prefix/Manifest path</string>
</property>
</widget>
</item>
<item row="0" column="1">
<layout class="QHBoxLayout" name="egl_path_layout"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="egl_path_info_label">
<property name="text">
<string>Estimated path</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="egl_path_info">
<property name="text">
<string notr="true">error</string>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="egl_sync_label">
<property name="text">
<string>Enable automatic sync</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="egl_sync_check">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QWidget" name="import_export_widget" native="true">
<layout class="QVBoxLayout" name="import_export_layout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="import_group">
<property name="title">
<string>Importable games</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="QListWidget" name="import_list">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="spacing">
<number>1</number>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
</widget>
</item>
<item alignment="Qt::AlignLeft">
<widget class="QWidget" name="import_buttons_widget" native="true">
<layout class="QHBoxLayout" name="import_buttons_layout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="import_select_all_button">
<property name="text">
<string>Select all</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="import_select_none_button">
<property name="text">
<string>Select none</string>
</property>
</widget>
</item>
<item>
<spacer name="import_buttons_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>
<item>
<widget class="QPushButton" name="import_button">
<property name="text">
<string>Import</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<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="QListWidget" name="export_list">
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="spacing">
<number>1</number>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
</widget>
</item>
<item alignment="Qt::AlignLeft">
<widget class="QWidget" name="export_buttons_widget" native="true">
<layout class="QHBoxLayout" name="export_buttons_layout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="export_select_all_button">
<property name="text">
<string>Select all</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="export_select_none_button">
<property name="text">
<string>Select none</string>
</property>
</widget>
</item>
<item>
<spacer name="export_buttons_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>
<item>
<widget class="QPushButton" name="export_button">
<property name="text">
<string>Export</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/import_sync/import_widget.ui'
# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/import_sync/import_group.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#