summaryrefslogtreecommitdiff
path: root/editor/nsIHTMLAbsPosEditor.idl
blob: 7ecffac60970de636ca6745ee7bf6f5d58486e39 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* -*- 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();

};