KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > team > internal > ccvs > ui > wizards > TagSelectionWizardPage


1 /*******************************************************************************
2  * Copyright (c) 2000, 2004 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.team.internal.ccvs.ui.wizards;
12
13 import org.eclipse.jface.dialogs.Dialog;
14 import org.eclipse.jface.dialogs.IDialogConstants;
15 import org.eclipse.jface.resource.ImageDescriptor;
16 import org.eclipse.jface.viewers.*;
17 import org.eclipse.swt.SWT;
18 import org.eclipse.swt.events.*;
19 import org.eclipse.swt.layout.GridData;
20 import org.eclipse.swt.widgets.*;
21 import org.eclipse.team.internal.ccvs.core.*;
22 import org.eclipse.team.internal.ccvs.ui.*;
23 import org.eclipse.team.internal.ccvs.ui.Policy;
24 import org.eclipse.team.internal.ccvs.ui.merge.ProjectElement;
25 import org.eclipse.team.internal.ccvs.ui.merge.TagElement;
26 import org.eclipse.team.internal.ccvs.ui.merge.ProjectElement.ProjectElementSorter;
27 import org.eclipse.team.internal.ccvs.ui.repo.RepositorySorter;
28 import org.eclipse.ui.help.WorkbenchHelp;
29 import org.eclipse.ui.model.WorkbenchContentProvider;
30 import org.eclipse.ui.model.WorkbenchLabelProvider;
31
32 /**
33  * General tag selection page that allows the selection of a tag
34  * for a particular remote folder
35  */

