Package com.dci.intellij.dbn.common.util

Source Code of com.dci.intellij.dbn.common.util.EditorUtil

package com.dci.intellij.dbn.common.util;

import com.dci.intellij.dbn.common.editor.BasicTextEditor;
import com.dci.intellij.dbn.editor.data.DatasetEditor;
import com.dci.intellij.dbn.vfs.DatabaseEditableObjectFile;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.FileEditorProvider;
import com.intellij.openapi.fileEditor.FileEditorState;
import com.intellij.openapi.fileEditor.ex.FileEditorProviderManager;
import com.intellij.openapi.fileEditor.impl.EditorHistoryManager;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.TabbedPaneWrapper;
import com.intellij.ui.tabs.TabInfo;
import com.intellij.ui.tabs.impl.JBTabsImpl;

import javax.swing.Icon;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.util.List;

public class EditorUtil {
    public static void selectEditor(DatabaseEditableObjectFile databaseFile, FileEditor fileEditor) {
        JBTabsImpl tabs = getEditorTabComponent(databaseFile);
        TabInfo tabInfo = getEditorTabInfo(tabs, fileEditor);
        if (tabInfo != null) {
            tabs.getJBTabs().select(tabInfo, true);
        }
    }

    public static void setEditorIcon(DatabaseEditableObjectFile databaseFile, FileEditor fileEditor, Icon icon) {
        JBTabsImpl tabs = getEditorTabComponent(databaseFile);
        TabInfo tabInfo = getEditorTabInfo(tabs, fileEditor);
        if (tabInfo != null) {
            tabInfo.setIcon(icon);
        }
    }

    private static JBTabsImpl getEditorTabComponent(DatabaseEditableObjectFile databaseFile) {
        FileEditor selectedEditor = getSelectedEditor(databaseFile);
        return selectedEditor == null ? null : (JBTabsImpl) getParentComponent(selectedEditor.getComponent(), JBTabsImpl.class);
    }

    private static TabInfo getEditorTabInfo(JBTabsImpl tabs, FileEditor fileEditor) {
        if (tabs != null) {
            Component editorComponent = getParentComponent(fileEditor.getComponent(), TabbedPaneWrapper.TabWrapper.class);
            List<TabInfo> tabInfos = tabs.getTabs();
            for (TabInfo tabInfo : tabInfos) {
                if (tabInfo.getComponent() == editorComponent) {
                    return tabInfo;
                }
            }
        }
        return null;
    }


    private static Component getParentComponent(Component component, Class parentClass) {
        while (component != null && /*!parentClass.isAssignableFrom(component.getClass())*/ parentClass != component.getClass()) {
            component = component.getParent();
        }
        return component;
    }

    public static BasicTextEditor getFileEditor(DatabaseEditableObjectFile databaseFile, VirtualFile virtualFile) {
        FileEditorManager editorManager = FileEditorManager.getInstance(databaseFile.getProject());
        FileEditor[] fileEditors = editorManager.getEditors(databaseFile);
        for (FileEditor fileEditor : fileEditors) {
            if (fileEditor instanceof BasicTextEditor) {
                BasicTextEditor basicTextEditor = (BasicTextEditor) fileEditor;
                VirtualFile file = FileDocumentManager.getInstance().getFile(basicTextEditor.getEditor().getDocument());
                if (file!= null && file.equals(virtualFile)) {
                    return basicTextEditor;
                }
            }
        }
        return null;
    }

    public static FileEditor getSelectedEditor(DatabaseEditableObjectFile databaseFile) {
        return FileEditorManager.getInstance(databaseFile.getProject()).getSelectedEditor(databaseFile);
    }

    public static Editor getSelectedEditor(Project project) {

        if (project != null) {
            FileEditorManager fileEditorManager = FileEditorManager.getInstance(project);
            FileEditor[] fileEditors = fileEditorManager.getSelectedEditors();
            if (fileEditors.length == 1) {
                if (fileEditors[0] instanceof BasicTextEditor) {
                    BasicTextEditor textEditor = (BasicTextEditor) fileEditors[0];
                    return textEditor.getEditor();
                }
            }
            return fileEditorManager.getSelectedTextEditor();
        }
        return null;
    }

    public static Editor getSelectedEditor(Project project, FileType fileType){
        final Editor editor = EditorUtil.getSelectedEditor(project);
        if (editor != null && DocumentUtil.getVirtualFile(editor).getFileType().equals(fileType)) {
            return editor;
        }
        return null;
    }

    public static VirtualFile getSelectedFile(Project project) {
        if (project != null) {
            FileEditorManager fileEditorManager = FileEditorManager.getInstance(project);
            FileEditor[] fileEditors = fileEditorManager.getSelectedEditors();
            if (fileEditors.length > 0) {
                if (fileEditors[0] instanceof DatasetEditor) {
                    DatasetEditor datasetEditor = (DatasetEditor) fileEditors[0];
                    return datasetEditor.getDatabaseFile();
                } else if (fileEditors[0] instanceof BasicTextEditor) {
                    BasicTextEditor basicTextEditor = (BasicTextEditor) fileEditors[0];
                    return basicTextEditor.getVirtualFile();
                }
            }

            Editor editor = fileEditorManager.getSelectedTextEditor();
            if (editor != null) {
                return DocumentUtil.getVirtualFile(editor);
            }
        }
        return null;
    }

    public static boolean hasEditingHistory(VirtualFile virtualFile, Project project) {
        FileEditorProviderManager editorProviderManager = FileEditorProviderManager.getInstance();
        FileEditorProvider[] providers = editorProviderManager.getProviders(project, virtualFile);
        FileEditorState editorState = EditorHistoryManager.getInstance(project).getState(virtualFile, providers[0]);
        return editorState != null;
    }

    public static Dimension calculatePreferredSize(Editor editor) {
        int maxLength = 0;

        Document document = editor.getDocument();
        for (int i=0; i< document.getLineCount(); i++) {
            int length = document.getLineEndOffset(i) - document.getLineStartOffset(i);
            if (length > maxLength) {
                maxLength = length;
            }
        }

        int charWidth = com.intellij.openapi.editor.ex.util.EditorUtil.getSpaceWidth(Font.PLAIN, editor);

        int width = (charWidth + 1) * maxLength; // mono spaced fonts here
        int height = (editor.getLineHeight()) * document.getLineCount();
        return new Dimension(width, height);
    }
}
TOP

Related Classes of com.dci.intellij.dbn.common.util.EditorUtil

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.