from PyQt6.QtWidgets import QFileDialog, QWidget, QHBoxLayout, QPushButton, QMessageBox, QGroupBox from PyQt6.QtGui import QIcon from PyQt6.QtCore import pyqtSignal import numpy as np from .ImageManager import ImageManager class ImageManagePanel(QWidget): on_update = pyqtSignal(np.ndarray) on_close = pyqtSignal() on_open = pyqtSignal() def __init__(self): super().__init__() self.mgr = ImageManager(self._on_update) main_layout = QHBoxLayout() self.setLayout(main_layout) file_group_box = QGroupBox("File") layout = QHBoxLayout() self.open_button = QPushButton("Open", self) layout.addWidget(self.open_button) self.open_button.clicked.connect(self._open_image) self.save_button = QPushButton("Save", self) layout.addWidget(self.save_button) self.save_button.clicked.connect(self._save_image) self.close_button = QPushButton("Close", self) layout.addWidget(self.close_button) self.close_button.clicked.connect(self._close_image) self.undo_button = QPushButton("Undo", self) layout.addWidget(self.undo_button) self.undo_button.clicked.connect(self._undo) self.redo_button = QPushButton("Redo", self) layout.addWidget(self.redo_button) self.redo_button.clicked.connect(self._redo) file_group_box.setLayout(layout) main_layout.addWidget(file_group_box) self._enable_buttons() def _redo(self): self.mgr.redo() self._enable_buttons() def _undo(self): self.mgr.undo() self._enable_buttons() def _on_update(self, image): self.on_update.emit(image) self._enable_buttons() def _enable_buttons(self): self.undo_button.setEnabled(self.mgr.can_undo()) self.redo_button.setEnabled(self.mgr.can_redo()) def _close_image(self): self.mgr.close() self.on_close.emit() def _open_image(self): file_name, _ = QFileDialog.getOpenFileName(self, "Open Image File", "", "Image Files (*.png *.jpg *.jpeg *.bmp)") self.open(file_name) def _save_image(self): try: file_name, _ = QFileDialog.getSaveFileName(self, "Save Image File", "", "Image Files (*.png *.jpg *.jpeg *.bmp)") if file_name: self.mgr.save(file_name) except Exception as e: QMessageBox.critical(self, "Error Saving File", f"An error occurred while saving the file:\n{str(e)}") def open(self, file_name): try: if file_name: self.mgr.open(file_name) self.on_open.emit() except Exception as e: QMessageBox.critical(self, "Error Opening File", f"An error occurred while opening the file:\n{str(e)}")