Esempio n. 1
0
 def onEventLabelPopup(self, label, menu, ids):
     menu = gtk.Menu()
     self.labelMenuAddCopyItems(label, menu)
     ####
     groupId, eventId = ids
     event = ui.getEvent(groupId, eventId)
     group = ui.eventGroups[groupId]
     if not event.readOnly:
         menu.add(gtk.SeparatorMenuItem())
         ###
         winTitle = _('Edit ') + event.desc
         menu.add(labelStockMenuItem(
             winTitle,
             gtk.STOCK_EDIT,
             self.editEventClicked,
             winTitle,
             event,
             groupId,
         ))
         ###
         moveToItem = labelStockMenuItem(
             _('Move to %s')%'...',
             None,## FIXME
         )
         moveToMenu = gtk.Menu()
         for new_group in ui.eventGroups:
             if new_group.id == group.id:
                 continue
             if not new_group.enable:
                 continue
             if event.name in new_group.acceptsEventTypes:
                 new_groupItem = gtk.ImageMenuItem()
                 new_groupItem.set_label(new_group.title)
                 ##
                 image = gtk.Image()
                 image.set_from_pixbuf(newOutlineSquarePixbuf(new_group.color, 20))
                 new_groupItem.set_image(image)
                 ##
                 new_groupItem.connect('activate', self.moveEventToGroupFromMenu, event, group, new_group)
                 ##
                 moveToMenu.add(new_groupItem)
         moveToItem.set_submenu(moveToMenu)
         menu.add(moveToItem)
         ###
         menu.add(gtk.SeparatorMenuItem())
         ###
         menu.add(labelImageMenuItem(
             _('Move to %s') % ui.eventTrash.title,
             ui.eventTrash.icon,
             self.moveEventToTrash,
             event,
             groupId,
         ))
     ####
     menu.show_all()
     menu.popup(None, None, None, 3, 0)
     ui.updateFocusTime()
Esempio n. 2
0
 def labelMenuAddCopyItems(self, label, menu):
     menu.add(
         labelStockMenuItem('Copy _All', gtk.STOCK_COPY, self.copyAll,
                            label))
     ####
     itemCopy = labelStockMenuItem(
         '_Copy',
         gtk.STOCK_COPY,
         self.copy,
         label,
     )
     if label.get_property('cursor-position') == label.get_property(
             'selection-bound'):
         itemCopy.set_sensitive(False)
     menu.add(itemCopy)
Esempio n. 3
0
 def onEventLabelPopup(self, label, menu, ids):
     menu = gtk.Menu()
     self.labelMenuAddCopyItems(label, menu)
     ####
     groupId, eventId = ids
     event = ui.getEvent(groupId, eventId)
     if not event.readOnly:
         menu.add(gtk.SeparatorMenuItem())
         ###
         winTitle = _('Edit ') + event.desc
         menu.add(labelStockMenuItem(
             winTitle,
             gtk.STOCK_EDIT,
             self.editEventClicked,
             winTitle,
             event,
             groupId,
         ))
         ###
         menu.add(gtk.SeparatorMenuItem())
         ###
         menu.add(labelImageMenuItem(
             _('Move to %s') % ui.eventTrash.title,
             ui.eventTrash.icon,
             self.moveEventToTrash,
             event,
             groupId,
         ))
     ####
     menu.show_all()
     menu.popup(None, None, None, 3, 0)
     ui.updateFocusTime()
Esempio n. 4
0
	def genRightClickMenu(self, path):
		gid = self.trees[path][0]
		eid = self.trees[path][1]
		group = ui.eventGroups[gid]
		event = group[eid]
		##
		menu = gtk.Menu()
		##
		menu.add(labelStockMenuItem(
			'Edit',
			gtk.STOCK_EDIT,
			self.editEventFromMenu,
			path,
		))
		##
		menu.add(self.getMoveToGroupSubMenu(path, group, event))
		menu.add(gtk.SeparatorMenuItem())
		menu.add(self.getCopyToGroupSubMenu(path, event))
		##
		menu.add(gtk.SeparatorMenuItem())
		menu.add(labelImageMenuItem(
			_('Move to %s')%ui.eventTrash.title,
			ui.eventTrash.icon,
			self.moveEventToTrashFromMenu,
			path,
		))
		##
		menu.show_all()
		return menu
