View Javadoc

1   /*
2    * Copyright (c) 2003-2008 by Cosylab d. d.
3    *
4    * This file is part of CosyBeans.
5    *
6    * CosyBeans is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU General Public License as published by
8    * the Free Software Foundation, either version 3 of the License, or
9    * (at your option) any later version.
10   *
11   * CosyBeans is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.
15   *
16   * You should have received a copy of the GNU General Public License
17   * along with CosyBeans.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  
20  package com.cosylab.gui.util;
21  
22  import java.awt.Component;
23  import java.awt.datatransfer.DataFlavor;
24  import java.awt.datatransfer.Transferable;
25  import java.awt.datatransfer.UnsupportedFlavorException;
26  import java.io.IOException;
27  
28  import javax.swing.JComponent;
29  
30  import sun.reflect.generics.reflectiveObjects.NotImplementedException;
31  
32  import com.cosylab.gui.displayers.DisplayerParameters;
33  import com.cosylab.gui.displayers.MultipleDisplayer;
34  
35  /**
36   * <code>MultipleDisplayerParametersTransferHandler</code> can handle
37   * MultipleDisplayerParameters.
38   * 
39   * @author tkusterle
40   *
41   */
42  public class MultipleDisplayerParametersTransferHandler extends AbstractDisplayerParametersTransferHandler {
43  	
44  	private static final long serialVersionUID = -4223198013311762602L;
45  
46  	protected MultipleDisplayer mDisplayer;
47  
48  	public MultipleDisplayerParametersTransferHandler(MultipleDisplayer comp, boolean reciveEnabled, boolean exportEnabled) {
49  		super((JComponent)comp,reciveEnabled, exportEnabled);
50  		mDisplayer= (MultipleDisplayer)comp;
51  	}
52  	
53  	public MultipleDisplayerParametersTransferHandler(MultipleDisplayer comp, boolean reciveEnabled, boolean exportEnabled, DataFlavor[] f, boolean resetFlavors) {
54  		super((JComponent)comp, reciveEnabled, exportEnabled, f, resetFlavors);
55  		mDisplayer= (MultipleDisplayer)comp;
56  	}
57  
58  
59  
60  	/* (non-Javadoc)
61  	 * @see com.cosylab.gui.components.util.CosyTransferHandler#getTransferData(java.awt.datatransfer.DataFlavor)
62  	 */
63  	@Override
64  	public Object getTransferData(DataFlavor flavor)
65  			throws UnsupportedFlavorException, IOException {
66  		if (flavor instanceof MultipleDisplayerParametersFlavor) {
67  			DisplayerParameters[] p= exportMultipleDisplayerParameters();
68  			if (p!=null) {
69  				return p;
70  			}
71  		}
72  		return super.getTransferData(flavor);
73  	}
74  
75  	protected DisplayerParameters exportDisplayerParameters() {
76  		DisplayerParameters[] d= exportMultipleDisplayerParameters();
77  		int i = selectParameters((Component)mDisplayer,d);
78  		if (i<0) {
79  			return null;
80  		}
81  		return d[i];
82  	}
83  
84  	protected DisplayerParameters[] exportMultipleDisplayerParameters() {
85  		throw new NotImplementedException();
86  	}
87  	
88  	/* (non-Javadoc)
89  	 * @see javax.swing.TransferHandler#importData(javax.swing.JComponent, java.awt.datatransfer.Transferable)
90  	 */
91  	@Override
92  	public boolean importData(JComponent comp, Transferable t) {
93  		try {
94  			Object drop=null;
95  			if (t.isDataFlavorSupported(MultipleDisplayerParametersFlavor.FLAVOR)) {
96  				drop= t.getTransferData(MultipleDisplayerParametersFlavor.FLAVOR);
97  				DisplayerParameters[] dp = null;
98  				dp = castParameters(drop);
99  	
100 				if (dp!=null) {
101 					return importDisplayerParameters(dp);
102 				}
103 			} else {
104 				super.importData(comp, t);
105 			}
106 		} catch (Exception e) {
107 			e.printStackTrace();
108 		}
109 		
110 		return false;
111 	}
112 	
113 	public int displayerParametersDimension() {
114 		return mDisplayer.getConsumers().length;
115 	};
116 
117 	/**
118 	 * Returns the displayer.
119 	 * @return Returns the displayer.
120 	 */
121 	public MultipleDisplayer getMultipleDisplayer() {
122 		return mDisplayer;
123 	}
124 }