void SSuggestionTextBox::HandleTextBoxTextChanged( const FText& InText ) { if (!IgnoreUIUpdate) { const FString& InputTextStr = TextBox->GetText().ToString(); if (!InputTextStr.IsEmpty() && OnShowingSuggestions.IsBound()) { TArray<FString> SuggestionStrings; OnShowingSuggestions.ExecuteIfBound(InText.ToString(), SuggestionStrings); for (int32 Index = 0; Index < SuggestionStrings.Num(); ++Index) { FString& StringRef = SuggestionStrings[Index]; StringRef = StringRef.Left(InputTextStr.Len()) + TEXT("\t") + StringRef.RightChop(InputTextStr.Len()); } SetSuggestions(SuggestionStrings, false); } else { ClearSuggestions(); } } OnTextChanged.ExecuteIfBound(InText); }
void SuggestionsSidebarBlock::Update(const CatalogItemPtr& item) { ClearMessage(); ClearSuggestions(); UpdateSuggestionsForItem(item); }
void SuggestionsSidebarBlock::Update(CatalogItem *item) { // FIXME: Cancel previous pending async operation if any ClearMessage(); ClearSuggestions(); QueryAllProviders(item); }
void SSuggestionTextBox::HandleTextBoxTextCommitted( const FText& InText, ETextCommit::Type CommitInfo ) { if (!MenuAnchor->IsOpen()) { OnTextCommitted.ExecuteIfBound(InText, CommitInfo); } if ((CommitInfo == ETextCommit::OnEnter) || (CommitInfo == ETextCommit::OnCleared)) { ClearSuggestions(); } }
void SuggestionsSidebarBlock::Update(const CatalogItemPtr& item) { // FIXME: Cancel previous pending async operation if any ClearMessage(); ClearSuggestions(); auto srclang = m_parent->GetCurrentSourceLanguage(); auto lang = m_parent->GetCurrentLanguage(); if (!srclang.IsValid() || !lang.IsValid() || srclang == lang) { OnQueriesFinished(); return; } QueryAllProviders(item); }
void SSuperSearchBox::UpdateSuggestions() { const FText & Query = InputText->GetText(); FSearchResults * SearchResults = SearchResultsCache.Find(Query.ToString()); //go through and build new suggestion list for list view widget ClearSuggestions(); //still waiting on results for current query if (SearchResults == NULL) { return; } //first tutorials UpdateSuggestionHelper(NSLOCTEXT("SuperSearch", "tutorials", "Tutorials"), SearchResults->TutorialResults, Suggestions); //then docs UpdateSuggestionHelper(NSLOCTEXT("SuperSearch", "docs", "Documentation"), SearchResults->OnlineResults.FindOrAdd(TEXT("documentation")), Suggestions); //then api UpdateSuggestionHelper(NSLOCTEXT("SuperSearch", "API", "API"), SearchResults->OnlineResults.FindOrAdd(TEXT("api")), Suggestions); //then wiki UpdateSuggestionHelper(NSLOCTEXT("SuperSearch", "wiki", "Wiki"), SearchResults->OnlineResults.FindOrAdd(TEXT("wiki")), Suggestions); //then answerhub UpdateSuggestionHelper(NSLOCTEXT("SuperSearch", "answers", "Answerhub"), SearchResults->OnlineResults.FindOrAdd(TEXT("answers")), Suggestions); FSuperSearchModule& SuperSearchModule = FModuleManager::LoadModuleChecked< FSuperSearchModule >(TEXT("SuperSearch")); //Broadcast to anyone registered SuperSearchModule.GetSearchTextChanged().Broadcast(InputText->GetText().ToString(),Suggestions); //finally add other category Suggestions.Add(OtherCategory); Suggestions.Add(AskQuestionEntry); SelectedSuggestion = 1; // Ideally if the selection box is open the output window is not changing it's window title (flickers) SuggestionBox->SetIsOpen(true, false); MarkActiveSuggestion(); // Force the textbox back into focus. FSlateApplication::Get().SetKeyboardFocus(InputText.ToSharedRef(), EFocusCause::SetDirectly); }
void SSuperSearchBox::OnTextChanged(const FText& InText) { if(bIgnoreUIUpdate) { return; } const FString& InputTextStr = InputText->GetText().ToString(); if(!InputTextStr.IsEmpty()) { //search through google for online content { TSharedRef<class IHttpRequest> HttpRequest = FHttpModule::Get().CreateRequest(); // build the url FString UrlEncodedString = FPlatformHttp::UrlEncode(InText.ToString()); //we need to url encode for special characters (especially other languages) // use partial response to only look at items and things we care about for items right now (title,link and label name) const FText QueryURL = FText::Format(FText::FromString("https://www.googleapis.com/customsearch/v1?key=AIzaSyCMGfdDaSfjqv5zYoS0mTJnOT3e9MURWkU&cx=009868829633250020713:y7tfd8hlcgg&fields=items(title,link,labels/name)&q={0}+less:forums"), FText::FromString(UrlEncodedString)); //save http request into map to ensure correct ordering FText & Query = RequestQueryMap.FindOrAdd(HttpRequest); Query = InText; // kick off http request to read friends HttpRequest->OnProcessRequestComplete().BindRaw(this, &SSuperSearchBox::Query_HttpRequestComplete); HttpRequest->SetURL(QueryURL.ToString()); HttpRequest->SetHeader(TEXT("Content-Type"), TEXT("application/json")); HttpRequest->SetVerb(TEXT("GET")); HttpRequest->ProcessRequest(); } #if WITH_EDITOR //search local tutorials { FAssetRegistryModule& AssetRegistry = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(TEXT("AssetRegistry")); FARFilter Filter; Filter.ClassNames.Add(UBlueprint::StaticClass()->GetFName()); Filter.bRecursiveClasses = true; Filter.TagsAndValues.Add(TEXT("ParentClass"), FString::Printf(TEXT("%s'%s'"), *UClass::StaticClass()->GetName(), *UEditorTutorial::StaticClass()->GetPathName())); TArray<FAssetData> AssetData; AssetRegistry.Get().GetAssets(Filter, AssetData); //add search result into cache FSearchResults& SearchResults = SearchResultsCache.FindOrAdd(InText.ToString()); TArray<FSearchEntry>& TutorialResults = SearchResults.TutorialResults; TutorialResults.Empty(); for (const FAssetData& Asset : AssetData) { const FString* SearchTag = Asset.TagsAndValues.Find("SearchTags"); const FString* ResultTitle = Asset.TagsAndValues.Find("Title"); if( ResultTitle) { if (ResultTitle->Contains(InText.ToString())) { FSearchEntry SearchEntry; SearchEntry.Title = *ResultTitle; SearchEntry.URL = ""; SearchEntry.bCategory = false; SearchEntry.AssetData = Asset; TutorialResults.Add(SearchEntry); } } // If the asset has search tags, search them if ((SearchTag) && (SearchTag->IsEmpty()== false)) { TArray<FString> SearchTags; SearchTag->ParseIntoArray(SearchTags,TEXT(",")); //trim any xs spaces off the strings. for (int32 iTag = 0; iTag < SearchTags.Num() ; iTag++) { SearchTags[iTag] = SearchTags[iTag].Trim(); SearchTags[iTag] = SearchTags[iTag].TrimTrailing(); } if (SearchTags.Find(InText.ToString()) != INDEX_NONE) { FSearchEntry SearchEntry; SearchEntry.Title = *ResultTitle; SearchEntry.URL = ""; SearchEntry.bCategory = false; SearchEntry.AssetData = Asset; TutorialResults.Add(SearchEntry); } } } } #endif } else { ClearSuggestions(); } }