rendered paste bodyfrom gettext import gettext as _import loggingimport shaimport socketimport structimport gtkimport gobjectimport gconfimport dbusfrom sugar.graphics.icon import get_icon_statefrom sugar.graphics import stylefrom sugar.graphics.palette import Palettefrom sugar.graphics.toolbutton import ToolButtonfrom sugar.graphics.tray import TrayIconfrom sugar.graphics import xocolorfrom sugar.util import unique_idfrom jarabe.model import networkfrom jarabe.model.network import Settingsfrom jarabe.model.network import IP4Configfrom jarabe.frame.frameinvoker import FrameWidgetInvokerfrom jarabe.view.pulsingicon import PulsingIcon_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'#_PRINTER_DEVICE_IFACE = 'org.freedesktop.NetworkManager.Device'_ICON_NAME = 'network-wired'class PrinterPalette(Palette): __gtype_name__ = 'SugarPrinterPalette' def __init__(self,name): from printscript import * cups = serverConnection() self.completedjobsDict = cups._getCompletedJobQueue() self.livejobsDict = cups._getLiveJobQueue() self.completedjobsKeys = self.completedjobsDict.getkeys() self.livejobsKeys = self.livejobsDict.getkeys() Palette.__init__(self, label=_('Printer')) self._info = gtk.VBox() sw = gtk.ScrolledWindow() sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self._info.pack_start(sw, True, True, 0) store = self.create_model() treeView = gtk.TreeView(store) treeView.connect("row-activated", self.on_activated) treeView.set_rules_hint(True) sw.add(treeView) self.create_columns(treeView) self._speed_label = gtk.Label() self._speed_label.props.xalign = 0.0 self._speed_label.show() #self._ip_address_label = gtk.Label() treeview = gtk.TreeView(ListStore) self._info.pack_start(_padded(self._speed_label)) #self._info.pack_start(_padded(self._ip_address_label)) self._info.show_all() self.set_content(self._info) self.props.secondary_text = name def create_columns(self, treeView): rendererText = gtk.CellRendererText() column = gtk.TreeViewColumn("Name", rendererText, text=0) column.set_sort_column_id(0) treeView.append_column(column) rendererText = gtk.CellRendererText() column = gtk.TreeViewColumn("Place", rendererText, text=1) column.set_sort_column_id(1) treeView.append_column(column) rendererText = gtk.CellRendererText() column = gtk.TreeViewColumn("Year", rendererText, text=2) column.set_sort_column_id(2) treeView.append_column(column) def on_activated(self, widget, row, col): model = widget.get_model() text = model[row][0] + ", " + model[row][1] + ", " + model[row][2] self.statusbar.push(0, text)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')class PrinterManagerObserver(object): def __init__(self, tray): self._bus = dbus.SystemBus() #self._devices = {} self._halmgr = None self._tray = tray 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 try: printerLoc = self._halmgr.FindDeviceByCapability('printer')[0] except AttributeError: logging.debug('No Print Device found') return self.PrinterObj = self._bus.get_object(_PRINTER_SERVICE,printerLoc) self.printeriface = dbus.Interface(self.PrinterObj, _PRINTER_IFACE) 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)def setup(tray): device_observer = PrinterManagerObserver(tray)