source: orange/Orange/OrangeCanvas/canvas/tests/test_layout.py @ 11180:c0e3d8cdbd08

Revision 11180:c0e3d8cdbd08, 2.5 KB checked in by Ales Erjavec <ales.erjavec@…>, 17 months ago (diff)

Added link AnchorLayout class.

Line 
1import time
2
3from PyQt4.QtGui import QGraphicsView, QPainter, QPainterPath
4
5from ...gui.test import QAppTestCase
6
7from ..layout import AnchorLayout
8from ..scene import CanvasScene
9from ..items import NodeItem, LinkItem
10
11
12class TestAnchorLayout(QAppTestCase):
13    def setUp(self):
14        QAppTestCase.setUp(self)
15        self.scene = CanvasScene()
16        self.view = QGraphicsView(self.scene)
17        self.view.setRenderHint(QPainter.Antialiasing)
18        self.view.show()
19        self.view.resize(600, 400)
20
21    def test_layout(self):
22        file_desc, disc_desc, bayes_desc = self.widget_desc()
23        file_item = NodeItem()
24        file_item.setWidgetDescription(file_desc)
25        file_item.setPos(0, 150)
26        self.scene.add_node_item(file_item)
27
28        bayes_item = NodeItem()
29        bayes_item.setWidgetDescription(bayes_desc)
30        bayes_item.setPos(200, 0)
31        self.scene.add_node_item(bayes_item)
32
33        disc_item = NodeItem()
34        disc_item.setWidgetDescription(disc_desc)
35        disc_item.setPos(200, 300)
36        self.scene.add_node_item(disc_item)
37
38        link = LinkItem()
39        link.setSourceItem(file_item)
40        link.setSinkItem(disc_item)
41        self.scene.add_link_item(link)
42
43        link = LinkItem()
44        link.setSourceItem(file_item)
45        link.setSinkItem(bayes_item)
46        self.scene.add_link_item(link)
47
48        layout = AnchorLayout()
49        self.scene.addItem(layout)
50        self.scene.set_anchor_layout(layout)
51
52        layout.invalidateNode(file_item)
53        layout.activate()
54
55        p1, p2 = file_item.outputAnchorItem.anchorPositions()
56        self.assertTrue(p1 > p2)
57
58        self.scene.node_item_position_changed.connect(layout.invalidateNode)
59
60        path = QPainterPath()
61        path.addEllipse(125, 0, 50, 300)
62
63        def advance():
64            t = time.clock()
65            bayes_item.setPos(path.pointAtPercent(t % 1.0))
66            disc_item.setPos(path.pointAtPercent((t + 0.5) % 1.0))
67
68            self.singleShot(20, advance)
69
70        advance()
71
72        self.app.exec_()
73
74    def widget_desc(self):
75        from ...registry.tests import small_testing_registry
76        reg = small_testing_registry()
77
78        file_desc = reg.widget(
79            "Orange.OrangeWidgets.Data.OWFile.OWFile"
80        )
81
82        discretize_desc = reg.widget(
83            "Orange.OrangeWidgets.Data.OWDiscretize.OWDiscretize"
84        )
85
86        bayes_desc = reg.widget(
87            "Orange.OrangeWidgets.Classify.OWNaiveBayes.OWNaiveBayes"
88        )
89
90        return file_desc, discretize_desc, bayes_desc
Note: See TracBrowser for help on using the repository browser.