source: sasview/guiframe/local_perspectives/plotting/BaseInteractor.py @ a93f525

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2release_4.0.1ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since a93f525 was 83f4445, checked in by Gervaise Alina <gervyh@…>, 15 years ago

working on documentation

  • Property mode set to 100644
File size: 5.1 KB
Line 
1interface_color = 'black'
2disable_color = 'gray'
3active_color = 'red'
4rho_color = 'black'
5mu_color = 'green'
6P_color = 'blue'
7theta_color = 'orange'
8profile_colors = [rho_color, mu_color, P_color, theta_color]
9
10class _BaseInteractor:
11    """
12    Share some functions between the interface interactor and various layer
13    interactors.
14   
15    Individual interactors need the following functions:
16   
17        save(ev)  - save the current state for later restore
18        restore() - restore the old state
19        move(x,y,ev) - move the interactor to position x,y
20        moveend(ev) - end the drag event
21        update() - draw the interactors
22       
23    The following are provided by the base class:
24   
25        connect_markers(markers) - register callbacks for all markers
26        clear_markers() - remove all items in self.markers
27        onHilite(ev) - enter/leave event processing
28        onLeave(ev) - enter/leave event processing
29        onClick(ev) - mouse click: calls save()
30        onRelease(ev) - mouse click ends: calls moveend()
31        onDrag(ev) - mouse move: calls move() or restore()
32        onKey(ev) - keyboard move: calls move() or restore()
33       
34    Interactor attributes:
35   
36        base  - model we are operating on
37        axes  - axes holding the interactor
38        color - color of the interactor in non-active state
39        markers - list of handles for the interactor
40       
41    """
42    def __init__(self,base,axes,color='black'):
43        """
44        """
45        self.base = base
46        self.axes = axes
47        self.color = color
48       
49    def clear_markers(self):
50        """
51        Clear old markers and interfaces.
52        """
53        for h in self.markers: h.remove()
54        if self.markers: self.base.connect.clear(*self.markers)
55        self.markers = []
56
57    def save(self, ev):
58        """
59        """
60        pass
61   
62    def restore(self, ev):
63        """
64        """
65        pass
66   
67    def move(self, x, y, ev):
68        """
69        """
70        pass
71   
72    def moveend(self, ev):
73        """
74        """
75        pass
76
77    def connect_markers(self,markers):
78        """
79        Connect markers to callbacks
80        """
81       
82        for h in markers:
83            connect = self.base.connect
84            connect('enter', h, self.onHilite)
85            connect('leave', h, self.onLeave)
86            connect('click', h, self.onClick)
87            connect('release', h, self.onRelease)
88            connect('drag', h, self.onDrag)
89            connect('key', h, self.onKey)
90
91    def onHilite(self, ev):
92        """
93        Hilite the artist reporting the event, indicating that it is
94        ready to receive a click.
95        """
96        ev.artist.set_color(active_color)
97        self.base.draw()
98        return True
99
100    def onLeave(self, ev):
101        """
102        Restore the artist to the original colour when the cursor leaves.
103        """
104        ev.artist.set_color(self.color)
105        self.base.draw()
106        return True
107           
108    def onClick(self, ev):
109        """
110        Prepare to move the artist.  Calls save() to preserve the state for
111        later restore().
112        """
113        self.clickx,self.clicky = ev.xdata,ev.ydata
114        self.save(ev)
115        return True
116
117    def onRelease(self, ev):
118        """
119        """
120        self.moveend(ev)
121        return True
122
123    def onDrag(self, ev):
124        """
125        Move the artist.  Calls move() to update the state, or restore() if
126        the mouse leaves the window.
127        """
128        inside,prop = self.axes.contains(ev)
129        if inside:
130            self.clickx,self.clicky = ev.xdata,ev.ydata
131            self.move(ev.xdata,ev.ydata,ev)
132        else:
133            self.restore()
134        self.base.update()
135        return True
136   
137    def onKey(self, ev):
138        """
139        Respond to keyboard events.  Arrow keys move the widget.  Escape
140        restores it to the position before the last click.
141       
142        Calls move() to update the state.  Calls restore() on escape.
143        """
144        if ev.key == 'escape':
145            self.restore()
146        elif ev.key in ['up', 'down', 'right', 'left']:
147            dx,dy = self.dpixel(self.clickx,self.clicky,nudge=ev.control)
148            if ev.key == 'up': self.clicky += dy
149            elif ev.key == 'down': self.clicky -= dy
150            elif ev.key == 'right': self.clickx += dx
151            else: self.clickx -= dx
152            self.move(self.clickx,self.clicky,ev)
153        else:
154            return False
155        self.base.update()
156        return True
157
158    def dpixel(self,x,y,nudge=False):
159        """
160        Return the step size in data coordinates for a small
161        step in screen coordinates.  If nudge is False (default)
162        the step size is one pixel.  If nudge is True, the step
163        size is 0.2 pixels.
164        """
165        ax = self.axes
166        px,py = ax.transData.inverse_xy_tup((x,y))
167        if nudge:
168            nx,ny = ax.transData.xy_tup((px+0.2,py+0.2))
169        else:
170            nx,ny = ax.transData.xy_tup((px+1.,py+1.))
171        dx,dy = nx-x,ny-y
172        return dx,dy
173
Note: See TracBrowser for help on using the repository browser.