from PySide6.QtCore import Signal from PySide6.QtWidgets import ( QMainWindow, QWidget, QVBoxLayout, QComboBox, QListWidget, QLineEdit, QHBoxLayout, QPushButton, QMessageBox ) # By ChatGPT class ExifEditor(QMainWindow): # Signal to emit the updated EXIF data exif_data_updated = Signal(dict) def __init__(self, exif_data): super().__init__() self.exif_data = exif_data self.current_key = None self.setWindowTitle("EXIF Editor") self.resize(400, 300) # Main widget and layout main_widget = QWidget() main_layout = QVBoxLayout() main_widget.setLayout(main_layout) self.setCentralWidget(main_widget) # ComboBox to select lists self.combo_box = QComboBox() self.combo_box.addItems(self.exif_data.keys()) self.combo_box.currentTextChanged.connect(self.load_list) main_layout.addWidget(self.combo_box) # List widget to display items self.list_widget = QListWidget() main_layout.addWidget(self.list_widget) # Line edit for adding items self.line_edit = QLineEdit() self.line_edit.setPlaceholderText("Enter new item...") main_layout.addWidget(self.line_edit) # Buttons: Add, Delete, Cancel button_layout = QHBoxLayout() self.add_button = QPushButton("Add") self.add_button.clicked.connect(self.add_item) self.delete_button = QPushButton("Delete") self.delete_button.clicked.connect(self.delete_item) self.cancel_button = QPushButton("Close") self.cancel_button.clicked.connect(self.close_editor) button_layout.addWidget(self.add_button) button_layout.addWidget(self.delete_button) button_layout.addWidget(self.cancel_button) main_layout.addLayout(button_layout) # Load the first list by default self.load_list(self.combo_box.currentText()) def load_list(self, key): """Load the selected list into the list widget.""" self.current_key = key self.list_widget.clear() if key in self.exif_data: self.list_widget.addItems(self.exif_data[key]) def add_item(self): """Add a new item to the selected list.""" new_item = self.line_edit.text().strip() if new_item: self.exif_data[self.current_key].append(new_item) self.list_widget.addItem(new_item) self.line_edit.clear() else: QMessageBox.warning(self, "Warning", "Cannot add an empty item.") def delete_item(self): """Delete the selected item from the list.""" selected_item = self.list_widget.currentItem() if selected_item: item_text = selected_item.text() self.exif_data[self.current_key].remove(item_text) self.list_widget.takeItem(self.list_widget.row(selected_item)) else: QMessageBox.warning(self, "Warning", "No item selected to delete.") def close_editor(self): """Emit the updated exif_data and close the editor.""" self.exif_data_updated.emit(self.exif_data) self.close()