Esempio n. 5
0
	def getCopyToGroupSubMenu(self, path, event):
		## returns a MenuItem instance
		item = labelStockMenuItem(
			_('Copy to %s')%'...',
			None,## FIXME
		)
		subMenu = gtk.Menu()
		###
		for new_group in ui.eventGroups:
			#if not new_group.enable:## FIXME
			#	continue
			if event.name in new_group.acceptsEventTypes:
				new_groupItem = gtk.ImageMenuItem()
				new_groupItem.set_label(new_group.title)
				##
				image = gtk.Image()
				image.set_from_pixbuf(newOutlineSquarePixbuf(new_group.color, 20))
				new_groupItem.set_image(image)
				##
				new_groupItem.connect(
					'activate',
					self.copyEventToGroupFromMenu,
					path,
					event,
					new_group,
				)
				##
				subMenu.add(new_groupItem)
		##
		item.set_submenu(subMenu)
		return item
Esempio n. 6
0
 def genRightClickMenu(self, path):
     gid = self.trees[path][0]
     eid = self.trees[path][1]
     group = ui.eventGroups[gid]
     event = group[eid]
     ##
     menu = gtk.Menu()
     ##
     menu.add(labelStockMenuItem(
         'Edit',
         gtk.STOCK_EDIT,
         self.editEventFromMenu,
         path,
     ))
     ##
     menu.add(self.getMoveToGroupSubMenu(path, group, event))
     menu.add(gtk.SeparatorMenuItem())
     menu.add(self.getCopyToGroupSubMenu(path, event))
     ##
     menu.add(gtk.SeparatorMenuItem())
     menu.add(labelImageMenuItem(
         _('Move to %s')%ui.eventTrash.title,
         ui.eventTrash.icon,
         self.moveEventToTrashFromMenu,
         path,
     ))
     ##
     menu.show_all()
     return menu
Esempio n. 7
0
 def getCopyToGroupSubMenu(self, path, event):
     ## returns a MenuItem instance
     item = labelStockMenuItem(
         _('Copy to %s')%'...',
         None,## FIXME
     )
     subMenu = gtk.Menu()
     ###
     for new_group in ui.eventGroups:
         #if not new_group.enable:## FIXME
         #    continue
         if event.name in new_group.acceptsEventTypes:
             new_groupItem = gtk.ImageMenuItem()
             new_groupItem.set_label(new_group.title)
             ##
             image = gtk.Image()
             image.set_from_pixbuf(newOutlineSquarePixbuf(new_group.color, 20))
             new_groupItem.set_image(image)
             ##
             new_groupItem.connect(
                 'activate',
                 self.copyEventToGroupFromMenu,
                 path,
                 event,
                 new_group,
             )
             ##
             subMenu.add(new_groupItem)
     ##
     item.set_submenu(subMenu)
     return item
