Skip to content

Commit

Permalink
Move qtpy functionality from cellfinder
Browse files Browse the repository at this point in the history
  • Loading branch information
adamltyson committed Jan 16, 2024
1 parent 8e96563 commit 0f1f5d6
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 10 deletions.
4 changes: 2 additions & 2 deletions brainglobe_utils/qtpy/dialog.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from qtpy.QtWidgets import QMessageBox
from qtpy.QtWidgets import QMessageBox, QWidget

Check warning on line 1 in brainglobe_utils/qtpy/dialog.py

View check run for this annotation

Codecov / codecov/patch

brainglobe_utils/qtpy/dialog.py#L1

Added line #L1 was not covered by tests


def display_warning(widget, title, message):
def display_warning(widget: QWidget, title: str, message: str) -> bool:

Check warning on line 4 in brainglobe_utils/qtpy/dialog.py

View check run for this annotation

Codecov / codecov/patch

brainglobe_utils/qtpy/dialog.py#L4

Added line #L4 was not covered by tests
"""
Display a warning in a pop-up that can be accepted or dismissed
"""
Expand Down
60 changes: 52 additions & 8 deletions brainglobe_utils/qtpy/interaction.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,31 @@
from typing import Callable, List, Optional, Tuple

from qtpy.QtWidgets import (
QCheckBox,
QComboBox,
QDoubleSpinBox,
QLabel,
QLayout,
QPushButton,
QSpinBox,
)


def add_button(
label,
layout,
connected_function,
label: str,
layout: QLayout,
connected_function: Callable,
*,
row: int = 0,
column: int = 0,
visibility=True,
minimum_width=0,
alignment="center",
tooltip=None,
):
visibility: bool = True,
minimum_width: int = 0,
alignment: str = "center",
tooltip: Optional[str] = None,
) -> QPushButton:
"""
Add a button to *layout*.
"""
button = QPushButton(label)
if alignment == "center":
pass
Expand All @@ -32,6 +39,7 @@ def add_button(

if tooltip:
button.setToolTip(tooltip)

Check warning on line 41 in brainglobe_utils/qtpy/interaction.py

View check run for this annotation

Codecov / codecov/patch

brainglobe_utils/qtpy/interaction.py#L41

Added line #L41 was not covered by tests

layout.addWidget(button, row, column)
button.clicked.connect(connected_function)
return button
Expand Down Expand Up @@ -92,3 +100,39 @@ def add_int_box(
layout.addWidget(QLabel(label), row, column)
layout.addWidget(box, row, column + 1)
return box

Check warning on line 102 in brainglobe_utils/qtpy/interaction.py

View check run for this annotation

Codecov / codecov/patch

brainglobe_utils/qtpy/interaction.py#L97-L102

Added lines #L97 - L102 were not covered by tests


def add_combobox(
layout: QLayout,
label: str,
items: List[str],
row: int = 0,
column: int = 0,
label_stack: bool = False,
callback=None,
width: int = 150,
) -> Tuple[QComboBox, Optional[QLabel]]:
"""
Add a selection box to *layout*.
"""
if label_stack:
combobox_row = row + 1
combobox_column = column
else:
combobox_row = row
combobox_column = column + 1
combobox = QComboBox()
combobox.addItems(items)
if callback:
combobox.currentIndexChanged.connect(callback)

Check warning on line 127 in brainglobe_utils/qtpy/interaction.py

View check run for this annotation

Codecov / codecov/patch

brainglobe_utils/qtpy/interaction.py#L127

Added line #L127 was not covered by tests
combobox.setMaximumWidth = width

if label is not None:
combobox_label = QLabel(label)
combobox_label.setMaximumWidth = width
layout.addWidget(combobox_label, row, column)
else:
combobox_label = None

layout.addWidget(combobox, combobox_row, combobox_column)
return combobox, combobox_label
39 changes: 39 additions & 0 deletions tests/tests/test_qtpy/test_interaction.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import pytest
from qtpy.QtWidgets import QGridLayout

from brainglobe_utils.qtpy.interaction import add_button, add_combobox


@pytest.mark.parametrize("label_stack", [True, False])
@pytest.mark.parametrize("label", ["A label", None])
def test_add_combobox(label, label_stack):
"""
Smoke test for add_combobox for all conditional branches
"""
layout = QGridLayout()
combobox = add_combobox(
layout,
row=0,
label=label,
items=["item 1", "item 2"],
label_stack=label_stack,
)
assert combobox is not None


@pytest.mark.parametrize(
argnames="alignment", argvalues=["center", "left", "right"]
)
def test_add_button(alignment):
"""
Smoke tests for add_button for all conditional branches
"""
layout = QGridLayout()
button = add_button(
layout=layout,
connected_function=lambda: None,
label="A button",
row=0,
alignment=alignment,
)
assert button is not None

0 comments on commit 0f1f5d6

Please sign in to comment.