def __init__(self, parent=None):
        super(NameWizardPage, self).__init__(parent)

        self.setTitle('Identify Workflow Step')
        self.setSubTitle(
            'Set the name and icon (optional) for the workflow step.')

        self._ui = Ui_Name()
        self._ui.setupUi(self)

        self._previous_location = ''

        self._invalidPixmap = QtGui.QPixmap(':wizard/images/cross.png')
        self._invalidNameLabel = QtGui.QLabel(self)
        self._invalidNameLabel.setStyleSheet('border: none; padding: 0px;')
        self._invalidPackageLabel = QtGui.QLabel(self)
        self._invalidPackageLabel.setStyleSheet('border: none; padding: 0px;')
        self._invalidIconLabel = QtGui.QLabel(self)
        self._invalidIconLabel.setStyleSheet('border: none; padding: 0px;')

        self._updateImage()

        self._makeConnections()
        self._defineFields()
        self._packageNameEdited = False
    def __init__(self, parent=None):
        super(NameWizardPage, self).__init__(parent)

        self.setTitle('Identify Workflow Step')
        self.setSubTitle('Set the name and icon (optional) for the workflow step.')

        self._ui = Ui_Name()
        self._ui.setupUi(self)

        self._invalidPixmap = QtGui.QPixmap(':wizard/images/cross.png')
        self._invalidNameLabel = QtGui.QLabel(self)
        self._invalidNameLabel.setStyleSheet('border: none; padding: 0px;')
        self._invalidPackageLabel = QtGui.QLabel(self)
        self._invalidPackageLabel.setStyleSheet('border: none; padding: 0px;')
        self._invalidIconLabel = QtGui.QLabel(self)
        self._invalidIconLabel.setStyleSheet('border: none; padding: 0px;')

        self._updateImage()

        self._makeConnections()
        self._defineFields()
        self._packageNameEdited = False