Esempio n. 8
0
 def __init__(self, filename=""):
     gtk.Button.__init__(self)
     self.image = gtk.Image()
     self.add(self.image)
     self.dialog = gtk.FileChooserDialog(title=_("Select Icon File"), action=gtk.FILE_CHOOSER_ACTION_OPEN)
     self.dialog.set_local_only(True)
     okB = self.dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
     cancelB = self.dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
     clearB = self.dialog.add_button(gtk.STOCK_CLEAR, gtk.RESPONSE_REJECT)
     if ui.autoLocale:
         cancelB.set_label(_("_Cancel"))
         cancelB.set_image(gtk.image_new_from_stock(gtk.STOCK_CANCEL, gtk.ICON_SIZE_BUTTON))
         okB.set_label(_("_OK"))
         okB.set_image(gtk.image_new_from_stock(gtk.STOCK_OK, gtk.ICON_SIZE_BUTTON))
         clearB.set_label(_("Clear"))
         clearB.set_image(gtk.image_new_from_stock(gtk.STOCK_CLEAR, gtk.ICON_SIZE_BUTTON))
     ###
     menu = gtk.Menu()
     self.menu = menu
     menu.add(labelStockMenuItem(_("None"), None, self.menuItemActivate, ""))
     for item in ui.eventTags:
         icon = item.icon
         if icon:
             menuItem = gtk.ImageMenuItem(item.desc)
             menuItem.set_image(gtk.image_new_from_file(icon))
             menuItem.connect("activate", self.menuItemActivate, icon)
             menu.add(menuItem)
     menu.show_all()
     ###
     self.dialog.connect("file-activated", self.fileActivated)
     self.dialog.connect("response", self.dialogResponse)
     # self.connect('clicked', lambda button: button.dialog.run())
     self.connect("button-press-event", self.buttonPressEvent)
     ###
     self.set_filename(filename)
Esempio n. 9
0
 def labelMenuAddCopyItems(self, label, menu):
     menu.add(labelStockMenuItem(
         'Copy _All',
         gtk.STOCK_COPY,
         self.copyAll,
         label
     ))
     ####
     itemCopy = labelStockMenuItem(
         '_Copy',
         gtk.STOCK_COPY,
         self.copy,
         label,
     )
     if label.get_property('cursor-position') == label.get_property('selection-bound'):
         itemCopy.set_sensitive(False)
     menu.add(itemCopy)
Esempio n. 10
0
 def __init__(self, filename=''):
     gtk.Button.__init__(self)
     self.image = gtk.Image()
     self.add(self.image)
     self.dialog = gtk.FileChooserDialog(
         title=_('Select Icon File'),
         action=gtk.FILE_CHOOSER_ACTION_OPEN,
     )
     self.dialog.set_local_only(True)
     okB = self.dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
     cancelB = self.dialog.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
     clearB = self.dialog.add_button(gtk.STOCK_CLEAR, gtk.RESPONSE_REJECT)
     if ui.autoLocale:
         cancelB.set_label(_('_Cancel'))
         cancelB.set_image(
             gtk.image_new_from_stock(gtk.STOCK_CANCEL,
                                      gtk.ICON_SIZE_BUTTON))
         okB.set_label(_('_OK'))
         okB.set_image(
             gtk.image_new_from_stock(gtk.STOCK_OK, gtk.ICON_SIZE_BUTTON))
         clearB.set_label(_('Clear'))
         clearB.set_image(
             gtk.image_new_from_stock(gtk.STOCK_CLEAR,
                                      gtk.ICON_SIZE_BUTTON))
     ###
     menu = gtk.Menu()
     self.menu = menu
     menu.add(labelStockMenuItem(_('None'), None, self.menuItemActivate,
                                 ''))
     for item in ui.eventTags:
         icon = item.icon
         if icon:
             menuItem = gtk.ImageMenuItem(item.desc)
             menuItem.set_image(gtk.image_new_from_file(icon))
             menuItem.connect('activate', self.menuItemActivate, icon)
             menu.add(menuItem)
     menu.show_all()
     ###
     self.dialog.connect('file-activated', self.fileActivated)
     self.dialog.connect('response', self.dialogResponse)
     #self.connect('clicked', lambda button: button.dialog.run())
     self.connect('button-press-event', self.buttonPressEvent)
     ###
     self.set_filename(filename)
