Esempio n. 1
0
class ProjectSettingsWindow(QDialog):
    def __init__(self, parent=None):
        super(ProjectSettingsWindow, self).__init__(parent)

        self.setWindowTitle('Edit Project Data')
        self.setAttribute(Qt.WA_QuitOnClose, False)
        self.setModal(True)
        self.initUI()

    def initUI(self):
        '''
        Setup GUI elements of scale window
        '''
        mainLayout = QVBoxLayout()

        self.nameEdit = LineEdit()
        self.nameEdit.setPlaceholderText('Project Name')
        self.nameEdit.setValidator(
            QRegExpValidator(QRegExp('[^\\\*<>:"/\|?*]+')))
        self.nameEdit.textChanged.connect(self.checkFields)

        #horizontal layout containing save and cancel buttons
        hLayout = QHBoxLayout()
        self.saveButton = Button('Save')
        self.saveButton.clicked.connect(self.save)

        self.cancelButton = Button('Cancel')
        self.cancelButton.clicked.connect(self.cancel)

        hLayout.addWidget(self.saveButton)
        hLayout.addWidget(self.cancelButton)

        mainLayout.addWidget(self.nameEdit)
        mainLayout.addLayout(hLayout)

        self.setLayout(mainLayout)
        self.setModal(True)
        self.show()

    def checkFields(self):
        '''
        Check if all mandatory fields are entered
        '''
        if self.nameEdit.text():
            self.saveButton.setEnabled(True)
        else:
            self.saveButton.setEnabled(False)

    def save(self):
        '''
        Send data back to MainWindow to update project data
        '''
        self.parent().setProjectName(self.nameEdit.text())
        self.close()

    def cancel(self):
        '''
        Return to mouse tracker screen if cancel button is clicked
        '''
        self.close()
Esempio n. 2
0
class APIKeyWindow(QDialog):
    def __init__(self, parent=None):
        super(APIKeyWindow, self).__init__(parent)
        self.setWindowTitle('Enter API Key')
        self.setAttribute(Qt.WA_QuitOnClose, False)
        self.setModal(True)
        self.resize(400, 150)
        self.initUI()

    def initUI(self):
        '''
        Setup GUI elements of scale window
        '''
        mainLayout = QVBoxLayout()

        hLayout = QHBoxLayout()
        self.apiKeyEdit = LineEdit()
        self.apiKeyEdit.setPlaceholderText('Google API Key')
        self.apiKeyEdit.textChanged.connect(self.checkFields)

        self.helpButton = Button('?')
        self.helpButton.setMaximumWidth(25)
        self.helpButton.clicked.connect(lambda: webbrowser.open(
            'https://developers.google.com/maps/documentation/javascript/get-api-key'
        ))

        hLayout.addWidget(self.apiKeyEdit)
        hLayout.addWidget(self.helpButton)

        #horizontal layout containing save and cancel buttons
        h2Layout = QHBoxLayout()
        self.saveButton = Button('Save')
        self.saveButton.clicked.connect(self.save)

        self.cancelButton = Button('Cancel')
        self.cancelButton.clicked.connect(self.cancel)

        h2Layout.addWidget(self.saveButton)
        h2Layout.addWidget(self.cancelButton)

        mainLayout.addLayout(hLayout)
        mainLayout.addLayout(h2Layout)

        self.setLayout(mainLayout)
        self.setModal(True)
        self.show()

    def checkFields(self):
        '''
        Check if all mandatory fields are entered
        '''
        if self.apiKeyEdit.text():
            self.saveButton.setEnabled(True)

    def getConfirmedData(self):
        return self.apiKeyEdit.text()

    def save(self):
        '''
        Send scale and unit values entered by user back to mouse tracker
        screen when save button is clicked.
        '''
        self.accept()
        self.close()

    def cancel(self):
        '''
        Return to mouse tracker screen if cancel button is clicked
        '''
        self.reject()
        self.close()
