diff --git a/Orange/widgets/unsupervised/owhierarchicalclustering.py b/Orange/widgets/unsupervised/owhierarchicalclustering.py index dd73e5a708..e45228e874 100644 --- a/Orange/widgets/unsupervised/owhierarchicalclustering.py +++ b/Orange/widgets/unsupervised/owhierarchicalclustering.py @@ -149,7 +149,10 @@ def data(self, index, role=Qt.DisplayRole): return font if role == Qt.BackgroundRole: if self.__colors is not None: - return self.__colors[index.row()] + if index.row() < len(self.__colors): + return self.__colors[index.row()] + else: + return QColor() elif not any(self) and self.subset: # no labels, no color, but subset return QColor(0, 0, 0) if role == Qt.UserRole and self.subset: diff --git a/Orange/widgets/unsupervised/tests/test_owhierarchicalclustering.py b/Orange/widgets/unsupervised/tests/test_owhierarchicalclustering.py index baca8198ed..04afb193e9 100644 --- a/Orange/widgets/unsupervised/tests/test_owhierarchicalclustering.py +++ b/Orange/widgets/unsupervised/tests/test_owhierarchicalclustering.py @@ -1,10 +1,12 @@ # Test methods with long descriptive names can omit docstrings # pylint: disable=missing-docstring, protected-access +import unittest import warnings import numpy as np from AnyQt.QtCore import QPoint, Qt +from AnyQt.QtGui import QColor from AnyQt.QtTest import QTest import Orange.misc @@ -13,7 +15,7 @@ from Orange.misc import DistMatrix from Orange.widgets.tests.base import WidgetTest, WidgetOutputsTestMixin from Orange.widgets.unsupervised.owhierarchicalclustering import \ - OWHierarchicalClustering + OWHierarchicalClustering, SelectedLabelsModel class TestOWHierarchicalClustering(WidgetTest, WidgetOutputsTestMixin): @@ -226,3 +228,16 @@ def test_many_values_warning(self): self.send_signal(self.widget.Inputs.distances, None) self.assertFalse(w.Warning.many_clusters.is_shown()) + + +class TestSelectedLabelsModel(unittest.TestCase): + def test_model_extend(self): + model = SelectedLabelsModel() + model[:] = ["1"] + model.set_colors([QColor(Qt.blue)]) + index = model.index(0) + self.assertEqual(index.data(Qt.DisplayRole), "1") + self.assertEqual(index.data(Qt.BackgroundRole), QColor(Qt.blue)) + model[:]= ["1", "2"] + index1 = model.index(1) + self.assertEqual(index1.data(Qt.BackgroundRole), QColor()) # should be invalid color