/** * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio */ package com.hundsun.ares.studio.ui.util; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.apache.commons.lang.ArrayUtils; import org.eclipse.emf.ecore.EObject; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.ImageTransfer; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.widgets.Display; import com.hundsun.ares.studio.core.util.ResourcesUtil; /** * * ����ϵͳ����ճ���Ĺ����ࡣ * <li>ֻ֧��EMF���� </li> * <li>������Խ������� </li> * @author gongyf * */ public class ARESEMFClipboard { private static ARESEMFClipboard instance; private ARESEMFClipboard () { } /** * @return the instance */ public static ARESEMFClipboard getInstance() { if (instance == null) { instance = new ARESEMFClipboard(); } return instance; } private List<IJRESClipboardListener> listeners = new ArrayList<IJRESClipboardListener>(); /** * ��Ӽ���������� * @param listener */ public synchronized void addClipboardListener(IJRESClipboardListener listener) { listeners.add(listener); } /** * ɾ������������� * @param listener */ public synchronized void removeClipboardListener(IJRESClipboardListener listener) { listeners.remove(listener); } protected void fireAboutToBeChanged() { for (Iterator<IJRESClipboardListener> iterator = listeners.iterator(); iterator.hasNext();) { try { iterator.next().clipboardAboutToBeChanged(this); } catch (Exception e) { e.printStackTrace(); } } } protected void fireChanged() { for (Iterator<IJRESClipboardListener> iterator = listeners.iterator(); iterator.hasNext();) { try { iterator.next().clipboardChanged(this); } catch (Exception e) { e.printStackTrace(); } } } public void copyToClipboard(EObject... eObjects) { copyToClipboard(eObjects, null, null); } /** * �����ݱ��浽ϵͳ��������ȥ������ͬʱ����EMFģ�͡��ı���ͼƬ<BR> * �ı���ͼƬ����Ϊ<code>null</code> * * @param eObjects * @param text * @param imageData */ public void copyToClipboard(EObject[] eObjects, String text, ImageData imageData) { List<Object> contents = new ArrayList<Object>(); List<Transfer> transfers = new ArrayList<Transfer>(); if (eObjects != null) { contents.add(eObjects); transfers.add(EObjectTransfer.getInstance()); } if (text != null) { contents.add(text); transfers.add(TextTransfer.getInstance()); } if (imageData != null) { contents.add(imageData); transfers.add(ImageTransfer.getInstance()); } if (contents.size() > 0) { Clipboard clipboard = new Clipboard(Display.getDefault()); fireAboutToBeChanged(); clipboard.setContents(contents.toArray(), transfers.toArray(new Transfer[transfers.size()])); fireChanged(); clipboard.dispose(); } } /** * ��ϵͳ�������л�ȡָ�����͵�ģ�ͣ���������ģ�Ϳ��������������Զ����� * @param <T> * @param clazz * @return */ public <T> List<T> pasteFromClipboard(Class<T> clazz) { Clipboard clipboard = new Clipboard(Display.getDefault()); try { EObject[] objects = (EObject[]) clipboard.getContents(EObjectTransfer.getInstance()); if (!ArrayUtils.isEmpty(objects)) { List<T> result = new ArrayList<T>(); for (int i = 0; i < objects.length; i++) { T o = ResourcesUtil.getAdapter(objects[i], clazz, true); if (o != null) { result.add(o); } } return result; } return Collections.emptyList(); } finally { clipboard.dispose(); } } /** * �Ӽ������л�ȡ�ı���Ϣ * @return */ public String pasteFromClipboardByString() { Clipboard clipboard = new Clipboard(Display.getDefault()); try { String textData = (String) clipboard.getContents(TextTransfer.getInstance()); return textData; } finally { clipboard.dispose(); } } /** * ��ϵͳ�������л�ȡͼƬ��Ϣ * @return */ public ImageData pasteFromClipboardByImage() { Clipboard clipboard = new Clipboard(Display.getDefault()); try { ImageData data = (ImageData) clipboard.getContents(ImageTransfer.getInstance()); return data; } finally { clipboard.dispose(); } } }