1# pylint: disable=all 2from AnyQt.QtGui import QStandardItemModel, QIcon, QColor 3from AnyQt.QtCore import Qt, QItemSelectionModel, QPoint 4from AnyQt.QtWidgets import QStyleOptionHeader, QStyle 5from AnyQt.QtTest import QTest 6 7 8from Orange.widgets.tests.base import GuiTest 9from Orange.widgets.utils.headerview import HeaderView 10from Orange.widgets.utils.textimport import StampIconEngine 11 12 13class TestHeaderView(GuiTest): 14 def test_header(self): 15 model = QStandardItemModel() 16 17 hheader = HeaderView(Qt.Horizontal) 18 vheader = HeaderView(Qt.Vertical) 19 hheader.setSortIndicatorShown(True) 20 21 # paint with no model. 22 vheader.grab() 23 hheader.grab() 24 25 hheader.setModel(model) 26 vheader.setModel(model) 27 28 hheader.adjustSize() 29 vheader.adjustSize() 30 # paint with an empty model 31 vheader.grab() 32 hheader.grab() 33 34 model.setRowCount(1) 35 model.setColumnCount(1) 36 icon = QIcon(StampIconEngine("A", Qt.red)) 37 model.setHeaderData(0, Qt.Horizontal, icon, Qt.DecorationRole) 38 model.setHeaderData(0, Qt.Vertical, icon, Qt.DecorationRole) 39 model.setHeaderData(0, Qt.Horizontal, QColor(Qt.blue), Qt.ForegroundRole) 40 model.setHeaderData(0, Qt.Vertical, QColor(Qt.blue), Qt.ForegroundRole) 41 model.setHeaderData(0, Qt.Horizontal, QColor(Qt.white), Qt.BackgroundRole) 42 model.setHeaderData(0, Qt.Vertical, QColor(Qt.white), Qt.BackgroundRole) 43 44 # paint with single col/row model 45 vheader.grab() 46 hheader.grab() 47 48 model.setRowCount(3) 49 model.setColumnCount(3) 50 51 hheader.adjustSize() 52 vheader.adjustSize() 53 54 # paint with single col/row model 55 vheader.grab() 56 hheader.grab() 57 58 hheader.setSortIndicator(0, Qt.AscendingOrder) 59 vheader.setHighlightSections(True) 60 hheader.setHighlightSections(True) 61 62 vheader.grab() 63 hheader.grab() 64 65 vheader.setSectionsClickable(True) 66 hheader.setSectionsClickable(True) 67 68 vheader.grab() 69 hheader.grab() 70 71 vheader.setTextElideMode(Qt.ElideRight) 72 hheader.setTextElideMode(Qt.ElideRight) 73 74 selmodel = QItemSelectionModel(model, model) 75 76 vheader.setSelectionModel(selmodel) 77 hheader.setSelectionModel(selmodel) 78 79 selmodel.select(model.index(1, 1), QItemSelectionModel.Rows | QItemSelectionModel.Select) 80 selmodel.select(model.index(1, 1), QItemSelectionModel.Columns | QItemSelectionModel.Select) 81 82 vheader.grab() 83 vheader.grab() 84 85 def test_header_view_clickable(self): 86 model = QStandardItemModel() 87 model.setColumnCount(3) 88 header = HeaderView(Qt.Horizontal) 89 header.setModel(model) 90 header.setSectionsClickable(True) 91 header.adjustSize() 92 pos = header.sectionViewportPosition(0) 93 size = header.sectionSize(0) 94 # center of first section 95 point = QPoint(pos + size // 2, header.viewport().height() / 2) 96 QTest.mousePress(header.viewport(), Qt.LeftButton, Qt.NoModifier, point) 97 98 opt = QStyleOptionHeader() 99 header.initStyleOptionForIndex(opt, 0) 100 self.assertTrue(opt.state & QStyle.State_Sunken) 101 102 QTest.mouseRelease(header.viewport(), Qt.LeftButton, Qt.NoModifier, point) 103 opt = QStyleOptionHeader() 104 header.initStyleOptionForIndex(opt, 0) 105 self.assertFalse(opt.state & QStyle.State_Sunken) 106