Skip to content

Commit 11435f3

Browse files
committed
OWRuleViewer: data info displayed in the status bar
1 parent eb7aa06 commit 11435f3

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

Orange/widgets/visualize/owruleviewer.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from Orange.widgets.utils.annotated_data import (create_annotated_table,
1515
ANNOTATED_DATA_SIGNAL_NAME)
1616
from Orange.widgets.utils.widgetpreview import WidgetPreview
17+
from Orange.widgets.utils.state_summary import format_summary_details
1718
from Orange.widgets.widget import Input, Output
1819

1920

@@ -45,6 +46,9 @@ def __init__(self):
4546
self.classifier = None
4647
self.selected = None
4748

49+
self.info.set_input_summary(self.info.NoInput)
50+
self.info.set_output_summary(self.info.NoOutput)
51+
4852
self.model = CustomRuleViewerTableModel(parent=self)
4953
self.model.set_horizontal_header_labels(
5054
["IF conditions", "", "THEN class", "Distribution",
@@ -81,6 +85,7 @@ def __init__(self):
8185
@Inputs.data
8286
def set_data(self, data):
8387
self.data = data
88+
self._set_input_summary()
8489
self.commit()
8590

8691
@Inputs.classifier
@@ -101,6 +106,11 @@ def set_classifier(self, classifier):
101106
self.on_update()
102107
self.commit()
103108

109+
def _set_input_summary(self):
110+
summary = len(self.data) if self.data else self.info.NoInput
111+
details = format_summary_details(self.data) if self.data else ""
112+
self.info.set_input_summary(summary, details)
113+
104114
def on_update(self):
105115
self._save_selected()
106116

@@ -168,6 +178,9 @@ def commit(self):
168178
data_output = data.from_table_rows(data, selected_indices) \
169179
if len(selected_indices) else None
170180

181+
summary = len(data_output) if data_output else self.info.NoOutput
182+
details = format_summary_details(data_output) if data_output else ""
183+
self.info.set_output_summary(summary, details)
171184
self.Outputs.selected_data.send(data_output)
172185
self.Outputs.annotated_data.send(create_annotated_table(data, selected_indices))
173186

Orange/widgets/visualize/tests/test_owruleviewer.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin
77
from Orange.classification import CN2Learner
88
from Orange.widgets.visualize.owruleviewer import OWRuleViewer
9+
from Orange.widgets.utils.state_summary import format_summary_details
910

1011

1112
class TestOWRuleViewer(WidgetTest, WidgetOutputsTestMixin):
@@ -156,3 +157,41 @@ def _select_data(self):
156157
selection_model.select(self.widget.proxy_model.index(2, 0),
157158
selection_model.Select | selection_model.Rows)
158159
return list(range(586, 597))
160+
161+
def test_summary(self):
162+
"""Check if status bar is updated when data is received"""
163+
info = self.widget.info
164+
no_input, no_output = "No data on input", "No data on output"
165+
166+
data = self.titanic
167+
self.send_signal(self.widget.Inputs.data, data)
168+
summary, details = f"{len(data)}", format_summary_details(data)
169+
self.assertEqual(info._StateInfo__input_summary.brief, summary)
170+
self.assertEqual(info._StateInfo__input_summary.details, details)
171+
self.assertEqual(info._StateInfo__output_summary.brief, "")
172+
self.assertEqual(info._StateInfo__output_summary.details, no_output)
173+
174+
self.send_signal(self.widget.Inputs.classifier, self.classifier)
175+
summary, details = f"{len(data)}", format_summary_details(data)
176+
self.assertEqual(info._StateInfo__input_summary.brief, summary)
177+
self.assertEqual(info._StateInfo__input_summary.details, details)
178+
self.assertEqual(info._StateInfo__output_summary.brief, "")
179+
self.assertEqual(info._StateInfo__output_summary.details, no_output)
180+
self._select_data()
181+
output = self.get_output(self.widget.Outputs.selected_data)
182+
summary, details = f"{len(output)}", format_summary_details(output)
183+
self.assertEqual(info._StateInfo__output_summary.brief, summary)
184+
self.assertEqual(info._StateInfo__output_summary.details, details)
185+
186+
self.send_signal(self.widget.Inputs.data, None)
187+
self.assertEqual(info._StateInfo__input_summary.brief, "")
188+
self.assertEqual(info._StateInfo__input_summary.details, no_input)
189+
summary, details = f"{len(output)}", format_summary_details(output)
190+
self.assertEqual(info._StateInfo__output_summary.brief, summary)
191+
self.assertEqual(info._StateInfo__output_summary.details, details)
192+
193+
self.send_signal(self.widget.Inputs.classifier, None)
194+
self.assertEqual(info._StateInfo__input_summary.brief, "")
195+
self.assertEqual(info._StateInfo__input_summary.details, no_input)
196+
self.assertEqual(info._StateInfo__output_summary.brief, "")
197+
self.assertEqual(info._StateInfo__output_summary.details, no_output)

0 commit comments

Comments
 (0)