001    /*
002     * Copyright 2002-2008 the original author or authors.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.richclient.application.docking.flexdock;
017    
018    import org.flexdock.docking.DockingManager;
019    import org.flexdock.docking.drag.effects.DragPreview;
020    import org.flexdock.docking.drag.effects.EffectsManager;
021    import org.flexdock.perspective.PerspectiveFactory;
022    import org.flexdock.perspective.PerspectiveManager;
023    import org.springframework.beans.factory.InitializingBean;
024    import org.springframework.richclient.application.ApplicationPage;
025    import org.springframework.richclient.application.ApplicationPageFactory;
026    import org.springframework.richclient.application.ApplicationWindow;
027    import org.springframework.richclient.application.PageDescriptor;
028    
029    /**
030     * Factory for <code>FlexDockApplicationPage</code> instances
031     * 
032     * @author Peter De Bruycker
033     */
034    public class FlexDockApplicationPageFactory implements ApplicationPageFactory, InitializingBean {
035    
036        private PerspectiveFactory perspectiveFactory;
037        private String defaultPerspective;
038        private DragPreview dragPreview;
039        private boolean floatingEnabled;
040        private boolean singleTabsAllowed;
041    
042        public String getDefaultPerspective() {
043            return defaultPerspective;
044        }
045    
046        public void setDefaultPerspective( String defaultPerspective ) {
047            this.defaultPerspective = defaultPerspective;
048        }
049    
050        public ApplicationPage createApplicationPage( ApplicationWindow window, PageDescriptor descriptor ) {
051            final FlexDockApplicationPage page = new FlexDockApplicationPage();
052            page.setApplicationWindow( window );
053            page.setDescriptor( descriptor );
054    
055            DockingManager.setDockableFactory( page );
056            // TODO uncomment for persistence
057            // DockingManager.setAutoPersist(true);
058    
059            PerspectiveManager.setFactory( perspectiveFactory );
060            PerspectiveManager.getInstance().setCurrentPerspective( defaultPerspective, true );
061            // TODO define how the file name or persister will be passed in the app context
062            // PersistenceHandler persister = FilePersistenceHandler.createDefault(
063            // "test-flexdock.xml" );
064            // PerspectiveManager.setPersistenceHandler( persister );
065    
066            page.loadLayout();
067    
068            return page;
069        }
070    
071        public void setPerspectiveFactory( PerspectiveFactory perspectiveFactory ) {
072            this.perspectiveFactory = perspectiveFactory;
073        }
074    
075        public PerspectiveFactory getPerspectiveFactory() {
076            return perspectiveFactory;
077        }
078    
079        public void afterPropertiesSet() throws Exception {
080            if( dragPreview != null ) {
081                EffectsManager.setPreview( dragPreview );
082            }
083    
084            DockingManager.setFloatingEnabled( floatingEnabled );
085            DockingManager.setSingleTabsAllowed( singleTabsAllowed );
086        }
087    
088        public DragPreview getDragPreview() {
089            return dragPreview;
090        }
091    
092        public void setDragPreview( DragPreview dragPreview ) {
093            this.dragPreview = dragPreview;
094        }
095    
096        public boolean isFloatingEnabled() {
097            return floatingEnabled;
098        }
099    
100        public void setFloatingEnabled( boolean floatingEnabled ) {
101            this.floatingEnabled = floatingEnabled;
102        }
103    }