Example #1
0
    def update_store(self, store):
        def restore_adjustment(value):

            adj = self._tree.get_parent().get_vadjustment()
            upper = adj.get_upper() - adj.get_page_size()

            if value > upper:
                value = upper

            adj.set_value(value)

        self._store.destroy()
        self._store = store.copy()
        if __debug__: RT.register(self._store, __name__)

        value = self._tree.get_parent().get_vadjustment().get_value()
        GLib.idle_add(restore_adjustment, value)

        if self._tree.get_window():
            self._tree.get_window().freeze_updates()
            GLib.idle_add(self._tree.get_window().thaw_updates)

        selection = self._tree.get_selection()
        selection.handler_block_by_func(self._on_selection_changed)

        self._tree.set_model(self._store.model)
        self._load_state()

        selection.handler_unblock_by_func(self._on_selection_changed)
    def _create_menu(self):
        def on_show_menu(widget):

            parent_id = labelplus.common.label.get_parent_id(self._label_id)
            if parent_id in self._store:
                items[0].show()
                items[1].show()
            else:
                items[0].hide()
                items[1].hide()

        def on_activate(widget, label_id):

            self._request_options(label_id)

        def on_activate_parent(widget):

            parent_id = labelplus.common.label.get_parent_id(self._label_id)
            self._request_options(parent_id)

        self._menu = LabelSelectionMenu(self._store.model, on_activate)
        if __debug__: RT.register(self._menu, __name__)

        items = labelplus.gtkui.common.gtklib.menu_add_items(
            self._menu, 0, (
                ((gtk.MenuItem, _(STR_PARENT)), on_activate_parent),
                ((gtk.SeparatorMenuItem, ), ),
            ))

        if __debug__:
            for item in items:
                RT.register(item, __name__)

        self._menu.connect("show", on_show_menu)
        self._menu.show_all()
    def _create_options_item(self):
        def on_activate(widget):

            try:
                ids = self.get_selected_torrent_labels()
                dialog = LabelOptionsDialog(self._plugin, ids[0])
                if __debug__: RT.register(dialog, __name__)
                dialog.show()
            except:
                log.exception("Error initializing LabelOptionsDialog")
                pass

        def on_show(widget, item):

            ids = self.get_selected_torrent_labels()
            if ids and len(ids) == 1 and self._store.is_user_label(ids[0]):
                item.show()
            else:
                item.hide()

        item = Gtk.MenuItem(label=_(TITLE_LABEL_OPTIONS))
        item.connect("activate", on_activate)

        self._menu.get_submenu().connect("show", on_show, item)

        if __debug__: RT.register(item, __name__)

        return item
    def __init__(self, plugin):

        self._plugin = plugin
        self._view = deluge.component.get("TorrentView")
        self._menubar = deluge.component.get("MenuBar")

        self._store = None

        self._menu = None
        self._sep = None
        self._submenus = []

        self._alt_menu = None

        self._dnd_src_proxy = None

        self._handlers = []

        try:
            self._store = plugin.store.copy()
            if __debug__: RT.register(self._store, __name__)

            log.debug("Installing widgets...")
            self._add_column()
            self._register_handlers()
            self._enable_dnd()

            log.debug("Creating menu...")
            self._create_menus()
            self._install_context_menu()

            self._plugin.register_update_func(self.update_store)
        except:
            self.unload()
            raise
Example #5
0
    def _do_open_file_dialog(self, widget):
        def on_response(widget, response):

            if self.valid and response == Gtk.ResponseType.OK:
                txt_widget.set_text(widget.get_filename())

            widget.destroy()

        path_type = self._get_path_type(widget)
        txt_widget = self.__dict__["_txt_%s_path" % path_type]

        dialog = Gtk.FileChooserDialog(_(TITLE_SELECT_FOLDER),
                                       self._wnd_label_options,
                                       Gtk.FileChooserAction.SELECT_FOLDER,
                                       (_("_Cancel"), Gtk.ResponseType.CANCEL,
                                        _("_OK"), Gtk.ResponseType.OK))

        if __debug__: RT.register(dialog, __name__)

        dialog.set_destroy_with_parent(True)

        path = txt_widget.get_text()
        if not os.path.exists(path):
            path = ""

        dialog.set_filename(path)

        response = dialog.run()
        on_response(dialog, response)

        widgets = labelplus.gtkui.common.gtklib.widget_get_descendents(
            dialog, (Gtk.ToggleButton, ), 1)
        if widgets:
            location_toggle = widgets[0]
            location_toggle.set_active(False)
  def update_store(self, store):

    def restore_adjustment(value):

      adj = self._tree.parent.get_vadjustment()
      upper = adj.get_upper() - adj.get_page_size()

      if value > upper:
        value = upper

      adj.set_value(value)


    self._store.destroy()
    self._store = store.copy()
    if __debug__: RT.register(self._store, __name__)

    value = self._tree.parent.get_vadjustment().get_value()
    gobject.idle_add(restore_adjustment, value)

    if self._tree.window:
      self._tree.window.freeze_updates()
      gobject.idle_add(self._tree.window.thaw_updates)

    selection = self._tree.get_selection()
    selection.handler_block_by_func(self._on_selection_changed)

    self._tree.set_model(self._store.model)
    self._load_state()

    selection.handler_unblock_by_func(self._on_selection_changed)
  def __init__(self, plugin):

    self._plugin = plugin
    self._view = deluge.component.get("TorrentView")
    self._menubar = deluge.component.get("MenuBar")

    self._store = None

    self._menu = None
    self._sep = None
    self._submenus = []

    self._alt_menu = None

    self._dnd_src_proxy = None

    self._handlers = []

    try:
      self._store = plugin.store.copy()
      if __debug__: RT.register(self._store, __name__)

      log.debug("Installing widgets...")
      self._add_column()
      self._register_handlers()
      self._enable_dnd()

      log.debug("Creating menu...")
      self._create_menus()
      self._install_context_menu()

      self._plugin.register_update_func(self.update_store)
    except:
      self.unload()
      raise
  def _create_options_item(self):

    def on_activate(widget):

      try:
        ids = self.get_selected_torrent_labels()
        dialog = LabelOptionsDialog(self._plugin, ids[0])
        if __debug__: RT.register(dialog, __name__)
        dialog.show()
      except:
        log.exception("Error initializing LabelOptionsDialog")
        pass


    def on_show(widget, item):

      ids = self.get_selected_torrent_labels()
      if ids and len(ids) == 1 and self._store.is_user_label(ids[0]):
        item.show()
      else:
        item.hide()


    item = gtk.MenuItem(_(TITLE_LABEL_OPTIONS))
    item.connect("activate", on_activate)

    self._menu.get_submenu().connect("show", on_show, item)

    if __debug__: RT.register(item, __name__)

    return item
