Updating download.html page with Git information
[pythoncad.git] / PythonCAD / Interface / Gtk / gtkmenus.py
blob1086e9d46fbd57f2dadc36f2ef70b5d7a6a672b1
2 # Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007 Art Haas
4 # This file is part of PythonCAD.
6 # PythonCAD is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
11 # PythonCAD is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with PythonCAD; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 ################################################################
24 # This file contains the GTK Menu building code
26 ################################################################
28 import os
29 import stat
30 import sys
32 _debug = False
34 if _debug:
35 try:
36 import gc
37 gc.set_debug(gc.DEBUG_LEAK)
38 except ImportError:
39 pass
41 import pygtk
42 pygtk.require('2.0')
43 import gtk
44 import gtk.keysyms
46 from PythonCAD.Interface.Gtk.gtkimage import GTKImage
47 from PythonCAD.Interface.Gtk import gtkentities
48 from PythonCAD.Interface.Gtk import gtkprefs
49 from PythonCAD.Interface.Gtk import gtkmodify
50 from PythonCAD.Interface.Gtk import gtktext
51 from PythonCAD.Interface.Gtk import gtkprinting
52 from PythonCAD.Interface.Gtk import gtkactions
53 from PythonCAD.Generic import globals
54 from PythonCAD.Generic import fileio
55 from PythonCAD.Generic import imageio
56 from PythonCAD.Generic import tools
57 from PythonCAD.Generic import plotfile
58 from PythonCAD.Generic import text
59 from PythonCAD.Generic import graphicobject
60 from PythonCAD.Generic import dimension
62 from PythonCAD.Generic.image import Image
63 from PythonCAD.Interface.Gtk import gtkdimprefs
64 from PythonCAD.Interface.Gtk import gtktextprefs
65 from PythonCAD.Interface.Gtk import gtkstyleprefs
67 if not hasattr(gtk, 'Action'):
68 gtk.Action = gtkactions.stdAction
69 gtk.ActionGroup = gtkactions.stdActionGroup
72 select_menu = [
73 ('SelectAllPoints', 'point',_('_Points')),
74 ('SelectAllSegments','segment',_('_Segments')),
75 ('SelectAllCircles','circle',_('_Circles')),
76 ('SelectAllArcs','arc',_('_Arcs')),
77 ('SelectAllLeaders','leader',_('_Leaders')),
78 ('SelectAllPolylines','polyline',_('_Polylines')),
79 ('SelectAllChamfers','chamfer',_('Cha_mfers')),
80 ('SelectAllFillets','fillet',_('_Fillets')),
81 (None, None, None),
82 ('SelectAllHCLines','hcline',_('_HCLines')),
83 ('SelectAllVCLines','vcline',_('_VCLines')),
84 ('SelectAllACLines','acline',_('_ACLines')),
85 ('SelectAllCLines','cline',_('C_Lines')),
86 ('SelectAllCCircles','ccircle',_('CCircles')),
87 (None, None, None),
88 ('SelectAllTextBlocks','textblock',_('TextBlocks')),
89 (None, None, None),
90 ('SelectAllLDims','linear_dimension',_('Linear Dim.')),
91 ('SelectAllHDims','horizontal_dimension',_('Horiz. Dim.')),
92 ('SelectAllVDims','vertical_dimension',_('Vert. Dim.')),
93 ('SelectAllRDims','radial_dimension',_('Radial Dim.')),
94 ('SelectAllADims','angular_dimension',_('Angular Dim.')),
98 #############################################################################
100 # callbacks for the menu items
102 #############################################################################
103 def file_new_cb(menuitem, data=None):
104 _image = Image()
105 _gtkimage = GTKImage(_image)
106 _background = globals.prefs['BACKGROUND_COLOR']
107 _image.setOption('BACKGROUND_COLOR', _background)
108 globals.imagelist.append(_image)
109 _gtkimage.window.show_all()
111 #------------------------------------------------------------
112 def file_open_cb(menuitem, gtkimage):
113 _open = False
114 _fname = None
115 _dialog = gtk.FileSelection(_('Open File ...'))
116 _dialog.set_transient_for(gtkimage.getWindow())
117 # _dialog.hide_fileop_buttons()
118 while not _open:
119 _response = _dialog.run()
120 if _response == gtk.RESPONSE_OK:
121 _fname = _dialog.get_filename()
122 if os.path.isdir(_fname):
123 _fname += "/"
124 _dialog.set_filename(_fname)
125 _response = _dialog.run()
126 else:
127 _open = True
128 else:
129 break
130 _dialog.destroy()
131 if _open:
132 _image = Image()
133 try:
134 _handle = fileio.CompFile(_fname, "r")
135 try:
136 imageio.load_image(_image, _handle)
137 finally:
138 _handle.close()
139 except (IOError, OSError), e:
140 _errmsg = "Error opening '%s' : %s'" % (_fname, e)
141 _error_dialog(gtkimage, _errmsg)
142 return
143 except StandardError, e:
144 _errmsg = "Non-system error opening '%s' : %s'" % (_fname, e)
145 _error_dialog(gtkimage, _errmsg)
146 return
147 globals.imagelist.append(_image)
148 _image.setFilename(_fname)
149 _gtkimage = GTKImage(_image)
150 _window = _gtkimage.getWindow()
151 _window.set_title(os.path.basename(_fname))
152 _window.show_all()
153 _gtkimage.fitImage()
155 #------------------------------------------------------------
156 def file_close_cb(menuitem, gtkimage):
157 for _i in xrange(len(globals.imagelist)):
158 _image = globals.imagelist[_i]
159 if _image is gtkimage.image:
160 _log = _image.getLog()
161 if _log is not None:
162 _log.detatch()
163 del globals.imagelist[_i]
164 gtkimage.window.destroy()
165 if not len(globals.imagelist):
166 gtk.main_quit()
167 break
169 #------------------------------------------------------------
170 def _error_dialog(gtkimage, errmsg):
171 _window = gtkimage.getWindow()
172 _dialog = gtk.MessageDialog( _window,
173 gtk.DIALOG_DESTROY_WITH_PARENT,
174 gtk.MESSAGE_ERROR,
175 gtk.BUTTONS_CLOSE,
176 errmsg)
177 _dialog.run()
178 _dialog.destroy()
180 #------------------------------------------------------------
181 def _save_file(gtkimage, filename):
182 _image = gtkimage.getImage()
183 _abs = os.path.abspath(filename)
184 _bname = os.path.basename(_abs)
185 if _bname.endswith('.gz'):
186 _bname = _bname[:-3]
187 _newfile = _abs + '.new'
188 _handle = fileio.CompFile(_newfile, "w", truename=_bname)
189 try:
190 imageio.save_image(_image, _handle)
191 finally:
192 _handle.close()
193 _backup = _abs + '~'
194 if os.path.exists(_backup):
195 os.unlink(_backup)
196 _mode = None
197 if os.path.exists(_abs):
198 _st = os.stat(_abs)
199 _mode = stat.S_IMODE(_st.st_mode)
200 os.rename(_abs, _backup)
201 try:
202 os.rename(_newfile, _abs)
203 except:
204 os.rename(_backup, _abs)
205 raise
206 if _mode is not None and hasattr(os, 'chmod'):
207 os.chmod(_abs, _mode)
208 if _image.getFilename() is None:
209 _image.setFilename(_abs)
211 #------------------------------------------------------------
212 def _writecopy(src, dst):
213 if sys.platform == 'win32':
214 _rmode = 'rb'
215 _wmode = 'wb'
216 else:
217 _rmode = 'r'
218 _wmode = 'w'
219 _from = file(src, _rmode)
220 try:
221 _to = file(dst, _wmode)
222 try:
223 while True:
224 _data = _from.read(8192)
225 if _data == '':
226 break
227 _to.write(_data)
228 finally:
229 _to.close()
230 finally:
231 _from.close()
233 #------------------------------------------------------------
234 def _save_file_by_copy(gtkimage, filename):
235 _image = gtkimage.getImage()
236 _abs = os.path.abspath(filename)
237 _bname = os.path.basename(_abs)
238 if _bname.endswith('.gz'):
239 _bname = _bname[:-3]
240 _newfile = _abs + '.new'
241 _handle = fileio.CompFile(_newfile, "w", truename=_bname)
242 try:
243 imageio.save_image(_image, _handle)
244 finally:
245 _handle.close()
246 # print "saved new file %s" % _newfile
247 _backup = _abs + '~'
248 if os.path.exists(_abs):
249 _writecopy(_abs, _backup)
250 # print "writing existing to backup %s" % _backup
251 try:
252 _writecopy(_newfile, _abs)
253 except:
254 _writecopy(_backup, _abs)
255 raise
256 # print "writing new file to filename %s" % _abs
257 os.unlink(_newfile)
258 # print "removing temporary new file %s" % _abs
259 if _image.getFilename() is None:
260 _image.setFilename(_abs)
262 #------------------------------------------------------------
263 def _get_filename_and_save(gtkimage, fname=None):
264 _window = gtkimage.getWindow()
265 _fname = fname
266 if _fname is None:
267 _fname = _window.get_title()
268 _fname = _window.get_title()
269 _dialog = gtk.FileSelection(_('Save As ...'))
270 _dialog.set_transient_for(gtkimage.getWindow())
271 _dialog.set_filename(_fname)
272 _response = _dialog.run()
273 _save = False
274 if _response == gtk.RESPONSE_OK:
275 _save = True
276 _fname = _dialog.get_filename()
277 if _fname == "":
278 _fname = 'Untitled.xml'
279 if not _fname.endswith('.xml.gz'):
280 if not _fname.endswith('.xml'):
281 _fname = _fname + '.xml'
283 # if the filename already exists see that the user
284 # really wants to overwrite it ...
286 # test for the filename + '.gz'
288 if _fname.endswith('.xml.gz'):
289 _gzfile = _fname
290 else:
291 _gzfile = _fname + '.gz'
292 if os.path.exists(_gzfile):
293 _save = False
294 _dialog2 = gtk.Dialog(_('Overwrite Existing File'), _window,
295 gtk.DIALOG_MODAL,
296 (gtk.STOCK_OK, gtk.RESPONSE_OK,
297 gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
298 _hbox = gtk.HBox(False, 10)
299 _hbox.set_border_width(10)
300 _dialog2.vbox.pack_start(_hbox, False, False, 0)
301 _stock = gtk.image_new_from_stock(gtk.STOCK_DIALOG_QUESTION,
302 gtk.ICON_SIZE_DIALOG)
303 _hbox.pack_start(_stock, False, False, 0)
304 _label = gtk.Label(_('File already exists. Delete it?'))
305 _hbox.pack_start(_label, False, False, 0)
306 _dialog2.show_all()
307 _response = _dialog2.run()
308 if _response == gtk.RESPONSE_OK:
309 _save = True
310 _dialog2.destroy()
311 _dialog.destroy()
312 if _save:
313 # print "name: " + _gzfile
314 gtkimage.image.setFilename(_gzfile)
315 _window.set_title(os.path.basename(_gzfile))
316 try:
317 _save_file(gtkimage, _gzfile)
318 except (IOError, OSError), _e:
319 _errmsg = "Error saving '%s' : %s'" % (_gzfile, _e)
320 _error_dialog(gtkimage, _errmsg)
321 except StandardError, _e:
322 _errmsg = "Non-system error saving '%s' : %s'" % (_gzfile, _e)
323 _error_dialog(gtkimage, _errmsg)
325 #------------------------------------------------------------
326 def file_save_cb(menuitem, gtkimage):
327 _fname = gtkimage.image.getFilename()
328 if _fname is None:
329 _get_filename_and_save(gtkimage)
330 else:
331 try:
332 _save_file(gtkimage, _fname)
333 except (IOError, OSError), _e:
334 _errmsg = "Error saving '%s' : %s'" % (_fname, _e)
335 _error_dialog(gtkimage, _errmsg)
336 except StandardError, _e:
337 _errmsg = "Non-system error saving '%s' : %s'" % (_fname, _e)
338 _error_dialog(gtkimage, _errmsg)
340 #------------------------------------------------------------
341 def file_save_as_cb(menuitem, gtkimage):
342 _fname = gtkimage.image.getFilename()
343 if _fname is None:
344 _fname = gtkimage.getWindow().get_title()
345 _get_filename_and_save(gtkimage, _fname)
347 #------------------------------------------------------------
348 def file_save_layer_cb(menuitem, gtkimage):
349 # print "called file_save_layer_cb()"
350 active = gtkimage.image.getActiveLayer()
351 layer_name = active.getName()
352 dialog = gtk.FileSelection("Save Layer As ...")
353 dialog.set_transient_for(gtkimage.getWindow())
354 dialog.set_filename(layer_name)
355 response = dialog.run()
356 if response == gtk.RESPONSE_OK:
357 fname = dialog.get_filename()
358 print "Saving layer as '%s'" % fname
360 # fixme - add the layer saving code ...
362 dialog.destroy()
364 #------------------------------------------------------------
365 def file_print_screen_cb(menuitem, gtkimage):
366 _plot = plotfile.Plot(gtkimage.image)
367 _xmin, _ymin, _xmax, _ymax = gtkimage.getView()
368 _plot.setBounds(_xmin, _ymin, _xmax, _ymax)
369 gtkprinting.print_dialog(gtkimage, _plot)
371 #------------------------------------------------------------
372 def file_print_cb(menuitem, gtkimage):
373 _tool = tools.PlotTool()
374 gtkimage.getImage().setTool(_tool)
376 #------------------------------------------------------------
377 def file_quit_cb(menuitem, gtkimage):
378 gtk.main_quit()
380 #------------------------------------------------------------
381 def _select_all_cb(menuitem, gtkimage):
382 _group = gtkimage.getGroup('Edit')
383 if _group is not None:
384 _layer = gtkimage.image.getActiveLayer()
385 for _action, _entity, _menuitem in select_menu:
386 if _action is None: continue
387 _act = _group.get_action(_action)
388 if _act is not None:
389 _act.set_property('sensitive',
390 _layer.getEntityCount(_entity) > 0)
392 #------------------------------------------------------------
393 def edit_undo_cb(menuitem, gtkimage):
394 gtkimage.image.doUndo()
396 #------------------------------------------------------------
397 def edit_redo_cb(menuitem, gtkimage):
398 gtkimage.image.doRedo()
400 #------------------------------------------------------------
401 def edit_copy_cb(menuitem, gtkimage):
402 for _obj in gtkimage.image.getSelectedObjects():
403 if _obj.getParent() is not None:
404 globals.selectobj.storeObject(_obj)
406 #------------------------------------------------------------
407 def edit_cut_cb(menuitem, gtkimage):
408 _image = gtkimage.getImage()
409 _image.startAction()
410 try:
411 for _obj in _image.getSelectedObjects():
412 globals.selectobj.storeObject(_obj)
414 # check that the object parent is not None - if it
415 # is then the object was deleted as a result of the
416 # deletion of an earlier object (i.e. dimension)
418 _layer = _obj.getParent()
419 if _layer is not None:
420 _layer.delObject(_obj)
421 finally:
422 _image.endAction()
424 #------------------------------------------------------------
425 def edit_paste_cb(menuitem, gtkimage):
426 _tool = tools.PasteTool()
427 gtkimage.getImage().setTool(_tool)
429 #------------------------------------------------------------
430 def edit_select_cb(menuitem, gtkimage):
431 _tool = tools.SelectTool()
432 gtkimage.getImage().setTool(_tool)
434 #------------------------------------------------------------
435 def edit_deselect_cb(menuitem, gtkimage):
436 _tool = tools.DeselectTool()
437 gtkimage.getImage().setTool(_tool)
439 #------------------------------------------------------------
440 def select_all_objects_cb(menuitem, ge):
441 _gtkimage, _entity = ge
442 _image = _gtkimage.getImage()
443 _active_layer = _image.getActiveLayer()
444 _image.sendMessage('group_action_started')
445 try:
446 for _obj in _active_layer.getLayerEntities(_entity):
447 _image.selectObject(_obj)
448 finally:
449 _image.sendMessage('group_action_ended')
451 def units_cb(menuitem, gtkimage):
452 gtkentities.set_units_dialog(gtkimage)
454 def toggle_cb(menuitem, gtkimage):
455 gtkentities.set_toggle_dialog(gtkimage)
457 def prefs_cb(menuitem, gtkimage):
458 gtkprefs.prefs_dialog(gtkimage)
460 def colors_cb(menuitem, gtkimage):
461 gtkentities.set_colors_dialog(gtkimage)
463 def sizes_cb(menuitem, gtkimage):
464 gtkentities.set_sizes_dialog(gtkimage)
466 def style_cb(menuitem, gtkimage):
467 gtkstyleprefs.style_dialog(gtkimage, globals.prefs['STYLES'],
468 globals.prefs['LINETYPES'])
470 def textstyle_cb(menuitem, gtkimage):
471 gtktextprefs.textstyle_dialog(gtkimage, globals.prefs['TEXTSTYLES'])
473 def dimstyle_cb(menuitem, gtkimage):
474 gtkdimprefs.dimstyle_dialog(gtkimage, globals.prefs['DIMSTYLES'])
476 def draw_point_cb(menuitem, gtkimage):
477 _tool = tools.PointTool()
478 gtkimage.getImage().setTool(_tool)
480 def draw_segment_cb(menuitem, gtkimage):
481 _tool = tools.SegmentTool()
482 gtkimage.getImage().setTool(_tool)
484 def draw_rectangle_cb(menuitem, gtkimage):
485 _tool = tools.RectangleTool()
486 gtkimage.getImage().setTool(_tool)
488 def draw_circle_center_cb(menuitem, gtkimage):
489 _tool = tools.CircleTool()
490 gtkimage.getImage().setTool(_tool)
492 def draw_circle_tp_cb(menuitem, gtkimage):
493 _tool = tools.TwoPointCircleTool()
494 gtkimage.getImage().setTool(_tool)
496 def draw_arc_center_cb(menuitem, gtkimage):
497 _tool = tools.ArcTool()
498 gtkimage.getImage().setTool(_tool)
500 def draw_hcl_cb(menuitem, gtkimage):
501 _tool = tools.HCLineTool()
502 gtkimage.getImage().setTool(_tool)
504 def draw_vcl_cb(menuitem, gtkimage):
505 _tool = tools.VCLineTool()
506 gtkimage.getImage().setTool(_tool)
508 def draw_acl_cb(menuitem, gtkimage):
509 _tool = tools.ACLineTool()
510 gtkimage.getImage().setTool(_tool)
512 def draw_cl_cb(menuitem, gtkimage):
513 _tool = tools.CLineTool()
514 gtkimage.getImage().setTool(_tool)
516 def draw_perpendicular_cline_cb(menuitem, gtkimage):
517 _tool = tools.PerpendicularCLineTool()
518 gtkimage.getImage().setTool(_tool)
520 def draw_tangent_cline_cb(menuitem, gtkimage):
521 _tool = tools.TangentCLineTool()
522 gtkimage.getImage().setTool(_tool)
524 def draw_tangent_two_ccircles_cb(menuitem, gtkimage):
525 _tool = tools.CCircleTangentLineTool()
526 gtkimage.getImage().setTool(_tool)
528 def draw_poffset_cline_cb(menuitem, gtkimage):
529 _tool = tools.ParallelOffsetTool()
530 gtkimage.getImage().setTool(_tool)
532 def draw_ccirc_cp_cb(menuitem, gtkimage):
533 _tool = tools.CCircleTool()
534 gtkimage.getImage().setTool(_tool)
536 def draw_ccirc_tp_cb(menuitem, gtkimage):
537 _tool = tools.TwoPointCCircleTool()
538 gtkimage.getImage().setTool(_tool)
540 def draw_tangent_single_conobj_cb(menuitem, gtkimage):
541 _tool = tools.TangentCCircleTool()
542 gtkimage.getImage().setTool(_tool)
544 def draw_tangent_two_conobjs_cb(menuitem, gtkimage):
545 _tool = tools.TwoPointTangentCCircleTool()
546 gtkimage.getImage().setTool(_tool)
548 def draw_chamfer_cb(menuitem, gtkimage):
549 _tool = tools.ChamferTool()
550 gtkimage.getImage().setTool(_tool)
552 def draw_fillet_cb(menuitem, gtkimage):
553 _tool = tools.FilletTool()
554 gtkimage.getImage().setTool(_tool)
556 def draw_leader_cb(menuitem, gtkimage):
557 _tool = tools.LeaderTool()
558 gtkimage.getImage().setTool(_tool)
560 def draw_polyline_cb(menuitem, gtkimage):
561 _tool = tools.PolylineTool()
562 gtkimage.getImage().setTool(_tool)
564 def _get_polygon_side_count(gtkimage):
565 _sides = 0
566 _window = gtkimage.getWindow()
567 _dialog = gtk.Dialog(_('Polygon Sides'), _window,
568 gtk.DIALOG_MODAL,
569 (gtk.STOCK_OK, gtk.RESPONSE_OK,
570 gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
571 _hbox = gtk.HBox(False, 10)
572 _hbox.set_border_width(10)
573 _dialog.vbox.pack_start(_hbox, False, False, 0)
574 _stock = gtk.image_new_from_stock(gtk.STOCK_DIALOG_QUESTION,
575 gtk.ICON_SIZE_DIALOG)
576 _hbox.pack_start(_stock, False, False, 0)
577 _label = gtk.Label(_('Number of sides:'))
578 _hbox.pack_start(_label, False, False, 0)
579 _adj = gtk.Adjustment(3, 3, 3600, 1, 1, 1) # arbitrary max ...
580 _sb = gtk.SpinButton(_adj)
581 _sb.set_numeric(True)
582 _hbox.pack_start(_sb, True, True, 0)
583 _dialog.show_all()
584 _response = _dialog.run()
585 if _response == gtk.RESPONSE_OK:
586 _sides = _sb.get_value()
587 _dialog.destroy()
588 return _sides
590 def draw_polygon_cb(menuitem, gtkimage):
591 _sides = _get_polygon_side_count(gtkimage)
592 if _sides > 0:
593 _tool = tools.PolygonTool()
594 _tool.setSideCount(_sides)
595 gtkimage.getImage().setTool(_tool)
597 def draw_ext_polygon_cb(menuitem, gtkimage):
598 _sides = _get_polygon_side_count(gtkimage)
599 if _sides > 0:
600 _tool = tools.PolygonTool()
601 _tool.setExternal()
602 _tool.setSideCount(_sides)
603 gtkimage.getImage().setTool(_tool)
605 def draw_set_style_cb(menuitem, gtkimage):
606 gtkentities.set_active_style(gtkimage)
608 def draw_set_linetype_cb(menuitem, gtkimage):
609 gtkentities.set_active_linetype(gtkimage)
611 def draw_set_color_cb(menuitem, gtkimage):
612 gtkentities.set_active_color(gtkimage)
614 def draw_set_thickness_cb(menuitem, gtkimage):
615 gtkentities.set_line_thickness(gtkimage)
617 def draw_text_cb(menuitem, gtkimage):
618 _text = gtktext.text_add_dialog(gtkimage)
619 if _text is not None:
620 _tool = tools.TextTool()
621 _tool.setText(_text)
622 gtkimage.getImage().setTool(_tool)
624 def move_horizontal_cb(menuitem, gtkimage):
625 _tool = tools.HorizontalMoveTool()
626 gtkimage.getImage().setTool(_tool)
628 def move_vertical_cb(menuitem, gtkimage):
629 _tool = tools.VerticalMoveTool()
630 gtkimage.getImage().setTool(_tool)
632 def move_twopoint_cb(menuitem, gtkimage):
633 _tool = tools.MoveTool()
634 gtkimage.getImage().setTool(_tool)
636 def stretch_horiz_cb(menuitem, gtkimage):
637 _tool = tools.HorizontalStretchTool()
638 gtkimage.getImage().setTool(_tool)
640 def stretch_vert_cb(menuitem, gtkimage):
641 _tool = tools.VerticalStretchTool()
642 gtkimage.getImage().setTool(_tool)
644 def stretch_twopoint_cb(menuitem, gtkimage):
645 _tool = tools.StretchTool()
646 gtkimage.getImage().setTool(_tool)
648 def transfer_object_cb(menuitem, gtkimage):
649 _tool = tools.TransferTool()
650 gtkimage.getImage().setTool(_tool)
652 def rotate_object_cb(menuitem, gtkimage):
653 _tool = tools.RotateTool()
654 gtkimage.getImage().setTool(_tool)
656 def split_object_cb(menuitem, gtkimage):
657 _tool = tools.SplitTool()
658 gtkimage.getImage().setTool(_tool)
660 def mirror_object_cb(menuitem, gtkimage):
661 _tool = tools.MirrorTool()
662 gtkimage.getImage().setTool(_tool)
664 def delete_cb(menuitem, gtkimage):
665 _tool = tools.DeleteTool()
666 gtkimage.getImage().setTool(_tool)
668 def change_style_cb(menuitem, gtkimage):
669 _st = gtkmodify.change_style_dialog(gtkimage)
670 if _st is not None:
671 _tool = tools.GraphicObjectTool()
672 _tool.setAttribute('setStyle')
673 _tool.setValue(_st)
674 _tool.setObjtype(graphicobject.GraphicObject)
675 gtkimage.getImage().setTool(_tool)
676 gtkmodify.change_style_init(gtkimage)
678 def change_color_cb(menuitem, gtkimage):
679 _color = gtkmodify.change_color_dialog(gtkimage)
680 if _color is not None:
681 _tool = tools.GraphicObjectTool()
682 _tool.setAttribute('setColor')
683 _tool.setValue(_color)
684 _tool.setObjtype(graphicobject.GraphicObject)
685 gtkimage.getImage().setTool(_tool)
686 gtkmodify.change_color_init(gtkimage)
688 def change_linetype_cb(menuitem, gtkimage):
689 _lt = gtkmodify.change_linetype_dialog(gtkimage)
690 if _lt is not None:
691 _tool = tools.GraphicObjectTool()
692 _tool.setAttribute('setLinetype')
693 _tool.setValue(_lt)
694 _tool.setObjtype(graphicobject.GraphicObject)
695 gtkimage.getImage().setTool(_tool)
696 gtkmodify.change_linetype_init(gtkimage)
698 def change_thickness_cb(menuitem, gtkimage):
699 _t = gtkmodify.change_thickness_dialog(gtkimage)
700 if _t is not None:
701 _tool = tools.GraphicObjectTool()
702 _tool.setAttribute('setThickness')
703 _tool.setValue(_t)
704 _tool.setObjtype(graphicobject.GraphicObject)
705 gtkimage.getImage().setTool(_tool)
706 gtkmodify.change_thickness_init(gtkimage)
708 def change_textblock_style_cb(menuitem, gtkimage):
709 _st = gtkmodify.change_textblock_style_dialog(gtkimage, 'FONT_STYLE')
710 if _st is not None:
711 _tool = tools.TextTool()
712 _tool.setAttribute('setStyle')
713 _tool.setValue(_st)
714 _tool.setObjtype(text.TextBlock)
715 gtkimage.getImage().setTool(_tool)
716 gtkmodify.change_textblock_style_init(gtkimage)
718 def change_textblock_weight_cb(menuitem, gtkimage):
719 _w = gtkmodify.change_textblock_weight_dialog(gtkimage, 'FONT_WEIGHT')
720 if _w is not None:
721 _tool = tools.TextTool()
722 _tool.setAttribute('setWeight')
723 _tool.setValue(_w)
724 _tool.setObjtype(text.TextBlock)
725 gtkimage.getImage().setTool(_tool)
726 gtkmodify.change_textblock_weight_init(gtkimage)
728 def change_textblock_alignment_cb(menuitem, gtkimage):
729 _align = gtkmodify.change_textblock_alignment_dialog(gtkimage, 'TEXT_ALIGNMENT')
730 if _align is not None:
731 _tool = tools.TextTool()
732 _tool.setAttribute('setAlignment')
733 _tool.setValue(_align)
734 _tool.setObjtype(text.TextBlock)
735 gtkimage.getImage().setTool(_tool)
736 gtkmodify.change_textblock_alignment_init(gtkimage)
738 def change_textblock_size_cb(menuitem, gtkimage):
739 _size = gtkmodify.change_textblock_size_dialog(gtkimage, 'TEXT_SIZE')
740 if _size is not None:
741 _tool = tools.TextTool()
742 _tool.setAttribute('setSize')
743 _tool.setValue(_size)
744 _tool.setObjtype(text.TextBlock)
745 gtkimage.getImage().setTool(_tool)
746 gtkmodify.change_textblock_size_init(gtkimage)
748 def change_textblock_family_cb(menuitem, gtkimage):
749 _family = gtkmodify.change_textblock_family_dialog(gtkimage, 'FONT_FAMILY')
750 if _family is not None:
751 _tool = tools.TextTool()
752 _tool.setAttribute('setFamily')
753 _tool.setValue(_family)
754 _tool.setObjtype(text.TextBlock)
755 gtkimage.getImage().setTool(_tool)
756 gtkmodify.change_textblock_family_init(gtkimage)
758 def change_textblock_color_cb(menuitem, gtkimage):
759 _color = gtkmodify.change_textblock_color_dialog(gtkimage, 'FONT_COLOR')
760 if _color is not None:
761 _tool = tools.TextTool()
762 _tool.setAttribute('setColor')
763 _tool.setValue(_color)
764 _tool.setObjtype(text.TextBlock)
765 gtkimage.getImage().setTool(_tool)
766 gtkmodify.change_textblock_color_init(gtkimage)
768 def change_dim_endpoint_cb(menuitem, gtkimage):
769 _et = gtkmodify.change_dim_endpoint_dialog(gtkimage)
770 if _et is not None:
771 _tool = tools.EditDimensionTool()
772 _tool.setAttribute('setEndpointType')
773 _tool.setValue(_et)
774 _tool.setObjtype(dimension.Dimension)
775 gtkimage.getImage().setTool(_tool)
776 gtkmodify.change_dim_endpoint_init(gtkimage)
778 def change_dim_endpoint_size_cb(menuitem, gtkimage):
779 _es = gtkmodify.change_dim_endpoint_size_dialog(gtkimage)
780 if _es is not None:
781 _tool = tools.EditDimensionTool()
782 _tool.setAttribute('setEndpointSize')
783 _tool.setValue(_es)
784 _tool.setObjtype(dimension.Dimension)
785 gtkimage.getImage().setTool(_tool)
786 gtkmodify.change_dim_endpoint_size_init(gtkimage)
788 def change_dim_offset_cb(menuitem, gtkimage):
789 _offset = gtkmodify.change_dim_offset_dialog(gtkimage)
790 if _offset is not None:
791 _tool = tools.EditDimensionTool()
792 _tool.setAttribute('setOffset')
793 _tool.setValue(_offset)
794 _tool.setObjtype(dimension.Dimension)
795 gtkimage.getImage().setTool(_tool)
796 gtkmodify.change_dim_offset_init(gtkimage)
798 def change_dim_extension_cb(menuitem, gtkimage):
799 _ext = gtkmodify.change_dim_extension_dialog(gtkimage)
800 if _ext is not None:
801 _tool = tools.EditDimensionTool()
802 _tool.setAttribute('setExtension')
803 _tool.setValue(_ext)
804 _tool.setObjtype(dimension.Dimension)
805 gtkimage.getImage().setTool(_tool)
806 gtkmodify.change_dim_extension_init(gtkimage)
808 def change_dim_dual_mode_cb(menuitem, gtkimage):
809 _ddm = gtkmodify.change_dim_dual_mode_dialog(gtkimage)
810 if _ddm is not None:
811 _tool = tools.EditDimensionTool()
812 _tool.setAttribute('setDualDimMode')
813 _tool.setValue(_ddm)
814 _tool.setObjtype(dimension.Dimension)
815 gtkimage.getImage().setTool(_tool)
816 gtkmodify.change_dim_dual_mode_init(gtkimage)
818 def change_dim_dual_mode_offset_cb(menuitem, gtkimage):
819 _dmo = gtkmodify.change_dim_dual_mode_offset_dialog(gtkimage)
820 if _dmo is not None:
821 _tool = tools.EditDimensionTool()
822 _tool.setAttribute('setDualModeOffset')
823 _tool.setValue(_dmo)
824 _tool.setObjtype(dimension.Dimension)
825 gtkimage.getImage().setTool(_tool)
826 gtkmodify.change_dim_dual_mode_offset_init(gtkimage)
828 def change_dim_thickness_cb(menuitem, gtkimage):
829 _t = gtkmodify.change_dim_thickness_dialog(gtkimage)
830 if _t is not None:
831 _tool = tools.EditDimensionTool()
832 _tool.setAttribute('setThickness')
833 _tool.setValue(_t)
834 _tool.setObjtype(dimension.Dimension)
835 gtkimage.getImage().setTool(_tool)
836 gtkmodify.change_dim_thickness_init(gtkimage)
838 def change_dim_color_cb(menuitem, gtkimage):
839 _color = gtkmodify.change_dim_color_dialog(gtkimage)
840 if _color is not None:
841 _tool = tools.EditDimensionTool()
842 _tool.setAttribute('setColor')
843 _tool.setValue(_color)
844 _tool.setObjtype(dimension.Dimension)
845 gtkimage.getImage().setTool(_tool)
846 gtkmodify.change_dim_color_init(gtkimage)
848 def _change_dimstring_style_cb(gtkimage, val, flag):
849 _tool = tools.EditDimStringTool()
850 _tool.setAttribute('setStyle')
851 _tool.setValue(val)
852 _tool.setPrimary(flag)
853 _tool.setObjtype(dimension.DimString)
854 gtkimage.getImage().setTool(_tool)
855 gtkmodify.change_dimstr_style_init(gtkimage)
857 def change_dim_primary_style_cb(menuitem, gtkimage):
858 _st = gtkmodify.change_textblock_style_dialog(gtkimage, 'DIM_PRIMARY_FONT_STYLE')
859 if _st is not None:
860 _change_dimstring_style_cb(gtkimage, _st, True)
862 def change_dim_secondary_style_cb(menuitem, gtkimage):
863 _st = gtkmodify.change_textblock_style_dialog(gtkimage, 'DIM_SECONDARY_FONT_STYLE')
864 if _st is not None:
865 _change_dimstring_style_cb(gtkimage, _st, False)
867 def _change_dimstring_family_cb(gtkimage, val, flag):
868 _tool = tools.EditDimStringTool()
869 _tool.setAttribute('setFamily')
870 _tool.setValue(val)
871 _tool.setPrimary(flag)
872 _tool.setObjtype(dimension.DimString)
873 gtkimage.getImage().setTool(_tool)
874 gtkmodify.change_dimstr_family_init(gtkimage)
876 def change_dim_primary_family_cb(menuitem, gtkimage):
877 _family = gtkmodify.change_textblock_family_dialog(gtkimage, 'DIM_PRIMARY_FONT_FAMILY')
878 if _family is not None:
879 _change_dimstring_family_cb(gtkimage, _family, True)
881 def change_dim_secondary_family_cb(menuitem, gtkimage):
882 _family = gtkmodify.change_textblock_family_dialog(gtkimage, 'DIM_SECONDARY_FONT_FAMILY')
883 if _family is not None:
884 _change_dimstring_family_cb(gtkimage, _family, False)
886 def _change_dimstring_weight_cb(gtkimage, val, flag):
887 _tool = tools.EditDimStringTool()
888 _tool.setAttribute('setWeight')
889 _tool.setValue(val)
890 _tool.setPrimary(flag)
891 _tool.setObjtype(dimension.DimString)
892 gtkimage.getImage().setTool(_tool)
893 gtkmodify.change_dimstr_weight_init(gtkimage)
895 def change_dim_primary_weight_cb(menuitem, gtkimage):
896 _weight = gtkmodify.change_textblock_weight_dialog(gtkimage, 'DIM_PRIMARY_FONT_WEIGHT')
897 if _weight is not None:
898 _change_dimstring_weight_cb(gtkimage, _weight, True)
900 def change_dim_secondary_weight_cb(menuitem, gtkimage):
901 _weight = gtkmodify.change_textblock_weight_dialog(gtkimage, 'DIM_SECONDARY_FONT_WEIGHT')
902 if _weight is not None:
903 _change_dimstring_weight_cb(gtkimage, _weight, False)
905 def _change_dimstring_size_cb(gtkimage, val, flag):
906 _tool = tools.EditDimStringTool()
907 _tool.setAttribute('setSize')
908 _tool.setValue(val)
909 _tool.setPrimary(flag)
910 _tool.setObjtype(dimension.DimString)
911 gtkimage.getImage().setTool(_tool)
912 gtkmodify.change_dimstr_size_init(gtkimage)
914 def change_dim_primary_size_cb(menuitem, gtkimage):
915 _size = gtkmodify.change_textblock_size_dialog(gtkimage, 'DIM_PRIMARY_TEXT_SIZE')
916 if _size is not None:
917 _change_dimstring_size_cb(gtkimage, _size, True)
919 def change_dim_secondary_size_cb(menuitem, gtkimage):
920 _size = gtkmodify.change_textblock_size_dialog(gtkimage, 'DIM_SECONDARY_TEXT_SIZE')
921 if _size is not None:
922 _change_dimstring_size_cb(gtkimage, _size, False)
924 def _change_dimstring_color_cb(gtkimage, val, flag):
925 _tool = tools.EditDimStringTool()
926 _tool.setAttribute('setColor')
927 _tool.setValue(val)
928 _tool.setPrimary(flag)
929 _tool.setObjtype(dimension.DimString)
930 gtkimage.getImage().setTool(_tool)
931 gtkmodify.change_dimstr_color_init(gtkimage)
933 def change_dim_primary_color_cb(menuitem, gtkimage):
934 _color = gtkmodify.change_textblock_color_dialog(gtkimage, 'DIM_PRIMARY_FONT_COLOR')
935 if _color is not None:
936 _change_dimstring_color_cb(gtkimage, _color, True)
938 def change_dim_secondary_color_cb(menuitem, gtkimage):
939 _color = gtkmodify.change_textblock_color_dialog(gtkimage, 'DIM_SECONDARY_FONT_COLOR')
940 if _color is not None:
941 _change_dimstring_color_cb(gtkimage, _color, False)
943 def _change_dimstring_alignment_cb(gtkimage, val, flag):
944 _tool = tools.EditDimStringTool()
945 _tool.setAttribute('setAlignment')
946 _tool.setValue(val)
947 _tool.setPrimary(flag)
948 _tool.setObjtype(dimension.DimString)
949 gtkimage.getImage().setTool(_tool)
950 gtkmodify.change_dimstr_alignment_init(gtkimage)
952 def change_dim_primary_alignment_cb(menuitem, gtkimage):
953 _align = gtkmodify.change_textblock_alignment_dialog(gtkimage, 'DIM_PRIMARY_TEXT_ALIGNMENT')
954 if _align is not None:
955 _change_dimstring_alignment_cb(gtkimage, _align, True)
957 def change_dim_secondary_alignment_cb(menuitem, gtkimage):
958 _align = gtkmodify.change_textblock_alignment_dialog(gtkimage, 'DIM_SECONDARY_TEXT_ALIGNMENT')
959 if _align is not None:
960 _change_dimstring_alignment_cb(gtkimage, _align, False)
962 def _change_dimstring_prefix_cb(gtkimage, val, flag):
963 _tool = tools.EditDimStringTool()
964 _tool.setAttribute('setPrefix')
965 _tool.setValue(val)
966 _tool.setPrimary(flag)
967 _tool.setObjtype(dimension.DimString)
968 gtkimage.getImage().setTool(_tool)
970 def change_ldim_pds_prefix_cb(menuitem, gtkimage):
971 _text = gtkmodify.change_dimstr_prefix_dialog(gtkimage, 'DIM_PRIMARY_PREFIX')
972 if _text is not None:
973 _change_dimstring_prefix_cb(gtkimage, _text, True)
974 gtkmodify.change_ldimstr_prefix_init(gtkimage)
976 def change_ldim_sds_prefix_cb(menuitem, gtkimage):
977 _text = gtkmodify.change_dimstr_prefix_dialog(gtkimage, 'DIM_SECONDARY_PREFIX')
978 if _text is not None:
979 _change_dimstring_prefix_cb(gtkimage, _text, False)
980 gtkmodify.change_ldimstr_prefix_init(gtkimage)
982 def change_rdim_pds_prefix_cb(menuitem, gtkimage):
983 _text = gtkmodify.change_dimstr_prefix_dialog(gtkimage, 'RADIAL_DIM_PRIMARY_PREFIX')
984 if _text is not None:
985 _change_dimstring_prefix_cb(gtkimage, _text, True)
986 gtkmodify.change_rdimstr_prefix_init(gtkimage)
988 def change_rdim_sds_prefix_cb(menuitem, gtkimage):
989 _text = gtkmodify.change_dimstr_prefix_dialog(gtkimage, 'RADIAL_DIM_SECONDARY_PREFIX')
990 if _text is not None:
991 _change_dimstring_prefix_cb(gtkimage, _text, False)
992 gtkmodify.change_rdimstr_prefix_init(gtkimage)
994 def change_adim_pds_prefix_cb(menuitem, gtkimage):
995 _text = gtkmodify.change_dimstr_prefix_dialog(gtkimage, 'ANGULAR_DIM_PRIMARY_PREFIX')
996 if _text is not None:
997 _change_dimstring_prefix_cb(gtkimage, _text, True)
998 gtkmodify.change_adimstr_prefix_init(gtkimage)
1000 def change_adim_sds_prefix_cb(menuitem, gtkimage):
1001 _text = gtkmodify.change_dimstr_prefix_dialog(gtkimage, 'ANGULAR_DIM_SECONDARY_PREFIX')
1002 if _text is not None:
1003 _change_dimstring_prefix_cb(gtkimage, _text, False)
1004 gtkmodify.change_adimstr_prefix_init(gtkimage)
1006 def _change_dimstring_suffix_cb(gtkimage, val, flag):
1007 _tool = tools.EditDimStringTool()
1008 _tool.setAttribute('setSuffix')
1009 _tool.setValue(val)
1010 _tool.setPrimary(flag)
1011 _tool.setObjtype(dimension.DimString)
1012 gtkimage.getImage().setTool(_tool)
1014 def change_ldim_pds_suffix_cb(menuitem, gtkimage):
1015 _text = gtkmodify.change_dimstr_suffix_dialog(gtkimage, 'DIM_PRIMARY_SUFFIX')
1016 if _text is not None:
1017 _change_dimstring_suffix_cb(gtkimage, _text, True)
1018 gtkmodify.change_ldimstr_suffix_init(gtkimage)
1020 def change_ldim_sds_suffix_cb(menuitem, gtkimage):
1021 _text = gtkmodify.change_dimstr_suffix_dialog(gtkimage, 'DIM_SECONDARY_SUFFIX')
1022 if _text is not None:
1023 _change_dimstring_suffix_cb(gtkimage, _text, False)
1024 gtkmodify.change_ldimstr_suffix_init(gtkimage)
1026 def change_rdim_pds_suffix_cb(menuitem, gtkimage):
1027 _text = gtkmodify.change_dimstr_suffix_dialog(gtkimage, 'RADIAL_DIM_PRIMARY_SUFFIX')
1028 if _text is not None:
1029 _change_dimstring_suffix_cb(gtkimage, _text, True)
1030 gtkmodify.change_rdimstr_suffix_init(gtkimage)
1032 def change_rdim_sds_suffix_cb(menuitem, gtkimage):
1033 _text = gtkmodify.change_dimstr_suffix_dialog(gtkimage, 'RADIAL_DIM_SECONDARY_SUFFIX')
1034 if _text is not None:
1035 _change_dimstring_suffix_cb(gtkimage, _text, False)
1036 gtkmodify.change_rdimstr_suffix_init(gtkimage)
1038 def change_adim_pds_suffix_cb(menuitem, gtkimage):
1039 _text = gtkmodify.change_dimstr_suffix_dialog(gtkimage, 'ANGULAR_DIM_PRIMARY_SUFFIX')
1040 if _text is not None:
1041 _change_dimstring_suffix_cb(gtkimage, _text, True)
1042 gtkmodify.change_adimstr_suffix_init(gtkimage)
1044 def change_adim_sds_suffix_cb(menuitem, gtkimage):
1045 _text = gtkmodify.change_dimstr_suffix_dialog(gtkimage, 'ANGULAR_DIM_SECONDARY_SUFFIX')
1046 if _text is not None:
1047 _change_dimstring_suffix_cb(gtkimage, _text, False)
1048 gtkmodify.change_adimstr_suffix_init(gtkimage)
1050 def _change_dimstring_precision_cb(gtkimage, val, flag):
1051 _tool = tools.EditDimStringTool()
1052 _tool.setAttribute('setPrecision')
1053 _tool.setValue(val)
1054 _tool.setPrimary(flag)
1055 _tool.setObjtype(dimension.DimString)
1056 gtkimage.getImage().setTool(_tool)
1057 gtkmodify.change_dimstr_precision_init(gtkimage)
1059 def change_dim_primary_precision_cb(menuitem, gtkimage):
1060 _prec = gtkmodify.change_dimstr_precision_dialog(gtkimage, 'DIM_PRIMARY_PRECISION')
1061 if _prec is not None:
1062 _change_dimstring_precision_cb(gtkimage, _prec, True)
1064 def change_dim_secondary_precision_cb(menuitem, gtkimage):
1065 _prec = gtkmodify.change_dimstr_precision_dialog(gtkimage, 'DIM_SECONDARY_PRECISION')
1066 if _prec is not None:
1067 _change_dimstring_precision_cb(gtkimage, _prec, False)
1069 def _change_dimstring_units_cb(gtkimage, val, flag):
1070 _tool = tools.EditDimStringTool()
1071 _tool.setAttribute('setUnits')
1072 _tool.setValue(val)
1073 _tool.setPrimary(flag)
1074 _tool.setObjtype(dimension.DimString)
1075 gtkimage.getImage().setTool(_tool)
1076 gtkmodify.change_dimstr_units_init(gtkimage)
1078 def change_dim_primary_units_cb(menuitem, gtkimage):
1079 _unit = gtkmodify.change_dimstr_units_dialog(gtkimage, 'DIM_PRIMARY_UNITS')
1080 if _unit is not None:
1081 _change_dimstring_units_cb(gtkimage, _unit, True)
1083 def change_dim_secondary_units_cb(menuitem, gtkimage):
1084 _unit = gtkmodify.change_dimstr_units_dialog(gtkimage, 'DIM_SECONDARY_UNITS')
1085 if _unit is not None:
1086 _change_dimstring_units_cb(gtkimage, _unit, False)
1088 def _change_dimstring_print_zero_cb(gtkimage, val, flag):
1089 _tool = tools.EditDimStringTool()
1090 _tool.setAttribute('setPrintZero')
1091 _tool.setValue(val)
1092 _tool.setPrimary(flag)
1093 _tool.setObjtype(dimension.DimString)
1094 gtkimage.getImage().setTool(_tool)
1095 gtkmodify.change_dimstr_print_zero_init(gtkimage)
1097 def change_dim_primary_print_zero_cb(menuitem, gtkimage):
1098 _flag = gtkmodify.change_dimstr_print_zero_dialog(gtkimage, 'DIM_PRIMARY_LEADING_ZERO')
1099 if _flag is not None:
1100 _change_dimstring_print_zero_cb(gtkimage, _flag, True)
1102 def change_dim_secondary_print_zero_cb(menuitem, gtkimage):
1103 _flag = gtkmodify.change_dimstr_print_zero_dialog(gtkimage, 'DIM_SECONDARY_LEADING_ZERO')
1104 if _flag is not None:
1105 _change_dimstring_print_zero_cb(gtkimage, _flag, False)
1107 def _change_dimstring_print_decimal_cb(gtkimage, val, flag):
1108 _tool = tools.EditDimStringTool()
1109 _tool.setAttribute('setPrintDecimal')
1110 _tool.setValue(val)
1111 _tool.setPrimary(flag)
1112 _tool.setObjtype(dimension.DimString)
1113 gtkimage.getImage().setTool(_tool)
1114 gtkmodify.change_dimstr_print_decimal_init(gtkimage)
1116 def change_dim_primary_print_decimal_cb(menuitem, gtkimage):
1117 _flag = gtkmodify.change_dimstr_print_decimal_dialog(gtkimage, 'DIM_PRIMARY_TRAILING_DECIMAL')
1118 if _flag is not None:
1119 _change_dimstring_print_decimal_cb(gtkimage, _flag, True)
1121 def change_dim_secondary_print_decimal_cb(menuitem, gtkimage):
1122 _flag = gtkmodify.change_dimstr_print_decimal_dialog(gtkimage, 'DIM_SECONDARY_TRAILING_DECIMAL')
1123 if _flag is not None:
1124 _change_dimstring_print_decimal_cb(gtkimage, _flag, False)
1126 def change_rdim_dia_mode_cb(menuitem, gtkimage):
1127 _tool = tools.EditDimensionTool()
1128 _tool.setObjtype(dimension.RadialDimension)
1129 gtkimage.getImage().setTool(_tool)
1130 gtkmodify.change_rdim_dia_mode_init(gtkimage)
1132 def change_adim_invert_cb(menuitem, gtkimage):
1133 _tool = tools.EditDimensionTool()
1134 _tool.setObjtype(dimension.AngularDimension)
1135 gtkimage.getImage().setTool(_tool)
1136 gtkmodify.invert_adim_init(gtkimage)
1138 def zoom_cb(menuitem, gtkimage):
1139 _tool = tools.ZoomTool()
1140 gtkimage.getImage().setTool(_tool)
1142 def zoom_in_cb(menuitem, gtkimage):
1143 _xmin, _ymin, _xmax, _ymax = gtkimage.getView()
1144 _scale = gtkimage.getUnitsPerPixel()
1145 _xdiff = abs(_xmax - _xmin)
1146 _ydiff = abs(_ymax - _ymin)
1147 _xmin = (_xmin + _xmax)/2.0 - _xdiff/4.0
1148 _ymin = (_ymin + _ymax)/2.0 - _ydiff/4.0
1149 gtkimage.setView(_xmin, _ymin, (_scale/2.0))
1151 def zoom_out_cb(menuitem, gtkimage):
1152 _xmin, _ymin, _xmax, _ymax = gtkimage.getView()
1153 _scale = gtkimage.getUnitsPerPixel()
1154 _xdiff = abs(_xmax - _xmin)
1155 _ydiff = abs(_ymax - _ymin)
1156 _xmin = (_xmin + _xmax)/2.0 - _xdiff
1157 _ymin = (_ymin + _ymax)/2.0 - _ydiff
1158 gtkimage.setView(_xmin, _ymin, (_scale * 2.0))
1160 def zoom_fit_cb(menuitem, gtkimage):
1161 gtkimage.fitImage()
1163 def dimension_linear_cb(menuitem, gtkimage):
1164 _tool = tools.LinearDimensionTool()
1165 gtkimage.getImage().setTool(_tool)
1167 def dimension_horizontal_cb(menuitem, gtkimage):
1168 _tool = tools.HorizontalDimensionTool()
1169 gtkimage.getImage().setTool(_tool)
1171 def dimension_vertical_cb(menuitem, gtkimage):
1172 _tool = tools.VerticalDimensionTool()
1173 gtkimage.getImage().setTool(_tool)
1175 def dimension_radial_cb(menuitem, gtkimage):
1176 _tool = tools.RadialDimensionTool()
1177 gtkimage.getImage().setTool(_tool)
1179 def dimension_angular_cb(menuitem, gtkimage):
1180 _tool = tools.AngularDimensionTool()
1181 gtkimage.getImage().setTool(_tool)
1183 def get_focus_widget_cb(menuitem, gtkimage):
1184 _widget = gtkimage.getWindow().get_focus()
1185 print "Focus widget: " + str(_widget)
1187 def get_undo_stack_cb(menuitem, gtkimage):
1188 _layer = gtkimage.image.getActiveLayer()
1189 _log = _layer.getLog()
1190 if _log is not None:
1191 _log.printUndoData()
1193 def get_redo_stack_cb(menuitem, gtkimage):
1194 _layer = gtkimage.image.getActiveLayer()
1195 _log = _layer.getLog()
1196 if _log is not None:
1197 _log.printRedoData()
1199 def get_image_undo_cb(menuitem, gtkimage):
1200 gtkimage.image.printStack(True)
1202 def get_image_redo_cb(menuitem, gtkimage):
1203 gtkimage.image.printStack(False)
1205 def collect_garbage_cb(menuitem, gtkimage):
1206 if 'gc' in sys.modules:
1207 _lost = gc.collect()
1208 print "%d lost objects: " % _lost
1211 def _debug_cb(action, *args):
1212 print "_debug_cb()"
1213 print "action: " + `action`
1214 print "args: " + str(args)
1215 _group = action.get_property('action-group')
1216 if _group is not None:
1217 for _act in _group.list_actions():
1218 _name = _act.get_name()
1219 print "Action name: %s" % _name
1221 def _std_cb(action, *args):
1222 print "_std_cb()"
1223 _name = action.get_name()
1224 print "Action name: %s" % _name
1226 def _add_accelerators(action, menuitem, accelgroup):
1227 _path = action.get_accel_path()
1228 if _path is not None:
1229 _data = gtk.accel_map_lookup_entry(_path)
1230 if _data is not None:
1231 _k, _m = _data
1232 if gtk.accelerator_valid(_k, _m):
1233 menuitem.add_accelerator('activate', accelgroup,
1234 _k, _m, gtk.ACCEL_VISIBLE)
1238 #############################################################################
1240 # Menu item definitions -- These define the individual menu items,
1241 # and the actions taken (callbacks invoked) when they are selected.
1243 #############################################################################
1245 ###################### File menu ##########################
1246 def _file_menu_init(menuitem, gtkimage):
1247 _group = gtkimage.getGroup('File')
1248 if _group is not None:
1249 _act = _group.get_action('SaveLayerAs')
1250 if _act is not None:
1251 _act.set_property('sensitive', False)
1253 #------------------------------------------------------------
1254 def _make_file_menu(actiongroup, gtkimage):
1255 _accel = gtkimage.accel
1256 _menu = gtk.Menu()
1258 _act = gtk.Action('New', _('_New'), None, gtk.STOCK_NEW)
1259 _act.connect('activate', file_new_cb)
1260 _act.set_accel_group(_accel)
1261 actiongroup.add_action_with_accel(_act, None)
1262 _item = _act.create_menu_item()
1263 if isinstance(_act, gtkactions.stdAction):
1264 _add_accelerators(_act, _item, _accel)
1265 _menu.append(_item)
1267 _act = gtk.Action('Open', _('_Open'), None, gtk.STOCK_OPEN)
1268 _act.connect('activate', file_open_cb, gtkimage)
1269 _act.set_accel_group(_accel)
1270 actiongroup.add_action_with_accel(_act, None)
1271 _item = _act.create_menu_item()
1272 if isinstance(_act, gtkactions.stdAction):
1273 _add_accelerators(_act, _item, _accel)
1274 _menu.append(_item)
1276 _act = gtk.Action('Close', _('_Close'), None, gtk.STOCK_CLOSE)
1277 _act.connect('activate', file_close_cb, gtkimage)
1278 _act.set_accel_group(_accel)
1279 actiongroup.add_action_with_accel(_act, None)
1280 _item = _act.create_menu_item()
1281 if isinstance(_act, gtkactions.stdAction):
1282 _add_accelerators(_act, _item, _accel)
1283 _menu.append(_item)
1285 _item = gtk.SeparatorMenuItem()
1286 _item.show()
1287 _menu.append(_item)
1289 _act = gtk.Action('Save', _('_Save'), None, gtk.STOCK_SAVE)
1290 _act.connect('activate', file_save_cb, gtkimage)
1291 _act.set_accel_group(_accel)
1292 actiongroup.add_action_with_accel(_act, None)
1293 _item = _act.create_menu_item()
1294 if isinstance(_act, gtkactions.stdAction):
1295 _add_accelerators(_act, _item, _accel)
1296 _menu.append(_item)
1298 _act = gtk.Action('SaveAs', _('Save _As ...'), None, None)
1299 _act.connect('activate', file_save_as_cb, gtkimage)
1300 actiongroup.add_action(_act)
1301 _menu.append(_act.create_menu_item())
1303 _act = gtk.Action('SaveLayerAs', _('Save _Layer As ...'), None, None)
1304 _act.connect('activate', file_save_layer_cb, gtkimage)
1305 actiongroup.add_action(_act)
1306 _menu.append(_act.create_menu_item())
1308 _item = gtk.SeparatorMenuItem()
1309 _item.show()
1310 _menu.append(_item)
1312 _act = gtk.Action('PrintScreen', _('Print Screen'), None, None)
1313 _act.connect('activate', file_print_screen_cb, gtkimage)
1314 actiongroup.add_action(_act)
1315 _menu.append(_act.create_menu_item())
1317 _act = gtk.Action('Print', _('_Print'), None, gtk.STOCK_PRINT)
1318 _act.connect('activate', file_print_cb, gtkimage)
1319 _act.set_accel_group(_accel)
1320 actiongroup.add_action_with_accel(_act, '<control>P')
1321 _item = _act.create_menu_item()
1322 if isinstance(_act, gtkactions.stdAction):
1323 _add_accelerators(_act, _item, _accel)
1324 _menu.append(_item)
1326 _act = gtk.Action('Quit', _('_Quit'), None, gtk.STOCK_QUIT)
1327 _act.connect('activate', file_quit_cb, gtkimage)
1328 _act.set_accel_group(_accel)
1329 actiongroup.add_action_with_accel(_act, None)
1330 _item = _act.create_menu_item()
1331 if isinstance(_act, gtkactions.stdAction):
1332 _add_accelerators(_act, _item, _accel)
1333 _menu.append(_item)
1335 return _menu
1337 ####################### Edit menu ###########################
1338 def _edit_menu_init(menuitem, gtkimage):
1339 _group = gtkimage.getGroup('Edit')
1340 if _group is not None:
1341 _image = gtkimage.getImage()
1342 _act = _group.get_action('Undo')
1343 if _act is not None:
1344 _act.set_property('sensitive', _image.canUndo())
1345 _act = _group.get_action('Redo')
1346 if _act is not None:
1347 _act.set_property('sensitive', _image.canRedo())
1348 _act = _group.get_action('Cut')
1349 if _act is not None:
1350 _act.set_property('sensitive', _image.hasSelection())
1351 _act = _group.get_action('Copy')
1352 if _act is not None:
1353 _act.set_property('sensitive', _image.hasSelection())
1354 _act = _group.get_action('Paste')
1355 if _act is not None:
1356 _act.set_property('sensitive', globals.selectobj.hasObjects())
1357 _act = _group.get_action('Select')
1358 if _act is not None:
1359 _act.set_property('sensitive', _image.getActiveLayer().hasEntities())
1360 _act = _group.get_action('SelectAll')
1361 if _act is not None:
1362 _act.set_property('sensitive', _image.getActiveLayer().hasEntities())
1363 _act = _group.get_action('Deselect')
1364 if _act is not None:
1365 _act.set_property('sensitive', _image.hasSelection())
1368 #############################################################################
1369 # Edit -> select all submenu
1370 #############################################################################
1371 def _make_select_all_menu(actiongroup, gtkimage):
1372 _accel = gtkimage.accel
1373 _menu = gtk.Menu()
1374 for _action, _entity, _menuitem in select_menu:
1375 if _action is not None:
1376 _act = gtk.Action(_action, _menuitem, None, None)
1377 _act.connect('activate', select_all_objects_cb,
1378 (gtkimage, _entity))
1379 _act.set_accel_group(_accel)
1380 actiongroup.add_action(_act)
1381 _menu.append(_act.create_menu_item())
1382 else:
1383 _item = gtk.SeparatorMenuItem()
1384 _item.show()
1385 _menu.append(_item)
1386 return _menu
1389 #############################################################################
1390 # Edit menu
1391 #############################################################################
1392 def _make_edit_menu(actiongroup, gtkimage):
1393 _accel = gtkimage.accel
1394 _menu = gtk.Menu()
1396 _act = gtk.Action('Undo', _('_Undo'), None, gtk.STOCK_UNDO)
1397 _act.connect('activate', edit_undo_cb, gtkimage)
1398 _act.set_accel_group(_accel)
1399 actiongroup.add_action_with_accel(_act, '<control>Z')
1400 _item = _act.create_menu_item()
1401 if isinstance(_act, gtkactions.stdAction):
1402 _add_accelerators(_act, _item, _accel)
1403 _menu.append(_item)
1405 _act = gtk.Action('Redo', _('_Redo'), None, gtk.STOCK_REDO)
1406 _act.connect('activate', edit_redo_cb, gtkimage)
1407 _act.set_accel_group(_accel)
1408 actiongroup.add_action_with_accel(_act, '<control><shift>Z')
1409 _item = _act.create_menu_item()
1410 if isinstance(_act, gtkactions.stdAction):
1411 _add_accelerators(_act, _item, _accel)
1412 _menu.append(_item)
1414 _item = gtk.SeparatorMenuItem()
1415 _item.show()
1416 _menu.append(_item)
1418 _act = gtk.Action('Cut', _('Cut'), None, gtk.STOCK_CUT)
1419 _act.connect('activate', edit_cut_cb, gtkimage)
1420 _act.set_accel_group(_accel)
1421 actiongroup.add_action_with_accel(_act, None)
1422 _item = _act.create_menu_item()
1423 if isinstance(_act, gtkactions.stdAction):
1424 _add_accelerators(_act, _item, _accel)
1425 _menu.append(_item)
1427 _act = gtk.Action('Copy', _('Copy'), None, gtk.STOCK_COPY)
1428 _act.connect('activate', edit_copy_cb, gtkimage)
1429 _act.set_accel_group(_accel)
1430 actiongroup.add_action_with_accel(_act, None)
1431 _item = _act.create_menu_item()
1432 if isinstance(_act, gtkactions.stdAction):
1433 _add_accelerators(_act, _item, _accel)
1434 _menu.append(_item)
1436 _act = gtk.Action('Paste', _('Paste'), None, gtk.STOCK_PASTE)
1437 _act.connect('activate', edit_paste_cb, gtkimage)
1438 _act.set_accel_group(_accel)
1439 actiongroup.add_action_with_accel(_act, None)
1440 _item = _act.create_menu_item()
1441 if isinstance(_act, gtkactions.stdAction):
1442 _add_accelerators(_act, _item, _accel)
1443 _menu.append(_item)
1445 _act = gtk.Action('Select', _('_Select'), None, None)
1446 _act.connect('activate', edit_select_cb, gtkimage)
1447 _act.set_accel_group(_accel)
1448 actiongroup.add_action(_act)
1449 _menu.append(_act.create_menu_item())
1451 _act = gtk.Action('SelectAll', _('Select _All'), None, None)
1452 _act.connect('activate', _select_all_cb, gtkimage)
1453 _act.set_accel_group(_accel)
1454 actiongroup.add_action(_act)
1455 _item = _act.create_menu_item()
1456 _submenu = _make_select_all_menu(actiongroup, gtkimage)
1457 _item.set_submenu(_submenu)
1458 _menu.append(_item)
1460 _act = gtk.Action('Deselect', _('_Deselect'), None, None)
1461 _act.connect('activate', edit_deselect_cb, gtkimage)
1462 _act.set_accel_group(_accel)
1463 actiongroup.add_action(_act)
1464 _menu.append(_act.create_menu_item())
1466 _item = gtk.SeparatorMenuItem()
1467 _item.show()
1468 _menu.append(_item)
1470 _act = gtk.Action('Prefs', _('_Preferences'), None, gtk.STOCK_PREFERENCES)
1471 _act.connect('activate', prefs_cb, gtkimage)
1472 _act.set_accel_group(_accel)
1473 actiongroup.add_action_with_accel(_act, None)
1474 _item = _act.create_menu_item()
1475 if isinstance(_act, gtkactions.stdAction):
1476 _add_accelerators(_act, _item, _accel)
1477 _menu.append(_item)
1478 return _menu
1480 #############################################################################
1481 # Draw -> basic sub-menu
1482 #############################################################################
1483 def _make_draw_basic_menu(actiongroup, gtkimage):
1484 # _accel = gtkimage.accel
1485 _menu = gtk.Menu()
1487 _act = gtk.Action('Points', _('_Point'), None, None)
1488 _act.connect('activate', draw_point_cb, gtkimage)
1489 actiongroup.add_action(_act)
1490 _menu.append(_act.create_menu_item())
1492 _act = gtk.Action('Segments', _('_Segment'), None, None)
1493 _act.connect('activate', draw_segment_cb, gtkimage)
1494 actiongroup.add_action(_act)
1495 _menu.append(_act.create_menu_item())
1497 _act = gtk.Action('Rectangles', _('_Rectangle'), None, None)
1498 _act.connect('activate', draw_rectangle_cb, gtkimage)
1499 actiongroup.add_action(_act)
1500 _menu.append(_act.create_menu_item())
1502 _act = gtk.Action('Circles', _('_Circle'), None, None)
1503 _act.connect('activate', draw_circle_center_cb, gtkimage)
1504 actiongroup.add_action(_act)
1505 _menu.append(_act.create_menu_item())
1507 _act = gtk.Action('CirclesTwoPoints', _('Circle (_2 Pts)'), None, None)
1508 _act.connect('activate', draw_circle_tp_cb, gtkimage)
1509 actiongroup.add_action(_act)
1510 _menu.append(_act.create_menu_item())
1512 _act = gtk.Action('Arcs', _('_Arc'), None, None)
1513 _act.connect('activate', draw_arc_center_cb, gtkimage)
1514 actiongroup.add_action(_act)
1515 _menu.append(_act.create_menu_item())
1517 return _menu
1519 #############################################################################
1520 # Draw -> lines sub-menu
1521 #############################################################################
1522 def _make_draw_conlines_menu(actiongroup, gtkimage):
1523 _menu = gtk.Menu()
1525 _act = gtk.Action('HCLines', _('_Horizontal'), None, None)
1526 _act.connect('activate', draw_hcl_cb, gtkimage)
1527 actiongroup.add_action(_act)
1528 _menu.append(_act.create_menu_item())
1530 _act = gtk.Action('VCLines', _('_Vertical'), None, None)
1531 _act.connect('activate', draw_vcl_cb, gtkimage)
1532 actiongroup.add_action(_act)
1533 _menu.append(_act.create_menu_item())
1535 _act = gtk.Action('ACLines', _('_Angled'), None, None)
1536 _act.connect('activate', draw_acl_cb, gtkimage)
1537 actiongroup.add_action(_act)
1538 _menu.append(_act.create_menu_item())
1540 _act = gtk.Action('CLines', _('_Two-Point'), None, None)
1541 _act.connect('activate', draw_cl_cb, gtkimage)
1542 actiongroup.add_action(_act)
1543 _menu.append(_act.create_menu_item())
1545 _item = gtk.SeparatorMenuItem()
1546 _item.show()
1547 _menu.append(_item)
1549 _act = gtk.Action('PerpConLines', _('Per_pendicular'), None, None)
1550 _act.connect('activate', draw_perpendicular_cline_cb, gtkimage)
1551 actiongroup.add_action(_act)
1552 _menu.append(_act.create_menu_item())
1554 _act = gtk.Action('ParallelConLines', _('Para_llel'), None, None)
1555 _act.connect('activate', draw_poffset_cline_cb, gtkimage)
1556 actiongroup.add_action(_act)
1557 _menu.append(_act.create_menu_item())
1559 _act = gtk.Action('TangentConLines', _('_Tangent'), None, None)
1560 _act.connect('activate', draw_tangent_cline_cb, gtkimage)
1561 actiongroup.add_action(_act)
1562 _menu.append(_act.create_menu_item())
1564 _act = gtk.Action('TangentTwoCirclesConLines', _('Tangent _2 Circ'),
1565 None, None)
1566 _act.connect('activate', draw_tangent_two_ccircles_cb, gtkimage)
1567 actiongroup.add_action(_act)
1568 _menu.append(_act.create_menu_item())
1570 return _menu
1572 #############################################################################
1573 # Draw -> concentric circles sub-menu
1574 #############################################################################
1575 def _make_draw_concircs_menu(actiongroup, gtkimage):
1576 _menu = gtk.Menu()
1578 _act = gtk.Action('CCircles', _('_Center Pt.'), None, None)
1579 _act.connect('activate', draw_ccirc_cp_cb, gtkimage)
1580 actiongroup.add_action(_act)
1581 _menu.append(_act.create_menu_item())
1583 _act = gtk.Action('CCirclesTwoPoints', _('_Two Pts.'), None, None)
1584 _act.connect('activate', draw_ccirc_tp_cb, gtkimage)
1585 actiongroup.add_action(_act)
1586 _menu.append(_act.create_menu_item())
1588 _item = gtk.SeparatorMenuItem()
1589 _item.show()
1590 _menu.append(_item)
1592 _act = gtk.Action('CCircleTangentSingle', _('_Single Tangency'),
1593 None, None)
1594 _act.connect('activate', draw_tangent_single_conobj_cb, gtkimage)
1595 actiongroup.add_action(_act)
1596 _menu.append(_act.create_menu_item())
1598 _act = gtk.Action('CCircleTangentDual', _('_Dual Tangency'), None, None)
1599 _act.connect('activate', draw_tangent_two_conobjs_cb, gtkimage)
1600 actiongroup.add_action(_act)
1601 _menu.append(_act.create_menu_item())
1603 return _menu
1605 #############################################################################
1606 # Draw set style sub-menu
1607 #############################################################################
1608 def _make_draw_set_menu(actiongroup, gtkimage):
1609 _menu = gtk.Menu()
1611 # _act = gtk.Action('SetStyle', _('_Style'), None, None)
1612 # _act.connect('activate', draw_set_style_cb, gtkimage)
1613 # actiongroup.add_action(_act)
1614 # _menu.append(_act.create_menu_item())
1616 # _act = gtk.Action('SetLinetype', _('_Linetype'), None, None)
1617 # _act.connect('activate', draw_set_linetype_cb, gtkimage)
1618 # actiongroup.add_action(_act)
1619 # _menu.append(_act.create_menu_item())
1621 # _act = gtk.Action('SetColor', _('_Color'), None, None)
1622 # _act.connect('activate', draw_set_color_cb, gtkimage)
1623 # actiongroup.add_action(_act)
1624 # _menu.append(_act.create_menu_item())
1626 # _act = gtk.Action('SetThickness', _('_Thickness'), None, None)
1627 # _act.connect('activate', draw_set_thickness_cb, gtkimage)
1628 # actiongroup.add_action(_act)
1629 # _menu.append(_act.create_menu_item())
1631 # _item = gtk.SeparatorMenuItem()
1632 # _item.show()
1633 # _menu.append(_item)
1635 _act = gtk.Action('SetImageColors', _('_Colors'), None, None)
1636 _act.connect('activate', colors_cb, gtkimage)
1637 _item = _act.create_menu_item()
1638 _menu.append(_item)
1640 _act = gtk.Action('SetImageSizes', _('_Sizes'), None, None)
1641 _act.connect('activate', sizes_cb, gtkimage)
1642 _item = _act.create_menu_item()
1643 _menu.append(_item)
1645 _act = gtk.Action('SetGraphicsStyle', _('_Style'), None, None)
1646 _act.connect('activate', style_cb, gtkimage)
1647 _item = _act.create_menu_item()
1648 _menu.append(_item)
1650 _act = gtk.Action('SetTextStyle', _('_TextStyle'), None, None)
1651 _act.connect('activate', textstyle_cb, gtkimage)
1652 _item = _act.create_menu_item()
1653 _menu.append(_item)
1655 _act = gtk.Action('SetDimStyle', _('_DimStyle'), None, None)
1656 _act.connect('activate', dimstyle_cb, gtkimage)
1657 _item = _act.create_menu_item()
1658 _menu.append(_item)
1660 _item = gtk.SeparatorMenuItem()
1661 _item.show()
1662 _menu.append(_item)
1664 _act = gtk.Action('SetImageOps', _('_Display'), None, None)
1665 _act.connect('activate', toggle_cb, gtkimage)
1666 _item = _act.create_menu_item()
1667 _menu.append(_item)
1669 _act = gtk.Action('SetImageUnits', _('_Units'), None, None)
1670 _act.connect('activate', units_cb, gtkimage)
1671 _item = _act.create_menu_item()
1672 _menu.append(_item)
1674 return _menu
1676 #############################################################################
1677 # Draw . . . .
1678 #############################################################################
1679 def _make_add_new_menu(actiongroup, gtkimage):
1681 # These currently do nothing but are present to encourage
1682 # the development of code to make the ability to add and
1683 # save new styles and linetypes in drawings ...
1685 _menu = gtk.Menu()
1687 _act = gtk.Action('AddStyle', _('Style'), None, None)
1688 _act.set_property('sensitive', False)
1689 actiongroup.add_action(_act)
1690 _menu.append(_act.create_menu_item())
1692 _act = gtk.Action('AddLinetype', _('Linetype'), None, None)
1693 _act.set_property('sensitive', False)
1694 actiongroup.add_action(_act)
1695 _menu.append(_act.create_menu_item())
1697 return _menu
1699 #############################################################################
1700 # Top level draw menu
1701 #############################################################################
1702 def _make_draw_menu(actiongroup, gtkimage):
1703 _menu = gtk.Menu()
1705 _act = gtk.Action('Basic', _('_Basic'), None, None)
1706 actiongroup.add_action(_act)
1707 _item = _act.create_menu_item()
1708 _item.set_submenu(_make_draw_basic_menu(actiongroup, gtkimage))
1709 _menu.append(_item)
1711 _act = gtk.Action('ConLines', _('Con. _Lines'), None, None)
1712 actiongroup.add_action(_act)
1713 _item = _act.create_menu_item()
1714 _item.set_submenu(_make_draw_conlines_menu(actiongroup, gtkimage))
1715 _menu.append(_item)
1717 _act = gtk.Action('ConCircs', _('Con. _Circs.'), None, None)
1718 actiongroup.add_action(_act)
1719 _item = _act.create_menu_item()
1720 _item.set_submenu(_make_draw_concircs_menu(actiongroup, gtkimage))
1721 _menu.append(_item)
1723 _act = gtk.Action('Chamfers', _('Cha_mfer'), None, None)
1724 _act.connect('activate', draw_chamfer_cb, gtkimage)
1725 actiongroup.add_action(_act)
1726 _menu.append(_act.create_menu_item())
1728 _act = gtk.Action('Fillets', _('_Fillet'), None, None)
1729 _act.connect('activate', draw_fillet_cb, gtkimage)
1730 actiongroup.add_action(_act)
1731 _menu.append(_act.create_menu_item())
1733 _item = gtk.SeparatorMenuItem()
1734 _item.show()
1735 _menu.append(_item)
1737 _act = gtk.Action('Leaders', _('Lea_der'), None, None)
1738 _act.connect('activate', draw_leader_cb, gtkimage)
1739 actiongroup.add_action(_act)
1740 _menu.append(_act.create_menu_item())
1742 _item = gtk.SeparatorMenuItem()
1743 _item.show()
1744 _menu.append(_item)
1746 _act = gtk.Action('Polylines', _('_Polyline'), None, None)
1747 _act.connect('activate', draw_polyline_cb, gtkimage)
1748 actiongroup.add_action(_act)
1749 _menu.append(_act.create_menu_item())
1751 _item = gtk.SeparatorMenuItem()
1752 _item.show()
1753 _menu.append(_item)
1755 _act = gtk.Action('InternalPolygon', _('Poly_gon (Int.)'), None, None)
1756 _act.connect('activate', draw_polygon_cb, gtkimage)
1757 actiongroup.add_action(_act)
1758 _menu.append(_act.create_menu_item())
1760 _act = gtk.Action('ExternalPolygon', _('Polygon (E_xt.)'), None, None)
1761 _act.connect('activate', draw_ext_polygon_cb, gtkimage)
1762 actiongroup.add_action(_act)
1763 _menu.append(_act.create_menu_item())
1765 _item = gtk.SeparatorMenuItem()
1766 _item.show()
1767 _menu.append(_item)
1769 _act = gtk.Action('Textblocks', _('_Text'), None, None)
1770 _act.connect('activate', draw_text_cb, gtkimage)
1771 actiongroup.add_action(_act)
1772 _menu.append(_act.create_menu_item())
1774 _item = gtk.SeparatorMenuItem()
1775 _item.show()
1776 _menu.append(_item)
1778 _act = gtk.Action('SetProperties', _('_Set ...'), None, None)
1779 actiongroup.add_action(_act)
1780 _item = _act.create_menu_item()
1781 _item.set_submenu(_make_draw_set_menu(actiongroup, gtkimage))
1782 _menu.append(_item)
1784 _item = gtk.SeparatorMenuItem()
1785 _item.show()
1786 _menu.append(_item)
1788 _act = gtk.Action('AddNew', _('Add _New ...'), None, None)
1789 actiongroup.add_action(_act)
1790 _item = _act.create_menu_item()
1791 _item.set_submenu(_make_add_new_menu(actiongroup, gtkimage))
1792 _menu.append(_item)
1794 return _menu
1796 #############################################################################
1797 # Modify -> move sub-menu
1798 #############################################################################
1799 def _make_modify_move_menu(actiongroup, gtkimage):
1800 _menu = gtk.Menu()
1802 _act = gtk.Action('MoveHoriz', _('_Horizontal'), None, None)
1803 _act.connect('activate', move_horizontal_cb, gtkimage)
1804 actiongroup.add_action(_act)
1805 _menu.append(_act.create_menu_item())
1807 _act = gtk.Action('MoveVert', _('_Vertical'), None, None)
1808 _act.connect('activate', move_vertical_cb, gtkimage)
1809 actiongroup.add_action(_act)
1810 _menu.append(_act.create_menu_item())
1812 _act = gtk.Action('MoveTwoPt', _('_Two-Point Move'), None, None)
1813 _act.connect('activate', move_twopoint_cb, gtkimage)
1814 actiongroup.add_action(_act)
1815 _menu.append(_act.create_menu_item())
1817 return _menu
1819 #############################################################################
1820 # Modify -> stretch sub-menu
1821 #############################################################################
1822 def _make_modify_stretch_menu(actiongroup, gtkimage):
1823 _menu = gtk.Menu()
1825 _act = gtk.Action('StretchHoriz', _('_Horizontal'), None, None)
1826 _act.connect('activate', stretch_horiz_cb, gtkimage)
1827 actiongroup.add_action(_act)
1828 _menu.append(_act.create_menu_item())
1830 _act = gtk.Action('StretchVert', _('_Vertical'), None, None)
1831 _act.connect('activate', stretch_vert_cb, gtkimage)
1832 actiongroup.add_action(_act)
1833 _menu.append(_act.create_menu_item())
1835 _act = gtk.Action('StretchTwoPt', _('_Two-Point Stretch'), None, None)
1836 _act.connect('activate', stretch_twopoint_cb, gtkimage)
1837 actiongroup.add_action(_act)
1838 _menu.append(_act.create_menu_item())
1840 return _menu
1842 #############################################################################
1843 # Modify -> change sub-sub-menu
1844 #############################################################################
1845 def _make_change_text_menu(actiongroup, gtkimage):
1846 _menu = gtk.Menu()
1848 _act = gtk.Action('ChangeTextBlockFamily', _('_Family'), None, None)
1849 _act.connect('activate', change_textblock_family_cb, gtkimage)
1850 actiongroup.add_action(_act)
1851 _menu.append(_act.create_menu_item())
1853 _act = gtk.Action('ChangeTextBlockWeight', _('_Weight'), None, None)
1854 _act.connect('activate', change_textblock_weight_cb, gtkimage)
1855 actiongroup.add_action(_act)
1856 _menu.append(_act.create_menu_item())
1858 _act = gtk.Action('ChangeTextBlockStyle', _('_Style'), None, None)
1859 _act.connect('activate', change_textblock_style_cb, gtkimage)
1860 actiongroup.add_action(_act)
1861 _menu.append(_act.create_menu_item())
1863 _act = gtk.Action('ChangeTextBlockColor', _('_Color'), None, None)
1864 _act.connect('activate', change_textblock_color_cb, gtkimage)
1865 actiongroup.add_action(_act)
1866 _menu.append(_act.create_menu_item())
1868 _act = gtk.Action('ChangeTextBlockSize', _('Si_ze'), None, None)
1869 _act.connect('activate', change_textblock_size_cb, gtkimage)
1870 actiongroup.add_action(_act)
1871 _menu.append(_act.create_menu_item())
1873 _act = gtk.Action('ChangeTextBlockAlignment', _('_Alignment'), None, None)
1874 _act.connect('activate', change_textblock_alignment_cb, gtkimage)
1875 actiongroup.add_action(_act)
1876 _menu.append(_act.create_menu_item())
1878 return _menu
1880 #############################################################################
1881 # Modify -> change -> Dimension -> Primary DimString sub-sub-menu
1882 #############################################################################
1883 def _make_change_primary_dimstring_menu(actiongroup, gtkimage):
1884 _menu = gtk.Menu()
1886 _act = gtk.Action('ChangePDimStringFamily', _('Family'), None, None)
1887 _act.connect('activate', change_dim_primary_family_cb, gtkimage)
1888 actiongroup.add_action(_act)
1889 _menu.append(_act.create_menu_item())
1891 _act = gtk.Action('ChangePDimStringWeight', _('Weight'), None, None)
1892 _act.connect('activate', change_dim_primary_weight_cb, gtkimage)
1893 actiongroup.add_action(_act)
1894 _menu.append(_act.create_menu_item())
1896 _act = gtk.Action('ChangePDimStringStyle', _('Style'), None, None)
1897 _act.connect('activate', change_dim_primary_style_cb, gtkimage)
1898 actiongroup.add_action(_act)
1899 _menu.append(_act.create_menu_item())
1901 _act = gtk.Action('ChangePDimStringSize', _('Size'), None, None)
1902 _act.connect('activate', change_dim_primary_size_cb, gtkimage)
1903 actiongroup.add_action(_act)
1904 _menu.append(_act.create_menu_item())
1906 _act = gtk.Action('ChangePDimStringColor', _('Color'), None, None)
1907 _act.connect('activate', change_dim_primary_color_cb, gtkimage)
1908 actiongroup.add_action(_act)
1909 _menu.append(_act.create_menu_item())
1911 _act = gtk.Action('ChangePDimStringAlignment', _('Alignment'), None, None)
1912 _act.connect('activate', change_dim_primary_alignment_cb, gtkimage)
1913 actiongroup.add_action(_act)
1914 _menu.append(_act.create_menu_item())
1916 _act = gtk.Action('ChangePDimStringPrefix', _('Prefix'), None, None)
1917 _act.connect('activate', change_ldim_pds_prefix_cb, gtkimage)
1918 actiongroup.add_action(_act)
1919 _menu.append(_act.create_menu_item())
1921 _act = gtk.Action('ChangePDimStringSuffix', _('Suffix'), None, None)
1922 _act.connect('activate', change_ldim_pds_suffix_cb, gtkimage)
1923 actiongroup.add_action(_act)
1924 _menu.append(_act.create_menu_item())
1926 _act = gtk.Action('ChangePDimStringPrecision', _('Precision'), None, None)
1927 _act.connect('activate', change_dim_primary_precision_cb, gtkimage)
1928 actiongroup.add_action(_act)
1929 _menu.append(_act.create_menu_item())
1931 _act = gtk.Action('ChangePDimStringUnits', _('Units'), None, None)
1932 _act.connect('activate', change_dim_primary_units_cb, gtkimage)
1933 actiongroup.add_action(_act)
1934 _menu.append(_act.create_menu_item())
1936 _act = gtk.Action('ChangePDimStringPrintZero', _('Print Zero'), None, None)
1937 _act.connect('activate', change_dim_primary_print_zero_cb, gtkimage)
1938 actiongroup.add_action(_act)
1939 _menu.append(_act.create_menu_item())
1941 _act = gtk.Action('ChangePDimStringPrintDecimal', _('Print Decimal'),
1942 None, None)
1943 _act.connect('activate', change_dim_primary_print_decimal_cb, gtkimage)
1944 actiongroup.add_action(_act)
1945 _menu.append(_act.create_menu_item())
1947 return _menu
1949 #############################################################################
1950 # Modify -> change -> Dimension -> Secondary DimString sub-sub-menu
1951 #############################################################################
1952 def _make_change_secondary_dimstring_menu(actiongroup, gtkimage):
1953 _menu = gtk.Menu()
1955 _act = gtk.Action('ChangeSDimStringFamily', _('Family'), None, None)
1956 _act.connect('activate', change_dim_secondary_family_cb, gtkimage)
1957 actiongroup.add_action(_act)
1958 _menu.append(_act.create_menu_item())
1960 _act = gtk.Action('ChangeSDimStringWeight', _('Weight'), None, None)
1961 _act.connect('activate', change_dim_secondary_weight_cb, gtkimage)
1962 actiongroup.add_action(_act)
1963 _menu.append(_act.create_menu_item())
1965 _act = gtk.Action('ChangeSDimStringStyle', _('Style'), None, None)
1966 _act.connect('activate', change_dim_secondary_style_cb, gtkimage)
1967 actiongroup.add_action(_act)
1968 _menu.append(_act.create_menu_item())
1970 _act = gtk.Action('ChangeSDimStringSize', _('Size'), None, None)
1971 _act.connect('activate', change_dim_secondary_size_cb, gtkimage)
1972 actiongroup.add_action(_act)
1973 _menu.append(_act.create_menu_item())
1975 _act = gtk.Action('ChangeSDimStringColor', _('Color'), None, None)
1976 _act.connect('activate', change_dim_secondary_color_cb, gtkimage)
1977 actiongroup.add_action(_act)
1978 _menu.append(_act.create_menu_item())
1980 _act = gtk.Action('ChangeSDimStringAlignment', _('Alignment'), None, None)
1981 _act.connect('activate', change_dim_secondary_alignment_cb, gtkimage)
1982 actiongroup.add_action(_act)
1983 _menu.append(_act.create_menu_item())
1985 _act = gtk.Action('ChangeSDimStringPrefix', _('Prefix'), None, None)
1986 _act.connect('activate', change_ldim_sds_prefix_cb, gtkimage)
1987 actiongroup.add_action(_act)
1988 _menu.append(_act.create_menu_item())
1990 _act = gtk.Action('ChangeSDimStringSuffix', _('Suffix'), None, None)
1991 _act.connect('activate', change_ldim_sds_suffix_cb, gtkimage)
1992 actiongroup.add_action(_act)
1993 _menu.append(_act.create_menu_item())
1995 _act = gtk.Action('ChangeSDimStringPrecision', _('Precision'), None, None)
1996 _act.connect('activate', change_dim_secondary_precision_cb, gtkimage)
1997 actiongroup.add_action(_act)
1998 _menu.append(_act.create_menu_item())
2000 _act = gtk.Action('ChangeSDimStringPrecision', _('Units'), None, None)
2001 _act.connect('activate', change_dim_secondary_units_cb, gtkimage)
2002 actiongroup.add_action(_act)
2003 _menu.append(_act.create_menu_item())
2005 _act = gtk.Action('ChangeSDimStringPrintZero', _('Print Zero'), None, None)
2006 _act.connect('activate', change_dim_secondary_print_zero_cb, gtkimage)
2007 actiongroup.add_action(_act)
2008 _menu.append(_act.create_menu_item())
2010 _act = gtk.Action('ChangeSDimStringPrintDecimal', _('Print Decimal'),
2011 None, None)
2012 _act.connect('activate', change_dim_secondary_print_decimal_cb, gtkimage)
2013 actiongroup.add_action(_act)
2014 _menu.append(_act.create_menu_item())
2016 return _menu
2018 def _make_change_rdim_menu(actiongroup, gtkimage):
2019 _menu = gtk.Menu()
2021 _act = gtk.Action('ChangeRDimPDSPrefix', _('Primary Prefix'), None, None)
2022 _act.connect('activate', change_rdim_pds_prefix_cb, gtkimage)
2023 actiongroup.add_action(_act)
2024 _menu.append(_act.create_menu_item())
2026 _act = gtk.Action('ChangeRDimPDSSuffix', _('Primary Suffix'), None, None)
2027 _act.connect('activate', change_rdim_pds_suffix_cb, gtkimage)
2028 actiongroup.add_action(_act)
2029 _menu.append(_act.create_menu_item())
2031 _item = gtk.SeparatorMenuItem()
2032 _item.show()
2033 _menu.append(_item)
2035 _act = gtk.Action('ChangeRDimSDSPrefix', _('Secondary Prefix'), None, None)
2036 _act.connect('activate', change_rdim_sds_prefix_cb, gtkimage)
2037 actiongroup.add_action(_act)
2038 _menu.append(_act.create_menu_item())
2040 _act = gtk.Action('ChangeRDimSDSSuffix', _('Secondary Suffix'), None, None)
2041 _act.connect('activate', change_rdim_sds_suffix_cb, gtkimage)
2042 actiongroup.add_action(_act)
2043 _menu.append(_act.create_menu_item())
2045 _item = gtk.SeparatorMenuItem()
2046 _item.show()
2047 _menu.append(_item)
2049 _act = gtk.Action('ChangeRDimDiaMode', _('Dia. Mode'), None, None)
2050 _act.connect('activate', change_rdim_dia_mode_cb, gtkimage)
2051 actiongroup.add_action(_act)
2052 _menu.append(_act.create_menu_item())
2054 return _menu
2056 def _make_change_adim_menu(actiongroup, gtkimage):
2057 _menu = gtk.Menu()
2059 _act = gtk.Action('ChangeADimPDSPrefix', _('Primary Prefix'), None, None)
2060 _act.connect('activate', change_adim_pds_prefix_cb, gtkimage)
2061 actiongroup.add_action(_act)
2062 _menu.append(_act.create_menu_item())
2064 _act = gtk.Action('ChangeADimPDSSuffix', _('Primary Suffix'), None, None)
2065 _act.connect('activate', change_adim_pds_suffix_cb, gtkimage)
2066 actiongroup.add_action(_act)
2067 _menu.append(_act.create_menu_item())
2069 _item = gtk.SeparatorMenuItem()
2070 _item.show()
2071 _menu.append(_item)
2073 _act = gtk.Action('ChangeADimSDSPrefix', _('Secondary Prefix'), None, None)
2074 _act.connect('activate', change_adim_sds_prefix_cb, gtkimage)
2075 actiongroup.add_action(_act)
2076 _menu.append(_act.create_menu_item())
2078 _act = gtk.Action('ChangeADimSDSSuffix', _('Secondary Suffix'), None, None)
2079 _act.connect('activate', change_adim_sds_suffix_cb, gtkimage)
2080 actiongroup.add_action(_act)
2081 _menu.append(_act.create_menu_item())
2083 _item = gtk.SeparatorMenuItem()
2084 _item.show()
2085 _menu.append(_item)
2087 _act = gtk.Action('ChangeADimInvert', _('Invert'), None, None)
2088 _act.connect('activate', change_adim_invert_cb, gtkimage)
2089 actiongroup.add_action(_act)
2090 _menu.append(_act.create_menu_item())
2092 return _menu
2094 #############################################################################
2095 # Modify -> change -> dimension sub-sub-menu
2096 #############################################################################
2097 def _make_change_dimension_menu(actiongroup, gtkimage):
2098 _menu = gtk.Menu()
2100 _act = gtk.Action('ChangeDimEndpointType', _('Endpoint _Type'), None, None)
2101 _act.connect('activate', change_dim_endpoint_cb, gtkimage)
2102 actiongroup.add_action(_act)
2103 _menu.append(_act.create_menu_item())
2105 _act = gtk.Action('ChangeDimEndpointSize', _('Endpoint _Size'), None, None)
2106 _act.connect('activate', change_dim_endpoint_size_cb, gtkimage)
2107 actiongroup.add_action(_act)
2108 _menu.append(_act.create_menu_item())
2110 _act = gtk.Action('ChangeDimOffset', _('_Offset Length'), None, None)
2111 _act.connect('activate', change_dim_offset_cb, gtkimage)
2112 actiongroup.add_action(_act)
2113 _menu.append(_act.create_menu_item())
2115 _act = gtk.Action('ChangeDimExtension', _('E_xtension Length'), None, None)
2116 _act.connect('activate', change_dim_extension_cb, gtkimage)
2117 actiongroup.add_action(_act)
2118 _menu.append(_act.create_menu_item())
2120 _act = gtk.Action('ChangeDimDualMode', _('_Dual Mode'), None, None)
2121 _act.connect('activate', change_dim_dual_mode_cb, gtkimage)
2122 actiongroup.add_action(_act)
2123 _menu.append(_act.create_menu_item())
2125 _act = gtk.Action('ChangeDimDualModeOffset', _('Dual Mode O_ffset'),
2126 None, None)
2127 _act.connect('activate', change_dim_dual_mode_offset_cb, gtkimage)
2128 actiongroup.add_action(_act)
2129 _menu.append(_act.create_menu_item())
2131 _act = gtk.Action('ChangeDimThickness', _('_Thickness'), None, None)
2132 _act.connect('activate', change_dim_thickness_cb, gtkimage)
2133 actiongroup.add_action(_act)
2134 _menu.append(_act.create_menu_item())
2136 _act = gtk.Action('ChangeDimColor', _('_Color'), None, None)
2137 _act.connect('activate', change_dim_color_cb, gtkimage)
2138 actiongroup.add_action(_act)
2139 _menu.append(_act.create_menu_item())
2141 _item = gtk.SeparatorMenuItem()
2142 _item.show()
2143 _menu.append(_item)
2145 _act = gtk.Action('ChangePDimStrMenu', _('_Primary DimString'), None, None)
2146 actiongroup.add_action(_act)
2147 _item = _act.create_menu_item()
2148 _item.set_submenu(_make_change_primary_dimstring_menu(actiongroup, gtkimage))
2149 _menu.append(_item)
2151 _act = gtk.Action('ChangeSDimStrMenu', _('_Secondary DimString'), None, None)
2152 actiongroup.add_action(_act)
2154 _item = _act.create_menu_item()
2155 _item.set_submenu(_make_change_secondary_dimstring_menu(actiongroup, gtkimage))
2156 _menu.append(_item)
2158 _act = gtk.Action('ChangeRDimMenu', _('RadialDim ...'), None, None)
2159 actiongroup.add_action(_act)
2160 _item = _act.create_menu_item()
2161 _item.set_submenu(_make_change_rdim_menu(actiongroup, gtkimage))
2162 _menu.append(_item)
2164 _act = gtk.Action('ChangeADimMenu', _('AngularDim ...'), None, None)
2165 actiongroup.add_action(_act)
2166 _item = _act.create_menu_item()
2167 _item.set_submenu(_make_change_adim_menu(actiongroup, gtkimage))
2168 _menu.append(_item)
2170 # _act = gtk.Action('ChangeDimPrimaryDS', '_Primary DimString', None, None)
2171 # _act.connect('activate', change_primary_dim_cb, gtkimage)
2172 # actiongroup.add_action(_act)
2173 # _menu.append(_act.create_menu_item())
2175 # _act = gtk.Action('ChangeDimSecondaryDS', '_Secondary DimString', None, None)
2176 # _act.connect('activate', change_secondary_dim_cb, gtkimage)
2177 # actiongroup.add_action(_act)
2178 # _menu.append(_act.create_menu_item())
2180 return _menu
2182 #############################################################################
2183 # Modify -> change sub-menu
2184 #############################################################################
2185 def _make_modify_change_menu(actiongroup, gtkimage):
2186 _menu = gtk.Menu()
2188 _act = gtk.Action('ChangeStyle', _('_Style'), None, None)
2189 _act.connect('activate', change_style_cb, gtkimage)
2190 actiongroup.add_action(_act)
2191 _menu.append(_act.create_menu_item())
2193 _act = gtk.Action('ChangeLinetype', _('_Linetype'), None, None)
2194 _act.connect('activate', change_linetype_cb, gtkimage)
2195 actiongroup.add_action(_act)
2196 _menu.append(_act.create_menu_item())
2198 _act = gtk.Action('ChangeColor', _('_Color'), None, None)
2199 _act.connect('activate', change_color_cb, gtkimage)
2200 actiongroup.add_action(_act)
2201 _menu.append(_act.create_menu_item())
2203 _act = gtk.Action('ChangeThickness', _('_Thickness'), None, None)
2204 _act.connect('activate', change_thickness_cb, gtkimage)
2205 actiongroup.add_action(_act)
2206 _menu.append(_act.create_menu_item())
2208 _item = gtk.SeparatorMenuItem()
2209 _item.show()
2210 _menu.append(_item)
2212 _act = gtk.Action('ChangeTextMenu', _('Text_Block ...'), None, None)
2213 actiongroup.add_action(_act)
2214 _item = _act.create_menu_item()
2215 _item.set_submenu(_make_change_text_menu(actiongroup, gtkimage))
2216 _menu.append(_item)
2218 _item = gtk.SeparatorMenuItem()
2219 _item.show()
2220 _menu.append(_item)
2222 _act = gtk.Action('ChangeDimMenu', _('_Dimension ...'), None, None)
2223 actiongroup.add_action(_act)
2224 _item = _act.create_menu_item()
2225 _item.set_submenu(_make_change_dimension_menu(actiongroup, gtkimage))
2226 _menu.append(_item)
2228 return _menu
2230 #############################################################################
2231 # Initialize Modify -> change sub menu
2232 #############################################################################
2233 def _change_menu_init(menuitem, gtkimage):
2234 # print "_change_menu_init()"
2235 _group = gtkimage.getGroup('Modify')
2236 if _group is not None:
2237 _image = gtkimage.getImage()
2238 _objlist = []
2239 _active = _image.getActiveLayer()
2240 _gflag = _tflag = _dflag = False
2241 for _obj in _image.getSelectedObjects(False):
2242 if isinstance(_obj, graphicobject.GraphicObject):
2243 _goflag = True
2244 continue
2245 if isinstance(_obj, text.TextBlock):
2246 _tflag = True
2247 continue
2248 if isinstance(_obj, dimension.Dimension):
2249 _dflag = True
2250 if _gflag and _tflag and _dflag:
2251 break
2252 if not _gflag or not _tflag or not _dflag:
2253 for _obj in _active.getChildren():
2254 if not _gflag and isinstance(_obj,
2255 graphicobject.GraphicObject):
2256 _gflag = True
2257 continue
2258 if not _tflag and isinstance(_obj, text.TextBlock):
2259 _tflag = True
2260 continue
2261 if not _dflag and isinstance(_obj, dimension.Dimension):
2262 _dflag = True
2263 if _gflag and _tflag and _dflag:
2264 break
2265 _act = _group.get_action('ChangeStyle')
2266 if _act is not None:
2267 _act.set_property('sensitive', _gflag)
2268 _act = _group.get_action('ChangeLinetype')
2269 if _act is not None:
2270 _act.set_property('sensitive', _gflag)
2271 _act = _group.get_action('ChangeColor')
2272 if _act is not None:
2273 _act.set_property('sensitive', _gflag)
2274 _act = _group.get_action('ChangeThickness')
2275 if _act is not None:
2276 _act.set_property('sensitive', _gflag)
2277 _act = _group.get_action('ChangeTextMenu')
2278 if _act is not None:
2279 _act.set_property('sensitive', _tflag)
2280 _act = _group.get_action('ChangeDimMenu')
2281 if _act is not None:
2282 _act.set_property('sensitive', _dflag)
2284 #############################################################################
2285 # Initialize top level modify menu -- this handles greying out non-active items.
2286 #############################################################################
2287 def _modify_menu_init(menuitem, gtkimage):
2288 _group = gtkimage.getGroup('Modify')
2289 if _group is not None:
2290 _image = gtkimage.getImage()
2291 _active = _image.getActiveLayer()
2292 _act = _group.get_action('Move')
2293 if _act is not None:
2294 _act.set_property('sensitive', (_active.hasEntities() or
2295 _image.hasSelection()))
2296 _act = _group.get_action('Stretch')
2297 if _act is not None:
2298 _act.set_property('sensitive', _active.hasEntities())
2299 _act = _group.get_action('Split')
2300 if _act is not None:
2301 _flag = ((_active.getEntityCount('segment') > 0) or
2302 (_active.getEntityCount('circle') > 0) or
2303 (_active.getEntityCount('arc') > 0) or
2304 (_active.getEntityCount('polyline') > 0))
2305 _act.set_property('sensitive', _flag)
2306 _act = _group.get_action('Mirror')
2307 if _act is not None:
2308 _flag = ((_active.hasEntities() or _image.hasSelection()) and
2309 ((_active.getEntityCount('hcline') > 0) or
2310 (_active.getEntityCount('vcline') > 0) or
2311 (_active.getEntityCount('acline') > 0) or
2312 (_active.getEntityCount('cline') > 0)))
2313 _act.set_property('sensitive', _flag)
2314 _act = _group.get_action('Transfer')
2315 if _act is not None:
2316 _flag = False
2317 _layers = [_image.getTopLayer()]
2318 while len(_layers):
2319 _layer = _layers.pop()
2320 if _layer is not _active:
2321 _flag = _layer.hasEntities()
2322 if _flag:
2323 break
2324 _layers.extend(_layer.getSublayers())
2325 _act.set_property('sensitive', _flag)
2326 _act = _group.get_action('Rotate')
2327 if _act is not None:
2328 _act.set_property('sensitive', (_active.hasEntities() or
2329 _image.hasSelection()))
2330 _act = _group.get_action('Delete')
2331 if _act is not None:
2332 _act.set_property('sensitive', _active.hasEntities())
2333 _act = _group.get_action('Change')
2334 if _act is not None:
2335 _act.set_property('sensitive', (_image.hasSelection() or
2336 _active.hasEntities()))
2337 _act = _group.get_action('ZoomFit')
2338 if _act is not None:
2339 _act.set_property('sensitive', _active.hasEntities())
2342 #############################################################################
2343 # Top level modify menu
2344 #############################################################################
2345 def _make_modify_menu(actiongroup, gtkimage):
2346 _accel = gtkimage.accel
2347 _menu = gtk.Menu()
2349 _act = gtk.Action('Move', _('_Move ...'), None, None)
2350 actiongroup.add_action(_act)
2351 _item = _act.create_menu_item()
2352 _item.set_submenu(_make_modify_move_menu(actiongroup, gtkimage))
2353 _menu.append(_item)
2355 _act = gtk.Action('Stretch', _('S_tretch ...'), None, None)
2356 actiongroup.add_action(_act)
2357 _item = _act.create_menu_item()
2358 _item.set_submenu(_make_modify_stretch_menu(actiongroup, gtkimage))
2359 _menu.append(_item)
2361 _act = gtk.Action('Split', _('S_plit'), None, None)
2362 _act.connect('activate', split_object_cb, gtkimage)
2363 actiongroup.add_action(_act)
2364 _menu.append(_act.create_menu_item())
2366 _act = gtk.Action('Mirror', _('_Mirror'), None, None)
2367 _act.connect('activate', mirror_object_cb, gtkimage)
2368 actiongroup.add_action(_act)
2369 _menu.append(_act.create_menu_item())
2371 _act = gtk.Action('Transfer', _('Trans_fer'), None, None)
2372 _act.connect('activate', transfer_object_cb, gtkimage)
2373 actiongroup.add_action(_act)
2374 _menu.append(_act.create_menu_item())
2376 _item = gtk.SeparatorMenuItem()
2377 _item.show()
2378 _menu.append(_item)
2380 _act = gtk.Action('Rotate', _('_Rotate'), None, None)
2381 _act.connect('activate', rotate_object_cb, gtkimage)
2382 actiongroup.add_action(_act)
2383 _menu.append(_act.create_menu_item())
2385 _item = gtk.SeparatorMenuItem()
2386 _item.show()
2387 _menu.append(_item)
2389 _act = gtk.Action('Delete', _('_Delete'), None, None)
2390 _act.connect('activate', delete_cb, gtkimage)
2391 actiongroup.add_action(_act)
2392 _menu.append(_act.create_menu_item())
2394 _item = gtk.SeparatorMenuItem()
2395 _item.show()
2396 _menu.append(_item)
2398 _act = gtk.Action('Change', _('_Change'), None, None)
2399 _act.connect('activate', _change_menu_init, gtkimage)
2400 actiongroup.add_action(_act)
2401 _item = _act.create_menu_item()
2402 _item.set_submenu(_make_modify_change_menu(actiongroup, gtkimage))
2403 _menu.append(_item)
2405 _item = gtk.SeparatorMenuItem()
2406 _item.show()
2407 _menu.append(_item)
2409 _act = gtk.Action('ZoomWindow', _('Zoom _Window'), None, None)
2410 _act.connect('activate', zoom_cb, gtkimage)
2411 actiongroup.add_action(_act)
2412 _menu.append(_act.create_menu_item())
2414 ############ SDB notes: Create separate "view" menu with zoom
2415 ############ and option to move viewing center.
2416 _act = gtk.Action('ZoomIn', _('_Zoom In'), None, gtk.STOCK_ZOOM_IN)
2417 _act.connect('activate', zoom_in_cb, gtkimage)
2418 _act.set_accel_group(_accel)
2419 actiongroup.add_action_with_accel(_act, None)
2420 _item = _act.create_menu_item()
2421 if isinstance(_act, gtkactions.stdAction):
2422 _add_accelerators(_act, _item, _accel)
2423 _menu.append(_item)
2425 _act = gtk.Action('ZoomOut', _('Zoom _Out'), None, gtk.STOCK_ZOOM_OUT)
2426 _act.connect('activate', zoom_out_cb, gtkimage)
2427 _act.set_accel_group(_accel)
2428 actiongroup.add_action_with_accel(_act, None)
2429 _item = _act.create_menu_item()
2430 if isinstance(_act, gtkactions.stdAction):
2431 _add_accelerators(_act, _item, _accel)
2432 _menu.append(_item)
2434 _act = gtk.Action('ZoomFit', _('Zoom _Fit'), None, gtk.STOCK_ZOOM_FIT)
2435 _act.connect('activate', zoom_fit_cb, gtkimage)
2436 _act.set_accel_group(_accel)
2437 actiongroup.add_action_with_accel(_act, None)
2438 _item = _act.create_menu_item()
2439 if isinstance(_act, gtkactions.stdAction):
2440 _add_accelerators(_act, _item, _accel)
2441 _menu.append(_item)
2443 return _menu
2445 #############################################################################
2446 # Init top level Dimensions menu
2447 #############################################################################
2448 def _dimension_menu_init(menuitem, gtkimage):
2449 _group = gtkimage.getGroup('Dimension')
2450 if _group is not None:
2451 _ldim = _hdim = _vdim = _rdim = _adim = False
2452 _count = 0
2453 _layers = [gtkimage.image.getTopLayer()]
2454 for _layer in _layers:
2455 _pc = _layer.getEntityCount('point')
2456 if _pc > 0:
2457 _count = _count + _pc
2458 if _count > 1:
2459 _ldim = _hdim = _vdim = True
2460 if _count > 2:
2461 _adim = True
2462 if _layer.getEntityCount('circle') > 0:
2463 _rdim = True
2464 if _layer.getEntityCount('arc') > 0:
2465 _rdim = _adim = True
2466 if _ldim and _hdim and _vdim and _rdim and _adim:
2467 break
2468 _layers.extend(_layer.getSublayers())
2469 _act = _group.get_action('Linear')
2470 if _act is not None:
2471 _act.set_property('sensitive', _ldim)
2472 _act = _group.get_action('Horizontal')
2473 if _act is not None:
2474 _act.set_property('sensitive', _hdim)
2475 _act = _group.get_action('Vertical')
2476 if _act is not None:
2477 _act.set_property('sensitive', _vdim)
2478 _act = _group.get_action('Radial')
2479 if _act is not None:
2480 _act.set_property('sensitive', _rdim)
2481 _act = _group.get_action('Angular')
2482 if _act is not None:
2483 _act.set_property('sensitive', _adim)
2485 #############################################################################
2486 # Top level Dimensions menu
2487 #############################################################################
2488 def _make_dimension_menu(actiongroup, gtkimage):
2489 _accel = gtkimage.accel
2490 _menu = gtk.Menu()
2491 _act = gtk.Action('Linear', _('_Linear'), None, None)
2492 _act.connect('activate', dimension_linear_cb, gtkimage)
2493 actiongroup.add_action(_act)
2494 _menu.append(_act.create_menu_item())
2495 _act = gtk.Action('Horizontal', _('_Horizontal'), None, None)
2496 _act.connect('activate', dimension_horizontal_cb, gtkimage)
2497 actiongroup.add_action(_act)
2498 _menu.append(_act.create_menu_item())
2499 _act = gtk.Action('Vertical', _('_Vertical'), None, None)
2500 _act.connect('activate', dimension_vertical_cb, gtkimage)
2501 actiongroup.add_action(_act)
2502 _menu.append(_act.create_menu_item())
2503 _act = gtk.Action('Radial', _('_Radial'), None, None)
2504 _act.connect('activate', dimension_radial_cb, gtkimage)
2505 actiongroup.add_action(_act)
2506 _menu.append(_act.create_menu_item())
2507 _act = gtk.Action('Angular', _('_Angular'), None, None)
2508 _act.connect('activate', dimension_angular_cb, gtkimage)
2509 actiongroup.add_action(_act)
2510 _menu.append(_act.create_menu_item())
2511 return _menu
2513 #############################################################################
2514 # Top level debug menu
2515 #############################################################################
2516 def _make_debug_menu(actiongroup, gtkimage):
2517 _accel = gtkimage.accel
2518 _menu = gtk.Menu()
2519 _act = gtk.Action('Focus', _('Focus'), None, None)
2520 _act.connect('activate', get_focus_widget_cb, gtkimage)
2521 actiongroup.add_action(_act)
2522 _menu.append(_act.create_menu_item())
2524 _act = gtk.Action('UndoStack', _('Undo Stack'), None, None)
2525 _act.connect('activate', get_undo_stack_cb, gtkimage)
2526 _act.set_accel_group(_accel)
2527 actiongroup.add_action_with_accel(_act, '<alt>Z')
2528 _item = _act.create_menu_item()
2529 if isinstance(_act, gtkactions.stdAction):
2530 _add_accelerators(_act, _item, _accel)
2531 _menu.append(_item)
2533 _act = gtk.Action('RedoStack', _('Redo Stack'), None, None)
2534 _act.connect('activate', get_redo_stack_cb, gtkimage)
2535 _act.set_accel_group(_accel)
2536 actiongroup.add_action_with_accel(_act, '<alt><shift>Z')
2537 _item = _act.create_menu_item()
2538 if isinstance(_act, gtkactions.stdAction):
2539 _add_accelerators(_act, _item, _accel)
2540 _menu.append(_item)
2542 _act = gtk.Action('ImageUndo', _('Image Undo'), None, None)
2543 _act.connect('activate', get_image_undo_cb, gtkimage)
2544 actiongroup.add_action(_act)
2545 _menu.append(_act.create_menu_item())
2546 _act = gtk.Action('ImageRedo', _('Image Redo'), None, None)
2547 _act.connect('activate', get_image_redo_cb, gtkimage)
2548 actiongroup.add_action(_act)
2549 _menu.append(_act.create_menu_item())
2550 _act = gtk.Action('GC', 'GC', None, None)
2551 _act.connect('activate', collect_garbage_cb, gtkimage)
2552 actiongroup.add_action(_act)
2553 _menu.append(_act.create_menu_item())
2554 return _menu
2556 #############################################################################
2557 # Fill out top menubar with menu items.
2558 #############################################################################
2559 def fill_menubar(mb, gtkimage):
2560 if not isinstance(mb, gtk.MenuBar):
2561 raise TypeError, "Invalid gtk.MenuBar object: " + `mb`
2562 # File menu
2563 _group = gtk.ActionGroup('File')
2564 gtkimage.addGroup(_group)
2565 _act = gtk.Action('FileMenu', _('_File'), None, None)
2566 _group.add_action(_act)
2567 _item = gtk.MenuItem()
2568 _act.connect_proxy(_item)
2569 _act.connect('activate', _file_menu_init, gtkimage)
2570 _menu = _make_file_menu(_group, gtkimage)
2571 _item.set_submenu(_menu)
2572 mb.append(_item)
2573 # Edit menu
2574 _group = gtk.ActionGroup('Edit')
2575 gtkimage.addGroup(_group)
2576 _act = gtk.Action('EditMenu', _('_Edit'), None, None)
2577 _group.add_action(_act)
2578 _item = gtk.MenuItem()
2579 _act.connect_proxy(_item)
2580 _act.connect('activate', _edit_menu_init, gtkimage)
2581 _menu = _make_edit_menu(_group, gtkimage)
2582 _item.set_submenu(_menu)
2583 mb.append(_item)
2584 # Draw menu
2585 _group = gtk.ActionGroup('Draw')
2586 gtkimage.addGroup(_group)
2587 _act = gtk.Action('DrawMenu', _('_Draw'), None, None)
2588 _group.add_action(_act)
2589 _item = gtk.MenuItem()
2590 _act.connect_proxy(_item)
2591 _menu = _make_draw_menu(_group, gtkimage)
2592 _item.set_submenu(_menu)
2593 mb.append(_item)
2594 # Modifying
2595 _group = gtk.ActionGroup('Modify')
2596 gtkimage.addGroup(_group)
2597 _act = gtk.Action('ModifyMenu', _('_Modify'), None, None)
2598 _group.add_action(_act)
2599 _item = gtk.MenuItem()
2600 _act.connect_proxy(_item)
2601 _act.connect('activate', _modify_menu_init, gtkimage)
2602 _menu = _make_modify_menu(_group, gtkimage)
2603 _item.set_submenu(_menu)
2604 mb.append(_item)
2605 # Dimensioning
2606 _group = gtk.ActionGroup('Dimension')
2607 gtkimage.addGroup(_group)
2608 _act = gtk.Action('DimensionMenu', _('Dime_nsions'), None, None)
2609 _group.add_action(_act)
2610 _item = gtk.MenuItem()
2611 _act.connect_proxy(_item)
2612 _act.connect('activate', _dimension_menu_init, gtkimage)
2613 _menu = _make_dimension_menu(_group, gtkimage)
2614 _item.set_submenu(_menu)
2615 mb.append(_item)
2616 # Debug
2617 _group = gtk.ActionGroup('Debug')
2618 gtkimage.addGroup(_group)
2619 _act = gtk.Action('DebugMenu', _('De_bug'), None, None)
2620 _group.add_action(_act)
2621 _item = gtk.MenuItem()
2622 _act.connect_proxy(_item)
2623 # _act.connect('activate', _debug_cb)
2624 _menu = _make_debug_menu(_group, gtkimage)
2625 _item.set_submenu(_menu)
2626 mb.append(_item)