Java tutorial
/******************************************************************************* * Copyright (c) 2000, 2008 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 *******************************************************************************/ /* * Created on Sep 29, 2003 */ package com.siteview.mde.internal.ui.editor.site; import org.eclipse.core.resources.IFolder; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.action.*; import org.eclipse.jface.viewers.*; import com.siteview.mde.core.IModelChangedEvent; import com.siteview.mde.internal.core.isite.*; import com.siteview.mde.internal.ui.MDEUIMessages; import com.siteview.mde.internal.ui.editor.*; import com.siteview.mde.internal.ui.elements.DefaultContentProvider; import com.siteview.mde.internal.ui.util.SWTUtil; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.model.WorkbenchContentProvider; /** * */ public class ArchiveSection extends MDESection { private Table fTable; private TableViewer fViewer; private ISiteModel fModel; private Button fAddButton; private Button fEditButton; private Button fRemoveButton; class FolderProvider extends WorkbenchContentProvider { public boolean hasChildren(Object element) { Object[] children = getChildren(element); for (int i = 0; i < children.length; i++) { if (children[i] instanceof IFolder) { return true; } } return false; } } class ContentProvider extends DefaultContentProvider implements IStructuredContentProvider { public Object[] getElements(Object parent) { ISiteModel model = (ISiteModel) parent; return model.getSite().getArchives(); } } class ArchiveLabelProvider extends LabelProvider implements ITableLabelProvider { public String getColumnText(Object obj, int index) { ISiteArchive archive = (ISiteArchive) obj; switch (index) { case 0: return archive.getPath(); case 1: return archive.getURL(); } return ""; //$NON-NLS-1$ } public Image getColumnImage(Object obj, int index) { return null; } } /** * @param formPage */ public ArchiveSection(MDEFormPage formPage, Composite parent) { super(formPage, parent, Section.DESCRIPTION); getSection().setText(MDEUIMessages.SiteEditor_ArchiveSection_header); getSection().setDescription(MDEUIMessages.SiteEditor_ArchiveSection_instruction); createClient(getSection(), formPage.getManagedForm().getToolkit()); } /* * (non-Javadoc) * * @see org.eclipse.update.ui.forms.internal.FormSection#createClient(org.eclipse.swt.widgets.Composite, * org.eclipse.update.ui.forms.internal.FormWidgetFactory) */ public void createClient(Section section, FormToolkit toolkit) { fModel = (ISiteModel) getPage().getModel(); fModel.addModelChangedListener(this); section.setLayout(FormLayoutFactory.createClearGridLayout(false, 1)); Composite container = toolkit.createComposite(section); container.setLayout(FormLayoutFactory.createSectionClientGridLayout(false, 2)); container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); GridData data = new GridData(GridData.FILL_BOTH); section.setLayoutData(data); createTable(container, toolkit); createTableViewer(); createButtons(container, toolkit); toolkit.paintBordersFor(container); section.setClient(container); initialize(); } /* (non-Javadoc) * @see org.eclipse.ui.forms.AbstractFormPart#dispose() */ public void dispose() { fModel.removeModelChangedListener(this); super.dispose(); } private void createButtons(Composite parent, FormToolkit toolkit) { Composite container = toolkit.createComposite(parent); GridLayout layout = new GridLayout(); layout.marginHeight = 10; container.setLayout(layout); container.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); fAddButton = toolkit.createButton(container, MDEUIMessages.SiteEditor_add, SWT.PUSH); fAddButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fAddButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showDialog(null); } }); fAddButton.setEnabled(isEditable()); fEditButton = toolkit.createButton(container, MDEUIMessages.SiteEditor_edit, SWT.PUSH); fEditButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fEditButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IStructuredSelection ssel = (IStructuredSelection) fViewer.getSelection(); if (ssel != null && ssel.size() == 1) showDialog((ISiteArchive) ssel.getFirstElement()); } }); fRemoveButton = toolkit.createButton(container, MDEUIMessages.SiteEditor_remove, SWT.PUSH); fRemoveButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); fRemoveButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { handleDelete(); } }); fRemoveButton.setEnabled(false); fEditButton.setEnabled(false); toolkit.paintBordersFor(container); } private void createTable(Composite container, FormToolkit toolkit) { fTable = toolkit.createTable(container, SWT.FULL_SELECTION); GridData gd = new GridData(GridData.FILL_BOTH); gd.heightHint = 100; fTable.setLayoutData(gd); TableColumn col1 = new TableColumn(fTable, SWT.NULL); col1.setText(MDEUIMessages.SiteEditor_ArchiveSection_col1); TableColumn col2 = new TableColumn(fTable, SWT.NULL); col2.setText(MDEUIMessages.SiteEditor_ArchiveSection_col2); TableLayout tlayout = new TableLayout(); tlayout.addColumnData(new ColumnWeightData(50, 200)); tlayout.addColumnData(new ColumnWeightData(50, 200)); fTable.setLayout(tlayout); fTable.setHeaderVisible(true); createContextMenu(fTable); } private void createTableViewer() { fViewer = new TableViewer(fTable); fViewer.setContentProvider(new ContentProvider()); fViewer.setLabelProvider(new ArchiveLabelProvider()); fViewer.setInput(getPage().getModel()); fViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { handleSelectionChanged(); } }); } private void handleSelectionChanged() { ISelection selection = fViewer.getSelection(); getManagedForm().fireSelectionChanged(this, selection); getPage().getMDEEditor().setSelection(selection); if (!isEditable()) { return; } if (selection != null && selection instanceof IStructuredSelection) { IStructuredSelection ssel = (IStructuredSelection) selection; fRemoveButton.setEnabled(ssel.size() > 0); fEditButton.setEnabled(ssel.size() == 1); } else { fRemoveButton.setEnabled(false); fEditButton.setEnabled(false); } } private void showDialog(final ISiteArchive archive) { final ISiteModel model = (ISiteModel) getPage().getModel(); BusyIndicator.showWhile(fTable.getDisplay(), new Runnable() { public void run() { NewArchiveDialog dialog = new NewArchiveDialog(fTable.getShell(), model, archive); dialog.create(); SWTUtil.setDialogSize(dialog, 400, -1); dialog.open(); } }); } private void handleDelete() { try { ISelection selection = fViewer.getSelection(); if (selection != null && selection instanceof IStructuredSelection) { IStructuredSelection ssel = (IStructuredSelection) selection; if (ssel.size() > 0) { ISiteArchive[] array = (ISiteArchive[]) ssel.toList().toArray(new ISiteArchive[ssel.size()]); ISite site = ((ISiteModel) getPage().getModel()).getSite(); site.removeArchives(array); } } } catch (CoreException e) { } } /* * (non-Javadoc) * * @see org.eclipse.update.ui.forms.internal.FormSection#doGlobalAction(java.lang.String) */ public boolean doGlobalAction(String actionId) { if (actionId.equals(ActionFactory.DELETE.getId())) { BusyIndicator.showWhile(fTable.getDisplay(), new Runnable() { public void run() { handleDelete(); } }); return true; } return false; } public void refresh() { fViewer.refresh(); super.refresh(); } public void initialize() { refresh(); } public void modelChanged(IModelChangedEvent e) { markStale(); } private void createContextMenu(Control control) { MenuManager popupMenuManager = new MenuManager(); IMenuListener listener = new IMenuListener() { public void menuAboutToShow(IMenuManager mng) { Action removeAction = new Action(MDEUIMessages.SiteEditor_remove) { public void run() { doGlobalAction(ActionFactory.DELETE.getId()); } }; removeAction.setEnabled(isEditable()); mng.add(removeAction); mng.add(new Separator()); MDEFormEditorContributor contributor = getPage().getMDEEditor().getContributor(); contributor.contextMenuAboutToShow(mng); } }; popupMenuManager.addMenuListener(listener); popupMenuManager.setRemoveAllWhenShown(true); control.setMenu(popupMenuManager.createContextMenu(control)); } /* (non-Javadoc) * @see org.eclipse.ui.forms.AbstractFormPart#setFormInput(java.lang.Object) */ public boolean setFormInput(Object input) { if (input instanceof ISiteArchive) { fViewer.setSelection(new StructuredSelection(input), true); return true; } return super.setFormInput(input); } }