studia/jezyki-skryptowe/image-editor/ImageManagePanel.py
2024-06-17 23:55:25 +02:00

74 lines
2.2 KiB
Python

from PyQt6.QtWidgets import QFileDialog, QWidget, QToolBar, QHBoxLayout, QPushButton
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()
def __init__(self):
super().__init__()
self.mgr = ImageManager(self._on_update)
layout = QHBoxLayout()
self.setLayout(layout)
self.open_button = QPushButton(QIcon.fromTheme("document-open"), "Open", self)
layout.addWidget(self.open_button)
self.open_button.clicked.connect(self._open_image)
self.save_button = QPushButton(QIcon("save.png"), "Save", self)
layout.addWidget(self.save_button)
self.save_button.clicked.connect(self._save_image)
self.close_button = QPushButton(QIcon("close.png"), "Close", self)
layout.addWidget(self.close_button)
self.close_button.clicked.connect(self._close_image)
self.undo_button = QPushButton(QIcon("undo.png"), "Undo", self)
layout.addWidget(self.undo_button)
self.undo_button.clicked.connect(self._undo)
self.redo_button = QPushButton(QIcon("redo.png"), "Redo", self)
layout.addWidget(self.redo_button)
self.redo_button.clicked.connect(self._redo)
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 (*.jpg *.jpeg *.png)")
if file_name:
self.mgr.open(file_name)
def _save_image(self):
file_name, _ = QFileDialog.getSaveFileName(self, "Save Image File", "", "Image Files (*.jpg *.png)")
if file_name:
self.mgr.save(file_name)