}
this.factory = factory;
register = factory.createRegister( this );
DockController controller = factory.createController( this );
controller.getProperties().set( CCONTROL, this, Priority.CLIENT );
controller.getProperties().finalize( CCONTROL );
controller.setSingleParentRemover( new CSingleParentRemover( this ) );
initExtensions( controller );
initFocusListeners( controller );
initInputListener( controller );
initTransferFocusOnMinimize( controller );
frontend = factory.createFrontend( access, controller );
frontend.setOwner( window );
frontend.setMissingDockableStrategy( new MissingDockableStrategy(){
public boolean shouldStoreHidden( String key ) {
return shouldStore( key );
}
public boolean shouldStoreShown( String key ) {
return shouldStore( key );
}
public <L> boolean shouldCreate( DockFactory<?,?,L> factory, L data ) {
if( factory instanceof CommonMultipleDockableFactory && data instanceof CommonMultipleDockableLayout ){
return CControl.this.shouldCreate(
((CommonMultipleDockableFactory)factory).getFactory(),
(CommonMultipleDockableLayout)data );
}
return false;
}
});
setIgnoreWorkingForEntry( true );
frontend.setShowHideAction( false );
frontend.getController().addActionOffer( new CActionOffer( this ) );
frontend.getController().getRegister().addDockRegisterListener( new DockRegisterAdapter(){
@Override
public void dockableRegistered( DockController controller, Dockable dockable ) {
if( dockable instanceof CommonDockable ){
CDockable cdock = ((CommonDockable)dockable).getDockable();
CDockableAccess access = accesses.get( cdock );
if( access != null ){
access.informVisibility( true );
}
for( CControlListener listener : listeners() )
listener.opened( CControl.this, cdock );
}
}
@Override
public void dockableUnregistered( DockController controller, Dockable dockable ) {
if( dockable instanceof CommonDockable ){
CDockable cdock = ((CommonDockable)dockable).getDockable();
CDockableAccess access = accesses.get( cdock );
if( access != null ){
access.informVisibility( false );
}
for( CControlListener listener : listeners() )
listener.closed( CControl.this, cdock );
if( cdock instanceof MultipleCDockable ){
MultipleCDockable multiple = (MultipleCDockable)cdock;
if( multiple.isRemoveOnClose() ){
removeDockable( multiple );
}
}
}
}
});
frontend.getController().getFocusController().addVetoListener( new ControlVetoFocusListener( this, listenerCollection.getVetoFocusListener() ) );
frontend.getController().getFocusController().setStrategy( new DefaultFocusStrategy( frontend.getController() ){
public Component getFocusComponent( FocusStrategyRequest request ){
Component mouseClicked = request.getMouseClicked();
Dockable dockable = request.getDockable();
if( mouseClicked != null ){
if( (mouseClicked.isFocusable() && !excluded( mouseClicked, request )) || focusable( mouseClicked, request )){
return mouseClicked;
}
}
if( dockable instanceof CommonDockable ){
Component result = ((CommonDockable)dockable).getDockable().getFocusComponent();
if( result != null ){
return result;
}
}
return super.getFocusComponent( request );
}
});
frontend.addVetoableListener( new ControlVetoClosingListener( this, listenerCollection.getVetoClosingListener() ) );
frontend.getController().addAcceptance( new StackableAcceptance() );
frontend.getController().addAcceptance( new WorkingAreaAcceptance( access ) );
frontend.getController().addAcceptance( new ExtendedModeAcceptance( access ) );
initFactories();
themes = new ThemeMap( this );
initPersistentStorage();
initExtendedModes();
initProperties();
initIcons();
initTexts();
setTheme( ThemeMap.KEY_SMOOTH_THEME );
controller.getExtensions().load( new ExtensionName<Object>( CCONTROL_EXTENSION, Object.class, EXTENSION_PARAM, this ) );
}