View Javadoc

1   /***
2    * @(#) ChartPanel.java Oct 17, 2003
3    * 
4    * Copyright (c) 2003 Delft University of Technology Jaffalaan 5, 2628 BX Delft,
5    * the Netherlands All rights reserved.
6    * 
7    * This software is proprietary information of Delft University of Technology
8    * The code is published under the General Public License
9    */
10  package nl.tudelft.simulation.dsol.gui.statistics;
11  
12  import java.awt.BorderLayout;
13  import java.awt.Color;
14  import java.awt.datatransfer.DataFlavor;
15  import java.awt.datatransfer.Transferable;
16  import java.awt.dnd.DnDConstants;
17  import java.awt.dnd.DropTarget;
18  import java.awt.dnd.DropTargetDragEvent;
19  import java.awt.dnd.DropTargetDropEvent;
20  import java.awt.dnd.DropTargetEvent;
21  import java.awt.dnd.DropTargetListener;
22  
23  import javax.swing.BorderFactory;
24  import javax.swing.BoxLayout;
25  import javax.swing.JButton;
26  import javax.swing.JPanel;
27  
28  import nl.tudelft.simulation.dsol.gui.panels.TablePanel;
29  import nl.tudelft.simulation.dsol.gui.statistics.actions.AddColumnAction;
30  import nl.tudelft.simulation.dsol.gui.statistics.actions.AddRowAction;
31  import nl.tudelft.simulation.dsol.gui.statistics.actions.DeleteColumnAction;
32  import nl.tudelft.simulation.dsol.gui.statistics.actions.DeleteRowAction;
33  import nl.tudelft.simulation.jstats.Swingable;
34  import nl.tudelft.simulation.logger.Logger;
35  import nl.tudelft.simulation.naming.InitialEventContext;
36  
37  /***
38   * The ChartPanel <br>
39   * (c) copyright 2003 <a href="http://www.simulation.tudelft.nl">Delft
40   * University of Technology </a>, the Netherlands. <br>
41   * See for project information <a
42   * href="http://www.simulation.tudelft.nl">www.simulation.tudelft.nl </a> <br>
43   * License of use: <a href="http://www.gnu.org/copyleft/gpl.html">General Public
44   * License (GPL) </a>, no warranty <br>
45   * 
46   * @version 1.0 18.10.2003 <br>
47   * @author <a href="http://www.simulation.tudelft.nl/people/jacobs.html">Peter
48   *         Jacobs </a>
49   */
50  public class ChartPanel extends JPanel implements DropTargetListener
51  {
52  	/*** the contentPanel of this chartPanel */
53  	private TablePanel contentPanel = new TablePanel(2, 2);
54  
55  	/***
56  	 * constructs a new ChartPanel
57  	 */
58  	public ChartPanel()
59  	{
60  		super();
61  		this.initialize();
62  		this.validate();
63  		this.repaint();
64  		new DropTarget(this, DnDConstants.ACTION_COPY_OR_MOVE, this);
65  	}
66  
67  	/***
68  	 * adds a row to the panel
69  	 */
70  	public void addRow()
71  	{
72  		this.contentPanel.addRow();
73  		for (int c = 0; c < this.contentPanel.getColumns(); c++)
74  		{
75  			JPanel panel = new JPanel();
76  			panel.setPreferredSize(this.getMaximumSize());
77  			panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
78  			this.contentPanel
79  					.setCell(panel, this.contentPanel.getRows() - 1, c);
80  		}
81  	}
82  
83  	/***
84  	 * adds a column
85  	 */
86  	public void addColumn()
87  	{
88  		this.contentPanel.addColumn();
89  		for (int r = 0; r < this.contentPanel.getRows(); r++)
90  		{
91  			JPanel panel = new JPanel();
92  			panel.setPreferredSize(this.getMaximumSize());
93  			panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
94  			this.contentPanel.setCell(panel, r,
95  					this.contentPanel.getColumns() - 1);
96  		}
97  	}
98  
99  	/***
100 	 * deletes a row
101 	 */
102 	public void deleteRow()
103 	{
104 		this.contentPanel.deleteRow();
105 	}
106 
107 	/***
108 	 * deletes a row
109 	 */
110 	public void deleteColumn()
111 	{
112 		this.contentPanel.deleteColumn();
113 	}
114 
115 	/***
116 	 * @see java.awt.dnd.DropTargetListener
117 	 *      #drop(java.awt.dnd.DropTargetDropEvent)
118 	 */
119 	public void drop(final DropTargetDropEvent dropEvent)
120 	{
121 		try
122 		{
123 			Transferable tr = dropEvent.getTransferable();
124 			if (dropEvent.isDataFlavorSupported(DataFlavor.stringFlavor))
125 			{
126 				dropEvent.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
127 				dropEvent.dropComplete(true);
128 				String key = (String) tr
129 						.getTransferData(DataFlavor.stringFlavor);
130 				Swingable chart = (Swingable) new InitialEventContext()
131 						.lookup(key);
132 				this.contentPanel.setCell(chart.getSwingPanel(),
133 						this.contentPanel.getRow(dropEvent.getLocation()),
134 						this.contentPanel.getColumn(dropEvent.getLocation()));
135 				this.validate();
136 				this.repaint();
137 
138 			} else
139 			{
140 				dropEvent.rejectDrop();
141 			}
142 		} catch (Exception ufe)
143 		{
144 			Logger.warning(this, "drop", ufe);
145 		}
146 	}
147 
148 	/***
149 	 * @see java.awt.dnd.DropTargetListener
150 	 *      #dragEnter(java.awt.dnd.DropTargetDragEvent)
151 	 */
152 	public void dragEnter(final DropTargetDragEvent e)
153 	{
154 		//The chartPanel does not react on enters
155 	}
156 
157 	/***
158 	 * @see java.awt.dnd.DropTargetListener
159 	 *      #dragExit(java.awt.dnd.DropTargetEvent)
160 	 */
161 	public void dragExit(final DropTargetEvent e)
162 	{
163 		//The chartPanel does not react on exits
164 	}
165 
166 	/***
167 	 * @see java.awt.dnd.DropTargetListener
168 	 *      #dragOver(java.awt.dnd.DropTargetDragEvent)
169 	 */
170 	public void dragOver(final DropTargetDragEvent e)
171 	{
172 		//The chartPanel does not react on overs
173 	}
174 
175 	/***
176 	 * @see java.awt.dnd.DropTargetListener
177 	 *      #dropActionChanged(java.awt.dnd.DropTargetDragEvent)
178 	 */
179 	public void dropActionChanged(final DropTargetDragEvent e)
180 	{
181 		//The chartPanel does not react on action changes
182 	}
183 
184 	/***
185 	 * initializes the chartPanel
186 	 */
187 	private void initialize()
188 	{
189 		this.setBorder(BorderFactory.createEmptyBorder());
190 		this.setLayout(new BorderLayout());
191 
192 		JPanel buttons = new JPanel();
193 		buttons.setBorder(BorderFactory.createEmptyBorder());
194 		buttons.setLayout((new BoxLayout(buttons, BoxLayout.X_AXIS)));
195 
196 		JButton addRowButton = new JButton(new AddRowAction(this));
197 		buttons.add(addRowButton);
198 
199 		JButton deleteRowButton = new JButton(new DeleteRowAction(this));
200 		buttons.add(deleteRowButton);
201 
202 		JButton addColumnButton = new JButton(new AddColumnAction(this));
203 		buttons.add(addColumnButton);
204 
205 		JButton deleteColumnButton = new JButton(new DeleteColumnAction(this));
206 		buttons.add(deleteColumnButton);
207 
208 		TablePanel buttonHolder = new TablePanel(1, 1);
209 		buttonHolder.setBorder(BorderFactory.createEmptyBorder());
210 
211 		buttonHolder.setCell(buttons, 0, 0);
212 		this.add(buttonHolder, BorderLayout.SOUTH);
213 		this.add(this.contentPanel, BorderLayout.CENTER);
214 
215 		for (int r = 0; r < this.contentPanel.getRows(); r++)
216 		{
217 			for (int c = 0; c < this.contentPanel.getColumns(); c++)
218 			{
219 				JPanel panel = new JPanel();
220 				panel.setPreferredSize(this.getMaximumSize());
221 				panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
222 				this.contentPanel.setCell(panel, r, c);
223 			}
224 		}
225 	}
226 }