/*******************************************************************************
* Copyright (c) 2010 György Orosz.
* 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:
* György Orosz - initial API and implementation
******************************************************************************/
package org.erlide.wrangler.refactoring.duplicatedcode.ui;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
import org.erlide.wrangler.refactoring.duplicatedcode.actions.ClipboardAction;
import org.erlide.wrangler.refactoring.duplicatedcode.ui.elements.AbstractResultTreeObject;
import org.erlide.wrangler.refactoring.duplicatedcode.ui.elements.DuplicatedCodeInstanceElement;
/**
* Duplicates view
*
* @author Gyorgy Orosz
*
*/
public class DuplicatesView extends ViewPart {
// private final class HighlightAction extends Action {
// public void run() {
// ISelection selection = viewer.getSelection();
// Object obj = ((IStructuredSelection) selection)
// .getFirstElement();
// showMessage("Double-click detected on " + obj.toString());
// }
// }
ISelectionListener listener = new ISelectionListener() {
@Override
public void selectionChanged(final IWorkbenchPart part,
final ISelection selection) {
MessageDialog.openInformation(getSite().getShell(), "test",
selection.toString());
}
};
private TreeViewer viewer;
private Action copyGeneralisedToClipboard;
private final Action copyFunCallToClipboard = new ClipboardAction(
PlatformUI.getWorkbench().getDisplay()) {
private boolean hasText = false;
@Override
public void run() {
if (!hasText) {
MessageDialog.openInformation(
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
"Empty clipboard",
"There is no FunCall element according the selected item!");
} else {
super.run();
}
}
@Override
public void setText(final String text) {
super.setText(text);
hasText = true;
}
};
/**
* The constructor.
*/
public DuplicatesView() {
}
/**
* Refresh the view
*/
public void refresh() {
viewer.refresh();
}
/**
* This is a callback that will allow us to create the viewer and initialize
* it.
*/
@Override
public void createPartControl(final Composite parent) {
viewer = new TreeViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
// drillDownAdapter = new DrillDownAdapter(viewer);
viewer.setContentProvider(new DuplicatesViewContentProvider(this));
viewer.setLabelProvider(new DuplicatesViewLabelProvider());
// viewer.setSorter(new NameSorter());
viewer.setInput(getViewSite());
makeActions();
createToolbar();
hookDoubleClickAction();
// contributeToActionBars();
addListeners();
}
// private void hookContextMenu() {
// MenuManager menuMgr = new MenuManager("#PopupMenu");
// menuMgr.setRemoveAllWhenShown(true);
// menuMgr.addMenuListener(new IMenuListener() {
// public void menuAboutToShow(IMenuManager manager) {
// DuplicatedCodeView.this.fillContextMenu(manager);
// }
// });
// Menu menu = menuMgr.createContextMenu(viewer.getControl());
// viewer.getControl().setMenu(menu);
// getSite().registerContextMenu(menuMgr, viewer);
// }
//
// private void contributeToActionBars() {
// IActionBars bars = getViewSite().getActionBars();
// fillLocalPullDown(bars.getMenuManager());
// fillLocalToolBar(bars.getToolBarManager());
// }
// private void fillLocalPullDown(IMenuManager manager) {
// manager.add(action1);
// // manager.add(new Separator());
// // manager.add(action2);
// }
//
// private void fillContextMenu(IMenuManager manager) {
// manager.add(action1);
// // manager.add(action2);
// manager.add(new Separator());
// drillDownAdapter.addNavigationActions(manager);
// // Other plug-ins can contribute there actions here
// manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
// }
//
// private void fillLocalToolBar(IToolBarManager manager) {
// // manager.add(action1);
// // manager.add(action2);
// // manager.add(new Separator());
// drillDownAdapter.addNavigationActions(manager);
// }
private void addListeners() {
// getSite().getWorkbenchWindow().getSelectionService()
// .addSelectionListener(listener);
}
private void createToolbar() {
final IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager();
mgr.add(copyGeneralisedToClipboard);
mgr.add(copyFunCallToClipboard);
}
private void makeActions() {
copyGeneralisedToClipboard = new ClipboardAction(
PlatformUI.getWorkbench().getDisplay());
copyGeneralisedToClipboard
.setToolTipText("Copy generalised function to the clipboard");
copyGeneralisedToClipboard.setImageDescriptor(PlatformUI.getWorkbench()
.getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_COPY));
copyFunCallToClipboard.setToolTipText("Copy FunCall to the clipboard");
copyFunCallToClipboard.setImageDescriptor(PlatformUI.getWorkbench()
.getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_COPY));
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(final SelectionChangedEvent event) {
final ISelection sel = event.getSelection();
if (sel == null || sel.isEmpty()) {
return;
}
final TreeSelection tsel = (TreeSelection) sel;
final AbstractResultTreeObject selection = (AbstractResultTreeObject) tsel
.getFirstElement();
copyGeneralisedToClipboard.setText(selection.getSuggestedCode());
if (selection instanceof DuplicatedCodeInstanceElement) {
final DuplicatedCodeInstanceElement dcie = (DuplicatedCodeInstanceElement) selection;
copyFunCallToClipboard.setText(dcie.getReplicationFunction());
}
}
});
}
private void hookDoubleClickAction() {
viewer.addDoubleClickListener(new DoubleClickListener());
}
/**
* Passing the focus request to the viewer's control.
*/
@Override
public void setFocus() {
viewer.getControl().setFocus();
}
}