| Server IP : 182.53.201.61 / Your IP : 216.73.217.175 Web Server : Apache/2.2.15 (Fedora) System : Linux km10.dyndns.org 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686 User : apache ( 48) PHP Version : 5.3.3 Disable Function : NONE MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/system-config-printer/troubleshoot/ |
Upload File : |
#!/usr/bin/env python
## Printing troubleshooter
## Copyright (C) 2008 Red Hat, Inc.
## Copyright (C) 2008 Tim Waugh <twaugh@redhat.com>
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
import cups
import gobject
from timedops import TimedOperation
from base import *
class ChoosePrinter(Question):
def __init__ (self, troubleshooter):
# First question: which printer? (page 1)
Question.__init__ (self, troubleshooter, "Choose printer")
page1 = self.initial_vbox (_("Choose Printer"),
_("Please select the printer you are "
"trying to use from the list below. "
"If it does not appear in the list, "
"select 'Not listed'."))
tv = gtk.TreeView ()
name = gtk.TreeViewColumn (_("Name"),
gtk.CellRendererText (), text=0)
location = gtk.TreeViewColumn (_("Location"),
gtk.CellRendererText (), text=1)
info = gtk.TreeViewColumn (_("Information"),
gtk.CellRendererText (), text=2)
name.set_property ("resizable", True)
location.set_property ("resizable", True)
info.set_property ("resizable", True)
tv.append_column (name)
tv.append_column (location)
tv.append_column (info)
tv.set_rules_hint (True)
sw = gtk.ScrolledWindow ()
sw.set_policy (gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
sw.set_shadow_type (gtk.SHADOW_IN)
sw.add (tv)
page1.pack_start (sw, True, True, 0)
self.treeview = tv
troubleshooter.new_page (page1, self)
def display (self):
model = gtk.ListStore (gobject.TYPE_STRING,
gobject.TYPE_STRING,
gobject.TYPE_STRING,
gobject.TYPE_PYOBJECT)
self.treeview.set_model (model)
iter = model.append (None)
model.set (iter, 0, _("Not listed"), 1, '', 2, '', 3, None)
parent = self.troubleshooter.get_window ()
try:
cups.setServer ('')
c = self.timedop (cups.Connection, parent=parent).run ()
dests = self.timedop (c.getDests, parent=parent).run ()
printers = None
dests_list = []
for (name, instance), dest in dests.iteritems ():
if name == None:
continue
if instance != None:
queue = "%s/%s" % (name, instance)
else:
queue = name
if printers == None:
printers = self.timedop (c.getPrinters,
parent=parent).run ()
if not printers.has_key (name):
info = _("Unknown")
location = _("Unknown")
else:
printer = printers[name]
info = printer.get('printer-info', _("Unknown"))
location = printer.get('printer-location', _("Unknown"))
dests_list.append ((queue, location, info, dest))
dests_list.sort (lambda x, y: cmp (x[0], y[0]))
for queue, location, info, dest in dests_list:
iter = model.append (None)
model.set (iter, 0, queue, 1, location, 2, info, 3, dest)
except cups.HTTPError:
pass
except cups.IPPError:
pass
except RuntimeError:
pass
return True
def connect_signals (self, handler):
self.signal_id = self.treeview.connect ("cursor-changed", handler)
def disconnect_signals (self):
self.treeview.disconnect (self.signal_id)
def can_click_forward (self):
model, iter = self.treeview.get_selection ().get_selected ()
if iter == None:
return False
return True
def collect_answer (self):
model, iter = self.treeview.get_selection ().get_selected ()
dest = model.get_value (iter, 3)
if dest == None:
class enum_dests:
def __init__ (self, model):
self.dests = []
model.foreach (self.each, None)
def each (self, model, path, iter, user_data):
dest = model.get_value (iter, 3)
if dest:
self.dests.append ((dest.name, dest.instance))
return { 'cups_queue_listed': False,
'cups_dests_available': enum_dests (model).dests }
else:
return { 'cups_queue_listed': True,
'cups_dest': dest,
'cups_queue': dest.name,
'cups_instance': dest.instance }
def cancel_operation (self):
self.op.cancel ()
def timedop (self, *args, **kwargs):
self.op = TimedOperation (*args, **kwargs)
return self.op