home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / lib / hplip / ui / scrolltool.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2007-04-29  |  30.7 KB  |  754 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. from base.g import *
  5. from base import utils, pml, maint
  6. from prnt import cups
  7. from base.codes import *
  8. from qt import *
  9. from scrollview import ScrollView, PixmapLabelButton
  10. import sys
  11. import os.path as os
  12. import os
  13. from alignform import AlignForm
  14. from aligntype6form1 import AlignType6Form1
  15. from aligntype6form2 import AlignType6Form2
  16. from paperedgealignform import PaperEdgeAlignForm
  17. from colorcalform import ColorCalForm
  18. from coloradjform import ColorAdjForm
  19. from colorcalform2 import ColorCalForm2
  20. from colorcal4form import ColorCal4Form
  21. from align10form import Align10Form
  22. from loadpaperform import LoadPaperForm
  23. from settingsdialog import SettingsDialog
  24. from aboutdlg import AboutDlg
  25. from cleaningform import CleaningForm
  26. from cleaningform2 import CleaningForm2
  27. from waitform import WaitForm
  28. from faxsettingsform import FaxSettingsForm
  29.  
  30. class ScrollToolView(ScrollView):
  31.     
  32.     def __init__(self, toolbox_hosted = True, parent = None, form = None, name = None, fl = 0):
  33.         ScrollView.__init__(self, parent, name, fl)
  34.         self.form = form
  35.         self.toolbox_hosted = toolbox_hosted
  36.         (cmd_print, cmd_scan, cmd_pcard, cmd_copy, cmd_fax, cmd_fab) = utils.deviceDefaultFunctions()
  37.         if not user_cfg.commands.prnt:
  38.             pass
  39.         self.cmd_print = cmd_print
  40.         if not user_cfg.commands.scan:
  41.             pass
  42.         self.cmd_scan = cmd_scan
  43.         if not user_cfg.commands.pcard:
  44.             pass
  45.         self.cmd_pcard = cmd_pcard
  46.         if not user_cfg.commands.cpy:
  47.             pass
  48.         self.cmd_copy = cmd_copy
  49.         if not user_cfg.commands.fax:
  50.             pass
  51.         self.cmd_fax = cmd_fax
  52.         if not user_cfg.commands.fab:
  53.             pass
  54.         self.cmd_fab = cmd_fab
  55.  
  56.     
  57.     def fillControls(self):
  58.         ScrollView.fillControls(self)
  59.         if self.cur_device is not None and self.cur_device.supported and self.cur_device.device_state != DEVICE_STATE_NOT_FOUND:
  60.             if self.cur_device.device_settings_ui is not None:
  61.                 self.addItem('device_settings', self._ScrollToolView__tr('<b>Device Settings</b>'), QPixmap(os.path.join(prop.image_dir, 'icon_settings.png')), self._ScrollToolView__tr('Your device has special device settings. You may alter these settings here.'), self._ScrollToolView__tr('Device Settings...'), self.deviceSettingsButton_clicked)
  62.             
  63.             if self.cur_device.fax_type:
  64.                 self.addItem('fax_settings', self._ScrollToolView__tr('<b>Fax Setup</b>'), QPixmap(os.path.join(prop.image_dir, 'icon_fax.png')), self._ScrollToolView__tr('Fax support must be setup before you can send faxes.'), self._ScrollToolView__tr('Setup Fax...'), self.faxSettingsButton_clicked)
  65.                 self.addItem('fax_address_book', self._ScrollToolView__tr('<b>Fax Address Book</b>'), QPixmap(os.path.join(prop.image_dir, 'icon_fax.png')), self._ScrollToolView__tr('Setup fax phone numbers to use when sending faxes from the PC.'), self._ScrollToolView__tr('Fax Address Book...'), self.faxAddressBookButton_clicked)
  66.             
  67.             self.addItem('testpage', self._ScrollToolView__tr('<b>Print Test Page</b>'), QPixmap(os.path.join(prop.image_dir, 'icon_testpage.png')), self._ScrollToolView__tr('Print a test page to test the setup of your printer.'), self._ScrollToolView__tr('Print Test Page >>'), self.PrintTestPageButton_clicked)
  68.             self.addItem('printer_info', self._ScrollToolView__tr('<b>View Printer (Queue) Information</b>'), QPixmap(os.path.join(prop.image_dir, 'icon_cups.png')), self._ScrollToolView__tr('View the printers (queues) installed in CUPS.'), self._ScrollToolView__tr('View Printer Information >>'), self.viewPrinterInformation)
  69.             self.addItem('device_info', self._ScrollToolView__tr('<b>View Device Information</b>'), QPixmap(os.path.join(prop.image_dir, 'icon_info.png')), self._ScrollToolView__tr('This information is primarily useful for debugging and troubleshooting (advanced).'), self._ScrollToolView__tr('View Device Information >>'), self.viewInformation)
  70.             if self.cur_device.pq_diag_type:
  71.                 self.addItem('pqdiag', self._ScrollToolView__tr('<b>Print Quality Diagnostics</b>'), QPixmap(os.path.join(prop.image_dir, 'icon_pq_diag.png')), self._ScrollToolView__tr('Your printer can print a test page to help diagnose print quality problems.'), self._ScrollToolView__tr('Print Diagnostic Page...'), self.pqDiag)
  72.             
  73.             if self.cur_device.fw_download:
  74.                 self.addItem('fwdownload', self._ScrollToolView__tr('<b>Download Firmware</b>'), QPixmap(os.path.join(prop.image_dir, 'download.png')), self._ScrollToolView__tr('Download firmware to your printer (required on some devices after each power-up).'), self._ScrollToolView__tr('Download Firmware...'), self.downloadFirmware)
  75.             
  76.             if self.cur_device.clean_type:
  77.                 self.addItem('clean', self._ScrollToolView__tr('<b>Clean Cartridges</b>'), QPixmap(os.path.join(prop.image_dir, 'icon_clean.png')), self._ScrollToolView__tr('You only need to perform this action if you are having problems with poor printout quality due to clogged ink nozzles.'), self._ScrollToolView__tr('Clean Cartridges...'), self.CleanPensButton_clicked)
  78.             
  79.             if self.cur_device.align_type:
  80.                 self.addItem('align', self._ScrollToolView__tr('<b>Align Cartridges</b>'), QPixmap(os.path.join(prop.image_dir, 'icon_align.png')), self._ScrollToolView__tr('This will improve the quality of output when a new cartridge is installed.'), self._ScrollToolView__tr('Align Cartridges...'), self.AlignPensButton_clicked)
  81.             
  82.             if self.cur_device.color_cal_type:
  83.                 self.addItem('colorcal', self._ScrollToolView__tr('<b>Perform Color Calibration</b>'), QPixmap(os.path.join(prop.image_dir, 'icon_colorcal.png')), self._ScrollToolView__tr("Use this procedure to optimimize your printer's color output."), self._ScrollToolView__tr('Color Calibration...'), self.ColorCalibrationButton_clicked)
  84.             
  85.             if self.cur_device.linefeed_cal_type:
  86.                 self.addItem('linefeed', self._ScrollToolView__tr('<b>Perform Line Feed Calibration</b>'), QPixmap(os.path.join(prop.image_dir, 'icon_linefeed_cal.png')), self._ScrollToolView__tr('Use line feed calibration to optimize print quality (to remove gaps in the printed output).'), self._ScrollToolView__tr('Line Feed Calibration...'), self.linefeedCalibration)
  87.             
  88.             if self.cur_device.embedded_server_type and self.cur_device.bus == 'net':
  89.                 self.addItem('ews', self._ScrollToolView__tr('<b>Access Embedded Web Page</b>'), QPixmap(os.path.join(prop.image_dir, 'icon_ews.png')), self._ScrollToolView__tr("You can use your printer's embedded web server to configure, maintain, and monitor the device from a web browser."), self._ScrollToolView__tr('Open in Browser...'), self.OpenEmbeddedBrowserButton_clicked)
  90.             
  91.         
  92.         self.addItem('support', self._ScrollToolView__tr('<b>View Documentation</b>'), QPixmap(os.path.join(prop.image_dir, 'icon_support2.png')), self._ScrollToolView__tr('View documentation installed on your system.'), self._ScrollToolView__tr('View Documentation...'), self.viewSupport)
  93.  
  94.     
  95.     def addItem(self, name, title, pix, text, button_text, button_func):
  96.         self.addGroupHeading(title, title)
  97.         widget = self.getWidget()
  98.         layout1 = QGridLayout(widget, 1, 3, 5, 10, 'layout1')
  99.         layout1.setColStretch(0, 1)
  100.         layout1.setColStretch(1, 10)
  101.         layout1.setColStretch(2, 2)
  102.         pushButton = QPushButton(widget, 'pushButton')
  103.         pushButton.setSizePolicy(QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed, 0, 0, pushButton.sizePolicy().hasHeightForWidth()))
  104.         layout1.addWidget(pushButton, 0, 3)
  105.         icon = QLabel(widget, 'icon')
  106.         icon.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed, 0, 0, icon.sizePolicy().hasHeightForWidth()))
  107.         icon.setMinimumSize(QSize(32, 32))
  108.         icon.setMaximumSize(QSize(32, 32))
  109.         icon.setScaledContents(1)
  110.         layout1.addWidget(icon, 0, 0)
  111.         textLabel = QLabel(widget, 'textLabel')
  112.         textLabel.setAlignment(QLabel.WordBreak)
  113.         textLabel.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred, 0, 0, textLabel.sizePolicy().hasHeightForWidth()))
  114.         textLabel.setFrameShape(self.frame_shape)
  115.         layout1.addWidget(textLabel, 0, 1)
  116.         spacer1 = QSpacerItem(20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
  117.         layout1.addItem(spacer1, 0, 2)
  118.         textLabel.setText(text)
  119.         pushButton.setText(button_text)
  120.         icon.setPixmap(pix)
  121.         self.connect(pushButton, SIGNAL('clicked()'), button_func)
  122.         self.addWidget(widget, str(title))
  123.  
  124.     
  125.     def viewInformation(self):
  126.         self.form.SwitchMaintTab('device_info')
  127.  
  128.     
  129.     def viewPrinterInformation(self):
  130.         self.form.SwitchMaintTab('printer_info')
  131.  
  132.     
  133.     def viewSupport(self):
  134.         f = 'file://%s' % os.path.join(sys_cfg.dirs.doc, 'index.html')
  135.         log.debug(f)
  136.         utils.openURL(f)
  137.  
  138.     
  139.     def pqDiag(self):
  140.         d = self.cur_device
  141.         pq_diag = d.pq_diag_type
  142.         
  143.         try:
  144.             QApplication.setOverrideCursor(QApplication.waitCursor)
  145.             
  146.             try:
  147.                 d.open()
  148.             except Error:
  149.                 self.CheckDeviceUI()
  150.  
  151.             if d.isIdleAndNoError():
  152.                 QApplication.restoreOverrideCursor()
  153.                 if pq_diag == 1:
  154.                     maint.printQualityDiagType1(d, self.LoadPaperUI)
  155.                 elif pq_diag == 2:
  156.                     maint.printQualityDiagType2(d, self.LoadPaperUI)
  157.                 
  158.             else:
  159.                 self.CheckDeviceUI()
  160.         finally:
  161.             d.close()
  162.             QApplication.restoreOverrideCursor()
  163.  
  164.  
  165.     
  166.     def linefeedCalibration(self):
  167.         d = self.cur_device
  168.         linefeed_type = d.linefeed_cal_type
  169.         
  170.         try:
  171.             QApplication.setOverrideCursor(QApplication.waitCursor)
  172.             
  173.             try:
  174.                 d.open()
  175.             except Error:
  176.                 self.CheckDeviceUI()
  177.  
  178.             if d.isIdleAndNoError():
  179.                 QApplication.restoreOverrideCursor()
  180.                 if linefeed_type == 1:
  181.                     maint.linefeedCalType1(d, self.LoadPaperUI)
  182.                 elif linefeed_type == 2:
  183.                     maint.linefeedCalType2(d, self.LoadPaperUI)
  184.                 
  185.             else:
  186.                 self.CheckDeviceUI()
  187.         finally:
  188.             d.close()
  189.             QApplication.restoreOverrideCursor()
  190.  
  191.  
  192.     
  193.     def downloadFirmware(self):
  194.         d = self.cur_device
  195.         
  196.         try:
  197.             QApplication.setOverrideCursor(QApplication.waitCursor)
  198.             d.open()
  199.             if d.isIdleAndNoError():
  200.                 d.downloadFirmware()
  201.             else:
  202.                 self.form.FailureUI(self._ScrollToolView__tr('<b>An error occured downloading firmware file.</b><p>Please check your printer and try again.'))
  203.         finally:
  204.             d.close()
  205.             QApplication.restoreOverrideCursor()
  206.  
  207.  
  208.     
  209.     def CheckDeviceUI(self):
  210.         self.form.FailureUI(self._ScrollToolView__tr('<b>Device is busy or in an error state.</b><p>Please check device and try again.'))
  211.  
  212.     
  213.     def LoadPaperUI(self):
  214.         if LoadPaperForm(self).exec_loop() == QDialog.Accepted:
  215.             return True
  216.         
  217.         return False
  218.  
  219.     
  220.     def AlignmentNumberUI(self, letter, hortvert, colors, line_count, choice_count):
  221.         dlg = AlignForm(self, letter, hortvert, colors, line_count, choice_count)
  222.         if dlg.exec_loop() == QDialog.Accepted:
  223.             return (True, dlg.value)
  224.         else:
  225.             return (False, 0)
  226.  
  227.     
  228.     def PaperEdgeUI(self, maximum):
  229.         dlg = PaperEdgeAlignForm(self)
  230.         if dlg.exec_loop() == QDialog.Accepted:
  231.             return (True, dlg.value)
  232.         else:
  233.             return (False, 0)
  234.  
  235.     
  236.     def BothPensRequiredUI(self):
  237.         self.form.WarningUI(self._ScrollToolView__tr('<p><b>Both cartridges are required for alignment.</b><p>Please install both cartridges and try again.'))
  238.  
  239.     
  240.     def InvalidPenUI(self):
  241.         self.form.WarningUI(self._ScrollToolView__tr('<p><b>One or more cartiridges are missing from the printer.</b><p>Please install cartridge(s) and try again.'))
  242.  
  243.     
  244.     def PhotoPenRequiredUI(self):
  245.         self.form.WarningUI(self._ScrollToolView__tr('<p><b>Both the photo and color cartridges must be inserted into the printer to perform color calibration.</b><p>If you are planning on printing with the photo cartridge, please insert it and try again.'))
  246.  
  247.     
  248.     def PhotoPenRequiredUI2(self):
  249.         self.form.WarningUI(self._ScrollToolView__tr('<p><b>Both the photo (regular photo or photo blue) and color cartridges must be inserted into the printer to perform color calibration.</b><p>If you are planning on printing with the photo or photo blue cartridge, please insert it and try again.'))
  250.  
  251.     
  252.     def NotPhotoOnlyRequired(self):
  253.         self.form.WarningUI(self._ScrollToolView__tr('<p><b>Cannot align with only the photo cartridge installed.</b><p>Please install other cartridges and try again.'))
  254.  
  255.     
  256.     def AioUI1(self):
  257.         dlg = AlignType6Form1(self)
  258.         return dlg.exec_loop() == QDialog.Accepted
  259.  
  260.     
  261.     def AioUI2(self):
  262.         AlignType6Form2(self).exec_loop()
  263.  
  264.     
  265.     def Align10and11UI(self, pattern, align_type):
  266.         dlg = Align10Form(pattern, align_type, self)
  267.         dlg.exec_loop()
  268.         return dlg.getValues()
  269.  
  270.     
  271.     def AlignPensButton_clicked(self):
  272.         d = self.cur_device
  273.         align_type = d.align_type
  274.         log.debug(utils.bold('Align: %s %s (type=%d) %s' % ('********************', self.cur_device.device_uri, align_type, '********************')))
  275.         
  276.         try:
  277.             QApplication.setOverrideCursor(QApplication.waitCursor)
  278.             
  279.             try:
  280.                 d.open()
  281.             except Error:
  282.                 self.CheckDeviceUI()
  283.  
  284.             if d.isIdleAndNoError():
  285.                 QApplication.restoreOverrideCursor()
  286.                 if align_type == ALIGN_TYPE_AUTO:
  287.                     maint.AlignType1(d, self.LoadPaperUI)
  288.                 elif align_type == ALIGN_TYPE_8XX:
  289.                     maint.AlignType2(d, self.LoadPaperUI, self.AlignmentNumberUI, self.BothPensRequiredUI)
  290.                 elif align_type in (ALIGN_TYPE_9XX, ALIGN_TYPE_9XX_NO_EDGE_ALIGN):
  291.                     maint.AlignType3(d, self.LoadPaperUI, self.AlignmentNumberUI, self.PaperEdgeUI, align_type)
  292.                 elif align_type in (ALIGN_TYPE_LIDIL_0_3_8, ALIGN_TYPE_LIDIL_0_4_3, ALIGN_TYPE_LIDIL_VIP):
  293.                     maint.AlignxBow(d, align_type, self.LoadPaperUI, self.AlignmentNumberUI, self.PaperEdgeUI, self.InvalidPenUI, self.ColorAdjUI)
  294.                 elif align_type == ALIGN_TYPE_LIDIL_AIO:
  295.                     maint.AlignType6(d, self.AioUI1, self.AioUI2, self.LoadPaperUI)
  296.                 elif align_type == ALIGN_TYPE_DESKJET_450:
  297.                     maint.AlignType8(d, self.LoadPaperUI, self.AlignmentNumberUI)
  298.                 elif align_type == ALIGN_TYPE_LBOW:
  299.                     maint.AlignType10(d, self.LoadPaperUI, self.Align10and11UI)
  300.                 elif align_type == ALIGN_TYPE_LIDIL_0_5_4:
  301.                     maint.AlignType11(d, self.LoadPaperUI, self.Align10and11UI, self.NotPhotoOnlyRequired)
  302.                 elif align_type == ALIGN_TYPE_OJ_PRO:
  303.                     maint.AlignType12(d, self.LoadPaperUI)
  304.                 
  305.             else:
  306.                 self.CheckDeviceUI()
  307.         finally:
  308.             d.close()
  309.             QApplication.restoreOverrideCursor()
  310.  
  311.  
  312.     
  313.     def ColorAdjUI(self, line, maximum = 0):
  314.         dlg = ColorAdjForm(self, line)
  315.         if dlg.exec_loop() == QDialog.Accepted:
  316.             return (True, dlg.value)
  317.         else:
  318.             return (False, 0)
  319.  
  320.     
  321.     def ColorCalUI(self):
  322.         dlg = ColorCalForm(self)
  323.         if dlg.exec_loop() == QDialog.Accepted:
  324.             return (True, dlg.value)
  325.         else:
  326.             return (False, 0)
  327.  
  328.     
  329.     def ColorCalUI2(self):
  330.         dlg = ColorCalForm2(self)
  331.         if dlg.exec_loop() == QDialog.Accepted:
  332.             return (True, dlg.value)
  333.         else:
  334.             return (False, 0)
  335.  
  336.     
  337.     def ColorCalUI4(self):
  338.         dlg = ColorCal4Form(self)
  339.         if dlg.exec_loop() == QDialog.Accepted:
  340.             return (True, dlg.values)
  341.         else:
  342.             return (False, None)
  343.  
  344.     
  345.     def ColorCalibrationButton_clicked(self):
  346.         d = self.cur_device
  347.         color_cal_type = d.color_cal_type
  348.         log.debug(utils.bold('Color-cal: %s %s (type=%d) %s' % ('********************', self.cur_device.device_uri, color_cal_type, '********************')))
  349.         
  350.         try:
  351.             QApplication.setOverrideCursor(QApplication.waitCursor)
  352.             
  353.             try:
  354.                 d.open()
  355.             except Error:
  356.                 self.CheckDeviceUI()
  357.  
  358.             if d.isIdleAndNoError():
  359.                 QApplication.restoreOverrideCursor()
  360.                 if color_cal_type == COLOR_CAL_TYPE_DESKJET_450:
  361.                     maint.colorCalType1(d, self.LoadPaperUI, self.ColorCalUI, self.PhotoPenRequiredUI)
  362.                 elif color_cal_type == COLOR_CAL_TYPE_MALIBU_CRICK:
  363.                     maint.colorCalType2(d, self.LoadPaperUI, self.ColorCalUI2, self.InvalidPenUI)
  364.                 elif color_cal_type == COLOR_CAL_TYPE_STRINGRAY_LONGBOW_TORNADO:
  365.                     maint.colorCalType3(d, self.LoadPaperUI, self.ColorAdjUI, self.PhotoPenRequiredUI2)
  366.                 elif color_cal_type == COLOR_CAL_TYPE_CONNERY:
  367.                     maint.colorCalType4(d, self.LoadPaperUI, self.ColorCalUI4, self.WaitUI)
  368.                 elif color_cal_type == COLOR_CAL_TYPE_COUSTEAU:
  369.                     maint.colorCalType5(d, self.LoadPaperUI)
  370.                 elif color_cal_type == COLOR_CAL_TYPE_CARRIER:
  371.                     maint.colorCalType6(d, self.LoadPaperUI)
  372.                 
  373.             else:
  374.                 self.CheckDeviceUI()
  375.         finally:
  376.             d.close()
  377.             QApplication.restoreOverrideCursor()
  378.  
  379.  
  380.     
  381.     def PrintTestPageButton_clicked(self):
  382.         self.form.SwitchMaintTab('testpage')
  383.  
  384.     
  385.     def CleanUI1(self):
  386.         return CleaningForm(self, self.cur_device, 1).exec_loop() == QDialog.Accepted
  387.  
  388.     
  389.     def CleanUI2(self):
  390.         return CleaningForm(self, self.cur_device, 2).exec_loop() == QDialog.Accepted
  391.  
  392.     
  393.     def CleanUI3(self):
  394.         CleaningForm2(self).exec_loop()
  395.         return True
  396.  
  397.     
  398.     def WaitUI(self, seconds):
  399.         WaitForm(seconds, None, self).exec_loop()
  400.  
  401.     
  402.     def CleanPensButton_clicked(self):
  403.         d = self.cur_device
  404.         clean_type = d.clean_type
  405.         log.debug(utils.bold('Clean: %s %s (type=%d) %s' % ('********************', self.cur_device.device_uri, clean_type, '********************')))
  406.         
  407.         try:
  408.             QApplication.setOverrideCursor(QApplication.waitCursor)
  409.             
  410.             try:
  411.                 d.open()
  412.             except Error:
  413.                 self.CheckDeviceUI()
  414.  
  415.             if d.isIdleAndNoError():
  416.                 QApplication.restoreOverrideCursor()
  417.                 if clean_type == CLEAN_TYPE_PCL:
  418.                     maint.cleaning(d, clean_type, maint.cleanType1, maint.primeType1, maint.wipeAndSpitType1, self.LoadPaperUI, self.CleanUI1, self.CleanUI2, self.CleanUI3, self.WaitUI)
  419.                 elif clean_type == CLEAN_TYPE_LIDIL:
  420.                     maint.cleaning(d, clean_type, maint.cleanType2, maint.primeType2, maint.wipeAndSpitType2, self.LoadPaperUI, self.CleanUI1, self.CleanUI2, self.CleanUI3, self.WaitUI)
  421.                 elif clean_type == CLEAN_TYPE_PCL_WITH_PRINTOUT:
  422.                     maint.cleaning(d, clean_type, maint.cleanType1, maint.primeType1, maint.wipeAndSpitType1, self.LoadPaperUI, self.CleanUI1, self.CleanUI2, self.CleanUI3, self.WaitUI)
  423.                 
  424.             else:
  425.                 self.CheckDeviceUI()
  426.         finally:
  427.             d.close()
  428.             QApplication.restoreOverrideCursor()
  429.  
  430.  
  431.     
  432.     def OpenEmbeddedBrowserButton_clicked(self):
  433.         utils.openURL('http://%s' % self.cur_device.host)
  434.  
  435.     
  436.     def faxAddressBookButton_clicked(self):
  437.         self.RunCommand(self.cmd_fab)
  438.  
  439.     
  440.     def faxSettingsButton_clicked(self):
  441.         
  442.         try:
  443.             self.cur_device.open()
  444.         except Error:
  445.             self.CheckDeviceUI()
  446.         else:
  447.             
  448.             try:
  449.                 (result_code, fax_num) = self.cur_device.getPML(pml.OID_FAX_LOCAL_PHONE_NUM)
  450.             except Error:
  451.                 log.error('PML failure.')
  452.                 self.form.FailureUI(self._ScrollToolView__tr('<p><b>Operation failed. Device busy.</b>'))
  453.                 return None
  454.  
  455.             fax_num = str(fax_num)
  456.             
  457.             try:
  458.                 (result_code, name) = self.cur_device.getPML(pml.OID_FAX_STATION_NAME)
  459.             except Error:
  460.                 log.error('PML failure.')
  461.                 self.form.FailureUI(self._ScrollToolView__tr('<p><b>Operation failed. Device busy.</b>'))
  462.                 return None
  463.  
  464.             name = str(name)
  465.             dlg = FaxSettingsForm(self.cur_device, fax_num, name, self)
  466.             dlg.exec_loop()
  467.         finally:
  468.             self.cur_device.close()
  469.  
  470.  
  471.     
  472.     def addressBookButton_clicked(self):
  473.         self.RunCommand(self.cmd_fab)
  474.  
  475.     
  476.     def deviceSettingsButton_clicked(self):
  477.         
  478.         try:
  479.             self.cur_device.open()
  480.             self.cur_device.device_settings_ui(self.cur_device, self)
  481.         finally:
  482.             self.cur_device.close()
  483.  
  484.  
  485.     
  486.     def RunCommand(self, cmd, macro_char = '%'):
  487.         QApplication.setOverrideCursor(QApplication.waitCursor)
  488.         
  489.         try:
  490.             if len(cmd) == 0:
  491.                 self.form.FailureUI(self._ScrollToolView__tr('<p><b>Unable to run command. No command specified.</b><p>Use <pre>Configure...</pre> to specify a command to run.'))
  492.                 log.error('No command specified. Use settings to configure commands.')
  493.             else:
  494.                 log.debug(utils.bold('Run: %s %s (%s) %s' % ('********************', cmd, self.cur_device.device_uri, '********************')))
  495.                 log.debug(cmd)
  496.                 cmd = []([ self.cur_device.device_vars.get(x, x) for x in cmd.split(macro_char) ])
  497.                 log.debug(cmd)
  498.                 path = cmd.split()[0]
  499.                 args = cmd.split()
  500.                 log.debug(path)
  501.                 log.debug(args)
  502.                 self.CleanupChildren()
  503.                 os.spawnvp(os.P_NOWAIT, path, args)
  504.         finally:
  505.             QApplication.restoreOverrideCursor()
  506.  
  507.  
  508.     
  509.     def CleanupChildren(self):
  510.         log.debug('Cleaning up child processes.')
  511.         
  512.         try:
  513.             os.waitpid(-1, os.WNOHANG)
  514.         except OSError:
  515.             pass
  516.  
  517.  
  518.     
  519.     def FailureUI(self, error_text):
  520.         QMessageBox.critical(self, self.caption(), error_text, QMessageBox.Ok, QMessageBox.NoButton, QMessageBox.NoButton)
  521.  
  522.     
  523.     def __tr(self, s, c = None):
  524.         return qApp.translate('ScrollToolView', s, c)
  525.  
  526.  
  527.  
  528. class ScrollDeviceInfoView(ScrollView):
  529.     
  530.     def __init__(self, toolbox_hosted = True, parent = None, form = None, name = None, fl = 0):
  531.         ScrollView.__init__(self, parent, name, fl)
  532.         self.form = form
  533.         self.toolbox_hosted = toolbox_hosted
  534.  
  535.     
  536.     def fillControls(self):
  537.         ScrollView.fillControls(self)
  538.         self.addDeviceInfo()
  539.         if self.toolbox_hosted:
  540.             self.navButton = self.addActionButton('bottom_nav', '', None, self._ScrollDeviceInfoView__tr('<< Tools'), self.navButton_clicked)
  541.         else:
  542.             self.navButton = self.addActionButton('bottom_nav', self._ScrollDeviceInfoView__tr('Close'), self.navButton_clicked, '', None)
  543.         self.maximizeControl()
  544.  
  545.     
  546.     def addDeviceInfo(self):
  547.         self.addGroupHeading('info_title', self._ScrollDeviceInfoView__tr('Device Information'))
  548.         widget = self.getWidget()
  549.         layout37 = QGridLayout(widget, 1, 1, 5, 10, 'layout37')
  550.         self.infoListView = QListView(widget, 'fileListView')
  551.         self.infoListView.addColumn(self._ScrollDeviceInfoView__tr('Static/Dynamic'))
  552.         self.infoListView.addColumn(self._ScrollDeviceInfoView__tr('Key'))
  553.         self.infoListView.addColumn(self._ScrollDeviceInfoView__tr('Value'))
  554.         self.infoListView.setAllColumnsShowFocus(1)
  555.         self.infoListView.setShowSortIndicator(1)
  556.         self.infoListView.setColumnWidth(0, 50)
  557.         self.infoListView.setColumnWidth(1, 150)
  558.         self.infoListView.setColumnWidth(2, 300)
  559.         self.infoListView.setItemMargin(2)
  560.         self.infoListView.setSorting(-1)
  561.         layout37.addMultiCellWidget(self.infoListView, 1, 1, 0, 3)
  562.         mq_keys = self.cur_device.mq.keys()
  563.         mq_keys.sort()
  564.         mq_keys.reverse()
  565.         for key, i in zip(mq_keys, range(len(mq_keys))):
  566.             QListViewItem(self.infoListView, self._ScrollDeviceInfoView__tr('Static'), key, str(self.cur_device.mq[key]))
  567.         
  568.         dq_keys = self.cur_device.dq.keys()
  569.         dq_keys.sort()
  570.         dq_keys.reverse()
  571.         for key, i in zip(dq_keys, range(len(dq_keys))):
  572.             QListViewItem(self.infoListView, self._ScrollDeviceInfoView__tr('Dynamic'), key, str(self.cur_device.dq[key]))
  573.         
  574.         self.addWidget(widget, 'file_list', maximize = True)
  575.  
  576.     
  577.     def navButton_clicked(self):
  578.         if self.toolbox_hosted:
  579.             self.form.SwitchMaintTab('tools')
  580.         else:
  581.             self.form.close()
  582.  
  583.     
  584.     def __tr(self, s, c = None):
  585.         return qApp.translate('ScrollDeviceInfoView', s, c)
  586.  
  587.  
  588.  
  589. class ScrollTestpageView(ScrollView):
  590.     
  591.     def __init__(self, toolbox_hosted = True, parent = None, form = None, name = None, fl = 0):
  592.         ScrollView.__init__(self, parent, name, fl)
  593.         self.form = form
  594.         self.toolbox_hosted = toolbox_hosted
  595.  
  596.     
  597.     def fillControls(self):
  598.         ScrollView.fillControls(self)
  599.         self.addPrinterFaxList()
  600.         self.addTestpageType()
  601.         self.addLoadPaper()
  602.         if self.toolbox_hosted:
  603.             s = self._ScrollTestpageView__tr('<< Tools')
  604.         else:
  605.             s = self._ScrollTestpageView__tr('Close')
  606.         self.printButton = self.addActionButton('bottom_nav', self._ScrollTestpageView__tr('Print Test Page'), self.printButton_clicked, s, self.navButton_clicked)
  607.  
  608.     
  609.     def addTestpageType(self):
  610.         self.addGroupHeading('testpage_type', self._ScrollTestpageView__tr('Test Page Type'))
  611.         widget = self.getWidget()
  612.         Form4Layout = QGridLayout(widget, 1, 1, 5, 10, 'Form4Layout')
  613.         self.buttonGroup3 = QButtonGroup(widget, 'buttonGroup3')
  614.         self.buttonGroup3.setLineWidth(0)
  615.         self.buttonGroup3.setColumnLayout(0, Qt.Vertical)
  616.         self.buttonGroup3.layout().setSpacing(5)
  617.         self.buttonGroup3.layout().setMargin(10)
  618.         buttonGroup3Layout = QGridLayout(self.buttonGroup3.layout())
  619.         buttonGroup3Layout.setAlignment(Qt.AlignTop)
  620.         self.radioButton6 = QRadioButton(self.buttonGroup3, 'radioButton6')
  621.         self.radioButton6.setEnabled(False)
  622.         buttonGroup3Layout.addWidget(self.radioButton6, 1, 0)
  623.         self.radioButton5 = QRadioButton(self.buttonGroup3, 'radioButton5')
  624.         self.radioButton5.setChecked(1)
  625.         buttonGroup3Layout.addWidget(self.radioButton5, 0, 0)
  626.         Form4Layout.addWidget(self.buttonGroup3, 0, 0)
  627.         self.radioButton6.setText(self._ScrollTestpageView__tr('Printer diagnostic page (does not test print driver)'))
  628.         self.radioButton5.setText(self._ScrollTestpageView__tr('HPLIP test page (tests print driver)'))
  629.         self.addWidget(widget, 'page_type')
  630.  
  631.     
  632.     def navButton_clicked(self):
  633.         if self.toolbox_hosted:
  634.             self.form.SwitchMaintTab('tools')
  635.         else:
  636.             self.form.close()
  637.  
  638.     
  639.     def printButton_clicked(self):
  640.         d = self.cur_device
  641.         printer_name = self.cur_printer
  642.         printed = False
  643.         
  644.         try:
  645.             QApplication.setOverrideCursor(QApplication.waitCursor)
  646.             
  647.             try:
  648.                 d.open()
  649.             except Error:
  650.                 self.CheckDeviceUI()
  651.  
  652.             if d.isIdleAndNoError():
  653.                 QApplication.restoreOverrideCursor()
  654.                 d.close()
  655.                 d.printTestPage(printer_name)
  656.                 printed = True
  657.             else:
  658.                 d.close()
  659.                 self.CheckDeviceUI()
  660.         finally:
  661.             QApplication.restoreOverrideCursor()
  662.  
  663.         if printed:
  664.             QMessageBox.information(self, self.caption(), self._ScrollTestpageView__tr('<p><b>A test page should be printing on your printer.</b><p>If the page fails to print, please visit http://hplip.sourceforge.net for troubleshooting and support.'), QMessageBox.Ok, QMessageBox.NoButton, QMessageBox.NoButton)
  665.         
  666.         if self.toolbox_hosted:
  667.             self.form.SwitchMaintTab('tools')
  668.         else:
  669.             self.form.close()
  670.  
  671.     
  672.     def __tr(self, s, c = None):
  673.         return qApp.translate('ScrollTestpageView', s, c)
  674.  
  675.  
  676.  
  677. class ScrollPrinterInfoView(ScrollView):
  678.     
  679.     def __init__(self, toolbox_hosted = True, parent = None, form = None, name = None, fl = 0):
  680.         ScrollView.__init__(self, parent, name, fl)
  681.         self.form = form
  682.         self.toolbox_hosted = toolbox_hosted
  683.  
  684.     
  685.     def fillControls(self):
  686.         ScrollView.fillControls(self)
  687.         printers = []
  688.         for p in self.printers:
  689.             if p.device_uri == self.cur_device.device_uri or p.device_uri.replace('hpfax:', 'hp:') == self.cur_device.device_uri:
  690.                 printers.append(p)
  691.                 continue
  692.         
  693.         if not printers:
  694.             self.addGroupHeading('error_title', self._ScrollPrinterInfoView__tr('No printers found for this device.'))
  695.         else:
  696.             for p in printers:
  697.                 self.addPrinterInfo(p)
  698.             
  699.         if self.toolbox_hosted:
  700.             self.navButton = self.addActionButton('bottom_nav', '', None, self._ScrollPrinterInfoView__tr('<< Tools'), self.navButton_clicked)
  701.         else:
  702.             self.navButton = self.addActionButton('bottom_nav', self._ScrollPrinterInfoView__tr('Close'), self.navButton_clicked, '', None)
  703.         self.maximizeControl()
  704.  
  705.     
  706.     def addPrinterInfo(self, p):
  707.         self.addGroupHeading(p.name, p.name)
  708.         widget = self.getWidget()
  709.         layout1 = QVBoxLayout(widget, 5, 10, 'layout1')
  710.         textLabel2 = QLabel(widget, 'textLabel2')
  711.         if p.device_uri.startswith('hpfax:'):
  712.             s = self._ScrollPrinterInfoView__tr('Fax')
  713.         else:
  714.             s = self._ScrollPrinterInfoView__tr('Printer')
  715.         textLabel2.setText(self._ScrollPrinterInfoView__tr('Type: %1').arg(s))
  716.         layout1.addWidget(textLabel2)
  717.         textLabel3 = QLabel(widget, 'textLabel3')
  718.         textLabel3.setText(self._ScrollPrinterInfoView__tr('Location: %1').arg(p.location))
  719.         layout1.addWidget(textLabel3)
  720.         textLabel4 = QLabel(widget, 'textLabel4')
  721.         textLabel4.setText(self._ScrollPrinterInfoView__tr('Description/Info: %1').arg(p.info))
  722.         layout1.addWidget(textLabel4)
  723.         textLabel5 = QLabel(widget, 'textLabel5')
  724.         if p.state == cups.IPP_PRINTER_STATE_IDLE:
  725.             s = self._ScrollPrinterInfoView__tr('Idle')
  726.         elif p.state == cups.IPP_PRINTER_STATE_PROCESSING:
  727.             s = self._ScrollPrinterInfoView__tr('Processing')
  728.         elif p.state == cups.IPP_PRINTER_STATE_STOPPED:
  729.             s = self._ScrollPrinterInfoView__tr('Stopped')
  730.         else:
  731.             s = self._ScrollPrinterInfoView__tr('Unknown')
  732.         textLabel5.setText(self._ScrollPrinterInfoView__tr('State: %1').arg(s))
  733.         layout1.addWidget(textLabel5)
  734.         textLabel6 = QLabel(widget, 'textLabel6')
  735.         textLabel6.setText(self._ScrollPrinterInfoView__tr('PPD/Driver: %1').arg(p.makemodel))
  736.         layout1.addWidget(textLabel6)
  737.         textLabel7 = QLabel(widget, 'textLabel7')
  738.         textLabel7.setText(self._ScrollPrinterInfoView__tr('CUPS/IPP Printer URI: %1').arg(p.printer_uri))
  739.         layout1.addWidget(textLabel7)
  740.         self.addWidget(widget, p.name)
  741.  
  742.     
  743.     def navButton_clicked(self):
  744.         if self.toolbox_hosted:
  745.             self.form.SwitchMaintTab('tools')
  746.         else:
  747.             self.form.close()
  748.  
  749.     
  750.     def __tr(self, s, c = None):
  751.         return qApp.translate('ScrollPrinterInfoView', s, c)
  752.  
  753.  
  754.