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 / scrollprint.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2007-04-29  |  18.2 KB  |  479 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. from base.g import *
  5. from base import utils, magic
  6. from prnt import cups
  7. from qt import *
  8. from scrollview import ScrollView, PixmapLabelButton
  9. from allowabletypesdlg import AllowableTypesDlg
  10. import os.path as os
  11. import os
  12.  
  13. class RangeValidator(QValidator):
  14.     
  15.     def __init__(self, parent = None, name = None):
  16.         QValidator.__init__(self, parent, name)
  17.  
  18.     
  19.     def validate(self, input, pos):
  20.         for x in str(input)[pos - 1:]:
  21.             if x not in '0123456789,- ':
  22.                 return (QValidator.Invalid, pos)
  23.                 continue
  24.         
  25.         return (QValidator.Acceptable, pos)
  26.  
  27.  
  28.  
  29. class ScrollPrintView(ScrollView):
  30.     
  31.     def __init__(self, toolbox_hosted = True, parent = None, form = None, name = None, fl = 0):
  32.         ScrollView.__init__(self, parent, name, fl)
  33.         self.toolbox_hosted = toolbox_hosted
  34.         self.form = form
  35.         self.file_list = []
  36.         self.pages_button_group = 0
  37.         self.allowable_mime_types = cups.getAllowableMIMETypes()
  38.         self.allowable_mime_types.append('application/x-python')
  39.         log.debug(self.allowable_mime_types)
  40.         self.MIME_TYPES_DESC = {
  41.             'application/pdf': (self._ScrollPrintView__tr('PDF Document'), '.pdf'),
  42.             'application/postscript': (self._ScrollPrintView__tr('Postscript Document'), '.ps'),
  43.             'application/vnd.hp-HPGL': (self._ScrollPrintView__tr('HP Graphics Language File'), '.hgl, .hpg, .plt, .prn'),
  44.             'application/x-cshell': (self._ScrollPrintView__tr('C Shell Script'), '.csh, .sh'),
  45.             'application/x-csource': (self._ScrollPrintView__tr('C Source Code'), '.c'),
  46.             'text/cpp': (self._ScrollPrintView__tr('C++ Source Code'), '.cpp, .cxx'),
  47.             'application/x-perl': (self._ScrollPrintView__tr('Perl Script'), '.pl'),
  48.             'application/x-python': (self._ScrollPrintView__tr('Python Program'), '.py'),
  49.             'application/x-shell': (self._ScrollPrintView__tr('Shell Script'), '.sh'),
  50.             'text/plain': (self._ScrollPrintView__tr('Plain Text'), '.txt, .log, etc'),
  51.             'text/html': (self._ScrollPrintView__tr('HTML Dcoument'), '.htm, .html'),
  52.             'image/gif': (self._ScrollPrintView__tr('GIF Image'), '.gif'),
  53.             'image/png': (self._ScrollPrintView__tr('PNG Image'), '.png'),
  54.             'image/jpeg': (self._ScrollPrintView__tr('JPEG Image'), '.jpg, .jpeg'),
  55.             'image/tiff': (self._ScrollPrintView__tr('TIFF Image'), '.tif, .tiff'),
  56.             'image/x-bitmap': (self._ScrollPrintView__tr('Bitmap (BMP) Image'), '.bmp'),
  57.             'image/x-bmp': (self._ScrollPrintView__tr('Bitmap (BMP) Image'), '.bmp'),
  58.             'image/x-photocd': (self._ScrollPrintView__tr('Photo CD Image'), '.pcd'),
  59.             'image/x-portable-anymap': (self._ScrollPrintView__tr('Portable Image (PNM)'), '.pnm'),
  60.             'image/x-portable-bitmap': (self._ScrollPrintView__tr('Portable B&W Image (PBM)'), '.pbm'),
  61.             'image/x-portable-graymap': (self._ScrollPrintView__tr('Portable Grayscale Image (PGM)'), '.pgm'),
  62.             'image/x-portable-pixmap': (self._ScrollPrintView__tr('Portable Color Image (PPM)'), '.ppm'),
  63.             'image/x-sgi-rgb': (self._ScrollPrintView__tr('SGI RGB'), '.rgb'),
  64.             'image/x-xbitmap': (self._ScrollPrintView__tr('X11 Bitmap (XBM)'), '.xbm'),
  65.             'image/x-xpixmap': (self._ScrollPrintView__tr('X11 Pixmap (XPM)'), '.xpm'),
  66.             'image/x-sun-raster': (self._ScrollPrintView__tr('Sun Raster Format'), '.ras') }
  67.  
  68.     
  69.     def fillControls(self):
  70.         ScrollView.fillControls(self)
  71.         self.addPrinterFaxList()
  72.         self.addGroupHeading('files_to_print', 'File(s) to Print')
  73.         self.addFileList()
  74.         self.addGroupHeading('options', 'Print Options')
  75.         self.addCopies()
  76.         self.addPageRange()
  77.         self.addPageSet()
  78.         self.addGroupHeading('space1', '')
  79.         if self.toolbox_hosted:
  80.             s = self._ScrollPrintView__tr('<< Functions')
  81.         else:
  82.             s = self._ScrollPrintView__tr('Close')
  83.         self.printButton = self.addActionButton('bottom_nav', self._ScrollPrintView__tr('Print File(s)'), self.printButton_clicked, s, self.funcButton_clicked)
  84.         self.printButton.setEnabled(False)
  85.         self.maximizeControl()
  86.  
  87.     
  88.     def addFileList(self):
  89.         widget = self.getWidget()
  90.         layout37 = QGridLayout(widget, 1, 1, 5, 10, 'layout37')
  91.         self.addFilePushButton = PixmapLabelButton(widget, 'list-add.png', 'list-add-disabled.png')
  92.         layout37.addWidget(self.addFilePushButton, 2, 0)
  93.         self.showTypesPushButton = PixmapLabelButton(widget, 'mimetypes.png', None, name = 'addFilePushButton')
  94.         layout37.addWidget(self.showTypesPushButton, 2, 3)
  95.         self.removeFilePushButton = PixmapLabelButton(widget, 'list-remove.png', 'list-remove-disabled.png')
  96.         layout37.addWidget(self.removeFilePushButton, 2, 1)
  97.         self.fileListView = QListView(widget, 'fileListView')
  98.         self.fileListView.addColumn(self._ScrollPrintView__tr('Name'))
  99.         self.fileListView.addColumn(self._ScrollPrintView__tr('Type'))
  100.         self.fileListView.addColumn(self._ScrollPrintView__tr('Path'))
  101.         self.fileListView.setAllColumnsShowFocus(1)
  102.         self.fileListView.setShowSortIndicator(1)
  103.         self.fileListView.setColumnWidth(0, 150)
  104.         self.fileListView.setColumnWidth(1, 75)
  105.         self.fileListView.setColumnWidth(2, 300)
  106.         self.fileListView.setItemMargin(2)
  107.         self.fileListView.setSorting(-1)
  108.         layout37.addMultiCellWidget(self.fileListView, 1, 1, 0, 3)
  109.         spacer26 = QSpacerItem(20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
  110.         layout37.addItem(spacer26, 2, 2)
  111.         self.addFilePushButton.setText(self._ScrollPrintView__tr('Add File...'))
  112.         self.showTypesPushButton.setText(self._ScrollPrintView__tr('Show Types...'))
  113.         self.removeFilePushButton.setText(self._ScrollPrintView__tr('Remove File'))
  114.         self.removeFilePushButton.setEnabled(False)
  115.         self.connect(self.addFilePushButton, SIGNAL('clicked()'), self.addFile_clicked)
  116.         self.connect(self.removeFilePushButton, SIGNAL('clicked()'), self.removeFile_clicked)
  117.         self.connect(self.showTypesPushButton, SIGNAL('clicked()'), self.showFileTypes_clicked)
  118.         self.connect(self.fileListView, SIGNAL('rightButtonClicked(QListViewItem*,const QPoint&, int)'), self.fileListView_rightButtonClicked)
  119.         self.addWidget(widget, 'file_list', maximize = True)
  120.  
  121.     
  122.     def fileListView_rightButtonClicked(self, item, pos, col):
  123.         popup = QPopupMenu(self)
  124.         popup.insertItem(QIconSet(QPixmap(os.path.join(prop.image_dir, 'list-add.png'))), self._ScrollPrintView__tr('Add File...'), self.addFile_clicked)
  125.         if item is not None:
  126.             popup.insertItem(QIconSet(QPixmap(os.path.join(prop.image_dir, 'list-remove.png'))), self._ScrollPrintView__tr('Remove File'), self.removeFile_clicked)
  127.         
  128.         popup.insertSeparator(-1)
  129.         popup.insertItem(QIconSet(QPixmap(os.path.join(prop.image_dir, 'mimetypes.png'))), self._ScrollPrintView__tr('Show File Types...'), self.showFileTypes_clicked)
  130.         popup.popup(pos)
  131.  
  132.     
  133.     def addFile(self, path):
  134.         path = os.path.realpath(path)
  135.         if os.path.exists(path):
  136.             mime_type = magic.mime_type(path)
  137.             mime_type_desc = mime_type
  138.             log.debug(mime_type)
  139.             
  140.             try:
  141.                 mime_type_desc = self.MIME_TYPES_DESC[mime_type][0]
  142.             except KeyError:
  143.                 self.form.WarningUI(self._ScrollPrintView__tr('<b>You are trying to add a file that cannot be directly printed with this utility.</b><p>To print this file, use the print command in the application that created it.'))
  144.  
  145.             log.debug('Adding file %s (%s,%s)' % (path, mime_type, mime_type_desc))
  146.             self.file_list.append((path, mime_type, mime_type_desc))
  147.         else:
  148.             self.form.FailureUI(self._ScrollPrintView__tr("<b>Unable to add file '%s' to file list.</b><p>Check the file name and try again." % path))
  149.         self.UpdateFileList()
  150.  
  151.     
  152.     def UpdateFileList(self):
  153.         self.fileListView.clear()
  154.         temp = self.file_list[:]
  155.         temp.reverse()
  156.         x = True
  157.         for p, t, d in temp:
  158.             i = QListViewItem(self.fileListView, os.path.basename(p), d, p)
  159.             if x:
  160.                 self.fileListView.setSelected(i, True)
  161.                 x = False
  162.                 continue
  163.         
  164.         non_empty_file_list = self.fileListView.childCount() > 0
  165.         self.printButton.setEnabled(non_empty_file_list)
  166.         self.removeFilePushButton.setEnabled(non_empty_file_list)
  167.  
  168.     
  169.     def addFile_clicked(self):
  170.         workingDirectory = user_cfg.last_used.working_dir
  171.         if not workingDirectory or not os.path.exists(workingDirectory):
  172.             workingDirectory = os.path.expanduser('~')
  173.         
  174.         log.debug('workingDirectory: %s' % workingDirectory)
  175.         dlg = QFileDialog(workingDirectory, QString.null, None, None, True)
  176.         dlg.setCaption('openfile')
  177.         dlg.setMode(QFileDialog.ExistingFile)
  178.         dlg.show()
  179.         if dlg.exec_loop() == QDialog.Accepted:
  180.             results = dlg.selectedFile()
  181.             workingDirectory = str(dlg.dir().absPath())
  182.             log.debug('results: %s' % results)
  183.             log.debug('workingDirectory: %s' % workingDirectory)
  184.             user_cfg.last_used.working_dir = workingDirectory
  185.             if results:
  186.                 self.addFile(str(results))
  187.             
  188.         
  189.  
  190.     
  191.     def removeFile_clicked(self):
  192.         
  193.         try:
  194.             path = self.fileListView.currentItem().text(2)
  195.         except AttributeError:
  196.             return None
  197.  
  198.         temp = self.file_list[:]
  199.         index = 0
  200.         for p, t, d in temp:
  201.             if p == path:
  202.                 del self.file_list[index]
  203.                 break
  204.             
  205.             index += 1
  206.         
  207.         self.UpdateFileList()
  208.  
  209.     
  210.     def showFileTypes_clicked(self):
  211.         x = { }
  212.         for a in self.allowable_mime_types:
  213.             x[a] = self.MIME_TYPES_DESC.get(a, ('Unknown', 'n/a'))
  214.         
  215.         log.debug(x)
  216.         dlg = AllowableTypesDlg(x, self)
  217.         dlg.exec_loop()
  218.  
  219.     
  220.     def addCopies(self):
  221.         widget = self.getWidget()
  222.         layout12 = QHBoxLayout(widget, 5, 10, 'layout12')
  223.         self.textLabel5 = QLabel(widget, 'textLabel5')
  224.         layout12.addWidget(self.textLabel5)
  225.         spacer20 = QSpacerItem(20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
  226.         layout12.addItem(spacer20)
  227.         self.copiesSpinBox = QSpinBox(widget, 'copiesSpinBox')
  228.         layout12.addWidget(self.copiesSpinBox)
  229.         self.copiesDefaultPushButton = QPushButton(widget, 'copiesDefaultPushButton')
  230.         layout12.addWidget(self.copiesDefaultPushButton)
  231.         self.textLabel5.setText(self._ScrollPrintView__tr('Number of copies:'))
  232.         self.copiesDefaultPushButton.setText(self._ScrollPrintView__tr('Default'))
  233.         self.copiesSpinBox.setMaxValue(99)
  234.         self.copiesSpinBox.setMinValue(1)
  235.         self.copiesSpinBox.setValue(1)
  236.         self.copiesDefaultPushButton.setEnabled(False)
  237.         self.connect(self.copiesDefaultPushButton, SIGNAL('clicked()'), self.copiesDefaultPushButton_clicked)
  238.         self.connect(self.copiesSpinBox, SIGNAL('valueChanged(int)'), self.copiesSpinBox_valueChanged)
  239.         self.addWidget(widget, 'copies')
  240.  
  241.     
  242.     def copiesDefaultPushButton_clicked(self):
  243.         self.copiesSpinBox.setValue(1)
  244.         self.copiesDefaultPushButton.setEnabled(False)
  245.  
  246.     
  247.     def copiesSpinBox_valueChanged(self, i):
  248.         self.copiesDefaultPushButton.setEnabled(i != 1)
  249.  
  250.     
  251.     def addPageRange(self):
  252.         widget = self.getWidget()
  253.         layout39 = QGridLayout(widget, 1, 1, 5, 10, 'layout39')
  254.         self.pageRangeEdit = QLineEdit(widget, 'self.pageRangeEdit')
  255.         self.pageRangeEdit.setEnabled(0)
  256.         layout39.addWidget(self.pageRangeEdit, 0, 3)
  257.         spacer20_2 = QSpacerItem(20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
  258.         layout39.addItem(spacer20_2, 0, 1)
  259.         textLabel5_2 = QLabel(widget, 'textLabel5_2')
  260.         layout39.addWidget(textLabel5_2, 0, 0)
  261.         self.pagerangeDefaultPushButton = QPushButton(widget, 'pagerangeDefaultPushButton')
  262.         layout39.addWidget(self.pagerangeDefaultPushButton, 0, 4)
  263.         self.rangeButtonGroup = QButtonGroup(widget, 'self.rangeButtonGroup')
  264.         self.rangeButtonGroup.setLineWidth(0)
  265.         self.rangeButtonGroup.setColumnLayout(0, Qt.Vertical)
  266.         self.rangeButtonGroup.layout().setSpacing(0)
  267.         self.rangeButtonGroup.layout().setMargin(0)
  268.         self.rangeButtonGroupLayout = QGridLayout(self.rangeButtonGroup.layout())
  269.         self.rangeButtonGroupLayout.setAlignment(Qt.AlignTop)
  270.         radioButton3_2 = QRadioButton(self.rangeButtonGroup, 'radioButton3_2')
  271.         radioButton3_2.setChecked(1)
  272.         self.rangeButtonGroup.insert(radioButton3_2, 0)
  273.         self.rangeButtonGroupLayout.addWidget(radioButton3_2, 0, 0)
  274.         radioButton4_2 = QRadioButton(self.rangeButtonGroup, 'radioButton4_2')
  275.         self.rangeButtonGroup.insert(radioButton4_2, 1)
  276.         self.rangeButtonGroupLayout.addWidget(radioButton4_2, 0, 1)
  277.         layout39.addWidget(self.rangeButtonGroup, 0, 2)
  278.         self.bg = self.pageRangeEdit.paletteBackgroundColor()
  279.         self.invalid_page_range = False
  280.         self.pageRangeEdit.setValidator(RangeValidator(self.pageRangeEdit))
  281.         textLabel5_2.setText(self._ScrollPrintView__tr('Page Range:'))
  282.         radioButton3_2.setText(self._ScrollPrintView__tr('All pages'))
  283.         radioButton4_2.setText(self._ScrollPrintView__tr('Page range:'))
  284.         self.pagerangeDefaultPushButton.setText(self._ScrollPrintView__tr('Default'))
  285.         self.pagerangeDefaultPushButton.setEnabled(False)
  286.         self.connect(self.rangeButtonGroup, SIGNAL('clicked(int)'), self.rangeButtonGroup_clicked)
  287.         self.connect(self.pageRangeEdit, SIGNAL('lostFocus()'), self.pageRangeEdit_lostFocus)
  288.         self.connect(self.pageRangeEdit, SIGNAL('textChanged(const QString&)'), self.pageRangeEdit_textChanged)
  289.         self.connect(self.pagerangeDefaultPushButton, SIGNAL('clicked()'), self.pagerangeDefaultPushButton_clicked)
  290.         self.addWidget(widget, 'range')
  291.  
  292.     
  293.     def pagerangeDefaultPushButton_clicked(self):
  294.         self.rangeButtonGroup.setButton(0)
  295.         self.pagerangeDefaultPushButton.setEnabled(False)
  296.         self.pageRangeEdit.setEnabled(False)
  297.  
  298.     
  299.     def rangeButtonGroup_clicked(self, a0):
  300.         self.pages_button_group = a0
  301.         self.pageRangeEdit.setEnabled(a0 == 1)
  302.         self.pagerangeDefaultPushButton.setEnabled(a0 == 1)
  303.  
  304.     
  305.     def pageRangeEdit_lostFocus(self):
  306.         x = []
  307.         
  308.         try:
  309.             x = utils.expand_range(str(self.pageRangeEdit.text()))
  310.         except ValueError:
  311.             log.error('Invalid page range entered.')
  312.             self.invalid_page_range = True
  313.             self.pageRangeEdit.setPaletteBackgroundColor(QColor(255, 153, 153))
  314.  
  315.         self.pageRangeEdit.setText(QString(utils.collapse_range(x)))
  316.         self.pageRangeEdit.setPaletteBackgroundColor(self.bg)
  317.         self.invalid_page_range = False
  318.  
  319.     
  320.     def pageRangeEdit_textChanged(self, a0):
  321.         x = []
  322.         
  323.         try:
  324.             x = utils.expand_range(str(self.pageRangeEdit.text()))
  325.         except ValueError:
  326.             self.invalid_page_range = True
  327.             self.pageRangeEdit.setPaletteBackgroundColor(QColor(255, 153, 153))
  328.  
  329.         self.pageRangeEdit.setPaletteBackgroundColor(self.bg)
  330.         self.invalid_page_range = False
  331.  
  332.     
  333.     def addPageSet(self):
  334.         widget = self.getWidget()
  335.         layout34 = QHBoxLayout(widget, 5, 10, 'layout34')
  336.         self.textLabel5_4 = QLabel(widget, 'textLabel5_4')
  337.         layout34.addWidget(self.textLabel5_4)
  338.         spacer20_4 = QSpacerItem(20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
  339.         layout34.addItem(spacer20_4)
  340.         self.pageSetComboBox = QComboBox(0, widget, 'pageSetComboBox')
  341.         layout34.addWidget(self.pageSetComboBox)
  342.         self.pagesetDefaultPushButton = QPushButton(widget, 'pagesetDefaultPushButton')
  343.         layout34.addWidget(self.pagesetDefaultPushButton)
  344.         self.textLabel5_4.setText(self._ScrollPrintView__tr('Page set:'))
  345.         self.pageSetComboBox.clear()
  346.         self.pageSetComboBox.insertItem(self._ScrollPrintView__tr('All pages'))
  347.         self.pageSetComboBox.insertItem(self._ScrollPrintView__tr('Even pages'))
  348.         self.pageSetComboBox.insertItem(self._ScrollPrintView__tr('Odd pages'))
  349.         self.pagesetDefaultPushButton.setText(self._ScrollPrintView__tr('Default'))
  350.         self.pagesetDefaultPushButton.setEnabled(False)
  351.         self.connect(self.pageSetComboBox, SIGNAL('activated(int)'), self.pageSetComboBox_activated)
  352.         self.connect(self.pagesetDefaultPushButton, SIGNAL('clicked()'), self.pagesetDefaultPushButton_clicked)
  353.         self.addWidget(widget, 'set')
  354.  
  355.     
  356.     def pagesetDefaultPushButton_clicked(self):
  357.         self.pagesetDefaultPushButton.setEnabled(False)
  358.         self.pageSetComboBox.setCurrentItem(0)
  359.  
  360.     
  361.     def pageSetComboBox_activated(self, i):
  362.         self.pagesetDefaultPushButton.setEnabled(i != 0)
  363.  
  364.     
  365.     def printButton_clicked(self):
  366.         if self.invalid_page_range:
  367.             self.form.FailureUI(self._ScrollPrintView__tr('<b>Cannot print: Invalid page range: %1</b><p>A valid page range is a list of pages or ranges of pages separated by commas (e.g., 1-2,4,6-7)').arg(self.pageRangeEdit.text()))
  368.             return None
  369.         
  370.         
  371.         try:
  372.             self.cur_device.open()
  373.         except Error:
  374.             self.form.FailureUI(self._ScrollPrintView__tr('<b>Cannot print: Device is busy or not available.</b><p>Please check device and try again.'))
  375.             return None
  376.         
  377.  
  378.         if self.cur_device.isIdleAndNoError():
  379.             copies = int(self.copiesSpinBox.value())
  380.             all_pages = self.pages_button_group == 0
  381.             page_range = str(self.pageRangeEdit.text())
  382.             page_set = int(self.pageSetComboBox.currentItem())
  383.             cups.resetOptions()
  384.             cups.openPPD(self.cur_printer)
  385.             current_options = dict(cups.getOptions())
  386.             cups.closePPD()
  387.             nup = int(current_options.get('number-up', 1))
  388.             for p, t, d in self.file_list:
  389.                 if nup > 1 and t == 'application/postscript':
  390.                     pass
  391.                 alt_nup = utils.which('psnup')
  392.                 if utils.which('lpr'):
  393.                     if alt_nup:
  394.                         cmd = ' '.join([
  395.                             'psnup',
  396.                             '-%d' % nup,
  397.                             ''.join([
  398.                                 '"',
  399.                                 p,
  400.                                 '"']),
  401.                             '| lpr -P',
  402.                             self.cur_printer])
  403.                     else:
  404.                         cmd = ' '.join([
  405.                             'lpr -P',
  406.                             self.cur_printer])
  407.                     if copies > 1:
  408.                         cmd = ' '.join([
  409.                             cmd,
  410.                             '-#%d' % copies])
  411.                     
  412.                 elif alt_nup:
  413.                     cmd = ' '.join([
  414.                         'psnup',
  415.                         '-%d' % nup,
  416.                         ''.join([
  417.                             '"',
  418.                             p,
  419.                             '"']),
  420.                         '| lp -c -d',
  421.                         self.cur_printer])
  422.                 else:
  423.                     cmd = ' '.join([
  424.                         'lp -c -d',
  425.                         self.cur_printer])
  426.                 if copies > 1:
  427.                     cmd = ' '.join([
  428.                         cmd,
  429.                         '-n%d' % copies])
  430.                 
  431.                 if not all_pages and len(page_range) > 0:
  432.                     cmd = ' '.join([
  433.                         cmd,
  434.                         '-o page-ranges=%s' % page_range])
  435.                 
  436.                 if page_set > 0:
  437.                     if page_set == 1:
  438.                         cmd = ' '.join([
  439.                             cmd,
  440.                             '-o page-set=even'])
  441.                     else:
  442.                         cmd = ' '.join([
  443.                             cmd,
  444.                             '-o page-set=odd'])
  445.                 
  446.                 if not alt_nup:
  447.                     cmd = ''.join([
  448.                         cmd,
  449.                         ' "',
  450.                         p,
  451.                         '"'])
  452.                 
  453.                 log.debug('Printing: %s' % cmd)
  454.                 if os.system(cmd) != 0:
  455.                     log.error('Print command failed.')
  456.                     self.FailureUI(self._ScrollPrintView__tr('Print command failed.'))
  457.                     continue
  458.             
  459.             if self.toolbox_hosted:
  460.                 self.form.SwitchFunctionsTab('funcs')
  461.             else:
  462.                 self.form.close()
  463.         else:
  464.             self.form.FailureUI(self._ScrollPrintView__tr('<b>Cannot print: Device is busy or not available.</b><p>Please check device and try again.'))
  465.         self.cur_device.close()
  466.  
  467.     
  468.     def funcButton_clicked(self):
  469.         if self.toolbox_hosted:
  470.             self.form.SwitchFunctionsTab('funcs')
  471.         else:
  472.             self.form.close()
  473.  
  474.     
  475.     def __tr(self, s, c = None):
  476.         return qApp.translate('DevMgr4', s, c)
  477.  
  478.  
  479.