package org.craftyourmod.mineclipse.ui.pages; import org.craftyourmod.mineclipse.core.filemanager.FileManager; import org.craftyourmod.mineclipse.core.filemanager.SourceFile; import org.craftyourmod.mineclipse.ui.Activator; import org.craftyourmod.mineclipse.ui.Messages; import org.craftyourmod.mineclipse.ui.providers.FileManagerLabelProvider; import org.craftyourmod.mineclipse.ui.wizards.NewMinecraftProjectWorkbenchWizard; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.wizard.WizardPage; 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.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.ElementListSelectionDialog; public class NewMineClipseProjectPageOne extends WizardPage { private Text txtName; private Text txtInput; private final NewMinecraftProjectWorkbenchWizard fWizard; /** * Create the wizard. * * @param wizard */ public NewMineClipseProjectPageOne(final NewMinecraftProjectWorkbenchWizard wizard) { super("pageOne"); //$NON-NLS-1$ setTitle(Messages.NewMineClipseProjectPageOne_Title); setDescription(Messages.NewMineClipseProjectPageOne_Description); this.fWizard = wizard; } public Text getTxtInput() { return txtInput; } public Text getTxtName() { return txtName; } @Override public void createControl(final Composite parent) { Composite container = new Composite(parent, SWT.NULL); setControl(container); container.setLayout(new GridLayout(3, false)); Label lblProjectName = new Label(container, SWT.NONE); lblProjectName.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblProjectName.setText(Messages.NewMineClipseProjectPageOne_ProjectName); txtName = new Text(container, SWT.BORDER); txtName.addModifyListener(new ModifyListener() { @Override public void modifyText(final ModifyEvent e) { validateFields(); } }); txtName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); Label lblInputSource = new Label(container, SWT.NONE); lblInputSource.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblInputSource.setText(Messages.NewMineClipseProjectPageOne_Input); txtInput = new Text(container, SWT.BORDER); txtInput.setEditable(false); txtInput.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Button btnSelect = new Button(container, SWT.NONE); btnSelect.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { ElementListSelectionDialog dialog = new ElementListSelectionDialog(getShell(), new FileManagerLabelProvider()); dialog.setElements(FileManager.INSTANCE.getSrcs().toArray()); dialog.setBlockOnOpen(true); dialog.setMessage(Messages.AddSourcePage_binariesListSelctionDialog_message); dialog.open(); txtInput.setText(((SourceFile) dialog.getResult()[0]).getName()); validateFields(); } }); btnSelect.setText(Messages.NewMineClipseProjectPageOne_Select); } public void validateFields() { if (txtName.getText().isEmpty()) fWizard.setStatus(new Status(Status.ERROR, Activator.PLUGIN_ID, Messages.NewMineClipseProjectPageOne_Error_EmptyName)); else if (ResourcesPlugin.getWorkspace().getRoot().getProject(txtName.getText()).exists()) fWizard.setStatus(new Status(Status.ERROR, Activator.PLUGIN_ID, Messages.NewMineClipseProjectPageOne_Error_DuplicateName)); else if (txtInput.getText().isEmpty()) fWizard.setStatus(new Status(Status.ERROR, Activator.PLUGIN_ID, Messages.NewMineClipseProjectPageOne_Error_NoImput)); else fWizard.setStatus(new Status(Status.OK, Activator.PLUGIN_ID, null)); updateMessage(); } public void updateMessage() { if (!fWizard.getStatus().isOK()) { setMessage(fWizard.getStatus().getMessage(), IMessageProvider.ERROR); setPageComplete(false); } else { setMessage(null); setPageComplete(true); } } }