package com.hundsun.ares.studio.ui.editor.actions;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import com.hundsun.ares.studio.ui.editor.ARESEditorPlugin;
import com.hundsun.ares.studio.ui.util.ARESEMFClipboard;
public class CopyColumnAction extends Action{
public static final String ID = "copy.Column";
private ColumnViewer viewer;
private String textToBeCopyed;
public CopyColumnAction(ColumnViewer viewer) {
this.viewer = viewer;
setId(ID);
setText(StringUtils.EMPTY);
setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(ARESEditorPlugin.PLUGIN_ID, "icons/full/obj16/copyColumn.png"));
viewer.getControl().addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
update(e);
}
});
}
public void update(MouseEvent event) {
Point pt = new Point(event.x, event.y);
ViewerCell cell = viewer.getCell(pt);
// 2012-09-28 sundl ����հ״��ĵط���cell��null
if (cell == null) {
textToBeCopyed = StringUtils.EMPTY;
updateEnablement();
setText("������");
return;
}
int selectColumnIndex = cell.getColumnIndex();
StringBuffer buffer = new StringBuffer();
if(viewer instanceof TableViewer){
TableViewer tableViewer = (TableViewer)viewer;
int lineCount = tableViewer.getTable().getItemCount();
String columnName = tableViewer.getTable().getColumns()[selectColumnIndex].getText();
setText(String.format("������:%s", columnName));
for (int k = 0; k < lineCount; k++) {
TableItem item = tableViewer.getTable().getItem(k);
if (k != lineCount - 1)
buffer.append(item.getText(selectColumnIndex) + "\n");
else
buffer.append(item.getText(selectColumnIndex));
}
}
if(viewer instanceof TreeViewer){
TreeViewer treeViewer = (TreeViewer)viewer;
int lineCount = treeViewer.getTree().getItemCount();
String columnName = treeViewer.getTree().getColumns()[selectColumnIndex].getText();
setText(String.format("������:%s", columnName));
for (int k = 0; k < lineCount; k++) {
TreeItem item = treeViewer.getTree().getItem(k);
if (k != lineCount - 1)
buffer.append(item.getText(selectColumnIndex) + "\n");
else
buffer.append(item.getText(selectColumnIndex));
}
}
textToBeCopyed = buffer.toString();
updateEnablement();
// updateText();
}
/**
* ���¿���״̬
*/
public void updateEnablement() {
if (StringUtils.isEmpty(textToBeCopyed)) {
setEnabled(false);
} else {
setEnabled(true);
}
}
@Override
public void run() {
ARESEMFClipboard.getInstance().copyToClipboard(null, textToBeCopyed, null);
}
}