Skip to content

Commit 7887a29

Browse files
committed
OWBoxPlot: data info displayed in the status bar
1 parent 3f4c786 commit 7887a29

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

Orange/widgets/visualize/owboxplot.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from Orange.widgets.utils.annotated_data import (create_annotated_table,
2525
ANNOTATED_DATA_SIGNAL_NAME)
2626
from Orange.widgets.utils.widgetpreview import WidgetPreview
27+
from Orange.widgets.utils.state_summary import format_summary_details
2728
from Orange.widgets.widget import Input, Output
2829

2930

@@ -277,6 +278,9 @@ def __init__(self):
277278
self.stat_test = ""
278279
self.mainArea.setMinimumWidth(300)
279280

281+
self.info.set_input_summary(self.info.NoInput)
282+
self.info.set_output_summary(self.info.NoOutput)
283+
280284
self.stats = self.dist = self.conts = []
281285
self.is_continuous = False
282286

@@ -313,6 +317,7 @@ def reset_groups(self):
313317
# noinspection PyTypeChecker
314318
@Inputs.data
315319
def set_data(self, dataset):
320+
self._set_input_summary(dataset)
316321
if dataset is not None and (
317322
not bool(dataset) or not len(dataset.domain) and not
318323
any(var.is_primitive() for var in dataset.domain.metas)):
@@ -333,6 +338,11 @@ def set_data(self, dataset):
333338
self.reset_all_data()
334339
self.commit()
335340

341+
def _set_input_summary(self, dataset):
342+
summary = len(dataset) if dataset else self.info.NoInput
343+
details = format_summary_details(dataset) if dataset else ""
344+
self.info.set_input_summary(summary, details)
345+
336346
def select_default_variables(self):
337347
# visualize first non-class variable, group by class (if present)
338348
domain = self.dataset.domain
@@ -1109,6 +1119,10 @@ def commit(self):
11091119
selected = Values(self.conditions, conjunction=False)(self.dataset)
11101120
selection = np.in1d(
11111121
self.dataset.ids, selected.ids, assume_unique=True).nonzero()[0]
1122+
1123+
summary = len(selected) if selected else self.info.NoOutput
1124+
details = format_summary_details(selected) if selected else ""
1125+
self.info.set_output_summary(summary, details)
11121126
self.Outputs.selected_data.send(selected)
11131127
self.Outputs.annotated_data.send(
11141128
create_annotated_table(self.dataset, selection))

Orange/widgets/visualize/tests/test_owboxplot.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Test methods with long descriptive names can omit docstrings
2-
# pylint: disable=missing-docstring
2+
# pylint: disable=missing-docstring, protected-access
33
import unittest
44
from unittest.mock import patch
55

@@ -12,6 +12,7 @@
1212
OWBoxPlot, FilterGraphicsRectItem, _quantiles
1313
)
1414
from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin
15+
from Orange.widgets.utils.state_summary import format_summary_details
1516
from Orange.tests import test_filename
1617

1718

@@ -334,6 +335,30 @@ def test_value_all_missing_for_group(self):
334335
self.__select_group("a")
335336
self.assertTupleEqual(self.widget.conts.shape, (3, 2))
336337

338+
def test_summary(self):
339+
"""Check if status bar is updated when data is received"""
340+
data, info = self.titanic, self.widget.info
341+
no_input, no_output = "No data on input", "No data on output"
342+
343+
self.send_signal(self.widget.Inputs.data, data)
344+
summary, details = f"{len(data)}", format_summary_details(data)
345+
self.assertEqual(info._StateInfo__input_summary.brief, summary)
346+
self.assertEqual(info._StateInfo__input_summary.details, details)
347+
self.assertEqual(info._StateInfo__output_summary.brief, "")
348+
self.assertEqual(info._StateInfo__output_summary.details, no_output)
349+
350+
self._select_data()
351+
output = self.get_output(self.widget.Outputs.selected_data)
352+
summary, details = f"{len(output)}", format_summary_details(output)
353+
self.assertEqual(info._StateInfo__output_summary.brief, summary)
354+
self.assertEqual(info._StateInfo__output_summary.details, details)
355+
356+
self.send_signal(self.widget.Inputs.data, None)
357+
self.assertEqual(info._StateInfo__input_summary.brief, "")
358+
self.assertEqual(info._StateInfo__input_summary.details, no_input)
359+
self.assertEqual(info._StateInfo__output_summary.brief, "")
360+
self.assertEqual(info._StateInfo__output_summary.details, no_output)
361+
337362

338363
class TestUtils(unittest.TestCase):
339364
def test(self):

0 commit comments

Comments
 (0)