blob: 9a8cefb885f773867ce13c46a4d380432db641f7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2009 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.ui.synchronize;
import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.team.core.synchronize.SyncInfoSet;
import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.ui.IWorkbenchActionConstants;
/**
* Configures the model, actions and label decorations of an
* {@link ISynchronizePage}. Clients can:
* <ul>
* <li>set properties to affect the page contents and react to property changes
* <li>add and configure the actions available to the user (context menu,
* toolbar and view menu)
* </ul>
* @since 3.0
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface ISynchronizePageConfiguration {
/**
* Property constant for the <code>SyncInfoSet</code> that is being
* displayed by the page. Some pages may not be displaying the
* contents of a <code>SyncInfoSet</code> in which case the value
* associated with this property will be <code>null</code>.
*/
public static final String P_SYNC_INFO_SET = TeamUIPlugin.ID + ".P_SYNC_INFO_SET"; //$NON-NLS-1$
/**
* Property constant for the list of label decorators
* (instance of <code>ILabelDecorator[]</code>) that will be
* applied to the text and image from the label provider.
*/
public static final String P_LABEL_DECORATORS = TeamUIPlugin.ID + ".P_LABEL_DECORATORS"; //$NON-NLS-1$
/**
* Property constant that defines the groups in the toolbar
* menu of the page. The value for this
* property should be a string array. If this property is
* set to <code>null</code>, the <code>DEFAULT_TOOLBAR_MENU</code>
* is used. Also, the groups mentioned in the <code>DEFAULT_TOOLBAR_MENU</code>
* can be removed but will always appear in the same order if
* included.
*/
public static final String P_TOOLBAR_MENU = TeamUIPlugin.ID + ".P_TOOLBAR_MENU"; //$NON-NLS-1$
/**
* The configuration property that defines
* the groups in the context menu of the page. The value for this
* property should be a string array.
*/
public static final String P_CONTEXT_MENU = TeamUIPlugin.ID + ".P_CONTEXT_MENU"; //$NON-NLS-1$
/**
* Property constant that defines the groups in the drop-down view
* menu of the page. The value for this
* property should be a string array. If this property is
* set to <code>null</code>, the <code>DEFAULT_VIEW_MENU</code>
* is used. Also, the groups mentioned in the <code>DEFAULT_VIEW_MENU</code>
* can be removed but will always appear in the same order if
* included.
*/
public static final String P_VIEW_MENU = TeamUIPlugin.ID + ".P_VIEW_MENU"; //$NON-NLS-1$
/**
* The configuration property that defines the filter id that
* determines which object contribution actions appear in the
* context menu for the page. This defaults to the id of the
* participant but can be set to another id or <code>null</code>
* @since 3.1
*/
public static final String P_OBJECT_CONTRIBUTION_ID = TeamUIPlugin.ID + ".P_OBJECT_CONTRIBUTION_ID"; //$NON-NLS-1$
/**
* Property constant for the type of comparison used to create
* the <code>SyncInfo</code> in the P_SYNC_INFO_SET property.
* If the comparison type is <code>THREE_WAY</code> then
* modes selection applies.
*/
public static final String P_COMPARISON_TYPE = TeamUIPlugin.ID + ".P_COMPARISON_TYPE"; //$NON-NLS-1$
/**
* Property constant for the mode used to filter the visible
* elements of the model. The value can be one of the mode integer
* constants.
*/
public static final String P_MODE = TeamUIPlugin.ID + ".P_SYNCVIEWPAGE_MODE"; //$NON-NLS-1$
/**
* Property constant which indicates which modes are to be available to the user.
* The value is to be an integer that combines one or more of the
* mode bit values.
* Either <code>null</code> or <code>0</code> can be used to indicate that
* mode filtering is not supported.
*/
public static final String P_SUPPORTED_MODES = TeamUIPlugin.ID + ".P_SUPPORTED_MODES"; //$NON-NLS-1$
/**
* Property constant for the id of the viewer to be used for this page.
* The viewer id corresponds to the viewer definition in the Common
* Navigator framework.
*
* @since 3.2
*/
public static final String P_VIEWER_ID = TeamUIPlugin.ID + ".P_VIEWER_ID"; //$NON-NLS-1$
/**
* Property constant for the description (String) of the page that appears
* as the description of the view when the page is active.
*
* @since 3.2
*/
public static final String P_PAGE_DESCRIPTION = TeamUIPlugin.ID + ".P_PAGE_DESCRIPTION"; //$NON-NLS-1$
/**
* The id of the synchronize group the determines where the synchronize
* actions appear.
*/
public static final String SYNCHRONIZE_GROUP = "synchronize"; //$NON-NLS-1$
/**
* The id of the navigate group that determines where the navigation
* actions appear
*/
public static final String NAVIGATE_GROUP = "navigate"; //$NON-NLS-1$
/**
* The id of the sort group that determines where sort
* actions or submenus appear.
* @since 3.1
*/
public final static String SORT_GROUP = "sort"; //$NON-NLS-1$
/**
* The id of the mode group that determines where the mode selection
* actions appear
*/
public static final String MODE_GROUP = "modes"; //$NON-NLS-1$
/**
* The id of the file group that determines where the file
* actions appear. File actions include the open actions.
*/
public static final String FILE_GROUP = "file"; //$NON-NLS-1$
/**
* The id of the edit group that determines where the edit
* actions appear (e.g. move and delete).
*/
public static final String EDIT_GROUP = "edit"; //$NON-NLS-1$
/**
* The id of the preferences group that determines whether the preferences
* actions appear in the view drop-down.
*/
public static final String PREFERENCES_GROUP = "preferences"; //$NON-NLS-1$
/**
* The id of the group that determines where workbench object contributions
* should appear. This group will only be used if there is an
* OBJECT_CONTRIBUTION_ID set in the configuration
* @since 3.1
*/
public static final String OBJECT_CONTRIBUTIONS_GROUP = IWorkbenchActionConstants.MB_ADDITIONS;
/**
* The id of the layout group that determines whether the layout selection
* actions appear in the view drop-down or toolbar.
*/
public static final String LAYOUT_GROUP = "layout"; //$NON-NLS-1$
/**
* These are the default groups used for the context menu of a page.
* Clients can remove, add and change the ordering for groups in
* the context menu.
*/
public static final String[] DEFAULT_CONTEXT_MENU = new String[] { FILE_GROUP, EDIT_GROUP, SYNCHRONIZE_GROUP, NAVIGATE_GROUP, SORT_GROUP, OBJECT_CONTRIBUTIONS_GROUP};
/**
* These are the default groups used for the toolbar of a page.
* These groups will always appear in this order in the toolbar.
* Clients can disable one or more of these groups by setting
* the <code>P_TOOLBAR_MENU</code> property to an array that
* contains a subset of these. Clients can also add groups
* by adding new unique group ids to the array. Added groups
* will appear in the order specified but after the default groups.
*/
public static final String[] DEFAULT_TOOLBAR_MENU = new String[] { SYNCHRONIZE_GROUP, NAVIGATE_GROUP, MODE_GROUP, LAYOUT_GROUP };
/**
* These are the default groups used for the drop-down view menu of a page.
* These groups will always appear in this order in the view menu.
* Clients can disable one or more of these groups by setting
* the <code>P_VIEW_MENU</code> property to an array that
* contains a subset of these. Clients can also add groups
* by adding new unique group ids to the array. Added groups
* will appear in the order specified but after the default groups.
*/
public static final String[] DEFAULT_VIEW_MENU = new String[] { LAYOUT_GROUP, MODE_GROUP, SYNCHRONIZE_GROUP, PREFERENCES_GROUP };
/**
* Comparison type constants
*/
public final static String TWO_WAY = "two-way"; //$NON-NLS-1$
public final static String THREE_WAY = "three-way"; //$NON-NLS-1$
/**
* Modes are direction filters for the view
*/
public final static int INCOMING_MODE = 0x1;
public final static int OUTGOING_MODE = 0x2;
public final static int BOTH_MODE = 0x4;
public final static int CONFLICTING_MODE = 0x8;
public final static int ALL_MODES = INCOMING_MODE | OUTGOING_MODE | CONFLICTING_MODE | BOTH_MODE;
/**
* Return the participant associated with this configuration.
* @return the participant
*/
public abstract ISynchronizeParticipant getParticipant();
/**
* Return the site which provides access to certain workbench
* services.
* @return the page site
*/
public abstract ISynchronizePageSite getSite();
/**
* Return the page created from and associated with this
* configuration.
* @return Returns the page for this configuration
*/
public ISynchronizePage getPage();
/**
* Set the page for this configuration. This method should only
* be called once by the {@link ISynchronizeParticipant} that created
* the page.
* @param page the configuration's page
*/
public void setPage(ISynchronizePage page);
/**
* Add a property change listener to the configuration.
* Registered listeners will receive notification when
* any property changes.
* @param listener a property change listener
*/
public abstract void addPropertyChangeListener(IPropertyChangeListener listener);
/**
* Remove the registered change listener. Removing an unregistered listener
* has no effects.
* @param listener a property change listener
*/
public abstract void removePropertyChangeListener(IPropertyChangeListener listener);
/**
* Sets the property with the given name.
* If the new value differs from the old a <code>PropertyChangeEvent</code>
* is sent to registered listeners.
*
* @param key the name of the property to set
* @param newValue the new value of the property
*/
public abstract void setProperty(String key, Object newValue);
/**
* Returns the property with the given name, or <code>null</code>
* if no such property exists.
*
* @param key the name of the property to retrieve
* @return the property with the given name, or <code>null</code> if not found
*/
public abstract Object getProperty(String key);
/**
* Register the action group with the configuration. The
* registered action groups will have the opportunity to add
* actions to the action bars and context menu of the synchronize
* page created using the configuration.
* @param group a synchronize page action group
*/
public abstract void addActionContribution(SynchronizePageActionGroup group);
/**
* Remove a previously registered action group. Removing
* a group that is not registered has no effect.
* @param group a synchronize page action group
*/
public abstract void removeActionContribution(SynchronizePageActionGroup group);
/**
* Add a label decorator to the page configuration.
* @param decorator a label decorator
*/
public void addLabelDecorator(ILabelDecorator decorator);
/**
* Set the groups that are to be added to the menu identified
* by the menu property id.
* @param menuPropertyId the menu property id (one of <code>P_CONTEXT_MENU</code>,
* <code>P_VIEW_MENU</code> or <code>P_TOOLBAR_MENU</code>)
* @param groups a array of groups Ids
*/
public void setMenuGroups(String menuPropertyId, String[] groups);
/**
* Adds a menu group of the given id to the end of the menu groups list
* for the given menu property id.
* @param menuPropertyId the menu property id (one of <code>P_CONTEXT_MENU</code>,
* <code>P_VIEW_MENU</code> or <code>P_TOOLBAR_MENU</code>)
* @param groupId the id of the group to be added to the end of the menu
* group list
*/
public void addMenuGroup(String menuPropertyId, String groupId);
/**
* Returns whether the given group appears in the given menu
* @param menuPropertyId the property id that identifies the menu
* @param groupId the id of the group
* @return <code>true</code> if the group identified by the groupId appears
* in the menu identified by the menuPropertyId and <code>false</code>
* otherwise
*/
public abstract boolean hasMenuGroup(String menuPropertyId, String groupId);
/**
* Return the value of the P_MODE property of this configuration.
* @return the mode property value
*/
int getMode();
/**
* Set the P_MODE property of this configuration to the
* given mode flag (one of <code>INCOMING_MODE</code>,
* <code>OUTGOING_MODE</code>, <code>BOTH_MODE</code>
* or <code>CONFLICTING_MODE</code>).
* @param mode the mode value
*/
void setMode(int mode);
/**
* Return the value of the P_SUPPORTED_MODES property of this configuration.
* @return the supported modes property value
*/
int getSupportedModes();
/**
* Set the P_SUPPORTED_MODES property of this configuration to the
* given combination of one or more mode flags (<code>INCOMING_MODE</code>,
* <code>OUTGOING_MODE</code>, <code>BOTH_MODE</code>
* and <code>CONFLICTING_MODE</code>).
* @param modes the supported modes
*/
void setSupportedModes(int modes);
/**
* Return the set associated with the P_SYNC_INFO_SET property
* or <code>null</code> if the property is not set.
* @return the set associated with the P_SYNC_INFO_SET property
* or <code>null</code> if the property is not set
*/
public abstract SyncInfoSet getSyncInfoSet();
/**
* Return the comparison type used by the page's <code>SyncInfo</code>
* modes.
* @return comparison type (could be <code>TWO_WAY</code>, <code>THREE_WAY</code>
* or a custom type).
*/
String getComparisonType();
/**
* Set the comparison type used by the page's <code>SyncInfo</code>
* modes. The default type is <code>THREE_WAY</code>.
* @param type the comparison type (could be <code>TWO_WAY</code>, <code>THREE_WAY</code>
* or a custom type).
*/
void setComparisonType(String type);
/**
* Sets the runnable context that can be used by the page's
* actions to display progress.
* @param context a runnable context (or null)
*/
void setRunnableContext(IRunnableContext context);
/**
* Return the runnable context. If <code>null</code> is returned,
* actions can use their own method of progress feedback either
* using a background job or the progress service
* @return a runnable context (or <code>null</code>)
*/
IRunnableContext getRunnableContext();
/**
* Return the id of the viewer to which this configuration is
* associated.
* @return the id of the viewer to which this configuration is
* associated
* @since 3.2
*/
String getViewerId();
}