Example #9
0
def menu_add_separator(menu, pos=-1):

    sep = Gtk.SeparatorMenuItem()
    menu.insert(sep, pos)

    if __debug__: RT.register(sep, __name__)

    return sep
Example #10
0
def menu_add_separator(menu, pos=-1):

  sep = gtk.SeparatorMenuItem()
  menu.insert(sep, pos)

  if __debug__: RT.register(sep, __name__)

  return sep
    def _create_context_menu(self):

        item = Gtk.MenuItem(label=DISPLAY_NAME)
        item.set_submenu(Gtk.Menu())

        if __debug__: RT.register(item, __name__)
        if __debug__: RT.register(item.get_submenu(), __name__)

        return item
Example #12
0
        def on_add(widget):

            try:
                dialog = AddLabelDialog(self._plugin, ID_NULL)
                if __debug__: RT.register(dialog, __name__)
                dialog.show()
            except:
                log.exception("Error initializing AddLabelDialog")
                pass
  def _create_context_menu(self):

    item = gtk.MenuItem(DISPLAY_NAME)
    item.set_submenu(gtk.Menu())

    if __debug__: RT.register(item, __name__)
    if __debug__: RT.register(item.get_submenu(), __name__)

    return item
Example #14
0
    def on_add(widget):

      try:
        dialog = AddLabelDialog(self._plugin, ID_NULL)
        if __debug__: RT.register(dialog, __name__)
        dialog.show()
      except:
        log.exception("Error initializing AddLabelDialog")
        pass
  def update_store(self, store):

    self._store.destroy()
    self._store = store.copy()
    if __debug__: RT.register(self._store, __name__)

    self._destroy_menu()
    self._create_menu()

    self._refresh_torrent_label()
Example #16
0
        def on_option(widget):

            try:
                id = self._menu.get_title()
                dialog = LabelOptionsDialog(self._plugin, id)
                if __debug__: RT.register(dialog, __name__)
                dialog.show()
            except:
                log.exception("Error initializing LabelOptionsDialog")
                pass
        def on_activate(widget):

            try:
                ids = self.get_selected_torrent_labels()
                dialog = LabelOptionsDialog(self._plugin, ids[0])
                if __debug__: RT.register(dialog, __name__)
                dialog.show()
            except:
                log.exception("Error initializing LabelOptionsDialog")
                pass