Esempio n. 3
0
class ScaleWindow(QDialog):
    def __init__(self, dist_px, parent=None):
        super(ScaleWindow, self).__init__(parent)

        self.dist_px = dist_px
        self.scale = 1

        self.setWindowTitle('Scale')
        self.initUI()

    def initUI(self):
        '''
        Setup GUI elements of scale window
        '''
        mainLayout = QVBoxLayout()

        #horizontal layout containing lineedits, unit selector, and label
        hLayout = QHBoxLayout()
        self.pixelEdit = LineEdit(str(self.dist_px))
        self.pixelEdit.setValidator(QDoubleValidator(0.99, 1000.00, 2))
        self.pixelEdit.textChanged.connect(self.checkFields)
        self.scaleEdit = LineEdit(str(self.scale))
        self.scaleEdit.setValidator(QDoubleValidator(0.99, 1000.00, 2))
        self.scaleEdit.textChanged.connect(self.checkFields)

        label = QLabel('Pixels:')

        units = ['km', 'm', 'ft', 'mi']
        self.comboBox = QComboBox()
        self.comboBox.addItems(units)

        hLayout.addWidget(label)
        hLayout.addWidget(self.pixelEdit)
        hLayout.addWidget(self.scaleEdit)
        hLayout.addWidget(self.comboBox)

        #horizontal layout containing save and cancel buttons
        h2Layout = QHBoxLayout()
        self.saveButton = Button('Save')
        self.saveButton.clicked.connect(self.save)

        self.cancelButton = Button('Cancel')
        self.cancelButton.clicked.connect(self.cancel)

        h2Layout.addWidget(self.saveButton)
        h2Layout.addWidget(self.cancelButton)

        mainLayout.addLayout(hLayout)
        mainLayout.addLayout(h2Layout)

        self.setLayout(mainLayout)
        self.setModal(True)
        self.show()

    def checkFields(self):
        '''
        Check if all mandatory fields are entered
        '''
        if self.pixelEdit.text() and self.scaleEdit.text():
            self.saveButton.setEnabled(True)
        else:
            self.saveButton.setEnabled(False)

    def getConfirmedData(self):
        return self.pxPerUnit, self.units

    def save(self):
        '''
        Send scale and unit values entered by user back to mouse tracker
        screen when save button is clicked.
        '''
        #Get text values from each element
        self.scale = eval(self.scaleEdit.text())
        self.dist_px = eval(self.pixelEdit.text())
        self.units = self.comboBox.currentText()

        self.pxPerUnit = self.dist_px / self.scale

        #check values entered by user are correct
        if self.scale > 0 and self.dist_px > 0:
            self.accept()
            self.close()

    def cancel(self):
        '''
        Return to mouse tracker screen if cancel button is clicked
        '''
        self.reject()
        self.close()
