diff --git a/fixtracks/icons/Unbenannt.afdesign b/fixtracks/icons/Unbenannt.afdesign index a511541..36af438 100644 Binary files a/fixtracks/icons/Unbenannt.afdesign and b/fixtracks/icons/Unbenannt.afdesign differ diff --git a/fixtracks/icons/convert_dark.png b/fixtracks/icons/convert_dark.png index a163ff4..b9fabc3 100644 Binary files a/fixtracks/icons/convert_dark.png and b/fixtracks/icons/convert_dark.png differ diff --git a/fixtracks/icons/convert_light.png b/fixtracks/icons/convert_light.png index 760f723..20350a1 100644 Binary files a/fixtracks/icons/convert_light.png and b/fixtracks/icons/convert_light.png differ diff --git a/fixtracks/icons/merge_dark.png b/fixtracks/icons/merge_dark.png index 26e7b30..3b85d19 100644 Binary files a/fixtracks/icons/merge_dark.png and b/fixtracks/icons/merge_dark.png differ diff --git a/fixtracks/icons/merge_light.png b/fixtracks/icons/merge_light.png index 0242ed9..347f23c 100644 Binary files a/fixtracks/icons/merge_light.png and b/fixtracks/icons/merge_light.png differ diff --git a/fixtracks/icons/open_dark.png b/fixtracks/icons/open_dark.png index 6956342..7f1c687 100644 Binary files a/fixtracks/icons/open_dark.png and b/fixtracks/icons/open_dark.png differ diff --git a/fixtracks/icons/open_light.png b/fixtracks/icons/open_light.png index ba24023..59d0e45 100644 Binary files a/fixtracks/icons/open_light.png and b/fixtracks/icons/open_light.png differ diff --git a/fixtracks/icons/tracks_dark.png b/fixtracks/icons/tracks_dark.png index ba0dc42..04a5d1a 100644 Binary files a/fixtracks/icons/tracks_dark.png and b/fixtracks/icons/tracks_dark.png differ diff --git a/fixtracks/icons/tracks_light.png b/fixtracks/icons/tracks_light.png index 0f5909f..7071482 100644 Binary files a/fixtracks/icons/tracks_light.png and b/fixtracks/icons/tracks_light.png differ diff --git a/fixtracks/resources.qrc b/fixtracks/resources.qrc index c1c97b8..3c66ee6 100644 --- a/fixtracks/resources.qrc +++ b/fixtracks/resources.qrc @@ -7,7 +7,7 @@ icons/nix_close.png icons/open_light.png icons/open_dark.png - icons/merge.png + icons/merge_light.png icons/merge_dark.png icons/convert_light.png icons/convert_dark.png diff --git a/fixtracks/widgets/centralwidget.py b/fixtracks/widgets/centralwidget.py index a78c407..7b37ad9 100644 --- a/fixtracks/widgets/centralwidget.py +++ b/fixtracks/widgets/centralwidget.py @@ -1,7 +1,7 @@ import logging -from PySide6.QtWidgets import QWidget, QStackedLayout, QSizePolicy, QHBoxLayout, QPushButton, QLabel, QVBoxLayout, QGridLayout -from PySide6.QtCore import Qt, QSize +from PySide6.QtWidgets import QWidget, QStackedLayout, QSizePolicy, QHBoxLayout, QFrame, QLabel, QVBoxLayout, QGridLayout, QSpacerItem +from PySide6.QtCore import Qt, QSize, Signal from PySide6.QtGui import QIcon, QFont, QImage, QPixmap from fixtracks.widgets.tracks import FixTracks @@ -9,22 +9,25 @@ from fixtracks.widgets.detectionmerge import MergeDetections from fixtracks.widgets.taskwidget import TasksWidget, Task from fixtracks.widgets.converter import Json2PandasConverter -class TaskCard(QWidget): +class TaskCard(QFrame): + clicked = Signal() - def __init__(self, name, icon, description, taks, parent=None): + def __init__(self, name, icon, description, parent=None): super().__init__(parent) - self.setMaximumSize(300, 150) - # self.setStyleSheet("background-color: gray;") + self.setMaximumSize(300, 200) + self.setFrameShape(QFrame.Shape.Box) + # self.setStyleSheet("border: 2px solid gray; border-radius: 15px; border-color: white;background-color: green;") font = QFont() font.setBold(True) - font.setPointSize(14) + font.setPointSize(18) name_label = QLabel(name) name_label.setFont(font) description_label = QLabel(description) - description_label.setLineWidth(100) + description_label.setLineWidth(150) + description_label.setWordWrap(True) icon_label = QLabel() - icon_label.setFixedSize(128, 128) + icon_label.setFixedSize(150, 150) pixmap = QPixmap.fromImage(QImage(icon)) scaled_pixmap = pixmap.scaled(icon_label.size(), Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation) icon_label.setPixmap(scaled_pixmap) @@ -32,16 +35,15 @@ class TaskCard(QWidget): hbox = QHBoxLayout() hbox.addWidget(icon_label) hbox.addWidget(description_label) - + self.mousePressEvent = self._on_click lyt = QVBoxLayout() lyt.addWidget(name_label) lyt.addLayout(hbox) self.setLayout(lyt) - # trackBtn.clicked.connect(lambda: self._select_task(track)) - - + def _on_click(self, event): + self.clicked.emit() class CentralWidget(QWidget): @@ -49,7 +51,7 @@ class CentralWidget(QWidget): def __init__(self, darkmode, parent=None): super().__init__(parent) self.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) - + self._folderopen = False self._tw = TasksWidget(darkmode) self._tw.clicked.connect(self._select_task) self._tw.opened.connect(self.on_open) @@ -62,44 +64,40 @@ class CentralWidget(QWidget): self._trackwidget = FixTracks(self) self._trackwidget.back.connect(self._on_back) + version = "dark" if darkmode else "light" + convert_task = TaskCard(Task.CONVERT.value, f":/icons/convert_{version}", + "Convert JSON pose files to to Pandas data frames") + convert_task.clicked.connect(lambda: self._select_task(Task.CONVERT)) + merge_task = TaskCard(Task.MERGE.value, f":/icons/merge_{version}", "Merge detections from two cameras to the same dataset") + merge_task.clicked.connect(lambda: self._select_task(Task.MERGE)) + track_task = TaskCard(Task.MERGE.value, f":/icons/tracks_{version}", "Fix tracking of individuals, reassign track ids.") + track_task.clicked.connect(lambda: self._select_task(Task.TRACKS)) - # convert = Task.CONVERT - # convertBtn = QPushButton(QIcon(":/icons/convert_light"), Task.CONVERT.value) - # convertBtn.setToolTip("Convert JSON pose files to to Pandas data frames") - # convertBtn.setIconSize(QSize(128, 128)) - # convertBtn.clicked.connect(lambda: self._select_task(convert)) - convert_task = TaskCard(Task.CONVERT.value, ":/icons/convert_light", "Convert JSON pose files to to Pandas data frames", Task.CONVERT) - - merge = Task.MERGE - mergeBtn = QPushButton(QIcon(":/icons/merge_light"), Task.MERGE.value) - mergeBtn.setToolTip("Merge detections from two cameras to the same dataset") - mergeBtn.setIconSize(QSize(128, 128)) - mergeBtn.clicked.connect(lambda: self._select_task(merge)) - - track = Task.TRACKS - trackBtn = QPushButton(QIcon(":/icons/tracks_light"), Task.TRACKS.value) - trackBtn.setToolTip("Fix tracking of individuals, reassign track ids.") - trackBtn.setIconSize(QSize(128, 128)) - trackBtn.clicked.connect(lambda: self._select_task(track)) grid = QGridLayout() grid.addWidget(convert_task, 0, 0, alignment=Qt.AlignmentFlag.AlignCenter) - grid.addWidget(mergeBtn, 1, 0, alignment=Qt.AlignmentFlag.AlignCenter) - grid.addWidget(trackBtn, 2, 0, alignment=Qt.AlignmentFlag.AlignCenter) + grid.addWidget(merge_task, 1, 0, alignment=Qt.AlignmentFlag.AlignCenter) + grid.addWidget(track_task, 0, 1, alignment=Qt.AlignmentFlag.AlignCenter) + grid.setAlignment(Qt.AlignmentFlag.AlignCenter) + l = QVBoxLayout() + l.setAlignment(Qt.AlignmentFlag.AlignHCenter) + l.addItem(QSpacerItem(100, 100, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)) + l.addLayout(grid) + l.addItem(QSpacerItem(100, 100, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)) taskgrid = QWidget() - taskgrid.setMaximumWidth(1000) - taskgrid.setLayout(grid) + taskgrid.setLayout(l) layout = QStackedLayout() layout.setAlignment(Qt.AlignmentFlag.AlignCenter) - self._tasksindex = layout.addWidget(self._tw) - self._btnindex = layout.addWidget(taskgrid) + self._btnindex = layout.addWidget(self._tw) + self._tasksindex = layout.addWidget(taskgrid) self._convertindex = layout.addWidget(self._convertwidget) self._mergeindex = layout.addWidget(self._mergewidget) self._trackindex = layout.addWidget(self._trackwidget) self.setLayout(layout) def on_open(self): - self.layout().setCurrentIndex(self._btnindex) + self.layout().setCurrentIndex(self._tasksindex) + self._folderopen = True def _select_task(self, task): logging.debug("Centralwidget: Selected task: %s", task.value) @@ -112,7 +110,10 @@ class CentralWidget(QWidget): elif task == Task.CONVERT: self.layout().setCurrentIndex(self._convertindex) else: - self.layout().setCurrentIndex(self._tasksindex) + if self._folderopen: + self.layout().setCurrentIndex(self._tasksindex) + else: + self.layout().setCurrentIndex(self._btnindex) logging.warning("Centralwidget: got invalid task request: %s", task) def _on_back(self): @@ -137,7 +138,7 @@ def main(): from PySide6.QtWidgets import QApplication app = QApplication([]) window = QWidget() - taskcard = TaskCard("test", "../icons/merge_light.png", "do something with manyt words, too many to fit in one line", Task.CONVERT) + taskcard = TaskCard("test", "../icons/merge_light.png", "do something with manyt words, too many to fit in one line") layout = QVBoxLayout() layout.addWidget(taskcard)