// Copyright Epic Games, Inc. All Rights Reserved. #include "SOneTimeIndustryQuery.h" #include "Widgets/Notifications/SNotificationBackground.h" #include "Widgets/SWindow.h" #include "Widgets/Layout/SBox.h" #include "Widgets/Layout/SBorder.h" #include "Widgets/Text/STextBlock.h" #include "Widgets/Input/SButton.h" #include "Widgets/Images/SImage.h" #include "Widgets/Input/SComboBox.h" #include "SPrimaryButton.h" #include "EngineAnalytics.h" #include "Misc/EngineBuildSettings.h" #include "Editor/EditorEngine.h" #include "Analytics/AnalyticsPrivacySettings.h" #define LOCTEXT_NAMESPACE "OneTimeIndustryQuery" TWeakPtr SOneTimeIndustryQuery::ActiveNotification; TWeakPtr SOneTimeIndustryQuery::ParentWindow; const FName SOneTimeIndustryQuery::GamesIndustryName = FName("Games"); const FName SOneTimeIndustryQuery::FilmIndustryName = FName("FilmAndTV"); const FName SOneTimeIndustryQuery::ArchitectureIndustryName = FName("Architecture"); const FName SOneTimeIndustryQuery::AutoIndustryName = FName("AutomotiveAndManufacturing"); const FName SOneTimeIndustryQuery::BroadcastIndustryName = FName("BroadcastingAndLiveEvents"); const FName SOneTimeIndustryQuery::AdIndustryName = FName("AdvertisingAndMarketing"); const FName SOneTimeIndustryQuery::SimulationIndustryName = FName("TrainingAndSimulation"); const FName SOneTimeIndustryQuery::FashionIndustryName = FName("Fashion"); const FName SOneTimeIndustryQuery::OtherIndustryName = FName("Other"); void SOneTimeIndustryQuery::Show(TSharedPtr InParentWindow) { if (!ActiveNotification.IsValid()) { TSharedRef ActiveNotificationRef = SNew(SOneTimeIndustryQuery); ActiveNotification = ActiveNotificationRef; ParentWindow = InParentWindow; InParentWindow->AddOverlaySlot() .VAlign(VAlign_Bottom) .HAlign(HAlign_Right) .Padding(FMargin(20.0f, 20.0f, 10.0f, 50.f)) [ ActiveNotificationRef ]; } } void SOneTimeIndustryQuery::Dismiss() { TSharedPtr ActiveNotificationPin = ActiveNotification.Pin(); if (ParentWindow.IsValid() && ActiveNotificationPin.IsValid()) { ParentWindow.Pin()->RemoveOverlaySlot(ActiveNotificationPin.ToSharedRef()); } ParentWindow.Reset(); ActiveNotification.Reset(); } const bool SOneTimeIndustryQuery::ShouldShowIndustryQuery() { return !FEngineBuildSettings::IsInternalBuild() && GEngine->AreEditorAnalyticsEnabled() && !GetDefault()->bSuppressIndustryPopup; } void SOneTimeIndustryQuery::Construct(const FArguments& InArgs) { IndustryComboList.Add(MakeShared(SOneTimeIndustryQuery::GamesIndustryName)); IndustryComboList.Add(MakeShared(SOneTimeIndustryQuery::FilmIndustryName)); IndustryComboList.Add(MakeShared(SOneTimeIndustryQuery::ArchitectureIndustryName)); IndustryComboList.Add(MakeShared(SOneTimeIndustryQuery::AutoIndustryName)); IndustryComboList.Add(MakeShared(SOneTimeIndustryQuery::BroadcastIndustryName)); IndustryComboList.Add(MakeShared(SOneTimeIndustryQuery::AdIndustryName)); IndustryComboList.Add(MakeShared(SOneTimeIndustryQuery::SimulationIndustryName)); IndustryComboList.Add(MakeShared(SOneTimeIndustryQuery::FashionIndustryName)); IndustryComboList.Add(MakeShared(SOneTimeIndustryQuery::OtherIndustryName)); ChildSlot [ SNew(SBox) .WidthOverride(375.0f) .HeightOverride(128.0f) [ SNew(SNotificationBackground) .Padding(FMargin(8, 8)) [ SNew(SHorizontalBox) + SHorizontalBox::Slot() .FillWidth(1.0f) .Padding(20.0f, 15.0f, 0.0f, 0.0f) [ SNew(SVerticalBox) + SVerticalBox::Slot() .AutoHeight() .Padding(0.0f, 0.0f, 0.0f, 0.0f) [ SNew(STextBlock) .Font(FAppStyle::Get().GetFontStyle("NotificationList.FontBold")) .Text(LOCTEXT("IndustryQuestionDesc", "Help us improve Unreal Engine by \ntelling us your industry.")) .ColorAndOpacity(FStyleColors::ForegroundHover) ] + SVerticalBox::Slot() .VAlign(VAlign_Center) .FillHeight(1.0f) .Padding(0.0f, 12.0f, 0.0f, 12.0f) [ SNew(SHorizontalBox) + SHorizontalBox::Slot() .FillWidth(1.0f) [ SNew(SComboBox>) .OptionsSource(&IndustryComboList) .OnGenerateWidget(this, &SOneTimeIndustryQuery::GenerateIndustryComboItem) .OnSelectionChanged(this, &SOneTimeIndustryQuery::HandleIndustryComboChanged) [ SNew(STextBlock) .Text(this, &SOneTimeIndustryQuery::GetUserSetIndustryNameText) ] ] + SHorizontalBox::Slot() .AutoWidth() .Padding(15.0f, 0.0f, 0.0f, 0.0f) [ SNew(SPrimaryButton) .Text(LOCTEXT("IndustryFeedbackSubmit", "Submit")) .IsEnabled(this, &SOneTimeIndustryQuery::CanSubmitIndustryInfo) .OnClicked(this, &SOneTimeIndustryQuery::OnSubmit) ] ] ] + SHorizontalBox::Slot() .Padding(0.0f, 0.0f, 0.0f, 0.0f) .HAlign(HAlign_Right) .VAlign(VAlign_Top) .AutoWidth() [ SNew(SButton) .ButtonStyle(FAppStyle::Get(), "SimpleButton") .OnClicked_Lambda([]() { SOneTimeIndustryQuery::Dismiss(); return FReply::Handled(); }) [ SNew(SImage) .Image(FAppStyle::Get().GetBrush("Icons.X")) .ColorAndOpacity(FSlateColor::UseForeground()) ] ] ] ] ]; } bool SOneTimeIndustryQuery::CanSubmitIndustryInfo() const { return UserSetIndustry.IsSet(); } void SOneTimeIndustryQuery::HandleIndustryComboChanged(TSharedPtr Item, ESelectInfo::Type SelectInfo) { FSlateApplication::Get().DismissAllMenus(); UserSetIndustry = *Item.Get(); } TSharedRef SOneTimeIndustryQuery::GenerateIndustryComboItem(TSharedPtr InItem) const { return SNew(STextBlock).Text(GetIndustryNameText(*InItem.Get())); } FText SOneTimeIndustryQuery::GetUserSetIndustryNameText() const { if (!UserSetIndustry.IsSet()) { return LOCTEXT("SelectYourIndustry", "Select Your Industry"); } return GetIndustryNameText(UserSetIndustry.GetValue()); } FText SOneTimeIndustryQuery::GetIndustryNameText(FName IndustryName) const { if (IndustryName == SOneTimeIndustryQuery::GamesIndustryName) { return LOCTEXT("GameDevelopment", "Game Development"); } else if (IndustryName == SOneTimeIndustryQuery::FilmIndustryName) { return LOCTEXT("FilmAndTV", "Film & TV"); } else if (IndustryName == SOneTimeIndustryQuery::ArchitectureIndustryName) { return LOCTEXT("Architecture", "Architecture"); } else if (IndustryName == SOneTimeIndustryQuery::AutoIndustryName) { return LOCTEXT("AutomotiveAndManufacturing", "Automotive & Manufacturing"); } else if (IndustryName == SOneTimeIndustryQuery::BroadcastIndustryName) { return LOCTEXT("BroadcastingAndLiveEvents", "Broadcasting & Live Events"); } else if (IndustryName == SOneTimeIndustryQuery::AdIndustryName) { return LOCTEXT("AdvertisingAndMarketing", "Advertising & Marketing"); } else if (IndustryName == SOneTimeIndustryQuery::SimulationIndustryName) { return LOCTEXT("TrainingAndSimulation", "Training & Simulation"); } else if (IndustryName == SOneTimeIndustryQuery::FashionIndustryName) { return LOCTEXT("Fashion", "Fashion"); } else if (IndustryName == SOneTimeIndustryQuery::OtherIndustryName) { return LOCTEXT("Other", "Other"); } return FText::GetEmpty(); } FReply SOneTimeIndustryQuery::OnSubmit() { if (FEngineAnalytics::IsAvailable()) { TArray< FAnalyticsEventAttribute > IndustryAttribs; IndustryAttribs.Add(FAnalyticsEventAttribute(TEXT("Industry"), UserSetIndustry.GetValue().ToString())); FEngineAnalytics::GetProvider().RecordEvent(TEXT("Editor.UserIndustry"), IndustryAttribs); } SOneTimeIndustryQuery::Dismiss(); return FReply::Handled(); } #undef LOCTEXT_NAMESPACE