Example #18
0
    def on_option(widget):

      try:
        id = self._menu.get_title()
        dialog = LabelOptionsDialog(self._plugin, id)
        if __debug__: RT.register(dialog, __name__)
        dialog.show()
      except:
        log.exception("Error initializing LabelOptionsDialog")
        pass
    def on_activate(widget):

      try:
        ids = self.get_selected_torrent_labels()
        dialog = LabelOptionsDialog(self._plugin, ids[0])
        if __debug__: RT.register(dialog, __name__)
        dialog.show()
      except:
        log.exception("Error initializing LabelOptionsDialog")
        pass
  def update_store(self, store):

    self._store.destroy()
    self._store = store.copy()
    if __debug__: RT.register(self._store, __name__)

    self._destroy_menu()
    self._create_menu()

    self._refresh_torrent_label()
  def _setup_autolabel_box(self):

    crbox = AutolabelBox(row_spacing=6, column_spacing=3)
    if __debug__: RT.register(crbox, __name__)

    crbox.set_name("crbox_autolabel_rules")
    self._crbox_autolabel_rules = crbox
    self._blk_criteria_box.add(crbox)
    self._widgets.append(crbox)

    crbox.show_all()
    def _setup_autolabel_box(self):

        crbox = AutolabelBox(row_spacing=6, column_spacing=3)
        if __debug__: RT.register(crbox, __name__)

        crbox.set_name("crbox_autolabel_rules")
        self._crbox_autolabel_rules = crbox
        self._blk_criteria_box.add(crbox)
        self._widgets.append(crbox)

        crbox.show_all()
    def _create_alternate_menu(self):

        item = self._create_context_menu()
        item.get_submenu().append(self._create_filter_menu())

        menu = Gtk.Menu()
        menu.append(item)
        menu.show_all()

        if __debug__: RT.register(menu, __name__)

        return menu
  def _create_alternate_menu(self):

    item = self._create_context_menu()
    item.get_submenu().append(self._create_filter_menu())

    menu = gtk.Menu()
    menu.append(item)
    menu.show_all()

    if __debug__: RT.register(menu, __name__)

    return menu
    def _setup_test_combo_box(self):

        prop_store = labelplus.gtkui.common.gtklib.liststore_create(
            str, [_(x) for x in PROPS])
        if __debug__: RT.register(prop_store, __name__)

        cell = gtk.CellRendererText()
        if __debug__: RT.register(cell, __name__)

        self._cmb_test_criteria.pack_start(cell)
        self._cmb_test_criteria.add_attribute(cell, "text", 0)
        self._cmb_test_criteria.set_model(prop_store)
        self._cmb_test_criteria.set_active(0)
Example #26
0
    def _load_extensions(self):

        log.info("Loading extensions...")

        for ext in EXTENSIONS:
            try:
                log.debug("Initializing %s", ext.__name__)
                instance = ext(self)
                self._extensions.append(instance)
                if __debug__: RT.register(instance, ext.__name__)
                log.info("%s initialized", ext.__name__)
            except:
                log.exception("Error initializing %s", ext.__name__)
Example #27
0
  def _load_extensions(self):

    log.info("Loading extensions...")

    for ext in EXTENSIONS:
      try:
        log.debug("Initializing %s", ext.__name__)
        instance = ext(self)
        self._extensions.append(instance)
        if __debug__: RT.register(instance, ext.__name__)
        log.info("%s initialized", ext.__name__)
      except:
        log.exception("Error initializing %s", ext.__name__)
  def _setup_test_combo_box(self):

    prop_store = labelplus.gtkui.common.gtklib.liststore_create(str,
      [_(x) for x in PROPS])
    if __debug__: RT.register(prop_store, __name__)

    cell = gtk.CellRendererText()
    if __debug__: RT.register(cell, __name__)

    self._cmb_test_criteria.pack_start(cell)
    self._cmb_test_criteria.add_attribute(cell, "text", 0)
    self._cmb_test_criteria.set_model(prop_store)
    self._cmb_test_criteria.set_active(0)
  def _setup_radio_button_groups(self):

    for path_type in PATH_TYPES:
      rgrp = RadioButtonGroup((
        (getattr(self, "_rb_%s_to_parent" % path_type), MOVE_PARENT),
        (getattr(self, "_rb_%s_to_subfolder" % path_type), MOVE_SUBFOLDER),
        (getattr(self, "_rb_%s_to_folder" % path_type), MOVE_FOLDER),
      ))

      rgrp.set_name("rgrp_%s_mode" % path_type)
      self.__dict__["_rgrp_%s_mode" % path_type] = rgrp

      if __debug__: RT.register(rgrp, __name__)
    def update_store(self, store):

        self._store.destroy()
        self._store = store.copy()
        if __debug__: RT.register(self._store, __name__)

        self._destroy_alternate_menu()
        self._alt_menu = self._create_alternate_menu()

        self._uninstall_submenus()
        self._destroy_submenus()
        self._submenus = self._create_submenus()
        self._install_submenus()
  def update_store(self, store):

    self._store.destroy()
    self._store = store.copy()
    if __debug__: RT.register(self._store, __name__)

    self._destroy_alternate_menu()
    self._alt_menu = self._create_alternate_menu()

    self._uninstall_submenus()
    self._destroy_submenus()
    self._submenus = self._create_submenus()
    self._install_submenus()
    def _setup_radio_button_groups(self):

        for path_type in PATH_TYPES:
            rgrp = RadioButtonGroup((
                (getattr(self, "_rb_%s_to_parent" % path_type), MOVE_PARENT),
                (getattr(self,
                         "_rb_%s_to_subfolder" % path_type), MOVE_SUBFOLDER),
                (getattr(self, "_rb_%s_to_folder" % path_type), MOVE_FOLDER),
            ))

            rgrp.set_name("rgrp_%s_mode" % path_type)
            self.__dict__["_rgrp_%s_mode" % path_type] = rgrp

            if __debug__: RT.register(rgrp, __name__)
    def _create_menu(self):
        def on_activate(widget, label_id):

            id = self._get_selected_torrent()
            if id:
                self._set_torrent_label(id, label_id)
                self._display_torrent_label(id)

        items = (((gtk.MenuItem, _(STR_NONE)), on_activate, ID_NONE), )

        self._menu = LabelSelectionMenu(self._store.model,
                                        on_activate,
                                        root_items=items)

        if __debug__: RT.register(self._menu, __name__)
  def _create_menu(self):

    def on_activate(widget, label_id):

      id = self._get_selected_torrent()
      if id:
        self._set_torrent_label(id, label_id)
        self._display_torrent_label(id)


    items = (((gtk.MenuItem, _(STR_NONE)), on_activate, ID_NONE),)

    self._menu = LabelSelectionMenu(self._store.model, on_activate,
      root_items=items)

    if __debug__: RT.register(self._menu, __name__)
