@Override
 public void createControl(Composite parent) {
   super.createControl(parent);
   final SourceViewer viewer = getSourceViewer();
   viewer.unconfigure();
   IPreferenceStore store = DartToolsPlugin.getDefault().getCombinedPreferenceStore();
   viewer.configure(
       new DartSourceViewerConfiguration(
           DartToolsPlugin.getDefault().getDartTextTools().getColorManager(), store, null, null));
   viewer.getControl().setFont(JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT));
 }
Ejemplo n.º 2
0
  void doRename(boolean showPreview) {
    cancel();

    Image image = null;
    Label label = null;

    fShowPreview |= showPreview;
    try {
      ISourceViewer viewer = fEditor.getViewer();
      if (viewer instanceof SourceViewer) {
        SourceViewer sourceViewer = (SourceViewer) viewer;
        Control viewerControl = sourceViewer.getControl();
        if (viewerControl instanceof Composite) {
          Composite composite = (Composite) viewerControl;
          Display display = composite.getDisplay();

          // Flush pending redraw requests:
          while (!display.isDisposed() && display.readAndDispatch()) {}

          // Copy editor area:
          GC gc = new GC(composite);
          Point size;
          try {
            size = composite.getSize();
            image = new Image(gc.getDevice(), size.x, size.y);
            gc.copyArea(image, 0, 0);
          } finally {
            gc.dispose();
            gc = null;
          }

          // Persist editor area while executing refactoring:
          label = new Label(composite, SWT.NONE);
          label.setImage(image);
          label.setBounds(0, 0, size.x, size.y);
          label.moveAbove(null);
        }
      }

      String newName = fNamePosition.getContent();
      if (fOriginalName.equals(newName)) {
        return;
      }
      RenameSupport renameSupport = undoAndCreateRenameSupport(newName);
      if (renameSupport == null) {
        return;
      }

      Shell shell = fEditor.getSite().getShell();
      if (renameSupport.hasUnresolvedNameReferences()) {
        fShowPreview = true;
      }
      boolean executed;
      if (fShowPreview) { // could have been updated by undoAndCreateRenameSupport(..)
        executed = renameSupport.openDialog(shell, true);
      } else {
        renameSupport.perform(shell, fEditor.getSite().getWorkbenchWindow());
        executed = true;
      }
      if (executed) {
        restoreFullSelection();
      }
    } catch (CoreException ex) {
      DartToolsPlugin.log(ex);
    } catch (InterruptedException ex) {
      // canceling is OK -> redo text changes in that case?
    } catch (InvocationTargetException ex) {
      DartToolsPlugin.log(ex);
    } catch (BadLocationException e) {
      DartToolsPlugin.log(e);
    } finally {
      if (label != null) {
        label.dispose();
      }
      if (image != null) {
        image.dispose();
      }
    }
  }
  /*
   * overview ruler problem: displayed in both viewers. the diff editor ruler is actually custom drawn (see
   * TextMergeViewer.fBirdsEyeCanvas) the ruler that gets created in this method is longer than the editor, meaning its
   * not an overview (not next to the scrollbar)
   */
  @SuppressWarnings("unused")
  private void createOverviewRuler(IDocument newInput, Class<SourceViewer> sourceViewerClazz)
      throws SecurityException, NoSuchMethodException, NoSuchFieldException,
          IllegalArgumentException, IllegalAccessException, InvocationTargetException {

    sourceViewer.setOverviewRulerAnnotationHover(new CommentAnnotationHover(null));

    OverviewRuler ruler =
        new OverviewRuler(
            new DefaultMarkerAnnotationAccess(),
            15,
            EditorsPlugin.getDefault().getSharedTextColors());
    Field compositeField = sourceViewerClazz.getDeclaredField("fComposite");
    compositeField.setAccessible(true);

    ruler.createControl((Composite) compositeField.get(sourceViewer), sourceViewer);
    ruler.setModel(annotationModel);
    // ruler.setModel(compareAnnotationModel.leftAnnotationModel);
    // XXX should go through SourceViewerDecorationSupport instead
    //		ruler.addAnnotationType("org.eclipse.mylyn.reviews.ui.comment.Annotation");
    //		ruler.setAnnotationTypeLayer("org.eclipse.mylyn.reviews.ui.comment.Annotation", 1);
    //		ruler.update();

    IAnnotationAccess annotationAccess = new DefaultMarkerAnnotationAccess();
    final SourceViewerDecorationSupport support =
        new SourceViewerDecorationSupport(
            sourceViewer, ruler, annotationAccess, EditorsUI.getSharedTextColors());
    Iterator<?> e = new MarkerAnnotationPreferences().getAnnotationPreferences().iterator();
    while (e.hasNext()) {
      support.setAnnotationPreference((AnnotationPreference) e.next());
    }
    support.install(EditorsUI.getPreferenceStore());
    sourceViewer
        .getControl()
        .addDisposeListener(
            new DisposeListener() {
              public void widgetDisposed(DisposeEvent e) {
                support.dispose();
              }
            });

    Field overViewRulerField = sourceViewerClazz.getDeclaredField("fOverviewRuler");
    overViewRulerField.setAccessible(true);

    if (overViewRulerField.get(sourceViewer) == null) {
      overViewRulerField.set(sourceViewer, ruler);
    }

    Method declareMethod =
        sourceViewerClazz.getDeclaredMethod("ensureOverviewHoverManagerInstalled");
    declareMethod.setAccessible(true);
    declareMethod.invoke(sourceViewer);
    // overviewRuler is null

    Field hoverManager = sourceViewerClazz.getDeclaredField("fOverviewRulerHoveringController");
    hoverManager.setAccessible(true);
    AnnotationBarHoverManager manager = (AnnotationBarHoverManager) hoverManager.get(sourceViewer);
    if (manager != null) {
      Field annotationHover = AnnotationBarHoverManager.class.getDeclaredField("fAnnotationHover");
      annotationHover.setAccessible(true);
      IAnnotationHover hover = (IAnnotationHover) annotationHover.get(manager);
      annotationHover.set(manager, new CommentAnnotationHover(null));
    }
    sourceViewer.showAnnotations(true);
    sourceViewer.showAnnotationsOverview(true);

    declareMethod =
        sourceViewerClazz.getDeclaredMethod("showAnnotationsOverview", new Class[] {Boolean.TYPE});
    declareMethod.setAccessible(true);
  }
