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);
}
示例#2
0
void SuggestionsSidebarBlock::Update(const CatalogItemPtr& item)
{
    ClearMessage();
    ClearSuggestions();

    UpdateSuggestionsForItem(item);
}
示例#3
0
文件: sidebar.cpp 项目: mapme/poedit
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();
	}
}
示例#5
0
文件: sidebar.cpp 项目: ryoon/poedit
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);
}
示例#6
0
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);
}
示例#7
0
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();
	}
}