in ruta-ep-caseditor/src/main/java/org/apache/uima/ruta/caseditor/view/tree/AnnotationTreeViewPage.java [194:344]
public void createControl(Composite parent) {
if (overlay != null && !overlay.isDisposed()) {
overlay.dispose();
}
if (editor != null && styleListener != null) {
editor.getCasDocumentProvider().getTypeSystemPreferenceStore(editor.getEditorInput())
.removePropertyChangeListener(styleListener);
styleListener = null;
}
overlay = new Composite(parent, SWT.NONE);
final Clipboard clipboard = new Clipboard(Display.getCurrent());
GridLayout layout = new GridLayout();
layout.horizontalSpacing = 0;
layout.verticalSpacing = 0;
layout.marginWidth = 0;
layout.marginHeight = 0;
overlay.setLayout(layout);
KeyListener checkSelectedKeyListener = new KeyAdapter() {
@Override
public void keyPressed(KeyEvent keyEvent) {
int keyCode = keyEvent.keyCode;
if (keyCode == SWT.CR || keyCode == SWT.LF || keyCode == SWT.KEYPAD_CR) {
uncheckAll();
checkAllVisible();
}
}
};
filterTypeTextField = new Text(overlay, SWT.SINGLE | SWT.BORDER);
GridData gd = new GridData();
gd.grabExcessHorizontalSpace = true;
gd.horizontalAlignment = GridData.FILL;
gd.horizontalSpan = 1;
filterTypeTextField.setLayoutData(gd);
filterTypeTextField.setToolTipText("Retain types that contain...");
filterTypeTextField.addListener(SWT.KeyUp, this);
filterTypeTextField.addListener(SWT.MouseUp, this);
filterTypeTextField.addListener(SWT.Modify, this);
filterTypeTextField.setMessage("Only types with...");
filterTypeTextField.addKeyListener(checkSelectedKeyListener);
filterCoveredTextTextField = new Text(overlay, SWT.SINGLE | SWT.BORDER);
GridData gd2 = new GridData();
gd2.grabExcessHorizontalSpace = true;
gd2.horizontalAlignment = GridData.FILL;
gd2.horizontalSpan = 1;
filterCoveredTextTextField.setLayoutData(gd2);
filterCoveredTextTextField.setToolTipText("Only annotation with...");
filterCoveredTextTextField.addListener(SWT.KeyUp, this);
filterCoveredTextTextField.addListener(SWT.MouseUp, this);
filterCoveredTextTextField.addListener(SWT.Modify, this);
filterCoveredTextTextField.setMessage("Only annotations with...");
filterCoveredTextTextField.addKeyListener(checkSelectedKeyListener);
treeView = new CheckboxTreeViewer(overlay, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
gd = new GridData(GridData.FILL_BOTH);
treeView.getTree().setLayoutData(gd);
AnnotationTreeContentProvider provider = new AnnotationTreeContentProvider(editor, this);
treeView.setContentProvider(provider);
document.addChangeListener(provider);
lableProvider = new AnnotationTreeLabelProvider(this);
treeView.setLabelProvider(lableProvider);
treeView.addCheckStateListener(this);
treeView.addDoubleClickListener(this);
treeView.getTree().addMouseListener(this);
ToolTipListener tl = new ToolTipListener(treeView.getTree());
treeView.getTree().addListener(SWT.Dispose, tl);
treeView.getTree().addListener(SWT.KeyDown, tl);
treeView.getTree().addListener(SWT.MouseMove, tl);
treeView.getTree().addListener(SWT.MouseHover, tl);
int ops = DND.DROP_COPY | DND.DROP_MOVE;
Transfer[] transfers = new Transfer[] { TextTransfer.getInstance() };
treeView.addDragSupport(ops, transfers, new AnnotationTreeViewDragListener(treeView));
getTreeViewer().getControl().addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.keyCode;
// backspace or delete: delete annotations
if (keyCode == SWT.BS || keyCode == SWT.DEL) {
deleteSelectedAnnotations();
}
// ctrl and c: copy type name to clipboard
if (e.stateMask == SWT.CTRL && (e.keyCode == 'c' || e.keyCode == 'C')) {
TreeItem[] selection = treeView.getTree().getSelection();
if (selection != null) {
Object[] contents = getContents(selection);
TextTransfer textTransfer = TextTransfer.getInstance();
clipboard.setContents(contents, new Transfer[] { textTransfer });
}
}
// ctrl and c: copy type name to clipboard:
if ((e.stateMask & SWT.CTRL) == SWT.CTRL) {
if (keyCode == 'u') {
modifyAnnotation(ModifyAnnotationOperation.WIDE_L);
} else if (keyCode == 'i') {
modifyAnnotation(ModifyAnnotationOperation.LOWER_L);
} else if (keyCode == 'o') {
modifyAnnotation(ModifyAnnotationOperation.LOWER_R);
} else if (keyCode == 'p') {
modifyAnnotation(ModifyAnnotationOperation.WIDE_R);
}
}
}
private Object[] getContents(TreeItem[] selection) {
List<String> list = new ArrayList<>();
for (TreeItem item : selection) {
Object data = item.getData();
if (data instanceof TypeTreeNode) {
list.add(((TypeTreeNode) data).getType().getName());
} else if (data instanceof PrimitiveFeatureTreeNode) {
list.add(((PrimitiveFeatureTreeNode) data).getValue());
} else if (data instanceof AnnotationTreeNode) {
list.add(((AnnotationTreeNode) data).getAnnotation().getCoveredText());
} else if (data instanceof ITreeNode) {
list.add(((ITreeNode) data).getName());
}
}
return new Object[] { StringUtils.join(list, "\n") };
}
});
styleListener = new TreeViewAnnotationStyleChangeListener();
editor.getCasDocumentProvider().getTypeSystemPreferenceStore(editor.getEditorInput())
.addPropertyChangeListener(styleListener);
rutaImage = RutaCasEditorPlugin.getImageDescriptor("/icons/views.png").createImage();
getSite().getPage().addSelectionListener(this);
getSite().setSelectionProvider(treeView);
editor.addAnnotationListener(this);
if (!useSelection) {
reloadTree();
}
}