feat(settings): block settings
Signed-off-by: Boris Yumankulov <boria138@altlinux.org>
This commit is contained in:
@@ -2,7 +2,7 @@ import os
|
|||||||
import tempfile
|
import tempfile
|
||||||
import re
|
import re
|
||||||
from typing import cast, TYPE_CHECKING
|
from typing import cast, TYPE_CHECKING
|
||||||
from PySide6.QtGui import QPixmap, QIcon, QTextCursor
|
from PySide6.QtGui import QPixmap, QIcon, QTextCursor, QColor
|
||||||
from PySide6.QtWidgets import (
|
from PySide6.QtWidgets import (
|
||||||
QDialog, QFormLayout, QHBoxLayout, QLabel, QVBoxLayout, QListWidget, QScrollArea, QWidget, QListWidgetItem, QSizePolicy, QApplication, QProgressBar, QScroller,
|
QDialog, QFormLayout, QHBoxLayout, QLabel, QVBoxLayout, QListWidget, QScrollArea, QWidget, QListWidgetItem, QSizePolicy, QApplication, QProgressBar, QScroller,
|
||||||
QTabWidget, QTableWidget, QHeaderView, QMessageBox, QTableWidgetItem, QTextEdit, QAbstractItemView, QStackedWidget
|
QTabWidget, QTableWidget, QHeaderView, QMessageBox, QTableWidgetItem, QTextEdit, QAbstractItemView, QStackedWidget
|
||||||
@@ -1694,6 +1694,7 @@ class ExeSettingsDialog(QDialog):
|
|||||||
self.value_widgets = {}
|
self.value_widgets = {}
|
||||||
self.original_values = {}
|
self.original_values = {}
|
||||||
self.available_keys = set()
|
self.available_keys = set()
|
||||||
|
self.blocked_keys = set()
|
||||||
self.branch_name = _("Unknown")
|
self.branch_name = _("Unknown")
|
||||||
|
|
||||||
self.setWindowTitle(_("Exe Settings"))
|
self.setWindowTitle(_("Exe Settings"))
|
||||||
@@ -1830,15 +1831,21 @@ class ExeSettingsDialog(QDialog):
|
|||||||
"""Handle --list-db output and extract available keys."""
|
"""Handle --list-db output and extract available keys."""
|
||||||
process = cast(QProcess, self.sender())
|
process = cast(QProcess, self.sender())
|
||||||
self.available_keys = set()
|
self.available_keys = set()
|
||||||
|
self.blocked_keys = set()
|
||||||
if exit_code == 0 and exit_status == QProcess.ExitStatus.NormalExit:
|
if exit_code == 0 and exit_status == QProcess.ExitStatus.NormalExit:
|
||||||
output = bytes(process.readAllStandardOutput().data()).decode('utf-8', 'ignore')
|
output = bytes(process.readAllStandardOutput().data()).decode('utf-8', 'ignore')
|
||||||
for line in output.splitlines():
|
for line in output.splitlines():
|
||||||
if "Branch in used:" in line:
|
if "Branch in used:" in line:
|
||||||
self.branch_name = line.split(":", 1)[1].strip()
|
self.branch_name = line.split(":", 1)[1].strip()
|
||||||
self.branch_label.setText(_("Detected branch: ") + self.branch_name)
|
self.branch_label.setText(_("Detected branch: ") + self.branch_name)
|
||||||
for token in line.split():
|
continue
|
||||||
if token.startswith("PW_"):
|
stripped_line = line.strip()
|
||||||
self.available_keys.add(token.strip())
|
if stripped_line.startswith("PW_"):
|
||||||
|
parts = stripped_line.split(maxsplit=1)
|
||||||
|
key = parts[0]
|
||||||
|
self.available_keys.add(key)
|
||||||
|
if len(parts) > 1 and parts[1] == "blocked":
|
||||||
|
self.blocked_keys.add(key)
|
||||||
|
|
||||||
# Показываем только пересечение
|
# Показываем только пересечение
|
||||||
self.available_keys &= set(self.toggle_settings.keys())
|
self.available_keys &= set(self.toggle_settings.keys())
|
||||||
@@ -1865,6 +1872,11 @@ class ExeSettingsDialog(QDialog):
|
|||||||
key, val = line.split('=', 1)
|
key, val = line.split('=', 1)
|
||||||
self.current_settings[key.strip()] = val.strip()
|
self.current_settings[key.strip()] = val.strip()
|
||||||
logger.debug(f"Loaded current settings: {self.current_settings}")
|
logger.debug(f"Loaded current settings: {self.current_settings}")
|
||||||
|
|
||||||
|
# Force blocked settings to '0'
|
||||||
|
for key in self.blocked_keys:
|
||||||
|
self.current_settings[key] = '0'
|
||||||
|
|
||||||
self.populate_table()
|
self.populate_table()
|
||||||
|
|
||||||
def populate_table(self):
|
def populate_table(self):
|
||||||
@@ -1886,21 +1898,29 @@ class ExeSettingsDialog(QDialog):
|
|||||||
|
|
||||||
name_item = QTableWidgetItem(toggle)
|
name_item = QTableWidgetItem(toggle)
|
||||||
name_item.setFlags(Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled)
|
name_item.setFlags(Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled)
|
||||||
self.settings_table.setItem(row, 0, name_item)
|
|
||||||
|
|
||||||
current_val = self.current_settings.get(toggle, '0')
|
current_val = self.current_settings.get(toggle, '0')
|
||||||
|
is_blocked = toggle in self.blocked_keys
|
||||||
checkbox = QTableWidgetItem()
|
checkbox = QTableWidgetItem()
|
||||||
checkbox.setFlags(checkbox.flags() | Qt.ItemFlag.ItemIsUserCheckable)
|
checkbox.setFlags(checkbox.flags() | Qt.ItemFlag.ItemIsUserCheckable)
|
||||||
checkbox.setCheckState(Qt.CheckState.Checked if current_val == '1' else Qt.CheckState.Unchecked)
|
check_state = Qt.CheckState.Checked if current_val == '1' and not is_blocked else Qt.CheckState.Unchecked
|
||||||
|
checkbox.setCheckState(check_state)
|
||||||
checkbox.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
|
checkbox.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
|
||||||
|
if is_blocked:
|
||||||
|
checkbox.setFlags(checkbox.flags() & ~Qt.ItemFlag.ItemIsUserCheckable)
|
||||||
|
checkbox.setBackground(QColor(240, 240, 240))
|
||||||
|
name_item.setForeground(QColor(128, 128, 128))
|
||||||
self.settings_table.setItem(row, 1, checkbox)
|
self.settings_table.setItem(row, 1, checkbox)
|
||||||
|
|
||||||
desc_item = QTableWidgetItem(description)
|
desc_item = QTableWidgetItem(description)
|
||||||
desc_item.setFlags(Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled)
|
desc_item.setFlags(Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled)
|
||||||
desc_item.setToolTip(description)
|
desc_item.setToolTip(description)
|
||||||
desc_item.setTextAlignment(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter)
|
desc_item.setTextAlignment(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter)
|
||||||
|
if is_blocked:
|
||||||
|
desc_item.setForeground(QColor(128, 128, 128))
|
||||||
self.settings_table.setItem(row, 2, desc_item)
|
self.settings_table.setItem(row, 2, desc_item)
|
||||||
|
|
||||||
|
self.settings_table.setItem(row, 0, name_item)
|
||||||
self.value_widgets[(row, 1)] = checkbox
|
self.value_widgets[(row, 1)] = checkbox
|
||||||
self.original_values[toggle] = current_val
|
self.original_values[toggle] = current_val
|
||||||
|
|
||||||
@@ -1913,6 +1933,8 @@ class ExeSettingsDialog(QDialog):
|
|||||||
"""Apply changes by collecting diffs and running --edit-db."""
|
"""Apply changes by collecting diffs and running --edit-db."""
|
||||||
changes = []
|
changes = []
|
||||||
for key, orig_val in self.original_values.items():
|
for key, orig_val in self.original_values.items():
|
||||||
|
if key in self.blocked_keys:
|
||||||
|
continue # Skip blocked keys
|
||||||
row = -1
|
row = -1
|
||||||
for r in range(self.settings_table.rowCount()):
|
for r in range(self.settings_table.rowCount()):
|
||||||
item0 = self.settings_table.item(r, 0)
|
item0 = self.settings_table.item(r, 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user