void CChildView::OnLButtonDblClk(UINT nFlags, CPoint point) { if (m_EditorMode && m_ObjSelCount == 1) { CPoint pt; pt = ScreenToMap(point); CContentObj* obj = theApp.m_map.Content.GetObjectAt(pt, theApp.m_map.m_iLevel); if (obj && obj->Selected) EditObject(obj); } CWnd ::OnLButtonDblClk(nFlags, point); }
void CChildView::OnProperties() { CContentObjects& objs = theApp.m_map.Content.Objects; CContentObj *o; int i; for (i = 0; i < objs.GetSize(); i++) { o = objs[i]; if (o->Selected) { EditObject(o); return; } } }
///////////////////////////////////////////////////////////////////////////// // FUNCTION....: EditMenuDialogProc // // DESCRIPTION.: // ///////////////////////////////////////////////////////////////////////////// BOOL CALLBACK _export EditMenuDialogProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { BOOL result; OBJECTID objID; switch ( message ) { case WM_INITDIALOG: SetWindowLong(hDlg, DWL_USER, lParam); InitDialog(hDlg, (OBJECTID)lParam); AUtlSetTitleFont(OTYPE_MENU, NULL, GetDlgItem(hDlg, IDD_OBJECT)); AUtlCenterDialog(hDlg, 0); result = FALSE; break; case WM_COMMAND: objID = (OBJECTID)GetWindowLong(hDlg, DWL_USER); switch ( wParam ) { case IDOK: SetFocus(GetDlgItem(hDlg, IDOK)); UpdateObject(hDlg, objID); EndDialog(hDlg, TRUE); result = TRUE; break; case IDCANCEL: SetFocus(GetDlgItem(hDlg, IDCANCEL)); EndDialog(hDlg, FALSE); result = TRUE; break; case IDHELP: // WinHelp (hDlg, "serhelp.hlp", HELP_CONTEXT, HELPID_OBJD_Menu) ; result = TRUE; break; case BTN_DISPLAYNAME: case BTN_DISPLAYTITLE: LbTitleUpdate(hDlg, LB_SOURCE, TRUE); LbTitleUpdate(hDlg, LB_DESTINATION, TRUE); result = TRUE; break; case BTN_SHOWITEMS: case BTN_SHOWMENUS: LbContentUpdate(hDlg,objID); UpdateAddButton(hDlg); result = TRUE; break; case BTN_ADD: InsertObject(hDlg); UpdateAddButton(hDlg); UpdateSeparateButton(hDlg); result = TRUE; break; case BTN_REMOVE: DeleteObjects(hDlg); UpdateEditButton(hDlg); UpdateRemoveButton(hDlg); UpdateSeparateButton(hDlg); result = TRUE; break; case BTN_EDIT: EditObject(hDlg); LbTitleUpdate(hDlg, LB_SOURCE, TRUE); LbTitleUpdate(hDlg, LB_DESTINATION, TRUE); result = TRUE; break; case BTN_SEPARATOR: InsertSeparator(hDlg); result = TRUE; break; case LB_SOURCE: UpdateAddButton(hDlg); if (HIWORD(lParam) == LBN_DBLCLK) { InsertObject(hDlg); UpdateAddButton(hDlg); UpdateSeparateButton(hDlg); } result = TRUE; break; case LB_DESTINATION: UpdateRemoveButton(hDlg); UpdateEditButton(hDlg); if (HIWORD(lParam) == LBN_DBLCLK) { EditObject(hDlg); LbTitleUpdate(hDlg, LB_SOURCE, TRUE); LbTitleUpdate(hDlg, LB_DESTINATION, TRUE); } result = TRUE; break; default: result = FALSE; } break; default: result = FALSE; break; } return result; }
/** * Exec handler, parsing the passed in command * * @param InWorld World Context * @param Cmd Command to parse * @param Ar output device used for logging */ bool FDebugToolExec::Exec( UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar ) { // these commands are only allowed in standalone games #if UE_BUILD_SHIPPING || UE_BUILD_TEST if (GEngine->GetNetMode(InWorld) != NM_Standalone || (GEngine->GetWorldContextFromWorldChecked(InWorld).PendingNetGame != NULL)) { return 0; } // Edits the class defaults. else #endif if( FParse::Command(&Cmd,TEXT("EDITDEFAULT")) ) { // not allowed in the editor as this command can have far reaching effects such as impacting serialization if (!GIsEditor) { UClass* Class = NULL; if( ParseObject<UClass>( Cmd, TEXT("CLASS="), Class, ANY_PACKAGE ) == false ) { TCHAR ClassName[256]; if ( FParse::Token(Cmd,ClassName,ARRAY_COUNT(ClassName), 1) ) { Class = FindObject<UClass>( ANY_PACKAGE, ClassName); } } if (Class) { EditObject(Class->GetDefaultObject(), true); } else { Ar.Logf( TEXT("Missing class") ); } } return 1; } else if (FParse::Command(&Cmd,TEXT("EDITOBJECT"))) { UClass* searchClass = NULL; UObject* foundObj = NULL; // Search by class. if (ParseObject<UClass>(Cmd, TEXT("CLASS="), searchClass, ANY_PACKAGE)) { // pick the first valid object for (FObjectIterator It(searchClass); It && foundObj == NULL; ++It) { if (!It->IsPendingKill() && !It->IsTemplate()) { foundObj = *It; } } } // Search by name. else { FName searchName; FString SearchPathName; if ( FParse::Value(Cmd, TEXT("NAME="), searchName) ) { // Look for actor by name. for( TObjectIterator<UObject> It; It && foundObj == NULL; ++It ) { if (It->GetFName() == searchName) { foundObj = *It; } } } else if ( FParse::Token(Cmd,SearchPathName, true) ) { foundObj = FindObject<UObject>(ANY_PACKAGE,*SearchPathName); } } // Bring up an property editing window for the found object. if (foundObj != NULL) { // not allowed in the editor unless it is a PIE object as this command can have far reaching effects such as impacting serialization if (!GIsEditor || ((!foundObj->IsTemplate() && (foundObj->GetOutermost()->PackageFlags & PKG_PlayInEditor)))) { EditObject(foundObj, true); } } else { Ar.Logf(TEXT("Target not found")); } return 1; } else if (FParse::Command(&Cmd,TEXT("EDITARCHETYPE"))) { UObject* foundObj = NULL; // require fully qualified path name FString SearchPathName; if (FParse::Token(Cmd, SearchPathName, true)) { foundObj = FindObject<UObject>(ANY_PACKAGE,*SearchPathName); } // Bring up an property editing window for the found object. if (foundObj != NULL) { // not allowed in the editor unless it is a PIE object as this command can have far reaching effects such as impacting serialization if (!GIsEditor || ((!foundObj->IsTemplate() && (foundObj->GetOutermost()->PackageFlags & PKG_PlayInEditor)))) { EditObject(foundObj, false); } } else { Ar.Logf(TEXT("Target not found")); } return 1; } // Edits an objects properties or copies them to the clipboard. else if( FParse::Command(&Cmd,TEXT("EDITACTOR")) ) { UClass* Class = NULL; AActor* Found = NULL; if (FParse::Command(&Cmd, TEXT("TRACE"))) { APlayerController* PlayerController = InWorld->GetFirstPlayerController(); if (PlayerController != NULL) { // Do a trace in the player's facing direction and edit anything that's hit. FVector PlayerLocation; FRotator PlayerRotation; PlayerController->GetPlayerViewPoint(PlayerLocation, PlayerRotation); FHitResult Hit(1.0f); PlayerController->GetWorld()->LineTraceSingle(Hit, PlayerLocation, PlayerLocation + PlayerRotation.Vector() * 10000.f, ECC_Pawn, FCollisionQueryParams(NAME_None, true, PlayerController->GetPawn())); Found = Hit.GetActor(); } } // Search by class. else if( ParseObject<UClass>( Cmd, TEXT("CLASS="), Class, ANY_PACKAGE ) && Class->IsChildOf(AActor::StaticClass()) ) { UGameEngine* GameEngine = Cast<UGameEngine>(GEngine); // Look for the closest actor of this class to the player. FVector PlayerLocation(0.0f); APlayerController* PlayerController = InWorld->GetFirstPlayerController(); if (PlayerController != NULL) { FRotator DummyRotation; PlayerController->GetPlayerViewPoint(PlayerLocation, DummyRotation); } float MinDist = FLT_MAX; for( TActorIterator<AActor> It(InWorld, Class); It; ++It ) { if ( !It->IsPendingKill() ) { float const Dist = (PlayerController && It->GetRootComponent()) ? FVector::Dist(It->GetActorLocation(), PlayerLocation) : 0.f; if (Dist < MinDist) { MinDist = Dist; Found = *It; } } } } // Search by name. else { FName ActorName; if( FParse::Value( Cmd, TEXT("NAME="), ActorName ) ) { // Look for actor by name. for( FActorIterator It(InWorld); It; ++It ) { if( It->GetFName() == ActorName ) { Found = *It; break; } } } } // Bring up an property editing window for the found object. if( Found ) { // not allowed in the editor unless it is a PIE object as this command can have far reaching effects such as impacting serialization if (!GIsEditor || ((!Found->IsTemplate() && (Found->GetOutermost()->PackageFlags & PKG_PlayInEditor)))) { EditObject(Found, true); } } else { Ar.Logf( TEXT("Target not found") ); } return 1; } else { return 0; } }