Skip to content

Commit 6181e5c

Browse files
authored
Merge pull request #4634 from aturanjanin/owmosaic
[ENH] MosaicDisplay: data info displayed in the status bar
2 parents eb7aa06 + bcb0cc1 commit 6181e5c

File tree

2 files changed

+39
-2
lines changed

2 files changed

+39
-2
lines changed

Orange/widgets/visualize/owmosaic.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
ANNOTATED_DATA_SIGNAL_NAME)
2828
from Orange.widgets.utils.itemmodels import DomainModel
2929
from Orange.widgets.utils.widgetpreview import WidgetPreview
30+
from Orange.widgets.utils.state_summary import format_summary_details
3031
from Orange.widgets.visualize.utils import (
3132
CanvasText, CanvasRectangle, ViewWithPress, VizRankDialog)
3233
from Orange.widgets.visualize.utils.plotutils import wrap_legend_items
@@ -332,6 +333,9 @@ def __init__(self):
332333
self.canvas_view.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
333334
self.canvas_view.setRenderHint(QPainter.Antialiasing)
334335

336+
self.info.set_input_summary(self.info.NoInput)
337+
self.info.set_output_summary(self.info.NoOutput)
338+
335339
box = gui.vBox(self.controlArea, box=True)
336340
self.model_1 = DomainModel(
337341
order=DomainModel.MIXED, valid_types=DomainModel.PRIMITIVE)
@@ -442,8 +446,10 @@ def set_data(self, data):
442446
if self.data is None:
443447
self.discrete_data = None
444448
self.init_combos(None)
449+
self.info.set_input_summary(self.info.NoInput)
445450
return
446451

452+
self.info.set_input_summary(len(data),format_summary_details(data))
447453
self.init_combos(self.data)
448454
self.openContext(self.data)
449455

@@ -518,6 +524,7 @@ def send_selection(self):
518524
self.Outputs.selected_data.send(None)
519525
self.Outputs.annotated_data.send(
520526
create_annotated_table(self.data, []))
527+
self.info.set_output_summary(self.info.NoOutput)
521528
return
522529
filters = []
523530
self.Warning.no_cont_selection_sql.clear()
@@ -539,6 +546,10 @@ def send_selection(self):
539546
sel_idx = [i for i, id in enumerate(self.data.ids) if id in idset]
540547
if self.discrete_data is not self.data:
541548
selection = self.data[sel_idx]
549+
550+
summary = len(selection) if selection else self.info.NoOutput
551+
details = format_summary_details(selection) if selection else ""
552+
self.info.set_output_summary(summary, details)
542553
self.Outputs.selected_data.send(selection)
543554
self.Outputs.annotated_data.send(
544555
create_annotated_table(self.data, sel_idx))
@@ -994,5 +1005,5 @@ def get_conditional_distribution(data, attrs):
9941005

9951006

9961007
if __name__ == "__main__": # pragma: no cover
997-
data = Table("zoo")
998-
WidgetPreview(OWMosaicDisplay).run(data, set_subset_data=data[::10])
1008+
dataset = Table("zoo")
1009+
WidgetPreview(OWMosaicDisplay).run(dataset, set_subset_data=dataset[::10])

Orange/widgets/visualize/tests/test_owmosaic.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin
1414
from Orange.widgets.visualize.owmosaic import OWMosaicDisplay
1515
from Orange.widgets.tests.utils import simulate
16+
from Orange.widgets.utils.state_summary import format_summary_details
1617

1718

1819
class TestOWMosaicDisplay(WidgetTest, WidgetOutputsTestMixin):
@@ -184,6 +185,31 @@ def test_selection_setting(self):
184185
self.assertEqual(w.selection, {1})
185186
self.assertIsNotNone(self.get_output(w.Outputs.selected_data, widget=w))
186187

188+
def test_summary(self):
189+
"""Check if status bar is updated when data is received"""
190+
info = self.widget.info
191+
data = Table("zoo")
192+
no_input, no_output = "No data on input", "No data on output"
193+
194+
self.send_signal(self.widget.Inputs.data, data)
195+
summary, details = f"{len(data)}", format_summary_details(data)
196+
self.assertEqual(info._StateInfo__input_summary.brief, summary)
197+
self.assertEqual(info._StateInfo__input_summary.details, details)
198+
self.assertEqual(info._StateInfo__output_summary.brief, "")
199+
self.assertEqual(info._StateInfo__output_summary.details, no_output)
200+
201+
self._select_data()
202+
output = self.get_output(self.widget.Outputs.selected_data)
203+
summary, details = f"{len(output)}", format_summary_details(output)
204+
self.assertEqual(info._StateInfo__output_summary.brief, summary)
205+
self.assertEqual(info._StateInfo__output_summary.details, details)
206+
207+
self.send_signal(self.widget.Inputs.data, None)
208+
self.assertEqual(info._StateInfo__input_summary.brief, "")
209+
self.assertEqual(info._StateInfo__input_summary.details, no_input)
210+
self.assertEqual(info._StateInfo__output_summary.brief, "")
211+
self.assertEqual(info._StateInfo__output_summary.details, no_output)
212+
187213

188214
# Derive from WidgetTest to simplify creation of the Mosaic widget, although
189215
# we are actually testing the MosaicVizRank dialog and not the widget

0 commit comments

Comments
 (0)