예제 #1
0
class MainDialog(QtWidgets.QDialog, AnimaDialogBase):
    """The ImageFormat Dialog
    """
    def __init__(self, parent=None, image_format=None):
        super(MainDialog, self).__init__(parent=parent)

        self.vertical_layout = None
        self.dialog_label = None
        self.line = None
        self.form_layout = None
        self.name_fields_vertical_layout = None
        self.name_validator_label = None
        self.width_height_label = None
        self.horizontal_layout = None
        self.width_spin_box = None
        self.label = None
        self.height_spin_box = None
        self.pixel_aspect_label = None
        self.pixel_aspect_double_spin_box = None
        self.name_label = None
        self.button_box = None

        self.setup_ui()

        self.image_format = image_format
        self.mode = 'Create'
        if self.image_format:
            self.mode = 'Update'

        self.dialog_label.setText('%s Image Format' % self.mode)

        # create name_line_edit
        from anima.ui.widgets import ValidatedLineEdit
        self.name_line_edit = ValidatedLineEdit(
            message_field=self.name_validator_label)
        self.name_line_edit.setPlaceholderText('Enter Name')
        self.name_fields_vertical_layout.insertWidget(0, self.name_line_edit)

        self._setup_signals()

        self._set_defaults()

        if self.image_format:
            self.fill_ui_with_image_format(self.image_format)

    def setup_ui(self):
        self.resize(328, 184)
        self.vertical_layout = QtWidgets.QVBoxLayout(self)
        self.dialog_label = QtWidgets.QLabel(self)
        self.dialog_label.setStyleSheet("color: rgb(71, 143, 202);\n"
                                        "font: 18pt;")
        self.vertical_layout.addWidget(self.dialog_label)
        self.line = QtWidgets.QFrame(self)
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.vertical_layout.addWidget(self.line)
        self.form_layout = QtWidgets.QFormLayout()
        self.form_layout.setLabelAlignment(QtCore.Qt.AlignRight
                                           | QtCore.Qt.AlignTrailing
                                           | QtCore.Qt.AlignVCenter)
        self.name_fields_vertical_layout = QtWidgets.QVBoxLayout()
        self.name_validator_label = QtWidgets.QLabel(self)
        self.name_validator_label.setStyleSheet("color: rgb(255, 0, 0);")
        self.name_fields_vertical_layout.addWidget(self.name_validator_label)
        self.form_layout.setLayout(0, QtWidgets.QFormLayout.FieldRole,
                                   self.name_fields_vertical_layout)
        self.width_height_label = QtWidgets.QLabel(self)
        self.form_layout.setWidget(1, QtWidgets.QFormLayout.LabelRole,
                                   self.width_height_label)
        self.horizontal_layout = QtWidgets.QHBoxLayout()
        self.width_spin_box = QtWidgets.QSpinBox(self)
        self.width_spin_box.setMaximum(99999)
        self.horizontal_layout.addWidget(self.width_spin_box)
        self.label = QtWidgets.QLabel(self)
        self.horizontal_layout.addWidget(self.label)
        self.height_spin_box = QtWidgets.QSpinBox(self)
        self.height_spin_box.setMaximum(99999)
        self.horizontal_layout.addWidget(self.height_spin_box)
        self.horizontal_layout.setStretch(0, 1)
        self.horizontal_layout.setStretch(2, 1)
        self.form_layout.setLayout(1, QtWidgets.QFormLayout.FieldRole,
                                   self.horizontal_layout)
        self.pixel_aspect_label = QtWidgets.QLabel(self)
        self.form_layout.setWidget(2, QtWidgets.QFormLayout.LabelRole,
                                   self.pixel_aspect_label)
        self.pixel_aspect_double_spin_box = QtWidgets.QDoubleSpinBox(self)
        self.pixel_aspect_double_spin_box.setProperty("value", 1.0)
        self.form_layout.setWidget(2, QtWidgets.QFormLayout.FieldRole,
                                   self.pixel_aspect_double_spin_box)
        self.name_label = QtWidgets.QLabel(self)
        self.form_layout.setWidget(0, QtWidgets.QFormLayout.LabelRole,
                                   self.name_label)
        self.vertical_layout.addLayout(self.form_layout)
        self.button_box = QtWidgets.QDialogButtonBox(self)
        self.button_box.setOrientation(QtCore.Qt.Horizontal)
        self.button_box.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel
                                           | QtWidgets.QDialogButtonBox.Ok)
        self.vertical_layout.addWidget(self.button_box)
        self.vertical_layout.setStretch(2, 1)

        QtCore.QObject.connect(self.button_box, QtCore.SIGNAL("accepted()"),
                               self.accept)
        QtCore.QObject.connect(self.button_box, QtCore.SIGNAL("rejected()"),
                               self.reject)
        QtCore.QMetaObject.connectSlotsByName(self)

        self.setWindowTitle("Image Format Dialog")
        self.dialog_label.setText("Create Image Format")
        self.name_validator_label.setText("Validator Message")
        self.width_height_label.setText("Width x Height")
        self.label.setText("x")
        self.pixel_aspect_label.setText("Pixel Aspect")
        self.name_label.setText("Name")

    def _setup_signals(self):
        """create the signals
        """
        # name_line_edit is changed
        QtCore.QObject.connect(self.name_line_edit,
                               QtCore.SIGNAL('textChanged(QString)'),
                               self.name_line_edit_changed)

    def _set_defaults(self):
        """sets the default values
        """
        pass

    def name_line_edit_changed(self, text):
        """runs when the name_line_edit text has changed
        """
        if re.findall(r'[^a-zA-Z0-9\-_. ]+', text):
            self.name_line_edit.set_invalid('Invalid character')
        else:
            if text == '':
                self.name_line_edit.set_invalid('Enter a name')
            else:
                self.name_line_edit.set_valid()

    def fill_ui_with_image_format(self, image_format):
        """fills the UI with the given image_format

        :param image_format: A Stalker ImageFormat instance
        :return:
        """
        if False:
            from stalker import ImageFormat
            assert isinstance(image_format, ImageFormat)

        self.image_format = image_format
        self.name_line_edit.setText(self.image_format.name)
        self.name_line_edit.set_valid()

        self.width_spin_box.setValue(self.image_format.width)
        self.height_spin_box.setValue(self.image_format.height)
        self.pixel_aspect_double_spin_box.setValue(
            self.image_format.pixel_aspect)

    def accept(self):
        """overridden accept method
        """
        if not self.name_line_edit.is_valid:
            QtWidgets.QMessageBox.critical(self, 'Error',
                                           'Please fix <b>name</b> field!')
            return
        name = self.name_line_edit.text()

        width = self.width_spin_box.value()
        height = self.height_spin_box.value()
        pixel_aspect = self.pixel_aspect_double_spin_box.value()

        from stalker import ImageFormat
        from stalker.db.session import DBSession
        logged_in_user = self.get_logged_in_user()
        if self.mode == 'Create':
            # Create a new Image Format
            try:
                imf = ImageFormat(name=name,
                                  width=width,
                                  height=height,
                                  pixel_aspect=pixel_aspect,
                                  created_by=logged_in_user)
                self.image_format = imf
                DBSession.add(imf)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(self, 'Error', str(e))
                return

        elif self.mode == 'Update':
            # Update the image format
            try:
                self.image_format.name = name
                self.image_format.width = width
                self.image_format.height = height
                self.image_format.pixel_aspect = pixel_aspect
                self.image_format.updated_by = logged_in_user
                DBSession.add(self.image_format)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(self, 'Error', str(e))
                return

        super(MainDialog, self).accept()
