All pastes #36639 Raw Edit

tools dialog

public python v1 · immutable
#36639 ·published 2006-01-12 23:21 UTC
rendered paste body
import gtkfrom gtk import gladeimport os.pathfrom gettext import gettext as _from toolstree import ToolsTreefrom elementtree import ElementTree as et#import toolstree.ToolsTree as ToolsTreeGLADE_FILE = os.path.join(os.path.dirname(__file__), "tools.glade")class Borg:	__shared_state = {}	def __init__(self):		self.__dict__ = self.__shared_stateclass ToolsManager(Borg):	LABEL_COLUMN = 0	NODE_COLUMN  = 1	def __init__(self):		Borg.__init__(self)				# Load the "main-window" widget from the glade file.		self.ui = glade.XML(GLADE_FILE, 'tool-manager-dialog')		self.ui.signal_autoconnect(self)		self.dialog = self.ui.get_widget('tool-manager-dialog')		self.view = self.ui.get_widget('view')		self.__init_tools_model()		self.__init_tools_view()				self.dialog.show()	def __init_tools_model(self):		self.tools = ToolsTree()		self.model = gtk.ListStore(str, object)		self.model.set_sort_column_id(self.LABEL_COLUMN, gtk.SORT_ASCENDING)		self.view.set_model(self.model)		for item in self.tools:			piter = self.model.append([item.get('label'), item])	def __init_tools_view(self):		# Tools column		column = gtk.TreeViewColumn('Tools')		renderer = gtk.CellRendererText()		column.pack_start(renderer, False)		column.set_attributes(renderer, text = self.LABEL_COLUMN)		renderer.set_property('editable', True)		self.view.append_column(column)				renderer.connect('edited', self.on_tools_label_cell_edited)		self.view.get_selection().connect('changed', self.on_tools_selection_changed, None)		def __getitem__(self, key):		# Convenience function to get a widget from its name		return self.ui.get_widget(key)		def get_selected_tool(self):		model, piter = self.view.get_selection().get_selected()				if piter is not None:			return piter, model.get_value(piter, self.NODE_COLUMN);		else:			return None, None		def on_use_file_directory_toggled(self, check):		self['working-directory'].set_sensitive(not check.get_active())		def on_new_tool_button_clicked(self, button):		node = et.Element('tool');		node.set('label', _('New tool'))		self.tools.root.append(node)		piter = self.model.append([node.get('label'), node])		self.view.set_cursor(self.model.get_path(piter), 		                     self.view.get_column(self.LABEL_COLUMN),		                     True)		def on_remove_tool_button_clicked(self, button):		piter, node = self.get_selected_tool()		self.model.remove(piter)		del node		def on_tools_label_cell_edited(self, cell, path, new_text):		if new_text != '':			piter = self.model.get_iter(path)			node = self.model.get_value(piter, self.NODE_COLUMN)			node.set("label", new_text)			self.model.set(piter, self.LABEL_COLUMN, new_text)	def on_tools_selection_changed(self, selection, userdata):		piter, node = self.get_selected_tool()				self['remove-tool-button'].set_sensitive(piter is not None)				if node is not None:			self['description'].set_text(node.get('description'))			self['shortcut-key'].set_text(node.get('shortcut-key'))			self['command-line'].set_text(node.text)			self['capture-stdout'].set_active(node.get('capture-stdout') == 'yes')			self['capture-stderr'].set_active(node.get('capture-stderr') == 'yes')			self['input'].set_active(int(node.get('input')))			self['output'].set_active(int(node.get('output')))			self['use-file-directory'].set_active(node.get('use-file-directory') == 'yes')		else:			# :TODO: Config panel should be grayed			pass			def on_dialog_snippets_response(self, dialog, response):		if response == gtk.RESPONSE_HELP:			# Show help			return		# :TODO: Save size and pane position		# self.save_metrics()		self.dialog.destroy()		self.dialog = None		self.tools.save()		self.tools = None