/** * <p>Copyright: Copyright (c) 2009</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.ui.grid.table; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.forms.widgets.FormToolkit; import com.hundsun.ares.studio.ui.util.AresTableActionHandleProvider; import com.hundsun.ares.studio.ui.util.ITableActionHandleProvider; /** * ����Eclipse3.3������API��д<BR> * * ��һ����ҪΪΪ���༭�������˶��� �� �˵� �縴�� ����� * * @author gongyf * * @param <T> */ public abstract class GridTableViewerExComponent<T> extends GridTableViewerEditorableComponent<T> { /** �������Ͳ��Ե��� */ protected T testClassInstance = createBlankData(); /** ɾ��ʱ�Ƿ���Ҫȷ���Ƿ�ɾ�� */ protected boolean isConfirmDel = true; /** ����ճ�������ṩ�� */ private ITableActionHandleProvider provider = new AresTableActionHandleProvider<T>(this, testClassInstance); @Override final public Composite create(FormToolkit toolkit, Composite parent) { Composite client = null; if (toolkit == null) { client = new Composite(parent, SWT.NONE); } else { client = toolkit.createComposite(parent); } GridLayout layout = new GridLayout(); layout.numColumns = 2; client.setLayout(layout); client.setLayoutData(new GridData(GridData.FILL_BOTH)); // ��ʼ���ؼ� initComposite(client); buttons = createButtons(toolkit, client); int size = buttons.size(); if (toolkit != null) { toolkit.adapt(tbComposite); } // ������� ((GridData) tbComposite.getLayoutData()).verticalSpan = size > 0 ? size : 1; return client; } @Override protected void initComposite(Composite client) { adjustStyle(); super.initComposite(client); createMenuManager(viewer.getControl()); // ��ӱ�������ݼ� viewer.getGrid().addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent e) { if (provider != null) { if (e.keyCode == 'c' && e.stateMask == SWT.CTRL) { if (provider.canCopy()) { provider.copy(); } } else if (e.keyCode == 'x' && e.stateMask == SWT.CTRL) { if (provider.canCut()) { provider.cut(); } } else if (e.keyCode == 'v' && e.stateMask == SWT.CTRL) { if (provider.canPaste()) { provider.paste(); } } else if (e.keyCode == SWT.DEL) { if (provider.canDelete()) { provider.delete(); } } else if (e.keyCode == 'a' && e.stateMask == SWT.CTRL) { viewer.getGrid().selectAll(); } else if (e.keyCode == SWT.INSERT) { if (provider.canInsert()) { provider.insert(); } } } } }); } /** * ���������ͼ�Ҽ��˵��� * * @param control viewer */ protected void createMenuManager(Control control) { MenuManager popupMenuManager = new MenuManager(); IMenuListener listener = new IMenuListener() { public void menuAboutToShow(IMenuManager mng) { fillContextMenu(mng); } }; popupMenuManager.addMenuListener(listener); popupMenuManager.setRemoveAllWhenShown(true); Menu menu = popupMenuManager.createContextMenu(control); control.setMenu(menu); } /** * ���Master��ͼ�Ҽ��˵�� * * @param manager */ protected void fillContextMenu(IMenuManager manager) { if (provider != null) { GridTableViewerActionGroup group = new GridTableViewerActionGroup(provider); group.fillContextMenu(manager); } } public ITableActionHandleProvider getProvider() { return provider; } public void setProvider(ITableActionHandleProvider provider) { this.provider = provider; } /** * ����ɾ��ʱ�Ƿ���Ҫȷ��ɾ���� * * @param isConfirmDel */ public void setConfirmDel(boolean isConfirmDel) { this.isConfirmDel = isConfirmDel; } public boolean isConfirmDel() { return isConfirmDel; } }