예제 #2
0
class MainDialog(QtWidgets.QDialog, AnimaDialogBase):
    """The ImageFormat Dialog
    """

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

        self.vertical_layout = None
        self.dialog_label = None
        self.line = None
        self.form_layout = None
        self.name_fields_vertical_layout = None
        self.name_validator_label = None
        self.width_height_label = None
        self.horizontal_layout = None
        self.width_spin_box = None
        self.label = None
        self.height_spin_box = None
        self.pixel_aspect_label = None
        self.pixel_aspect_double_spin_box = None
        self.name_label = None
        self.button_box = None

        self.setup_ui()

        self.image_format = image_format
        self.mode = 'Create'
        if self.image_format:
            self.mode = 'Update'

        self.dialog_label.setText('%s Image Format' % self.mode)

        # create name_lineEdit
        from anima.ui.widgets import ValidatedLineEdit
        self.name_line_edit = ValidatedLineEdit(
            message_field=self.name_validator_label
        )
        self.name_line_edit.setPlaceholderText('Enter Name')
        self.name_fields_vertical_layout.insertWidget(
            0, self.name_line_edit
        )

        self._setup_signals()

        self._set_defaults()

        if self.image_format:
            self.fill_ui_with_image_format(self.image_format)

    def setup_ui(self):
        self.resize(328, 184)
        self.vertical_layout = QtWidgets.QVBoxLayout(self)
        self.dialog_label = QtWidgets.QLabel(self)
        self.dialog_label.setStyleSheet("color: rgb(71, 143, 202);\n"
                                        "font: 18pt;")
        self.vertical_layout.addWidget(self.dialog_label)
        self.line = QtWidgets.QFrame(self)
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.vertical_layout.addWidget(self.line)
        self.form_layout = QtWidgets.QFormLayout()
        self.form_layout.setLabelAlignment(
            QtCore.Qt.AlignRight |
            QtCore.Qt.AlignTrailing |
            QtCore.Qt.AlignVCenter
        )
        self.name_fields_vertical_layout = QtWidgets.QVBoxLayout()
        self.name_validator_label = QtWidgets.QLabel(self)
        self.name_validator_label.setStyleSheet("color: rgb(255, 0, 0);")
        self.name_fields_vertical_layout.addWidget(
            self.name_validator_label)
        self.form_layout.setLayout(
            0,
            QtWidgets.QFormLayout.FieldRole,
            self.name_fields_vertical_layout
        )
        self.width_height_label = QtWidgets.QLabel(self)
        self.form_layout.setWidget(
            1,
            QtWidgets.QFormLayout.LabelRole,
            self.width_height_label
        )
        self.horizontal_layout = QtWidgets.QHBoxLayout()
        self.width_spin_box = QtWidgets.QSpinBox(self)
        self.width_spin_box.setMaximum(99999)
        self.horizontal_layout.addWidget(self.width_spin_box)
        self.label = QtWidgets.QLabel(self)
        self.horizontal_layout.addWidget(self.label)
        self.height_spin_box = QtWidgets.QSpinBox(self)
        self.height_spin_box.setMaximum(99999)
        self.horizontal_layout.addWidget(self.height_spin_box)
        self.horizontal_layout.setStretch(0, 1)
        self.horizontal_layout.setStretch(2, 1)
        self.form_layout.setLayout(
            1,
            QtWidgets.QFormLayout.FieldRole,
            self.horizontal_layout
        )
        self.pixel_aspect_label = QtWidgets.QLabel(self)
        self.form_layout.setWidget(
            2,
            QtWidgets.QFormLayout.LabelRole,
            self.pixel_aspect_label
        )
        self.pixel_aspect_double_spin_box = QtWidgets.QDoubleSpinBox(self)
        self.pixel_aspect_double_spin_box.setProperty("value", 1.0)
        self.form_layout.setWidget(
            2,
            QtWidgets.QFormLayout.FieldRole,
            self.pixel_aspect_double_spin_box
        )
        self.name_label = QtWidgets.QLabel(self)
        self.form_layout.setWidget(
            0,
            QtWidgets.QFormLayout.LabelRole,
            self.name_label
        )
        self.vertical_layout.addLayout(self.form_layout)
        self.button_box = QtWidgets.QDialogButtonBox(self)
        self.button_box.setOrientation(QtCore.Qt.Horizontal)
        self.button_box.setStandardButtons(
            QtWidgets.QDialogButtonBox.Cancel | QtWidgets.QDialogButtonBox.Ok)
        self.vertical_layout.addWidget(self.button_box)
        self.vertical_layout.setStretch(2, 1)

        QtCore.QObject.connect(
            self.button_box,
            QtCore.SIGNAL("accepted()"),
            self.accept
        )
        QtCore.QObject.connect(
            self.button_box,
            QtCore.SIGNAL("rejected()"),
            self.reject
        )
        QtCore.QMetaObject.connectSlotsByName(self)

        self.setWindowTitle("Image Format Dialog")
        self.dialog_label.setText("Create Image Format")
        self.name_validator_label.setText("Validator Message")
        self.width_height_label.setText("Width x Height")
        self.label.setText("x")
        self.pixel_aspect_label.setText("Pixel Aspect")
        self.name_label.setText("Name")

    def _setup_signals(self):
        """create the signals
        """
        # name_lineEdit is changed
        QtCore.QObject.connect(
            self.name_line_edit,
            QtCore.SIGNAL('textChanged(QString)'),
            self.name_line_edit_changed
        )

    def _set_defaults(self):
        """sets the default values
        """
        pass

    def name_line_edit_changed(self, text):
        """runs when the name_lineEdit text has changed
        """
        if re.findall(r'[^a-zA-Z0-9\-_ ]+', text):
            self.name_line_edit.set_invalid('Invalid character')
        else:
            if text == '':
                self.name_line_edit.set_invalid('Enter a name')
            else:
                self.name_line_edit.set_valid()

    def fill_ui_with_image_format(self, image_format):
        """fills the UI with the given image_format

        :param image_format: A Stalker ImageFormat instance
        :return:
        """
        if False:
            from stalker import ImageFormat
            assert isinstance(image_format, ImageFormat)

        self.image_format = image_format
        self.name_line_edit.setText(self.image_format.name)
        self.name_line_edit.set_valid()

        self.width_spin_box.setValue(self.image_format.width)
        self.height_spin_box.setValue(self.image_format.height)
        self.pixel_aspect_double_spin_box.setValue(
            self.image_format.pixel_aspect
        )

    def accept(self):
        """overridden accept method
        """
        if not self.name_line_edit.is_valid:
            QtWidgets.QMessageBox.critical(
                self,
                'Error',
                'Please fix <b>name</b> field!'
            )
            return
        name = self.name_line_edit.text()

        width = self.width_spin_box.value()
        height = self.height_spin_box.value()
        pixel_aspect = self.pixel_aspect_double_spin_box.value()

        from stalker import ImageFormat
        from stalker.db.session import DBSession
        logged_in_user = self.get_logged_in_user()
        if self.mode == 'Create':
            # Create a new Image Format
            try:
                imf = ImageFormat(
                    name=name,
                    width=width,
                    height=height,
                    pixel_aspect=pixel_aspect,
                    created_by=logged_in_user
                )
                self.image_format = imf
                DBSession.add(imf)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(
                    self,
                    'Error',
                    str(e)
                )
                return

        elif self.mode == 'Update':
            # Update the image format
            try:
                self.image_format.name = name
                self.image_format.width = width
                self.image_format.height = height
                self.image_format.pixel_aspect = pixel_aspect
                self.image_format.updated_by = logged_in_user
                DBSession.add(self.image_format)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(
                    self,
                    'Error',
                    str(e)
                )
                return

        super(MainDialog, self).accept()
