blob: df2a1bf839627a8b807b26e234435a1d1b055605 [file] [log] [blame]
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.ide.favoritesTreeView;
import com.intellij.icons.AllIcons;
import com.intellij.ide.SelectInTarget;
import com.intellij.ide.projectView.ProjectView;
import com.intellij.ide.projectView.impl.AbstractProjectViewPane;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.ActionCallback;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
/**
* @author cdr
*/
public class FavoritesProjectViewPane extends AbstractProjectViewPane {
@NonNls public static final String ID = "Favorites";
private FavoritesTreeViewPanel myViewPanel;
private final ProjectView myProjectView;
private final FavoritesManager myFavoritesManager;
private final FavoritesListener myFavoritesListener;
private static final Logger LOG = Logger.getInstance("#" + FavoritesProjectViewPane.class.getName());
protected FavoritesProjectViewPane(final Project project, ProjectView projectView, FavoritesManager favoritesManager) {
super(project);
myProjectView = projectView;
myFavoritesManager = favoritesManager;
myFavoritesListener = new FavoritesListener() {
@Override
public void rootsChanged() {
}
@Override
public void listAdded(String listName) {
refreshMySubIdsAndSelect(listName);
}
@Override
public void listRemoved(String listName) {
String selectedSubId = getSubId();
refreshMySubIdsAndSelect(selectedSubId);
}
private void refreshMySubIdsAndSelect(String listName) {
myFavoritesManager.removeFavoritesListener(myFavoritesListener);
myProjectView.removeProjectPane(FavoritesProjectViewPane.this);
myProjectView.addProjectPane(FavoritesProjectViewPane.this);
myFavoritesManager.addFavoritesListener(myFavoritesListener);
if (!myFavoritesManager.getAvailableFavoritesListNames().contains(listName)) {
listName = null;
}
myProjectView.changeView(ID, listName);
}
};
myFavoritesManager.addFavoritesListener(myFavoritesListener);
}
@Override
public String getTitle() {
return "Favorites";
}
@Override
public Icon getIcon() {
return AllIcons.Toolwindows.ToolWindowFavorites;
}
@Override
@NotNull
public String getId() {
return ID;
}
@Override
public JComponent createComponent() {
//if (myViewPanel != null) return myViewPanel;
final String subId = getSubId();
LOG.assertTrue(subId != null, getSubIds());
myViewPanel = new FavoritesTreeViewPanel(myProject);
myTree = myViewPanel.getTree();
setTreeBuilder(myViewPanel.getBuilder());
myTreeStructure = myViewPanel.getFavoritesTreeStructure();
installComparator();
enableDnD();
return myViewPanel;
}
@Override
public void dispose() {
myViewPanel = null;
myFavoritesManager.removeFavoritesListener(myFavoritesListener);
super.dispose();
}
@Override
@NotNull
public String[] getSubIds() {
return ArrayUtil.toStringArray(myFavoritesManager.getAvailableFavoritesListNames());
}
@Override
@NotNull
public String getPresentableSubIdName(@NotNull final String subId) {
return subId;
}
@NotNull
@Override
public ActionCallback updateFromRoot(boolean restoreExpandedPaths) {
return ((FavoritesViewTreeBuilder)getTreeBuilder()).updateFromRootCB();
}
@Override
public void select(Object object, VirtualFile file, boolean requestFocus) {
if (!(object instanceof PsiElement)) return;
/*PsiElement element = (PsiElement)object;
PsiFile psiFile = element.getContainingFile();
if (psiFile != null) {
element = psiFile;
}
if (element instanceof PsiJavaFile) {
final PsiClass[] classes = ((PsiJavaFile)element).getClasses();
if (classes.length > 0) {
element = classes[0];
}
}
final PsiElement originalElement = element.getOriginalElement();*/
final VirtualFile virtualFile = PsiUtilBase.getVirtualFile((PsiElement)object);
final String list = FavoritesViewSelectInTarget.findSuitableFavoritesList(virtualFile, myProject, getSubId());
if (list == null) return;
if (!list.equals(getSubId())) {
ProjectView.getInstance(myProject).changeView(ID, list);
}
myViewPanel.selectElement(object, virtualFile, requestFocus);
}
@Override
public int getWeight() {
return 4;
}
@Override
public SelectInTarget createSelectInTarget() {
return new FavoritesViewSelectInTarget(myProject);
}
@Override
public void addToolbarActions(final DefaultActionGroup group) {
group.add(ActionManager.getInstance().getAction(IdeActions.RENAME_FAVORITES_LIST));
}
}