Example #35
0
    def _build_store(self, data):
        def data_sort_asc(model, iter1, iter2):

            id1, data1 = model[iter1]
            id2, data2 = model[iter2]

            is_reserved1 = id1 in RESERVED_IDS
            is_reserved2 = id2 in RESERVED_IDS

            if is_reserved1 and is_reserved2:
                return cmp(id1, id2)
            elif is_reserved1:
                return -1
            elif is_reserved2:
                return 1

            return cmp(data1["name"], data2["name"])

        store = gtk.TreeStore(str, gobject.TYPE_PYOBJECT)
        store_map = {}

        if __debug__:
            RT.register(store, __name__)

        for id_ in sorted(data):
            if id_ in RESERVED_IDS:
                parent_id = ID_NULL
            else:
                parent_id = labelplus.common.label.get_parent_id(id_)

            parent_iter = store_map.get(parent_id)
            iter_ = store.append(parent_iter, [id_, data[id_]])
            store_map[id_] = iter_

        sorted_model = gtk.TreeModelSort(store)
        sorted_model.set_sort_func(self.LABEL_DATA, data_sort_asc)
        sorted_model.set_sort_column_id(self.LABEL_DATA, gtk.SORT_ASCENDING)

        if __debug__:
            RT.register(sorted_model, __name__)

        self._data = data
        self._map = store_map
        self._store = store
        self.model = sorted_model
  def _enable_dnd(self):

    def on_drag_start(widget, context):

      torrent_ids = self._view.get_selected_torrents()
      widget.set_data("dnd_data", torrent_ids)


    def load_ids(widget, path, col, selection, *args):

      torrent_ids = widget.get_data("dnd_data")
      data = cPickle.dumps(torrent_ids)
      selection.set("TEXT", 8, data)

      return True


    def get_drag_icon(widget, x, y):

      if widget.get_selection().count_selected_rows() > 1:
        pixbuf = icon_multiple
      else:
        pixbuf = icon_single

      return (pixbuf, 0, 0)


    icon_single = self._view.treeview.render_icon(gtk.STOCK_DND,
      gtk.ICON_SIZE_DND)
    icon_multiple = self._view.treeview.render_icon(gtk.STOCK_DND_MULTIPLE,
      gtk.ICON_SIZE_DND)

    src_target = DragTarget(
      name="torrent_ids",
      scope=gtk.TARGET_SAME_APP,
      action=gtk.gdk.ACTION_MOVE,
      data_func=load_ids,
    )

    self._dnd_src_proxy = TreeViewDragSourceProxy(self._view.treeview,
      get_drag_icon, on_drag_start)
    self._dnd_src_proxy.add_target(src_target)

    if __debug__: RT.register(src_target, __name__)
    if __debug__: RT.register(self._dnd_src_proxy, __name__)
    def _create_set_label_menu(self):
        def on_activate(widget, label_id):

            torrent_ids = self._view.get_selected_torrents()
            if torrent_ids and label_id in self._store:
                log.info("Setting label %r on %r",
                         self._store[label_id]["fullname"], torrent_ids)
                client.labelplus.set_torrent_labels(torrent_ids, label_id)

        def on_activate_parent(widget):

            ids = self.get_selected_torrent_labels()
            parent_id = labelplus.common.label.get_common_parent(ids)
            on_activate(widget, parent_id)

        def on_show_menu(widget):

            items[0].hide()

            ids = self.get_selected_torrent_labels()
            parent_id = labelplus.common.label.get_common_parent(ids)
            if self._store.is_user_label(parent_id):
                items[0].show()

        root_items = (((Gtk.MenuItem, {
            'label': _(STR_NONE)
        }), on_activate, ID_NONE), )

        menu = LabelSelectionMenu(self._store.model,
                                  on_activate,
                                  root_items=root_items)
        menu.connect("show", on_show_menu)

        items = labelplus.gtkui.common.gtklib.menu_add_items(
            menu, 1, (((Gtk.MenuItem, {
                'label': _(STR_PARENT)
            }), on_activate_parent), ))

        root = Gtk.MenuItem(label=_(TITLE_SET_LABEL))
        root.set_submenu(menu)

        if __debug__: RT.register(menu, __name__)
        if __debug__: RT.register(root, __name__)

        return root
Example #38
0
  def disable(self):

    log.info("Deinitializing %s...", self.__class__.__name__)

    labelplus.common.cancel_calls(self._calls)

    self._run_cleanup_funcs()
    self._unload_extensions()
    self._update_funcs = []

    self._close_config()
    self._destroy_store()

    self.initialized = False

    if __debug__: RT.report()

    log.info("%s deinitialized", self.__class__.__name__)
