FormLayoutFactory.java :  » IDE-Eclipse » pde » org » eclipse » pde » internal » ui » editor » Java Open Source

Java Open Source » IDE Eclipse » pde 
pde » org » eclipse » pde » internal » ui » editor » FormLayoutFactory.java
/*******************************************************************************
 *  Copyright (c) 2007, 2008 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;

import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.forms.widgets.TableWrapLayout;

/**
 * FormLayoutFactory
 *
 */
public class FormLayoutFactory {

  // Used in place of 0.  If 0 is used, widget borders will appear clipped
  // on some platforms (e.g. Windows XP Classic Theme).
  // Form tool kit requires parent composites containing the widget to have
  // at least 1 pixel border margins in order to paint the flat borders.
  // The form toolkit paints flat borders on a given widget when native 
  // borders are not painted by SWT.  See FormToolkit#paintBordersFor()
  public static final int DEFAULT_CLEAR_MARGIN = 2;

  // Required to allow space for field decorations
  public static final int CONTROL_HORIZONTAL_INDENT = 3;

  // UI Forms Standards

  // FORM BODY
  public static final int FORM_BODY_MARGIN_TOP = 12;
  public static final int FORM_BODY_MARGIN_BOTTOM = 12;
  public static final int FORM_BODY_MARGIN_LEFT = 6;
  public static final int FORM_BODY_MARGIN_RIGHT = 6;
  public static final int FORM_BODY_HORIZONTAL_SPACING = 20;
  // Should be 20; but, we minus 3 because the section automatically pads the 
  // bottom margin by that amount   
  public static final int FORM_BODY_VERTICAL_SPACING = 17;
  public static final int FORM_BODY_MARGIN_HEIGHT = 0;
  public static final int FORM_BODY_MARGIN_WIDTH = 0;

  // SECTION CLIENT
  public static final int SECTION_CLIENT_MARGIN_TOP = 5;
  public static final int SECTION_CLIENT_MARGIN_BOTTOM = 5;
  // Should be 6; but, we minus 4 because the section automatically pads the
  // left margin by that amount
  public static final int SECTION_CLIENT_MARGIN_LEFT = 2;
  // Should be 6; but, we minus 4 because the section automatically pads the
  // right margin by that amount  
  public static final int SECTION_CLIENT_MARGIN_RIGHT = 2;
  public static final int SECTION_CLIENT_HORIZONTAL_SPACING = 5;
  public static final int SECTION_CLIENT_VERTICAL_SPACING = 5;
  public static final int SECTION_CLIENT_MARGIN_HEIGHT = 0;
  public static final int SECTION_CLIENT_MARGIN_WIDTH = 0;

  public static final int SECTION_HEADER_VERTICAL_SPACING = 6;

  // CLEAR
  public static final int CLEAR_MARGIN_TOP = DEFAULT_CLEAR_MARGIN;
  public static final int CLEAR_MARGIN_BOTTOM = DEFAULT_CLEAR_MARGIN;
  public static final int CLEAR_MARGIN_LEFT = DEFAULT_CLEAR_MARGIN;
  public static final int CLEAR_MARGIN_RIGHT = DEFAULT_CLEAR_MARGIN;
  public static final int CLEAR_HORIZONTAL_SPACING = 0;
  public static final int CLEAR_VERTICAL_SPACING = 0;
  public static final int CLEAR_MARGIN_HEIGHT = 0;
  public static final int CLEAR_MARGIN_WIDTH = 0;

  // FORM PANE
  public static final int FORM_PANE_MARGIN_TOP = 0;
  public static final int FORM_PANE_MARGIN_BOTTOM = 0;
  public static final int FORM_PANE_MARGIN_LEFT = 0;
  public static final int FORM_PANE_MARGIN_RIGHT = 0;
  public static final int FORM_PANE_HORIZONTAL_SPACING = FORM_BODY_HORIZONTAL_SPACING;
  public static final int FORM_PANE_VERTICAL_SPACING = FORM_BODY_VERTICAL_SPACING;
  public static final int FORM_PANE_MARGIN_HEIGHT = 0;
  public static final int FORM_PANE_MARGIN_WIDTH = 0;

