fixtracks/fixtracks/widgets/taskwidget.py

106 lines
3.6 KiB
Python

import enum
import logging
import pathlib
from PySide6.QtWidgets import QWidget, QPushButton, QFileDialog, QSizePolicy, QVBoxLayout
from PySide6.QtCore import Signal, Qt
from PySide6.QtGui import QIcon, QAction
from fixtracks.widgets.taskcard import TaskCard
class Task(enum.Enum):
CONVERT = "Convert"
MERGE = "Merge"
TRACKS = "Tracks"
class TasksWidget(QWidget):
clicked = Signal((Task))
opened = Signal()
def __init__(self, darkmode, parent = None):
super().__init__(parent)
self._iconsuffix = "_dark" if darkmode else "_light"
self._toolbarActions = {}
self._menuActions = {}
self._file_list = []
self.createActions()
self.createLayout()
def createActions(self):
self._openAction = QAction(QIcon(":icons/open" + self._iconsuffix), "Open folder")
self._openAction.setToolTip("Open data folder")
self._openAction.setShortcut("Ctrl+O")
self._openAction.triggered.connect(self._on_open)
self._openAction.setEnabled(True)
self._convertAction = QAction(QIcon(":/icons/convert" + self._iconsuffix), "Convert")
self._convertAction.setEnabled(True)
self._convertAction.setShortcut("F2")
self._convertAction.setToolTip("Convert JSON pose files to to Pandas data frames")
self._convertAction.triggered.connect(self._convert_clicked)
self._mergeAction = QAction(QIcon(":/icons/merge" + self._iconsuffix), "Merge")
self._mergeAction.setToolTip("Merge detections from two cameras to the same dataset")
self._mergeAction.setShortcut("F3")
self._mergeAction.setEnabled(False)
self._mergeAction.triggered.connect(self._merge_clicked)
self._tracksAction = QAction(QIcon(":/icons/tracks" + self._iconsuffix), "Tracks")
self._tracksAction.setToolTip("Fix tracking of individuals, reassign track ids.")
self._tracksAction.setEnabled(False)
self._tracksAction.setShortcut("F4")
self._tracksAction.triggered.connect(self._tracks_clicked)
self._menuActions["File"] = [self._openAction]
self._menuActions["Tools"] = [self._convertAction, self._mergeAction, self._tracksAction]
self._toolbarActions = [self._convertAction, self._mergeAction, self._tracksAction]
def createLayout(self):
opentask = TaskCard("Open folder", ":icons/open" + self._iconsuffix, "Open data folder")
opentask.clicked.connect(self._on_open)
l = QVBoxLayout()
l.setAlignment(Qt.AlignmentFlag.AlignCenter)
l.addWidget(opentask, Qt.AlignmentFlag.AlignCenter)
self.setLayout(l)
@property
def toolbarActions(self):
return self._toolbarActions
@property
def menuActions(self):
return self._menuActions
def _merge_clicked(self):
self.clicked.emit(Task.MERGE)
def _tracks_clicked(self):
self.clicked.emit(Task.TRACKS)
def _convert_clicked(self):
self.clicked.emit(Task.CONVERT)
def _on_open(self):
logging.debug("TasksWidget:select data folder")
folder = QFileDialog.getExistingDirectory()
if len(folder.strip()) == 0:
logging.debug("TasksWidget: is EMPTY")
return
p = pathlib.Path(folder)
logging.debug("TasksWidget: selected path is %s", p)
self._file_list = []
for d in p.iterdir():
if d.is_file():
self._file_list.append(d)
if len(self._file_list) > 0:
self._mergeAction.setEnabled(True)
self._tracksAction.setEnabled(True)
self.opened.emit()
@property
def fileList(self):
return self._file_list