gecko-dev/layout/base/nsIFrameSelection.h

469 строки
21 KiB
C
Исходник Обычный вид История

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
/*
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* NOTE!! This is not a general class, but specific to layout and frames.
* Consumers looking for the general selection interface should look at
* nsISelection.
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
*/
#ifndef nsIFrameSelection_h___
#define nsIFrameSelection_h___
#include "nsISupports.h"
#include "nsIFrame.h"
#include "nsIFocusTracker.h"
#include "nsISelection.h"
#include "nsIContent.h"
#include "nsCOMPtr.h"
2000-04-27 11:37:12 +04:00
#include "nsISelectionController.h"
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
// IID for the nsIFrameSelection interface
#define NS_IFRAMESELECTION_IID \
{ 0xf46e4171, 0xdeaa, 0x11d1, \
{ 0x97, 0xfc, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
//----------------------------------------------------------------------
// Selection interface
struct SelectionDetails
{
PRInt32 mStart;
PRInt32 mEnd;
SelectionType mType;
SelectionDetails *mNext;
};
/*PeekOffsetStruct
* @param mTracker is used to get the PresContext usefull for measuring text ect.
* @param mDesiredX is the "desired" location of the new caret
* @param mAmount eWord, eCharacter, eLine
* @param mDirection enum defined in this file to be eForward or eBackward
* @param mStartOffset start offset to start the peek. 0 == beginning -1 = end
* @param mResultContent content that actually is the next/previous
* @param mResultOffset offset for result content
* @param mResultFrame resulting frame for peeking
* @param mEatingWS boolean to tell us the state of our search for Next/Prev
* @param mPreferLeft true = prev line end, false = next line begin
* @param mJumpLines if this is true then its ok to cross lines while peeking
2002-04-16 06:42:09 +04:00
* @param mScrollViewStop if this is true then stop peeking across scroll view boundary
*/
struct nsPeekOffsetStruct
{
void SetData(nsIFocusTracker *aTracker,
nscoord aDesiredX,
nsSelectionAmount aAmount,
nsDirection aDirection,
PRInt32 aStartOffset,
PRBool aEatingWS,
PRBool aPreferLeft,
2002-04-16 06:42:09 +04:00
PRBool aJumpLines,
PRBool aScrollViewStop,
PRBool aIsKeyboardSelect)
{
2002-04-16 06:42:09 +04:00
mTracker=aTracker;
mDesiredX=aDesiredX;
mAmount=aAmount;
mDirection=aDirection;
mStartOffset=aStartOffset;
mEatingWS=aEatingWS;
mPreferLeft=aPreferLeft;
mJumpLines = aJumpLines;
mScrollViewStop = aScrollViewStop;
mIsKeyboardSelect = aIsKeyboardSelect;
}
nsIFocusTracker *mTracker;
nscoord mDesiredX;
nsSelectionAmount mAmount;
nsDirection mDirection;
PRInt32 mStartOffset;
nsCOMPtr<nsIContent> mResultContent;
PRInt32 mContentOffset;
PRInt32 mContentOffsetEnd;
nsIFrame *mResultFrame;
PRBool mEatingWS;
PRBool mPreferLeft;
PRBool mJumpLines;
2002-04-16 06:42:09 +04:00
PRBool mScrollViewStop;
PRBool mIsKeyboardSelect;
};
2000-05-13 12:06:13 +04:00
class nsIScrollableView;
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
class nsIFrameSelection : public nsISupports {
public:
NS_DEFINE_STATIC_IID_ACCESSOR(NS_IFRAMESELECTION_IID)
enum HINT { HINTLEFT = 0, HINTRIGHT = 1}; //end of this line or beginning of next
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
/** Init will initialize the frame selector with the necessary focus tracker to
* be used by most of the methods
* @param aTracker is the parameter to be used for most of the other calls for callbacks ect
2000-05-02 07:44:17 +04:00
* @param aLimiter limits the selection to nodes with aLimiter parents
*/
2000-05-13 12:06:13 +04:00
NS_IMETHOD Init(nsIFocusTracker *aTracker, nsIContent *aLimiter) = 0; //default since this isnt used for embedding
2001-05-11 17:24:28 +04:00
/* SetScrollableView sets the scroll view
* @param aScrollView is the scroll view for this selection.
2000-05-13 12:06:13 +04:00
*/
NS_IMETHOD SetScrollableView(nsIScrollableView *aScrollView) =0;
2001-05-11 17:24:28 +04:00
/* GetScrollableView gets the current scroll view
* @param aScrollView is the scroll view for this selection.
*/
NS_IMETHOD GetScrollableView(nsIScrollableView **aScrollView) =0;
/** ShutDown will be called when the owner of the frame selection is shutting down
* this should be the time to release all member variable interfaces. all methods
* called after ShutDown should return NS_ERROR_FAILURE
*/
NS_IMETHOD ShutDown() = 0;
/** HandleKeyEvent will accept an event.
* <P>DOES NOT ADDREF<P>
* @param aGuiEvent is the event that should be dealt with by aFocusFrame
* @param aFrame is the frame that MAY handle the event
*/
NS_IMETHOD HandleTextEvent(nsGUIEvent *aGuiEvent) = 0;
/** HandleKeyEvent will accept an event and a PresContext.
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
* <P>DOES NOT ADDREF<P>
* @param aGuiEvent is the event that should be dealt with by aFocusFrame
* @param aFrame is the frame that MAY handle the event
*/
NS_IMETHOD HandleKeyEvent(nsIPresContext* aPresContext, nsGUIEvent *aGuiEvent) = 0;
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
/** HandleClick will take the focus to the new frame at the new offset and
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
* will either extend the selection from the old anchor, or replace the old anchor.
* the old anchor and focus position may also be used to deselect things
* @param aNewfocus is the content that wants the focus
* @param aContentOffset is the content offset of the parent aNewFocus
* @param aContentOffsetEnd is the content offset of the parent aNewFocus and is specified different
* when you need to select to and include both start and end points
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
* @param aContinueSelection is the flag that tells the selection to keep the old anchor point or not.
* @param aMultipleSelection will tell the frame selector to replace /or not the old selection.
* cannot coexist with aContinueSelection
* @param aHint will tell the selection which direction geometrically to actually show the caret on.
* 1 = end of this line 0 = beggining of this line
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
*/
NS_IMETHOD HandleClick(nsIContent *aNewFocus, PRUint32 aContentOffset, PRUint32 aContentEndOffset ,
PRBool aContinueSelection, PRBool aMultipleSelection, PRBool aHint) = 0;
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
/** HandleDrag extends the selection to contain the frame closest to aPoint.
* @param aPresContext is the context to use when figuring out what frame contains the point.
* @param aFrame is the parent of all frames to use when searching for the closest frame to the point.
* @param aPoint is relative to aFrame's parent view.
*/
NS_IMETHOD HandleDrag(nsIPresContext *aPresContext, nsIFrame *aFrame, nsPoint& aPoint) = 0;
/** HandleTableSelection will set selection to a table, cell, etc
* depending on information contained in aFlags
* @param aParentContent is the paretent of either a table or cell that user clicked or dragged the mouse in
* @param aContentOffset is the offset of the table or cell
* @param aTarget indicates what to select (defined in nsISelectionPrivate.idl/nsISelectionPrivate.h):
* TABLESELECTION_CELL We should select a cell (content points to the cell)
* TABLESELECTION_ROW We should select a row (content points to any cell in row)
* TABLESELECTION_COLUMN We should select a row (content points to any cell in column)
* TABLESELECTION_TABLE We should select a table (content points to the table)
* TABLESELECTION_ALLCELLS We should select all cells (content points to any cell in table)
* @param aMouseEvent passed in so we we can get where event occured and what keys are pressed
*/
NS_IMETHOD HandleTableSelection(nsIContent *aParentContent, PRInt32 aContentOffset, PRInt32 aTarget, nsMouseEvent *aMouseEvent) = 0;
/** StartAutoScrollTimer is responsible for scrolling the view so that aPoint is always
* visible, and for selecting any frame that contains aPoint. The timer will also reset
* itself to fire again if the view has not scrolled to the end of the document.
* @param aPresContext is the context to use when figuring out what frame contains the point.
* @param aFrame is the parent of all frames to use when searching for the closest frame to the point.
* @param aPoint is relative to aFrame's parent view.
* @param aDelay is the timer's interval.
*/
NS_IMETHOD StartAutoScrollTimer(nsIPresContext *aPresContext, nsIFrame *aFrame, nsPoint& aPoint, PRUint32 aDelay) = 0;
/** StopAutoScrollTimer stops any active auto scroll timer.
*/
NS_IMETHOD StopAutoScrollTimer() = 0;
/** EnableFrameNotification
* mutch like start batching, except all dirty calls are ignored. no notifications will go
* out until enableNotifications with a PR_TRUE is called
*/
NS_IMETHOD EnableFrameNotification(PRBool aEnable) = 0;
/** Lookup Selection
* returns in frame coordinates the selection beginning and ending with the type of selection given
* @param aContent is the content asking
* @param aContentOffset is the starting content boundary
* @param aContentLength is the length of the content piece asking
* @param aReturnDetails linkedlist of return values for the selection.
* @param aSlowCheck will check using slow method with no shortcuts
*/
NS_IMETHOD LookUpSelection(nsIContent *aContent, PRInt32 aContentOffset, PRInt32 aContentLength,
SelectionDetails **aReturnDetails, PRBool aSlowCheck) = 0;
/** SetMouseDownState(PRBool);
* sets the mouse state to aState for resons of drag state.
* @param aState is the new state of mousedown
*/
NS_IMETHOD SetMouseDownState(PRBool aState)=0;
/** GetMouseDownState(PRBool *);
* gets the mouse state to aState for resons of drag state.
* @param aState will hold the state of mousedown
*/
NS_IMETHOD GetMouseDownState(PRBool *aState)=0;
/**
if we are in table cell selection mode. aka ctrl click in table cell
*/
NS_IMETHOD GetTableCellSelection(PRBool *aState)=0;
/** GetSelection
* no query interface for selection. must use this method now.
* @param aSelectionType enum value defined in nsISelection for the seleciton you want.
*/
NS_IMETHOD GetSelection(SelectionType aSelectionType, nsISelection **aSelection)=0;
/**
* ScrollSelectionIntoView scrolls a region of the selection,
* so that it is visible in the scrolled view.
*
* @param aType the selection to scroll into view.
* @param aRegion the region inside the selection to scroll into view.
Partial fix for bug 141900 (Text entry fields in forms excruciatingly slow.) mozilla/content/base/public/nsISelectionController.idl mozilla/content/base/src/nsSelection.cpp mozilla/editor/composer/src/nsEditorShell.cpp mozilla/editor/idl/nsIPlaintextEditor.idl mozilla/editor/libeditor/base/nsEditor.cpp mozilla/editor/libeditor/base/nsEditor.h mozilla/editor/libeditor/html/nsHTMLDataTransfer.cpp mozilla/editor/libeditor/html/nsHTMLEditor.cpp mozilla/editor/libeditor/text/nsEditorEventListeners.cpp mozilla/editor/libeditor/text/nsPlaintextDataTransfer.cpp mozilla/editor/libeditor/text/nsPlaintextEditor.cpp mozilla/editor/txtsvc/src/nsTextServicesDocument.cpp mozilla/editor/ui/dialogs/content/EdTableProps.js mozilla/embedding/components/find/src/nsWebBrowserFind.cpp mozilla/extensions/xmlterm/base/mozXMLTermSession.cpp mozilla/layout/base/public/nsIFrameSelection.h mozilla/layout/html/base/src/nsPresShell.cpp mozilla/layout/html/forms/src/nsGfxTextControlFrame2.cpp mozilla/mailnews/compose/src/nsMsgCompose.cpp mozilla/xpfe/browser/resources/content/viewPartialSource.js - Added aIsSynchronous arg to the ScrollSelectionIntoView() method of nsISelectionController and nsIFrameSelection. Updated all callers to pass new arg. - Modified selection to post a plevent to call which does the call to ScrollIntoView() in the async ScrollIntoView() case. - Edits in text widgets now use asynchronous reflow, paint, and scroll processing full time. - Removed redundant ScrollSelectionIntoView() calls in the editor event listeners. - Editor IME code now forced to flush reflows and paints before getting caret coordinates. r=jfrancis@netscape.com sr=waterson@netscape.com
2002-06-14 00:35:12 +04:00
* @param aIsSynchronous when PR_TRUE, scrolls the selection into view
* at some point after the method returns.request which is processed
*/
Partial fix for bug 141900 (Text entry fields in forms excruciatingly slow.) mozilla/content/base/public/nsISelectionController.idl mozilla/content/base/src/nsSelection.cpp mozilla/editor/composer/src/nsEditorShell.cpp mozilla/editor/idl/nsIPlaintextEditor.idl mozilla/editor/libeditor/base/nsEditor.cpp mozilla/editor/libeditor/base/nsEditor.h mozilla/editor/libeditor/html/nsHTMLDataTransfer.cpp mozilla/editor/libeditor/html/nsHTMLEditor.cpp mozilla/editor/libeditor/text/nsEditorEventListeners.cpp mozilla/editor/libeditor/text/nsPlaintextDataTransfer.cpp mozilla/editor/libeditor/text/nsPlaintextEditor.cpp mozilla/editor/txtsvc/src/nsTextServicesDocument.cpp mozilla/editor/ui/dialogs/content/EdTableProps.js mozilla/embedding/components/find/src/nsWebBrowserFind.cpp mozilla/extensions/xmlterm/base/mozXMLTermSession.cpp mozilla/layout/base/public/nsIFrameSelection.h mozilla/layout/html/base/src/nsPresShell.cpp mozilla/layout/html/forms/src/nsGfxTextControlFrame2.cpp mozilla/mailnews/compose/src/nsMsgCompose.cpp mozilla/xpfe/browser/resources/content/viewPartialSource.js - Added aIsSynchronous arg to the ScrollSelectionIntoView() method of nsISelectionController and nsIFrameSelection. Updated all callers to pass new arg. - Modified selection to post a plevent to call which does the call to ScrollIntoView() in the async ScrollIntoView() case. - Edits in text widgets now use asynchronous reflow, paint, and scroll processing full time. - Removed redundant ScrollSelectionIntoView() calls in the editor event listeners. - Editor IME code now forced to flush reflows and paints before getting caret coordinates. r=jfrancis@netscape.com sr=waterson@netscape.com
2002-06-14 00:35:12 +04:00
NS_IMETHOD ScrollSelectionIntoView(SelectionType aSelectionType, SelectionRegion aRegion, PRBool aIsSynchronous)=0;
/** RepaintSelection repaints the selected frames that are inside the selection
* specified by aSelectionType.
* @param aSelectionType enum value defined in nsISelection for the seleciton you want.
*/
NS_IMETHOD RepaintSelection(nsIPresContext* aPresContext, SelectionType aSelectionType)=0;
1999-09-11 04:18:02 +04:00
/** GetFrameForNodeOffset given a node and its child offset, return the nsIFrame and
* the offset into that frame.
* @param aNode input parameter for the node to look at
* @param aOffset offset into above node.
* @param aReturnFrame will contain the return frame. MUST NOT BE NULL or will return error
* @param aReturnOffset will contain offset into frame.
1999-09-11 04:18:02 +04:00
*/
NS_IMETHOD GetFrameForNodeOffset(nsIContent *aNode, PRInt32 aOffset, HINT aHint, nsIFrame **aReturnFrame, PRInt32 *aReturnOffset)=0;
/** AdjustOffsetsFromStyle. Called after detecting that a click or drag will
* select the frame, this function looks for user-select style on that frame or a parent
* frame, and adjust the content and offsets accordingly.
* @param aFrame the frame that was clicked
* @param outContent content node to be selected
* @param outStartOffset selection start offset
* @param outEndOffset selection end offset
*/
NS_IMETHOD AdjustOffsetsFromStyle(nsIFrame *aFrame, PRBool *changeSelection,
nsIContent** outContent, PRInt32* outStartOffset, PRInt32* outEndOffset)=0;
NS_IMETHOD GetHint(HINT *aHint)=0;
NS_IMETHOD SetHint(HINT aHint)=0;
/** CharacterMove will generally be called from the nsiselectioncontroller implementations.
* the effect being the selection will move one character left or right.
* @param aForward move forward in document.
* @param aExtend continue selection
*/
NS_IMETHOD CharacterMove(PRBool aForward, PRBool aExtend)=0;
/** WordMove will generally be called from the nsiselectioncontroller implementations.
* the effect being the selection will move one word left or right.
* @param aForward move forward in document.
* @param aExtend continue selection
*/
NS_IMETHOD WordMove(PRBool aForward, PRBool aExtend)=0;
/** LineMove will generally be called from the nsiselectioncontroller implementations.
* the effect being the selection will move one line up or down.
* @param aForward move forward in document.
* @param aExtend continue selection
*/
NS_IMETHOD LineMove(PRBool aForward, PRBool aExtend)=0;
/** IntraLineMove will generally be called from the nsiselectioncontroller implementations.
* the effect being the selection will move to beginning or end of line
* @param aForward move forward in document.
* @param aExtend continue selection
*/
NS_IMETHOD IntraLineMove(PRBool aForward, PRBool aExtend)=0;
/**
* Scrolling then moving caret placement code in common to text areas and
* content areas should be located in the implementer
* This method will accept the following parameters and perform the scroll
* and caret movement. It remains for the caller to call the final
* ScrollCaretIntoView if that called wants to be sure the caret is always
* visible.
*
* @param aForward if PR_TRUE, scroll forward if not scroll backward
*
* @param aExtend if PR_TRUE, extend selection to the new point
*
* @param aScrollableView the view that needs the scrolling
*
* @param aFrameSel the nsIFrameSelection of the caller.
*
* @return always NS_OK
*/
NS_IMETHOD CommonPageMove(PRBool aForward,
PRBool aExtend,
nsIScrollableView *aScrollableView,
nsIFrameSelection *aFrameSel)=0;
/** Select All will generally be called from the nsiselectioncontroller implementations.
* it will select the whole doc
*/
NS_IMETHOD SelectAll()=0;
/** Sets/Gets The display selection enum.
*/
NS_IMETHOD SetDisplaySelection(PRInt16 aState)=0;
NS_IMETHOD GetDisplaySelection(PRInt16 *aState)=0;
/** Allow applications to specify how we should place the caret
* when the user clicks over an existing selection. A aDelay
* value of PR_TRUE means delay clearing the selection and
* placing the caret until MouseUp, when the user clicks over
* an existing selection. This is especially usefull when applications
* want to support Drag & Drop of the current selection. A value
* of PR_FALSE means place the caret immediately. If the application
* never calls this method, the nsIFrameSelection implementation
* assumes the default value is PR_TRUE.
* @param aDelay PR_TRUE if we should delay caret placement.
*/
NS_IMETHOD SetDelayCaretOverExistingSelection(PRBool aDelay)=0;
/** Get the current delay caret setting. If aDelay contains
* a return value of PR_TRUE, the caret is placed on MouseUp
* when clicking over an existing selection. If PR_FALSE,
* the selection is cleared and caret is placed immediately
* in all cases.
* @param aDelay will contain the return value.
*/
NS_IMETHOD GetDelayCaretOverExistingSelection(PRBool *aDelay)=0;
/** If we are delaying caret placement til MouseUp (see
* Set/GetDelayCaretOverExistingSelection()), this method
* can be used to store the data received during the MouseDown
* so that we can place the caret during the MouseUp event.
* @aMouseEvent the event received by the selection MouseDown
* handling method. A NULL value can be use to tell this method
* that any data is storing is no longer valid.
*/
NS_IMETHOD SetDelayedCaretData(nsMouseEvent *aMouseEvent)=0;
/** Get the delayed MouseDown event data neccessary to place the
* caret during MouseUp processing.
* @aMouseEvent will contain a pointer to the event received
* by the selection during MouseDown processing. It can be NULL
* if the data is no longer valid.
*/
NS_IMETHOD GetDelayedCaretData(nsMouseEvent **aMouseEvent)=0;
/** Get the content node that limits the selection
* When searching up a nodes for parents, as in a text edit field
* in an browser page, we must stop at this node else we reach into the
* parent page, which is very bad!
*/
NS_IMETHOD GetLimiter(nsIContent **aLimiterContent)=0;
/** This will tell the frame selection that a double click has been pressed
* so it can track abort future drags if inside the same selection
* @aDoubleDown has the double click down happened
*/
NS_IMETHOD SetMouseDoubleDown(PRBool aDoubleDown)=0;
/** This will return whether the double down flag was set.
* @aDoubleDown is the return boolean value
*/
NS_IMETHOD GetMouseDoubleDown(PRBool *aDoubleDown)=0;
/**
* MaintainSelection will track the current selection as being "sticky".
* Dragging or extending selection will never allow for a subset
* (or the whole) of the maintained selection to become unselected.
* Primary use: double click selecting then dragging on second click
*/
NS_IMETHOD MaintainSelection()=0;
#ifdef IBMBIDI
/** GetPrevNextBidiLevels will return the frames and associated Bidi levels of the characters
* logically before and after a (collapsed) selection.
* @param aPresContext is the context to use
* @param aNode is the node containing the selection
* @param aContentOffset is the offset of the selection in the node
* @param aPrevFrame will hold the frame of the character before the selection
* @param aNextFrame will hold the frame of the character after the selection
* @param aPrevLevel will hold the Bidi level of the character before the selection
* @param aNextLevel will hold the Bidi level of the character after the selection
*
* At the beginning and end of each line there is assumed to be a frame with Bidi level equal to the
* paragraph embedding level. In these cases aPrevFrame and aNextFrame respectively will return nsnull.
*/
NS_IMETHOD GetPrevNextBidiLevels(nsIPresContext *aPresContext, nsIContent *aNode, PRUint32 aContentOffset,
nsIFrame **aPrevFrame, nsIFrame **aNextFrame, PRUint8 *aPrevLevel, PRUint8 *aNextLevel)=0;
/** GetFrameFromLevel will scan in a given direction
* until it finds a frame with a Bidi level less than or equal to a given level.
* It will return the last frame before this.
* @param aPresContext is the context to use
* @param aFrameIn is the frame to start from
* @param aDirection is the direction to scan
* @param aBidiLevel is the level to search for
* @param aFrameOut will hold the frame returned
*/
NS_IMETHOD GetFrameFromLevel(nsIPresContext *aPresContext, nsIFrame *aFrameIn, nsDirection aDirection, PRUint8 aBidiLevel,
nsIFrame **aFrameOut)=0;
#endif // IBMBIDI
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
};
Renaming nsISelection to nsIFrameSelection. Here is the old log from nsISelection (since CVS doesn't allow renames): > revision 1.9 > date: 1999/02/02 00:23:35; author: mjudge%netscape.com; state: Exp; lines: +2 -1 > keyboard navigation of selection. adding API for nsIFrame. fixing nsFrame and nstextframe to reflect the implementations of the nsIFrame API. nsRangeList implements the handlekeyevent now. > ---------------------------- > revision 1.8 > date: 1999/01/29 18:57:51; author: akkana%netscape.com; state: Exp; lines: +6 -0 > Implement a new interface, nsIDOMSelection, intended to become the > external interface for selection (to be IDL-ified later). > > Fix some editor bugs: > - Advance the cursor on text insert (so text is inserted in the right order) > - Make DeleteSelection in the editor call the actual selection > - Make DeleteSelection update the frames' notion of the selection > ---------------------------- > revision 1.7 > date: 1999/01/25 01:42:32; author: mjudge%netscape.com; state: Exp; lines: +3 -4 > Focus tracker needs to send the tracker to the implementation of selection so that it can update the tracker as to which frame(s) should be considered the focus frames ect. This is not yet working fully. Everything I am checking in will stay, I simply have a decision to make as to exactly what to do next. RangeList also had some modifications to better selection > ---------------------------- > revision 1.6 > date: 1999/01/22 18:58:09; author: mjudge%netscape.com; state: Exp; lines: +6 -0 > chagnes for selection to work > ---------------------------- > revision 1.5 > date: 1999/01/18 22:57:08; author: mjudge%netscape.com; state: Exp; lines: +1 -1 > Files for selection across frames. > ---------------------------- > revision 1.4 > date: 1998/12/14 18:34:09; author: mjudge%netscape.com; state: Exp; lines: +13 -1 > adding in selection > ---------------------------- > revision 1.3 > date: 1998/12/08 18:25:37; author: mjudge%netscape.com; state: Exp; lines: +9 -32 > changes to selection > ---------------------------- > revision 1.2 > date: 1998/05/01 05:55:11; author: rpotts; state: Exp; lines: +1 -1 > nslayout.h is *all* lower case > ---------------------------- > revision 1.1 > date: 1998/04/30 19:15:05; author: rods; state: Exp; > initial
1999-02-12 02:10:20 +03:00
#endif /* nsIFrameSelection_h___ */