Esempio n. 11
0
 def onLabelPopupPopulate(self, label, menu, ids):
     menu = gtk.Menu()
     ####
     itemCopyAll = gtk.ImageMenuItem(_('Copy _All'))
     itemCopyAll.set_image(gtk.image_new_from_stock(gtk.STOCK_COPY, gtk.ICON_SIZE_MENU))
     itemCopyAll.connect('activate', self.copyAll, label)
     menu.add(itemCopyAll)
     ####
     itemCopy = gtk.ImageMenuItem(_('_Copy'))
     itemCopy.set_image(gtk.image_new_from_stock(gtk.STOCK_COPY, gtk.ICON_SIZE_MENU))
     if label.get_property('cursor-position') != label.get_property('selection-bound'):
         itemCopy.connect('activate', self.copy, label)
     else:
         itemCopy.set_sensitive(False)
     menu.add(itemCopy)
     ####
     menu.add(gtk.SeparatorMenuItem())
     ####
     (groupId, eventId) = ids
     event = ui.getEvent(groupId, eventId)
     ###
     winTitle = _('Edit ') + event.desc
     menu.add(labelStockMenuItem(
         winTitle,
         gtk.STOCK_EDIT,
         self.editEventClicked,
         winTitle,
         event,
         groupId,
     ))
     ###
     menu.add(gtk.SeparatorMenuItem())
     ###
     menu.add(labelImageMenuItem(
         _('Move to %s')%ui.eventTrash.title,
         ui.eventTrash.icon,
         self.moveEventToTrash,
         event,
         groupId,
     ))
     ####
     menu.show_all()
     menu.popup(None, None, None, 3, 0)
Esempio n. 12
0
 def onEventLabelPopup(self, label, menu, occurData):
     from scal2.ui_gtk.event.utils import menuItemFromEventGroup
     menu = gtk.Menu()
     self.labelMenuAddCopyItems(label, menu)
     ####
     groupId, eventId = occurData['ids']
     event = ui.getEvent(groupId, eventId)
     group = ui.eventGroups[groupId]
     if not event.readOnly:
         menu.add(gtk.SeparatorMenuItem())
         ###
         winTitle = _('Edit ') + event.desc
         menu.add(
             labelStockMenuItem(
                 winTitle,
                 gtk.STOCK_EDIT,
                 self.editEventClicked,
                 winTitle,
                 event,
                 groupId,
             ))
         ###
         moveToItem = labelStockMenuItem(
             _('Move to %s') % '...',
             None,  ## FIXME
         )
         moveToMenu = gtk.Menu()
         for newGroup in ui.eventGroups:
             if newGroup.id == group.id:
                 continue
             if not newGroup.enable:
                 continue
             if event.name in newGroup.acceptsEventTypes:
                 newGroupItem = menuItemFromEventGroup(newGroup)
                 newGroupItem.connect(
                     'activate',
                     self.moveEventToGroupFromMenu,
                     event,
                     group,
                     newGroup,
                 )
                 moveToMenu.add(newGroupItem)
         moveToItem.set_submenu(moveToMenu)
         menu.add(moveToItem)
         ###
         if not event.isSingleOccur:
             newEventType = 'allDayTask' if occurData[
                 'is_allday'] else 'task'
             copyOccurItem = labelStockMenuItem(
                 _('Copy as %s to...') % event_lib.classes.event.
                 byName[newEventType].desc,  ## FIXME
                 None,
             )
             copyOccurMenu = gtk.Menu()
             for newGroup in ui.eventGroups:
                 if not newGroup.enable:
                     continue
                 if newEventType in newGroup.acceptsEventTypes:
                     newGroupItem = menuItemFromEventGroup(newGroup)
                     newGroupItem.connect(
                         'activate',
                         self.copyOccurToGroupFromMenu,
                         newGroup,
                         newEventType,
                         event,
                         occurData,
                     )
                     copyOccurMenu.add(newGroupItem)
             copyOccurItem.set_submenu(copyOccurMenu)
             menu.add(copyOccurItem)
             ###
             menu.add(gtk.SeparatorMenuItem())
         ###
         menu.add(
             labelImageMenuItem(
                 _('Move to %s') % ui.eventTrash.title,
                 ui.eventTrash.icon,
                 self.moveEventToTrash,
                 event,
                 groupId,
             ))
     ####
     menu.show_all()
     menu.popup(None, None, None, 3, 0)
     ui.updateFocusTime()
