home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / lib / hplip / ui / faxaddrbookform.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2006-08-31  |  16.5 KB  |  487 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. import sys
  5. import os
  6. import os.path as os
  7. import socket
  8. from base.g import *
  9. from base import utils, service
  10.  
  11. try:
  12.     from fax import fax
  13. except ImportError:
  14.     log.error('Fax address book disabled - Python 2.3+ required.')
  15.     sys.exit(1)
  16.  
  17. from qt import *
  18. from faxaddrbookform_base import FaxAddrBookForm_base
  19. from faxaddrbookeditform_base import FaxAddrBookEditForm_base
  20. from faxaddrbookgroupsform_base import FaxAddrBookGroupsForm_base
  21. from faxaddrbookgroupeditform_base import FaxAddrBookGroupEditForm_base
  22. db = None
  23.  
  24. class AddressBookItem(QListViewItem):
  25.     
  26.     def __init__(self, parent, abe):
  27.         QListViewItem.__init__(self, parent)
  28.         self.abe = abe
  29.         self.recno = abe.recno
  30.         self.setText(0, abe.name)
  31.         self.setText(1, abe.title)
  32.         self.setText(2, abe.firstname)
  33.         self.setText(3, abe.lastname)
  34.         self.setText(4, abe.fax)
  35.         self.setText(5, ', '.join(abe.group_list))
  36.         self.setText(6, abe.notes)
  37.  
  38.  
  39.  
  40. class GroupValidator(QValidator):
  41.     
  42.     def __init__(self, parent = None, name = None):
  43.         QValidator.__init__(self, parent, name)
  44.  
  45.     
  46.     def validate(self, input, pos):
  47.         input = str(input)
  48.         if input.find(',') > 0:
  49.             return (QValidator.Invalid, pos)
  50.         elif len(input) > 50:
  51.             return (QValidator.Invalid, pos)
  52.         else:
  53.             return (QValidator.Acceptable, pos)
  54.  
  55.  
  56.  
  57. class PhoneNumValidator(QValidator):
  58.     
  59.     def __init__(self, parent = None, name = None):
  60.         QValidator.__init__(self, parent, name)
  61.  
  62.     
  63.     def validate(self, input, pos):
  64.         input = str(input)
  65.         if not input:
  66.             return (QValidator.Acceptable, pos)
  67.         elif input[pos - 1] not in '0123456789-(+) ':
  68.             return (QValidator.Invalid, pos)
  69.         elif len(input) > 50:
  70.             return (QValidator.Invalid, pos)
  71.         else:
  72.             return (QValidator.Acceptable, pos)
  73.  
  74.  
  75.  
  76. class FaxAddrBookGroupEditForm(FaxAddrBookGroupEditForm_base):
  77.     
  78.     def __init__(self, parent = None, name = None, modal = 0, fl = 0):
  79.         FaxAddrBookGroupEditForm_base.__init__(self, parent, name, modal, fl)
  80.         self.edit_mode = False
  81.         self.okButton.setEnabled(True)
  82.         self.all_groups = db.AllGroups()
  83.         self.groupnameEdit.setValidator(GroupValidator(self.groupnameEdit))
  84.  
  85.     
  86.     def setDlgData(self, group_name):
  87.         self.edit_mode = True
  88.         self.groupnameEdit.setText(group_name)
  89.         self.groupnameEdit.setReadOnly(True)
  90.         self.setEntries(group_name)
  91.  
  92.     
  93.     def setEntries(self, group_name = ''):
  94.         self.entriesListView.clear()
  95.         all_entries = db.AllRecordEntries()
  96.         for e in all_entries:
  97.             i = QCheckListItem(self.entriesListView, e.name, QCheckListItem.CheckBox)
  98.             if group_name and group_name in e.group_list:
  99.                 i.setState(QCheckListItem.On)
  100.                 continue
  101.         
  102.         self.CheckOKButton()
  103.  
  104.     
  105.     def getDlgData(self):
  106.         group_name = str(self.groupnameEdit.text())
  107.         entries = []
  108.         i = self.entriesListView.firstChild()
  109.         while i is not None:
  110.             if i.isOn():
  111.                 entries.append(str(i.text()))
  112.             
  113.             i = i.itemBelow()
  114.         return (group_name, entries)
  115.  
  116.     
  117.     def groupnameEdit_textChanged(self, a0):
  118.         self.CheckOKButton()
  119.  
  120.     
  121.     def entriesListView_clicked(self, a0):
  122.         self.CheckOKButton()
  123.  
  124.     
  125.     def CheckOKButton(self):
  126.         group_name = str(self.groupnameEdit.text())
  127.         if (not group_name or not (self.edit_mode)) and group_name in self.all_groups:
  128.             self.okButton.setEnabled(False)
  129.             return None
  130.         
  131.         i = self.entriesListView.firstChild()
  132.         while i is not None:
  133.             if i.isOn():
  134.                 break
  135.             
  136.             i = i.itemBelow()
  137.         self.okButton.setEnabled(False)
  138.         return None
  139.         self.okButton.setEnabled(True)
  140.  
  141.  
  142.  
  143. class FaxAddrBookGroupsForm(FaxAddrBookGroupsForm_base):
  144.     
  145.     def __init__(self, parent = None, name = None, modal = 0, fl = 0):
  146.         FaxAddrBookGroupsForm_base.__init__(self, parent, name, modal, fl)
  147.         self.current = None
  148.         QTimer.singleShot(0, self.InitialUpdate)
  149.  
  150.     
  151.     def InitialUpdate(self):
  152.         self.UpdateList()
  153.  
  154.     
  155.     def UpdateList(self):
  156.         self.groupListView.clear()
  157.         first_rec = None
  158.         all_groups = db.AllGroups()
  159.         if len(all_groups):
  160.             for group in all_groups:
  161.                 i = QListViewItem(self.groupListView, group, ', '.join(db.GroupEntries(group)))
  162.                 if first_rec is None:
  163.                     first_rec = i
  164.                     continue
  165.             
  166.             self.groupListView.setCurrentItem(i)
  167.             self.current = i
  168.             self.editButton.setEnabled(True)
  169.             self.deleteButton.setEnabled(True)
  170.         else:
  171.             self.editButton.setEnabled(False)
  172.             self.deleteButton.setEnabled(False)
  173.  
  174.     
  175.     def newButton_clicked(self):
  176.         dlg = FaxAddrBookGroupEditForm(self)
  177.         dlg.setEntries()
  178.         if dlg.exec_loop() == QDialog.Accepted:
  179.             (group_name, entries) = dlg.getDlgData()
  180.             db.UpdateGroupEntries(group_name, entries)
  181.             self.UpdateList()
  182.         
  183.  
  184.     
  185.     def editButton_clicked(self):
  186.         dlg = FaxAddrBookGroupEditForm(self)
  187.         group_name = str(self.current.text(0))
  188.         dlg.setDlgData(group_name)
  189.         if dlg.exec_loop() == QDialog.Accepted:
  190.             (group_name, entries) = dlg.getDlgData()
  191.             db.UpdateGroupEntries(group_name, entries)
  192.             self.UpdateList()
  193.         
  194.  
  195.     
  196.     def deleteButton_clicked(self):
  197.         x = QMessageBox.critical(self, self.caption(), '<b>Annoying Confirmation: Are you sure you want to delete this group?</b>', QMessageBox.Yes, QMessageBox.No | QMessageBox.Default, QMessageBox.NoButton)
  198.         if x == QMessageBox.Yes:
  199.             db.DeleteGroup(str(self.current.text(0)))
  200.             self.UpdateList()
  201.         
  202.  
  203.     
  204.     def groupListView_currentChanged(self, a0):
  205.         self.current = a0
  206.  
  207.     
  208.     def groupListView_doubleClicked(self, a0):
  209.         self.editButton_clicked()
  210.  
  211.     
  212.     def groupListView_rightButtonClicked(self, item, pos, a2):
  213.         popup = QPopupMenu(self)
  214.         popup.insertItem(self._FaxAddrBookGroupsForm__tr('New...'), self.newButton_clicked)
  215.         if item is not None:
  216.             popup.insertItem(self._FaxAddrBookGroupsForm__tr('Edit...'), self.editButton_clicked)
  217.             popup.insertItem(self._FaxAddrBookGroupsForm__tr('Delete...'), self.deleteButton_clicked)
  218.         
  219.         popup.insertSeparator()
  220.         popup.insertItem(self._FaxAddrBookGroupsForm__tr('Refresh List'), self.UpdateList)
  221.         popup.popup(pos)
  222.  
  223.     
  224.     def __tr(self, s, c = None):
  225.         return qApp.translate('FAB', s, c)
  226.  
  227.  
  228.  
  229. class FaxAddrBookEditForm(FaxAddrBookEditForm_base):
  230.     
  231.     def __init__(self, editing = True, parent = None, name = None, modal = 0, fl = 0):
  232.         FaxAddrBookEditForm_base.__init__(self, parent, name, modal, fl)
  233.         self.recno = -1
  234.         self.editing = editing
  235.         self.faxEdit.setValidator(PhoneNumValidator(self.faxEdit))
  236.  
  237.     
  238.     def setDlgData(self, abe):
  239.         self.recno = abe.recno
  240.         self.titleEdit.setText(abe.title)
  241.         self.firstnameEdit.setText(abe.firstname)
  242.         self.lastnameEdit.setText(abe.lastname)
  243.         self.faxEdit.setText(abe.fax)
  244.         self.notesEdit.setText(abe.notes)
  245.         self.nicknameEdit.setText(abe.name)
  246.         self.setGroups(abe.group_list)
  247.  
  248.     
  249.     def setGroups(self, entry_groups = []):
  250.         self.groupListView.clear()
  251.         for g in db.AllGroups():
  252.             i = QCheckListItem(self.groupListView, g, QCheckListItem.CheckBox)
  253.             if g in entry_groups:
  254.                 i.setState(QCheckListItem.On)
  255.                 continue
  256.         
  257.  
  258.     
  259.     def getDlgData(self):
  260.         in_groups = []
  261.         i = self.groupListView.firstChild()
  262.         while i is not None:
  263.             if i.isOn():
  264.                 in_groups.append(str(i.text()))
  265.             
  266.             i = i.itemBelow()
  267.         return fax.AddressBookEntry((self.recno, str(self.nicknameEdit.text()), str(self.titleEdit.text()), str(self.firstnameEdit.text()), str(self.lastnameEdit.text()), str(self.faxEdit.text()), ', '.join(in_groups), str(self.notesEdit.text())))
  268.  
  269.     
  270.     def firstnameEdit_textChanged(self, a0):
  271.         pass
  272.  
  273.     
  274.     def lastnameEdit_textChanged(self, a0):
  275.         pass
  276.  
  277.     
  278.     def groupsButton2_clicked(self):
  279.         (new_group_name, ok) = QInputDialog.getText(self._FaxAddrBookEditForm__tr('New Fax Group'), self._FaxAddrBookEditForm__tr('New Group Name:'))
  280.         if ok and len(new_group_name):
  281.             new_group_name = str(new_group_name)
  282.             abe = db.GetEntryByRecno(self.recno)
  283.             if new_group_name not in abe.group_list:
  284.                 abe.group_list.append(new_group_name)
  285.                 db.update([
  286.                     'recno'], [
  287.                     self.recno], [
  288.                     ','.join(abe.group_list)], [
  289.                     'groups'])
  290.                 self.setGroups(abe.group_list)
  291.             
  292.         
  293.  
  294.     
  295.     def nicknameEdit_textChanged(self, nickname):
  296.         self.CheckOKButton(nickname, None)
  297.  
  298.     
  299.     def faxEdit_textChanged(self, fax):
  300.         self.CheckOKButton(None, fax)
  301.  
  302.     
  303.     def CheckOKButton(self, nickname = None, fax = None):
  304.         if nickname is None:
  305.             nickname = str(self.nicknameEdit.text())
  306.         
  307.         if fax is None:
  308.             fax = str(self.faxEdit.text())
  309.         
  310.         if len(nickname):
  311.             pass
  312.         ok = len(fax)
  313.         if nickname and not (self.editing):
  314.             for x in db.AllRecordEntries():
  315.                 if nickname == x.name:
  316.                     ok = False
  317.                     continue
  318.             
  319.         
  320.         self.OKButton.setEnabled(ok)
  321.  
  322.     
  323.     def __tr(self, s, c = None):
  324.         return qApp.translate('FAB', s, c)
  325.  
  326.  
  327.  
  328. class FaxAddrBookForm(FaxAddrBookForm_base):
  329.     
  330.     def __init__(self, parent = None, name = None, modal = 0, fl = 0):
  331.         global db
  332.         FaxAddrBookForm_base.__init__(self, parent, name, modal, fl)
  333.         icon = QPixmap(os.path.join(prop.image_dir, 'HPmenu.png'))
  334.         self.setIcon(icon)
  335.         db = fax.FaxAddressBook()
  336.         self.init_problem = False
  337.         self.current = None
  338.         
  339.         try:
  340.             invalids = db.validate()
  341.         except:
  342.             invalids = True
  343.  
  344.         if invalids:
  345.             log.error('Fax address book file is invalid')
  346.             if type(invalids) == type([]):
  347.                 log.error(invalids)
  348.             
  349.             self.FailureUI(self._FaxAddrBookForm__tr('<b>Fax address book file %s is invalid.</b><p>Please check the file for problems.' % db.filename()))
  350.             self.init_problem = True
  351.         
  352.         db.pack()
  353.         self.all_groups = []
  354.         self.hpssd_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  355.         
  356.         try:
  357.             self.hpssd_sock.connect((prop.hpssd_host, prop.hpssd_port))
  358.         except socket.error:
  359.             log.error('Unable to contact HPLIP I/O (hpssd).')
  360.             self.hpssd_sock.close()
  361.             self.hpssd_sock = None
  362.  
  363.         QTimer.singleShot(0, self.InitialUpdate)
  364.  
  365.     
  366.     def InitialUpdate(self):
  367.         if self.init_problem:
  368.             self.close()
  369.             return None
  370.         
  371.         self.UpdateList()
  372.  
  373.     
  374.     def UpdateList(self):
  375.         self.addressListView.clear()
  376.         first_rec = None
  377.         all_entries = db.AllRecordEntries()
  378.         log.debug('Number of records is: %d' % len(all_entries))
  379.         if len(all_entries) > 0:
  380.             for abe in all_entries:
  381.                 i = AddressBookItem(self.addressListView, abe)
  382.                 if first_rec is None:
  383.                     first_rec = i
  384.                     continue
  385.             
  386.             self.addressListView.setCurrentItem(i)
  387.             self.current = i
  388.             self.editButton.setEnabled(True)
  389.             self.deleteButton.setEnabled(True)
  390.         else:
  391.             self.editButton.setEnabled(False)
  392.             self.deleteButton.setEnabled(False)
  393.  
  394.     
  395.     def groupButton_clicked(self):
  396.         FaxAddrBookGroupsForm(self).exec_loop()
  397.         self.sendUpdateEvent()
  398.         self.UpdateList()
  399.  
  400.     
  401.     def newButton_clicked(self):
  402.         dlg = FaxAddrBookEditForm(False, self)
  403.         dlg.setGroups()
  404.         dlg.groupsButton2.setEnabled(False)
  405.         if dlg.exec_loop() == QDialog.Accepted:
  406.             db.insert(dlg.getDlgData())
  407.             self.sendUpdateEvent()
  408.             self.UpdateList()
  409.         
  410.  
  411.     
  412.     def CurrentRecordEntry(self):
  413.         return fax.AddressBookEntry(db.select([
  414.             'recno'], [
  415.             self.current.recno])[0])
  416.  
  417.     
  418.     def editButton_clicked(self):
  419.         dlg = FaxAddrBookEditForm(True, self)
  420.         dlg.setDlgData(self.CurrentRecordEntry())
  421.         if dlg.exec_loop() == QDialog.Accepted:
  422.             db.update([
  423.                 'recno'], [
  424.                 self.current.recno], dlg.getDlgData())
  425.             self.sendUpdateEvent()
  426.             self.UpdateList()
  427.         
  428.  
  429.     
  430.     def deleteButton_clicked(self):
  431.         x = QMessageBox.critical(self, self.caption(), '<b>Annoying Confirmation: Are you sure you want to delete this address book entry?</b>', QMessageBox.Yes, QMessageBox.No | QMessageBox.Default, QMessageBox.NoButton)
  432.         if x == QMessageBox.Yes:
  433.             db.delete([
  434.                 'recno'], [
  435.                 self.current.recno])
  436.             self.UpdateList()
  437.             self.sendUpdateEvent()
  438.         
  439.  
  440.     
  441.     def addressListView_rightButtonClicked(self, item, pos, a2):
  442.         popup = QPopupMenu(self)
  443.         popup.insertItem(self._FaxAddrBookForm__tr('New...'), self.newButton_clicked)
  444.         if item is not None:
  445.             popup.insertItem(self._FaxAddrBookForm__tr('Edit...'), self.editButton_clicked)
  446.             popup.insertItem(self._FaxAddrBookForm__tr('Delete...'), self.deleteButton_clicked)
  447.         
  448.         popup.insertSeparator()
  449.         popup.insertItem(self._FaxAddrBookForm__tr('Refresh List'), self.UpdateList)
  450.         popup.popup(pos)
  451.  
  452.     
  453.     def addressListView_doubleClicked(self, a0):
  454.         self.editButton_clicked()
  455.  
  456.     
  457.     def addressListView_currentChanged(self, item):
  458.         self.current = item
  459.  
  460.     
  461.     def FailureUI(self, error_text):
  462.         QMessageBox.critical(self, self.caption(), error_text, QMessageBox.Ok, QMessageBox.NoButton, QMessageBox.NoButton)
  463.  
  464.     
  465.     def WarningUI(self, msg):
  466.         QMessageBox.warning(self, self.caption(), msg, QMessageBox.Ok, QMessageBox.NoButton, QMessageBox.NoButton)
  467.  
  468.     
  469.     def __tr(self, s, c = None):
  470.         return qApp.translate('FAB', s, c)
  471.  
  472.     
  473.     def accept(self):
  474.         self.sendUpdateEvent()
  475.         if self.hpssd_sock is not None:
  476.             self.hpssd_sock.close()
  477.         
  478.         FaxAddrBookForm_base.accept(self)
  479.  
  480.     
  481.     def sendUpdateEvent(self):
  482.         if self.hpssd_sock is not None:
  483.             service.sendEvent(self.hpssd_sock, EVENT_FAX_ADDRESS_BOOK_UPDATED)
  484.         
  485.  
  486.  
  487.