summaryrefslogtreecommitdiff
path: root/dom/base/nsISelectionPrivate.idl
blob: 049873b28b31e96cfe576bf537b49cf898967188 (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* 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 "nsISelection.idl"

interface nsRange;
interface nsIDOMNode;
interface nsISelectionListener;
interface nsIContent;
interface nsINode;

%{C++
class nsIFrame;
struct nsPoint;
struct ScrollAxis;
#include "nsDirection.h"
#include "nsIPresShell.h" // TODO: Remove this include
#include "nsTArrayForwardDeclare.h"
#include "mozilla/EventForwards.h"
%}

[ptr] native nsIFrame(nsIFrame);
[ptr] native RangeArray(nsTArray<nsRange*>);
[ref] native constTextRangeStyleRef(const mozilla::TextRangeStyle);
[ref] native nsPointRef(nsPoint);
native nsDirection(nsDirection);
native ScrollAxis(nsIPresShell::ScrollAxis);

[scriptable, builtinclass, uuid(0c9f4f74-ee7e-4fe9-be6b-0ba856368178)]
interface nsISelectionPrivate : nsISupports
 {
    const short ENDOFPRECEDINGLINE=0;
    const short STARTOFNEXTLINE=1;

    attribute boolean interlinePosition;
    [noscript] attribute nsIContent ancestorLimiter;

    /* startBatchChanges
       match this up with endbatchChanges. will stop ui updates while multiple selection methods are called
    */
    [noscript] void startBatchChanges();

    /* endBatchChanges
       match this up with startBatchChanges
    */
    [noscript] void endBatchChanges();

    DOMString  toStringWithFormat(in string formatType, in unsigned long flags, in int32_t wrapColumn);
    void  addSelectionListener(in nsISelectionListener newListener);
    void  removeSelectionListener(in nsISelectionListener listenerToRemove);

    /* Table selection stuff
       We should probably move this and table-related
       items in nsFrameSelection  to a
       new nsITableSelection interface
    */
    const long TABLESELECTION_NONE     = 0;
    const long TABLESELECTION_CELL     = 1;
    const long TABLESELECTION_ROW      = 2;
    const long TABLESELECTION_COLUMN   = 3;
    const long TABLESELECTION_TABLE    = 4;
    const long TABLESELECTION_ALLCELLS = 5;

    /** Test if supplied range points to a single table element:
      *    Result is one of above constants. "None" means
      *    a table element isn't selected.
      */
    [noscript] long getTableSelectionType(in nsIDOMRange range);

    /* canCacheFrameOffset
     * Frame Offset cache can be used just during calling nsEditor::EndPlaceHolderTransaction.
     * EndPlaceHolderTransaction will give rise to reflow/refreshing view/scroll, and call times
     * of nsTextFrame::GetPointFromOffset whose return value is to be cached.
     * see bugs 35296 and 199412
     */
    [noscript] attribute boolean canCacheFrameOffset;

    /* GetCachedOffsetForFrame
     * Returns cached value for nsTextFrame::GetPointFromOffset.
     */
    [noscript] void getCachedFrameOffset(in nsIFrame aFrame, in int32_t inOffset, in nsPointRef aPoint);

    /**
     * Set the painting style for the range. The range must be a range in
     * the selection. The textRangeStyle will be used by text frame
     * when it is painting the selection.
     */
    [noscript] void setTextRangeStyle(in nsIDOMRange range,
                      in constTextRangeStyleRef textRangeStyle);

    /**
     * Get the direction of the selection.
     */
    [noscript, notxpcom] nsDirection getSelectionDirection();
    [noscript, notxpcom] void setSelectionDirection(in nsDirection aDirection);

    /**
     * Returns the type of the selection (see nsISelectionController for
     * available constants).
     */
    readonly attribute short type;

    /**
     * Return array of ranges intersecting with the given DOM interval.
     */
    void GetRangesForInterval(
        in nsIDOMNode beginNode, in int32_t beginOffset,
        in nsIDOMNode endNode, in int32_t endOffset,
        in boolean allowAdjacent,
        out uint32_t resultCount,
        [retval, array, size_is(resultCount)] out nsIDOMRange results);

    [noscript] void GetRangesForIntervalArray(
        in nsINode beginNode, in int32_t beginOffset,
        in nsINode endNode, in int32_t endOffset,
        in boolean allowAdjacent,
        in RangeArray results);

    /**
     * Scrolls a region of the selection, so that it is visible in
     * the scrolled view.
     *
     * @param aRegion - the region inside the selection to scroll into view
     *                  (see selection region constants defined in
     *                   nsISelectionController).
     * @param aIsSynchronous - when true, scrolls the selection into view
     *                         before returning. If false, posts a request which
     *                         is processed at some point after the method returns.
     * @param aVPercent - how to align the frame vertically.
     * @param aHPercent - how to align the frame horizontally.
     */
    void scrollIntoView(in short aRegion, in boolean aIsSynchronous,
                        in int16_t aVPercent,
                        in int16_t aHPercent);

    /**
     * Scrolls a region of the selection, so that it is visible in
     * the scrolled view.
     *
     * @param aRegion - the region inside the selection to scroll into view
     *                  (see selection region constants defined in
     *                   nsISelectionController).
     * @param aIsSynchronous - when true, scrolls the selection into view
     *                         before returning. If false, posts a request which
     *                         is processed at some point after the method returns.
     * @param aVertical - how to align the frame vertically and when.
     *                    See nsIPresShell.h:ScrollAxis for details.
     * @param aHorizontal - how to align the frame horizontally and when.
     *                    See nsIPresShell.h:ScrollAxis for details.
     */
    [noscript] void scrollIntoViewInternal(in short aRegion,
                                           in boolean aIsSynchronous,
                                           in ScrollAxis aVertical,
                                           in ScrollAxis aHorizontal);

    /**
     * Modifies the cursor Bidi level after a change in keyboard direction
     * @param langRTL is PR_TRUE if the new language is right-to-left or
     *                PR_FALSE if the new language is left-to-right.
     */
    [noscript] void selectionLanguageChange(in boolean langRTL);
};