Adding new code for feature save on unfocus. This is from ticket #542. It also adds...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / ui / wizards / NewElementWizardPage.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2003 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials 
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  * 
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package net.sourceforge.phpdt.ui.wizards;
12
13 import net.sourceforge.phpdt.externaltools.internal.ui.StatusInfo;
14 import net.sourceforge.phpdt.internal.ui.dialogs.StatusUtil;
15
16 import org.eclipse.core.runtime.IStatus;
17 import org.eclipse.jface.wizard.WizardPage;
18
19 /**
20  * Base class for wizard page responsible to create PHP elements. The class
21  * provides API to update the wizard's statis line and OK button according to
22  * the value of a <code>IStatus</code> object.
23  * 
24  * @since 2.0
25  */
26 public abstract class NewElementWizardPage extends WizardPage {
27
28         private IStatus fCurrStatus;
29
30         private boolean fPageVisible;
31
32         /**
33          * Creates a <code>NewElementWizardPage</code>.
34          * 
35          * @param name
36          *            the wizard page's name
37          */
38         public NewElementWizardPage(String name) {
39                 super(name);
40                 fPageVisible = false;
41                 fCurrStatus = new StatusInfo();
42         }
43
44         // ---- WizardPage ----------------
45
46         /*
47          * @see WizardPage#becomesVisible
48          */
49         public void setVisible(boolean visible) {
50                 super.setVisible(visible);
51                 fPageVisible = visible;
52                 // policy: wizards are not allowed to come up with an error message
53                 if (visible && fCurrStatus.matches(IStatus.ERROR)) {
54                         StatusInfo status = new StatusInfo();
55                         status.setError(""); //$NON-NLS-1$
56                         fCurrStatus = status;
57                 }
58                 updateStatus(fCurrStatus);
59         }
60
61         /**
62          * Updates the status line and the ok button according to the given status
63          * 
64          * @param status
65          *            status to apply
66          */
67         protected void updateStatus(IStatus status) {
68                 fCurrStatus = status;
69                 setPageComplete(!status.matches(IStatus.ERROR));
70                 if (fPageVisible) {
71                         StatusUtil.applyToStatusLine(this, status);
72                 }
73         }
74
75         /**
76          * Updates the status line and the ok button according to the status
77          * evaluate from an array of status. The most severe error is taken. In case
78          * that two status with the same severity exists, the status with lower
79          * index is taken.
80          * 
81          * @param status
82          *            the array of status
83          */
84         protected void updateStatus(IStatus[] status) {
85                 updateStatus(StatusUtil.getMostSevere(status));
86         }
87
88 }