Exemplo n.º 1
0
        def copy_missing_references(order, is_widget=True):
            # If preset contains references, make sure they exist in
            # destination Widget or copy them aswell + report missing references
            dest = destination_item

            if not is_widget:
                dest = destination_item.treeWidget()

            search_result = self.search_preset_for_references(item, dest)
            src_reference_presets, missing_references = search_result[
                0], search_result[1]

            for i in src_reference_presets:
                __i = i.text(ItemColumn.NAME)

            # Add missing presets that exist in source presets
            if src_reference_presets:
                log_id_list = []
                for n_item in src_reference_presets:
                    if n_item.text(ItemColumn.ID) not in dest.missing_ids:
                        if is_widget:
                            order += 1
                            n_item = add_top_level_item(
                                destination_item, [order, n_item])
                            new_undo_items.append(n_item)
                        else:
                            preset_order = destination_item.treeWidget(
                            ).topLevelItemCount() + 1
                            n_item = add_top_level_item(
                                destination_item.treeWidget(),
                                [preset_order, n_item])
                            new_undo_items.append(n_item)

                        self.set_ref_style(n_item)
                        log_id_list.append(n_item.text(ItemColumn.ID))
                    else:
                        dest.report_conflict(n_item)

                LOGGER.debug('Added missing items from source: %s',
                             log_id_list)

                # Visual indicator
                dest.overlay.ref_created()

            # Highlight items that contain invalid references
            if missing_references:
                for m_item in missing_references:
                    self.set_ref_style(m_item)
                    self.set_missing_style(m_item)
Exemplo n.º 2
0
        def copy_preset(item_to_copy):
            """
            If we just created a reference, make sure the ref source
            exists in destination.
            """
            item_id = item_to_copy.text(ItemColumn.ID)

            if item_to_copy.UserType == 1000:
                dest_presets = destination_item.treeWidget().findItems(
                    item_id, Qt.MatchExactly, ItemColumn.ID)

                for preset in dest_presets:
                    if item_id in preset.text(ItemColumn.ID):
                        return

                order = destination_item.treeWidget().topLevelItemCount() + 1
                new_preset = add_top_level_item(destination_item.treeWidget(),
                                                [order, item_to_copy])
                new_undo_items.append(new_preset)
                LOGGER.debug(
                    'Coping preset id %s to fulfil just created reference.',
                    item_id)
Exemplo n.º 3
0
    def create_render_preset(self):
        """ Create new Render Preset with default Settings """
        self.render_preset_count += 1
        # Item attributes
        order = lead_zeros(self.parent.topLevelItemCount() + 1)
        name = 'Render_Preset_' + str(self.render_preset_count)
        preset_type = 'render_preset'
        render_preset_item = add_top_level_item(self.parent,
                                                [order, name, '', preset_type],
                                                RENDER_PRESET_ITEM_FLAGS, 1003)

        # Add default settings
        # order, name, value
        desc = 'Setzt das globale Sampling Level. Benutzt Clamping Einstellungen der geladenen Szene!'
        sampling = [
            '000', 'Anti-Aliasing Samples', None, 'sampling', '', '', desc
        ]
        desc = 'Setzt die Ausgabe Dateiendung. HDR wird als 8bit ausgegeben und ' \
               'berücksichtigt Viewport Display Adaption.'
        file_extension = [
            '001', 'Datei Erweiterung', None, 'file_extension', '', '', desc
        ]
        desc = 'Auflösung kann auch manuell, mit einem Leerzeichen getrennt, eingegeben ' \
               'werden: X Y'
        resolution = ['002', 'Auflösung', None, 'resolution', '', '', desc]

        for item_values in [sampling, file_extension, resolution]:
            item = QtWidgets.QTreeWidgetItem(render_preset_item, item_values)
            self.render_widgets.append(render_settings_combo_box(item))

            item.UserType = 1004
            item.setFlags(RENDER_SETTING_ITEM_FLAGS)

        self.add_selected_items(render_preset_item, 3, True)
        self.parent.clearSelection()
        render_preset_item.setSelected(True)
        self.ui.sort_tree_widget.sort_current_level(render_preset_item,
                                                    self.parent)