예제 #3
0
class MainDialog(QtWidgets.QDialog, structure_dialog_UI.Ui_Dialog, AnimaDialogBase):
    """The structure Dialog
    """

    def __init__(self, parent=None, structure=None):
        super(MainDialog, self).__init__(parent=parent)
        self.setupUi(self)

        self.structure = structure

        self.mode = 'Create'

        if self.structure:
            self.mode = 'Update'

        self.dialog_label.setText('%s Structure' % self.mode)

        # create name_line_edit
        from anima.ui.widgets import ValidatedLineEdit
        self.name_line_edit = ValidatedLineEdit(
            message_field=self.name_validator_label
        )
        self.name_line_edit.setPlaceholderText('Enter Name')
        self.name_fields_verticalLayout.insertWidget(
            0, self.name_line_edit
        )

        # create DoubleListWidget
        from anima.ui.widgets import DoubleListWidget
        self.filename_templates_double_list_widget = DoubleListWidget(
            dialog=self,
            parent_layout=self.filename_template_fields_verticalLayout,
            primary_label_text='Templates From DB',
            secondary_label_text='Selected Templates'
        )
        # set the tooltip
        self.filename_templates_double_list_widget\
            .primary_list_widget.setToolTip(
                "Right Click to Create/Update FilenameTemplates"
            )
        self.filename_templates_double_list_widget\
            .secondary_list_widget.setToolTip(
                "Right Click to Create/Update FilenameTemplates"
            )

        self._setup_signals()

        self._set_defaults()

        if self.structure:
            self.fill_ui_with_structure(self.structure)

    def _setup_signals(self):
        """create the signals
        """
        # name_line_edit is changed
        QtCore.QObject.connect(
            self.name_line_edit,
            QtCore.SIGNAL('textChanged(QString)'),
            self.name_line_edit_changed
        )

        # add context menu for primary items in DoubleListWidget
        self.filename_templates_double_list_widget\
            .primary_list_widget\
            .setContextMenuPolicy(QtCore.Qt.CustomContextMenu)

        QtCore.QObject.connect(
            self.filename_templates_double_list_widget.primary_list_widget,
            QtCore.SIGNAL("customContextMenuRequested(const QPoint&)"),
            self.show_primary_filename_template_context_menu
        )

        # add context menu for secondary items in DoubleListWidget
        self.filename_templates_double_list_widget\
            .secondary_list_widget\
            .setContextMenuPolicy(QtCore.Qt.CustomContextMenu)

        QtCore.QObject.connect(
            self.filename_templates_double_list_widget.secondary_list_widget,
            QtCore.SIGNAL("customContextMenuRequested(const QPoint&)"),
            self.show_secondary_filename_template_context_menu
        )

    def _set_defaults(self):
        """sets the default values
        """
        # fill filename_templates_from_db_listWidget
        # add all the other filename templates from the database
        from stalker import FilenameTemplate
        fts = FilenameTemplate.query.all()

        self.filename_templates_double_list_widget.clear()
        self.filename_templates_double_list_widget.add_primary_items(
            map(
                lambda x: '%s (%s) (%s)' % (x.name,
                                            x.target_entity_type,
                                            x.id),
                fts
            )
        )

    def name_line_edit_changed(self, text):
        """runs when the name_line_edit text has changed
        """
        if re.findall(r'[^a-zA-Z0-9\-_ ]+', text):
            self.name_line_edit.set_invalid('Invalid character')
        else:
            if text == '':
                self.name_line_edit.set_invalid('Enter a name')
            else:
                self.name_line_edit.set_valid()

    def fill_ui_with_structure(self, structure):
        """fills the UI with the given structure

        :param structure: A Stalker ImageFormat instance
        :return:
        """
        if False:
            from stalker import Structure
            assert isinstance(structure, Structure)

        self.structure = structure
        self.name_line_edit.setText(self.structure.name)
        self.name_line_edit.set_valid()

        self.custom_template_plainTextEdit.setPlainText(
            self.structure.custom_template
        )

        # add the structure templates to the secondary list of the double list
        self.filename_templates_double_list_widget.clear()
        self.filename_templates_double_list_widget.add_secondary_items(
            map(
                lambda x: '%s (%s) (%s)' % (x.name,
                                            x.target_entity_type,
                                            x.id),
                self.structure.templates
            )
        )

        # add all the other filename templates from the database
        from stalker import FilenameTemplate
        fts = FilenameTemplate.query\
            .filter(
                ~FilenameTemplate.id.in_(
                    map(lambda x: x.id, self.structure.templates)
                )
            )\
            .all()

        self.filename_templates_double_list_widget.add_primary_items(
            map(
                lambda x: '%s (%s) (%s)' % (x.name,
                                            x.target_entity_type,
                                            x.id),
                fts
            )
        )

    def show_primary_filename_template_context_menu(self, position):
        """shows the custom context menu for primary list widget

        :param position:
        :return:
        """
        self.show_filename_template_context_menu(
            self.filename_templates_double_list_widget.primary_list_widget,
            position
        )

    def show_secondary_filename_template_context_menu(self, position):
        """shows the custom context menu for secondary list widget

        :param position:
        :return:
        """
        self.show_filename_template_context_menu(
            self.filename_templates_double_list_widget.secondary_list_widget,
            position
        )

    def show_filename_template_context_menu(self, list_widget, position):
        """shows a context menu for the given list_widget

        :param list_widget: QListWidget instance
        :param position: the mouse click position
        :return:
        """
        item = list_widget.itemAt(position)

        menu = QtWidgets.QMenu()
        menu.addAction('Create FilenameTemplate...')
        if item:
            menu.addAction('Update FilenameTemplate...')

        global_position = list_widget.mapToGlobal(position)
        selected_item = menu.exec_(global_position)

        try:
            # PySide
            accepted = QtWidgets.QDialog.DialogCode.Accepted
        except AttributeError:
            # PyQt4
            accepted = QtWidgets.QDialog.Accepted

        if selected_item:
            choice = selected_item.text()
            if choice == 'Create FilenameTemplate...':
                from anima.ui import filename_template_dialog
                create_filename_template_dialog = \
                    filename_template_dialog.MainDialog(parent=self)
                create_filename_template_dialog.exec_()

                if create_filename_template_dialog.result() == accepted:
                    ft = create_filename_template_dialog.filename_template
                    list_widget.addItem(
                        '%s (%s) (%s)' % (ft.name,
                                          ft.target_entity_type,
                                          ft.id)
                    )
                create_filename_template_dialog.deleteLater()

            elif choice == 'Update FilenameTemplate...':
                ft_id = int(item.text().split('(')[-1].split(')')[0])
                if not ft_id:
                    return

                from stalker import FilenameTemplate
                ft = FilenameTemplate.query.get(ft_id)
    
                from anima.ui import filename_template_dialog
                update_filename_template_dialog = \
                    filename_template_dialog.MainDialog(
                        parent=self,
                        filename_template=ft
                    )
                try:
                    update_filename_template_dialog.exec_()
                    if update_filename_template_dialog.result() == accepted:
                        # update the text of the item
                        ft = update_filename_template_dialog.filename_template
                        item.setText(
                            '%s (%s) (%s)' % (ft.name,
                                              ft.target_entity_type,
                                              ft.id)
                        )
    
                    update_filename_template_dialog.deleteLater()
                except Exception as e:
                    QtWidgets.QMessageBox.warning(
                        self,
                        "Error",
                        str(e)
                    )
                    return

    def accept(self):
        """overridden accept method
        """
        if not self.name_line_edit.is_valid:
            QtWidgets.QMessageBox.critical(
                self,
                'Error',
                'Please fix <b>name</b> field!'
            )
            return
        name = self.name_line_edit.text()

        custom_template = self.custom_template_plainTextEdit.toPlainText()

        filename_template_items = \
            self.filename_templates_double_list_widget.secondary_items()
        filename_template_ids = []
        for item in filename_template_items:
            filename_template_id = \
                int(item.text().split('(')[-1].split(')')[0])
            filename_template_ids.append(filename_template_id)

        from stalker import FilenameTemplate
        filename_templates = FilenameTemplate.query\
            .filter(FilenameTemplate.id.in_(filename_template_ids)).all()

        from stalker import Structure
        from stalker.db.session import DBSession
        logged_in_user = self.get_logged_in_user()
        if self.mode == 'Create':
            # Create a new Structure
            try:
                structure = Structure(
                    name=name,
                    templates=filename_templates,
                    custom_template=custom_template,
                    created_by=logged_in_user
                )
                self.structure = structure
                DBSession.add(structure)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(
                    self,
                    'Error',
                    str(e)
                )
                return

        elif self.mode == 'Update':
            # Update the structure
            try:
                self.structure.name = name
                self.structure.templates = filename_templates
                self.structure.custom_template = custom_template
                self.structure.updated_by = logged_in_user
                DBSession.add(self.structure)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(
                    self,
                    'Error',
                    str(e)
                )
                return

        super(MainDialog, self).accept()
