fosKeyMan
Loading...
Searching...
No Matches
metadataeditor.py
Go to the documentation of this file.
1from PySide6.QtCore import QSize
2from PySide6.QtGui import QIcon
3from PySide6.QtWidgets import QDialog, QPushButton, QTableWidgetItem, QMessageBox, QSizePolicy, QHeaderView
4from frontend.ui.uiedit import Ui_Edit
5import frontend.ui.toolicons_rc
6from utils.utils import apply_icon_button_style
7
8
9class MetadataEditor(QDialog):
10 r"""
11 Class to edit the metadata.json contents for a keyfile.
12 """
13 def __init__(self, serial_number, metadata, parent):
14 r"""
15 Initialize the MetadataEditor dialog.
16
17 \param serial_number (str): Serial number of the keyfile.
18 \param metadata (dict): Existing metadata dictionary.
19 \param parent (QWidget, optional): Parent widget for this dialog.
20 """
21 super(MetadataEditor, self).__init__(parent)
22
23 self.serial_number = serial_number
24 self.original_metadata = metadata
25
26 self.ui = Ui_Edit()
27 self.ui.setupUi(self)
28
29 self.setup_main_table()
30 self.setup_add_table()
31
32 self.ui.cancelButton.clicked.connect(self.reject)
33 self.ui.confirmButton.clicked.connect(self.confirm_and_close)
34
35 self.result_metadata = None
36
38 r"""
39 Set up the main table to display and edit existing metadata entries.
40 """
41 self.ui.tableWidget.setColumnCount(3)
42 self.ui.tableWidget.setHorizontalHeaderLabels(["Property", "Value", ""])
43 self.ui.tableWidget.horizontalHeader().setStretchLastSection(False)
44 self.ui.tableWidget.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeMode.Stretch)
45 self.ui.tableWidget.horizontalHeader().setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch)
46 self.ui.tableWidget.horizontalHeader().setSectionResizeMode(2, QHeaderView.ResizeMode.Fixed)
47 self.ui.tableWidget.setColumnWidth(2, 40)
48
49 for key, value in self.original_metadata.items():
50 self.insert_json_row(key, value)
51
52 def setup_add_table(self):
53 r"""
54 Set up a small input table for adding new metadata key-value pairs.
55 """
56 self.ui.addTableWidget.setColumnCount(3)
57 self.ui.addTableWidget.setRowCount(1)
58 self.ui.addTableWidget.horizontalHeader().setVisible(False)
59 self.ui.addTableWidget.verticalHeader().setVisible(False)
60
61 self.ui.addTableWidget.horizontalHeader().setStretchLastSection(False)
62 self.ui.addTableWidget.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeMode.Stretch)
63 self.ui.addTableWidget.horizontalHeader().setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch)
64 self.ui.addTableWidget.horizontalHeader().setSectionResizeMode(2, QHeaderView.ResizeMode.Fixed)
65 self.ui.addTableWidget.setColumnWidth(2, 40)
66
67 row_height = self.ui.addTableWidget.verticalHeader().defaultSectionSize()
68 self.ui.addTableWidget.setFixedHeight(row_height + 2)
69
70 self.ui.addTableWidget.setItem(0, 0, QTableWidgetItem())
71 self.ui.addTableWidget.setItem(0, 1, QTableWidgetItem())
72
73 add_button = QPushButton()
74 add_button.setIcon(QIcon(":/icons/icons/editadd.svg"))
75 apply_icon_button_style(add_button)
76 add_button.setIconSize(QSize(20, 20))
77 add_button.setFixedSize(24, 24)
78 add_button.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
79 self.ui.addTableWidget.setCellWidget(0, 2, add_button)
80
81 add_button.clicked.connect(self.add_new_row)
82
83 def insert_json_row(self, key, value):
84 r"""
85 Insert a new key-value pair as a row into the main metadata table.
86 """
87 row_position = self.ui.tableWidget.rowCount()
88 self.ui.tableWidget.insertRow(row_position)
89
90 self.ui.tableWidget.setItem(row_position, 0, QTableWidgetItem(key))
91 self.ui.tableWidget.setItem(row_position, 1, QTableWidgetItem(value))
92
93 delete_button = QPushButton("")
94 delete_button.setIcon(QIcon(":/icons/icons/editbin.svg"))
95 apply_icon_button_style(delete_button)
96 delete_button.setIconSize(QSize(20, 20))
97 delete_button.setFixedSize(24, 24)
98 delete_button.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
99 delete_button.clicked.connect(self.delete_current_row)
100 self.ui.tableWidget.setCellWidget(row_position, 2, delete_button)
101
103 r"""
104 Find the row where the clicked button is located and delete it
105 """
106 button = self.sender()
107 if not button:
108 return
109
110 for row in range(self.ui.tableWidget.rowCount()):
111 if self.ui.tableWidget.cellWidget(row, 2) == button:
112 self.ui.tableWidget.removeRow(row)
113 break
114
115 def add_new_row(self):
116 r"""
117 Add a new metadata entry from the input fields to the main table.
118 """
119 key_item = self.ui.addTableWidget.item(0, 0)
120 value_item = self.ui.addTableWidget.item(0, 1)
121
122 key = key_item.text().strip() if key_item else ''
123 value = value_item.text().strip() if value_item else ''
124
125 if key and value:
126 self.insert_json_row(key, value)
127 self.ui.addTableWidget.setItem(0, 0, QTableWidgetItem())
128 self.ui.addTableWidget.setItem(0, 1, QTableWidgetItem())
129 else:
130 QMessageBox.warning(self, self.tr("Input Error"), self.tr("Both Property and Value must be filled."))
131
133 r"""
134 Confirm the changes and close the editor dialog.
135 """
136 updated_metadata = {}
137 for row in range(self.ui.tableWidget.rowCount()):
138 key_item = self.ui.tableWidget.item(row, 0)
139 value_item = self.ui.tableWidget.item(row, 1)
140 if key_item and value_item:
141 updated_metadata[key_item.text()] = value_item.text()
142
143 self.result_metadata = updated_metadata
144 self.accept()
Class to edit the metadata.json contents for a keyfile.
setup_main_table(self)
Set up the main table to display and edit existing metadata entries.
insert_json_row(self, key, value)
Insert a new key-value pair as a row into the main metadata table.
__init__(self, serial_number, metadata, parent)
Initialize the MetadataEditor dialog.
setup_add_table(self)
Set up a small input table for adding new metadata key-value pairs.