/**
* Copyright 2004-2016 Riccardo Solmi. All rights reserved.
* This file is part of the Whole Platform.
*
* The Whole Platform is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The Whole Platform 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the Whole Platform. If not, see <http://www.gnu.org/licenses/>.
*/
package org.whole.lang.ui.treesearch;
import java.util.BitSet;
import org.eclipse.draw2d.IFigure;
import org.whole.lang.ui.figures.IEntityFigure;
/**
* @author Riccardo Solmi
*/
public class InteractiveTreeSearch implements ITreeSearch {
protected BitSet inheritedInteractiveStack = new BitSet();
protected boolean peekInheritedInteractiveEdit(IFigure figure) {
if (inheritedInteractiveStack.length() > 0)
return inheritedInteractiveStack.get(inheritedInteractiveStack.length()-1);
else
return true; //TODO test calculateInteractiveEdit(figure.getParent());
}
public boolean prune(IFigure figure) {
boolean value;
if (figure instanceof IEntityFigure) {
IEntityFigure entityFigure = (IEntityFigure) figure;
value = entityFigure.isInteractiveInherited() ?
peekInheritedInteractiveEdit(figure) : entityFigure.isInteractiveEdit();
} else
value = peekInheritedInteractiveEdit(figure);
inheritedInteractiveStack.set(inheritedInteractiveStack.length(), value);
return false;
}
public boolean accept(IFigure figure) {
boolean value = peekInheritedInteractiveEdit(figure);
if (inheritedInteractiveStack.length() > 0)
inheritedInteractiveStack.clear(inheritedInteractiveStack.length()-1);
return value;
}
public static boolean calculateInteractiveEdit(IFigure figure) {
if (figure == null)
return true;
else if (figure instanceof IEntityFigure) {
IEntityFigure entityFigure = (IEntityFigure) figure;
return entityFigure.isInteractiveInherited() ?
calculateInteractiveEdit(figure.getParent()) : entityFigure.isInteractiveEdit();
} else
return calculateInteractiveEdit(figure.getParent());
}
public static boolean calculateInteractiveBrowse(IFigure figure) {
if (figure == null)
return true;
else if (figure instanceof IEntityFigure) {
IEntityFigure entityFigure = (IEntityFigure) figure;
return entityFigure.isInteractiveInherited() ?
calculateInteractiveBrowse(figure.getParent()) : entityFigure.isInteractiveBrowse();
} else
return calculateInteractiveBrowse(figure.getParent());
}
}