/******************************************************************************* * Copyright (c) 2012 Arapiki Solutions Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * "Peter Smith <psmith@arapiki.com>" - initial API and * implementation and/or initial documentation *******************************************************************************/ package com.buildml.eclipse.actions; import com.buildml.eclipse.bobj.UIAction; import com.buildml.eclipse.utils.IVisibilityProvider; import com.buildml.model.types.ActionSet; /** * An adapter class to allow a ActionSet to be used as the visibility provider for * a VisibilityTreeViewer control. * * @author "Peter Smith <psmith@arapiki.com>" */ public class ActionsEditorVisibilityProvider implements IVisibilityProvider { /*=====================================================================================* * FIELDS/TYPES *=====================================================================================*/ /** * The ActionSet containing the visible/non-visible state of each path. If the path * is in this set, it's visible, else it's non-visible. */ private ActionSet primaryFilterSet; /** * A secondary filterSet which can be applied in conjunction with the first. Note that * this filter set is provided as-is and won't be modified by the setVisibility() method. * It's use is to further filter out elements after the primary filter set (filterSet) * has been applied. */ private ActionSet secondaryFilterSet; /*=====================================================================================* * CONSTRUCTORS *=====================================================================================*/ /** * Create a new ActionsEditorVisibilityProvider, which can be used in conjunction with * a VisibilityTreeViewer to determine which elements are visible, versus which are * non-visible (or greyed out). * * @param filterSet The ActionSet specifying the visibility state of each path. */ public ActionsEditorVisibilityProvider(ActionSet filterSet) { this.primaryFilterSet = filterSet; } /*=====================================================================================* * PUBLIC METHODS *=====================================================================================*/ /* (non-Javadoc) * @see com.buildml.eclipse.utils.IVisibilityProvider#isVisible(java.lang.Object) */ @Override public boolean isVisible(Object element) { if (element instanceof UIAction) { UIAction uiAction = (UIAction)element; int actionId = uiAction.getId(); /* is this file a member of both primaryFilterSet and secondaryFilterSet. */ return (primaryFilterSet.isMember(actionId) && ((secondaryFilterSet == null) || secondaryFilterSet.isMember(actionId))); } return false; } /*-------------------------------------------------------------------------------------*/ /* (non-Javadoc) * @see com.buildml.eclipse.utils.IVisibilityProvider#setVisibility(java.lang.Object, boolean) */ @Override public void setVisibility(Object element, boolean visible) { if (element instanceof UIAction) { UIAction uiAction = (UIAction)element; if (visible) { primaryFilterSet.addSubTree(uiAction.getId()); } else { primaryFilterSet.removeSubTree(uiAction.getId()); } } } /*-------------------------------------------------------------------------------------*/ /** * Set the primary FilterSet that determines which tree elements we want to * display. * @param filter The new primary filter set. */ public void setPrimaryFilterSet(ActionSet filter) { primaryFilterSet = filter; } /*-------------------------------------------------------------------------------------*/ /** * @return The primary filter set. */ public ActionSet getPrimaryFilterSet() { return primaryFilterSet; } /*-------------------------------------------------------------------------------------*/ /** * Set the secondary FileSet that determine which packages we want to * display. * @param filter The new secondary filter set. */ public void setSecondaryFilterSet(ActionSet filter) { secondaryFilterSet = filter; } /*-------------------------------------------------------------------------------------*/ /** * @return The secondary filter set. */ public ActionSet getSecondaryFilterSet() { return secondaryFilterSet; } /*-------------------------------------------------------------------------------------*/ }