diff --git a/Orange/widgets/visualize/owboxplot.py b/Orange/widgets/visualize/owboxplot.py index 3bb40b50b08..8929da52856 100644 --- a/Orange/widgets/visualize/owboxplot.py +++ b/Orange/widgets/visualize/owboxplot.py @@ -24,6 +24,7 @@ from Orange.widgets.utils.annotated_data import (create_annotated_table, ANNOTATED_DATA_SIGNAL_NAME) from Orange.widgets.utils.widgetpreview import WidgetPreview +from Orange.widgets.utils.state_summary import format_summary_details from Orange.widgets.widget import Input, Output @@ -277,6 +278,9 @@ def __init__(self): self.stat_test = "" self.mainArea.setMinimumWidth(300) + self.info.set_input_summary(self.info.NoInput) + self.info.set_output_summary(self.info.NoOutput) + self.stats = self.dist = self.conts = [] self.is_continuous = False @@ -313,6 +317,7 @@ def reset_groups(self): # noinspection PyTypeChecker @Inputs.data def set_data(self, dataset): + self._set_input_summary(dataset) if dataset is not None and ( not bool(dataset) or not len(dataset.domain) and not any(var.is_primitive() for var in dataset.domain.metas)): @@ -333,6 +338,11 @@ def set_data(self, dataset): self.reset_all_data() self.commit() + def _set_input_summary(self, dataset): + summary = len(dataset) if dataset else self.info.NoInput + details = format_summary_details(dataset) if dataset else "" + self.info.set_input_summary(summary, details) + def select_default_variables(self): # visualize first non-class variable, group by class (if present) domain = self.dataset.domain @@ -1109,6 +1119,10 @@ def commit(self): selected = Values(self.conditions, conjunction=False)(self.dataset) selection = np.in1d( self.dataset.ids, selected.ids, assume_unique=True).nonzero()[0] + + summary = len(selected) if selected else self.info.NoOutput + details = format_summary_details(selected) if selected else "" + self.info.set_output_summary(summary, details) self.Outputs.selected_data.send(selected) self.Outputs.annotated_data.send( create_annotated_table(self.dataset, selection)) diff --git a/Orange/widgets/visualize/tests/test_owboxplot.py b/Orange/widgets/visualize/tests/test_owboxplot.py index 648151dac07..2cab39137d3 100644 --- a/Orange/widgets/visualize/tests/test_owboxplot.py +++ b/Orange/widgets/visualize/tests/test_owboxplot.py @@ -1,5 +1,5 @@ # Test methods with long descriptive names can omit docstrings -# pylint: disable=missing-docstring +# pylint: disable=missing-docstring, protected-access import unittest from unittest.mock import patch @@ -12,6 +12,7 @@ OWBoxPlot, FilterGraphicsRectItem, _quantiles ) from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin +from Orange.widgets.utils.state_summary import format_summary_details from Orange.tests import test_filename @@ -334,6 +335,30 @@ def test_value_all_missing_for_group(self): self.__select_group("a") self.assertTupleEqual(self.widget.conts.shape, (3, 2)) + def test_summary(self): + """Check if status bar is updated when data is received""" + data, info = self.titanic, self.widget.info + no_input, no_output = "No data on input", "No data on output" + + self.send_signal(self.widget.Inputs.data, data) + summary, details = f"{len(data)}", format_summary_details(data) + self.assertEqual(info._StateInfo__input_summary.brief, summary) + self.assertEqual(info._StateInfo__input_summary.details, details) + self.assertEqual(info._StateInfo__output_summary.brief, "") + self.assertEqual(info._StateInfo__output_summary.details, no_output) + + self._select_data() + output = self.get_output(self.widget.Outputs.selected_data) + summary, details = f"{len(output)}", format_summary_details(output) + self.assertEqual(info._StateInfo__output_summary.brief, summary) + self.assertEqual(info._StateInfo__output_summary.details, details) + + self.send_signal(self.widget.Inputs.data, None) + self.assertEqual(info._StateInfo__input_summary.brief, "") + self.assertEqual(info._StateInfo__input_summary.details, no_input) + self.assertEqual(info._StateInfo__output_summary.brief, "") + self.assertEqual(info._StateInfo__output_summary.details, no_output) + class TestUtils(unittest.TestCase): def test(self):