コード例 #1
0
    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)
コード例 #2
0
ファイル: listview.py プロジェクト: iamutkarshtiwari/sugar
    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)
コード例 #3
0
    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)
コード例 #4
0
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)
コード例 #5
0
    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
コード例 #6
0
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)
コード例 #7
0
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()
コード例 #8
0
ファイル: listview.py プロジェクト: AxEofBone7/sugar
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()
コード例 #9
0
ファイル: listview.py プロジェクト: iamutkarshtiwari/sugar
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()
コード例 #10
0
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)
コード例 #11
0
ファイル: activitieslist.py プロジェクト: AbrahmAB/sugar
    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
コード例 #12
0
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)