__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Hp-Scan.ui'
#
# Created by: PyQt5 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets
from base import utils,imageprocessing
#from scan import sane
import re
import os
import platform

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from scan import sane
from collections import OrderedDict

PAGE_SIZES = OrderedDict([ # in mm
    ("letter" , (215, 279, "Letter", 'in')),
    ('a3' , (297, 420, "A3", 'mm')),
    ("a4" , (210, 297, "A4", 'mm')),
    ("a5" , (148, 210, "A5", 'mm')),
    ('5x7' , (127, 178, "5x7 photo", 'in')),
    ('4x6' , (102, 152, "4x6 photo", 'in')),
    ('3x5' , (76, 127, "3x5 index card", 'in')),
    ('a2_env' , (111, 146, "A2 Envelope", 'in')),
    ("a6" , (105, 148, "A6", 'mm')),
    ("b4" , (257, 364, "B4", 'mm')),
    ("b5" , (182, 257, "B5", 'mm')),
    ("c6_env" , (114, 162, "C6 Envelope", 'in')),
    ("dl_env" , (110, 220, "DL Envelope", 'in')),
    ("exec" , (184, 267, "Executive", 'in')),
    ("flsa" , (216, 330, "Flsa", 'mm')),
    ("higaki" , (100, 148, "Hagaki", 'mm')),
    ("japan_env_3" , (120, 235, "Japanese Envelope #3", 'mm')),
    ("japan_env_4" , (90, 205, "Japanese Envelope #4", 'mm')),
    ("legal" , (215, 356, "Legal", 'in')),
    ("no_10_env" , (105, 241, "Number 10 Envelope", 'in')),
    ("oufufu-hagaki" , (148, 200, "Oufuku-Hagaki", 'mm')),
    ("photo" , (102, 152, "Photo", 'in')),
    ("super_b" , (330, 483, "Super B", 'in')),
    ])


#devicelist = {}
device_name = ''
path = os.getcwd()
new_path = os.getcwd()
multipick_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"
convert_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"


no_document_error_message = "No document(s). Please load documents and try again."

no_pages_to_merge = "No scanned documents to merge."
pyPlatform = ''
num= {}
try:
    _encoding = QtWidgets.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtCore.QCoreApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtCore.QCoreApplication.translate(context, text, disambig)

