in src/rider/main/kotlin/com/jetbrains/rider/plugins/unreal/UnrealHost.kt [64:123]
override fun extensionCreated(lifetime: Lifetime, session: ClientProjectSession, model: RdRiderModel) {
model.allowSetForegroundWindow.set { _, id ->
if (SystemInfo.isWindows) {
return@set if (!user32!!.AllowSetForegroundWindow(id)) {
val lastError = kernel32!!.GetLastError()
RdTask.faulted(LastErrorException(lastError))
} else {
RdTask.fromResult(true)
}
}
RdTask.fromResult(true)
}
val project = session.project
model.isUnrealEngineSolution.change.advise(lifetime) { isUnrealEngineSolution ->
val host = project.service<UnrealHost>()
host.isUnrealEngineSolution = isUnrealEngineSolution
}
model.isPreBuiltEngine.change.advise(lifetime) { isPreBuiltEngine ->
val host = project.service<UnrealHost>()
host.isPreBuiltEngine = isPreBuiltEngine
}
model.isConnectedToUnrealEditor.change.advise(lifetime) { connected ->
if (!connected) {
project.service<UnrealHost>().playStateModel.set(PlayState.Idle)
}
forceTriggerUIUpdate()
}
model.riderLinkInstallPanelInit.advise(lifetime) {
val riderLinkInstallContext =
RiderLinkInstallService.getInstance(project).getOrCreateRiderLinkInstallContext()
riderLinkInstallContext.clear()
riderLinkInstallContext.showToolWindowIfHidden()
}
model.riderLinkInstallMessage.advise(lifetime) { message ->
RiderLinkInstallService.getInstance(project).getOrCreateRiderLinkInstallContext().writeMessage(message)
}
// Update state of Unreal actions on toolbar
model.playStateFromEditor.adviseNotNull(lifetime) { newState ->
project.service<UnrealHost>().playStateModel.set(newState)
}
model.playModeFromEditor.adviseNotNull(lifetime) { mode ->
project.service<UnrealHost>().playMode = mode
forceTriggerUIUpdate()
}
model.isGameControlModuleInitialized.adviseNotNull(lifetime) {
forceTriggerUIUpdate()
}
model.isConnectedToUnrealEditor.whenTrue(lifetime) {
val toolWindowsFactory = UnrealToolWindowFactory.getInstance(project)
toolWindowsFactory.showTabForNewSession()
}
}