SimpleCSIntroDetails.java :  » IDE-Eclipse » Eclipse-plug-in-development » org » eclipse » pde » internal » ui » editor » cheatsheet » simple » details » Java Open Source

Java Open Source » IDE Eclipse » Eclipse plug in development 
Eclipse plug in development » org » eclipse » pde » internal » ui » editor » cheatsheet » simple » details » SimpleCSIntroDetails.java
/*******************************************************************************
 * Copyright (c) 2006, 2007 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

package org.eclipse.pde.internal.ui.editor.cheatsheet.simple.details;

import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IDocumentListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.pde.internal.core.icheatsheet.simple.ISimpleCSIntro;
import org.eclipse.pde.internal.ui.PDEUIMessages;
import org.eclipse.pde.internal.ui.editor.FormLayoutFactory;
import org.eclipse.pde.internal.ui.editor.cheatsheet.CSAbstractDetails;
import org.eclipse.pde.internal.ui.editor.cheatsheet.ICSMaster;
import org.eclipse.pde.internal.ui.editor.cheatsheet.simple.SimpleCSInputContext;
import org.eclipse.pde.internal.ui.parts.PDESourceViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.forms.IFormColors;
import org.eclipse.ui.forms.IFormPart;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.Section;

/**
 * SimpleCSIntroDetails
 *
 */
public class SimpleCSIntroDetails extends CSAbstractDetails {

  private ISimpleCSIntro fIntro;
  
  private PDESourceViewer fContentViewer;
  
  private Section fMainSection;  
  
  private SimpleCSHelpDetails fHelpSection;
  
  private boolean fBlockEvents;
  
  /**
   * @param elementSection
   */
  public SimpleCSIntroDetails(ICSMaster elementSection) {
    super(elementSection, SimpleCSInputContext.CONTEXT_ID);
    fIntro = null;
    
    fContentViewer = null;
    fMainSection = null;
    fHelpSection = new SimpleCSHelpDetails(elementSection);
    fBlockEvents = false;
  }

  /**
   * @param object
   */
  public void setData(ISimpleCSIntro object) {
    // Set data
    fIntro = object;
    // Set data on help section
    fHelpSection.setData(object);
  }  
  
  /* (non-Javadoc)
   * @see org.eclipse.pde.internal.ui.editor.cheatsheet.CSAbstractDetails#selectionChanged(org.eclipse.ui.forms.IFormPart, org.eclipse.jface.viewers.ISelection)
   */
  public void selectionChanged(IFormPart part, ISelection selection) {
    // Get the first selected object
    Object object = getFirstSelectedObject(selection);
    // Ensure we have the right type
    if ((object == null) ||
        (object instanceof ISimpleCSIntro) == false) {
      return;
    }
    // Set data
    setData((ISimpleCSIntro)object);
    // Update the UI given the new data
    updateFields();  
  }
  
  /* (non-Javadoc)
   * @see org.eclipse.ui.forms.AbstractFormPart#initialize(org.eclipse.ui.forms.IManagedForm)
   */
  public void initialize(IManagedForm form) {
    super.initialize(form);
    // Unfortunately this has to be explicitly called for sub detail
    // sections through its main section parent; since, it never is 
    // registered directly.
    // Initialize managed form for help section
    fHelpSection.initialize(form);
  }    
  
  /* (non-Javadoc)
   * @see org.eclipse.pde.internal.ui.editor.cheatsheet.simple.SimpleCSAbstractDetails#createDetails(org.eclipse.swt.widgets.Composite)
   */
  public void createDetails(Composite parent) {

    GridData data = null;
    
    // Create main section
    fMainSection = getToolkit().createSection(parent, Section.DESCRIPTION | ExpandableComposite.TITLE_BAR);
    fMainSection.clientVerticalSpacing = FormLayoutFactory.SECTION_HEADER_VERTICAL_SPACING;
    fMainSection.setText(PDEUIMessages.SimpleCSIntroDetails_2);
    fMainSection.setDescription(PDEUIMessages.SimpleCSIntroDetails_3);
    fMainSection.setLayout(FormLayoutFactory.createClearGridLayout(false, 1));
    data = new GridData(GridData.FILL_HORIZONTAL);
    fMainSection.setLayoutData(data);
    
    // Align the master and details section headers (misalignment caused
    // by section toolbar icons)
    getPage().alignSectionHeaders(getMasterSection().getSection(), 
        fMainSection);  
    
    // Create container for main section
    Composite mainSectionClient = getToolkit().createComposite(fMainSection);  
    mainSectionClient.setLayout(FormLayoutFactory.createSectionClientGridLayout(false, 2));        
  
    // description:  Content (Element)
    createUIFieldContent(mainSectionClient);
    
    // Bind widgets
    getToolkit().paintBordersFor(mainSectionClient);
    fMainSection.setClient(mainSectionClient);
    markDetailsPart(fMainSection);
    
    fHelpSection.createDetails(parent);
  }

