Package com.dci.intellij.dbn.editor.code

Source Code of com.dci.intellij.dbn.editor.code.BasicSourceCodeEditorProvider

package com.dci.intellij.dbn.editor.code;

import com.dci.intellij.dbn.common.editor.BasicTextEditor;
import com.dci.intellij.dbn.common.editor.BasicTextEditorProvider;
import com.dci.intellij.dbn.common.util.ActionUtil;
import com.dci.intellij.dbn.editor.DBContentType;
import com.dci.intellij.dbn.vfs.DatabaseEditableObjectFile;
import com.dci.intellij.dbn.vfs.SourceCodeFile;
import com.intellij.openapi.actionSystem.ActionToolbar;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;

import javax.swing.Icon;
import javax.swing.JComponent;
import java.awt.BorderLayout;

public abstract class BasicSourceCodeEditorProvider extends BasicTextEditorProvider implements DumbAware {
    @NotNull
    public FileEditor createEditor(@NotNull Project project, @NotNull VirtualFile file) {
        DatabaseEditableObjectFile databaseFile;

        if (file instanceof SourceCodeFile) {
            SourceCodeFile sourceCodeFile = (SourceCodeFile) file;
            databaseFile = sourceCodeFile.getDatabaseFile();
        } else {
            databaseFile = (DatabaseEditableObjectFile) file;
        }

        SourceCodeFile sourceCodeFile = getSourceCodeFile(databaseFile);

        boolean isMainEditor = sourceCodeFile.getContentType() == databaseFile.getMainContentType();

/*
        BasicTextEditor openEditor = lookupExistingEditor(project, databaseFile);
        if (openEditor != null) return openEditor;
*/

        String editorName = getName();
        BasicTextEditor textEditor = isMainEditor ?
                new SourceCodeMainEditor(project, sourceCodeFile, editorName) :
                new SourceCodeEditor(project, sourceCodeFile, editorName);

        updateEditorActions(textEditor);
        Document document = textEditor.getEditor().getDocument();

        int documentTracking = document.hashCode();
        if (document.hashCode() != sourceCodeFile.getDocumentHashCode()) {
            document.addDocumentListener(sourceCodeFile);
            sourceCodeFile.setDocumentHashCode(documentTracking);
        }

        Icon icon = getIcon();
        if (icon != null) {
            updateTabIcon(databaseFile, textEditor, icon);
        }


        return textEditor;
    }

    private BasicTextEditor lookupExistingEditor(Project project, DatabaseEditableObjectFile databaseFile) {
        FileEditor[] fileEditors = FileEditorManager.getInstance(project).getEditors(databaseFile);
        if (fileEditors.length > 0) {
            for (FileEditor fileEditor : fileEditors) {
                if (fileEditor instanceof SourceCodeEditor) {
                    SourceCodeEditor sourceCodeEditor = (SourceCodeEditor) fileEditor;
                    if (sourceCodeEditor.getVirtualFile().getContentType() == getContentType()) {
                        return sourceCodeEditor;
                    }
                }
            }
        }
        return null;
    }

    private SourceCodeFile getSourceCodeFile(DatabaseEditableObjectFile databaseFile) {
        return (SourceCodeFile) databaseFile.getContentFile(getContentType());
    }

    public abstract DBContentType getContentType();

    public abstract String getName();

    public abstract Icon getIcon();

    private void updateEditorActions(BasicTextEditor fileEditor) {
        Editor editor = fileEditor.getEditor();
        ActionToolbar actionToolbar = ActionUtil.createActionToolbar("", true, "DBNavigator.ActionGroup.SourceEditor");
        JComponent editorComponent = editor.getComponent();
        actionToolbar.setTargetComponent(editorComponent);
        //FileEditorManager.getInstance(editor.getProject()).addTopComponent(fileEditor, actionToolbar.getComponent());
        editorComponent.getParent().add(actionToolbar.getComponent(), BorderLayout.NORTH);
    }

    public void disposeEditor(@NotNull FileEditor editor) {
        Disposer.dispose(editor);
    }

}
TOP

Related Classes of com.dci.intellij.dbn.editor.code.BasicSourceCodeEditorProvider

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.