Ejemplo n.º 4
0
  private Control createSyntaxPage(final Composite parent) {
    final Composite colorComposite = new Composite(parent, SWT.NONE);
    GridLayout layout = new GridLayout();
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    colorComposite.setLayout(layout);

    final Link link = new Link(colorComposite, SWT.NONE);
    link.setText(PreferencesMessages.ErlEditorColoringConfigurationBlock_link);
    link.addSelectionListener(
        new SelectionAdapter() {

          @Override
          public void widgetSelected(final SelectionEvent e) {
            PreferencesUtil.createPreferenceDialogOn(parent.getShell(), e.text, null, null);
          }
        });

    final GridData gridData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
    gridData.widthHint = 150;
    gridData.horizontalSpan = 2;
    link.setLayoutData(gridData);

    addFiller(colorComposite, 1);

    Label label;
    label = new Label(colorComposite, SWT.LEFT);
    label.setText(PreferencesMessages.ErlEditorPreferencePage_coloring_element);
    label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

    final Composite editorComposite = new Composite(colorComposite, SWT.NONE);
    layout = new GridLayout();
    layout.numColumns = 2;
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    editorComposite.setLayout(layout);
    GridData gd = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
    editorComposite.setLayoutData(gd);

    fListViewer = new TreeViewer(editorComposite, SWT.SINGLE | SWT.BORDER);
    final Tree tree = fListViewer.getTree();
    final GridData gd_tree = new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1);
    gd_tree.widthHint = 100;
    tree.setLayoutData(gd_tree);
    fListViewer.setLabelProvider(new ColorListLabelProvider());
    fListViewer.setContentProvider(new ColorListContentProvider());
    fListViewer.setInput(fColors);
    fListViewer.setSelection(new StructuredSelection(fErlangCategory));
    fListViewer.setSorter(
        new ViewerSorter() {

          @Override
          public int category(final Object element) {
            // don't sort the top level categories
            if (fErlangCategory.equals(element)) {
              return 0;
            }
            // if (fEdocCategory.equals(element)) {
            // return 1;
            // }
            // to sort semantic settings after partition based ones:
            // if (element instanceof SemanticHighlightingColorListItem)
            // return 1;
            return 0;
          }
        });
    gd = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, true);
    gd.heightHint = convertHeightInCharsToPixels(9);
    int maxWidth = 0;
    for (final TokenHighlight item : fColors.keySet()) {
      maxWidth = Math.max(maxWidth, convertWidthInCharsToPixels(item.getName().length()));
    }
    final ScrollBar vBar = ((Scrollable) fListViewer.getControl()).getVerticalBar();
    if (vBar != null) {
      maxWidth += vBar.getSize().x * 3; // scrollbars and tree
    }
    // indentation guess
    gd.widthHint = maxWidth;

    fListViewer.getControl().setLayoutData(gd);
    fListViewer.expandAll();

    final Composite stylesComposite = new Composite(editorComposite, SWT.NONE);
    layout = new GridLayout();
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    layout.numColumns = 2;
    stylesComposite.setLayout(layout);
    stylesComposite.setLayoutData(new GridData(GridData.FILL_BOTH));

    fEnableCheckbox = new Button(stylesComposite, SWT.CHECK);
    fEnableCheckbox.setText(PreferencesMessages.ErlEditorPreferencePage_enable);
    gd = new GridData(GridData.FILL_HORIZONTAL);
    gd.horizontalAlignment = GridData.BEGINNING;
    gd.horizontalSpan = 2;
    fEnableCheckbox.setLayoutData(gd);
    // TODO hide this until reworking the dialog
    fEnableCheckbox.setVisible(false);

    fColorEditorLabel = new Label(stylesComposite, SWT.LEFT);
    fColorEditorLabel.setText(PreferencesMessages.ErlEditorPreferencePage_color);
    gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
    gd.horizontalIndent = 20;
    fColorEditorLabel.setLayoutData(gd);

    fSyntaxForegroundColorEditor = new ColorSelector(stylesComposite);
    final Button foregroundColorButton = fSyntaxForegroundColorEditor.getButton();
    gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
    foregroundColorButton.setLayoutData(gd);
    new Label(stylesComposite, SWT.NONE);

    fBoldCheckBox = new Button(stylesComposite, SWT.CHECK);
    fBoldCheckBox.setText(PreferencesMessages.ErlEditorPreferencePage_bold);
    gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
    gd.horizontalIndent = 20;
    gd.horizontalSpan = 2;
    fBoldCheckBox.setLayoutData(gd);

    fItalicCheckBox = new Button(stylesComposite, SWT.CHECK);
    fItalicCheckBox.setText(PreferencesMessages.ErlEditorPreferencePage_italic);
    gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
    gd.horizontalIndent = 20;
    gd.horizontalSpan = 2;
    fItalicCheckBox.setLayoutData(gd);

    fStrikethroughCheckBox = new Button(stylesComposite, SWT.CHECK);
    fStrikethroughCheckBox.setText(PreferencesMessages.ErlEditorPreferencePage_strikeout);
    gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
    gd.horizontalIndent = 20;
    gd.horizontalSpan = 2;
    fStrikethroughCheckBox.setLayoutData(gd);

    fUnderlineCheckBox = new Button(stylesComposite, SWT.CHECK);
    fUnderlineCheckBox.setText(PreferencesMessages.ErlEditorPreferencePage_underline);
    gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
    gd.horizontalIndent = 20;
    gd.horizontalSpan = 2;
    fUnderlineCheckBox.setLayoutData(gd);

    label = new Label(colorComposite, SWT.LEFT);
    label.setText(
        PreferencesMessages.ErlEditorPreferencePage_preview
            + "\n  - Currently the preview doesn't work, but this dialog does."
            + "\n  - Open files need to be reopened to refresh the coloring.");
    label.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

    final String content =
        loadPreviewContentFromFile(getClass(), "ColorSettingPreviewCode.txt"); // $NON-NLS-1$
    fPreviewViewer = createErlangPreviewer(colorComposite, fColorManager, fColors, content);
    final Control previewer = fPreviewViewer.getControl();
    gd = new GridData(GridData.FILL_BOTH);
    gd.widthHint = convertWidthInCharsToPixels(20);
    gd.heightHint = convertHeightInCharsToPixels(5);
    gd.grabExcessHorizontalSpace = true;
    previewer.setLayoutData(gd);

    fListViewer.addSelectionChangedListener(
        new ISelectionChangedListener() {

          @Override
          public void selectionChanged(final SelectionChangedEvent event) {
            handleSyntaxColorListSelection();
          }
        });

    foregroundColorButton.addSelectionListener(
        new SelectionListener() {
          @Override
          public void widgetDefaultSelected(final SelectionEvent e) {
            // do nothing
          }

          @Override
          public void widgetSelected(final SelectionEvent e) {
            final TokenHighlight item = getHighlight();
            final HighlightStyle data = fColors.get(item);
            if (data == null) {
              return;
            }
            data.setColor(fSyntaxForegroundColorEditor.getColorValue());
            fPreviewViewer.invalidateTextPresentation();
          }
        });

    fBoldCheckBox.addSelectionListener(
        new SelectionListener() {
          @Override
          public void widgetDefaultSelected(final SelectionEvent e) {
            // do nothing
          }

          @Override
          public void widgetSelected(final SelectionEvent e) {
            final TokenHighlight item = getHighlight();
            final HighlightStyle data = fColors.get(item);
            if (data == null) {
              return;
            }
            data.setStyle(SWT.BOLD, fBoldCheckBox.getSelection());
            fPreviewViewer.invalidateTextPresentation();
          }
        });

    fItalicCheckBox.addSelectionListener(
        new SelectionListener() {
          @Override
          public void widgetDefaultSelected(final SelectionEvent e) {
            // do nothing
          }

          @Override
          public void widgetSelected(final SelectionEvent e) {
            final TokenHighlight item = getHighlight();
            final HighlightStyle data = fColors.get(item);
            if (data == null) {
              return;
            }
            data.setStyle(SWT.ITALIC, fItalicCheckBox.getSelection());
            fPreviewViewer.invalidateTextPresentation();
          }
        });
    fStrikethroughCheckBox.addSelectionListener(
        new SelectionListener() {
          @Override
          public void widgetDefaultSelected(final SelectionEvent e) {
            // do nothing
          }

          @Override
          public void widgetSelected(final SelectionEvent e) {
            final TokenHighlight item = getHighlight();
            final HighlightStyle data = fColors.get(item);
            if (data == null) {
              return;
            }
            data.setStyle(TextAttribute.STRIKETHROUGH, fStrikethroughCheckBox.getSelection());
            fPreviewViewer.invalidateTextPresentation();
          }
        });

    fUnderlineCheckBox.addSelectionListener(
        new SelectionListener() {
          @Override
          public void widgetDefaultSelected(final SelectionEvent e) {
            // do nothing
          }

          @Override
          public void widgetSelected(final SelectionEvent e) {
            final TokenHighlight item = getHighlight();
            final HighlightStyle data = fColors.get(item);
            if (data == null) {
              return;
            }
            data.setStyle(TextAttribute.UNDERLINE, fUnderlineCheckBox.getSelection());
            fPreviewViewer.invalidateTextPresentation();
          }
        });

    fEnableCheckbox.addSelectionListener(
        new SelectionListener() {
          @Override
          public void widgetDefaultSelected(final SelectionEvent e) {
            // do nothing
          }

          @Override
          public void widgetSelected(final SelectionEvent e) {
            fEnableCheckbox.setSelection(true);
            // final TokenHighlight item = getHighlight();
            // if (item instanceof SemanticHighlightingColorListItem) {
            // final boolean enable = fEnableCheckbox.getSelection();
            // getPreferenceStore().setValue(
            // ((SemanticHighlightingColorListItem) item)
            // .getEnableKey(), enable);
            // fEnableCheckbox.setSelection(enable);
            // fSyntaxForegroundColorEditor.getButton().setEnabled(enable);
            // fColorEditorLabel.setEnabled(enable);
            // fBoldCheckBox.setEnabled(enable);
            // fItalicCheckBox.setEnabled(enable);
            // fStrikethroughCheckBox.setEnabled(enable);
            // fUnderlineCheckBox.setEnabled(enable);
            // }
          }
        });

    colorComposite.layout(false);

    return colorComposite;
  }