Re-implement LoginDialog.
This commit is contained in:
parent
9dcba184d0
commit
90ac9a1574
|
@ -1,96 +1,96 @@
|
||||||
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QLabel, QStackedLayout, QWidget, QPushButton
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
from PyQt5.QtCore import Qt
|
||||||
|
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QLabel, QWidget, QPushButton
|
||||||
from custom_legendary.core import LegendaryCore
|
from custom_legendary.core import LegendaryCore
|
||||||
# Login Opportunities: Browser, Import
|
|
||||||
from rare.components.dialogs.login.browser_login import BrowserLogin
|
from rare.components.dialogs.login.browser_login import BrowserLogin
|
||||||
from rare.components.dialogs.login.import_widget import ImportWidget
|
from rare.components.dialogs.login.import_login import ImportLogin
|
||||||
|
# Login Opportunities: Browser, Import
|
||||||
|
from rare.ui.components.dialogs.login.login_dialog import Ui_LoginDialog
|
||||||
|
|
||||||
|
|
||||||
class LoginDialog(QDialog):
|
@dataclass
|
||||||
|
class LoginPages:
|
||||||
|
login: int
|
||||||
|
browser: int
|
||||||
|
import_egl: int
|
||||||
|
success: int
|
||||||
|
|
||||||
|
|
||||||
|
class LoginDialog(QDialog, Ui_LoginDialog):
|
||||||
logged_in: bool = False
|
logged_in: bool = False
|
||||||
|
pages = LoginPages(0, 1, 2, 3)
|
||||||
|
|
||||||
def __init__(self, core: LegendaryCore):
|
def __init__(self, core: LegendaryCore, parent=None):
|
||||||
super(LoginDialog, self).__init__()
|
super(LoginDialog, self).__init__(parent=parent)
|
||||||
|
self.setupUi(self)
|
||||||
|
self.setAttribute(Qt.WA_DeleteOnClose, True)
|
||||||
|
self.setWindowFlags(Qt.Dialog | Qt.CustomizeWindowHint | Qt.WindowTitleHint)
|
||||||
|
|
||||||
self.core = core
|
self.core = core
|
||||||
self.setWindowTitle("Rare - Login")
|
|
||||||
self.setFixedWidth(350)
|
|
||||||
self.setFixedHeight(450)
|
|
||||||
|
|
||||||
self.init_ui()
|
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())
|
||||||
|
)
|
||||||
|
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())
|
||||||
|
)
|
||||||
|
|
||||||
def init_ui(self):
|
self.next_button.setEnabled(False)
|
||||||
self.layout = QStackedLayout()
|
self.back_button.setEnabled(False)
|
||||||
|
|
||||||
self.landing_widget = QWidget()
|
self.login_browser_radio.clicked.connect(lambda: self.next_button.setEnabled(True))
|
||||||
self.landing_layout = QVBoxLayout()
|
self.login_import_radio.clicked.connect(lambda: self.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.title = QLabel(f"<h1>{self.tr('Welcome to Rare')}</h1>")
|
self.login_stack.setCurrentIndex(self.pages.login)
|
||||||
self.landing_layout.addWidget(self.title)
|
|
||||||
self.info_text = QLabel(self.tr("Select one option to Login"))
|
|
||||||
self.landing_layout.addWidget(self.info_text)
|
|
||||||
|
|
||||||
self.browser_login = OptionWidget(self.tr("Use Browser"),
|
self.resize(self.minimumSizeHint())
|
||||||
self.tr("This opens your default browser. Login and copy the text"))
|
self.setFixedSize(self.size())
|
||||||
|
|
||||||
self.landing_layout.addWidget(self.browser_login)
|
def back_clicked(self):
|
||||||
self.browser_login.button.clicked.connect(lambda: self.layout.setCurrentIndex(1))
|
self.back_button.setEnabled(False)
|
||||||
|
self.next_button.setEnabled(True)
|
||||||
|
self.login_stack.setCurrentIndex(self.pages.login)
|
||||||
|
|
||||||
self.import_login = OptionWidget("Import from existing installation",
|
def next_clicked(self):
|
||||||
"Import an existing login session from an Epic Games Launcher installation. You will get logged out there")
|
if self.login_stack.currentIndex() == self.pages.login:
|
||||||
self.import_login.button.clicked.connect(lambda: self.layout.setCurrentIndex(2))
|
if self.login_browser_radio.isChecked():
|
||||||
self.landing_layout.addWidget(self.import_login)
|
self.login_stack.setCurrentIndex(self.pages.browser)
|
||||||
|
self.next_button.setEnabled(False)
|
||||||
self.close_button = QPushButton("Exit App")
|
if self.login_import_radio.isChecked():
|
||||||
self.close_button.clicked.connect(self.close)
|
self.login_stack.setCurrentIndex(self.pages.import_egl)
|
||||||
self.landing_layout.addWidget(self.close_button)
|
self.next_button.setEnabled(self.import_page.is_valid())
|
||||||
|
self.back_button.setEnabled(True)
|
||||||
self.landing_widget.setLayout(self.landing_layout)
|
elif self.login_stack.currentIndex() == self.pages.browser:
|
||||||
self.layout.addWidget(self.landing_widget)
|
self.browser_page.do_login()
|
||||||
|
elif self.login_stack.currentIndex() == self.pages.import_egl:
|
||||||
self.browser_widget = BrowserLogin(self.core)
|
self.import_page.do_login()
|
||||||
self.browser_widget.success.connect(self.success)
|
else:
|
||||||
self.browser_widget.back.clicked.connect(lambda: self.layout.setCurrentIndex(0))
|
self.close()
|
||||||
self.layout.addWidget(self.browser_widget)
|
|
||||||
|
|
||||||
self.import_widget = ImportWidget(self.core)
|
|
||||||
self.import_widget.back.clicked.connect(lambda: self.layout.setCurrentIndex(0))
|
|
||||||
self.import_widget.success.connect(self.success)
|
|
||||||
self.layout.addWidget(self.import_widget)
|
|
||||||
|
|
||||||
self.layout.addWidget(LoginSuccessfulWidget())
|
|
||||||
|
|
||||||
self.setLayout(self.layout)
|
|
||||||
|
|
||||||
def login(self):
|
def login(self):
|
||||||
self.exec_()
|
self.exec_()
|
||||||
return self.logged_in
|
return self.logged_in
|
||||||
|
|
||||||
def success(self):
|
def login_successful(self):
|
||||||
if self.core.login():
|
if self.core.login():
|
||||||
self.logged_in = True
|
self.logged_in = True
|
||||||
self.layout.setCurrentIndex(3)
|
self.welcome_label.setText(
|
||||||
# time.sleep(1)
|
self.welcome_label.text().replace("</h1>", f", {self.core.lgd.userdata['displayName']}</h1>")
|
||||||
self.close()
|
)
|
||||||
|
self.exit_button.setVisible(False)
|
||||||
|
self.back_button.setVisible(False)
|
||||||
class OptionWidget(QWidget):
|
self.login_stack.setCurrentIndex(self.pages.success)
|
||||||
def __init__(self, btn_text: str, info_text: str):
|
else:
|
||||||
super(OptionWidget, self).__init__()
|
self.next_button.setEnabled(False)
|
||||||
self.layout = QVBoxLayout()
|
self.logged_in = False
|
||||||
self.text = QLabel(info_text)
|
|
||||||
self.text.setWordWrap(True)
|
|
||||||
self.button = QPushButton(btn_text)
|
|
||||||
|
|
||||||
self.layout.addWidget(self.button)
|
|
||||||
self.layout.addWidget(self.text)
|
|
||||||
|
|
||||||
self.setLayout(self.layout)
|
|
||||||
|
|
||||||
|
|
||||||
class LoginSuccessfulWidget(QWidget):
|
|
||||||
def __init__(self):
|
|
||||||
super(LoginSuccessfulWidget, self).__init__()
|
|
||||||
self.layout = QVBoxLayout()
|
|
||||||
self.layout.addWidget(QLabel("Login Successful"))
|
|
||||||
self.setLayout(self.layout)
|
|
||||||
|
|
|
@ -1,54 +1,46 @@
|
||||||
import json
|
import json
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtSignal
|
from PyQt5.QtCore import pyqtSignal, QUrl
|
||||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QLabel, QLineEdit
|
from PyQt5.QtGui import QDesktopServices
|
||||||
|
from PyQt5.QtWidgets import QWidget
|
||||||
from custom_legendary.core import LegendaryCore
|
from custom_legendary.core import LegendaryCore
|
||||||
|
|
||||||
|
from rare.ui.components.dialogs.login.browser_login import Ui_BrowserLogin
|
||||||
|
|
||||||
logger = getLogger("BrowserLogin")
|
logger = getLogger("BrowserLogin")
|
||||||
|
|
||||||
|
|
||||||
class BrowserLogin(QWidget):
|
class BrowserLogin(QWidget, Ui_BrowserLogin):
|
||||||
success = pyqtSignal()
|
success = pyqtSignal()
|
||||||
url: str = "https://www.epicgames.com/id/login?redirectUrl=https%3A%2F%2Fwww.epicgames.com%2Fid%2Fapi%2Fredirect"
|
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)
|
||||||
|
|
||||||
def __init__(self, core: LegendaryCore):
|
|
||||||
super(BrowserLogin, self).__init__()
|
|
||||||
self.layout = QVBoxLayout()
|
|
||||||
self.core = core
|
self.core = core
|
||||||
|
|
||||||
self.back = QPushButton("Back") # TODO Icon
|
self.open_button.clicked.connect(lambda: QDesktopServices.openUrl(QUrl(self.login_url)))
|
||||||
self.layout.addWidget(self.back)
|
self.sid_edit.textChanged.connect(self.changed.emit)
|
||||||
|
|
||||||
self.info_text = QLabel(self.tr(
|
def is_valid(self):
|
||||||
"Opens a browser. You login and copy the json code in the field below. Click <a href='{}'>here</a> to open Browser").format(
|
return len(self.sid_edit.text()) == 32
|
||||||
self.url))
|
|
||||||
self.info_text.setWordWrap(True)
|
|
||||||
self.info_text.setOpenExternalLinks(True)
|
|
||||||
self.layout.addWidget(self.info_text)
|
|
||||||
|
|
||||||
self.input_field = QLineEdit()
|
def do_login(self):
|
||||||
self.input_field.setPlaceholderText(self.tr("Insert SID here"))
|
self.status_label.setText(self.tr("Logging in..."))
|
||||||
self.layout.addWidget(self.input_field)
|
sid = self.sid_edit.text()
|
||||||
|
|
||||||
self.mini_info = QLabel("")
|
|
||||||
|
|
||||||
self.login_btn = QPushButton(self.tr("Login"))
|
|
||||||
self.login_btn.clicked.connect(self.login)
|
|
||||||
self.layout.addWidget(self.login_btn)
|
|
||||||
|
|
||||||
self.setLayout(self.layout)
|
|
||||||
|
|
||||||
def login(self):
|
|
||||||
self.mini_info.setText(self.tr("Loading..."))
|
|
||||||
sid = self.input_field.text()
|
|
||||||
# when the text copied
|
# when the text copied
|
||||||
if sid.startswith("{") and sid.endswith("}"):
|
if sid.startswith("{") and sid.endswith("}"):
|
||||||
sid = json.loads(sid)["sid"]
|
sid = json.loads(sid)["sid"]
|
||||||
token = self.core.auth_sid(sid)
|
try:
|
||||||
if self.core.auth_code(token):
|
token = self.core.auth_sid(sid)
|
||||||
logger.info(f"Successfully logged in as {self.core.lgd.userdata['displayName']}")
|
if self.core.auth_code(token):
|
||||||
self.success.emit()
|
logger.info(f"Successfully logged in as {self.core.lgd.userdata['displayName']}")
|
||||||
else:
|
self.success.emit()
|
||||||
self.mini_info.setText("Login failed")
|
else:
|
||||||
|
self.status_label.setText(self.tr("Login failed."))
|
||||||
|
logger.warning("Failed to login through browser")
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(e)
|
||||||
|
|
83
rare/components/dialogs/login/import_login.py
Normal file
83
rare/components/dialogs/login/import_login.py
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
import os
|
||||||
|
from getpass import getuser
|
||||||
|
from logging import getLogger
|
||||||
|
|
||||||
|
from PyQt5.QtCore import pyqtSignal
|
||||||
|
from PyQt5.QtWidgets import QWidget
|
||||||
|
from custom_legendary.core import LegendaryCore
|
||||||
|
|
||||||
|
from rare.ui.components.dialogs.login.import_login import Ui_ImportLogin
|
||||||
|
|
||||||
|
logger = getLogger("ImportLogin")
|
||||||
|
|
||||||
|
|
||||||
|
class ImportLogin(QWidget, Ui_ImportLogin):
|
||||||
|
success = pyqtSignal()
|
||||||
|
changed = pyqtSignal()
|
||||||
|
if os.name == "nt":
|
||||||
|
localappdata = os.path.expandvars("%LOCALAPPDATA%")
|
||||||
|
else:
|
||||||
|
localappdata = os.path.join("drive_c/users", getuser(), "Local Settings/Application Data")
|
||||||
|
appdata_path = os.path.join(localappdata, "EpicGamesLauncher/Saved/Config/Windows")
|
||||||
|
found = False
|
||||||
|
|
||||||
|
def __init__(self, core: LegendaryCore, parent=None):
|
||||||
|
super(ImportLogin, self).__init__(parent=parent)
|
||||||
|
self.setupUi(self)
|
||||||
|
|
||||||
|
self.core = core
|
||||||
|
|
||||||
|
if os.name == "nt":
|
||||||
|
if not self.core.egl.appdata_path and os.path.exists(self.egl_data_path):
|
||||||
|
self.core.egl.appdata_path = self.appdata_path
|
||||||
|
if not self.core.egl.appdata_path:
|
||||||
|
self.status_label.setText(self.tr("Could not find EGL Program Data."))
|
||||||
|
else:
|
||||||
|
self.status_label.setText(self.tr("Found EGL Program Data. Click 'Next' to import them."))
|
||||||
|
self.found = True
|
||||||
|
else:
|
||||||
|
self.info_label.setText(
|
||||||
|
self.tr(
|
||||||
|
"Please select the Wine prefix where Epic Games Launcher is installed. ") + self.info_label.text()
|
||||||
|
)
|
||||||
|
prefixes = self.get_wine_prefixes()
|
||||||
|
if len(prefixes):
|
||||||
|
self.prefix_combo.addItems(prefixes)
|
||||||
|
self.status_label.setText(self.tr("Select the Wine prefix you want to import."))
|
||||||
|
else:
|
||||||
|
self.status_label.setText(self.tr("Could not any EGL Program Data."))
|
||||||
|
self.prefix_combo.editTextChanged.connect(self.changed.emit)
|
||||||
|
|
||||||
|
def get_wine_prefixes(self):
|
||||||
|
possible_prefixes = [
|
||||||
|
os.path.expanduser("~/.wine"),
|
||||||
|
os.path.expanduser("~/Games/epic-games-store"),
|
||||||
|
os.path.expanduser("~/Wine/Stores")
|
||||||
|
]
|
||||||
|
prefixes = []
|
||||||
|
for prefix in possible_prefixes:
|
||||||
|
if os.path.exists(os.path.join(prefix, self.appdata_path)):
|
||||||
|
prefixes.append(prefix)
|
||||||
|
return prefixes
|
||||||
|
|
||||||
|
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))
|
||||||
|
|
||||||
|
def do_login(self):
|
||||||
|
self.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)
|
||||||
|
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."))
|
||||||
|
logger.warning("Failed to import existing session")
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(e)
|
|
@ -1,103 +0,0 @@
|
||||||
import os
|
|
||||||
from getpass import getuser
|
|
||||||
from logging import getLogger
|
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtSignal
|
|
||||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QLabel, QButtonGroup, QRadioButton
|
|
||||||
|
|
||||||
from custom_legendary.core import LegendaryCore
|
|
||||||
|
|
||||||
logger = getLogger("Import")
|
|
||||||
|
|
||||||
|
|
||||||
class ImportWidget(QWidget):
|
|
||||||
success = pyqtSignal()
|
|
||||||
|
|
||||||
def __init__(self, core: LegendaryCore):
|
|
||||||
super(ImportWidget, self).__init__()
|
|
||||||
self.layout = QVBoxLayout()
|
|
||||||
self.core = core
|
|
||||||
|
|
||||||
self.back = QPushButton("Back")
|
|
||||||
self.layout.addWidget(self.back)
|
|
||||||
self.title = QLabel("<h3>Import existing Login session</h3>")
|
|
||||||
self.title.setWordWrap(True)
|
|
||||||
self.layout.addWidget(self.title)
|
|
||||||
self.infoText = QLabel(
|
|
||||||
"Found Installations here. \nPlease select prefix, where Epic Games Launcher is installed\nNote: You will get logged out there")
|
|
||||||
self.infoText.setWordWrap(True)
|
|
||||||
self.layout.addWidget(self.infoText)
|
|
||||||
self.import_button = QPushButton(self.tr("Import"))
|
|
||||||
self.data_path = ""
|
|
||||||
if os.name == "nt":
|
|
||||||
|
|
||||||
if not self.core.egl.appdata_path and os.path.exists(
|
|
||||||
os.path.expandvars("%LOCALAPPDATA%/EpicGamesLauncher/Saved/Config/Windows")):
|
|
||||||
self.core.egl.appdata_path = os.path.expandvars("%LOCALAPPDATA%/EpicGamesLauncher/Saved/Config/Windows")
|
|
||||||
|
|
||||||
if not self.core.egl.appdata_path:
|
|
||||||
self.text = QLabel(self.tr("Could not find EGL program data"))
|
|
||||||
|
|
||||||
else:
|
|
||||||
self.text = QLabel(self.tr("Found EGL program Data. Do you want to import them?"))
|
|
||||||
|
|
||||||
self.layout.addWidget(self.text)
|
|
||||||
|
|
||||||
# Linux
|
|
||||||
else:
|
|
||||||
self.radio_buttons = []
|
|
||||||
prefixes = self.get_wine_prefixes()
|
|
||||||
if len(prefixes) == 0:
|
|
||||||
self.infoText.setText(self.tr("Could not find any Epic Games login data"))
|
|
||||||
self.import_button.setDisabled(True)
|
|
||||||
else:
|
|
||||||
self.btn_group = QButtonGroup()
|
|
||||||
for i in prefixes:
|
|
||||||
radio_button = QRadioButton(i)
|
|
||||||
self.radio_buttons.append(radio_button)
|
|
||||||
self.btn_group.addButton(radio_button)
|
|
||||||
self.layout.addWidget(radio_button)
|
|
||||||
radio_button.toggled.connect(self.toggle_radiobutton)
|
|
||||||
|
|
||||||
self.login_text = QLabel("")
|
|
||||||
self.layout.addWidget(self.login_text)
|
|
||||||
self.layout.addWidget(self.import_button)
|
|
||||||
self.import_button.clicked.connect(self.import_login_data)
|
|
||||||
|
|
||||||
self.setLayout(self.layout)
|
|
||||||
|
|
||||||
def toggle_radiobutton(self):
|
|
||||||
if self.sender().isChecked():
|
|
||||||
self.data_path = self.sender().text()
|
|
||||||
|
|
||||||
def get_wine_prefixes(self):
|
|
||||||
possible_prefixes = [
|
|
||||||
os.path.expanduser("~/.wine"),
|
|
||||||
os.path.expanduser("~/Games/epic-games-store")
|
|
||||||
]
|
|
||||||
prefixes = []
|
|
||||||
for i in possible_prefixes:
|
|
||||||
if os.path.exists(os.path.join(i, "drive_c/users", getuser(),
|
|
||||||
"Local Settings/Application Data/EpicGamesLauncher/Saved/Config/Windows")):
|
|
||||||
prefixes.append(i)
|
|
||||||
return prefixes
|
|
||||||
|
|
||||||
def import_login_data(self):
|
|
||||||
self.import_button.setText(self.tr("Loading..."))
|
|
||||||
self.import_button.setDisabled(True)
|
|
||||||
if os.name != "nt":
|
|
||||||
self.core.egl.appdata_path = os.path.join(self.data_path,
|
|
||||||
f"drive_c/users/{getuser()}/Local Settings/Application Data/EpicGamesLauncher/Saved/Config/Windows")
|
|
||||||
try:
|
|
||||||
if self.core.auth_import():
|
|
||||||
logger.info(f"Logged in as {self.core.lgd.userdata['displayName']}")
|
|
||||||
self.success.emit()
|
|
||||||
else:
|
|
||||||
logger.warning("Failed to import existing session")
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning(e)
|
|
||||||
|
|
||||||
logger.warning("Error: No valid session found")
|
|
||||||
self.login_text.setText(self.tr("Error: No valid session found"))
|
|
||||||
self.import_button.setText(self.tr("Import"))
|
|
||||||
self.import_button.setDisabled(False)
|
|
0
rare/ui/components/dialogs/login/__init__.py
Normal file
0
rare/ui/components/dialogs/login/__init__.py
Normal file
69
rare/ui/components/dialogs/login/browser_login.py
Normal file
69
rare/ui/components/dialogs/login/browser_login.py
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'browser_login.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt5 UI code generator 5.15.4
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_BrowserLogin(object):
|
||||||
|
def setupUi(self, BrowserLogin):
|
||||||
|
BrowserLogin.setObjectName("BrowserLogin")
|
||||||
|
BrowserLogin.resize(246, 130)
|
||||||
|
BrowserLogin.setWindowTitle("BrowserLogin")
|
||||||
|
self.browser_layout = QtWidgets.QGridLayout(BrowserLogin)
|
||||||
|
self.browser_layout.setObjectName("browser_layout")
|
||||||
|
self.open_button = QtWidgets.QPushButton(BrowserLogin)
|
||||||
|
self.open_button.setObjectName("open_button")
|
||||||
|
self.browser_layout.addWidget(self.open_button, 1, 0, 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, 2, QtCore.Qt.AlignTop)
|
||||||
|
self.sid_edit = QtWidgets.QLineEdit(BrowserLogin)
|
||||||
|
self.sid_edit.setObjectName("sid_edit")
|
||||||
|
self.browser_layout.addWidget(self.sid_edit, 1, 1, 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, 3, 0, 1, 2, QtCore.Qt.AlignBottom)
|
||||||
|
self.status_label = QtWidgets.QLabel(BrowserLogin)
|
||||||
|
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)
|
||||||
|
self.status_label.setText("")
|
||||||
|
self.status_label.setObjectName("status_label")
|
||||||
|
self.browser_layout.addWidget(self.status_label, 2, 1, 1, 1)
|
||||||
|
|
||||||
|
self.retranslateUi(BrowserLogin)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(BrowserLogin)
|
||||||
|
|
||||||
|
def retranslateUi(self, BrowserLogin):
|
||||||
|
_translate = QtCore.QCoreApplication.translate
|
||||||
|
self.open_button.setText(_translate("BrowserLogin", "Open Browser"))
|
||||||
|
self.title_label.setText(_translate("BrowserLogin", "Login through browser"))
|
||||||
|
self.sid_edit.setPlaceholderText(_translate("BrowserLogin", "Insert SID here"))
|
||||||
|
self.info_label.setText(_translate("BrowserLogin", "Click the button to open the login page in a browser. After logging in, copy the SID code in the input above."))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
BrowserLogin = QtWidgets.QWidget()
|
||||||
|
ui = Ui_BrowserLogin()
|
||||||
|
ui.setupUi(BrowserLogin)
|
||||||
|
BrowserLogin.show()
|
||||||
|
sys.exit(app.exec_())
|
76
rare/ui/components/dialogs/login/browser_login.ui
Normal file
76
rare/ui/components/dialogs/login/browser_login.ui
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>BrowserLogin</class>
|
||||||
|
<widget class="QWidget" name="BrowserLogin">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>246</width>
|
||||||
|
<height>130</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string notr="true">BrowserLogin</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="browser_layout">
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QPushButton" name="open_button">
|
||||||
|
<property name="text">
|
||||||
|
<string>Open Browser</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" colspan="2" alignment="Qt::AlignTop">
|
||||||
|
<widget class="QLabel" name="title_label">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Login through browser</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLineEdit" name="sid_edit">
|
||||||
|
<property name="placeholderText">
|
||||||
|
<string>Insert SID here</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0" colspan="2" alignment="Qt::AlignBottom">
|
||||||
|
<widget class="QLabel" name="info_label">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<italic>true</italic>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Click the button to open the login page in a browser. After logging in, copy the SID code in the input above.</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLabel" name="status_label">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
81
rare/ui/components/dialogs/login/import_login.py
Normal file
81
rare/ui/components/dialogs/login/import_login.py
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'import_login.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt5 UI code generator 5.15.4
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_ImportLogin(object):
|
||||||
|
def setupUi(self, ImportLogin):
|
||||||
|
ImportLogin.setObjectName("ImportLogin")
|
||||||
|
ImportLogin.resize(246, 117)
|
||||||
|
ImportLogin.setWindowTitle("ImportLogin")
|
||||||
|
self.import_layout = QtWidgets.QGridLayout(ImportLogin)
|
||||||
|
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.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.prefix_combo = QtWidgets.QComboBox(ImportLogin)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(self.prefix_combo.sizePolicy().hasHeightForWidth())
|
||||||
|
self.prefix_combo.setSizePolicy(sizePolicy)
|
||||||
|
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.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 prefix"))
|
||||||
|
self.prefix_tool.setText(_translate("ImportLogin", "Browse"))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
ImportLogin = QtWidgets.QWidget()
|
||||||
|
ui = Ui_ImportLogin()
|
||||||
|
ui.setupUi(ImportLogin)
|
||||||
|
ImportLogin.show()
|
||||||
|
sys.exit(app.exec_())
|
94
rare/ui/components/dialogs/login/import_login.ui
Normal file
94
rare/ui/components/dialogs/login/import_login.ui
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>ImportLogin</class>
|
||||||
|
<widget class="QWidget" name="ImportLogin">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>246</width>
|
||||||
|
<height>117</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string notr="true">ImportLogin</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="import_layout">
|
||||||
|
<item row="3" column="0" colspan="3" alignment="Qt::AlignBottom">
|
||||||
|
<widget class="QLabel" name="info_label">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<italic>true</italic>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>You will get logged out from EGL in the process.</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" colspan="3" alignment="Qt::AlignTop">
|
||||||
|
<widget class="QLabel" name="title_label">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Import existing session from EGL</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QComboBox" name="prefix_combo">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="editable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QLabel" name="prefix_label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Select prefix</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<widget class="QToolButton" name="prefix_tool">
|
||||||
|
<property name="text">
|
||||||
|
<string>Browse</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1" colspan="2">
|
||||||
|
<widget class="QLabel" name="status_label">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<italic>true</italic>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
131
rare/ui/components/dialogs/login/login_dialog.py
Normal file
131
rare/ui/components/dialogs/login/login_dialog.py
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'login_dialog.ui'
|
||||||
|
#
|
||||||
|
# Created by: PyQt5 UI code generator 5.15.4
|
||||||
|
#
|
||||||
|
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||||
|
# run again. Do not edit this file unless you know what you are doing.
|
||||||
|
|
||||||
|
|
||||||
|
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||||
|
|
||||||
|
|
||||||
|
class Ui_LoginDialog(object):
|
||||||
|
def setupUi(self, LoginDialog):
|
||||||
|
LoginDialog.setObjectName("LoginDialog")
|
||||||
|
LoginDialog.resize(492, 311)
|
||||||
|
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
|
||||||
|
sizePolicy.setHorizontalStretch(0)
|
||||||
|
sizePolicy.setVerticalStretch(0)
|
||||||
|
sizePolicy.setHeightForWidth(LoginDialog.sizePolicy().hasHeightForWidth())
|
||||||
|
LoginDialog.setSizePolicy(sizePolicy)
|
||||||
|
self.dialog_layout = QtWidgets.QVBoxLayout(LoginDialog)
|
||||||
|
self.dialog_layout.setObjectName("dialog_layout")
|
||||||
|
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
|
||||||
|
self.dialog_layout.addItem(spacerItem)
|
||||||
|
self.welcome_label = QtWidgets.QLabel(LoginDialog)
|
||||||
|
self.welcome_label.setObjectName("welcome_label")
|
||||||
|
self.dialog_layout.addWidget(self.welcome_label)
|
||||||
|
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
|
||||||
|
self.dialog_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)
|
||||||
|
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)
|
||||||
|
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||||
|
self.login_page_layout.addItem(spacerItem2, 1, 2, 2, 1)
|
||||||
|
self.login_stack.addWidget(self.login_page)
|
||||||
|
self.success_page = QtWidgets.QWidget()
|
||||||
|
self.success_page.setObjectName("success_page")
|
||||||
|
self.success_page_layout = QtWidgets.QHBoxLayout(self.success_page)
|
||||||
|
self.success_page_layout.setObjectName("success_page_layout")
|
||||||
|
self.success_label = QtWidgets.QLabel(self.success_page)
|
||||||
|
self.success_label.setObjectName("success_label")
|
||||||
|
self.success_page_layout.addWidget(self.success_label)
|
||||||
|
self.login_stack.addWidget(self.success_page)
|
||||||
|
self.dialog_layout.addWidget(self.login_stack)
|
||||||
|
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)
|
||||||
|
self.exit_button = QtWidgets.QPushButton(LoginDialog)
|
||||||
|
self.exit_button.setObjectName("exit_button")
|
||||||
|
self.button_layout.addWidget(self.exit_button)
|
||||||
|
self.back_button = QtWidgets.QPushButton(LoginDialog)
|
||||||
|
self.back_button.setObjectName("back_button")
|
||||||
|
self.button_layout.addWidget(self.back_button)
|
||||||
|
self.next_button = QtWidgets.QPushButton(LoginDialog)
|
||||||
|
self.next_button.setObjectName("next_button")
|
||||||
|
self.button_layout.addWidget(self.next_button)
|
||||||
|
self.dialog_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", "Welcome to Rare"))
|
||||||
|
self.welcome_label.setText(_translate("LoginDialog", "<h1>Welcome to Rare</h1>"))
|
||||||
|
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.success_label.setText(_translate("LoginDialog", "<h2>Login Succeful!</h2>"))
|
||||||
|
self.exit_button.setText(_translate("LoginDialog", "Exit"))
|
||||||
|
self.back_button.setText(_translate("LoginDialog", "Back"))
|
||||||
|
self.next_button.setText(_translate("LoginDialog", "Next"))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import sys
|
||||||
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
|
LoginDialog = QtWidgets.QDialog()
|
||||||
|
ui = Ui_LoginDialog()
|
||||||
|
ui.setupUi(LoginDialog)
|
||||||
|
LoginDialog.show()
|
||||||
|
sys.exit(app.exec_())
|
220
rare/ui/components/dialogs/login/login_dialog.ui
Normal file
220
rare/ui/components/dialogs/login/login_dialog.ui
Normal file
|
@ -0,0 +1,220 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>LoginDialog</class>
|
||||||
|
<widget class="QDialog" name="LoginDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>492</width>
|
||||||
|
<height>311</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Welcome to Rare</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="dialog_layout">
|
||||||
|
<item>
|
||||||
|
<spacer name="login_vspacer_top">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Fixed</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="welcome_label">
|
||||||
|
<property name="text">
|
||||||
|
<string><h1>Welcome to Rare</h1></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="login_vspacer_bottom">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Fixed</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QStackedWidget" name="login_stack">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>480</width>
|
||||||
|
<height>135</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="frameShape">
|
||||||
|
<enum>QFrame::StyledPanel</enum>
|
||||||
|
</property>
|
||||||
|
<property name="frameShadow">
|
||||||
|
<enum>QFrame::Raised</enum>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="login_page">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="login_page_layout">
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLabel" name="login_browser_label">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<italic>true</italic>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Login using a browser.</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0" colspan="3" alignment="Qt::AlignTop">
|
||||||
|
<widget class="QLabel" name="login_label">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Select login method</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLabel" name="login_import_label">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<italic>true</italic>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Import from Epic Games Launcher</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QRadioButton" name="login_import_radio">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Import</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QRadioButton" name="login_browser_radio">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Browser</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2" rowspan="2">
|
||||||
|
<spacer name="login_hspacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="success_page">
|
||||||
|
<layout class="QHBoxLayout" name="success_page_layout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="success_label">
|
||||||
|
<property name="text">
|
||||||
|
<string><h2>Login Succeful!</h2></string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="button_layout">
|
||||||
|
<item>
|
||||||
|
<spacer name="button_hspacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="exit_button">
|
||||||
|
<property name="text">
|
||||||
|
<string>Exit</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="back_button">
|
||||||
|
<property name="text">
|
||||||
|
<string>Back</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="next_button">
|
||||||
|
<property name="text">
|
||||||
|
<string>Next</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
Loading…
Reference in a new issue