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
-
-
-
-
-
-
+
-