combobox instead of buttons on the LogConsole panel
[fedora-idea.git] / platform / lang-impl / src / com / intellij / ide / impl / SelectInTargetPsiWrapper.java
blob89389a4d75c13271686e633baa762c0ea7ebb6cf
1 package com.intellij.ide.impl;
3 import com.intellij.ide.SelectInContext;
4 import com.intellij.ide.SelectInTarget;
5 import com.intellij.openapi.editor.Document;
6 import com.intellij.openapi.fileEditor.FileDocumentManager;
7 import com.intellij.openapi.project.Project;
8 import com.intellij.openapi.vfs.VirtualFile;
9 import com.intellij.psi.*;
10 import org.jetbrains.annotations.NotNull;
13 public abstract class SelectInTargetPsiWrapper implements SelectInTarget {
14 protected final Project myProject;
16 protected SelectInTargetPsiWrapper(@NotNull final Project project) {
17 myProject = project;
20 public abstract String toString();
22 protected abstract boolean canSelect(PsiFileSystemItem file);
24 public final boolean canSelect(SelectInContext context) {
25 if (myProject.isDisposed()) return false;
27 VirtualFile virtualFile = context.getVirtualFile();
28 final Document document = FileDocumentManager.getInstance().getDocument(virtualFile);
29 final PsiFileSystemItem psiFile;
30 if (document != null) {
31 psiFile = PsiDocumentManager.getInstance(myProject).getPsiFile(document);
33 else if (context.getSelectorInFile() instanceof PsiFile) {
34 psiFile = (PsiFile)context.getSelectorInFile();
36 else if (virtualFile.isDirectory()) {
37 psiFile = PsiManager.getInstance(myProject).findDirectory(virtualFile);
39 else {
40 psiFile = PsiManager.getInstance(myProject).findFile(virtualFile);
42 return psiFile != null && canSelect(psiFile) || canWorkWithCustomObjects();
45 public final void selectIn(SelectInContext context, final boolean requestFocus) {
46 Object selector = context.getSelectorInFile();
47 if (selector == null) {
48 selector = PsiManager.getInstance(myProject).findFile(context.getVirtualFile());
51 if (selector instanceof PsiElement) {
52 select(((PsiElement)selector).getOriginalElement(), requestFocus);
53 } else {
54 select(selector, context.getVirtualFile(), requestFocus);
58 protected abstract void select(final Object selector, VirtualFile virtualFile, final boolean requestFocus);
60 protected abstract boolean canWorkWithCustomObjects();
62 protected abstract void select(PsiElement element, boolean requestFocus);