Code Search for Developers
 
 
  

WorkSpace.java from Magellan-Client at Krugle


Show WorkSpace.java syntax highlighted

/*
 *  Copyright (C) 2000-2004 Roger Butenuth, Andreas Gampe,
 *                          Stefan Goetz, Sebastian Pappert,
 *                          Klaas Prause, Enno Rehling,
 *                          Sebastian Tusk, Ulrich Kuester,
 *                          Ilja Pavkovic
 *
 * This file is part of the Eressea Java Code Base, see the
 * file LICENSING for the licensing information applying to
 * this file.
 *
 */

package com.eressea.swing.desktop;

import java.awt.*;
import java.util.*;

import javax.swing.*;

/**
 * TODO: DOCUMENT ME!
 *
 * @author $author$
 * @version $Revision: 271 $
 */
public class WorkSpace extends JPanel {
	private JPanel contentPanel;
	private JPanel chooser;

	// private Perspective[] perspectives;

	/*
	 * A WorkSpace  consists of four parts:
	 * - perspective chooser panel
	 * (- toolbar panel)
	 * - perspective panel
	 * - status panel
	 */
	public WorkSpace(ButtonGroup buttonGroup) {
		initUI(buttonGroup);
	}


	public void setEnabledChooser(boolean bool) {
		if(bool) {
			this.add(chooser, BorderLayout.WEST);
		} else {
			this.remove(chooser);
		}
		validate();
	}

	public boolean isEnabledChooser() {
		Component[] components = this.getComponents();
		for(int i=0; i<components.length; i++) {
			if(components[i].equals(chooser)) {
				return true;
			}
		}
		return false;
	}

	private void initUI(ButtonGroup buttonGroup) {
		contentPanel = createContentPanel();
		setContent(new EmptyPerspective().getJPanel());

		this.setLayout(new BorderLayout());
		this.add(contentPanel,BorderLayout.CENTER);

		chooser = createChooser(buttonGroup);
		if(chooser != null) {
			this.add(chooser,BorderLayout.WEST);
		}

		// 		JPanel status = createDefaultStatus();

		//  		JSplitPane perspectiveOverStatus = UIFactory.createBorderlessJSplitPane(JSplitPane.VERTICAL_SPLIT);
		//  		perspectiveOverStatus.setTopComponent(perspective);
		//  		perspectiveOverStatus.setBottomComponent(status);
		//  		JPanel perspectiveOverStatus = new JPanel(new BorderLayout());
		//  		perspectiveOverStatus.add(contentPanel, BorderLayout.CENTER);
		//  		perspectiveOverStatus.add(status, BorderLayout.SOUTH);
		//   		JSplitPane chooserLeftPerspective = UIFactory.createBorderlessJSplitPane(JSplitPane.HORIZONTAL_SPLIT);
		//   		chooserLeftPerspective.setLeftComponent(chooser);
		//    		chooserLeftPerspective.setRightComponent(perspectiveOverStatus);
		//    		JPanel chooserLeftPerspective = new JPanel(new BorderLayout());
		//   		chooserLeftPerspective.add(chooser, BorderLayout.WEST);
		//   		chooserLeftPerspective.add(perspectiveOverStatus, BorderLayout.CENTER);
		// 		this.setLayout(new BorderLayout());
		// 		this.add(chooserLeftPerspective, BorderLayout.CENTER);
	}

	private JPanel createContentPanel() {
		return new JSplitPaneBorderedJPanel(new BorderLayout());
	}

	private JPanel createDefaultStatus() {
		JPanel ret = new JPanel(new BorderLayout());
		ret.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0, Color.black));
		ret.add(new JLabel("Status"), BorderLayout.WEST);

		return ret;
	}

	private JPanel createChooser(ButtonGroup buttonGroup) {
		if(buttonGroup ==null) return null;

		JPanel ret = new JPanel(new BorderLayout());
		Color sepColor = UIManager.getColor("Separator.foreground");
		ret.setBorder(BorderFactory.createMatteBorder(0, 0, 0, 1, sepColor));
		JToolBar chooserBar = new JToolBar(SwingConstants.VERTICAL);
		// may not float into a different position
		chooserBar.setFloatable(false);
		ButtonGroup group = new ButtonGroup();
		Action lastAction = null;
		Dimension DIM = new Dimension(24,24);

 		for(Enumeration enumeration = buttonGroup.getElements(); enumeration.hasMoreElements(); ) {
			AbstractButton origButton = (AbstractButton) enumeration.nextElement();

 			Action action = origButton.getAction();

			// here we bind a new JButton to a given ButtonModel
			// to effectively using the underlying MVC-Pattern
			JToggleButton button = new JToggleButton(action);
			button.setModel(origButton.getModel());

 			button.setPreferredSize(DIM);
 			button.setSize(DIM);
 			button.setMinimumSize(DIM);
 			button.setMaximumSize(DIM);

 			String text = (String) action.getValue(Action.NAME);
 			if(text.indexOf(":") !=-1) {
 				text = text.substring(0,text.indexOf(":"));
 			}
 			button.setText(text);
 			if(lastAction != null && !action.getClass().isInstance(lastAction)) {
 				chooserBar.addSeparator();
 			}
 			lastAction =action;
			
			chooserBar.add(button);
		}


		ret.add(chooserBar, BorderLayout.CENTER);

		return ret;
	}

	/**
	 * TODO: DOCUMENT ME!
	 *
	 * @param newContent TODO: DOCUMENT ME!
	 */
	public void setContent(Component newContent) {
		removeContent();
		contentPanel.add(newContent);
	}

	public void removeContent() {
		contentPanel.removeAll();
	}

	public static void main(String args[]) throws Exception {
		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

		JFrame frame = new JFrame();
		frame.setContentPane(new WorkSpace(null));
		frame.setSize(600, 400);
		frame.setTitle("Magellan - Desktop");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}

	/**
	 * This class represents a self bordering JPanel that keeps the size of the border in sync with
	 * a JSplitPane divider size.
	 */
	private static class JSplitPaneBorderedJPanel extends JPanel {
		/**
		 * Creates a new JSplitPaneBorderedJPanel object.
		 *
		 * @param layout a Layout for this panel.
		 */
		public JSplitPaneBorderedJPanel(LayoutManager layout) {
			super(layout);
			setBorderToJSplitpaneDivider();
		}

		/**
		 * called from UIManager.setLookAndFeel
		 */
		public void updateUI() {
			super.updateUI();
			setBorderToJSplitpaneDivider();
		}

		private void setBorderToJSplitpaneDivider() {
			int size = new JSplitPane().getDividerSize();
			setBorder(BorderFactory.createEmptyBorder(size, size, size, size));
		}
	}
}




See more files for this project here

Magellan-Client

The Magellan Client is basicly a GUI for the pbem game eressea but can be used for other pbems based on \"atlantis\" too.

Project homepage: http://sourceforge.net/projects/magellan-client
Programming language(s): Java
License: other

  EmptyPerspective.java
  Perspective.java
  View.java
  WorkSpace.java