Fixed build error by changing buildrequires from pkgconfig(turbo-jpeg) to libjpeg...
[platform/upstream/hplip.git] / ui / printerform.py
1 # -*- coding: utf-8 -*-
2 #
3 # (c) Copyright 2001-2009 Hewlett-Packard Development Company, L.P.
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
18 #
19 # Authors: Don Welch
20
21 # Std Lib
22
23 # Local
24 from base.g import *
25 from base.codes import *
26 from base import utils, device
27 from prnt import cups
28 from ui_utils import load_pixmap
29
30 # Qt
31 from qt import *
32 from scrollprint import ScrollPrintView
33
34
35
36 class PrinterForm(QMainWindow):
37     def __init__(self, printer_name=None, args=None,
38                  parent=None,name=None,modal=0,fl=0):
39
40         QMainWindow.__init__(self,parent,name,fl)
41
42         self.printer_name = printer_name
43         self.file_list = []
44         self.args = args
45         self.init_failed = False
46
47         self.statusBar()
48
49         self.setIcon(load_pixmap('hp_logo', '128x128'))
50
51         if not name:
52             self.setName("PrinterForm")
53
54         self.setCentralWidget(QWidget(self,"qt_central_widget"))
55         self.FormLayout = QGridLayout(self.centralWidget(),1,1,11,6,"FormLayout")
56         self.resize(QSize(600,480).expandedTo(self.minimumSizeHint()))
57         self.clearWState(Qt.WState_Polished)
58         self.languageChange()
59
60         self.cups_printers = device.getSupportedCUPSPrinters()
61         log.debug(self.cups_printers)
62
63         if  not self.printer_name: # no -p provided
64             t = device.probeDevices(['cups'])
65             probed_devices = []
66
67             for d in t:
68                 if d.startswith('hp:'):
69                     probed_devices.append(d)
70
71             log.debug(probed_devices)
72
73             max_deviceid_size, x, devices = 0, 0, {}
74
75             for d in probed_devices:
76                 printers = []
77                 for p in self.cups_printers:
78                     if p.device_uri == d:
79                         printers.append(p.name)
80                 devices[x] = (d, printers)
81                 x += 1
82                 max_deviceid_size = max(len(d), max_deviceid_size)
83
84             if x == 0:
85                 from nodevicesform import NoDevicesForm
86                 self.FailureUI(self.__tr("<p><b>No devices found.</b><p>Please make sure your device is properly installed and try again."))
87                 self.init_failed = True
88
89             elif x == 1:
90                 log.info(log.bold("Using device: %s" % devices[0][0]))
91                 self.device_uri = devices[0][0]
92
93             else:
94                 from chooseprinterdlg import ChoosePrinterDlg
95                 dlg = ChoosePrinterDlg(self.cups_printers)
96                 if dlg.exec_loop() == QDialog.Accepted:
97                     self.printer_name = dlg.printer_name
98                     self.device_uri = dlg.device_uri
99                 else:
100                     self.init_failed = True
101
102         else: # -p provided
103             for p in self.cups_printers:
104                 if p.name == self.printer_name:
105                     self.device_uri = p.device_uri
106                     break
107             else:
108                 self.FailureUI("<b>Invalid printer name.</b><p>Please check the parameters to hp-print and try again.")
109                 self.init_failed = True
110
111
112         if not self.init_failed:
113             self.PrintView = ScrollPrintView(None, self.centralWidget(), self, "PrintView")
114             self.FormLayout.addWidget(self.PrintView,0,0)
115
116             try:
117                 self.cur_device = device.Device(device_uri=self.device_uri,
118                                                  printer_name=self.printer_name)
119             except Error, e:
120                 log.error("Invalid device URI or printer name.")
121                 self.FailureUI("<b>Invalid device URI or printer name.</b><p>Please check the parameters to hp-print and try again.")
122                 self.init_failed = True
123
124             else:
125                 self.device_uri = self.cur_device.device_uri
126                 user_conf.set('last_used', 'device_uri', self.device_uri)
127
128                 log.debug(self.device_uri)
129
130                 self.statusBar().message(self.device_uri)
131
132         QTimer.singleShot(0, self.InitialUpdate)
133
134
135     def InitialUpdate(self):
136         if self.init_failed:
137             self.close()
138             return
139
140         self.PrintView.onDeviceChange(self.cur_device)
141
142         if self.args is not None:
143             for f in self.args:
144                 self.PrintView.addFile(f)
145
146         if self.printer_name is not None:
147             self.PrintView.onPrinterChange(self.printer_name)
148
149
150     def FailureUI(self, error_text):
151         log.error(unicode(error_text).replace("<b>", "").replace("</b>", "").replace("<p>", " "))
152         QMessageBox.critical(self,
153                              self.caption(),
154                              error_text,
155                               QMessageBox.Ok,
156                               QMessageBox.NoButton,
157                               QMessageBox.NoButton)
158
159
160     def languageChange(self):
161         self.setCaption(self.__tr("HP Device Manager - Print"))
162
163
164     def __tr(self,s,c = None):
165         return qApp.translate("PrinterForm",s,c)