def __init__(self, journalactivity): Gtk.TreeView.__init__(self) self._journalactivity = journalactivity self.icon_activity_column = None self.buddies_columns = [] self._invoker = TreeViewInvoker() self._invoker.attach_treeview(self) self.set_headers_visible(False) self.set_enable_search(False) self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.TOUCH_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK)
def __init__(self): Gtk.TreeView.__init__(self) self._query = '' self.set_headers_visible(False) self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.TOUCH_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) selection = self.get_selection() selection.set_mode(Gtk.SelectionMode.NONE) self._model = ListModel() self._model.set_visible_func(self.__model_visible_cb) self.set_model(self._model) column = Gtk.TreeViewColumn() cell_favorites = [] for i in range(desktop.get_number_of_views()): cell_favorites.append(CellRendererFavorite(i)) cell_favorites[i].connect('clicked', self.__favorite_clicked_cb) column.pack_start(cell_favorites[i], True) column.set_cell_data_func(cell_favorites[i], self.__favorite_set_data_cb) self.append_column(column) cell_icon = CellRendererActivityIcon() cell_icon.connect('clicked', self.__icon_clicked_cb) column = Gtk.TreeViewColumn() column.pack_start(cell_icon, True) column.add_attribute(cell_icon, 'file-name', self._model.column_icon) self.append_column(column) self._icon_column = column cell_text = Gtk.CellRendererText() cell_text.props.ellipsize = style.ELLIPSIZE_MODE_DEFAULT cell_text.props.ellipsize_set = True column = Gtk.TreeViewColumn() column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY column.props.expand = True column.set_sort_column_id(self._model.column_title) column.pack_start(cell_text, True) column.add_attribute(cell_text, 'markup', self._model.column_title) self.append_column(column) cell_text = Gtk.CellRendererText() cell_text.props.xalign = 1 column = Gtk.TreeViewColumn() column.set_alignment(1) column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY column.props.resizable = True column.props.reorderable = True column.props.expand = True column.set_sort_column_id(self._model.column_version) column.pack_start(cell_text, True) column.add_attribute(cell_text, 'text', self._model.column_version_text) self.append_column(column) cell_text = Gtk.CellRendererText() cell_text.props.xalign = 1 column = Gtk.TreeViewColumn() column.set_alignment(1) column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY column.props.resizable = True column.props.reorderable = True column.props.expand = True column.set_sort_column_id(self._model.column_date) column.pack_start(cell_text, True) column.add_attribute(cell_text, 'text', self._model.column_date_text) self.append_column(column) self.set_search_column(self._model.column_title) self.set_enable_search(False) self._activity_selected = None self._invoker = TreeViewInvoker() self._invoker.attach_treeview(self)
class ActivitiesTreeView(Gtk.TreeView): __gtype_name__ = 'SugarActivitiesTreeView' __gsignals__ = { 'erase-activated': (GObject.SignalFlags.RUN_FIRST, None, ([str])), } def __init__(self): Gtk.TreeView.__init__(self) self._query = '' self.set_headers_visible(False) self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.TOUCH_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) selection = self.get_selection() selection.set_mode(Gtk.SelectionMode.NONE) self._model = ListModel() self._model.set_visible_func(self.__model_visible_cb) self.set_model(self._model) column = Gtk.TreeViewColumn() cell_favorites = [] for i in range(desktop.get_number_of_views()): cell_favorites.append(CellRendererFavorite(i)) cell_favorites[i].connect('clicked', self.__favorite_clicked_cb) column.pack_start(cell_favorites[i], True) column.set_cell_data_func(cell_favorites[i], self.__favorite_set_data_cb) self.append_column(column) cell_icon = CellRendererActivityIcon() cell_icon.connect('clicked', self.__icon_clicked_cb) column = Gtk.TreeViewColumn() column.pack_start(cell_icon, True) column.add_attribute(cell_icon, 'file-name', self._model.column_icon) self.append_column(column) self._icon_column = column cell_text = Gtk.CellRendererText() cell_text.props.ellipsize = style.ELLIPSIZE_MODE_DEFAULT cell_text.props.ellipsize_set = True column = Gtk.TreeViewColumn() column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY column.props.expand = True column.set_sort_column_id(self._model.column_title) column.pack_start(cell_text, True) column.add_attribute(cell_text, 'markup', self._model.column_title) self.append_column(column) cell_text = Gtk.CellRendererText() cell_text.props.xalign = 1 column = Gtk.TreeViewColumn() column.set_alignment(1) column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY column.props.resizable = True column.props.reorderable = True column.props.expand = True column.set_sort_column_id(self._model.column_version) column.pack_start(cell_text, True) column.add_attribute(cell_text, 'text', self._model.column_version_text) self.append_column(column) cell_text = Gtk.CellRendererText() cell_text.props.xalign = 1 column = Gtk.TreeViewColumn() column.set_alignment(1) column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY column.props.resizable = True column.props.reorderable = True column.props.expand = True column.set_sort_column_id(self._model.column_date) column.pack_start(cell_text, True) column.add_attribute(cell_text, 'text', self._model.column_date_text) self.append_column(column) self.set_search_column(self._model.column_title) self.set_enable_search(False) self._activity_selected = None self._invoker = TreeViewInvoker() self._invoker.attach_treeview(self) def __favorite_set_data_cb(self, column, cell, model, tree_iter, data): favorite = \ model[tree_iter][self._model.column_favorites[cell.favorite_view]] if favorite: cell.props.xo_color = profile.get_color() else: cell.props.xo_color = None def __favorite_clicked_cb(self, cell, path): row = self.get_model()[path] registry = bundleregistry.get_registry() registry.set_bundle_favorite( row[self._model.column_bundle_id], row[self._model.column_version], not row[self._model.column_favorites[cell.favorite_view]], cell.favorite_view) def __icon_clicked_cb(self, cell, path): self._start_activity(path) def _start_activity(self, path): model = self.get_model() row = model[path] registry = bundleregistry.get_registry() bundle = registry.get_bundle(row[self._model.column_bundle_id]) misc.launch(bundle) def set_filter(self, query): """Set a new query and refilter the model, return the number of matching activities. """ self._query = normalize_string(query.decode('utf-8')) self.get_model().refilter() matches = self.get_model().iter_n_children(None) return matches def __model_visible_cb(self, model, tree_iter, data): title = model[tree_iter][self._model.column_title] title = normalize_string(title.decode('utf-8')) return title is not None and title.find(self._query) > -1 def do_row_activated(self, path, column): if column == self._icon_column: self._start_activity(path) def create_palette(self, path, column): if column == self._icon_column: row = self.get_model()[path] bundle_id = row[self.get_model().column_bundle_id] registry = bundleregistry.get_registry() palette = ActivityListPalette(registry.get_bundle(bundle_id)) palette.connect('erase-activated', self.__erase_activated_cb, bundle_id) return palette def __erase_activated_cb(self, palette, event, bundle_id): self.emit('erase-activated', bundle_id) def get_activities_selected(self): activities = [] for row in self.get_model(): activities.append( {'name': row[self.get_model().column_activity_name], 'bundle_id': row[self.get_model().column_bundle_id]}) return activities def run_activity(self, bundle_id, resume_mode): if not resume_mode: registry = bundleregistry.get_registry() bundle = registry.get_bundle(bundle_id) misc.launch(bundle) return self._activity_selected = bundle_id query = {'activity': bundle_id} properties = ['uid', 'title', 'icon-color', 'activity', 'activity_id', 'mime_type', 'mountpoint'] datastore.find(query, sorting=['+timestamp'], limit=1, properties=properties, reply_handler=self.__get_last_activity_reply_handler_cb, error_handler=self.__get_last_activity_error_handler_cb) def __get_last_activity_reply_handler_cb(self, entries, total_count): registry = bundleregistry.get_registry() if entries: misc.resume(entries[0], entries[0]['activity']) else: bundle = registry.get_bundle(self._activity_selected) misc.launch(bundle) def __get_last_activity_error_handler_cb(self, entries, total_count): pass def connect_to_scroller(self, scrolled): scrolled.connect('scroll-start', self._scroll_start_cb) scrolled.connect('scroll-end', self._scroll_end_cb) def _scroll_start_cb(self, event): self._invoker.detach() def _scroll_end_cb(self, event): self._invoker.attach_treeview(self)
def __init__(self): Gtk.TreeView.__init__(self) self.set_can_focus(False) self._query = '' self.set_headers_visible(False) self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.TOUCH_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) selection = self.get_selection() selection.set_mode(Gtk.SelectionMode.NONE) self._model = ListModel() self._model.set_visible_func(self.__model_visible_cb) self.set_model(self._model) self._favorite_columns = [] for i in range(desktop.get_number_of_views()): self.fav_column = Gtk.TreeViewColumn() self.cell_favorite = CellRendererFavorite(i) self.cell_favorite.connect('clicked', self.__favorite_clicked_cb) self.fav_column.pack_start(self.cell_favorite, True) self.fav_column.set_cell_data_func(self.cell_favorite, self.__favorite_set_data_cb) self.append_column(self.fav_column) self._favorite_columns.append(self.fav_column) self.cell_icon = CellRendererActivityIcon() column = Gtk.TreeViewColumn() column.pack_start(self.cell_icon, True) column.add_attribute(self.cell_icon, 'file-name', self._model.column_icon) self.append_column(column) self._icon_column = column cell_text = Gtk.CellRendererText() cell_text.props.ellipsize = style.ELLIPSIZE_MODE_DEFAULT cell_text.props.ellipsize_set = True column = Gtk.TreeViewColumn() column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY column.props.expand = True column.set_sort_column_id(self._model.column_title) column.pack_start(cell_text, True) column.add_attribute(cell_text, 'markup', self._model.column_title) self.append_column(column) cell_text = Gtk.CellRendererText() cell_text.props.xalign = 1 self.version_column = Gtk.TreeViewColumn() self.version_column.set_alignment(1) self.version_column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY self.version_column.props.resizable = True self.version_column.props.reorderable = True self.version_column.props.expand = True self.version_column.set_sort_column_id(self._model.column_version) self.version_column.pack_start(cell_text, True) self.version_column.add_attribute(cell_text, 'text', self._model.column_version_text) self.append_column(self.version_column) cell_text = Gtk.CellRendererText() cell_text.props.xalign = 1 self.date_column = Gtk.TreeViewColumn() self.date_column.set_alignment(1) self.date_column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY self.date_column.props.resizable = True self.date_column.props.reorderable = True self.date_column.props.expand = True self.date_column.set_sort_column_id(self._model.column_date) self.date_column.pack_start(cell_text, True) self.date_column.add_attribute(cell_text, 'text', self._model.column_date_text) self.append_column(self.date_column) self.set_search_column(self._model.column_title) self.set_enable_search(False) self._activity_selected = None self._invoker = TreeViewInvoker() self._invoker.attach_treeview(self) self.button_press_handler = None self.button_reslease_handler = None self.icon_clicked_handler = None self.row_activated_handler = None if hasattr(self.props, 'activate_on_single_click'): # Gtk+ 3.8 and later self.props.activate_on_single_click = True self.row_activated_handler = self.connect('row-activated', self.__row_activated_cb) else: self.icon_clicked_handler = self.cell_icon.connect( 'clicked', self.__icon_clicked_cb) self.button_press_handler = self.connect('button-press-event', self.__button_press_cb) self.button_reslease_handler = self.connect( 'button-release-event', self.__button_release_cb) self._row_activated_armed_path = None
class ActivitiesTreeView(Gtk.TreeView): __gtype_name__ = 'SugarActivitiesTreeView' __gsignals__ = { 'erase-activated': (GObject.SignalFlags.RUN_FIRST, None, ([str])), } def __init__(self): Gtk.TreeView.__init__(self) self.set_can_focus(False) self._query = '' self.set_headers_visible(False) self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.TOUCH_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) selection = self.get_selection() selection.set_mode(Gtk.SelectionMode.NONE) self._model = ListModel() self._model.set_visible_func(self.__model_visible_cb) self.set_model(self._model) self._favorite_columns = [] for i in range(desktop.get_number_of_views()): self.fav_column = Gtk.TreeViewColumn() self.cell_favorite = CellRendererFavorite(i) self.cell_favorite.connect('clicked', self.__favorite_clicked_cb) self.fav_column.pack_start(self.cell_favorite, True) self.fav_column.set_cell_data_func(self.cell_favorite, self.__favorite_set_data_cb) self.append_column(self.fav_column) self._favorite_columns.append(self.fav_column) self.cell_icon = CellRendererActivityIcon() column = Gtk.TreeViewColumn() column.pack_start(self.cell_icon, True) column.add_attribute(self.cell_icon, 'file-name', self._model.column_icon) self.append_column(column) self._icon_column = column cell_text = Gtk.CellRendererText() cell_text.props.ellipsize = style.ELLIPSIZE_MODE_DEFAULT cell_text.props.ellipsize_set = True column = Gtk.TreeViewColumn() column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY column.props.expand = True column.set_sort_column_id(self._model.column_title) column.pack_start(cell_text, True) column.add_attribute(cell_text, 'markup', self._model.column_title) self.append_column(column) cell_text = Gtk.CellRendererText() cell_text.props.xalign = 1 self.version_column = Gtk.TreeViewColumn() self.version_column.set_alignment(1) self.version_column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY self.version_column.props.resizable = True self.version_column.props.reorderable = True self.version_column.props.expand = True self.version_column.set_sort_column_id(self._model.column_version) self.version_column.pack_start(cell_text, True) self.version_column.add_attribute(cell_text, 'text', self._model.column_version_text) self.append_column(self.version_column) cell_text = Gtk.CellRendererText() cell_text.props.xalign = 1 self.date_column = Gtk.TreeViewColumn() self.date_column.set_alignment(1) self.date_column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY self.date_column.props.resizable = True self.date_column.props.reorderable = True self.date_column.props.expand = True self.date_column.set_sort_column_id(self._model.column_date) self.date_column.pack_start(cell_text, True) self.date_column.add_attribute(cell_text, 'text', self._model.column_date_text) self.append_column(self.date_column) self.set_search_column(self._model.column_title) self.set_enable_search(False) self._activity_selected = None self._invoker = TreeViewInvoker() self._invoker.attach_treeview(self) self.button_press_handler = None self.button_reslease_handler = None self.icon_clicked_handler = None self.row_activated_handler = None if hasattr(self.props, 'activate_on_single_click'): # Gtk+ 3.8 and later self.props.activate_on_single_click = True self.row_activated_handler = self.connect('row-activated', self.__row_activated_cb) else: self.icon_clicked_handler = self.cell_icon.connect( 'clicked', self.__icon_clicked_cb) self.button_press_handler = self.connect('button-press-event', self.__button_press_cb) self.button_reslease_handler = self.connect( 'button-release-event', self.__button_release_cb) self._row_activated_armed_path = None def __favorite_set_data_cb(self, column, cell, model, tree_iter, data): favorite = \ model[tree_iter][self._model.column_favorites[cell.favorite_view]] if favorite: cell.props.xo_color = profile.get_color() else: cell.props.xo_color = None def __favorite_clicked_cb(self, cell, path): row = self.get_model()[path] registry = bundleregistry.get_registry() registry.set_bundle_favorite( row[self._model.column_bundle_id], row[self._model.column_version], not row[self._model.column_favorites[cell.favorite_view]], cell.favorite_view) def __icon_clicked_cb(self, cell, path): """ A click on activity icon cell is to start an activity. """ logging.debug('__icon_clicked_cb') self._start_activity(path) def __row_activated_cb(self, treeview, path, col): """ A click on cells other than the favorite toggle is to start an activity. Gtk+ 3.8 and later. """ logging.debug('__row_activated_cb') if col is not treeview.get_column(0): self._start_activity(path) def __button_to_path(self, event, event_type): if event.window != self.get_bin_window() or \ event.button != 1 or \ event.type != event_type: return None pos = self.get_path_at_pos(int(event.x), int(event.y)) if pos is None: return None path, column, x_, y_ = pos if column == self._icon_column: return None if column in self._favorite_columns: return None return path def __button_press_cb(self, widget, event): logging.debug('__button_press_cb') path = self.__button_to_path(event, Gdk.EventType.BUTTON_PRESS) if path is None: return self._row_activated_armed_path = path def __button_release_cb(self, widget, event): logging.debug('__button_release_cb') path = self.__button_to_path(event, Gdk.EventType.BUTTON_RELEASE) if path is None: return if self._row_activated_armed_path != path: return self._start_activity(path) self._row_activated_armed_path = None def _start_activity(self, path): model = self.get_model() row = model[path] registry = bundleregistry.get_registry() bundle = registry.get_bundle(row[self._model.column_bundle_id]) misc.launch(bundle) def set_filter(self, query): """Set a new query and refilter the model, return the number of matching activities. """ if isinstance(query, bytes): query = query.decode() self._query = normalize_string(query) self.get_model().refilter() matches = self.get_model().iter_n_children(None) return matches def __model_visible_cb(self, model, tree_iter, data): title = model[tree_iter][self._model.column_title] if isinstance(title, bytes): title = title.decode('utf-8') title = normalize_string(title) return title is not None and title.find(self._query) > -1 def create_palette(self, path, column): if column == self._icon_column: row = self.get_model()[path] bundle_id = row[self.get_model().column_bundle_id] registry = bundleregistry.get_registry() palette = ActivityListPalette(registry.get_bundle(bundle_id)) palette.connect('erase-activated', self.__erase_activated_cb, bundle_id) return palette def __erase_activated_cb(self, palette, event, bundle_id): self.emit('erase-activated', bundle_id) def get_activities_selected(self): activities = [] for row in self.get_model(): activities.append({ 'name': row[self.get_model().column_activity_name], 'bundle_id': row[self.get_model().column_bundle_id] }) return activities def run_activity(self, bundle_id, resume_mode): if not resume_mode: registry = bundleregistry.get_registry() bundle = registry.get_bundle(bundle_id) misc.launch(bundle) return self._activity_selected = bundle_id query = {'activity': bundle_id} properties = [ 'uid', 'title', 'icon-color', 'activity', 'activity_id', 'mime_type', 'mountpoint' ] datastore.find(query, sorting=['+timestamp'], limit=1, properties=properties, reply_handler=self.__get_last_activity_reply_handler_cb, error_handler=self.__get_last_activity_error_handler_cb) def __get_last_activity_reply_handler_cb(self, entries, total_count): registry = bundleregistry.get_registry() if entries: misc.resume(entries[0], entries[0]['activity']) else: bundle = registry.get_bundle(self._activity_selected) misc.launch(bundle) def __get_last_activity_error_handler_cb(self, entries, total_count): pass def connect_to_scroller(self, scrolled): scrolled.connect('scroll-start', self._scroll_start_cb) scrolled.connect('scroll-end', self._scroll_end_cb) self.cell_icon.connect_to_scroller(scrolled) self.cell_favorite.connect_to_scroller(scrolled) def _scroll_start_cb(self, event): self._invoker.detach() def _scroll_end_cb(self, event): self._invoker.attach_treeview(self)
class TreeView(Gtk.TreeView): __gtype_name__ = 'JournalTreeView' __gsignals__ = { 'detail-clicked': (GObject.SignalFlags.RUN_FIRST, None, ([object])), 'volume-error': (GObject.SignalFlags.RUN_FIRST, None, ([str, str])), } def __init__(self, journalactivity): Gtk.TreeView.__init__(self) self._journalactivity = journalactivity self.icon_activity_column = None self.buddies_columns = [] self._invoker = TreeViewInvoker() self._invoker.attach_treeview(self) self.set_headers_visible(False) self.set_enable_search(False) self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.TOUCH_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) def connect_to_scroller(self, scrolled): scrolled.connect('scroll-start', self._scroll_start_cb) scrolled.connect('scroll-end', self._scroll_end_cb) def _scroll_start_cb(self, event): self._invoker.detach() def _scroll_end_cb(self, event): self._invoker.attach_treeview(self) def create_palette(self, path, column): if self._journalactivity is None: # in the objectchooser we don't show palettes return None if self._journalactivity.get_list_view().is_dragging(): return None palette = None if column == self.icon_activity_column: metadata = self.get_model().get_metadata(path) palette = ObjectPalette(self._journalactivity, metadata, detail=True) palette.connect('detail-clicked', self.__detail_clicked_cb) palette.connect('volume-error', self.__volume_error_cb) elif column in self.buddies_columns: buddycellrenderer = column.get_cells()[0] if buddycellrenderer.nick is not None: palette = BuddyPalette( (buddycellrenderer.nick, buddycellrenderer.props.xo_color.to_string())) return palette def __detail_clicked_cb(self, palette, uid): self.emit('detail-clicked', uid) def __volume_error_cb(self, palette, message, severity): self.emit('volume-error', message, severity) def do_size_request(self, requisition): # HACK: We tell the model that the view is just resizing so it can # avoid hitting both D-Bus and disk. tree_model = self.get_model() if tree_model is not None: tree_model.view_is_resizing = True try: Gtk.TreeView.do_size_request(self, requisition) finally: if tree_model is not None: tree_model.view_is_resizing = False def __del__(self): self._invoker.detach()
class TreeView(Gtk.TreeView): __gtype_name__ = "JournalTreeView" __gsignals__ = { "detail-clicked": (GObject.SignalFlags.RUN_FIRST, None, ([object])), "volume-error": (GObject.SignalFlags.RUN_FIRST, None, ([str, str])), "choose-project": (GObject.SignalFlags.RUN_FIRST, None, ([object])), } def __init__(self, journalactivity): Gtk.TreeView.__init__(self) self._journalactivity = journalactivity self.icon_activity_column = None self.buddies_columns = [] self._invoker = TreeViewInvoker() self._invoker.attach_treeview(self) self.set_headers_visible(False) self.set_enable_search(False) self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.TOUCH_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) def connect_to_scroller(self, scrolled): scrolled.connect("scroll-start", self._scroll_start_cb) scrolled.connect("scroll-end", self._scroll_end_cb) def _scroll_start_cb(self, event): self._invoker.detach() def _scroll_end_cb(self, event): self._invoker.attach_treeview(self) def create_palette(self, path, column): if self._journalactivity is None: # in the objectchooser we don't show palettes return None if self._journalactivity.get_list_view().is_dragging(): return None palette = None if column == self.icon_activity_column: metadata = self.get_model().get_metadata(path) palette = ObjectPalette(self._journalactivity, metadata, detail=True) palette.connect("detail-clicked", self.__detail_clicked_cb) palette.connect("volume-error", self.__volume_error_cb) palette.connect("choose-project", self.__choose_project_cb) elif column in self.buddies_columns: tree_model = self.get_model() iterator = tree_model.get_iter(path) for column_index in [ListModel.COLUMN_BUDDY_1, ListModel.COLUMN_BUDDY_2, ListModel.COLUMN_BUDDY_3]: if column == self.buddies_columns[column_index - ListModel.COLUMN_BUDDY_1]: buddy_value = tree_model.do_get_value(iterator, column_index) if buddy_value is not None: nick, xo_color = buddy_value palette = BuddyPalette((nick, xo_color.to_string())) return palette def __detail_clicked_cb(self, palette, uid): self.emit("detail-clicked", uid) def __volume_error_cb(self, palette, message, severity): self.emit("volume-error", message, severity) def __choose_project_cb(self, palette, metadata_to_copy): self.emit("choose-project", metadata_to_copy) def do_size_request(self, requisition): # HACK: We tell the model that the view is just resizing so it can # avoid hitting both D-Bus and disk. tree_model = self.get_model() if tree_model is not None: tree_model.view_is_resizing = True try: Gtk.TreeView.do_size_request(self, requisition) finally: if tree_model is not None: tree_model.view_is_resizing = False def __del__(self): self._invoker.detach()
scrolled.add(treeview) test.pack_start(scrolled, True, True, 0) test.show_all() col = Gtk.TreeViewColumn() treeview.append_column(col) xo_color = XoColor('#FF0000,#00FF00') cell_icon = CellRendererIcon() cell_icon.props.width = style.GRID_CELL_SIZE cell_icon.props.height = style.GRID_CELL_SIZE cell_icon.props.size = style.STANDARD_ICON_SIZE cell_icon.props.xo_color = xo_color col.pack_start(cell_icon, expand=False) col.add_attribute(cell_icon, 'icon-name', 0) cell_text = Gtk.CellRendererText() col.pack_start(cell_text, expand=True) col.add_attribute(cell_text, 'text', 0) invoker = TreeViewInvoker() invoker.attach_treeview(treeview) detector = ScrollingDetector(scrolled) detector.connect('scroll-start', _scroll_start_cb, treeview, invoker) detector.connect('scroll-end', _scroll_end_cb, treeview, invoker) if __name__ == '__main__': time_ini = time.time() common.main(test)
def __init__(self): Gtk.TreeView.__init__(self) self.set_can_focus(False) self._query = '' self.set_headers_visible(False) self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.TOUCH_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) selection = self.get_selection() selection.set_mode(Gtk.SelectionMode.NONE) self._model = ListModel() self._model.set_visible_func(self.__model_visible_cb) self.set_model(self._model) self._favorite_columns = [] for i in range(desktop.get_number_of_views()): self.fav_column = Gtk.TreeViewColumn() self.cell_favorite = CellRendererFavorite(i) self.cell_favorite.connect('clicked', self.__favorite_clicked_cb) self.fav_column.pack_start(self.cell_favorite, True) self.fav_column.set_cell_data_func(self.cell_favorite, self.__favorite_set_data_cb) self.append_column(self.fav_column) self._favorite_columns.append(self.fav_column) self.cell_icon = CellRendererActivityIcon() column = Gtk.TreeViewColumn() column.pack_start(self.cell_icon, True) column.add_attribute(self.cell_icon, 'file-name', self._model.column_icon) self.append_column(column) self._icon_column = column cell_text = Gtk.CellRendererText() cell_text.props.ellipsize = style.ELLIPSIZE_MODE_DEFAULT cell_text.props.ellipsize_set = True column = Gtk.TreeViewColumn() column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY column.props.expand = True column.set_sort_column_id(self._model.column_title) column.pack_start(cell_text, True) column.add_attribute(cell_text, 'markup', self._model.column_title) self.append_column(column) cell_text = Gtk.CellRendererText() cell_text.props.xalign = 1 self.version_column = Gtk.TreeViewColumn() self.version_column.set_alignment(1) self.version_column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY self.version_column.props.resizable = True self.version_column.props.reorderable = True self.version_column.props.expand = True self.version_column.set_sort_column_id(self._model.column_version) self.version_column.pack_start(cell_text, True) self.version_column.add_attribute(cell_text, 'text', self._model.column_version_text) self.append_column(self.version_column) cell_text = Gtk.CellRendererText() cell_text.props.xalign = 1 self.date_column = Gtk.TreeViewColumn() self.date_column.set_alignment(1) self.date_column.props.sizing = Gtk.TreeViewColumnSizing.GROW_ONLY self.date_column.props.resizable = True self.date_column.props.reorderable = True self.date_column.props.expand = True self.date_column.set_sort_column_id(self._model.column_date) self.date_column.pack_start(cell_text, True) self.date_column.add_attribute(cell_text, 'text', self._model.column_date_text) self.append_column(self.date_column) self.set_search_column(self._model.column_title) self.set_enable_search(False) self._activity_selected = None self._invoker = TreeViewInvoker() self._invoker.attach_treeview(self) self.button_press_handler = None self.button_reslease_handler = None self.icon_clicked_handler = None self.row_activated_handler = None if hasattr(self.props, 'activate_on_single_click'): # Gtk+ 3.8 and later self.props.activate_on_single_click = True self.row_activated_handler = self.connect('row-activated', self.__row_activated_cb) else: self.icon_clicked_handler = self.cell_icon.connect( 'clicked', self.__icon_clicked_cb) self.button_press_handler = self.connect( 'button-press-event', self.__button_press_cb) self.button_reslease_handler = self.connect( 'button-release-event', self.__button_release_cb) self._row_activated_armed_path = None