/** * <p>Copyright: Copyright (c) 2009</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.ui.util; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.widgets.Display; import com.hundsun.ares.studio.core.model.ICreateInstance; import com.hundsun.ares.studio.ui.editor.AbstractHSFormEditor; import com.hundsun.ares.studio.ui.grid.table.GridTableDeleteItemOperation; import com.hundsun.ares.studio.ui.grid.table.GridTableViewerExComponent; /** * ARES����ճ�������ṩ���� * * @author mawb */ public class AresTableActionHandleProvider<T> implements ITableActionHandleProvider { private GridTableViewerExComponent<T> component; private T data; private boolean isActivate = true; public AresTableActionHandleProvider(GridTableViewerExComponent<T> component, T data) { this.component = component; this.data = data; isActivate = !component.isReadOnly(); } /* * (non-Javadoc) * * @see com.hundsun.ares.studio.ui.util.ITableActionHandleProvider#canEdit() */ public boolean isActivate() { return isActivate; } /* * (non-Javadoc) * * @see * com.hundsun.ares.studio.ui.util.ITableActionHandleProvider#setActivate * (java.lang.Boolean) */ public void setActivate(Boolean isActivate) { this.isActivate = isActivate; } /* * (non-Javadoc) * * @see com.hundsun.ares.studio.ui.util.ITableActionHandleProvider#canAdd() */ public boolean canAdd() { return isActivate(); } /* * (non-Javadoc) * * @see com.hundsun.ares.studio.ui.util.ITableActionHandleProvider#add() */ public void add() { List adds = new ArrayList(); adds.add(component.createNewObject()); component.add(adds, component.getInput().size()); } /* * (non-Javadoc) * * @see * com.hundsun.ares.studio.ui.util.ITableActionHandleProvider#canDelete() */ public boolean canDelete() { if (isActivate()) { if (!component.getViewer().getSelection().isEmpty()) { return true; } } return false; } /* * (non-Javadoc) * * @see com.hundsun.ares.studio.ui.util.ITableActionHandleProvider#delete() */ public void delete() { if (component.isConfirmDel()) { boolean confirmed = MessageDialog.openConfirm(Display.getDefault().getActiveShell(), "", "ȷʵҪɾ����?"); if (!confirmed) { return; } } deleteWithOutConfirmed(); } protected void delete(List items) { if (items.size() > 0) { GridTableDeleteItemOperation delete = new GridTableDeleteItemOperation("delete", component, items); delete.addContext(component.getUndoContext()); try { AbstractHSFormEditor.getOperationHistory().execute(delete, null, null); } catch (Exception e) { e.printStackTrace(); } } } /** * �������û�ȷ�ϲ˵���ɾ�� */ public void deleteWithOutConfirmed() { StructuredSelection selection = (StructuredSelection) component.getViewer().getSelection(); if (selection != null) { // List needremove = selection.toList(); // needremove.remove(lastLine); int oldsize = component.getInput().size(); delete(selection.toList()); } } /* * (non-Javadoc) * * @see * com.hundsun.ares.studio.ui.util.ITableActionHandleProvider#canInsert() */ public boolean canInsert() { if (isActivate()) { ISelection selection = component.getViewer().getSelection(); if (!selection.isEmpty()) { return ((StructuredSelection) selection).size() == 1; } } return false; } /* * (non-Javadoc) * * @see com.hundsun.ares.studio.ui.util.ITableActionHandleProvider#insert() */ public void insert() { IStructuredSelection selection = (IStructuredSelection) component.getViewer().getSelection(); int index = component.getInput().indexOf(selection.getFirstElement()); List adds = new ArrayList(); adds.add(component.createNewObject()); if (index == -1) { component.add(adds, component.getInput().size()); } else { component.add(adds, index); } } /* * (non-Javadoc) * * @see com.hundsun.ares.studio.ui.util.ICopyPasteProvider#canCopy() */ public boolean canCopy() { if (isActivate()) { // ֻ�п��Կ�¡�����Ʋ������� if (data instanceof ICreateInstance) { return !component.getViewer().getSelection().isEmpty(); } } return false; } /* * (non-Javadoc) * * @see com.hundsun.ares.studio.ui.util.ICopyPasteProvider#copy() */ public void copy() { List<Object> copyList = new ArrayList<Object>(); for (Object obj : ((StructuredSelection) component.getViewer().getSelection()).toList()) { copyList.add(((ICreateInstance) obj).getNewInstance()); } Clipboard.instance.setData(copyList); } /* * (non-Javadoc) * * @see com.hundsun.ares.studio.ui.util.ITableActionHandleProvider#canCut() */ public boolean canCut() { if (isActivate()) { return canCopy() && canDelete(); } return false; } /* * (non-Javadoc) * * @see com.hundsun.ares.studio.ui.util.ITableActionHandleProvider#cut() */ public void cut() { copy(); deleteWithOutConfirmed(); } /* * (non-Javadoc) * * @see com.hundsun.ares.studio.ui.util.ICopyPasteProvider#canPaste() */ public boolean canPaste() { if (isActivate()) { // ֻ�п��Կ�¡��ճ���������� if (data instanceof ICreateInstance) { // ��ҪҪ��ͬ���� Object obj = Clipboard.instance.getData(); if (obj != null && obj instanceof List) { // ��������ճ������ if (!((List) obj).isEmpty()) { if (((List) obj).get(0).getClass() == data.getClass()) { // ֻ��ͬ���͵Ŀɸ��ƣ�ճ�� return true; } } } } } return false; } /* * (non-Javadoc) * * @see com.hundsun.ares.studio.ui.util.ICopyPasteProvider#paste() */ public void paste() { StructuredSelection selection = (StructuredSelection) component.getViewer().getSelection(); int index = component.getInput().size(); if (!selection.isEmpty()) { index = component.getInput().indexOf(selection.getFirstElement()); if (index == -1) { index = component.getInput().size(); } } List<T> added = new ArrayList<T>(); for (Object obj : (List) Clipboard.instance.getData()) { added.add((T) ((ICreateInstance) obj).getNewInstance()); } component.add(added, index); } }