Esempio n. 13
0
 def buttonPress(self, obj, gevent):
     x = gevent.x
     y = gevent.y
     w = self.allocation.width
     h = self.allocation.height
     b = gevent.button
     if b==1:
         for button in self.buttons:
             if button.contains(x, y, w, h):
                 button.func(gevent)
                 return True
     if b in (1, 3):
         for box in self.data['boxes']:
             if not box.ids:
                 continue
             if box.contains(x, y):
                 (gid, eid) = box.ids
                 group = ui.eventGroups[gid]
                 event = group[eid]
                 ###
                 if b==1:
                     if box.hasBorder:
                         top = y - box.y
                         left = x - box.x
                         right = box.x + box.w - x
                         minA = min(boxMoveBorder, top, left, right)
                         editType = None
                         if top == minA:
                             editType = 0
                             t0 = event.getStartEpoch()
                             self.window.set_cursor(gdk.Cursor(gdk.FLEUR))
                         elif right == minA:
                             editType = 1
                             t0 = event.getEndEpoch()
                             self.window.set_cursor(gdk.Cursor(gdk.RIGHT_SIDE))
                         elif left == minA:
                             editType = -1
                             t0 = event.getStartEpoch()
                             self.window.set_cursor(gdk.Cursor(gdk.LEFT_SIDE))
                         if editType is not None:
                             self.boxEditing = (editType, event, box, x, t0)
                             return True
                 elif b==3:
                     menu = gtk.Menu()
                     ##
                     winTitle = _('Edit') + ' ' + event.desc
                     menu.add(labelStockMenuItem(
                         winTitle,
                         gtk.STOCK_EDIT,
                         self.editEventClicked,
                         winTitle,
                         event,
                         gid,
                     ))
                     ##
                     winTitle = _('Edit') + ' ' + group.desc
                     menu.add(labelStockMenuItem(winTitle, gtk.STOCK_EDIT, self.editGroupClicked, winTitle, group))
                     ##
                     menu.add(gtk.SeparatorMenuItem())
                     ##
                     menu.add(labelImageMenuItem(
                         _('Move to %s')%ui.eventTrash.title,
                         ui.eventTrash.icon,
                         self.moveEventToTrash,
                         group,
                         event,
                     ))
                     ##
                     menu.show_all()
                     menu.popup(None, None, None, 3, 0)
     return False
Esempio n. 14
0
 def buttonPress(self, obj, gevent):
     x = gevent.x
     y = gevent.y
     w = self.get_allocation().width
     h = self.get_allocation().height
     if gevent.button == 1:
         for button in self.buttons:
             if button.contains(x, y, w, h):
                 button.func(gevent)
                 return True
         ####
         for box in self.data['boxes']:
             if not box.hasBorder:
                 continue
             if not box.ids:
                 continue
             if not box.contains(x, y):
                 continue
             gid, eid = box.ids
             group = ui.eventGroups[gid]
             event = group[eid]
             ####
             top = y - box.y
             left = x - box.x
             right = box.x + box.w - x
             minA = min(boxMoveBorder, top, left, right)
             editType = None
             if top == minA:
                 editType = 0
                 t0 = event.getStartEpoch()
                 self.get_window().set_cursor(gdk.Cursor(gdk.FLEUR))
             elif right == minA:
                 editType = 1
                 t0 = event.getEndEpoch()
                 self.get_window().set_cursor(gdk.Cursor(gdk.RIGHT_SIDE))
             elif left == minA:
                 editType = -1
                 t0 = event.getStartEpoch()
                 self.get_window().set_cursor(gdk.Cursor(gdk.LEFT_SIDE))
             if editType is not None:
                 self.boxEditing = (editType, event, box, x, t0)
                 return True
     elif gevent.button == 3:
         for box in self.data['boxes']:
             if not box.ids:
                 continue
             if not box.contains(x, y):
                 continue
             gid, eid = box.ids
             group = ui.eventGroups[gid]
             event = group[eid]
             ####
             menu = gtk.Menu()
             ##
             if not event.readOnly:
                 winTitle = _('Edit') + ' ' + event.desc
                 menu.add(
                     labelStockMenuItem(
                         winTitle,
                         gtk.STOCK_EDIT,
                         self.editEventClicked,
                         winTitle,
                         event,
                         gid,
                     ))
             ##
             winTitle = _('Edit') + ' ' + group.desc
             menu.add(
                 labelStockMenuItem(
                     winTitle,
                     gtk.STOCK_EDIT,
                     self.editGroupClicked,
                     winTitle,
                     group,
                 ))
             ##
             menu.add(gtk.SeparatorMenuItem())
             ##
             menu.add(
                 labelImageMenuItem(
                     _('Move to %s') % ui.eventTrash.title,
                     ui.eventTrash.icon,
                     self.moveEventToTrash,
                     group,
                     event,
                 ))
             ##
             menu.show_all()
             menu.popup(None, None, None, 3, 0)
     return False
