package net.sf.nmedit.jtheme.util;
import java.awt.Component;
import java.awt.Point;
import java.awt.datatransfer.Transferable;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import javax.swing.SwingUtilities;
import javax.swing.event.MenuDragMouseEvent;
import net.sf.nmedit.jpatch.PModuleDescriptor;
import net.sf.nmedit.jpatch.dnd.PDragDrop;
import net.sf.nmedit.jtheme.JTContext;
import net.sf.nmedit.jtheme.JTException;
import net.sf.nmedit.nmutils.dnd.DefaultEyeCandyTransferable;
import net.sf.nmedit.nmutils.dnd.EyeCandyTransferable;
public class JThemeUtils {
public static EyeCandyTransferable createTransferable(JTContext context, PModuleDescriptor moduleDescriptor)
{
Transferable transferable = PDragDrop.createTransferable(moduleDescriptor);
DefaultEyeCandyTransferable t = new DefaultEyeCandyTransferable(transferable);
if (context != null)
{
try
{
t.setTransferImage(ModuleImageRenderer.render(context, moduleDescriptor,
true));
}
catch (JTException e)
{
// ignore
// TODO log exception
}
}
return t;
}
public static String setColorKey(String title, int colorkey)
{
if (colorkey<=0) return getTitleNoColorKey(title);
return getTitleNoColorKey(title)+'$'+colorkey;
}
private static int getColorKeySeparator(String title)
{
for (int i=title.length()-1;i>=0;i--)
{
char c = title.charAt(i);
if ('0'<=c && c<='9')
continue;
if ((c == '$') && (i+1<title.length()))
return i; // $ and at least one digit
break;
}
return -1;
}
public static boolean isColorKeyDefined(String title)
{
return getColorKeySeparator(title)>=0;
}
public static int getColorKey(String title)
{
int separator = getColorKeySeparator(title);
return separator < 0 ? 0 : Integer.parseInt(title.substring(separator+1));
}
public static String getTitleNoColorKey(String title)
{
int separator = getColorKeySeparator(title);
return separator < 0 ? title : title.substring(0, separator);
}
public static MouseEvent convertMouseEvent(Component source,
MouseEvent sourceEvent,
Component destination) {
Point p = SwingUtilities.convertPoint(source,new Point(sourceEvent.getX(),
sourceEvent.getY()),
destination);
Component newSource;
if(destination != null)
newSource = destination;
else
newSource = source;
MouseEvent newEvent;
if (sourceEvent instanceof MouseWheelEvent) {
MouseWheelEvent sourceWheelEvent = (MouseWheelEvent)sourceEvent;
newEvent = new MouseWheelEvent(newSource,
sourceWheelEvent.getID(),
sourceWheelEvent.getWhen(),
sourceEvent.getModifiers() | sourceEvent.getModifiersEx(),
p.x,p.y,
sourceWheelEvent.getClickCount(),
sourceWheelEvent.isPopupTrigger(),
sourceWheelEvent.getScrollType(),
sourceWheelEvent.getScrollAmount(),
sourceWheelEvent.getWheelRotation());
}
else if (sourceEvent instanceof MenuDragMouseEvent) {
MenuDragMouseEvent sourceMenuDragEvent = (MenuDragMouseEvent)sourceEvent;
newEvent = new MenuDragMouseEvent(newSource,
sourceMenuDragEvent.getID(),
sourceMenuDragEvent.getWhen(),
sourceEvent.getModifiers() | sourceEvent.getModifiersEx(),
p.x,p.y,
sourceMenuDragEvent.getClickCount(),
sourceMenuDragEvent.isPopupTrigger(),
sourceMenuDragEvent.getPath(),
sourceMenuDragEvent.getMenuSelectionManager());
}
else {
newEvent = new MouseEvent(newSource,
sourceEvent.getID(),
sourceEvent.getWhen(),
sourceEvent.getModifiers() | sourceEvent.getModifiersEx(),
p.x,p.y,
sourceEvent.getClickCount(),
sourceEvent.isPopupTrigger(),
sourceEvent.getButton());
}
return newEvent;
}
}