Example #1
0
	def __init__(self, driver, interface, iface_name, compile, show_versions = False):
		self.driver = driver

		widgets = Template('interface_properties')

		self.interface = interface

		window = widgets.get_widget('interface_properties')
		self.window = window
		window.set_title(_('Properties for %s') % iface_name)
		window.set_default_size(-1, gtk.gdk.screen_height() / 3)

		self.compile_button = widgets.get_widget('compile')
		self.compile_button.connect('clicked', lambda b: compile(interface))
		window.set_default_response(gtk.RESPONSE_CANCEL)

		def response(dialog, resp):
			if resp == gtk.RESPONSE_CANCEL:
				window.destroy()
			elif resp == gtk.RESPONSE_HELP:
				properties_help.display()
		window.connect('response', response)

		notebook = widgets.get_widget('interface_notebook')
		assert notebook

		self.feeds = Feeds(driver.config, interface, widgets)

		stability = widgets.get_widget('preferred_stability')

		self.stability = stability
		stability.connect('changed', lambda *args: self.ignore_stability_change or self.set_stability_policy())

		self.use_list = ImplementationList(driver, interface, widgets)

		self.feeds.tv.grab_focus()

		window.connect('destroy', lambda s: driver.watchers.remove(self.update))
		driver.watchers.append(self.update)
		self.update()

		if show_versions:
			notebook.next_page()
Example #2
0
class Properties(object):
	interface = None
	use_list = None
	window = None
	driver = None
	ignore_stability_change = True

	def __init__(self, driver, interface, iface_name, compile, show_versions = False):
		self.driver = driver

		widgets = Template('interface_properties')

		self.interface = interface

		window = widgets.get_widget('interface_properties')
		self.window = window
		window.set_title(_('Properties for %s') % iface_name)
		window.set_default_size(-1, gtk.gdk.screen_height() / 3)

		self.compile_button = widgets.get_widget('compile')
		self.compile_button.connect('clicked', lambda b: compile(interface))
		window.set_default_response(gtk.RESPONSE_CANCEL)

		def response(dialog, resp):
			if resp == gtk.RESPONSE_CANCEL:
				window.destroy()
			elif resp == gtk.RESPONSE_HELP:
				properties_help.display()
		window.connect('response', response)

		notebook = widgets.get_widget('interface_notebook')
		assert notebook

		self.feeds = Feeds(driver.config, interface, widgets)

		stability = widgets.get_widget('preferred_stability')

		self.stability = stability
		stability.connect('changed', lambda *args: self.ignore_stability_change or self.set_stability_policy())

		self.use_list = ImplementationList(driver, interface, widgets)

		self.feeds.tv.grab_focus()

		window.connect('destroy', lambda s: driver.watchers.remove(self.update))
		driver.watchers.append(self.update)
		self.update()

		if show_versions:
			notebook.next_page()

	@tasks.async
	def set_stability_policy(self):
		try:
			i = self.stability.get_active()
			if i == 0:
				new_stability = None
			else:
				new_stability = ['stable', 'testing', 'developer'][i-1]
			blocker = slave.invoke_master(["set-stability-policy", self.interface.uri, new_stability])
			yield blocker
			tasks.check(blocker)
			from zeroinstall.gui import main
			main.recalculate()
		except Exception as ex:
			warning("set_stability_policy", exc_info = ex)

	def show(self):
		self.window.show()

	def destroy(self):
		self.window.destroy()
	
	@tasks.async
	def update(self):
		try:
			blocker = slave.get_component_details(self.interface.uri)
			yield blocker
			tasks.check(blocker)
			self.details = blocker.result

			i = stability_to_combo_index[self.details['stability-policy']]
			self.ignore_stability_change = True
			self.stability.set_active(i)
			self.ignore_stability_change = False

			self.use_list.update(self.details)
			self.feeds.updated(self.details)
			self.compile_button.set_sensitive(self.details['may-compile'])
		except:
			warning("update failed", exc_info = True)