Exemplo n.º 4
0
    def eventFilter(self, obj, event):
        # ------------------------------
        # Widget to Widget Drag and Drop
        # ------------------------------
        if event.type() == QtCore.QEvent.DragEnter:
            # Indicate that item will be copied
            if obj is self.ui_tree_widget_dest:
                event.setDropAction(QtCore.Qt.CopyAction)
            event.accept()
            return True

        if event.type() == QtCore.QEvent.DragMove:
            event.accept()
            return True

        if event.type() == QtCore.QEvent.DragLeave:
            event.accept()
            return True

        if event.type() == QtCore.QEvent.Drop:
            src = event.source()
            LOGGER.debug('Widget to Widget Drop_event')

            mime = event.mimeData()
            if self.file_drop(mime):
                return True

            # Drop to destination
            if obj is self.ui_tree_widget_dest:
                event.setDropAction(QtCore.Qt.CopyAction)

                # Get item at drop position
                dest = get_item_at_drop_pos(obj, event.pos())

                # If dropped on child item, destination to parent
                if dest is not None:
                    if dest.parent():
                        dest = dest.parent()

                    if dest.UserType == 1005:
                        # Don't drop on seperator
                        dest = None

                # If no item was hit
                if dest is None:
                    # Set destination to destination QTreeWidget
                    dest = self.ui_tree_widget_dest

                    # Set destination to new preset(topLevelItem) if self.create_preset
                    # on_drop_from QTreeWidget equals source QTreeWidget
                    if src is self.create_preset_on_drop_from:
                        # Create "unique" name
                        self.preset_name_count += 1

                        # Id in use?
                        item_id = update_tree_ids(dest, self.ui, '0',
                                                  self.ui.treeWidget_SrcPreset)
                        preset_name = 'User_Preset_' + lead_zeros(
                            self.preset_name_count)

                        # Create new preset item behind existing items and set as destination
                        order = dest.topLevelItemCount() + 1

                        # ['order', 'name', 'value', 'type', 'reference', 'item_id']
                        dest = add_top_level_item(
                            dest,
                            [order, preset_name, '', 'preset', '', item_id],
                            TOP_LEVEL_ITEM_FLAGS, 1000)

                        self.ui.sort_tree_widget.sort_all(dest)
                else:
                    # Ignore drop on item if only childs should be copied
                    if self.only_childs:
                        dest = self.ui_tree_widget_dest

                # Source widget(s) is list of widgets or single widget
                if type(self.ui_tree_widget_src) is list:
                    for src_widget in self.ui_tree_widget_src:
                        if src is src_widget:
                            self.drop_action(src, dest)
                            event.accept()
                else:
                    if src is self.ui_tree_widget_src:
                        self.drop_action(src, dest)
                        event.accept()

                return True

            # Ignore if neither source or destination widget is hit
            event.ignore()
            return False

        return False
Exemplo n.º 5
0
    def create_preset_from_selected(self,
                                    action_bool,
                                    add_selected=True,
                                    **kwargs):
        """ Create new User Preset from selected items """
        self.preset_count += 1
        dest_tree = self.ui.treeWidget_DestPreset

        # Get kwargs attributes
        options = {
            # Preset Name
            'preset_name': 'User_Preset_',  # Preset Type
            'preset_type': 'preset',
            'preset_items':
            [],  # Preset child items as list of tuples (type, name, value)
            'has_id': True,
            'skip_name_count': False
        }

        options.update(kwargs)

        # Item attributes
        order = lead_zeros(dest_tree.topLevelItemCount() + 1)

        if not options['skip_name_count']:
            name = options['preset_name'] + lead_zeros(self.preset_count)
        else:
            name = options['preset_name']

        preset_type = options['preset_type']
        item_user_type = 1000  # Preset
        if preset_type == 'seperator':
            name = ' '
            item_user_type = 1005
            LOGGER.debug('Creating seperator.')

        item_id = ''
        if options['has_id']:
            item_id = update_tree_ids(dest_tree, self.ui, '0',
                                      self.ui.treeWidget_SrcPreset)

        preset_item = add_top_level_item(
            dest_tree, [order, name, '', preset_type, '', item_id],
            TOP_LEVEL_ITEM_FLAGS, item_user_type)

        # Create preset sub items / variants
        for item_tuple in options['preset_items']:
            item_type = item_tuple[0]
            item_values = item_tuple[1:]

            item = QtWidgets.QTreeWidgetItem(preset_item, list(item_values))
            item.UserType = self.xmlTagDict[item_type]
            item.setFlags(VAR_LEVEL_ITEM_FLAGS)

        if add_selected:
            self.add_selected_items(preset_item)
        else:
            # Undo command
            if preset_item:
                AddRemoveItemsCommand.add(dest_tree, [preset_item],
                                          txt='Preset erstellen')
        self.ui.sort_tree_widget.sort_all(dest_tree)