// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreTypes.h" #include "Framework/Docking/WorkspaceItem.h" #include "Input/Reply.h" #include "Layout/Visibility.h" #include "SlateFwd.h" #include "Templates/SharedPointer.h" #include "Widgets/DeclarativeSyntaxSupport.h" #include "Widgets/SCompoundWidget.h" #include "Models/LegacyProjectLauncherModel.h" class FMenuBuilder; class SBorder; class SProjectLauncherProgress; class SProjectLauncherSettings; class SProjectLauncherSimpleDeviceListView; class SWindow; struct FSlateBrush; enum class ECheckBoxState : uint8; /** * Implements a Slate widget for the launcher user interface. */ class SLegacyProjectLauncher : public SCompoundWidget { public: SLATE_BEGIN_ARGS(SLegacyProjectLauncher) { } /** Exposes a delegate to be invoked when the launcher has closed. */ SLATE_EVENT(FSimpleDelegate, OnClosed) SLATE_END_ARGS() public: /** Constructor. */ SLegacyProjectLauncher(); /** Destructor. */ ~SLegacyProjectLauncher(); public: /** * Constructs the widget. * * @param InArgs The Slate argument list. * @param ConstructUnderMajorTab The major tab which will contain the session front-end. * @param ConstructUnderWindow The window in which this widget is being constructed. * @param InModel The view model to use. */ void Construct(const FArguments& InArgs, const TSharedRef& ConstructUnderMajorTab, const TSharedPtr& ConstructUnderWindow, const TSharedRef& InModel); protected: /** * Fills the Window menu with menu items. * * @param MenuBuilder The multi-box builder that should be filled with content for this pull-down menu. * @param RootMenuGroup The root menu group. */ static void FillWindowMenu(FMenuBuilder& MenuBuilder, TSharedRef RootMenuGroup); private: /** Callback for toggling the advanced mode. */ void OnAdvancedChanged(const ECheckBoxState NewCheckedState); /** Callback to determine if we are in advanced mode. */ ECheckBoxState OnIsAdvanced() const; /** Get advanced toggle button brush. */ const FSlateBrush* GetAdvancedToggleBrush() const; /** Callback for whether advanced options should be shown. */ bool GetIsAdvanced() const; /** Callback for editing a profile. */ void OnProfileEdit(const ILauncherProfileRef& Profile); /** Callback for running a profile. */ void OnProfileRun(const ILauncherProfileRef& Profile); /** Callback for deleting a profile. */ void OnProfileDelete(const ILauncherProfileRef& Profile); /** Callback for clicking the Add New Launch Profile. */ void OnAddCustomLaunchProfileClicked(); /** Callback for filling profile wizard menu. */ TSharedRef MakeProfileWizardsMenu(); /** Execute specified profile wizard. */ void ExecProfileWizard(ILauncherProfileWizardPtr InWizard); /** Callback for when the settings panel is closed. */ FReply OnProfileSettingsClose(); /** Callback for when the progress panel is closed. */ FReply OnProgressClose(); /** Callback for when the progress panel requests the profile to be re run. */ FReply OnRerunClicked(); private: /** The current launcher worker, if any. */ ILauncherWorkerPtr LauncherWorker; /** The Launcher profile the launcherWorker is running. */ ILauncherProfilePtr LauncherProfile; /** Holds a pointer to the view model. */ TSharedPtr Model; /** The profile settings panel. */ TSharedPtr ProfileSettingsPanel; /** The progress panel. */ TSharedPtr ProgressPanel; /** The widget switcher. */ TSharedPtr WidgetSwitcher; /** Contains the launch list widgets. */ // TSharedPtr LaunchList; TSharedPtr LaunchList; /** Contains the profile list widgets. */ TSharedPtr ProfileList; /** Whether we are showing advanced options. */ bool bAdvanced; };