void SDockingTabWell::RemoveAndDestroyTab(const TSharedRef<SDockTab>& TabToRemove, SDockingNode::ELayoutModification RemovalMethod) { int32 TabIndex = Tabs.Find(TabToRemove); if (TabIndex != INDEX_NONE) { const TSharedPtr<SDockingTabStack> ParentTabStack = ParentTabStackPtr.Pin(); // Remove the old tab from the list of tabs and activate the new tab. { BringTabToFront(TabIndex); Tabs.RemoveAt(TabIndex); // We no longer have a tab in the foreground. // This is important because BringTabToFront triggers notifications based on the difference in active tab indexes. ForegroundTabIndex = INDEX_NONE; // Now bring the last tab that we were on to the foreground BringTabToFront(FMath::Max(TabIndex-1, 0)); } if ( ensure(ParentTabStack.IsValid()) ) { TSharedPtr<SDockingArea> DockAreaPtr = ParentTabStack->GetDockArea(); ParentTabStack->OnTabClosed( TabToRemove ); // We might be closing down an entire dock area, if this is a major tab. // Use this opportunity to save its layout if (RemovalMethod == SDockingNode::TabRemoval_Closed) { if (DockAreaPtr.IsValid()) { DockAreaPtr->GetTabManager()->GetPrivateApi().OnTabClosing( TabToRemove ); } } if (Tabs.Num() == 0) { ParentTabStack->OnLastTabRemoved(); } else { RefreshParentContent(); } if (DockAreaPtr.IsValid()) { DockAreaPtr->CleanUp( RemovalMethod ); } } } }
int32 UGatherTextCommandlet::Main( const FString& Params ) { const TCHAR* Parms = *Params; TArray<FString> Tokens; TArray<FString> Switches; TMap<FString, FString> ParamVals; UCommandlet::ParseCommandLine(*Params, Tokens, Switches, ParamVals); // find the file corresponding to this object's loc file, loading it if necessary FString GatherTextConfigPath; const FString* ParamVal = ParamVals.Find(FString(TEXT("Config"))); if (ParamVal) { GatherTextConfigPath = *ParamVal; } else { UE_LOG(LogGatherTextCommandlet, Error, TEXT("-Config not specified.\n%s"), *UsageText); return -1; } if(FPaths::IsRelative(GatherTextConfigPath)) { FString ProjectBasePath; if (!FPaths::GameDir().IsEmpty()) { ProjectBasePath = FPaths::GameDir(); } else { ProjectBasePath = FPaths::EngineDir(); } GatherTextConfigPath = FPaths::Combine( *ProjectBasePath, *GatherTextConfigPath ); } GConfig->LoadFile(*GatherTextConfigPath); FConfigFile* ConfigFile = GConfig->FindConfigFile(*GatherTextConfigPath); if( NULL == ConfigFile ) { UE_LOG(LogGatherTextCommandlet, Error, TEXT("Loading Config File \"%s\" failed."), *GatherTextConfigPath); return -1; } const bool bEnableSourceControl = Switches.Contains(TEXT("EnableSCC")); const bool bDisableSubmit = Switches.Contains(TEXT("DisableSCCSubmit")); UE_LOG(LogGatherTextCommandlet, Log,TEXT("Beginning GatherText Commandlet.")); TSharedPtr< FGatherTextSCC > CommandletSourceControlInfo = nullptr; if( bEnableSourceControl ) { CommandletSourceControlInfo = MakeShareable( new FGatherTextSCC() ); FText SCCErrorStr; if( !CommandletSourceControlInfo->IsReady( SCCErrorStr ) ) { UE_LOG( LogGatherTextCommandlet, Error, TEXT("Source Control error: %s"), *SCCErrorStr.ToString() ); return -1; } } // Basic helper that can be used only to gather a new manifest for writing TSharedRef<FLocTextHelper> CommandletGatherManifestHelper = MakeShareable(new FLocTextHelper(MakeShareable(new FLocFileSCCNotifies(CommandletSourceControlInfo)))); CommandletGatherManifestHelper->LoadManifest(ELocTextHelperLoadFlags::Create); int32 NumSteps = (ConfigFile->Find("CommonSettings") != NULL) ? ConfigFile->Num() - 1 : ConfigFile->Num(); //Execute each step defined in the config file. for( int32 i=0; i<NumSteps ; ++i ) { FString SectionName = FString::Printf(TEXT("GatherTextStep%d"),i); FConfigSection* CurrCommandletSection = ConfigFile->Find(SectionName); if( NULL == CurrCommandletSection ) { UE_LOG(LogGatherTextCommandlet, Error, TEXT("Could not find %s"),*SectionName); continue; } FString CommandletClassName = GConfig->GetStr( *SectionName, TEXT("CommandletClass"), GatherTextConfigPath ) + TEXT("Commandlet"); UClass* CommandletClass = FindObject<UClass>(ANY_PACKAGE,*CommandletClassName,false); if (!CommandletClass) { UE_LOG(LogGatherTextCommandlet, Error,TEXT("The commandlet name %s in section %s is invalid."), *CommandletClassName, *SectionName); continue; } UGatherTextCommandletBase* Commandlet = NewObject<UGatherTextCommandletBase>(GetTransientPackage(), CommandletClass); check(Commandlet); Commandlet->AddToRoot(); Commandlet->Initialize( CommandletGatherManifestHelper, CommandletSourceControlInfo ); // Execute the commandlet. double CommandletExecutionStartTime = FPlatformTime::Seconds(); UE_LOG(LogGatherTextCommandlet, Log,TEXT("Executing %s: %s"), *SectionName, *CommandletClassName); FString GeneratedCmdLine = FString::Printf(TEXT("-Config=\"%s\" -Section=%s"), *GatherTextConfigPath , *SectionName); // Add all the command params with the exception of config for(auto ParamIter = ParamVals.CreateConstIterator(); ParamIter; ++ParamIter) { const FString& Key = ParamIter.Key(); const FString& Val = ParamIter.Value(); if(Key != TEXT("config")) { GeneratedCmdLine += FString::Printf(TEXT(" -%s=%s"), *Key , *Val); } } // Add all the command switches for(auto SwitchIter = Switches.CreateConstIterator(); SwitchIter; ++SwitchIter) { const FString& Switch = *SwitchIter; GeneratedCmdLine += FString::Printf(TEXT(" -%s"), *Switch); } if( 0 != Commandlet->Main( GeneratedCmdLine ) ) { UE_LOG(LogGatherTextCommandlet, Error,TEXT("%s-%s reported an error."),*SectionName, *CommandletClassName); if( CommandletSourceControlInfo.IsValid() ) { FText SCCErrorStr; if( !CommandletSourceControlInfo->CleanUp( SCCErrorStr ) ) { UE_LOG(LogGatherTextCommandlet, Error, TEXT("%s"), *SCCErrorStr.ToString()); } } return -1; } UE_LOG(LogGatherTextCommandlet, Log,TEXT("Completed %s: %s"), *SectionName, *CommandletClassName); } if( CommandletSourceControlInfo.IsValid() && !bDisableSubmit ) { FText SCCErrorStr; if( CommandletSourceControlInfo->CheckinFiles( GetChangelistDescription(GatherTextConfigPath), SCCErrorStr ) ) { UE_LOG(LogGatherTextCommandlet, Log,TEXT("Submitted Localization files.")); } else { UE_LOG(LogGatherTextCommandlet, Error, TEXT("%s"), *SCCErrorStr.ToString()); if( !CommandletSourceControlInfo->CleanUp( SCCErrorStr ) ) { UE_LOG(LogGatherTextCommandlet, Error, TEXT("%s"), *SCCErrorStr.ToString()); } return -1; } } return 0; }