This past week I've experimented with Ogitor. Since then I've settled on a design for engine integration which uses context menu on the initial root engine plugin to create sub-components. Let me explain a little:
When you register a plugin in Ogitor your registered component shows up on the object list to the right (along with the object list here you also have mesh list, material list, etc). You drag-and-drop your plugin object from this list onto the main render window in order to instantiate an object. Code wise, an object factory's CreateObject method gets invoked instantiating the actual object.
Initially my idea was to have a main engine object which the user drag-and-drop to the render window. Then during the creation of this object, sub-component editors gets registered. That didn't work because although you can register factories in the OnCreate method of the main "Engine" component, the object list view does not get refreshed so you can't drag-and-drop sub-components after creating the main "engine" component.
To get around this I tried registering sub-components in the plugin. This worked at first, but this doesn't map well into how my engine works. My engine has different phases: bootstrap->onInit->onLoad->onUpdate->onDestroy. In my case the bootstrapping phase occurs in the startDllPlugin function. Cut the story short a bit I didn't go with this either because it doesn't follow Ogitor's usage pattern.
So I dug around the code some more because basically I want to duplicate the behavior of the TerrainGroupEditor. With this editor you first drag-and-drop it into the render view to create a root node to the left. Then you can use a context menu to create child nodes of this root, corresponding to pages in the TerrainGroup. When one clicks on an item on the context menu, one calls OgitorsRoot to invoke the Factory of the object in question.
So here is the final mapping of my engine into Ogitors:
bootstrap -> onStartDll()
onInit -> EngineEditorFactory::onCreate()
--This creates and register all the sub-component factories and call onInit() the PRJZ objects they manage.
onLoad -> *EditorFactory::onCreate()
--When an editor factory's onCreate method is called, all other sub-component has undergone the onInit phase. So this corresponds to onLoad phase in PRJZ.
onUpdate -> EngineEditor::LFCPUMP()
The EngineEditor corresponds to PRJZ engine's EngineController.