package net.certware.argument.sfp.review.wizard;
import net.certware.argument.sfp.semiFormalProof.Proof;
import net.certware.core.ui.help.IHelpContext;
import org.eclipse.help.IContextProvider;
import org.eclipse.jface.dialogs.DialogPage;
import org.eclipse.jface.dialogs.IDialogPage;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
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.Control;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.ManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.help.IWorkbenchHelpSystem;
/**
* Review validate wizard page.
* Creates a master-details block with proof and statement details.
* @author mrb
* @since 1.0.3
*/
public class ReviewValidatePage extends WizardPage implements IHelpContext {
/** context provider for help system */
static ReviewContextProvider contextprovider = null;
/** page title */
static final String PAGE_TITLE = "CertWare Semi-Formal Proof Review";
/** page description */
static final String PAGE_DESCRIPTION = "Proof Statement Review";
/** proof to process */
Proof proof;
/** form widget toolkit managed by activator */
FormToolkit toolkit;
/** whether the content has been modified */
boolean isModified = false;
/** setup page for validation field access */
ReviewSetupPage setupPage;
/** scrolled properties block */
ScrolledPropertiesBlock block;
/**
* Constructor for the review wizard validate page.
* @param proof proof to review
* @param toolkit form toolkit
* @param setupPage associated setup page
*/
public ReviewValidatePage(Proof proof, FormToolkit toolkit,ReviewSetupPage setupPage) {
super("Proof Review Page");
setTitle(PAGE_TITLE);
setDescription(PAGE_DESCRIPTION);
this.proof = proof;
this.toolkit = toolkit;
this.setupPage = setupPage;
}
/**
* @see IDialogPage#createControl(Composite)
*/
public void createControl(Composite parent) {
// scrolled form on which to place the block
Composite composite = new Composite(parent, SWT.BORDER);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
ScrolledForm form = toolkit.createScrolledForm(composite);
IManagedForm managedForm = new ManagedForm(toolkit, form);
form.setText("Proof Statement Validation");
form.setLayoutData(new GridData(GridData.FILL_BOTH));
// block for the master-details pages
block = new ScrolledPropertiesBlock(proof,this,setupPage);
block.createContent(managedForm);
setMessage("Select a statement to review", DialogPage.INFORMATION);
setControl(composite);
setHelpContextIDs(composite);
setPageComplete(false);
}
@Override
public void dispose() {
if ( block != null ) {
block.dispose();
}
super.dispose();
}
/**
* Set the context IDs for help system.
* Wait to call until site has been established.
*/
private void setHelpContextIDs(Control control) {
IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
helpSystem.setHelp(control, IHelpContext.REVIEW_WIZARD_PAGE);
}
/**
* Adapter to identify context provider.
* Supports the help system contribution.
*/
@SuppressWarnings("rawtypes")
public Object getAdapter(Class key) {
if (key.equals(IContextProvider.class)) {
if (contextprovider == null)
contextprovider = new ReviewContextProvider();
return contextprovider;
}
return null;
}
/**
* Sets the selected node for reference by the finish method.
* Sets page complete true if selected node is not an inner node such as category.
* @param selectedNode selected node from master tree
*/
@SuppressWarnings("unused")
public void setSelectedNode(ISelection selectedNode) {
if ( selectedNode instanceof IStructuredSelection ) {
IStructuredSelection iss = (IStructuredSelection)selectedNode;
if ( iss.isEmpty() == false ) {
Object firstElement = iss.getFirstElement();
}
}
}
/**
* Returns the selected node from the master tree.
* Expects to be Proof, Statement, etc.
* @return selected node, or null
*/
public boolean isModified() {
return isModified;
}
}