| /******************************************************************************* |
| * Copyright (c) 2000, 2005 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 |
| *******************************************************************************/ |
| package org.eclipse.jdt.internal.ui.javadocexport; |
| |
| import java.io.File; |
| |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Path; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.ModifyEvent; |
| import org.eclipse.swt.events.ModifyListener; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Combo; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Text; |
| |
| import org.eclipse.jface.dialogs.Dialog; |
| |
| import org.eclipse.ui.PlatformUI; |
| |
| import org.eclipse.jdt.internal.ui.IJavaHelpContextIds; |
| import org.eclipse.jdt.internal.ui.dialogs.StatusInfo; |
| import org.eclipse.jdt.internal.ui.dialogs.StatusUtil; |
| import org.eclipse.jdt.internal.ui.util.SWTUtil; |
| |
| public class JavadocSpecificsWizardPage extends JavadocWizardPage { |
| |
| private Button fAntBrowseButton; |
| private Button fCheckbrowser; |
| private Text fAntText; |
| private Button fOverViewButton; |
| private Button fOverViewBrowseButton; |
| private Button fAntButton; |
| private Combo fSourceCombo; |
| |
| private Composite fLowerComposite; |
| private Text fOverViewText; |
| private Text fExtraOptionsText; |
| private Text fVMOptionsText; |
| |
| private StatusInfo fOverviewStatus; |
| private StatusInfo fAntStatus; |
| |
| private JavadocTreeWizardPage fFirstPage; |
| |
| private JavadocOptionsManager fStore; |
| |
| private final int OVERVIEWSTATUS= 1; |
| private final int ANTSTATUS= 2; |
| |
| protected JavadocSpecificsWizardPage(String pageName, JavadocTreeWizardPage firstPage, JavadocOptionsManager store) { |
| super(pageName); |
| setDescription(JavadocExportMessages.JavadocSpecificsWizardPage_description); |
| |
| fStore= store; |
| |
| fOverviewStatus= new StatusInfo(); |
| fAntStatus= new StatusInfo(); |
| fFirstPage= firstPage; |
| } |
| |
| /* |
| * @see IDialogPage#createControl(Composite) |
| */ |
| public void createControl(Composite parent) { |
| initializeDialogUnits(parent); |
| |
| fLowerComposite= new Composite(parent, SWT.NONE); |
| fLowerComposite.setLayoutData(createGridData(GridData.FILL_BOTH, 1, 0)); |
| |
| GridLayout layout= createGridLayout(3); |
| layout.marginHeight= 0; |
| fLowerComposite.setLayout(layout); |
| |
| createExtraOptionsGroup(fLowerComposite); |
| createAntGroup(fLowerComposite); |
| |
| setControl(fLowerComposite); |
| Dialog.applyDialogFont(fLowerComposite); |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(fLowerComposite, IJavaHelpContextIds.JAVADOC_SPECIFICS_PAGE); |
| |
| } //end method createControl |
| |
| private void createExtraOptionsGroup(Composite composite) { |
| Composite c= new Composite(composite, SWT.NONE); |
| c.setLayout(createGridLayout(3)); |
| c.setLayoutData(createGridData(GridData.FILL_HORIZONTAL, 3, 0)); |
| ((GridLayout) c.getLayout()).marginWidth= 0; |
| |
| fOverViewButton= createButton(c, SWT.CHECK, JavadocExportMessages.JavadocSpecificsWizardPage_overviewbutton_label, createGridData(1)); |
| fOverViewText= createText(c, SWT.SINGLE | SWT.BORDER, null, createGridData(GridData.FILL_HORIZONTAL, 1, 0)); |
| //there really aught to be a way to specify this |
| ((GridData) fOverViewText.getLayoutData()).widthHint= 200; |
| fOverViewBrowseButton= createButton(c, SWT.PUSH, JavadocExportMessages.JavadocSpecificsWizardPage_overviewbrowse_label, createGridData(GridData.HORIZONTAL_ALIGN_END, 1, 0)); |
| SWTUtil.setButtonDimensionHint(fOverViewBrowseButton); |
| |
| String str= fStore.getOverview(); |
| if (str.length() == 0) { |
| //default |
| fOverViewText.setEnabled(false); |
| fOverViewBrowseButton.setEnabled(false); |
| } else { |
| fOverViewButton.setSelection(true); |
| fOverViewText.setText(str); |
| } |
| |
| createLabel(composite, SWT.NONE, JavadocExportMessages.JavadocSpecificsWizardPage_vmoptionsfield_label, createGridData(GridData.HORIZONTAL_ALIGN_BEGINNING, 3, 0)); |
| fVMOptionsText= createText(composite, SWT.SINGLE | SWT.BORDER, null, createGridData(GridData.HORIZONTAL_ALIGN_FILL, 3, 0)); |
| fVMOptionsText.setText(fStore.getVMParams()); |
| |
| |
| createLabel(composite, SWT.NONE, JavadocExportMessages.JavadocSpecificsWizardPage_extraoptionsfield_label, createGridData(GridData.HORIZONTAL_ALIGN_BEGINNING, 3, 0)); |
| fExtraOptionsText= createText(composite, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL, null, createGridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.FILL_VERTICAL, 3, 0)); |
| //fExtraOptionsText.setSize(convertWidthInCharsToPixels(60), convertHeightInCharsToPixels(10)); |
| |
| fExtraOptionsText.setText(fStore.getAdditionalParams()); |
| |
| Composite inner= new Composite(composite, SWT.NONE); |
| inner.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, false, false, 3, 1)); |
| GridLayout layout= new GridLayout(2, false); |
| layout.marginHeight= 0; |
| layout.marginWidth= 0; |
| inner.setLayout(layout); |
| |
| createLabel(inner, SWT.NONE, JavadocExportMessages.JavadocSpecificsWizardPage_sourcecompatibility_label, createGridData(GridData.HORIZONTAL_ALIGN_BEGINNING, 1, 0)); |
| |
| fSourceCombo= createCombo(inner, SWT.NONE, fStore.getSource(), createGridData(1)); |
| String[] versions= { "-", "1.3", "1.4", "1.5" };//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$ //$NON-NLS-4$ |
| fSourceCombo.setItems(versions); |
| fSourceCombo.setText(fStore.getSource()); |
| |
| |
| //Listeners |
| fOverViewButton.addSelectionListener(new ToggleSelectionAdapter(new Control[] { fOverViewBrowseButton, fOverViewText }) { |
| public void validate() { |
| doValidation(OVERVIEWSTATUS); |
| } |
| }); |
| |
| fOverViewText.addModifyListener(new ModifyListener() { |
| public void modifyText(ModifyEvent e) { |
| doValidation(OVERVIEWSTATUS); |
| } |
| }); |
| |
| fOverViewBrowseButton.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent event) { |
| handleFileBrowseButtonPressed(fOverViewText, new String[] { "*.html" }, JavadocExportMessages.JavadocSpecificsWizardPage_overviewbrowsedialog_title); //$NON-NLS-1$ |
| } |
| }); |
| |
| } |
| |
| private void createAntGroup(Composite composite) { |
| Composite c= new Composite(composite, SWT.NONE); |
| c.setLayout(createGridLayout(3)); |
| c.setLayoutData(createGridData(GridData.FILL_HORIZONTAL, 3, 0)); |
| ((GridLayout) c.getLayout()).marginWidth= 0; |
| |
| fAntButton= createButton(c, SWT.CHECK, JavadocExportMessages.JavadocSpecificsWizardPage_antscriptbutton_label, createGridData(3)); |
| createLabel(c, SWT.NONE, JavadocExportMessages.JavadocSpecificsWizardPage_antscripttext_label, createGridData(GridData.HORIZONTAL_ALIGN_BEGINNING, 1, 0)); |
| fAntText= createText(c, SWT.SINGLE | SWT.BORDER, null, createGridData(GridData.FILL_HORIZONTAL, 1, 0)); |
| //there really aught to be a way to specify this |
| ((GridData) fAntText.getLayoutData()).widthHint= 200; |
| |
| fAntText.setText(fStore.getAntpath()); |
| |
| fAntBrowseButton= createButton(c, SWT.PUSH, JavadocExportMessages.JavadocSpecificsWizardPage_antscriptbrowse_label, createGridData(GridData.HORIZONTAL_ALIGN_END, 1, 0)); |
| SWTUtil.setButtonDimensionHint(fAntBrowseButton); |
| fAntText.setEnabled(false); |
| fAntBrowseButton.setEnabled(false); |
| |
| fCheckbrowser= createButton(c, SWT.CHECK, JavadocExportMessages.JavadocSpecificsWizardPage_openbrowserbutton_label, createGridData(3)); |
| fCheckbrowser.setSelection(fStore.doOpenInBrowser()); |
| |
| fAntButton.addSelectionListener(new ToggleSelectionAdapter(new Control[] { fAntText, fAntBrowseButton }) { |
| public void validate() { |
| doValidation(ANTSTATUS); |
| } |
| }); |
| |
| fAntText.addModifyListener(new ModifyListener() { |
| public void modifyText(ModifyEvent e) { |
| doValidation(ANTSTATUS); |
| } |
| }); |
| |
| fAntBrowseButton.addSelectionListener(new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent event) { |
| String temp= fAntText.getText(); |
| IPath path= Path.fromOSString(temp); |
| String file= path.lastSegment(); |
| if (file == null) |
| file= "javadoc.xml";//$NON-NLS-1$ |
| path= path.removeLastSegments(1); |
| |
| String selected= handleFolderBrowseButtonPressed(path.toOSString(), JavadocExportMessages.JavadocSpecificsWizardPage_antscriptbrowsedialog_title, JavadocExportMessages.JavadocSpecificsWizardPage_antscriptbrowsedialog_label); |
| |
| path= Path.fromOSString(selected).append(file); |
| fAntText.setText(path.toOSString()); |
| |
| } |
| }); |
| } //end method createExtraOptionsGroup |
| |
| private void doValidation(int val) { |
| switch (val) { |
| |
| case OVERVIEWSTATUS : |
| fOverviewStatus= new StatusInfo(); |
| if (fOverViewButton.getSelection()) { |
| String filename= fOverViewText.getText(); |
| if (filename.length() == 0) { |
| fOverviewStatus.setError(JavadocExportMessages.JavadocSpecificsWizardPage_overviewnotfound_error); |
| } else { |
| File file= new File(filename); |
| String ext= filename.substring(filename.lastIndexOf('.') + 1); |
| if (!file.isFile()) { |
| fOverviewStatus.setError(JavadocExportMessages.JavadocSpecificsWizardPage_overviewnotfound_error); |
| } else if (!ext.equalsIgnoreCase("html")) { //$NON-NLS-1$ |
| fOverviewStatus.setError(JavadocExportMessages.JavadocSpecificsWizardPage_overviewincorrect_error); |
| } |
| } |
| } |
| break; |
| case ANTSTATUS : |
| fAntStatus= new StatusInfo(); |
| if (fAntButton.getSelection()) { |
| String filename= fAntText.getText(); |
| if (filename.length() == 0) { |
| fOverviewStatus.setError(JavadocExportMessages.JavadocSpecificsWizardPage_antfileincorrect_error); |
| } else { |
| File file= new File(filename); |
| String ext= filename.substring(filename.lastIndexOf('.') + 1); |
| if (file.isDirectory() || !(ext.equalsIgnoreCase("xml"))) //$NON-NLS-1$ |
| fAntStatus.setError(JavadocExportMessages.JavadocSpecificsWizardPage_antfileincorrect_error); |
| else if (file.exists()) |
| fAntStatus.setWarning(JavadocExportMessages.JavadocSpecificsWizardPage_antfileoverwrite_warning); |
| } |
| } |
| break; |
| } |
| |
| updateStatus(findMostSevereStatus()); |
| |
| } |
| |
| /* |
| * @see JavadocWizardPage#onFinish() |
| */ |
| |
| protected void updateStore() { |
| |
| fStore.setVMParams(fVMOptionsText.getText()); |
| fStore.setAdditionalParams(fExtraOptionsText.getText()); |
| |
| if (fOverViewText.getEnabled()) |
| fStore.setOverview(fOverViewText.getText()); |
| else |
| fStore.setOverview(""); //$NON-NLS-1$ |
| |
| //for now if there are multiple then the ant file is not stored for specific projects |
| if (fAntText.getEnabled()) { |
| fStore.setGeneralAntpath(fAntText.getText()); |
| } |
| fStore.setOpenInBrowser(fCheckbrowser.getSelection()); |
| fStore.setSource(fSourceCombo.getText()); |
| |
| } |
| |
| public void setVisible(boolean visible) { |
| super.setVisible(visible); |
| if (visible) { |
| doValidation(OVERVIEWSTATUS); |
| doValidation(ANTSTATUS); |
| fCheckbrowser.setVisible(!fFirstPage.getCustom()); |
| } |
| } |
| |
| public void init() { |
| updateStatus(new StatusInfo()); |
| } |
| |
| private IStatus findMostSevereStatus() { |
| return StatusUtil.getMostSevere(new IStatus[] { fAntStatus, fOverviewStatus }); |
| } |
| |
| public boolean generateAnt() { |
| return fAntButton.getSelection(); |
| } |
| |
| } |