Wrappers: Add a combobox with existing wrappers for the user to choose from.
Add a combobox in the "Add wrapper" dialog, populated with existing user-defined wrappers from other games.
This commit is contained in:
parent
fb91a55f30
commit
94030055cf
|
@ -2,7 +2,7 @@ import platform as pf
|
||||||
import shlex
|
import shlex
|
||||||
import shutil
|
import shutil
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
from typing import Optional, Tuple
|
from typing import Optional, Tuple, Iterable
|
||||||
|
|
||||||
from PyQt5.QtCore import pyqtSignal, QSize, Qt, QMimeData, pyqtSlot
|
from PyQt5.QtCore import pyqtSignal, QSize, Qt, QMimeData, pyqtSlot
|
||||||
from PyQt5.QtGui import QDrag, QDropEvent, QDragEnterEvent, QDragMoveEvent, QFont, QMouseEvent, QShowEvent
|
from PyQt5.QtGui import QDrag, QDropEvent, QDragEnterEvent, QDragMoveEvent, QFont, QMouseEvent, QShowEvent
|
||||||
|
@ -16,7 +16,7 @@ from PyQt5.QtWidgets import (
|
||||||
QScrollArea,
|
QScrollArea,
|
||||||
QAction,
|
QAction,
|
||||||
QToolButton,
|
QToolButton,
|
||||||
QMenu, QStackedWidget, QPushButton, QLineEdit, QVBoxLayout,
|
QMenu, QStackedWidget, QPushButton, QLineEdit, QVBoxLayout, QComboBox,
|
||||||
)
|
)
|
||||||
|
|
||||||
from rare.models.wrapper import Wrapper
|
from rare.models.wrapper import Wrapper
|
||||||
|
@ -30,25 +30,19 @@ if pf.system() in {"Linux", "FreeBSD"}:
|
||||||
logger = getLogger("WrapperSettings")
|
logger = getLogger("WrapperSettings")
|
||||||
|
|
||||||
|
|
||||||
class WrapperDialog(ButtonDialog):
|
class WrapperEditDialog(ButtonDialog):
|
||||||
result_ready = pyqtSignal(bool, str)
|
result_ready = pyqtSignal(bool, str)
|
||||||
|
|
||||||
def __init__(self, wrapper_name, wrapper_command, parent=None):
|
def __init__(self, parent=None):
|
||||||
super(WrapperDialog, self).__init__(parent=parent)
|
super(WrapperEditDialog, self).__init__(parent=parent)
|
||||||
if wrapper_name:
|
|
||||||
header = self.tr("Edit wrapper")
|
|
||||||
else:
|
|
||||||
header = self.tr("Add wrapper")
|
|
||||||
self.setWindowTitle(header)
|
|
||||||
self.setSubtitle(game_title(header, wrapper_name) if wrapper_name else header)
|
|
||||||
|
|
||||||
self.line_edit = QLineEdit(wrapper_command, self)
|
self.line_edit = QLineEdit(self)
|
||||||
self.line_edit.textChanged.connect(self.__on_text_changed)
|
self.line_edit.textChanged.connect(self.__on_text_changed)
|
||||||
|
|
||||||
layout = QVBoxLayout()
|
self.widget_layout = QVBoxLayout()
|
||||||
layout.addWidget(self.line_edit)
|
self.widget_layout.addWidget(self.line_edit)
|
||||||
|
|
||||||
self.setCentralLayout(layout)
|
self.setCentralLayout(self.widget_layout)
|
||||||
|
|
||||||
self.accept_button.setText(self.tr("Save"))
|
self.accept_button.setText(self.tr("Save"))
|
||||||
self.accept_button.setIcon(icon("fa.edit"))
|
self.accept_button.setIcon(icon("fa.edit"))
|
||||||
|
@ -56,6 +50,12 @@ class WrapperDialog(ButtonDialog):
|
||||||
|
|
||||||
self.result: Tuple = ()
|
self.result: Tuple = ()
|
||||||
|
|
||||||
|
def setup(self, wrapper: Wrapper):
|
||||||
|
header = self.tr("Edit wrapper")
|
||||||
|
self.setWindowTitle(header)
|
||||||
|
self.setSubtitle(game_title(header, wrapper.name))
|
||||||
|
self.line_edit.setText(wrapper.command)
|
||||||
|
|
||||||
@pyqtSlot(str)
|
@pyqtSlot(str)
|
||||||
def __on_text_changed(self, text: str):
|
def __on_text_changed(self, text: str):
|
||||||
self.accept_button.setEnabled(bool(text))
|
self.accept_button.setEnabled(bool(text))
|
||||||
|
@ -70,6 +70,27 @@ class WrapperDialog(ButtonDialog):
|
||||||
self.result = (False, self.line_edit.text())
|
self.result = (False, self.line_edit.text())
|
||||||
|
|
||||||
|
|
||||||
|
class WrapperAddDialog(WrapperEditDialog):
|
||||||
|
def __init__(self, parent=None):
|
||||||
|
super(WrapperAddDialog, self).__init__(parent=parent)
|
||||||
|
self.combo_box = QComboBox(self)
|
||||||
|
self.combo_box.addItem("None", "")
|
||||||
|
self.combo_box.currentIndexChanged.connect(self.__on_index_changed)
|
||||||
|
self.widget_layout.insertWidget(0, self.combo_box)
|
||||||
|
|
||||||
|
def setup(self, wrappers: Iterable[Wrapper]):
|
||||||
|
header = self.tr("Add wrapper")
|
||||||
|
self.setWindowTitle(header)
|
||||||
|
self.setSubtitle(header)
|
||||||
|
for wrapper in wrappers:
|
||||||
|
self.combo_box.addItem(f"{wrapper.name} ({wrapper.command})", wrapper.command)
|
||||||
|
|
||||||
|
@pyqtSlot(int)
|
||||||
|
def __on_index_changed(self, index: int):
|
||||||
|
command = self.combo_box.itemData(index, Qt.UserRole)
|
||||||
|
self.line_edit.setText(command)
|
||||||
|
|
||||||
|
|
||||||
class WrapperWidget(QFrame):
|
class WrapperWidget(QFrame):
|
||||||
# object: current, object: new
|
# object: current, object: new
|
||||||
update_wrapper = pyqtSignal(object, object)
|
update_wrapper = pyqtSignal(object, object)
|
||||||
|
@ -130,7 +151,8 @@ class WrapperWidget(QFrame):
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def __on_edit(self) -> None:
|
def __on_edit(self) -> None:
|
||||||
dialog = WrapperDialog(self.wrapper.name, self.wrapper.command, self)
|
dialog = WrapperEditDialog(self)
|
||||||
|
dialog.setup(self.wrapper)
|
||||||
dialog.result_ready.connect(self.__on_edit_result)
|
dialog.result_ready.connect(self.__on_edit_result)
|
||||||
dialog.show()
|
dialog.show()
|
||||||
|
|
||||||
|
@ -234,7 +256,8 @@ class WrapperSettings(QWidget):
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def __on_add(self) -> None:
|
def __on_add(self) -> None:
|
||||||
dialog = WrapperDialog("", "", self)
|
dialog = WrapperAddDialog(self)
|
||||||
|
dialog.setup(self.wrappers.user_wrappers)
|
||||||
dialog.result_ready.connect(self.__on_add_result)
|
dialog.result_ready.connect(self.__on_add_result)
|
||||||
dialog.show()
|
dialog.show()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue