From 145bc5f540f01a44dd7fae5b6abd0d0e27e66df9 Mon Sep 17 00:00:00 2001 From: loathingKernel <142770+loathingKernel@users.noreply.github.com> Date: Thu, 23 Jun 2022 17:57:29 +0300 Subject: [PATCH] Use SlidingStackedWidget for the login dialog. Also fixes the login window missing dialog type hints for the window manager. Signed-off-by: loathingKernel <142770+loathingKernel@users.noreply.github.com> --- rare/components/dialogs/launch_dialog.py | 5 +- rare/components/dialogs/login/__init__.py | 76 ++++--- .../components/dialogs/login/browser_login.py | 26 +-- rare/components/dialogs/login/import_login.py | 40 ++-- .../components/dialogs/login/browser_login.py | 63 +++--- .../components/dialogs/login/browser_login.ui | 78 +++---- .../components/dialogs/login/import_login.py | 52 ++--- .../components/dialogs/login/import_login.ui | 193 ++++++++++-------- .../components/dialogs/login/landing_page.py | 86 ++++++++ .../components/dialogs/login/landing_page.ui | 100 +++++++++ .../components/dialogs/login/login_dialog.py | 72 +------ .../components/dialogs/login/login_dialog.ui | 125 ++---------- 12 files changed, 495 insertions(+), 421 deletions(-) create mode 100644 rare/ui/components/dialogs/login/landing_page.py create mode 100644 rare/ui/components/dialogs/login/landing_page.ui diff --git a/rare/components/dialogs/launch_dialog.py b/rare/components/dialogs/launch_dialog.py index 27798a73..bb7e9a27 100644 --- a/rare/components/dialogs/launch_dialog.py +++ b/rare/components/dialogs/launch_dialog.py @@ -91,7 +91,7 @@ class LaunchDialog(QDialog, Ui_LaunchDialog): super(LaunchDialog, self).__init__(parent=parent) self.setupUi(self) self.setAttribute(Qt.WA_DeleteOnClose, True) - self.setWindowFlags(Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint) + self.setWindowFlags(Qt.Window | Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint) self.setWindowModality(Qt.WindowModal) self.core = LegendaryCoreSingleton() @@ -113,7 +113,8 @@ class LaunchDialog(QDialog, Ui_LaunchDialog): except ValueError as e: logger.info(str(e)) # Do not set parent, because it won't show a task bar icon - do_launch = LoginDialog(core=self.core).login() + # Update: Inherit the same parent as LaunchDialog + do_launch = LoginDialog(core=self.core, parent=self.parent()).login() except ConnectionError as e: logger.warning(e) self.args.offline = True diff --git a/rare/components/dialogs/login/__init__.py b/rare/components/dialogs/login/__init__.py index c3a1f9db..d96c2820 100644 --- a/rare/components/dialogs/login/__init__.py +++ b/rare/components/dialogs/login/__init__.py @@ -2,13 +2,15 @@ from dataclasses import dataclass from logging import getLogger from PyQt5.QtCore import Qt -from PyQt5.QtWidgets import QSizePolicy, QLayout, QDialog, QMessageBox +from PyQt5.QtWidgets import QLayout, QDialog, QMessageBox, QFrame from legendary.core import LegendaryCore -from rare.components.dialogs.login.browser_login import BrowserLogin -from rare.components.dialogs.login.import_login import ImportLogin from rare.shared import ArgumentsSingleton from rare.ui.components.dialogs.login.login_dialog import Ui_LoginDialog +from rare.ui.components.dialogs.login.landing_page import Ui_LandingPage +from rare.widgets.sliding_stack import SlidingStackedWidget +from .browser_login import BrowserLogin +from .import_login import ImportLogin logger = getLogger("Login") @@ -20,66 +22,80 @@ class LoginPages: import_egl: int -class LoginDialog(QDialog, Ui_LoginDialog): +class LandingPage(QFrame): + def __init__(self, parent=None): + super(LandingPage, self).__init__(parent=parent) + self.setFrameStyle(self.StyledPanel) + self.ui = Ui_LandingPage() + self.ui.setupUi(self) + + +class LoginDialog(QDialog): logged_in: bool = False pages = LoginPages(landing=0, browser=1, import_egl=2) def __init__(self, core: LegendaryCore, parent=None): super(LoginDialog, self).__init__(parent=parent) - self.setupUi(self) + self.ui = Ui_LoginDialog() + self.ui.setupUi(self) self.setAttribute(Qt.WA_DeleteOnClose, True) - self.setWindowFlags(Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint) + self.setWindowFlags(Qt.Window | Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint) self.setWindowModality(Qt.WindowModal) self.core = core self.args = ArgumentsSingleton() + self.login_stack = SlidingStackedWidget(parent=self) + self.login_stack.setMinimumSize(480, 180) + self.ui.login_stack_layout.addWidget(self.login_stack) + + self.landing_page = LandingPage(self.login_stack) + self.login_stack.insertWidget(self.pages.landing, self.landing_page) + self.browser_page = BrowserLogin(self.core, self.login_stack) self.login_stack.insertWidget(self.pages.browser, self.browser_page) self.browser_page.success.connect(self.login_successful) self.browser_page.changed.connect( - lambda: self.next_button.setEnabled(self.browser_page.is_valid()) + lambda: self.ui.next_button.setEnabled(self.browser_page.is_valid()) ) self.import_page = ImportLogin(self.core, self.login_stack) self.login_stack.insertWidget(self.pages.import_egl, self.import_page) self.import_page.success.connect(self.login_successful) self.import_page.changed.connect( - lambda: self.next_button.setEnabled(self.import_page.is_valid()) + lambda: self.ui.next_button.setEnabled(self.import_page.is_valid()) ) - self.next_button.setEnabled(False) - self.back_button.setEnabled(False) + self.ui.next_button.setEnabled(False) + self.ui.back_button.setEnabled(False) - self.login_browser_radio.clicked.connect( - lambda: self.next_button.setEnabled(True) + self.landing_page.ui.login_browser_radio.clicked.connect( + lambda: self.ui.next_button.setEnabled(True) ) - self.login_import_radio.clicked.connect( - lambda: self.next_button.setEnabled(True) + self.landing_page.ui.login_import_radio.clicked.connect( + lambda: self.ui.next_button.setEnabled(True) ) - self.exit_button.clicked.connect(self.close) - self.back_button.clicked.connect(self.back_clicked) - self.next_button.clicked.connect(self.next_clicked) + self.ui.exit_button.clicked.connect(self.close) + self.ui.back_button.clicked.connect(self.back_clicked) + self.ui.next_button.clicked.connect(self.next_clicked) self.login_stack.setCurrentIndex(self.pages.landing) - self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) self.layout().setSizeConstraint(QLayout.SetFixedSize) - # self.resize(self.minimumSizeHint()) def back_clicked(self): - self.back_button.setEnabled(False) - self.next_button.setEnabled(True) - self.login_stack.setCurrentIndex(self.pages.landing) + self.ui.back_button.setEnabled(False) + self.ui.next_button.setEnabled(True) + self.login_stack.slideInIndex(self.pages.landing) def next_clicked(self): if self.login_stack.currentIndex() == self.pages.landing: - if self.login_browser_radio.isChecked(): - self.login_stack.setCurrentIndex(self.pages.browser) - self.next_button.setEnabled(False) - if self.login_import_radio.isChecked(): - self.login_stack.setCurrentIndex(self.pages.import_egl) - self.next_button.setEnabled(self.import_page.is_valid()) - self.back_button.setEnabled(True) + if self.landing_page.ui.login_browser_radio.isChecked(): + self.login_stack.slideInIndex(self.pages.browser) + self.ui.next_button.setEnabled(False) + if self.landing_page.ui.login_import_radio.isChecked(): + self.login_stack.slideInIndex(self.pages.import_egl) + self.ui.next_button.setEnabled(self.import_page.is_valid()) + self.ui.back_button.setEnabled(True) elif self.login_stack.currentIndex() == self.pages.browser: self.browser_page.do_login() elif self.login_stack.currentIndex() == self.pages.import_egl: @@ -100,6 +116,6 @@ class LoginDialog(QDialog, Ui_LoginDialog): raise ValueError("Login failed.") except ValueError as e: logger.error(str(e)) - self.next_button.setEnabled(False) + self.ui.next_button.setEnabled(False) self.logged_in = False QMessageBox.warning(self, "Error", str(e)) diff --git a/rare/components/dialogs/login/browser_login.py b/rare/components/dialogs/login/browser_login.py index de726d68..34b592af 100644 --- a/rare/components/dialogs/login/browser_login.py +++ b/rare/components/dialogs/login/browser_login.py @@ -4,7 +4,7 @@ from typing import Tuple from PyQt5.QtCore import pyqtSignal, QUrl from PyQt5.QtGui import QDesktopServices -from PyQt5.QtWidgets import QWidget, QApplication +from PyQt5.QtWidgets import QFrame, qApp from legendary.utils import webview_login from legendary.core import LegendaryCore @@ -15,33 +15,35 @@ from rare.utils.utils import icon logger = getLogger("BrowserLogin") -class BrowserLogin(QWidget, Ui_BrowserLogin): +class BrowserLogin(QFrame): success = pyqtSignal() changed = pyqtSignal() login_url = "https://www.epicgames.com/id/login?redirectUrl=https%3A%2F%2Fwww.epicgames.com%2Fid%2Fapi%2Fredirect" def __init__(self, core: LegendaryCore, parent=None): super(BrowserLogin, self).__init__(parent=parent) - self.setupUi(self) + self.setFrameStyle(self.StyledPanel) + self.ui = Ui_BrowserLogin() + self.ui.setupUi(self) self.core = core self.sid_edit = IndicatorLineEdit( placeholder=self.tr("Insert SID here"), edit_func=self.text_changed, parent=self ) - self.link_text.setText(self.login_url) - self.copy_button.setIcon(icon("mdi.content-copy", "fa.copy")) - self.copy_button.clicked.connect(self.copy_link) + self.ui.link_text.setText(self.login_url) + self.ui.copy_button.setIcon(icon("mdi.content-copy", "fa.copy")) + self.ui.copy_button.clicked.connect(self.copy_link) - self.sid_layout.addWidget(self.sid_edit) + self.ui.sid_layout.addWidget(self.sid_edit) - self.open_button.clicked.connect(self.open_browser) + self.ui.open_button.clicked.connect(self.open_browser) self.sid_edit.textChanged.connect(self.changed.emit) def copy_link(self): - clipboard = QApplication.instance().clipboard() + clipboard = qApp.clipboard() clipboard.setText(self.login_url) - self.status_label.setText(self.tr("Copied to clipboard")) + self.ui.status_label.setText(self.tr("Copied to clipboard")) def is_valid(self): return self.sid_edit.is_valid @@ -62,7 +64,7 @@ class BrowserLogin(QWidget, Ui_BrowserLogin): return False, text, "" def do_login(self): - self.status_label.setText(self.tr("Logging in...")) + self.ui.status_label.setText(self.tr("Logging in...")) sid = self.sid_edit.text() try: token = self.core.auth_sid(sid) @@ -72,7 +74,7 @@ class BrowserLogin(QWidget, Ui_BrowserLogin): ) self.success.emit() else: - self.status_label.setText(self.tr("Login failed.")) + self.ui.status_label.setText(self.tr("Login failed.")) logger.warning("Failed to login through browser") except Exception as e: logger.warning(e) diff --git a/rare/components/dialogs/login/import_login.py b/rare/components/dialogs/login/import_login.py index 3859bc11..912debf9 100644 --- a/rare/components/dialogs/login/import_login.py +++ b/rare/components/dialogs/login/import_login.py @@ -3,7 +3,7 @@ from getpass import getuser from logging import getLogger from PyQt5.QtCore import pyqtSignal -from PyQt5.QtWidgets import QWidget, QFileDialog +from PyQt5.QtWidgets import QFrame, QFileDialog from legendary.core import LegendaryCore from rare.ui.components.dialogs.login.import_login import Ui_ImportLogin @@ -11,7 +11,7 @@ from rare.ui.components.dialogs.login.import_login import Ui_ImportLogin logger = getLogger("ImportLogin") -class ImportLogin(QWidget, Ui_ImportLogin): +class ImportLogin(QFrame): success = pyqtSignal() changed = pyqtSignal() if os.name == "nt": @@ -25,7 +25,9 @@ class ImportLogin(QWidget, Ui_ImportLogin): def __init__(self, core: LegendaryCore, parent=None): super(ImportLogin, self).__init__(parent=parent) - self.setupUi(self) + self.setFrameStyle(self.StyledPanel) + self.ui = Ui_ImportLogin() + self.ui.setupUi(self) self.core = core @@ -35,32 +37,32 @@ class ImportLogin(QWidget, Ui_ImportLogin): self.text_egl_notfound = self.tr("Could not find EGL Program Data. ") if os.name == "nt": - if not self.core.egl.appdata_path and os.path.exists(self.egl_data_path): + if not self.core.egl.appdata_path and os.path.exists(self.appdata_path): self.core.egl.appdata_path = self.appdata_path if not self.core.egl.appdata_path: - self.status_label.setText(self.text_egl_notfound) + self.ui.status_label.setText(self.text_egl_notfound) else: - self.status_label.setText(self.text_egl_found) + self.ui.status_label.setText(self.text_egl_found) self.found = True else: - self.info_label.setText( + self.ui.info_label.setText( self.tr( "Please select the Wine prefix" " where Epic Games Launcher is installed. " ) - + self.info_label.text() + + self.ui.info_label.text() ) prefixes = self.get_wine_prefixes() if len(prefixes): - self.prefix_combo.addItems(prefixes) - self.status_label.setText( + self.ui.prefix_combo.addItems(prefixes) + self.ui.status_label.setText( self.tr("Select the Wine prefix you want to import.") ) else: - self.status_label.setText(self.text_egl_notfound) + self.ui.status_label.setText(self.text_egl_notfound) - self.prefix_tool.clicked.connect(self.prefix_path) - self.prefix_combo.editTextChanged.connect(self.changed.emit) + self.ui.prefix_tool.clicked.connect(self.prefix_path) + self.ui.prefix_combo.editTextChanged.connect(self.changed.emit) def get_wine_prefixes(self): possible_prefixes = [ @@ -80,31 +82,31 @@ class ImportLogin(QWidget, Ui_ImportLogin): prefix_dialog.setFileMode(QFileDialog.DirectoryOnly) if prefix_dialog.exec_(): names = prefix_dialog.selectedFiles() - self.prefix_combo.setCurrentText(names[0]) + self.ui.prefix_combo.setCurrentText(names[0]) def is_valid(self): if os.name == "nt": return self.found else: return os.path.exists( - os.path.join(self.prefix_combo.currentText(), self.appdata_path) + os.path.join(self.ui.prefix_combo.currentText(), self.appdata_path) ) def do_login(self): - self.status_label.setText(self.tr("Loading...")) + self.ui.status_label.setText(self.tr("Loading...")) if os.name == "nt": pass else: self.core.egl.appdata_path = os.path.join( - self.prefix_combo.currentText(), self.appdata_path + self.ui.prefix_combo.currentText(), self.appdata_path ) try: if self.core.auth_import(): logger.info(f"Logged in as {self.core.lgd.userdata['displayName']}") self.success.emit() else: - self.status_label.setText(self.tr("Login failed.")) + self.ui.status_label.setText(self.tr("Login failed.")) logger.warning("Failed to import existing session.") except Exception as e: - self.status_label.setText(self.tr("Login failed. {}").format(str(e))) + self.ui.status_label.setText(self.tr("Login failed. {}").format(str(e))) logger.warning(f"Failed to import existing session: {e}") diff --git a/rare/ui/components/dialogs/login/browser_login.py b/rare/ui/components/dialogs/login/browser_login.py index 010ee02b..30fadae5 100644 --- a/rare/ui/components/dialogs/login/browser_login.py +++ b/rare/ui/components/dialogs/login/browser_login.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'rare/ui/components/dialogs/login/browser_login.ui' # -# Created by: PyQt5 UI code generator 5.15.6 +# 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. @@ -14,29 +14,32 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_BrowserLogin(object): def setupUi(self, BrowserLogin): BrowserLogin.setObjectName("BrowserLogin") - BrowserLogin.resize(426, 210) + BrowserLogin.resize(400, 200) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(BrowserLogin.sizePolicy().hasHeightForWidth()) + BrowserLogin.setSizePolicy(sizePolicy) BrowserLogin.setWindowTitle("BrowserLogin") self.browser_layout = QtWidgets.QGridLayout(BrowserLogin) + self.browser_layout.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint) self.browser_layout.setObjectName("browser_layout") - self.horizontalLayout = QtWidgets.QHBoxLayout() - self.horizontalLayout.setObjectName("horizontalLayout") + self.link_layout = QtWidgets.QHBoxLayout() + self.link_layout.setObjectName("link_layout") self.link_text = QtWidgets.QLineEdit(BrowserLogin) self.link_text.setText("") - self.link_text.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) + self.link_text.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) self.link_text.setReadOnly(True) self.link_text.setPlaceholderText("") self.link_text.setObjectName("link_text") - self.horizontalLayout.addWidget(self.link_text) + self.link_layout.addWidget(self.link_text) self.copy_button = QtWidgets.QPushButton(BrowserLogin) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.copy_button.sizePolicy().hasHeightForWidth()) - self.copy_button.setSizePolicy(sizePolicy) self.copy_button.setText("") self.copy_button.setObjectName("copy_button") - self.horizontalLayout.addWidget(self.copy_button) - self.browser_layout.addLayout(self.horizontalLayout, 2, 0, 1, 3) + self.link_layout.addWidget(self.copy_button) + self.browser_layout.addLayout(self.link_layout, 2, 0, 1, 2) + spacerItem = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.browser_layout.addItem(spacerItem, 4, 0, 1, 2) self.open_button = QtWidgets.QPushButton(BrowserLogin) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) @@ -45,33 +48,28 @@ class Ui_BrowserLogin(object): self.open_button.setSizePolicy(sizePolicy) self.open_button.setObjectName("open_button") self.browser_layout.addWidget(self.open_button, 1, 0, 1, 1) - self.info_label = QtWidgets.QLabel(BrowserLogin) - font = QtGui.QFont() - font.setItalic(True) - self.info_label.setFont(font) - self.info_label.setWordWrap(True) - self.info_label.setObjectName("info_label") - self.browser_layout.addWidget(self.info_label, 4, 0, 1, 3) + self.sid_layout = QtWidgets.QHBoxLayout() + self.sid_layout.setObjectName("sid_layout") + self.browser_layout.addLayout(self.sid_layout, 1, 1, 1, 1) self.title_label = QtWidgets.QLabel(BrowserLogin) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.title_label.setFont(font) self.title_label.setObjectName("title_label") - self.browser_layout.addWidget(self.title_label, 0, 0, 1, 3, QtCore.Qt.AlignTop) + self.browser_layout.addWidget(self.title_label, 0, 0, 1, 2) + self.info_label = QtWidgets.QLabel(BrowserLogin) + font = QtGui.QFont() + font.setItalic(True) + self.info_label.setFont(font) + self.info_label.setWordWrap(True) + self.info_label.setObjectName("info_label") + self.browser_layout.addWidget(self.info_label, 5, 0, 1, 2) self.status_label = QtWidgets.QLabel(BrowserLogin) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Maximum) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.status_label.sizePolicy().hasHeightForWidth()) - self.status_label.setSizePolicy(sizePolicy) self.status_label.setText("") - self.status_label.setAlignment(QtCore.Qt.AlignBottom | QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft) + self.status_label.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft) self.status_label.setObjectName("status_label") - self.browser_layout.addWidget(self.status_label, 3, 0, 1, 3) - self.sid_layout = QtWidgets.QHBoxLayout() - self.sid_layout.setObjectName("sid_layout") - self.browser_layout.addLayout(self.sid_layout, 1, 1, 1, 2) + self.browser_layout.addWidget(self.status_label, 3, 0, 1, 2) self.retranslateUi(BrowserLogin) QtCore.QMetaObject.connectSlotsByName(BrowserLogin) @@ -79,9 +77,8 @@ class Ui_BrowserLogin(object): def retranslateUi(self, BrowserLogin): _translate = QtCore.QCoreApplication.translate self.open_button.setText(_translate("BrowserLogin", "Open Browser")) - self.info_label.setText(_translate("BrowserLogin", - "Click the button to open the login page in a browser or copy the link and paste it in a browser. After logging in, copy the SID code in the input above.")) self.title_label.setText(_translate("BrowserLogin", "Login through browser")) + self.info_label.setText(_translate("BrowserLogin", "Click the button to open the login page in a browser or copy the link and paste it in a browser. After logging in, copy the SID code in the input above.")) if __name__ == "__main__": diff --git a/rare/ui/components/dialogs/login/browser_login.ui b/rare/ui/components/dialogs/login/browser_login.ui index 1b211d98..a7712213 100644 --- a/rare/ui/components/dialogs/login/browser_login.ui +++ b/rare/ui/components/dialogs/login/browser_login.ui @@ -6,16 +6,19 @@ 0 0 - 426 - 210 + 246 + 184 BrowserLogin - - + + QLayout::SetDefaultConstraint + + + @@ -34,19 +37,26 @@ - - - 0 - 0 - - - + + + + + Qt::Vertical + + + + 0 + 0 + + + + @@ -60,24 +70,10 @@ - - - - - true - - - - Click the button to open the login page in a browser or copy the link and paste it in a browser. After - logging in, copy the SID code in the input above. - - - - true - - + + - + @@ -90,14 +86,23 @@ - - - - - 0 - 0 - + + + + + true + + + Click the button to open the login page in a browser or copy the link and paste it in a browser. After logging in, copy the SID code in the input above. + + + true + + + + + @@ -106,9 +111,6 @@ - - - diff --git a/rare/ui/components/dialogs/login/import_login.py b/rare/ui/components/dialogs/login/import_login.py index 0c49e1f9..b4c61533 100644 --- a/rare/ui/components/dialogs/login/import_login.py +++ b/rare/ui/components/dialogs/login/import_login.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -# Form implementation generated from reading ui file 'import_login.ui' +# Form implementation generated from reading ui file 'rare/ui/components/dialogs/login/import_login.ui' # -# Created by: PyQt5 UI code generator 5.15.4 +# 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. @@ -14,24 +14,29 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_ImportLogin(object): def setupUi(self, ImportLogin): ImportLogin.setObjectName("ImportLogin") - ImportLogin.resize(503, 173) + ImportLogin.resize(400, 200) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(ImportLogin.sizePolicy().hasHeightForWidth()) + ImportLogin.setSizePolicy(sizePolicy) ImportLogin.setWindowTitle("ImportLogin") self.import_layout = QtWidgets.QGridLayout(ImportLogin) + self.import_layout.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint) self.import_layout.setObjectName("import_layout") - self.info_label = QtWidgets.QLabel(ImportLogin) - font = QtGui.QFont() - font.setItalic(True) - self.info_label.setFont(font) - self.info_label.setWordWrap(True) - self.info_label.setObjectName("info_label") - self.import_layout.addWidget(self.info_label, 3, 0, 1, 3, QtCore.Qt.AlignBottom) + self.prefix_label = QtWidgets.QLabel(ImportLogin) + self.prefix_label.setObjectName("prefix_label") + self.import_layout.addWidget(self.prefix_label, 1, 0, 1, 1) self.title_label = QtWidgets.QLabel(ImportLogin) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.title_label.setFont(font) self.title_label.setObjectName("title_label") - self.import_layout.addWidget(self.title_label, 0, 0, 1, 3, QtCore.Qt.AlignTop) + self.import_layout.addWidget(self.title_label, 0, 0, 1, 3) + self.prefix_tool = QtWidgets.QToolButton(ImportLogin) + self.prefix_tool.setObjectName("prefix_tool") + self.import_layout.addWidget(self.prefix_tool, 1, 2, 1, 1) self.prefix_combo = QtWidgets.QComboBox(ImportLogin) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) @@ -41,39 +46,36 @@ class Ui_ImportLogin(object): self.prefix_combo.setEditable(True) self.prefix_combo.setObjectName("prefix_combo") self.import_layout.addWidget(self.prefix_combo, 1, 1, 1, 1) - self.prefix_label = QtWidgets.QLabel(ImportLogin) - self.prefix_label.setObjectName("prefix_label") - self.import_layout.addWidget(self.prefix_label, 1, 0, 1, 1) - self.prefix_tool = QtWidgets.QToolButton(ImportLogin) - self.prefix_tool.setObjectName("prefix_tool") - self.import_layout.addWidget(self.prefix_tool, 1, 2, 1, 1) self.status_label = QtWidgets.QLabel(ImportLogin) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.status_label.sizePolicy().hasHeightForWidth()) - self.status_label.setSizePolicy(sizePolicy) font = QtGui.QFont() font.setItalic(True) self.status_label.setFont(font) self.status_label.setText("") self.status_label.setObjectName("status_label") self.import_layout.addWidget(self.status_label, 2, 1, 1, 2) + self.info_label = QtWidgets.QLabel(ImportLogin) + font = QtGui.QFont() + font.setItalic(True) + self.info_label.setFont(font) + self.info_label.setWordWrap(True) + self.info_label.setObjectName("info_label") + self.import_layout.addWidget(self.info_label, 4, 0, 1, 3) + spacerItem = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + self.import_layout.addItem(spacerItem, 3, 0, 1, 3) self.retranslateUi(ImportLogin) QtCore.QMetaObject.connectSlotsByName(ImportLogin) def retranslateUi(self, ImportLogin): _translate = QtCore.QCoreApplication.translate - self.info_label.setText(_translate("ImportLogin", "You will get logged out from EGL in the process.")) - self.title_label.setText(_translate("ImportLogin", "Import existing session from EGL")) self.prefix_label.setText(_translate("ImportLogin", "Select path")) + self.title_label.setText(_translate("ImportLogin", "Import existing session from EGL")) self.prefix_tool.setText(_translate("ImportLogin", "Browse")) + self.info_label.setText(_translate("ImportLogin", "You will get logged out from EGL in the process.")) if __name__ == "__main__": import sys - app = QtWidgets.QApplication(sys.argv) ImportLogin = QtWidgets.QWidget() ui = Ui_ImportLogin() diff --git a/rare/ui/components/dialogs/login/import_login.ui b/rare/ui/components/dialogs/login/import_login.ui index 00195036..3ef1d2df 100644 --- a/rare/ui/components/dialogs/login/import_login.ui +++ b/rare/ui/components/dialogs/login/import_login.ui @@ -1,94 +1,107 @@ - ImportLogin - - - - 0 - 0 - 503 - 173 - - - - ImportLogin - - - - - - - true - - - - You will get logged out from EGL in the process. - - - true - - - - - - - - 75 - true - - - - Import existing session from EGL - - - - - - - - 0 - 0 - - - - true - - - - - - - Select path - - - - - - - Browse - - - - - - - - 0 - 0 - - - - - true - - - - - - - - + ImportLogin + + + + 0 + 0 + 235 + 120 + + + + ImportLogin + + + + QLayout::SetDefaultConstraint + + + + + Select path + - - + + + + + + 75 + true + + + + Import existing session from EGL + + + + + + + Browse + + + + + + + + 0 + 0 + + + + true + + + + + + + + true + + + + + + + true + + + + + + + + true + + + + You will get logged out from EGL in the process. + + + true + + + + + + + Qt::Vertical + + + + 0 + 0 + + + + + + + + diff --git a/rare/ui/components/dialogs/login/landing_page.py b/rare/ui/components/dialogs/login/landing_page.py new file mode 100644 index 00000000..ff0182fb --- /dev/null +++ b/rare/ui/components/dialogs/login/landing_page.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- + +# Form implementation generated from reading ui file 'rare/ui/components/dialogs/login/landing_page.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_LandingPage(object): + def setupUi(self, LandingPage): + LandingPage.setObjectName("LandingPage") + LandingPage.resize(400, 200) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(LandingPage.sizePolicy().hasHeightForWidth()) + LandingPage.setSizePolicy(sizePolicy) + self.landing_layout = QtWidgets.QGridLayout(LandingPage) + self.landing_layout.setSizeConstraint(QtWidgets.QLayout.SetDefaultConstraint) + self.landing_layout.setObjectName("landing_layout") + self.login_label = QtWidgets.QLabel(LandingPage) + font = QtGui.QFont() + font.setBold(True) + font.setWeight(75) + self.login_label.setFont(font) + self.login_label.setObjectName("login_label") + self.landing_layout.addWidget(self.login_label, 0, 0, 1, 3) + self.login_browser_radio = QtWidgets.QRadioButton(LandingPage) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.login_browser_radio.sizePolicy().hasHeightForWidth()) + self.login_browser_radio.setSizePolicy(sizePolicy) + self.login_browser_radio.setObjectName("login_browser_radio") + self.landing_layout.addWidget(self.login_browser_radio, 1, 0, 1, 1) + self.login_browser_label = QtWidgets.QLabel(LandingPage) + font = QtGui.QFont() + font.setItalic(True) + self.login_browser_label.setFont(font) + self.login_browser_label.setObjectName("login_browser_label") + self.landing_layout.addWidget(self.login_browser_label, 1, 1, 1, 1) + self.login_import_radio = QtWidgets.QRadioButton(LandingPage) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.login_import_radio.sizePolicy().hasHeightForWidth()) + self.login_import_radio.setSizePolicy(sizePolicy) + self.login_import_radio.setObjectName("login_import_radio") + self.landing_layout.addWidget(self.login_import_radio, 2, 0, 1, 1) + self.login_import_label = QtWidgets.QLabel(LandingPage) + font = QtGui.QFont() + font.setItalic(True) + self.login_import_label.setFont(font) + self.login_import_label.setObjectName("login_import_label") + self.landing_layout.addWidget(self.login_import_label, 2, 1, 1, 1) + spacerItem = QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.landing_layout.addItem(spacerItem, 1, 2, 2, 1) + self.landing_layout.setRowStretch(1, 1) + self.landing_layout.setRowStretch(2, 1) + + self.retranslateUi(LandingPage) + QtCore.QMetaObject.connectSlotsByName(LandingPage) + + def retranslateUi(self, LandingPage): + _translate = QtCore.QCoreApplication.translate + LandingPage.setWindowTitle(_translate("LandingPage", "LandingPage")) + self.login_label.setText(_translate("LandingPage", "Select login method")) + self.login_browser_radio.setText(_translate("LandingPage", "Browser")) + self.login_browser_label.setText(_translate("LandingPage", "Login using a browser.")) + self.login_import_radio.setText(_translate("LandingPage", "Import")) + self.login_import_label.setText(_translate("LandingPage", "Import from Epic Games Launcher")) + + +if __name__ == "__main__": + import sys + app = QtWidgets.QApplication(sys.argv) + LandingPage = QtWidgets.QWidget() + ui = Ui_LandingPage() + ui.setupUi(LandingPage) + LandingPage.show() + sys.exit(app.exec_()) diff --git a/rare/ui/components/dialogs/login/landing_page.ui b/rare/ui/components/dialogs/login/landing_page.ui new file mode 100644 index 00000000..8dddd23f --- /dev/null +++ b/rare/ui/components/dialogs/login/landing_page.ui @@ -0,0 +1,100 @@ + + + LandingPage + + + + 0 + 0 + 295 + 78 + + + + LandingPage + + + + QLayout::SetDefaultConstraint + + + + + + 75 + true + + + + Select login method + + + + + + + + 0 + 0 + + + + Browser + + + + + + + + true + + + + Login using a browser. + + + + + + + + 0 + 0 + + + + Import + + + + + + + + true + + + + Import from Epic Games Launcher + + + + + + + Qt::Horizontal + + + + 0 + 0 + + + + + + + + + diff --git a/rare/ui/components/dialogs/login/login_dialog.py b/rare/ui/components/dialogs/login/login_dialog.py index b7650abd..f45dee04 100644 --- a/rare/ui/components/dialogs/login/login_dialog.py +++ b/rare/ui/components/dialogs/login/login_dialog.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'rare/ui/components/dialogs/login/login_dialog.ui' # -# Created by: PyQt5 UI code generator 5.15.6 +# 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. @@ -14,71 +14,23 @@ from PyQt5 import QtCore, QtGui, QtWidgets class Ui_LoginDialog(object): def setupUi(self, LoginDialog): LoginDialog.setObjectName("LoginDialog") - LoginDialog.resize(492, 267) + LoginDialog.resize(324, 132) self.login_layout = QtWidgets.QVBoxLayout(LoginDialog) - self.login_layout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize) self.login_layout.setObjectName("login_layout") - spacerItem = QtWidgets.QSpacerItem(0, 17, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + spacerItem = QtWidgets.QSpacerItem(0, 17, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.login_layout.addItem(spacerItem) self.welcome_label = QtWidgets.QLabel(LoginDialog) self.welcome_label.setObjectName("welcome_label") self.login_layout.addWidget(self.welcome_label) - spacerItem1 = QtWidgets.QSpacerItem(0, 17, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) + spacerItem1 = QtWidgets.QSpacerItem(0, 17, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.login_layout.addItem(spacerItem1) - self.login_stack = QtWidgets.QStackedWidget(LoginDialog) - self.login_stack.setEnabled(True) - self.login_stack.setMinimumSize(QtCore.QSize(480, 135)) - self.login_stack.setFrameShape(QtWidgets.QFrame.StyledPanel) - self.login_stack.setFrameShadow(QtWidgets.QFrame.Raised) - self.login_stack.setObjectName("login_stack") - self.login_page = QtWidgets.QWidget() - self.login_page.setEnabled(True) - self.login_page.setObjectName("login_page") - self.login_page_layout = QtWidgets.QGridLayout(self.login_page) - self.login_page_layout.setObjectName("login_page_layout") - self.login_browser_label = QtWidgets.QLabel(self.login_page) - font = QtGui.QFont() - font.setItalic(True) - self.login_browser_label.setFont(font) - self.login_browser_label.setObjectName("login_browser_label") - self.login_page_layout.addWidget(self.login_browser_label, 1, 1, 1, 1) - self.login_label = QtWidgets.QLabel(self.login_page) - font = QtGui.QFont() - font.setBold(True) - font.setWeight(75) - self.login_label.setFont(font) - self.login_label.setObjectName("login_label") - self.login_page_layout.addWidget(self.login_label, 0, 0, 1, 3, QtCore.Qt.AlignTop) - self.login_import_label = QtWidgets.QLabel(self.login_page) - font = QtGui.QFont() - font.setItalic(True) - self.login_import_label.setFont(font) - self.login_import_label.setObjectName("login_import_label") - self.login_page_layout.addWidget(self.login_import_label, 2, 1, 1, 1) - self.login_import_radio = QtWidgets.QRadioButton(self.login_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.login_import_radio.sizePolicy().hasHeightForWidth()) - self.login_import_radio.setSizePolicy(sizePolicy) - self.login_import_radio.setObjectName("login_import_radio") - self.login_page_layout.addWidget(self.login_import_radio, 2, 0, 1, 1) - spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.login_page_layout.addItem(spacerItem2, 1, 2, 2, 1) - self.login_browser_radio = QtWidgets.QRadioButton(self.login_page) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.login_browser_radio.sizePolicy().hasHeightForWidth()) - self.login_browser_radio.setSizePolicy(sizePolicy) - self.login_browser_radio.setObjectName("login_browser_radio") - self.login_page_layout.addWidget(self.login_browser_radio, 1, 0, 1, 1) - self.login_stack.addWidget(self.login_page) - self.login_layout.addWidget(self.login_stack) + self.login_stack_layout = QtWidgets.QVBoxLayout() + self.login_stack_layout.setObjectName("login_stack_layout") + self.login_layout.addLayout(self.login_stack_layout) self.button_layout = QtWidgets.QHBoxLayout() self.button_layout.setObjectName("button_layout") - spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.button_layout.addItem(spacerItem3) + spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.button_layout.addItem(spacerItem2) self.exit_button = QtWidgets.QPushButton(LoginDialog) self.exit_button.setObjectName("exit_button") self.button_layout.addWidget(self.exit_button) @@ -91,18 +43,12 @@ class Ui_LoginDialog(object): self.login_layout.addLayout(self.button_layout) self.retranslateUi(LoginDialog) - self.login_stack.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(LoginDialog) def retranslateUi(self, LoginDialog): _translate = QtCore.QCoreApplication.translate LoginDialog.setWindowTitle(_translate("LoginDialog", "Rare Login")) self.welcome_label.setText(_translate("LoginDialog", "