Esempio n. 15
0
 def onEventLabelPopup(self, label, menu, occurData):
     from scal2.ui_gtk.event.utils import menuItemFromEventGroup
     menu = gtk.Menu()
     self.labelMenuAddCopyItems(label, menu)
     ####
     groupId, eventId = occurData['ids']
     event = ui.getEvent(groupId, eventId)
     group = ui.eventGroups[groupId]
     if not event.readOnly:
         menu.add(gtk.SeparatorMenuItem())
         ###
         winTitle = _('Edit ') + event.desc
         menu.add(labelStockMenuItem(
             winTitle,
             gtk.STOCK_EDIT,
             self.editEventClicked,
             winTitle,
             event,
             groupId,
         ))
         ###
         moveToItem = labelStockMenuItem(
             _('Move to %s')%'...',
             None,## FIXME
         )
         moveToMenu = gtk.Menu()
         for newGroup in ui.eventGroups:
             if newGroup.id == group.id:
                 continue
             if not newGroup.enable:
                 continue
             if event.name in newGroup.acceptsEventTypes:
                 newGroupItem = menuItemFromEventGroup(newGroup)
                 newGroupItem.connect(
                     'activate',
                     self.moveEventToGroupFromMenu,
                     event,
                     group,
                     newGroup,
                 )
                 moveToMenu.add(newGroupItem)
         moveToItem.set_submenu(moveToMenu)
         menu.add(moveToItem)
         ###
         if not event.isSingleOccur:
             newEventType = 'allDayTask' if occurData['is_allday'] else 'task'
             copyOccurItem = labelStockMenuItem(
                 _('Copy as %s to...') % event_lib.classes.event.byName[newEventType].desc,## FIXME
                 None,
             )
             copyOccurMenu = gtk.Menu()
             for newGroup in ui.eventGroups:
                 if not newGroup.enable:
                     continue
                 if newEventType in newGroup.acceptsEventTypes:
                     newGroupItem = menuItemFromEventGroup(newGroup)
                     newGroupItem.connect(
                         'activate',
                         self.copyOccurToGroupFromMenu,
                         newGroup,
                         newEventType,
                         event,
                         occurData,
                     )
                     copyOccurMenu.add(newGroupItem)
             copyOccurItem.set_submenu(copyOccurMenu)
             menu.add(copyOccurItem)
             ###
             menu.add(gtk.SeparatorMenuItem())
         ###
         menu.add(labelImageMenuItem(
             _('Move to %s') % ui.eventTrash.title,
             ui.eventTrash.icon,
             self.moveEventToTrash,
             event,
             groupId,
         ))
     ####
     menu.show_all()
     menu.popup(None, None, None, 3, 0)
     ui.updateFocusTime()
