Hi,
I am currently developing an application and I have succesfully used flexdock. It is not trivial, but it is not too complex either.
The three interesting integration classes are:
- FlexDockApplicationPage
- FlexDockViewDescriptor
- FlexDockApplicationPageFactory,
along with interface PerspectiveFactory.
Because I needed some customized functionality (namely the ability to control whether a "view" would have a title or not), I created my own classes, which inherit from the above classes:
- JOverseerApplicationPage
- JOverseerViewDescriptor
- JOversserApplicationPageFactory
and override some of the methods. You can simply do the same without overriding any methods for starters.
Also, I have JOverseerPerspectiveFactory which implements PerspectiveFactory. This you will have to implement, regardless of whether you subclass the above classes.
Here is what I did to make flexdock work:
* Added the declaration for JOversserApplicationPageFactory to application-context.xml as follows:
Code:
<bean id="joverseerApplicationPageFactory" depends-on="serviceLocator"
class="org.joverseer.ui.flexdock.JOversserApplicationPageFactory" lazy-init="false">
<property name="floatingEnabled"><value>true</value></property>
<property name="perspectiveFactory">
<bean class="org.joverseer.ui.flexdock.JOverseerPerspectiveFactory"></bean>
</property>
<property name="defaultPerspective">
<value>joverseer</value>
</property>
</bean>
Note that the application page factory contains a reference to the perspective factory that it will use to create the perspectives for the application page.
* Registered the application page factory with my services (again in application-context.xml):
Code:
<bean id="applicationServices"
class="org.springframework.richclient.application.support.DefaultApplicationServices">
<property name="imageSourceId"><idref bean="imageSource"/></property>
<property name="formComponentInterceptorFactoryId"><idref bean="formComponentInterceptorFactory"/></property>
<property name="applicationObjectConfigurerId"><idref bean="applicationObjectConfigurer" /></property>
<property name="applicationPageFactoryId"><idref bean="joverseerApplicationPageFactory"/></property>
<property name="binderSelectionStrategyId"><idref bean="binderSelectionStrategy"/></property>
<property name="conversionServiceId"><idref bean="conversionService"/></property>
</bean>
* Declared my views in application-context.xml as JOverseerViewDescriptor's as follows:
Code:
<bean id="characterListView"
class="org.joverseer.ui.flexdock.JOverseerViewDescriptor">
<property name="viewClass">
<value>org.joverseer.ui.listviews.CharacterListView</value>
</property>
<property name="closable"><value>true</value></property>
<property name="pinnable"><value>true</value></property>
</bean>
* Implemented the perspective factory as follows:
Code:
public class JOverseerPerspectiveFactory implements PerspectiveFactory {
public Perspective getPerspective(String persistentId) {
List<DockingState> dss = new ArrayList<DockingState>();
DockingState ds = new DockingState("mapView");
dss.add(ds);
ds = new DockingState("characterListView");
ds.setRegion(DockingConstants.SOUTH_REGION);
ds.setRelativeParentId("mapView");
ds.setSplitRatio(.3f);
dss.add(ds);
ds = new DockingState("populationCenterListView");
ds.setRegion(DockingConstants.CENTER_REGION);
ds.setRelativeParentId("characterListView");
ds.setSplitRatio(1f);
dss.add(ds);
ds = new DockingState("nationEconomyListView");
ds.setRegion(DockingConstants.CENTER_REGION);
ds.setRelativeParentId("characterListView");
ds.setSplitRatio(1f);
dss.add(ds);
// ... more views here
return createPerspective("joverseer", dss);
}
private Perspective createPerspective(String perspectiveId, java.util.List<DockingState> dockingStates) {
Perspective perspective = new Perspective(perspectiveId, perspectiveId);
LayoutSequence sequence = perspective.getInitialSequence(true);
for (DockingState dockingState : dockingStates) {
if( dockingState.getRelativeParentId() != null)
sequence.add(dockingState.getDockableId(), dockingState.getRelativeParentId(), dockingState.getRegion(), dockingState.getSplitRatio());
else
sequence.add(dockingState.getDockableId());
}
return perspective;
}
And this is pretty much it. The key parts in summary are:
- declare the flexdock application page factory in application-context.xml
- delcare your views as FlexdockViewDescriptors (or a subclass)
- implement a PerspectiveFactory
I hope the above is of some help. Feel free to ask more questions if you find more problems.
Marios