%PDF- %PDF-
Direktori : /usr/share/system-config-printer/ |
Current File : //usr/share/system-config-printer/userdefault.py |
#!/usr/bin/python3 ## Copyright (C) 2006, 2007, 2008, 2010, 2012, 2014 Red Hat, Inc. ## Author: 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. from gi.repository import Gtk import os import subprocess class UserDefaultPrinter: def __init__ (self): try: lpoptions = os.environ["HOME"] except KeyError: try: lpoptions = "/home/" + os.environ["USER"] except KeyError: lpoptions = None if lpoptions: lpoptions += "/.cups/lpoptions" self.lpoptions = lpoptions def clear (self): if not self.lpoptions: return try: opt_file = open(self.lpoptions) opts = opt_file.readlines () except IOError: return for i in range (len (opts)): if opts[i].startswith ("Default "): opts[i] = "Dest " + opts[i][8:] open (self.lpoptions, "w").writelines (opts) def get (self): if not self.lpoptions: return None try: opt_file = open(self.lpoptions) opts = opt_file.readlines () except IOError: return None for i in range (len (opts)): if opts[i].startswith ("Default "): rest = opts[i][8:] slash = rest.find ("/") if slash != -1: space = rest[:slash].find (" ") else: space = rest.find (" ") return rest[:space] return None def set (self, default): p = subprocess.Popen ([ "lpoptions", "-d", default ], close_fds=True, stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE) (stdout, stderr) = p.communicate () exitcode = p.wait () if exitcode != 0: raise RuntimeError (exitcode, stderr.decode ().strip ()) return def __repr__ (self): return "<UserDefaultPrinter (%s)>" % repr (self.get ()) class UserDefaultPrompt: def __init__ (self, set_default_fn, refresh_fn, name, title, parent, primarylabel, systemwidelabel, clearpersonallabel, personallabel): self.set_default_fn = set_default_fn self.refresh_fn = refresh_fn self.name = name dialog = Gtk.Dialog (title=title, transient_for=parent, modal=True, destroy_with_parent=True) dialog.add_buttons (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK) dialog.set_default_response (Gtk.ResponseType.OK) dialog.set_border_width (6) dialog.set_resizable (False) hbox = Gtk.HBox.new (False, 12) hbox.set_border_width (6) image = Gtk.Image () image.set_from_stock (Gtk.STOCK_DIALOG_QUESTION, Gtk.IconSize.DIALOG) image.set_alignment (0.0, 0.0) hbox.pack_start (image, False, False, 0) vboxouter = Gtk.VBox.new (False, 6) primary = Gtk.Label () primary.set_markup ('<span weight="bold" size="larger">' + primarylabel + '</span>') primary.set_line_wrap (True) primary.set_alignment (0.0, 0.0) vboxouter.pack_start (primary, False, False, 0) vboxradio = Gtk.VBox.new (False, 0) systemwide = Gtk.RadioButton.new_with_mnemonic (None, systemwidelabel) vboxradio.pack_start (systemwide, False, False, 0) clearpersonal = Gtk.CheckButton.new_with_mnemonic (clearpersonallabel) alignment = Gtk.Alignment.new (0, 0, 0, 0) alignment.set_padding (0, 0, 12, 0) alignment.add (clearpersonal) vboxradio.pack_start (alignment, False, False, 0) vboxouter.pack_start (vboxradio, False, False, 0) personal = Gtk.RadioButton.new_with_mnemonic_from_widget(systemwide, personallabel) vboxouter.pack_start (personal, False, False, 0) hbox.pack_start (vboxouter, False, False, 0) dialog.vbox.pack_start (hbox, False, False, 0) systemwide.set_active (True) clearpersonal.set_active (True) self.userdef = UserDefaultPrinter () clearpersonal.set_sensitive (self.userdef.get () is not None) self.systemwide = systemwide self.clearpersonal = clearpersonal self.personal = personal systemwide.connect ("toggled", self.on_toggled) dialog.connect ("response", self.on_response) dialog.show_all () def on_toggled (self, button): self.clearpersonal.set_sensitive (self.userdef.get () is not None and self.systemwide.get_active ()) def on_response (self, dialog, response_id): if response_id != Gtk.ResponseType.OK: dialog.destroy () return if self.systemwide.get_active (): if self.clearpersonal.get_active (): self.userdef.clear () self.set_default_fn (self.name) else: try: self.userdef.set (self.name) except Exception as e: print("Error setting default: %s" % repr (e)) self.refresh_fn () dialog.destroy ()