예제 #4
0
class MainDialog(QtWidgets.QDialog, repository_dialog_UI.Ui_Dialog,
                 AnimaDialogBase):
    """The Repository Dialog
    """
    def __init__(self, parent=None, repository=None):
        super(MainDialog, self).__init__(parent=parent)
        self.setupUi(self)

        self.repository = repository
        self.mode = 'Create'

        if self.repository:
            self.mode = 'Update'

        self.dialog_label.setText('%s Repository' % self.mode)

        # create name_lineEdit
        from anima.ui.widgets import ValidatedLineEdit
        self.name_lineEdit = ValidatedLineEdit(
            message_field=self.name_validator_label)
        self.name_lineEdit.setPlaceholderText('Enter Name')
        self.name_fields_verticalLayout.insertWidget(0, self.name_lineEdit)

        self._setup_signals()

        self._set_defaults()

        if self.repository:
            self.fill_ui_with_repository(self.repository)

    def _setup_signals(self):
        """create the signals
        """
        # name_lineEdit is changed
        QtCore.QObject.connect(self.name_lineEdit,
                               QtCore.SIGNAL('textChanged(QString)'),
                               self.name_line_edit_changed)

    def _set_defaults(self):
        """sets the default values
        """
        pass

    def name_line_edit_changed(self, text):
        """runs when the name_lineEdit text has changed
        """
        if re.findall(r'[^a-zA-Z0-9\-_ ]+', text):
            self.name_lineEdit.set_invalid('Invalid character')
        else:
            if text == '':
                self.name_lineEdit.set_invalid('Enter a name')
            else:
                self.name_lineEdit.set_valid()

    def fill_ui_with_repository(self, repository):
        """fills the UI with the given repository

        :param repository: A Stalker ImageFormat instance
        :return:
        """
        if False:
            from stalker import Repository
            assert isinstance(repository, Repository)

        self.repository = repository
        self.name_lineEdit.setText(self.repository.name)
        self.name_lineEdit.set_valid()

        self.windows_path_lineEdit.setText(self.repository.windows_path)
        self.linux_path_lineEdit.setText(self.repository.linux_path)
        self.osx_path_lineEdit.setText(self.repository.osx_path)

    def accept(self):
        """overridden accept method
        """
        if not self.name_lineEdit.is_valid:
            QtWidgets.QMessageBox.critical(self, 'Error',
                                           'Please fix <b>name</b> field!')
            return
        name = self.name_lineEdit.text()

        windows_path = self.windows_path_lineEdit.text()
        linux_path = self.linux_path_lineEdit.text()
        osx_path = self.osx_path_lineEdit.text()

        from stalker import Repository
        from stalker.db.session import DBSession
        logged_in_user = self.get_logged_in_user()
        if self.mode == 'Create':
            # Create a new Repository
            try:
                repo = Repository(name=name,
                                  windows_path=windows_path,
                                  linux_path=linux_path,
                                  osx_path=osx_path)
                self.repository = repo
                DBSession.add(repo)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(self, 'Error', str(e))
                return

        elif self.mode == 'Update':
            # Update the repository
            try:
                self.repository.name = name
                self.repository.windows_path = windows_path
                self.repository.linux_path = linux_path
                self.repository.osx_path = osx_path
                self.repository.updated_by = logged_in_user
                DBSession.add(self.repository)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(self, 'Error', str(e))
                return

        super(MainDialog, self).accept()
