X-Git-Url: http://git.phpeclipse.com diff --git a/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/export/pdf/WikiPDFExportWizardPage.java b/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/export/pdf/WikiPDFExportWizardPage.java new file mode 100644 index 0000000..729effe --- /dev/null +++ b/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/export/pdf/WikiPDFExportWizardPage.java @@ -0,0 +1,496 @@ +/* + * Copyright (c) 2002 Team in a Box Ltd. All rights reserved. This file is made available under the terms and conditions of the + * Common Public License v 1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/cpl-v1.0.html + * + * Contributors: Team in a Box Ltd http://www.teaminabox.co.uk/ + */ + +package net.sourceforge.phpeclipse.wiki.export.pdf; + +import java.lang.reflect.InvocationTargetException; +import java.util.List; + +import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin; + +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.jface.dialogs.ErrorDialog; +import org.eclipse.jface.dialogs.IDialogSettings; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jface.preference.StringFieldEditor; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.window.Window; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Font; +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.DirectoryDialog; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.FileDialog; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Widget; +import org.eclipse.ui.dialogs.ContainerSelectionDialog; +import org.eclipse.ui.dialogs.WizardExportResourcesPage; +import org.eclipse.ui.internal.ide.IDEWorkbenchMessages; + +public final class WikiPDFExportWizardPage extends WizardExportResourcesPage implements IPropertyChangeListener, SelectionListener { + private StringFieldEditor folderText; + + private static final String[] PDF_EXTENSION = { "pdf" }; + + //dialog store id constants + private static final String STORE_DESTINATION_NAMES_ID = "WikiPDFExportWizardPage.STORE_DESTINATION_NAMES_ID"; //$NON-NLS-1$ + + private static final String STORE_OVERWRITE_EXISTING_FILES_ID = "WikiPDFExportWizardPage.STORE_OVERWRITE_EXISTING_FILES_ID"; //$NON-NLS-1$ + + private StringFieldEditor exportFileText; + + private Combo destinationNameField; + + private Button destinationBrowseButton; + + protected Button overwriteExistingFilesCheckbox; + + private ISelection selection; + + public WikiPDFExportWizardPage(IStructuredSelection selection) { + super(WikiEditorPlugin.getResourceString("Export.wizardTitle"), selection); + setTitle(WikiEditorPlugin.getResourceString("Export.wizardTitle")); + setDescription(WikiEditorPlugin.getResourceString("Export.wizardDescription")); + this.selection = selection; + } + + /** + * Create the export destination specification widgets + * + * @param parent + * org.eclipse.swt.widgets.Composite + */ + protected void createDestinationGroup(Composite parent) { + + Font font = parent.getFont(); + // destination specification group + Composite destinationSelectionGroup = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.numColumns = 3; + destinationSelectionGroup.setLayout(layout); + destinationSelectionGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL)); + destinationSelectionGroup.setFont(font); + + Label destinationLabel = new Label(destinationSelectionGroup, SWT.NONE); + destinationLabel.setText("PDF output filename:"); + destinationLabel.setFont(font); + + // destination name entry field + destinationNameField = new Combo(destinationSelectionGroup, SWT.SINGLE | SWT.BORDER); + destinationNameField.addListener(SWT.Modify, this); + destinationNameField.addListener(SWT.Selection, this); + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); + data.widthHint = SIZING_TEXT_FIELD_WIDTH; + destinationNameField.setLayoutData(data); + destinationNameField.setFont(font); + + // destination browse button + destinationBrowseButton = new Button(destinationSelectionGroup, SWT.PUSH); + destinationBrowseButton.setText("Browse..."); //$NON-NLS-1$ + destinationBrowseButton.addListener(SWT.Selection, this); + destinationBrowseButton.setFont(font); + setButtonLayoutData(destinationBrowseButton); + + new Label(parent, SWT.NONE); // vertical spacer + } + /** + * Create the options specification widgets. + * + * @param parent org.eclipse.swt.widgets.Composite + */ + protected void createOptionsGroup(Composite parent) { + // options group + Group optionsGroup = new Group(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + optionsGroup.setLayout(layout); + optionsGroup.setLayoutData( + new GridData( + GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL)); + optionsGroup.setText(IDEWorkbenchMessages.getString("WizardExportPage.options")); //$NON-NLS-1$ + optionsGroup.setFont(parent.getFont()); + + createOptionsGroupButtons(optionsGroup); + + } + /** + * Create the buttons in the options group. + */ + + protected void createOptionsGroupButtons(Group optionsGroup) { + + Font font = optionsGroup.getFont(); + createOverwriteExisting(optionsGroup, font); + +// createDirectoryStructureOptions(optionsGroup, font); + } + /** + * Create the button for checking if we should ask if we are going to overwrite existing files. + * + * @param optionsGroup + * @param font + */ + protected void createOverwriteExisting(Group optionsGroup, Font font) { + // overwrite... checkbox + overwriteExistingFilesCheckbox = new Button(optionsGroup, SWT.CHECK | SWT.LEFT); + overwriteExistingFilesCheckbox.setText("Overwrite existing files"); //$NON-NLS-1$ + overwriteExistingFilesCheckbox.setFont(font); + } + + /** + * Handle all events and enablements for widgets in this page + * + * @param e + * Event + */ + public void handleEvent(Event e) { + Widget source = e.widget; + + if (source == destinationBrowseButton) + handleDestinationBrowseButtonPressed(); + + updatePageCompletion(); + } + + /** + * Open an appropriate destination browser so that the user can specify a source to import from + */ + protected void handleDestinationBrowseButtonPressed() { + DirectoryDialog dialog = new DirectoryDialog(getContainer().getShell(), SWT.SAVE); + dialog.setMessage("Select destination"); + dialog.setText("Select title"); + dialog.setFilterPath(getDestinationValue()); + String selectedDirectoryName = dialog.open(); + + if (selectedDirectoryName != null) { + setErrorMessage(null); + setDestinationValue(selectedDirectoryName); + } + } + + /** + * Answer the contents of self's destination specification widget + * + * @return java.lang.String + */ + protected String getDestinationValue() { + return destinationNameField.getText().trim(); + } + + /** + * Set the contents of the receivers destination specification widget to the passed value + * + */ + protected void setDestinationValue(String value) { + destinationNameField.setText(value); + } + + /** + * Hook method for saving widget values for restoration by the next instance of this class. + */ + protected void internalSaveWidgetValues() { + // update directory names history + IDialogSettings settings = getDialogSettings(); + if (settings != null) { + String[] directoryNames = settings.getArray(STORE_DESTINATION_NAMES_ID); + if (directoryNames == null) + directoryNames = new String[0]; + + directoryNames = addToHistory(directoryNames, getDestinationValue()); + settings.put(STORE_DESTINATION_NAMES_ID, directoryNames); + + // options + settings.put(STORE_OVERWRITE_EXISTING_FILES_ID, overwriteExistingFilesCheckbox.getSelection()); + + // settings.put( + // STORE_CREATE_STRUCTURE_ID, + // createDirectoryStructureButton.getSelection()); + + } + } + + /** + * Hook method for restoring widget values to the values that they held last time this wizard was used to completion. + */ + protected void restoreWidgetValues() { + IDialogSettings settings = getDialogSettings(); + if (settings != null) { + String[] directoryNames = settings.getArray(STORE_DESTINATION_NAMES_ID); + if (directoryNames == null) + return; // ie.- no settings stored + + // destination + setDestinationValue(directoryNames[0]); + for (int i = 0; i < directoryNames.length; i++) + addDestinationItem(directoryNames[i]); + + // options + overwriteExistingFilesCheckbox.setSelection(settings.getBoolean(STORE_OVERWRITE_EXISTING_FILES_ID)); + + // boolean createDirectories = + // settings.getBoolean(STORE_CREATE_STRUCTURE_ID); + // createDirectoryStructureButton.setSelection(createDirectories); + // createSelectionOnlyButton.setSelection(!createDirectories); + } + } + /** + * Add the passed value to self's destination widget's history + * + * @param value java.lang.String + */ + protected void addDestinationItem(String value) { + destinationNameField.add(value); + } + /** + * (non-Javadoc) Method declared on IDialogPage. + */ + public void createControl(Composite parent) { + super.createControl(parent); + giveFocusToDestination(); + // WorkbenchHelp.setHelp( + // getControl(), + // IDataTransferHelpContextIds.FILE_SYSTEM_EXPORT_WIZARD_PAGE); + } + + /** + * Set the current input focus to self's destination entry field + */ + protected void giveFocusToDestination() { + destinationNameField.setFocus(); + } + + // private Composite createControlsContainer(Composite parent) { + // Composite container = new Composite(parent, SWT.NULL); + // GridLayout layout = new GridLayout(); + // layout.numColumns = 1; + // layout.verticalSpacing = 20; + // container.setLayout(layout); + // container.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL)); + // + // createCommonControls(container); + // return container; + // } + + // private void createCommonControls(Composite parent) { + // Composite container = new Composite(parent, SWT.NULL); + // GridLayout layout = new GridLayout(); + // layout.numColumns = 3; + // layout.verticalSpacing = 9; + // container.setLayout(layout); + // container.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL)); + // + // createFolderControls(container); + // createExportDirectoryControls(container); + // } + + // private void createExportDirectoryControls(Composite container) { + // exportFileText = addStringFieldEditor(container, WikiEditorPlugin.getResourceString("Export.wizardExportDirectory")); + // + // Button button = new Button(container, SWT.PUSH); + // button.setText(WikiEditorPlugin.getResourceString("Export.wizardBrowse")); + // button.addSelectionListener(new SelectionAdapter() { + // public void widgetSelected(SelectionEvent e) { + // handleBrowseHtmlExportLocation(); + // } + // }); + // } + + // private void createFolderControls(Composite container) { + // folderText = addStringFieldEditor(container, WikiEditorPlugin.getResourceString("Export.wizardFolder")); + // + // Button button = new Button(container, SWT.PUSH); + // button.setText(WikiEditorPlugin.getResourceString("Export.wizardBrowse")); + // button.addSelectionListener(new SelectionAdapter() { + // public void widgetSelected(SelectionEvent e) { + // try { + // handleBrowseFolders(); + // } catch (CoreException cex) { + // WikiEditorPlugin.getDefault().log("", cex); + // throw new RuntimeException("Caught CoreException. See log for details."); + // } + // } + // }); + // } + + // private StringFieldEditor addStringFieldEditor(Composite container, String labelText) { + // Label label = new Label(container, SWT.NULL); + // label.setText(labelText); + // + // Composite editorComposite = new Composite(container, SWT.NULL); + // editorComposite.setLayout(new GridLayout()); + // editorComposite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL)); + // StringFieldEditor editor = new StringFieldEditor("", "", editorComposite); + // + // editor.setPropertyChangeListener(this); + // + // return editor; + // } + + private void initialize() throws CoreException { + if (selection == null || selection.isEmpty() || !(selection instanceof IStructuredSelection)) { + return; + } + + IStructuredSelection ssel = (IStructuredSelection) selection; + if (ssel.size() == 1) { + initialiseFromSelectedObject(ssel.getFirstElement()); + } + } + + private void initialiseFromSelectedObject(Object obj) throws CoreException { + if (obj instanceof IFolder || obj instanceof IProject) { + initialiseFolder(((IResource) obj)); + } + } + + private void initialiseFolder(IResource resource) throws CoreException { + folderText.setStringValue(resource.getFullPath().toString()); + initialiseExportDirectoryText(resource); + } + + private void initialiseExportDirectoryText(IResource resource) throws CoreException { + String exportDir = resource.getProject().getPersistentProperty(WikiPDFExportWizard.DIRECTORY_QUALIFIED_NAME); + if (exportDir != null) { + exportFileText.setStringValue(exportDir); + } else { + exportFileText.setStringValue(""); + } + } + + private void handleBrowseHtmlExportLocation() { + FileDialog dialog = new FileDialog(getShell(), SWT.SINGLE | SWT.OPEN); + dialog.setFilterExtensions(PDF_EXTENSION); + String path = dialog.open(); + if (path != null) { + exportFileText.setStringValue(path); + } + } + + private void handleBrowseFolders() throws CoreException { + ContainerSelectionDialog dialog = new ContainerSelectionDialog(getShell(), ResourcesPlugin.getWorkspace().getRoot(), false, + WikiEditorPlugin.getResourceString("Export.wizardSelectFolder")); + if (dialog.open() == Window.OK) { + Object[] result = dialog.getResult(); + if (result != null && result.length == 1) { + IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember((IPath) result[0]); + if (resource instanceof IFile) { + return; + } + initialiseFolder(resource); + } + } + } + + private void dialogChanged() { + if (getFolderText().length() == 0) { + updateStatus("Folder must be specified"); + } else if (getExportDirectoryPath().length() == 0) { + updateStatus("Directory must be specified"); + } else { + updateStatus(null); + } + } + + private void updateStatus(String message) { + setErrorMessage(message); + setPageComplete(message == null); + } + + public String getExportDirectoryPath() { + return exportFileText.getStringValue(); + } + + public void propertyChange(PropertyChangeEvent event) { + dialogChanged(); + } + + public void widgetSelected(SelectionEvent e) { + dialogChanged(); + } + + public void widgetDefaultSelected(SelectionEvent e) { + dialogChanged(); + } + + String getFolderText() { + return folderText.getStringValue(); + } + + public IContainer getFolder() { + return (IContainer) ResourcesPlugin.getWorkspace().getRoot().findMember(new Path(getFolderText())); + } + + protected boolean executeExportOperation(WikiPDFExporter op) { + // op.setCreateLeadupStructure( + // createDirectoryStructureButton.getSelection()); + op.setOverwriteFiles(overwriteExistingFilesCheckbox.getSelection()); + + try { + getContainer().run(true, true, op); + } catch (InterruptedException e) { + return true; + } catch (InvocationTargetException e) { + displayErrorDialog(e.getTargetException()); + return true; + } + + IStatus status = op.getStatus(); + if (!status.isOK()) { + ErrorDialog.openError(getContainer().getShell(), "PDF export problems", //$NON-NLS-1$ + null, // no special message + status); + return true; + } + + return true; + } + + /** + * The Finish button was pressed. Try to do the required work now and answer a boolean indicating success. If false is returned + * then the wizard will not close. + * + * @return boolean + */ + public boolean finish() { + // if (!ensureTargetIsValid(new File(getDestinationValue()))) + // return false; + + List resourcesToExport = getWhiteCheckedResources(); + + //Save dirty editors if possible but do not stop if not all are saved + saveDirtyEditors(); + // about to invoke the operation so save our state + saveWidgetValues(); + + if (resourcesToExport.size() > 0) + return executeExportOperation(new WikiPDFExporter(resourcesToExport, getDestinationValue(), this)); + + MessageDialog.openInformation(getContainer().getShell(), "PDF export", //$NON-NLS-1$ + "No file selected"); //$NON-NLS-1$ + + return false; + } +} \ No newline at end of file