1
0
Fork 0
mirror of synced 2024-05-20 04:22:58 +12:00
Rare/rare/components/tabs/settings/widgets/env_vars.py
loathingKernel cd1743cb92 GameSettings: Re-strucure settings widgets
The default widgets only implement the settings for the `default` "app_name"
The game specific widgets sub-class the default widgets and implement
whatever they additionally need locally.

Remove multiple calls to save config and save when the game settings gets hidden.
2024-02-12 21:52:07 +02:00

70 lines
2.6 KiB
Python

from logging import getLogger
from PyQt5.QtCore import QFileSystemWatcher, Qt
from PyQt5.QtGui import QShowEvent
from PyQt5.QtWidgets import (
QGroupBox,
QHeaderView,
QVBoxLayout,
QTableView,
)
from rare.shared import LegendaryCoreSingleton
from .env_vars_model import EnvVarsTableModel
logger = getLogger("EnvVars")
class EnvVars(QGroupBox):
def __init__(self, parent):
super(EnvVars, self).__init__(parent=parent)
self.setTitle(self.tr("Environment variables"))
self.core = LegendaryCoreSingleton()
self.app_name: str = "default"
self.table_model = EnvVarsTableModel(self.core)
self.table_view = QTableView(self)
self.table_view.setModel(self.table_model)
self.table_view.verticalHeader().sectionPressed.disconnect()
self.table_view.horizontalHeader().sectionPressed.disconnect()
self.table_view.verticalHeader().sectionClicked.connect(self.table_model.removeRow)
self.table_view.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents)
self.table_view.horizontalHeader().setStretchLastSection(True)
self.table_view.setCornerButtonEnabled(False)
# FIXME: investigate signaling between widgets
# We use this function to keep an eye on the config.
# When the user uses for example the wineprefix settings, we need to update the table.
# With this function, when the config file changes, we update the table.
# self.config_file_watcher = QFileSystemWatcher([str(self.core.lgd.config_path)], self)
# self.config_file_watcher.fileChanged.connect(self.table_model.reset)
row_height = self.table_view.rowHeight(0)
self.table_view.setMinimumHeight(row_height * 7)
layout = QVBoxLayout(self)
layout.addWidget(self.table_view)
def showEvent(self, a0: QShowEvent):
if a0.spontaneous():
return super().showEvent(a0)
self.table_model.load(self.app_name)
return super().showEvent(a0)
def keyPressEvent(self, a0):
if a0.key() in {Qt.Key_Delete, Qt.Key_Backspace}:
indexes = self.table_view.selectedIndexes()
if not len(indexes):
return
for idx in indexes:
if idx.column() == 0:
self.table_view.model().removeRow(idx.row())
elif idx.column() == 1:
self.table_view.model().setData(idx, "", Qt.EditRole)
elif a0.key() == Qt.Key_Escape:
a0.ignore()
def reset_model(self):
self.table_model.reset()