예제 #5
0
class MainDialog(QtWidgets.QDialog, AnimaDialogBase):
    """The Repository Dialog
    """

    def __init__(self, parent=None, repository=None):
        super(MainDialog, self).__init__(parent=parent)
        self._setup_ui()

        self.repository = repository
        self.mode = 'Create'

        if self.repository:
            self.mode = 'Update'

        self.dialog_label.setText('%s Repository' % self.mode)

        self._setup_signals()

        self._set_defaults()

        if self.repository:
            self.fill_ui_with_repository(self.repository)

    def _setup_ui(self):
        self.setObjectName("Dialog")
        self.resize(502, 220)
        self.vertical_layout = QtWidgets.QVBoxLayout(self)
        self.vertical_layout.setObjectName("verticalLayout")
        self.dialog_label = QtWidgets.QLabel(self)
        self.dialog_label.setStyleSheet(
            "color: rgb(71, 143, 202);\n"
            "font: 18pt;"
        )
        self.dialog_label.setObjectName("dialog_label")
        self.dialog_label.setText("Create Repository")

        self.vertical_layout.addWidget(self.dialog_label)
        self.line = QtWidgets.QFrame(self)
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.vertical_layout.addWidget(self.line)
        self.form_layout = QtWidgets.QFormLayout()
        self.form_layout.setLabelAlignment(
            QtCore.Qt.AlignRight | QtCore.Qt.AlignTrailing | QtCore.Qt.AlignVCenter
        )
        self.form_layout.setObjectName("form_layout")

        row_number = 0
        # -------------
        # Name
        # Label
        self.name_label = QtWidgets.QLabel(self)
        self.name_label.setObjectName("name_label")
        self.name_label.setText("Name")
        self.form_layout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.name_label)

        # Field
        self.name_fields_vertical_layout = QtWidgets.QVBoxLayout()
        self.name_fields_vertical_layout.setObjectName("name_fields_verticalLayout")
        self.name_validator_label = QtWidgets.QLabel(self)
        self.name_validator_label.setStyleSheet("color: rgb(255, 0, 0);")
        self.name_validator_label.setObjectName("name_validator_label")
        self.name_fields_vertical_layout.addWidget(self.name_validator_label)
        self.form_layout.setLayout(
            row_number,
            QtWidgets.QFormLayout.FieldRole,
            self.name_fields_vertical_layout
        )
        self.name_validator_label.setText("Validator Message")

        # create name_line_edit
        from anima.ui.widgets import ValidatedLineEdit
        self.name_line_edit = ValidatedLineEdit(
            message_field=self.name_validator_label
        )
        self.name_line_edit.setPlaceholderText('Enter Name')
        self.name_fields_vertical_layout.insertWidget(
            0, self.name_line_edit
        )

        row_number += 1
        # -------------
        # Code
        # Label
        self.code_label = QtWidgets.QLabel(self)
        self.code_label.setText("Code")
        self.code_label.setObjectName("code_label")
        self.form_layout.setWidget(
            row_number,
            QtWidgets.QFormLayout.LabelRole,
            self.code_label
        )

        # Field
        self.code_fields_vertical_layout = QtWidgets.QVBoxLayout()
        self.code_fields_vertical_layout.setObjectName("code_fields_verticalLayout")
        self.code_validator_label = QtWidgets.QLabel(self)
        self.code_validator_label.setStyleSheet("color: rgb(255, 0, 0);")
        self.code_validator_label.setObjectName("code_validator_label")
        self.code_fields_vertical_layout.addWidget(self.code_validator_label)
        self.form_layout.setLayout(
            row_number,
            QtWidgets.QFormLayout.FieldRole,
            self.code_fields_vertical_layout
        )

        # create code_line_edit
        from anima.ui.widgets import ValidatedLineEdit
        self.code_line_edit = ValidatedLineEdit(
            message_field=self.code_validator_label
        )
        self.code_line_edit.setPlaceholderText('Enter Code')
        self.code_fields_vertical_layout.insertWidget(
            0, self.code_line_edit
        )

        row_number += 1
        # -------------
        # Windows Path
        # Label
        self.windows_path_label = QtWidgets.QLabel(self)
        self.windows_path_label.setObjectName("windows_path_label")
        self.form_layout.setWidget(
            row_number,
            QtWidgets.QFormLayout.LabelRole,
            self.windows_path_label
        )
        self.windows_path_label.setText("Windows Path")

        # Field
        self.windows_path_line_edit = QtWidgets.QLineEdit(self)
        self.windows_path_line_edit.setObjectName("windows_path_lineEdit")
        self.form_layout.setWidget(
            row_number,
            QtWidgets.QFormLayout.FieldRole,
            self.windows_path_line_edit
        )

        row_number += 1
        # -------------
        # Linux Path
        # Label
        self.linux_label = QtWidgets.QLabel(self)
        self.linux_label.setObjectName("linux_label")
        self.linux_label.setText("Linux Path")
        self.form_layout.setWidget(
            row_number,
            QtWidgets.QFormLayout.LabelRole,
            self.linux_label
        )

        # Field
        self.linux_path_line_edit = QtWidgets.QLineEdit(self)
        self.linux_path_line_edit.setObjectName("linux_path_lineEdit")
        self.form_layout.setWidget(
            row_number,
            QtWidgets.QFormLayout.FieldRole,
            self.linux_path_line_edit
        )

        row_number += 1
        # -------------
        # OSX Path
        # Label
        self.osx_path_label = QtWidgets.QLabel(self)
        self.osx_path_label.setObjectName("osx_path_label")
        self.osx_path_label.setText("OSX Path")
        self.form_layout.setWidget(
            row_number,
            QtWidgets.QFormLayout.LabelRole,
            self.osx_path_label
        )

        # Field
        self.osx_path_line_edit = QtWidgets.QLineEdit(self)
        self.osx_path_line_edit.setObjectName("osx_path_lineEdit")
        self.form_layout.setWidget(
            row_number,
            QtWidgets.QFormLayout.FieldRole,
            self.osx_path_line_edit
        )
        self.vertical_layout.addLayout(self.form_layout)

        # Button Box
        self.button_box = QtWidgets.QDialogButtonBox(self)
        self.button_box.setOrientation(QtCore.Qt.Horizontal)
        self.button_box.setStandardButtons(
            QtWidgets.QDialogButtonBox.Cancel | QtWidgets.QDialogButtonBox.Ok
        )
        self.button_box.setObjectName("button_box")
        self.vertical_layout.addWidget(self.button_box)
        self.vertical_layout.setStretch(2, 1)

        QtCore.QObject.connect(
            self.button_box,
            QtCore.SIGNAL("accepted()"),
            self.accept
        )
        QtCore.QObject.connect(
            self.button_box,
            QtCore.SIGNAL("rejected()"),
            self.reject
        )
        QtCore.QMetaObject.connectSlotsByName(self)

    def _setup_signals(self):
        """create the signals
        """
        # name_line_edit is changed
        QtCore.QObject.connect(
            self.name_line_edit,
            QtCore.SIGNAL('textChanged(QString)'),
            self.name_line_edit_changed
        )

    def _set_defaults(self):
        """sets the default values
        """
        pass

    def name_line_edit_changed(self, text):
        """runs when the name_line_edit text has changed
        """
        if re.findall(r'[^a-zA-Z0-9\-_ ]+', text):
            self.name_line_edit.set_invalid('Invalid character')
        else:
            if text == '':
                self.name_line_edit.set_invalid('Enter a name')
            else:
                self.name_line_edit.set_valid()

    def fill_ui_with_repository(self, repository):
        """fills the UI with the given repository

        :param repository: A Stalker ImageFormat instance
        :return:
        """
        if False:
            from stalker import Repository
            assert isinstance(repository, Repository)

        self.repository = repository
        self.name_line_edit.setText(self.repository.name)
        self.name_line_edit.set_valid()

        self.code_line_edit.setText(self.repository.code)
        self.code_line_edit.set_valid()

        self.windows_path_line_edit.setText(self.repository.windows_path)
        self.linux_path_line_edit.setText(self.repository.linux_path)
        self.osx_path_line_edit.setText(self.repository.osx_path)

    def accept(self):
        """overridden accept method
        """
        if not self.name_line_edit.is_valid:
            QtWidgets.QMessageBox.critical(
                self,
                'Error',
                'Please fix <b>name</b> field!'
            )
            return
        name = self.name_line_edit.text()
        code = self.code_line_edit.text()

        windows_path = self.windows_path_line_edit.text()
        linux_path = self.linux_path_line_edit.text()
        osx_path = self.osx_path_line_edit.text()

        from stalker import Repository
        from stalker.db.session import DBSession
        logged_in_user = self.get_logged_in_user()
        if self.mode == 'Create':
            # Create a new Repository
            try:
                repo = Repository(
                    name=name,
                    code=code,
                    windows_path=windows_path,
                    linux_path=linux_path,
                    osx_path=osx_path
                )
                self.repository = repo
                DBSession.add(repo)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(
                    self,
                    'Error',
                    str(e)
                )
                return

        elif self.mode == 'Update':
            # Update the repository
            try:
                self.repository.name = name
                self.repository.code = code
                self.repository.windows_path = windows_path
                self.repository.linux_path = linux_path
                self.repository.osx_path = osx_path
                self.repository.updated_by = logged_in_user
                DBSession.add(self.repository)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(
                    self,
                    'Error',
                    str(e)
                )
                return

        super(MainDialog, self).accept()
