diff options
author | iwikiwi <iwikiwi@localhost.localdomain> | 2009-06-22 23:57:34 (GMT) |
---|---|---|
committer | iwikiwi <iwikiwi@localhost.localdomain> | 2009-06-22 23:57:34 (GMT) |
commit | 06af73fac7d40731005a16ca0d6cf739227aacbf (patch) | |
tree | ff4f51f19d7db9e966f53ee04986422af7383ce9 | |
parent | 6261d2fa9a0908dcc01806b2819337e44e9d4e26 (diff) |
device icon is done
-rw-r--r-- | printer1.py | 230 | ||||
-rw-r--r-- | printscript.py | 4 |
2 files changed, 232 insertions, 2 deletions
diff --git a/printer1.py b/printer1.py new file mode 100644 index 0000000..adb386d --- /dev/null +++ b/printer1.py @@ -0,0 +1,230 @@ +from gettext import gettext as _ +import logging +import sha +import socket +import struct + +import gtk +import gobject +import gconf +import dbus +import time +from datetime import date + +from sugar.graphics.icon import get_icon_state, Icon +from sugar.graphics import style +from sugar.graphics.palette import Palette +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.tray import TrayIcon +from sugar.graphics import xocolor +from sugar.util import unique_id +from sugar.graphics.menuitem import MenuItem + +from jarabe.frame.frameinvoker import FrameWidgetInvoker + +from printscript import * + +_HAL_SERVICE = 'org.freedesktop.Hal' +_HAL_IFACE = 'org.freedesktop.Hal.Manager' +_HAL_PATH = '/org/freedesktop/Hal/Manager' +_PRINTER_SERVICE = 'org.freedesktop.Hal' +_PRINTER_PATH = '' +_PRINTER_IFACE = 'org.freedesktop.Hal.Device' +_SPOOLER_PATH="/com/redhat/PrinterSpooler" +_SPOOLER_IFACE="com.redhat.PrinterSpooler" +#_PRINTER_DEVICE_IFACE = 'org.freedesktop.NetworkManager.Device' +_ICON_NAME = 'network-wired' + + +class PrinterPalette(Palette): + + def __init__(self,name,): + + Palette.__init__(self, label=_('Printer')) + + self._model = DeviceModel() + + vbox = gtk.VBox() + vbox.show() + logging.debug("hey this is 1" ) + self._hbars = {} + self._indexToidmapper = [] + self.tryJobs() + self.props.secondary_text = name + self.set_content(vbox) + self.connectEvents() + + def connectEvents(self): + for key in self._hbars.keys(): + self._hbars[key].connect('activate',self.cancel,key) + #logging.debug("hey this got deleted %s",key) + + def clearMenu(self): + for key in self._hbars.keys(): + self.menu.remove(self._hbars[key]) + del self._hbars[key] + + def tryJobs(self): + self.clearMenu() + self._jobids = self._model.GetLiveJobs()[0] + try: + for jobid in self._jobids: + logging.debug(self._model.GetJobStatus(jobid)) + status=self._model.GetJobStatus(jobid) + title = self._model.GetJobTitle(jobid) + self.createHBars(status,title,jobid) + self._indexToidmapper.append(jobid) + except TypeError: + pass + + def cancel(self,widget,key): + self._model.CancelAJob(key) + self.menu.remove(self._hbars[key]) + #self.connectEvents(self) + del self._hbars[key] + + def createHBars(self,status,title,jobid): + self._cancel = MenuItem('') + self._icon = Icon(icon_size=gtk.ICON_SIZE_MENU) + self._cancel.set_image(self._icon) + self._icon.props.icon_name = 'dialog-cancel' + self._cancel.get_child().set_text ('Document:' + title + '\n' + status) + self.menu.append(self._cancel) + + self._cancel.show() + self._hbars[jobid]= self._cancel + + def redraw(self): + logging.debug("I come from class 1") + self._model.update() + self.tryJobs() + self.connectEvents() + +class DeviceModel(): + def __init__(self): + + self._cups = serverConnection() + self.update() + + def GetLiveJobs(self,): + return [self.livejobsKeys, self.livejobsDict] + + def GetJobStatus(self,jobkey): + if self.livejobsDict[jobkey]["job-state"] == 5: + return "Processing" + elif self.livejobsDict[jobkey]["job-state"] == 3: + return "Pending" + else: + return "Cancelled" + def GetJobTitle(self,jobkey): + return self.livejobsDict[jobkey]["job-name"] + + def CancelAJob(self,jobkey): + logging.debug("lololol") + logging.debug(jobkey) + self._cups._cancelAJob(jobkey) + + def update(self,): + self.livejobsDict = self._cups._getLiveJobQueue() + self.livejobsKeys = self.livejobsDict.keys() + +class PrinterDeviceView(TrayIcon): + + + FRAME_POSITION_RELATIVE = 301 + + def __init__(self,name): + client = gconf.client_get_default() + color = xocolor.XoColor(client.get_string('/desktop/sugar/user/color')) + + TrayIcon.__init__(self, icon_name=_ICON_NAME, xo_color=color) + + self.set_palette_invoker(FrameWidgetInvoker(self)) + self._palette = PrinterPalette(name) + self.set_palette(self._palette) + self._palette.set_group_id('frame') + logging.debug('I come from PrinterDeviceView') + + def update_queue(self): + logging.debug("I come from class 2") + try: + gobject.source_remove(self.timer) + except AttributeError: + pass + + self.timer = gobject.timeout_add (200,self._palette.redraw) + #self._palette.redraw() +class PrinterManagerObserver(object): + def __init__(self, tray): + self._bus = dbus.SystemBus() + self._halmgr = None + self._tray = tray + self._devices = {} + + + try: + obj = self._bus.get_object(_HAL_SERVICE, _HAL_PATH) + self._halmgr = dbus.Interface(obj, _HAL_IFACE) + except dbus.DBusException: + logging.error('%s service not available', _HAL_SERVICE) + return + + self.find_Printers() + + self._halmgr.connect_to_signal('DeviceAdded', + self.device_added) + self._halmgr.connect_to_signal('DeviceRemoved', + self.device_removed,) + + self._bus.add_signal_receiver (self.update_lists, + path=_SPOOLER_PATH, + dbus_interface=_SPOOLER_IFACE) + def update_lists(self,*agrs): + logging.debug("I come from class 3") + try: + gobject.source_remove(self.timer) + except AttributeError: + pass + #self._device_view.update_queue() + self.timer = gobject.timeout_add (200,self._device_view.update_queue) + + + def find_Printers(self): + try: + printerLocation = self._halmgr.FindDeviceByCapability('printer') + + except AttributeError and IndexError: + logging.debug('No Print Device found') + else: + for printerLoc in printerLocation: + self.device_added(printerLoc) + + + + def device_added(self, printerLoc ): + + self.PrinterObj = self._bus.get_object(_PRINTER_SERVICE,printerLoc)
+ self.printeriface = dbus.Interface(self.PrinterObj, _PRINTER_IFACE) + try: + print self.printeriface.GetProperty('info.capabilities')[0] + except dbus.DBusException, IndexError: + return + self.properties = self.printeriface.GetAllProperties() + self.headerString = self.properties[u'info.vendor']+' '+self.properties[u'info.product'] + logging.debug('Print Device found %s',self.headerString) + self._device_view = PrinterDeviceView(self.headerString) + self._tray.add_device(self._device_view) + self._devices[printerLoc] = self._device_view + + def device_removed(self, printerLoc): + logging.debug('No Print Device found, so Disconnecting Device') + #self._device_view.disconnect() + self._tray.remove_device(self._devices[printerLoc]) + del self._devices[printerLoc] + self._devices[printerLoc] = None + + + + +def setup(tray): + device_observer = PrinterManagerObserver(tray) diff --git a/printscript.py b/printscript.py index 4c54dd6..7c066c5 100644 --- a/printscript.py +++ b/printscript.py @@ -156,14 +156,14 @@ class serverConnection: def _getLiveJobQueue (self,noOfJobs=None): if noOfJobs == None: - limit = 10 + limit = -1 else: limit = noOfJobs return self._connection.getJobs('not-completed', True, limit, -1) def _getCompletedJobQueue (self, noOfJobs = None): if noOfJobs == None: - limit = 3 + limit = -1 else: limit = noOfJobs return self._connection.getJobs('completed', True, limit, -1) |