the printing of headers and footers. Printing of selection is implemented by the frames figuring out if they are in the selection and painting if they or not they they don't paint. This also only allows the printing of the first page of selections, alothough it is well documented where this is implemeted so it can be removed. Bugs 63426, 31218, 61075 r=dcone,kmcclusk,erik,buster sr=waterson git-svn-id: svn://10.0.0.236/trunk@85624 18797224-902f-48f8-a5cc-f745e15eee43
267 lines
11 KiB
C++
267 lines
11 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.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/
|
|
*
|
|
* 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.
|
|
*
|
|
* The Original Code is mozilla.org code.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*/
|
|
|
|
#ifndef nsGfxTextControlFrame2_h___
|
|
#define nsGfxTextControlFrame2_h___
|
|
|
|
#include "nsStackFrame.h"
|
|
#include "nsAreaFrame.h"
|
|
#include "nsIFormControlFrame.h"
|
|
#include "nsIDOMMouseListener.h"
|
|
#include "nsIAnonymousContentCreator.h"
|
|
#include "nsIStatefulFrame.h"
|
|
#include "nsIEditor.h"
|
|
#include "nsIGfxTextControlFrame.h"
|
|
#include "nsFormControlHelper.h"//for the inputdimensions
|
|
#include "nsHTMLValue.h" //for nsHTMLValue
|
|
#include "nsIFontMetrics.h"
|
|
#include "nsWeakReference.h" //for service and presshell pointers
|
|
#include "nsIScrollableViewProvider.h"
|
|
|
|
class nsIPresState;
|
|
class nsGfxTextControlFrame;
|
|
class nsFormFrame;
|
|
class nsISupportsArray;
|
|
class nsIHTMLContent;
|
|
class nsIEditor;
|
|
class nsISelectionController;
|
|
class nsTextInputSelectionImpl;
|
|
class nsTextInputListener;
|
|
class nsIDOMCharacterData;
|
|
class nsIScrollableView;
|
|
|
|
|
|
class nsGfxTextControlFrame2 : public nsStackFrame,
|
|
public nsIAnonymousContentCreator,
|
|
public nsIFormControlFrame,
|
|
public nsIGfxTextControlFrame2,
|
|
public nsIStatefulFrame,
|
|
public nsIScrollableViewProvider
|
|
|
|
{
|
|
public:
|
|
nsGfxTextControlFrame2(nsIPresShell* aShell);
|
|
virtual ~nsGfxTextControlFrame2();
|
|
|
|
NS_IMETHOD Destroy(nsIPresContext* aPresContext);//remove yourself as a form control
|
|
|
|
NS_IMETHOD Reflow(nsIPresContext* aPresContext,
|
|
nsHTMLReflowMetrics& aDesiredSize,
|
|
const nsHTMLReflowState& aReflowState,
|
|
nsReflowStatus& aStatus);
|
|
|
|
NS_IMETHOD Paint(nsIPresContext* aPresContext,
|
|
nsIRenderingContext& aRenderingContext,
|
|
const nsRect& aDirtyRect,
|
|
nsFramePaintLayer aWhichLayer);
|
|
|
|
NS_IMETHOD GetPrefSize(nsBoxLayoutState& aBoxLayoutState, nsSize& aSize);
|
|
NS_IMETHOD GetMinSize(nsBoxLayoutState& aBoxLayoutState, nsSize& aSize);
|
|
NS_IMETHOD GetMaxSize(nsBoxLayoutState& aBoxLayoutState, nsSize& aSize);
|
|
NS_IMETHOD GetAscent(nsBoxLayoutState& aBoxLayoutState, nscoord& aAscent);
|
|
|
|
#ifdef NS_DEBUG
|
|
NS_IMETHOD GetFrameName(nsString& aResult) const
|
|
{
|
|
aResult.AssignWithConversion("nsGfxControlFrame2");
|
|
return NS_OK;
|
|
}
|
|
#endif
|
|
|
|
// from nsIAnonymousContentCreator
|
|
NS_IMETHOD CreateAnonymousContent(nsIPresContext* aPresContext,
|
|
nsISupportsArray& aChildList);
|
|
|
|
// Utility methods to get and set current widget state
|
|
void GetTextControlFrameState(nsAWritableString& aValue);
|
|
void SetTextControlFrameState(const nsAReadableString& aValue);
|
|
NS_IMETHOD SetInitialChildList(nsIPresContext* aPresContext,
|
|
nsIAtom* aListName,
|
|
nsIFrame* aChildList);
|
|
|
|
//==== BEGIN NSIFORMCONTROLFRAME
|
|
NS_IMETHOD GetType(PRInt32* aType) const; //*
|
|
NS_IMETHOD GetName(nsString* aName);//*
|
|
virtual void SetFocus(PRBool aOn , PRBool aRepaint);
|
|
virtual void ScrollIntoView(nsIPresContext* aPresContext);
|
|
virtual void MouseClicked(nsIPresContext* aPresContext);
|
|
virtual void Reset(nsIPresContext* aPresContext);
|
|
virtual PRBool IsSuccessful(nsIFormControlFrame* aSubmitter);
|
|
virtual PRInt32 GetMaxNumValues();/**/
|
|
virtual PRBool GetNamesValues(PRInt32 aMaxNumValues, PRInt32& aNumValues,
|
|
nsString* aValues, nsString* aNames);
|
|
virtual void SetFormFrame(nsFormFrame* aFrame);
|
|
virtual nscoord GetVerticalInsidePadding(nsIPresContext* aPresContext,
|
|
float aPixToTwip,
|
|
nscoord aInnerHeight) const;
|
|
virtual nscoord GetHorizontalInsidePadding(nsIPresContext* aPresContext,
|
|
float aPixToTwip,
|
|
nscoord aInnerWidth,
|
|
nscoord aCharWidth) const;/**/
|
|
NS_IMETHOD SetSuggestedSize(nscoord aWidth, nscoord aHeight);
|
|
virtual nsresult RequiresWidget(PRBool &aRequiresWidget);
|
|
NS_IMETHOD GetFont(nsIPresContext* aPresContext,
|
|
const nsFont*& aFont);
|
|
NS_IMETHOD GetFormContent(nsIContent*& aContent) const;
|
|
NS_IMETHOD SetProperty(nsIPresContext* aPresContext, nsIAtom* aName, const nsAReadableString& aValue);
|
|
NS_IMETHOD GetProperty(nsIAtom* aName, nsAWritableString& aValue);
|
|
|
|
|
|
//==== END NSIFORMCONTROLFRAME
|
|
|
|
//==== NSIGFXTEXTCONTROLFRAME2
|
|
|
|
NS_IMETHOD GetEditor(nsIEditor **aEditor);
|
|
NS_IMETHOD GetTextLength(PRInt32* aTextLength);
|
|
NS_IMETHOD SetSelectionStart(PRInt32 aSelectionStart);
|
|
NS_IMETHOD SetSelectionEnd(PRInt32 aSelectionEnd);
|
|
NS_IMETHOD SetSelectionRange(PRInt32 aSelectionStart, PRInt32 aSelectionEnd);
|
|
NS_IMETHOD GetSelectionRange(PRInt32* aSelectionStart, PRInt32* aSelectionEnd);
|
|
NS_IMETHOD GetSelectionContr(nsISelectionController **aSelCon);
|
|
|
|
//==== END NSIGFXTEXTCONTROLFRAME2
|
|
//==== OVERLOAD of nsIFrame
|
|
NS_IMETHOD GetFrameType(nsIAtom** aType) const;
|
|
|
|
/** handler for attribute changes to mContent */
|
|
NS_IMETHOD AttributeChanged(nsIPresContext* aPresContext,
|
|
nsIContent* aChild,
|
|
PRInt32 aNameSpaceID,
|
|
nsIAtom* aAttribute,
|
|
PRInt32 aHint);
|
|
|
|
NS_IMETHOD GetText(nsString* aText, PRBool aInitialValue);
|
|
|
|
NS_DECL_ISUPPORTS_INHERITED
|
|
public: //for methods who access nsGfxTextControlFrame2 directly
|
|
void SubmitAttempt();
|
|
NS_IMETHOD InternalContentChanged();//notify that we have some kind of change.
|
|
NS_IMETHOD CallOnChange();
|
|
protected:
|
|
nsresult SetInitialValue();
|
|
nsString *GetCachedString();
|
|
virtual PRIntn GetSkipSides() const;
|
|
void RemoveNewlines(nsString &aString);
|
|
NS_IMETHOD GetMaxLength(PRInt32* aSize);
|
|
NS_IMETHOD DoesAttributeExist(nsIAtom *aAtt);
|
|
|
|
//helper methods
|
|
virtual PRBool IsSingleLineTextControl() const;
|
|
virtual PRBool IsPlainTextControl() const;
|
|
virtual PRBool IsPasswordTextControl() const;
|
|
nsresult GetSizeFromContent(PRInt32* aSize) const;
|
|
PRInt32 GetDefaultColumnWidth() const { return (PRInt32)(20); } // this was DEFAULT_PIXEL_WIDTH
|
|
|
|
nsresult GetColRowSizeAttr(nsIFormControlFrame* aFrame,
|
|
nsIAtom * aColSizeAttr,
|
|
nsHTMLValue & aColSize,
|
|
nsresult & aColStatus,
|
|
nsIAtom * aRowSizeAttr,
|
|
nsHTMLValue & aRowSize,
|
|
nsresult & aRowStatus);
|
|
|
|
NS_IMETHOD ReflowStandard(nsIPresContext* aPresContext,
|
|
nsSize& aDesiredSize,
|
|
const nsHTMLReflowState& aReflowState,
|
|
nsReflowStatus& aStatus,
|
|
nsMargin& aBorder,
|
|
nsMargin& aPadding);
|
|
|
|
PRInt32 CalculateSizeStandard (nsIPresContext* aPresContext,
|
|
nsIRenderingContext* aRendContext,
|
|
nsIFormControlFrame* aFrame,
|
|
nsInputDimensionSpec& aSpec,
|
|
nsSize& aDesiredSize,
|
|
nsSize& aMinSize,
|
|
nscoord& aRowHeight,
|
|
nsMargin& aBorder,
|
|
nsMargin& aPadding,
|
|
PRBool aIsUsingDefSize);
|
|
|
|
PRInt32 CalculateSizeNavQuirks (nsIPresContext* aPresContext,
|
|
nsIRenderingContext* aRendContext,
|
|
nsIFormControlFrame* aFrame,
|
|
nsInputDimensionSpec& aSpec,
|
|
nsSize& aDesiredSize,
|
|
nsSize& aMinSize,
|
|
nscoord& aRowHeight,
|
|
nsMargin& aBorder,
|
|
nsMargin& aPadding,
|
|
PRBool aIsUsingDefSize);
|
|
|
|
|
|
NS_IMETHOD ReflowNavQuirks(nsIPresContext* aPresContext,
|
|
nsSize& aDesiredSize,
|
|
const nsHTMLReflowState& aReflowState,
|
|
nsReflowStatus& aStatus,
|
|
nsMargin& aBorder,
|
|
nsMargin& aPadding);
|
|
|
|
NS_IMETHOD CreateFrameFor(nsIPresContext* aPresContext,
|
|
nsIContent * aContent,
|
|
nsIFrame** aFrame);
|
|
|
|
PRInt32 GetWidthInCharacters() const;
|
|
|
|
//nsIStatefulFrame
|
|
NS_IMETHOD GetStateType(nsIPresContext* aPresContext, nsIStatefulFrame::StateType* aStateType);
|
|
NS_IMETHOD SaveState(nsIPresContext* aPresContext, nsIPresState** aState);
|
|
NS_IMETHOD RestoreState(nsIPresContext* aPresContext, nsIPresState* aState);
|
|
|
|
// nsIScrollableViewProvider
|
|
NS_IMETHOD GetScrollableView(nsIScrollableView** aView);
|
|
|
|
private:
|
|
//helper methods
|
|
enum {
|
|
eIgnoreSelect = -2,
|
|
eSelectToEnd = -1
|
|
};
|
|
|
|
NS_IMETHODIMP GetFirstTextNode(nsIDOMCharacterData* *aFirstTextNode);
|
|
nsresult SelectAllContents();
|
|
nsresult SetSelectionEndPoints(PRInt32 aSelStart, PRInt32 aSelEnd);
|
|
|
|
private:
|
|
nsCOMPtr<nsIEditor> mEditor;
|
|
nsCOMPtr<nsISelectionController> mSelCon;
|
|
|
|
//cached sizes and states
|
|
nsString* mCachedState;
|
|
nscoord mSuggestedWidth;
|
|
nscoord mSuggestedHeight;
|
|
nsSize mSize;
|
|
|
|
PRPackedBool mUseEditor;
|
|
PRPackedBool mIsProcessing;
|
|
PRPackedBool mNotifyOnInput;//default this to off to stop any notifications until setup is complete
|
|
|
|
nsFormFrame *mFormFrame;
|
|
nsTextInputSelectionImpl *mTextSelImpl;
|
|
nsTextInputListener *mTextListener;
|
|
nsIScrollableView *mScrollableView;
|
|
};
|
|
|
|
#endif
|
|
|
|
|