Example #39
0
    def disable(self):

        log.info("Deinitializing %s...", self.__class__.__name__)

        labelplus.common.cancel_calls(self._calls)

        self._run_cleanup_funcs()
        self._unload_extensions()
        self._update_funcs = []

        self._close_config()
        self._destroy_store()

        self.initialized = False

        if __debug__: RT.report()

        log.info("%s deinitialized", self.__class__.__name__)
  def _create_set_label_menu(self):

    def on_activate(widget, label_id):

      torrent_ids = self._view.get_selected_torrents()
      if torrent_ids and label_id in self._store:
        log.info("Setting label %r on %r", self._store[label_id]["fullname"],
          torrent_ids)
        client.labelplus.set_torrent_labels(torrent_ids, label_id)


    def on_activate_parent(widget):

      ids = self.get_selected_torrent_labels()
      parent_id = labelplus.common.label.get_common_parent(ids)
      on_activate(widget, parent_id)


    def on_show_menu(widget):

      items[0].hide()

      ids = self.get_selected_torrent_labels()
      parent_id = labelplus.common.label.get_common_parent(ids)
      if self._store.is_user_label(parent_id):
        items[0].show()


    root_items = (((gtk.MenuItem, _(STR_NONE)), on_activate, ID_NONE),)

    menu = LabelSelectionMenu(self._store.model, on_activate,
      root_items=root_items)
    menu.connect("show", on_show_menu)

    items = labelplus.gtkui.common.gtklib.menu_add_items(menu, 1,
      (((gtk.MenuItem, _(STR_PARENT)), on_activate_parent),))

    root = gtk.MenuItem(_(TITLE_SET_LABEL))
    root.set_submenu(menu)

    if __debug__: RT.register(menu, __name__)
    if __debug__: RT.register(root, __name__)

    return root
Example #41
0
    def _build_store(self, data):
        def data_sort_asc(model, iter1, iter2, *user_data):

            id1, data1 = model[iter1]
            id2, data2 = model[iter2]

            is_reserved1 = id1 in RESERVED_IDS
            is_reserved2 = id2 in RESERVED_IDS

            if is_reserved1 and is_reserved2:
                return cmp(id1, id2)
            elif is_reserved1:
                return -1
            elif is_reserved2:
                return 1

            return cmp(data1["name"], data2["name"])

        store = Gtk.TreeStore(str, GObject.TYPE_PYOBJECT)
        store_map = {}

        if __debug__: RT.register(store, __name__)

        for id_ in sorted(data):
            if id_ in RESERVED_IDS:
                parent_id = ID_NULL
            else:
                parent_id = labelplus.common.label.get_parent_id(id_)

            parent_iter = store_map.get(parent_id)
            iter_ = store.append(parent_iter, [id_, data[id_]])
            store_map[id_] = iter_

        sorted_model = Gtk.TreeModelSort(model=store)
        sorted_model.set_sort_func(self.LABEL_DATA, data_sort_asc)
        sorted_model.set_sort_column_id(self.LABEL_DATA,
                                        Gtk.SortType.ASCENDING)

        if __debug__: RT.register(sorted_model, __name__)

        self._data = data
        self._map = store_map
        self._store = store
        self.model = sorted_model
    def _create_item(self, model, iter_, menu, on_activate, headers,
                     sub_items):

        id_, data = model[iter_]
        name = data["name"]

        item = Gtk.MenuItem(label=name)
        item.set_name(id_)
        menu.append(item)
        self._items.append(item)
        if __debug__: RT.register(item, __name__)

        children = labelplus.gtkui.common.gtklib.treemodel_get_children(
            model, iter_)

        if not children and not sub_items:
            if on_activate:
                item.connect("activate", on_activate, id_)
        else:
            submenu = Gtk.Menu()
            item.set_submenu(submenu)
            self._menus.append(submenu)
            if __debug__: RT.register(submenu, __name__)

            if headers:
                self._items += labelplus.gtkui.common.gtklib.menu_add_items(
                    submenu, -1, (((Gtk.MenuItem, {
                        'label': name
                    }), on_activate, id_), ))
                self._items.append(
                    labelplus.gtkui.common.gtklib.menu_add_separator(submenu))

            if sub_items:
                self._items += labelplus.gtkui.common.gtklib.menu_add_items(
                    submenu, -1, sub_items, id_)
                if children:
                    self._items.append(
                        labelplus.gtkui.common.gtklib.menu_add_separator(
                            submenu))

            for child in children:
                self._create_item(model, child, submenu, on_activate, headers,
                                  sub_items)
    def _enable_dnd(self):
        def on_drag_start(widget, context):

            torrent_ids = self._view.get_selected_torrents()
            widget._tv_dnd_data = torrent_ids

        def load_ids(widget, path, col, selection, *args):

            #torrent_ids = widget.get_data("dnd_data")
            torrent_ids = widget._tv_dnd_data
            data = pickle.dumps(torrent_ids)
            selection.set(Gdk.Atom.intern("TEXT", False), 8, data)

            return True

        def get_drag_icon(widget, x, y):

            if widget.get_selection().count_selected_rows() > 1:
                pixbuf = icon_multiple
            else:
                pixbuf = icon_single

            return (pixbuf, 0, 0)

        icon_single = Gtk.IconTheme.get_default().load_icon(
            'gtk-dnd', Gtk.IconSize.DND, 0)
        icon_multiple = Gtk.IconTheme.get_default().load_icon(
            'gtk-dnd-multiple', Gtk.IconSize.DND, 0)

        src_target = DragTarget(
            name="torrent_ids",
            scope=Gtk.TargetFlags.SAME_APP,
            action=Gdk.DragAction.MOVE,
            data_func=load_ids,
        )

        self._dnd_src_proxy = TreeViewDragSourceProxy(self._view.treeview,
                                                      get_drag_icon,
                                                      on_drag_start)
        self._dnd_src_proxy.add_target(src_target)

        if __debug__: RT.register(src_target, __name__)
        if __debug__: RT.register(self._dnd_src_proxy, __name__)