36 public class TagSelectionWizardPage extends CVSWizardPage {
37
38     private TreeViewer tagTree;
39     private ICVSFolder[] remoteFolders;
40     private CVSTag selectedTag;
41     
42     // Needed to dynamicaly create refresh buttons
43
private Composite composite;
44     private Control buttons;
45     
46     private String JavaDoc label;
47     private int includeFlags;
48     
49     // Fields for allowing the use of the tag from the local workspace
50
boolean allowNoTag = false;
51     private Button useResourceTagButton;
52     private Button selectTagButton;
53     private boolean useResourceTag = false;
54     private String JavaDoc helpContextId;
55     
56     public TagSelectionWizardPage(String JavaDoc pageName, String JavaDoc title, ImageDescriptor titleImage, String JavaDoc description, String JavaDoc label, int includeFlags) {
57         super(pageName, title, titleImage, description);
58         this.label = label;
59         this.includeFlags = includeFlags;
60     }
61
62     public void setHelpContxtId(String JavaDoc helpContextId) {
63         this.helpContextId = helpContextId;
64     }
65     
66     /* (non-Javadoc)
67      * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
68      */

69     public void createControl(Composite parent) {
70         composite = createComposite(parent, 1);
71         setControl(composite);
72         
73         // set F1 help
74
if (helpContextId != null)
75             WorkbenchHelp.setHelp(composite, helpContextId);
76         
77         if (allowNoTag) {
78             SelectionListener listener = new SelectionAdapter() {
79                 public void widgetSelected(SelectionEvent e) {
80                     useResourceTag = useResourceTagButton.getSelection();
81                     updateEnablement();
82                 }
83             };
84             useResourceTag = true;
85             useResourceTagButton = createRadioButton(composite, Policy.bind("TagSelectionWizardPage.0"), 1); //$NON-NLS-1$
86
selectTagButton = createRadioButton(composite, Policy.bind("TagSelectionWizardPage.1"), 1); //$NON-NLS-1$
87
useResourceTagButton.setSelection(useResourceTag);
88             selectTagButton.setSelection(!useResourceTag);
89             useResourceTagButton.addSelectionListener(listener);
90             selectTagButton.addSelectionListener(listener);
91         } else if (label != null) {
92             createWrappingLabel(composite, label, 0);
93         }
94         
95         tagTree = createTree(composite);
96         tagTree.setSorter(new ProjectElementSorter());
97         setInput();
98         
99         Dialog.applyDialogFont(parent);
100     }
101     
102     private void setInput() {
103         if (remoteFolders != null
104                 && remoteFolders.length > 0
105                 && tagTree != null
106                 && !tagTree.getControl().isDisposed()) {
107             tagTree.setInput(new ProjectElement(remoteFolders[0], includeFlags));
108             try {
109                 selectedTag = remoteFolders[0].getFolderSyncInfo().getTag();
110             } catch (CVSException e) {
111                 CVSUIPlugin.log(e);
112             }
113             if (selectedTag == null) {
114                 selectedTag = CVSTag.DEFAULT;
115             }
116             // TODO: Hack to instantiate the model before revealing the selection
117
tagTree.expandToLevel(2);
118             tagTree.collapseAll();
119             // Reveal the selection
120
tagTree.reveal(new TagElement(selectedTag));
121             tagTree.setSelection(new StructuredSelection(new TagElement(selectedTag)));
122             if (buttons != null) {
123                 buttons.dispose();
124                 buttons = null;
125             }
126             Runnable JavaDoc refresh = new Runnable JavaDoc() {
127                 public void run() {
128                     getShell().getDisplay().syncExec(new Runnable JavaDoc() {
129                         public void run() {
130                             tagTree.refresh();
131                         }
132                     });
133                 }
134             };
135             buttons = TagConfigurationDialog.createTagDefinitionButtons(getShell(), composite, remoteFolders,
136                                                           convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT),
137                                                           convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH),
138                                                           refresh, refresh);
139             composite.layout();
140         }
141     }
142
143     private TreeViewer createTree(Composite parent) {
144         Tree tree = new Tree(parent, SWT.SINGLE | SWT.BORDER);
145         GridData gridData = new GridData(GridData.FILL_BOTH);
146         tree.setLayoutData(gridData);
147         gridData.heightHint = 150;
148         TreeViewer result = new TreeViewer(tree);
149         result.setContentProvider(new WorkbenchContentProvider());
150         result.setLabelProvider(new WorkbenchLabelProvider());
151         result.addSelectionChangedListener(new ISelectionChangedListener() {
152             public void selectionChanged(SelectionChangedEvent event) {
153                 IStructuredSelection selection = (IStructuredSelection)event.getSelection();
154                 if (selection.isEmpty() || !(selection.getFirstElement() instanceof TagElement)) {
155                     selectedTag = null;
156                 } else {
157                     selectedTag = ((TagElement)selection.getFirstElement()).getTag();
158                 }
159                 updateEnablement();
160             }
161         });
162         result.getTree().addMouseListener(new MouseAdapter() {
163             public void mouseDoubleClick(MouseEvent e) {
164                 IStructuredSelection selection = (IStructuredSelection)tagTree.getSelection();
165                 if (!selection.isEmpty() && (selection.getFirstElement() instanceof TagElement)) {
166                     gotoNextPage();
167                 }
168             }
169         });
170         result.setSorter(new RepositorySorter());
171         
172         return result;
173     }
174     
175     private void updateEnablement() {
176         tagTree.getControl().setEnabled(!useResourceTag);
177         setPageComplete(useResourceTag || selectedTag != null);
178     }
179     
180     public ICVSFolder getFolder() {
181         return remoteFolders[0];
182     }
183     
184     public void setFolder(ICVSFolder remote) {
185         setFolders(new ICVSFolder[] { remote });
186     }
187     
188     public CVSTag getSelectedTag() {
189         if (useResourceTag)
190             return null;
191         return selectedTag;
192     }
193     
194     protected void gotoNextPage() {
195         TagSelectionWizardPage.this.getContainer().showPage(getNextPage());
196     }
197
198     public void setFolders(ICVSFolder[] remoteFolders) {
199         this.remoteFolders = remoteFolders;
200         setInput();
201     }
202     
203     public void setAllowNoTag(boolean b) {
204         allowNoTag = b;
205     }
206 }
207
Popular Tags