./CodeAnalyzer/src/de/fzi/cloneanalyzer/viewer/CloneEditor.java
/*
* Created on 30.01.2004
*
*/
package de.fzi.cloneanalyzer.viewer;
import java.util.Iterator;
import java.util.LinkedList;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.text.source.AnnotationRulerColumn;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.IVerticalRuler;
import org.eclipse.jface.text.source.IVerticalRulerColumn;
import org.eclipse.jface.text.source.LineNumberRulerColumn;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.text.source.VerticalRuler;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.editors.text.TextEditor;
import de.fzi.cloneanalyzer.annotation.CloneAnnotationAccessExt;
import de.fzi.cloneanalyzer.core.CloneAnalyzerPlugin;
import de.fzi.cloneanalyzer.core.CloneInstanceEclipse;
import de.fzi.cloneanalyzer.reader.CloneFile;
import de.fzi.cloneanalyzer.reader.CloneFileEclipse;
/**
* @author biehl
*
*/
public class CloneEditor extends TextEditor {
protected IVerticalRuler vr;
protected SourceViewer sv;
protected CloneFileEclipse cf;
protected AnnotationRulerColumn arc;
static final int MIN_RULERBAR_WIDTH = 20;
// Minimum (in pixels) for the horizontal size of the ruler bar
static final int MAX_RULERBAR_WIDTH = 100;
// Maximum (in pixels) for the horizontal size of the ruler bar
public CloneEditor() {
super();
this.cf = (CloneFileEclipse) CloneFile.openingInstance;
int width;
if (cf == null) {
/*
* int needed = CloneAnnotation.calculateX(0,
* CloneFileAnnotationPositionManager.getMaxSlots()); width =
* Math.min(needed, 50);
*/
width = MAX_RULERBAR_WIDTH;
} else {
width = Math.min(Math
.max(cf.getMaxRulerWidth(), MIN_RULERBAR_WIDTH),
MAX_RULERBAR_WIDTH);
}
CloneAnnotationAccessExt caae = new CloneAnnotationAccessExt();
vr = new VerticalRuler(width, caae);
}
public void setCloneFile(CloneFile cf) {
}
protected IVerticalRulerColumn createLineNumberRulerColumn() {
return new LineNumberRulerColumn();
}
protected ISourceViewer createSourceViewer(Composite parent,
IVerticalRuler ruler, int styles) {
sv = new SourceViewer(parent, ruler, styles);
return sv;
}
protected void rulerContextMenuAboutToShow(IMenuManager menu) {
int line = getVerticalRuler().getLineOfLastMouseButtonActivity();
showCloneContextMenu(menu, line);
}
protected void showCloneContextMenu(IMenuManager menu, int line) {
LinkedList ll = cf.getCloneInstanceList(line);
menu.removeAll();
if (ll != null) {
MenuManager mm = null;
Iterator it = ll.iterator();
while (it.hasNext()) {
CloneInstanceEclipse ci = (CloneInstanceEclipse) (it.next());
String selected = "";
if (ci == CloneAnalyzerPlugin.getDefault()
.getSelectedCloneInstance()) {
selected = ">> ";
}
mm = new MenuManager(selected + ci.toShortString(), ci
.toShortString());
mm.add(new SelectInTreeAction(ci));
// TODO clone-comparison-dialog disabled
//mm.add(new CloneComparisonDialogAction(ci));
//menu.appendToGroup(IWorkbenchActionConstants.MB_ADDITIONS,mm);
menu.add(mm);
}
}
}
protected IVerticalRuler createVerticalRuler() {
return vr;
}
public void setAnnotationModel(IAnnotationModel model) {
ISourceViewer sv = getSourceViewer();
sv.setDocument(sv.getDocument(), model);
}
public boolean isSaveAsAllowed() {
return true;
}
public boolean isSaveOnCloseNeeded() {
return true;
}
}