Example #44
0
    def __init__(self, plugin_name):

        RT.logger.setLevel(logging.INFO)
        if __debug__: RT.register(self)

        super(GtkUI, self).__init__(plugin_name)

        self.initialized = False

        self.config = None

        self.store = LabelStore()
        self.last_updated = None
        self._tries = 0
        self._calls = []

        self._extensions = []

        self._update_funcs = []
        self._cleanup_funcs = []
Example #45
0
  def __init__(self, plugin_name):

    RT.logger.setLevel(logging.INFO)
    if __debug__: RT.register(self)

    super(GtkUI, self).__init__(plugin_name)

    self.initialized = False

    self.config = None

    self.store = LabelStore()
    self.last_updated = None
    self._tries = 0
    self._calls = []

    self._extensions = []

    self._update_funcs = []
    self._cleanup_funcs = []
    def __init__(self, filename, root, attr_prefix=""):

        self._model = None
        self._root_widget = None
        self._widgets = []

        self._attr_prefix = attr_prefix

        self._model = gtk.glade.XML(filename, root)
        if __debug__: RT.register(self._model, __name__)

        self._root_widget = self._model.get_widget(root)

        self._widgets = self._model.get_widget_prefix("")
        for widget in self._widgets:
            if __debug__: RT.register(widget, __name__)

            name = self._attr_prefix + widget.get_name()
            if not hasattr(self, name):
                setattr(self, name, widget)
  def __init__(self, filename, root, attr_prefix=""):

    self._model = None
    self._root_widget = None
    self._widgets = []

    self._attr_prefix = attr_prefix

    self._model = gtk.glade.XML(filename, root)
    if __debug__: RT.register(self._model, __name__)

    self._root_widget = self._model.get_widget(root)

    self._widgets = self._model.get_widget_prefix("")
    for widget in self._widgets:
      if __debug__: RT.register(widget, __name__)

      name = self._attr_prefix + widget.get_name()
      if not hasattr(self, name):
        setattr(self, name, widget)
    def __init__(self, homogeneous=False, row_spacing=0, column_spacing=0):

        super(AutolabelBox, self).__init__(homogeneous, row_spacing,
                                           column_spacing)

        prop_store = labelplus.gtkui.common.gtklib.liststore_create(
            str, [_(x) for x in PROPS])
        op_store = labelplus.gtkui.common.gtklib.liststore_create(
            str, [_(x) for x in OPS])
        case_store = labelplus.gtkui.common.gtklib.liststore_create(
            str, [_(x) for x in CASES])

        if __debug__: RT.register(prop_store, __name__)
        if __debug__: RT.register(op_store, __name__)
        if __debug__: RT.register(case_store, __name__)

        self.add_combobox_column(prop_store)
        self.add_combobox_column(op_store)
        self.add_combobox_column(case_store)
        self.add_entry_column(expand=True)

        # Determine minimum width
        row = self.add_row()
        self.show()
        size = self.size_request()
        self.remove(row)
        self.set_size_request(size[0], -1)
Example #49
0
  def __init__(self, plugin):

    self._plugin = plugin
    self._filterview = deluge.component.get("FilterTreeView")

    self._state = \
      self._plugin.config["daemon"][self._plugin.daemon]["sidebar_state"]

    self._store = None
    self._tree = None
    self._menu = None

    self._dnd_src_proxy = None
    self._dnd_dest_proxy = None

    self._handlers = []

    try:
      self._store = plugin.store.copy()
      if __debug__: RT.register(self._store, __name__)

      log.debug("Setting up widgets...")
      self._create_label_tree()

      log.debug("Installing widgets...")
      self._install_label_tree()
      self._register_handlers()
      self._enable_dnd()

      log.debug("Loading state...")
      self._load_state()
      self._scroll_to_nearest_id(self._state["selected"])

      log.debug("Creating menu...")
      self._create_menu()

      self._plugin.register_update_func(self.update_store)
    except:
      self.unload()
      raise
