/** * Copyright (c) 2009-2011, The HATS Consortium. All rights reserved. * This file is licensed under the terms of the Modified BSD License. */ package org.absmodels.abs.plugin.wizards.pages; import org.absmodels.abs.plugin.util.InternalASTNode; import org.absmodels.abs.plugin.wizards.WizardUtil; import org.absmodels.abs.plugin.wizards.WizardUtil.ErrorType; import org.absmodels.abs.plugin.wizards.composites.ModuleGroup; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import abs.frontend.ast.ModuleDecl; public class NewInterfaceInFileWizardPage extends WizardPage implements IABSClassInterfaceWizardPage{ private Text classNameField; private ModuleGroup moduleGroup; private String initialValue = ""; private InternalASTNode<ModuleDecl> initialDecl = null; private static String MODULE_GROUP_MESSAGE = "Select a module declaration"; private static int DEFAULT_TEXT_FIELD_WIDTH = 250; private final Listener changeListener = new Listener() { @Override public void handleEvent(Event event) { boolean valid = validate(); setPageComplete(valid); } }; public NewInterfaceInFileWizardPage(String pageName) { super(pageName); setPageComplete(false); } @Override public void setInitialName(String value) { initialValue = value; } @Override public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); initializeDialogUnits(parent); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); createClassNameField(composite); moduleGroup = new ModuleGroup(composite, changeListener, MODULE_GROUP_MESSAGE); if (initialDecl == null) { moduleGroup.setSelectedResource(null); } else { moduleGroup.setSelectedResource(initialDecl); } setPageComplete(validate()); setControl(composite); Dialog.applyDialogFont(composite); } private void createClassNameField(Composite parent) { Composite classNameDialog = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 2; classNameDialog.setLayout(layout); classNameDialog.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label classNameLabel = new Label(classNameDialog,SWT.NONE); classNameLabel.setText("Interface Name:"); classNameLabel.setFont(classNameDialog.getFont()); classNameField = new Text(classNameDialog, SWT.BORDER); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.widthHint = DEFAULT_TEXT_FIELD_WIDTH; classNameField.setLayoutData(gridData); classNameField.setFont(classNameDialog.getFont()); if (!"".equals(initialValue)){ classNameField.setText(initialValue); } classNameField.addListener(SWT.Modify, changeListener); } @Override public String getNewName(){ return classNameField != null ? classNameField.getText() : null; } @Override public InternalASTNode<ModuleDecl> getResultModule(){ InternalASTNode<ModuleDecl> result = moduleGroup.getSelectedModuleDecl(); return result; } @Override public void setInitialModule(InternalASTNode<ModuleDecl> decl){ if (decl != null) { this.initialDecl = decl; } } private boolean validate() { ErrorType errorMessage = WizardUtil.validate(classNameField.getText()); if (errorMessage == ErrorType.NO_ERROR){ errorMessage = validateModule(); } setErrorMessage(WizardUtil.getErrorDescription(errorMessage)); return (errorMessage == ErrorType.NO_ERROR); } private ErrorType validateModule(){ InternalASTNode<ModuleDecl> result = moduleGroup.getSelectedModuleDecl(); if (result != null) { return ErrorType.NO_ERROR; } return ErrorType.ERROR_NO_VALID_MODULE; } }