class NameWizardPage(QtGui.QWizardPage):
    def __init__(self, parent=None):
        super(NameWizardPage, self).__init__(parent)

        self.setTitle('Identify Workflow Step')
        self.setSubTitle(
            'Set the name and icon (optional) for the workflow step.')

        self._ui = Ui_Name()
        self._ui.setupUi(self)

        self._previous_location = ''

        self._invalidPixmap = QtGui.QPixmap(':wizard/images/cross.png')
        self._invalidNameLabel = QtGui.QLabel(self)
        self._invalidNameLabel.setStyleSheet('border: none; padding: 0px;')
        self._invalidPackageLabel = QtGui.QLabel(self)
        self._invalidPackageLabel.setStyleSheet('border: none; padding: 0px;')
        self._invalidIconLabel = QtGui.QLabel(self)
        self._invalidIconLabel.setStyleSheet('border: none; padding: 0px;')

        self._updateImage()

        self._makeConnections()
        self._defineFields()
        self._packageNameEdited = False

    def _defineFields(self):
        self.registerField(NAME_FIELD + '*', self._ui.nameLineEdit)
        self.registerField(PACKAGE_NAME_FIELD + '*',
                           self._ui.packageNameLineEdit)
        self.registerField(IMAGE_FILE_FIELD, self._ui.iconLineEdit)
        self.registerField(PREDEFINED_IMAGE_FIELD,
                           self._ui.comboBoxPresetIcons)
        self.registerField(ICON_PICTURE_LABEL_FIELD, self._ui.iconPictureLabel)

    def _makeConnections(self):
        self._ui.nameLineEdit.textChanged.connect(self._nameChanged)
        self._ui.nameLineEdit.textChanged.connect(self._updateImage)
        self._ui.packageNameLineEdit.textEdited.connect(
            self._packageNameChanged)
        self._ui.iconLineEdit.textChanged.connect(self._updateImage)
        self._ui.iconButton.clicked.connect(self._chooseImage)
        self._ui.comboBoxPresetIcons.currentIndexChanged.connect(
            self._selectPredefinedImage)

    def _nameChanged(self):
        if not self._packageNameEdited:
            package_name = convertNameToPythonPackage(
                self._ui.nameLineEdit.text())
            self._ui.packageNameLineEdit.setText(package_name)

        self.completeChanged.emit()

    def _packageNameChanged(self):
        self._packageNameEdited = True

    def _selectPredefinedImage(self, index):
        image_file = getPredefinedImageLocation(
            self._ui.comboBoxPresetIcons.currentText())
        self._ui.iconLineEdit.setText(image_file)

    def _chooseImage(self):
        image, _ = QtGui.QFileDialog.getOpenFileName(
            self,
            caption='Choose Image File',
            dir=self._previous_location,
            options=QtGui.QFileDialog.ReadOnly)
        if len(image) > 0:
            self._previous_location = os.path.dirname(image)
            self._ui.iconLineEdit.setText(image)

    def _updateImage(self):

        image_file = self._ui.iconLineEdit.text()
        if image_file:
            image = QtGui.QPixmap(image_file)

            predefined_image_file = getPredefinedImageLocation(
                self._ui.comboBoxPresetIcons.currentText())
            if predefined_image_file == image_file:
                image = self._combineImageWithBackground(image.toImage())
                image = QtGui.QPixmap.fromImage(image)

            if image:
                self._ui.iconPictureLabel.setPixmap(
                    image.scaled(64,
                                 64,
                                 aspectRatioMode=QtCore.Qt.KeepAspectRatio,
                                 transformMode=QtCore.Qt.FastTransformation))
        else:
            image = QtGui.QImage(':icons/images/default.png')
            image = self._combineImageWithBackground(image)
            self._ui.iconPictureLabel.setPixmap(
                QtGui.QPixmap.fromImage(image).scaled(
                    64,
                    64,
                    aspectRatioMode=QtCore.Qt.KeepAspectRatio,
                    transformMode=QtCore.Qt.FastTransformation))

        self.completeChanged.emit()

    def _combineImageWithBackground(self, image):
        background_image = QtGui.QImage(':icons/images/icon-background.png')
        painter = QtGui.QPainter(background_image)

        painter.drawImage(QtCore.QPoint(0, 0), image)
        painter.end()

        return background_image

    def setPreviousLocation(self, location):
        self._previous_location = location

    def resizeEvent(self, event):
        rect = self._ui.nameLineEdit.rect()
        pos = self._ui.nameLineEdit.pos()
        self._invalidNameLabel.setPixmap(
            self._invalidPixmap.scaledToHeight(rect.height() / 2))
        self._invalidNameLabel.move(pos.x() - rect.height() / 2,
                                    pos.y() + rect.height() / 4)
        self._invalidNameLabel.setFixedSize(self._invalidNameLabel.sizeHint())
        rect = self._ui.packageNameLineEdit.rect()
        pos = self._ui.packageNameLineEdit.pos()
        self._invalidPackageLabel.setPixmap(
            self._invalidPixmap.scaledToHeight(rect.height() / 2))
        self._invalidPackageLabel.move(pos.x() - rect.height() / 2,
                                       pos.y() + rect.height() / 4)
        self._invalidPackageLabel.setFixedSize(
            self._invalidPackageLabel.sizeHint())
        rect = self._ui.iconLineEdit.rect()
        pos = self._ui.iconLineEdit.pos()
        self._invalidIconLabel.setPixmap(
            self._invalidPixmap.scaledToHeight(rect.height() / 2))
        self._invalidIconLabel.move(pos.x() - rect.height() / 2,
                                    pos.y() + rect.height() / 4)
        self._invalidIconLabel.setFixedSize(self._invalidIconLabel.sizeHint())

    def isComplete(self):
        name_status = False
        if len(self._ui.nameLineEdit.text()) > 0:
            name_status = True

        package_status = isIdentifier(str(self._ui.packageNameLineEdit.text()))

        image_status = os.path.exists(self._ui.iconLineEdit.text()) if len(
            self._ui.iconLineEdit.text()) > 0 else True

        self._invalidNameLabel.setVisible(not name_status)
        self._invalidPackageLabel.setVisible(not package_status)
        self._invalidIconLabel.setVisible(not image_status)

        return name_status and package_status and image_status
