* added a first PDF Exporter (menu File->Export...)
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.wiki / src / net / sourceforge / phpeclipse / wiki / export / html / WikiHTMLExportWizardPage.java
diff --git a/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/export/html/WikiHTMLExportWizardPage.java b/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/export/html/WikiHTMLExportWizardPage.java
new file mode 100644 (file)
index 0000000..762dffd
--- /dev/null
@@ -0,0 +1,228 @@
+/*
+ * 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.html;
+
+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.Path;
+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.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.dialogs.ContainerSelectionDialog;
+
+public final class WikiHTMLExportWizardPage extends WizardPage implements IPropertyChangeListener, SelectionListener {
+  private StringFieldEditor folderText;
+
+  private StringFieldEditor exportDirectoryText;
+
+  private ISelection selection;
+
+  public WikiHTMLExportWizardPage(ISelection selection) {
+    super(WikiEditorPlugin.getResourceString("Export.wizardTitle"));
+    setTitle(WikiEditorPlugin.getResourceString("Export.wizardTitle"));
+    setDescription(WikiEditorPlugin.getResourceString("Export.wizardDescription"));
+    this.selection = selection;
+  }
+
+  public void createControl(Composite parent) {
+    Composite rootComposite = createControlsContainer(parent);
+
+    try {
+      initialize();
+    } catch (RuntimeException rex) {
+      throw rex;
+    } catch (CoreException cex) {
+      WikiEditorPlugin.getDefault().log("", cex);
+      throw new RuntimeException("Caught CoreException. See log for details.");
+    }
+    dialogChanged();
+    setControl(rootComposite);
+  }
+
+  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) {
+    exportDirectoryText = 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(WikiHTMLExportWizard.DIRECTORY_QUALIFIED_NAME);
+    if (exportDir != null) {
+      exportDirectoryText.setStringValue(exportDir);
+    } else {
+      exportDirectoryText.setStringValue("");
+    }
+  }
+
+  private void handleBrowseHtmlExportLocation() {
+    DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.SINGLE | SWT.OPEN);
+    String path = dialog.open();
+    if (path != null) {
+      exportDirectoryText.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 exportDirectoryText.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()));
+  }
+}
\ No newline at end of file