def __init__(self, state, parent=None):
     '''
     Constructor
     '''
     QDialog.__init__(self, parent)
     self._ui = Ui_ConfigureDialog()
     self._ui.setupUi(self)
     
     self.setState(state)
     self.validate()
     self._makeConnections()
class ConfigureDialog(QDialog):
    '''
    Configure dialog to present the user with the options to configure this step.
    '''

    def __init__(self, state, parent=None):
        '''
        Constructor
        '''
        QDialog.__init__(self, parent)
        self._ui = Ui_ConfigureDialog()
        self._ui.setupUi(self)
        
        self.setState(state)
        self.validate()
        self._makeConnections()
        
    def _makeConnections(self):
        self._ui.geometricFieldButton.clicked.connect(self._geometricFieldButtonClicked)
        self._ui.ensembleButton.clicked.connect(self._ensembleButtonClicked)
        self._ui.meshButton.clicked.connect(self._meshButtonClicked)
        self._ui.geometricFieldLineEdit.textChanged.connect(self.validate)
        self._ui.ensembleLineEdit.textChanged.connect(self.validate)
        self._ui.meshLineEdit.textChanged.connect(self.validate)
        self._ui.identifierLineEdit.textChanged.connect(self.validate)
    
    def setState(self, state):
        self._ui.identifierLineEdit.setText(state._identifier)
        self._ui.geometricFieldLineEdit.setText(state._geometricFieldLocation)
        self._ui.ensembleLineEdit.setText(state._ensembleLocation)
        self._ui.meshLineEdit.setText(state._meshLocation)
    
    def getState(self):
        state = FieldworkModelData()
        state._identifier = self._ui.identifierLineEdit.text()
        state._geometricFieldLocation = self._ui.geometricFieldLineEdit.text()
        state._ensembleLocation = self._ui.ensembleLineEdit.text()
        state._meshLocation = self._ui.meshLineEdit.text()
        
        return state
        
    def validate(self):
        identifier_valid = len(self._ui.identifierLineEdit.text()) > 0
        if identifier_valid:
            self._ui.identifierLineEdit.setStyleSheet(DEFAULT_STYLE_SHEET)
        else:
            self._ui.identifierLineEdit.setStyleSheet(REQUIRED_STYLE_SHEET)
            
        geometricField_valid = len(self._ui.geometricFieldLineEdit.text()) > 0
        if geometricField_valid:
            self._ui.geometricFieldLineEdit.setStyleSheet(DEFAULT_STYLE_SHEET)
        else:
            self._ui.geometricFieldLineEdit.setStyleSheet(REQUIRED_STYLE_SHEET)

        ensemble_valid = len(self._ui.ensembleLineEdit.text()) > 0
        if ensemble_valid:
            self._ui.ensembleLineEdit.setStyleSheet(DEFAULT_STYLE_SHEET)
        else:
            self._ui.ensembleLineEdit.setStyleSheet(REQUIRED_STYLE_SHEET)

        mesh_valid = len(self._ui.meshLineEdit.text()) > 0
        if mesh_valid:
            self._ui.meshLineEdit.setStyleSheet(DEFAULT_STYLE_SHEET)
        else:
            self._ui.meshLineEdit.setStyleSheet(REQUIRED_STYLE_SHEET)

        valid = identifier_valid and geometricField_valid and ensemble_valid and mesh_valid
        self._ui.buttonBox.button(QDialogButtonBox.Ok).setEnabled(valid)

        return valid
    
    def _lineEditFile(self, line_edit):
        (fileName, _) = QFileDialog.getOpenFileName(self, 'Select Fieldwork File', self._ui.previousLocationLabel.text()) 
        
        if fileName:
            location = os.path.basename(fileName)
            self._ui.previousLocationLabel.setText(location)
            line_edit.setText(fileName)
            
        self.validate()
    
    def _geometricFieldButtonClicked(self):
        self._lineEditFile(self._ui.geometricFieldLineEdit)
    
    def _ensembleButtonClicked(self):
        self._lineEditFile(self._ui.ensembleLineEdit)

    def _meshButtonClicked(self):
        self._lineEditFile(self._ui.meshLineEdit)