  // MASTER DETAILS
  public static final int MASTER_DETAILS_MARGIN_TOP = 0;
  public static final int MASTER_DETAILS_MARGIN_BOTTOM = 0;
  // Used only by masters part.  Details part margin dynamically calculated
  public static final int MASTER_DETAILS_MARGIN_LEFT = 0;
  // Used only by details part.  Masters part margin dynamically calcualated
  public static final int MASTER_DETAILS_MARGIN_RIGHT = 1;
  public static final int MASTER_DETAILS_HORIZONTAL_SPACING = FORM_BODY_HORIZONTAL_SPACING;
  public static final int MASTER_DETAILS_VERTICAL_SPACING = FORM_BODY_VERTICAL_SPACING;
  public static final int MASTER_DETAILS_MARGIN_HEIGHT = 0;
  public static final int MASTER_DETAILS_MARGIN_WIDTH = 0;

  /**
   * 
   */
  private FormLayoutFactory() {
    // NO-OP
  }

  /**
   * For form bodies.
   * @param makeColumnsEqualWidth
   * @param numColumns
   * @return
   */
  public static GridLayout createFormGridLayout(boolean makeColumnsEqualWidth, int numColumns) {
    GridLayout layout = new GridLayout();

    layout.marginHeight = FORM_BODY_MARGIN_HEIGHT;
    layout.marginWidth = FORM_BODY_MARGIN_WIDTH;

    layout.marginTop = FORM_BODY_MARGIN_TOP;
    layout.marginBottom = FORM_BODY_MARGIN_BOTTOM;
    layout.marginLeft = FORM_BODY_MARGIN_LEFT;
    layout.marginRight = FORM_BODY_MARGIN_RIGHT;

    layout.horizontalSpacing = FORM_BODY_HORIZONTAL_SPACING;
    layout.verticalSpacing = FORM_BODY_VERTICAL_SPACING;

    layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
    layout.numColumns = numColumns;

    return layout;
  }

  /**
   * For miscellaneous grouping composites.
   * For sections (as a whole - header plus client).
   * @param makeColumnsEqualWidth
   * @param numColumns
   * @return
   */
  public static GridLayout createClearGridLayout(boolean makeColumnsEqualWidth, int numColumns) {
    GridLayout layout = new GridLayout();

    layout.marginHeight = CLEAR_MARGIN_HEIGHT;
    layout.marginWidth = CLEAR_MARGIN_WIDTH;

    layout.marginTop = CLEAR_MARGIN_TOP;
    layout.marginBottom = CLEAR_MARGIN_BOTTOM;
    layout.marginLeft = CLEAR_MARGIN_LEFT;
    layout.marginRight = CLEAR_MARGIN_RIGHT;

    layout.horizontalSpacing = CLEAR_HORIZONTAL_SPACING;
    layout.verticalSpacing = CLEAR_VERTICAL_SPACING;

    layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
    layout.numColumns = numColumns;

    return layout;
  }

  /**
   * For form bodies.
   * @param makeColumnsEqualWidth
   * @param numColumns
   * @return
   */
  public static TableWrapLayout createFormTableWrapLayout(boolean makeColumnsEqualWidth, int numColumns) {
    TableWrapLayout layout = new TableWrapLayout();

    layout.topMargin = FORM_BODY_MARGIN_TOP;
    layout.bottomMargin = FORM_BODY_MARGIN_BOTTOM;
    layout.leftMargin = FORM_BODY_MARGIN_LEFT;
    layout.rightMargin = FORM_BODY_MARGIN_RIGHT;

    layout.horizontalSpacing = FORM_BODY_HORIZONTAL_SPACING;
    layout.verticalSpacing = FORM_BODY_VERTICAL_SPACING;

    layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
    layout.numColumns = numColumns;

    return layout;
  }