  /**
   * @param parent
   */
  private void createUIFieldContent(Composite parent) {
    GridData data = null;
    // Create the label
    Color foreground = getToolkit().getColors().getColor(IFormColors.TITLE);
    Label label = 
      getToolkit().createLabel(
          parent, 
          PDEUIMessages.SimpleCSDescriptionDetails_0, 
          SWT.WRAP);
    label.setForeground(foreground);
    int style = GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_END;
    data = new GridData(style);
    label.setLayoutData(data);      
    // Create the source viewer
    fContentViewer = new PDESourceViewer(getPage());
    fContentViewer.createUI(parent, 90, 60);
    // Needed to align vertically with form entry field and allow space
    // for a possible field decoration      
    ((GridData)fContentViewer.getViewer().getTextWidget().getLayoutData()).horizontalIndent = 
      FormLayoutFactory.CONTROL_HORIZONTAL_INDENT;
  }
  
  /* (non-Javadoc)
   * @see org.eclipse.pde.internal.ui.editor.PDEDetails#doGlobalAction(java.lang.String)
   */
  public boolean doGlobalAction(String actionId) {
    return fContentViewer.doGlobalAction(actionId);
  }
  
  /* (non-Javadoc)
   * @see org.eclipse.pde.internal.ui.editor.cheatsheet.simple.SimpleCSAbstractDetails#hookListeners()
   */
  public void hookListeners() {
    // description: Content (Element)
    createUIListenersContentViewer();
    fHelpSection.hookListeners();
  }

  /**
   * 
   */
  private void createUIListenersContentViewer() {
    fContentViewer.createUIListeners();
    // Create document listener
    fContentViewer.getDocument().addDocumentListener(new IDocumentListener() {
      public void documentAboutToBeChanged(DocumentEvent event) {
        // NO-OP
      }
      public void documentChanged(DocumentEvent event) {
        // Check whether to handle this event
        if (fBlockEvents) {
          return;
        }  
        // Ensure data object is defined
        if (fIntro == null) {
          return;
        }
        // Get the text from the event
        IDocument document = event.getDocument();
        if (document == null) {
          return;
        }        
        // Get the text from the event
        String text = document.get().trim();
        
        if (fIntro.getDescription() != null) {
          fIntro.getDescription().setContent(text);
        }        
      }
    });        
  }
  
  /* (non-Javadoc)
   * @see org.eclipse.pde.internal.ui.editor.cheatsheet.simple.SimpleCSAbstractDetails#updateFields()
   */
  public void updateFields() {
    // Ensure data object is defined
    if (fIntro == null) {
      return;
    }
    
    fHelpSection.updateFields();
    
    if (fIntro.getDescription() == null) {
      return;
    }

    // description:  Content (Element)
    fBlockEvents = true;
    fContentViewer.getDocument().set(fIntro.getDescription().getContent());
    fBlockEvents = false;
    
    boolean editable = isEditableElement();    
    fContentViewer.getViewer().setEditable(editable);
  }
  
  /* (non-Javadoc)
   * @see org.eclipse.ui.forms.AbstractFormPart#dispose()
   */
  public void dispose() {
    // Set the context menu to null to prevent the editor context menu
    // from being disposed along with the source viewer
    if (fContentViewer != null) {
      fContentViewer.unsetMenu();
      fContentViewer = null;
    }
    
    super.dispose();
  }
  
  /* (non-Javadoc)
   * @see org.eclipse.pde.internal.ui.editor.PDEDetails#canPaste(org.eclipse.swt.dnd.Clipboard)
   */
  public boolean canPaste(Clipboard clipboard) {
    return fContentViewer.canPaste();
  }
  
  /* (non-Javadoc)
   * @see org.eclipse.ui.forms.AbstractFormPart#commit(boolean)
   */
  public void commit(boolean onSave) {
    super.commit(onSave);
    // Only required for form entries
    // No need to call for sub details, because they contain no form entries
  }
  
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.