1 # -*- coding: utf-8 -*-
3 # (c) Copyright 2001-2009 Hewlett-Packard Development Company, L.P.
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.
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.
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
27 from base import device, utils
29 from base.codes import *
30 from ui_utils import *
33 from PyQt4.QtCore import *
34 from PyQt4.QtGui import *
37 from faxsetupdialog_base import Ui_Dialog
38 from deviceuricombobox import DEVICEURICOMBOBOX_TYPE_FAX_ONLY
40 fax_enabled = prop.fax_build
46 # This can fail on Python < 2.3 due to the datetime module
47 # or if fax was diabled during the build
51 log.warn("Fax disabled.")
54 class FaxSetupDialog(QDialog, Ui_Dialog):
55 def __init__(self, parent, device_uri):
56 QDialog.__init__(self, parent)
58 self.device_uri = device_uri
62 self.user_settings = UserSettings()
63 self.user_settings.load()
64 self.user_settings.debug()
66 QTimer.singleShot(0, self.updateUi)
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)
77 self.setWindowIcon(QIcon(load_pixmap('hp_logo', '128x128')))
80 self.FaxComboBox.setInitialDevice(self.device_uri)
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)
89 self.connect(self.NameCompanyLineEdit, SIGNAL("editingFinished()"),
90 self.NameCompanyLineEdit_editingFinished)
92 self.connect(self.NameCompanyLineEdit, SIGNAL("textChanged(const QString &)"),
93 self.NameCompanyLineEdit_textChanged)
95 self.connect(self.FaxNumberLineEdit, SIGNAL("editingFinished()"),
96 self.FaxNumberLineEdit_editingFinished)
98 self.connect(self.FaxNumberLineEdit, SIGNAL("textChanged(const QString &)"),
99 self.FaxNumberLineEdit_textChanged)
101 self.connect(self.VoiceNumberLineEdit, SIGNAL("editingFinished()"),
102 self.VoiceNumberLineEdit_editingFinished)
104 self.connect(self.VoiceNumberLineEdit, SIGNAL("textChanged(const QString &)"),
105 self.VoiceNumberLineEdit_textChanged)
107 self.connect(self.EmailLineEdit, SIGNAL("editingFinished()"),
108 self.EmailLineEdit_editingFinished)
110 self.connect(self.EmailLineEdit, SIGNAL("textChanged(const QString &)"),
111 self.EmailLineEdit_textChanged)
113 self.connect(self.tabWidget,SIGNAL("currentChanged(int)"),self.Tabs_currentChanged)
115 self.name_company_dirty = False
116 self.fax_number_dirty = False
117 self.voice_number_dirty = False
118 self.email_dirty = False
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>"))
127 self.FaxComboBox.updateUi()
128 self.tabWidget.setCurrentIndex(0)
131 def FaxComboBox_currentChanged(self, device_uri):
132 self.device_uri = device_uri
133 self.updateCoverpageTab()
135 if self.dev is not None:
139 self.dev = fax.getFaxDevice(self.device_uri)
144 self.updateHeaderTab()
148 def FaxComboBox_noDevices(self):
149 FailureUI(self, self.__tr("<b>No devices that require fax setup found.</b>"))
153 # Name/Company (for TTI header) (stored in device)
156 def NameCompanyLineEdit_editingFinished(self):
157 self.saveNameCompany(unicode(self.NameCompanyLineEdit.text()))
160 def NameCompanyLineEdit_textChanged(self, s):
161 self.name_company_dirty = True
164 def saveNameCompany(self, s):
165 self.name_company_dirty = False
169 log.debug("Saving station name %s to device" % s)
170 self.dev.setStationName(s)
177 # Fax Number (for TTI header) (stored in device)
180 def FaxNumberLineEdit_editingFinished(self):
181 self.saveFaxNumber(unicode(self.FaxNumberLineEdit.text()))
184 def FaxNumberLineEdit_textChanged(self, s):
185 self.fax_number_dirty = True
188 def saveFaxNumber(self, s):
189 self.fax_number_dirty = False
193 log.debug("Saving fax number %s to device" % s)
194 self.dev.setPhoneNum(s)
201 # Voice Number (for coverpage) (stored in ~/.hplip/hplip.conf)
204 def VoiceNumberLineEdit_editingFinished(self):
205 self.saveVoiceNumber(unicode(self.VoiceNumberLineEdit.text()))
208 def VoiceNumberLineEdit_textChanged(self, s):
209 self.voice_number_dirty = True
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()
220 # EMail (for coverpage) (stored in ~/.hplip/hplip.conf)
223 def EmailLineEdit_editingFinished(self):
224 self.saveEmail(unicode(self.EmailLineEdit.text()))
227 def EmailLineEdit_textChanged(self, s):
228 self.email_dirty = True
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()
242 def CancelButton_clicked(self):
245 def Tabs_currentChanged(self, tab=0):
246 """ Called when the active tab changes.
247 Update newly displayed tab.
250 self.updateHeaderTab()
252 self.updateCoverpageTab()
255 def updateHeaderTab(self):
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)
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)
282 def closeEvent(self, e):
283 if self.voice_number_dirty:
284 self.VoiceNumberLineEdit.emit(SIGNAL("editingFinished()"))
286 if self.name_company_dirty:
287 self.NameCompanyLineEdit.emit(SIGNAL("editingFinished()"))
290 self.EmailLineEdit.emit(SIGNAL("editingFinished()"))
292 if self.fax_number_dirty:
293 self.FaxNumberLineEdit.emit(SIGNAL("editingFinished()"))
295 if self.dev is not None:
304 def __tr(self,s,c = None):
305 return qApp.translate("FaxSetupDialog",s,c)