studia/jezyki-skryptowe/image-editor/editor/ImageManagePanel.py

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)}")