001 /*
002 * Copyright 2002-2007 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.mdi.contextmenu;
017
018 import javax.swing.JDesktopPane;
019 import javax.swing.JInternalFrame;
020
021 import org.springframework.richclient.command.CommandGroup;
022 import org.springframework.richclient.command.CommandManager;
023
024 /**
025 * Helper class to create a context menu for a <code>JDesktopPane</code>. The
026 * context menu contains the following items:
027 * <ul>
028 * <li>tile command</li>
029 * <li>cascade command</li>
030 * <li>minimze command</li>
031 * <li>a separator</li>
032 * <li>a "show" command for each frame in the desktop pane</li>
033 * </ul>
034 *
035 * @author Peter De Bruycker
036 */
037 public class DefaultDesktopCommandGroupFactory implements DesktopCommandGroupFactory {
038 private boolean cascadeResizesFrames = false;
039 private int cascadeOffset = 20;
040
041 /**
042 * Create a window menu CommandGroup
043 * @return the window menu CommandGroup
044 */
045 public CommandGroup createWindowMenuCommandGroup(CommandManager commandManager, JDesktopPane desktopPane) {
046 // TODO implement this
047 return null;
048 }
049
050 /**
051 * Create a desktop pane context menu CommandGroup.
052 * @return the context menu CommandGroup
053 */
054 public CommandGroup createContextMenuCommandGroup(CommandManager commandManager, JDesktopPane desktop) {
055 CommandGroup commandGroup = new CommandGroup();
056
057 TileCommand tileCommand = new TileCommand(desktop);
058 CascadeCommand cascadeCommand = new CascadeCommand(desktop, cascadeOffset, cascadeResizesFrames);
059 MinimizeAllCommand minimizeAllCommand = new MinimizeAllCommand(desktop);
060
061 commandManager.configure(tileCommand);
062 commandManager.configure(cascadeCommand);
063 commandManager.configure(minimizeAllCommand);
064
065 commandGroup.add(tileCommand);
066 commandGroup.add(cascadeCommand);
067 commandGroup.add(minimizeAllCommand);
068
069 if (desktop.getAllFrames().length > 0) {
070 commandGroup.addSeparator();
071 // TODO try to get the frames in the order they've been added to the
072 // desktop
073 // pane instead of the current z-order.
074 for (int i = 0; i < desktop.getAllFrames().length; i++) {
075 JInternalFrame frame = desktop.getAllFrames()[i];
076
077 ShowFrameCommand showFrameCommand = new ShowFrameCommand(frame);
078 showFrameCommand.setIcon(frame.getFrameIcon());
079 showFrameCommand.setCaption("" + frame.getTitle());
080
081 String label = i + " " + frame.getTitle();
082 if (i < 10) {
083 label = "&" + label;
084 }
085 showFrameCommand.setLabel(label);
086
087 commandGroup.add(showFrameCommand);
088 }
089 }
090 return commandGroup;
091 }
092
093 public void setCascadeResizesFrames(boolean resizeFrames) {
094 cascadeResizesFrames = resizeFrames;
095 }
096
097 public void setCascadeOffset(int offset) {
098 cascadeOffset = offset;
099 }
100 }