|
From: <pat...@us...> - 2011-03-07 19:35:17
|
Revision: 1237
http://cishell.svn.sourceforge.net/cishell/?rev=1237&view=rev
Author: pataphil
Date: 2011-03-07 19:35:10 +0000 (Mon, 07 Mar 2011)
Log Message:
-----------
* Tried to implement drag-and-dropping into the tool. See wiki for notes on this.
Modified Paths:
--------------
trunk/clients/gui/org.cishell.reference.gui.datamanager/META-INF/MANIFEST.MF
trunk/clients/gui/org.cishell.reference.gui.datamanager/src/org/cishell/reference/gui/datamanager/AbstractDataManagerView.java
trunk/clients/gui/org.cishell.reference.gui.datamanager/src/org/cishell/reference/gui/datamanager/DataGUIItem.java
Added Paths:
-----------
trunk/clients/gui/org.cishell.reference.gui.datamanager/src/org/cishell/reference/gui/datamanager/CIShellDataTransfer.java
Modified: trunk/clients/gui/org.cishell.reference.gui.datamanager/META-INF/MANIFEST.MF
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.datamanager/META-INF/MANIFEST.MF 2011-03-07 19:18:57 UTC (rev 1236)
+++ trunk/clients/gui/org.cishell.reference.gui.datamanager/META-INF/MANIFEST.MF 2011-03-07 19:35:10 UTC (rev 1237)
@@ -8,11 +8,13 @@
org.eclipse.core.runtime
Import-Package: org.cishell.app.service.datamanager;version="1.0.0",
org.cishell.app.service.fileloader,
+ org.cishell.app.service.filesaver,
org.cishell.framework;version="1.0.0",
org.cishell.framework.algorithm;version="1.0.0",
org.cishell.framework.data;version="1.0.0",
org.cishell.reference.gui.datamanager,
org.cishell.reference.gui.workspace,
+ org.cishell.service.conversion;version="1.0.0",
org.cishell.service.guibuilder;version="1.0.0",
org.cishell.utilities,
org.osgi.service.log;version="1.3.0"
Modified: trunk/clients/gui/org.cishell.reference.gui.datamanager/src/org/cishell/reference/gui/datamanager/AbstractDataManagerView.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.datamanager/src/org/cishell/reference/gui/datamanager/AbstractDataManagerView.java 2011-03-07 19:18:57 UTC (rev 1236)
+++ trunk/clients/gui/org.cishell.reference.gui.datamanager/src/org/cishell/reference/gui/datamanager/AbstractDataManagerView.java 2011-03-07 19:35:10 UTC (rev 1237)
@@ -50,6 +50,9 @@
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TreeEditor;
import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSource;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.DragSourceListener;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetAdapter;
import org.eclipse.swt.dnd.DropTargetEvent;
@@ -98,7 +101,7 @@
private boolean updatingTreeItem;
private Tree tree;
private Menu menu;
- private Map<Data, DataGUIItem> dataToDataGUIItemMap;
+ private Map<Data, DataGUIItem> dataToDataGUIItem;
private AlgorithmFactory saveFactory;
private AlgorithmFactory viewFactory;
private AlgorithmFactory viewWithFactory;
@@ -110,7 +113,7 @@
public AbstractDataManagerView(String brandPluginID) {
this.brandPluginID = brandPluginID;
- this.dataToDataGUIItemMap = new HashMap<Data, DataGUIItem>();
+ this.dataToDataGUIItem = new HashMap<Data, DataGUIItem>();
this.manager = Activator.getDataManagerService();
this.logger = Activator.getLogService();
@@ -204,6 +207,11 @@
}
private void setupDataManagerViewForDragAndDrop(Composite parent) {
+ setupDataManagerViewForDragAndDropInto(parent);
+ setupDataManagerViewForDragAndDropOutOf(parent);
+ }
+
+ private void setupDataManagerViewForDragAndDropInto(Composite parent) {
DropTarget dropTarget =
new DropTarget(parent.getParent(), DND.DROP_DEFAULT | DND.DROP_MOVE);
dropTarget.setTransfer(new Transfer[] { FileTransfer.getInstance() });
@@ -273,6 +281,34 @@
});
}
+ private void setupDataManagerViewForDragAndDropOutOf(Composite parent) {
+ Transfer[] types = new Transfer[] { new CIShellDataTransfer(Activator.context) };
+ DragSource dragSource = new DragSource(parent, DND.DROP_DEFAULT | DND.DROP_MOVE);
+ dragSource.setTransfer(types);
+ dragSource.addDragListener(new DragSourceListener() {
+ private Data[] selectedData;
+
+ public void dragStart(DragSourceEvent event) {
+ System.err.println("dragStart");
+ Data[] selectedData = AbstractDataManagerView.this.manager.getSelectedData();
+
+ if ((selectedData != null) && (selectedData.length != 0)) {
+ event.doit = true;
+ this.selectedData = selectedData;
+ }
+ }
+
+ public void dragSetData(DragSourceEvent event) {
+ // TODO: Create the target files.
+// event.data =
+ }
+
+ public void dragFinished(DragSourceEvent event) {
+ // TODO: Convert the source files, given the target files.
+ }
+ });
+ }
+
private Collection<File> flattenDraggedFileStructures(String[] fileNames) {
Collection<File> flattenedFileStructure = new ArrayList<File>();
@@ -337,7 +373,7 @@
/* Keep a reference to the new model in the model->TreeItem mapping so that it can be used
* in the future if it has a child.
*/
- this.dataToDataGUIItemMap.put(newData, newItem);
+ this.dataToDataGUIItem.put(newData, newItem);
// update the ModelManager with the new selection
final Set<Data> selection = new HashSet<Data>();
@@ -370,7 +406,7 @@
parentItem = this.rootItem;
} else {
// Otherwise find the associated DataModelGUIItem for the parent.
- parentItem = this.dataToDataGUIItemMap.get(parent);
+ parentItem = this.dataToDataGUIItem.get(parent);
// The parent may not be in the GUI. If its not, then use root item.
if (parentItem == null) {
@@ -419,6 +455,7 @@
for (int i = 0; i < data.length; ++i) {
TreeItem[] treeItems = tree.getItems();
+// tree.getSelection()
for (int j = 0; j < treeItems.length; ++j) {
if (treeItems[j].getData() == data[i]) {
itemSet.add(treeItems[j]);
@@ -427,6 +464,7 @@
}
}
+ // TODO: Add dnd listeners to itemSet elements (if necessary)
tree.setSelection(itemSet.toArray(new TreeItem[0]));
getSite().getSelectionProvider().setSelection(new StructuredSelection(data));
}
@@ -700,7 +738,7 @@
parent.removeChild(item);
}
- AbstractDataManagerView.this.dataToDataGUIItemMap.remove(item.getModel());
+ AbstractDataManagerView.this.dataToDataGUIItem.remove(item.getModel());
AbstractDataManagerView.this.manager.removeData(item.getModel());
}
@@ -774,7 +812,7 @@
(Data) next, AbstractDataManagerView.this.tree.getItems());
newTreeSelection[i] = result;
AbstractDataManagerView.this.viewer.expandToLevel(
- AbstractDataManagerView.this.dataToDataGUIItemMap.get(next), 0);
+ AbstractDataManagerView.this.dataToDataGUIItem.get(next), 0);
}
i++;
Added: trunk/clients/gui/org.cishell.reference.gui.datamanager/src/org/cishell/reference/gui/datamanager/CIShellDataTransfer.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.datamanager/src/org/cishell/reference/gui/datamanager/CIShellDataTransfer.java (rev 0)
+++ trunk/clients/gui/org.cishell.reference.gui.datamanager/src/org/cishell/reference/gui/datamanager/CIShellDataTransfer.java 2011-03-07 19:35:10 UTC (rev 1237)
@@ -0,0 +1,91 @@
+package org.cishell.reference.gui.datamanager;
+
+import java.io.File;
+
+import org.cishell.app.service.filesaver.FileSaveException;
+import org.cishell.app.service.filesaver.FileSaverService;
+import org.cishell.framework.data.Data;
+import org.cishell.service.conversion.ConversionException;
+import org.cishell.service.conversion.Converter;
+import org.eclipse.swt.dnd.ByteArrayTransfer;
+import org.eclipse.swt.dnd.FileTransfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+/* I'm calling this CIShellDataTransfer to make it clear that it's domain-specific.
+ */
+public class CIShellDataTransfer extends ByteArrayTransfer {
+ public static final String TYPE_NAME = "CIShellData";
+ public static final int TYPE_ID = registerType(TYPE_NAME);
+
+ private BundleContext bundleContext;
+
+ public CIShellDataTransfer(BundleContext bundleContext) {
+ this.bundleContext = bundleContext;
+ }
+
+ public void javaToNative(Object object, TransferData transferData) {
+ System.err.println(String.format(
+ "javaToNative: %s (%s) %s", object, object.getClass().getName(), transferData));
+ if ((object == null) || !(object instanceof Data[])) {
+ return;
+ }
+
+ if (isSupportedType(transferData)) {
+ Data[] data = (Data[]) object;
+ Data[] convertedData = convertData(data);
+ String[] convertedFilePaths = formConvertedFilePaths(convertedData);
+ FileTransfer.getInstance().javaToNative(convertedFilePaths, transferData);
+ }
+ }
+
+ public Object nativeToJava(TransferData transferData) {
+ // TODO: I probably won't get to implementing this. Maybe throw an exception?
+ return null;
+ }
+
+ protected String[] getTypeNames() {
+ return new String[] { TYPE_NAME };
+ }
+
+ protected int[] getTypeIds() {
+ return new int[] { TYPE_ID };
+ }
+
+ private Data[] convertData(Data[] data) {
+ Data[] convertedData = new Data[data.length];
+
+ for (int ii = 0; ii < data.length; ii++) {
+ try {
+ convertedData[ii] = convertDatum(data[ii]);
+ } catch (Throwable e) {
+ // TODO: Log this.
+ }
+ }
+
+ return convertedData;
+ }
+
+ private Data convertDatum(Data datum) throws ConversionException, FileSaveException {
+ ServiceReference fileSaverServiceReference =
+ this.bundleContext.getServiceReference(FileSaverService.class.getName());
+ FileSaverService fileSaver =
+ (FileSaverService) this.bundleContext.getService(fileSaverServiceReference);
+
+ Converter converter =
+ fileSaver.promptForConverter(datum, FileSaverService.ANY_FILE_EXTENSION);
+
+ return converter.convert(datum);
+ }
+
+ private String[] formConvertedFilePaths(Data[] convertedData) {
+ String[] convertedFilePaths = new String[convertedData.length];
+
+ for (int ii = 0; ii < convertedData.length; ii++) {
+ convertedFilePaths[ii] = ((File) convertedData[ii].getData()).getAbsolutePath();
+ }
+
+ return convertedFilePaths;
+ }
+}
\ No newline at end of file
Modified: trunk/clients/gui/org.cishell.reference.gui.datamanager/src/org/cishell/reference/gui/datamanager/DataGUIItem.java
===================================================================
--- trunk/clients/gui/org.cishell.reference.gui.datamanager/src/org/cishell/reference/gui/datamanager/DataGUIItem.java 2011-03-07 19:18:57 UTC (rev 1236)
+++ trunk/clients/gui/org.cishell.reference.gui.datamanager/src/org/cishell/reference/gui/datamanager/DataGUIItem.java 2011-03-07 19:35:10 UTC (rev 1237)
@@ -8,8 +8,8 @@
import java.io.File;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import org.cishell.framework.data.Data;
@@ -29,11 +29,10 @@
* @author Team IVC
*/
public class DataGUIItem {
-
private String brandPluginID;
//images for the defined types
- private Image matrixIcon;
+// private Image matrixIcon;
private Image treeIcon;
private Image networkIcon;
private Image unknownIcon;
@@ -46,9 +45,8 @@
private Image modelIcon;
private Image rIcon;
- private Map typeToImageMapping;
-
- private List children;
+ private Map<String, Image> typeToImage = new HashMap<String, Image>();
+ private Collection<DataGUIItem> children = new ArrayList<DataGUIItem>();
private Data data;
private DataGUIItem parent;
@@ -62,10 +60,9 @@
public DataGUIItem(Data data, DataGUIItem parent, String brandPluginID) {
this.data = data;
this.parent = parent;
- children = new ArrayList();
this.brandPluginID = brandPluginID;
- matrixIcon = getImage("matrix.png", this.brandPluginID);
+// matrixIcon = getImage("matrix.png", this.brandPluginID);
treeIcon = getImage("tree.png", this.brandPluginID);
networkIcon = getImage("network.png", this.brandPluginID);
unknownIcon = getImage("unknown.png", this.brandPluginID);
@@ -78,7 +75,6 @@
modelIcon = getImage("model.jpg", this.brandPluginID);
rIcon = getImage("r.png", this.brandPluginID);
- typeToImageMapping = new HashMap();
registerImage(DataProperty.OTHER_TYPE, unknownIcon);
/********************************************
@@ -127,7 +123,7 @@
* @param item the new child of this DataModelGUIItem
*/
public void addChild(DataGUIItem item) {
- children.add(item);
+ this.children.add(item);
}
/**
@@ -136,7 +132,7 @@
* @return an array of all of the children of this DataModelGUIItem
*/
public Object[] getChildren() {
- return children.toArray();
+ return this.children.toArray();
}
/**
@@ -146,7 +142,7 @@
* @param item the child of this DataModelGUIItem to remove
*/
public void removeChild(DataGUIItem item) {
- children.remove(item);
+ this.children.remove(item);
}
/**
@@ -154,43 +150,46 @@
*
* @return the icon associated with this DataModel for display in IVC
*/
- public Image getIcon(){
- Image icon = (Image)typeToImageMapping.get(data.getMetadata().get(DataProperty.TYPE));
- if(icon == null) icon = unknownIcon;
+ public Image getIcon() {
+ Image icon = this.typeToImage.get(data.getMetadata().get(DataProperty.TYPE));
+
+ if (icon == null) {
+ icon = unknownIcon;
+ }
+
return icon;
}
- public void registerImage(String type, Image image){
- typeToImageMapping.put(type, image);
+ public void registerImage(String type, Image image) {
+ this.typeToImage.put(type, image);
}
-
-
-
- public static Image getImage(String name, String brandPluginID){
- if(Platform.isRunning()) {
- String imageLocation = File.separator + "icons" + File.separator + name;
- ImageDescriptor imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(
- brandPluginID,
- imageLocation);
+
+ public static Image getImage(String name, String brandPluginID) {
+ if (Platform.isRunning()) {
+ String imageLocation =
+ String.format("%sicons%s%s", File.separator, File.separator, name);
+ ImageDescriptor imageDescriptor =
+ AbstractUIPlugin.imageDescriptorFromPlugin(brandPluginID, imageLocation);
+
if (imageDescriptor != null) {
return imageDescriptor.createImage();
} else {
- System.err.println("Could not find the icon " +
- "'" + imageLocation + "'" +
- "in" +
- "'" + brandPluginID + "'." +
- "Using the default image instead.");
+ String errorMessage = String.format(
+ "Could not find the icon '%s' in '%s'. Using the default image instead.",
+ imageLocation,
+ brandPluginID);
+ System.err.println(errorMessage);
+
return getDefaultImage();
}
- }
- else {
- System.err.println("Could not obtain the image " +
- "'" + name + "'" +
- "in" +
- "'" + brandPluginID + "'" +
- ", since the platform was not running (?)." +
- "Using the default image instead.");
+ } else {
+ String format =
+ "Could not obtain the image '%s' in '%s', since the platform was not " +
+ "running (?). Using the default image instead.";
+ String errorMessage = String.format(format, name, brandPluginID);
+ System.err.println(errorMessage);
+
return getDefaultImage();
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|