예제 #6
0
class MainDialog(QtWidgets.QDialog, repository_dialog_UI.Ui_Dialog, AnimaDialogBase):
    """The Repository Dialog
    """

    def __init__(self, parent=None, repository=None):
        super(MainDialog, self).__init__(parent=parent)
        self.setupUi(self)

        self.repository = repository
        self.mode = 'Create'

        if self.repository:
            self.mode = 'Update'

        self.dialog_label.setText('%s Repository' % self.mode)

        # create name_lineEdit
        from anima.ui.widgets import ValidatedLineEdit
        self.name_lineEdit = ValidatedLineEdit(
            message_field=self.name_validator_label
        )
        self.name_lineEdit.setPlaceholderText('Enter Name')
        self.name_fields_verticalLayout.insertWidget(
            0, self.name_lineEdit
        )

        self._setup_signals()

        self._set_defaults()

        if self.repository:
            self.fill_ui_with_repository(self.repository)

    def _setup_signals(self):
        """create the signals
        """
        # name_lineEdit is changed
        QtCore.QObject.connect(
            self.name_lineEdit,
            QtCore.SIGNAL('textChanged(QString)'),
            self.name_line_edit_changed
        )

    def _set_defaults(self):
        """sets the default values
        """
        pass

    def name_line_edit_changed(self, text):
        """runs when the name_lineEdit text has changed
        """
        if re.findall(r'[^a-zA-Z0-9\-_ ]+', text):
            self.name_lineEdit.set_invalid('Invalid character')
        else:
            if text == '':
                self.name_lineEdit.set_invalid('Enter a name')
            else:
                self.name_lineEdit.set_valid()

    def fill_ui_with_repository(self, repository):
        """fills the UI with the given repository

        :param repository: A Stalker ImageFormat instance
        :return:
        """
        if False:
            from stalker import Repository
            assert isinstance(repository, Repository)

        self.repository = repository
        self.name_lineEdit.setText(self.repository.name)
        self.name_lineEdit.set_valid()

        self.windows_path_lineEdit.setText(self.repository.windows_path)
        self.linux_path_lineEdit.setText(self.repository.linux_path)
        self.osx_path_lineEdit.setText(self.repository.osx_path)

    def accept(self):
        """overridden accept method
        """
        if not self.name_lineEdit.is_valid:
            QtWidgets.QMessageBox.critical(
                self,
                'Error',
                'Please fix <b>name</b> field!'
            )
            return
        name = self.name_lineEdit.text()

        windows_path = self.windows_path_lineEdit.text()
        linux_path = self.linux_path_lineEdit.text()
        osx_path = self.osx_path_lineEdit.text()

        from stalker import Repository
        from stalker.db.session import DBSession
        logged_in_user = self.get_logged_in_user()
        if self.mode == 'Create':
            # Create a new Repository
            try:
                repo = Repository(
                    name=name,
                    windows_path=windows_path,
                    linux_path=linux_path,
                    osx_path=osx_path
                )
                self.repository = repo
                DBSession.add(repo)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(
                    self,
                    'Error',
                    str(e)
                )
                return

        elif self.mode == 'Update':
            # Update the repository
            try:
                self.repository.name = name
                self.repository.windows_path = windows_path
                self.repository.linux_path = linux_path
                self.repository.osx_path = osx_path
                self.repository.updated_by = logged_in_user
                DBSession.add(self.repository)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(
                    self,
                    'Error',
                    str(e)
                )
                return

        super(MainDialog, self).accept()
