gecko-dev/layout/base/nsIFrameSelection.h
kin%netscape.com bfd4c1f102 Fix for bugs #7153, #10673, #12066, #12067, and #12793.
editor/base/nsEditorEventListeners.cpp
editor/base/nsEditorEventListeners.h

  - Added code to scroll the selection into view
    after processing key events.
  - Commented out the hack that redraws the entire
    view when the focus is gained and lost. Replaced
    the hack code with calls to RepaintSelection().

layout/base/public/nsIFrameSelection.h
layout/base/public/nsIPresShell.h
layout/html/base/src/nsPresShell.cpp
   - Added ScrollSelectionIntoView() and RepaintSelection() methods.

layout/base/src/nsRangeList.cpp
   - Added implementation for ScrollSelectionIntoView() and
     RepaintSelection().
   - Check for NULL primary frame in GetFocusNodeRect()
     to fix bug #12793.
1999-08-30 21:54:40 +00:00

152 lines
6.0 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/*
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
* NOTE!! This is not a general class, but specific to layout and frames.
* Consumers looking for the general selection interface should look at
* nsIDOMSelection.
*/
#ifndef nsIFrameSelection_h___
#define nsIFrameSelection_h___
#include "nsISupports.h"
#include "nsIFrame.h"
#include "nsIFocusTracker.h"
#include "nsIDOMSelection.h"
#include "nsIPresShell.h"
// IID for the nsIFrameSelection interface
#define NS_IFRAMESELECTION_IID \
{ 0xf46e4171, 0xdeaa, 0x11d1, \
{ 0x97, 0xfc, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
//----------------------------------------------------------------------
// Selection interface
struct SelectionDetails
{
PRInt32 mStart;
PRInt32 mEnd;
SelectionType mType;
SelectionDetails *mNext;
};
class nsIFrameSelection : public nsISupports {
public:
static const nsIID& GetIID() { static nsIID iid = NS_IFRAMESELECTION_IID; return iid; }
/** 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
*/
NS_IMETHOD Init(nsIFocusTracker *aTracker) = 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 and frame and
* will return NS_OK if it handles the event or NS_COMFALSE if not.
* <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 frame and
* will return NS_OK if it handles the event or NS_COMFALSE if not.
* <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(nsGUIEvent *aGuiEvent) = 0;
/** TakeFocus will take the focus to the new frame at the new offset and
* 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
* @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
*/
NS_IMETHOD TakeFocus(nsIContent *aNewFocus, PRUint32 aContentOffset, PRUint32 aContentEndOffset ,
PRBool aContinueSelection, PRBool aMultipleSelection) = 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.
*/
NS_IMETHOD LookUpSelection(nsIContent *aContent, PRInt32 aContentOffset, PRInt32 aContentLength,
SelectionDetails **aReturnDetails) = 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;
/** GetSelection
* no query interface for selection. must use this method now.
* @param aSelectionType enum value defined in nsIDOMSelection for the domseleciton you want.
*/
NS_IMETHOD GetSelection(SelectionType aSelectionType, nsIDOMSelection **aDomSelection)=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.
*/
NS_IMETHOD ScrollSelectionIntoView(SelectionType aSelectionType, SelectionRegion aRegion)=0;
/** RepaintSelection repaints the selected frames that are inside the selection
* specified by aSelectionType.
* @param aSelectionType enum value defined in nsIDOMSelection for the domseleciton you want.
*/
NS_IMETHOD RepaintSelection(SelectionType aSelectionType)=0;
};
#endif /* nsIFrameSelection_h___ */