Esempio n. 4
0
class LocationWindow(QDialog):
    def __init__(self, lat, lon, parent=None):
        super(LocationWindow, self).__init__(parent)
        self.lat = lat
        self.lon = lon

        #self.setFixedSize(300, 100)
        self.setWindowTitle('Confirm Location')
        self.setAttribute(Qt.WA_QuitOnClose, False)
        self.initUI()

    def initUI(self):
        '''
        Setup GUI elements of scale window
        '''
        mainLayout = QVBoxLayout()

        #horizontal layout containing lineedits, unit selector, and label
        hLayout = QHBoxLayout()
        self.latEdit = LineEdit(str(self.lat))
        self.latEdit.textChanged.connect(self.checkFields)
        hLayout.addWidget(self.latEdit)

        self.lonEdit = LineEdit(str(self.lon))
        self.lonEdit.textChanged.connect(self.checkFields)
        hLayout.addWidget(self.lonEdit)

        self.descBox = QTextEdit()
        self.descBox.setFixedHeight(100)
        self.descBox.setPlaceholderText('Description')

        #horizontal layout containing save and cancel buttons
        h2Layout = QHBoxLayout()
        self.saveButton = Button('Save')
        self.saveButton.clicked.connect(self.save)

        self.cancelButton = Button('Cancel')
        self.cancelButton.clicked.connect(self.cancel)

        h2Layout.addWidget(self.saveButton)
        h2Layout.addWidget(self.cancelButton)

        mainLayout.addLayout(hLayout)
        mainLayout.addWidget(self.descBox)
        mainLayout.addLayout(h2Layout)

        self.setLayout(mainLayout)
        self.setModal(True)
        self.show()

    def checkFields(self):
        '''
        Check if all mandatory fields are entered
        '''
        if self.latEdit.text() and self.lonEdit.text():
            self.saveButton.setEnabled(True)
        else:
            self.saveButton.setEnabled(False)

    def getConfirmedData(self):
        return {
            'Latitude':
            self.lat,
            'Longitude':
            self.lon,
            'Date':
            QDateTime().currentDateTime().toString('MM-dd-yyyy hh:mm:ss ap'),
            'Description':
            self.desc
        }

    def save(self):
        '''
        Send scale and unit values entered by user back to mouse mainwindow
        screen when save button is clicked.
        '''
        lat = self.latEdit.text()
        lon = self.lonEdit.text()
        self.desc = self.descBox.toPlainText()

        lat = self.latEdit.text()
        lon = self.lonEdit.text()

        try:
            point = Point(lat + ' ' + lon)
        except:
            QMessageBox.information(self, 'Point Location Error',
                                    f'Invalid location: ({lat}, {lon})')
        else:
            self.lat = round(point.latitude, 6)
            self.lon = round(point.longitude, 6)
            self.accept()
            self.close()

    def cancel(self):
        '''
        Return to mouse tracker screen if cancel button is clicked
        '''
        self.reject()
        self.close()
Esempio n. 5
0
class ReferenceWindow(QDialog):
    def __init__(self, parent=None):
        super(ReferenceWindow, self).__init__(parent)
        self.resize(400, 100)
        self.setWindowTitle('Add Reference Point')
        self.initUI()

    def initUI(self):
        '''
        Setup GUI elements of scale window
        '''
        mainLayout = QVBoxLayout()

        #horizontal layout containing lineedits, unit selector, and label
        hLayout = QHBoxLayout()

        self.latEdit = LineEdit()
        self.latEdit.setPlaceholderText('Latitude')
        self.latEdit.textChanged.connect(self.checkFields)

        self.lonEdit = LineEdit()
        self.lonEdit.setPlaceholderText('Longitude')
        self.lonEdit.textChanged.connect(self.checkFields)

        hLayout.addWidget(self.latEdit)
        hLayout.addWidget(self.lonEdit)

        #horizontal layout containing save and cancel buttons
        h2Layout = QHBoxLayout()
        self.saveButton = Button('Save')
        self.saveButton.clicked.connect(self.save)
        self.saveButton.setEnabled(False)

        self.cancelButton = Button('Cancel')
        self.cancelButton.clicked.connect(self.cancel)

        h2Layout.addWidget(self.saveButton)
        h2Layout.addWidget(self.cancelButton)

        mainLayout.addLayout(hLayout)
        mainLayout.addLayout(h2Layout)

        self.setLayout(mainLayout)
        self.setModal(True)
        self.show()

    def checkFields(self):
        '''
        Check if all mandatory fields are entered
        '''
        lat = self.latEdit.text()
        lon = self.lonEdit.text()

        if lat and lon:
            self.saveButton.setEnabled(True)
        else:
            self.saveButton.setEnabled(False)

    def getConfirmedData(self):
        return self.lat, self.lon

    def save(self):
        '''
        Send reference point back to main window to be stored
        '''
        lat = self.latEdit.text()
        lon = self.lonEdit.text()

        try:
            point = Point(lat + ' ' + lon)
        except:
            QMessageBox.information(
                self, 'Reference Point Error',
                f'Invalid reference point: ({lat}, {lon})')
        else:
            self.lat = round(point.latitude, 6)
            self.lon = round(point.longitude, 6)
            self.accept()
            self.close()

    def cancel(self):
        '''
        Return to mouse tracker screen if cancel button is clicked
        '''
        self.reject()
        self.close()