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