org.symbian.tools.mtw.ui/src/org/symbian/tools/tmw/internal/ui/wizard/NewApplicationFacetsWizardPage.java
changeset 465 87920e15f8eb
child 467 5a2901872fcf
equal deleted inserted replaced
464:0b02f3d6f52c 465:87920e15f8eb
       
     1 package org.symbian.tools.tmw.internal.ui.wizard;
       
     2 
       
     3 import java.util.Set;
       
     4 
       
     5 import org.eclipse.jface.wizard.WizardPage;
       
     6 import org.eclipse.swt.events.DisposeEvent;
       
     7 import org.eclipse.swt.events.DisposeListener;
       
     8 import org.eclipse.swt.widgets.Composite;
       
     9 import org.eclipse.ui.PlatformUI;
       
    10 import org.eclipse.ui.help.IWorkbenchHelpSystem;
       
    11 import org.eclipse.wst.common.project.facet.core.IFacetedProjectWorkingCopy;
       
    12 import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
       
    13 import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectEvent;
       
    14 import org.eclipse.wst.common.project.facet.core.events.IFacetedProjectListener;
       
    15 import org.eclipse.wst.common.project.facet.core.runtime.RuntimeManager;
       
    16 import org.eclipse.wst.common.project.facet.core.runtime.events.IRuntimeLifecycleEvent;
       
    17 import org.eclipse.wst.common.project.facet.core.runtime.events.IRuntimeLifecycleListener;
       
    18 import org.eclipse.wst.common.project.facet.ui.FacetUiHelpContextIds;
       
    19 import org.eclipse.wst.common.project.facet.ui.internal.FacetedProjectFrameworkImages;
       
    20 
       
    21 /**
       
    22  * @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a>
       
    23  */
       
    24 
       
    25 @SuppressWarnings("restriction")
       
    26 public final class NewApplicationFacetsWizardPage extends WizardPage {
       
    27     public FacetsSelectionPanel panel;
       
    28     private final IFacetedProjectWorkingCopy fpjwc;
       
    29 
       
    30     public NewApplicationFacetsWizardPage(final Set<IProjectFacetVersion> base, final IFacetedProjectWorkingCopy fpjwc) {
       
    31         super("facets.selection.page"); //$NON-NLS-1$
       
    32 
       
    33         setTitle("Project Facets");
       
    34         setDescription("Select the facets that should be enabled for this project.");
       
    35         setImageDescriptor(FacetedProjectFrameworkImages.BANNER_IMAGE.getImageDescriptor());
       
    36 
       
    37         this.fpjwc = fpjwc;
       
    38     }
       
    39 
       
    40     public void createControl(final Composite parent) {
       
    41         this.panel = new FacetsSelectionPanel(parent, this.fpjwc);
       
    42 
       
    43         updatePageState();
       
    44 
       
    45         this.fpjwc.addListener(new IFacetedProjectListener() {
       
    46             public void handleEvent(final IFacetedProjectEvent event) {
       
    47                 updatePageState();
       
    48             }
       
    49         }, IFacetedProjectEvent.Type.PROJECT_MODIFIED);
       
    50 
       
    51         final IRuntimeLifecycleListener runtimeLifecycleListener = new IRuntimeLifecycleListener() {
       
    52             public void handleEvent(final IRuntimeLifecycleEvent event) {
       
    53                 updatePageState();
       
    54             }
       
    55         };
       
    56 
       
    57         RuntimeManager.addListener(runtimeLifecycleListener, IRuntimeLifecycleEvent.Type.VALIDATION_STATUS_CHANGED);
       
    58 
       
    59         this.panel.addDisposeListener(new DisposeListener() {
       
    60             public void widgetDisposed(final DisposeEvent e) {
       
    61                 RuntimeManager.removeListener(runtimeLifecycleListener);
       
    62             }
       
    63         });
       
    64 
       
    65         final IWorkbenchHelpSystem h = PlatformUI.getWorkbench().getHelpSystem();
       
    66         h.setHelp(this.panel, FacetUiHelpContextIds.FACETS_SELECTION_PAGE);
       
    67 
       
    68         setControl(this.panel);
       
    69     }
       
    70 
       
    71     private void updatePageState() {
       
    72         if (!Thread.currentThread().equals(this.panel.getDisplay().getThread())) {
       
    73             final Runnable uiRunnable = new Runnable() {
       
    74                 public void run() {
       
    75                     updatePageState();
       
    76                 }
       
    77             };
       
    78 
       
    79             this.panel.getDisplay().asyncExec(uiRunnable);
       
    80             return;
       
    81         }
       
    82 
       
    83         setPageComplete(this.panel.isSelectionValid());
       
    84 
       
    85         if (getContainer().getCurrentPage() != null) {
       
    86             getContainer().updateButtons();
       
    87         }
       
    88     }
       
    89 
       
    90     public void setVisible(final boolean visible) {
       
    91         super.setVisible(visible);
       
    92 
       
    93         if (visible) {
       
    94             this.panel.setFocus();
       
    95         }
       
    96     }
       
    97 }