package net.sf.nmedit.jpatch.dnd;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import net.sf.nmedit.jpatch.PModule;
import net.sf.nmedit.jpatch.PModuleDescriptor;
public class PDragDrop {
// note: flavors should be final
public static final DataFlavor ModuleDescriptorDataFlavor
= new DataFlavor(PModuleDescriptor.class, "module descriptor");
public static final DataFlavor ModuleDataFlavor
= new DataFlavor(PModule.class, "module instance");
public static final DataFlavor ModuleArrayDataFlavor
= new DataFlavor(PModule[].class, "PModule instances");
public static final DataFlavor ModuleSelectionFlavor
= new DataFlavor(PModuleTransferData.class, "Nomad PModuleSelectionFlavor");
private static final String charset = "ISO-8859-1";
public static final DataFlavor PatchFileFlavor =
new DataFlavor("text/patch; charset="+charset+"", "Nord Modular patch 3.0");
public static final DataFlavor PatchStringFlavor =
new DataFlavor(java.lang.String.class, "patch string");
public static boolean isModuleDescriptorFlavorSupported(Transferable t)
{
return t.isDataFlavorSupported(ModuleDescriptorDataFlavor);
}
public static Transferable createTransferable(PModuleDescriptor descriptor)
{
return new ModuleDescriptorTransferable(descriptor);
}
public static PModuleDescriptor getModuleDescriptor(Transferable t)
{
if (isModuleDescriptorFlavorSupported(t))
{
try
{
return (PModuleDescriptor) t.getTransferData(ModuleDescriptorDataFlavor);
}
catch (Exception e)
{
e.printStackTrace();
}
}
return null;
}
private static class ModuleDescriptorTransferable implements Transferable
{
private PModuleDescriptor descriptor;
public ModuleDescriptorTransferable(PModuleDescriptor descriptor)
{
this.descriptor = descriptor;
}
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException
{
if (!isDataFlavorSupported(flavor))
throw new UnsupportedFlavorException(flavor);
return descriptor;
}
public DataFlavor[] getTransferDataFlavors()
{
return new DataFlavor[] {ModuleDescriptorDataFlavor};
}
public boolean isDataFlavorSupported(DataFlavor flavor)
{
return ModuleDescriptorDataFlavor.equals(flavor);
}
}
}