protected void updateSelectionProvider() {
   if (guiEditor != null) {
     selectionProvider.addHost("guiEditor", guiEditor.getSelectionProvider()); // $NON-NLS-1$
   }
   if (textEditor != null) {
     selectionProvider.addHost("textEditor", getTextSelectionProvider()); // $NON-NLS-1$
   }
   int index = getActivePage();
   if (index == getSourcePageIndex()) {
     if (textEditor != null) {
       selectionProvider.setHost(getTextSelectionProvider());
     }
     return;
   }
   if (index != getGuiPageIndex()
       || guiEditor == null
       || guiEditor.getSelectionProvider() == null) {
     if (treeEditor != null) {
       selectionProvider.setHost(treeEditor.getSelectionProvider());
       treeEditor.fireEditorSelected();
     }
     if (treeFormPage != null) {
       selectionProvider.addHost(
           "treeEditor", treeFormPage.getSelectionProvider(), true); // $NON-NLS-1$
     }
   } else {
     ISelectionProvider p = guiEditor.getSelectionProvider();
     selectionProvider.setHost(p);
     if (p instanceof AbstractSelectionProvider) {
       ((AbstractSelectionProvider) p).fireSelectionChanged();
     }
   }
 }
 protected void createGuiPage() {
   guiEditor = new TilesGuiEditor();
   try {
     int index = addPage(guiEditor, getEditorInput());
     setPageText(index, WebUIMessages.DIAGRAM);
     guiEditor.setInput(input);
     selectionProvider.setHost(guiEditor.getSelectionProvider());
     guiEditor.addErrorSelectionListener(createErrorSelectionListener());
     selectionProvider.addHost("guiEditor", guiEditor.getSelectionProvider()); // $NON-NLS-1$
   } catch (PartInitException e) {
     TilesUIPlugin.getPluginLog().logError(e);
   }
 }
 protected void setNormalMode() {
   if ((guiEditor != null) && isAppropriateNature()) {
     guiEditor.setObject(getModelObject(), isErrorMode());
   }
   if (treeFormPage != null) {
     treeFormPage.initialize(getModelObject());
     treeFormPage.setErrorMode(isErrorMode());
   }
   updateSelectionProvider();
 }
  public Object getAdapter(Class adapter) {
    if (adapter == IContentOutlinePage.class) {
      if (guiEditor == null || guiEditor.getGUI() == null) {
        return super.getAdapter(adapter);
      }
      Object o = guiEditor.getGUI().getAdapter(adapter);
      if (o instanceof DiagramContentOutlinePage) {
        DiagramContentOutlinePage g = (DiagramContentOutlinePage) o;
        g.setTreeOutline(outline);
      }
      return o;
    }
    if (adapter == ActionRegistry.class || adapter == org.eclipse.gef.editparts.ZoomManager.class) {
      if (guiEditor != null)
        if (guiEditor.getGUI() != null) return guiEditor.getGUI().getAdapter(adapter);
    }

    return super.getAdapter(adapter);
  }
 public void dispose() {
   if (input != null) {
     selectionProvider.setHost(null);
     getSite().setSelectionProvider(null);
   }
   super.dispose();
   if (guiEditor != null) {
     guiEditor.dispose();
     guiEditor = null;
   }
 }