// ============================================================================ // // Copyright (C) 2006-2012 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.designer.core.ui.editor.palette; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.apache.log4j.Logger; import org.eclipse.draw2d.FigureCanvas; import org.eclipse.draw2d.LightweightSystem; import org.eclipse.gef.EditDomain; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.ui.palette.PaletteViewer; import org.eclipse.gef.ui.palette.PaletteViewerProvider; import org.eclipse.gef.ui.parts.GraphicalViewerImpl; import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; /** * */ public class TalendPaletteViewerProvider extends PaletteViewerProvider { private static Logger log = Logger.getLogger(TalendPaletteViewerProvider.class); public TalendPaletteViewerProvider(EditDomain graphicalViewerDomain) { super(graphicalViewerDomain); } @Override public PaletteViewer createPaletteViewer(Composite parent) { // removed by 10304 // if (SystemUtils.IS_OS_MAC_OSX || SystemUtils.IS_OS_MAC) { // // PTDO need check it later and fix the bug on MacOS. // return super.createPaletteViewer(parent); // } TalendPaletteViewer pViewer = new TalendPaletteViewer(this.getEditDomain()); /*************************************/ // FIXME ggu // use the following codes to replace this pViewer.createControl(parent); try { // reflect the mothed for supper class PaletteViewer/GraphicalViewerImpl Method getLightweightSystemMethod = GraphicalViewerImpl.class.getDeclaredMethod("getLightweightSystem"); //$NON-NLS-1$ getLightweightSystemMethod.setAccessible(true); Object lws = getLightweightSystemMethod.invoke(pViewer); // FigureCanvas canvas = new TalendFigureCanvas(parent, (LightweightSystem) lws, pViewer); Method setControlMethod = EditPartViewer.class.getDeclaredMethod("setControl", Control.class); //$NON-NLS-1$ setControlMethod.invoke(pViewer, canvas); // Method installRootFigureMethod = ScrollingGraphicalViewer.class.getDeclaredMethod("installRootFigure"); //$NON-NLS-1$ installRootFigureMethod.setAccessible(true); installRootFigureMethod.invoke(pViewer); } catch (SecurityException e) { handleReflectionFailure(e); } catch (NoSuchMethodException e) { handleReflectionFailure(e); } catch (IllegalArgumentException e) { handleReflectionFailure(e); } catch (IllegalAccessException e) { handleReflectionFailure(e); } catch (InvocationTargetException e) { handleReflectionFailure(e); } /*************************************/ configurePaletteViewer(pViewer); hookPaletteViewer(pViewer); return pViewer; } /** * log the exception and throw a Runtime exception cause this is serious. * * @param iae */ private static void handleReflectionFailure(Exception e) { // our hook is not working so say it log.error("Draw2D Canvas hook failed", e); throw new RuntimeException(e); } @Override protected void configurePaletteViewer(PaletteViewer pViewer) { pViewer.setContextMenu(new TalendPaletteContextMenuProvider(pViewer)); pViewer.addDragSourceListener(new TalendPaletteDragSourceListener(pViewer)); } }