import com.intellij.ide.projectView.impl.AbstractProjectViewPane;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.ActionCallback;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.ToolWindowId;
import com.intellij.psi.PsiFileSystemItem;
import com.intellij.psi.util.PsiUtilBase;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collection;
}
protected final void select(final Object selector, final VirtualFile virtualFile, final boolean requestFocus) {
- final ProjectView projectView = ProjectView.getInstance(myProject);
- ToolWindowManager windowManager=ToolWindowManager.getInstance(myProject);
+ select(myProject, selector, getMinorViewId(), mySubId, virtualFile, requestFocus);
+ }
+
+ public static ActionCallback select(@NotNull Project project,
+ final Object toSelect,
+ @Nullable final String viewId,
+ @Nullable final String subviewId,
+ final VirtualFile virtualFile,
+ final boolean requestFocus) {
+ final ActionCallback result = new ActionCallback();
+
+
+ final ProjectView projectView = ProjectView.getInstance(project);
+ ToolWindowManager windowManager=ToolWindowManager.getInstance(project);
final ToolWindowEx projectViewToolWindow = (ToolWindowEx) windowManager.getToolWindow(ToolWindowId.PROJECT_VIEW);
- projectViewToolWindow.ensureContentInitialized();
final Runnable runnable = new Runnable() {
public void run() {
if (requestFocus) {
- projectView.changeView(getMinorViewId(), mySubId);
+ projectView.changeView(viewId, subviewId);
}
- projectView.select(selector, virtualFile, requestFocus);
+
+ projectView.selectCB(toSelect, virtualFile, requestFocus).notify(result);
}
};
- if (requestFocus) {
- projectViewToolWindow.activate(runnable, false);
- }
- else {
- runnable.run();
- }
+
+ projectViewToolWindow.activate(runnable, false);
+
+ return result;
}
+
@NotNull
public Collection<SelectInTarget> getSubTargets(SelectInContext context) {
List<SelectInTarget> result = new ArrayList<SelectInTarget>();
final AbstractTreeNode root,
final Object element,
final Condition<AbstractTreeNode> nonStopCondition) {
- final AsyncResult<AbstractTreeNode> async = new AsyncResult<AbstractTreeNode>();
+ final AsyncResult<AbstractTreeNode> async = new AsyncResult<AbstractTreeNode>();
if (root.canRepresent(element)) {
expand(root, new Runnable() {
return myRootNodeWasInitialized;
}
+ private boolean isRootNodeBuilt() {
+ return myRootNodeWasInitialized && isNodeBeingBuilt(myRootNode);
+ }
+
public void select(final Object[] elements, @Nullable final Runnable onDone) {
select(elements, onDone, false);
}
addNext(elementsToSelect, 0, onDone, originalRows, deferred);
}
else {
- myDeferredSelections.clear();
- myDeferredSelections.add(new Runnable() {
- public void run() {
- select(elementsToSelect, onDone, false, true);
- }
- });
+ addToDeferred(elementsToSelect, onDone);
}
}
});
}
+ private void addToDeferred(final Object[] elementsToSelect, final Runnable onDone) {
+ myDeferredSelections.clear();
+ myDeferredSelections.add(new Runnable() {
+ public void run() {
+ select(elementsToSelect, onDone, false, true);
+ }
+ });
+ }
+
private boolean checkDeferred(boolean isDeferred, @Nullable Runnable onDone) {
if (!isDeferred || myCanProcessDeferredSelections || !wasRootNodeInitialized()) {
return true;
}
}
else {
- myDeferredExpansions.add(new Runnable() {
- public void run() {
- _expand(element, onDone, parentsOnly, false);
- }
- });
+ deferExpansion(element, onDone, parentsOnly);
}
}
+ private void deferExpansion(final Object element, final Runnable onDone, final boolean parentsOnly) {
+ myDeferredExpansions.add(new Runnable() {
+ public void run() {
+ _expand(element, onDone, parentsOnly, false);
+ }
+ });
+ }
+
private void processExpand(final DefaultMutableTreeNode toExpand,
final List kidsToExpand,
final int expandIndex,
*/
ToolWindowType getInternalType();
- void ensureContentInitialized();
}
activate(runnable, autoFocusContents, true);
}
- public void activate(@Nullable Runnable runnable, boolean autoFocusContents, boolean forced) {
+ public void activate(@Nullable final Runnable runnable, boolean autoFocusContents, boolean forced) {
ApplicationManager.getApplication().assertIsDispatchThread();
myToolWindowManager.activateToolWindow(myId, forced, autoFocusContents);
- if (runnable != null) {
- myToolWindowManager.invokeLater(runnable);
- }
+
+ getActivation().doWhenDone(new Runnable() {
+ public void run() {
+ myToolWindowManager.invokeLater(runnable);
+ }
+ });
}
public final boolean isActive() {
public final void show(final Runnable runnable) {
ApplicationManager.getApplication().assertIsDispatchThread();
myToolWindowManager.showToolWindow(myId);
- if (runnable != null) {
- myToolWindowManager.invokeLater(runnable);
- }
+ getActivation().doWhenDone(new Runnable() {
+ public void run() {
+ myToolWindowManager.invokeLater(runnable);
+ }
+ });
}
public final void hide(final Runnable runnable) {
package com.intellij.psi.impl.file;
-import com.intellij.ide.projectView.ProjectView;
+import com.intellij.ide.impl.ProjectViewSelectInTarget;
import com.intellij.ide.projectView.impl.ProjectViewPane;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.openapi.wm.ToolWindowId;
-import com.intellij.openapi.wm.ToolWindowManager;
-import com.intellij.openapi.wm.ex.ToolWindowEx;
import com.intellij.psi.JavaDirectoryService;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
}
public void navigate(final boolean requestFocus) {
- final ToolWindowEx window = (ToolWindowEx)ToolWindowManager.getInstance(getProject()).getToolWindow(ToolWindowId.PROJECT_VIEW);
- window.ensureContentInitialized();
- final ProjectView projectView = ProjectView.getInstance(getProject());
- projectView.changeView(ProjectViewPane.ID);
- projectView.getProjectViewPaneById(ProjectViewPane.ID).select(this, getVirtualFile(), requestFocus);
- window.activate(null);
+ ProjectViewSelectInTarget.select(getProject(), this, ProjectViewPane.ID, null, getVirtualFile(), requestFocus);
}
}