/*
* 10/23/2011
*
* FoldCollapser.java - Goes through an RSTA instance and collapses folds of
* specific types, such as comments.
*
* This library is distributed under a modified BSD license. See the included
* RSyntaxTextArea.License.txt file for details.
*/
package org.fife.ui.rsyntaxtextarea.folding;
import java.util.ArrayList;
import java.util.List;
/**
* Collapses folds based on their type. You can create an instance of this
* class to collapse all comment blocks when opening a new file, for example.
*
* @author Robert Futrell
* @version 1.0
*/
public class FoldCollapser {
private List<Integer> typesToCollapse;
/**
* Creates an instance that collapses all comment blocks.
*/
public FoldCollapser() {
this(FoldType.COMMENT);
}
/**
* Creates an instance that collapses all blocks of the specified
* type.
*
* @param typeToCollapse The type to collapse.
* @see FoldType
*/
public FoldCollapser(int typeToCollapse) {
typesToCollapse = new ArrayList<Integer>(3);
addTypeToCollapse(typeToCollapse);
}
/**
* Adds a type of fold to collapse.
*
* @param typeToCollapse The type of fold to collapse.
*/
public void addTypeToCollapse(int typeToCollapse) {
typesToCollapse.add(Integer.valueOf(typeToCollapse));
}
/**
* Collapses any relevant folds known by the fold manager.
*
* @param fm The fold manager.
*/
public void collapseFolds(FoldManager fm) {
for (int i=0; i<fm.getFoldCount(); i++) {
Fold fold = fm.getFold(i);
collapseImpl(fold);
}
}
/**
* Collapses the specified fold, and any of its child folds, as
* appropriate.
*
* @param fold The fold to examine.
* @see #getShouldCollapse(Fold)
*/
protected void collapseImpl(Fold fold) {
if (getShouldCollapse(fold)) {
fold.setCollapsed(true);
}
for (int i=0; i<fold.getChildCount(); i++) {
collapseImpl(fold.getChild(i));
}
}
/**
* Returns whether a specific fold should be collapsed.
*
* @param fold The fold to examine.
* @return Whether the fold should be collapsed.
*/
public boolean getShouldCollapse(Fold fold) {
int type = fold.getFoldType();
for (Integer typeToCollapse : typesToCollapse) {
if (type==typeToCollapse.intValue()) {
return true;
}
}
return false;
}
}