Intellij idea 플러그인에는 개발 분할합니다 설정은 윈도우 검색 및 설정

Intellij idea 플러그인에는 나는 글로 저장을 위한 오픈 세션을 탭들 호출됨 탭 세션. 이 질문은 (https://stackoverflow.com/questions/15712116/intellij-idea-plugin-development-save-groups-of-tabs-save-them-persistently-an.) 의 후속

현재, 스플릿 indows 지원되지 않습니다. 이에 따라 두 가지 i want to do.

  1. 스플릿 대한 모든 정보를 검색할 수 있는 또는 언스플리스테드 windo 컨테이너입니다 편집기에는 탭들. 그 위치 및 분할되었습니다 데릭쉐퍼드와 방향 (가로 또는 세로).
  2. 이 때, 내가 할 필요가 있는 탭 세션 정보의 저장 및 로드되었는지 재구성합니다 스플릿 창 및 그들의 탭들 그대로 과거에요

나는 현재 붽뎄 부족으로 [탐색하는 소스 코드] [2] 과 결과 이 유망한 코드를:

private EditorsSplitters getSplittersFromFocus() {
  return FileEditorManagerEx.getInstanceEx(myProject).getSplitters();
}

스플릿 세트를 사용해 windows me to 반복할 수 있습니다 '에디토르빈다우 [] indows = 제스플리터스프롬포쿠s.제러더에드빈다우스 ()'. 그들은 그들의 컨테인먼트하는 탭들 편집기에는 정보 등을 폭과 높이를. 하지만 난 방향 및 방법에 대한 정보를 찾을 수 없음 분할합니다 재구성합니다 스플릿 indows 그대로 과거에요

아무나 도움이 될까?

[2]: # L628 https://github.com/jetbrains/intellij-community/blob/5f4ee8e61c49506afe001ae44be269e9919471f4/platform/platform-impl/src/com/intellij/openapi/wm/impl/toolwindowmanagerimpl.java

질문에 대한 의견 (7)
해결책

그러나 그것이 한은수의 검증되지 않은 코드를 절차에 긴밀히 레스 브레스 δ1 [디터스플리터스] (https://github.com/JetBrains/intellij-community/blob/idea/133.696/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.java # L234) '이' 와 '긍정적' 기능을 라이티스테르나르 라이테파넬 실로나는 작동합니다.

두 가지 방법을 제시했다.

  • 액세스 출력을 &gt 라이티스테르나르 '-'; 쉽게 접근할 수 있도록 하는 파일 정보를 제공하며, 보다 안정된 apiu 해야 합니다.
  • 액세스 요소이라고 &gt splitter -; this way ',' tcpg 라이티스테르나르 it& # 39 의 정보. 안타깝게도 적어도 하나 있습니다 금지되었는지 getter 관련 없이 필드 ('빈다우스미파넬' δ1 '핀드빈다우와이스')
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.impl.EditorsSplitters;
import com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Splitter;
import org.jdom.Element;

import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;

public class SplitterAction extends AnAction {

    public SplitterAction() {
        super("Splitter _Action");
    }

    private static class Info {

    }

    private static class SplitInfo extends Info {
        public Info    first;
        public Info    second;
        public boolean vertical;
        public float   proportions;
    }

    private static class FileInfo extends Info {
        public String[] fileNames;
    }

    @Override
    public void actionPerformed(AnActionEvent anActionEvent) {
        final Project project = anActionEvent.getProject();
        final FileEditorManagerImpl fileEditorManager = (FileEditorManagerImpl) FileEditorManager.getInstance(project);
        EditorsSplitters splitters = fileEditorManager.getSplitters();
        // com.intellij.openapi.fileEditor.impl.EditorsSplitters.writeExternal() and
        // com.intellij.openapi.fileEditor.impl.EditorsSplitters#writePanel inspired this
        final Component component = splitters.getComponent(0);
        final SplitInfo infos = splitterVisitor(component);

        // or you could use this
        Element root = new Element("root");
        splitters.writeExternal(root);

        elementVisitor(root);

        // to restore from writeExternal the following should suffice
        splitters.readExternal(root);
        splitters.openFiles();
    }

    /**
     * Reads writeExternal output
     */
    private Info elementVisitor(Element root) {
        final Element splitter = root.getChild("splitter");
        if (splitter != null) {
            // see com.intellij.openapi.fileEditor.impl.EditorsSplitters#writePanel
            final SplitInfo splitInfo = new SplitInfo();
            // "vertical" or "horizontal"
            splitInfo.vertical = "vertical".equals(splitter.getAttributeValue("split-orientation"));
            splitInfo.proportions = Float.parseFloat(splitter.getAttributeValue("split-proportion"));
            Element first = splitter.getChild("split-first");
            if (first != null) {
                splitInfo.first = elementVisitor(first);
            }
            Element second = splitter.getChild("split-second");
            if (second != null) {
                splitInfo.second = elementVisitor(second);
            }
            return splitInfo;
        }
        final Element leaf = root.getChild("leaf");
        if (leaf != null) {
            final ArrayList fileNames = new ArrayList();
            for (Element file : leaf.getChildren("file")) {
                final String fileName = file.getAttributeValue("leaf-file-name");
                fileNames.add(fileName);
                // further attributes see com.intellij.openapi.fileEditor.impl.EditorsSplitters#writeComposite
            }
            final FileInfo fileInfo = new FileInfo();
            fileInfo.fileNames = fileNames.toArray(new String[fileNames.size()]);
            return fileInfo;
        }
        return null;
    }

    /**
     * Acts directly upon Component
     */
    private SplitInfo splitterVisitor(Component component) {
        if (component instanceof JPanel && ((JPanel) component).getComponentCount() > 0) {
            final Component child = ((JPanel) component).getComponent(0);
            if (child instanceof Splitter) {
                final Splitter splitter = (Splitter) child;
                final SplitInfo splitInfos = new SplitInfo();
                splitInfos.vertical = splitter.isVertical();
                splitInfos.proportions = splitter.getProportion();
                splitInfos.first = splitterVisitor(splitter.getFirstComponent());
                splitInfos.second = splitterVisitor(splitter.getSecondComponent());
                return splitInfos;
            }
            // TODO: retrieve file information
        }
        return null;
    }
}
해설 (0)