blob: b49d89bea20533f7fd5f0717dc144285be921db3 [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.util.treeView;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.util.Comparator;
public abstract class NodeDescriptor<E> {
protected final Project myProject;
private final NodeDescriptor myParentDescriptor;
protected String myName;
protected Icon myClosedIcon;
/**
* Unused. It's there only for API compatibility.
*/
@Deprecated
protected Icon myOpenIcon;
protected Color myColor;
private int myIndex = -1;
private long myChildrenSortingStamp = -1;
private long myUpdateCount;
private boolean myWasDeclaredAlwaysLeaf;
public NodeDescriptor(@Nullable Project project, @Nullable NodeDescriptor parentDescriptor) {
myProject = project;
myParentDescriptor = parentDescriptor;
}
@Nullable
public NodeDescriptor getParentDescriptor() {
return myParentDescriptor;
}
public int getIndex() {
return myIndex;
}
public void setIndex(int index) {
myIndex = index;
}
public abstract boolean update();
public abstract E getElement();
public String toString() {
return myName;
}
/**
Use #getIcon() instead
*/
@Deprecated
public final Icon getOpenIcon() {
return getIcon();
}
/**
Use #getIcon() instead
*/
@Deprecated
public final Icon getClosedIcon() {
return getIcon();
}
public final Icon getIcon() {
return myClosedIcon;
}
public final Color getColor() {
return myColor;
}
@Nullable
public final Project getProject() {
return myProject;
}
public boolean expandOnDoubleClick() {
return true;
}
public int getWeight() {
E element = getElement();
if (element instanceof WeighedItem) {
return ((WeighedItem) element).getWeight();
}
return 30;
}
public final long getChildrenSortingStamp() {
return myChildrenSortingStamp;
}
public final void setChildrenSortingStamp(long stamp) {
myChildrenSortingStamp = stamp;
}
public final long getUpdateCount() {
return myUpdateCount;
}
public final void setUpdateCount(long updateCount) {
myUpdateCount = updateCount;
}
public boolean isWasDeclaredAlwaysLeaf() {
return myWasDeclaredAlwaysLeaf;
}
public void setWasDeclaredAlwaysLeaf(boolean leaf) {
myWasDeclaredAlwaysLeaf = leaf;
}
public void applyFrom(NodeDescriptor desc) {
setIcon(desc.getIcon());
myName = desc.myName;
myColor = desc.myColor;
}
public void setIcon(Icon closedIcon) {
myClosedIcon = closedIcon;
}
public abstract static class NodeComparator<T extends NodeDescriptor> implements Comparator<T> {
private long myStamp;
public final void setStamp(long stamp) {
myStamp = stamp;
}
public long getStamp() {
return myStamp;
}
public void incStamp() {
setStamp(getStamp() + 1);
}
public static class Delegate<T extends NodeDescriptor> extends NodeComparator<T> {
private NodeComparator<T> myDelegate;
protected Delegate(NodeComparator<T> delegate) {
myDelegate = delegate;
}
public void setDelegate(NodeComparator<T> delegate) {
myDelegate = delegate;
}
@Override
public long getStamp() {
return myDelegate.getStamp();
}
@Override
public void incStamp() {
myDelegate.incStamp();
}
@Override
public int compare(T o1, T o2) {
return myDelegate.compare(o1, o2);
}
}
}
}