Beispiel #1
0
class Config(QWidget):
    DATETIME_FORMAT = "%d-%m-%Y %H:%M:%S"

    terminals_changed = pyqtSignal()

    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.ui = uic.loadUiType("config.ui")[0]()
        self.ui.setupUi(self)

        self.terminals = None
        self.payment = None
        self.terminal_config = None

        self.flick = FlickCharm()
        self.flick.activate_on(self.ui.scrollArea)

    def setup(self, terminals, payment):
        self.terminals = terminals
        self.payment = payment
        self.ui.setupTerminals.clicked.connect(self.setup_terminals)
        self.ui.updateTerminals.clicked.connect(self.update_terminals)
        self.ui.updateConfig.clicked.connect(self.update_terminals_config)
        self.ui.testDisplay.clicked.connect(self.test_display)

    def test_display(self):
        self.terminals.test_display()
        self.ui.testDisplayResult.setText(datetime.now().strftime(self.DATETIME_FORMAT))

    def setup_terminals(self):
        self.terminal_config = TerminalConfig()
        if self.terminal_config.exec_() == QDialog.Accepted:
            self.update_terminals()
        self.terminal_config = None

    def update_terminals_config(self):
        self.terminals.update_device_config()
        self.ui.updateConfigResult.setText(datetime.now().strftime(self.DATETIME_FORMAT))

    def terminals_ready(self, ok):
        message = u"успешно" if ok else u"не удалось"
        now = datetime.now().strftime(self.DATETIME_FORMAT)
        self.ui.updateTerminalsResult.setText(u"Обновление %s (%s)" % (message, now))
        self.ui.updateTerminals.setEnabled(True)

    def update_terminals(self):
        self.ui.updateTerminals.setEnabled(False)
        self.terminals_changed.emit()
Beispiel #2
0
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.ui = uic.loadUiType('config.ui')[0]()
        self.ui.setupUi(self)
        self.localize()

        self.terminals = None
        self.payment = None
        self.terminal_config = None

        self.flick = FlickCharm()
        self.flick.activate_on(self.ui.terminalsScrollArea)
        self.flick.activate_on(self.ui.generalScrollArea)

        self.ui.version.setText(stoppark.__version__)
        self.get_time()

        self.ui.updateVersion.setVisible(False)
        self.ui.setupTerminals.clicked.connect(self.setup_terminals)
        self.ui.updateTerminals.clicked.connect(self.begin_terminal_update)

        self.wicd = None
        self.ui.setupNetworkConnection.clicked.connect(self.setup_network_connection)

        self.ui.apbState.stateChanged.connect(lambda state: self.option_changed.emit('apb', str(state)))
        self.ui.manualTicketPrint.stateChanged.connect(lambda state: self.option_changed.emit('ticket.manual_print',
                                                                                              str(state)))
Beispiel #3
0
        def __init__(self, image):
            QtGui.QWidget.__init__(self)
            self.setupUi(self)
            #self.scrollArea.setWidgetResizable(True)
            self.charm = FlickCharm()
            self.charm.activateOn(self.scrollArea)
            
            QObject.connect(self.fitToolButton,QtCore.SIGNAL('clicked()'), self.fitImage)
            QObject.connect(self.fullSizeToolButton,QtCore.SIGNAL('clicked()'), self.fullSizeImage)
            QObject.connect(self.cornersToolButton,QtCore.SIGNAL('clicked()'), self.cornersImage)
            QObject.connect(self.horizontalSlider,QtCore.SIGNAL('valueChanged(int)'), self.zoomImage)
            QObject.connect(self.colormapComboBox,QtCore.SIGNAL('currentIndexChanged(QString)'), self.colorMapChanged)
            #QObject.connect(self.minDoubleSpinBox,QtCore.SIGNAL('valueChanged(double)'), self.clampChanged)
            #QObject.connect(self.maxDoubleSpinBox,QtCore.SIGNAL('valueChanged(double)'), self.clampChanged)
            QObject.connect(self.histogram,QtCore.SIGNAL('clampChanged(double,double)'), self.clampChanged)
            
            self.splitter.setStretchFactor(0, 5)
            self.splitter.setStretchFactor(1, 2)

            
            self.colormap=[]
            currentMap=matplotlib.cm.get_cmap('gray')
            for n in range(256) :
                self.colormap.append( tuple([int(255*k) for k in currentMap(n)]) )            
            
            self.setImage(image)
            self.scrollArea.installEventFilter(self)
            self.painter=QPainter()
Beispiel #4
0
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.ui = uic.loadUiType("config.ui")[0]()
        self.ui.setupUi(self)

        self.terminals = None
        self.payment = None
        self.terminal_config = None

        self.flick = FlickCharm()
        self.flick.activate_on(self.ui.scrollArea)
