2014-12-07 19:09:38 -05:00
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
2014-03-14 14:13:41 -04:00
# include "DeviceManagerPrivatePCH.h"
2014-10-14 22:50:06 -04:00
# include "SDockTab.h"
2014-10-23 20:42:49 -04:00
# include "WorkspaceMenuStructureModule.h"
2014-03-14 14:13:41 -04:00
# define LOCTEXT_NAMESPACE "SDeviceManager"
/* Local constants
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static const FName DeviceAppsTabId ( " DeviceApps " ) ;
static const FName DeviceBrowserTabId ( " DeviceBrowser " ) ;
static const FName DeviceDetailsTabId ( " DeviceDetails " ) ;
static const FName DeviceProcessesTabId ( " DeviceProcesses " ) ;
static const FName DeviceToolbarTabId ( " DeviceToolbar " ) ;
2014-10-09 12:34:55 -04:00
/* SDeviceManager constructors
2014-03-14 14:13:41 -04:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
SDeviceManager : : SDeviceManager ( )
: Model ( MakeShareable ( new FDeviceManagerModel ( ) ) )
{ }
/* SDeviceManager interface
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void SDeviceManager : : Construct ( const FArguments & InArgs , const ITargetDeviceServiceManagerRef & InDeviceServiceManager , const TSharedRef < SDockTab > & ConstructUnderMajorTab , const TSharedPtr < SWindow > & ConstructUnderWindow )
{
DeviceServiceManager = InDeviceServiceManager ;
2014-04-02 18:09:23 -04:00
// create and bind UI commands
FDeviceDetailsCommands : : Register ( ) ;
UICommandList = MakeShareable ( new FUICommandList ) ;
BindCommands ( ) ;
2014-03-14 14:13:41 -04:00
// create & initialize tab manager
TabManager = FGlobalTabmanager : : Get ( ) - > NewTabManager ( ConstructUnderMajorTab ) ;
2014-10-23 15:11:28 -04:00
TSharedRef < FWorkspaceItem > AppMenuGroup = TabManager - > AddLocalWorkspaceMenuCategory ( LOCTEXT ( " DeviceManagerMenuGroupName " , " Device Manager " ) ) ;
2014-03-14 14:13:41 -04:00
TabManager - > RegisterTabSpawner ( DeviceBrowserTabId , FOnSpawnTab : : CreateRaw ( this , & SDeviceManager : : HandleTabManagerSpawnTab , DeviceBrowserTabId ) )
. SetDisplayName ( LOCTEXT ( " DeviceBrowserTabTitle " , " Device Browser " ) )
. SetIcon ( FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , " DeviceDetails.Tabs.Tools " ) )
. SetGroup ( AppMenuGroup ) ;
2014-04-02 18:09:23 -04:00
2014-03-14 14:13:41 -04:00
TabManager - > RegisterTabSpawner ( DeviceDetailsTabId , FOnSpawnTab : : CreateRaw ( this , & SDeviceManager : : HandleTabManagerSpawnTab , DeviceDetailsTabId ) )
. SetDisplayName ( LOCTEXT ( " DeviceDetailsTabTitle " , " Device Details " ) )
. SetIcon ( FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , " DeviceDetails.Tabs.Tools " ) )
. SetGroup ( AppMenuGroup ) ;
2014-04-02 18:09:23 -04:00
2014-03-14 14:13:41 -04:00
TabManager - > RegisterTabSpawner ( DeviceAppsTabId , FOnSpawnTab : : CreateRaw ( this , & SDeviceManager : : HandleTabManagerSpawnTab , DeviceAppsTabId ) )
. SetDisplayName ( LOCTEXT ( " DeviceAppsTabTitle " , " Deployed Apps " ) )
. SetIcon ( FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , " DeviceDetails.Tabs.Tools " ) )
. SetGroup ( AppMenuGroup ) ;
TabManager - > RegisterTabSpawner ( DeviceProcessesTabId , FOnSpawnTab : : CreateRaw ( this , & SDeviceManager : : HandleTabManagerSpawnTab , DeviceProcessesTabId ) )
. SetDisplayName ( LOCTEXT ( " DeviceProcessesTabTitle " , " Running Processes " ) )
. SetIcon ( FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , " DeviceDetails.Tabs.Tools " ) )
. SetGroup ( AppMenuGroup ) ;
TabManager - > RegisterTabSpawner ( DeviceToolbarTabId , FOnSpawnTab : : CreateRaw ( this , & SDeviceManager : : HandleTabManagerSpawnTab , DeviceToolbarTabId ) )
. SetDisplayName ( LOCTEXT ( " DeviceToolbarTabTitle " , " Toolbar " ) )
. SetIcon ( FSlateIcon ( FEditorStyle : : GetStyleSetName ( ) , " DeviceDetails.Tabs.Tools " ) )
. SetGroup ( AppMenuGroup ) ;
// create tab layout
const TSharedRef < FTabManager : : FLayout > Layout = FTabManager : : NewLayout ( " DeviceManagerLayout_v1.1 " )
- > AddArea
(
FTabManager : : NewPrimaryArea ( )
- > SetOrientation ( Orient_Vertical )
- > Split
(
FTabManager : : NewStack ( )
- > AddTab ( DeviceToolbarTabId , ETabState : : OpenedTab )
- > SetHideTabWell ( true )
)
- > Split
2014-04-02 18:09:23 -04:00
(
FTabManager : : NewStack ( )
- > AddTab ( DeviceBrowserTabId , ETabState : : OpenedTab )
- > SetHideTabWell ( true )
- > SetSizeCoefficient ( 0.5f )
)
- > Split
2014-03-14 14:13:41 -04:00
(
FTabManager : : NewSplitter ( )
- > SetOrientation ( Orient_Horizontal )
- > SetSizeCoefficient ( 0.5f )
- > Split
(
FTabManager : : NewStack ( )
2014-04-02 18:09:23 -04:00
- > AddTab ( DeviceAppsTabId , ETabState : : ClosedTab )
- > AddTab ( DeviceProcessesTabId , ETabState : : OpenedTab )
- > SetSizeCoefficient ( 0.75f )
2014-03-14 14:13:41 -04:00
)
2014-04-02 18:09:23 -04:00
- > Split
2014-03-14 14:13:41 -04:00
(
FTabManager : : NewStack ( )
- > AddTab ( DeviceDetailsTabId , ETabState : : OpenedTab )
2014-04-02 18:09:23 -04:00
- > SetSizeCoefficient ( 0.25f )
)
2014-03-14 14:13:41 -04:00
)
) ;
// create & initialize main menu
FMenuBarBuilder MenuBarBuilder = FMenuBarBuilder ( TSharedPtr < FUICommandList > ( ) ) ;
MenuBarBuilder . AddPullDownMenu (
LOCTEXT ( " WindowMenuLabel " , " Window " ) ,
FText : : GetEmpty ( ) ,
2014-10-09 12:34:55 -04:00
FNewMenuDelegate : : CreateStatic ( & SDeviceManager : : FillWindowMenu , TabManager ) ,
2014-03-14 14:13:41 -04:00
" Window "
) ;
ChildSlot
[
SNew ( SVerticalBox )
+ SVerticalBox : : Slot ( )
. AutoHeight ( )
[
MenuBarBuilder . MakeWidget ( )
]
+ SVerticalBox : : Slot ( )
. FillHeight ( 1.0f )
[
TabManager - > RestoreFrom ( Layout , ConstructUnderWindow ) . ToSharedRef ( )
]
] ;
}
/* SDeviceManager implementation
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2014-04-02 18:09:23 -04:00
void SDeviceManager : : BindCommands ( )
{
const FDeviceDetailsCommands & Commands = FDeviceDetailsCommands : : Get ( ) ;
// ownership commands
UICommandList - > MapAction (
Commands . Claim ,
FExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleClaimActionExecute ) ,
FCanExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleClaimActionCanExecute ) ) ;
UICommandList - > MapAction (
Commands . Release ,
FExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleReleaseActionExecute ) ,
FCanExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleReleaseActionCanExecute ) ) ;
UICommandList - > MapAction (
Commands . Remove ,
FExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleRemoveActionExecute ) ,
FCanExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleRemoveActionCanExecute ) ) ;
UICommandList - > MapAction (
Commands . Share ,
FExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleShareActionExecute ) ,
FCanExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleShareActionCanExecute ) ,
FIsActionChecked : : CreateSP ( this , & SDeviceManager : : HandleShareActionIsChecked ) ) ;
// connectivity commands
UICommandList - > MapAction (
Commands . Connect ,
FExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleConnectActionExecute ) ,
FCanExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleConnectActionCanExecute ) ) ;
UICommandList - > MapAction (
Commands . Disconnect ,
FExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleDisconnectActionExecute ) ,
FCanExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleDisconnectActionCanExecute ) ) ;
// remote control commands
UICommandList - > MapAction (
Commands . PowerOff ,
FExecuteAction : : CreateSP ( this , & SDeviceManager : : HandlePowerOffActionExecute , false ) ,
FCanExecuteAction : : CreateSP ( this , & SDeviceManager : : HandlePowerOffActionCanExecute ) ) ;
UICommandList - > MapAction (
Commands . PowerOffForce ,
FExecuteAction : : CreateSP ( this , & SDeviceManager : : HandlePowerOffActionExecute , true ) ,
FCanExecuteAction : : CreateSP ( this , & SDeviceManager : : HandlePowerOffActionCanExecute ) ) ;
UICommandList - > MapAction (
Commands . PowerOn ,
FExecuteAction : : CreateSP ( this , & SDeviceManager : : HandlePowerOnActionExecute ) ,
FCanExecuteAction : : CreateSP ( this , & SDeviceManager : : HandlePowerOnActionCanExecute ) ) ;
UICommandList - > MapAction (
Commands . Reboot ,
FExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleRebootActionExecute ) ,
FCanExecuteAction : : CreateSP ( this , & SDeviceManager : : HandleRebootActionCanExecute ) ) ;
}
2014-10-09 12:34:55 -04:00
void SDeviceManager : : FillWindowMenu ( FMenuBuilder & MenuBuilder , const TSharedPtr < FTabManager > TabManager )
2014-03-14 14:13:41 -04:00
{
if ( ! TabManager . IsValid ( ) )
{
return ;
}
# if !WITH_EDITOR
2014-10-09 12:34:55 -04:00
FGlobalTabmanager : : Get ( ) - > PopulateTabSpawnerMenu ( MenuBuilder , WorkspaceMenu : : GetMenuStructure ( ) . GetStructureRoot ( ) ) ;
2014-03-14 14:13:41 -04:00
# endif //!WITH_EDITOR
2014-10-09 12:34:55 -04:00
TabManager - > PopulateLocalTabSpawnerMenu ( MenuBuilder ) ;
2014-03-14 14:13:41 -04:00
}
2014-04-02 18:09:23 -04:00
bool SDeviceManager : : ValidateDeviceAction ( const ITargetDeviceRef & Device ) const
{
// @todo gmp: this needs to be improved, i.e. TargetPlatformManager::GetLocalDevice
if ( Device - > GetName ( ) ! = FPlatformProcess : : ComputerName ( ) )
{
return true ;
}
int32 DialogResult = FMessageDialog : : Open ( EAppMsgType : : YesNo , LOCTEXT ( " LocalHostDialogPrompt " , " WARNING: This device represents your local computer. \n \n Are you sure you want to proceed? " ) ) ;
return ( DialogResult = = EAppReturnType : : Yes ) ;
}
2014-03-14 14:13:41 -04:00
/* SDeviceManager callbacks
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2014-04-02 18:09:23 -04:00
bool SDeviceManager : : HandleClaimActionCanExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
return ( DeviceService . IsValid ( ) & & ! DeviceService - > IsRunning ( ) & & DeviceService - > GetClaimUser ( ) . IsEmpty ( ) ) ;
}
void SDeviceManager : : HandleClaimActionExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) )
{
DeviceService - > Start ( ) ;
}
}
bool SDeviceManager : : HandleConnectActionCanExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) )
{
ITargetDevicePtr TargetDevice = DeviceService - > GetDevice ( ) ;
if ( TargetDevice . IsValid ( ) & & TargetDevice - > GetTargetPlatform ( ) . SupportsFeature ( ETargetPlatformFeatures : : SdkConnectDisconnect ) )
{
return ! TargetDevice - > IsConnected ( ) ;
}
}
return false ;
}
void SDeviceManager : : HandleConnectActionExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) )
{
ITargetDevicePtr TargetDevice = DeviceService - > GetDevice ( ) ;
if ( TargetDevice . IsValid ( ) )
{
if ( ! TargetDevice - > Connect ( ) )
{
FMessageDialog : : Open ( EAppMsgType : : Ok , LOCTEXT ( " DeviceConnectFailedMessage " , " Unable to connect to the device. Please make sure that it is powered on! " ) ) ;
}
}
}
}
bool SDeviceManager : : HandleDisconnectActionCanExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) )
{
ITargetDevicePtr TargetDevice = DeviceService - > GetDevice ( ) ;
if ( TargetDevice . IsValid ( ) & & TargetDevice - > GetTargetPlatform ( ) . SupportsFeature ( ETargetPlatformFeatures : : SdkConnectDisconnect ) )
{
return TargetDevice - > IsConnected ( ) ;
}
}
return false ;
}
void SDeviceManager : : HandleDisconnectActionExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) )
{
ITargetDevicePtr TargetDevice = DeviceService - > GetDevice ( ) ;
if ( TargetDevice . IsValid ( ) )
{
TargetDevice - > Disconnect ( ) ;
}
}
}
bool SDeviceManager : : HandlePowerOffActionCanExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) )
{
ITargetDevicePtr TargetDevice = DeviceService - > GetDevice ( ) ;
if ( TargetDevice . IsValid ( ) )
{
return ( TargetDevice - > IsConnected ( ) & & TargetDevice - > SupportsFeature ( ETargetDeviceFeatures : : PowerOff ) ) ;
}
}
return false ;
}
void SDeviceManager : : HandlePowerOffActionExecute ( bool Force )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) )
{
ITargetDevicePtr TargetDevice = DeviceService - > GetDevice ( ) ;
if ( TargetDevice . IsValid ( ) & & ValidateDeviceAction ( TargetDevice . ToSharedRef ( ) ) )
{
TargetDevice - > PowerOff ( Force ) ;
}
}
}
bool SDeviceManager : : HandlePowerOnActionCanExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) )
{
ITargetDevicePtr TargetDevice = DeviceService - > GetDevice ( ) ;
if ( TargetDevice . IsValid ( ) )
{
return ( TargetDevice - > IsConnected ( ) & & TargetDevice - > SupportsFeature ( ETargetDeviceFeatures : : PowerOn ) ) ;
}
}
return false ;
}
void SDeviceManager : : HandlePowerOnActionExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) )
{
ITargetDevicePtr TargetDevice = DeviceService - > GetDevice ( ) ;
if ( TargetDevice . IsValid ( ) )
{
TargetDevice - > PowerOn ( ) ;
}
}
}
bool SDeviceManager : : HandleRebootActionCanExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) )
{
ITargetDevicePtr TargetDevice = DeviceService - > GetDevice ( ) ;
if ( TargetDevice . IsValid ( ) )
{
return ( TargetDevice - > IsConnected ( ) & & TargetDevice - > SupportsFeature ( ETargetDeviceFeatures : : Reboot ) ) ;
}
}
return false ;
}
void SDeviceManager : : HandleRebootActionExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) )
{
ITargetDevicePtr TargetDevice = DeviceService - > GetDevice ( ) ;
if ( TargetDevice . IsValid ( ) & & ValidateDeviceAction ( TargetDevice . ToSharedRef ( ) ) )
{
TargetDevice - > Reboot ( true ) ;
}
}
}
bool SDeviceManager : : HandleReleaseActionCanExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
return ( DeviceService . IsValid ( ) & & DeviceService - > IsRunning ( ) ) ;
}
void SDeviceManager : : HandleReleaseActionExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) )
{
DeviceService - > Stop ( ) ;
}
}
bool SDeviceManager : : HandleRemoveActionCanExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
// @todo gmp: at some point support removal of available devices through their SDK (i.e. remove from PS4 neighborhood)
return ( DeviceService . IsValid ( ) & & ! DeviceService - > GetDevice ( ) . IsValid ( ) ) ;
}
void SDeviceManager : : HandleRemoveActionExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) )
{
2014-09-09 12:20:43 -04:00
DeviceServiceManager - > RemoveStartupService ( DeviceService - > GetDeviceName ( ) ) ;
2014-04-02 18:09:23 -04:00
}
}
bool SDeviceManager : : HandleShareActionIsChecked ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
return ( DeviceService . IsValid ( ) & & DeviceService - > IsShared ( ) ) ;
}
void SDeviceManager : : HandleShareActionExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
if ( DeviceService . IsValid ( ) & & DeviceService - > IsRunning ( ) )
{
DeviceService - > SetShared ( ! DeviceService - > IsShared ( ) ) ;
}
}
bool SDeviceManager : : HandleShareActionCanExecute ( )
{
ITargetDeviceServicePtr DeviceService = Model - > GetSelectedDeviceService ( ) ;
return ( DeviceService . IsValid ( ) & & DeviceService - > IsRunning ( ) ) ;
}
2014-03-14 14:13:41 -04:00
TSharedRef < SDockTab > SDeviceManager : : HandleTabManagerSpawnTab ( const FSpawnTabArgs & Args , FName TabIdentifier )
{
TSharedPtr < SWidget > TabWidget = SNullWidget : : NullWidget ;
bool AutoSizeTab = false ;
if ( TabIdentifier = = DeviceAppsTabId )
{
TabWidget = SNew ( SDeviceApps , Model ) ;
}
else if ( TabIdentifier = = DeviceBrowserTabId )
{
2014-04-02 18:09:23 -04:00
TabWidget = SNew ( SDeviceBrowser , Model , DeviceServiceManager . ToSharedRef ( ) , UICommandList ) ;
2014-03-14 14:13:41 -04:00
}
else if ( TabIdentifier = = DeviceDetailsTabId )
{
TabWidget = SNew ( SDeviceDetails , Model ) ;
}
else if ( TabIdentifier = = DeviceProcessesTabId )
{
TabWidget = SNew ( SDeviceProcesses , Model ) ;
}
else if ( TabIdentifier = = DeviceToolbarTabId )
{
2014-04-02 18:09:23 -04:00
TabWidget = SNew ( SDeviceToolbar , Model , UICommandList ) ;
2014-03-14 14:13:41 -04:00
AutoSizeTab = true ;
}
return SNew ( SDockTab )
. ShouldAutosize ( AutoSizeTab )
. TabRole ( ETabRole : : PanelTab )
[
TabWidget . ToSharedRef ( )
] ;
}
# undef LOCTEXT_NAMESPACE