FWidget::EWidgetMode FSCSEditorViewportClient::GetWidgetMode() const { // Default to not drawing the widget FWidget::EWidgetMode ReturnWidgetMode = FWidget::WM_None; AActor* PreviewActor = GetPreviewActor(); if(!bIsSimulateEnabled && PreviewActor) { const TSharedPtr<FBlueprintEditor> BluePrintEditor = BlueprintEditorPtr.Pin(); if ( BluePrintEditor.IsValid() ) { TArray<FSCSEditorTreeNodePtrType> SelectedNodes = BluePrintEditor->GetSelectedSCSEditorTreeNodes(); const TArray<FSCSEditorTreeNodePtrType>& RootNodes = BluePrintEditor->GetSCSEditor()->GetRootComponentNodes(); // if the selected nodes array is empty, or only contains entries from the // root nodes array, or isn't visible in the preview actor, then don't display a transform widget for ( int32 CurrentNodeIndex=0; CurrentNodeIndex < SelectedNodes.Num(); CurrentNodeIndex++ ) { FSCSEditorTreeNodePtrType CurrentNodePtr = SelectedNodes[CurrentNodeIndex]; if (CurrentNodePtr.IsValid() && !RootNodes.Contains(CurrentNodePtr) && !CurrentNodePtr->IsRootComponent() && CurrentNodePtr->CanEditDefaults() && CurrentNodePtr->FindComponentInstanceInActor(PreviewActor)) { // a non-NULL, non-root item is selected, draw the widget ReturnWidgetMode = WidgetMode; break; } } } } return ReturnWidgetMode; }
void FSCSEditorViewportClient::BeginTransaction(const FText& Description) { //UE_LOG(LogSCSEditorViewport, Log, TEXT("FSCSEditorViewportClient::BeginTransaction() pre: %s %08x"), SessionName, *((uint32*)&ScopedTransaction)); if(!ScopedTransaction) { ScopedTransaction = new FScopedTransaction(Description); auto BlueprintEditor = BlueprintEditorPtr.Pin(); if (BlueprintEditor.IsValid()) { UBlueprint* PreviewBlueprint = BlueprintEditor->GetBlueprintObj(); if (PreviewBlueprint != nullptr) { FBlueprintEditorUtils::MarkBlueprintAsModified(PreviewBlueprint); } TArray<FSCSEditorTreeNodePtrType> SelectedNodes = BlueprintEditor->GetSelectedSCSEditorTreeNodes(); for(auto SelectedSCSNodeIter(SelectedNodes.CreateIterator()); SelectedSCSNodeIter; ++SelectedSCSNodeIter) { FSCSEditorTreeNodePtrType Node = *SelectedSCSNodeIter; if(Node.IsValid()) { if(USCS_Node* SCS_Node = Node->GetSCSNode()) { SCS_Node->Modify(); } // Modify both the component template and the instance in the preview actor (provided there is one) UActorComponent* ComponentTemplate = Node->GetEditableComponentTemplate(PreviewBlueprint); if (ComponentTemplate != nullptr) { ComponentTemplate->SetFlags(RF_Transactional); ComponentTemplate->Modify(); } AActor* PreviewActor = GetPreviewActor(); if (PreviewActor) { UActorComponent* ComponentPreviewInstance = Node->FindComponentInstanceInActor(PreviewActor); if (ComponentPreviewInstance != nullptr) { ComponentPreviewInstance->SetFlags(RF_Transactional); ComponentPreviewInstance->Modify(); } } } } } } //UE_LOG(LogSCSEditorViewport, Log, TEXT("FSCSEditorViewportClient::BeginTransaction() post: %s %08x"), SessionName, *((uint32*)&ScopedTransaction)); }
void FSCSEditorViewportClient::BeginTransaction(const FText& Description) { //UE_LOG(LogSCSEditorViewport, Log, TEXT("FSCSEditorViewportClient::BeginTransaction() pre: %s %08x"), SessionName, *((uint32*)&ScopedTransaction)); if(!ScopedTransaction) { ScopedTransaction = new FScopedTransaction(Description); if(PreviewBlueprint != NULL) { FBlueprintEditorUtils::MarkBlueprintAsModified(PreviewBlueprint); } TArray<FSCSEditorTreeNodePtrType> SelectedNodes = BlueprintEditorPtr.Pin()->GetSelectedSCSEditorTreeNodes(); if(SelectedNodes.Num() > 0) { for(auto SelectedSCSNodeIter(SelectedNodes.CreateIterator()); SelectedSCSNodeIter; ++SelectedSCSNodeIter) { FSCSEditorTreeNodePtrType Node = *SelectedSCSNodeIter; if(Node.IsValid()) { if(USCS_Node* SCS_Node = Node->GetSCSNode()) { SCS_Node->Modify(); } UActorComponent* ComponentTemplate = Node->GetComponentTemplate(); if(ComponentTemplate != NULL) { ComponentTemplate->SetFlags(RF_Transactional); ComponentTemplate->Modify(); } } } } } //UE_LOG(LogSCSEditorViewport, Log, TEXT("FSCSEditorViewportClient::BeginTransaction() post: %s %08x"), SessionName, *((uint32*)&ScopedTransaction)); }