1
0
Fork 0
mirror of synced 2024-06-29 11:40:37 +12:00
Rare/rare/components/tabs/settings/widgets/env_vars.py
loathingKernel 4b2bc7f91f
EnvVars: Handle environment variables with a QAbstractTableModel
Using a ChainMap and this custom model, we can display global environ
variables in the per-game settings, allowin better overview and
simpler override.
2023-03-29 14:07:19 +03:00

86 lines
3.5 KiB
Python

from logging import getLogger
from PyQt5.QtCore import QFileSystemWatcher
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.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 keyPressEvent(self, e):
# if e.key() == Qt.Key_Delete or e.key() == Qt.Key_Backspace:
# selected_items = self.ui.env_vars_table.selectedItems()
#
# if len(selected_items) == 0:
# return
#
# item_in_table = self.ui.env_vars_table.findItems(selected_items[0].text(), Qt.MatchExactly)
#
# # Our first selection is in column 0. So, we have to find out if the user
# # only selected keys, or keys and values. we use the check_if_item func
# if item_in_table[0].column() == 0:
# which_index_to_use = 1
# if len(selected_items) == 1:
# which_index_to_use = 0
# if self.check_if_item(selected_items[which_index_to_use]):
# # User selected keys and values, so we skip the values
# for i in selected_items[::2]:
# if i:
# config_helper.remove_option(f"{self.app_name}.env", i.text())
# self.ui.env_vars_table.removeRow(i.row())
# self.append_row()
# else:
# # user only selected keys
# for i in selected_items:
# if i:
# config_helper.remove_option(f"{self.app_name}.env", i.text())
# self.ui.env_vars_table.removeRow(i.row())
# self.append_row()
#
# # User only selected values, so we just set the text to ""
# elif item_in_table[0].column() == 1:
# [i.setText("") for i in selected_items]
#
# elif e.key() == Qt.Key_Escape:
# e.ignore()
def update_game(self, app_name):
self.table_model.load(app_name)