Beispiel #5
0
class Config(QWidget):
    terminals_changed = pyqtSignal()
    terminals_update_requested = pyqtSignal()
    option_changed = pyqtSignal(str, str)
    own_ip_changed = pyqtSignal(str)

    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        self.ui = uic.loadUiType('config.ui')[0]()
        self.ui.setupUi(self)
        self.localize()

        self.terminals = None
        self.payment = None
        self.terminal_config = None

        self.flick = FlickCharm()
        self.flick.activate_on(self.ui.terminalsScrollArea)
        self.flick.activate_on(self.ui.generalScrollArea)

        self.ui.version.setText(stoppark.__version__)
        self.get_time()

        self.ui.updateVersion.setVisible(False)
        self.ui.setupTerminals.clicked.connect(self.setup_terminals)
        self.ui.updateTerminals.clicked.connect(self.begin_terminal_update)

        self.wicd = None
        self.ui.setupNetworkConnection.clicked.connect(self.setup_network_connection)

        self.ui.apbState.stateChanged.connect(lambda state: self.option_changed.emit('apb', str(state)))
        self.ui.manualTicketPrint.stateChanged.connect(lambda state: self.option_changed.emit('ticket.manual_print',
                                                                                              str(state)))

    def localize(self):
        self.ui.tabs.setTabText(0, _('General'))
        self.ui.tabs.setTabText(1, _('Terminals'))
        self.ui.tabs.setTabText(2, _('Payments'))

        self.ui.versionTitle.setText(_('Version:'))

        self.ui.dateTimeTitle.setText(_('Date and time:'))
        self.ui.setTime.setText(_('Setup'))

        self.ui.dbIPTitle.setText(_('DB server IP:'))
        self.ui.setDBIP.setText(_('Setup'))

        self.ui.networkConnectionTitle.setText(_('Network connection:'))
        self.ui.setupNetworkConnection.setText(_('Setup network connection'))

        self.ui.updateTerminalsTitle.setText(_('Terminal list'))
        self.ui.updateTerminalsHelp.setText(_('Configure and update terminal list:'))
        self.ui.setupTerminals.setText(_('Configure'))
        self.ui.updateTerminals.setText(_('Update'))
        self.ui.updateConfigTitle.setText(_('Terminal setup'))
        self.ui.updateConfigHelp.setText(_('Perform global terminal setup:'))
        self.ui.updateConfig.setText(_('Setup'))
        self.ui.testsTitle.setText(_('Tests'))
        self.ui.testDisplayHelp.setText(_('Display test:'))
        self.ui.testDisplay.setText(_('Test display'))
        self.ui.apbTitle.setText(_('Antipassback'))
        self.ui.apbState.setText(_('Enable'))

        self.ui.manualTicketPrintTitle.setText(_('Manual ticket print'))
        self.ui.manualTicketPrint.setText(_('Enable'))

    def begin_session(self, fio, access):
        if access in ['admin', 'operator']:
            [self.ui.tabs.setTabEnabled(i, True) for i in [0, 1, 2]]
            self.ui.setTime.setEnabled(True)
            self.ui.updateVersion.setEnabled(True)
            return True
        if access in ['config']:
            [self.ui.tabs.setTabEnabled(i, True if i == 0 else False) for i in [0, 1, 2]]
            self.ui.setTime.setEnabled(False)
            self.ui.updateVersion.setEnabled(False)
            return True
        return False

    def end_session(self):
        [self.ui.tabs.setTabEnabled(i, False) for i in [0, 1, 2]]
        return True

    def setup(self, terminals, payment):
        self.terminals = terminals
        self.payment = payment

        self.ui.setTime.clicked.connect(self.set_time)
        self.ui.showKeyboard.clicked.connect(lambda: Keyboard.show())

        self.ui.setDBIP.clicked.connect(self.set_db_ip)
        self.ui.testDisplay.clicked.connect(self.test_display)

    def handle_option(self, key, value):
        handler = {
            'db.ip': lambda v: self.ui.dbIP.setText(v),
            'apb': lambda v: self.ui.apbState.setCheckState(int(v)),
            'ticket.manual_print': lambda v: self.ui.manualTicketPrint.setCheckState(int(v))
        }.get(str(key), None)
        if handler:
            print 'found handler for ', key
            handler(value)

    def get_time(self):
        from PyQt4.QtCore import QTime, QDate

        self.ui.dateEdit.setDate(QDate.currentDate())
        self.ui.timeEdit.setTime(QTime.currentTime())

    def set_time(self):
        from subprocess import Popen

        new_date = self.ui.dateEdit.date()
        new_time = self.ui.timeEdit.time()
        new_datetime = datetime(year=new_date.year(), month=new_date.month(), day=new_date.day(),
                                hour=new_time.hour(), minute=new_time.minute(), second=new_time.second())
        arg = new_datetime.strftime('%m%d%H%M%Y')
        Popen(['date', arg])

    def set_db_ip(self):
        self.option_changed.emit('db.ip', self.ui.dbIP.text())
        self.ui.setDBIPHelp.setText(_('Update: %s') % (datetime.now().strftime(DATETIME_FORMAT_USER)))

    def test_display(self):
        self.terminals.test_display()
        self.ui.testDisplayResult.setText(_('Update: %s') % (datetime.now().strftime(DATETIME_FORMAT_USER)))

    def setup_terminals(self):
        from terminal_config import TerminalConfig
        self.terminal_config = TerminalConfig()
        if self.terminal_config.exec_() == QDialog.Accepted:
            self.begin_terminal_change()
        self.terminal_config = None

    def terminals_ready(self, ok):
        message = _('successful') if ok else _('unsuccessful')
        now = datetime.now().strftime(DATETIME_FORMAT_USER)
        self.ui.updateTerminalsResult.setText(_('Update: %(message)s (%(now)s)' % {
            'message': message,
            'now': now
        }))
        self.ui.updateTerminals.setEnabled(True)

    def begin_terminal_update(self):
        self.ui.updateTerminals.setEnabled(False)
        self.terminals_update_requested.emit()

    def begin_terminal_change(self):
        self.ui.updateTerminals.setEnabled(False)
        self.terminals_changed.emit()

    def setup_network_connection(self):
        Keyboard.show(layout=[])

        from subprocess import Popen
        if self.wicd is not None:
            if self.wicd.poll() is None:
                return
        self.wicd = Popen(['xterm', '-maximized', '-e', 'wicd-curses'])
