editor/nsIHTMLAbsPosEditor.idl
author Wes Kocher <wkocher@mozilla.com>
Wed, 20 Jul 2016 15:40:33 -0700
changeset 348052 d2c17679b215bb340b1b8051c74526f6301c6253
parent 216427 faecfa9d0bb6c46e32934182e6154758190262ed
child 425477 cddc1b05b8760e76c0621c402047adaa553be468
permissions -rw-r--r--
Backed out 5 changesets (bug 1287623) for static build bustage CLOSED TREE Backed out changeset a48daec87ec9 (bug 1287623) Backed out changeset 248153344e15 (bug 1287623) Backed out changeset 8aa409c9b1ce (bug 1287623) Backed out changeset 602d4d88e806 (bug 1287623) Backed out changeset 114da8bdc0b0 (bug 1287623)

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"
#include "domstubs.idl"

[scriptable, uuid(91375f52-20e6-4757-9835-eb04fabe5498)]

interface nsIHTMLAbsPosEditor : nsISupports
{
  /**
   * true if the selection container is absolutely positioned
   */
  readonly attribute boolean selectionContainerAbsolutelyPositioned;

  /**
   * this contains the absolutely positioned element currently edited
   * or null
   */
  readonly attribute nsIDOMElement positionedElement;

  /**
   * true if Absolute Positioning handling is enabled in the editor
   */
  attribute boolean absolutePositioningEnabled;


  /* Utility methods */

  /**
   * true if Snap To Grid is enabled in the editor.
   */
  attribute boolean snapToGridEnabled;

  /**
   * sets the grid size in pixels.
   * @param aSizeInPixels [IN] the size of the grid in pixels
   */
  attribute unsigned long gridSize;

  /* Selection-based methods */

  /**
   * returns the deepest absolutely positioned container of the selection
   * if it exists or null.
   */
  readonly attribute nsIDOMElement absolutelyPositionedSelectionContainer;

  /**
   * extracts the selection from the normal flow of the document and
   * positions it.
   * @param aEnabled [IN] true to absolutely position the selection,
   *                      false to put it back in the normal flow
   */
  void absolutePositionSelection(in boolean aEnabled);

  /**
   * adds aChange to the z-index of the currently positioned element.
   * @param aChange [IN] relative change to apply to current z-index
   */
  void relativeChangeZIndex(in long aChange);

  /* Element-based methods */

  /**
   * extracts an element from the normal flow of the document and
   * positions it, and puts it back in the normal flow.
   * @param aElement [IN] the element
   * @param aEnabled [IN] true to absolutely position the element,
   *                      false to put it back in the normal flow
   */
  void absolutelyPositionElement(in nsIDOMElement aElement,
                                 in boolean aEnabled);

  /**
   * sets the position of an element; warning it does NOT check if the
   * element is already positioned or not and that's on purpose.
   * @param aElement [IN] the element
   * @param aX       [IN] the x position in pixels.
   * @param aY       [IN] the y position in pixels.
   */
  void setElementPosition(in nsIDOMElement aElement, in long aX, in long aY);

  /**
   * returns the absolute z-index of a positioned element. Never returns 'auto'.
   * @return         the z-index of the element
   * @param aElement [IN] the element.
   */
  long getElementZIndex(in nsIDOMElement aElement);

  /**
   * sets the z-index of an element.
   * @param aElement [IN] the element
   * @param aZorder  [IN] the z-index
   */
  void setElementZIndex(in nsIDOMElement aElement, in long aZorder);

  /**
   * adds aChange to the z-index of an arbitrary element.
   * @return         the new z-index of the element
   * @param aElement [IN] the element
   * @param aChange  [IN] relative change to apply to current z-index of
   *                      the element
   */
  long relativeChangeElementZIndex(in nsIDOMElement aElement, in long aChange);

  /* Other */

  /**
   * shows a grabber attached to an arbitrary element. The grabber is an image
   * positioned on the left hand side of the top border of the element. Dragging
   * and dropping it allows to change the element's absolute position in the
   * document. See chrome://editor/content/images/grabber.gif
   * @param aElement [IN] the element
   */
  void showGrabberOnElement(in nsIDOMElement aElement);

  /**
   * hide the grabber if it shown.
   */
  void hideGrabber();

  /**
   * refreshes the grabber if it shown, possibly updating its position or
   * even hiding it.
   */
  void refreshGrabber();

};