106 lines
3.6 KiB
Python
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
|