예제 #7
0
class MainDialog(QtWidgets.QDialog, structure_dialog_UI.Ui_Dialog, AnimaDialogBase):
    """The structure Dialog
    """

    def __init__(self, parent=None, structure=None):
        super(MainDialog, self).__init__(parent=parent)
        self.setupUi(self)

        self.structure = structure

        self.mode = 'Create'

        if self.structure:
            self.mode = 'Update'

        self.dialog_label.setText('%s Structure' % self.mode)

        # create name_lineEdit
        from anima.ui.widgets import ValidatedLineEdit
        self.name_lineEdit = ValidatedLineEdit(
            message_field=self.name_validator_label
        )
        self.name_lineEdit.setPlaceholderText('Enter Name')
        self.name_fields_verticalLayout.insertWidget(
            0, self.name_lineEdit
        )

        # create DoubleListWidget
        from anima.ui.widgets import DoubleListWidget
        self.filename_templates_double_list_widget = DoubleListWidget(
            dialog=self,
            parent_layout=self.filename_template_fields_verticalLayout,
            primary_label_text='Templates From DB',
            secondary_label_text='Selected Templates'
        )
        # set the tooltip
        self.filename_templates_double_list_widget\
            .primary_list_widget.setToolTip(
                "Right Click to Create/Update FilenameTemplates"
            )
        self.filename_templates_double_list_widget\
            .secondary_list_widget.setToolTip(
                "Right Click to Create/Update FilenameTemplates"
            )

        self._setup_signals()

        self._set_defaults()

        if self.structure:
            self.fill_ui_with_structure(self.structure)

    def _setup_signals(self):
        """create the signals
        """
        # name_lineEdit is changed
        QtCore.QObject.connect(
            self.name_lineEdit,
            QtCore.SIGNAL('textChanged(QString)'),
            self.name_line_edit_changed
        )

        # add context menu for primary items in DoubleListWidget
        self.filename_templates_double_list_widget\
            .primary_list_widget\
            .setContextMenuPolicy(QtCore.Qt.CustomContextMenu)

        QtCore.QObject.connect(
            self.filename_templates_double_list_widget.primary_list_widget,
            QtCore.SIGNAL("customContextMenuRequested(const QPoint&)"),
            self.show_primary_filename_template_context_menu
        )

        # add context menu for secondary items in DoubleListWidget
        self.filename_templates_double_list_widget\
            .secondary_list_widget\
            .setContextMenuPolicy(QtCore.Qt.CustomContextMenu)

        QtCore.QObject.connect(
            self.filename_templates_double_list_widget.secondary_list_widget,
            QtCore.SIGNAL("customContextMenuRequested(const QPoint&)"),
            self.show_secondary_filename_template_context_menu
        )

    def _set_defaults(self):
        """sets the default values
        """
        # fill filename_templates_from_db_listWidget
        # add all the other filename templates from the database
        from stalker import FilenameTemplate
        fts = FilenameTemplate.query.all()

        self.filename_templates_double_list_widget.clear()
        self.filename_templates_double_list_widget.add_primary_items(
            map(
                lambda x: '%s (%s) (%s)' % (x.name,
                                            x.target_entity_type,
                                            x.id),
                fts
            )
        )

    def name_line_edit_changed(self, text):
        """runs when the name_lineEdit text has changed
        """
        if re.findall(r'[^a-zA-Z0-9\-_ ]+', text):
            self.name_lineEdit.set_invalid('Invalid character')
        else:
            if text == '':
                self.name_lineEdit.set_invalid('Enter a name')
            else:
                self.name_lineEdit.set_valid()

    def fill_ui_with_structure(self, structure):
        """fills the UI with the given structure

        :param structure: A Stalker ImageFormat instance
        :return:
        """
        if False:
            from stalker import Structure
            assert isinstance(structure, Structure)

        self.structure = structure
        self.name_lineEdit.setText(self.structure.name)
        self.name_lineEdit.set_valid()

        self.custom_template_plainTextEdit.setPlainText(
            self.structure.custom_template
        )

        # add the structure templates to the secondary list of the double list
        self.filename_templates_double_list_widget.clear()
        self.filename_templates_double_list_widget.add_secondary_items(
            map(
                lambda x: '%s (%s) (%s)' % (x.name,
                                            x.target_entity_type,
                                            x.id),
                self.structure.templates
            )
        )

        # add all the other filename templates from the database
        from stalker import FilenameTemplate
        fts = FilenameTemplate.query\
            .filter(
                ~FilenameTemplate.id.in_(
                    map(lambda x: x.id, self.structure.templates)
                )
            )\
            .all()

        self.filename_templates_double_list_widget.add_primary_items(
            map(
                lambda x: '%s (%s) (%s)' % (x.name,
                                            x.target_entity_type,
                                            x.id),
                fts
            )
        )

    def show_primary_filename_template_context_menu(self, position):
        """shows the custom context menu for primary list widget

        :param position:
        :return:
        """
        self.show_filename_template_context_menu(
            self.filename_templates_double_list_widget.primary_list_widget,
            position
        )

    def show_secondary_filename_template_context_menu(self, position):
        """shows the custom context menu for secondary list widget

        :param position:
        :return:
        """
        self.show_filename_template_context_menu(
            self.filename_templates_double_list_widget.secondary_list_widget,
            position
        )

    def show_filename_template_context_menu(self, list_widget, position):
        """shows a context menu for the given list_widget

        :param list_widget: QListWidget instance
        :param position: the mouse click position
        :return:
        """
        item = list_widget.itemAt(position)

        menu = QtWidgets.QMenu()
        menu.addAction('Create FilenameTemplate...')
        if item:
            menu.addAction('Update FilenameTemplate...')

        global_position = list_widget.mapToGlobal(position)
        selected_item = menu.exec_(global_position)

        try:
            # PySide
            accepted = QtWidgets.QDialog.DialogCode.Accepted
        except AttributeError:
            # PyQt4
            accepted = QtWidgets.QDialog.Accepted

        if selected_item:
            choice = selected_item.text()
            if choice == 'Create FilenameTemplate...':
                from anima.ui import filename_template_dialog
                create_filename_template_dialog = \
                    filename_template_dialog.MainDialog(parent=self)
                create_filename_template_dialog.exec_()

                if create_filename_template_dialog.result() == accepted:
                    ft = create_filename_template_dialog.filename_template
                    list_widget.addItem(
                        '%s (%s) (%s)' % (ft.name,
                                          ft.target_entity_type,
                                          ft.id)
                    )
                create_filename_template_dialog.deleteLater()

            elif choice == 'Update FilenameTemplate...':
                ft_id = int(item.text().split('(')[-1].split(')')[0])
                if not ft_id:
                    return

                from stalker import FilenameTemplate
                ft = FilenameTemplate.query.get(ft_id)
    
                from anima.ui import filename_template_dialog
                update_filename_template_dialog = \
                    filename_template_dialog.MainDialog(
                        parent=self,
                        filename_template=ft
                    )
                try:
                    update_filename_template_dialog.exec_()
                    if update_filename_template_dialog.result() == accepted:
                        # update the text of the item
                        ft = update_filename_template_dialog.filename_template
                        item.setText(
                            '%s (%s) (%s)' % (ft.name,
                                              ft.target_entity_type,
                                              ft.id)
                        )
    
                    update_filename_template_dialog.deleteLater()
                except Exception as e:
                    QtWidgets.QMessageBox.warning(
                        self,
                        "Error",
                        str(e)
                    )
                    return

    def accept(self):
        """overridden accept method
        """
        if not self.name_lineEdit.is_valid:
            QtWidgets.QMessageBox.critical(
                self,
                'Error',
                'Please fix <b>name</b> field!'
            )
            return
        name = self.name_lineEdit.text()

        custom_template = self.custom_template_plainTextEdit.toPlainText()

        filename_template_items = \
            self.filename_templates_double_list_widget.secondary_items()
        filename_template_ids = []
        for item in filename_template_items:
            filename_template_id = \
                int(item.text().split('(')[-1].split(')')[0])
            filename_template_ids.append(filename_template_id)

        from stalker import FilenameTemplate
        filename_templates = FilenameTemplate.query\
            .filter(FilenameTemplate.id.in_(filename_template_ids)).all()

        from stalker import Structure
        from stalker.db.session import DBSession
        logged_in_user = self.get_logged_in_user()
        if self.mode == 'Create':
            # Create a new Structure
            try:
                structure = Structure(
                    name=name,
                    templates=filename_templates,
                    custom_template=custom_template,
                    created_by=logged_in_user
                )
                self.structure = structure
                DBSession.add(structure)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(
                    self,
                    'Error',
                    str(e)
                )
                return

        elif self.mode == 'Update':
            # Update the structure
            try:
                self.structure.name = name
                self.structure.templates = filename_templates
                self.structure.custom_template = custom_template
                self.structure.updated_by = logged_in_user
                DBSession.add(self.structure)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(
                    self,
                    'Error',
                    str(e)
                )
                return

        super(MainDialog, self).accept()
