Launcher: Refactor cloud sync dialog to use ButtonDialog base class
This commit is contained in:
parent
08f2d50d4f
commit
89c1a4eaf4
|
@ -1,94 +0,0 @@
|
|||
import datetime
|
||||
import sys
|
||||
from logging import getLogger
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtWidgets import QDialog, QSizePolicy, QLayout, QApplication, QWidget
|
||||
from legendary.core import LegendaryCore
|
||||
from legendary.models.game import InstalledGame
|
||||
|
||||
from rare.ui.components.dialogs.sync_save_dialog import Ui_SyncSaveDialog
|
||||
from rare.ui.components.tabs.games.game_info.sync_widget import Ui_SyncWidget
|
||||
from rare.utils.misc import icon
|
||||
|
||||
logger = getLogger("Cloud Saves")
|
||||
|
||||
|
||||
class CloudSaveDialog(QDialog, Ui_SyncSaveDialog):
|
||||
DOWNLOAD = 2
|
||||
UPLOAD = 1
|
||||
CANCEL = 0
|
||||
SKIP = 3
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
igame: InstalledGame,
|
||||
dt_local: datetime.datetime,
|
||||
dt_remote: datetime.datetime,
|
||||
):
|
||||
super(CloudSaveDialog, self).__init__()
|
||||
self.setupUi(self)
|
||||
|
||||
self.sync_widget = QWidget()
|
||||
self.sync_ui = Ui_SyncWidget()
|
||||
self.sync_ui.setupUi(self.sync_widget)
|
||||
|
||||
self.sync_widget_layout.addWidget(self.sync_widget)
|
||||
|
||||
self.setAttribute(Qt.WA_DeleteOnClose, True)
|
||||
self.setWindowFlags(Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint)
|
||||
|
||||
self.status = self.CANCEL
|
||||
|
||||
self.title_label.setText(f"<h4>{self.title_label.text()} <b>{igame.title}</b></h4>")
|
||||
|
||||
newer = self.tr("Newer")
|
||||
if dt_remote and dt_local:
|
||||
self.sync_ui.age_label_local.setText(
|
||||
f"<b>{newer}</b>" if dt_remote < dt_local else " "
|
||||
)
|
||||
self.sync_ui.age_label_remote.setText(
|
||||
f"<b>{newer}</b>" if dt_remote > dt_local else " "
|
||||
)
|
||||
# Set status, if one of them is None
|
||||
elif dt_remote and not dt_local:
|
||||
self.status = self.DOWNLOAD
|
||||
elif not dt_remote and dt_local:
|
||||
self.status = self.UPLOAD
|
||||
else:
|
||||
self.status = self.SKIP
|
||||
|
||||
self.sync_ui.date_info_local.setText(dt_local.strftime("%A, %d. %B %Y %X") if dt_local else "None")
|
||||
self.sync_ui.date_info_remote.setText(dt_remote.strftime("%A, %d. %B %Y %X") if dt_remote else "None")
|
||||
|
||||
self.sync_ui.icon_local.setPixmap(icon("mdi.harddisk", "fa.desktop").pixmap(128, 128))
|
||||
self.sync_ui.icon_remote.setPixmap(icon("mdi.cloud-outline", "ei.cloud").pixmap(128, 128))
|
||||
|
||||
self.sync_ui.upload_button.clicked.connect(lambda: self.btn_clicked(self.UPLOAD))
|
||||
self.sync_ui.download_button.clicked.connect(lambda: self.btn_clicked(self.DOWNLOAD))
|
||||
self.cancel_button.clicked.connect(self.close)
|
||||
|
||||
self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
|
||||
self.layout().setSizeConstraint(QLayout.SetFixedSize)
|
||||
|
||||
def get_action(self):
|
||||
if self.status == self.SKIP:
|
||||
return self.SKIP
|
||||
self.exec_()
|
||||
return self.status
|
||||
|
||||
def btn_clicked(self, status):
|
||||
self.status = status
|
||||
self.close()
|
||||
|
||||
|
||||
def test_dialog():
|
||||
app = QApplication(sys.argv)
|
||||
core = LegendaryCore()
|
||||
dlg = CloudSaveDialog(core.get_installed_list()[0], datetime.datetime.now(),
|
||||
datetime.datetime.strptime("2021,1", "%Y,%M"))
|
||||
print(dlg.get_action())
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_dialog()
|
|
@ -13,15 +13,15 @@ from PyQt5.QtWidgets import (
|
|||
QMessageBox,
|
||||
QGroupBox,
|
||||
QVBoxLayout,
|
||||
QSpacerItem,
|
||||
QSpacerItem, QFormLayout,
|
||||
)
|
||||
from legendary.models.game import SaveGameStatus
|
||||
|
||||
from rare.models.game import RareGame
|
||||
from rare.shared import RareCore
|
||||
from rare.shared.workers.wine_resolver import WineResolver
|
||||
from rare.ui.components.tabs.games.game_info.cloud_widget import Ui_CloudWidget
|
||||
from rare.ui.components.tabs.games.game_info.sync_widget import Ui_SyncWidget
|
||||
from rare.ui.components.tabs.games.game_info.cloud_settings_widget import Ui_CloudSettingsWidget
|
||||
from rare.ui.components.tabs.games.game_info.cloud_sync_widget import Ui_CloudSyncWidget
|
||||
from rare.utils.misc import icon
|
||||
from rare.widgets.indicator_edit import PathEdit, IndicatorReasonsCommon
|
||||
from rare.widgets.loading_widget import LoadingWidget
|
||||
|
@ -35,7 +35,7 @@ class CloudSaves(QWidget, SideTabContents):
|
|||
super(CloudSaves, self).__init__(parent=parent)
|
||||
|
||||
self.sync_widget = QWidget(self)
|
||||
self.sync_ui = Ui_SyncWidget()
|
||||
self.sync_ui = Ui_CloudSyncWidget()
|
||||
self.sync_ui.setupUi(self.sync_widget)
|
||||
|
||||
self.info_label = QLabel(self.tr("<b>This game doesn't support cloud saves</b>"))
|
||||
|
@ -56,7 +56,7 @@ class CloudSaves(QWidget, SideTabContents):
|
|||
self.rgame: RareGame = None
|
||||
|
||||
self.cloud_widget = QGroupBox(self)
|
||||
self.cloud_ui = Ui_CloudWidget()
|
||||
self.cloud_ui = Ui_CloudSettingsWidget()
|
||||
self.cloud_ui.setupUi(self.cloud_widget)
|
||||
|
||||
self.cloud_save_path_edit = PathEdit(
|
||||
|
@ -66,16 +66,20 @@ class CloudSaves(QWidget, SideTabContents):
|
|||
edit_func=self.edit_save_path,
|
||||
save_func=self.save_save_path,
|
||||
)
|
||||
self.cloud_ui.cloud_layout.addRow(QLabel(self.tr("Save path")), self.cloud_save_path_edit)
|
||||
self.cloud_ui.main_layout.setWidget(
|
||||
self.cloud_ui.main_layout.getWidgetPosition(self.cloud_ui.path_label)[0],
|
||||
QFormLayout.FieldRole,
|
||||
self.cloud_save_path_edit
|
||||
)
|
||||
|
||||
self.compute_save_path_button = QPushButton(icon("fa.magic"), self.tr("Calculate path"))
|
||||
self.compute_save_path_button.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
|
||||
self.compute_save_path_button.clicked.connect(self.compute_save_path)
|
||||
self.cloud_ui.cloud_layout.addRow(None, self.compute_save_path_button)
|
||||
self.cloud_ui.main_layout.addRow(None, self.compute_save_path_button)
|
||||
|
||||
self.cloud_ui.cloud_sync.stateChanged.connect(
|
||||
self.cloud_ui.sync_check.stateChanged.connect(
|
||||
lambda: self.settings.setValue(
|
||||
f"{self.rgame.app_name}/auto_sync_cloud", self.cloud_ui.cloud_sync.isChecked()
|
||||
f"{self.rgame.app_name}/auto_sync_cloud", self.cloud_ui.sync_check.isChecked()
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -172,7 +176,7 @@ class CloudSaves(QWidget, SideTabContents):
|
|||
self.sync_ui.age_label_local.setText("None")
|
||||
self.sync_ui.date_info_remote.setText("None")
|
||||
self.sync_ui.age_label_remote.setText("None")
|
||||
self.cloud_ui.cloud_sync.setChecked(False)
|
||||
self.cloud_ui.sync_check.setChecked(False)
|
||||
self.cloud_save_path_edit.setText("")
|
||||
return
|
||||
|
||||
|
@ -203,9 +207,9 @@ class CloudSaves(QWidget, SideTabContents):
|
|||
self.sync_ui.upload_button.setDisabled(not dt_local)
|
||||
self.sync_ui.download_button.setDisabled(not dt_remote)
|
||||
|
||||
self.cloud_ui.cloud_sync.blockSignals(True)
|
||||
self.cloud_ui.cloud_sync.setChecked(self.rgame.auto_sync_saves)
|
||||
self.cloud_ui.cloud_sync.blockSignals(False)
|
||||
self.cloud_ui.sync_check.blockSignals(True)
|
||||
self.cloud_ui.sync_check.setChecked(self.rgame.auto_sync_saves)
|
||||
self.cloud_ui.sync_check.blockSignals(False)
|
||||
|
||||
self.cloud_save_path_edit.setText(self.rgame.save_path if self.rgame.save_path else "")
|
||||
if platform.system() == "Windows" and not self.rgame.save_path:
|
||||
|
|
|
@ -14,11 +14,11 @@ from PyQt5.QtNetwork import QLocalServer, QLocalSocket
|
|||
from PyQt5.QtWidgets import QApplication
|
||||
from legendary.models.game import SaveGameStatus
|
||||
|
||||
from rare.components.dialogs.cloud_save_dialog import CloudSaveDialog
|
||||
from rare.lgndr.core import LegendaryCore
|
||||
from rare.models.base_game import RareGameSlim
|
||||
from rare.models.launcher import ErrorModel, Actions, FinishedModel, BaseModel, StateChangedModel
|
||||
from rare.widgets.rare_app import RareApp, RareAppException
|
||||
from .cloud_sync_dialog import CloudSyncDialog, CloudSyncDialogResult
|
||||
from .console import Console
|
||||
from .lgd_helper import get_launch_args, InitArgs, get_configured_process, LaunchArgs, GameArgsError
|
||||
|
||||
|
@ -45,9 +45,9 @@ class PreLaunchThread(QRunnable):
|
|||
|
||||
def run(self) -> None:
|
||||
self.logger.info(f"Sync action: {self.sync_action}")
|
||||
if self.sync_action == CloudSaveDialog.UPLOAD:
|
||||
if self.sync_action == CloudSyncDialogResult.UPLOAD:
|
||||
self.rgame.upload_saves(False)
|
||||
elif self.sync_action == CloudSaveDialog.DOWNLOAD:
|
||||
elif self.sync_action == CloudSyncDialogResult.DOWNLOAD:
|
||||
self.rgame.download_saves(False)
|
||||
else:
|
||||
self.logger.info("No sync action")
|
||||
|
@ -212,15 +212,22 @@ class RareLauncher(RareApp):
|
|||
state, (dt_local, dt_remote) = self.rgame.save_game_state
|
||||
|
||||
if state == SaveGameStatus.LOCAL_NEWER and not self.no_sync_on_exit:
|
||||
action = CloudSaveDialog.UPLOAD
|
||||
action = CloudSyncDialogResult.UPLOAD
|
||||
self.__check_saved_finished(exit_code, action)
|
||||
else:
|
||||
action = CloudSaveDialog(self.rgame.igame, dt_local, dt_remote).get_action()
|
||||
sync_dialog = CloudSyncDialog(self.rgame.igame, dt_local, dt_remote)
|
||||
sync_dialog.result_ready.connect(lambda a: self.__check_saved_finished(exit_code, a))
|
||||
sync_dialog.open()
|
||||
|
||||
if action == CloudSaveDialog.UPLOAD:
|
||||
@pyqtSlot(int, int)
|
||||
@pyqtSlot(int, CloudSyncDialogResult)
|
||||
def __check_saved_finished(self, exit_code, action):
|
||||
action = CloudSyncDialogResult(action)
|
||||
if action == CloudSyncDialogResult.UPLOAD:
|
||||
if self.console:
|
||||
self.console.log("Uploading saves...")
|
||||
self.rgame.upload_saves()
|
||||
elif action == CloudSaveDialog.DOWNLOAD:
|
||||
elif action == CloudSyncDialogResult.DOWNLOAD:
|
||||
if self.console:
|
||||
self.console.log("Downloading saves...")
|
||||
self.rgame.download_saves()
|
||||
|
@ -325,14 +332,20 @@ class RareLauncher(RareApp):
|
|||
return
|
||||
|
||||
_, (dt_local, dt_remote) = self.rgame.save_game_state
|
||||
dlg = CloudSaveDialog(self.rgame.igame, dt_local, dt_remote)
|
||||
action = dlg.get_action()
|
||||
if action == CloudSaveDialog.CANCEL:
|
||||
sync_dialog = CloudSyncDialog(self.rgame.igame, dt_local, dt_remote)
|
||||
sync_dialog.result_ready.connect(self.__sync_ready)
|
||||
sync_dialog.open()
|
||||
|
||||
@pyqtSlot(int)
|
||||
@pyqtSlot(CloudSyncDialogResult)
|
||||
def __sync_ready(self, action: CloudSyncDialogResult):
|
||||
action = CloudSyncDialogResult(action)
|
||||
if action == CloudSyncDialogResult.CANCEL:
|
||||
self.no_sync_on_exit = True
|
||||
if self.console:
|
||||
if action == CloudSaveDialog.DOWNLOAD:
|
||||
if action == CloudSyncDialogResult.DOWNLOAD:
|
||||
self.console.log("Downloading saves...")
|
||||
elif action == CloudSaveDialog.UPLOAD:
|
||||
elif action == CloudSyncDialogResult.UPLOAD:
|
||||
self.console.log("Uploading saves...")
|
||||
self.start_prepare(action)
|
||||
|
||||
|
|
103
rare/launcher/cloud_sync_dialog.py
Normal file
103
rare/launcher/cloud_sync_dialog.py
Normal file
|
@ -0,0 +1,103 @@
|
|||
import sys
|
||||
from datetime import datetime
|
||||
from enum import IntEnum
|
||||
from logging import getLogger
|
||||
|
||||
from PyQt5.QtCore import pyqtSignal, pyqtSlot
|
||||
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QDialog
|
||||
from legendary.core import LegendaryCore
|
||||
from legendary.models.game import InstalledGame
|
||||
|
||||
from rare.ui.components.tabs.games.game_info.cloud_sync_widget import Ui_CloudSyncWidget
|
||||
from rare.utils.misc import icon
|
||||
from rare.widgets.dialogs import ButtonDialog, dialog_title_game
|
||||
|
||||
logger = getLogger("CloudSyncDialog")
|
||||
|
||||
|
||||
class CloudSyncDialogResult(IntEnum):
|
||||
DOWNLOAD = 2
|
||||
UPLOAD = 1
|
||||
CANCEL = 0
|
||||
SKIP = 3
|
||||
|
||||
|
||||
class CloudSyncDialog(ButtonDialog):
|
||||
result_ready: pyqtSignal = pyqtSignal(CloudSyncDialogResult)
|
||||
|
||||
def __init__(self, igame: InstalledGame, dt_local: datetime, dt_remote: datetime, parent=None):
|
||||
super(CloudSyncDialog, self).__init__(parent=parent)
|
||||
header = self.tr("Cloud saves for")
|
||||
self.setWindowTitle(dialog_title_game(header, igame.title))
|
||||
|
||||
title_label = QLabel(f"<h4>{dialog_title_game(header, igame.title)}</h4>", self)
|
||||
|
||||
sync_widget = QWidget(self)
|
||||
self.sync_ui = Ui_CloudSyncWidget()
|
||||
self.sync_ui.setupUi(sync_widget)
|
||||
|
||||
layout = QVBoxLayout()
|
||||
layout.addWidget(title_label)
|
||||
layout.addWidget(sync_widget)
|
||||
|
||||
self.accept_button.setText(self.tr("Skip"))
|
||||
self.accept_button.setIcon(icon("fa.chevron-right"))
|
||||
|
||||
self.setCentralLayout(layout)
|
||||
|
||||
self.status = CloudSyncDialogResult.CANCEL
|
||||
|
||||
newer = self.tr("Newer")
|
||||
if dt_remote and dt_local:
|
||||
self.sync_ui.age_label_local.setText(f"<b>{newer}</b>" if dt_remote < dt_local else " ")
|
||||
self.sync_ui.age_label_remote.setText(f"<b>{newer}</b>" if dt_remote > dt_local else " ")
|
||||
# Set status, if one of them is None
|
||||
elif dt_remote and not dt_local:
|
||||
self.status = CloudSyncDialogResult.DOWNLOAD
|
||||
elif not dt_remote and dt_local:
|
||||
self.status = CloudSyncDialogResult.UPLOAD
|
||||
else:
|
||||
self.status = CloudSyncDialogResult.SKIP
|
||||
|
||||
self.sync_ui.date_info_local.setText(dt_local.strftime("%A, %d. %B %Y %X") if dt_local else "None")
|
||||
self.sync_ui.date_info_remote.setText(dt_remote.strftime("%A, %d. %B %Y %X") if dt_remote else "None")
|
||||
|
||||
self.sync_ui.icon_local.setPixmap(icon("mdi.harddisk", "fa.desktop").pixmap(128, 128))
|
||||
self.sync_ui.icon_remote.setPixmap(icon("mdi.cloud-outline", "ei.cloud").pixmap(128, 128))
|
||||
|
||||
self.sync_ui.upload_button.clicked.connect(self.__on_upload)
|
||||
self.sync_ui.download_button.clicked.connect(self.__on_download)
|
||||
|
||||
if self.status == CloudSyncDialogResult.SKIP:
|
||||
self.accept()
|
||||
|
||||
def __on_upload(self):
|
||||
self.status = CloudSyncDialogResult.UPLOAD
|
||||
self.done(QDialog.Accepted)
|
||||
|
||||
def __on_download(self):
|
||||
self.status = CloudSyncDialogResult.DOWNLOAD
|
||||
self.done(QDialog.Accepted)
|
||||
|
||||
def done_handler(self):
|
||||
self.result_ready.emit(self.status)
|
||||
|
||||
def accept_handler(self):
|
||||
self.status = CloudSyncDialogResult.SKIP
|
||||
|
||||
def reject_handler(self):
|
||||
self.status = CloudSyncDialogResult.CANCEL
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = QApplication(sys.argv)
|
||||
core = LegendaryCore()
|
||||
|
||||
@pyqtSlot(int)
|
||||
def __callback(status: int):
|
||||
print(repr(CloudSyncDialogResult(status)))
|
||||
|
||||
dlg = CloudSyncDialog(core.get_installed_list()[0], datetime.now(), datetime.strptime("2021,1", "%Y,%M"))
|
||||
dlg.result_ready.connect(__callback)
|
||||
dlg.open()
|
||||
app.exec()
|
|
@ -14,7 +14,7 @@ from PyQt5.QtWidgets import (
|
|||
QSizePolicy, QTableWidgetItem, QHeaderView, QApplication,
|
||||
)
|
||||
|
||||
from rare.ui.components.extra.console_env import Ui_ConsoleEnv
|
||||
from rare.ui.launcher.console_env import Ui_ConsoleEnv
|
||||
|
||||
|
||||
class Console(QDialog):
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'rare/ui/components/dialogs/sync_save_dialog.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.7
|
||||
#
|
||||
# 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_SyncSaveDialog(object):
|
||||
def setupUi(self, SyncSaveDialog):
|
||||
SyncSaveDialog.setObjectName("SyncSaveDialog")
|
||||
SyncSaveDialog.resize(648, 394)
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(SyncSaveDialog)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.title_label = QtWidgets.QLabel(SyncSaveDialog)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.title_label.sizePolicy().hasHeightForWidth())
|
||||
self.title_label.setSizePolicy(sizePolicy)
|
||||
self.title_label.setObjectName("title_label")
|
||||
self.verticalLayout.addWidget(self.title_label)
|
||||
self.sync_widget_layout = QtWidgets.QHBoxLayout()
|
||||
self.sync_widget_layout.setObjectName("sync_widget_layout")
|
||||
self.verticalLayout.addLayout(self.sync_widget_layout)
|
||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
self.horizontalLayout_2.addItem(spacerItem)
|
||||
self.cancel_button = QtWidgets.QPushButton(SyncSaveDialog)
|
||||
self.cancel_button.setObjectName("cancel_button")
|
||||
self.horizontalLayout_2.addWidget(self.cancel_button)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout_2)
|
||||
|
||||
self.retranslateUi(SyncSaveDialog)
|
||||
|
||||
def retranslateUi(self, SyncSaveDialog):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
SyncSaveDialog.setWindowTitle(_translate("SyncSaveDialog", "Sync saves with cloud"))
|
||||
self.title_label.setText(_translate("SyncSaveDialog", "Select save, you want to use for "))
|
||||
self.cancel_button.setText(_translate("SyncSaveDialog", "Cancel"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
SyncSaveDialog = QtWidgets.QDialog()
|
||||
ui = Ui_SyncSaveDialog()
|
||||
ui.setupUi(SyncSaveDialog)
|
||||
SyncSaveDialog.show()
|
||||
sys.exit(app.exec_())
|
|
@ -1,61 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>SyncSaveDialog</class>
|
||||
<widget class="QDialog" name="SyncSaveDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>648</width>
|
||||
<height>394</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Sync saves with cloud</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="title_label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Select save, you want to use for </string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="sync_widget_layout"/>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<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="cancel_button">
|
||||
<property name="text">
|
||||
<string>Cancel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -0,0 +1,52 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/game_info/cloud_settings_widget.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.10
|
||||
#
|
||||
# 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_CloudSettingsWidget(object):
|
||||
def setupUi(self, CloudSettingsWidget):
|
||||
CloudSettingsWidget.setObjectName("CloudSettingsWidget")
|
||||
CloudSettingsWidget.resize(388, 78)
|
||||
CloudSettingsWidget.setWindowTitle("CloudSettingsWidget")
|
||||
self.main_layout = QtWidgets.QFormLayout(CloudSettingsWidget)
|
||||
self.main_layout.setLabelAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.main_layout.setObjectName("main_layout")
|
||||
self.sync_label = QtWidgets.QLabel(CloudSettingsWidget)
|
||||
self.sync_label.setObjectName("sync_label")
|
||||
self.main_layout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.sync_label)
|
||||
self.sync_check = QtWidgets.QCheckBox(CloudSettingsWidget)
|
||||
font = QtGui.QFont()
|
||||
font.setItalic(True)
|
||||
self.sync_check.setFont(font)
|
||||
self.sync_check.setText("Automatically synchronize saves with the cloud")
|
||||
self.sync_check.setObjectName("sync_check")
|
||||
self.main_layout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.sync_check)
|
||||
self.path_label = QtWidgets.QLabel(CloudSettingsWidget)
|
||||
self.path_label.setObjectName("path_label")
|
||||
self.main_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.path_label)
|
||||
|
||||
self.retranslateUi(CloudSettingsWidget)
|
||||
|
||||
def retranslateUi(self, CloudSettingsWidget):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
CloudSettingsWidget.setTitle(_translate("CloudSettingsWidget", "Settings"))
|
||||
self.sync_label.setText(_translate("CloudSettingsWidget", "Enable sync"))
|
||||
self.path_label.setText(_translate("CloudSettingsWidget", "Saves path"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
CloudSettingsWidget = QtWidgets.QGroupBox()
|
||||
ui = Ui_CloudSettingsWidget()
|
||||
ui.setupUi(CloudSettingsWidget)
|
||||
CloudSettingsWidget.show()
|
||||
sys.exit(app.exec_())
|
|
@ -0,0 +1,53 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CloudSettingsWidget</class>
|
||||
<widget class="QGroupBox" name="CloudSettingsWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>388</width>
|
||||
<height>78</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string notr="true">CloudSettingsWidget</string>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Settings</string>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="main_layout">
|
||||
<property name="labelAlignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="sync_label">
|
||||
<property name="text">
|
||||
<string>Enable sync</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QCheckBox" name="sync_check">
|
||||
<property name="font">
|
||||
<font>
|
||||
<italic>true</italic>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">Automatically synchronize saves with the cloud</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="path_label">
|
||||
<property name="text">
|
||||
<string>Saves path</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -1,8 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/game_info/sync_widget.ui'
|
||||
# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/game_info/cloud_sync_widget.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.9
|
||||
# Created by: PyQt5 UI code generator 5.15.10
|
||||
#
|
||||
# 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.
|
||||
|
@ -11,29 +11,29 @@
|
|||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
|
||||
class Ui_SyncWidget(object):
|
||||
def setupUi(self, SyncWidget):
|
||||
SyncWidget.setObjectName("SyncWidget")
|
||||
SyncWidget.resize(438, 137)
|
||||
class Ui_CloudSyncWidget(object):
|
||||
def setupUi(self, CloudSyncWidget):
|
||||
CloudSyncWidget.setObjectName("CloudSyncWidget")
|
||||
CloudSyncWidget.resize(438, 137)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(SyncWidget.sizePolicy().hasHeightForWidth())
|
||||
SyncWidget.setSizePolicy(sizePolicy)
|
||||
SyncWidget.setWindowTitle("SyncWidget")
|
||||
self.sync_layout = QtWidgets.QHBoxLayout(SyncWidget)
|
||||
self.sync_layout.setContentsMargins(0, 0, 0, 0)
|
||||
self.sync_layout.setObjectName("sync_layout")
|
||||
self.local_gb = QtWidgets.QGroupBox(SyncWidget)
|
||||
self.local_gb.setObjectName("local_gb")
|
||||
self.local_layout = QtWidgets.QVBoxLayout(self.local_gb)
|
||||
sizePolicy.setHeightForWidth(CloudSyncWidget.sizePolicy().hasHeightForWidth())
|
||||
CloudSyncWidget.setSizePolicy(sizePolicy)
|
||||
CloudSyncWidget.setWindowTitle("SyncWidget")
|
||||
self.main_layout = QtWidgets.QHBoxLayout(CloudSyncWidget)
|
||||
self.main_layout.setContentsMargins(0, 0, 0, 0)
|
||||
self.main_layout.setObjectName("main_layout")
|
||||
self.local_group = QtWidgets.QGroupBox(CloudSyncWidget)
|
||||
self.local_group.setObjectName("local_group")
|
||||
self.local_layout = QtWidgets.QVBoxLayout(self.local_group)
|
||||
self.local_layout.setObjectName("local_layout")
|
||||
self.date_info_local = QtWidgets.QLabel(self.local_gb)
|
||||
self.date_info_local = QtWidgets.QLabel(self.local_group)
|
||||
self.date_info_local.setText("")
|
||||
self.date_info_local.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.date_info_local.setObjectName("date_info_local")
|
||||
self.local_layout.addWidget(self.date_info_local)
|
||||
self.icon_local = QtWidgets.QLabel(self.local_gb)
|
||||
self.icon_local = QtWidgets.QLabel(self.local_group)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
|
@ -43,26 +43,26 @@ class Ui_SyncWidget(object):
|
|||
self.icon_local.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.icon_local.setObjectName("icon_local")
|
||||
self.local_layout.addWidget(self.icon_local)
|
||||
self.age_label_local = QtWidgets.QLabel(self.local_gb)
|
||||
self.age_label_local = QtWidgets.QLabel(self.local_group)
|
||||
self.age_label_local.setText("")
|
||||
self.age_label_local.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.age_label_local.setObjectName("age_label_local")
|
||||
self.local_layout.addWidget(self.age_label_local)
|
||||
self.upload_button = QtWidgets.QPushButton(self.local_gb)
|
||||
self.upload_button = QtWidgets.QPushButton(self.local_group)
|
||||
self.upload_button.setMinimumSize(QtCore.QSize(192, 0))
|
||||
self.upload_button.setObjectName("upload_button")
|
||||
self.local_layout.addWidget(self.upload_button)
|
||||
self.sync_layout.addWidget(self.local_gb)
|
||||
self.cloud_gb = QtWidgets.QGroupBox(SyncWidget)
|
||||
self.cloud_gb.setObjectName("cloud_gb")
|
||||
self.cloud_layout = QtWidgets.QVBoxLayout(self.cloud_gb)
|
||||
self.main_layout.addWidget(self.local_group)
|
||||
self.cloud_group = QtWidgets.QGroupBox(CloudSyncWidget)
|
||||
self.cloud_group.setObjectName("cloud_group")
|
||||
self.cloud_layout = QtWidgets.QVBoxLayout(self.cloud_group)
|
||||
self.cloud_layout.setObjectName("cloud_layout")
|
||||
self.date_info_remote = QtWidgets.QLabel(self.cloud_gb)
|
||||
self.date_info_remote = QtWidgets.QLabel(self.cloud_group)
|
||||
self.date_info_remote.setText("")
|
||||
self.date_info_remote.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.date_info_remote.setObjectName("date_info_remote")
|
||||
self.cloud_layout.addWidget(self.date_info_remote)
|
||||
self.icon_remote = QtWidgets.QLabel(self.cloud_gb)
|
||||
self.icon_remote = QtWidgets.QLabel(self.cloud_group)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
|
@ -72,32 +72,32 @@ class Ui_SyncWidget(object):
|
|||
self.icon_remote.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.icon_remote.setObjectName("icon_remote")
|
||||
self.cloud_layout.addWidget(self.icon_remote)
|
||||
self.age_label_remote = QtWidgets.QLabel(self.cloud_gb)
|
||||
self.age_label_remote = QtWidgets.QLabel(self.cloud_group)
|
||||
self.age_label_remote.setText("")
|
||||
self.age_label_remote.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.age_label_remote.setObjectName("age_label_remote")
|
||||
self.cloud_layout.addWidget(self.age_label_remote)
|
||||
self.download_button = QtWidgets.QPushButton(self.cloud_gb)
|
||||
self.download_button = QtWidgets.QPushButton(self.cloud_group)
|
||||
self.download_button.setMinimumSize(QtCore.QSize(192, 0))
|
||||
self.download_button.setObjectName("download_button")
|
||||
self.cloud_layout.addWidget(self.download_button)
|
||||
self.sync_layout.addWidget(self.cloud_gb)
|
||||
self.main_layout.addWidget(self.cloud_group)
|
||||
|
||||
self.retranslateUi(SyncWidget)
|
||||
self.retranslateUi(CloudSyncWidget)
|
||||
|
||||
def retranslateUi(self, SyncWidget):
|
||||
def retranslateUi(self, CloudSyncWidget):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
self.local_gb.setTitle(_translate("SyncWidget", "Local"))
|
||||
self.upload_button.setText(_translate("SyncWidget", "Upload"))
|
||||
self.cloud_gb.setTitle(_translate("SyncWidget", "Cloud"))
|
||||
self.download_button.setText(_translate("SyncWidget", "Download"))
|
||||
self.local_group.setTitle(_translate("CloudSyncWidget", "Local"))
|
||||
self.upload_button.setText(_translate("CloudSyncWidget", "Upload"))
|
||||
self.cloud_group.setTitle(_translate("CloudSyncWidget", "Cloud"))
|
||||
self.download_button.setText(_translate("CloudSyncWidget", "Download"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
SyncWidget = QtWidgets.QWidget()
|
||||
ui = Ui_SyncWidget()
|
||||
ui.setupUi(SyncWidget)
|
||||
SyncWidget.show()
|
||||
CloudSyncWidget = QtWidgets.QWidget()
|
||||
ui = Ui_CloudSyncWidget()
|
||||
ui.setupUi(CloudSyncWidget)
|
||||
CloudSyncWidget.show()
|
||||
sys.exit(app.exec_())
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>SyncWidget</class>
|
||||
<widget class="QWidget" name="SyncWidget">
|
||||
<class>CloudSyncWidget</class>
|
||||
<widget class="QWidget" name="CloudSyncWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
|
@ -19,7 +19,7 @@
|
|||
<property name="windowTitle">
|
||||
<string notr="true">SyncWidget</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="sync_layout">
|
||||
<layout class="QHBoxLayout" name="main_layout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
|
@ -33,7 +33,7 @@
|
|||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="local_gb">
|
||||
<widget class="QGroupBox" name="local_group">
|
||||
<property name="title">
|
||||
<string>Local</string>
|
||||
</property>
|
||||
|
@ -91,7 +91,7 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="cloud_gb">
|
||||
<widget class="QGroupBox" name="cloud_group">
|
||||
<property name="title">
|
||||
<string>Cloud</string>
|
||||
</property>
|
|
@ -1,44 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'rare/ui/components/tabs/games/game_info/cloud_widget.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.7
|
||||
#
|
||||
# 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_CloudWidget(object):
|
||||
def setupUi(self, CloudWidget):
|
||||
CloudWidget.setObjectName("CloudWidget")
|
||||
CloudWidget.resize(251, 93)
|
||||
CloudWidget.setWindowTitle("GroupBox")
|
||||
self.cloud_layout = QtWidgets.QFormLayout(CloudWidget)
|
||||
self.cloud_layout.setObjectName("cloud_layout")
|
||||
self.cloud_sync_label = QtWidgets.QLabel(CloudWidget)
|
||||
self.cloud_sync_label.setObjectName("cloud_sync_label")
|
||||
self.cloud_layout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.cloud_sync_label)
|
||||
self.cloud_sync = QtWidgets.QCheckBox(CloudWidget)
|
||||
self.cloud_sync.setText("")
|
||||
self.cloud_sync.setObjectName("cloud_sync")
|
||||
self.cloud_layout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.cloud_sync)
|
||||
|
||||
self.retranslateUi(CloudWidget)
|
||||
|
||||
def retranslateUi(self, CloudWidget):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
CloudWidget.setTitle(_translate("CloudWidget", "Options"))
|
||||
self.cloud_sync_label.setText(_translate("CloudWidget", "Sync with cloud"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
CloudWidget = QtWidgets.QGroupBox()
|
||||
ui = Ui_CloudWidget()
|
||||
ui.setupUi(CloudWidget)
|
||||
CloudWidget.show()
|
||||
sys.exit(app.exec_())
|
|
@ -1,38 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>CloudWidget</class>
|
||||
<widget class="QGroupBox" name="CloudWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>251</width>
|
||||
<height>93</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string notr="true">GroupBox</string>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Options</string>
|
||||
</property>
|
||||
<layout class="QFormLayout" name="cloud_layout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="cloud_sync_label">
|
||||
<property name="text">
|
||||
<string>Sync with cloud</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QCheckBox" name="cloud_sync">
|
||||
<property name="text">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Loading…
Reference in a new issue