class NameWizardPage(QtGui.QWizardPage):

    def __init__(self, parent=None):
        super(NameWizardPage, self).__init__(parent)

        self.setTitle('Identify Workflow Step')
        self.setSubTitle('Set the name and icon (optional) for the workflow step.')

        self._ui = Ui_Name()
        self._ui.setupUi(self)

        self._invalidPixmap = QtGui.QPixmap(':wizard/images/cross.png')
        self._invalidNameLabel = QtGui.QLabel(self)
        self._invalidNameLabel.setStyleSheet('border: none; padding: 0px;')
        self._invalidPackageLabel = QtGui.QLabel(self)
        self._invalidPackageLabel.setStyleSheet('border: none; padding: 0px;')
        self._invalidIconLabel = QtGui.QLabel(self)
        self._invalidIconLabel.setStyleSheet('border: none; padding: 0px;')

        self._updateImage()

        self._makeConnections()
        self._defineFields()
        self._packageNameEdited = False

    def _defineFields(self):
        self.registerField(NAME_FIELD, self._ui.nameLineEdit)
        self.registerField(PACKAGE_NAME_FIELD, self._ui.packageNameLineEdit)
        self.registerField(IMAGE_FILE_FIELD, self._ui.iconLineEdit)

    def _makeConnections(self):
        self._ui.nameLineEdit.textChanged.connect(self._nameChanged)
        self._ui.nameLineEdit.textChanged.connect(self._updateImage)
        self._ui.packageNameLineEdit.textEdited.connect(self._packageNameChanged)
        self._ui.iconLineEdit.textChanged.connect(self._updateImage)
        self._ui.iconButton.clicked.connect(self._chooseImage)

    def _nameChanged(self):
        self.completeChanged.emit()
        if not self._packageNameEdited:
            package_name = self._ui.nameLineEdit.text().lower()
            package_name = package_name.replace(' ', '')
            self._ui.packageNameLineEdit.setText(package_name + 'step')

    def _packageNameChanged(self):
        self._packageNameEdited = True

    def _chooseImage(self):
        image, _ = QtGui.QFileDialog.getOpenFileName(self, caption='Choose Image File', options=QtGui.QFileDialog.ReadOnly)
        if len(image) > 0:
            self._ui.iconLineEdit.setText(image)

    def _updateImage(self):

        image_file = self._ui.iconLineEdit.text()
        if image_file:
            image = QtGui.QPixmap(image_file)
            if image:
                self._ui.iconPictureLabel.setPixmap(image.scaled(64, 64, aspectRatioMode=QtCore.Qt.KeepAspectRatio, transformMode=QtCore.Qt.FastTransformation))
        else:
            image = createDefaultImageIcon(self._ui.nameLineEdit.text())
            self._ui.iconPictureLabel.setPixmap(QtGui.QPixmap.fromImage(image).scaled(64, 64, aspectRatioMode=QtCore.Qt.KeepAspectRatio, transformMode=QtCore.Qt.FastTransformation))

        self.completeChanged.emit()

    def resizeEvent(self, event):
        rect = self._ui.nameLineEdit.rect()
        pos = self._ui.nameLineEdit.pos()
        self._invalidNameLabel.setPixmap(self._invalidPixmap.scaledToHeight(rect.height() / 2))
        self._invalidNameLabel.move(pos.x() - rect.height() / 2, pos.y() + rect.height() / 4)
        self._invalidNameLabel.setFixedSize(self._invalidNameLabel.sizeHint())
        rect = self._ui.packageNameLineEdit.rect()
        pos = self._ui.packageNameLineEdit.pos()
        self._invalidPackageLabel.setPixmap(self._invalidPixmap.scaledToHeight(rect.height() / 2))
        self._invalidPackageLabel.move(pos.x() - rect.height() / 2, pos.y() + rect.height() / 4)
        self._invalidPackageLabel.setFixedSize(self._invalidPackageLabel.sizeHint())
        rect = self._ui.iconLineEdit.rect()
        pos = self._ui.iconLineEdit.pos()
        self._invalidIconLabel.setPixmap(self._invalidPixmap.scaledToHeight(rect.height() / 2))
        self._invalidIconLabel.move(pos.x() - rect.height() / 2, pos.y() + rect.height() / 4)
        self._invalidIconLabel.setFixedSize(self._invalidIconLabel.sizeHint())

    def isComplete(self):
        name_status = False
        if len(self._ui.nameLineEdit.text()) > 0:
            name_status = True

        package_status = isValidPythonPackageName(self._ui.packageNameLineEdit.text())

        image_status = os.path.exists(self._ui.iconLineEdit.text()) if len(self._ui.iconLineEdit.text()) > 0 else True

        self._invalidNameLabel.setVisible(not name_status)
        self._invalidPackageLabel.setVisible(not package_status)
        self._invalidIconLabel.setVisible(not image_status)

        return name_status and package_status and image_status