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:
parent
d8f39857db
commit
458e233327
|
@ -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>")
|
||||
|
|
|
@ -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):
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
|
|
67
rare/ui/components/tabs/games/import_sync/egl_sync_group.py
Normal file
67
rare/ui/components/tabs/games/import_sync/egl_sync_group.py
Normal 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_())
|
77
rare/ui/components/tabs/games/import_sync/egl_sync_group.ui
Normal file
77
rare/ui/components/tabs/games/import_sync/egl_sync_group.ui
Normal 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>
|
|
@ -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_())
|
102
rare/ui/components/tabs/games/import_sync/egl_sync_list_group.ui
Normal file
102
rare/ui/components/tabs/games/import_sync/egl_sync_list_group.ui
Normal 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>
|
|
@ -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_())
|
|
@ -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>
|
|
@ -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
|
||||
#
|
Loading…
Reference in a new issue