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.elementButton.clicked.connect(self._elementButtonClicked)
        self._ui.nodeButton.clicked.connect(self._nodeButtonClicked)
        self._ui.elementLineEdit.textChanged.connect(self.validate)
        self._ui.nodeLineEdit.textChanged.connect(self.validate)
        self._ui.identifierLineEdit.textChanged.connect(self.validate)
    
    def setState(self, state):
        self._ui.identifierLineEdit.setText(state._identifier)
        self._ui.elementLineEdit.setText(state._elementLocation)
        self._ui.nodeLineEdit.setText(state._nodeLocation)
    
    def getState(self):
        state = ZincModelData()
        state._identifier = self._ui.identifierLineEdit.text()
        state._elementLocation = self._ui.elementLineEdit.text()
        state._nodeLocation = self._ui.nodeLineEdit.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)
            
        element_valid = len(self._ui.elementLineEdit.text()) > 0
        if element_valid:
            self._ui.elementLineEdit.setStyleSheet(DEFAULT_STYLE_SHEET)
        else:
            self._ui.elementLineEdit.setStyleSheet(REQUIRED_STYLE_SHEET)

        valid = identifier_valid and element_valid
        self._ui.buttonBox.button(QDialogButtonBox.Ok).setEnabled(valid)

        return valid
    
    def _lineEditFile(self, line_edit):
        (fileName, _) = QFileDialog.getOpenFileName(self, 'Select Zinc File', self._ui.previousLocationLabel.text()) 
        
        if fileName:
            location = os.path.basename(fileName)
            self._ui.previousLocationLabel.setText(location)
            line_edit.setText(fileName)
            
        self.validate()
    
    def _elementButtonClicked(self):
        self._lineEditFile(self._ui.elementLineEdit)
    
    def _nodeButtonClicked(self):
        self._lineEditFile(self._ui.nodeLineEdit)