2008-01-06 19:53:47 +00:00

258 lines
10 KiB
Python
Executable File

# -*- coding: utf-8 -*-
#
# bookmark.py
#
# Copyright (C) Marcos Pinto 2007 <markybob@gmail.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, write to:
# The Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301, USA.
#
# In addition, as a special exception, the copyright holders give
# permission to link the code of portions of this program with the OpenSSL
# library.
# You must obey the GNU General Public License in all respects for all of
# the code used other than OpenSSL. If you modify file(s) with this
# exception, you may extend this exception to your version of the file(s),
# but you are not obligated to do so. If you do not wish to do so, delete
# this exception statement from your version. If you delete this exception
# statement from all source files in the program, then also delete it here.
import cPickle
import os.path
import pygtk
pygtk.require("2.0")
import gtk.glade
import deluge.common
class BookmarkManager:
"""class builds and displays our internal bookmark manager"""
def __init__(self, path, parent, toolbutton):
"""show bookmark manager"""
self.bookmarks = []
self.toolbutton = toolbutton
self.menu = gtk.Menu()
self.parent = parent
self.widgets = gtk.glade.XML(path + "/list_bookmarks.glade")
self.list_dlg = self.widgets.get_widget("list_bookmarks_dialog")
self.treeview = self.widgets.get_widget("bookmarks_treeview")
self.add_bookmark_dialog = self.widgets.get_widget("add_bookmark_dialog")
self.edit_bookmark_dialog = self.widgets.get_widget("edit_bookmark_dialog")
if deluge.common.windows_check():
self.add_bookmark_dialog.set_position(gtk.WIN_POS_CENTER_ALWAYS)
self.edit_bookmark_dialog.set_position(gtk.WIN_POS_CENTER_ALWAYS)
else:
self.list_dlg.set_icon(deluge.common.get_logo(18))
self.edit_bookmark_dialog.set_icon(deluge.common.get_logo(18))
self.add_bookmark_dialog.set_icon(deluge.common.get_logo(18))
self.list_dlg.set_transient_for(self.parent.window)
self.signal_dic = { "on_button_cancel_clicked" : self.on_button_cancel_clicked,
"on_button_ok_clicked" : self.on_button_ok_clicked,
"on_button_add_clicked" : self.on_button_add_clicked,
"on_button_edit_clicked" : self.on_button_edit_clicked,
"on_button_remove_clicked" : self.on_button_remove_clicked,
"on_button_add_ok_clicked" : self.on_button_add_ok_clicked,
"on_button_add_cancel_clicked" : self.on_button_add_cancel_clicked,
"on_button_edit_ok_clicked" : self.on_button_edit_ok_clicked,
"on_button_edit_cancel_clicked" : self.on_button_edit_cancel_clicked,
"quit" : self.on_button_cancel_clicked
}
self.widgets.signal_autoconnect(self.signal_dic)
# Create a liststore for tier, url
self.liststore = gtk.ListStore(str, str)
# Create the columns
self.treeview.append_column(
gtk.TreeViewColumn("Name", gtk.CellRendererText(), text=0))
self.treeview.append_column(
gtk.TreeViewColumn("URL", gtk.CellRendererText(), text=1))
self.treeview.set_model(self.liststore)
self.liststore.set_sort_column_id(0, gtk.SORT_ASCENDING)
self.load_bookmarks()
self.build_menu()
def show(self):
self.list_dlg.show()
def hide(self):
self.list_dlg.hide()
if deluge.common.windows_check():
path = os.path.join(deluge.common.CONFIG_DIR, "bookmarks.save")
else:
path = os.path.join(deluge.common.CONFIG_DIR, "mozilla", "bookmarks.save")
try:
bookmark_file = open(path, "wb")
cPickle.dump(self.bookmarks, bookmark_file)
bookmark_file.close()
except Exception, e:
print "Unable to save bookmarks file: %s", e
def load_bookmarks(self):
bookmarks = None
if deluge.common.windows_check():
path = os.path.join(deluge.common.CONFIG_DIR, "bookmarks.save")
else:
path = os.path.join(deluge.common.CONFIG_DIR, "mozilla", "bookmarks.save")
if os.path.exists(path):
try:
bookmark_file = open(path, "rb")
bookmarks = cPickle.load(bookmark_file)
bookmark_file.close()
except Exception, e:
print "Unable to load bookmarks file: %s", e
if bookmarks == None:
return
self.liststore.clear()
for bookmark in bookmarks:
self.liststore.append([bookmark["name"], bookmark["url"]])
self.bookmarks = bookmarks
self.build_menu()
def build_menu(self):
"""Builds the bookmark menu"""
self.menu = gtk.Menu()
menuitem = gtk.MenuItem("Bookmark This Page...")
menuitem.connect("activate", self.menuitem_activate)
self.menu.append(menuitem)
menuitem = gtk.SeparatorMenuItem()
self.menu.append(menuitem)
# Iterate through the bookmark list and make menuitems for them
def add_menuitem(model, path, row, data):
menuitem = gtk.MenuItem(model.get_value(row, 0))
menuitem.connect("activate", self.menuitem_activate)
self.menu.append(menuitem)
self.liststore.foreach(add_menuitem, None)
self.menu.show_all()
# Set the new menu on the toolbutton
self.toolbutton.set_menu(self.menu)
def add_bookmark(self, name, url):
"""Adds a bookmark to the list"""
self.liststore.append([name, url])
self.build_menu()
def get_selected(self):
"""Returns the selected bookmark"""
return self.treeview.get_selection().get_selected()[1]
def on_button_add_clicked(self, widget):
# Show the add bookmark dialog
self.add_bookmark_dialog.show()
self.widgets.get_widget("entry_add_name").grab_focus()
def on_button_edit_clicked(self, widget):
# Show the edit bookmark dialog
selected = self.get_selected()
if selected != None:
self.edit_bookmark_dialog.show()
self.widgets.get_widget("entry_edit_name").grab_focus()
self.widgets.get_widget("entry_edit_name").set_text(self.liststore.\
get_value(selected, 0))
self.widgets.get_widget("entry_edit_url").set_text(self.liststore.\
get_value(selected, 1))
def on_button_add_ok_clicked(self, widget):
# Get values from the entry widgets
name = self.widgets.get_widget("entry_add_name").get_text()
url = self.widgets.get_widget("entry_add_url").get_text()
self.add_bookmark(name, url)
# Clear the entry widget and hide the dialog
self.widgets.get_widget("entry_add_name").set_text("")
self.widgets.get_widget("entry_add_url").set_text("")
self.add_bookmark_dialog.hide()
def on_button_add_cancel_clicked(self, widget, arg=None):
# Clear the entry widget and hide the dialog
self.widgets.get_widget("entry_add_name").set_text("")
self.widgets.get_widget("entry_add_url").set_text("")
self.add_bookmark_dialog.hide()
if arg != None:
return True
def on_button_edit_ok_clicked(self, widget):
# Get values from the entry widgets
name = self.widgets.get_widget("entry_edit_name").get_text()
url = self.widgets.get_widget("entry_edit_url").get_text()
selected = self.get_selected()
if selected != None:
self.liststore.remove(selected)
self.add_bookmark(name, url)
self.build_menu()
# Clear the entry widget and hide the dialog
self.widgets.get_widget("entry_edit_name").set_text("")
self.widgets.get_widget("entry_edit_url").set_text("")
self.edit_bookmark_dialog.hide()
def on_button_edit_cancel_clicked(self, widget, arg=None):
# Clear the entry widget and hide the dialog
self.widgets.get_widget("entry_edit_name").set_text("")
self.widgets.get_widget("entry_edit_url").set_text("")
self.edit_bookmark_dialog.hide()
if arg != None:
return True
def on_button_remove_clicked(self, widget):
selected = self.get_selected()
if selected != None:
self.liststore.remove(selected)
self.build_menu()
def on_button_cancel_clicked(self, widget, arg=None):
self.load_bookmarks()
self.hide()
if arg != None:
return True
def on_button_ok_clicked(self, widget):
def each(model, path, iter, data):
bookmark = {}
bookmark["name"] = model.get_value(iter, 0)
bookmark["url"] = model.get_value(iter, 1)
self.bookmarks.append(bookmark)
self.bookmarks = []
self.liststore.foreach(each, None)
self.hide()
def menuitem_activate(self, widget):
text = widget.get_child().get_text()
def load_url(model, path, row, data):
if model.get_value(row, 0) == text:
# Grab the URL and load it
url = model.get_value(row, 1)
self.parent.txt_url.set_text(url)
self.parent.load_url()
if text == "Bookmark This Page...":
# Show the add bookmark dialog
self.add_bookmark_dialog.show()
self.widgets.get_widget("entry_add_name").grab_focus()
self.widgets.get_widget("entry_add_url").set_text(
self.parent.txt_url.get_text())
self.on_button_ok_clicked(widget)
return
self.liststore.foreach(load_url, None)