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
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
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
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
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 }