Example #50
0
    def __init__(self, plugin):

        self._plugin = plugin
        self._filterview = deluge.component.get("FilterTreeView")

        self._state = \
          self._plugin.config["daemon"][self._plugin.daemon]["sidebar_state"]

        self._store = None
        self._tree = None
        self._menu = None

        self._dnd_src_proxy = None
        self._dnd_dest_proxy = None

        self._handlers = []

        try:
            self._store = plugin.store.copy()
            if __debug__: RT.register(self._store, __name__)

            log.debug("Setting up widgets...")
            self._create_label_tree()

            log.debug("Installing widgets...")
            self._install_label_tree()
            self._register_handlers()
            self._enable_dnd()

            log.debug("Loading state...")
            self._load_state()
            self._scroll_to_nearest_id(self._state["selected"])

            log.debug("Creating menu...")
            self._create_menu()

            self._plugin.register_update_func(self.update_store)
        except:
            self.unload()
            raise
  def _create_menu(self):

    def on_show_menu(widget):

      parent_id = labelplus.common.label.get_parent_id(self._label_id)
      if parent_id in self._store:
        items[0].show()
        items[1].show()
      else:
        items[0].hide()
        items[1].hide()


    def on_activate(widget, label_id):

      self._request_options(label_id)


    def on_activate_parent(widget):

      parent_id = labelplus.common.label.get_parent_id(self._label_id)
      self._request_options(parent_id)


    self._menu = LabelSelectionMenu(self._store.model, on_activate)
    if __debug__: RT.register(self._menu, __name__)

    items = labelplus.gtkui.common.gtklib.menu_add_items(self._menu, 0,
      (
        ((gtk.MenuItem, _(STR_PARENT)), on_activate_parent),
        ((gtk.SeparatorMenuItem,),),
      )
    )

    if __debug__:
      for item in items:
        RT.register(item, __name__)

    self._menu.connect("show", on_show_menu)
    self._menu.show_all()
  def __init__(self, homogeneous=False, row_spacing=0, column_spacing=0):

    super(AutolabelBox, self).__init__(homogeneous, row_spacing,
      column_spacing)

    prop_store = labelplus.gtkui.common.gtklib.liststore_create(str,
      [_(x) for x in PROPS])
    op_store = labelplus.gtkui.common.gtklib.liststore_create(str,
      [_(x) for x in OPS])
    case_store = labelplus.gtkui.common.gtklib.liststore_create(str,
      [_(x) for x in CASES])

    if __debug__: RT.register(prop_store, __name__)
    if __debug__: RT.register(op_store, __name__)
    if __debug__: RT.register(case_store, __name__)

    self.add_combobox_column(prop_store)
    self.add_combobox_column(op_store)
    self.add_combobox_column(case_store)
    self.add_entry_column(expand=True)

    # Determine minimum width
    row = self.add_row()
    self.show()
    size = self.size_request()
    self.remove(row)
    self.set_size_request(size[0], -1)
  def _create_item(self, model, iter_, menu, on_activate, headers, sub_items):

    id_, data = model[iter_]
    name = data["name"]

    item = gtk.MenuItem(name)
    item.set_name(id_)
    menu.append(item)
    self._items.append(item)
    if __debug__: RT.register(item, __name__)

    children = labelplus.gtkui.common.gtklib.treemodel_get_children(model,
      iter_)

    if not children and not sub_items:
      if on_activate:
        item.connect("activate", on_activate, id_)
    else:
      submenu = gtk.Menu()
      item.set_submenu(submenu)
      self._menus.append(submenu)
      if __debug__: RT.register(submenu, __name__)

      if headers:
        self._items += labelplus.gtkui.common.gtklib.menu_add_items(submenu,
          -1, (((gtk.MenuItem, name), on_activate, id_),))
        self._items.append(labelplus.gtkui.common.gtklib.menu_add_separator(
          submenu))

      if sub_items:
        self._items += labelplus.gtkui.common.gtklib.menu_add_items(submenu,
          -1, sub_items, id_)
        if children:
          self._items.append(labelplus.gtkui.common.gtklib.menu_add_separator(
            submenu))

      for child in children:
        self._create_item(model, child, submenu, on_activate, headers,
          sub_items)
  def _create_menu(self):

    def on_show_menu(menu):

      parent_id = labelplus.common.label.get_parent_id(self._parent_id)
      if parent_id in self._store:
        items[0].show()
      else:
        items[0].hide()


    def on_activate(widget, parent_id):

      self._select_parent_label(parent_id)


    def on_activate_parent(widget):

      parent_id = labelplus.common.label.get_parent_id(self._parent_id)
      self._select_parent_label(parent_id)


    root_items = (((Gtk.MenuItem, {'label': _(STR_NONE)}), on_activate, ID_NULL),)

    self._menu = LabelSelectionMenu(self._store.model, on_activate,
      root_items=root_items)
    if __debug__: RT.register(self._menu, __name__)

    items = labelplus.gtkui.common.gtklib.menu_add_items(self._menu, 1,
            (((Gtk.MenuItem, {'label': _(STR_PARENT)}), on_activate_parent),))
    if __debug__: RT.register(items[0], __name__)

    self._menu.connect("show", on_show_menu)
    self._menu.show_all()

    if self._type == self.TYPE_RENAME:
      item = self._menu.get_label_item(self._label_id)
      if item:
        item.set_sensitive(False)
  def _create_menu(self):

    def on_show_menu(menu):

      parent_id = labelplus.common.label.get_parent_id(self._parent_id)
      if parent_id in self._store:
        items[0].show()
      else:
        items[0].hide()


    def on_activate(widget, parent_id):

      self._select_parent_label(parent_id)


    def on_activate_parent(widget):

      parent_id = labelplus.common.label.get_parent_id(self._parent_id)
      self._select_parent_label(parent_id)


    root_items = (((gtk.MenuItem, _(STR_NONE)), on_activate, ID_NULL),)

    self._menu = LabelSelectionMenu(self._store.model, on_activate,
      root_items=root_items)
    if __debug__: RT.register(self._menu, __name__)

    items = labelplus.gtkui.common.gtklib.menu_add_items(self._menu, 1,
      (((gtk.MenuItem, _(STR_PARENT)), on_activate_parent),))
    if __debug__: RT.register(items[0], __name__)

    self._menu.connect("show", on_show_menu)
    self._menu.show_all()

    if self._type == self.TYPE_RENAME:
      item = self._menu.get_label_item(self._label_id)
      if item:
        item.set_sensitive(False)
  def _do_open_file_dialog(self, widget):

    def on_response(widget, response):

      if self.valid and response == gtk.RESPONSE_OK:
        txt_widget.set_text(widget.get_filename())

      widget.destroy()


    path_type = widget.name[widget.name.index("_")+1:widget.name.rindex("_")]
    txt_widget = self.__dict__["_txt_%s_path" % path_type]

    dialog = gtk.FileChooserDialog(_(TITLE_SELECT_FOLDER),
      self._blk_preferences.get_toplevel(),
      gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
      (
        gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
        gtk.STOCK_OK, gtk.RESPONSE_OK,
      )
    )
    if __debug__: RT.register(dialog, __name__)

    dialog.set_destroy_with_parent(True)
    dialog.connect("response", on_response)

    path = txt_widget.get_text()
    if not os.path.exists(path):
      path = ""

    dialog.set_filename(path)
    dialog.show_all()

    widgets = labelplus.gtkui.common.gtklib.widget_get_descendents(dialog,
      (gtk.ToggleButton,), 1)
    if widgets:
      location_toggle = widgets[0]
      location_toggle.set_active(False)