  /**
   * For composites used to group sections in left and right panes.
   * @param makeColumnsEqualWidth
   * @param numColumns
   * @return
   */
  public static TableWrapLayout createFormPaneTableWrapLayout(boolean makeColumnsEqualWidth, int numColumns) {
    TableWrapLayout layout = new TableWrapLayout();

    layout.topMargin = FORM_PANE_MARGIN_TOP;
    layout.bottomMargin = FORM_PANE_MARGIN_BOTTOM;
    layout.leftMargin = FORM_PANE_MARGIN_LEFT;
    layout.rightMargin = FORM_PANE_MARGIN_RIGHT;

    layout.horizontalSpacing = FORM_PANE_HORIZONTAL_SPACING;
    layout.verticalSpacing = FORM_PANE_VERTICAL_SPACING;

    layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
    layout.numColumns = numColumns;

    return layout;
  }

  /**
   * For composites used to group sections in left and right panes.
   * @param makeColumnsEqualWidth
   * @param numColumns
   * @return
   */
  public static GridLayout createFormPaneGridLayout(boolean makeColumnsEqualWidth, int numColumns) {
    GridLayout layout = new GridLayout();

    layout.marginHeight = FORM_PANE_MARGIN_HEIGHT;
    layout.marginWidth = FORM_PANE_MARGIN_WIDTH;

    layout.marginTop = FORM_PANE_MARGIN_TOP;
    layout.marginBottom = FORM_PANE_MARGIN_BOTTOM;
    layout.marginLeft = FORM_PANE_MARGIN_LEFT;
    layout.marginRight = FORM_PANE_MARGIN_RIGHT;

    layout.horizontalSpacing = FORM_PANE_HORIZONTAL_SPACING;
    layout.verticalSpacing = FORM_PANE_VERTICAL_SPACING;

    layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
    layout.numColumns = numColumns;

    return layout;
  }

  /**
   * For miscellaneous grouping composites.
   * For sections (as a whole - header plus client).
   * @param makeColumnsEqualWidth
   * @param numColumns
   * @return
   */
  public static TableWrapLayout createClearTableWrapLayout(boolean makeColumnsEqualWidth, int numColumns) {
    TableWrapLayout layout = new TableWrapLayout();

    layout.topMargin = CLEAR_MARGIN_TOP;
    layout.bottomMargin = CLEAR_MARGIN_BOTTOM;
    layout.leftMargin = CLEAR_MARGIN_LEFT;
    layout.rightMargin = CLEAR_MARGIN_RIGHT;

    layout.horizontalSpacing = CLEAR_HORIZONTAL_SPACING;
    layout.verticalSpacing = CLEAR_VERTICAL_SPACING;

    layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
    layout.numColumns = numColumns;

    return layout;
  }

  /**
   * For master sections belonging to a master details block.
   * @param makeColumnsEqualWidth
   * @param numColumns
   * @return
   */
  public static GridLayout createMasterGridLayout(boolean makeColumnsEqualWidth, int numColumns) {
    GridLayout layout = new GridLayout();

    layout.marginHeight = MASTER_DETAILS_MARGIN_HEIGHT;
    layout.marginWidth = MASTER_DETAILS_MARGIN_WIDTH;

    layout.marginTop = MASTER_DETAILS_MARGIN_TOP;
    layout.marginBottom = MASTER_DETAILS_MARGIN_BOTTOM;
    layout.marginLeft = MASTER_DETAILS_MARGIN_LEFT;
    // Cannot set layout on a sash form.
    // In order to replicate the horizontal spacing between sections,
    // divide the amount by 2 and set the master section right margin to 
    // half the amount and set the left details section margin to half
    // the amount.  The default sash width is currently set at 3.
    // Minus 1 pixel from each half.  Use the 1 left over pixel to separate
    // the details section from the vertical scollbar.
    int marginRight = MASTER_DETAILS_HORIZONTAL_SPACING;
    if (marginRight > 0) {
      marginRight = marginRight / 2;
      if (marginRight > 0) {
        marginRight--;
      }
    }
    layout.marginRight = marginRight;

    layout.horizontalSpacing = MASTER_DETAILS_HORIZONTAL_SPACING;
    layout.verticalSpacing = MASTER_DETAILS_VERTICAL_SPACING;

    layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
    layout.numColumns = numColumns;

    return layout;
  }

