Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagSelectionArea.java')
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagSelectionArea.java658
1 files changed, 0 insertions, 658 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagSelectionArea.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagSelectionArea.java
deleted file mode 100644
index 7db11ca01..000000000
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/tags/TagSelectionArea.java
+++ /dev/null
@@ -1,658 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
- * 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:
- * IBM Corporation - initial API and implementation
- * Brock Janiczak <brockj@tpg.com.au> - Bug 182267 "Add Date..." button shouldn't be visible in merge wizard
- *******************************************************************************/
-package org.eclipse.team.internal.ccvs.ui.tags;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.jface.action.*;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.operation.IRunnableContext;
-import org.eclipse.jface.viewers.*;
-import org.eclipse.osgi.util.NLS;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.*;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.*;
-import org.eclipse.team.internal.ccvs.core.CVSTag;
-import org.eclipse.team.internal.ccvs.core.ICVSRepositoryLocation;
-import org.eclipse.team.internal.ccvs.ui.CVSUIMessages;
-import org.eclipse.team.internal.ccvs.ui.CVSUIPlugin;
-import org.eclipse.team.internal.ccvs.ui.repo.NewDateTagAction;
-import org.eclipse.team.internal.ccvs.ui.repo.RepositoryManager;
-import org.eclipse.team.internal.ccvs.ui.tags.TagSourceWorkbenchAdapter.ProjectElementComparator;
-import org.eclipse.team.internal.ui.PixelConverter;
-import org.eclipse.team.internal.ui.SWTUtils;
-import org.eclipse.team.internal.ui.actions.TeamAction;
-import org.eclipse.team.internal.ui.dialogs.DialogArea;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.model.WorkbenchContentProvider;
-import org.eclipse.ui.model.WorkbenchLabelProvider;
-import org.eclipse.ui.part.PageBook;
-
-/**
- * A dialog area that displays a list of tags for selection and supports
- * filtering of the displayed tags.
- */
-public class TagSelectionArea extends DialogArea {
-
- private static int COLUMN_TRIM = "carbon".equals(SWT.getPlatform()) ? 24 : 3; //$NON-NLS-1$
-
- private static int ICON_WIDTH = 40;
-
- /*
- * Please see bug 184660
- */
- private static final int SAFETY_MARGIN = 50;
-
- /*
- * Property constant which identifies the selected tag or
- * null if no tag is selected
- */
- public static final String SELECTED_TAG = "selectedTag"; //$NON-NLS-1$
-
- /*
- * Property constant which indicates that a tag has been selected in such
- * a way as to indicate that this is the desired tag (e.g double-click)
- */
- public static final String OPEN_SELECTED_TAG = "openSelectedTag"; //$NON-NLS-1$
-
- /*
- * Constants used to configure which tags are shown
- */
- public static final int INCLUDE_HEAD_TAG = TagSourceWorkbenchAdapter.INCLUDE_HEAD_TAG;
- public static final int INCLUDE_BASE_TAG = TagSourceWorkbenchAdapter.INCLUDE_BASE_TAG;
- public static final int INCLUDE_BRANCHES = TagSourceWorkbenchAdapter.INCLUDE_BRANCHES;
- public static final int INCLUDE_VERSIONS = TagSourceWorkbenchAdapter.INCLUDE_VERSIONS;
- public static final int INCLUDE_DATES = TagSourceWorkbenchAdapter.INCLUDE_DATES;
- public static final int INCLUDE_ALL_TAGS = TagSourceWorkbenchAdapter.INCLUDE_ALL_TAGS;
-
- private String tagAreaLabel;
- private final int includeFlags;
- private CVSTag selection;
- private String helpContext;
- private Text filterText;
- private TagSource tagSource;
- private final Shell shell;
- private TagRefreshButtonArea tagRefreshArea;
- private final TagSource.ITagSourceChangeListener listener = new TagSource.ITagSourceChangeListener() {
- public void tagsChanged(TagSource source) {
- Shell shell = getShell();
- if (!shell.isDisposed()) {
- shell.getDisplay().syncExec(new Runnable() {
- public void run() {
- refresh();
- }
- });
- }
- }
- };
- private final DisposeListener disposeListener = new DisposeListener() {
- public void widgetDisposed(DisposeEvent e) {
- if (tagSource != null)
- tagSource.removeListener(listener);
- }
- };
-
- private PageBook switcher;
- private TreeViewer tagTree;
- private TableViewer tagTable;
- private boolean treeVisible = true;
- private boolean includeFilterInputArea = true;
- private String filterPattern = ""; //$NON-NLS-1$
-
- private IRunnableContext context;
-
- public TagSelectionArea(Shell shell, TagSource tagSource, int includeFlags, String helpContext) {
- this.shell = shell;
- this.includeFlags = includeFlags;
- this.helpContext = helpContext;
- this.tagSource = tagSource;
- setSelection(null);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.team.internal.ui.dialogs.DialogArea#createArea(org.eclipse.swt.widgets.Composite)
- */
- public void createArea(Composite parent) {
- initializeDialogUnits(parent);
- Dialog.applyDialogFont(parent);
- final PixelConverter converter= new PixelConverter(parent);
-
- // Create a composite for the entire area
- Composite composite= new Composite(parent, SWT.NONE);
- composite.setLayoutData(SWTUtils.createHVFillGridData());
- composite.setLayout(SWTUtils.createGridLayout(1, converter, SWTUtils.MARGINS_NONE));
-
- // Add F1 help
- if (helpContext != null) {
- PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, helpContext);
- }
-
- // Create the tree area and refresh buttons with the possibility to add stuff in between
- createTagDisplayArea(composite);
- createCustomArea(composite);
- createRefreshButtons(composite);
-
- Dialog.applyDialogFont(parent);
- updateTagDisplay(true);
- }
-
- private void createTagDisplayArea(Composite parent) {
- Composite inner = createGrabbingComposite(parent, 1);
- if (isIncludeFilterInputArea()) {
- createFilterInput(inner);
- createWrappingLabel(inner, CVSUIMessages.TagSelectionArea_0, 1);
- } else {
- createWrappingLabel(inner, NLS.bind(CVSUIMessages.TagSelectionArea_1, new String[] { getTagAreaLabel() }), 1);
- }
- switcher = new PageBook(inner, SWT.NONE);
- GridData gridData = new GridData(GridData.FILL_BOTH);
- gridData.heightHint = 0;
- gridData.widthHint = 0;
- switcher.setLayoutData(gridData);
- tagTree = createTree(switcher);
- tagTable = createTable(switcher);
- }
-
- private void createFilterInput(Composite inner) {
- createWrappingLabel(inner, NLS.bind(CVSUIMessages.TagSelectionArea_2, new String[] { getTagAreaLabel() }), 1);
- filterText = createText(inner, 1);
- filterText.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- setFilter(filterText.getText());
- }
- });
- filterText.addKeyListener(new KeyListener() {
- public void keyPressed(KeyEvent e) {
- if (e.keyCode == SWT.ARROW_DOWN && e.stateMask == 0) {
- tagTable.getControl().setFocus();
- }
- }
- public void keyReleased(KeyEvent e) {
- // Ignore
- }
- });
- }
-
- /**
- * Return the label that should be used for the tag area.
- * It should not have any trailing punctuations as the tag area
- * may position it differently depending on whether the filter
- * text input is included in the area.
- * @return the tag area label
- */
- public String getTagAreaLabel() {
- if (tagAreaLabel == null)
- tagAreaLabel = CVSUIMessages.TagSelectionArea_3;
- return tagAreaLabel;
- }
-
- /**
- * Set the label that should be used for the tag area.
- * It should not have any trailing punctuations as the tag area
- * may position it differently depending on whether the filter
- * text input is included in the area.
- * @param tagAreaLabel the tag area label
- */
- public void setTagAreaLabel(String tagAreaLabel) {
- this.tagAreaLabel = tagAreaLabel;
- }
-
- /**
- * Update the tag display to show the tags that match the
- * include flags and the filter entered by the user.
- */
- protected void updateTagDisplay(boolean firstTime) {
- String filter = getFilterString();
- if ((filter != null && filter.length() > 0) || isTableOnly()) {
- // Show the table and filter it accordingly
- try {
- switcher.setRedraw(false);
- treeVisible = false;
- switcher.showPage(tagTable.getControl());
- FilteredTagList list = (FilteredTagList)tagTable.getInput();
- list.setPattern(filter);
- tagTable.refresh();
- int maxWidth = getMaxWidth(list.getChildren(null));
- if (maxWidth > 0) {
- maxWidth = maxWidth + ICON_WIDTH + COLUMN_TRIM + SAFETY_MARGIN; /* space for the tag icon */
- tagTable.getTable().getColumn(0).setWidth(maxWidth);
- }
- if (filterText == null || filter == null || filter.length() == 0) {
- setSelection(selection);
- } else {
- // Only set the top selection if there is a filter from the filter text
- // of this area. This is done to avoid selection loops
- selectTopElement();
- }
- } finally {
- switcher.setRedraw(true);
- }
- } else {
- // Show the tree
- if (!isTreeVisible() || firstTime) {
- try {
- switcher.setRedraw(false);
- treeVisible = true;
- switcher.showPage(tagTree.getControl());
- tagTree.refresh();
- setSelection(selection);
- } finally {
- switcher.setRedraw(true);
- }
- }
- }
- }
-
- private int getMaxWidth(Object[] children) {
- PixelConverter converter = new PixelConverter(tagTable.getTable());
- int maxWidth = 0;
- for (int i = 0; i < children.length; i++) {
- Object object = children[i];
- if (object instanceof TagElement) {
- TagElement tag = (TagElement) object;
- int width = tag.getTag().getName().length();
- if (width > maxWidth) {
- maxWidth = width;
- }
- }
- }
- return converter.convertWidthInCharsToPixels(maxWidth);
- }
-
- /**
- * Return whether only a table should be used
- * @return whether only a table should be used
- */
- protected boolean isTableOnly() {
- return (includeFlags == INCLUDE_VERSIONS) || (includeFlags == INCLUDE_BRANCHES);
- }
-
- private String getFilterString() {
- return filterPattern;
- }
-
- /*
- * Select the top element in the tag table
- */
- private void selectTopElement() {
- if (tagTable.getTable().getItemCount() > 0) {
- TableItem item = tagTable.getTable().getItem(0);
- tagTable.getTable().setSelection(new TableItem[] { item });
- tagTable.setSelection(tagTable.getSelection());
- }
- }
-
- private FilteredTagList createFilteredInput() {
- return new FilteredTagList(tagSource, TagSource.convertIncludeFlaqsToTagTypes(includeFlags));
- }
-
- private Text createText(Composite parent, int horizontalSpan) {
- Text text = new Text(parent, SWT.SEARCH);
- GridData data = new GridData();
- data.horizontalSpan = horizontalSpan;
- data.horizontalAlignment = GridData.FILL;
- data.grabExcessHorizontalSpace = true;
- data.widthHint= 0;
- text.setLayoutData(data);
- return text;
- }
-
- protected void createRefreshButtons(Composite parent) {
- tagSource.addListener(listener);
- parent.addDisposeListener(disposeListener);
- Listener listener = null;
- if ((includeFlags & TagSourceWorkbenchAdapter.INCLUDE_DATES) != 0) {
- listener = new Listener() {
- public void handleEvent(Event event) {
- CVSTag dateTag = NewDateTagAction.getDateTag(getShell(), getLocation());
- addDateTag(dateTag);
- }
- };
- }
- tagRefreshArea = new TagRefreshButtonArea(shell, tagSource, listener);
- if (context != null)
- tagRefreshArea.setRunnableContext(context);
- tagRefreshArea.createArea(parent);
- }
-
- protected void createTreeMenu(TreeViewer tagTree) {
- if ((includeFlags & TagSourceWorkbenchAdapter.INCLUDE_DATES) != 0) {
- // Create the popup menu
- MenuManager menuMgr = new MenuManager();
- Tree tree = tagTree.getTree();
- Menu menu = menuMgr.createContextMenu(tree);
- menuMgr.addMenuListener(new IMenuListener() {
- public void menuAboutToShow(IMenuManager manager) {
- addMenuItemActions(manager);
- }
-
- });
- menuMgr.setRemoveAllWhenShown(true);
- tree.setMenu(menu);
- }
- }
-
- /**
- * Create aq custom area that is below the tag selection area but above the refresh busson group
- * @param parent
- */
- protected void createCustomArea(Composite parent) {
- // No default custom area
- }
-
- protected TreeViewer createTree(Composite parent) {
- Tree tree = new Tree(parent, SWT.SINGLE | SWT.BORDER);
- GridData data = new GridData(GridData.FILL_BOTH);
- tree.setLayoutData(data);
- TreeViewer result = new TreeViewer(tree);
- initialize(result);
- result.getControl().addKeyListener(new KeyListener() {
- public void keyPressed(KeyEvent event) {
- handleKeyPressed(event);
- }
- public void keyReleased(KeyEvent event) {
- handleKeyReleased(event);
- }
- });
- result.setInput(createUnfilteredInput());
- createTreeMenu(result);
- return result;
- }
-
- protected TableViewer createTable(Composite parent) {
- Table table = new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);
- GridData data = new GridData(GridData.FILL_BOTH);
- table.setLayoutData(data);
- TableLayout layout = new TableLayout();
- layout.addColumnData(new ColumnWeightData(100));
- table.setLayout(layout);
- new TableColumn(table, SWT.NONE);
- TableViewer viewer = new TableViewer(table);
- initialize(viewer);
- viewer.setInput(createFilteredInput());
- return viewer;
-
- }
-
- private void initialize(StructuredViewer viewer) {
- viewer.setContentProvider(new WorkbenchContentProvider());
- viewer.setLabelProvider(new WorkbenchLabelProvider());
- viewer.setComparator(new ProjectElementComparator());
- viewer.addSelectionChangedListener(new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent event) {
- handleSelectionChange();
- }
- });
- // select and close on double click
- // To do: use defaultselection instead of double click
- viewer.getControl().addMouseListener(new MouseAdapter() {
- public void mouseDoubleClick(MouseEvent e) {
- CVSTag tag = internalGetSelectedTag();
- if (tag != null) {
- firePropertyChangeChange(OPEN_SELECTED_TAG, null, tag);
- }
- }
- });
- }
-
- private Object createUnfilteredInput() {
- return TagSourceWorkbenchAdapter.createInput(tagSource, includeFlags);
- }
-
- public void handleKeyPressed(KeyEvent event) {
- if (event.character == SWT.DEL && event.stateMask == 0) {
- deleteDateTag();
- }
- }
- private void deleteDateTag() {
- TagElement[] selectedDateTagElements = getSelectedDateTagElement();
- if (selectedDateTagElements.length == 0) return;
- for(int i = 0; i < selectedDateTagElements.length; i++){
- RepositoryManager mgr = CVSUIPlugin.getPlugin().getRepositoryManager();
- CVSTag tag = selectedDateTagElements[i].getTag();
- if(tag.getType() == CVSTag.DATE){
- mgr.removeDateTag(getLocation(),tag);
- }
- }
- tagTree.refresh();
- handleSelectionChange();
- }
-
- /**
- * Returns the selected date tag elements
- */
- private TagElement[] getSelectedDateTagElement() {
- ArrayList dateTagElements = null;
- IStructuredSelection selection = (IStructuredSelection)tagTree.getSelection();
- if (selection!=null && !selection.isEmpty()) {
- dateTagElements = new ArrayList();
- Iterator elements = selection.iterator();
- while (elements.hasNext()) {
- Object next = TeamAction.getAdapter(elements.next(), TagElement.class);
- if (next instanceof TagElement) {
- if(((TagElement)next).getTag().getType() == CVSTag.DATE){
- dateTagElements.add(next);
- }
- }
- }
- }
- if (dateTagElements != null && !dateTagElements.isEmpty()) {
- TagElement[] result = new TagElement[dateTagElements.size()];
- dateTagElements.toArray(result);
- return result;
- }
- return new TagElement[0];
- }
- private void addDateTag(CVSTag tag){
- if(tag == null) return;
- List dateTags = new ArrayList();
- ICVSRepositoryLocation location = getLocation();
- dateTags.addAll(Arrays.asList(CVSUIPlugin.getPlugin().getRepositoryManager().getDateTags(location)));
- if(!dateTags.contains( tag)){
- CVSUIPlugin.getPlugin().getRepositoryManager().addDateTag(location, tag);
- }
- try {
- tagTree.getControl().setRedraw(false);
- tagTree.refresh();
- setSelection(tag);
- } finally {
- tagTree.getControl().setRedraw(true);
- }
- handleSelectionChange();
- }
- private void addMenuItemActions(IMenuManager manager) {
- manager.add(new Action(CVSUIMessages.TagSelectionDialog_0) {
- public void run() {
- CVSTag dateTag = NewDateTagAction.getDateTag(getShell(), getLocation());
- addDateTag(dateTag);
- }
- });
- if(getSelectedDateTagElement().length > 0){
- manager.add(new Action(CVSUIMessages.TagSelectionDialog_1) {
- public void run() {
- deleteDateTag();
- }
- });
- }
- }
-
- protected void handleKeyReleased(KeyEvent event) {
- }
-
- /**
- * handle a selection change event from the visible tag display
- * (which could be either the table or the tree).
- */
- protected void handleSelectionChange() {
- CVSTag newSelection = internalGetSelectedTag();
- if (selection != null && newSelection != null && selection.equals(newSelection)) {
- // the selection hasn't change so return
- return;
- }
- CVSTag oldSelection = selection;
- selection = newSelection;
- firePropertyChangeChange(SELECTED_TAG, oldSelection, selection);
- }
-
- private CVSTag internalGetSelectedTag() {
- IStructuredSelection selection;
- if (isTreeVisible()) {
- selection = (IStructuredSelection)tagTree.getSelection();
- } else {
- selection = (IStructuredSelection)tagTable.getSelection();
- }
- Object o = selection.getFirstElement();
- if (o instanceof TagElement)
- return ((TagElement)o).getTag();
- return null;
- }
-
- private boolean isTreeVisible() {
- return treeVisible;
- }
-
- private ICVSRepositoryLocation getLocation(){
- return tagSource.getLocation();
- }
- public CVSTag getSelection() {
- return selection;
- }
- public Shell getShell() {
- return shell;
- }
-
- /**
- * Set the focus to the filter text widget
- */
- public void setFocus() {
- if (filterText != null)
- filterText.setFocus();
- else if (switcher != null)
- switcher.setFocus();
-
- // Refresh in case tags were added since the last time the area had focus
- refresh();
- }
-
- /**
- * Select the given tag
- * @param selectedTag the tag to be selected
- */
- public void setSelection(CVSTag selectedTag) {
- if (isTreeVisible())
- if (tagTree != null && !tagTree.getControl().isDisposed()) {
- // TODO: Hack to instantiate the model before revealing the selection
- tagTree.expandToLevel(2);
- tagTree.collapseAll();
- // Reveal the selection
- tagTree.reveal(new TagElement(selectedTag));
- tagTree.setSelection(new StructuredSelection(new TagElement(selectedTag)));
- }
- else
- if (tagTable != null && !tagTable.getControl().isDisposed()) {
- tagTable.setSelection(new StructuredSelection(new TagElement(selectedTag)));
- }
- }
-
- /**
- * Refresh the state of the tag selection area
- */
- public void refresh() {
- if (isTreeVisible()) {
- if (tagTree != null && !tagTree.getControl().isDisposed()) {
- tagTree.refresh();
- }
- } else {
- if (tagTable != null && !tagTable.getControl().isDisposed()) {
- tagTable.refresh();
- }
- }
- }
-
- public void refreshTagList() {
- tagRefreshArea.refresh(true);
- }
-
- /**
- * Set the enablement state of the area
- * @param enabled the enablement state
- */
- public void setEnabled(boolean enabled) {
- if (filterText != null)
- filterText.setEnabled(enabled);
- tagTree.getControl().setEnabled(enabled);
- tagTable.getControl().setEnabled(enabled);
- }
-
- /**
- * Set the tag source from which the displayed tags are determined
- * @param tagSource the source of the tags being displayed
- */
- public void setTagSource(TagSource tagSource) {
- if (this.tagSource != null) {
- this.tagSource.removeListener(listener);
- }
- this.tagSource = tagSource;
- this.tagSource.addListener(listener);
- tagRefreshArea.setTagSource(this.tagSource);
- setTreeAndTableInput();
- }
-
- private void setTreeAndTableInput() {
- if (tagTree != null) {
- tagTree.setInput(createUnfilteredInput());
- }
- if (tagTable != null) {
- tagTable.setInput(createFilteredInput());
- }
-
- }
-
- /**
- * Set whether the input filter text is to be included in the tag selection area.
- * If excluded, clientscan still set the filter text directly using
- * <code>setFilter</code>.
- * @param include whether filter text input should be included
- */
- public void setIncludeFilterInputArea(boolean include) {
- includeFilterInputArea = include;
- }
-
- /**
- * Return whether the input filter text is to be included in the tag selection area.
- * If excluded, clientscan still set the filter text directly using
- * <code>setFilter</code>.
- * @return whether filter text input should be included
- */
- public boolean isIncludeFilterInputArea() {
- return includeFilterInputArea;
- }
-
- /**
- * Set the text used to filter the tag list.
- * @param filter the filter pattern
- */
- public void setFilter(String filter) {
- this.filterPattern = filter;
- updateTagDisplay(false);
- }
-
- public void setRunnableContext(IRunnableContext context) {
- this.context = context;
- if (tagRefreshArea != null)
- tagRefreshArea.setRunnableContext(context);
- }
-}

Back to the top