/** * Copyright (C) 2015 Valkyrie RCP * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.valkyriercp.application.docking; import javax.swing.ToolTipManager; import javax.swing.WindowConstants; import com.jidesoft.docking.DefaultDockableHolder; import com.jidesoft.docking.DockingManager; import com.jidesoft.docking.PopupMenuCustomizer; import com.jidesoft.swing.JideTabbedPane; import com.jidesoft.utils.Lm; import org.springframework.beans.factory.annotation.Autowired; import org.valkyriercp.application.ApplicationWindow; import org.valkyriercp.application.ApplicationWindowConfigurer; import org.valkyriercp.application.ApplicationWindowFactory; import org.valkyriercp.application.config.ApplicationConfig; import org.valkyriercp.application.support.DefaultApplicationWindowConfigurer; /** * Factory for JideApplicationWindow objects. Actually constructs the * underlying JFrame extension from JIDE that forms the holder frame * for the application and configures the underlying docking manager * based on the various configurable parameters. * * @author Jonny Wray * */ public class JideApplicationWindowFactory implements ApplicationWindowFactory { @Autowired private ApplicationConfig applicationConfig; private Short layoutVersion = null; private String profileKey = "profileKey"; private boolean saveLayoutOnClose = true; private boolean floatable = true; private boolean rearrangable = true; private boolean resizable = true; private boolean continuousLayout = false; private int sensitiveAreaSize = 20; private int outlineMode = 0; private boolean groupAllowedOnSidePane = true; private boolean easyTabDocking = false; private boolean showGripper = false; private boolean showTitleBar = true; private int doubleClickAction = DockingManager.DOUBLE_CLICK_TO_FLOAT; private boolean heavyweightComponentEnabled = false; private boolean showWorkspace = true; private DockingManager.TabbedPaneCustomizer tabbedPaneCustomizer = new DefaultCustomizer(); private PopupMenuCustomizer popupMenuCustomizer = null; private boolean showMenuBar = true; private boolean showToolBar = true; private boolean showStatusBar = true; public ApplicationWindow createApplicationWindow() { DefaultDockableHolder dockableHolder = new DefaultDockableHolder(); configureDockingManager(dockableHolder.getDockingManager()); dockableHolder.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); Lm.setParent(dockableHolder); JideApplicationWindow window = new JideApplicationWindow(applicationConfig, dockableHolder){ protected ApplicationWindowConfigurer initWindowConfigurer() { DefaultApplicationWindowConfigurer configurer = new DefaultApplicationWindowConfigurer( this ); configurer.setShowMenuBar(showMenuBar); configurer.setShowToolBar(showToolBar); configurer.setShowStatusBar(showStatusBar); return configurer; } }; JideApplicationWindowCloseListener closeListener = new JideApplicationWindowCloseListener(window, dockableHolder.getDockingManager(), saveLayoutOnClose); dockableHolder.addWindowListener(closeListener); return window; } private void configureDockingManager(DockingManager manager){ if(layoutVersion != null){ manager.setVersion(layoutVersion); } manager.setProfileKey(profileKey); manager.setRearrangable(rearrangable); manager.setResizable(resizable); manager.setContinuousLayout(continuousLayout); manager.setSensitiveAreaSize(sensitiveAreaSize); manager.setOutlineMode(outlineMode); manager.setGroupAllowedOnSidePane(groupAllowedOnSidePane); manager.setEasyTabDock(easyTabDocking); manager.setShowGripper(showGripper); manager.setShowTitleBar(showTitleBar); manager.setDoubleClickAction(doubleClickAction); manager.setHeavyweightComponentEnabled(heavyweightComponentEnabled); manager.setShowWorkspace(showWorkspace); manager.setFloatable(floatable); manager.setTabbedPaneCustomizer(tabbedPaneCustomizer); if(popupMenuCustomizer != null){ manager.setPopupMenuCustomizer(popupMenuCustomizer); } ToolTipManager.sharedInstance().setLightWeightPopupEnabled(!heavyweightComponentEnabled); } public void setShowToolBar(boolean showToolBar){ this.showToolBar = showToolBar; } public void setShowMenuBar(boolean showMenuBar){ this.showMenuBar = showMenuBar; } public void setShowStatusBar(boolean showStatusBar){ this.showStatusBar = showStatusBar; } /** * Specify the popup menu customizer to be used the the docking manager. * * @param customizer */ public void setPopupMenuCustomizer(PopupMenuCustomizer customizer){ this.popupMenuCustomizer = customizer; } /** * Specify the tabbed pane customizer to be used by the docking manager * * @param tabbedPaneCustomizer */ public void setTabbedPaneCustomizer(DockingManager.TabbedPaneCustomizer tabbedPaneCustomizer){ this.tabbedPaneCustomizer = tabbedPaneCustomizer; } /** * Specify the profileKey for persistance of layouts * * @param profileKey */ public void setProfileKey(String profileKey){ this.profileKey = profileKey; } public void setShowWorkspace(boolean showWorkspace){ this.showWorkspace = showWorkspace; } public void setFloatable(boolean floatable){ this.floatable = floatable; } public void setHeavyweightComponentEnabled(boolean heavyweightComponentEnabled){ this.heavyweightComponentEnabled = heavyweightComponentEnabled; } public void setRearrangable(boolean rearrangable){ this.rearrangable = rearrangable; } public void setContinuousLayout(boolean continuousLayout) { this.continuousLayout = continuousLayout; } public void setDoubleClickAction(int doubleClickAction) { this.doubleClickAction = doubleClickAction; } public void setEasyTabDocking(boolean easyTabDocking) { this.easyTabDocking = easyTabDocking; } public void setGroupAllowedOnSidePane(boolean groupAllowedOnSidePane) { this.groupAllowedOnSidePane = groupAllowedOnSidePane; } public void setLayoutVersion(Short layoutVersion) { this.layoutVersion = layoutVersion; } public void setOutlineMode(int outlineMode) { this.outlineMode = outlineMode; } public void setResizable(boolean resizable) { this.resizable = resizable; } public void setSensitiveAreaSize(int sensitiveAreaSize) { this.sensitiveAreaSize = sensitiveAreaSize; } public void setShowGripper(boolean showGripper) { this.showGripper = showGripper; } public void setShowTitleBar(boolean showTitleBar) { this.showTitleBar = showTitleBar; } public void setSaveLayoutOnClose(boolean saveLayoutOnClose){ this.saveLayoutOnClose = saveLayoutOnClose; } private static class DefaultCustomizer implements DockingManager.TabbedPaneCustomizer{ public void customize(JideTabbedPane tabbedPane) { } } }