예제 #8
0
class MainDialog(QtWidgets.QDialog, image_format_dialog_UI.Ui_Dialog,
                 AnimaDialogBase):
    """The ImageFormat Dialog
    """
    def __init__(self, parent=None, image_format=None):
        super(MainDialog, self).__init__(parent=parent)
        self.setupUi(self)

        self.image_format = image_format
        self.mode = 'Create'
        if self.image_format:
            self.mode = 'Update'

        self.dialog_label.setText('%s Image Format' % self.mode)

        # create name_lineEdit
        from anima.ui.widgets import ValidatedLineEdit
        self.name_lineEdit = ValidatedLineEdit(
            message_field=self.name_validator_label)
        self.name_lineEdit.setPlaceholderText('Enter Name')
        self.name_fields_verticalLayout.insertWidget(0, self.name_lineEdit)

        self._setup_signals()

        self._set_defaults()

        if self.image_format:
            self.fill_ui_with_image_format(self.image_format)

    def _setup_signals(self):
        """create the signals
        """
        # name_lineEdit is changed
        QtCore.QObject.connect(self.name_lineEdit,
                               QtCore.SIGNAL('textChanged(QString)'),
                               self.name_line_edit_changed)

    def _set_defaults(self):
        """sets the default values
        """
        pass

    def name_line_edit_changed(self, text):
        """runs when the name_lineEdit text has changed
        """
        if re.findall(r'[^a-zA-Z0-9\-_ ]+', text):
            self.name_lineEdit.set_invalid('Invalid character')
        else:
            if text == '':
                self.name_lineEdit.set_invalid('Enter a name')
            else:
                self.name_lineEdit.set_valid()

    def fill_ui_with_image_format(self, image_format):
        """fills the UI with the given image_format

        :param image_format: A Stalker ImageFormat instance
        :return:
        """
        if False:
            from stalker import ImageFormat
            assert isinstance(image_format, ImageFormat)

        self.image_format = image_format
        self.name_lineEdit.setText(self.image_format.name)
        self.name_lineEdit.set_valid()

        self.width_spinBox.setValue(self.image_format.width)
        self.height_spinBox.setValue(self.image_format.height)
        self.pixel_aspect_doubleSpinBox.setValue(
            self.image_format.pixel_aspect)

    def accept(self):
        """overridden accept method
        """
        if not self.name_lineEdit.is_valid:
            QtWidgets.QMessageBox.critical(self, 'Error',
                                           'Please fix <b>name</b> field!')
            return
        name = self.name_lineEdit.text()

        width = self.width_spinBox.value()
        height = self.height_spinBox.value()
        pixel_aspect = self.pixel_aspect_doubleSpinBox.value()

        from stalker import ImageFormat
        from stalker.db.session import DBSession
        logged_in_user = self.get_logged_in_user()
        if self.mode == 'Create':
            # Create a new Image Format
            try:
                imf = ImageFormat(name=name,
                                  width=width,
                                  height=height,
                                  pixel_aspect=pixel_aspect,
                                  created_by=logged_in_user)
                self.image_format = imf
                DBSession.add(imf)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(self, 'Error', str(e))
                return

        elif self.mode == 'Update':
            # Update the image format
            try:
                self.image_format.name = name
                self.image_format.width = width
                self.image_format.height = height
                self.image_format.pixel_aspect = pixel_aspect
                self.image_format.updated_by = logged_in_user
                DBSession.add(self.image_format)
                DBSession.commit()
            except Exception as e:
                DBSession.rollback()
                QtWidgets.QMessageBox.critical(self, 'Error', str(e))
                return

        super(MainDialog, self).accept()