FReply SButton::OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) { FReply Reply = FReply::Unhandled(); if (IsEnabled() && (InKeyEvent.GetKey() == EKeys::Enter || InKeyEvent.GetKey() == EKeys::SpaceBar || InKeyEvent.GetKey() == EKeys::Gamepad_FaceButton_Bottom)) { Press(); if (PressMethod == EButtonPressMethod::ButtonPress) { //execute our "OnClicked" delegate, and get the reply Reply = OnClicked.IsBound() ? OnClicked.Execute() : FReply::Handled(); //You should ALWAYS handle the OnClicked event. ensure(Reply.IsEventHandled() == true); } else { Reply = FReply::Handled(); } } else { Reply = SBorder::OnKeyDown(MyGeometry, InKeyEvent); } //return the constructed reply return Reply; }
FReply SAssetPicker::OnKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent) { // Up and down move thru the filtered list int32 SelectionDelta = 0; if (InKeyEvent.GetKey() == EKeys::Up) { SelectionDelta = -1; } else if (InKeyEvent.GetKey() == EKeys::Down) { SelectionDelta = +1; } else if (InKeyEvent.GetKey() == EKeys::Enter) { TArray<FAssetData> SelectionSet = AssetViewPtr->GetSelectedAssets(); HandleAssetsActivated(SelectionSet, EAssetTypeActivationMethod::Opened); return FReply::Handled(); } if (SelectionDelta != 0) { AssetViewPtr->AdjustActiveSelection(SelectionDelta); return FReply::Handled(); } if (Commands->ProcessCommandBindings(InKeyEvent)) { return FReply::Handled(); } return FReply::Unhandled(); }
FReply SWidget::OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) { if (SupportsKeyboardFocus()) { EUINavigation Direction = FSlateApplicationBase::Get().GetNavigationDirectionFromKey( InKeyEvent ); // It's the left stick return a navigation request of the correct direction if ( Direction != EUINavigation::Invalid ) { return FReply::Handled().SetNavigation( Direction ); } else if ( InKeyEvent.GetKey() == EKeys::Tab ) { //@TODO: Really these uses of input should be at a lower priority, only occurring if nothing else handled them // For now this code prevents consuming them when some modifiers are held down, allowing some limited binding const bool bAllowEatingKeyEvents = !InKeyEvent.IsControlDown() && !InKeyEvent.IsAltDown() && !InKeyEvent.IsCommandDown(); if (bAllowEatingKeyEvents) { EUINavigation MoveDirection = (InKeyEvent.IsShiftDown()) ? EUINavigation::Previous : EUINavigation::Next; return FReply::Handled().SetNavigation(MoveDirection); } } } return FReply::Unhandled(); }
virtual FReply OnKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent) override { const FKey Key = InKeyEvent.GetKey(); if (Key == EKeys::Enter) { MenuOwner->HandleLoginUIClosed(TSharedPtr<const FUniqueNetId>(), 0); } else if (!MenuOwner->GetControlsLocked() && Key == EKeys::Gamepad_FaceButton_Bottom) { bool bSkipToMainMenu = true; { const auto OnlineSub = IOnlineSubsystem::Get(); if (OnlineSub) { const auto IdentityInterface = OnlineSub->GetIdentityInterface(); if (IdentityInterface.IsValid()) { TSharedPtr<GenericApplication> GenericApplication = FSlateApplication::Get().GetPlatformApplication(); const bool bIsLicensed = GenericApplication->ApplicationLicenseValid(); const auto LoginStatus = IdentityInterface->GetLoginStatus(InKeyEvent.GetUserIndex()); if (LoginStatus == ELoginStatus::NotLoggedIn || !bIsLicensed) { // Show the account picker. const auto ExternalUI = OnlineSub->GetExternalUIInterface(); if (ExternalUI.IsValid()) { ExternalUI->ShowLoginUI(InKeyEvent.GetUserIndex(), false, IOnlineExternalUI::FOnLoginUIClosedDelegate::CreateSP(MenuOwner, &FShooterWelcomeMenu::HandleLoginUIClosed)); bSkipToMainMenu = false; } } } } } if (bSkipToMainMenu) { const auto OnlineSub = IOnlineSubsystem::Get(); if (OnlineSub) { const auto IdentityInterface = OnlineSub->GetIdentityInterface(); if (IdentityInterface.IsValid()) { TSharedPtr<const FUniqueNetId> UserId = IdentityInterface->GetUniquePlayerId(InKeyEvent.GetUserIndex()); // If we couldn't show the external login UI for any reason, or if the user is // already logged in, just advance to the main menu immediately. MenuOwner->HandleLoginUIClosed(UserId, InKeyEvent.GetUserIndex()); } } } return FReply::Handled(); } return FReply::Unhandled(); }
FReply SSuperSearchBox::OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& KeyEvent ) { if(SuggestionBox->IsOpen() && Suggestions.Num()) { if(KeyEvent.GetKey() == EKeys::Up || KeyEvent.GetKey() == EKeys::Down) { if(KeyEvent.GetKey() == EKeys::Up) { //if we're at the top swing around if(SelectedSuggestion == 1) { SelectedSuggestion = Suggestions.Num() - 1; } else { // got one up --SelectedSuggestion; //make sure we're not selecting category if (Suggestions[SelectedSuggestion]->bCategory) { //we know that category is never shown empty so above us will be fine --SelectedSuggestion; } } } if(KeyEvent.GetKey() == EKeys::Down) { if(SelectedSuggestion < Suggestions.Num() - 1) { // go one down, possibly from edit control to top ++SelectedSuggestion; //make sure we're not selecting category if (Suggestions[SelectedSuggestion]->bCategory) { //we know that category is never shown empty so below us will be fine ++SelectedSuggestion; } } else { // back to edit control SelectedSuggestion = 1; } } MarkActiveSuggestion(); return FReply::Handled(); } } return FReply::Unhandled(); }
FReply STableViewBase::OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) { if ( InKeyEvent.IsControlDown() && InKeyEvent.GetKey() == EKeys::End ) { ScrollToBottom(); return FReply::Handled(); } return FReply::Unhandled(); }
FReply SMultiBoxWidget::OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& KeyEvent ) { SCompoundWidget::OnKeyDown(MyGeometry, KeyEvent); // allow use of up and down keys to transfer focus/hover state if(KeyEvent.GetKey() == EKeys::Up || KeyEvent.GetKey() == EKeys::Down) { return FocusNextWidget(EUINavigation::Next); } return FReply::Unhandled(); }
FValorActionInputBinding UInputBlueprintLibrary::K2_GetInputAction(const FKeyEvent& KeyEvent) { FValorActionInputBinding Binding; Binding.Key = KeyEvent.GetKey(); Binding.KeyAsString = Binding.Key.GetDisplayName().ToString(); Binding.bAlt = KeyEvent.IsAltDown(); Binding.bCtrl = KeyEvent.IsControlDown(); Binding.bShift = KeyEvent.IsShiftDown(); Binding.bCmd = KeyEvent.IsCommandDown(); return Binding; }
FReply SAssetSearchBox::HandleKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) { if ( SuggestionBox->IsOpen() && (InKeyEvent.GetKey() == EKeys::Up || InKeyEvent.GetKey() == EKeys::Down) ) { const bool bSelectingUp = InKeyEvent.GetKey() == EKeys::Up; TSharedPtr<FString> SelectedSuggestion = GetSelectedSuggestion(); if ( SelectedSuggestion.IsValid() ) { // Find the selection index and select the previous or next one int32 TargetIdx = INDEX_NONE; for ( int32 SuggestionIdx = 0; SuggestionIdx < Suggestions.Num(); ++SuggestionIdx ) { if ( Suggestions[SuggestionIdx] == SelectedSuggestion ) { if ( bSelectingUp ) { TargetIdx = SuggestionIdx - 1; } else { TargetIdx = SuggestionIdx + 1; } break; } } if ( Suggestions.IsValidIndex(TargetIdx) ) { SuggestionListView->SetSelection( Suggestions[TargetIdx] ); SuggestionListView->RequestScrollIntoView( Suggestions[TargetIdx] ); } } else if ( !bSelectingUp && Suggestions.Num() > 0 ) { // Nothing selected and pressed down, select the first item SuggestionListView->SetSelection( Suggestions[0] ); } return FReply::Handled(); } if (OnKeyDownHandler.IsBound()) { return OnKeyDownHandler.Execute(MyGeometry, InKeyEvent); } return FReply::Unhandled(); }
FReply SVisualLoggerLogsList::OnKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent) { if (InKeyEvent.GetKey() == EKeys::C && (InKeyEvent.IsLeftCommandDown() || InKeyEvent.IsLeftControlDown())) { FString ClipboardString; for (const TSharedPtr<struct FLogEntryItem>& CurrentItem : LogsLinesWidget->GetSelectedItems()) { ClipboardString += CurrentItem->Category + FString(TEXT(" (")) + FString(FOutputDevice::VerbosityToString(CurrentItem->Verbosity)) + FString(TEXT(") ")) + CurrentItem->Line; ClipboardString += TEXT("\n"); } FPlatformMisc::ClipboardCopy(*ClipboardString); return FReply::Handled(); } return FReply::Unhandled(); }
int32 FCEFWebBrowserWindow::GetCefKeyboardModifiers(const FKeyEvent& KeyEvent) { int32 Modifiers = GetCefInputModifiers(KeyEvent); const FKey Key = KeyEvent.GetKey(); if (Key == EKeys::LeftAlt || Key == EKeys::LeftCommand || Key == EKeys::LeftControl || Key == EKeys::LeftShift) { Modifiers |= EVENTFLAG_IS_LEFT; } if (Key == EKeys::RightAlt || Key == EKeys::RightCommand || Key == EKeys::RightControl || Key == EKeys::RightShift) { Modifiers |= EVENTFLAG_IS_RIGHT; } if (Key == EKeys::NumPadZero || Key == EKeys::NumPadOne || Key == EKeys::NumPadTwo || Key == EKeys::NumPadThree || Key == EKeys::NumPadFour || Key == EKeys::NumPadFive || Key == EKeys::NumPadSix || Key == EKeys::NumPadSeven || Key == EKeys::NumPadEight || Key == EKeys::NumPadNine) { Modifiers |= EVENTFLAG_IS_KEY_PAD; } return Modifiers; }
FReply FFaceFXComboChoiceWidget::OnKeyDown(const FGeometry& Geometry, const FKeyEvent& KeyboardEvent) { if(KeyboardEvent.GetKey() == EKeys::Escape) { return HandleButtonClicked(EAppReturnType::Cancel); } return FReply::Unhandled(); }
virtual FReply OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) override { if (OnKeyDownDelegate.IsBound()) { return OnKeyDownDelegate.Execute(InKeyEvent.GetKey()); } return FReply::Unhandled(); }
FReply SFlareKeyBind::OnKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent) { if (bWaitingForKey) { SetKey(InKeyEvent.GetKey()); return FReply::Handled(); } return FReply::Unhandled(); }
FReply SInlineEditableTextBlock::OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) { if(InKeyEvent.GetKey() == EKeys::F2) { EnterEditingMode(); return FReply::Handled(); } return FReply::Unhandled(); }
FReply SPropertyComboBox::OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) { const FKey Key = InKeyEvent.GetKey(); if(Key == EKeys::Up) { const int32 SelectionIndex = ComboItemList.Find( GetSelectedItem() ); if ( SelectionIndex >= 1 ) { if (RestrictedList.Num() > 0) { // find & select the previous unrestricted item for(int32 TestIndex = SelectionIndex - 1; TestIndex >= 0; TestIndex--) { if(!RestrictedList[TestIndex]) { SComboBox< TSharedPtr<FString> >::SetSelectedItem(ComboItemList[TestIndex]); break; } } } else { SComboBox< TSharedPtr<FString> >::SetSelectedItem(ComboItemList[SelectionIndex - 1]); } } return FReply::Handled(); } else if(Key == EKeys::Down) { const int32 SelectionIndex = ComboItemList.Find( GetSelectedItem() ); if ( SelectionIndex < ComboItemList.Num() - 1 ) { if (RestrictedList.Num() > 0) { // find & select the next unrestricted item for(int32 TestIndex = SelectionIndex + 1; TestIndex < RestrictedList.Num() && TestIndex < ComboItemList.Num(); TestIndex++) { if(!RestrictedList[TestIndex]) { SComboBox< TSharedPtr<FString> >::SetSelectedItem(ComboItemList[TestIndex]); break; } } } else { SComboBox< TSharedPtr<FString> >::SetSelectedItem(ComboItemList[SelectionIndex + 1]); } } return FReply::Handled(); } return SComboBox< TSharedPtr<FString> >::OnKeyDown( MyGeometry, InKeyEvent ); }
FReply SSequencerLabelEditor::HandleFilterBoxKeyDown(const FGeometry& /*Geometry*/, const FKeyEvent& KeyEvent) { if (KeyEvent.GetKey() == EKeys::Enter) { CreateLabelFromFilterText(); return FReply::Handled(); } return FReply::Unhandled(); }
/** Used to intercept Escape key presses, then interprets them as cancel */ virtual FReply OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) { // Pressing escape returns as if the user canceled if ( InKeyEvent.GetKey() == EKeys::Escape ) { return OnButtonClick(FDlgDeltaTransform::Cancel); } return FReply::Unhandled(); }
FReply SColorGradientEditor::OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) { if ( IsEditingEnabled.Get() == true && InKeyEvent.GetKey() == EKeys::Platform_Delete ) { DeleteStop( SelectedStop ); return FReply::Handled(); } return FReply::Unhandled(); }
/** Called when the player presses a key and this widget has focus */ FReply UMurphysLawInGameMenu::NativeOnKeyDown(const FGeometry& InGeometry, const FKeyEvent& InKeyEvent) { if (InKeyEvent.GetKey() == EKeys::Escape) { OnResumeGameClick(); return FReply::Handled(); } return FReply::Unhandled(); }
FReply SGlobalOpenAssetDialog::OnPreviewKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent) { if (InKeyEvent.GetKey() == EKeys::Escape) { FSlateApplication::Get().DismissAllMenus(); return FReply::Handled(); } return FReply::Unhandled(); }
FValorAxisInputBinding UInputBlueprintLibrary::K2_GetInputAxis(const FKeyEvent& KeyEvent) { FValorAxisInputBinding Binding; Binding.Key = KeyEvent.GetKey(); Binding.KeyAsString = Binding.Key.GetDisplayName().ToString(); Binding.Scale = 1; return Binding; }
END_SLATE_FUNCTION_BUILD_OPTIMIZATION FReply SAssetDialog::OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) { if ( InKeyEvent.GetKey() == EKeys::Escape ) { CloseDialog(); return FReply::Handled(); } return SCompoundWidget::OnKeyDown(MyGeometry, InKeyEvent); }
FReply FSceneViewport::OnKeyUp( const FGeometry& InGeometry, const FKeyEvent& InKeyEvent ) { // Start a new reply state CurrentReplyState = FReply::Handled(); FKey Key = InKeyEvent.GetKey(); KeyStateMap.Add( Key, false ); if( ViewportClient && GetSizeXY() != FIntPoint::ZeroValue ) { // Switch to the viewport clients world before processing input FScopedConditionalWorldSwitcher WorldSwitcher( ViewportClient ); if (!ViewportClient->InputKey(this, InKeyEvent.GetUserIndex(), Key, IE_Released, 1.0f, Key.IsGamepadKey())) { CurrentReplyState = FReply::Unhandled(); } } return CurrentReplyState; }
FReply FSceneViewport::OnKeyDown( const FGeometry& InGeometry, const FKeyEvent& InKeyEvent ) { // Start a new reply state CurrentReplyState = FReply::Handled(); FKey Key = InKeyEvent.GetKey(); KeyStateMap.Add( Key, true ); //@todo Slate Viewports: FWindowsViewport checks for Alt+Enter or F11 and toggles fullscreen. Unknown if fullscreen via this method will be needed for slate viewports. if( ViewportClient && GetSizeXY() != FIntPoint::ZeroValue ) { // Switch to the viewport clients world before processing input FScopedConditionalWorldSwitcher WorldSwitcher( ViewportClient ); if (!ViewportClient->InputKey(this, InKeyEvent.GetUserIndex(), Key, InKeyEvent.IsRepeat() ? IE_Repeat : IE_Pressed, 1.0f, Key.IsGamepadKey())) { CurrentReplyState = FReply::Unhandled(); } } return CurrentReplyState; }
FReply SAssetSearchBox::OnPreviewKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) { if ( SuggestionBox->IsOpen() && InKeyEvent.GetKey() == EKeys::Escape ) { // Clear any selection first to prevent the currently selection being set in the text box SuggestionListView->ClearSelection(); SuggestionBox->SetIsOpen(false, false); return FReply::Handled(); } return FReply::Unhandled(); }
FReply SAblAbilityPreviewAssetClassDlg::OnKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent) { if (InKeyEvent.GetKey() == EKeys::Escape) { m_bOkClicked = false; CloseDialog(); return FReply::Handled(); } return SWidget::OnKeyDown(MyGeometry, InKeyEvent); }
void FWebBrowserWindow::OnKeyDown(const FKeyEvent& InKeyEvent) { if (IsValid()) { CefKeyEvent KeyEvent; #if PLATFORM_MAC KeyEvent.native_key_code = InKeyEvent.GetKeyCode(); KeyEvent.character = InKeyEvent.GetCharacter(); #else KeyEvent.windows_key_code = InKeyEvent.GetKeyCode(); #endif // TODO: Figure out whether this is a system key if we come across problems /*KeyEvent.is_system_key = message == WM_SYSCHAR || message == WM_SYSKEYDOWN || message == WM_SYSKEYUP;*/ KeyEvent.type = KEYEVENT_RAWKEYDOWN; KeyEvent.modifiers = GetCefKeyboardModifiers(InKeyEvent); InternalCefBrowser->GetHost()->SendKeyEvent(KeyEvent); } }
FReply SPythonEditableText::OnKeyDown(const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent) { FReply Reply = FReply::Unhandled(); if (InKeyEvent.GetKeyCode() == 9) { Reply = FReply::Handled(); } else if (InKeyEvent.IsControlDown() && InKeyEvent.GetKeyCode() == 13) { Reply = FReply::Handled(); OnExecuted.Execute(); } else { Reply = SMultiLineEditableText::OnKeyDown(MyGeometry, InKeyEvent); } //FString test; //test=FString::FromInt(InKeyEvent.GetKeyCode()); //InsertTextAtCursor(test); return Reply; }
virtual FReply HandleChatKeyEntry(const FKeyEvent& KeyEvent) override { FReply Reply = FReply::Unhandled(); if(KeyEvent.GetKey() == EKeys::Tab || KeyEvent.GetKey() == EKeys::Enter) { if(SelectedChatTip.IsValid() && ProcessedInput.IsValid() && ProcessedInput->NeedsTip == true ) { SelectedChatTip->ExecuteTip(); Reply = FReply::Handled(); } } else if(KeyEvent.GetKey() == EKeys::Up) { SetPreviousCommand(); Reply = FReply::Handled(); } else if( KeyEvent.GetKey() == EKeys::Down) { SetNextCommand(); Reply = FReply::Handled(); } return Reply; }