Tizen 2.1 base
[platform/upstream/hplip.git] / ui4 / faxsetupdialog.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
22 # StdLib
23 import operator
24
25 # Local
26 from base.g import *
27 from base import device, utils
28 from prnt import cups
29 from base.codes import *
30 from ui_utils import *
31
32 # Qt
33 from PyQt4.QtCore import *
34 from PyQt4.QtGui import *
35
36 # Ui
37 from faxsetupdialog_base import Ui_Dialog
38 from deviceuricombobox import DEVICEURICOMBOBOX_TYPE_FAX_ONLY
39
40 fax_enabled = prop.fax_build
41
42 if fax_enabled:
43     try:
44         from fax import fax
45     except ImportError:
46         # This can fail on Python < 2.3 due to the datetime module
47         # or if fax was diabled during the build
48         fax_enabled = False
49
50 if not fax_enabled:
51     log.warn("Fax disabled.")
52
53
54 class FaxSetupDialog(QDialog, Ui_Dialog):
55     def __init__(self, parent, device_uri):
56         QDialog.__init__(self, parent)
57         self.setupUi(self)
58         self.device_uri = device_uri
59         self.initUi()
60         self.dev = None
61
62         self.user_settings = UserSettings()
63         self.user_settings.load()
64         self.user_settings.debug()
65
66         QTimer.singleShot(0, self.updateUi)
67
68
69     def initUi(self):
70         # connect signals/slots
71         self.connect(self.CancelButton, SIGNAL("clicked()"), self.CancelButton_clicked)
72         self.connect(self.FaxComboBox, SIGNAL("DeviceUriComboBox_noDevices"), self.FaxComboBox_noDevices)
73         self.connect(self.FaxComboBox, SIGNAL("DeviceUriComboBox_currentChanged"), self.FaxComboBox_currentChanged)
74         self.FaxComboBox.setType(DEVICEURICOMBOBOX_TYPE_FAX_ONLY)
75
76         # Application icon
77         self.setWindowIcon(QIcon(load_pixmap('hp_logo', '128x128')))
78
79         if self.device_uri:
80             self.FaxComboBox.setInitialDevice(self.device_uri)
81
82         self.NameCompanyLineEdit.setMaxLength(50)
83         self.FaxNumberLineEdit.setMaxLength(50)
84         self.FaxNumberLineEdit.setValidator(PhoneNumValidator(self.FaxNumberLineEdit))
85         self.VoiceNumberLineEdit.setMaxLength(50)
86         self.VoiceNumberLineEdit.setValidator(PhoneNumValidator(self.VoiceNumberLineEdit))
87         self.EmailLineEdit.setMaxLength(50)
88
89         self.connect(self.NameCompanyLineEdit, SIGNAL("editingFinished()"),
90                      self.NameCompanyLineEdit_editingFinished)
91
92         self.connect(self.NameCompanyLineEdit, SIGNAL("textChanged(const QString &)"),
93                      self.NameCompanyLineEdit_textChanged)
94
95         self.connect(self.FaxNumberLineEdit, SIGNAL("editingFinished()"),
96                      self.FaxNumberLineEdit_editingFinished)
97
98         self.connect(self.FaxNumberLineEdit, SIGNAL("textChanged(const QString &)"),
99                      self.FaxNumberLineEdit_textChanged)
100
101         self.connect(self.VoiceNumberLineEdit, SIGNAL("editingFinished()"),
102                      self.VoiceNumberLineEdit_editingFinished)
103
104         self.connect(self.VoiceNumberLineEdit, SIGNAL("textChanged(const QString &)"),
105                      self.VoiceNumberLineEdit_textChanged)
106
107         self.connect(self.EmailLineEdit, SIGNAL("editingFinished()"),
108                      self.EmailLineEdit_editingFinished)
109
110         self.connect(self.EmailLineEdit, SIGNAL("textChanged(const QString &)"),
111                      self.EmailLineEdit_textChanged)
112          
113         self.connect(self.tabWidget,SIGNAL("currentChanged(int)"),self.Tabs_currentChanged)
114
115         self.name_company_dirty = False
116         self.fax_number_dirty = False
117         self.voice_number_dirty = False
118         self.email_dirty = False
119
120
121     def updateUi(self):
122         if not fax_enabled:
123             FailureUI(self, self.__tr("<b>PC send fax support is not enabled.</b><p>Re-install HPLIP with fax support or use the device front panel to send a fax.</p><p>Click <i>OK</i> to exit.</p>"))
124             self.close()
125             return
126
127         self.FaxComboBox.updateUi()
128         self.tabWidget.setCurrentIndex(0)
129
130
131     def FaxComboBox_currentChanged(self, device_uri):
132         self.device_uri = device_uri
133         self.updateCoverpageTab()
134
135         if self.dev is not None:
136             self.dev.close()
137
138         try:
139             self.dev = fax.getFaxDevice(self.device_uri)
140         except Error:
141             CheckDeviceUI(self)
142             return
143
144         self.updateHeaderTab()
145
146
147
148     def FaxComboBox_noDevices(self):
149         FailureUI(self, self.__tr("<b>No devices that require fax setup found.</b>"))
150         self.close()
151
152     #
153     # Name/Company (for TTI header) (stored in device)
154     #
155
156     def NameCompanyLineEdit_editingFinished(self):
157         self.saveNameCompany(unicode(self.NameCompanyLineEdit.text()))
158
159
160     def NameCompanyLineEdit_textChanged(self, s):
161         self.name_company_dirty = True
162
163
164     def saveNameCompany(self, s):
165         self.name_company_dirty = False
166         beginWaitCursor()
167         try:
168             try:
169                 log.debug("Saving station name %s to device" % s)
170                 self.dev.setStationName(s)
171             except Error:
172                 CheckDeviceUI()
173         finally:
174             endWaitCursor()
175
176     #
177     # Fax Number (for TTI header) (stored in device)
178     #
179
180     def FaxNumberLineEdit_editingFinished(self):
181         self.saveFaxNumber(unicode(self.FaxNumberLineEdit.text()))
182
183
184     def FaxNumberLineEdit_textChanged(self, s):
185         self.fax_number_dirty = True
186
187
188     def saveFaxNumber(self, s):
189         self.fax_number_dirty = False
190         beginWaitCursor()
191         try:
192             try:
193                 log.debug("Saving fax number %s to device" % s)
194                 self.dev.setPhoneNum(s)
195             except Error:
196                 CheckDeviceUI()
197         finally:
198             endWaitCursor()
199
200     #
201     # Voice Number (for coverpage) (stored in ~/.hplip/hplip.conf)
202     #
203
204     def VoiceNumberLineEdit_editingFinished(self):
205         self.saveVoiceNumber(unicode(self.VoiceNumberLineEdit.text()))
206
207
208     def VoiceNumberLineEdit_textChanged(self, s):
209         self.voice_number_dirty = True
210
211
212     def saveVoiceNumber(self, s):
213         log.debug("Saving voice number (%s) to ~/.hplip/hplip.conf" % s)
214         self.voice_number_dirty = False
215         #user_conf.set('fax', 'voice_phone', s)
216         self.user_settings.voice_phone = s
217         self.user_settings.save()
218
219     #
220     # EMail (for coverpage) (stored in ~/.hplip/hplip.conf)
221     #
222
223     def EmailLineEdit_editingFinished(self):
224         self.saveEmail(unicode(self.EmailLineEdit.text()))
225
226
227     def EmailLineEdit_textChanged(self, s):
228         self.email_dirty = True
229
230
231     def saveEmail(self, s):
232         log.debug("Saving email address (%s) to ~/.hplip/hplip.conf" % s)
233         self.email_dirty = False
234         #user_conf.set('fax', 'email_address', s)
235         self.user_settings.email_address = s
236         self.user_settings.save()
237
238     #
239     #
240     #
241
242     def CancelButton_clicked(self):
243         self.close()
244
245     def Tabs_currentChanged(self, tab=0):
246         """ Called when the active tab changes.
247             Update newly displayed tab.
248         """        
249         if tab == 0:
250             self.updateHeaderTab()
251         elif tab ==1:    
252             self.updateCoverpageTab()
253             
254
255     def updateHeaderTab(self):
256         beginWaitCursor()
257         try:
258             try:
259                 name_company = self.dev.getStationName()
260                 log.debug("name_company = '%s'" % name_company)
261                 self.NameCompanyLineEdit.setText(name_company)
262                 fax_number = self.dev.getPhoneNum()
263                 log.debug("fax_number = '%s'" % fax_number)
264                 self.FaxNumberLineEdit.setText(fax_number)
265             except Error:
266                 CheckDeviceUI()
267         finally:
268             endWaitCursor()
269
270
271     def updateCoverpageTab(self):
272         #voice_phone = user_conf.get('fax', 'voice_phone')
273         voice_phone = self.user_settings.voice_phone
274         log.debug("voice_phone = '%s'" % voice_phone)
275         self.VoiceNumberLineEdit.setText(voice_phone)
276         #email_address = user_conf.get('fax', 'email_address')
277         email_address = self.user_settings.email_address
278         log.debug("email_address = '%s'" % email_address)
279         self.EmailLineEdit.setText(email_address)
280
281
282     def closeEvent(self, e):
283         if self.voice_number_dirty:
284             self.VoiceNumberLineEdit.emit(SIGNAL("editingFinished()"))
285
286         if self.name_company_dirty:
287             self.NameCompanyLineEdit.emit(SIGNAL("editingFinished()"))
288
289         if self.email_dirty:
290             self.EmailLineEdit.emit(SIGNAL("editingFinished()"))
291
292         if self.fax_number_dirty:
293             self.FaxNumberLineEdit.emit(SIGNAL("editingFinished()"))
294
295         if self.dev is not None:
296             self.dev.close()
297
298         e.accept()
299
300     #
301     # Misc
302     #
303
304     def __tr(self,s,c = None):
305         return qApp.translate("FaxSetupDialog",s,c)
306
307