Source code for spinningdiskanalyzer.frontend.pages.original
from .original_ui import Ui_page
from .page import Page
from . import page
from .. import tasks
from PySide6.QtWidgets import QWidget
from pathlib import Path
[docs]
class Original(page.ConfirmClose, page.NavNext, Page):
"""Displays the stitched original image."""
def __init__(self, parent: QWidget = None):
# Load user interface design created in Qt Designer.
super().__init__(parent)
self.ui = Ui_page()
self.ui.setupUi(self)
# Make sure hiding buttons does not change layout.
button = self.ui.next
size_policy = button.sizePolicy()
size_policy.setRetainSizeWhenHidden(True)
button.setSizePolicy(size_policy)
# Connect signals to slots.
self.ui.back.clicked.connect(self.go_back.emit)
self.ui.next.clicked.connect(self.go_next.emit)
# Initialize instance attributes.
self.task = None
[docs]
def on_enter(self):
"""Called when entering the page."""
self.mark_busy()
self.compress_images()
[docs]
def compress_images(self):
"""Triggers the image compression."""
self.task = tasks.CompressImages()
self.task.status_update.connect(self.status_update)
self.task.status_clear.connect(self.status_clear)
self.task.finished.connect(self.stitch_images)
folder = Path(self.parent().select.ui.folder_display.text())
sources = folder
targets = folder/'analysis'/'compressed'
self.task.start(sources, targets)
[docs]
def stitch_images(self):
"""Triggers the image stitching."""
self.task = tasks.StitchImages()
self.task.status_update.connect(self.status_update)
self.task.status_clear.connect(self.status_clear)
self.task.finished.connect(self.tile_image)
folder = Path(self.parent().select.ui.folder_display.text())
sources = folder/'analysis'/'compressed'
target = folder/'analysis'/'stitched.tif'
self.task.start(sources, target)
[docs]
def tile_image(self):
"""Triggers tiling of the display image."""
self.task = tasks.TileImage()
self.task.status_update.connect(self.status_update)
self.task.status_clear.connect(self.status_clear)
folder = Path(self.parent().select.ui.folder_display.text())
source = folder/'analysis'/'stitched.tif'
target = folder/'tiles'/'stitched.dzi'
self.task.finished.connect(self.tasks_done)
self.task.start(source, target)
[docs]
def tasks_done(self):
"""Finishes up when all background tasks are done."""
self.task = None
folder = Path(self.parent().select.ui.folder_display.text())
tiled = folder/'tiles'/'stitched.dzi'
self.ui.viewer.load(tiled)
self.mark_ready()
[docs]
def invalidate(self):
"""Invalidates results from this analysis step."""
self.ui.viewer.load(None)
self.flush()
folder = Path(self.parent().select.ui.folder_display.text())
tasks.delete( (
folder/'analysis'/'compressed',
folder/'analysis'/'stitched.tif',
folder/'tiles'/'stitched.dzi',
folder/'tiles'/'stitched_files',
) )