blob: 71f7460f1f0dd033bde819fbcf6a4c68f3418de5 [file] [log] [blame]
/*******************************************************************************
* 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.ui.examples.readmetool;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
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.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
import org.eclipse.ui.ide.IDE;
/**
* This class is the only page of the Readme file resource creation wizard.
* It subclasses the standard file resource creation page class,
* and consequently inherits the file resource creation functionality.
*
* This page provides users with the choice of creating sample headings for
* sections and subsections. Additionally, the option is presented to open
* the file immediately for editing after creation.
*/
public class ReadmeCreationPage extends WizardNewFileCreationPage {
private IWorkbench workbench;
// widgets
private Button sectionCheckbox;
private Button subsectionCheckbox;
private Button openFileCheckbox;
// constants
private static int nameCounter = 1;
/**
* Creates the page for the readme creation wizard.
*
* @param workbench the workbench on which the page should be created
* @param selection the current selection
*/
public ReadmeCreationPage(IWorkbench workbench,
IStructuredSelection selection) {
super("sampleCreateReadmePage1", selection); //$NON-NLS-1$
this.setTitle(MessageUtil.getString("Create_Readme_File")); //$NON-NLS-1$
this.setDescription(MessageUtil
.getString("Create_a_new_Readme_file_resource")); //$NON-NLS-1$
this.workbench = workbench;
}
/** (non-Javadoc)
* Method declared on IDialogPage.
*/
public void createControl(Composite parent) {
// inherit default container and name specification widgets
super.createControl(parent);
Composite composite = (Composite) getControl();
PlatformUI.getWorkbench().getHelpSystem().setHelp(composite,
IReadmeConstants.CREATION_WIZARD_PAGE_CONTEXT);
this.setFileName("sample" + nameCounter + ".readme"); //$NON-NLS-1$ //$NON-NLS-2$
// sample section generation group
Group group = new Group(composite, SWT.NONE);
group.setLayout(new GridLayout());
group.setText(MessageUtil
.getString("Automatic_sample_section_generation")); //$NON-NLS-1$
group.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
| GridData.HORIZONTAL_ALIGN_FILL));
// sample section generation checkboxes
sectionCheckbox = new Button(group, SWT.CHECK);
sectionCheckbox.setText(MessageUtil
.getString("Generate_sample_section_titles")); //$NON-NLS-1$
sectionCheckbox.setSelection(true);
sectionCheckbox.addListener(SWT.Selection, this);
subsectionCheckbox = new Button(group, SWT.CHECK);
subsectionCheckbox.setText(MessageUtil
.getString("Generate_sample_subsection_titles")); //$NON-NLS-1$
subsectionCheckbox.setSelection(true);
subsectionCheckbox.addListener(SWT.Selection, this);
// open file for editing checkbox
openFileCheckbox = new Button(composite, SWT.CHECK);
openFileCheckbox.setText(MessageUtil
.getString("Open_file_for_editing_when_done")); //$NON-NLS-1$
openFileCheckbox.setSelection(true);
setPageComplete(validatePage());
}
/**
* Creates a new file resource as requested by the user. If everything
* is OK then answer true. If not, false will cause the dialog
* to stay open.
*
* @return whether creation was successful
* @see ReadmeCreationWizard#performFinish()
*/
public boolean finish() {
// create the new file resource
IFile newFile = createNewFile();
if (newFile == null)
return false; // ie.- creation was unsuccessful
// Since the file resource was created fine, open it for editing
// if requested by the user
try {
if (openFileCheckbox.getSelection()) {
IWorkbenchWindow dwindow = workbench.getActiveWorkbenchWindow();
IWorkbenchPage page = dwindow.getActivePage();
if (page != null) {
IDE.openEditor(page, newFile, true);
}
}
} catch (PartInitException e) {
e.printStackTrace();
return false;
}
nameCounter++;
return true;
}
/**
* The <code>ReadmeCreationPage</code> implementation of this
* <code>WizardNewFileCreationPage</code> method
* generates sample headings for sections and subsections in the
* newly-created Readme file according to the selections of self's
* checkbox widgets
*/
protected InputStream getInitialContents() {
if (!sectionCheckbox.getSelection())
return null;
StringBuffer sb = new StringBuffer();
sb.append(MessageUtil.getString("SAMPLE_README_FILE")); //$NON-NLS-1$
sb.append(MessageUtil.getString("SECTION_1")); //$NON-NLS-1$
sb.append(MessageUtil.getString("SECTION_1_BODY_1")); //$NON-NLS-1$
if (subsectionCheckbox.getSelection()) {
sb.append(MessageUtil.getString("Subsection_1_1")); //$NON-NLS-1$
sb.append(MessageUtil.getString("Subsection_1_1_Body_1")); //$NON-NLS-1$
}
sb.append(MessageUtil.getString("SECTION_2")); //$NON-NLS-1$
sb.append(MessageUtil.getString("SECTION_2_BODY_1")); //$NON-NLS-1$
sb.append(MessageUtil.getString("SECTION_2_BODY_2")); //$NON-NLS-1$
if (subsectionCheckbox.getSelection()) {
sb.append(MessageUtil.getString("Subsection_2_1")); //$NON-NLS-1$
sb.append(MessageUtil.getString("Subsection_2_1_BODY_1")); //$NON-NLS-1$
sb.append(MessageUtil.getString("Subsection_2_2")); //$NON-NLS-1$
sb.append(MessageUtil.getString("Subsection_2_2_BODY_1")); //$NON-NLS-1$
}
return new ByteArrayInputStream(sb.toString().getBytes());
}
/** (non-Javadoc)
* Method declared on WizardNewFileCreationPage.
*/
protected String getNewFileLabel() {
return MessageUtil.getString("Readme_file_name"); //$NON-NLS-1$
}
/** (non-Javadoc)
* Method declared on WizardNewFileCreationPage.
*/
public void handleEvent(Event e) {
Widget source = e.widget;
if (source == sectionCheckbox) {
if (!sectionCheckbox.getSelection())
subsectionCheckbox.setSelection(false);
subsectionCheckbox.setEnabled(sectionCheckbox.getSelection());
}
super.handleEvent(e);
}
}