# An example plugin for use with Deluge

import deluge.common, deluge.pref, gtk, gtk.glade

# This plugin is intended to be used with Deluge's default GTK interface
class plugin_Example: # The plugin's class
	## Your plugin's contructor should follow this format
	## path				= A string containing the path to the plugin
	## deluge_core		= The active instance of the Deluge Manager
	## deluge_interface = The active instance of the Deluge Interface
	def __init__(self, path, deluge_core, deluge_interface):
		# Save the path, interface, and core so they can be used later
		self.path = path
		self.core = deluge_core
		self.interface = deluge_interface

		# Create an options file and try to load existing Values
		self.config_file = deluge.common.CONFIG_DIR + "/example.conf"
		self.config = deluge.pref.Preferences()
		try:
			self.config.load(self.config_file)
		except IOError:
			# File does not exist
			pass
		
		# Extract the configuration dialog from the gladefile
		self.glade = gtk.glade.XML(path + "/example.glade")
		self.dialog = self.glade.get_widget("dialog")
		self.dialog.set_icon_from_file(self.path + "/example-plugin.png")
		# Access the interface's toolbar
		self.toolbar = self.interface.toolbar
		# Make a toolbar button
		icon = gtk.Image()
		icon.set_from_file(self.path + "/example-plugin.png") # Toolbar items should be 22x22 pixel images
		self.button = gtk.ToolButton(icon_widget=icon, label="Example Plugin")
		self.button.connect("clicked", self.clicked) # Connect the signal handler for the button
		self.toolbar.add(self.button) # Add button to toolbar
		self.button.show_all() # Show the button
	
	
	## unload is called when the plugin is removed or Deluge is shut down
	def unload(self):
		self.toolbar.remove(self.button) # Remove the button from the toolbar
		self.config.save(self.config_file)
	
	## update will be called every UPDATE_INTERVAL (usually about 1 second)
	def update(self):
		# As this plugin doesn't need to do anything every interval, this
		# function will remain empty
		pass

	## This will be only called if your plugin is configurable
	def configure(self):
		entry1 = self.glade.get_widget("entry1")
		entry2 = self.glade.get_widget("entry2")
		try:
			entry1.set_text(self.config.get("option1"))
			entry2.set_text(self.config.get("option2"))
		except KeyError:
			entry1.set_text("")
			entry2.set_text("")
		self.dialog.show()
		response = self.dialog.run()
		self.dialog.hide()
		if response:
			self.config.set("option1", entry1.get_text())
			self.config.set("option2", entry2.get_text())
		
		
	
	## This will be called whenever self.button is clicked
	def clicked(self, button):
		# Build a dialog from scratch rather than from a glade file
		dialog = gtk.Dialog(title="Example Plugin", parent=self.interface.window,
				buttons=(gtk.STOCK_OK, 0))
		dialog.set_icon_from_file(self.path + "/example-plugin.png")
		try:
			text = 	"This is a popup notification from Example Plugin\n" + \
					"Your value for option1 is %s\n"%self.config.get("option1") + \
					"and option2 is %s"%self.config.get("option2")
		except KeyError:
			text =  "This is a popup notification from Example Plugin\n" + \
					"If you had set options by configuring this plugin,\n" + \
					"they would appear here"
		label = gtk.Label(text)
		dialog.vbox.pack_start(label)			
		
		dialog.show_all()
		dialog.run()
		dialog.hide()
		dialog.destroy()