org.eclipse.che.ide.editor.texteditor.TextEditorPartViewImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.che.ide.editor.texteditor.TextEditorPartViewImpl.java

Source

/*******************************************************************************
 * Copyright (c) 2012-2016 Codenvy, S.A.
 * 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:
 *   Codenvy, S.A. - initial API and implementation
 *******************************************************************************/
package org.eclipse.che.ide.editor.texteditor;

import elemental.dom.Element;

import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;

import org.eclipse.che.ide.api.editor.codeassist.AdditionalInfoCallback;
import org.eclipse.che.ide.api.editor.texteditor.EditorWidget;
import org.eclipse.che.ide.api.editor.texteditor.TextEditorPartView;
import org.eclipse.che.ide.editor.codeassist.AdditionalInformationWidget;
import org.eclipse.che.ide.api.editor.codeassist.CompletionsSource;
import org.eclipse.che.ide.api.editor.events.CursorActivityEvent;
import org.eclipse.che.ide.api.editor.events.CursorActivityHandler;
import org.eclipse.che.ide.api.editor.keymap.Keymap;
import org.eclipse.che.ide.editor.texteditor.infopanel.InfoPanel;
import org.eclipse.che.ide.ui.popup.PopupResources;
import org.eclipse.che.ide.api.editor.text.TextPosition;

/**
 * Implementation of the View part of the editors.
 * 
 * @author "Mickal Leduque"
 */
public class TextEditorPartViewImpl extends Composite implements TextEditorPartView {

    /** The UI binder for the component. */
    private final static EditorViewUiBinder uibinder = GWT.create(EditorViewUiBinder.class);

    /** The info panel bar for the editor. */
    @UiField(provided = true)
    InfoPanel infoPanel;

    /** The container for the real editor widget. */
    @UiField
    SimplePanel editorPanel;

    /** The view delegate. */
    private Delegate delegate;

    /** The resources for the additional infos popup. */
    private PopupResources popupResources;

    @Inject
    public TextEditorPartViewImpl(final InfoPanel infoPanel) {
        this.infoPanel = infoPanel;

        final HTMLPanel panel = uibinder.createAndBindUi(this);
        initWidget(panel);
    }

    @Override
    public void onResize() {
        getDelegate().onResize();
    }

    @Override
    public void showCompletionProposals(final EditorWidget editorWidget, final CompletionsSource source) {
        editorWidget.showCompletionProposals(source, new AdditionalInfoCallback() {

            @Override
            public Element onAdditionalInfoNeeded(final float pixelX, final float pixelY,
                    final Element infoWidget) {
                final AdditionalInformationWidget popup = new AdditionalInformationWidget(popupResources);
                popup.addItem(infoWidget);
                popup.show(pixelX, pixelY);
                return popup.asElement();
            }
        });
    }

    @Override
    public void showCompletionProposals(final EditorWidget editorWidget) {
        editorWidget.showCompletionProposals();
    }

    @Override
    public void setDelegate(final Delegate delegate) {
        this.delegate = delegate;
    }

    protected Delegate getDelegate() {
        return this.delegate;
    }

    /**
     * Sets the additional infos popup resource.
     * @param popupResources the resource
     */
    @Inject
    public void setPopupResource(final PopupResources popupResources) {
        this.popupResources = popupResources;
    }

    @Override
    public void setEditorWidget(final EditorWidget editorWidget) {
        if (this.editorPanel.getWidget() != null) {
            throw new RuntimeException("Editor already set");
        }
        this.editorPanel.setWidget(editorWidget);

        editorWidget.addCursorActivityHandler(new CursorActivityHandler() {
            @Override
            public void onCursorActivity(final CursorActivityEvent event) {
                delegate.editorCursorPositionChanged();
            }
        });
        editorWidget.addBlurHandler(new BlurHandler() {
            @Override
            public void onBlur(final BlurEvent event) {
                delegate.editorLostFocus();
            }
        });
        editorWidget.addFocusHandler(new FocusHandler() {
            @Override
            public void onFocus(final FocusEvent event) {
                delegate.editorGotFocus();
            }
        });
    }

    @Override
    public void showPlaceHolder(final Widget placeHolder) {
        this.editorPanel.setWidget(placeHolder);
    }

    @Override
    public void initInfoPanel(final String mode, final Keymap keymap, final int lineCount, final int tabSize) {
        this.infoPanel.createDefaultState(mode, lineCount, tabSize);
    }

    @Override
    public void updateInfoPanelPosition(final TextPosition position) {
        this.infoPanel.updateCursorPosition(position);
    }

    @Override
    public void updateInfoPanelUnfocused(final int lineCount) {
    }

    @Override
    public NotificationRemover addNotification(final com.google.gwt.dom.client.Element element) {
        getElement().insertFirst(element);
        return new NotificationRemover() {
            @Override
            public void remove() {
                element.removeFromParent();
            }
        };
    }

    /**
     * UI binder interface for this component.
     * 
     * @author "Mickal Leduque"
     */
    interface EditorViewUiBinder extends UiBinder<HTMLPanel, TextEditorPartViewImpl> {
    }
}