Package org.erlide.debug.ui.properties

Source Code of org.erlide.debug.ui.properties.BreakpointConditionEditor

/*******************************************************************************
* Copyright (c) 2000, 2007 IBM Corporation and others.
* 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:
*     IBM Corporation - initial API and implementation
*******************************************************************************/
package org.erlide.debug.ui.properties;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.IHandler;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentListener;
import org.eclipse.jface.text.TextViewerUndoManager;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.IHandlerActivation;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
import org.erlide.backend.debug.IErlangBreakpoint;
import org.erlide.ui.editors.erl.scanner.IErlangPartitions;
import org.erlide.util.ErlLogger;

/**
* The widget for the conditional editor on the breakpoints properties page
*/
public class BreakpointConditionEditor {

    SourceViewer fViewer;
    // private IContentAssistProcessor fCompletionProcessor;
    private String fOldValue;
    private String fErrorMessage;
    private final ErlangLineBreakpointPropertyPage fPage;
    private final IErlangBreakpoint fBreakpoint;
    private IHandlerService fHandlerService;
    private IHandler fHandler;
    private IHandlerActivation fActivation;
    private IDocumentListener fDocumentListener;

    /**
     * Constructor
     *
     * @param parent
     *            the parent to add this widget to
     * @param page
     *            the page that is associated with this widget
     */
    public BreakpointConditionEditor(final Composite parent,
            final ErlangLineBreakpointPropertyPage page) {
        fPage = page;
        fBreakpoint = fPage.getBreakpoint();
        String condition = "";
        try {
            condition = fBreakpoint.getCondition();
            fErrorMessage = "Enter a condition";
            fOldValue = ""; //$NON-NLS-1$

            fViewer = new SourceViewer(parent, null, SWT.BORDER | SWT.V_SCROLL
                    | SWT.H_SCROLL | SWT.LEFT_TO_RIGHT);
            fViewer.setInput(parent);
            final IDocument document = new Document();
            fViewer.setDocumentPartitioning(IErlangPartitions.ERLANG_PARTITIONING);
            // setDocumentPartitioning
            // JDIDebugUIPlugin.getDefault().getJavaTextTools()
            // .setupJavaDocumentPartitioner(document,
            // IJavaPartitions.JAVA_PARTITIONING);
            // we can only do code assist if there is an associated type
            // final IResource r = fBreakpoint.getMarker().getResource();
            // if (r != null) {
            // final IErlModel model = ErlangCore.getModel();
            // final IErlElement element = model.findElement(r);
            // if (element!= null && element.getKind() ==
            // IErlElement.Kind.MODULE) {
            // final int lineNumber = fBreakpoint.getMarker()
            // .getAttribute(IMarker.LINE_NUMBER, -1);
            // IJavaDebugContentAssistContext context = null;
            // final IType type = BreakpointUtils.getType(fBreakpoint);
            // if (type == null) {
            // context = new TypeContext(null, -1);
            // } else {
            // try {
            // String source = null;
            // final ICompilationUnit compilationUnit = type
            // .getCompilationUnit();
            // if (compilationUnit != null
            // && compilationUnit.getJavaProject().getProject()
            // .exists()) {
            // source = compilationUnit.getSource();
            // } else {
            // final IClassFile classFile = type.getClassFile();
            // if (classFile != null) {
            // source = classFile.getSource();
            // }
            // }
            // final int lineNumber = fBreakpoint.getMarker()
            // .getAttribute(IMarker.LINE_NUMBER, -1);
            // int position = -1;
            // if (source != null && lineNumber != -1) {
            // try {
            // position = new Document(source)
            // .getLineOffset(lineNumber - 1);
            // } catch (final BadLocationException e) {
            // JDIDebugUIPlugin.log(e);
            // }
            // }
            // context = new TypeContext(type, position);
            // } catch (final CoreException e) {
            // JDIDebugUIPlugin.log(e);
            // }
            // }
            // fCompletionProcessor = new
            // JavaDebugContentAssistProcessor(context);
            // fViewer.configure(new DisplayViewerConfiguration() {
            // public IContentAssistProcessor getContentAssistantProcessor() {
            // return fCompletionProcessor;
            // }
            // });
            fViewer.setEditable(true);
            // if we don't check upstream tracing can throw assertion exceptions
            // see bug 181914
            document.set(condition == null ? "" : condition); //$NON-NLS-1$
            fViewer.setDocument(document);
            fViewer.setUndoManager(new TextViewerUndoManager(10));
            fViewer.getUndoManager().connect(fViewer);
            fDocumentListener = new IDocumentListener() {
                @Override
                public void documentAboutToBeChanged(final DocumentEvent event) {
                }

                @Override
                public void documentChanged(final DocumentEvent event) {
                    valueChanged();
                }
            };
            fViewer.getDocument().addDocumentListener(fDocumentListener);
            final GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
            gd.heightHint = fPage.convertHeightInCharsToPixels(10);
            gd.widthHint = fPage.convertWidthInCharsToPixels(40);
            fViewer.getControl().setLayoutData(gd);
            fHandler = new AbstractHandler() {
                @Override
                public Object execute(final ExecutionEvent event)
                        throws org.eclipse.core.commands.ExecutionException {
                    fViewer.doOperation(ISourceViewer.CONTENTASSIST_PROPOSALS);
                    return null;
                }
            };
            fHandlerService = (IHandlerService) PlatformUI.getWorkbench().getAdapter(
                    IHandlerService.class);
        } catch (final CoreException exception) {
            ErlLogger.warn(exception);
        }
    }

    /**
     * Returns the condition defined in the source viewer.
     *
     * @return the contents of this condition editor
     */
    public String getCondition() {
        return fViewer.getDocument().get();
    }

    /**
     * @see org.eclipse.jface.preference.FieldEditor#refreshValidState()
     */
    protected void refreshValidState() {
        if (!fViewer.isEditable()) {
            fPage.removeErrorMessage(fErrorMessage);
        } else {
            final String text = fViewer.getDocument().get();
            if (!(text != null && text.trim().length() > 0)) {
                fPage.addErrorMessage(fErrorMessage);
            } else {
                fPage.removeErrorMessage(fErrorMessage);
            }
        }
    }

    /**
     * @see org.eclipse.jface.preference.FieldEditor#setEnabled(boolean,
     *      org.eclipse.swt.widgets.Composite)
     */
    public void setEnabled(final boolean enabled) {
        fViewer.setEditable(enabled);
        fViewer.getTextWidget().setEnabled(enabled);
        if (enabled) {
            // fViewer.updateViewerColors();
            fViewer.getTextWidget().setFocus();
            fActivation = fHandlerService.activateHandler(
                    ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS, fHandler);
        } else {
            final Color color = fViewer.getControl().getDisplay()
                    .getSystemColor(SWT.COLOR_WIDGET_BACKGROUND);
            fViewer.getTextWidget().setBackground(color);
            if (fActivation != null) {
                fHandlerService.deactivateHandler(fActivation);
            }
        }
        valueChanged();
    }

    /**
     * Handle that the value changed
     */
    protected void valueChanged() {
        final String newValue = fViewer.getDocument().get();
        if (!newValue.equals(fOldValue)) {
            fOldValue = newValue;
        }
        refreshValidState();
    }

    /**
     * Dispose of the handlers, etc
     */
    public void dispose() {
        if (fViewer.isEditable()) {
            fHandlerService.deactivateHandler(fActivation);
        }
        fViewer.getDocument().removeDocumentListener(fDocumentListener);
        // fViewer.dispose();
    }
}
TOP

Related Classes of org.erlide.debug.ui.properties.BreakpointConditionEditor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.