/*
Copyright 2008-2010 Gephi
Authors : Mathieu Bastian <mathieu.bastian@gephi.org>
Website : http://www.gephi.org
This file is part of Gephi.
Gephi is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
Gephi 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Gephi. If not, see <http://www.gnu.org/licenses/>.
*/
package org.gephi.desktop.filters;
import java.util.ArrayList;
import java.util.List;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.gephi.filters.api.Query;
import org.gephi.filters.spi.Category;
import org.gephi.filters.spi.Filter;
/**
*
* @author Mathieu Bastian
*/
public final class FilterUIModel {
private Query selectedQuery;
private List<Query> expandedQueryNodes;
private List<Query> expandedParametersNodes;
private List<Category> expandedCategoryNodes;
private List<ChangeListener> listeners;
public FilterUIModel() {
listeners = new ArrayList<ChangeListener>();
expandedQueryNodes = new ArrayList<Query>();
expandedCategoryNodes = new ArrayList<Category>();
expandedParametersNodes = new ArrayList<Query>();
}
public Query getSelectedQuery() {
return selectedQuery;
}
public Query getSelectedRoot() {
if (selectedQuery != null) {
Query root = selectedQuery;
while (root.getParent() != null) {
root = root.getParent();
}
return root;
}
return null;
}
public void setSelectedQuery(Query query) {
selectedQuery = query;
fireChangeEvent();
}
public void setExpand(Query query, boolean expanded, boolean parametersExpanded) {
if (expanded && !expandedQueryNodes.contains(query)) {
expandedQueryNodes.add(query);
} else if (!expanded) {
expandedQueryNodes.remove(query);
}
if (parametersExpanded && !expandedParametersNodes.contains(query)) {
expandedParametersNodes.add(query);
} else if (!parametersExpanded) {
expandedParametersNodes.remove(query);
}
}
public void setExpand(Category category, boolean expanded) {
if (expanded && !expandedCategoryNodes.contains(category)) {
expandedCategoryNodes.add(category);
} else if (!expanded) {
expandedCategoryNodes.remove(category);
}
}
public boolean isExpanded(Query query) {
return expandedQueryNodes.contains(query);
}
public boolean isParametersExpanded(Query query) {
return expandedParametersNodes.contains(query);
}
public boolean isExpanded(Category category) {
return expandedCategoryNodes.contains(category);
}
public void addChangeListener(ChangeListener listener) {
if (!listeners.contains(listener)) {
listeners.add(listener);
}
}
public void removeChangeListener(ChangeListener listener) {
listeners.remove(listener);
}
private void fireChangeEvent() {
ChangeEvent evt = new ChangeEvent(this);
for (ChangeListener listener : listeners) {
listener.stateChanged(evt);
}
}
}