class Ui_HpScan(object):
    devicelist = {}
    #device_name = ''
    file_type = 'png'
    source = ''
    color = 'gray'
    resolution = '300'
    size ='letter'
    device_uri = ''
    multi_pick = False
    document_merge =False
    auto_orient =False
    crushed = False
    bg_color_removal = False
    punchhole_removal = False
    color_dropout = False
    edge_erase_bool = False
    edge_erase_value = 0
    searchablePDF = False
    mixed_feed =False
    blank_page = False
    batch_seperation = False
    bp_barcode = False
    auto_crop = False
    deskew_image = False
    document_merge_adf_flatbed = False
    image_enhancement = False
    brightness = False
    dropout_color_red_value = 0
    dropout_color_green_value = 0
    dropout_color_blue_value = 0
    contrast = False
    sharpness = False
    color_value = False
    color_range = True
    sizel1 = 0
    sizel2 = 0
    sizel3 = 0
    sizel4 = 0
    sizel5 = 49
    deskew_image_pri = True
    auto_crop_pri = True
    mixed_feed_pri = True
    auto_orient_pri = True
    document_merge_adf_flatbed_pri = True
    multi_pick_pri = True
    searchablePDF_pri = True
    #batch_seperation_pri = True
    crushed_pri = True
    bg_color_removal_pri = True
    punchhole_removal_pri =True
    color_dropout_pri = True
    document_merge_pri = True
    image_enhancement_pri = True
    blank_page_pri = True
    batchsepBC_pri = True
    other_device_cnt = 0
    ocr = False
	
    def setupUi(self, HpScan):
        pyPlatform = platform.python_version()
        HpScan.setObjectName("HpScan")
        HpScan.setMinimumSize(QtCore.QSize(900, 600))
        HpScan.setMaximumSize(QtCore.QSize(900, 600))
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        HpScan.setFont(font)
        HpScan.setMouseTracking(False)
        HpScan.setFocusPolicy(QtCore.Qt.NoFocus)
        self.dockWidgetContents = QtWidgets.QWidget()
        self.dockWidgetContents.setObjectName("dockWidgetContents")
        self.label_Type = QtWidgets.QLabel(self.dockWidgetContents)
        self.label_Type.setGeometry(QtCore.QRect(10, 89, 51, 41))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.label_Type.setFont(font)
        self.label_Type.setMouseTracking(True)
        self.label_Type.setObjectName("label_Type")
        self.comboBox_Type = QtWidgets.QComboBox(self.dockWidgetContents)
        self.comboBox_Type.setGeometry(QtCore.QRect(85, 90, 171, 41))
        self.comboBox_Type.setObjectName("comboBox_Type")
        self.comboBox_Type.addItem("")
        self.comboBox_Type.addItem("")
        self.comboBox_Type.addItem("")
        self.comboBox_Type.addItem("")
        self.comboBox_Type.addItem("")
        self.comboBox_Type.currentIndexChanged.connect(self.comboBox_TypeIndexChanged)
        self.comboBox_Flatbed = QtWidgets.QComboBox(self.dockWidgetContents)
        self.comboBox_Flatbed.setGeometry(QtCore.QRect(85, 150, 171, 41))
        self.comboBox_Flatbed.setObjectName("comboBox_Flatbed")
        #self.comboBox_Flatbed.addItem(_fromUtf8(""))
        #self.comboBox_Flatbed.addItem(_fromUtf8(""))
        #self.comboBox_Flatbed.addItem(_fromUtf8(""))
        #self.comboBox_Flatbed.currentIndexChanged.connect(self.comboBox_SourceChanged)
        self.comboBox_Color = QtWidgets.QComboBox(self.dockWidgetContents)
        self.comboBox_Color.setGeometry(QtCore.QRect(85, 210, 171, 41))
        self.comboBox_Color.setObjectName("comboBox_Color")
        self.comboBox_Color.addItem("")
        self.comboBox_Color.addItem("")
        self.comboBox_Color.currentIndexChanged.connect(self.comboBox_ColorIndexChanged)
        self.comboBox_Resolution = QtWidgets.QComboBox(self.dockWidgetContents)
        self.comboBox_Resolution.setGeometry(QtCore.QRect(85, 270, 171, 41))
        self.comboBox_Resolution.setObjectName("comboBox_Resolution")
        self.comboBox_Resolution.addItem("")
        self.comboBox_Resolution.addItem("")
        self.comboBox_Resolution.addItem("")
        self.comboBox_Resolution.addItem("")
        self.comboBox_Resolution.addItem("")
        self.comboBox_Resolution.currentIndexChanged.connect(self.comboBox_ResIndexChanged)
        self.label_Size = QtWidgets.QLabel(self.dockWidgetContents)
        self.label_Size.setGeometry(QtCore.QRect(10, 329, 51, 41))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.label_Size.setFont(font)
        self.label_Size.setMouseTracking(True)
        self.label_Size.setObjectName("label_Size")
        self.label_Device = QtWidgets.QLabel(self.dockWidgetContents)
        self.label_Device.setGeometry(QtCore.QRect(10, 29, 65, 41))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.label_Device.setFont(font)
        self.label_Device.setMouseTracking(True)
        self.label_Device.setObjectName("label_Device")
        self.comboBox_Papersize = QtWidgets.QComboBox(self.dockWidgetContents)
        self.comboBox_Papersize.setGeometry(QtCore.QRect(85, 330, 171, 41))
        self.comboBox_Papersize.setObjectName("comboBox_Papersize")
        #self.comboBox_Papersize.addItem("")
        #self.comboBox_Papersize.addItem("")
        #self.comboBox_Papersize.addItem("")
        #self.comboBox_Papersize.addItem("")
        #self.comboBox_Papersize.addItem("")
        #self.comboBox_Papersize.currentIndexChanged.connect(self.comboBox_PaperSizeIndexChanged)
        self.pushButton_Scan = QtWidgets.QPushButton(self.dockWidgetContents)
        self.pushButton_Scan.setGeometry(QtCore.QRect(60, 470, 81, 41))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_Scan.setFont(font)        
        self.pushButton_Scan.setObjectName("pushButton_Scan")
        self.pushButton_Scan.clicked.connect(self.scanButton_clicked)

        self.label_Path = QtWidgets.QLabel(self.dockWidgetContents)
        self.label_Path.setGeometry(QtCore.QRect(10,390, 51, 41))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.label_Path.setFont(font)
        self.label_Path.setMouseTracking(True)
        self.label_Path.setObjectName("label_Path")
        
        self.pushButton_Change = QtWidgets.QPushButton(self.dockWidgetContents)
        self.pushButton_Change.setGeometry(QtCore.QRect(155, 470, 101, 41))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_Change.setFont(font)
        self.pushButton_Change.setObjectName("pushButton_Change")
        self.pushButton_Change.clicked.connect(self.selectFile)
        
        self.pushButton_Merge = QtWidgets.QPushButton(self.dockWidgetContents)
        self.pushButton_Merge.setGeometry(QtCore.QRect(450, 305, 81, 31))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_Merge.setFont(font)
        self.pushButton_Merge.setObjectName("pushButton_Merge")
        self.pushButton_Merge.setEnabled(False)
        self.pushButton_Merge.clicked.connect(self.mergeButton_clicked)

        self.label_Flatbed = QtWidgets.QLabel(self.dockWidgetContents)
        self.label_Flatbed.setGeometry(QtCore.QRect(10, 150, 51, 41))
        self.label_Flatbed.setText("")
        self.label_Flatbed.setPixmap(QtGui.QPixmap("/usr/share/hplip/data/images/other/flat1.png"))
        self.label_Flatbed.setObjectName("label_Flatbed")
        self.label_Color = QtWidgets.QLabel(self.dockWidgetContents)
        self.label_Color.setGeometry(QtCore.QRect(20, 210, 61, 41))
        self.label_Color.setText("")
        self.label_Color.setPixmap(QtGui.QPixmap("/usr/share/hplip/data/images/other/viewer.png"))
        self.label_Color.setObjectName("label_Color")
        self.label_Resolution = QtWidgets.QLabel(self.dockWidgetContents)
        self.label_Resolution.setGeometry(QtCore.QRect(20, 270, 51, 51))
        self.label_Resolution.setText("")
        self.label_Resolution.setPixmap(QtGui.QPixmap("/usr/share/hplip/data/images/other/resolution.png"))
        self.label_Resolution.setObjectName("label_Resolution")
        self.auto_orient = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.auto_orient.setGeometry(QtCore.QRect(300,70,117, 22))
        self.auto_orient.setObjectName("auto_orient")
        self.auto_orient.stateChanged.connect(self.Auto_orient)
        self.searchablePDF = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.searchablePDF.setGeometry(QtCore.QRect(300,350,200, 22))
        self.searchablePDF.setObjectName("searchablePDF")
        self.searchablePDF.stateChanged.connect(self.SearchablePDF)
        self.punchhole_removal = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.punchhole_removal.setGeometry(QtCore.QRect(300,390,200, 22))
        self.punchhole_removal.setObjectName("punchhole_removal")
        self.punchhole_removal.stateChanged.connect(self.Punchhole_removal)
        #self.punchhole_removal.stateChanged.connect(self.SearchablePDF)
        self.bg_color_removal = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.bg_color_removal.setGeometry(QtCore.QRect(300,430,240, 22))
        self.bg_color_removal.setObjectName("bg_color_removal")
        self.bg_color_removal.stateChanged.connect(self.Bg_color_removal)
        #self.bg_color_removal.stateChanged.connect(self.SearchablePDF)
        
        self.auto_crop = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.auto_crop.setGeometry(QtCore.QRect(300, 110, 241, 20))
        self.auto_crop.setObjectName("auto_crop")
        self.auto_crop.stateChanged.connect(self.Auto_crop)
        self.multi_pick = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.multi_pick.setGeometry(QtCore.QRect(300, 150, 231, 22))
        self.multi_pick.setObjectName("multi_pick")
        self.multi_pick.stateChanged.connect(self.Multi_pick)
        self.blank_page = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.blank_page.setGeometry(QtCore.QRect(300, 190, 241, 22))
        self.blank_page.setObjectName("blank_page")
        self.blank_page.stateChanged.connect(self.Blank_page)

        #self.comboBox_Barcode_Type.currentIndexChanged.connect(self.comboBox_ResIndexChanged)
        self.document_merge = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.document_merge.setGeometry(QtCore.QRect(300, 230, 161, 22))
        self.document_merge.setObjectName("document_merge")
        self.document_merge.stateChanged.connect(self.Document_merge)
        self.mixed_feed = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.mixed_feed.setGeometry(QtCore.QRect(300, 270, 200, 22))
        self.mixed_feed.setObjectName("mixed_feed")
        self.mixed_feed.stateChanged.connect(self.Mixed_feed)
        self.deskew_image = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.document_merge_adf_flatbed = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.document_merge_adf_flatbed.setGeometry(QtCore.QRect(300, 310, 150, 22))
        self.document_merge_adf_flatbed.setObjectName("document_merge_adf_flatbed")
        self.document_merge_adf_flatbed.stateChanged.connect(self.Document_merge_adf_flatbed)
        


        self.deskew_image.setGeometry(QtCore.QRect(300,30, 241, 20))
        self.deskew_image.setObjectName("deskew_image")
        self.deskew_image.stateChanged.connect(self.Deskew_image)
        self.comboBox_Device_URI = QtWidgets.QComboBox(self.dockWidgetContents)
        self.comboBox_Device_URI.setGeometry(QtCore.QRect(85, 30, 171, 41))
        self.comboBox_Device_URI.setObjectName("comboBox_Device_URI")
        self.comboBox_Device_URI.currentIndexChanged.connect(self.comboBox_device_URI)
        
        self.comboBox_path = QtWidgets.QComboBox(self.dockWidgetContents)
        self.comboBox_path.setEditable(False)
        self.comboBox_path.setGeometry(QtCore.QRect(85,390, 171, 41))
        self.comboBox_path.setObjectName("comboBox_path")
        self.comboBox_path.currentIndexChanged.connect(self.comboBox_Path)
        
        #column 3
        #background noise removal
        self.crushed = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.crushed.setGeometry(QtCore.QRect(550,30,240, 22))
        self.crushed.setObjectName("crushed")
        self.crushed.stateChanged.connect(self.Crushed)
        #image enhancement
        self.image_enhancement = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.image_enhancement.setGeometry(QtCore.QRect(550, 70, 250, 22))
        self.image_enhancement.setObjectName("image_enhancement")
        self.image_enhancement.stateChanged.connect(self.Image_enhancement)
        self.label_Brightness = QtWidgets.QLabel(self.dockWidgetContents)
        self.label_Brightness.setGeometry(QtCore.QRect(560,100, 250, 22))
        self.label_Brightness.setMouseTracking(True)
        self.label_Brightness.setObjectName("label_Brightness")
        self.label_Contrast = QtWidgets.QLabel(self.dockWidgetContents)
        self.label_Contrast.setGeometry(QtCore.QRect(560,130, 250, 22))
        self.label_Contrast.setMouseTracking(True)
        self.label_Contrast.setObjectName("label_Contrast")
        self.label_Sharpness = QtWidgets.QLabel(self.dockWidgetContents)
        self.label_Sharpness.setGeometry(QtCore.QRect(560,160, 250, 22))
        self.label_Sharpness.setMouseTracking(True)
        self.label_Sharpness.setObjectName("label_Sharpness")
        self.label_Color_value = QtWidgets.QLabel(self.dockWidgetContents)
        self.label_Color_value.setGeometry(QtCore.QRect(560,190, 250, 22))
        self.label_Color_value.setMouseTracking(True)
        self.label_Color_value.setObjectName("label_Color_value")
        #batch seperation
        self.batch_seperation = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.batch_seperation.setGeometry(QtCore.QRect(550, 230, 201, 22))
        self.batch_seperation.setObjectName("batch_seperation")
        self.batch_seperation.stateChanged.connect(self.batch_Seperation)
        #self.batch_seperation.setEnabled(False)
        self.bp_blankpage = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.bp_blankpage.setGeometry(QtCore.QRect(570, 260, 201, 22))
        self.bp_blankpage.setObjectName("bp_blankpage")
        self.bp_blankpage.setEnabled(False)
        self.bp_barcode = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.bp_barcode.setGeometry(QtCore.QRect(570, 290, 311, 22))
        self.bp_barcode.setObjectName("bp_barcode")
        self.bp_barcode.setEnabled(False)
        self.comboBox_Barcode_Type = QtWidgets.QComboBox(self.dockWidgetContents)
        self.comboBox_Barcode_Type.setGeometry(QtCore.QRect(590, 320, 261, 27))
        self.comboBox_Barcode_Type.setObjectName("comboBox_Barcode_Type")
        self.comboBox_Barcode_Type.addItem("")
        self.comboBox_Barcode_Type.addItem("")
        self.comboBox_Barcode_Type.addItem("")
        self.comboBox_Barcode_Type.addItem("")
        self.comboBox_Barcode_Type.addItem("")
        self.comboBox_Barcode_Type.addItem("")
        self.comboBox_Barcode_Type.addItem("")
        self.comboBox_Barcode_Type.addItem("")
        self.comboBox_Barcode_Type.setEnabled(False)
        #color dropout
        self.color_dropout = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.color_dropout.setGeometry(QtCore.QRect(550,360,240, 22))
        self.color_dropout.setObjectName("color_dropout")
        self.color_dropout.stateChanged.connect(self.Color_dropout)
        self.label_CR = QtWidgets.QLabel(self.dockWidgetContents)
        self.label_CR.setGeometry(QtCore.QRect(560,390, 250, 22))
        self.label_CR.setMouseTracking(True)
        self.label_CR.setObjectName("label_CR")
        #edge erase
        self.edge_erase = QtWidgets.QCheckBox(self.dockWidgetContents)
        self.edge_erase.setGeometry(QtCore.QRect(550,420, 250, 22))
        self.edge_erase.setObjectName("edge_erase")
        self.edge_erase.stateChanged.connect(self.Edge_erase)
        self.edge_erase.setEnabled(True)

        self.edge_erase_spin_box = QtWidgets.QDoubleSpinBox(self.dockWidgetContents)
        self.edge_erase_spin_box.setGeometry(QtCore.QRect(700,420,100,20))
        self.edge_erase_spin_box.setObjectName("edge_erase_spin_box")
        self.edge_erase_spin_box.setEnabled(False)
        self.edge_erase_spin_box.setSuffix("inch")
        self.edge_erase_spin_box.setMinimum(0.0)
        self.edge_erase_spin_box.setMaximum(1.0)
        self.edge_erase_spin_box.setSingleStep(0.1)
        self.edge_erase_spin_box.valueChanged.connect(self.edge_erase_spin_box_value_changed)

        #self.layout = QtGui.QVBoxLayout(self.dockWidgetContents)

        
        #self.s1 = QtGui.QSlider(Qt.Horizontal)
        self.s1 = QtWidgets.QSlider(Qt.Horizontal,self.dockWidgetContents)
        self.s1.setFocusPolicy(QtCore.Qt.NoFocus)
        self.s1.setGeometry(660, 95, 100, 30)

        #self.s1 = QSlider(Qt.Horizontal)
        #self.s1.setGeometry(320, 460, 250, 22)
        self.s1.setMinimum(0)
        self.s1.setMaximum(255)
        self.s1.setValue(100)

        self.s1.setTickPosition(QtWidgets.QSlider.TicksBelow)
        self.s1.setTickInterval(10)
        #self.s1.setSliderPosition(5)
        #self.layout.addWidget(self.s1,0,QtCore.Qt.AlignRight)
        #HpScan.addWidget(self.s1,0,QtCore.Qt.AlignRight)
        self.s1.setEnabled(False)
        self.s1.valueChanged.connect(self.valuechange_brightness)
        
        self.s2 = QtWidgets.QSlider(Qt.Horizontal,self.dockWidgetContents)
        self.s2.setFocusPolicy(QtCore.Qt.NoFocus)
        self.s2.setGeometry(660, 125, 100, 30)
        #self.s2 = QSlider(Qt.Horizontal)
        #self.s2.setGeometry(1320, 480, 250, 22)
        self.s2.setMinimum(0)
        self.s2.setMaximum(255)
        self.s2.setValue(100)
        self.s2.setTickPosition(QtWidgets.QSlider.TicksBelow)
        self.s2.setTickInterval(10)

        #self.layout.addWidget(self.s2,0,QtCore.Qt.AlignRight)
        self.s2.setEnabled(False)
        
        #self.layout.setObjectName(_fromUtf8("brightness"))
        self.s2.valueChanged.connect(self.valuechange_contrast)
        #self.setLayout(layout)
        
        self.s3 = QtWidgets.QSlider(Qt.Horizontal,self.dockWidgetContents)
        self.s3.setFocusPolicy(QtCore.Qt.NoFocus)
        self.s3.setGeometry(660, 155, 100, 30)
        #self.s3 = QSlider(Qt.Horizontal)
        #self.s3.setGeometry(1320, 500, 250, 22)
        self.s3.setMinimum(0)
        self.s3.setMaximum(200)
        self.s3.setValue(100)
        self.s3.setTickPosition(QtWidgets.QSlider.TicksBelow)
        self.s3.setTickInterval(10)

        #self.layout.addWidget(self.s3,0,QtCore.Qt.AlignRight)
        self.s3.setEnabled(False)
        self.s3.valueChanged.connect(self.valuechange_sharpness)
        
        self.s4 = QtWidgets.QSlider(Qt.Horizontal,self.dockWidgetContents)
        self.s4.setFocusPolicy(QtCore.Qt.NoFocus)
        self.s4.setGeometry(660, 185, 100, 30)
        #self.s4 = QSlider(Qt.Horizontal)
        #self.s4.setGeometry(1320, 520, 250, 22)
        self.s4.setMinimum(0)
        self.s4.setMaximum(255)
        self.s4.setValue(100)
        self.s4.setTickPosition(QtWidgets.QSlider.TicksBelow)
        self.s4.setTickInterval(10)

        #self.layout.addWidget(self.s4,0,QtCore.Qt.AlignRight)
        self.s4.setEnabled(False)
        self.s4.valueChanged.connect(self.valuechange_color)

        self.s5 = QtWidgets.QSlider(Qt.Horizontal,self.dockWidgetContents)
        self.s5.setFocusPolicy(QtCore.Qt.NoFocus)
        self.s5.setGeometry(660, 385, 100, 30)
        self.s5.setMinimum(0)
        self.s5.setMaximum(99)
        self.s5.setValue(49)
        self.s5.setTickPosition(QSlider.TicksBelow)
        self.s5.setTickInterval(10)

        self.s5.setEnabled(False)
        self.s5.valueChanged.connect(self.valuechange_range)
        
        
        #self.pushButton_Cancel = QtGui.QPushButton(self.dockWidgetContents)
        #self.pushButton_Cancel.setGeometry(QtCore.QRect(150, 270, 99, 41))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        #self.pushButton_Cancel.setFont(font)
        #self.pushButton_Cancel.setObjectName(_fromUtf8("pushButton_Cancel"))
        HpScan.setWidget(self.dockWidgetContents)

        self.retranslateUi(HpScan)
        QtCore.QMetaObject.connectSlotsByName(HpScan)
        #self.initUI()
    def valuechange_brightness(self):
        #print "entered value changed brightness" 
        #global sizel1
        self.brightness = True
        self.sizel1 = self.s1.value()
        #print "printing new value brightness"
        #print self.sizel1
    def valuechange_contrast(self):
        #print "entered value changed contrast" 
        #global sizel2
        self.contrast = True
        self.sizel2 = self.s2.value()
        #print "printing new value contrast"
        #print self.sizel2
    def valuechange_sharpness(self):
        #print "entered value changed sharpness" 
        #global sizel3
        self.sharpness = True
        self.sizel3 = self.s3.value()
        #print "printing new value sharpness"
        #print self.sizel3
    def valuechange_color(self):
        #print "entered value changed color" 
        #global sizel4
        self.color_value = True
        self.sizel4 = self.s4.value()
        #print "printing new value color"
        #print self.sizel4
    #def initUI(self):
        #self.connect(self.pushButton_Scan,SIGNAL("clicked()"),self.scanButton_clicked())
    def valuechange_range(self):
        #print "entered value changed color" 
        #global sizel5
        self.color_range = True
        self.sizel5 = self.s5.value()
    def edge_erase_spin_box_value_changed(self):
        self.edge_erase_value = round(self.edge_erase_spin_box.value(),2)
        #print("self.edge_erase_value = ", self.edge_erase_value)
    def comboBox_Path(self, new_path = None):
        path = new_path
        
    def selectFile(self):
        global path
        new_path = QFileDialog.getExistingDirectory(None)
        if new_path:
            #print "entered"
            #print new_path
            self.comboBox_Path(new_path)
            self.comboBox_path.setItemText(0,_translate("HpScan", new_path, None))
            path = new_path
    
    def scanButton_clicked(self):
        cmd = "hp-scan" + ' --device=' + self.device_uri + ' --filetype=' + self.file_type + ' --mode=' + self.color + ' --res=' + self.resolution + ' --size=' + self.size
        if self.source == 'adf' or self.source == 'duplex':
            cmd = cmd + ' --' + self.source
        if self.source == 'adf-backside':
            cmd = cmd + ' --duplex --backside'
        if self.multi_pick.isChecked() == True:
            cmd = cmd + ' --' + 'multipick'
        if self.auto_orient.isChecked() == True:
            cmd = cmd + ' --' + 'autoorient'
        if self.crushed.isChecked() == True:
            cmd = cmd + ' --' + 'crushed'
        if self.bg_color_removal.isChecked() == True:
	        cmd = cmd + ' --' + 'bg_color_removal'
        if self.punchhole_removal.isChecked() == True:
	        cmd = cmd + ' --' + 'punchhole_removal'
        if self.color_dropout.isChecked() == True:
	        cmd = cmd + ' --' + 'color_dropout_red_value'+ '=' + str(self.dropout_color_red_value)
        if self.color_dropout.isChecked() == True:
	        cmd = cmd + ' --' + 'color_dropout_green_value'+ '=' + str(self.dropout_color_green_value)
        if self.color_dropout.isChecked() == True:
	        cmd = cmd + ' --' + 'color_dropout_blue_value'+ '=' + str(self.dropout_color_blue_value)
        if self.color_dropout.isChecked() == True and self.color_range == True:
	        cmd = cmd + ' --' + 'color_range'+ '=' + str(self.sizel5)
        if self.edge_erase.isChecked() == True:
            cmd = cmd + ' --' + 'edge_erase_value'+ '=' + (str(self.edge_erase_value))
        if self.mixed_feed.isChecked() == True:
            cmd = re.sub(r'\--size=.+\ ', '', cmd)
            cmd = cmd + ' --' + 'mixedfeed'
        if self.document_merge.isChecked() == True:
            cmd = cmd + ' --' + 'docmerge'
        if self.auto_crop.isChecked() == True:
            cmd = cmd + ' --' + 'autocrop'
        if self.deskew_image.isChecked() == True:
            cmd = cmd + ' --' + 'deskew'
        if self.blank_page.isChecked() == True:
            cmd = cmd + ' --' + 'blankpage'
        if self.document_merge_adf_flatbed.isChecked() == True:
            cmd = cmd + ' --' + 'adf_flatbed_merge'
        if self.image_enhancement.isChecked() == True and self.brightness == True:
            cmd = cmd + ' --' + 'brightness' + '=' + str(self.sizel1)
        if self.image_enhancement.isChecked() == True and self.contrast == True:
            cmd = cmd + ' --' + 'contrast' + '=' + str(self.sizel2)
        if self.image_enhancement.isChecked() == True and self.sharpness == True:
            cmd = cmd + ' --' + 'sharpness' + '=' + str(self.sizel3)
        if self.image_enhancement.isChecked() == True and self.color_value == True:
            cmd = cmd + ' --' + 'color_value' + '=' + str(self.sizel4)
        if self.batch_seperation.isChecked() == True:
            if self.bp_blankpage.isChecked() == True:
                cmd = cmd + ' --' + 'batchsepBP'
            elif self.bp_barcode.isChecked() == True:
                cmd = cmd + ' --' + 'batchsepBC'
            else:
                self.failureMessage("Select either barcode or blankpage option for separation")
        #if self.bp_barcode.isChecked() == True:
            #cmd = cmd + ' --' + 'batchsepBC'
        cmd = cmd + ' --path=' + str(path)
        cmd = cmd + ' --' + 'uiscan'
        #print (cmd)
        self.pushButton_Scan.setEnabled(False)
        status = utils.run(cmd)
        #print (status)
        if status[0] == 2:
            self.failureMessage(multipick_error_message)
        elif status[0] == 3:
            self.warningMessage(no_document_error_message)
        elif status[0] == 4:
            output_pdf = status[1].split("error: ", 1)[1]
            output_pdf = output_pdf.split('.pdf', 1)[0]+".pdf"
            ocr = False
            if self.searchablePDF.isChecked() == True:
                ocr = True
            imageprocessing.merge_PDF_viewer(output_pdf,ocr)
            self.pushButton_Scan.setEnabled(True)
        elif status[0] == 5:
            ocr = False
            output_pdf = status[1].split("error: ", 1)[1]
            #print output_pdf
            output_pdf = output_pdf.split(']', 1)[0]+"]"
            #print output_pdf 
            for char in output_pdf:
                #print char
                if char in "[']":
                    output_pdf = output_pdf.replace(char,'')
            output_pdf = output_pdf.split(',')
            #print output_pdf
            #print type(output_pdf)
            ocr = False
            for p in output_pdf:
                if self.searchablePDF.isChecked() == True:
                    ocr = True
                imageprocessing.merge_PDF_viewer(p,ocr)
                self.pushButton_Scan.setEnabled(True)
        elif status[0] == 6:
            self.failureMessage(convert_error_message)
        elif status[0] == 7:
            self.warningMessage(multipick_error_message)
        self.pushButton_Scan.setEnabled(True)
        #if status != 0:
            #print("Cmd %s failed with status %d",cmd,status)
        #sys.exit(app.exec_())


    def msgbtn(self):
        pass

    def failureMessage(self,message):
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setText(message)
        msg.setStandardButtons(QMessageBox.Ok)
        msg.buttonClicked.connect(self.msgbtn)
        retval = msg.exec_()
    def warningMessage(self,message):
        msg = QMessageBox()
        msg.setIcon(QMessageBox.Information)
        msg.setText(message)
        msg.setStandardButtons(QMessageBox.Ok)
        msg.buttonClicked.connect(self.msgbtn)
        retval = msg.exec_()

    def comboBox_TypeIndexChanged(self):
        self.file_type = str(self.comboBox_Type.currentText()).lower()
        #print self.file_type

    def comboBox_SourceChanged(self,device):
        supported_PageSizes =[]
        for x in PAGE_SIZES:
            if PAGE_SIZES[x][0]<=self.devicelist[self.device_uri][1] and PAGE_SIZES[x][1]<=self.devicelist[self.device_uri][2]:
                supported_PageSizes.append(x)
        self.comboBox_Papersize.clear()
        self.comboBox_Papersize.addItems(supported_PageSizes)
        self.comboBox_Papersize.currentIndexChanged.connect(self.comboBox_PaperSizeIndexChanged)

        
        if device != '5000' and device != '7500' and device != '9120' and device != '3600' and device != '4600' and device != '2600' and device != '6600' and device != '8500' and device != '3500' and device != '4500' and device != '3000' and device != '7000' and device != '2000' and device != '2500' and device != '4000':
            self.multi_pick_pri = False
        else:
            self.comboBox_Flatbed.clear()
            self.comboBox_Flatbed.addItem("")
            self.comboBox_Flatbed.addItem("")
            self.comboBox_Flatbed.addItem("")
            if device == '5000' or device == '3000' or device == '7000' or device == '2000' or device == '4000':
                if device == '2000':
                    self.multi_pick_pri = False
                    self.multi_pick.setEnabled(False)
                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Duplex", None))
                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
                self.comboBox_Flatbed.setCurrentIndex(1)
            elif device == '7500' or device == '9120' or device == '3600' or device == '4600' or device == '2600' or device == '6600' or device == '8500' or device == '3500' or device == '4500' or device == '2500':
                if device == '2500':
                    self.multi_pick_pri = False
                    self.multi_pick.setEnabled(False)
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
                self.comboBox_Flatbed.setItemText(3, _translate("HpScan", "ADF-Backside", None))
                self.comboBox_Flatbed.setCurrentIndex(1)
            if device == '5000' or device == '7500' or device == '9120' or device == '3600' or device == '4600' or device == '2600' or device == '6600' or device == '8500' or device == '3500' or device == '4500' or device == '3000' or device == '7000' or device == '2000' or device == '2500' or device =='4000':
                if device == '2500' or device == '2000' or device == '2600':
                    self.multi_pick_pri = False
                    self.multi_pick.setEnabled(False)
                else:
                    self.multi_pick_pri = True
                    self.multi_pick.setEnabled(True)
                self.source = str(self.comboBox_Flatbed.currentText()).lower()
                self.comboBox_Flatbed.currentIndexChanged.connect(self.comboBox_SourceSelected)
        
    def comboBox_SourceSelected(self):
        self.source = str(self.comboBox_Flatbed.currentText()).lower()
        if self.source == 'flatbed':
            self.source = ''
        #print self.source

    def comboBox_ColorIndexChanged(self):
        self.color = str(self.comboBox_Color.currentText()).lower()
        #print self.color

    def comboBox_ResIndexChanged(self):
        self.resolution = str(self.comboBox_Resolution.currentText()).lower()
        #print self.resolution

    def comboBox_PaperSizeIndexChanged(self):
        self.size = str(self.comboBox_Papersize.currentText())
        #print self.size

    def batch_Seperation(self):
        if self.batch_seperation.isChecked() == True:
            self.comboBox_Flatbed.clear()
            self.comboBox_Flatbed.addItem("")
            self.comboBox_Flatbed.addItem("")
            self.comboBox_Flatbed.addItem("")
            self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Duplex", None))
            self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
            self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
            self.comboBox_Flatbed.setCurrentIndex(1)
            pyPlatform = platform.python_version()
            num = pyPlatform.split('.')
            if num[0] >= '3':
                self.bp_barcode.setChecked(False)
                self.bp_barcode.setEnabled(False)
                self.CheckEnable()
                self.bp_blankpage.setEnabled(True)
                self.bp_blankpage.stateChanged.connect(self.bp_Blankpage)
            else:
                self.CheckEnable()	    
                self.bp_blankpage.setEnabled(True)
                if self.batchsepBC_pri == True: 
                    self.bp_barcode.setEnabled(True)
                #self.blank_page.setChecked(False)    
                #self.blank_page.setText(_translate("HpScan", "Blank page seperation removal ", None))
                #if pyPlatform < '3':
                self.bp_barcode.stateChanged.connect(self.bp_Barcode)
                self.bp_blankpage.stateChanged.connect(self.bp_Blankpage)
        else:
            if (re.search(r'_7500', self.device_uri)) or (re.search(r'_N9120', self.device_uri,re.I)) or (re.search(r'_3600_f1', self.device_uri,re.I)) or (re.search(r'_n4600', self.device_uri,re.I)) or (re.search(r'_2600_f1', self.device_uri,re.I)) or (re.search(r'_n6600', self.device_uri,re.I)) 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)):
                self.comboBox_Flatbed.clear()
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
                self.comboBox_Flatbed.setItemText(3, _translate("HpScan", "ADF-Backside", None))
                self.comboBox_Flatbed.setCurrentIndex(1)
            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)):
                self.comboBox_Flatbed.clear()
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "ADF", None))
                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "Duplex", None))
                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
                self.comboBox_Flatbed.setCurrentIndex(0)
            #if pyPlatform < 3:
            self.CheckEnable()
            self.bp_blankpage.setChecked(False)
            self.bp_barcode.setChecked(False)
            self.bp_blankpage.setEnabled(False)
            self.bp_barcode.setEnabled(False)
            #self.blank_page.setChecked(False)
            #self.blank_page.setEnabled(True)    
            #self.blank_page.setText(_translate("HpScan", "Delete blank page ", None))

    def bp_Barcode(self):
        pyPlaform = platform.python_version()
        num = pyPlatform.split('.')
        if num[0] >= '3':
            self.bp_barcode.setEnabled(False)
            self.comboBox_Barcode_Type.setEnabled(False)
        else:
            if self.bp_barcode.isChecked() == True:	    
                self.comboBox_Barcode_Type.setEnabled(True)
                self.bp_blankpage.setEnabled(False)
            else:
                self.comboBox_Barcode_Type.setEnabled(False)
                self.bp_blankpage.setEnabled(True)

    def bp_Blankpage(self):
        if self.bp_blankpage.isChecked() == True:
            if self.blank_page_pri == True:
                self.blank_page.setEnabled(True)
            self.bp_barcode.setEnabled(False)
            self.blank_page.setChecked(False)    
            self.blank_page.setText(_translate("HpScan", "Blank page seperation removal ", None))
        else:
            if self.blank_page_pri == True:
                self.blank_page.setEnabled(True) 
            pyPlatform = platform.python_version()
            num = pyPlatform.split('.')
            if num[0] >= '3':
                self.bp_barcode.setEnabled(False)
            else:
                if self.batchsepBC_pri == True:
                    self.bp_barcode.setEnabled(True)
            self.blank_page.setChecked(False)
            #self.blank_page.setEnabled(True)    
            self.blank_page.setText(_translate("HpScan", "Delete blank page ", None))

    def Multi_pick(self):
        if self.multi_pick.isChecked() == True:
            self.comboBox_Flatbed.clear()
            self.comboBox_Flatbed.addItem("")
            self.comboBox_Flatbed.addItem("")
            self.comboBox_Flatbed.addItem("")
            self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Duplex", None))
            self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
            self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
            self.comboBox_Flatbed.setCurrentIndex(1)
            if self.multi_pick_pri == True:	    
                self.multi_pick.setEnabled(True)
            self.CheckEnable()
        else:
            if (re.search(r'_7500', self.device_uri)) or (re.search(r'_N9120', self.device_uri,re.I)) or (re.search(r'_3600_f1', self.device_uri,re.I)) or (re.search(r'_n4600', self.device_uri,re.I)) or (re.search(r'_2600_f1', self.device_uri,re.I)) or (re.search(r'_n6600', self.device_uri,re.I)) 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)):
                self.comboBox_Flatbed.clear()
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
                self.comboBox_Flatbed.setItemText(3, _translate("HpScan", "ADF-Backside", None))
                self.comboBox_Flatbed.setCurrentIndex(1)
            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)):
                self.comboBox_Flatbed.clear()
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "ADF", None))
                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "Duplex", None))
                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
                self.comboBox_Flatbed.setCurrentIndex(0)
            self.CheckEnable()
    
    def Auto_orient(self):
        if self.auto_orient.isChecked() == True:
            if self.auto_orient_pri == True:	    
                self.auto_orient.setEnabled(True)
            self.CheckEnable()
        else:
            self.CheckEnable()

    def CheckEnable(self):
        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:
            #self.crushed.setChecked(False)
            self.mixed_feed.setChecked(False)
            self.document_merge.setChecked(False)
            #self.bg_color_removal.setChecked(False)
            #self.punchhole_removal.setChecked(False)
            #self.color_dropout.setChecked(False)
            #if self.crushed_pri == True:
                #self.crushed.setEnabled(True)
            if self.mixed_feed_pri == True:
                self.mixed_feed.setEnabled(True)
            if self.document_merge_pri == True:
                self.document_merge.setEnabled(True)
            #if self.bg_color_removal_pri == True:
                #self.bg_color_removal.setEnabled(True)
            #if self.punchhole_removal_pri == True:
                #self.punchhole_removal.setEnabled(True)
            #if self.color_dropout_pri == True:
                #self.color_dropout.setEnabled(True)
        else:
            #self.crushed.setChecked(False)
            self.mixed_feed.setChecked(False)
            self.document_merge.setChecked(False)
            #self.bg_color_removal.setChecked(False)
            #self.punchhole_removal.setChecked(False)
            #self.color_dropout.setChecked(False)
            #self.crushed.setEnabled(False)
            self.mixed_feed.setEnabled(False)
            self.document_merge.setEnabled(False)
            #self.bg_color_removal.setEnabled(False)
            #self.punchhole_removal.setEnabled(False)
            #self.color_dropout.setEnabled(False)

    def DisableAllScanjet(self):
        self.auto_orient.setChecked(False)
        self.auto_crop.setChecked(False)
        self.image_enhancement.setChecked(False)
        self.document_merge_adf_flatbed.setChecked(False)
        self.multi_pick.setChecked(False)
        self.batch_seperation.setChecked(False)
        self.deskew_image.setChecked(False)
        self.blank_page.setChecked(False)
        self.crushed.setChecked(False)
        self.bg_color_removal.setChecked(False)
        self.punchhole_removal.setChecked(False)
        self.color_dropout.setChecked(False)
        self.mixed_feed.setChecked(False)
        self.document_merge.setChecked(False)
        self.searchablePDF.setChecked(False)
        self.auto_orient.setEnabled(False)
        self.auto_crop.setEnabled(False)
        self.image_enhancement.setEnabled(False)
        self.document_merge_adf_flatbed.setEnabled(False)
        self.multi_pick.setEnabled(False)
        self.batch_seperation.setEnabled(False)
        self.deskew_image.setEnabled(False)
        self.blank_page.setEnabled(False)
        self.crushed.setEnabled(False)
        self.bg_color_removal.setEnabled(False)
        self.punchhole_removal.setEnabled(False)
        self.color_dropout.setEnabled(False)
        self.mixed_feed.setEnabled(False)
        self.document_merge.setEnabled(False)
        self.searchablePDF.setEnabled(False)      
            
    def DisableAll(self):
        if self.mixed_feed.isChecked() == True or self.document_merge.isChecked() == True:
            self.auto_orient.setChecked(False)
            self.auto_crop.setChecked(False)
            self.image_enhancement.setChecked(False)
            self.document_merge_adf_flatbed.setChecked(False)
            self.multi_pick.setChecked(False)
            self.batch_seperation.setChecked(False)
            self.deskew_image.setChecked(False)
            self.blank_page.setChecked(False)
            self.searchablePDF.setChecked(False)
            self.crushed.setChecked(False)
            self.bg_color_removal.setChecked(False)
            self.punchhole_removal.setChecked(False)
            self.color_dropout.setChecked(False)
            self.auto_orient.setEnabled(False)
            self.auto_crop.setEnabled(False)
            self.image_enhancement.setEnabled(False)
            self.document_merge_adf_flatbed.setEnabled(False)
            self.multi_pick.setEnabled(False)
            self.batch_seperation.setEnabled(False)
            self.deskew_image.setEnabled(False)
            self.blank_page.setEnabled(False)
            self.searchablePDF.setEnabled(False)
            self.crushed.setEnabled(False)
            self.bg_color_removal.setEnabled(False)
            self.punchhole_removal.setEnabled(False)
            self.color_dropout.setEnabled(False)
        else:
            self.auto_orient.setChecked(False)
            self.auto_crop.setChecked(False)
            self.image_enhancement.setChecked(False)
            self.document_merge_adf_flatbed.setChecked(False)
            self.multi_pick.setChecked(False)
            self.batch_seperation.setChecked(False)
            self.deskew_image.setChecked(False)
            self.blank_page.setChecked(False)
            self.searchablePDF.setChecked(False)
            self.crushed.setChecked(False)
            self.bg_color_removal.setChecked(False)
            self.punchhole_removal.setChecked(False)
            self.color_dropout.setChecked(False)
            if self.auto_orient_pri == True:
                self.auto_orient.setEnabled(True)
            if self.searchablePDF_pri == True:
                self.searchablePDF.setEnabled(True)
            if self.auto_crop_pri == True:
                #print ("auto_crop_pri is still true")
                self.auto_crop.setEnabled(True)
            if self.image_enhancement_pri == True:
                self.image_enhancement.setEnabled(True)
            if self.document_merge_adf_flatbed_pri == True:
                self.document_merge_adf_flatbed.setEnabled(True)
            if self.multi_pick_pri == True:
                self.multi_pick.setEnabled(True)
            #if self.batch_seperation_pri == True:
            self.batch_seperation.setEnabled(True)
            if self.deskew_image_pri == True:
                self.deskew_image.setEnabled(True)
            if self.blank_page_pri == True:
                self.blank_page.setEnabled(True)
            if self.bg_color_removal_pri == True:
                self.bg_color_removal.setEnabled(True)
            if self.punchhole_removal_pri == True:
                self.punchhole_removal.setEnabled(True)
            if self.color_dropout_pri == True:
                self.color_dropout.setEnabled(True)
            if self.crushed_pri == True:
                self.crushed.setEnabled(True)
            
    def Crushed(self):
        if self.crushed.isChecked() == True:
            if self.crushed_pri == True:	    
                self.crushed.setEnabled(True)
            self.CheckEnable()
            #self.comboBox_Color.setCurrentIndex(1)
            #self.comboBox_Color.setEnabled(False)
            '''self.DisableAll()
            self.mixed_feed.setChecked(False)
            self.document_merge.setChecked(False)
            self.mixed_feed.setEnabled(False)
            self.document_merge.setEnabled(False)
            self.bg_color_removal.setChecked(False)
            self.bg_color_removal.setEnabled(False)
            self.punchhole_removal.setChecked(False)
            self.punchhole_removal.setEnabled(False)
            self.color_dropout.setChecked(False)
            self.color_dropout.setEnabled(False)'''
        else:
            self.CheckEnable()
            #self.comboBox_Color.setEnabled(True)
            '''self.DisableAll()
            self.mixed_feed.setChecked(False)
            self.document_merge.setChecked(False)
            self.bg_color_removal.setChecked(False)
            self.punchhole_removal.setChecked(False)
            self.color_dropout.setChecked(False)
            if self.mixed_feed_pri == True:
                self.mixed_feed.setEnabled(True)
            if self.document_merge_pri == True:
                self.document_merge.setEnabled(True)
            if self.bg_color_removal_pri == True:
                self.bg_color_removal.setEnabled(True)
            if self.punchhole_removal_pri == True:
                self.punchhole_removal.setEnabled(True)
            if self.color_dropout_pri == True:
                self.color_dropout.setEnabled(True)'''
            

    def SearchablePDF(self):
        if self.searchablePDF.isChecked() == True:
            self.searchablePDF.setEnabled(True)
            self.comboBox_Type.setCurrentIndex(2)
            self.comboBox_Type.setEnabled(False)
            if self.searchablePDF_pri == True:
                self.searchablePDF.setEnabled(True)
            self.CheckEnable()
        else:
            self.comboBox_Type.setEnabled(True) 
            self.CheckEnable()           


    def Auto_crop(self):
        if self.auto_crop.isChecked() == True:
            if self.auto_crop_pri == True:
                self.auto_crop.setEnabled(True)
            self.CheckEnable()
        else:
            self.CheckEnable()
            
    def Deskew_image(self):
        if self.deskew_image.isChecked() == True:
            if self.deskew_image_pri == True:
                self.deskew_image.setEnabled(True)
            self.CheckEnable()
        else:
            self.CheckEnable()
            
    def Blank_page(self):
        if self.blank_page.isChecked() == True:
            if self.blank_page_pri == True:
                self.blank_page.setEnabled(True)
            self.CheckEnable()
        else:
            self.CheckEnable()

    def Mixed_feed(self):
        if self.mixed_feed.isChecked() == True:
            self.comboBox_Flatbed.clear()
            self.comboBox_Flatbed.addItem("")
            self.comboBox_Flatbed.addItem("")
            self.comboBox_Flatbed.addItem("")
            self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Duplex", None))
            self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
            self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
            self.comboBox_Flatbed.setCurrentIndex(1)
            if self.mixed_feed_pri == True:
                self.mixed_feed.setEnabled(True)
            self.DisableAll()
            self.document_merge.setChecked(False)
            self.crushed.setChecked(False)
            self.document_merge.setEnabled(False)
            self.crushed.setEnabled(False)
            self.comboBox_Papersize.setEnabled(False)
            self.bg_color_removal.setChecked(False)
            self.bg_color_removal.setEnabled(False)
            self.punchhole_removal.setChecked(False)
            self.punchhole_removal.setEnabled(False)
            self.color_dropout.setChecked(False)
            self.color_dropout.setEnabled(False)
        else:
            if (re.search(r'_7500', self.device_uri)) or (re.search(r'_N9120', self.device_uri,re.I)) or (re.search(r'_3600_f1', self.device_uri,re.I)) or (re.search(r'_n4600', self.device_uri,re.I)) or (re.search(r'_2600_f1', self.device_uri,re.I)) or (re.search(r'_n6600', self.device_uri,re.I)) 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)):
                self.comboBox_Flatbed.clear()
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
                self.comboBox_Flatbed.setItemText(3, _translate("HpScan", "ADF-Backside", None))
                self.comboBox_Flatbed.setCurrentIndex(1)
            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)):
                self.comboBox_Flatbed.clear()
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "ADF", None))
                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "Duplex", None))
                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
                self.comboBox_Flatbed.setCurrentIndex(0)
            self.document_merge.setChecked(False)
            self.DisableAll()
            self.crushed.setChecked(False)
            self.bg_color_removal.setChecked(False)
            self.punchhole_removal.setChecked(False)
            self.color_dropout.setChecked(False)
            if self.document_merge_pri == True:
                self.document_merge.setEnabled(True)
            if self.crushed_pri == True:
                self.crushed.setEnabled(True)
            if self.mixed_feed_pri == True:
                self.mixed_feed.setEnabled(True)
            self.comboBox_Papersize.setEnabled(True)
            if self.bg_color_removal_pri == True:
                self.bg_color_removal.setEnabled(True)
            if self.punchhole_removal_pri == True:
                self.punchhole_removal.setEnabled(True)
            if self.color_dropout_pri == True:
                self.color_dropout.setEnabled(True)

    def Bg_color_removal(self):
        if self.bg_color_removal.isChecked() == True:
            if self.bg_color_removal_pri == True:
                self.bg_color_removal.setEnabled(True)
            self.CheckEnable()
            '''self.document_merge.setChecked(False)
            self.crushed.setChecked(False)
            self.document_merge.setEnabled(False)
            self.crushed.setEnabled(False)
            self.mixed_feed.setChecked(False)
            self.mixed_feed.setEnabled(False)
            self.punchhole_removal.setChecked(False)
            self.punchhole_removal.setEnabled(False)
            self.color_dropout.setChecked(False)
            self.color_dropout.setEnabled(False)
            #self.comboBox_Papersize.setEnabled(False)'''
        else:
            self.CheckEnable()		
            '''self.document_merge.setChecked(False)
            self.DisableAll()
            self.crushed.setChecked(False)            
            if self.document_merge_pri == True:
                self.document_merge.setEnabled(True)
            if self.crushed_pri == True:
                self.crushed.setEnabled(True)
            if self.mixed_feed_pri == True:
                self.mixed_feed.setEnabled(True)
            if self.bg_color_removal_pri == True:
                self.bg_color_removal.setEnabled(True)
            if self.punchhole_removal_pri == True:
                self.punchhole_removal.setEnabled(True)
            if self.color_dropout_pri == True:
                self.color_dropout.setEnabled(True)
            #self.comboBox_Papersize.setEnabled(True)'''

    def Punchhole_removal(self):
        if self.punchhole_removal.isChecked() == True:
            if self.punchhole_removal_pri == True:
                self.punchhole_removal.setEnabled(True)
            self.CheckEnable()
            '''self.DisableAll()
            self.document_merge.setChecked(False)
            self.crushed.setChecked(False)
            self.document_merge.setEnabled(False)
            self.crushed.setEnabled(False)
            self.mixed_feed.setChecked(False)
            self.mixed_feed.setEnabled(False)
            self.bg_color_removal.setChecked(False)
            self.bg_color_removal.setEnabled(False)
            self.color_dropout.setChecked(False)
            self.color_dropout.setEnabled(False)
            #self.comboBox_Papersize.setEnabled(False)'''
        else:
            self.CheckEnable()
            '''self.document_merge.setChecked(False)
            self.DisableAll()
            self.crushed.setChecked(False)            
            if self.document_merge_pri == True:
                self.document_merge.setEnabled(True)
            if self.crushed_pri == True:
                self.crushed.setEnabled(True)
            if self.mixed_feed_pri == True:
                self.mixed_feed.setEnabled(True)
            if self.punchhole_removal_pri == True:
                self.punchhole_removal.setEnabled(True)
            if self.color_dropout_pri == True:
                self.color_dropout.setEnabled(True)
            if self.bg_color_removal_pri == True:
                self.bg_color_removal.setEnabled(True)
            #self.comboBox_Papersize.setEnabled(True)'''

    def Color_dropout(self):
        if self.color_dropout.isChecked() == True:
            if self.color_dropout_pri == True:
                self.color_dropout.setEnabled(True)
            '''self.DisableAll()
            self.document_merge.setChecked(False)
            self.crushed.setChecked(False)
            self.document_merge.setEnabled(False)
            self.crushed.setEnabled(False)
            self.mixed_feed.setChecked(False)
            self.mixed_feed.setEnabled(False)
            self.bg_color_removal.setChecked(False)
            self.bg_color_removal.setEnabled(False)
            self.punchhole_removal.setChecked(False)
            self.punchhole_removal.setEnabled(False)'''
            color = QColorDialog.getColor()
            self.s5.setEnabled(True)
            RGBVALUE = list(color.getRgb())
            self.dropout_color_red_value = str(RGBVALUE[0])
            self.dropout_color_green_value = str(RGBVALUE[1])
            self.dropout_color_blue_value = str(RGBVALUE[2])
            #print (RGBVALUE)
            #self.comboBox_Papersize.setEnabled(False)
        else:
            #self.document_merge.setChecked(False)
            #self.DisableAll()
            #self.crushed.setChecked(False)
            self.CheckEnable() 
            self.s5.setEnabled(False)           
            '''if self.document_merge_pri == True:
                self.document_merge.setEnabled(True)
            if self.crushed_pri == True:
                self.crushed.setEnabled(True)
            if self.mixed_feed_pri == True:
                self.mixed_feed.setEnabled(True)
            if self.punchhole_removal_pri == True:
                self.punchhole_removal.setEnabled(True)
            if self.color_dropout_pri == True:
                self.color_dropout.setEnabled(True)
            if self.bg_color_removal_pri == True:
                self.bg_color_removal.setEnabled(True)
            #self.comboBox_Papersize.setEnabled(True)'''
    def Edge_erase(self):
        if self.edge_erase.isChecked() == True:
            self.edge_erase.setEnabled(True)
            self.edge_erase_spin_box.setEnabled(True)
            self.edge_erase_bool = True
        else:
            self.edge_erase_spin_box.setEnabled(False)
    def Document_merge(self):
        if self.document_merge.isChecked() == True:
            if self.document_merge_pri == True:
                self.document_merge.setEnabled(True)
            self.DisableAll()
            self.mixed_feed.setChecked(False)
            self.crushed.setChecked(False)
            self.mixed_feed.setEnabled(False)
            self.crushed.setEnabled(False)
            self.bg_color_removal.setChecked(False)
            self.bg_color_removal.setEnabled(False)
            self.punchhole_removal.setChecked(False)
            self.punchhole_removal.setEnabled(False)
            self.color_dropout.setChecked(False)
            self.color_dropout.setEnabled(False)
            #name = re.search(r'_5000_', self.device_uri)
            #if name:
            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):
                self.comboBox_Flatbed.clear()
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "ADF", None))
                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "Duplex", None))
                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
                self.comboBox_Flatbed.setCurrentIndex(1)
            elif (re.search(r'_7500', self.device_uri)) or (re.search(r'_N9120', self.device_uri,re.I)) or (re.search(r'_3600_f1', self.device_uri,re.I)) or (re.search(r'_n4600', self.device_uri,re.I)) or (re.search(r'_2600_f1', self.device_uri,re.I)) or (re.search(r'_n6600', self.device_uri,re.I)) 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)):
                self.comboBox_Flatbed.clear()
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
                self.comboBox_Flatbed.setItemText(3, _translate("HpScan", "ADF-Backside", None))
                self.comboBox_Flatbed.setCurrentIndex(2)
            self.comboBox_Flatbed.setEnabled(False)
            self.source = str(self.comboBox_Flatbed.currentText()).lower()
        else:
            self.DisableAll()
            self.mixed_feed.setChecked(False)
            self.crushed.setChecked(False)
            self.bg_color_removal.setChecked(False)
            self.punchhole_removal.setChecked(False)
            self.color_dropout.setChecked(False)
            if self.mixed_feed_pri == True:
                self.mixed_feed.setEnabled(True)
            if self.crushed_pri == True:
                self.crushed.setEnabled(True)
            if self.bg_color_removal_pri == True:
                self.bg_color_removal.setEnabled(True)
            if self.punchhole_removal_pri == True:
                self.punchhole_removal.setEnabled(True)
            if self.color_dropout_pri == True:
                self.color_dropout.setEnabled(True)
            self.comboBox_Flatbed.setEnabled(True)
            if (re.search(r'_7500', self.device_uri)) or (re.search(r'_N9120', self.device_uri,re.I)) or (re.search(r'_3600_f1', self.device_uri,re.I)) or (re.search(r'_n4600', self.device_uri,re.I)) or (re.search(r'_2600_f1', self.device_uri,re.I)) or (re.search(r'_n6600', self.device_uri,re.I)) 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)):
                self.comboBox_Flatbed.clear()
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
                self.comboBox_Flatbed.setItemText(3, _translate("HpScan", "ADF-Backside", None))
                self.comboBox_Flatbed.setCurrentIndex(1)
            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)):
                self.comboBox_Flatbed.clear()
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.addItem("")
                self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "ADF", None))
                self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "Duplex", None))
                self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "ADF-Backside", None))
                self.comboBox_Flatbed.setCurrentIndex(0)
            self.source = str(self.comboBox_Flatbed.currentText()).lower()

    def Document_merge_adf_flatbed(self):
        if self.document_merge_adf_flatbed.isChecked() == True:
            self.CheckEnable()
            if self.document_merge_adf_flatbed_pri == True:
                self.document_merge_adf_flatbed.setEnabled(True)
            self.comboBox_Type.setCurrentIndex(2)
            self.comboBox_Type.setEnabled(False)
            self.check_flatbed_present()
            self.comboBox_Device_URI.currentTextChanged.connect(lambda: self.check_flatbed_present())
            
        else:
            self.CheckEnable()
            self.pushButton_Merge.setEnabled(False)
            self.comboBox_Type.setCurrentIndex(0)
            self.comboBox_Type.setEnabled(True)
 
    def check_flatbed_present(self):
        #only enable adf flatbed merge button if device has flatbed
        if self.comboBox_Flatbed.count() == 4:
            self.pushButton_Merge.setEnabled(True)
        else:
            self.pushButton_Merge.setEnabled(False)
            
    def Image_enhancement(self):
        if self.image_enhancement.isChecked() == True:
            self.CheckEnable()
            if self.image_enhancement_pri == True:
                self.image_enhancement.setEnabled(True)
            self.s1.setEnabled(True)
            self.s2.setEnabled(True)
            self.s3.setEnabled(True)
            self.s4.setEnabled(True)
        else:
            #self.image_enhancement.setEnabled(False)
            self.CheckEnable()	 
            self.s1.setEnabled(False)
            self.s2.setEnabled(False)
            self.s3.setEnabled(False)
            self.s4.setEnabled(False)

    def mergeButton_clicked(self):
        try:
            from PyPDF2 import PdfFileMerger, PdfFileReader
            merger = PdfFileMerger()
        except:
            from PyPDF2 import PdfMerger as PdfFileMerger
            from PyPDF2 import PdfReader as PdfFileReader
            merger = PdfFileMerger()
        path1 = str(path)
        #print path1
        output_pdf = utils.createSequencedFilename("Merged", ".pdf",path1)
        files = [ f for f in os.listdir(path1)  if f.startswith('hpscanMerge') and f.endswith('.pdf')]
        if((len(files)) != 0):
            files.sort()  
            merger = PdfFileMerger()
            os.chdir(path1)
            #print os.getcwd()
            for x in files:
                merger.append(PdfFileReader(x), 'hpscan')
            for p in files:
                os.remove(p)

            merger.write(output_pdf)
            ocr = False
            if self.searchablePDF.isChecked() == True:
                ocr = True
            imageprocessing.merge_PDF_viewer(output_pdf,ocr)
            '''pdf_viewer = ''
            pdf_viewer_list = ['kpdf', 'acroread', 'xpdf', 'evince',]
            for v in pdf_viewer_list:
                vv = utils.which(v)
                if vv:
                    pdf_viewer = os.path.join(vv, v)
                    break
            #cmd = "%s %s &" % (pdf_viewer, output_pdf)
            cmd = pdf_viewer + "  " + output_pdf + " " + "&"
            print cmd               
            os_utils.execute(cmd)
            #sys.exit(0)'''
        else:
            self.warningMessage(no_pages_to_merge)
             
    def change_source(self):
        #device_name = re.search(r'_5000_', self.device_uri)
        #if device_name:
        if re.search(r'_5000_', self.device_uri):
            self.device_name = '5000'
        elif re.search(r'_7500', self.device_uri):
            self.device_name = '7500'
        elif re.search(r'hp2000S1', self.device_uri):
            self.device_name = '2000'
        elif re.search(r'hpgt2500', self.device_uri):
            self.device_name = '2500'
        elif re.search(r'_N9120', self.device_uri,re.I):
            self.device_name = '9120'
        elif re.search(r'_3600_f1', self.device_uri,re.I):
            self.device_name = '3600'
        elif re.search(r'_n4600', self.device_uri,re.I):
            self.device_name = '4600'
        elif re.search(r'_2600_f1', self.device_uri,re.I):
            self.device_name = '2600'
        elif re.search(r'_n6600', self.device_uri,re.I):
            self.device_name = '6600'                                                
        elif re.search(r'_8500fn2', self.device_uri):
            self.device_name = '8500'
        elif re.search(r'_3500_f1', self.device_uri):
            self.device_name = '3500'
        elif re.search(r'_4500_fn1', self.device_uri):
            self.device_name = '4500'
        elif re.search(r'_7000_s3', self.device_uri):
            self.device_name = '7000'
        elif re.search(r'_3000_s3', self.device_uri):
            self.device_name = '3000'
        elif re.search(r'_2000_s2', self.device_uri):
            self.device_name = '2000'
        elif re.search(r'7000_snw1', self.device_uri):
            self.device_name = '7000'
        elif re.search(r'4000_snw1', self.device_uri):
            self.device_name = '4000'
        elif re.search(r'_3000_s4', self.device_uri):
            self.device_name = '3000'
        elif re.search(r'_5000_s5', self.device_uri):
            self.device_name = '5000'
        #print (self.device_uri)
        if self.device_name == '7500' or self.device_name == '5000' or self.device_name == '9120' or self.device_name == '3600' or self.device_name == '4600' or self.device_name == '2600' or self.device_name == '6600' 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':
            self.comboBox_SourceChanged(self.device_name)
        
        
    def comboBox_device_URI(self):
        self.device_uri = str(self.comboBox_Device_URI.currentText())
        self.change_source()
        

    def retranslateUi(self, HpScan):
        HpScan.setWindowTitle(_translate("HpScan", "HP-Scan", None))
        self.label_Type.setText(_translate("HpScan", "    Type", None))
        self.label_Size.setText(_translate("HpScan", "    Size", None))
        self.label_Path.setText(_translate("HpScan", "    Path", None))
        self.label_Device.setText(_translate("HpScan", "    Device", None))
        #self.label_Color.setText(_translate("HpScan", "    Color", None))
        self.label_Brightness.setText(_translate("HpScan", "    Brightness", None))
        self.label_CR.setText(_translate("HpScan", "    Range", None))
        self.label_Contrast.setText(_translate("HpScan", "    Contrast", None))
        self.label_Sharpness.setText(_translate("HpScan", "    Sharpness", None))
        self.label_Color_value.setText(_translate("HpScan", "    Color", None))	
        self.comboBox_Type.setItemText(0, _translate("HpScan", "PNG", None))
        self.comboBox_Type.setItemText(1, _translate("HpScan", "JPG", None))
        self.comboBox_Type.setItemText(2, _translate("HpScan", "PDF", None))
        self.comboBox_Type.setItemText(3, _translate("HpScan", "TIFF", None))
        self.comboBox_Type.setItemText(4, _translate("HpScan", "BMP", None))
        '''self.comboBox_Flatbed.setItemText(0, _translate("HpScan", "Flatbed", None))
        self.comboBox_Flatbed.setItemText(1, _translate("HpScan", "ADF", None))
        self.comboBox_Flatbed.setItemText(2, _translate("HpScan", "Duplex", None))
        self.comboBox_Flatbed.setCurrentIndex(1)'''
        #self.comboBox_Color.setItemText(0, _translate("HpScan", "Lineart", None))
        self.comboBox_Color.setItemText(0, _translate("HpScan", "Gray", None))
        self.comboBox_Color.setItemText(1, _translate("HpScan", "Color", None))
        self.comboBox_Color.setCurrentIndex(0)
        self.comboBox_Resolution.setItemText(0, _translate("HpScan", "75", None))
        self.comboBox_Resolution.setItemText(1, _translate("HpScan", "100", None))
        self.comboBox_Resolution.setItemText(2, _translate("HpScan", "200", None))
        self.comboBox_Resolution.setItemText(3, _translate("HpScan", "300", None))
        self.comboBox_Resolution.setItemText(4, _translate("HpScan", "600", None))
        self.comboBox_Resolution.setCurrentIndex(3)
        #self.comboBox_Papersize.setItemText(0, _translate("HpScan", "5x7", None))
        #self.comboBox_Papersize.setItemText(1, _translate("HpScan", "4x6", None))
        #self.comboBox_Papersize.setItemText(2, _translate("HpScan", "3x5", None))
        #self.comboBox_Papersize.setItemText(3, _translate("HpScan", "a2_env", None))
        #self.comboBox_Papersize.setItemText(4, _translate("HpScan", "a3", None))
        #self.comboBox_Papersize.setItemText(0, _translate("HpScan", "a4", None))
        #self.comboBox_Papersize.setItemText(1, _translate("HpScan", "a5", None))
        #self.comboBox_Papersize.setItemText(7, _translate("HpScan", "a6", None))
        #self.comboBox_Papersize.setItemText(8, _translate("HpScan", "b4", None))
        #self.comboBox_Papersize.setItemText(2, _translate("HpScan", "b5", None))
        #self.comboBox_Papersize.setItemText(10, _translate("HpScan", "c6_env", None))
        #self.comboBox_Papersize.setItemText(11, _translate("HpScan", "dl_env", None))
        #self.comboBox_Papersize.setItemText(12, _translate("HpScan", "exec", None))
        #self.comboBox_Papersize.setItemText(13, _translate("HpScan", "flsa", None))
        #self.comboBox_Papersize.setItemText(14, _translate("HpScan", "higaki", None))
        #self.comboBox_Papersize.setItemText(15, _translate("HpScan", "japan_env_3", None))
        #self.comboBox_Papersize.setItemText(16, _translate("HpScan", "japan_env_4", None))
        #self.comboBox_Papersize.setItemText(3, _translate("HpScan", "legal", None))
        #self.comboBox_Papersize.setItemText(4, _translate("HpScan", "letter", None))
        #self.comboBox_Papersize.setItemText(19, _translate("HpScan", "no_10_env", None))
        #self.comboBox_Papersize.setItemText(20, _translate("HpScan", "oufufu-hagaki", None))
        #self.comboBox_Papersize.setItemText(21, _translate("HpScan", "photo", None))
        #self.comboBox_Papersize.setItemText(22, _translate("HpScan", "super_b", None))
        #self.comboBox_Papersize.setItemText(23, _translate("HpScan", "b6", None))
        #self.comboBox_Papersize.setCurrentIndex(4)        
        self.pushButton_Scan.setText(_translate("HpScan", "Scan", None))
        
        self.pushButton_Change.setText(_translate("HpScan", "Change Path", None))
        self.pushButton_Merge.setText(_translate("HpScan", "Merge", None))
        self.auto_orient.setText(_translate("HpScan", "Auto Orient ", None))
        self.crushed.setText(_translate("HpScan", "Background noise Removal ", None))
        self.searchablePDF.setText(_translate("HpScan", "Searchable PDF ", None))
        self.punchhole_removal.setText(_translate("HpScan", "Punch Hole Removal ", None))
        self.color_dropout.setText(_translate("HpScan", "Color Removal/Dropout ", None))
        self.edge_erase.setText(_translate("HpScan", "Edge Erase", None))
        self.bg_color_removal.setText(_translate("HpScan", "Background Color Removal", None))
        self.auto_crop.setText(_translate("HpScan", "Crop to content on page ", None))
        self.deskew_image.setText(_translate("HpScan", "Straighten page content ", None))
        self.multi_pick.setText(_translate("HpScan", "Misfeed(multipick) detection", None))
        self.blank_page.setText(_translate("HpScan", "Delete blank pages ", None))
        self.batch_seperation.setText(_translate("HpScan", "Separate the document", None))
        self.bp_blankpage.setText(_translate("HpScan", "Before each blank page", None))
        self.bp_barcode.setText(_translate("HpScan", "Before each page with a barcode", None))
        self.comboBox_Barcode_Type.setItemText(0, _translate("HpScan", "Any format", None))
        self.comboBox_Barcode_Type.setItemText(1, _translate("HpScan", "Code 39,Code 39 full ASCII", None))
        self.comboBox_Barcode_Type.setItemText(2, _translate("HpScan", "EAN 8/13,UPC-a,UPC-E(6-digit)", None))
        self.comboBox_Barcode_Type.setItemText(3, _translate("HpScan", "Code 128,GS1-128(UCC/EAN-128)", None))
        self.comboBox_Barcode_Type.setItemText(4, _translate("HpScan", "Codebar", None))
        self.comboBox_Barcode_Type.setItemText(5, _translate("HpScan", "ITF(2 of 5 interleaved)", None))
        self.comboBox_Barcode_Type.setItemText(6, _translate("HpScan", "PDF 417", None))
        self.comboBox_Barcode_Type.setItemText(7, _translate("HpScan", "Postnet code", None))
        self.document_merge.setText(_translate("HpScan", "Page merge", None))
        self.document_merge_adf_flatbed.setText(_translate("HpScan", "Document merge", None))
        self.image_enhancement.setText(_translate("HpScan", "Image enhancement", None))        
        self.mixed_feed.setText(_translate("HpScan", "Mixed document feed", None))
       
        i = 0
        #print self.devicelist
        for device in self.devicelist:
            if re.search(r'_5000_', device) or re.search(r'_7500', device) or re.search(r'_N9120', device,re.I) or re.search(r'_3600_f1', device,re.I) or re.search(r'_n4600', device,re.I) or re.search(r'_2600_f1', device,re.I) or re.search(r'_n6600', device,re.I) 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):
                self.comboBox_Device_URI.addItem(device)
                self.comboBox_Device_URI.setItemText(i, _translate("HpScan", device, None))
                i += 1
            else:
                self.other_device_cnt += 1
        self.comboBox_path.addItem(path)
        self.comboBox_path.setItemText(0,_translate("HpScan", path, None))    
        
        
        #self.pushButton_Cancel.setText(_translate("HpScan", "Cancel", None))


