Esempio n. 1
0
	def config_setup(self):
		self.append = True
		for key in self.config.keys():

			pos = key.find('_')
			if key[:pos].lower() == 'display':
				driver = self.cfg_fetch_raw(self.config[key], 'driver', '').lower()
				model = self.cfg_fetch_raw(self.config[key], 'model', '').lower()
				if driver == 'crystalfontz':
					self.CF = DrvCrystalfontz.get(model, self, config=self.config)
				elif driver == 'x11':
					self.CF = DrvX11(self, config=self.config)
				elif driver == "pertelian":
					self.CF = DrvPertelian(self, config=self.config)
				else:
					continue
				self.CF.name  = key[pos+1:]
				self.modules[key] = self.current_display

		for key in self.modules.keys():
			device = self.displays[self.modules[key]]
			device.CFGSetup(key)
			device.Connect()
			device.SetupDevice()
			device.BuildLayouts()
			device.StartLayout()
Esempio n. 2
0
class App(gobject.GObject, CFSensors, CFDmesg, CFMain, CFPreferences, CFLCD, CFDisplay, CFWidget, CFLayout, CFG):
	def __init__( self ):
		self.__gobject_init__()
		self.alive = True
		self.debugging = True
		self.displays = [] # List of devices
		self.current_display = -1 # Current device, -1 means no devices
		self.append = True
		self.modules = {}
		self.signals = []
		self.funcs = []
		self.windows = {}
		self.widget_template = {}
		for window in windows:
			self.windows[window] = False
		self.widgets = []
		self.current_window = ''
		self.special_chars_set_signal = gobject.signal_new("special-chars-set", Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self.layout_transition_finished_signal = gobject.signal_new("layout-transition-finished", Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self.special_char_changed_signal = gobject.signal_new("special-char-changed", Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_PYOBJECT])
		self.layout_change_before_signal = gobject.signal_new("layout-change-before", Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self.layout_change_after_signal = gobject.signal_new("layout-change-after", Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self.display_disconnected_signal = gobject.signal_new('display-disconnected', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self.display_disconnected_before_signal = gobject.signal_new('display-disconnected-before', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self.display_connected_signal = gobject.signal_new('display-connected', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self.display_changed_signal = gobject.signal_new('display-changed', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self.book_changed_signal = gobject.signal_new('book-changed', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self.page_changed_signal = gobject.signal_new('page-changed', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self.version_ready_signal = gobject.signal_new('version-ready', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self.contrast_backlight_ready_signal = gobject.signal_new('contrast-backlight-ready', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self.packet_ready_signal = gobject.signal_new('packet-ready', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_PYOBJECT])
		self.temp_packet_ready_signal = gobject.signal_new('temperature-packet-ready', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_PYOBJECT])
		self.fan_packet_ready_signal = gobject.signal_new('fan-packet-ready', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_INT])
		self.key_packet_ready_signal = gobject.signal_new('key-packet-ready', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_INT])
		#self.devices_ready_signal = gobject.signal_new('devices-ready', App, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ())
		self.dow_ready_signal = gobject.signal_new('dow-ready', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_INT])
		self.lcd_memory_ready_signal = gobject.signal_new('lcd-memory-ready', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_PYOBJECT])
		self._8bytes_packet_ready_signal = gobject.signal_new('8byte-packet-ready', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self._8bytes_fill_start_signal = gobject.signal_new('8byte-fill-start', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		self.fans_ready_signal = gobject.signal_new('fans-ready', Generic, gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [])
		CFDmesg.__init__(self)
		CFSensors.__init__(self)
		CFMain.__init__(self)
		CFPreferences.__init__(self)
		CFLCD.__init__(self)
		CFDisplay.__init__(self)
		CFWidget.__init__(self)
		CFLayout.__init__(self)
		#self.config = cfg_get()
		CFG.__init__(self)
		self.config_setup()

	def config_setup(self):
		self.append = True
		for key in self.config.keys():

			pos = key.find('_')
			if key[:pos].lower() == 'display':
				driver = self.cfg_fetch_raw(self.config[key], 'driver', '').lower()
				model = self.cfg_fetch_raw(self.config[key], 'model', '').lower()
				if driver == 'crystalfontz':
					self.CF = DrvCrystalfontz.get(model, self, config=self.config)
				elif driver == 'x11':
					self.CF = DrvX11(self, config=self.config)
				elif driver == "pertelian":
					self.CF = DrvPertelian(self, config=self.config)
				else:
					continue
				self.CF.name  = key[pos+1:]
				self.modules[key] = self.current_display

		for key in self.modules.keys():
			device = self.displays[self.modules[key]]
			device.CFGSetup(key)
			device.Connect()
			device.SetupDevice()
			device.BuildLayouts()
			device.StartLayout()

	def find_display(self, name):
		name = 'display_' + name
		if name in self.modules:
			return self.displays[self.modules[name]]
		return None
				
	def get_display(self):
		if self.current_display < 0 or self.current_display >= len(self.displays): return None
		return self.displays[self.current_display]

	def set_display(self, val):
		if self.current_display >= len(self.displays): return None
		self.disconnect_signals()
		if self.append or self.current_display < 0:
			self.displays.append(val)
			self.current_display = self.current_display + 1
		else:
			del(self.displays[self.current_display])
			self.displays.insert(self.current_display, val)
		self.connect_signals()
		self.CF.emit('display-changed')

	def del_display(self):
		if self.current_display < 0 or self.current_display >= len(self.displays): return
		self.disconnect_signals()
		self.displays[self.current_display].TakeDown()
		if self.displays[self.current_display].Connected(): self.displays[self.current_display].Disconnect()
		del(self.displays[self.current_display])
		self.current_display = [-1, 0][len(self.displays) > 0]
		if self.CF: self.connect_signals(); self.CF.emit('display-changed')
		
	CF = property(get_display, set_display, del_display, "Displays encapsulated - use set_current_display to change the pointer.")

	def _(self, key):
		if self.current_window not in self.windows.keys(): self.debug("No window in _ : " + self.current_window); return None
		return self.windows[self.current_window].get_widget(key)

	def get_glade_xml(self, id):
		return gtk.glade.XML ( 'CF635.glade', id)

	def set_current_display(self, index):
		self.disconnect_signals()
		self.current_display = index
		self.connect_signals()
		self.CF.emit('display_changed')
	
	def add_display(self, display):
		self.disconnect_signals()
		self.displays.append(display)
		self.current_display = len(self.displays)-1
		self.connect_signals()
		self.execute_funcs()
		self.CF.emit('display_changed')

	def set_current_book(self, index):
		if not self.CF: return
		self.CF.current_book = index
		self.CF.emit('book-changed')

	def add_book(self, book):
		if not self.CF: return
		self.CF.books.append(book)
		self.CF.current_book = len(self.CF.books)-1
		self.CF.emit('book-changed')

	def set_current_page(self, index):
		if not self.CF or not self.CF.book: return
		self.CF.book.current_page = index
		self.CF.emit('page-changed')

	def add_page(self, page):
		if not self.CF or not self.CF.book: return
		self.CF.book.pages.append(page)
		self.CF.book.current_page = len(self.CF.book.pages)-1
		self.CF.emit('page-changed')

	def connect_signals(self):
		for i in range(0, len(self.signals)):
			self.signals[i][2] = self.CF.connect(self.signals[i][0], self.signals[i][1])

	def disconnect_signals(self):
		for i in range(0, len(self.signals)):
			if self.signals[i][2] != None and self.CF.handler_is_connected(self.signals[i][2]):
				self.CF.handler_disconnect(self.signals[i][2])

	def execute_funcs(self):
		for i in range(0, len(self.funcs)):
			self.funcs[i][0](*self.funcs[i][1])
					

	def add_signal(self, signal, func):
		self.signals.append([signal, func, None]) # signal, func, memory, signal object

	def remove_signal(self, signal):
		i = len(self.signals) - 1 
		while i > 0:
			if self.signals[i][0] == signal:
				self.CF.handler_disconnect(self.signals[i][2])
				del(self.signals[i])
			i = i - 1
				

	def add_func(self, func, *args):
		self.funcs.append([func, args])

	def set_current_window(self, key):
		self.current_window = key

	def set_window(self, key, window):
		self.current_window = key
		self.windows[key] = window

	def main_quit(self):
		while self.CF: del(self.CF)
		gtk.main_quit()

	def start( self, withGtk=True):
		if withGtk:
			gtk.gdk.threads_enter()
			gtk.main()
			gtk.gdk.threads_leave()
		else:
			loop = gobject.MainLoop()
			loop.run()

	def debug( self, txt ):
		if self.debugging: print txt