Skip to content

Commit da19ae1

Browse files
authored
Merge pull request #4659 from aturanjanin/owheatmap
HeatMap: data info displayed in the status bar
2 parents b90bcd4 + bc2e60c commit da19ae1

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

Orange/widgets/visualize/owheatmap.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
from Orange.widgets.visualize.utils.heatmap import HeatmapGridWidget, \
3737
ColorMap, CategoricalColorMap, GradientColorMap
3838
from Orange.widgets.utils.widgetpreview import WidgetPreview
39+
from Orange.widgets.utils.state_summary import format_summary_details
3940

4041

4142
__all__ = []
@@ -234,6 +235,9 @@ def _():
234235
self.__rows_cache = {}
235236
self.__columns_cache = {}
236237

238+
self.info.set_input_summary(self.info.NoInput)
239+
self.info.set_output_summary(self.info.NoOutput)
240+
237241
# GUI definition
238242
colorbox = gui.vBox(self.controlArea, "Color")
239243
self.color_cb = gui.palette_combo_box(self.palette_name)
@@ -492,6 +496,7 @@ def set_dataset(self, data=None):
492496
self.closeContext()
493497
self.clear()
494498
self.clear_messages()
499+
self._set_input_summary(data)
495500

496501
if isinstance(data, SqlTable):
497502
if data.approx_len() < 4000:
@@ -563,6 +568,11 @@ def set_dataset(self, data=None):
563568

564569
self.unconditional_commit()
565570

571+
def _set_input_summary(self, data):
572+
summary = len(data) if data else self.info.NoInput
573+
details = format_summary_details(data) if data else ""
574+
self.info.set_input_summary(summary, details)
575+
566576
def __on_split_rows_activated(self):
567577
self.set_split_variable(self.row_split_cb.currentData(Qt.EditRole))
568578

@@ -1086,6 +1096,9 @@ def commit(self):
10861096

10871097
data = self.input_data[indices]
10881098

1099+
summary = len(data) if data else self.info.NoOutput
1100+
details = format_summary_details(data) if data else ""
1101+
self.info.set_output_summary(summary, details)
10891102
self.Outputs.selected_data.send(data)
10901103
self.Outputs.annotated_data.send(create_annotated_table(self.input_data, indices))
10911104

Orange/widgets/visualize/tests/test_owheatmap.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 warnings
44
import unittest
55
from unittest.mock import patch
@@ -12,6 +12,7 @@
1212
from Orange.data import Table, Domain, ContinuousVariable, DiscreteVariable
1313
from Orange.preprocess import Continuize
1414
from Orange.widgets.utils import colorpalettes
15+
from Orange.widgets.utils.state_summary import format_summary_details
1516
from Orange.widgets.visualize.owheatmap import OWHeatMap, Clustering
1617
from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin, datasets
1718

@@ -273,6 +274,30 @@ def test_row_color_annotations(self):
273274
widget.set_annotation_color_var(None)
274275
self.assertFalse(widget.scene.widget.right_side_colors[0].isVisible())
275276

277+
def test_summary(self):
278+
"""Check if status bar is updated when data is received"""
279+
info = self.widget.info
280+
no_input, no_output = "No data on input", "No data on output"
281+
282+
data = self.housing
283+
self.send_signal(self.widget.Inputs.data, data)
284+
summary, details = f"{len(data)}", format_summary_details(data)
285+
self.assertEqual(info._StateInfo__input_summary.brief, summary)
286+
self.assertEqual(info._StateInfo__input_summary.details, details)
287+
self.assertEqual(info._StateInfo__output_summary.brief, "")
288+
self.assertEqual(info._StateInfo__output_summary.details, no_output)
289+
self._select_data()
290+
output = self.get_output(self.widget.Outputs.selected_data)
291+
summary, details = f"{len(output)}", format_summary_details(output)
292+
self.assertEqual(info._StateInfo__output_summary.brief, summary)
293+
self.assertEqual(info._StateInfo__output_summary.details, details)
294+
295+
self.send_signal(self.widget.Inputs.data, None)
296+
self.assertEqual(info._StateInfo__input_summary.brief, "")
297+
self.assertEqual(info._StateInfo__input_summary.details, no_input)
298+
self.assertEqual(info._StateInfo__output_summary.brief, "")
299+
self.assertEqual(info._StateInfo__output_summary.details, no_output)
300+
276301

277302
if __name__ == "__main__":
278303
unittest.main()

0 commit comments

Comments
 (0)