public void createControl()

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();
    }

  }