Skip to content

Commit cd1a337

Browse files
authored
Merge pull request #4627 from aturanjanin/owdistributions
[ENH] Distributions: data info displayed in the status bar
2 parents 54e700e + fa1b6d5 commit cd1a337

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

Orange/widgets/visualize/owdistributions.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
create_groups_table, create_annotated_table, ANNOTATED_DATA_SIGNAL_NAME
2020
from Orange.widgets.utils.itemmodels import DomainModel
2121
from Orange.widgets.utils.widgetpreview import WidgetPreview
22+
from Orange.widgets.utils.state_summary import format_summary_details
2223
from Orange.widgets.visualize.utils.plotutils import ElidedLabelsAxis
2324
from Orange.widgets.widget import Input, Output, OWWidget, Msg
2425

@@ -360,6 +361,9 @@ def __init__(self):
360361

361362
gui.auto_apply(self.controlArea, self, commit=self.apply)
362363

364+
self.info.set_input_summary(self.info.NoInput)
365+
self.info.set_output_summary(self.info.NoOutput)
366+
363367
self._set_smoothing_visibility()
364368
self._setup_plots()
365369
self._setup_legend()
@@ -424,6 +428,9 @@ def set_data(self, data):
424428
self.closeContext()
425429
self.var = self.cvar = None
426430
self.data = data
431+
summary = len(data) if data else self.info.NoInput
432+
details = format_summary_details(data) if data else ""
433+
self.info.set_input_summary(summary, details)
427434
domain = self.data.domain if self.data else None
428435
varmodel = self.controls.var.model()
429436
cvarmodel = self.controls.cvar.model()
@@ -1075,6 +1082,10 @@ def apply(self):
10751082
include_unselected=False, values=values)
10761083
annotated_data = create_annotated_table(data, selected)
10771084

1085+
summary = len(selected_data) if selected_data else self.info.NoOutput
1086+
details = format_summary_details(selected_data) if selected_data else ""
1087+
self.info.set_output_summary(summary, details)
1088+
10781089
self.Outputs.selected_data.send(selected_data)
10791090
self.Outputs.annotated_data.send(annotated_data)
10801091
self.Outputs.histogram_data.send(histogram_data)

Orange/widgets/visualize/tests/test_owdistributions.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from Orange.widgets.tests.base import WidgetTest
1212
from Orange.widgets.utils.annotated_data import ANNOTATED_DATA_FEATURE_NAME
1313
from Orange.widgets.utils.itemmodels import DomainModel
14+
from Orange.widgets.utils.state_summary import format_summary_details
1415
from Orange.widgets.visualize.owdistributions import OWDistributions
1516

1617

@@ -513,6 +514,32 @@ def test_report(self):
513514
self.send_signal(widget.Inputs.data, self.iris)
514515
widget.send_report()
515516

517+
def test_summary(self):
518+
"""Check if status bar is updated when data is received"""
519+
data, info = self.iris, self.widget.info
520+
no_input, no_output = "No data on input", "No data on output"
521+
522+
self.send_signal(self.widget.Inputs.data, data)
523+
summary, details = f"{len(data)}", format_summary_details(data)
524+
self.assertEqual(info._StateInfo__input_summary.brief, summary)
525+
self.assertEqual(info._StateInfo__input_summary.details, details)
526+
self.assertEqual(info._StateInfo__output_summary.brief, "")
527+
self.assertEqual(info._StateInfo__output_summary.details, no_output)
528+
529+
self._set_slider(0)
530+
self.widget.selection = {1, 2, 3, 5, 6, 9}
531+
self.widget._on_end_selecting()
532+
output = self.get_output(self.widget.Outputs.selected_data)
533+
summary, details = f"{len(output)}", format_summary_details(output)
534+
self.assertEqual(info._StateInfo__output_summary.brief, summary)
535+
self.assertEqual(info._StateInfo__output_summary.details, details)
536+
537+
self.send_signal(self.widget.Inputs.data, None)
538+
self.assertEqual(info._StateInfo__input_summary.brief, "")
539+
self.assertEqual(info._StateInfo__input_summary.details, no_input)
540+
self.assertEqual(info._StateInfo__output_summary.brief, "")
541+
self.assertEqual(info._StateInfo__output_summary.details, no_output)
542+
516543

517544
if __name__ == "__main__":
518545
unittest.main()

0 commit comments

Comments
 (0)