blob: 08c187f44a5e7f95c6fefd2255f6ea06ac8a00ad [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2020 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.ui.wizards;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.PlatformUI;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
/**
* Wizard page to create a new record.
* <p>
* Note: This class is not intended to be subclassed, but clients can instantiate.
* To implement a different kind of a new record wizard page, extend <code>NewTypeWizardPage</code>.
* </p>
*
*
* @noextend This class is not intended to be subclassed by clients.
* @noreference This class is not intended to be referenced by clients.
*/
public class NewRecordWizardPage extends NewTypeWizardPage {
private final static String PAGE_NAME= "NewRecordWizardPage"; //$NON-NLS-1$
private final static int TYPE = NewTypeWizardPage.RECORD_TYPE;
/**
* Creates a new <code>NewRecordWizardPage</code>
*/
public NewRecordWizardPage() {
super(TYPE, PAGE_NAME);
setTitle(NewWizardMessages.NewRecordWizardPage_title);
setDescription(NewWizardMessages.NewRecordWizardPage_description);
}
// -------- Initialization ---------
/**
* The wizard owning this page is responsible for calling this method with the
* current selection. The selection is used to initialize the fields of the wizard
* page.
*
* @param selection used to initialize the fields
*/
public void init(IStructuredSelection selection) {
IJavaElement jelem= getInitialJavaElement(selection);
initContainerPage(jelem);
initTypePage(jelem);
doStatusUpdate();
}
// ------ validation --------
private void doStatusUpdate() {
// all used component status
IStatus[] status= new IStatus[] {
fContainerStatus,
isEnclosingTypeSelected() ? fEnclosingTypeStatus : fPackageStatus,
fTypeNameStatus,
fModifierStatus,
fSuperInterfacesStatus
};
// the mode severe status will be displayed and the OK button enabled/disabled.
updateStatus(status);
}
/*
* @see NewContainerWizardPage#handleFieldChanged
*/
@Override
protected void handleFieldChanged(String fieldName) {
super.handleFieldChanged(fieldName);
doStatusUpdate();
}
// ------ UI --------
/*
* @see WizardPage#createControl
*/
@Override
public void createControl(Composite parent) {
initializeDialogUnits(parent);
Composite composite= new Composite(parent, SWT.NONE);
composite.setFont(parent.getFont());
int nColumns= 4;
GridLayout layout= new GridLayout();
layout.numColumns= nColumns;
composite.setLayout(layout);
createContainerControls(composite, nColumns);
createPackageControls(composite, nColumns);
createEnclosingTypeControls(composite, nColumns);
createSeparator(composite, nColumns);
createTypeNameControls(composite, nColumns);
createModifierControls(composite, nColumns);
createSuperInterfacesControls(composite, nColumns);
createCommentControls(composite, nColumns);
enableCommentControl(true);
setControl(composite);
Dialog.applyDialogFont(composite);
PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IJavaHelpContextIds.NEW_RECORD_WIZARD_PAGE);
}
/*
* @see WizardPage#becomesVisible
*/
@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible) {
setFocus();
}
}
}