Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoriwikiwi <iwikiwi@localhost.localdomain>2009-06-22 23:57:34 (GMT)
committer iwikiwi <iwikiwi@localhost.localdomain>2009-06-22 23:57:34 (GMT)
commit06af73fac7d40731005a16ca0d6cf739227aacbf (patch)
treeff4f51f19d7db9e966f53ee04986422af7383ce9
parent6261d2fa9a0908dcc01806b2819337e44e9d4e26 (diff)
device icon is done
-rw-r--r--printer1.py230
-rw-r--r--printscript.py4
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)