Esempio n. 16
0
 def genRightClickMenu(self, path):
     ## how about multi-selection? FIXME
     ## and Select _All menu item
     obj_list = self.getObjsByPath(path)
     #print(len(obj_list))
     menu = gtk.Menu()
     if len(obj_list)==1:
         group = obj_list[0]
         if group.name == 'trash':
             #print('right click on trash', group.title)
             menu.add(labelStockMenuItem(
                 'Edit',
                 gtk.STOCK_EDIT,
                 self.editTrash,
             ))
             menu.add(labelStockMenuItem(
                 'Empty Trash',
                 gtk.STOCK_CLEAR,
                 self.emptyTrash,
             ))
             #menu.add(gtk.SeparatorMenuItem())
             #menu.add(labelStockMenuItem(
             #    'Add New Group',
             #    gtk.STOCK_NEW,
             #    self.addGroupBeforeSelection,
             #))## FIXME
         else:
             #print('right click on group', group.title)
             menu.add(labelStockMenuItem(
                 'Edit',
                 gtk.STOCK_EDIT,
                 self.editGroupFromMenu,
                 path,
             ))
             eventTypes = group.acceptsEventTypes
             if eventTypes is None:
                 eventTypes = event_lib.classes.event.names
             if len(eventTypes) > 3:
                 menu.add(labelStockMenuItem(
                     _('Add Event'),
                     gtk.STOCK_ADD,
                     self.addGenericEventToGroupFromMenu,
                     path,
                     group,
                 ))
             else:
                 for eventType in eventTypes:
                     #if eventType == 'custom':## FIXME
                     #    desc = _('Add ') + _('Event')
                     #else:
                     label = _('Add ') + event_lib.classes.event.byName[eventType].desc
                     menu.add(labelStockMenuItem(
                         label,
                         gtk.STOCK_ADD,
                         self.addEventToGroupFromMenu,
                         path,
                         group,
                         eventType,
                         label,
                     ))
             pasteItem = labelStockMenuItem(
                 'Paste Event',
                 gtk.STOCK_PASTE,
                 self.pasteEventFromMenu,
                 path,
             )
             menu.add(pasteItem)
             pasteItem.set_sensitive(self.canPasteToGroup(group))
             ##
             menu.add(gtk.SeparatorMenuItem())
             #menu.add(labelStockMenuItem(
             #    'Add New Group',
             #    gtk.STOCK_NEW,
             #    self.addGroupBeforeGroup,
             #    path,
             #))## FIXME
             menu.add(labelStockMenuItem(
                 'Duplicate',
                 gtk.STOCK_COPY,
                 self.duplicateGroupFromMenu,
                 path,
             ))
             ###
             dupAllItem = labelStockMenuItem(
                 'Duplicate with All Events',
                 gtk.STOCK_COPY,
                 self.duplicateGroupWithEventsFromMenu,
                 path,
             )
             menu.add(dupAllItem)
             dupAllItem.set_sensitive(bool(group.idList))
             ###
             menu.add(gtk.SeparatorMenuItem())
             menu.add(labelStockMenuItem(
                 'Delete Group',
                 gtk.STOCK_DELETE,
                 self.deleteGroupFromMenu,
                 path,
             ))
             menu.add(gtk.SeparatorMenuItem())
             ##
             #menu.add(labelStockMenuItem(
             #    'Move Up',
             #    gtk.STOCK_GO_UP,
             #    self.moveUpFromMenu,
             #    path,
             #))
             #menu.add(labelStockMenuItem(
             #    'Move Down',
             #    gtk.STOCK_GO_DOWN,
             #    self.moveDownFromMenu,
             #    path,
             #))
             ##
             menu.add(labelStockMenuItem(
                 _('Export'),
                 gtk.STOCK_CONVERT,
                 self.groupExportFromMenu,
                 group,
             ))
             ###
             sortItem = labelStockMenuItem(
                 _('Sort Events'),
                 gtk.STOCK_SORT_ASCENDING,
                 self.groupSortFromMenu,
                 path,
             )
             menu.add(sortItem)
             sortItem.set_sensitive(bool(group.idList))
             ###
             convertItem = labelStockMenuItem(
                 _('Convert Calendar Type'),
                 gtk.STOCK_CONVERT,
                 self.groupConvertModeFromMenu,
                 group,
             )
             menu.add(convertItem)
             convertItem.set_sensitive(bool(group.idList))
             ###
             #if group.remoteIds:
             #    account = ui.eventAccounts[group.remoteIds[0]]
             #    menu.add(labelImageMenuItem(
             #    _('Synchronize with %s') % account.title,
             #    gtk.STOCK_REFRESH,
             #    self.syncGroup,
             #    path,
             #))
             ###
             for newGroupType in group.canConvertTo:
                 menu.add(labelStockMenuItem(
                     _('Convert to %s')%event_lib.classes.group.byName[newGroupType].desc,
                     None,
                     self.groupConvertTo,
                     group,
                     newGroupType,
                 ))
             ###
             bulkItem = labelStockMenuItem(
                 _('Bulk Edit Events'),
                 gtk.STOCK_EDIT,
                 self.groupBulkEditFromMenu,
                 group,
                 path,
             )
             menu.add(bulkItem)
             bulkItem.set_sensitive(bool(group.idList))
             ###
             for actionName, actionFuncName in group.actions:
                 menu.add(labelStockMenuItem(
                     _(actionName),
                     None,
                     self.groupActionClicked,
                     group,
                     actionFuncName,
                 ))
     elif len(obj_list) == 2:
         group, event = obj_list
         #print('right click on event', event.summary)
         if group.name != 'trash':
             menu.add(labelStockMenuItem(
                 'Edit',
                 gtk.STOCK_EDIT,
                 self.editEventFromMenu,
                 path,
             ))
         ####
         moveToItem = labelStockMenuItem(
             _('Move to %s')%'...',
             None,## FIXME
         )
         moveToMenu = gtk.Menu()
         for new_group in ui.eventGroups:
             if new_group.id == group.id:
                 continue
             #if not new_group.enable:## FIXME
             #    continue
             new_groupPath = self.trees.get_path(self.groupIterById[new_group.id])
             if event.name in new_group.acceptsEventTypes:
                 new_groupItem = gtk.ImageMenuItem()
                 new_groupItem.set_label(new_group.title)
                 ##
                 image = gtk.Image()
                 image.set_from_pixbuf(newOutlineSquarePixbuf(new_group.color, 20))
                 new_groupItem.set_image(image)
                 ##
                 new_groupItem.connect(
                     'activate',
                     self.moveEventToPathFromMenu,
                     path,
                     new_groupPath,
                 )
                 ##
                 moveToMenu.add(new_groupItem)
         moveToItem.set_submenu(moveToMenu)
         menu.add(moveToItem)
         ####
         menu.add(gtk.SeparatorMenuItem())
         ####
         menu.add(labelStockMenuItem(
             'Cut',
             gtk.STOCK_CUT,
             self.cutEvent,
             path,
         ))
         menu.add(labelStockMenuItem(
             'Copy',
             gtk.STOCK_COPY,
             self.copyEvent,
             path,
         ))
         ##
         if group.name == 'trash':
             menu.add(gtk.SeparatorMenuItem())
             menu.add(labelStockMenuItem(
                 'Delete',
                 gtk.STOCK_DELETE,
                 self.deleteEventFromTrash,
                 path,
             ))
         else:
             pasteItem = labelStockMenuItem(
                 'Paste',
                 gtk.STOCK_PASTE,
                 self.pasteEventFromMenu,
                 path,
             )
             menu.add(pasteItem)
             pasteItem.set_sensitive(self.canPasteToGroup(group))
             ##
             menu.add(gtk.SeparatorMenuItem())
             menu.add(labelImageMenuItem(
                 _('Move to %s')%ui.eventTrash.title,
                 ui.eventTrash.icon,
                 self.moveEventToTrashFromMenu,
                 path,
             ))
     else:
         return
     menu.show_all()
     return menu