Slate Widget was failing, because of missing Slate dependencies. Testing introduced a couple of problems which all was fixed by this CL:
1. I introduced AdditionalDependencies in .uproject file and change "Add Code To Project..." procedure to fill this array if needed. UBT reads this field and builds the project with required modules. Needed for Slate classes.
2. Changed UHT to #include missing headers in generated.h files if it was missing an include for it's super class. It was causing problems if we were trying to add a subclass of BrushShape -- BrushShape.h didn't have #include "Brush.h" and UBrushShape was inheriting from UBrush.
3. Above problems also occured for Slate classes, but not all of them was UCLASSes, so I had to fixed that manually.
4. "Add Code To Project..." functionality was not invalidating UBT makefiles, which lead to omitting new source files during hot-reloading (even thought it was reporting a success). This change also should improve a bit performance, cause right now there is no "gathering" step -- there is only invalidate step which is a lot quicker.
5. Fixed "Selected Class Source" link to source class in Slate Widget and Slate Widget Style class.
#codereview Robert.Manuszewski
[CL 2481488 by Jaroslaw Palczynski in Main branch]
UE-9293 - Should offer 'Create BP' when right clicking on C++ class in Browser
There is now a "Create Blueprint class based on X" option alongside the "Create C++ class derived from X" option when viewing the context menu for a C++ Class in the Content Browser. This allows you to create a new Blueprint asset from C++ classes that are marked as blueprintable.
[CL 2447345 by Jamie Dale in Main branch]
This is needed for UBT to update its makefiles when we add new code via the editor.
Updating UBT makefiles is more typically handled by re-generating project files, however on Windows we use DTE to inject new files directly into Visual Studio in an attempt to avoid re-generating project files (as it produces modal popups that block operations), so we need to perform a gather instead so that UBT knows things have changed.
ReviewedBy Mike.Fricker
[CL 2446903 by Jamie Dale in Main branch]
Generalized "Add Code to Project" dialog to allow creation of both c++ and blueprint class types.
The add component option when blueprintable components is enabled, now opens up this dialog rather than the parent class picker.
UE-8491 - IWCE: New C++ Component and New Blueprint Component should prompt you for a component type to subclass
[CL 2446735 by Matthew Griffin in Main branch]
Revised starter content so it is inserted into projects using feature packs.
Removed StarterContent source data from rocket build.
[CL 2438072 by Matthew Griffin in Main branch]
Fixed adding a new class via the editor reaching 100% while it was still compiling the code
An extra step had been added to the task, but the number of sub-tasks had been left at 6.
[CL 2437768 by Matthew Griffin in Main branch]
Added a way to use DTE to add new files directly into VS without having to generate projects
This avoids the annoying "Do you want to reload?" dialog that appears in VS when projects are externally changed, and also saves us the cost/time of having to run UBT to generate projects.
[CL 2435515 by Matthew Griffin in Main branch]
Improvements to naming of newly-created C++ and BP components through SCS tree
- Strip off "_C" suffix on newly created Blueprint classes
- Don't strip "Component" from Blueprint class names unless it is the suffix
- Changed prefix for newly-created C++ components from "My" to "New"
- New Blueprint components default to the name of the class unless they are Blueprints of UActorComponent, in which case the name is just "NewComponent"
- New C++ components default to the name of the class unless they inherit from UActorComponent, in which case the name is just "NewComponent"
#codereview matt.kuhlenschmidt
[CL 2425794 by Ben Marsh in Main branch]
Fix regression with Class Wizard-generated source files not compiling sometimes
- Now, only AActor, USceneComponent and UActorComponent get "special" generated source
- FObjectInitializer constructors are no longer used in code generated for these classes
[CL 2419738 by Ben Marsh in Main branch]
Added an experimental method to add a new C++ class derived from ActorComponent to an actor. The purpose of this is to add scripting support directly on an actor without subclassing the actor.
[CL 2419710 by Ben Marsh in Main branch]
Fixed failed C++ hot reload not displaying an error to the user (UE-8241)
- Also added slightly better progress reporting to hot reload when adding code to a project
[CL 2419709 by Ben Marsh in Main branch]
Allow C++ class template source files to have cursor location markup (not just header files)
- This feature is not currently used but will be in the future
[CL 2419695 by Ben Marsh in Main branch]
New C++ code templates for Actor and ActorComponents
- When using "Add C++ Code" in the editor, you'll now get nice starter classes for common class types
- Classes that inherit from Actor will get a constructor, BeginPlay, and Tick (and will tick by default)
- Classes inheriting from ActorComponent will get a constructor, InitializeComponent and TickComponent (and will tick by default)
More improvements coming soon...
#codereview matt.kuhlenschmidt, james.golding
[CL 2419674 by Ben Marsh in Main branch]
UE-7184 - Show game c++ classes and engine c++ classes in the content browser
The Content Browser now has extra entries for "Game C++ Classes" and "Engine C++ Classes" (with "Game" and "Engine" being renamed to "Game Content" and "Engine Content" respectively). These new folders serve as hosts for the list of available C++ modules, with each module internally mirroring the folder structure on disk.
For example:
- Game C++ Classes
- ShooterGame
- Classes
- Bots
- ShooterBot
- ShooterAIController
- [...]
- [...]
The Content Browser allows you to navigate and search these classes like you can with assets, and provides convenient access to either edit an existing class, or create a new class (either within a selected folder, or derived from a selected class).
As the Content Browser only shows you known UClass types, any new classes need to be compiled into a loaded module before they will appear. This means that adding a new class will now automatically hot-reload your target module. Should you prefer to handle building and loading your modules manually, you can disable the automatic hot-reload via "Editor Settings" -> "Miscellaneous" -> "Hot Reload" -> "Automatically Hot Reload New Classes" (see UEditorUserSettings::bAutomaticallyHotReloadNewClasses).
[CL 2409386 by Jamie Dale in Main branch]