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