/*******************************************************************************
* Copyright (c) 2004, 2007 Boeing.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Boeing - initial API and implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.xviewer.action;
import java.util.logging.Level;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.nebula.widgets.xviewer.Activator;
import org.eclipse.nebula.widgets.xviewer.IXViewerLabelProvider;
import org.eclipse.nebula.widgets.xviewer.IXViewerValueColumn;
import org.eclipse.nebula.widgets.xviewer.XViewer;
import org.eclipse.nebula.widgets.xviewer.XViewerText;
import org.eclipse.nebula.widgets.xviewer.core.model.XViewerColumn;
import org.eclipse.nebula.widgets.xviewer.util.XViewerException;
import org.eclipse.nebula.widgets.xviewer.util.internal.HtmlUtil;
import org.eclipse.nebula.widgets.xviewer.util.internal.XViewerLog;
import org.eclipse.nebula.widgets.xviewer.util.internal.dialog.HtmlDialog;
import org.eclipse.nebula.widgets.xviewer.util.internal.images.XViewerImageCache;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
/**
* @author Donald G. Dunne
*/
public class ViewSelectedCellDataAction extends Action {
private final XViewer xViewer;
private final Option option;
private final Clipboard clipboard;
public static enum Option {
View,
Copy
}
public ViewSelectedCellDataAction(XViewer xViewer, Clipboard clipboard, Option option) {
super(option.equals(Option.View) ? XViewerText.get("action.selectedCellData.view") : XViewerText.get( //$NON-NLS-1$
"action.selectedCellData.copy")); //$NON-NLS-1$
this.xViewer = xViewer;
this.clipboard = clipboard;
this.option = option;
}
@Override
public ImageDescriptor getImageDescriptor() {
return XViewerImageCache.getImageDescriptor("report.gif"); //$NON-NLS-1$
}
@Override
public void run() {
try {
TreeColumn treeCol = xViewer.getRightClickSelectedColumn();
TreeItem treeItem = xViewer.getRightClickSelectedItem();
run(treeCol, treeItem, xViewer.getRightClickSelectedColumnNum());
} catch (Exception ex) {
XViewerLog.logAndPopup(Activator.class, Level.SEVERE, ex);
}
}
public void run(TreeColumn treeCol, TreeItem treeItem, int columnNum) throws XViewerException, Exception {
if (treeCol != null) {
XViewerColumn xCol = (XViewerColumn) treeCol.getData();
String data = null;
if (xCol instanceof IXViewerValueColumn) {
data = ((IXViewerValueColumn) xCol).getColumnText(treeItem.getData(), xCol, columnNum);
} else {
data =
((IXViewerLabelProvider) xViewer.getLabelProvider()).getColumnText(treeItem.getData(), xCol, columnNum);
}
if (data != null && !data.equals("")) { //$NON-NLS-1$
if (option == Option.View) {
String html = HtmlUtil.simplePage(HtmlUtil.getPreData(data));
new HtmlDialog(treeCol.getText() + " " + XViewerText.get("data"), //$NON-NLS-1$//$NON-NLS-2$
treeCol.getText() + " " + XViewerText.get("data"), html).open(); //$NON-NLS-1$ //$NON-NLS-2$
} else {
clipboard.setContents(new Object[] {data}, new Transfer[] {TextTransfer.getInstance()});
}
}
}
}
}