DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (dcc6d7a0dc00)

VCS Links

Line Code
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;
template<class T> class nsTArray;
#include "nsDirection.h"
#include "nsIPresShell.h" // TODO: Remove this include
#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(4d3bb9d5-a259-47ca-b7b7-9b66c6f8b348)]
interface nsISelectionPrivate : nsISelection
 {
    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);
};