1#!/usr/local/bin/python3.8
2# -*- coding: utf-8 -*-
3
4# Form implementation generated from reading ui file 'Hp-Scan.ui'
5#
6# Created by: PyQt5 UI code generator 4.11.4
7#
8# WARNING! All changes made in this file will be lost!
9
10from PyQt5 import QtCore, QtGui, QtWidgets
11from base import utils,imageprocessing
12#from scan import sane
13import re
14import os
15import platform
16
17from PyQt5.QtGui import *
18from PyQt5.QtCore import *
19from PyQt5.QtWidgets import *
20from scan import sane
21from collections import OrderedDict
22
23PAGE_SIZES = OrderedDict([ # in mm
24    ("letter" , (215, 279, "Letter", 'in')),
25    ('a3' , (297, 420, "A3", 'mm')),
26    ("a4" , (210, 297, "A4", 'mm')),
27    ("a5" , (148, 210, "A5", 'mm')),
28    ('5x7' , (127, 178, "5x7 photo", 'in')),
29    ('4x6' , (102, 152, "4x6 photo", 'in')),
30    ('3x5' , (76, 127, "3x5 index card", 'in')),
31    ('a2_env' , (111, 146, "A2 Envelope", 'in')),
32    ("a6" , (105, 148, "A6", 'mm')),
33    ("b4" , (257, 364, "B4", 'mm')),
34    ("b5" , (182, 257, "B5", 'mm')),
35    ("c6_env" , (114, 162, "C6 Envelope", 'in')),
36    ("dl_env" , (110, 220, "DL Envelope", 'in')),
37    ("exec" , (184, 267, "Executive", 'in')),
38    ("flsa" , (216, 330, "Flsa", 'mm')),
39    ("higaki" , (100, 148, "Hagaki", 'mm')),
40    ("japan_env_3" , (120, 235, "Japanese Envelope #3", 'mm')),
41    ("japan_env_4" , (90, 205, "Japanese Envelope #4", 'mm')),
42    ("legal" , (215, 356, "Legal", 'in')),
43    ("no_10_env" , (105, 241, "Number 10 Envelope", 'in')),
44    ("oufufu-hagaki" , (148, 200, "Oufuku-Hagaki", 'mm')),
45    ("photo" , (102, 152, "Photo", 'in')),
46    ("super_b" , (330, 483, "Super B", 'in')),
47    ])
48
49
50#devicelist = {}
51device_name = ''
52path = os.getcwd()
53new_path = os.getcwd()
54multipick_error_message = "The scan operation has been cancelled or a multipick or paper is jammed in the ADF.\nIf you cancelled the scan,click OK.\nIf the scan was terminated due to a multi-feed or paper jam in the ADF,\ndo the following:\n\n1)Clear the ADF path. For instructions see your product documentation.\n2)Check the sheets are not stuck together. Remove any staples, sticky notes,tape or other objects.\n3)Restart the scan\n\nNote:If necessary, turn off automatic detection of multi-pick before starting a new scan\n"
55convert_error_message = "Convert command not found. Multiple Tiff document generation,\n Batch seperation feature with Tiff file format,\n Page merge feature and PDF generation using reportlab may not work as excepted.\n Please install ImageMagick package and try again\n"
56
57
58no_document_error_message = "No document(s). Please load documents and try again."
59
60no_pages_to_merge = "No scanned documents to merge."
61pyPlatform = ''
62num= {}
63try:
64    _encoding = QtWidgets.QApplication.UnicodeUTF8
65    def _translate(context, text, disambig):
66        return QtCore.QCoreApplication.translate(context, text, disambig, _encoding)
67except AttributeError:
68    def _translate(context, text, disambig):
69        return QtCore.QCoreApplication.translate(context, text, disambig)
70
71class Ui_HpScan(object):
72    devicelist = {}
73    #device_name = ''
74    file_type = 'png'
75    source = ''
76    color = 'gray'
77    resolution = '300'
78    size ='letter'
79    device_uri = ''
80    multi_pick = False
81    document_merge =False
82    auto_orient =False
83    crushed = False
84    bg_color_removal = False
85    punchhole_removal = False
86    color_dropout = False
87    searchablePDF = False
88    mixed_feed =False
89    blank_page = False
90    batch_seperation = False
91    bp_barcode = False
92    auto_crop = False
93    deskew_image = False
94    document_merge_adf_flatbed = False
95    image_enhancement = False
96    brightness = False
97    dropout_color_red_value = 0
98    dropout_color_green_value = 0
99    dropout_color_blue_value = 0
100    contrast = False
101    sharpness = False
102    color_value = False
103    color_range = True
104    sizel1 = 0
105    sizel2 = 0
106    sizel3 = 0
107    sizel4 = 0
108    sizel5 = 49
109    deskew_image_pri = True
110    auto_crop_pri = True
111    mixed_feed_pri = True
112    auto_orient_pri = True
113    document_merge_adf_flatbed_pri = True
114    multi_pick_pri = True
115    searchablePDF_pri = True
116    #batch_seperation_pri = True
117    crushed_pri = True
118    bg_color_removal_pri = True
119    punchhole_removal_pri =True
120    color_dropout_pri = True
121    document_merge_pri = True
122    image_enhancement_pri = True
123    blank_page_pri = True
124    batchsepBC_pri = True
125    other_device_cnt = 0
126    ocr = False
127
128    def setupUi(self, HpScan):
129        pyPlatform = platform.python_version()
130        HpScan.setObjectName("HpScan")
131        HpScan.setMinimumSize(QtCore.QSize(900, 600))
132        HpScan.setMaximumSize(QtCore.QSize(900, 600))
133        font = QtGui.QFont()
134        font.setBold(False)
135        font.setWeight(50)
136        HpScan.setFont(font)
137        HpScan.setMouseTracking(False)
138        HpScan.setFocusPolicy(QtCore.Qt.NoFocus)
139        self.dockWidgetContents = QtWidgets.QWidget()
140        self.dockWidgetContents.setObjectName("dockWidgetContents")
141        self.label_Type = QtWidgets.QLabel(self.dockWidgetContents)
142        self.label_Type.setGeometry(QtCore.QRect(10, 89, 51, 41))
143        font = QtGui.QFont()
144        font.setBold(True)
145        font.setWeight(75)
146        self.label_Type.setFont(font)
147        self.label_Type.setMouseTracking(True)
148        self.label_Type.setObjectName("label_Type")
149        self.comboBox_Type = QtWidgets.QComboBox(self.dockWidgetContents)
150        self.comboBox_Type.setGeometry(QtCore.QRect(85, 90, 171, 41))
151        self.comboBox_Type.setObjectName("comboBox_Type")
152        self.comboBox_Type.addItem("")
153        self.comboBox_Type.addItem("")
154        self.comboBox_Type.addItem("")
155        self.comboBox_Type.addItem("")
156        self.comboBox_Type.addItem("")
157        self.comboBox_Type.currentIndexChanged.connect(self.comboBox_TypeIndexChanged)
158        self.comboBox_Flatbed = QtWidgets.QComboBox(self.dockWidgetContents)
159        self.comboBox_Flatbed.setGeometry(QtCore.QRect(85, 150, 171, 41))
160        self.comboBox_Flatbed.setObjectName("comboBox_Flatbed")
161        #self.comboBox_Flatbed.addItem(_fromUtf8(""))
162        #self.comboBox_Flatbed.addItem(_fromUtf8(""))
163        #self.comboBox_Flatbed.addItem(_fromUtf8(""))
164        #self.comboBox_Flatbed.currentIndexChanged.connect(self.comboBox_SourceChanged)
165        self.comboBox_Color = QtWidgets.QComboBox(self.dockWidgetContents)
166        self.comboBox_Color.setGeometry(QtCore.QRect(85, 210, 171, 41))
167        self.comboBox_Color.setObjectName("comboBox_Color")
168        self.comboBox_Color.addItem("")
169        self.comboBox_Color.addItem("")
170        self.comboBox_Color.currentIndexChanged.connect(self.comboBox_ColorIndexChanged)
171        self.comboBox_Resolution = QtWidgets.QComboBox(self.dockWidgetContents)
172        self.comboBox_Resolution.setGeometry(QtCore.QRect(85, 270, 171, 41))
173        self.comboBox_Resolution.setObjectName("comboBox_Resolution")
174        self.comboBox_Resolution.addItem("")
175        self.comboBox_Resolution.addItem("")
176        self.comboBox_Resolution.addItem("")
177        self.comboBox_Resolution.addItem("")
178        self.comboBox_Resolution.addItem("")
179        self.comboBox_Resolution.currentIndexChanged.connect(self.comboBox_ResIndexChanged)
180        self.label_Size = QtWidgets.QLabel(self.dockWidgetContents)
181        self.label_Size.setGeometry(QtCore.QRect(10, 329, 51, 41))
182        font = QtGui.QFont()
183        font.setBold(True)
184        font.setWeight(75)
185        self.label_Size.setFont(font)
186        self.label_Size.setMouseTracking(True)
187        self.label_Size.setObjectName("label_Size")
188        self.label_Device = QtWidgets.QLabel(self.dockWidgetContents)
189        self.label_Device.setGeometry(QtCore.QRect(10, 29, 65, 41))
190        font = QtGui.QFont()
191        font.setBold(True)
192        font.setWeight(75)
193        self.label_Device.setFont(font)
194        self.label_Device.setMouseTracking(True)
195        self.label_Device.setObjectName("label_Device")
196        self.comboBox_Papersize = QtWidgets.QComboBox(self.dockWidgetContents)
197        self.comboBox_Papersize.setGeometry(QtCore.QRect(85, 330, 171, 41))
198        self.comboBox_Papersize.setObjectName("comboBox_Papersize")
199        #self.comboBox_Papersize.addItem("")
200        #self.comboBox_Papersize.addItem("")
201        #self.comboBox_Papersize.addItem("")
202        #self.comboBox_Papersize.addItem("")
203        #self.comboBox_Papersize.addItem("")
204        #self.comboBox_Papersize.currentIndexChanged.connect(self.comboBox_PaperSizeIndexChanged)
205        self.pushButton_Scan = QtWidgets.QPushButton(self.dockWidgetContents)
206        self.pushButton_Scan.setGeometry(QtCore.QRect(60, 470, 81, 41))
207        font = QtGui.QFont()
208        font.setBold(True)
209        font.setWeight(75)
210        self.pushButton_Scan.setFont(font)
211        self.pushButton_Scan.setObjectName("pushButton_Scan")
212        self.pushButton_Scan.clicked.connect(self.scanButton_clicked)
213
214        self.label_Path = QtWidgets.QLabel(self.dockWidgetContents)
215        self.label_Path.setGeometry(QtCore.QRect(10,390, 51, 41))
216        font = QtGui.QFont()
217        font.setBold(True)
218        font.setWeight(75)
219        self.label_Path.setFont(font)
220        self.label_Path.setMouseTracking(True)
221        self.label_Path.setObjectName("label_Path")
222
223        self.pushButton_Change = QtWidgets.QPushButton(self.dockWidgetContents)
224        self.pushButton_Change.setGeometry(QtCore.QRect(155, 470, 101, 41))
225        font = QtGui.QFont()
226        font.setBold(True)
227        font.setWeight(75)
228        self.pushButton_Change.setFont(font)
229        self.pushButton_Change.setObjectName("pushButton_Change")
230        self.pushButton_Change.clicked.connect(self.selectFile)
231
232        self.pushButton_Merge = QtWidgets.QPushButton(self.dockWidgetContents)
233        self.pushButton_Merge.setGeometry(QtCore.QRect(450, 305, 81, 31))
234        font = QtGui.QFont()
235        font.setBold(True)
236        font.setWeight(75)
237        self.pushButton_Merge.setFont(font)
238        self.pushButton_Merge.setObjectName("pushButton_Merge")
239        self.pushButton_Merge.setEnabled(False)
240        self.pushButton_Merge.clicked.connect(self.mergeButton_clicked)
241
242        self.label_Flatbed = QtWidgets.QLabel(self.dockWidgetContents)
243        self.label_Flatbed.setGeometry(QtCore.QRect(10, 150, 51, 41))
244        self.label_Flatbed.setText("")
245        self.label_Flatbed.setPixmap(QtGui.QPixmap("/usr/share/hplip/data/images/other/flat1.png"))
246        self.label_Flatbed.setObjectName("label_Flatbed")
247        self.label_Color = QtWidgets.QLabel(self.dockWidgetContents)
248        self.label_Color.setGeometry(QtCore.QRect(20, 210, 61, 41))
249        self.label_Color.setText("")
250        self.label_Color.setPixmap(QtGui.QPixmap("/usr/share/hplip/data/images/other/viewer.png"))
251        self.label_Color.setObjectName("label_Color")
252        self.label_Resolution = QtWidgets.QLabel(self.dockWidgetContents)
253        self.label_Resolution.setGeometry(QtCore.QRect(20, 270, 51, 51))
254        self.label_Resolution.setText("")
255        self.label_Resolution.setPixmap(QtGui.QPixmap("/usr/share/hplip/data/images/other/resolution.png"))
256        self.label_Resolution.setObjectName("label_Resolution")
257        self.auto_orient = QtWidgets.QCheckBox(self.dockWidgetContents)
258        self.auto_orient.setGeometry(QtCore.QRect(300,70,117, 22))
259        self.auto_orient.setObjectName("auto_orient")
260        self.auto_orient.stateChanged.connect(self.Auto_orient)
261        self.crushed = QtWidgets.QCheckBox(self.dockWidgetContents)
262        self.crushed.setGeometry(QtCore.QRect(550,30,240, 22))
263        self.crushed.setObjectName("crushed")
264        self.crushed.stateChanged.connect(self.Crushed)
265        self.searchablePDF = QtWidgets.QCheckBox(self.dockWidgetContents)
266        self.searchablePDF.setGeometry(QtCore.QRect(300,350,200, 22))
267        self.searchablePDF.setObjectName("searchablePDF")
268        self.searchablePDF.stateChanged.connect(self.SearchablePDF)
269        self.punchhole_removal = QtWidgets.QCheckBox(self.dockWidgetContents)
270        self.punchhole_removal.setGeometry(QtCore.QRect(300,390,200, 22))
271        self.punchhole_removal.setObjectName("punchhole_removal")
272        self.punchhole_removal.stateChanged.connect(self.Punchhole_removal)
273        #self.punchhole_removal.stateChanged.connect(self.SearchablePDF)
274        self.color_dropout = QtWidgets.QCheckBox(self.dockWidgetContents)
275        self.color_dropout.setGeometry(QtCore.QRect(550,360,240, 22))
276        self.color_dropout.setObjectName("color_dropout")
277        self.color_dropout.stateChanged.connect(self.Color_dropout)
278        self.label_CR = QtWidgets.QLabel(self.dockWidgetContents)
279        self.label_CR.setGeometry(QtCore.QRect(560,390, 250, 22))
280        self.label_CR.setMouseTracking(True)
281        self.label_CR.setObjectName("label_CR")
282        self.bg_color_removal = QtWidgets.QCheckBox(self.dockWidgetContents)
283        self.bg_color_removal.setGeometry(QtCore.QRect(300,430,240, 22))
284        self.bg_color_removal.setObjectName("bg_color_removal")
285        self.bg_color_removal.stateChanged.connect(self.Bg_color_removal)
286        #self.bg_color_removal.stateChanged.connect(self.SearchablePDF)
287
288        self.auto_crop = QtWidgets.QCheckBox(self.dockWidgetContents)
289        self.auto_crop.setGeometry(QtCore.QRect(300, 110, 241, 20))
290        self.auto_crop.setObjectName("auto_crop")
291        self.auto_crop.stateChanged.connect(self.Auto_crop)
292        self.multi_pick = QtWidgets.QCheckBox(self.dockWidgetContents)
293        self.multi_pick.setGeometry(QtCore.QRect(300, 150, 231, 22))
294        self.multi_pick.setObjectName("multi_pick")
295        self.multi_pick.stateChanged.connect(self.Multi_pick)
296        self.blank_page = QtWidgets.QCheckBox(self.dockWidgetContents)
297        self.blank_page.setGeometry(QtCore.QRect(300, 190, 241, 22))
298        self.blank_page.setObjectName("blank_page")
299        self.blank_page.stateChanged.connect(self.Blank_page)
300        self.batch_seperation = QtWidgets.QCheckBox(self.dockWidgetContents)
301        self.batch_seperation.setGeometry(QtCore.QRect(550, 230, 201, 22))
302        self.batch_seperation.setObjectName("batch_seperation")
303        self.batch_seperation.stateChanged.connect(self.batch_Seperation)
304        #self.batch_seperation.setEnabled(False)
305        self.bp_blankpage = QtWidgets.QCheckBox(self.dockWidgetContents)
306        self.bp_blankpage.setGeometry(QtCore.QRect(570, 260, 201, 22))
307        self.bp_blankpage.setObjectName("bp_blankpage")
308        self.bp_blankpage.setEnabled(False)
309        self.bp_barcode = QtWidgets.QCheckBox(self.dockWidgetContents)
310        self.bp_barcode.setGeometry(QtCore.QRect(570, 290, 311, 22))
311        self.bp_barcode.setObjectName("bp_barcode")
312        self.bp_barcode.setEnabled(False)
313        self.comboBox_Barcode_Type = QtWidgets.QComboBox(self.dockWidgetContents)
314        self.comboBox_Barcode_Type.setGeometry(QtCore.QRect(590, 320, 261, 27))
315        self.comboBox_Barcode_Type.setObjectName("comboBox_Barcode_Type")
316        self.comboBox_Barcode_Type.addItem("")
317        self.comboBox_Barcode_Type.addItem("")
318        self.comboBox_Barcode_Type.addItem("")
319        self.comboBox_Barcode_Type.addItem("")
320        self.comboBox_Barcode_Type.addItem("")
321        self.comboBox_Barcode_Type.addItem("")
322        self.comboBox_Barcode_Type.addItem("")
323        self.comboBox_Barcode_Type.addItem("")
324        self.comboBox_Barcode_Type.setEnabled(False)
325        #self.comboBox_Barcode_Type.currentIndexChanged.connect(self.comboBox_ResIndexChanged)
326        self.document_merge = QtWidgets.QCheckBox(self.dockWidgetContents)
327        self.document_merge.setGeometry(QtCore.QRect(300, 230, 161, 22))
328        self.document_merge.setObjectName("document_merge")
329        self.document_merge.stateChanged.connect(self.Document_merge)
330        self.mixed_feed = QtWidgets.QCheckBox(self.dockWidgetContents)
331        self.mixed_feed.setGeometry(QtCore.QRect(300, 270, 200, 22))
332        self.mixed_feed.setObjectName("mixed_feed")
333        self.mixed_feed.stateChanged.connect(self.Mixed_feed)
334        self.deskew_image = QtWidgets.QCheckBox(self.dockWidgetContents)
335        self.document_merge_adf_flatbed = QtWidgets.QCheckBox(self.dockWidgetContents)
336        self.document_merge_adf_flatbed.setGeometry(QtCore.QRect(300, 310, 150, 22))
337        self.document_merge_adf_flatbed.setObjectName("document_merge_adf_flatbed")
338        self.document_merge_adf_flatbed.stateChanged.connect(self.Document_merge_adf_flatbed)
339        self.label_Brightness = QtWidgets.QLabel(self.dockWidgetContents)
340        self.label_Brightness.setGeometry(QtCore.QRect(560,100, 250, 22))
341        #font = QtGui.QFont()
342        #font.setBold(True)
343        #font.setWeight(75)
344        #self.label_Brightness.setFont(font)
345        self.label_Brightness.setMouseTracking(True)
346        self.label_Brightness.setObjectName("label_Brightness")
347        self.label_Contrast = QtWidgets.QLabel(self.dockWidgetContents)
348        self.label_Contrast.setGeometry(QtCore.QRect(560,130, 250, 22))
349        #font = QtGui.QFont()
350        #font.setBold(True)
351        #font.setWeight(75)
352        #self.label_Contrast.setFont(font)
353        self.label_Contrast.setMouseTracking(True)
354        self.label_Contrast.setObjectName("label_Contrast")
355        self.label_Sharpness = QtWidgets.QLabel(self.dockWidgetContents)
356        self.label_Sharpness.setGeometry(QtCore.QRect(560,160, 250, 22))
357        #font = QtGui.QFont()
358        #font.setBold(True)
359        #font.setWeight(75)
360        #self.label_Sharpness.setFont(font)
361        self.label_Sharpness.setMouseTracking(True)
362        self.label_Sharpness.setObjectName("label_Sharpness")
363        self.label_Color_value = QtWidgets.QLabel(self.dockWidgetContents)
364        self.label_Color_value.setGeometry(QtCore.QRect(560,190, 250, 22))
365        #font = QtGui.QFont()
366        #font.setBold(True)
367        #font.setWeight(75)
368        #self.label_Color_value.setFont(font)
369        self.label_Color_value.setMouseTracking(True)
370        self.label_Color_value.setObjectName("label_Color_value")
371        self.image_enhancement = QtWidgets.QCheckBox(self.dockWidgetContents)
372        self.image_enhancement.setGeometry(QtCore.QRect(550, 70, 250, 22))
373        self.image_enhancement.setObjectName("image_enhancement")
374        self.image_enhancement.stateChanged.connect(self.Image_enhancement)
375        self.deskew_image.setGeometry(QtCore.QRect(300,30, 241, 20))
376        self.deskew_image.setObjectName("deskew_image")
377        self.deskew_image.stateChanged.connect(self.Deskew_image)
378        self.comboBox_Device_URI = QtWidgets.QComboBox(self.dockWidgetContents)
379        self.comboBox_Device_URI.setGeometry(QtCore.QRect(85, 30, 171, 41))
380        self.comboBox_Device_URI.setObjectName("comboBox_Device_URI")
381        self.comboBox_Device_URI.currentIndexChanged.connect(self.comboBox_device_URI)
382
383        self.comboBox_path = QtWidgets.QComboBox(self.dockWidgetContents)
384        self.comboBox_path.setEditable(False)
385        self.comboBox_path.setGeometry(QtCore.QRect(85,390, 171, 41))
386        self.comboBox_path.setObjectName("comboBox_path")
387        self.comboBox_path.currentIndexChanged.connect(self.comboBox_Path)
388
389        #self.layout = QtGui.QVBoxLayout(self.dockWidgetContents)
390
391
392        #self.s1 = QtGui.QSlider(Qt.Horizontal)
393        self.s1 = QtWidgets.QSlider(Qt.Horizontal,self.dockWidgetContents)
394        self.s1.setFocusPolicy(QtCore.Qt.NoFocus)
395        self.s1.setGeometry(660, 95, 100, 30)
396
397        #self.s1 = QSlider(Qt.Horizontal)
398        #self.s1.setGeometry(320, 460, 250, 22)
399        self.s1.setMinimum(0)
400        self.s1.setMaximum(255)
401        self.s1.setValue(100)
402
403        self.s1.setTickPosition(QtWidgets.QSlider.TicksBelow)
404        self.s1.setTickInterval(10)
405        #self.s1.setSliderPosition(5)
406        #self.layout.addWidget(self.s1,0,QtCore.Qt.AlignRight)
407        #HpScan.addWidget(self.s1,0,QtCore.Qt.AlignRight)
408        self.s1.setEnabled(False)
409        self.s1.valueChanged.connect(self.valuechange_brightness)
410
411        self.s2 = QtWidgets.QSlider(Qt.Horizontal,self.dockWidgetContents)
412        self.s2.setFocusPolicy(QtCore.Qt.NoFocus)
413        self.s2.setGeometry(660, 125, 100, 30)
414        #self.s2 = QSlider(Qt.Horizontal)
415        #self.s2.setGeometry(1320, 480, 250, 22)
416        self.s2.setMinimum(0)
417        self.s2.setMaximum(255)
418        self.s2.setValue(100)
419        self.s2.setTickPosition(QtWidgets.QSlider.TicksBelow)
420        self.s2.setTickInterval(10)
421
422        #self.layout.addWidget(self.s2,0,QtCore.Qt.AlignRight)
423        self.s2.setEnabled(False)
424
425        #self.layout.setObjectName(_fromUtf8("brightness"))
426        self.s2.valueChanged.connect(self.valuechange_contrast)
427        #self.setLayout(layout)
428
429        self.s3 = QtWidgets.QSlider(Qt.Horizontal,self.dockWidgetContents)
430        self.s3.setFocusPolicy(QtCore.Qt.NoFocus)
431        self.s3.setGeometry(660, 155, 100, 30)
432        #self.s3 = QSlider(Qt.Horizontal)
433        #self.s3.setGeometry(1320, 500, 250, 22)
434        self.s3.setMinimum(0)
435        self.s3.setMaximum(200)
436        self.s3.setValue(100)
437        self.s3.setTickPosition(QtWidgets.QSlider.TicksBelow)
438        self.s3.setTickInterval(10)
439
440        #self.layout.addWidget(self.s3,0,QtCore.Qt.AlignRight)
441        self.s3.setEnabled(False)
442        self.s3.valueChanged.connect(self.valuechange_sharpness)
443
444        self.s4 = QtWidgets.QSlider(Qt.Horizontal,self.dockWidgetContents)
445        self.s4.setFocusPolicy(QtCore.Qt.NoFocus)
446        self.s4.setGeometry(660, 185, 100, 30)
447        #self.s4 = QSlider(Qt.Horizontal)
448        #self.s4.setGeometry(1320, 520, 250, 22)
449        self.s4.setMinimum(0)
450        self.s4.setMaximum(255)
451        self.s4.setValue(100)
452        self.s4.setTickPosition(QtWidgets.QSlider.TicksBelow)
453        self.s4.setTickInterval(10)
454
455        #self.layout.addWidget(self.s4,0,QtCore.Qt.AlignRight)
456        self.s4.setEnabled(False)
457        self.s4.valueChanged.connect(self.valuechange_color)
458
459        self.s5 = QtWidgets.QSlider(Qt.Horizontal,self.dockWidgetContents)
460        self.s5.setFocusPolicy(QtCore.Qt.NoFocus)
461        self.s5.setGeometry(660, 385, 100, 30)
462        self.s5.setMinimum(0)
463        self.s5.setMaximum(99)
464        self.s5.setValue(49)
465        self.s5.setTickPosition(QSlider.TicksBelow)
466        self.s5.setTickInterval(10)
467
468        self.s5.setEnabled(False)
469        self.s5.valueChanged.connect(self.valuechange_range)
470
471
472        #self.pushButton_Cancel = QtGui.QPushButton(self.dockWidgetContents)
473        #self.pushButton_Cancel.setGeometry(QtCore.QRect(150, 270, 99, 41))
474        font = QtGui.QFont()
475        font.setBold(True)
476        font.setWeight(75)
477        #self.pushButton_Cancel.setFont(font)
478        #self.pushButton_Cancel.setObjectName(_fromUtf8("pushButton_Cancel"))
479        HpScan.setWidget(self.dockWidgetContents)
480
481        self.retranslateUi(HpScan)
482        QtCore.QMetaObject.connectSlotsByName(HpScan)
483        #self.initUI()
484    def valuechange_brightness(self):
485        #print "entered value changed brightness"
486        #global sizel1
487        self.brightness = True
488        self.sizel1 = self.s1.value()
489        #print "printing new value brightness"
490        #print self.sizel1
491    def valuechange_contrast(self):
492        #print "entered value changed contrast"
493        #global sizel2
494        self.contrast = True
495        self.sizel2 = self.s2.value()
496        #print "printing new value contrast"
497        #print self.sizel2
498    def valuechange_sharpness(self):
499        #print "entered value changed sharpness"
500        #global sizel3
501        self.sharpness = True
502        self.sizel3 = self.s3.value()
503        #print "printing new value sharpness"
504        #print self.sizel3
505    def valuechange_color(self):
506        #print "entered value changed color"
507        #global sizel4
508        self.color_value = True
509        self.sizel4 = self.s4.value()
510        #print "printing new value color"
511        #print self.sizel4
512    #def initUI(self):
513        #self.connect(self.pushButton_Scan,SIGNAL("clicked()"),self.scanButton_clicked())
514    def valuechange_range(self):
515        #print "entered value changed color"
516        #global sizel5
517        self.color_range = True
518        self.sizel5 = self.s5.value()
519    def comboBox_Path(self, new_path = None):
520        path = new_path
521
522    def selectFile(self):
523        global path
524        new_path = QFileDialog.getExistingDirectory(None)
525        if new_path:
526            #print "entered"
527            #print new_path
528            self.comboBox_Path(new_path)
529            self.comboBox_path.setItemText(0,_translate("HpScan", new_path, None))
530            path = new_path
531
532    def scanButton_clicked(self):
533        cmd = "hp-scan" + ' --device=' + self.device_uri + ' --filetype=' + self.file_type + ' --mode=' + self.color + ' --res=' + self.resolution + ' --size=' + self.size
534        if self.source == 'adf' or self.source == 'duplex':
535            cmd = cmd + ' --' + self.source
536        if self.source == 'adf-backside':
537            cmd = cmd + ' --duplex --backside'
538        if self.multi_pick.isChecked() == True:
539            cmd = cmd + ' --' + 'multipick'
540        if self.auto_orient.isChecked() == True:
541            cmd = cmd + ' --' + 'autoorient'
542        if self.crushed.isChecked() == True:
543            cmd = cmd + ' --' + 'crushed'
544        if self.bg_color_removal.isChecked() == True:
545	        cmd = cmd + ' --' + 'bg_color_removal'
546        if self.punchhole_removal.isChecked() == True:
547	        cmd = cmd + ' --' + 'punchhole_removal'
548        if self.color_dropout.isChecked() == True:
549	        cmd = cmd + ' --' + 'color_dropout_red_value'+ '=' + str(self.dropout_color_red_value)
550        if self.color_dropout.isChecked() == True:
551	        cmd = cmd + ' --' + 'color_dropout_green_value'+ '=' + str(self.dropout_color_green_value)
552        if self.color_dropout.isChecked() == True:
553	        cmd = cmd + ' --' + 'color_dropout_blue_value'+ '=' + str(self.dropout_color_blue_value)
554        if self.color_dropout.isChecked() == True and self.color_range == True:
555	        cmd = cmd + ' --' + 'color_range'+ '=' + str(self.sizel5)
556        if self.mixed_feed.isChecked() == True:
557            cmd = re.sub(r'\--size=.+\ ', '', cmd)
558            cmd = cmd + ' --' + 'mixedfeed'
559        if self.document_merge.isChecked() == True:
560            cmd = cmd + ' --' + 'docmerge'
561        if self.auto_crop.isChecked() == True:
562            cmd = cmd + ' --' + 'autocrop'
563        if self.deskew_image.isChecked() == True:
564            cmd = cmd + ' --' + 'deskew'
565        if self.blank_page.isChecked() == True:
566            cmd = cmd + ' --' + 'blankpage'
567        if self.document_merge_adf_flatbed.isChecked() == True:
568            cmd = cmd + ' --' + 'adf_fladbed_merge'
569        if self.image_enhancement.isChecked() == True and self.brightness == True:
570            cmd = cmd + ' --' + 'brightness' + '=' + str(self.sizel1)
571        if self.image_enhancement.isChecked() == True and self.contrast == True:
572            cmd = cmd + ' --' + 'contrast' + '=' + str(self.sizel2)
573        if self.image_enhancement.isChecked() == True and self.sharpness == True:
574            cmd = cmd + ' --' + 'sharpness' + '=' + str(self.sizel3)
575        if self.image_enhancement.isChecked() == True and self.color_value == True:
576            cmd = cmd + ' --' + 'color_value' + '=' + str(self.sizel4)
577        if self.batch_seperation.isChecked() == True:
578            if self.bp_blankpage.isChecked() == True:
579                cmd = cmd + ' --' + 'batchsepBP'
580            elif self.bp_barcode.isChecked() == True:
581                cmd = cmd + ' --' + 'batchsepBC'
582            else:
583                self.failureMessage("Select either barcode or blankpage option for separation")
584        #if self.bp_barcode.isChecked() == True:
585            #cmd = cmd + ' --' + 'batchsepBC'
586        cmd = cmd + ' --path=' + str(path)
587        cmd = cmd + ' --' + 'uiscan'
588        #print (cmd)
589        self.pushButton_Scan.setEnabled(False)
590        status = utils.run(cmd)
591        #print (status)
592        if status[0] == 2:
593            self.failureMessage(multipick_error_message)
594        elif status[0] == 3:
595            self.warningMessage(no_document_error_message)
596        elif status[0] == 4:
597            output_pdf = status[1].split("error: ", 1)[1]
598            output_pdf = output_pdf.split('.pdf', 1)[0]+".pdf"
599            ocr = False
600            if self.searchablePDF.isChecked() == True:
601                ocr = True
602            imageprocessing.merge_PDF_viewer(output_pdf,ocr)
603            self.pushButton_Scan.setEnabled(True)
604        elif status[0] == 5:
605            ocr = False
606            output_pdf = status[1].split("error: ", 1)[1]
607            #print output_pdf
608            output_pdf = output_pdf.split(']', 1)[0]+"]"
609            #print output_pdf
610            for char in output_pdf:
611                #print char
612                if char in "[']":
613                    output_pdf = output_pdf.replace(char,'')
614            output_pdf = output_pdf.split(',')
615            #print output_pdf
616            #print type(output_pdf)
617            ocr = False
618            for p in output_pdf:
619                if self.searchablePDF.isChecked() == True:
620                    ocr = True
621                imageprocessing.merge_PDF_viewer(p,ocr)
622                self.pushButton_Scan.setEnabled(True)
623        elif status[0] == 6:
624            self.failureMessage(convert_error_message)
625        elif status[0] == 7:
626            self.warningMessage(multipick_error_message)
627        self.pushButton_Scan.setEnabled(True)
628        #if status != 0:
629            #print("Cmd %s failed with status %d",cmd,status)
630        #sys.exit(app.exec_())
631
632
633    def msgbtn(self):
634        pass
635
636    def failureMessage(self,message):
637        msg = QMessageBox()
638        msg.setIcon(QMessageBox.Information)
639        msg.setText(message)
640        msg.setStandardButtons(QMessageBox.Ok)
641        msg.buttonClicked.connect(self.msgbtn)
642        retval = msg.exec_()
643    def warningMessage(self,message):
644        msg = QMessageBox()
645        msg.setIcon(QMessageBox.Information)
646        msg.setText(message)
647        msg.setStandardButtons(QMessageBox.Ok)
648        msg.buttonClicked.connect(self.msgbtn)
649        retval = msg.exec_()
650
651    def comboBox_TypeIndexChanged(self):
652        self.file_type = str(self.comboBox_Type.currentText()).lower()
653        #print self.file_type
654
655    def comboBox_SourceChanged(self,device):
656        supported_PageSizes =[]
657        for x in PAGE_SIZES:
658            if PAGE_SIZES[x][0]<self.devicelist[self.device_uri][1] and PAGE_SIZES[x][1]<self.devicelist[self.device_uri][2]:
659                supported_PageSizes.append(x)
660        self.comboBox_Papersize.clear()
661        self.comboBox_Papersize.addItems(supported_PageSizes)
662        self.comboBox_Papersize.currentIndexChanged.connect(self.comboBox_PaperSizeIndexChanged)
663
664
665        if device != '5000' and device != '7500' and device != '9120' and device != '8500' and device != '3500' and device != '4500' and device != '3000' and device != '7000' and device != '2000' and device != '2500' and device != '4000':
666            self.multi_pick_pri = False
667        else:
668            self.comboBox_Flatbed.clear()
669            self.comboBox_Flatbed.addItem("")
670            self.comboBox_Flatbed.addItem("")
671            self.comboBox_Flatbed.addItem("")
672            if device == '5000' or device == '3000' or device == '7000' or device == '2000' or device == '4000':
673                if device == '2000':
674                    self.multi_pick_pri = False
675                    self.multi_pick.setEnabled(False)
676                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Duplex", None))
677                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
678                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
679                self.comboBox_Flatbed.setCurrentIndex(1)
680            elif device == '7500' or device == '9120' or device == '8500' or device == '3500' or device == '4500' or device == '2500':
681                if device == '2500':
682                    self.multi_pick_pri = False
683                    self.multi_pick.setEnabled(False)
684                self.comboBox_Flatbed.addItem("")
685                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
686                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
687                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
688                self.comboBox_Flatbed.setItemText(3, _translate("HpScan", "ADF-Backside", None))
689                self.comboBox_Flatbed.setCurrentIndex(1)
690            if device == '5000' or device == '7500' or device == '9120' or device == '8500' or device == '3500' or device == '4500' or device == '3000' or device == '7000' or device == '2000' or device == '2500' or device =='4000':
691                if device == '2500' or device == '2000':
692                    self.multi_pick_pri = False
693                    self.multi_pick.setEnabled(False)
694                self.source = str(self.comboBox_Flatbed.currentText()).lower()
695                self.comboBox_Flatbed.currentIndexChanged.connect(self.comboBox_SourceSelected)
696
697    def comboBox_SourceSelected(self):
698        self.source = str(self.comboBox_Flatbed.currentText()).lower()
699        if self.source == 'flatbed':
700            self.source = ''
701        #print self.source
702
703    def comboBox_ColorIndexChanged(self):
704        self.color = str(self.comboBox_Color.currentText()).lower()
705        #print self.color
706
707    def comboBox_ResIndexChanged(self):
708        self.resolution = str(self.comboBox_Resolution.currentText()).lower()
709        #print self.resolution
710
711    def comboBox_PaperSizeIndexChanged(self):
712        self.size = str(self.comboBox_Papersize.currentText())
713        #print self.size
714
715    def batch_Seperation(self):
716        if self.batch_seperation.isChecked() == True:
717            self.comboBox_Flatbed.clear()
718            self.comboBox_Flatbed.addItem("")
719            self.comboBox_Flatbed.addItem("")
720            self.comboBox_Flatbed.addItem("")
721            self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Duplex", None))
722            self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
723            self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
724            self.comboBox_Flatbed.setCurrentIndex(1)
725            pyPlatform = platform.python_version()
726            num = pyPlatform.split('.')
727            if num[0] >= '3':
728                self.bp_barcode.setChecked(False)
729                self.bp_barcode.setEnabled(False)
730                self.CheckEnable()
731                self.bp_blankpage.setEnabled(True)
732                self.bp_blankpage.stateChanged.connect(self.bp_Blankpage)
733            else:
734                self.CheckEnable()
735                self.bp_blankpage.setEnabled(True)
736                if self.batchsepBC_pri == True:
737                    self.bp_barcode.setEnabled(True)
738                #self.blank_page.setChecked(False)
739                #self.blank_page.setText(_translate("HpScan", "Blank page seperation removal ", None))
740                #if pyPlatform < '3':
741                self.bp_barcode.stateChanged.connect(self.bp_Barcode)
742                self.bp_blankpage.stateChanged.connect(self.bp_Blankpage)
743        else:
744            if (re.search(r'_7500', self.device_uri)) or (re.search(r'_N9120', self.device_uri)) or (re.search(r'_8500fn2', self.device_uri)) or (re.search(r'_3500_f1', self.device_uri)) or (re.search(r'_4500_fn1', self.device_uri)) or (re.search(r'hpgt2500', self.device_uri)):
745                self.comboBox_Flatbed.clear()
746                self.comboBox_Flatbed.addItem("")
747                self.comboBox_Flatbed.addItem("")
748                self.comboBox_Flatbed.addItem("")
749                self.comboBox_Flatbed.addItem("")
750                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
751                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
752                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
753                self.comboBox_Flatbed.setItemText(3, _translate("HpScan", "ADF-Backside", None))
754                self.comboBox_Flatbed.setCurrentIndex(1)
755            elif (re.search(r'_5000_', self.device_uri)) or (re.search(r'_7000_s3', self.device_uri)) or (re.search(r'_3000_s3', self.device_uri)) or (re.search(r'hp2000S1', self.device_uri)) or (re.search(r'_2000_s2', self.device_uri)) or (re.search(r'7000_snw1', self.device_uri)) or (re.search(r'4000_snw1', self.device_uri)) or (re.search(r'_3000_s4', self.device_uri)) or (re.search(r'_5000_s5', self.device_uri)):
756                self.comboBox_Flatbed.clear()
757                self.comboBox_Flatbed.addItem("")
758                self.comboBox_Flatbed.addItem("")
759                self.comboBox_Flatbed.addItem("")
760                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "ADF", None))
761                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "Duplex", None))
762                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
763                self.comboBox_Flatbed.setCurrentIndex(0)
764            #if pyPlatform < 3:
765            self.CheckEnable()
766            self.bp_blankpage.setChecked(False)
767            self.bp_barcode.setChecked(False)
768            self.bp_blankpage.setEnabled(False)
769            self.bp_barcode.setEnabled(False)
770            #self.blank_page.setChecked(False)
771            #self.blank_page.setEnabled(True)
772            #self.blank_page.setText(_translate("HpScan", "Delete blank page ", None))
773
774    def bp_Barcode(self):
775        pyPlaform = platform.python_version()
776        num = pyPlatform.split('.')
777        if num[0] >= '3':
778            self.bp_barcode.setEnabled(False)
779            self.comboBox_Barcode_Type.setEnabled(False)
780        else:
781            if self.bp_barcode.isChecked() == True:
782                self.comboBox_Barcode_Type.setEnabled(True)
783                self.bp_blankpage.setEnabled(False)
784            else:
785                self.comboBox_Barcode_Type.setEnabled(False)
786                self.bp_blankpage.setEnabled(True)
787
788    def bp_Blankpage(self):
789        if self.bp_blankpage.isChecked() == True:
790            if self.blank_page_pri == True:
791                self.blank_page.setEnabled(True)
792            self.bp_barcode.setEnabled(False)
793            self.blank_page.setChecked(False)
794            self.blank_page.setText(_translate("HpScan", "Blank page seperation removal ", None))
795        else:
796            if self.blank_page_pri == True:
797                self.blank_page.setEnabled(True)
798            pyPlatform = platform.python_version()
799            num = pyPlatform.split('.')
800            if num[0] >= '3':
801                self.bp_barcode.setEnabled(False)
802            else:
803                if self.batchsepBC_pri == True:
804                    self.bp_barcode.setEnabled(True)
805            self.blank_page.setChecked(False)
806            #self.blank_page.setEnabled(True)
807            self.blank_page.setText(_translate("HpScan", "Delete blank page ", None))
808
809    def Multi_pick(self):
810        if self.multi_pick.isChecked() == True:
811            self.comboBox_Flatbed.clear()
812            self.comboBox_Flatbed.addItem("")
813            self.comboBox_Flatbed.addItem("")
814            self.comboBox_Flatbed.addItem("")
815            self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Duplex", None))
816            self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
817            self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
818            self.comboBox_Flatbed.setCurrentIndex(1)
819            if self.multi_pick_pri == True:
820                self.multi_pick.setEnabled(True)
821            self.CheckEnable()
822        else:
823            if (re.search(r'_7500', self.device_uri)) or (re.search(r'_N9120', self.device_uri)) or (re.search(r'_8500fn2', self.device_uri)) or (re.search(r'_3500_f1', self.device_uri)) or (re.search(r'_4500_fn1', self.device_uri)) or (re.search(r'hpgt2500', self.device_uri)):
824                self.comboBox_Flatbed.clear()
825                self.comboBox_Flatbed.addItem("")
826                self.comboBox_Flatbed.addItem("")
827                self.comboBox_Flatbed.addItem("")
828                self.comboBox_Flatbed.addItem("")
829                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
830                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
831                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
832                self.comboBox_Flatbed.setItemText(3, _translate("HpScan", "ADF-Backside", None))
833                self.comboBox_Flatbed.setCurrentIndex(1)
834            elif (re.search(r'_5000_', self.device_uri)) or (re.search(r'_7000_s3', self.device_uri)) or (re.search(r'_3000_s3', self.device_uri)) or (re.search(r'hp2000S1', self.device_uri)) or (re.search(r'_2000_s2', self.device_uri)) or (re.search(r'7000_snw1', self.device_uri)) or (re.search(r'4000_snw1', self.device_uri)) or (re.search(r'_3000_s4', self.device_uri)) or (re.search(r'_5000_s5', self.device_uri)):
835                self.comboBox_Flatbed.clear()
836                self.comboBox_Flatbed.addItem("")
837                self.comboBox_Flatbed.addItem("")
838                self.comboBox_Flatbed.addItem("")
839                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "ADF", None))
840                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "Duplex", None))
841                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
842                self.comboBox_Flatbed.setCurrentIndex(0)
843            self.CheckEnable()
844
845    def Auto_orient(self):
846        if self.auto_orient.isChecked() == True:
847            if self.auto_orient_pri == True:
848                self.auto_orient.setEnabled(True)
849            self.CheckEnable()
850        else:
851            self.CheckEnable()
852
853    def CheckEnable(self):
854        if self.auto_orient.isChecked() == False and self.auto_crop.isChecked() == False and self.image_enhancement.isChecked() == False and self.deskew_image.isChecked() == False and self.blank_page.isChecked() == False and self.document_merge_adf_flatbed.isChecked() == False and self.multi_pick.isChecked() == False and self.batch_seperation.isChecked() == False and self.searchablePDF.isChecked() == False and self.crushed.isChecked()== False and self.bg_color_removal.isChecked() == False and self.bg_color_removal.isChecked() == False and self.color_dropout.isChecked() == False:
855            #self.crushed.setChecked(False)
856            self.mixed_feed.setChecked(False)
857            self.document_merge.setChecked(False)
858            #self.bg_color_removal.setChecked(False)
859            #self.punchhole_removal.setChecked(False)
860            #self.color_dropout.setChecked(False)
861            #if self.crushed_pri == True:
862                #self.crushed.setEnabled(True)
863            if self.mixed_feed_pri == True:
864                self.mixed_feed.setEnabled(True)
865            if self.document_merge_pri == True:
866                self.document_merge.setEnabled(True)
867            #if self.bg_color_removal_pri == True:
868                #self.bg_color_removal.setEnabled(True)
869            #if self.punchhole_removal_pri == True:
870                #self.punchhole_removal.setEnabled(True)
871            #if self.color_dropout_pri == True:
872                #self.color_dropout.setEnabled(True)
873        else:
874            #self.crushed.setChecked(False)
875            self.mixed_feed.setChecked(False)
876            self.document_merge.setChecked(False)
877            #self.bg_color_removal.setChecked(False)
878            #self.punchhole_removal.setChecked(False)
879            #self.color_dropout.setChecked(False)
880            #self.crushed.setEnabled(False)
881            self.mixed_feed.setEnabled(False)
882            self.document_merge.setEnabled(False)
883            #self.bg_color_removal.setEnabled(False)
884            #self.punchhole_removal.setEnabled(False)
885            #self.color_dropout.setEnabled(False)
886
887    def DisableAllScanjet(self):
888        self.auto_orient.setChecked(False)
889        self.auto_crop.setChecked(False)
890        self.image_enhancement.setChecked(False)
891        self.document_merge_adf_flatbed.setChecked(False)
892        self.multi_pick.setChecked(False)
893        self.batch_seperation.setChecked(False)
894        self.deskew_image.setChecked(False)
895        self.blank_page.setChecked(False)
896        self.crushed.setChecked(False)
897        self.bg_color_removal.setChecked(False)
898        self.punchhole_removal.setChecked(False)
899        self.color_dropout.setChecked(False)
900        self.mixed_feed.setChecked(False)
901        self.document_merge.setChecked(False)
902        self.searchablePDF.setChecked(False)
903        self.auto_orient.setEnabled(False)
904        self.auto_crop.setEnabled(False)
905        self.image_enhancement.setEnabled(False)
906        self.document_merge_adf_flatbed.setEnabled(False)
907        self.multi_pick.setEnabled(False)
908        self.batch_seperation.setEnabled(False)
909        self.deskew_image.setEnabled(False)
910        self.blank_page.setEnabled(False)
911        self.crushed.setEnabled(False)
912        self.bg_color_removal.setEnabled(False)
913        self.punchhole_removal.setEnabled(False)
914        self.color_dropout.setEnabled(False)
915        self.mixed_feed.setEnabled(False)
916        self.document_merge.setEnabled(False)
917        self.searchablePDF.setEnabled(False)
918
919    def DisableAll(self):
920        if self.mixed_feed.isChecked() == True or self.document_merge.isChecked() == True:
921            self.auto_orient.setChecked(False)
922            self.auto_crop.setChecked(False)
923            self.image_enhancement.setChecked(False)
924            self.document_merge_adf_flatbed.setChecked(False)
925            self.multi_pick.setChecked(False)
926            self.batch_seperation.setChecked(False)
927            self.deskew_image.setChecked(False)
928            self.blank_page.setChecked(False)
929            self.searchablePDF.setChecked(False)
930            self.crushed.setChecked(False)
931            self.bg_color_removal.setChecked(False)
932            self.punchhole_removal.setChecked(False)
933            self.color_dropout.setChecked(False)
934            self.auto_orient.setEnabled(False)
935            self.auto_crop.setEnabled(False)
936            self.image_enhancement.setEnabled(False)
937            self.document_merge_adf_flatbed.setEnabled(False)
938            self.multi_pick.setEnabled(False)
939            self.batch_seperation.setEnabled(False)
940            self.deskew_image.setEnabled(False)
941            self.blank_page.setEnabled(False)
942            self.searchablePDF.setEnabled(False)
943            self.crushed.setEnabled(False)
944            self.bg_color_removal.setEnabled(False)
945            self.punchhole_removal.setEnabled(False)
946            self.color_dropout.setEnabled(False)
947        else:
948            self.auto_orient.setChecked(False)
949            self.auto_crop.setChecked(False)
950            self.image_enhancement.setChecked(False)
951            self.document_merge_adf_flatbed.setChecked(False)
952            self.multi_pick.setChecked(False)
953            self.batch_seperation.setChecked(False)
954            self.deskew_image.setChecked(False)
955            self.blank_page.setChecked(False)
956            self.searchablePDF.setChecked(False)
957            self.crushed.setChecked(False)
958            self.bg_color_removal.setChecked(False)
959            self.punchhole_removal.setChecked(False)
960            self.color_dropout.setChecked(False)
961            if self.auto_orient_pri == True:
962                self.auto_orient.setEnabled(True)
963            if self.searchablePDF_pri == True:
964                self.searchablePDF.setEnabled(True)
965            if self.auto_crop_pri == True:
966                #print ("auto_crop_pri is still true")
967                self.auto_crop.setEnabled(True)
968            if self.image_enhancement_pri == True:
969                self.image_enhancement.setEnabled(True)
970            if self.document_merge_adf_flatbed_pri == True:
971                self.document_merge_adf_flatbed.setEnabled(True)
972            if self.multi_pick_pri == True:
973                self.multi_pick.setEnabled(True)
974            #if self.batch_seperation_pri == True:
975            self.batch_seperation.setEnabled(True)
976            if self.deskew_image_pri == True:
977                self.deskew_image.setEnabled(True)
978            if self.blank_page_pri == True:
979                self.blank_page.setEnabled(True)
980            if self.bg_color_removal_pri == True:
981                self.bg_color_removal.setEnabled(True)
982            if self.punchhole_removal_pri == True:
983                self.punchhole_removal.setEnabled(True)
984            if self.color_dropout_pri == True:
985                self.color_dropout.setEnabled(True)
986            if self.crushed_pri == True:
987                self.crushed.setEnabled(True)
988
989    def Crushed(self):
990        if self.crushed.isChecked() == True:
991            if self.crushed_pri == True:
992                self.crushed.setEnabled(True)
993            self.CheckEnable()
994            #self.comboBox_Color.setCurrentIndex(1)
995            #self.comboBox_Color.setEnabled(False)
996            '''self.DisableAll()
997            self.mixed_feed.setChecked(False)
998            self.document_merge.setChecked(False)
999            self.mixed_feed.setEnabled(False)
1000            self.document_merge.setEnabled(False)
1001            self.bg_color_removal.setChecked(False)
1002            self.bg_color_removal.setEnabled(False)
1003            self.punchhole_removal.setChecked(False)
1004            self.punchhole_removal.setEnabled(False)
1005            self.color_dropout.setChecked(False)
1006            self.color_dropout.setEnabled(False)'''
1007        else:
1008            self.CheckEnable()
1009            #self.comboBox_Color.setEnabled(True)
1010            '''self.DisableAll()
1011            self.mixed_feed.setChecked(False)
1012            self.document_merge.setChecked(False)
1013            self.bg_color_removal.setChecked(False)
1014            self.punchhole_removal.setChecked(False)
1015            self.color_dropout.setChecked(False)
1016            if self.mixed_feed_pri == True:
1017                self.mixed_feed.setEnabled(True)
1018            if self.document_merge_pri == True:
1019                self.document_merge.setEnabled(True)
1020            if self.bg_color_removal_pri == True:
1021                self.bg_color_removal.setEnabled(True)
1022            if self.punchhole_removal_pri == True:
1023                self.punchhole_removal.setEnabled(True)
1024            if self.color_dropout_pri == True:
1025                self.color_dropout.setEnabled(True)'''
1026
1027
1028    def SearchablePDF(self):
1029        if self.searchablePDF.isChecked() == True:
1030            self.searchablePDF.setEnabled(True)
1031            self.comboBox_Type.setCurrentIndex(2)
1032            self.comboBox_Type.setEnabled(False)
1033            if self.searchablePDF_pri == True:
1034                self.searchablePDF.setEnabled(True)
1035            self.CheckEnable()
1036        else:
1037            self.comboBox_Type.setEnabled(True)
1038            self.CheckEnable()
1039
1040
1041    def Auto_crop(self):
1042        if self.auto_crop.isChecked() == True:
1043            if self.auto_crop_pri == True:
1044                self.auto_crop.setEnabled(True)
1045            self.CheckEnable()
1046        else:
1047            self.CheckEnable()
1048
1049    def Deskew_image(self):
1050        if self.deskew_image.isChecked() == True:
1051            if self.deskew_image_pri == True:
1052                self.deskew_image.setEnabled(True)
1053            self.CheckEnable()
1054        else:
1055            self.CheckEnable()
1056
1057    def Blank_page(self):
1058        if self.blank_page.isChecked() == True:
1059            if self.blank_page_pri == True:
1060                self.blank_page.setEnabled(True)
1061            self.CheckEnable()
1062        else:
1063            self.CheckEnable()
1064
1065    def Mixed_feed(self):
1066        if self.mixed_feed.isChecked() == True:
1067            self.comboBox_Flatbed.clear()
1068            self.comboBox_Flatbed.addItem("")
1069            self.comboBox_Flatbed.addItem("")
1070            self.comboBox_Flatbed.addItem("")
1071            self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Duplex", None))
1072            self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
1073            self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
1074            self.comboBox_Flatbed.setCurrentIndex(1)
1075            if self.mixed_feed_pri == True:
1076                self.mixed_feed.setEnabled(True)
1077            self.DisableAll()
1078            self.document_merge.setChecked(False)
1079            self.crushed.setChecked(False)
1080            self.document_merge.setEnabled(False)
1081            self.crushed.setEnabled(False)
1082            self.comboBox_Papersize.setEnabled(False)
1083            self.bg_color_removal.setChecked(False)
1084            self.bg_color_removal.setEnabled(False)
1085            self.punchhole_removal.setChecked(False)
1086            self.punchhole_removal.setEnabled(False)
1087            self.color_dropout.setChecked(False)
1088            self.color_dropout.setEnabled(False)
1089        else:
1090            if (re.search(r'_7500', self.device_uri)) or (re.search(r'_N9120', self.device_uri)) or (re.search(r'_8500fn2', self.device_uri)) or (re.search(r'_3500_f1', self.device_uri)) or (re.search(r'_4500_fn1', self.device_uri)) or (re.search(r'2500', self.device_uri)):
1091                self.comboBox_Flatbed.clear()
1092                self.comboBox_Flatbed.addItem("")
1093                self.comboBox_Flatbed.addItem("")
1094                self.comboBox_Flatbed.addItem("")
1095                self.comboBox_Flatbed.addItem("")
1096                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
1097                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
1098                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
1099                self.comboBox_Flatbed.setItemText(3, _translate("HpScan", "ADF-Backside", None))
1100                self.comboBox_Flatbed.setCurrentIndex(1)
1101            elif (re.search(r'_5000_', self.device_uri)) or (re.search(r'_7000_s3', self.device_uri)) or (re.search(r'_3000_s3', self.device_uri)) or (re.search(r'hp2000S1', self.device_uri)) or (re.search(r'_2000_s2', self.device_uri)) or (re.search(r'7000_snw1', self.device_uri)) or (re.search(r'4000_snw1', self.device_uri)) or (re.search(r'_3000_s4', self.device_uri)) or (re.search(r'_5000_s5', self.device_uri)):
1102                self.comboBox_Flatbed.clear()
1103                self.comboBox_Flatbed.addItem("")
1104                self.comboBox_Flatbed.addItem("")
1105                self.comboBox_Flatbed.addItem("")
1106                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "ADF", None))
1107                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "Duplex", None))
1108                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
1109                self.comboBox_Flatbed.setCurrentIndex(0)
1110            self.document_merge.setChecked(False)
1111            self.DisableAll()
1112            self.crushed.setChecked(False)
1113            self.bg_color_removal.setChecked(False)
1114            self.punchhole_removal.setChecked(False)
1115            self.color_dropout.setChecked(False)
1116            if self.document_merge_pri == True:
1117                self.document_merge.setEnabled(True)
1118            if self.crushed_pri == True:
1119                self.crushed.setEnabled(True)
1120            if self.mixed_feed_pri == True:
1121                self.mixed_feed.setEnabled(True)
1122            self.comboBox_Papersize.setEnabled(True)
1123            if self.bg_color_removal_pri == True:
1124                self.bg_color_removal.setEnabled(True)
1125            if self.punchhole_removal_pri == True:
1126                self.punchhole_removal.setEnabled(True)
1127            if self.color_dropout_pri == True:
1128                self.color_dropout.setEnabled(True)
1129
1130    def Bg_color_removal(self):
1131        if self.bg_color_removal.isChecked() == True:
1132            if self.bg_color_removal_pri == True:
1133                self.bg_color_removal.setEnabled(True)
1134            self.CheckEnable()
1135            '''self.document_merge.setChecked(False)
1136            self.crushed.setChecked(False)
1137            self.document_merge.setEnabled(False)
1138            self.crushed.setEnabled(False)
1139            self.mixed_feed.setChecked(False)
1140            self.mixed_feed.setEnabled(False)
1141            self.punchhole_removal.setChecked(False)
1142            self.punchhole_removal.setEnabled(False)
1143            self.color_dropout.setChecked(False)
1144            self.color_dropout.setEnabled(False)
1145            #self.comboBox_Papersize.setEnabled(False)'''
1146        else:
1147            self.CheckEnable()
1148            '''self.document_merge.setChecked(False)
1149            self.DisableAll()
1150            self.crushed.setChecked(False)
1151            if self.document_merge_pri == True:
1152                self.document_merge.setEnabled(True)
1153            if self.crushed_pri == True:
1154                self.crushed.setEnabled(True)
1155            if self.mixed_feed_pri == True:
1156                self.mixed_feed.setEnabled(True)
1157            if self.bg_color_removal_pri == True:
1158                self.bg_color_removal.setEnabled(True)
1159            if self.punchhole_removal_pri == True:
1160                self.punchhole_removal.setEnabled(True)
1161            if self.color_dropout_pri == True:
1162                self.color_dropout.setEnabled(True)
1163            #self.comboBox_Papersize.setEnabled(True)'''
1164
1165    def Punchhole_removal(self):
1166        if self.punchhole_removal.isChecked() == True:
1167            if self.punchhole_removal_pri == True:
1168                self.punchhole_removal.setEnabled(True)
1169            self.CheckEnable()
1170            '''self.DisableAll()
1171            self.document_merge.setChecked(False)
1172            self.crushed.setChecked(False)
1173            self.document_merge.setEnabled(False)
1174            self.crushed.setEnabled(False)
1175            self.mixed_feed.setChecked(False)
1176            self.mixed_feed.setEnabled(False)
1177            self.bg_color_removal.setChecked(False)
1178            self.bg_color_removal.setEnabled(False)
1179            self.color_dropout.setChecked(False)
1180            self.color_dropout.setEnabled(False)
1181            #self.comboBox_Papersize.setEnabled(False)'''
1182        else:
1183            self.CheckEnable()
1184            '''self.document_merge.setChecked(False)
1185            self.DisableAll()
1186            self.crushed.setChecked(False)
1187            if self.document_merge_pri == True:
1188                self.document_merge.setEnabled(True)
1189            if self.crushed_pri == True:
1190                self.crushed.setEnabled(True)
1191            if self.mixed_feed_pri == True:
1192                self.mixed_feed.setEnabled(True)
1193            if self.punchhole_removal_pri == True:
1194                self.punchhole_removal.setEnabled(True)
1195            if self.color_dropout_pri == True:
1196                self.color_dropout.setEnabled(True)
1197            if self.bg_color_removal_pri == True:
1198                self.bg_color_removal.setEnabled(True)
1199            #self.comboBox_Papersize.setEnabled(True)'''
1200
1201    def Color_dropout(self):
1202        if self.color_dropout.isChecked() == True:
1203            if self.color_dropout_pri == True:
1204                self.color_dropout.setEnabled(True)
1205            '''self.DisableAll()
1206            self.document_merge.setChecked(False)
1207            self.crushed.setChecked(False)
1208            self.document_merge.setEnabled(False)
1209            self.crushed.setEnabled(False)
1210            self.mixed_feed.setChecked(False)
1211            self.mixed_feed.setEnabled(False)
1212            self.bg_color_removal.setChecked(False)
1213            self.bg_color_removal.setEnabled(False)
1214            self.punchhole_removal.setChecked(False)
1215            self.punchhole_removal.setEnabled(False)'''
1216            color = QColorDialog.getColor()
1217            self.s5.setEnabled(True)
1218            RGBVALUE = list(color.getRgb())
1219            self.dropout_color_red_value = str(RGBVALUE[0])
1220            self.dropout_color_green_value = str(RGBVALUE[1])
1221            self.dropout_color_blue_value = str(RGBVALUE[2])
1222            #print (RGBVALUE)
1223            #self.comboBox_Papersize.setEnabled(False)
1224        else:
1225            #self.document_merge.setChecked(False)
1226            #self.DisableAll()
1227            #self.crushed.setChecked(False)
1228            self.CheckEnable()
1229            self.s5.setEnabled(False)
1230            '''if self.document_merge_pri == True:
1231                self.document_merge.setEnabled(True)
1232            if self.crushed_pri == True:
1233                self.crushed.setEnabled(True)
1234            if self.mixed_feed_pri == True:
1235                self.mixed_feed.setEnabled(True)
1236            if self.punchhole_removal_pri == True:
1237                self.punchhole_removal.setEnabled(True)
1238            if self.color_dropout_pri == True:
1239                self.color_dropout.setEnabled(True)
1240            if self.bg_color_removal_pri == True:
1241                self.bg_color_removal.setEnabled(True)
1242            #self.comboBox_Papersize.setEnabled(True)'''
1243
1244    def Document_merge(self):
1245        if self.document_merge.isChecked() == True:
1246            if self.document_merge_pri == True:
1247                self.document_merge.setEnabled(True)
1248            self.DisableAll()
1249            self.mixed_feed.setChecked(False)
1250            self.crushed.setChecked(False)
1251            self.mixed_feed.setEnabled(False)
1252            self.crushed.setEnabled(False)
1253            self.bg_color_removal.setChecked(False)
1254            self.bg_color_removal.setEnabled(False)
1255            self.punchhole_removal.setChecked(False)
1256            self.punchhole_removal.setEnabled(False)
1257            self.color_dropout.setChecked(False)
1258            self.color_dropout.setEnabled(False)
1259            #name = re.search(r'_5000_', self.device_uri)
1260            #if name:
1261            if re.search(r'_5000_', self.device_uri) or re.search(r'_7000_s3', self.device_uri) or re.search(r'_3000_s3', self.device_uri) or (re.search(r'hp2000S1', self.device_uri)) or re.search(r'_2000_s2', self.device_uri) or re.search(r'7000_snw1', self.device_uri) or re.search(r'4000_snw1', self.device_uri) or re.search(r'_3000_s4', self.device_uri) or re.search(r'_5000_s5', self.device_uri):
1262                self.comboBox_Flatbed.clear()
1263                self.comboBox_Flatbed.addItem("")
1264                self.comboBox_Flatbed.addItem("")
1265                self.comboBox_Flatbed.addItem("")
1266                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "ADF", None))
1267                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "Duplex", None))
1268                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
1269                self.comboBox_Flatbed.setCurrentIndex(1)
1270            elif (re.search(r'_7500', self.device_uri)) or (re.search(r'_N9120', self.device_uri)) or (re.search(r'_8500fn2', self.device_uri)) or (re.search(r'_3500_f1', self.device_uri)) or (re.search(r'_4500_fn1', self.device_uri)) or (re.search(r'2500', self.device_uri)):
1271                self.comboBox_Flatbed.clear()
1272                self.comboBox_Flatbed.addItem("")
1273                self.comboBox_Flatbed.addItem("")
1274                self.comboBox_Flatbed.addItem("")
1275                self.comboBox_Flatbed.addItem("")
1276                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
1277                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
1278                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
1279                self.comboBox_Flatbed.setItemText(3, _translate("HpScan", "ADF-Backside", None))
1280                self.comboBox_Flatbed.setCurrentIndex(2)
1281            self.comboBox_Flatbed.setEnabled(False)
1282            self.source = str(self.comboBox_Flatbed.currentText()).lower()
1283        else:
1284            self.DisableAll()
1285            self.mixed_feed.setChecked(False)
1286            self.crushed.setChecked(False)
1287            self.bg_color_removal.setChecked(False)
1288            self.punchhole_removal.setChecked(False)
1289            self.color_dropout.setChecked(False)
1290            if self.mixed_feed_pri == True:
1291                self.mixed_feed.setEnabled(True)
1292            if self.crushed_pri == True:
1293                self.crushed.setEnabled(True)
1294            if self.bg_color_removal_pri == True:
1295                self.bg_color_removal.setEnabled(True)
1296            if self.punchhole_removal_pri == True:
1297                self.punchhole_removal.setEnabled(True)
1298            if self.color_dropout_pri == True:
1299                self.color_dropout.setEnabled(True)
1300            self.comboBox_Flatbed.setEnabled(True)
1301            if (re.search(r'_7500', self.device_uri)) or (re.search(r'_N9120', self.device_uri)) or (re.search(r'_8500fn2', self.device_uri)) or (re.search(r'_3500_f1', self.device_uri)) or (re.search(r'_4500_fn1', self.device_uri)) or (re.search(r'2500', self.device_uri)):
1302                self.comboBox_Flatbed.clear()
1303                self.comboBox_Flatbed.addItem("")
1304                self.comboBox_Flatbed.addItem("")
1305                self.comboBox_Flatbed.addItem("")
1306                self.comboBox_Flatbed.addItem("")
1307                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
1308                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
1309                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
1310                self.comboBox_Flatbed.setItemText(3, _translate("HpScan", "ADF-Backside", None))
1311                self.comboBox_Flatbed.setCurrentIndex(1)
1312            elif (re.search(r'_5000_', self.device_uri)) or (re.search(r'_7000_s3', self.device_uri)) or (re.search(r'_3000_s3', self.device_uri)) or (re.search(r'hp2000S1', self.device_uri)) or (re.search(r'_2000_s2', self.device_uri)) or (re.search(r'7000_snw1', self.device_uri)) or (re.search(r'4000_snw1', self.device_uri)) or (re.search(r'_3000_s4', self.device_uri)) or (re.search(r'_5000_s5', self.device_uri)):
1313                self.comboBox_Flatbed.clear()
1314                self.comboBox_Flatbed.addItem("")
1315                self.comboBox_Flatbed.addItem("")
1316                self.comboBox_Flatbed.addItem("")
1317                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "ADF", None))
1318                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "Duplex", None))
1319                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
1320                self.comboBox_Flatbed.setCurrentIndex(0)
1321            self.source = str(self.comboBox_Flatbed.currentText()).lower()
1322
1323    def Document_merge_adf_flatbed(self):
1324        if self.document_merge_adf_flatbed.isChecked() == True:
1325            self.CheckEnable()
1326            if self.document_merge_adf_flatbed_pri == True:
1327                self.document_merge_adf_flatbed.setEnabled(True)
1328            self.comboBox_Type.setCurrentIndex(2)
1329            self.comboBox_Type.setEnabled(False)
1330            self.pushButton_Merge.setEnabled(True)
1331        else:
1332            self.CheckEnable()
1333            self.pushButton_Merge.setEnabled(False)
1334            self.comboBox_Type.setCurrentIndex(0)
1335            self.comboBox_Type.setEnabled(True)
1336
1337
1338
1339    def Image_enhancement(self):
1340        if self.image_enhancement.isChecked() == True:
1341            self.CheckEnable()
1342            if self.image_enhancement_pri == True:
1343                self.image_enhancement.setEnabled(True)
1344            self.s1.setEnabled(True)
1345            self.s2.setEnabled(True)
1346            self.s3.setEnabled(True)
1347            self.s4.setEnabled(True)
1348        else:
1349            #self.image_enhancement.setEnabled(False)
1350            self.CheckEnable()
1351            self.s1.setEnabled(False)
1352            self.s2.setEnabled(False)
1353            self.s3.setEnabled(False)
1354            self.s4.setEnabled(False)
1355
1356    def mergeButton_clicked(self):
1357        from PyPDF2 import PdfFileReader, PdfFileMerger
1358        path1 = str(path)
1359        #print path1
1360        output_pdf = utils.createSequencedFilename("Merged", ".pdf",path1)
1361        files = [ f for f in os.listdir(path1)  if f.startswith('hpscanMerge') and f.endswith('.pdf')]
1362        if((len(files)) != 0):
1363            files.sort()
1364            merger = PdfFileMerger()
1365            os.chdir(path1)
1366            #print os.getcwd()
1367            for x in files:
1368                merger.append(PdfFileReader(x), 'hpscan')
1369            for p in files:
1370                os.remove(p)
1371
1372            merger.write(output_pdf)
1373            ocr = False
1374            if self.searchablePDF.isChecked() == True:
1375                ocr = True
1376            imageprocessing.merge_PDF_viewer(output_pdf,ocr)
1377            '''pdf_viewer = ''
1378            pdf_viewer_list = ['kpdf', 'acroread', 'xpdf', 'evince',]
1379            for v in pdf_viewer_list:
1380                vv = utils.which(v)
1381                if vv:
1382                    pdf_viewer = os.path.join(vv, v)
1383                    break
1384            #cmd = "%s %s &" % (pdf_viewer, output_pdf)
1385            cmd = pdf_viewer + "  " + output_pdf + " " + "&"
1386            print cmd
1387            os_utils.execute(cmd)
1388            #sys.exit(0)'''
1389        else:
1390            self.warningMessage(no_pages_to_merge)
1391
1392    def change_source(self):
1393        #device_name = re.search(r'_5000_', self.device_uri)
1394        #if device_name:
1395        if re.search(r'_5000_', self.device_uri):
1396            self.device_name = '5000'
1397        elif re.search(r'_7500', self.device_uri):
1398            self.device_name = '7500'
1399        elif re.search(r'hp2000S1', self.device_uri):
1400            self.device_name = '2000'
1401        elif re.search(r'hpgt2500', self.device_uri):
1402            self.device_name = '2500'
1403        elif re.search(r'_N9120', self.device_uri):
1404            self.device_name = '9120'
1405        elif re.search(r'_8500fn2', self.device_uri):
1406            self.device_name = '8500'
1407        elif re.search(r'_3500_f1', self.device_uri):
1408            self.device_name = '3500'
1409        elif re.search(r'_4500_fn1', self.device_uri):
1410            self.device_name = '4500'
1411        elif re.search(r'_7000_s3', self.device_uri):
1412            self.device_name = '7000'
1413        elif re.search(r'_3000_s3', self.device_uri):
1414            self.device_name = '3000'
1415        elif re.search(r'_2000_s2', self.device_uri):
1416            self.device_name = '2000'
1417        elif re.search(r'7000_snw1', self.device_uri):
1418            self.device_name = '7000'
1419        elif re.search(r'4000_snw1', self.device_uri):
1420            self.device_name = '4000'
1421        elif re.search(r'_3000_s4', self.device_uri):
1422            self.device_name = '3000'
1423        elif re.search(r'_5000_s5', self.device_uri):
1424            self.device_name = '5000'
1425        #print (self.device_uri)
1426        if self.device_name == '7500' or self.device_name == '5000' or self.device_name == '9120' or self.device_name == '8500' or self.device_name == '3500' or self.device_name == '4500' or self.device_name == '7000' or self.device_name == '3000' or self.device_name == '2000' or self.device_name == '2500' or self.device_name == '4000':
1427            self.comboBox_SourceChanged(self.device_name)
1428
1429
1430    def comboBox_device_URI(self):
1431        self.device_uri = str(self.comboBox_Device_URI.currentText())
1432        self.change_source()
1433
1434
1435    def retranslateUi(self, HpScan):
1436        HpScan.setWindowTitle(_translate("HpScan", "HP-Scan", None))
1437        self.label_Type.setText(_translate("HpScan", "    Type", None))
1438        self.label_Size.setText(_translate("HpScan", "    Size", None))
1439        self.label_Path.setText(_translate("HpScan", "    Path", None))
1440        self.label_Device.setText(_translate("HpScan", "    Device", None))
1441        #self.label_Color.setText(_translate("HpScan", "    Color", None))
1442        self.label_Brightness.setText(_translate("HpScan", "    Brightness", None))
1443        self.label_CR.setText(_translate("HpScan", "    Range", None))
1444        self.label_Contrast.setText(_translate("HpScan", "    Contrast", None))
1445        self.label_Sharpness.setText(_translate("HpScan", "    Sharpness", None))
1446        self.label_Color_value.setText(_translate("HpScan", "    Color", None))
1447        self.comboBox_Type.setItemText(0, _translate("HpScan", "PNG", None))
1448        self.comboBox_Type.setItemText(1, _translate("HpScan", "JPG", None))
1449        self.comboBox_Type.setItemText(2, _translate("HpScan", "PDF", None))
1450        self.comboBox_Type.setItemText(3, _translate("HpScan", "TIFF", None))
1451        self.comboBox_Type.setItemText(4, _translate("HpScan", "BMP", None))
1452        '''self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
1453        self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
1454        self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
1455        self.comboBox_Flatbed.setCurrentIndex(1)'''
1456        #self.comboBox_Color.setItemText(0, _translate("HpScan", "Lineart", None))
1457        self.comboBox_Color.setItemText(0, _translate("HpScan", "Gray", None))
1458        self.comboBox_Color.setItemText(1, _translate("HpScan", "Color", None))
1459        self.comboBox_Color.setCurrentIndex(0)
1460        self.comboBox_Resolution.setItemText(0, _translate("HpScan", "75", None))
1461        self.comboBox_Resolution.setItemText(1, _translate("HpScan", "100", None))
1462        self.comboBox_Resolution.setItemText(2, _translate("HpScan", "200", None))
1463        self.comboBox_Resolution.setItemText(3, _translate("HpScan", "300", None))
1464        self.comboBox_Resolution.setItemText(4, _translate("HpScan", "600", None))
1465        self.comboBox_Resolution.setCurrentIndex(3)
1466        #self.comboBox_Papersize.setItemText(0, _translate("HpScan", "5x7", None))
1467        #self.comboBox_Papersize.setItemText(1, _translate("HpScan", "4x6", None))
1468        #self.comboBox_Papersize.setItemText(2, _translate("HpScan", "3x5", None))
1469        #self.comboBox_Papersize.setItemText(3, _translate("HpScan", "a2_env", None))
1470        #self.comboBox_Papersize.setItemText(4, _translate("HpScan", "a3", None))
1471        #self.comboBox_Papersize.setItemText(0, _translate("HpScan", "a4", None))
1472        #self.comboBox_Papersize.setItemText(1, _translate("HpScan", "a5", None))
1473        #self.comboBox_Papersize.setItemText(7, _translate("HpScan", "a6", None))
1474        #self.comboBox_Papersize.setItemText(8, _translate("HpScan", "b4", None))
1475        #self.comboBox_Papersize.setItemText(2, _translate("HpScan", "b5", None))
1476        #self.comboBox_Papersize.setItemText(10, _translate("HpScan", "c6_env", None))
1477        #self.comboBox_Papersize.setItemText(11, _translate("HpScan", "dl_env", None))
1478        #self.comboBox_Papersize.setItemText(12, _translate("HpScan", "exec", None))
1479        #self.comboBox_Papersize.setItemText(13, _translate("HpScan", "flsa", None))
1480        #self.comboBox_Papersize.setItemText(14, _translate("HpScan", "higaki", None))
1481        #self.comboBox_Papersize.setItemText(15, _translate("HpScan", "japan_env_3", None))
1482        #self.comboBox_Papersize.setItemText(16, _translate("HpScan", "japan_env_4", None))
1483        #self.comboBox_Papersize.setItemText(3, _translate("HpScan", "legal", None))
1484        #self.comboBox_Papersize.setItemText(4, _translate("HpScan", "letter", None))
1485        #self.comboBox_Papersize.setItemText(19, _translate("HpScan", "no_10_env", None))
1486        #self.comboBox_Papersize.setItemText(20, _translate("HpScan", "oufufu-hagaki", None))
1487        #self.comboBox_Papersize.setItemText(21, _translate("HpScan", "photo", None))
1488        #self.comboBox_Papersize.setItemText(22, _translate("HpScan", "super_b", None))
1489        #self.comboBox_Papersize.setItemText(23, _translate("HpScan", "b6", None))
1490        #self.comboBox_Papersize.setCurrentIndex(4)
1491        self.pushButton_Scan.setText(_translate("HpScan", "Scan", None))
1492
1493        self.pushButton_Change.setText(_translate("HpScan", "Change Path", None))
1494        self.pushButton_Merge.setText(_translate("HpScan", "Merge", None))
1495        self.auto_orient.setText(_translate("HpScan", "Auto Orient ", None))
1496        self.crushed.setText(_translate("HpScan", "Background noise Removal ", None))
1497        self.searchablePDF.setText(_translate("HpScan", "Searchable PDF ", None))
1498        self.punchhole_removal.setText(_translate("HpScan", "Punch Hole Removal ", None))
1499        self.color_dropout.setText(_translate("HpScan", "Color Removal/Dropout ", None))
1500        self.bg_color_removal.setText(_translate("HpScan", "Background Color Removal", None))
1501        self.auto_crop.setText(_translate("HpScan", "Crop to content on page ", None))
1502        self.deskew_image.setText(_translate("HpScan", "Straighten page content ", None))
1503        self.multi_pick.setText(_translate("HpScan", "Misfeed(multipick) detection", None))
1504        self.blank_page.setText(_translate("HpScan", "Delete blank pages ", None))
1505        self.batch_seperation.setText(_translate("HpScan", "Separate the document", None))
1506        self.bp_blankpage.setText(_translate("HpScan", "Before each blank page", None))
1507        self.bp_barcode.setText(_translate("HpScan", "Before each page with a barcode", None))
1508        self.comboBox_Barcode_Type.setItemText(0, _translate("HpScan", "Any format", None))
1509        self.comboBox_Barcode_Type.setItemText(1, _translate("HpScan", "Code 39,Code 39 full ASCII", None))
1510        self.comboBox_Barcode_Type.setItemText(2, _translate("HpScan", "EAN 8/13,UPC-a,UPC-E(6-digit)", None))
1511        self.comboBox_Barcode_Type.setItemText(3, _translate("HpScan", "Code 128,GS1-128(UCC/EAN-128)", None))
1512        self.comboBox_Barcode_Type.setItemText(4, _translate("HpScan", "Codebar", None))
1513        self.comboBox_Barcode_Type.setItemText(5, _translate("HpScan", "ITF(2 of 5 interleaved)", None))
1514        self.comboBox_Barcode_Type.setItemText(6, _translate("HpScan", "PDF 417", None))
1515        self.comboBox_Barcode_Type.setItemText(7, _translate("HpScan", "Postnet code", None))
1516        self.document_merge.setText(_translate("HpScan", "Page merge", None))
1517        self.document_merge_adf_flatbed.setText(_translate("HpScan", "Document merge", None))
1518        self.image_enhancement.setText(_translate("HpScan", "Image enhancement", None))
1519        self.mixed_feed.setText(_translate("HpScan", "Mixed document feed", None))
1520
1521        i = 0
1522        #print self.devicelist
1523        for device in self.devicelist:
1524            if re.search(r'_5000_', device) or re.search(r'_7500', device) or re.search(r'_N9120', device) or re.search(r'_8500fn2', device) or re.search(r'_3500_f1', device) or re.search(r'_4500_fn1', device) or re.search(r'_7000_s3', device) or re.search(r'_3000_s3', device) or re.search(r'hp2000S1', device) or re.search(r'hpgt2500', device) or re.search(r'_2000_s2', device) or re.search(r'7000_snw1', device) or re.search(r'4000_snw1', device) or re.search(r'_3000_s4', device) or re.search(r'_5000_s5', device):
1525                self.comboBox_Device_URI.addItem(device)
1526                self.comboBox_Device_URI.setItemText(i, _translate("HpScan", device, None))
1527                i += 1
1528            else:
1529                self.other_device_cnt += 1
1530        self.comboBox_path.addItem(path)
1531        self.comboBox_path.setItemText(0,_translate("HpScan", path, None))
1532
1533
1534        #self.pushButton_Cancel.setText(_translate("HpScan", "Cancel", None))
1535
1536
1537class SetupDialog():
1538    #print ("calling ui5 scan.py")
1539    def setupUi(self):
1540        #scanjet_flag=''
1541        #print ("called ui5 scan.py")
1542        #list1=[]
1543        import sys
1544        app = QtWidgets.QApplication(sys.argv)
1545        #app = QApplication(sys.argv)
1546        HpScan = QtWidgets.QDockWidget()
1547        ui = Ui_HpScan()
1548
1549        devicelist = {}
1550        #device = ''
1551        sane.init()
1552        sane_devices = sane.getDevices()
1553
1554        for device, mfg, mdl, t in sane_devices:
1555            if re.search(r'_5000_', device) or re.search(r'_7500', device) or re.search(r'_N9120', device) or re.search(r'_8500fn2', device) or re.search(r'_3500_f1', device) or re.search(r'_4500_fn1', device) or re.search(r'_7000_s3', device) or re.search(r'_3000_s3', device) or re.search(r'hp2000S1', device) or re.search(r'hpgt2500', device) or re.search(r'_2000_s2', device) or re.search(r'7000_snw1', device) or re.search(r'4000_snw1', device) or re.search(r'_3000_s4', device) or re.search(r'_5000_s5', device):
1556                try:
1557                    scanDevice = sane.openDevice(device)
1558                    #source_option = scanDevice.getOptionObj("source").constraint
1559                    brx = scanDevice.getOptionObj('br-x').limitAndSet(None)
1560                    bry = scanDevice.getOptionObj('br-y').limitAndSet(None)
1561                    devicelist[device] = [mdl]
1562                    #devicelist[device].extend([source_option,int(brx)+1,int(bry)+1])
1563                    devicelist[device].extend([int(brx)+1,int(bry)+1])
1564                    scanDevice.closeScan()
1565                except :
1566                    pass
1567
1568        sane.deInit()
1569        #print (devicelist)
1570
1571        ui.devicelist = devicelist
1572        #print ui.devicelist
1573
1574        ui.setupUi(HpScan)
1575
1576        scanjet_flag=imageprocessing.check_pil()
1577        if scanjet_flag is not None:
1578            #ui.DisableAllScanjet()
1579            ui.auto_orient.setEnabled(False)
1580            ui.searchablePDF.setEnabled(False)
1581            ui.auto_crop.setEnabled(False)
1582            ui.image_enhancement.setEnabled(False)
1583            ui.document_merge_adf_flatbed.setEnabled(False)
1584            ui.multi_pick.setEnabled(False)
1585            #ui.batch_seperation.setEnabled(False)
1586            ui.deskew_image.setEnabled(False)
1587            ui.blank_page.setEnabled(False)
1588            ui.crushed.setEnabled(False)
1589            ui.bg_color_removal.setEnabled(False)
1590            ui.punchhole_removal.setEnabled(False)
1591            ui.color_dropout.setEnabled(False)
1592            ui.mixed_feed.setEnabled(False)
1593            ui.document_merge.setEnabled(False)
1594
1595            ui.deskew_image_pri = False
1596            ui.auto_crop_pri = False
1597            ui.mixed_feed_pri = False
1598            ui.auto_orient_pri = False
1599            ui.searchablePDF_pri = False
1600            ui.document_merge_adf_flatbed_pri = False
1601            #ui.multi_pick_pri = False
1602            #ui.batch_seperation_pri = False
1603            ui.crushed_pri = False
1604            ui.bg_color_removal_pri = False
1605            ui.punchhole_removal_pri = False
1606            ui.color_dropout_pri = False
1607            ui.document_merge_pri = False
1608            ui.image_enhancement_pri = False
1609            ui.blank_page_pri = False
1610
1611        scanjet_flag=imageprocessing.check_numpy()
1612        if scanjet_flag is not None:
1613            #ui.DisableAllScanjet()
1614            ui.auto_orient.setEnabled(False)
1615            #ui.searchablePDF.setEnabled(False)
1616            ui.auto_crop.setEnabled(False)
1617            #ui.image_enhancement.setEnabled(False)
1618            ui.document_merge_adf_flatbed.setEnabled(False)
1619            ui.multi_pick.setEnabled(False)
1620            #ui.batch_seperation.setEnabled(False)
1621            ui.deskew_image.setEnabled(False)
1622            #ui.blank_page.setEnabled(False)
1623            ui.crushed.setEnabled(False)
1624            ui.bg_color_removal.setEnabled(False)
1625            ui.punchhole_removal.setEnabled(False)
1626            ui.color_dropout.setEnabled(False)
1627            ui.mixed_feed.setEnabled(False)
1628            ui.document_merge.setEnabled(False)
1629
1630
1631            ui.blank_page.setEnabled(True)
1632            #ui.blank_page.setChecked(False)
1633            ui.image_enhancement.setEnabled(True)
1634            #ui.image_enhancement.setChecked(False)
1635
1636            ui.deskew_image_pri = False
1637            ui.auto_crop_pri = False
1638            ui.mixed_feed_pri = False
1639            ui.auto_orient_pri = False
1640            ui.searchablePDF_pri = False
1641            ui.document_merge_adf_flatbed_pri = False
1642            #ui.multi_pick_pri = False
1643            #ui.batch_seperation_pri = False
1644            ui.crushed_pri = False
1645            ui.document_merge_pri = False
1646            ui.bg_color_removal_pri = False
1647            ui.punchhole_removal_pri = False
1648            ui.color_dropout_pri = False
1649
1650        scanjet_flag=imageprocessing.check_opencv()
1651        if scanjet_flag is not None:
1652            ui.deskew_image.setEnabled(False)
1653            ui.auto_crop.setEnabled(False)
1654            ui.mixed_feed.setEnabled(False)
1655            ui.bg_color_removal.setEnabled(False)
1656            #ui.deskew_image.setChecked(False)
1657            #ui.auto_crop.setChecked(False)
1658            #ui.mixed_feed.setChecked(False)
1659            ui.color_dropout.setEnabled(False)
1660
1661
1662            ui.color_dropout_pri = False
1663            ui.deskew_image_pri = False
1664            ui.auto_crop_pri = False
1665            ui.mixed_feed_pri = False
1666            ui.bg_color_removal_pri = False
1667
1668        scanjet_flag=imageprocessing.check_skimage()
1669        if scanjet_flag is not None:
1670            ui.punchhole_removal.setEnabled(False)
1671            ui.punchhole_removal_pri = False
1672
1673        scanjet_flag=imageprocessing.check_scipy()
1674        if scanjet_flag is not None:
1675            ui.deskew_image.setEnabled(False)
1676            ui.deskew_image_pri = False
1677
1678        scanjet_flag=imageprocessing.check_tesserocr_imutils()
1679        if scanjet_flag is not None:
1680            ui.auto_orient.setEnabled(False)
1681            #ui.auto_orient.setChecked(False)
1682
1683            ui.auto_orient_pri = False
1684
1685        scanjet_flag=imageprocessing.check_pypdfocr()
1686        if scanjet_flag is not None:
1687            ui.searchablePDF.setEnabled(False)
1688            ui.searchablePDF_pri = False
1689
1690        scanjet_flag=imageprocessing.check_pypdf2()
1691        if scanjet_flag is not None:
1692            ui.document_merge.setEnabled(False)
1693            ui.document_merge_adf_flatbed.setEnabled(False)
1694            #ui.document_merge.setChecked(False)
1695
1696            ui.document_merge_pri = False
1697            ui.document_merge_adf_flatbed_pri = False
1698
1699        scanjet_flag=imageprocessing.check_zbar()
1700        #print scanjet_flag
1701        if scanjet_flag is not None:
1702            #print "setting barcode to false"
1703            ui.bp_barcode.setEnabled(False)
1704
1705            ui.batchsepBC_pri = False
1706
1707        #list1.append(HpScan)
1708        #list1.append(app)
1709        #print HpScan
1710        '''list_scanjet=imageprocessing.validate_scanjet_support()
1711        print (list_scanjet)
1712        if(list_scanjet[2] == 'False'):
1713            scanjet_error="Scanjet features are not supported and disabled for %s %s. Please upgrade to latest distro version"% (list_scanjet[0],list_scanjet[1])
1714            ui.failureMessage(scanjet_error)
1715            ui.DisableAllScanjet()
1716        source_option = device.getOptionObj("source").constraint
1717        print (source_option)
1718        valid_res = device.getOptionObj('resolution').constraint
1719        print (valid_res)
1720        available_scan_mode = device.getOptionObj("mode").constraint
1721        print (available_scan_mode)'''
1722        #print ui.comboBox_Device_URI.count()
1723        if ui.comboBox_Device_URI.count() == 0:
1724            if ui.other_device_cnt > 0:
1725                scanjet_error="hp-uiscan is not supported for this device"
1726                ui.failureMessage(scanjet_error)
1727            else:
1728                scanjet_error="No device connected"
1729                ui.failureMessage(scanjet_error)
1730        else:
1731            HpScan.show()
1732            sys.exit(app.exec_())
1733        #return list1
1734
1735