4 class FigureMenu(object):
9 def create_menu(self
, store
, figure
, graph
, app_exec
):
10 self
._layout
_to
_str
= {'horiz': 'Horizontal', 'vert':'Vertical',\
15 item_nograph
= gtk
.MenuItem('No graph selected')
16 menu
.append(item_nograph
)
18 item_figure
= gtk
.MenuItem('Figure')
19 item_figure
.set_submenu(self
._create
_figure
_menu
(figure
, graph
, app_exec
))
20 menu
.append(item_figure
)
21 item_graph
= gtk
.MenuItem('Graph')
22 item_graph
.set_submenu(self
._create
_graph
_menu
(figure
, graph
, app_exec
))
23 menu
.append(item_graph
)
26 def _create_figure_menu(self
, fig
, graph
, app_exec
):
28 item_add
= gtk
.MenuItem('Add graph')
29 item_add
.connect('activate', self
._graph
_menu
_item
_activated
,
32 item_delete
= gtk
.MenuItem('Delete graph')
33 item_delete
.connect('activate', self
._delete
_graph
_menu
_item
_activated
,
34 (fig
, graph
, app_exec
))
35 menu
.append(item_delete
)
36 item_layout
= gtk
.MenuItem('Layout')
37 item_layout
.set_submenu(self
._create
_layout
_menu
(fig
, app_exec
))
38 menu
.append(item_layout
)
41 def _graph_menu_item_activated(self
, menuitem
, user_data
):
42 fig
, app_exec
= user_data
46 def _delete_graph_menu_item_activated(self
, menuitem
, user_data
):
47 figure
, graph
, app_exec
= user_data
49 idx
= figure
.graphs
.index(graph
) + 1
50 app_exec('delete %d' % idx
)
51 if figure
.canvas
is not None:
54 def _create_layout_menu(self
, fig
, app_exec
):
56 for layout
in self
._layout
_to
_str
.keys():
57 item
= gtk
.CheckMenuItem(self
._layout
_to
_str
[layout
])
58 item
.set_active(fig
.layout
== layout
)
59 item
.connect('activate', self
._layout
_menu
_item
_activated
,
60 (fig
, layout
, app_exec
))
64 def _layout_menu_item_activated(self
, menuitem
, user_data
):
65 fig
, layout
, app_exec
= user_data
66 app_exec('layout ' + layout
)
67 if fig
.canvas
is not None:
70 def _create_graph_menu(self
, figure
, graph
, app_exec
):
71 graphmenu
= GraphMenu()
72 return graphmenu
.create_graph_menu(self
._store
, figure
, graph
, app_exec
)
74 class GraphMenu(object):
80 def create_graph_menu(self
, store
, figure
, graph
, app_exec
):
81 self
._scale
_to
_str
= {'lin': 'Linear', 'logx': 'LogX', 'logy': 'LogY',\
85 item_range
= gtk
.MenuItem('Range...')
86 item_range
.connect('activate', self
._range
_menu
_item
_activated
,
87 (figure
, graph
, app_exec
))
88 menu
.append(item_range
)
89 item_units
= gtk
.MenuItem('Units...')
90 item_units
.connect('activate', self
._units
_menu
_item
_activated
,
91 (figure
, graph
, app_exec
))
92 menu
.append(item_units
)
93 item_scale
= gtk
.MenuItem('Scale')
94 item_scale
.set_submenu(self
._create
_scale
_menu
((figure
, graph
,
96 menu
.append(item_scale
)
97 item_add
= gtk
.MenuItem('Insert signal')
98 item_add
.set_submenu(self
._create
_filename
_menu
((figure
, graph
,
100 menu
.append(item_add
)
101 item_remove
= gtk
.MenuItem('Remove signal')
102 item_remove
.set_submenu(self
._create
_remove
_signal
_menu
((figure
, graph
,
104 menu
.append(item_remove
)
107 def _create_units_window(self
, figure
, graph
, app_exec
):
110 unitdlg
= dialogs
.Enter_Units_Dialog()
111 unitdlg
.display(graph
.unit
, graph
.axis_names
, graph
.scale_factors
)
112 units
, scale_factors
= unitdlg
.run()
114 app_exec('unit %s' % ','.join(units
))
115 app_exec('factors %s,%s' % (scale_factors
[0],scale_factors
[1]))
116 if figure
.canvas
is not None:
119 def _units_menu_item_activated(self
, menuitem
, user_data
):
120 figure
, graph
, app_exec
= user_data
121 self
._create
_units
_window
(figure
, graph
, app_exec
)
123 def _create_range_window(self
, figure
, graph
, app_exec
):
126 rangedlg
= dialogs
.Enter_Range_Dialog()
127 rangedlg
.display(graph
.get_range(), graph
.axis_names
,
128 graph
.scale_factors
, graph
.unit
)
131 app_exec('range %s' % ' '.join(r
))
132 if figure
.canvas
is not None:
135 def _range_menu_item_activated(self
, menuitem
, user_data
):
136 figure
, graph
, app_exec
= user_data
137 self
._create
_range
_window
(figure
, graph
, app_exec
)
139 def _signals_menu_item_activated(self
, menuitem
, user_data
):
140 fig
, graph
, parent_it
, it
, app_exec
= user_data
141 name
, sig
= self
._store
.get(it
, 0, 1)
143 app_exec('add %s' % name
)
145 if graph
is not None:
146 app_exec('insert %s' % name
)
147 if fig
.canvas
is not None:
150 def _scale_menu_item_activated(self
, menuitem
, user_data
):
151 figure
, graph
, scale
, app_exec
= user_data
152 app_exec('scale %s' % scale
)
153 if figure
.canvas
is not None:
156 def _remove_signal_menu_item_activated(self
, menuitem
, user_data
):
157 figure
, graph
, signals
, app_exec
= user_data
160 app_exec('remove %s' % ' '.join(signals
.keys()))
161 if figure
.canvas
is not None:
164 def _create_scale_menu(self
, data
):
165 figure
, graph
, app_exec
= data
167 for scale
in self
._scale
_to
_str
.keys():
168 item
= gtk
.CheckMenuItem(self
._scale
_to
_str
[scale
])
169 item
.set_active(graph
.scale
== scale
)
170 item
.connect('activate', self
._scale
_menu
_item
_activated
,
171 (figure
, graph
, scale
, app_exec
))
175 def _create_remove_signal_menu(self
, data
):
176 figure
, graph
, app_exec
= data
179 item_nograph
= gtk
.MenuItem('No graph selected')
180 menu
.append(item_nograph
)
182 for name
, signal
in graph
.signals
.iteritems():
183 item
= gtk
.MenuItem(name
)
184 item
.connect('activate', self
._remove
_signal
_menu
_item
_activated
,
185 (figure
, graph
, {name
: signal
}, app_exec
))
189 def _create_signals_menu(self
, fig
, graph
, parent_it
, app_exec
):
191 it
= self
._store
.iter_children(parent_it
)
192 while it
is not None:
193 name
= self
._store
.get_value(it
, 0)
194 item
= gtk
.MenuItem(name
)
195 item
.connect('activate', self
._signals
_menu
_item
_activated
,
196 (fig
, graph
, parent_it
, it
, app_exec
))
198 it
= self
._store
.iter_next(it
)
201 def _create_filename_menu(self
, data
):
202 figure
, graph
, app_exec
= data
203 it
= self
._store
.get_iter_root()
208 while it
is not None:
209 filename
= self
._store
.get_value(it
, 0)
210 item
= gtk
.MenuItem(filename
)
211 item
.set_submenu(self
._create
_signals
_menu
(figure
, graph
, it
,
214 it
= self
._store
.iter_next(it
)