1
0
Fork 0
mirror of synced 2024-05-18 11:32:50 +12:00

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:
loathingKernel 2024-01-22 13:05:18 +02:00
parent fb91a55f30
commit 94030055cf

View file

@ -2,7 +2,7 @@ import platform as pf
import shlex
import shutil
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.QtGui import QDrag, QDropEvent, QDragEnterEvent, QDragMoveEvent, QFont, QMouseEvent, QShowEvent
@ -16,7 +16,7 @@ from PyQt5.QtWidgets import (
QScrollArea,
QAction,
QToolButton,
QMenu, QStackedWidget, QPushButton, QLineEdit, QVBoxLayout,
QMenu, QStackedWidget, QPushButton, QLineEdit, QVBoxLayout, QComboBox,
)
from rare.models.wrapper import Wrapper
@ -30,25 +30,19 @@ if pf.system() in {"Linux", "FreeBSD"}:
logger = getLogger("WrapperSettings")
class WrapperDialog(ButtonDialog):
class WrapperEditDialog(ButtonDialog):
result_ready = pyqtSignal(bool, str)
def __init__(self, wrapper_name, wrapper_command, parent=None):
super(WrapperDialog, 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)
def __init__(self, parent=None):
super(WrapperEditDialog, self).__init__(parent=parent)
self.line_edit = QLineEdit(wrapper_command, self)
self.line_edit = QLineEdit(self)
self.line_edit.textChanged.connect(self.__on_text_changed)
layout = QVBoxLayout()
layout.addWidget(self.line_edit)
self.widget_layout = QVBoxLayout()
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.setIcon(icon("fa.edit"))
@ -56,6 +50,12 @@ class WrapperDialog(ButtonDialog):
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)
def __on_text_changed(self, text: str):
self.accept_button.setEnabled(bool(text))
@ -70,6 +70,27 @@ class WrapperDialog(ButtonDialog):
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):
# object: current, object: new
update_wrapper = pyqtSignal(object, object)
@ -130,7 +151,8 @@ class WrapperWidget(QFrame):
@pyqtSlot()
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.show()
@ -234,7 +256,8 @@ class WrapperSettings(QWidget):
@pyqtSlot()
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.show()