Example #1
0
class Window( QMainWindow ):
    
    def __init__(self, *args, **kwargs ):
        QMainWindow.__init__( self, *args, **kwargs )
        self.installEventFilter( self )
        self.setWindowFlags(QtCore.Qt.Drawer)
    
        self.layoutWidget = QWidget()
        self.setCentralWidget( self.layoutWidget )
        
        self.layout = QVBoxLayout( self.layoutWidget )
        self.layout.setContentsMargins( 5,5,5,5 )
        
        self.ui_labels     = UI_labels()
        self.ui_driverAttr1 = UI_attrlist()
        self.ui_driverAttr2 = UI_attrlist()
        self.ui_buttons    = UI_buttons()
        self.layout.addWidget( self.ui_labels )
        self.layout.addWidget( self.ui_driverAttr1 )
        self.layout.addWidget( self.ui_driverAttr2 )
        self.layout.addWidget( self.ui_buttons )
        
        self.ui_driverAttr1.lineEdit_key.setText( '0' )
        self.ui_driverAttr1.lineEdit_value.setText( '0' )
        self.ui_driverAttr2.lineEdit_key.setText( '1' )
        self.ui_driverAttr2.lineEdit_value.setText( '1' )
        
        
        def addLineCommand():
            
            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget( numItems-1, attrlist )
        
        self.ui_buttons.button_connect.clicked.connect( partial( Commands.connectCommand, self ) )
        self.ui_buttons.button_addLine.clicked.connect( addLineCommand )
    
    
    def eventFilter( self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type() == QtCore.QEvent.Move :
            pass
Example #2
0
class Window(QMainWindow):
    def __init__(self, *args, **kwargs):
        QMainWindow.__init__(self, *args, **kwargs)
        self.installEventFilter(self)
        self.setWindowFlags(QtCore.Qt.Drawer)

        self.layoutWidget = QWidget()
        self.setCentralWidget(self.layoutWidget)

        self.layout = QVBoxLayout(self.layoutWidget)
        self.layout.setContentsMargins(5, 5, 5, 5)

        self.ui_labels = UI_labels()
        self.ui_driverAttr1 = UI_attrlist()
        self.ui_driverAttr2 = UI_attrlist()
        self.ui_buttons = UI_buttons()
        self.layout.addWidget(self.ui_labels)
        self.layout.addWidget(self.ui_driverAttr1)
        self.layout.addWidget(self.ui_driverAttr2)
        self.layout.addWidget(self.ui_buttons)

        self.ui_driverAttr1.lineEdit_key.setText('0')
        self.ui_driverAttr1.lineEdit_value.setText('0')
        self.ui_driverAttr2.lineEdit_key.setText('1')
        self.ui_driverAttr2.lineEdit_value.setText('1')

        def addLineCommand():

            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget(numItems - 1, attrlist)

        self.ui_buttons.button_connect.clicked.connect(
            partial(Commands.connectCommand, self))
        self.ui_buttons.button_addLine.clicked.connect(addLineCommand)

    def eventFilter(self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type(
        ) == QtCore.QEvent.Move:
            pass
Example #3
0
class FormPage(QWidget):
    statusMessage = Signal(str)

    def __init__(self, parent):
        super(FormPage, self).__init__(parent)
        layout = QVBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        formframe = QGroupBox(self)
        self.vbox = QVBoxLayout(formframe)
        self.form = PropertyFormLayout()
        self.vbox.addLayout(self.form)
        self.vbox.addStretch(1)
        self._has_stretch = True
        layout.addWidget(formframe)

    def _removeStretch(self):
        if self._has_stretch:
            self.vbox.removeItem(self.vbox.itemAt(self.vbox.count() - 1))
            self._has_stretch = False;

    def addStretch(self):
        if not self._has_stretch:
            self.vbox.addStretch(1)
            self._has_stretch = True

    def addProperty(self, kind, path, row, col, *args, **kwargs):
        self.form.addProperty(self, kind, path, row, col, *args, **kwargs)

    def addWidget(self, widget, *args):
        self._removeStretch()
        self.form.addWidget(widget, *args)

    def addLayout(self, sublayout, *args):
        self._removeStretch()
        self.form.addLayout(sublayout, *args)

    def status_message(self, msg, *args):
        self.statusMessage.emit(msg.format(*args))
Example #4
0
class DeviceList(QScrollArea):
    def __init__(self, programming_handler, info_handler, reset_handler):
        super(DeviceList, self).__init__()

        self.deviceWidgets = []
        self.programming_handler = programming_handler
        self.info_handler = info_handler
        self.reset_handler = reset_handler
        self.updateCounter = 0

        self.initUI()

    def initUI(self):
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)

        self.listWidget = QWidget()
        self.layout = QVBoxLayout()
        self.layout.setContentsMargins(0, 0, 0, 0)

        self.listWidget.setLayout(self.layout)
        self.setWidgetResizable(True)

        self.setWidget(self.listWidget)

        self.updateList()

    def updateList(self):
        self.updateCounter += 1

        deviceInfoList = list(
            filter(is_supported_device,
                   easyhid.Enumeration().find()))

        deleteList = []
        deviceIds = [dev.path for dev in deviceInfoList]
        oldDevices = []
        newDevices = []

        # look at the list of connected devices and find out which devices are
        # no longer connected and remove them
        i = 0
        while i < self.layout.count():
            devItem = self.layout.itemAt(i).widget()
            if hasattr(devItem, "device") and (devItem.device.path
                                               in deviceIds):
                oldDevices.append(devItem.device)
                i += 1
            else:
                self.layout.takeAt(i).widget().deleteLater()

        # Now find the list of new devices
        oldDeviceIds = [dev.path for dev in oldDevices]
        for dev in deviceInfoList:
            if dev.path in oldDeviceIds:
                continue
            else:
                newDevices.append(dev)

        for devInfo in newDevices:
            devWidget = DeviceWidget(devInfo)
            if devWidget.label:
                self.deviceWidgets.append(devWidget)
                self.layout.addWidget(devWidget)
                devWidget.program.connect(self.programming_handler)
                devWidget.show_info.connect(self.info_handler)
                devWidget.reset.connect(self.reset_handler)

        # if len(self.deviceWidgets) == 0:
        if len(oldDevices) == 0 and len(newDevices) == 0:
            n = self.updateCounter % 4
            label = QLabel("Scanning for devices" + "." * n + " " * (4 - n))
            self.layout.setAlignment(Qt.AlignCenter)
            self.layout.addWidget(label)
            self.deviceWidgets = []
        else:
            self.layout.setAlignment(Qt.AlignTop)
            self.updateCounter = 0
Example #5
0
class Window( QMainWindow ):
    
    def __init__(self, *args, **kwargs ):
        QMainWindow.__init__( self, *args, **kwargs )
        self.installEventFilter( self )
        self.setWindowFlags(QtCore.Qt.Drawer)

        self.layoutWidget = QWidget()
        self.setCentralWidget( self.layoutWidget )
        
        self.layout = QVBoxLayout( self.layoutWidget )
        self.layout.setContentsMargins( 5,5,5,5 )
        
        self.ui_labels     = UI_labels()
        self.ui_driverAttr = UI_attrlist()
        #self.ui_options    = UI_options()
        self.ui_buttons    = UI_buttons()
        self.layout.addWidget( self.ui_labels )
        self.layout.addWidget( self.ui_driverAttr )
        #self.layout.addWidget( self.ui_options )
        self.layout.addWidget( self.ui_buttons )
        
        
        def addLineCommand():
            
            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget( numItems-2, attrlist )
        
        
        def setAttrCommand():
            
            import pymel.core
            cmds.undoInfo( ock=1 )
            sels = pymel.core.ls( sl=1 )
            numItems = self.layout.count()
            
            for i in range( 1, numItems-1 ):
                targetWidget = self.layout.itemAt( i ).widget()
                
                attrName = targetWidget.lineEdit_srcAttr.text()
                attrValue = targetWidget.lineEdit_dstAttr.text()
                
                if not attrName or not attrValue: continue

                for sel in sels:
                    attrType = sel.attr( attrName ).type()
                    if attrType == 'string':
                        sel.attr( attrName ).set( attrValue )
                    else:
                        print "attr value : ", attrValue
                        if attrValue.find( ',' ) != -1:
                            values = [ float( value ) for value in attrValue.split( ',' ) ]
                            sel.attr( attrName ).set( values )
                        else:
                            sel.attr( attrName ).set( float( attrValue ) ) 

            cmds.undoInfo( cck=1 )
            
        self.ui_buttons.button_connect.clicked.connect( setAttrCommand )
        self.ui_buttons.button_addLine.clicked.connect( addLineCommand )
    
    
    def eventFilter( self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type() == QtCore.QEvent.Move :
            pass
nameToCreate.setParent(widget)

createLayout.insertWidget(createLayout.count()-2, nameToCreate)

doneButton.hide()
nameToCreate.hide()

def doCreate():
    createButton.hide()
    doneButton.show()
    nameToCreate.show()

createButton.clicked.connect(doCreate)

createdLayout = QVBoxLayout()
layout.insertLayout(layout.count()-1, createdLayout)

def doneCreating():
    name = nameToCreate.text()
    created = QPushButton()
    created.setText("{0} @ {1}".format(name, hex(id(created))))
    createdLayout.addWidget(created)
    doneButton.hide()
    nameToCreate.hide()
    createButton.show()
    
doneButton.clicked.connect(doneCreating)

nameToCreate.setMinimumWidth(150)

widget.adjustSize()
Example #7
0
 def test_add_layout_succeeding(self):
     parent = QVBoxLayout()
     ChildAdder.add(QHBoxLayout(), 'fred', parent)
     self.assertEqual(parent.count(), 1)
     self.assertTrue(isinstance(parent.itemAt(0), QHBoxLayout))
Example #8
0
class Window(QMainWindow):
    def __init__(self, *args, **kwargs):
        QMainWindow.__init__(self, *args, **kwargs)
        self.installEventFilter(self)
        self.setWindowFlags(QtCore.Qt.Drawer)

        self.layoutWidget = QWidget()
        self.setCentralWidget(self.layoutWidget)

        self.layout = QVBoxLayout(self.layoutWidget)
        self.layout.setContentsMargins(5, 5, 5, 5)

        self.ui_labels = UI_labels()
        self.ui_driverAttr = UI_attrlist()
        self.ui_options = UI_options()
        self.ui_buttons = UI_buttons()
        self.layout.addWidget(self.ui_labels)
        self.layout.addWidget(self.ui_driverAttr)
        self.layout.addWidget(self.ui_options)
        self.layout.addWidget(self.ui_buttons)

        def addLineCommand():

            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget(numItems - 2, attrlist)

        def connectCommand():

            cmds.undoInfo(ock=1)
            sels = cmds.ls(sl=1)
            numItems = self.layout.count()

            optionWidget = self.layout.itemAt(numItems - 2).widget()

            for i in range(1, numItems - 2):
                targetWidget = self.layout.itemAt(i).widget()

                srcAttr = targetWidget.lineEdit_srcAttr.text()
                dstAttr = targetWidget.lineEdit_dstAttr.text()

                if not srcAttr or not dstAttr: continue

                try:
                    for sel in sels[1:]:
                        target = sel
                        if optionWidget.checkBox.isChecked():
                            selParents = cmds.listRelatives(sel, p=1, f=1)
                            if selParents:
                                target = selParents[0]
                        cmds.connectAttr(sels[0] + '.' + srcAttr,
                                         target + '.' + dstAttr)
                except:
                    pass
            cmds.undoInfo(cck=1)

        self.ui_buttons.button_connect.clicked.connect(connectCommand)
        self.ui_buttons.button_addLine.clicked.connect(addLineCommand)

    def eventFilter(self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type(
        ) == QtCore.QEvent.Move:
            pass
Example #9
0
class UI_Form( QMainWindow ):

    def __init__(self, *args, **kwargs ):
        
        QMainWindow.__init__( self, *args, **kwargs )
        self.installEventFilter( self )
        self.setWindowTitle( "  PingoTools Installer" )
        self.setWindowIcon( QtGui.QIcon( os.path.dirname( __file__ ) + '/images/letter-p.png')  )
        self.resize( 518, 400 )
        
        self.mainWidget = QWidget()
        self.setCentralWidget( self.mainWidget )
        self.mainLayout = QVBoxLayout()
        self.mainWidget.setLayout( self.mainLayout )
        
        self.firstPage()
        


    def firstPage(self):
        
        for i in range( self.mainLayout.count() ):
            item = self.mainLayout.itemAt(0)
            item.widget().setParent( None )
        
        title = QLabel( "<p style='color:rgb( 137,129,120 )'>Welcome to the PingoTools Installer</p>" )
        title.setFixedHeight( 50 )
        titleFont  = QFont()
        titleFont.setPixelSize( 18 )
        titleFont.setBold( True )
        titleFont.setFamily( "Helvetica [Cronyx]" )
        title.setAlignment( QtCore.Qt.AlignCenter )
        title.setFont( titleFont )
        
        description = QLabel()
        description.setAlignment( QtCore.Qt.AlignCenter )
        
        buttonsWidget = QWidget(); buttonsWidget.setMaximumHeight( 50 )
        buttonsLayout = QHBoxLayout( buttonsWidget )
        emptyArea = QLabel()
        buttonNext = QPushButton( 'Next > ' )
        buttonCancel = QPushButton( 'Cancel' )
        buttonsLayout.addWidget( emptyArea )
        buttonsLayout.addWidget( buttonNext ); buttonNext.setFixedWidth( 100 )
        buttonsLayout.addWidget( buttonCancel ); buttonCancel.setFixedWidth( 100 )
        
        self.mainLayout.addWidget( title )
        self.mainLayout.addWidget( description )
        self.mainLayout.addWidget( buttonsWidget )
        
        origWidth = 500

        frontImage = QImage()
        frontImage.load( os.path.dirname( __file__ ) + '/images/pingoTools_main.jpg' )
        trValue = QTransform().scale( float(origWidth)/frontImage.width(), float(origWidth)/frontImage.width() )
        transformedImage = frontImage.transformed( trValue )
        pixmap     = QPixmap.fromImage( transformedImage )
        description.setPixmap( pixmap )
        description.setGeometry( 0,0, transformedImage.width() , transformedImage.height() )
        description.paintEvent(QPaintEvent(QtCore.QRect( 0,0,self.width(), self.height() )))
        
        QtCore.QObject.connect( buttonNext, QtCore.SIGNAL( 'clicked()' ), self.secondPage )
        QtCore.QObject.connect( buttonCancel, QtCore.SIGNAL( 'clicked()' ), self.cmd_cancel )
    

    def secondPage(self):
        
        for i in range( self.mainLayout.count() ):
            item = self.mainLayout.itemAt(0)
            item.widget().setParent( None )
        
        title = QLabel( "설치할 플러그인을 선택하십시오.".decode( 'utf-8' ) )
        title.setFixedHeight( 50 )
        
        listWidget = QListWidget()
        listWidget.setFixedHeight( 273 )
        widgetItem_for2015 = QListWidgetItem("PingoTools for Maya2015", listWidget )
        widgetItem_for2016 = QListWidgetItem("PingoTools for Maya2016", listWidget )
        widgetItem_for2017 = QListWidgetItem("PingoTools for Maya2017", listWidget )
        
        widgetItem_for2015.setCheckState( QtCore.Qt.Checked )
        widgetItem_for2016.setCheckState( QtCore.Qt.Checked )
        widgetItem_for2017.setCheckState( QtCore.Qt.Checked )
        #widgetItem_for2015.setFlags( not QtCore.Qt.ItemIsSelectable )
        
        buttonsWidget = QWidget(); buttonsWidget.setMaximumHeight( 50 )
        buttonsLayout = QHBoxLayout( buttonsWidget )
        emptyArea = QLabel()
        buttonBack = QPushButton( 'Back < ' )
        buttonNext = QPushButton( 'Install' )
        buttonCancel = QPushButton( 'Cancel' )
        buttonsLayout.addWidget( emptyArea )
        buttonsLayout.addWidget( buttonBack ); buttonBack.setFixedWidth( 100 )
        buttonsLayout.addWidget( buttonNext ); buttonNext.setFixedWidth( 100 )
        buttonsLayout.addWidget( buttonCancel ); buttonCancel.setFixedWidth( 100 )
        
        self.mainLayout.addWidget( title )
        self.mainLayout.addWidget( listWidget )
        self.mainLayout.addWidget( buttonsWidget )
        
        QtCore.QObject.connect( buttonBack, QtCore.SIGNAL( 'clicked()' ), self.firstPage )
        QtCore.QObject.connect( buttonNext, QtCore.SIGNAL( 'clicked()' ), self.lastPage )
        QtCore.QObject.connect( buttonCancel, QtCore.SIGNAL( 'clicked()' ), self.cmd_cancel )




    def installPage(self):
        
        for i in range( self.mainLayout.count() ):
            item = self.mainLayout.itemAt(i)
            item.widget().setParent( None )
        pass    
    



    def lastPage(self):
        
        for i in range( self.mainLayout.count() ):
            item = self.mainLayout.itemAt(0)
            item.widget().setParent( None )
        
        title = QLabel( "".decode( 'utf-8' ) )
        title.setFixedHeight( 50 )
        
        description = QLabel( "<p style='line-height:150%';'><b>PingoTools</b> 인스톨이 완료되었습니다.<p>".decode( 'utf-8' ) )
        description.setAlignment( QtCore.Qt.AlignCenter )
        
        buttonsWidget = QWidget(); buttonsWidget.setMaximumHeight( 50 )
        buttonsLayout = QHBoxLayout( buttonsWidget )
        emptyArea = QLabel()
        buttonClose = QPushButton( 'Close' ); buttonClose.setFixedWidth( 100 )
        buttonsLayout.addWidget( emptyArea )
        buttonsLayout.addWidget( buttonClose )
        
        self.mainLayout.addWidget( title )
        self.mainLayout.addWidget( description )
        self.mainLayout.addWidget( buttonsWidget )
        
        QtCore.QObject.connect( buttonClose, QtCore.SIGNAL( 'clicked()' ), self.cmd_close )




    def cmd_cancel(self):
        
        messageBox = QMessageBox( self )
        messageBox.setModal( True )
        messageBox.setWindowTitle( "설치 취소".decode( 'utf-8' ))
        messageBox.setText( "설치를 취소하시겠습니까?".decode( 'utf-8' ) )
        messageBox.setStandardButtons( QMessageBox.Yes| QMessageBox.No )
        messageBox.setDefaultButton( QMessageBox.Yes )
        result = messageBox.exec_()
        
        if result == QMessageBox.Yes:
            cancelWaningMessageBox = QMessageBox( self )
            cancelWaningMessageBox.setModal( True )
            cancelWaningMessageBox.setWindowTitle( "취소완료".decode( 'utf-8' ) )
            cancelWaningMessageBox.setText( "설치가 취소되었습니다.".decode( 'utf-8' ) )
            cancelWaningMessageBox.setStandardButtons( QMessageBox.Ok )
            result = cancelWaningMessageBox.exec_()
            self.close()
        else:
            pass
    
    
    def cmd_close(self):
        
        self.close()
Example #10
0
class Window( QMainWindow ):
    
    def __init__(self, *args, **kwargs ):
        QMainWindow.__init__( self, *args, **kwargs )
        self.installEventFilter( self )
        self.setWindowFlags(QtCore.Qt.Drawer)

        self.layoutWidget = QWidget()
        self.setCentralWidget( self.layoutWidget )
        
        self.layout = QVBoxLayout( self.layoutWidget )
        self.layout.setContentsMargins( 5,5,5,5 )
        
        self.ui_labels     = UI_labels()
        self.ui_driverAttr = UI_attrlist()
        self.ui_options    = UI_options()
        self.ui_buttons    = UI_buttons()
        self.layout.addWidget( self.ui_labels )
        self.layout.addWidget( self.ui_driverAttr )
        self.layout.addWidget( self.ui_options )
        self.layout.addWidget( self.ui_buttons )
        
        
        def addLineCommand():
            
            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget( numItems-2, attrlist )
        
        
        def connectCommand():
            
            cmds.undoInfo( ock=1 )
            sels = cmds.ls( sl=1 )
            numItems = self.layout.count()
            
            optionWidget = self.layout.itemAt( numItems-2 ).widget()
            
            for i in range( 1, numItems-2 ):
                targetWidget = self.layout.itemAt( i ).widget()
                
                srcAttr = targetWidget.lineEdit_srcAttr.text()
                dstAttr = targetWidget.lineEdit_dstAttr.text()
                
                if not srcAttr or not dstAttr: continue
                
                try: 
                    for sel in sels[1:]:
                        target = sel
                        if optionWidget.checkBox.isChecked():
                            selParents = cmds.listRelatives( sel, p=1, f=1 )
                            if selParents:
                                target = selParents[0]
                        cmds.connectAttr( sels[0] + '.' + srcAttr, target + '.' + dstAttr )
                except: pass
            cmds.undoInfo( cck=1 )
            
        
        self.ui_buttons.button_connect.clicked.connect( connectCommand )
        self.ui_buttons.button_addLine.clicked.connect( addLineCommand )
    
    
    def eventFilter( self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type() == QtCore.QEvent.Move :
            pass
Example #11
0
class EegCarDashboardWindow(QWidget):

    def setSliderMaxThrottle(self, x):
        self.setMaxThrottle(x)
        # self.dashboard.set_throttle(x)
        # self.dashboard.wheel.forward(x)

    def setSteeringValue(self, x):
        # x range is 1-9 need to scale (10-90)
        x = x*10
        self.dashboard.set_steering(x)
        # self.dashboard.steering.turn_by_position(x)
        pot = 1.5
        self.dashboard.steering.turn_by_position(x, pot)

    def setSteeringTurnRangeValue(self, x):
        ticks = int(100000 * (x/10.0)) # max is 100000
        # print "STEERING TURN TICKS %d" % ticks
        self.dashboard.set_steering_eeg_turn_ticks(ticks)

    def steering_update_current_pos(self):
        # x = int(self.steering_current_pos.text()) + delta_x
        # while check busy
        ## read position
        ## print 'current pos %d' % x

        ticks = int(self.steering_move_ticks.text())
        seconds = int(ticks/(DEFAULT_STEERING_SPEED*7))
        seconds = seconds + 1 # at least one second
        ending_time = time.time() + seconds
        while time.time() < ending_time:
            # print "ENDNIG: %d" % ending_time
            # print "CURRENT: %d" % time.time()
            self.steering_set_current_pos(self.dashboard.steering.get_current_location())

    def steering_set_current_pos(self, x):
        self.steering_current_pos.setText(str(x))    

    def steering_move_left(self):
        ticks = int(self.steering_move_ticks.text())
        # Stepping Motor MOVE!
        self.dashboard.steering.stepping_driver.forward(ticks)
        self.setMessage('Steering left')
        self.steering_update_current_pos()

    def steering_move_right(self):
        ticks = int(self.steering_move_ticks.text())
        # Stepping Motor MOVE!
        self.dashboard.steering.stepping_driver.backward(ticks)
        self.setMessage('Steering right')
        self.steering_update_current_pos()

    def set_steering_move_ticks_value(self):
        self.steering_move_ticks.blockSignals(True) # update line edit
        ticks = int(self.steering_move_ticks.text())
        self.steering_move_ticks.setText(str(ticks)) 
        self.steering_move_ticks.blockSignals(False)
        self.steering_move_ticks.setModified(True)

        if self.steering_move_ticks.isModified():
            self.steering_move_ticks.clearFocus()
        self.maxThrottle.setModified(False)

    def steering_reset_position(self):
        # RESET
        self.setMessage('Steering Controller Reset')
        self.dashboard.steering.stepping_driver.reset() # reset
        self.dashboard.steering.stepping_driver.set_speed(DEFAULT_STEERING_SPEED) # set speed
        self.steering_update_current_pos()

    def setMessage(self, msg):
        self.statusBar.showMessage(msg, 2000)

    def remote_control(self, state):
        if state == QtCore.Qt.Checked:
            self.dashboard.set_rc_mode(True)
            self.setMessage('SET RC MODE')
        else:
            self.dashboard.set_rc_mode(False)
            self.setMessage('CLEAR RC MODE')

    def keep_mode_control(self, state):
        if state == QtCore.Qt.Checked:
            self.keep_mode = True
            self.setMessage('Keep Mode (EEG)')
        else:
            self.keep_mode = False
            self.setMessage('Keyboard Mode')

    def power_handle_mode_control(self, state):
        if state == QtCore.Qt.Checked:
            self.dashboard.set_power_handle_mode(True)
            self.setMessage('Power Handle (Auto Steering Middle)')
        else:
            self.dashboard.set_power_handle_mode(False)
            self.setMessage('Turn Off Power Handle')

    def ignore_eeg_input_control(self, state):
        if state == QtCore.Qt.Checked:
            self.dashboard.set_ignore_eeg_input(True)
            self.setMessage('Ignore EEG Input')
        else:
            self.dashboard.set_ignore_eeg_input(False)
            self.setMessage('Access EEG Input')

    def stright_control(self, state):
        if state == QtCore.Qt.Checked:
            self.dashboard.set_rc_stright_mode(True)
            self.setMessage('RC STRIGHT Mode')
        else:
            self.dashboard.set_rc_stright_mode(False)
            self.setMessage('RC FREE L/R Mode')

    def __init__(self):
        QWidget.__init__(self)
        self.setWindowTitle("EEG Pilot Dashboard")
        self.setGeometry(0, 0, 750, 800)
        # self.setGeometry(300, 300, 750, 800)
        self.dashboard = EegCarDashboard()
        self.dashboard.set_max_throttle(DEFAULT_MAX_THROTTLE)
        self.dashboard.set_backward_max_throttle(DEFAULT_MAX_BACK_THROTTLE)

        self.layout = QVBoxLayout(self)

        # Drive Setting
        self.rc_mode = QCheckBox('Remote Control', self)
        self.rc_mode.stateChanged.connect(self.remote_control)

        self.rc_stright_mode = QCheckBox('RC Stright', self)
        self.rc_stright_mode.stateChanged.connect(self.stright_control)

        self.keep_mode_checkbox = QCheckBox('Keep Mode', self)
        self.keep_mode_checkbox.stateChanged.connect(self.keep_mode_control)

        self.power_handle_mode_checkbox = QCheckBox('Power Handle', self)
        self.power_handle_mode_checkbox.stateChanged.connect(self.power_handle_mode_control)

        self.ignore_eeg_input = QCheckBox('Ignore Eeg Input', self)
        self.ignore_eeg_input.stateChanged.connect(self.ignore_eeg_input_control)

        drive_layout = QHBoxLayout(self)
        drive_layout.addWidget(self.rc_mode)
        drive_layout.addWidget(self.rc_stright_mode)
        drive_layout.addWidget(self.keep_mode_checkbox)
        drive_layout.addWidget(self.power_handle_mode_checkbox)
        drive_layout.addWidget(self.ignore_eeg_input)

        drive_groupbox = QtGui.QGroupBox("Drive Status & Setting")
        drive_groupbox.setLayout(drive_layout)

        # Throttle Setting
        self.throttle_slider = QSlider(Qt.Horizontal)
        self.throttle_slider.setFocusPolicy(Qt.StrongFocus)
        self.throttle_slider.setTickPosition(QSlider.TicksBothSides)
        self.throttle_slider.setTickInterval(10)
        self.throttle_slider.setSingleStep(10)
        self.throttle_slider.setValue(DEFAULT_MAX_THROTTLE)

        self.throttle_slider.valueChanged.connect(self.throttle_slider.setValue)
        self.connect(self.throttle_slider, SIGNAL("valueChanged(int)"), self.setSliderMaxThrottle)
        self.throttle_label = QLabel('Max Throttle (%): ', self)


        self.maxThrottle = QLineEdit(str(DEFAULT_MAX_THROTTLE))
        # self.maxThrottle.textChanged[str].connect(self.setMaxThrottle)
        self.maxThrottle.editingFinished.connect(self.setMaxThrottle)
        self.maxThrottle.setMaxLength(2)
        self.maxThrottle.setMaximumWidth(40)

        self.backwardMaxThrottle = QLineEdit(str(DEFAULT_MAX_BACK_THROTTLE))
        # self.maxThrottle.textChanged[str].connect(self.setMaxThrottle)
        self.backwardMaxThrottle.editingFinished.connect(self.setBackwardMaxThrottle)
        self.backwardMaxThrottle.setMaxLength(2)
        self.backwardMaxThrottle.setMaximumWidth(40)

        throttle_layout = QHBoxLayout(self)
        throttle_layout.addWidget(self.throttle_label)
        throttle_layout.addWidget(self.throttle_slider)
        throttle_layout.addWidget(QLabel("Forward Max:"))
        throttle_layout.addWidget(self.maxThrottle)

        throttle_layout.addWidget(QLabel("Backward Max:"))
        throttle_layout.addWidget(self.backwardMaxThrottle)

        throttle_groupbox = QtGui.QGroupBox("Max Throttle Setting (30-99)")
        throttle_groupbox.setLayout(throttle_layout)

        # Steering
        self.steering_label = QLabel('Turn Range', self)
        self.steering_turn_range_slider = QSlider(Qt.Horizontal)
        self.steering_turn_range_slider.setFocusPolicy(Qt.StrongFocus)
        self.steering_turn_range_slider.setTickPosition(QSlider.TicksBothSides)
        self.steering_turn_range_slider.setRange(1, 9)
        # self.steering_slider.setMinimum(2)
        # self.steering_slider.setMaximum(8)
        self.steering_turn_range_slider.setMinimum(4)
        self.steering_turn_range_slider.setMaximum(8)
        self.steering_turn_range_slider.setTickInterval(1)
        self.steering_turn_range_slider.setSingleStep(1)
        self.steering_turn_range_slider.setValue(6)
        self.steering_turn_range_slider.valueChanged.connect(self.steering_turn_range_slider.setValue)
        self.connect(self.steering_turn_range_slider, SIGNAL("valueChanged(int)"), self.setSteeringTurnRangeValue)

        self.steering_adjust_label = QLabel(' Home Adjust ', self)
        self.steering_move_left_button = QPushButton('<Left+', self)
        self.steering_current_pos = QLabel('0', self)
        self.steering_move_right_button = QPushButton('-Right>', self)

        self.steering_move_ticks = QLineEdit(str(5000))
        self.steering_move_ticks.editingFinished.connect(self.set_steering_move_ticks_value)
        self.steering_move_ticks.setMaxLength(5)
        self.steering_move_ticks.setMaximumWidth(50)

        self.steering_reset = QPushButton('Reset', self)

        self.steering_move_left_button.clicked.connect(self.steering_move_left)
        self.steering_move_right_button.clicked.connect(self.steering_move_right)
        self.steering_reset.clicked.connect(self.steering_reset_position)

        steering_layout = QHBoxLayout(self)
        steering_layout.addWidget(self.steering_label)
        # steering_layout.addWidget(self.steering_slider)
        steering_layout.addWidget(self.steering_turn_range_slider)
        steering_layout.addWidget(self.steering_adjust_label)
        steering_layout.addWidget(self.steering_move_left_button)


        steering_layout.addWidget(self.steering_current_pos)
        steering_layout.addWidget(self.steering_move_right_button)
        steering_layout.addWidget(self.steering_move_ticks)
        steering_layout.addWidget(self.steering_reset)

        steering_groupbox = QtGui.QGroupBox("Steering Setting")
        steering_groupbox.setLayout(steering_layout)

        self.layout.addWidget(self.dashboard, 2)
        self.layout.addWidget(drive_groupbox)
        self.layout.addWidget(throttle_groupbox)
        self.layout.addWidget(steering_groupbox)

        self.statusBar = QStatusBar()
        self.statusBar.showMessage('Ready', 2000)
        self.layout.addWidget(self.statusBar)

        self.setIcon()
        self.show()

        # save the state
        self.default_backgroundcolor = self.palette().color(QtGui.QPalette.Background)
        self.previos_steering = 50
        self.init_keep_mode()
        self.init_power_handle_mode()

        # Timer For reading current steering position
        # self.timer = QtCore.QTimer()
        # self.timer.timeout.connect(self.readSteeringPos)
        # # check every second
        # self.timer.start(1000)  

        # Timer For Powerhandle
        # self.power_handle_timer = QtCore.QTimer()
        # self.power_handle_timer.timeout.connect(self.update_power_handle)
        # # check every half second
        # self.power_handle_timer.start(500)

        # # Timer For Start Accel
        # self.start_accel_timer = QtCore.QTimer()
        # # self.start_accel_timer.singleShot(5000, self.end_start_accel_handle)
        # self.can_start_accel = True

    # def set_start_accel(self, value):
    #     self.can_start_accel = value

    # def get_start_accel(self):
    #     return self.can_start_accel

    # def end_start_accel_handle(self):
    #     self.dashboard.end_start_accel()

    # def update_power_handle(self):
    #     if self.power_handle_mode:
    #         self.dashboard.update_power_handle()

    def readSteeringPos(self):
        # self.setMessage(str(self.dashboard.steering.get_current_steering()))
        # TODO: is it thread safe?
        # self.steering_set_current_pos(self.dashboard.steering.get_current_location())
        return

    def getMaxThrottle(self):
        return int(self.maxThrottle.text())

    def getBackwardMaxThrottle(self):
        return int(self.backwardMaxThrottle.text())

    def setMaxThrottle(self, _throttle=None):
        if _throttle is None: # from line textbox
            throttle = self.getMaxThrottle()
            self.throttle_slider.blockSignals(True); # update slider
            self.throttle_slider.setValue(throttle);
            self.throttle_slider.blockSignals(False);
        else: # from slider 
            throttle = _throttle
            self.maxThrottle.blockSignals(True); # update line edit
            self.maxThrottle.setText(str(throttle)) 
            self.maxThrottle.blockSignals(False);
            self.maxThrottle.setModified(True)

        if self.maxThrottle.isModified():
            if throttle >= FORWARD_THROTTLE_THRESHOLD: # forward throttle threshold is 20
                self.dashboard.set_max_throttle(throttle)
                self.setMessage("Forward Max Throttle: %d" % throttle)
                self.maxThrottle.clearFocus()
        self.maxThrottle.setModified(False)

    def setBackwardMaxThrottle(self):
        throttle = self.getBackwardMaxThrottle()
        if self.backwardMaxThrottle.isModified():
            if throttle >= BACKWARD_THROTTLE_THRESHOLD: # backward throttle threshold is 20
                self.dashboard.set_backward_max_throttle(throttle)
                self.backwardMaxThrottle.clearFocus()
        self.backwardMaxThrottle.setModified(False)

    def setIcon(self):
        self.appIcon = QIcon('logo.png')
        self.setWindowIcon(self.appIcon)

    def init_keep_mode(self):
        self.w_keep_countdown = 0
        self.x_keep_countdown = 0
        self.a_keep_countdown = 0
        self.d_keep_countdown = 0
        self.default_keep_countdown = DEFAULT_KEEP_COUNT
        # self.default_keep_countdown = 28
        # self.default_keep_countdown = 38
        self.keep_mode = False

    def init_power_handle_mode(self):
        self.power_handle_mode = False

    def is_keep_mode(self, ignore_key):
        # if key is 'w' -> w_keep_countdown
        # if key is 'x' -> x_keep_countdown
        # ignore several 's' key while chountdown number to zero

        if self.keep_mode:
            if ignore_key == Qt.Key_S: 
                if self.dashboard.power_handle_mode == True:
                    self.dashboard.update_power_handle()
                if self.w_keep_countdown > 0:
                    self.w_keep_countdown = self.w_keep_countdown - 1
                    # print "w keep countdown %d" % self.w_keep_countdown
                    self.setMessage("w keep countdown %d" % self.w_keep_countdown)
                    self.x_keep_countdown = 0
                    return True
                if self.x_keep_countdown > 0:
                    self.x_keep_countdown = self.x_keep_countdown - 1
                    # print "x keep countdown %d" % self.x_keep_countdown
                    self.setMessage("x keep countdown %d" % self.x_keep_countdown)
                    self.w_keep_countdown = 0
                    return True
 
            if ignore_key == Qt.Key_X: 
                if self.w_keep_countdown > 0:
                    self.w_keep_countdown = self.w_keep_countdown - 1
                    self.setMessage("w keep countdown %d" % self.w_keep_countdown)
                    if self.w_keep_countdown < DEFAULT_KEEP_COUNT - 10:
                      # self.stop()
                      self.dashboard.set_key_input('s')
                      self.dashboard.stop()
                      self.dashboard.set_start_accel(True)
                    return True

            if ignore_key == Qt.Key_W: 
                if self.x_keep_countdown > 0:
                    self.x_keep_countdown = self.x_keep_countdown - 1
                    self.setMessage("x keep countdown %d" % self.x_keep_countdown)
                    if self.x_keep_countdown < DEFAULT_KEEP_COUNT - 10:
                      # self.stop()
                      self.dashboard.set_key_input('s')
                      self.dashboard.stop()
                      self.dashboard.set_start_accel(True)
                    return True
 
        return False

    def go_to_keep_mode(self, key):
        if key == Qt.Key_W:
            self.w_keep_countdown = self.default_keep_countdown

        if key == Qt.Key_X:
            self.x_keep_countdown = self.default_keep_countdown

        # A, D make a w_keep_countdown FOR powerhandle
        if key == Qt.Key_A:
            self.w_keep_countdown = self.default_keep_countdown

        if key == Qt.Key_D:
            self.w_keep_countdown = self.default_keep_countdown
                
    def keyPressEvent(self, event):
        if self.dashboard.rc_mode == True :
            if self.dashboard.ignore_eeg_input == True:
                self.ignore_eeg_input.setChecked(True)
                if event.key():
                    self.dashboard.set_key_input('Ignore')
                return
            else: 
                self.ignore_eeg_input.setChecked(False)

        # self.update_power_handle(event.key())

        if self.is_keep_mode(event.key()):
            return

        if event.key() == Qt.Key_S:
            self.dashboard.set_key_input('s')
            self.dashboard.stop()
            self.dashboard.set_start_accel(True)

        if event.key() == Qt.Key_W:
            self.dashboard.set_key_input('w')
            if self.dashboard.get_start_accel() == True:
                self.dashboard.start_accel_forward()
            else:
                self.dashboard.forward()

        if event.key() == Qt.Key_A:
            self.dashboard.set_key_input('a')
            if self.dashboard.get_start_accel() == True:
                self.dashboard.start_accel_turn_left()
            else:
                self.dashboard.turn_left()

        if event.key() == Qt.Key_X:
            self.dashboard.set_key_input('x')

            if self.dashboard.get_start_accel() == True:
                self.dashboard.start_accel_backward()
            else:
                self.dashboard.backward()

        if event.key() == Qt.Key_D:
            self.dashboard.set_key_input('d')
            if self.dashboard.get_start_accel() == True:
                self.dashboard.start_accel_turn_right()
            else:
                self.dashboard.turn_right()

        if event.key() == Qt.Key_B:
            self.dashboard.set_key_input('b')
            self.dashboard.brake()

        if event.key() == Qt.Key_R:
            self.dashboard.set_key_input('r')
            # TODO: Make Inspection Mode
            # self.dashboard.steering.position_clear()
            #pot = self.dashboard.wheel.get_steering_pot()
            #self.dashboard.steering.middle_position(pot)

        if event.key() == Qt.Key_F:
            if self.dashboard.isFullScreen():
                for i in range(self.layout.count()):
                    w = self.layout.itemAt(i).widget()
                    w.show()
                self.dashboard.showNormal()
                self.change_backgroundcolor(self.default_backgroundcolor);
                self.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.WindowTitleHint)
                self.showNormal()
            else:
                for i in range(self.layout.count()):
                    w = self.layout.itemAt(i).widget()
                    if w == self.dashboard:
                        continue
                    w.hide()
                self.change_backgroundcolor(Qt.black);
                self.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.FramelessWindowHint)
                self.showMaximized()
                self.dashboard.showFullScreen()

            self.dashboard.reset_label_position()

        if event.key() == Qt.Key_Escape:
            self.dashboard.close()
            self.close()

        self.go_to_keep_mode(event.key())

    def change_backgroundcolor(self, color):
        p = self.palette()
        p.setColor(self.backgroundRole(), color)
        self.setPalette(p)
Example #12
0
class Window(QMainWindow):
    def __init__(self, *args, **kwargs):
        QMainWindow.__init__(self, *args, **kwargs)
        self.installEventFilter(self)
        self.setWindowFlags(QtCore.Qt.Drawer)

        self.layoutWidget = QWidget()
        self.setCentralWidget(self.layoutWidget)

        self.layout = QVBoxLayout(self.layoutWidget)
        self.layout.setContentsMargins(5, 5, 5, 5)

        self.ui_labels = UI_labels()
        self.ui_driverAttr = UI_attrlist()
        #self.ui_options    = UI_options()
        self.ui_buttons = UI_buttons()
        self.layout.addWidget(self.ui_labels)
        self.layout.addWidget(self.ui_driverAttr)
        #self.layout.addWidget( self.ui_options )
        self.layout.addWidget(self.ui_buttons)

        def addLineCommand():

            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget(numItems - 2, attrlist)

        def connectCommand():

            import pymel.core
            cmds.undoInfo(ock=1)
            sels = pymel.core.ls(sl=1)
            numItems = self.layout.count()

            enumNames = []
            targetObjects = []

            attrName = 'mode'

            for i in range(1, numItems - 1):
                targetWidget = self.layout.itemAt(i).widget()
                eachEnumName = targetWidget.lineEdit_srcAttr.text()
                targetObject = pymel.core.ls(
                    targetWidget.lineEdit_dstAttr.text())[0]
                if not eachEnumName: continue
                enumNames.append(eachEnumName)
                targetObjects.append(targetObject)

            enumName = ':'.join(enumNames) + ':'
            addAttr(sels[-1], ln=attrName, at='enum', enumName=enumName, k=1)

            for i in range(len(targetObjects)):
                if not targetObjects[i]: continue
                condition = pymel.core.createNode('condition')
                sels[-1].attr(attrName) >> condition.firstTerm
                condition.secondTerm.set(i)
                condition.colorIfTrueR.set(1)
                condition.colorIfFalseR.set(0)
                condition.outColorR >> targetObjects[i].v

            cmds.undoInfo(cck=1)

        self.ui_buttons.button_connect.clicked.connect(connectCommand)
        self.ui_buttons.button_addLine.clicked.connect(addLineCommand)

    def eventFilter(self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type(
        ) == QtCore.QEvent.Move:
            pass
Example #13
0
class Window( QMainWindow ):
    
    def __init__(self, *args, **kwargs ):
        QMainWindow.__init__( self, *args, **kwargs )
        self.installEventFilter( self )
        self.setWindowFlags(QtCore.Qt.Drawer)

        self.layoutWidget = QWidget()
        self.setCentralWidget( self.layoutWidget )
        
        self.layout = QVBoxLayout( self.layoutWidget )
        self.layout.setContentsMargins( 5,5,5,5 )
        
        self.ui_labels     = UI_labels()
        self.ui_driverAttr = UI_attrlist()
        #self.ui_options    = UI_options()
        self.ui_buttons    = UI_buttons()
        self.layout.addWidget( self.ui_labels )
        self.layout.addWidget( self.ui_driverAttr )
        #self.layout.addWidget( self.ui_options )
        self.layout.addWidget( self.ui_buttons )


        def addLineCommand():
            
            numItems = self.layout.count()
            attrlist = UI_attrlist()
            self.layout.insertWidget( numItems-2, attrlist )
        
        
        def connectCommand():
            
            import pymel.core
            cmds.undoInfo( ock=1 )
            sels = pymel.core.ls( sl=1 )
            numItems = self.layout.count()
            
            enumNames     = []
            targetObjects = []
            
            attrName = 'mode'
            
            for i in range( 1, numItems-1 ):
                targetWidget = self.layout.itemAt( i ).widget()
                eachEnumName = targetWidget.lineEdit_srcAttr.text()
                targetObject = pymel.core.ls( targetWidget.lineEdit_dstAttr.text() )[0]
                if not eachEnumName: continue
                enumNames.append( eachEnumName )
                targetObjects.append( targetObject )
            
            enumName = ':'.join( enumNames ) + ':'
            addAttr( sels[-1], ln=attrName, at='enum', enumName = enumName, k=1 )
            
            for i in range( len( targetObjects ) ):
                if not targetObjects[i]: continue
                condition = pymel.core.createNode( 'condition' )
                sels[-1].attr( attrName ) >> condition.firstTerm
                condition.secondTerm.set( i )
                condition.colorIfTrueR.set( 1 )
                condition.colorIfFalseR.set( 0 )
                condition.outColorR >> targetObjects[i].v
                
            
            cmds.undoInfo( cck=1 )
            
        self.ui_buttons.button_connect.clicked.connect( connectCommand )
        self.ui_buttons.button_addLine.clicked.connect( addLineCommand )

    def eventFilter( self, *args, **kwargs):
        event = args[1]
        if event.type() == QtCore.QEvent.LayoutRequest or event.type() == QtCore.QEvent.Move :
            pass