Example #57
0
    def _on_button_pressed(self, widget, event):

        x, y = event.get_coords()
        path_info = widget.get_path_at_pos(int(x), int(y))
        if not path_info:
            return

        path, column, cell_x, cell_y = path_info
        id, data = widget.get_model()[path]

        if event.button == 1 and event.type == Gdk.EventType._2BUTTON_PRESS:
            if self._store.is_user_label(id):
                try:
                    dialog = LabelOptionsDialog(self._plugin, id)
                    if __debug__: RT.register(dialog, __name__)
                    dialog.show()
                except:
                    log.exception("Error initializing LabelOptionsDialog")
                    pass
        elif event.button == 3:
            self._menu.set_title(id)
            self._menu.popup(None, None, None, None, event.button, event.time)
            return True
Example #58
0
  def _on_button_pressed(self, widget, event):

    x, y = event.get_coords()
    path_info = widget.get_path_at_pos(int(x), int(y))
    if not path_info:
      return

    path, column, cell_x, cell_y = path_info
    id, data = widget.get_model()[path]

    if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS:
      if self._store.is_user_label(id):
        try:
          dialog = LabelOptionsDialog(self._plugin, id)
          if __debug__: RT.register(dialog, __name__)
          dialog.show()
        except:
          log.exception("Error initializing LabelOptionsDialog")
          pass
    elif event.button == 3:
      self._menu.set_title(id)
      self._menu.popup(None, None, None, event.button, event.time)
      return True
  def _on_view_button_press(self, widget, event):

    x, y = event.get_coords()
    path_info = widget.get_path_at_pos(int(x), int(y))
    if not path_info:
      self._view.treeview.get_selection().unselect_all()
      if event.button == 3:
        self._alt_menu.popup(None, None, None, event.button, event.time)
      return

    if event.button == 1 and event.type == gtk.gdk._2BUTTON_PRESS:
      if path_info[1] == self._get_view_column():
        ids = self.get_selected_torrent_labels()
        if self.is_filter(ids):
          try:
            dialog = LabelOptionsDialog(self._plugin, ids[0])
            if __debug__: RT.register(dialog, __name__)
            dialog.show()
          except:
            log.exception("Error initializing LabelOptionsDialog")
            pass
        else:
          self._set_filter_sync_sidebar(ids)
    def __init__(self, plugin):

        self._plugin = plugin
        self._dialog = deluge.component.get("AddTorrentDialog")
        self._view = self._dialog.listview_torrents

        self._store = None
        self._menu = None

        self._mappings = {}
        self._handlers = []

        super(AddTorrentExt, self).__init__(self.GLADE_FILE, self.ROOT_WIDGET,
                                            "_")

        try:
            self._store = plugin.store.copy()
            if __debug__: RT.register(self._store, __name__)

            log.debug("Setting up widgets...")
            self._setup_widgets()

            log.debug("Installing widgets...")
            self._install_widgets()
            self._register_handlers()

            log.debug("Loading state...")
            self._display_torrent_label(None)
            self._update_sensitivity()

            log.debug("Creating menu...")
            self._create_menu()

            self._plugin.register_update_func(self.update_store)
        except:
            self.unload()
            raise