def __init__(self, showDesc=False): gtk.Window.__init__(self) self.initVars() ud.windowList.appendItem(self) ### self.set_title(_('Search Events')) self.connect('delete-event', self.closed) self.connect('key-press-event', self.keyPress) ### self.vbox = gtk.VBox() self.add(self.vbox) ###### frame = TextFrame() frame.set_label(_('Text')) frame.set_border_width(5) pack(self.vbox, frame) self.textInput = frame ## hbox = gtk.HBox() self.textCSensCheck = gtk.CheckButton(_('Case Sensitive')) self.textCSensCheck.set_active(False) ## FIXME pack(hbox, self.textCSensCheck) pack(self.vbox, hbox) ###### jd = core.getCurrentJd() year, month, day = jd_to_primary(jd) ###### hbox = gtk.HBox() frame = gtk.Frame(_('Time')) frame.set_border_width(5) vboxIn = gtk.VBox() sgroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) #### hboxIn = gtk.HBox() ## self.timeFromCheck = gtk.CheckButton(_('From')) sgroup.add_widget(self.timeFromCheck) pack(hboxIn, self.timeFromCheck) pack(hboxIn, gtk.Label(' ')) ## self.timeFromInput = DateTimeButton() self.timeFromInput.set_value(((year, 1, 1), (0, 0, 0))) pack(hboxIn, self.timeFromInput) ## pack(vboxIn, hboxIn) #### hboxIn = gtk.HBox() ## self.timeToCheck = gtk.CheckButton(_('To')) sgroup.add_widget(self.timeToCheck) pack(hboxIn, self.timeToCheck) pack(hboxIn, gtk.Label(' ')) ## self.timeToInput = DateTimeButton() self.timeToInput.set_value(((year+1, 1, 1), (0, 0, 0))) pack(hboxIn, self.timeToInput) ## pack(vboxIn, hboxIn) ## self.timeFromCheck.connect('clicked', self.updateTimeFromSensitive) self.timeToCheck.connect('clicked', self.updateTimeToSensitive) self.updateTimeFromSensitive() self.updateTimeToSensitive() #### vboxIn.set_border_width(5) frame.add(vboxIn) pack(hbox, frame) pack(hbox, gtk.Label(''), 1, 1) pack(self.vbox, hbox) ###### hbox = gtk.HBox() hbox.set_border_width(5) self.modifiedFromCheck = gtk.CheckButton(_('Modified From')) pack(hbox, self.modifiedFromCheck) pack(hbox, gtk.Label(' ')) self.modifiedFromInput = DateTimeButton() self.modifiedFromInput.set_value(((year, 1, 1), (0, 0, 0))) pack(hbox, self.modifiedFromInput) ## self.modifiedFromCheck.connect('clicked', self.updateModifiedFromSensitive) self.updateModifiedFromSensitive() pack(self.vbox, hbox) ###### hbox = gtk.HBox() hbox.set_border_width(5) self.typeCheck = gtk.CheckButton(_('Event Type')) pack(hbox, self.typeCheck) pack(hbox, gtk.Label(' ')) ## combo = gtk.combo_box_new_text() for cls in event_lib.classes.event: combo.append_text(cls.desc) combo.set_active(0) pack(hbox, combo) self.typeCombo = combo ## self.typeCheck.connect('clicked', self.updateTypeSensitive) self.updateTypeSensitive() pack(self.vbox, hbox) ###### hbox = gtk.HBox() hbox.set_border_width(5) self.groupCheck = gtk.CheckButton(_('Group')) pack(hbox, self.groupCheck) pack(hbox, gtk.Label(' ')) self.groupCombo = SingleGroupComboBox() pack(hbox, self.groupCombo) ## self.groupCheck.connect('clicked', self.updateGroupSensitive) self.updateGroupSensitive() pack(self.vbox, hbox) ###### bbox = gtk.HButtonBox() bbox.set_layout(gtk.BUTTONBOX_START) bbox.set_border_width(5) searchButton = gtk.Button() searchButton.set_label(_('_Search')) searchButton.set_image(gtk.image_new_from_stock(gtk.STOCK_FIND, gtk.ICON_SIZE_BUTTON)) searchButton.connect('clicked', self.searchClicked) bbox.add(searchButton) pack(self.vbox, bbox) ###### treev = gtk.TreeView() trees = gtk.TreeStore(int, int, str, gdk.Pixbuf, str, str) ## gid, eid, group_name, icon, summary, description treev.set_model(trees) treev.connect('row-activated', self.rowActivated) treev.set_headers_clickable(True) ### self.colGroup = gtk.TreeViewColumn(_('Group'), gtk.CellRendererText(), text=2) self.colGroup.set_resizable(True) self.colGroup.set_sort_column_id(2) treev.append_column(self.colGroup) ### self.colIcon = gtk.TreeViewColumn() cell = gtk.CellRendererPixbuf() pack(self.colIcon, cell) self.colIcon.add_attribute(cell, 'pixbuf', 3) #self.colIcon.set_sort_column_id(3)## FIXME treev.append_column(self.colIcon) ### self.colSummary = gtk.TreeViewColumn(_('Summary'), gtk.CellRendererText(), text=4) self.colSummary.set_resizable(True) self.colSummary.set_sort_column_id(4) treev.append_column(self.colSummary) ### self.colDesc = gtk.TreeViewColumn(_('Description'), gtk.CellRendererText(), text=5) self.colDesc.set_sort_column_id(5) self.colDesc.set_visible(showDesc) treev.append_column(self.colDesc) ### trees.set_sort_func(2, self.sort_func_group) ###### swin = gtk.ScrolledWindow() swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) swin.add(treev) #### vbox = gtk.VBox(spacing=5) vbox.set_border_width(5) ### topHbox = gtk.HBox() self.resultLabel = gtk.Label('') pack(topHbox, self.resultLabel) pack(topHbox, gtk.Label(''), 1, 1) pack(vbox, topHbox) #### columnBox = gtk.HBox(spacing=5) pack(columnBox, gtk.Label(_('Columns')+': ')) ## check = gtk.CheckButton(_('Group')) check.set_active(True) check.connect('clicked', lambda w: self.colGroup.set_visible(w.get_active())) pack(columnBox, check) ## check = gtk.CheckButton(_('Icon')) check.set_active(True) check.connect('clicked', lambda w: self.colIcon.set_visible(w.get_active())) pack(columnBox, check) ## check = gtk.CheckButton(_('Summary')) check.set_active(True) check.connect('clicked', lambda w: self.colSummary.set_visible(w.get_active())) pack(columnBox, check) ## check = gtk.CheckButton(_('Description')) check.set_active(showDesc) check.connect('clicked', lambda w: self.colDesc.set_visible(w.get_active())) pack(columnBox, check) ## pack(vbox, columnBox) #### pack(vbox, swin, 1, 1) ## frame = gtk.Frame(_('Search Results')) frame.set_border_width(10) frame.add(vbox) ## pack(self.vbox, frame, 1, 1) ### bbox2 = gtk.HButtonBox() bbox2.set_layout(gtk.BUTTONBOX_END) bbox2.set_border_width(10) closeButton = gtk.Button() closeButton.set_label(_('_Close')) closeButton.set_image(gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_BUTTON)) closeButton.connect('clicked', self.closed) bbox2.add(closeButton) pack(self.vbox, bbox2) ###### self.treev = treev self.trees = trees self.vbox.show_all()
class EventSearchWindow(gtk.Window, MyDialog, ud.IntegratedCalObj): def __init__(self, showDesc=False): gtk.Window.__init__(self) self.initVars() ud.windowList.appendItem(self) ### self.set_title(_('Search Events')) self.connect('delete-event', self.closed) self.connect('key-press-event', self.keyPress) ### self.vbox = gtk.VBox() self.add(self.vbox) ###### frame = TextFrame() frame.set_label(_('Text')) frame.set_border_width(5) pack(self.vbox, frame) self.textInput = frame ## hbox = gtk.HBox() self.textCSensCheck = gtk.CheckButton(_('Case Sensitive')) self.textCSensCheck.set_active(False) ## FIXME pack(hbox, self.textCSensCheck) pack(self.vbox, hbox) ###### jd = core.getCurrentJd() year, month, day = jd_to_primary(jd) ###### hbox = gtk.HBox() frame = gtk.Frame(_('Time')) frame.set_border_width(5) vboxIn = gtk.VBox() sgroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) #### hboxIn = gtk.HBox() ## self.timeFromCheck = gtk.CheckButton(_('From')) sgroup.add_widget(self.timeFromCheck) pack(hboxIn, self.timeFromCheck) pack(hboxIn, gtk.Label(' ')) ## self.timeFromInput = DateTimeButton() self.timeFromInput.set_value(((year, 1, 1), (0, 0, 0))) pack(hboxIn, self.timeFromInput) ## pack(vboxIn, hboxIn) #### hboxIn = gtk.HBox() ## self.timeToCheck = gtk.CheckButton(_('To')) sgroup.add_widget(self.timeToCheck) pack(hboxIn, self.timeToCheck) pack(hboxIn, gtk.Label(' ')) ## self.timeToInput = DateTimeButton() self.timeToInput.set_value(((year+1, 1, 1), (0, 0, 0))) pack(hboxIn, self.timeToInput) ## pack(vboxIn, hboxIn) ## self.timeFromCheck.connect('clicked', self.updateTimeFromSensitive) self.timeToCheck.connect('clicked', self.updateTimeToSensitive) self.updateTimeFromSensitive() self.updateTimeToSensitive() #### vboxIn.set_border_width(5) frame.add(vboxIn) pack(hbox, frame) pack(hbox, gtk.Label(''), 1, 1) pack(self.vbox, hbox) ###### hbox = gtk.HBox() hbox.set_border_width(5) self.modifiedFromCheck = gtk.CheckButton(_('Modified From')) pack(hbox, self.modifiedFromCheck) pack(hbox, gtk.Label(' ')) self.modifiedFromInput = DateTimeButton() self.modifiedFromInput.set_value(((year, 1, 1), (0, 0, 0))) pack(hbox, self.modifiedFromInput) ## self.modifiedFromCheck.connect('clicked', self.updateModifiedFromSensitive) self.updateModifiedFromSensitive() pack(self.vbox, hbox) ###### hbox = gtk.HBox() hbox.set_border_width(5) self.typeCheck = gtk.CheckButton(_('Event Type')) pack(hbox, self.typeCheck) pack(hbox, gtk.Label(' ')) ## combo = gtk.combo_box_new_text() for cls in event_lib.classes.event: combo.append_text(cls.desc) combo.set_active(0) pack(hbox, combo) self.typeCombo = combo ## self.typeCheck.connect('clicked', self.updateTypeSensitive) self.updateTypeSensitive() pack(self.vbox, hbox) ###### hbox = gtk.HBox() hbox.set_border_width(5) self.groupCheck = gtk.CheckButton(_('Group')) pack(hbox, self.groupCheck) pack(hbox, gtk.Label(' ')) self.groupCombo = SingleGroupComboBox() pack(hbox, self.groupCombo) ## self.groupCheck.connect('clicked', self.updateGroupSensitive) self.updateGroupSensitive() pack(self.vbox, hbox) ###### bbox = gtk.HButtonBox() bbox.set_layout(gtk.BUTTONBOX_START) bbox.set_border_width(5) searchButton = gtk.Button() searchButton.set_label(_('_Search')) searchButton.set_image(gtk.image_new_from_stock(gtk.STOCK_FIND, gtk.ICON_SIZE_BUTTON)) searchButton.connect('clicked', self.searchClicked) bbox.add(searchButton) pack(self.vbox, bbox) ###### treev = gtk.TreeView() trees = gtk.TreeStore(int, int, str, gdk.Pixbuf, str, str) ## gid, eid, group_name, icon, summary, description treev.set_model(trees) treev.connect('row-activated', self.rowActivated) treev.set_headers_clickable(True) ### self.colGroup = gtk.TreeViewColumn(_('Group'), gtk.CellRendererText(), text=2) self.colGroup.set_resizable(True) self.colGroup.set_sort_column_id(2) treev.append_column(self.colGroup) ### self.colIcon = gtk.TreeViewColumn() cell = gtk.CellRendererPixbuf() pack(self.colIcon, cell) self.colIcon.add_attribute(cell, 'pixbuf', 3) #self.colIcon.set_sort_column_id(3)## FIXME treev.append_column(self.colIcon) ### self.colSummary = gtk.TreeViewColumn(_('Summary'), gtk.CellRendererText(), text=4) self.colSummary.set_resizable(True) self.colSummary.set_sort_column_id(4) treev.append_column(self.colSummary) ### self.colDesc = gtk.TreeViewColumn(_('Description'), gtk.CellRendererText(), text=5) self.colDesc.set_sort_column_id(5) self.colDesc.set_visible(showDesc) treev.append_column(self.colDesc) ### trees.set_sort_func(2, self.sort_func_group) ###### swin = gtk.ScrolledWindow() swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) swin.add(treev) #### vbox = gtk.VBox(spacing=5) vbox.set_border_width(5) ### topHbox = gtk.HBox() self.resultLabel = gtk.Label('') pack(topHbox, self.resultLabel) pack(topHbox, gtk.Label(''), 1, 1) pack(vbox, topHbox) #### columnBox = gtk.HBox(spacing=5) pack(columnBox, gtk.Label(_('Columns')+': ')) ## check = gtk.CheckButton(_('Group')) check.set_active(True) check.connect('clicked', lambda w: self.colGroup.set_visible(w.get_active())) pack(columnBox, check) ## check = gtk.CheckButton(_('Icon')) check.set_active(True) check.connect('clicked', lambda w: self.colIcon.set_visible(w.get_active())) pack(columnBox, check) ## check = gtk.CheckButton(_('Summary')) check.set_active(True) check.connect('clicked', lambda w: self.colSummary.set_visible(w.get_active())) pack(columnBox, check) ## check = gtk.CheckButton(_('Description')) check.set_active(showDesc) check.connect('clicked', lambda w: self.colDesc.set_visible(w.get_active())) pack(columnBox, check) ## pack(vbox, columnBox) #### pack(vbox, swin, 1, 1) ## frame = gtk.Frame(_('Search Results')) frame.set_border_width(10) frame.add(vbox) ## pack(self.vbox, frame, 1, 1) ### bbox2 = gtk.HButtonBox() bbox2.set_layout(gtk.BUTTONBOX_END) bbox2.set_border_width(10) closeButton = gtk.Button() closeButton.set_label(_('_Close')) closeButton.set_image(gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_BUTTON)) closeButton.connect('clicked', self.closed) bbox2.add(closeButton) pack(self.vbox, bbox2) ###### self.treev = treev self.trees = trees self.vbox.show_all() #self.maximize()## FIXME ## FIXME sort_func_group = lambda self, model, iter1, iter2: cmp( ui.eventGroups.index(model.get(iter1, 0)[0]), ui.eventGroups.index(model.get(iter2, 0)[0]), ) def updateTimeFromSensitive(self, obj=None): self.timeFromInput.set_sensitive(self.timeFromCheck.get_active()) def updateTimeToSensitive(self, obj=None): self.timeToInput.set_sensitive(self.timeToCheck.get_active()) def updateModifiedFromSensitive(self, obj=None): self.modifiedFromInput.set_sensitive(self.modifiedFromCheck.get_active()) def updateTypeSensitive(self, obj=None): self.typeCombo.set_sensitive(self.typeCheck.get_active()) def updateGroupSensitive(self, obj=None): self.groupCombo.set_sensitive(self.groupCheck.get_active()) def _do_search(self): if self.groupCheck.get_active(): groupIds = [ self.groupCombo.get_active() ] else: groupIds = ui.eventGroups.getEnableIds() ### conds = {} if self.textCSensCheck.get_active(): conds['text'] = self.textInput.get_text() else: conds['text_lower'] = self.textInput.get_text().lower() if self.timeFromCheck.get_active(): conds['time_from'] = self.timeFromInput.get_epoch(calTypes.primary) if self.timeToCheck.get_active(): conds['time_to'] = self.timeToInput.get_epoch(calTypes.primary) if self.modifiedFromCheck.get_active(): conds['modified_from'] = self.modifiedFromInput.get_epoch(calTypes.primary) if self.typeCheck.get_active(): index = self.typeCombo.get_active() cls = event_lib.classes.event[index] conds['type'] = cls.name ### self.trees.clear() for gid in groupIds: group = ui.eventGroups[gid] for evData in group.search(conds): self.trees.append(None, ( group.id, evData['id'], group.title, pixbufFromFile(evData['icon']), evData['summary'], evData['description'], )) self.resultLabel.set_label(_('Found %s events')%_(len(self.trees))) def searchClicked(self, obj=None): self.waitingDo(self._do_search) def rowActivated(self, treev, path, col): try: gid = self.trees[path][0] eid = self.trees[path][1] except: return group = ui.eventGroups[gid] event = group[eid] event = EventEditorDialog( event, title=_('Edit ')+event.desc, parent=self, ).run() if event is None: return ui.reloadGroups.append(gid) eventIter = self.trees.get_iter(path) self.trees.set_value(eventIter, 3, pixbufFromFile(event.icon)) self.trees.set_value(eventIter, 4, event.summary) self.trees.set_value(eventIter, 5, event.getShownDescription()) def clearResults(self): self.trees.clear() self.resultLabel.set_label('') def closed(self, obj=None, event=None): self.hide() self.clearResults() self.onConfigChange() return True def present(self): self.groupCombo.updateItems() gtk.Window.present(self) def keyPress(self, arg, gevent): kname = gdk.keyval_name(gevent.keyval).lower() if kname == 'escape': self.closed() return True return False
class EventSearchWindow(gtk.Window, MyDialog, ud.BaseCalObj): def __init__(self, showDesc=False): gtk.Window.__init__(self) self.initVars() ud.windowList.appendItem(self) ### self.set_title(_('Search Events')) self.connect('delete-event', self.closed) self.connect('key-press-event', self.keyPress) ### self.vbox = gtk.VBox() self.add(self.vbox) ###### frame = TextFrame() frame.set_label(_('Text')) frame.set_border_width(5) pack(self.vbox, frame) self.textInput = frame ## hbox = gtk.HBox() self.textCSensCheck = gtk.CheckButton(_('Case Sensitive')) self.textCSensCheck.set_active(False) ## FIXME pack(hbox, self.textCSensCheck) pack(self.vbox, hbox) ###### jd = core.getCurrentJd() year, month, day = jd_to_primary(jd) ###### hbox = gtk.HBox() frame = gtk.Frame(_('Time')) frame.set_border_width(5) vboxIn = gtk.VBox() sgroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) #### hboxIn = gtk.HBox() ## self.timeFromCheck = gtk.CheckButton(_('From')) sgroup.add_widget(self.timeFromCheck) pack(hboxIn, self.timeFromCheck) pack(hboxIn, gtk.Label(' ')) ## self.timeFromInput = DateTimeButton() self.timeFromInput.set_value(((year, 1, 1), (0, 0, 0))) pack(hboxIn, self.timeFromInput) ## pack(vboxIn, hboxIn) #### hboxIn = gtk.HBox() ## self.timeToCheck = gtk.CheckButton(_('To')) sgroup.add_widget(self.timeToCheck) pack(hboxIn, self.timeToCheck) pack(hboxIn, gtk.Label(' ')) ## self.timeToInput = DateTimeButton() self.timeToInput.set_value(((year+1, 1, 1), (0, 0, 0))) pack(hboxIn, self.timeToInput) ## pack(vboxIn, hboxIn) ## self.timeFromCheck.connect('clicked', self.updateTimeFromSensitive) self.timeToCheck.connect('clicked', self.updateTimeToSensitive) self.updateTimeFromSensitive() self.updateTimeToSensitive() #### vboxIn.set_border_width(5) frame.add(vboxIn) pack(hbox, frame) pack(hbox, gtk.Label(''), 1, 1) pack(self.vbox, hbox) ###### hbox = gtk.HBox() hbox.set_border_width(5) self.modifiedFromCheck = gtk.CheckButton(_('Modified From')) pack(hbox, self.modifiedFromCheck) pack(hbox, gtk.Label(' ')) self.modifiedFromInput = DateTimeButton() self.modifiedFromInput.set_value(((year, 1, 1), (0, 0, 0))) pack(hbox, self.modifiedFromInput) ## self.modifiedFromCheck.connect('clicked', self.updateModifiedFromSensitive) self.updateModifiedFromSensitive() pack(self.vbox, hbox) ###### hbox = gtk.HBox() hbox.set_border_width(5) self.typeCheck = gtk.CheckButton(_('Event Type')) pack(hbox, self.typeCheck) pack(hbox, gtk.Label(' ')) ## combo = gtk.combo_box_new_text() for cls in event_lib.classes.event: combo.append_text(cls.desc) combo.set_active(0) pack(hbox, combo) self.typeCombo = combo ## self.typeCheck.connect('clicked', self.updateTypeSensitive) self.updateTypeSensitive() pack(self.vbox, hbox) ###### hbox = gtk.HBox() hbox.set_border_width(5) self.groupCheck = gtk.CheckButton(_('Group')) pack(hbox, self.groupCheck) pack(hbox, gtk.Label(' ')) self.groupCombo = SingleGroupComboBox() pack(hbox, self.groupCombo) ## self.groupCheck.connect('clicked', self.updateGroupSensitive) self.updateGroupSensitive() pack(self.vbox, hbox) ###### bbox = gtk.HButtonBox() bbox.set_layout(gtk.BUTTONBOX_START) bbox.set_border_width(5) searchButton = gtk.Button() searchButton.set_label(_('_Search')) searchButton.set_image(gtk.image_new_from_stock(gtk.STOCK_FIND, gtk.ICON_SIZE_BUTTON)) searchButton.connect('clicked', self.searchClicked) bbox.add(searchButton) pack(self.vbox, bbox) ###### treev = gtk.TreeView() trees = gtk.TreeStore(int, int, str, gdk.Pixbuf, str, str) ## gid, eid, group_name, icon, summary, description treev.set_model(trees) treev.connect('button-press-event', self.treevButtonPress) treev.connect('row-activated', self.rowActivated) treev.connect('key-press-event', self.treevKeyPress) treev.set_headers_clickable(True) ### self.colGroup = gtk.TreeViewColumn(_('Group'), gtk.CellRendererText(), text=2) self.colGroup.set_resizable(True) self.colGroup.set_sort_column_id(2) treev.append_column(self.colGroup) ### self.colIcon = gtk.TreeViewColumn() cell = gtk.CellRendererPixbuf() pack(self.colIcon, cell) self.colIcon.add_attribute(cell, 'pixbuf', 3) #self.colIcon.set_sort_column_id(3)## FIXME treev.append_column(self.colIcon) ### self.colSummary = gtk.TreeViewColumn(_('Summary'), gtk.CellRendererText(), text=4) self.colSummary.set_resizable(True) self.colSummary.set_sort_column_id(4) treev.append_column(self.colSummary) ### self.colDesc = gtk.TreeViewColumn(_('Description'), gtk.CellRendererText(), text=5) self.colDesc.set_sort_column_id(5) self.colDesc.set_visible(showDesc) treev.append_column(self.colDesc) ### trees.set_sort_func(2, self.sort_func_group) ###### swin = gtk.ScrolledWindow() swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) swin.add(treev) #### vbox = gtk.VBox(spacing=5) vbox.set_border_width(5) ### topHbox = gtk.HBox() self.resultLabel = gtk.Label('') pack(topHbox, self.resultLabel) pack(topHbox, gtk.Label(''), 1, 1) pack(vbox, topHbox) #### columnBox = gtk.HBox(spacing=5) pack(columnBox, gtk.Label(_('Columns')+': ')) ## check = gtk.CheckButton(_('Group')) check.set_active(True) check.connect('clicked', lambda w: self.colGroup.set_visible(w.get_active())) pack(columnBox, check) ## check = gtk.CheckButton(_('Icon')) check.set_active(True) check.connect('clicked', lambda w: self.colIcon.set_visible(w.get_active())) pack(columnBox, check) ## check = gtk.CheckButton(_('Summary')) check.set_active(True) check.connect('clicked', lambda w: self.colSummary.set_visible(w.get_active())) pack(columnBox, check) ## check = gtk.CheckButton(_('Description')) check.set_active(showDesc) check.connect('clicked', lambda w: self.colDesc.set_visible(w.get_active())) pack(columnBox, check) ## pack(vbox, columnBox) #### pack(vbox, swin, 1, 1) ## frame = gtk.Frame(_('Search Results')) frame.set_border_width(10) frame.add(vbox) ## pack(self.vbox, frame, 1, 1) ### bbox2 = gtk.HButtonBox() bbox2.set_layout(gtk.BUTTONBOX_END) bbox2.set_border_width(10) closeButton = gtk.Button() closeButton.set_label(_('_Close')) closeButton.set_image(gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_BUTTON)) closeButton.connect('clicked', self.closed) bbox2.add(closeButton) pack(self.vbox, bbox2) ###### self.treev = treev self.trees = trees self.vbox.show_all() #self.maximize()## FIXME ## FIXME sort_func_group = lambda self, model, iter1, iter2: cmp( ui.eventGroups.index(model.get(iter1, 0)[0]), ui.eventGroups.index(model.get(iter2, 0)[0]), ) def updateTimeFromSensitive(self, obj=None): self.timeFromInput.set_sensitive(self.timeFromCheck.get_active()) def updateTimeToSensitive(self, obj=None): self.timeToInput.set_sensitive(self.timeToCheck.get_active()) def updateModifiedFromSensitive(self, obj=None): self.modifiedFromInput.set_sensitive(self.modifiedFromCheck.get_active()) def updateTypeSensitive(self, obj=None): self.typeCombo.set_sensitive(self.typeCheck.get_active()) def updateGroupSensitive(self, obj=None): self.groupCombo.set_sensitive(self.groupCheck.get_active()) def _do_search(self): if self.groupCheck.get_active(): groupIds = [ self.groupCombo.get_active() ] else: groupIds = ui.eventGroups.getEnableIds() ### conds = {} if self.textCSensCheck.get_active(): conds['text'] = self.textInput.get_text() else: conds['text_lower'] = self.textInput.get_text().lower() if self.timeFromCheck.get_active(): conds['time_from'] = self.timeFromInput.get_epoch(calTypes.primary) if self.timeToCheck.get_active(): conds['time_to'] = self.timeToInput.get_epoch(calTypes.primary) if self.modifiedFromCheck.get_active(): conds['modified_from'] = self.modifiedFromInput.get_epoch(calTypes.primary) if self.typeCheck.get_active(): index = self.typeCombo.get_active() cls = event_lib.classes.event[index] conds['type'] = cls.name ### self.trees.clear() for gid in groupIds: group = ui.eventGroups[gid] for evData in group.search(conds): self.trees.append(None, ( group.id, evData['id'], group.title, pixbufFromFile(evData['icon']), evData['summary'], evData['description'], )) self.resultLabel.set_label(_('Found %s events')%_(len(self.trees))) def searchClicked(self, obj=None): self.waitingDo(self._do_search) def editEventByPath(self, path): from scal2.ui_gtk.event.editor import EventEditorDialog try: gid = self.trees[path][0] eid = self.trees[path][1] except: return group = ui.eventGroups[gid] event = group[eid] event = EventEditorDialog( event, title=_('Edit ')+event.desc, parent=self, ).run() if event is None: return ### ui.eventDiff.add('e', event) ### eventIter = self.trees.get_iter(path) self.trees.set_value(eventIter, 3, pixbufFromFile(event.icon)) self.trees.set_value(eventIter, 4, event.summary) self.trees.set_value(eventIter, 5, event.getShownDescription()) def rowActivated(self, treev, path, col): self.editEventByPath(path) def editEventFromMenu(self, menu, path): self.editEventByPath(path) def moveEventToGroupFromMenu(self, menu, eventPath, event, old_group, new_group): old_group.remove(event) old_group.save() new_group.append(event) new_group.save() ### ui.eventDiff.add('v', event) ## FIXME ### eventIter = self.trees.get_iter(eventPath) self.trees.set_value(eventIter, 0, new_group.id) self.trees.set_value(eventIter, 2, new_group.title) def copyEventToGroupFromMenu(self, menu, eventPath, event, new_group): new_event = event.copy() new_event.save() new_group.append(new_event) new_group.save() ### ui.eventDiff.add('+', new_event) ## FIXME ### eventIter = self.trees.get_iter(eventPath) def moveEventToTrash(self, path): try: gid = self.trees[path][0] eid = self.trees[path][1] except: return group = ui.eventGroups[gid] event = group[eid] if not confirmEventTrash(event): return ui.moveEventToTrash(group, event) ui.reloadTrash = True ui.eventDiff.add('-', event) self.trees.remove(self.trees.get_iter(path)) moveEventToTrashFromMenu = lambda self, menu, path: self.moveEventToTrash(path) def moveSelectionToTrash(self): path = self.treev.get_cursor()[0] if not path: return self.moveEventToTrash(path) def getMoveToGroupSubMenu(self, path, group, event): ## returns a MenuItem instance item = labelStockMenuItem( _('Move to %s')%'...', None,## FIXME ) subMenu = gtk.Menu() ### for new_group in ui.eventGroups: if new_group.id == group.id: continue #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.moveEventToGroupFromMenu, path, event, group, new_group, ) ## subMenu.add(new_groupItem) ## item.set_submenu(subMenu) return item 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 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 def openRightClickMenu(self, path, etime=None): menu = self.genRightClickMenu(path) if not menu: return if etime is None: etime = gtk.get_current_event_time() menu.popup(None, None, None, 3, etime) def treevButtonPress(self, widget, gevent): pos_t = self.treev.get_path_at_pos(int(gevent.x), int(gevent.y)) if not pos_t: return path, col, xRel, yRel = pos_t #path, col = self.treev.get_cursor() ## FIXME if not path: return if gevent.button==3: self.openRightClickMenu(path, gevent.time) return False def treevKeyPress(self, treev, gevent): #from scal2.time_utils import getGtkTimeFromEpoch #print(gevent.time-getGtkTimeFromEpoch(now())## FIXME) #print(now()-gdk.CURRENT_TIME/1000.0) ## gdk.CURRENT_TIME == 0## FIXME ## gevent.time == gtk.get_current_event_time() ## OK kname = gdk.keyval_name(gevent.keyval).lower() #print('treevKeyPress', kname) if kname=='menu':## Simulate right click (key beside Right-Ctrl) path = treev.get_cursor()[0] if path: menu = self.genRightClickMenu(path) if not menu: return rect = treev.get_cell_area(path, treev.get_column(1)) x = rect.x if rtl: x -= 100 else: x += 50 dx, dy = treev.translate_coordinates(self, x, rect.y + rect.height) wx, wy = self.get_window().get_origin() menu.popup( None, None, lambda m: (wx+dx, wy+dy+20, True), 3, gevent.time, ) elif kname=='delete': self.moveSelectionToTrash() else: #print(kname) return False return True def clearResults(self): self.trees.clear() self.resultLabel.set_label('') def closed(self, obj=None, gevent=None): self.hide() self.clearResults() self.onConfigChange() return True def present(self): self.groupCombo.updateItems() gtk.Window.present(self) def keyPress(self, arg, gevent): kname = gdk.keyval_name(gevent.keyval).lower() if kname == 'escape': self.closed() return True return False
def __init__(self, showDesc=False): gtk.Window.__init__(self) self.initVars() ud.windowList.appendItem(self) ### self.set_title(_('Search Events')) self.connect('delete-event', self.closed) self.connect('key-press-event', self.keyPress) ### self.vbox = gtk.VBox() self.add(self.vbox) ###### frame = TextFrame() frame.set_label(_('Text')) frame.set_border_width(5) pack(self.vbox, frame) self.textInput = frame ## hbox = gtk.HBox() self.textCSensCheck = gtk.CheckButton(_('Case Sensitive')) self.textCSensCheck.set_active(False) ## FIXME pack(hbox, self.textCSensCheck) pack(self.vbox, hbox) ###### jd = core.getCurrentJd() year, month, day = jd_to_primary(jd) ###### hbox = gtk.HBox() frame = gtk.Frame(_('Time')) frame.set_border_width(5) vboxIn = gtk.VBox() sgroup = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) #### hboxIn = gtk.HBox() ## self.timeFromCheck = gtk.CheckButton(_('From')) sgroup.add_widget(self.timeFromCheck) pack(hboxIn, self.timeFromCheck) pack(hboxIn, gtk.Label(' ')) ## self.timeFromInput = DateTimeButton() self.timeFromInput.set_value(((year, 1, 1), (0, 0, 0))) pack(hboxIn, self.timeFromInput) ## pack(vboxIn, hboxIn) #### hboxIn = gtk.HBox() ## self.timeToCheck = gtk.CheckButton(_('To')) sgroup.add_widget(self.timeToCheck) pack(hboxIn, self.timeToCheck) pack(hboxIn, gtk.Label(' ')) ## self.timeToInput = DateTimeButton() self.timeToInput.set_value(((year+1, 1, 1), (0, 0, 0))) pack(hboxIn, self.timeToInput) ## pack(vboxIn, hboxIn) ## self.timeFromCheck.connect('clicked', self.updateTimeFromSensitive) self.timeToCheck.connect('clicked', self.updateTimeToSensitive) self.updateTimeFromSensitive() self.updateTimeToSensitive() #### vboxIn.set_border_width(5) frame.add(vboxIn) pack(hbox, frame) pack(hbox, gtk.Label(''), 1, 1) pack(self.vbox, hbox) ###### hbox = gtk.HBox() hbox.set_border_width(5) self.modifiedFromCheck = gtk.CheckButton(_('Modified From')) pack(hbox, self.modifiedFromCheck) pack(hbox, gtk.Label(' ')) self.modifiedFromInput = DateTimeButton() self.modifiedFromInput.set_value(((year, 1, 1), (0, 0, 0))) pack(hbox, self.modifiedFromInput) ## self.modifiedFromCheck.connect('clicked', self.updateModifiedFromSensitive) self.updateModifiedFromSensitive() pack(self.vbox, hbox) ###### hbox = gtk.HBox() hbox.set_border_width(5) self.typeCheck = gtk.CheckButton(_('Event Type')) pack(hbox, self.typeCheck) pack(hbox, gtk.Label(' ')) ## combo = gtk.combo_box_new_text() for cls in event_lib.classes.event: combo.append_text(cls.desc) combo.set_active(0) pack(hbox, combo) self.typeCombo = combo ## self.typeCheck.connect('clicked', self.updateTypeSensitive) self.updateTypeSensitive() pack(self.vbox, hbox) ###### hbox = gtk.HBox() hbox.set_border_width(5) self.groupCheck = gtk.CheckButton(_('Group')) pack(hbox, self.groupCheck) pack(hbox, gtk.Label(' ')) self.groupCombo = SingleGroupComboBox() pack(hbox, self.groupCombo) ## self.groupCheck.connect('clicked', self.updateGroupSensitive) self.updateGroupSensitive() pack(self.vbox, hbox) ###### bbox = gtk.HButtonBox() bbox.set_layout(gtk.BUTTONBOX_START) bbox.set_border_width(5) searchButton = gtk.Button() searchButton.set_label(_('_Search')) searchButton.set_image(gtk.image_new_from_stock(gtk.STOCK_FIND, gtk.ICON_SIZE_BUTTON)) searchButton.connect('clicked', self.searchClicked) bbox.add(searchButton) pack(self.vbox, bbox) ###### treev = gtk.TreeView() trees = gtk.TreeStore(int, int, str, gdk.Pixbuf, str, str) ## gid, eid, group_name, icon, summary, description treev.set_model(trees) treev.connect('button-press-event', self.treevButtonPress) treev.connect('row-activated', self.rowActivated) treev.connect('key-press-event', self.treevKeyPress) treev.set_headers_clickable(True) ### self.colGroup = gtk.TreeViewColumn(_('Group'), gtk.CellRendererText(), text=2) self.colGroup.set_resizable(True) self.colGroup.set_sort_column_id(2) treev.append_column(self.colGroup) ### self.colIcon = gtk.TreeViewColumn() cell = gtk.CellRendererPixbuf() pack(self.colIcon, cell) self.colIcon.add_attribute(cell, 'pixbuf', 3) #self.colIcon.set_sort_column_id(3)## FIXME treev.append_column(self.colIcon) ### self.colSummary = gtk.TreeViewColumn(_('Summary'), gtk.CellRendererText(), text=4) self.colSummary.set_resizable(True) self.colSummary.set_sort_column_id(4) treev.append_column(self.colSummary) ### self.colDesc = gtk.TreeViewColumn(_('Description'), gtk.CellRendererText(), text=5) self.colDesc.set_sort_column_id(5) self.colDesc.set_visible(showDesc) treev.append_column(self.colDesc) ### trees.set_sort_func(2, self.sort_func_group) ###### swin = gtk.ScrolledWindow() swin.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) swin.add(treev) #### vbox = gtk.VBox(spacing=5) vbox.set_border_width(5) ### topHbox = gtk.HBox() self.resultLabel = gtk.Label('') pack(topHbox, self.resultLabel) pack(topHbox, gtk.Label(''), 1, 1) pack(vbox, topHbox) #### columnBox = gtk.HBox(spacing=5) pack(columnBox, gtk.Label(_('Columns')+': ')) ## check = gtk.CheckButton(_('Group')) check.set_active(True) check.connect('clicked', lambda w: self.colGroup.set_visible(w.get_active())) pack(columnBox, check) ## check = gtk.CheckButton(_('Icon')) check.set_active(True) check.connect('clicked', lambda w: self.colIcon.set_visible(w.get_active())) pack(columnBox, check) ## check = gtk.CheckButton(_('Summary')) check.set_active(True) check.connect('clicked', lambda w: self.colSummary.set_visible(w.get_active())) pack(columnBox, check) ## check = gtk.CheckButton(_('Description')) check.set_active(showDesc) check.connect('clicked', lambda w: self.colDesc.set_visible(w.get_active())) pack(columnBox, check) ## pack(vbox, columnBox) #### pack(vbox, swin, 1, 1) ## frame = gtk.Frame(_('Search Results')) frame.set_border_width(10) frame.add(vbox) ## pack(self.vbox, frame, 1, 1) ### bbox2 = gtk.HButtonBox() bbox2.set_layout(gtk.BUTTONBOX_END) bbox2.set_border_width(10) closeButton = gtk.Button() closeButton.set_label(_('_Close')) closeButton.set_image(gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_BUTTON)) closeButton.connect('clicked', self.closed) bbox2.add(closeButton) pack(self.vbox, bbox2) ###### self.treev = treev self.trees = trees self.vbox.show_all()