Beispiel #6
0
class ImagePreviewWidget(QtGui.QWidget, Ui_ImagePreviewWidget):
        
        def __init__(self, image):
            QtGui.QWidget.__init__(self)
            self.setupUi(self)
            #self.scrollArea.setWidgetResizable(True)
            self.charm = FlickCharm()
            self.charm.activateOn(self.scrollArea)
            
            QObject.connect(self.fitToolButton,QtCore.SIGNAL('clicked()'), self.fitImage)
            QObject.connect(self.fullSizeToolButton,QtCore.SIGNAL('clicked()'), self.fullSizeImage)
            QObject.connect(self.cornersToolButton,QtCore.SIGNAL('clicked()'), self.cornersImage)
            QObject.connect(self.horizontalSlider,QtCore.SIGNAL('valueChanged(int)'), self.zoomImage)
            QObject.connect(self.colormapComboBox,QtCore.SIGNAL('currentIndexChanged(QString)'), self.colorMapChanged)
            #QObject.connect(self.minDoubleSpinBox,QtCore.SIGNAL('valueChanged(double)'), self.clampChanged)
            #QObject.connect(self.maxDoubleSpinBox,QtCore.SIGNAL('valueChanged(double)'), self.clampChanged)
            QObject.connect(self.histogram,QtCore.SIGNAL('clampChanged(double,double)'), self.clampChanged)
            
            self.splitter.setStretchFactor(0, 5)
            self.splitter.setStretchFactor(1, 2)

            
            self.colormap=[]
            currentMap=matplotlib.cm.get_cmap('gray')
            for n in range(256) :
                self.colormap.append( tuple([int(255*k) for k in currentMap(n)]) )            
            
            self.setImage(image)
            self.scrollArea.installEventFilter(self)
            self.painter=QPainter()
               
        def eventFilter(self,  obj,  event):
            if event.type() == QEvent.Resize:
                if(self.fitToolButton.isChecked()):
                    self.fitImage()
                elif(self.cornersToolButton.isChecked()):
                    self.cornersImage()
                
            return False        
        
        def setImage(self,image):
            #print 'opening:',image
            self.titleLabel.setText("<b>"+image+"</b>")
            self.image=image
            hdulist = pyfits.open(image)
            prihdr = hdulist[0].header
            keys=prihdr.ascardlist().keys()
            keys.sort()
            
            self.tableWidget.setRowCount(len(keys));
            self.tableWidget.setColumnCount(2);
            i=0
            for item in keys:
                self.tableWidget.setItem(i, 0, QTableWidgetItem(item));
                self.tableWidget.setItem(i, 1, QTableWidgetItem(str(prihdr[item])));
                i=i+1
            self.tableWidget.resizeColumnsToContents()
            self.tableWidget.resizeRowsToContents()
            
            #load the image
            self.data = hdulist[0].data #.astype('float32')
            self.histogram.setData(self.data)
            min = self.data.min()
            max = self.data.max()
            #self.minDoubleSpinBox.setMinimum(min)
            #self.minDoubleSpinBox.setMaximum(max)
            #self.minDoubleSpinBox.setValue(min)
            #self.maxDoubleSpinBox.setMinimum(min)
            #self.maxDoubleSpinBox.setMaximum(max)
            #self.maxDoubleSpinBox.setValue(max)     
            self.clampChanged(min,max)
            
            #create histogram
            #http://matplotlib.sourceforge.net/users/image_tutorial.html
            #print numpy.histogram(self.data,200)
            #im.show()
            
            

            
        def fitImage(self):
            #print 'fitting image'
            self.fitToolButton.setChecked(True)
            self.fullSizeToolButton.setChecked(False)
            self.cornersToolButton.setChecked(False)
            fittedimage=self.qimage.scaled(self.scrollArea.size().width()-4,self.scrollArea.height()-4,Qt.KeepAspectRatio,Qt.SmoothTransformation)
            self.imageLabel.setPixmap(QPixmap.fromImage(fittedimage))
            
        def fullSizeImage(self):
            #print 'fitting image'
            self.fitToolButton.setChecked(False)
            self.fullSizeToolButton.setChecked(True)
            self.cornersToolButton.setChecked(False)
            self.imageLabel.setPixmap(QPixmap.fromImage(self.qimage))
            
        def cornersImage(self):
            #print 'fitting image'
            self.fitToolButton.setChecked(False)
            self.fullSizeToolButton.setChecked(False)
            self.cornersToolButton.setChecked(True)
            width=self.scrollArea.size().width()-4
            height=self.scrollArea.height()-4
            
            cornersImage=QImage(width,height,QImage.Format_RGB32)
            
            #for n in range(256):
            #    cornersImage.setColor (n, qRgb(*self.colormap[n][:3])) 
                
            self.painter.begin(cornersImage)
                
            #upperLeft=self.qimage.copy(0,0,width/2,height/2)
            self.painter.drawImage(0,0,self.qimage.copy(0,0,width/2,height/2)) #upper left
            self.painter.drawImage(width/2,0,self.qimage.copy(self.qimage.width()-width/2,0,width/2,height/2)) #upper right
            self.painter.drawImage(0,height/2,self.qimage.copy(0,self.qimage.height()-height/2,width/2,height/2)) #lower left
            self.painter.drawImage(width/2,height/2,self.qimage.copy(self.qimage.width()-width/2,self.qimage.height()-height/2,width/2,height/2))#lower right
            
            self.painter.setPen(QColor(255,160,47))            
            self.painter.drawLine(width/2,0,width/2,height)
            self.painter.drawLine(0,height/2,width,height/2)
            
            xcenter=self.qimage.width()/2
            ycenter=self.qimage.height()/2
            self.painter.drawImage(width/4,height/4,self.qimage.copy(xcenter-width/4,ycenter-height/4,width/2,height/2))
            self.painter.drawRect(width/4,height/4,width/2,height/2)
            
            self.painter.end()       
            
            self.imageLabel.setPixmap(QPixmap.fromImage(cornersImage))
            
        def zoomImage(self, value):
            #print 'zoom', value
            self.fitToolButton.setChecked(False)
            self.fullSizeToolButton.setChecked(False)
            self.cornersToolButton.setChecked(False)
            zoomimage=self.qimage.scaledToWidth(self.qimage.width()*value/100)
            self.imageLabel.setPixmap(QPixmap.fromImage(zoomimage))
            
        def colorMapChanged(self, string) :
            self.colormap=[]
            currentMap=matplotlib.cm.get_cmap(str(string))
            for n in range(256) :
                self.colormap.append( tuple([int(255*k) for k in currentMap(n)]) )          
            for n in range(256):
                self.qimage.setColor (n, qRgb(*self.colormap[n][:3]))  
            self.redrawImage()
                
        #def clampChanged(self, v=None):
        #    self.qimage=qimage2ndarray.gray2qimage(self.data, normalize = (self.minDoubleSpinBox.value(),self.maxDoubleSpinBox.value()))
        #    self.colorMapChanged(str(self.colormapComboBox.currentText()))
        #    pixmap = QPixmap.fromImage(self.qimage)
        #    self.imageLabel.setPixmap(pixmap)
        #    self.redrawImage()
            
        def clampChanged(self, min,max):
            #print "clambis",min,max
            self.qimage=qimage2ndarray.gray2qimage(self.data, normalize = (min,max))
            self.colorMapChanged(str(self.colormapComboBox.currentText()))
            pixmap = QPixmap.fromImage(self.qimage)
            self.imageLabel.setPixmap(pixmap)
            self.redrawImage()
            
        def redrawImage(self):
            if(self.fitToolButton.isChecked()):
                self.fitImage()
            elif(self.cornersToolButton.isChecked()):
                self.cornersImage()
            elif(self.fullSizeToolButton.isChecked()):
                self.fullSizeImage()
            else:
                self.zoomImage(self.horizontalSlider.value())