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()
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()
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()
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()
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()
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()
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()
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()