/*
* Copyright 2006,2007 Enrico Boldrini, Lorenzo Bigagli This file is part of
* CheckboxTree. CheckboxTree is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at your
* option) any later version. CheckboxTree is distributed in the hope that it
* will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details. You should have received a copy of the GNU
* General Public License along with CheckboxTree; if not, write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA
*/
package net.sourceforge.pmd.jedit.checkboxtree;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
/**
* The model for checking/unchecking the nodes of a CheckboxTree. Alterations of
* a node state may propagate on descendants/ascendants, according to the
* behaviour of the checking model. See CheckingMode for the available
* behaviours.
*
* @author bigagli
* @author boldrini
*/
public interface TreeCheckingModel {
/**
* The checking behaviours provided by this class.
*
* @author boldrini
*/
public enum CheckingMode {
/**
* The check is not propagated at all, toggles the just-clicked checkbox
* only.
*/
SIMPLE,
/**
* Toggles the just-clicked checkbox and propagates the change down. In
* other words, if the clicked checkbox is checked all the descendants
* will be checked; otherwise all the descendants will be unchecked
*/
PROPAGATE,
/**
* The check is propagated, like the Propagate mode to descendants. If a
* user unchecks a checkbox the uncheck will also be propagated to
* ancestors.
*/
PROPAGATE_UP_UNCHECK,
/**
* Propagates the change not only to descendants but also to ancestors.
* With regard to descendants this mode behaves exactly like the
* Propagate mode. With regard to ancestors it checks/unchecks them as
* needed so that a node is unchecked if and only if all of its children
* are unchecked.
*/
PROPAGATE_PRESERVING_UNCHECK,
/**
* Propagates the change not only to descendants but also to ancestors.
* With regard to descendants this mode behaves exactly like the
* Propagate mode. With regard to ancestors it checks/unchecks them as
* needed so that a node is checked if and only if all of its children
* are checked.
*/
PROPAGATE_PRESERVING_CHECK
}
/**
* Returns whether the specified path is checked.
*/
public boolean isPathChecked(TreePath path);
/**
* Returns whether the specified path checking state can be toggled.
*/
public boolean isPathEnabled(TreePath path);
/**
* Returns whether the specified path is greyed.
*/
public boolean isPathGreyed(TreePath path);
/**
* Alter (check/uncheck) the checking state of the specified path if
* possible and also propagate the new state if needed by the mode.
*/
public void toggleCheckingPath(TreePath pathForRow);
/**
* add a path to the checked paths set
*
* @param path the path to be added.
*/
public void addCheckingPath(TreePath path);
/**
* add paths to the checked paths set
*
* @param paths the paths to be added.
*/
public void addCheckingPaths(TreePath[] paths);
/**
* remove a path from the checked paths set
*
* @param path the path to be added.
*/
public void removeCheckingPath(TreePath path);
/**
* remove paths from the checked paths set
*
* @param paths the paths to be added.
*/
public void removeCheckingPaths(TreePath[] paths);
/**
* Sets whether or not the path is enabled.
*
* @param path the path to enable/disable
*/
public void setPathEnabled(TreePath path, boolean enable);
/**
* Sets whether or not the paths are enabled.
*
* @param paths the paths to enable/disable
*/
public void setPathsEnabled(TreePath[] paths, boolean enable);
/**
* @return Returns the paths that are in the checking set.
*/
public TreePath[] getCheckingPaths();
/**
* @return Returns the paths that are in the checking set and are the
* (upper) roots of checked trees.
*/
public TreePath[] getCheckingRoots();
/**
* @return Returns the paths that are in the greying set.
*/
public TreePath[] getGreyingPaths();
/**
* Set the checking to paths.
*/
public void setCheckingPaths(TreePath[] paths);
/**
* Set the checking to path.
*/
public void setCheckingPath(TreePath path);
/**
* Clears the checking.
*/
public void clearChecking();
/**
* Set the checking mode.
*
* @param mode The checkingMode to set.
*/
public void setCheckingMode(CheckingMode mode);
/**
* @return Returns the CheckingMode.
*/
public CheckingMode getCheckingMode();
/**
* Get the listener for the <code>TreeModelEvent</code> posted after
* the tree changes.
*
* @deprecated use get/setTreeModel instead
*/
@Deprecated
public TreeModelListener getTreeModelListener();
/**
* Adds x to the list of listeners that are notified each time the set
* of checking TreePaths changes.
*
* @param x the new listener to be added
*/
public void addTreeCheckingListener(TreeCheckingListener x);
/**
* Removes x from the list of listeners that are notified each time the
* set of checking TreePaths changes.
*
* @param x the listener to remove
*/
public void removeTreeCheckingListener(TreeCheckingListener x);
/**
* Returns the tree model to which this checking model is bound, or null
* if not set.
*/
public TreeModel getTreeModel();
/**
* Set the tree model to which this checking model is (possibly) bound.
* A checking model may use a tree model to propagate the checking. A
* checking model may also listen to the model, to adjust the checking
* upon model events. The current checking is cleared.
*/
public void setTreeModel(TreeModel model);
}