From 639395c454e3e132592328d65bbb2fba8ff84e1b Mon Sep 17 00:00:00 2001 From: loathingKernel <142770+loathingKernel@users.noreply.github.com> Date: Fri, 31 Mar 2023 02:42:16 +0300 Subject: [PATCH] EnvVars: Re-enable key press handler EnvVarsModel: Better vertical header icons --- .../tabs/settings/widgets/env_vars.py | 50 ++++----------- .../tabs/settings/widgets/env_vars_model.py | 61 +++++++++++-------- 2 files changed, 48 insertions(+), 63 deletions(-) diff --git a/rare/components/tabs/settings/widgets/env_vars.py b/rare/components/tabs/settings/widgets/env_vars.py index e6a679ea..2c77085e 100644 --- a/rare/components/tabs/settings/widgets/env_vars.py +++ b/rare/components/tabs/settings/widgets/env_vars.py @@ -1,6 +1,6 @@ from logging import getLogger -from PyQt5.QtCore import QFileSystemWatcher +from PyQt5.QtCore import QFileSystemWatcher, Qt from PyQt5.QtWidgets import ( QGroupBox, QHeaderView, @@ -44,42 +44,18 @@ class EnvVars(QGroupBox): 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 keyPressEvent(self, e): + if e.key() == Qt.Key_Delete or e.key() == 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 e.key() == Qt.Key_Escape: + e.ignore() def update_game(self, app_name): self.table_model.load(app_name) diff --git a/rare/components/tabs/settings/widgets/env_vars_model.py b/rare/components/tabs/settings/widgets/env_vars_model.py index cf545388..c60f1077 100644 --- a/rare/components/tabs/settings/widgets/env_vars_model.py +++ b/rare/components/tabs/settings/widgets/env_vars_model.py @@ -1,14 +1,12 @@ import re import sys from collections import ChainMap -from pprint import pprint from typing import Any, Union from rare.utils.misc import icon from PyQt5.QtCore import Qt, QModelIndex, QAbstractTableModel, pyqtSlot from PyQt5.QtGui import QFont -from PyQt5.QtWidgets import QTableView, QHeaderView, QApplication, QDialog, QVBoxLayout -from legendary.core import LegendaryCore +from rare.lgndr.core import LegendaryCore class EnvVarsTableModel(QAbstractTableModel): @@ -127,12 +125,14 @@ class EnvVarsTableModel(QAbstractTableModel): return self.__title(section) if role == Qt.DecorationRole: if orientation == Qt.Vertical: - if section < self.__data_length() and not self.__is_readonly(section): + if section < self.__data_length(): + if self.__is_readonly(section) or not self.__is_local(section): + return icon("mdi.lock", "ei.lock") if self.__is_global(section) and self.__is_local(section): - return icon("mdi.refresh-circle", "ei.refresh") + return icon("mdi.refresh", "ei.refresh") if self.__is_local(section): return icon("mdi.delete", "ei.remove-sign") - return icon("mdi.lock", "ei.lock") + return icon("mdi.plus", "ei.plus-sign") if role == Qt.TextAlignmentRole: return Qt.AlignVCenter + Qt.AlignHCenter return None @@ -241,28 +241,37 @@ class EnvVarsTableModel(QAbstractTableModel): return True -class MainDialog(QDialog): - def __init__(self): - super().__init__() - - self.table = QTableView() - self.model = EnvVarsTableModel(LegendaryCore()) - self.model.load("Tamarind") - - self.table.setModel(self.model) - self.table.verticalHeader().sectionPressed.disconnect() - self.table.horizontalHeader().sectionPressed.disconnect() - self.table.verticalHeader().sectionClicked.connect(self.model.removeRow) - self.table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) - self.table.horizontalHeader().setStretchLastSection(True) - self.table.setCornerButtonEnabled(False) - - self.setLayout(QVBoxLayout(self)) - self.layout().addWidget(self.table) - - if __name__ == "__main__": + from PyQt5.QtWidgets import QApplication, QDialog, QVBoxLayout, QTableView, QHeaderView + + from rare.resources import static_css + from rare.resources.stylesheets import RareStyle + from rare.utils.misc import set_style_sheet + from legendary.core import LegendaryCore + + class MainDialog(QDialog): + def __init__(self): + super().__init__() + + self.table = QTableView() + self.model = EnvVarsTableModel(LegendaryCore()) + self.model.load("Tamarind") + + self.table.setModel(self.model) + self.table.verticalHeader().sectionPressed.disconnect() + self.table.horizontalHeader().sectionPressed.disconnect() + self.table.verticalHeader().sectionClicked.connect(self.model.removeRow) + self.table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeToContents) + self.table.horizontalHeader().setStretchLastSection(True) + self.table.setCornerButtonEnabled(False) + + self.setLayout(QVBoxLayout(self)) + self.layout().addWidget(self.table) + app = QApplication(sys.argv) + + set_style_sheet("RareStyle") + window = MainDialog() window.setFixedSize(800, 600) window.show()