## # Copyright 2007 Steve 'Tarka' Smith (tarka@internode.on.net) # Distributed under the same terms as Deluge ## import gobject, gtk import BlocklistImport class GTKConfig(gtk.Dialog): def __init__(self, plugin): gtk.Dialog.__init__(self, title="Blocklist Config", flags=gtk.DIALOG_MODAL, buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) # Setup self.set_border_width(12) self.vbox.set_spacing(6) # List source label = gtk.Label() label.set_markup('Blocklist URL') self.url = gtk.Entry() ls = gtk.ListStore(gobject.TYPE_STRING, # Long name gobject.TYPE_STRING) # Short name for k in BlocklistImport.readers.keys(): ls.append([BlocklistImport.readers[k][0], k]) cell = gtk.CellRendererText() cell.set_property('xpad', 5) # padding for status text self.listtype = gtk.ComboBox(model=ls) self.listtype.pack_start(cell, False) self.listtype.add_attribute(cell, 'text', 0) self.listtype.set_active(0) hbox = gtk.HBox(False, 6) hbox.pack_start(label) hbox.pack_start(self.url) self.vbox.pack_start(self.listtype) self.vbox.pack_start(hbox) # Load on start self.load_on_start = gtk.CheckButton("Download on start") self.vbox.pack_start(self.load_on_start) self.connect('response', self.ok) self.connect('close', self.cancel) self.hide_all() self.plugin = plugin def ok(self, dialog, response): self.hide_all() if response != gtk.RESPONSE_ACCEPT: self.cancel(dialog) return ls = self.listtype.get_model() ltype = ls[self.listtype.get_active()][1] url = self.url.get_text() los = self.load_on_start.get_active() self.plugin.setconfig(url, los, ltype) def cancel(self, dialog): self.hide_all() def start(self): self.show_all() class GTKProgress(gtk.Dialog): def __init__(self, plugin): gtk.Dialog.__init__(self, title="Loading Blocklist", flags=gtk.DIALOG_MODAL, buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT)) self.plugin = plugin # Setup self.set_border_width(12) self.vbox.set_spacing(6) label = gtk.Label() label.set_markup('Loading and installing blocklist') self.vbox.pack_start(label) self.progress = gtk.ProgressBar() self.vbox.pack_start(self.progress) self.connect('response', self.response) self.connect('close', self.cancel) self.hide_all() def start_download(self): self.progress.set_text("Downloading") self.update() def download_prog(self, fract): if fract > 1.0: fract = 1.0 self.progress.set_fraction(fract) self.update() def start_import(self): self.progress.set_text("Importing") self.progress.set_pulse_step(0.0075) self.update() def import_prog(self, text=None): if text: self.progress.set_text(text) self.progress.pulse() self.update() def end_import(self): self.progress.set_text("Complete") self.progress.set_fraction(1.0) self.update() def response(self, dialog, response): self.cancel(dialog) def cancel(self, dialog): print "Cancelling" self.plugin.cancelled = True self.hide_all() def start(self): self.show_all() self.update() def stop(self): self.hide_all() def update(self): while gtk.events_pending(): not gtk.main_iteration(block=True) class GTKError(gtk.Dialog): def __init__(self, message): gtk.Dialog.__init__(self, title="Error", flags=gtk.DIALOG_MODAL, buttons=(gtk.STOCK_OK, gtk.RESPONSE_ACCEPT)) # Setup self.set_border_width(12) self.vbox.set_spacing(6) # List source label = gtk.Label() label.set_text(message) self.vbox.pack_start(label) self.connect('response', self.ok) self.connect('close', self.cancel) self.show_all() def ok(self, dialog, response): self.hide_all() def cancel(self, dialog): self.hide_all()