package tk.eclipse.plugin.htmleditor.wizards; import java.io.ByteArrayInputStream; import java.io.InputStream; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jface.viewers.ISelection; 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.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.WizardNewFileCreationPage; import tk.eclipse.plugin.htmleditor.HTMLPlugin; import tk.eclipse.plugin.htmleditor.HTMLUtil; /** * The "New" wizard page allows setting the container for * the new file as well as the file name. The page * will only accept file name without the extension OR * with the extension that matches the expected one (html). */ public class HTMLNewWizardPage extends WizardNewFileCreationPage { private Text titleText; private Combo comboDocType; // private ISelection selection; private static DocType[] docTypes = { new DocType("",null,null), new DocType("HTML 4.01 Strict","-//W3C//DTD HTML 4.01//EN","http://www.w3.org/TR/html4/strict.dtd"), new DocType("HTML 4.01 Transitional","-//W3C//DTD HTML 4.01 Transitional//EN","http://www.w3.org/TR/html4/loose.dtd"), new DocType("HTML 4.01 Frameset","-//W3C//DTD HTML 4.01 Frameset//EN","http://www.w3.org/TR/html4/frameset.dtd") }; public HTMLNewWizardPage(ISelection selection) { super("wizardPage",(IStructuredSelection)selection); setTitle(HTMLPlugin.getResourceString("HTMLNewWizardPage.Title")); setDescription(HTMLPlugin.getResourceString("HTMLNewWizardPage.Description")); // this.selection = selection; } @Override public void createControl(Composite parent) { super.createControl(parent); this.setFileName("newfile.html"); Composite container = new Composite((Composite)getControl(),SWT.NONE); GridLayout layout = new GridLayout(); container.setLayout(layout); layout.numColumns = 2; layout.verticalSpacing = 9; container.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL|GridData.GRAB_HORIZONTAL)); Label label = new Label(container, SWT.NULL); label.setText(HTMLPlugin.getResourceString("HTMLNewWizardPage.InputTitle")); titleText = new Text(container, SWT.BORDER | SWT.SINGLE); titleText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); label = new Label(container, SWT.NULL); label.setText(HTMLPlugin.getResourceString("HTMLNewWizardPage.InputDocType")); comboDocType = new Combo(container,SWT.READ_ONLY); for(int i=0;i<docTypes.length;i++){ comboDocType.add(docTypes[i].label); } } @Override protected InputStream getInitialContents() { // DOCTYPE int i = comboDocType.getSelectionIndex(); if(i<0){ i = 0; } DocType docType = docTypes[i]; String projectName = getContainerFullPath().segment(0); IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); String charset = HTMLUtil.getProjectCharset(project); // try { // String projectName = getContainerFullPath().segment(0); // IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); // charset = project.getDefaultCharset(); // } catch(CoreException ex){ // } // Generate HTML StringBuffer sb = new StringBuffer(); if(!docType.label.equals("") && docType.format!=null && !docType.format.equals("")){ sb.append("<!DOCTYPE HTML PUBLIC \""+docType.format+"\""); if(docType.dtd!=null && !docType.dtd.equals("")){ sb.append(" \"" + docType.dtd + "\""); } sb.append(">\n"); } sb.append("<html>\n"); sb.append("<head>\n"); sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html"); if(charset!=null){ sb.append("; charset=" + charset); } sb.append("\"/>\n"); sb.append("<title>" + HTMLUtil.escapeHTML(titleText.getText()) + "</title>\n"); sb.append("</head>\n"); sb.append("<body>\n"); sb.append("</body>\n"); sb.append("</html>\n"); return new ByteArrayInputStream(sb.toString().getBytes()); } private static class DocType { public String label; public String format; public String dtd; public DocType(String label,String format,String dtd){ this.label = label; this.format = format; this.dtd = dtd; } } }