class SetupDialog():
    #print ("calling ui5 scan.py")
    def setupUi(self):
        #scanjet_flag=''
        #print ("called ui5 scan.py")
        #list1=[]
        import sys
        app = QtWidgets.QApplication(sys.argv)
        #app = QApplication(sys.argv)
        HpScan = QtWidgets.QDockWidget()
        ui = Ui_HpScan()

        devicelist = {}
        #device = ''
        sane.init()
        sane_devices = sane.getDevices()
        
        for device, mfg, mdl, t in sane_devices:
            if re.search(r'_5000_', device) or re.search(r'_7500', device) or re.search(r'_N9120', device,re.I) or re.search(r'_3600_f1', device,re.I) or re.search(r'_n4600', device,re.I) or re.search(r'_2600_f1', device,re.I) or re.search(r'_n6600', device,re.I) 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):
                try:
                    scanDevice = sane.openDevice(device)
                    #source_option = scanDevice.getOptionObj("source").constraint
                    brx = scanDevice.getOptionObj('br-x').limitAndSet(None)
                    bry = scanDevice.getOptionObj('br-y').limitAndSet(None)
                    devicelist[device] = [mdl]
                    #devicelist[device].extend([source_option,int(brx)+1,int(bry)+1])
                    devicelist[device].extend([int(brx)+1,int(bry)+1])
                    scanDevice.closeScan()
                except :
                    pass                    

        sane.deInit()
        #print (devicelist)

        ui.devicelist = devicelist
        #print ui.devicelist

        ui.setupUi(HpScan)

        scanjet_flag=imageprocessing.check_pil()
        if scanjet_flag is not None:
            #ui.DisableAllScanjet()
            ui.auto_orient.setEnabled(False)
            ui.searchablePDF.setEnabled(False)
            ui.auto_crop.setEnabled(False)
            ui.image_enhancement.setEnabled(False)
            ui.document_merge_adf_flatbed.setEnabled(False)
            ui.multi_pick.setEnabled(False)
            #ui.batch_seperation.setEnabled(False)
            ui.deskew_image.setEnabled(False)
            ui.blank_page.setEnabled(False)
            ui.crushed.setEnabled(False)
            ui.bg_color_removal.setEnabled(False)
            ui.punchhole_removal.setEnabled(False)
            ui.color_dropout.setEnabled(False)
            ui.edge_erase.setEnabled(False)
            ui.mixed_feed.setEnabled(False)
            ui.document_merge.setEnabled(False)        

            ui.deskew_image_pri = False
            ui.auto_crop_pri = False
            ui.mixed_feed_pri = False
            ui.auto_orient_pri = False
            ui.searchablePDF_pri = False
            ui.document_merge_adf_flatbed_pri = False
            #ui.multi_pick_pri = False
            #ui.batch_seperation_pri = False
            ui.crushed_pri = False
            ui.bg_color_removal_pri = False
            ui.punchhole_removal_pri = False
            ui.color_dropout_pri = False
            ui.document_merge_pri = False
            ui.image_enhancement_pri = False
            ui.blank_page_pri = False

        scanjet_flag=imageprocessing.check_numpy()
        if scanjet_flag is not None:
            #ui.DisableAllScanjet()
            ui.auto_orient.setEnabled(False)
            #ui.searchablePDF.setEnabled(False)
            ui.auto_crop.setEnabled(False)
            #ui.image_enhancement.setEnabled(False)
            ui.document_merge_adf_flatbed.setEnabled(False)
            ui.multi_pick.setEnabled(False)
            #ui.batch_seperation.setEnabled(False)
            ui.deskew_image.setEnabled(False)
            #ui.blank_page.setEnabled(False)
            ui.crushed.setEnabled(False)
            ui.bg_color_removal.setEnabled(False)
            ui.punchhole_removal.setEnabled(False)
            ui.color_dropout.setEnabled(False)
            ui.mixed_feed.setEnabled(False)
            ui.document_merge.setEnabled(False)   


            ui.blank_page.setEnabled(True)
            #ui.blank_page.setChecked(False)
            ui.image_enhancement.setEnabled(True)
            #ui.image_enhancement.setChecked(False)

            ui.deskew_image_pri = False
            ui.auto_crop_pri = False
            ui.mixed_feed_pri = False
            ui.auto_orient_pri = False
            ui.searchablePDF_pri = False
            ui.document_merge_adf_flatbed_pri = False
            #ui.multi_pick_pri = False
            #ui.batch_seperation_pri = False
            ui.crushed_pri = False
            ui.document_merge_pri = False
            ui.bg_color_removal_pri = False
            ui.punchhole_removal_pri = False
            ui.color_dropout_pri = False

        scanjet_flag=imageprocessing.check_opencv()
        if scanjet_flag is not None:
            ui.deskew_image.setEnabled(False)
            ui.auto_crop.setEnabled(False)
            ui.mixed_feed.setEnabled(False)
            ui.bg_color_removal.setEnabled(False)
            #ui.deskew_image.setChecked(False)
            #ui.auto_crop.setChecked(False)
            #ui.mixed_feed.setChecked(False)
            ui.color_dropout.setEnabled(False)

            
            ui.color_dropout_pri = False
            ui.deskew_image_pri = False
            ui.auto_crop_pri = False
            ui.mixed_feed_pri = False
            ui.bg_color_removal_pri = False

        scanjet_flag=imageprocessing.check_skimage()
        if scanjet_flag is not None:
            ui.punchhole_removal.setEnabled(False)
            ui.punchhole_removal_pri = False

        scanjet_flag=imageprocessing.check_scipy()
        if scanjet_flag is not None:
            ui.deskew_image.setEnabled(False)
            ui.deskew_image_pri = False

        scanjet_flag=imageprocessing.check_tesserocr_imutils()
        if scanjet_flag is not None:
            ui.auto_orient.setEnabled(False)
            #ui.auto_orient.setChecked(False)

            ui.auto_orient_pri = False

        scanjet_flag=imageprocessing.check_pypdfocr()
        if scanjet_flag is not None:
            ui.searchablePDF.setEnabled(False)
            ui.searchablePDF_pri = False

        scanjet_flag=imageprocessing.check_pypdf2()
        if scanjet_flag is not None:
            ui.document_merge.setEnabled(False)
            ui.document_merge_adf_flatbed.setEnabled(False)
            #ui.document_merge.setChecked(False)

            ui.document_merge_pri = False
            ui.document_merge_adf_flatbed_pri = False

        scanjet_flag=imageprocessing.check_zbar()
        #print scanjet_flag
        if scanjet_flag is not None:
            #print "setting barcode to false"
            ui.bp_barcode.setEnabled(False)

            ui.batchsepBC_pri = False

        #list1.append(HpScan)
        #list1.append(app)
        #print HpScan
        '''list_scanjet=imageprocessing.validate_scanjet_support()
        print (list_scanjet)
        if(list_scanjet[2] == 'False'):
            scanjet_error="Scanjet features are not supported and disabled for %s %s. Please upgrade to latest distro version"% (list_scanjet[0],list_scanjet[1])
            ui.failureMessage(scanjet_error)
            ui.DisableAllScanjet()
        source_option = device.getOptionObj("source").constraint
        print (source_option)
        valid_res = device.getOptionObj('resolution').constraint
        print (valid_res)
        available_scan_mode = device.getOptionObj("mode").constraint
        print (available_scan_mode)'''
        #print ui.comboBox_Device_URI.count()
        if ui.comboBox_Device_URI.count() == 0:
            if ui.other_device_cnt > 0:
                scanjet_error="hp-uiscan is not supported for this device"
                ui.failureMessage(scanjet_error)
            else:
                scanjet_error="No device connected"
                ui.failureMessage(scanjet_error)
        else:
            HpScan.show()
            sys.exit(app.exec_())
        #return list1


Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
__init__.py File 786 B 0644
aboutdialog.py File 1.71 KB 0644
aboutdialog_base.py File 8.27 KB 0644
aligndialog.py File 31.94 KB 0644
aligndialog_base.py File 24.45 KB 0644
cleandialog.py File 12.28 KB 0644
cleandialog_base.py File 11.46 KB 0644
colorcaldialog.py File 14.36 KB 0644
colorcaldialog_base.py File 23.27 KB 0644
devicesetupdialog.py File 8.57 KB 0644
devicesetupdialog_base.py File 4.58 KB 0644
deviceuricombobox.py File 5.4 KB 0644
devmgr5.py File 84.28 KB 0644
devmgr5_base.py File 23.31 KB 0644
devmgr_ext.py File 2.51 KB 0644
fabgrouptable.py File 2.26 KB 0644
fabnametable.py File 1.2 KB 0644
fabwindow.py File 23.63 KB 0644
fabwindow_base.py File 8.7 KB 0644
faxsetupdialog.py File 14.9 KB 0644
faxsetupdialog_base.py File 5.65 KB 0644
filetable.py File 15.45 KB 0644
firmwaredialog.py File 3 KB 0644
firmwaredialog_base.py File 3.59 KB 0644
infodialog.py File 10.22 KB 0644
infodialog_base.py File 5.76 KB 0644
linefeedcaldialog.py File 3.52 KB 0644
linefeedcaldialog_base.py File 2.7 KB 0644
loadpapergroupbox.py File 3.3 KB 0644
makecopiesdialog.py File 2.55 KB 0644
makecopiesdialog_base.py File 2.42 KB 0644
mimetypesdialog.py File 1.76 KB 0644
mimetypesdialog_base.py File 4.17 KB 0644
nodevicesdialog.py File 2.26 KB 0644
nodevicesdialog_base.py File 6.05 KB 0644
plugindiagnose.py File 3.03 KB 0644
plugindiagnose_base.py File 3.02 KB 0644
plugindialog.py File 12.2 KB 0644
plugindialog_base.py File 6.7 KB 0644
pluginlicensedialog.py File 1.34 KB 0644
pluginlicensedialog_base.py File 4.81 KB 0644
pqdiagdialog.py File 3.34 KB 0644
pqdiagdialog_base.py File 2.67 KB 0644
printdialog.py File 6 KB 0644
printdialog_base.py File 5.44 KB 0644
printernamecombobox.py File 5.46 KB 0644
printsettings_base.py File 210 B 0644
printsettingsdialog.py File 3.46 KB 0644
printsettingsdialog_base.py File 2.71 KB 0644
printsettingstoolbox.py File 79.17 KB 0644
printtestpagedialog.py File 4.78 KB 0644
printtestpagedialog_base.py File 4.22 KB 0644
queuesconf.py File 10.61 KB 0644
readonlyradiobutton.py File 1.63 KB 0644
scandialog.py File 89.66 KB 0644
sendfaxdialog.py File 37.13 KB 0644
sendfaxdialog_base.py File 23.96 KB 0644
settingsdialog.py File 4.15 KB 0644
settingsdialog_base.py File 16.93 KB 0644
setupdialog.py File 57.44 KB 0644
setupdialog_base.py File 23.38 KB 0644
setupdialog_base5.py File 23.17 KB 0644
systemtray.py File 32.35 KB 0644
systrayframe.py File 8.2 KB 0644
systrayframe_base.py File 5.96 KB 0644
ui_utils.py File 20.76 KB 0644
upgradedialog.py File 4.59 KB 0644
upgradedialog_base.py File 3.38 KB 0644
wifisetupdialog.py File 35.63 KB 0644
wifisetupdialog_base.py File 39.7 KB 0644
Filemanager