001: /*******************************************************************************
002: * Copyright (c) 2007 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.pde.internal.ui.wizards.provisioner.update;
011:
012: import java.util.ArrayList;
013: import java.util.List;
014:
015: import org.eclipse.jface.viewers.ISelectionChangedListener;
016: import org.eclipse.jface.viewers.IStructuredContentProvider;
017: import org.eclipse.jface.viewers.IStructuredSelection;
018: import org.eclipse.jface.viewers.LabelProvider;
019: import org.eclipse.jface.viewers.SelectionChangedEvent;
020: import org.eclipse.jface.viewers.TableViewer;
021: import org.eclipse.jface.viewers.Viewer;
022: import org.eclipse.jface.window.Window;
023: import org.eclipse.jface.wizard.WizardPage;
024: import org.eclipse.pde.internal.ui.IHelpContextIds;
025: import org.eclipse.pde.internal.ui.PDELabelProvider;
026: import org.eclipse.pde.internal.ui.PDEPlugin;
027: import org.eclipse.pde.internal.ui.PDEPluginImages;
028: import org.eclipse.pde.internal.ui.PDEUIMessages;
029: import org.eclipse.pde.internal.ui.util.SWTUtil;
030: import org.eclipse.swt.SWT;
031: import org.eclipse.swt.events.KeyAdapter;
032: import org.eclipse.swt.events.KeyEvent;
033: import org.eclipse.swt.events.SelectionAdapter;
034: import org.eclipse.swt.events.SelectionEvent;
035: import org.eclipse.swt.graphics.Image;
036: import org.eclipse.swt.layout.GridData;
037: import org.eclipse.swt.layout.GridLayout;
038: import org.eclipse.swt.widgets.Button;
039: import org.eclipse.swt.widgets.Composite;
040: import org.eclipse.swt.widgets.Label;
041: import org.eclipse.ui.PlatformUI;
042:
043: public class UpdateSiteProvisionerPage extends WizardPage {
044:
045: private List fElements = new ArrayList();
046: private Button fAddButton;
047: private Button fRemoveButton;
048: private Button fEditButton;
049: private TableViewer fViewer;
050:
051: class UpdateSiteContentProvider implements
052: IStructuredContentProvider {
053:
054: public Object[] getElements(Object inputElement) {
055: if (inputElement instanceof List)
056: return ((List) inputElement).toArray();
057: return null;
058: }
059:
060: public void dispose() {
061: }
062:
063: public void inputChanged(Viewer viewer, Object oldInput,
064: Object newInput) {
065: }
066:
067: }
068:
069: protected UpdateSiteProvisionerPage(String pageName) {
070: super (pageName);
071: setTitle(PDEUIMessages.UpdateSiteWizardPage_title);
072: setDescription(PDEUIMessages.UpdateSiteWizardPage_description);
073: setPageComplete(false);
074: }
075:
076: public void createControl(Composite parent) {
077: Composite client = new Composite(parent, SWT.NONE);
078: GridLayout layout = new GridLayout();
079: layout.marginWidth = 2;
080: layout.numColumns = 2;
081: client.setLayout(layout);
082: client.setLayoutData(new GridData(GridData.FILL_BOTH));
083:
084: Label label = new Label(client, SWT.None);
085: label.setText(PDEUIMessages.UpdateSiteWizardPage_label);
086: GridData gd = new GridData();
087: gd.horizontalSpan = 2;
088: label.setLayoutData(gd);
089:
090: fViewer = new TableViewer(client, SWT.BORDER);
091: fViewer.setContentProvider(new UpdateSiteContentProvider());
092: fViewer.setLabelProvider(new LabelProvider() {
093:
094: public Image getImage(Object element) {
095: PDELabelProvider provider = PDEPlugin.getDefault()
096: .getLabelProvider();
097: return provider.get(PDEPluginImages.DESC_SITE_OBJ);
098: }
099:
100: public String getText(Object element) {
101: IUpdateSiteProvisionerEntry entry = (IUpdateSiteProvisionerEntry) element;
102: return entry.getSiteLocation();
103: }
104:
105: });
106: fViewer.setInput(fElements);
107: gd = new GridData(GridData.FILL_BOTH);
108: gd.verticalSpan = 3;
109: fViewer.getControl().setLayoutData(gd);
110:
111: fViewer
112: .addSelectionChangedListener(new ISelectionChangedListener() {
113:
114: public void selectionChanged(
115: SelectionChangedEvent event) {
116: updateButtons();
117: }
118:
119: });
120:
121: fViewer.getControl().addKeyListener(new KeyAdapter() {
122: public void keyPressed(KeyEvent event) {
123: if (event.character == SWT.DEL && event.stateMask == 0) {
124: if (fViewer.getSelection() != null) {
125: handleRemove();
126: }
127: }
128: }
129: });
130:
131: PlatformUI.getWorkbench().getHelpSystem().setHelp(client,
132: IHelpContextIds.UPDATE_SITE_PROVISIONING_PAGE);
133: createButtons(client);
134: setControl(client);
135: }
136:
137: protected void createButtons(Composite parent) {
138: fAddButton = new Button(parent, SWT.PUSH);
139: fAddButton.setText(PDEUIMessages.UpdateSiteWizardPage_add);
140: fAddButton.setLayoutData(new GridData(
141: GridData.VERTICAL_ALIGN_BEGINNING));
142: SWTUtil.setButtonDimensionHint(fAddButton);
143: fAddButton.addSelectionListener(new SelectionAdapter() {
144: public void widgetSelected(SelectionEvent e) {
145: handleAdd();
146: }
147: });
148:
149: fEditButton = new Button(parent, SWT.PUSH);
150: fEditButton.setText(PDEUIMessages.UpdateSiteWizardPage_edit);
151: fEditButton.setLayoutData(new GridData(
152: GridData.VERTICAL_ALIGN_BEGINNING));
153: SWTUtil.setButtonDimensionHint(fEditButton);
154: fEditButton.addSelectionListener(new SelectionAdapter() {
155: public void widgetSelected(SelectionEvent e) {
156: IUpdateSiteProvisionerEntry entry = (IUpdateSiteProvisionerEntry) ((IStructuredSelection) fViewer
157: .getSelection()).getFirstElement();
158: handleEdit(entry);
159: }
160: });
161:
162: fRemoveButton = new Button(parent, SWT.PUSH);
163: fRemoveButton
164: .setText(PDEUIMessages.UpdateSiteWizardPage_remove);
165: fRemoveButton.setLayoutData(new GridData(
166: GridData.VERTICAL_ALIGN_BEGINNING));
167: SWTUtil.setButtonDimensionHint(fRemoveButton);
168: fRemoveButton.addSelectionListener(new SelectionAdapter() {
169: public void widgetSelected(SelectionEvent e) {
170: handleRemove();
171: }
172: });
173: updateButtons();
174: }
175:
176: protected void handleRemove() {
177: Object[] elements = ((IStructuredSelection) fViewer
178: .getSelection()).toArray();
179: for (int i = 0; i < elements.length; i++)
180: fElements.remove(elements[i]);
181:
182: fViewer.refresh();
183: updateButtons();
184: fViewer.getTable().select(fElements.size() - 1);
185: setPageComplete(!fElements.isEmpty());
186: }
187:
188: protected void handleAdd() {
189: UpdateSiteProvisionerDialog dialog = new UpdateSiteProvisionerDialog(
190: getShell(), null, null,
191: PDEUIMessages.UpdateSiteProvisionerDialog_addTitle);
192: int status = dialog.open();
193: if (status == Window.OK) {
194: fElements.add(dialog.getEntry());
195: fViewer.refresh();
196: fViewer.getTable().select(
197: fElements.indexOf(dialog.getEntry()));
198: setPageComplete(true);
199: updateButtons();
200: }
201: }
202:
203: protected void handleEdit(IUpdateSiteProvisionerEntry entry) {
204: UpdateSiteProvisionerDialog dialog = new UpdateSiteProvisionerDialog(
205: getShell(), entry.getInstallLocation(), entry
206: .getSiteLocation(),
207: PDEUIMessages.UpdateSiteProvisionerDialog_editTitle);
208: int status = dialog.open();
209: if (status == Window.OK) {
210: fElements.remove(entry);
211: fElements.add(dialog.getEntry());
212: fViewer.refresh();
213: fViewer.getTable().select(
214: fElements.indexOf(dialog.getEntry()));
215: setPageComplete(true);
216: }
217: updateButtons();
218: }
219:
220: protected void updateButtons() {
221: int num = fViewer.getTable().getSelectionCount();
222: fRemoveButton.setEnabled(num > 0);
223: fEditButton.setEnabled(num == 1);
224: }
225:
226: public IUpdateSiteProvisionerEntry[] getEntries() {
227: return (IUpdateSiteProvisionerEntry[]) fElements
228: .toArray(new UpdateSiteProvisionerEntry[fElements
229: .size()]);
230: }
231:
232: }
|