Welcome to Rare

")) - self.login_browser_label.setText(_translate("LoginDialog", "Login using a browser.")) - self.login_label.setText(_translate("LoginDialog", "Select login method")) - self.login_import_label.setText(_translate("LoginDialog", "Import from Epic Games Launcher")) - self.login_import_radio.setText(_translate("LoginDialog", "Import")) - self.login_browser_radio.setText(_translate("LoginDialog", "Browser")) self.exit_button.setText(_translate("LoginDialog", "Exit")) self.back_button.setText(_translate("LoginDialog", "Back")) self.next_button.setText(_translate("LoginDialog", "Next")) diff --git a/rare/ui/components/dialogs/login/login_dialog.ui b/rare/ui/components/dialogs/login/login_dialog.ui index 2adbb98a..5b75dde8 100644 --- a/rare/ui/components/dialogs/login/login_dialog.ui +++ b/rare/ui/components/dialogs/login/login_dialog.ui @@ -6,19 +6,22 @@ 0 0 - 492 - 267 + 324 + 132 Rare Login - - - QLayout::SetFixedSize - + + + Qt::Vertical + + + QSizePolicy::Fixed + 0 @@ -36,6 +39,12 @@ + + Qt::Vertical + + + QSizePolicy::Fixed + 0 @@ -45,109 +54,7 @@ - - - true - - - - 480 - 135 - - - - QFrame::StyledPanel - - - QFrame::Raised - - - 0 - - - - true - - - - - - - true - - - - Login using a browser. - - - - - - - - 75 - true - - - - Select login method - - - - - - - - true - - - - Import from Epic Games Launcher - - - - - - - - 0 - 0 - - - - Import - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - Browser - - - - - - +