  /**
   * For details sections belonging to a master details block.
   * @param makeColumnsEqualWidth
   * @param numColumns
   * @return
   */
  public static GridLayout createDetailsGridLayout(boolean makeColumnsEqualWidth, int numColumns) {
    GridLayout layout = new GridLayout();

    layout.marginHeight = MASTER_DETAILS_MARGIN_HEIGHT;
    layout.marginWidth = MASTER_DETAILS_MARGIN_WIDTH;

    layout.marginTop = MASTER_DETAILS_MARGIN_TOP;
    layout.marginBottom = MASTER_DETAILS_MARGIN_BOTTOM;
    // Cannot set layout on a sash form.
    // In order to replicate the horizontal spacing between sections,
    // divide the amount by 2 and set the master section right margin to 
    // half the amount and set the left details section margin to half
    // the amount.  The default sash width is currently set at 3.
    // Minus 1 pixel from each half.  Use the 1 left over pixel to separate
    // the details section from the vertical scollbar.
    int marginLeft = MASTER_DETAILS_HORIZONTAL_SPACING;
    if (marginLeft > 0) {
      marginLeft = marginLeft / 2;
      if (marginLeft > 0) {
        marginLeft--;
      }
    }
    layout.marginLeft = marginLeft;
    layout.marginRight = MASTER_DETAILS_MARGIN_RIGHT;

    layout.horizontalSpacing = MASTER_DETAILS_HORIZONTAL_SPACING;
    layout.verticalSpacing = MASTER_DETAILS_VERTICAL_SPACING;

    layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
    layout.numColumns = numColumns;

    return layout;
  }

  /**
   * For composites set as section clients.
   * For composites containg form text.
   * @param makeColumnsEqualWidth
   * @param numColumns
   * @return
   */
  public static GridLayout createSectionClientGridLayout(boolean makeColumnsEqualWidth, int numColumns) {
    GridLayout layout = new GridLayout();

    layout.marginHeight = SECTION_CLIENT_MARGIN_HEIGHT;
    layout.marginWidth = SECTION_CLIENT_MARGIN_WIDTH;

    layout.marginTop = SECTION_CLIENT_MARGIN_TOP;
    layout.marginBottom = SECTION_CLIENT_MARGIN_BOTTOM;
    layout.marginLeft = SECTION_CLIENT_MARGIN_LEFT;
    layout.marginRight = SECTION_CLIENT_MARGIN_RIGHT;

    layout.horizontalSpacing = SECTION_CLIENT_HORIZONTAL_SPACING;
    layout.verticalSpacing = SECTION_CLIENT_VERTICAL_SPACING;

    layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
    layout.numColumns = numColumns;

    return layout;
  }

  /**
   * For composites set as section clients.
   * For composites containg form text.
   * @param makeColumnsEqualWidth
   * @param numColumns
   * @return
   */
  public static TableWrapLayout createSectionClientTableWrapLayout(boolean makeColumnsEqualWidth, int numColumns) {
    TableWrapLayout layout = new TableWrapLayout();

    layout.topMargin = SECTION_CLIENT_MARGIN_TOP;
    layout.bottomMargin = SECTION_CLIENT_MARGIN_BOTTOM;
    layout.leftMargin = SECTION_CLIENT_MARGIN_LEFT;
    layout.rightMargin = SECTION_CLIENT_MARGIN_RIGHT;

    layout.horizontalSpacing = SECTION_CLIENT_HORIZONTAL_SPACING;
    layout.verticalSpacing = SECTION_CLIENT_VERTICAL_SPACING;

    layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
    layout.numColumns = numColumns;

    return layout;
  }

  /**
   * Debug method.
   * 
   * MAGENTA = 11
   * CYAN = 13
   * GREEN = 5
   * @param container
   * @param color
   */
  public static void visualizeLayoutArea(Composite container, int color) {
    container.setBackground(Display.getCurrent().getSystemColor(color));
  }
}
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.