2016-12-08 08:52:44 -05:00
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
2014-03-14 14:13:41 -04:00
# pragma once
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
# include "CoreMinimal.h"
# include "AddToProjectConfig.h"
# include "Layout/Visibility.h"
# include "Widgets/DeclarativeSyntaxSupport.h"
# include "Styling/SlateColor.h"
# include "GameProjectUtils.h"
# include "Input/Reply.h"
# include "Widgets/SWidget.h"
# include "Widgets/SCompoundWidget.h"
# include "Widgets/Views/STableViewBase.h"
# include "Widgets/Views/STableRow.h"
# include "Widgets/Input/SComboBox.h"
2015-02-16 04:29:11 -05:00
class IClassViewerFilter ;
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
class SClassViewer ;
class SEditableTextBox ;
class SWizard ;
struct FParentClassItem ;
2015-02-16 04:29:11 -05:00
enum class EClassDomain : uint8 { Blueprint , Native } ;
2014-03-14 14:13:41 -04:00
/**
* A dialog to choose a new class parent and name
*/
class SNewClassDialog : public SCompoundWidget
{
public :
SLATE_BEGIN_ARGS ( SNewClassDialog )
2015-02-16 04:29:11 -05:00
: _ClassDomain ( EClassDomain : : Native ) , _Class ( NULL )
2014-03-14 14:13:41 -04:00
{ }
2015-02-16 04:29:11 -05:00
/** The domain of the class we are to create (native or blueprint) */
SLATE_ARGUMENT ( EClassDomain , ClassDomain )
/** An array of classes to feature on the class picker page */
SLATE_ARGUMENT ( TArray < FNewClassInfo > , FeaturedClasses )
/** Filter specifying allowable class types, if a parent class is to be chosen by the user */
SLATE_ARGUMENT ( TSharedPtr < IClassViewerFilter > , ClassViewerFilter )
2014-03-14 14:13:41 -04:00
/** The class we want to build our new class from. If this is not specified then the wizard will display classes to the user. */
2015-01-16 15:39:47 -05:00
SLATE_ARGUMENT ( const UClass * , Class )
/** The initial path to use as the destination for the new class. If this is not specified, we will work out a suitable default from the available project modules */
SLATE_ARGUMENT ( FString , InitialPath )
2014-03-14 14:13:41 -04:00
2015-01-30 10:35:05 -05:00
/** The prefix to put on new classes by default, if the user doesn't type in a new name. Defaults to 'My'. */
SLATE_ARGUMENT ( FString , DefaultClassPrefix )
/** If non-empty, overrides the default name of the class, when the user doesn't type a new name. Defaults to empty, which causes the
name to be the inherited class name . Note that DefaultClassPrefix is still prepended to this name , if non - empty . */
SLATE_ARGUMENT ( FString , DefaultClassName )
2015-01-26 20:16:24 -05:00
/** Event called when code is successfully added to the project */
2015-02-16 04:29:11 -05:00
SLATE_EVENT ( FOnAddedToProject , OnAddedToProject )
2014-03-14 14:13:41 -04:00
SLATE_END_ARGS ( )
/** Constructs this widget with InArgs */
void Construct ( const FArguments & InArgs ) ;
2014-06-13 06:14:46 -04:00
virtual void Tick ( const FGeometry & AllottedGeometry , const double InCurrentTime , const float InDeltaTime ) override ;
2014-03-14 14:13:41 -04:00
private :
/** Creates a row in the parent class list */
TSharedRef < ITableRow > MakeParentClassListViewWidget ( TSharedPtr < FParentClassItem > ParentClassItem , const TSharedRef < STableViewBase > & OwnerTable ) ;
/** Gets the currently selected parent class name */
2014-11-26 13:56:07 -05:00
FText GetSelectedParentClassName ( ) const ;
2014-03-14 14:13:41 -04:00
2014-07-14 16:50:34 -04:00
/** Gets the currently selected parent class's filename */
2014-11-26 13:56:07 -05:00
FText GetSelectedParentClassFilename ( ) const ;
2014-07-14 16:50:34 -04:00
/** Whether the hyper link to go to source should be visible */
EVisibility GetSourceHyperlinkVisibility ( ) const ;
2014-07-21 17:31:27 -04:00
/** Gets the currently select parent class's doc link */
FString GetSelectedParentDocLink ( ) const ;
/** Whether the document link anchor should be visible */
EVisibility GetDocLinkVisibility ( ) const ;
2014-07-14 16:50:34 -04:00
/** Handler for when the seleted parent class's filename is clicked */
void OnEditCodeClicked ( ) ;
2014-03-14 14:13:41 -04:00
/** Handler for when a parent class item is double clicked */
void OnParentClassItemDoubleClicked ( TSharedPtr < FParentClassItem > TemplateItem ) ;
/** Handler for when a class is selected in the parent class list */
void OnClassSelected ( TSharedPtr < FParentClassItem > Item , ESelectInfo : : Type SelectInfo ) ;
/** Handler for when a class was picked in the full class tree */
void OnAdvancedClassSelected ( UClass * Class ) ;
/** Gets the check box state for the full class list */
2014-12-10 14:24:09 -05:00
ECheckBoxState IsFullClassTreeChecked ( ) const ;
2014-03-14 14:13:41 -04:00
/** Gets the check box state for the full class list */
2014-12-10 14:24:09 -05:00
void OnFullClassTreeChanged ( ECheckBoxState NewCheckedState ) ;
2014-03-14 14:13:41 -04:00
/** Gets the visibility of the basic class list */
EVisibility GetBasicParentClassVisibility ( ) const ;
/** Gets the visibility of the full class list */
EVisibility GetAdvancedParentClassVisibility ( ) const ;
/** Gets the visibility of the name error label */
EVisibility GetNameErrorLabelVisibility ( ) const ;
/** Gets the text to display in the name error label */
2014-11-26 13:56:07 -05:00
FText GetNameErrorLabelText ( ) const ;
2014-03-14 14:13:41 -04:00
/** Gets the visibility of the global error label */
EVisibility GetGlobalErrorLabelVisibility ( ) const ;
/** Gets the text to display in the global error label */
2015-01-07 09:52:40 -05:00
FText GetGlobalErrorLabelText ( ) const ;
2014-03-14 14:13:41 -04:00
/** Handler for when the user enters the "name class" page */
void OnNamePageEntered ( ) ;
/** Returns the title text for the "name class" page */
2014-11-26 13:56:07 -05:00
FText GetNameClassTitle ( ) const ;
2014-03-14 14:13:41 -04:00
/** Returns the text in the class name edit box */
FText OnGetClassNameText ( ) const ;
/** Handler for when the text in the class name edit box has changed */
void OnClassNameTextChanged ( const FText & NewText ) ;
#ttp 322244 - LIVE: Feature Request: During "Add Code to Project", allow user to select path where files go
#proj UE4
#branch UE4
#summary You can now choose where to place a class added via the New Class Wizard
#extra This tries to be smart about your placement if you have Public and Private folders for your project.
- By default the header would go into Public, and the source file would go into Private.
- If you select the Public/Classes folder for the path, the source file will still go into Private.
- If you have a sub-path, eg) /Public/MyStuff/MyClass.h, this will be mirrored in the placement of the source file, eg) /Private/MyStuff/MyClass.cpp
#extra If you're not using Public or Private folders it will just place the source at whatever path you specified.
#extra It will verify that your source code is going to a valid module folder for your game, and also allows matching of modules that start with your game name, eg) MyGame, MyGameEditor.
#reviewedby Thomas.Sarkanen, Max.Preussner
[CL 2046528 by Jamie Dale in Main branch]
2014-04-23 18:50:08 -04:00
/** Returns the text in the class path edit box */
FText OnGetClassPathText ( ) const ;
/** Handler for when the text in the class path edit box has changed */
void OnClassPathTextChanged ( const FText & NewText ) ;
2015-02-16 04:29:11 -05:00
/** Called when the user chooses a path for a blueprint */
void OnBlueprintPathSelected ( const FString & NewPath ) ;
#ttp 322244 - LIVE: Feature Request: During "Add Code to Project", allow user to select path where files go
#proj UE4
#branch UE4
#summary You can now choose where to place a class added via the New Class Wizard
#extra This tries to be smart about your placement if you have Public and Private folders for your project.
- By default the header would go into Public, and the source file would go into Private.
- If you select the Public/Classes folder for the path, the source file will still go into Private.
- If you have a sub-path, eg) /Public/MyStuff/MyClass.h, this will be mirrored in the placement of the source file, eg) /Private/MyStuff/MyClass.cpp
#extra If you're not using Public or Private folders it will just place the source at whatever path you specified.
#extra It will verify that your source code is going to a valid module folder for your game, and also allows matching of modules that start with your game name, eg) MyGame, MyGameEditor.
#reviewedby Thomas.Sarkanen, Max.Preussner
[CL 2046528 by Jamie Dale in Main branch]
2014-04-23 18:50:08 -04:00
/** Returns the text for the calculated header file name */
FText OnGetClassHeaderFileText ( ) const ;
/** Returns the text for the calculated source file name */
FText OnGetClassSourceFileText ( ) const ;
2014-03-14 14:13:41 -04:00
/** Handler for when cancel is clicked */
void CancelClicked ( ) ;
/** Returns true if Finish is allowed */
bool CanFinish ( ) const ;
/** Handler for when finish is clicked */
void FinishClicked ( ) ;
#ttp 322244 - LIVE: Feature Request: During "Add Code to Project", allow user to select path where files go
#proj UE4
#branch UE4
#summary You can now choose where to place a class added via the New Class Wizard
#extra This tries to be smart about your placement if you have Public and Private folders for your project.
- By default the header would go into Public, and the source file would go into Private.
- If you select the Public/Classes folder for the path, the source file will still go into Private.
- If you have a sub-path, eg) /Public/MyStuff/MyClass.h, this will be mirrored in the placement of the source file, eg) /Private/MyStuff/MyClass.cpp
#extra If you're not using Public or Private folders it will just place the source at whatever path you specified.
#extra It will verify that your source code is going to a valid module folder for your game, and also allows matching of modules that start with your game name, eg) MyGame, MyGameEditor.
#reviewedby Thomas.Sarkanen, Max.Preussner
[CL 2046528 by Jamie Dale in Main branch]
2014-04-23 18:50:08 -04:00
/** Handler for when the "Choose Folder" button is clicked */
FReply HandleChooseFolderButtonClicked ( ) ;
2014-08-04 18:21:05 -04:00
/** Get the combo box text for the currently selected module */
FText GetSelectedModuleComboText ( ) const ;
/** Called when the currently selected module is changed */
2014-10-13 11:47:21 -04:00
void SelectedModuleComboBoxSelectionChanged ( TSharedPtr < FModuleContextInfo > Value , ESelectInfo : : Type SelectInfo ) ;
2014-08-04 18:21:05 -04:00
/** Create the widget to use as the combo box entry for the given module info */
2014-10-13 11:47:21 -04:00
TSharedRef < SWidget > MakeWidgetForSelectedModuleCombo ( TSharedPtr < FModuleContextInfo > Value ) ;
2014-08-04 18:21:05 -04:00
2014-03-14 14:13:41 -04:00
private :
2014-05-14 06:47:25 -04:00
/** Get the text color to use for the given class location checkbox */
FSlateColor GetClassLocationTextColor ( GameProjectUtils : : EClassLocation InLocation ) const ;
/** Checks to see if the given class location is active based on the current value of NewClassPath */
2014-12-10 14:24:09 -05:00
ECheckBoxState IsClassLocationActive ( GameProjectUtils : : EClassLocation InLocation ) const ;
2014-05-14 06:47:25 -04:00
/** Update the value of NewClassPath so that it uses the given class location */
2014-12-10 14:24:09 -05:00
void OnClassLocationChanged ( ECheckBoxState InCheckedState , GameProjectUtils : : EClassLocation InLocation ) ;
2014-05-14 06:47:25 -04:00
#ttp 322244 - LIVE: Feature Request: During "Add Code to Project", allow user to select path where files go
#proj UE4
#branch UE4
#summary You can now choose where to place a class added via the New Class Wizard
#extra This tries to be smart about your placement if you have Public and Private folders for your project.
- By default the header would go into Public, and the source file would go into Private.
- If you select the Public/Classes folder for the path, the source file will still go into Private.
- If you have a sub-path, eg) /Public/MyStuff/MyClass.h, this will be mirrored in the placement of the source file, eg) /Private/MyStuff/MyClass.cpp
#extra If you're not using Public or Private folders it will just place the source at whatever path you specified.
#extra It will verify that your source code is going to a valid module folder for your game, and also allows matching of modules that start with your game name, eg) MyGame, MyGameEditor.
#reviewedby Thomas.Sarkanen, Max.Preussner
[CL 2046528 by Jamie Dale in Main branch]
2014-04-23 18:50:08 -04:00
/** Checks the current class name/path for validity and updates cached values accordingly */
void UpdateInputValidity ( ) ;
2014-03-14 14:13:41 -04:00
/** Gets the currently selected parent class */
2015-02-16 04:29:11 -05:00
const FNewClassInfo & GetSelectedParentClassInfo ( ) const ;
2014-03-14 14:13:41 -04:00
/** Adds parent classes to the ParentClassListView source */
2015-02-16 04:29:11 -05:00
void SetupParentClassItems ( const TArray < FNewClassInfo > & UserSpecifiedFeaturedClasses ) ;
2014-03-14 14:13:41 -04:00
/** Closes the window that contains this widget */
void CloseContainingWindow ( ) ;
private :
/** The wizard widget */
TSharedPtr < SWizard > MainWizard ;
/** ParentClass items */
TSharedPtr < SListView < TSharedPtr < FParentClassItem > > > ParentClassListView ;
TArray < TSharedPtr < FParentClassItem > > ParentClassItemsSource ;
/** A pointer to a class viewer **/
TSharedPtr < class SClassViewer > ClassViewer ;
2015-01-30 10:35:05 -05:00
/** The prefix to put on new classes by default, if the user doesn't type in a new name. Defaults to 'My'. */
FString DefaultClassPrefix ;
/** If non-empty, overrides the default name of the class, when the user doesn't type a new name. Defaults to empty, which causes the
name to be the inherited class name . Note that DefaultClassPrefix is still prepended to this name , if non - empty . */
FString DefaultClassName ;
2014-03-14 14:13:41 -04:00
/** The editable text box to enter the current name */
TSharedPtr < SEditableTextBox > ClassNameEditBox ;
2014-08-04 18:21:05 -04:00
/** The available modules combo box */
2014-10-13 11:47:21 -04:00
TSharedPtr < SComboBox < TSharedPtr < FModuleContextInfo > > > AvailableModulesCombo ;
2014-08-04 18:21:05 -04:00
2014-03-14 14:13:41 -04:00
/** The name of the class being created */
FString NewClassName ;
#ttp 322244 - LIVE: Feature Request: During "Add Code to Project", allow user to select path where files go
#proj UE4
#branch UE4
#summary You can now choose where to place a class added via the New Class Wizard
#extra This tries to be smart about your placement if you have Public and Private folders for your project.
- By default the header would go into Public, and the source file would go into Private.
- If you select the Public/Classes folder for the path, the source file will still go into Private.
- If you have a sub-path, eg) /Public/MyStuff/MyClass.h, this will be mirrored in the placement of the source file, eg) /Private/MyStuff/MyClass.cpp
#extra If you're not using Public or Private folders it will just place the source at whatever path you specified.
#extra It will verify that your source code is going to a valid module folder for your game, and also allows matching of modules that start with your game name, eg) MyGame, MyGameEditor.
#reviewedby Thomas.Sarkanen, Max.Preussner
[CL 2046528 by Jamie Dale in Main branch]
2014-04-23 18:50:08 -04:00
/** The path to place the files for the class being generated */
FString NewClassPath ;
/** The calculated name of the generated header file for this class */
FString CalculatedClassHeaderName ;
/** The calculated name of the generated source file for this class */
FString CalculatedClassSourceName ;
/** The name of the last class that was auto-generated by this wizard */
FString LastAutoGeneratedClassName ;
2014-03-14 14:13:41 -04:00
/** The selected parent class */
2015-02-16 04:29:11 -05:00
FNewClassInfo ParentClassInfo ;
2014-03-14 14:13:41 -04:00
/** If true, the full class tree will be shown in the parent class selection */
bool bShowFullClassTree ;
#ttp 322244 - LIVE: Feature Request: During "Add Code to Project", allow user to select path where files go
#proj UE4
#branch UE4
#summary You can now choose where to place a class added via the New Class Wizard
#extra This tries to be smart about your placement if you have Public and Private folders for your project.
- By default the header would go into Public, and the source file would go into Private.
- If you select the Public/Classes folder for the path, the source file will still go into Private.
- If you have a sub-path, eg) /Public/MyStuff/MyClass.h, this will be mirrored in the placement of the source file, eg) /Private/MyStuff/MyClass.cpp
#extra If you're not using Public or Private folders it will just place the source at whatever path you specified.
#extra It will verify that your source code is going to a valid module folder for your game, and also allows matching of modules that start with your game name, eg) MyGame, MyGameEditor.
#reviewedby Thomas.Sarkanen, Max.Preussner
[CL 2046528 by Jamie Dale in Main branch]
2014-04-23 18:50:08 -04:00
/** The last time that the class name/path was checked for validity. This is used to throttle I/O requests to a reasonable frequency */
double LastPeriodicValidityCheckTime ;
2014-03-14 14:13:41 -04:00
#ttp 322244 - LIVE: Feature Request: During "Add Code to Project", allow user to select path where files go
#proj UE4
#branch UE4
#summary You can now choose where to place a class added via the New Class Wizard
#extra This tries to be smart about your placement if you have Public and Private folders for your project.
- By default the header would go into Public, and the source file would go into Private.
- If you select the Public/Classes folder for the path, the source file will still go into Private.
- If you have a sub-path, eg) /Public/MyStuff/MyClass.h, this will be mirrored in the placement of the source file, eg) /Private/MyStuff/MyClass.cpp
#extra If you're not using Public or Private folders it will just place the source at whatever path you specified.
#extra It will verify that your source code is going to a valid module folder for your game, and also allows matching of modules that start with your game name, eg) MyGame, MyGameEditor.
#reviewedby Thomas.Sarkanen, Max.Preussner
[CL 2046528 by Jamie Dale in Main branch]
2014-04-23 18:50:08 -04:00
/** The frequency in seconds for validity checks while the dialog is idle. Changes to the name/path immediately update the validity. */
double PeriodicValidityCheckFrequency ;
2014-03-14 14:13:41 -04:00
/** Periodic checks for validity will not occur while this flag is true. Used to prevent a frame of "this project already exists" while exiting after a successful creation. */
bool bPreventPeriodicValidityChecksUntilNextChange ;
/** The error text from the last validity check */
#ttp 322244 - LIVE: Feature Request: During "Add Code to Project", allow user to select path where files go
#proj UE4
#branch UE4
#summary You can now choose where to place a class added via the New Class Wizard
#extra This tries to be smart about your placement if you have Public and Private folders for your project.
- By default the header would go into Public, and the source file would go into Private.
- If you select the Public/Classes folder for the path, the source file will still go into Private.
- If you have a sub-path, eg) /Public/MyStuff/MyClass.h, this will be mirrored in the placement of the source file, eg) /Private/MyStuff/MyClass.cpp
#extra If you're not using Public or Private folders it will just place the source at whatever path you specified.
#extra It will verify that your source code is going to a valid module folder for your game, and also allows matching of modules that start with your game name, eg) MyGame, MyGameEditor.
#reviewedby Thomas.Sarkanen, Max.Preussner
[CL 2046528 by Jamie Dale in Main branch]
2014-04-23 18:50:08 -04:00
FText LastInputValidityErrorText ;
2014-03-14 14:13:41 -04:00
#ttp 322244 - LIVE: Feature Request: During "Add Code to Project", allow user to select path where files go
#proj UE4
#branch UE4
#summary You can now choose where to place a class added via the New Class Wizard
#extra This tries to be smart about your placement if you have Public and Private folders for your project.
- By default the header would go into Public, and the source file would go into Private.
- If you select the Public/Classes folder for the path, the source file will still go into Private.
- If you have a sub-path, eg) /Public/MyStuff/MyClass.h, this will be mirrored in the placement of the source file, eg) /Private/MyStuff/MyClass.cpp
#extra If you're not using Public or Private folders it will just place the source at whatever path you specified.
#extra It will verify that your source code is going to a valid module folder for your game, and also allows matching of modules that start with your game name, eg) MyGame, MyGameEditor.
#reviewedby Thomas.Sarkanen, Max.Preussner
[CL 2046528 by Jamie Dale in Main branch]
2014-04-23 18:50:08 -04:00
/** True if the last validity check returned that the class name/path is valid for creation */
bool bLastInputValidityCheckSuccessful ;
2014-05-14 06:47:25 -04:00
/** Whether the class should be created as a Public or Private class */
GameProjectUtils : : EClassLocation ClassLocation ;
2014-05-16 10:47:37 -04:00
2015-02-16 04:29:11 -05:00
/** The domain of the new class we are creating (native or blueprint) */
EClassDomain ClassDomain ;
2014-08-04 18:21:05 -04:00
/** Information about the currently available modules for this project */
2014-10-13 11:47:21 -04:00
TArray < TSharedPtr < FModuleContextInfo > > AvailableModules ;
2014-08-04 18:21:05 -04:00
/** Information about the currently selected module; used for class validation */
2014-10-13 11:47:21 -04:00
TSharedPtr < FModuleContextInfo > SelectedModuleInfo ;
2015-01-26 20:16:24 -05:00
/** Event called when code is succesfully added to the project */
2015-02-16 04:29:11 -05:00
FOnAddedToProject OnAddedToProject ;
2014-03-14 14:13:41 -04:00
} ;