Example #1
0
    def __init__(self):
        super(MainWindow, self).__init__()

        self.currentPath = ''

        # The car's model, shared between the different views
        self.car = Car()

        # Socket (to connect with the car/Rpi)
        self.carSocket = CarSocket(self.car)

        # Setting the views
        self.automaticView = AutoView(self.car)
        self.manualView = ManualView(self.car)

        # File menu
        fileMenu = QMenu("&File", self)
        openAction = fileMenu.addAction("&Open...")
        openAction.setShortcut("Ctrl+O")

        saveAction = fileMenu.addAction("&Save...")
        saveAction.setShortcut("Ctrl+S")

        setScale = fileMenu.addAction("Set map's scale")
        setAngle = fileMenu.addAction("Set map's orientation")

        quitAction = fileMenu.addAction("E&xit")
        quitAction.setShortcut("Ctrl+Q")

        openAction.triggered.connect(self.openFile)
        saveAction.triggered.connect(self.saveMap)
        setScale.triggered.connect(self.setScale)
        setAngle.triggered.connect(self.setAngle)
        quitAction.triggered.connect(qApp.quit)

        self.menuBar().addMenu(fileMenu)

        # View menu
        viewMenu = QMenu("&View", self)
        self.backgroundAction = viewMenu.addAction("&Background")
        self.backgroundAction.setEnabled(True)
        self.backgroundAction.setCheckable(True)
        self.backgroundAction.setChecked(True)
        self.backgroundAction.toggled.connect(self.automaticView.setViewBackground)

        self.menuBar().addMenu(viewMenu)

        # Mode switching (automatic-manual) menu
        modeMenu = QMenu("&Mode", self)

        manualAction = modeMenu.addAction("M&anual")
        manualAction.setShortcut("Ctrl+M")
        manualAction.triggered.connect(self.manualMode)

        automaticAction = modeMenu.addAction("A&utomatic")
        automaticAction.setShortcut("Ctrl+A")
        automaticAction.triggered.connect(self.automaticMode)

        self.menuBar().addMenu(modeMenu)

        # Stacked widget (containing the auto. and manual view)
        self.stackedWidget = QStackedWidget()
        self.stackedWidget.addWidget(self.automaticView)
        self.stackedWidget.addWidget(self.manualView)

        self.setCentralWidget(self.stackedWidget)
        self.setMinimumSize(800, 600)

        # Configuration dialog
        loader = QUiLoader()
        file = QFile("config.ui")
        file.open(QFile.ReadOnly)
        self.config = loader.load(file)
        file.close()

        self.config.connectButton.clicked.connect(self.connectCar)
        self.config.buttonBox.accepted.connect(self.acceptConfig)
        self.config.buttonBox.rejected.connect(self.config.reject)
        self.config.buttonBox.button(QDialogButtonBox.RestoreDefaults).clicked.connect(self.resetConfig)
        self.config.resetParticles.clicked.connect(self.resetParticles)

        # Log dialog
        file = QFile("log.ui")
        file.open(QFile.ReadOnly)
        self.log = loader.load(file)
        file.close()

        self.log.saveButton.clicked.connect(self.saveLog)

        self.connect(self.carSocket, SIGNAL("logSignal(str, str)"), self, SLOT("addToLog(str, str)"))

        self.initLog()

        # Configuration button
        self.configButton = QPushButton("Configuration panel", parent=self.automaticView)
        self.configButton.clicked.connect(self.openConfigPanel)

        # Configuration button
        self.logButton = QPushButton("Car's log", parent=self.automaticView)
        self.logButton.clicked.connect(self.log.show)