88 lines
2.8 KiB
Python
88 lines
2.8 KiB
Python
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)}")
|