001/* 002 * Copyright (c) 2010 The Regents of the University of California. 003 * All rights reserved. 004 * 005 * '$Author: crawl $' 006 * '$Date: 2012-11-26 22:23:27 +0000 (Mon, 26 Nov 2012) $' 007 * '$Revision: 31127 $' 008 * 009 * Permission is hereby granted, without written agreement and without 010 * license or royalty fees, to use, copy, modify, and distribute this 011 * software and its documentation for any purpose, provided that the above 012 * copyright notice and the following two paragraphs appear in all copies 013 * of this software. 014 * 015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY 016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF 018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF 019 * SUCH DAMAGE. 020 * 021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, 022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE 024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF 025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, 026 * ENHANCEMENTS, OR MODIFICATIONS. 027 * 028 */ 029 030package org.kepler.reporting.gui; 031 032import java.awt.BorderLayout; 033import java.awt.Color; 034import java.awt.Cursor; 035import java.awt.Dimension; 036import java.awt.FlowLayout; 037import java.awt.GridLayout; 038import java.awt.datatransfer.Transferable; 039import java.awt.event.MouseEvent; 040import java.awt.event.MouseListener; 041import java.util.ArrayList; 042import java.util.List; 043 044import javax.swing.JPanel; 045import javax.swing.JRadioButton; 046import javax.swing.JTextField; 047import javax.swing.JToolBar; 048import javax.swing.ToolTipManager; 049import javax.swing.event.DocumentEvent; 050import javax.swing.event.DocumentListener; 051 052import org.kepler.reporting.rio.Item; 053import org.kepler.reporting.rio.ItemLabel; 054import org.kepler.reporting.roml.ReportLayout; 055 056import ptolemy.actor.gui.TableauFrame; 057 058public class DynamicReportItemPanel extends DragAndDropPanel implements 059 Transferable { 060 061 public static final int DYNAMIC_REPORT_ITEM_VIEW_WIDTH = 25000; 062 public static final int DYNAMIC_REPORT_ITEM_VIEW_HEIGHT = 85; 063 064 private Color buttonbackgroundcolor = Color.white; 065 private TableauFrame _tableauFrame = null; 066 private ReportLayout _reportLayout = null; 067 068 private ReportDesignerPanel _parentReportDesignerPanel; 069 070 public DynamicReportItemPanel(ReportDesignerPanel reportDesignerPanel, 071 Item tmpItem, JRadioButton dynamicreportItemButton, 072 DeleteItemButton delbutton, String strItemFullName, 073 ReportLayout reportLayout, TableauFrame tableauFrame) { 074 075 super(reportDesignerPanel); 076 _parentReportDesignerPanel = reportDesignerPanel; 077 078 _reportLayout = reportLayout; 079 _tableauFrame = tableauFrame; 080 081 ToolTipManager.sharedInstance().setEnabled(true); 082 this.addMouseListener(new DraggableMouseListener()); 083 this.setLayout(new GridLayout(3, 3)); 084 setFocusable(true); 085 086 this.setBorder(ovalBorder); 087 this.setBackground(buttonbackgroundcolor); 088 delbutton.setBackground(buttonbackgroundcolor); 089 090 Dimension dimension = new Dimension(DYNAMIC_REPORT_ITEM_VIEW_WIDTH, 091 DYNAMIC_REPORT_ITEM_VIEW_HEIGHT); 092 this.setPreferredSize(dimension); 093 this.setMinimumSize(dimension); 094 this.setToolTipText(strItemFullName); 095 096 List<LabelPanel> labelpanelslist = new ArrayList<LabelPanel>(); 097 List<ItemLabel> currentLabelsList = tmpItem.getLabels(); 098 099 if (currentLabelsList.size() == 0) { 100 createItemLabels(tmpItem); 101 currentLabelsList = tmpItem.getLabels(); 102 103 for (int z = 0; z < currentLabelsList.size(); z++) { 104 105 ItemLabel label = tmpItem.getLabels().get(z); 106 JTextField jtextField = renderItemLabel(tmpItem, label); 107 LabelPanel labelpanel = renderLabelPanel(tmpItem, jtextField); 108 this.add(labelpanel); 109 110 ///labelpanel.getView(); 111 labelpanelslist.add(labelpanel); 112 } 113 114 } else if (currentLabelsList.size() == 4) { 115 116 for (int z = 0; z < currentLabelsList.size(); z++) { 117 ItemLabel label = tmpItem.getLabels().get(z); 118 JTextField jtextField = renderItemLabel(tmpItem, label); 119 LabelPanel labelpanel = renderLabelPanel(tmpItem, jtextField); 120 this.add(labelpanel); 121 122 ///labelpanel.getView(); 123 labelpanelslist.add(labelpanel); 124 } 125 126 renderView(this, dynamicreportItemButton, labelpanelslist, 127 delbutton, strItemFullName); 128 } 129 } 130 131 private LabelPanel renderLabelPanel(Item tmpItem, JTextField jtextfield) { 132 133 LabelPanel panel = new LabelPanel(); 134 panel.setAssociatedItem(tmpItem); 135 panel.setName(jtextfield.getName()); 136 // this sets the size of the draggable area 137 /// does it? not seeing this doing anything: 138 ///panel.setBounds(0, 0, 500, 150); 139 panel.add(jtextfield); 140 141 return panel; 142 } 143 144 private JTextField renderItemLabel(Item tmpItem, ItemLabel label) { 145 146 String labelposition = label.getPosition(); 147 String labelvalue = label.getValue(); 148 JTextField jtextfield = new JTextField(labelvalue); 149 jtextfield.setName(labelposition); 150 jtextfield.setText(labelvalue); 151 152 DynamicReportItemLabelMouseListener labelmouselistener = new DynamicReportItemLabelMouseListener(); 153 DynamicReportItemLabelDocumentListener labelDocumentListener = new DynamicReportItemLabelDocumentListener(); 154 155 jtextfield.addMouseListener(labelmouselistener); 156 jtextfield.getDocument().addDocumentListener(labelDocumentListener); 157 // TODO putting the jtextfield in as a property seems poor: 158 jtextfield.getDocument().putProperty("jTextFieldName", jtextfield); 159 160 return jtextfield; 161 } 162 163 private void createItemLabels(Item tmpItem) { 164 165 ItemLabel northlabel = new ItemLabel(""); 166 northlabel.setPosition(ItemLabel.NORTH); 167 tmpItem.addLabel(northlabel); 168 169 ItemLabel southlabel = new ItemLabel(""); 170 southlabel.setPosition(ItemLabel.SOUTH); 171 tmpItem.addLabel(southlabel); 172 173 ItemLabel westlabel = new ItemLabel(""); 174 westlabel.setPosition(ItemLabel.WEST); 175 tmpItem.addLabel(westlabel); 176 177 ItemLabel eastlabel = new ItemLabel(""); 178 eastlabel.setPosition(ItemLabel.EAST); 179 tmpItem.addLabel(eastlabel); 180 } 181 182 183 public DragAndDropPanel renderView(DragAndDropPanel columnPanel, 184 JRadioButton dynamicreportItemButton, 185 List<LabelPanel> labelpanellist, DeleteItemButton delbutton, 186 String tooltip) { 187 188 dynamicreportItemButton.setToolTipText(tooltip); 189 dynamicreportItemButton.setCursor(Cursor 190 .getPredefinedCursor(Cursor.HAND_CURSOR)); 191 192 int iconheight = dynamicreportItemButton.getIcon().getIconHeight(); 193 int iconwidth = dynamicreportItemButton.getIcon().getIconWidth(); 194 195 JPanel centerpanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0)); 196 centerpanel.setToolTipText(tooltip); 197 centerpanel.setBackground(buttonbackgroundcolor); 198 centerpanel.setMinimumSize(new Dimension(iconwidth, iconheight)); 199 200 JPanel gridpanel1 = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0)); 201 JPanel gridpanel2 = new JPanel(new FlowLayout(FlowLayout.RIGHT, 0, 0)); 202 JPanel gridpanel3 = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0)); 203 JPanel gridpanel4 = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0)); 204 205 gridpanel1.setBackground(buttonbackgroundcolor); 206 gridpanel2.setBackground(buttonbackgroundcolor); 207 gridpanel3.setBackground(buttonbackgroundcolor); 208 gridpanel4.setBackground(buttonbackgroundcolor); 209 210 columnPanel.setLayout(new GridLayout(3, 3, 0, 0)); 211 dynamicreportItemButton.setToolTipText(tooltip); 212 dynamicreportItemButton.setEnabled(false); 213 214 centerpanel.add(dynamicreportItemButton); 215 centerpanel.setBackground(buttonbackgroundcolor); 216 217 LabelPanel northlabelpanel = labelpanellist.get(0); 218 LabelPanel southlabelpanel = labelpanellist.get(1); 219 LabelPanel westlabelpanel = labelpanellist.get(2); 220 LabelPanel eastlabelpanel = labelpanellist.get(3); 221 222 columnPanel.add(gridpanel1); 223 columnPanel.add(northlabelpanel); 224 columnPanel.add(gridpanel2); 225 226 JToolBar toolbar = new JToolBar(); 227 toolbar.setBackground(buttonbackgroundcolor); 228 toolbar.setFloatable(false); 229 toolbar.setBorderPainted(false); 230 toolbar.add(delbutton, BorderLayout.LINE_END); 231 232 gridpanel2.add(toolbar); 233 gridpanel2.setBackground(buttonbackgroundcolor); 234 columnPanel.add(westlabelpanel); 235 columnPanel.add(centerpanel); 236 columnPanel.add(eastlabelpanel); 237 columnPanel.add(gridpanel3); 238 columnPanel.add(southlabelpanel); 239 columnPanel.add(gridpanel4); 240 241 return columnPanel; 242 243 } 244 245 246 public void sendLabelValuesToModel(Item labeleditem, String labelcontents, 247 String position) { 248 249 List<ItemLabel> tmplabelslist = labeleditem.getLabels(); 250 251 if (position.equals(ItemLabel.NORTH)) { 252 253 ItemLabel tmplabel = tmplabelslist.get(0); 254 tmplabel.setValue(labelcontents); 255 tmplabel.setPosition(position); 256 } 257 258 if (position.equals(ItemLabel.SOUTH)) { 259 260 ItemLabel tmplabel = tmplabelslist.get(1); 261 tmplabel.setValue(labelcontents); 262 tmplabel.setPosition(position); 263 } 264 265 if (position.equals(ItemLabel.WEST)) { 266 267 ItemLabel tmplabel = tmplabelslist.get(2); 268 tmplabel.setValue(labelcontents); 269 tmplabel.setPosition(position); 270 } 271 272 if (position.equals(ItemLabel.EAST)) { 273 274 ItemLabel tmplabel = tmplabelslist.get(3); 275 tmplabel.setValue(labelcontents); 276 tmplabel.setPosition(position); 277 } 278 279 } 280 281 public class DynamicReportItemLabelDocumentListener implements 282 DocumentListener { 283 284 public void changedUpdate(DocumentEvent e) { 285 } 286 287 public void insertUpdate(DocumentEvent e) { 288 289 JTextField labelfieldtext = (JTextField) e.getDocument() 290 .getProperty("jTextFieldName"); 291 LabelPanel labeledpanel = (LabelPanel) labelfieldtext.getParent(); 292 293 Item labeleditem = labeledpanel.getAssociatedItem(); 294 String position = labelfieldtext.getName(); 295 String labelcontents = labelfieldtext.getText(); 296 sendLabelValuesToModel(labeleditem, labelcontents, position); 297 298 _reportLayout.setModified(_tableauFrame); 299 } 300 301 public void removeUpdate(DocumentEvent e) { 302 303 JTextField labelfieldtext = (JTextField) e.getDocument() 304 .getProperty("jTextFieldName"); 305 LabelPanel labeledpanel = (LabelPanel) labelfieldtext.getParent(); 306 307 Item labeleditem = labeledpanel.getAssociatedItem(); 308 String position = labelfieldtext.getName(); 309 String labelcontents = labelfieldtext.getText(); 310 sendLabelValuesToModel(labeleditem, labelcontents, position); 311 312 _reportLayout.setModified(_tableauFrame); 313 } 314 315 } 316 317 public class DynamicReportItemLabelMouseListener implements MouseListener { 318 319 public void mouseClicked(MouseEvent e) { 320 321 JTextField labelfieldtext = (JTextField) e.getSource(); 322 LabelPanel labeledpanel = (LabelPanel) labelfieldtext.getParent(); 323 DragAndDropPanel clickedPanel = (DragAndDropPanel) labeledpanel 324 .getParent(); 325 DragAndDropPanel prevPanel = _parentReportDesignerPanel 326 .getPrevPanel(); 327 328 if (!clickedPanel.equals(prevPanel)) { 329 330 prevPanel.deselectPanel(); 331 clickedPanel.setSelected(true); 332 clickedPanel.selectPanel(); 333 clickedPanel.setBorder(new OvalBorder(3, 3, Color.blue, 334 Color.blue)); 335 clickedPanel.setOpaque(false); 336 clickedPanel 337 .setBackground(new Color(6, 128, 255, 129).darker()); 338 _parentReportDesignerPanel.setCurrPanel(clickedPanel); 339 _parentReportDesignerPanel.setPrevPanel(clickedPanel); 340 } 341 342 // requestFocusInWindow(); 343 344 // redrawView(); 345 // renderReportLayout(); 346 } 347 348 public void mouseEntered(MouseEvent e) { 349 } 350 351 public void mouseExited(MouseEvent e) { 352 } 353 354 public void mousePressed(MouseEvent e) { 355 } 356 357 public void mouseReleased(MouseEvent e) { 358 } 359 360 } 361 362}