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