File: primitives_demo.py

package info (click to toggle)
python-enable 4.3.0-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 7,280 kB
  • ctags: 13,899
  • sloc: cpp: 48,447; python: 28,502; ansic: 9,004; makefile: 315; sh: 44
file content (76 lines) | stat: -rw-r--r-- 2,702 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
"""
This demo is a canvas that showcases some of the drawing primitives in Enable.
"""
from enable.example_support import DemoFrame, demo_main
from enable.api import Window
from enable.drawing.api import DragLine, DragPolygon, DragSegment, \
    DrawingTool, PointLine, PointPolygon, DrawingCanvas, ToolbarButton, \
    DrawingCanvasToolbar

from traits.api import Instance


class ResetButton(ToolbarButton):

    def perform(self, event):
        if self.canvas and self.canvas.active_tool:
            self.canvas.active_tool.reset()
            self.canvas.request_redraw()
        return


class ActivateButton(ToolbarButton):

    tool = Instance(DrawingTool)

    def perform(self, event):
        if not self.canvas or not self.tool:
            return
        else:
            self.canvas.activate(self.tool)
            self.canvas.request_redraw()
        return

    def _tool_changed(self, old, new):
        if new:
            new.reset()
        return


class MyFrame(DemoFrame):
    def _create_window(self):

        canvas = DrawingCanvas(bounds=[500,500])
        toolbar = DrawingCanvasToolbar(width=500, height=32, fit_window=False,
                                       bgcolor="lightgrey")
        canvas.toolbar = toolbar
        toolbar.canvas = canvas

        button1 = ResetButton(label="Reset", toolbar=toolbar, bounds=[50,24])
        button2 = ActivateButton(tool=DragLine(container=canvas), label="Path",
                                 toolbar=toolbar, bounds=[50,24])
        button3 = ActivateButton(tool=DragPolygon(background_color=(0,0,0.8,1),
                                 container=canvas),
                                 label="Poly", toolbar=toolbar, bounds=[50,24])
        button4 = ActivateButton(tool=PointLine(container=canvas),
                                 label="Polyline",
                                 toolbar=toolbar, bounds=[70,24])
        button5 = ActivateButton(tool=DragSegment(container=canvas),
                                 label="Line", toolbar=toolbar, bounds=[50,24])
        button6 = ActivateButton(tool=PointPolygon(container=canvas),
                                 label="PointPoly", toolbar=toolbar,
                                 bounds=[80,24])
        toolbar.add_button(button1)
        toolbar.add_button(button2)
        toolbar.add_button(button3)
        toolbar.add_button(button4)
        toolbar.add_button(button5)
        toolbar.add_button(button6)

        return Window(self, -1, component=canvas)


if __name__ == "__main__":
    # Save demo so that it doesn't get garbage collected when run within
    # existing event loop (i.e. from ipython).
    demo = demo_main(MyFrame, size=[700,600])