optima35/ui/exif_handler_window.py
2024-12-30 20:19:49 +00:00

87 lines
3.1 KiB
Python

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()