blob: 04476f252e6b49343de49417d8d4a74aa2ae637f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2011 Wind River Systems and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.debug.internal.ui.viewers.model;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelChangedListener;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IStateUpdateListener;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewerFilter;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ILazyTreePathContentProvider;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.Viewer;
/**
* {@link TreeModelViewer} content provider interface.
*
* @since 3.5
*/
public interface ITreeModelContentProvider extends ILazyTreePathContentProvider {
/**
* Bit-mask which allows all possible model delta flags.
*
* @since 3.6
* @see #setModelDeltaMask(int)
*/
int ALL_MODEL_DELTA_FLAGS = ~0;
/**
* Bit-mask which allows only flags which control selection and expansion.
*
* @since 3.6
* @see #setModelDeltaMask(int)
*/
int CONTROL_MODEL_DELTA_FLAGS =
IModelDelta.EXPAND | IModelDelta.COLLAPSE | IModelDelta.SELECT | IModelDelta.REVEAL | IModelDelta.FORCE;
/**
* Bit-mask which allows only flags which update viewer's information
* about the model.
*
* @since 3.6
* @see #setModelDeltaMask(int)
*/
int UPDATE_MODEL_DELTA_FLAGS =
IModelDelta.ADDED | IModelDelta.CONTENT | IModelDelta.INSERTED | IModelDelta.INSTALL | IModelDelta.REMOVED |
IModelDelta.REPLACED | IModelDelta.STATE | IModelDelta.UNINSTALL;
/**
* Translates and returns the given child index from the viewer coordinate
* space to the model coordinate space.
*
* @param parentPath path to parent element
* @param index index of child element in viewer (filtered) space
* @return index of child element in model (raw) space
*/
int viewToModelIndex(TreePath parentPath, int index);
/**
* Translates and returns the given child count from the viewer coordinate
* space to the model coordinate space.
*
* @param parentPath path to parent element
* @param count number of child elements in viewer (filtered) space
* @return number of child elements in model (raw) space
*/
int viewToModelCount(TreePath parentPath, int count);
/**
* Translates and returns the given child index from the model coordinate
* space to the viewer coordinate space.
*
* @param parentPath path to parent element
* @param index index of child element in model (raw) space
* @return index of child element in viewer (filtered) space or -1 if filtered
*/
int modelToViewIndex(TreePath parentPath, int index);
/**
* Returns whether the children of given element should be filtered.
* <p>This method is used to determine whether any of the registered filters
* that extend {@link TreeModelViewerFilter} are applicable to the given
* element. If so, then children of given element should be filtered
* prior to populating them in the viewer.
*
* @param parentElement
* the parent element
* @return whether there are any {@link TreeModelViewerFilter} filters
* applicable to given parent
*/
boolean areTreeModelViewerFiltersApplicable(Object parentElement);
/**
* Returns whether the given element is filtered.
*
* @param parentElementOrTreePath
* the parent element or path
* @param element
* the child element
* @return whether to filter the element
*/
boolean shouldFilter(Object parentElementOrTreePath, Object element);
/**
* Notification the given element is being unmapped.
*
* @param path Path to unmap
*/
void unmapPath(TreePath path);
/**
* Sets the bit mask which will be used to filter the {@link IModelDelta}
* coming from the model. Any delta flags which are hidden by the mask
* will be ignored.
*
* @param mask for <code>IModelDelta</code> flags
*
* @since 3.6
*/
void setModelDeltaMask(int mask);
/**
* Returns the current model delta mask.
*
* @return bit mask used to filter model delta events.
*
* @see #setModelDeltaMask(int)
* @since 3.6
*/
int getModelDeltaMask();
/**
* Translates and returns the given child count from the model coordinate
* space to the viewer coordinate space.
*
* @param parentPath path to parent element
* @param count child count element in model (raw) space
* @return child count in viewer (filtered) space
*/
int modelToViewChildCount(TreePath parentPath, int count);
/**
* Registers the specified listener for view update notifications.
* @param listener Listener to add
*/
void addViewerUpdateListener(IViewerUpdateListener listener);
/**
* Removes the specified listener from update notifications.
* @param listener Listener to remove
*/
void removeViewerUpdateListener(IViewerUpdateListener listener);
/**
* Registers the given listener for model delta notification.
* This listener is called immediately after the viewer processes
* the delta.
* @param listener Listener to add
*/
void addModelChangedListener(IModelChangedListener listener);
/**
* Removes the given listener from model delta notification.
* @param listener Listener to remove
*/
void removeModelChangedListener(IModelChangedListener listener);
/**
* Causes the content provider to save the expansion and selection state
* of given element. The state is then restored as the tree is lazily
* re-populated.
* @param path Path of the element to save.
*/
void preserveState(TreePath path);
/**
* Registers the specified listener for state update notifications.
* @param listener Listener to add
* @since 3.6
*/
void addStateUpdateListener(IStateUpdateListener listener);
/**
* Removes the specified listener from state update notifications.
* @param listener Listener to remove
* @since 3.6
*/
void removeStateUpdateListener(IStateUpdateListener listener);
/**
* Instructs the content provider to process the given model delta. This
* mechanism can be used to control the view's layout (expanding, selecting
* , etc.)
*
* @param delta The model delta to process.
* @param mask Mask that can be used to suppress processing of some of the
* delta flags
*
* @since 3.6
*/
void updateModel(IModelDelta delta, int mask);
/**
* Instructs the content provider to cancel any pending state changes
* (i.e. SELECT, REVEAL, EXPAND, COLLAPSE) for the given path. Pending
* state changes are changes the the viewer plans to re-apply to the
* viewer following a refresh. If the user changes viewer state while
* the viewer is being refreshed, user's change should override the
* previous state.
*
* @param path Path of the element for which to cancel pending changes.
* @param flags Flags indicating the changes to cancel.
*/
void cancelRestore(TreePath path, int flags);
/**
* Notifies the content provider that a client called {@link Viewer#setInput(Object)},
* and the viewer input is changed.
* This method is guaranteed to be called after {@link IContentProvider#inputChanged(Viewer, Object, Object)}
*
* @param viewer The viewer that uses this content provider.
* @param oldInput Old input object.
* @param newInput New input object.
*
* @since 3.8
*/
void postInputChanged(IInternalTreeModelViewer viewer, Object oldInput, Object newInput);
/**
* Notifies the receiver that the given element has had its
* checked state modified in the viewer.
*
* @param path Path of the element that had its checked state changed
* @param checked The new checked state of the element
* @return false if the check state should not change
*/
boolean setChecked(TreePath path, boolean checked);
}