Bug 254755. deCOMtaminate nsIFormControlFrame. patch by jpl24, r+sr=roc

This commit is contained in:
roc+%cs.cmu.edu 2005-12-12 23:53:06 +00:00
parent f40254bbd6
commit b65c655ed9
31 changed files with 272 additions and 892 deletions

View File

@ -56,7 +56,7 @@
#include "nsIDocument.h"
#include "nsGUIEvent.h"
#include "nsUnicharUtils.h"
#include "nsLayoutUtils.h"
class nsHTMLButtonElement : public nsGenericHTMLFormElement,
public nsIDOMHTMLButtonElement,
@ -250,7 +250,7 @@ nsHTMLButtonElement::SetFocus(nsPresContext* aPresContext)
nsIFormControlFrame* formControlFrame = GetFormControlFrame(PR_TRUE);
if (formControlFrame) {
formControlFrame->SetFocus(PR_TRUE, PR_TRUE);
formControlFrame->ScrollIntoView(aPresContext);
nsLayoutUtils::ScrollIntoView(formControlFrame);
}
}
}

View File

@ -84,6 +84,7 @@
#include "nsLinebreakConverter.h" //to strip out carriage returns
#include "nsReadableUtils.h"
#include "nsUnicharUtils.h"
#include "nsLayoutUtils.h"
#include "nsIDOMMutationEvent.h"
#include "nsIDOMEventReceiver.h"
@ -607,7 +608,7 @@ nsHTMLInputElement::GetValue(nsAString& aValue)
}
if (frameOwnsValue) {
formControlFrame->GetProperty(nsHTMLAtoms::value, aValue);
formControlFrame->GetFormProperty(nsHTMLAtoms::value, aValue);
} else {
if (!GET_BOOLBIT(mBitField, BF_VALUE_CHANGED) || !mValue) {
GetDefaultValue(aValue);
@ -695,8 +696,7 @@ nsHTMLInputElement::SetValueInternal(const nsAString& aValue,
}
// If the frame owns the value, set the value in the frame
if (frameOwnsValue) {
nsCOMPtr<nsPresContext> presContext = GetPresContext();
formControlFrame->SetProperty(presContext, nsHTMLAtoms::value, aValue);
formControlFrame->SetFormProperty(nsHTMLAtoms::value, aValue);
return NS_OK;
}
@ -1075,7 +1075,7 @@ nsHTMLInputElement::SetFocus(nsPresContext* aPresContext)
nsIFormControlFrame* formControlFrame = GetFormControlFrame(PR_TRUE);
if (formControlFrame) {
formControlFrame->SetFocus(PR_TRUE, PR_TRUE);
formControlFrame->ScrollIntoView(aPresContext);
nsLayoutUtils::ScrollIntoView(formControlFrame);
}
}
}
@ -1170,8 +1170,7 @@ nsHTMLInputElement::SelectAll(nsPresContext* aPresContext)
nsIFormControlFrame* formControlFrame = GetFormControlFrame(PR_TRUE);
if (formControlFrame) {
formControlFrame->SetProperty(aPresContext, nsHTMLAtoms::select,
EmptyString());
formControlFrame->SetFormProperty(nsHTMLAtoms::select, EmptyString());
}
}
@ -2094,10 +2093,6 @@ nsHTMLInputElement::Reset()
break;
}
// Notify frame that it has been reset
if (formControlFrame) {
formControlFrame->OnContentReset();
}
return rv;
}

View File

@ -48,6 +48,7 @@
#include "nsHTMLAtoms.h"
#include "nsStyleConsts.h"
#include "nsPresContext.h"
#include "nsLayoutUtils.h"
#include "nsMappedAttributes.h"
#include "nsIForm.h"
#include "nsIFormSubmission.h"
@ -77,6 +78,8 @@
#include "nsIDocument.h"
#include "nsIPresShell.h"
#include "nsIFormControlFrame.h"
#include "nsIComboboxControlFrame.h"
#include "nsIListControlFrame.h"
#include "nsIFrame.h"
#include "nsDOMError.h"
@ -411,6 +414,12 @@ protected:
return !isMultiple && size <= 1;
}
/**
* Helper method for dispatching ContentReset notifications to list
* and combo box frames.
*/
void DispatchContentReset();
/** The options[] array */
nsHTMLOptionCollection* mOptions;
/** false if the parser is in the middle of adding children. */
@ -1566,7 +1575,7 @@ nsHTMLSelectElement::SetFocus(nsPresContext* aPresContext)
nsIFormControlFrame* formControlFrame = GetFormControlFrame(PR_TRUE);
if (formControlFrame) {
formControlFrame->SetFocus(PR_TRUE, PR_TRUE);
formControlFrame->ScrollIntoView(aPresContext);
nsLayoutUtils::ScrollIntoView(formControlFrame);
}
}
}
@ -1844,10 +1853,7 @@ nsHTMLSelectElement::RestoreState(nsPresState* aState)
// Don't flush, if the frame doesn't exist yet it doesn't care if
// we're reset or not.
nsIFormControlFrame* formControlFrame = GetFormControlFrame(PR_FALSE);
if (formControlFrame) {
formControlFrame->OnContentReset();
}
DispatchContentReset();
}
return PR_FALSE;
@ -1943,10 +1949,7 @@ nsHTMLSelectElement::Reset()
// Don't flush, if there's no frame yet it won't care about us being
// reset even if we forced it to be created now.
//
nsIFormControlFrame* formControlFrame = GetFormControlFrame(PR_FALSE);
if (formControlFrame) {
formControlFrame->OnContentReset();
}
DispatchContentReset();
return NS_OK;
}
@ -2026,6 +2029,27 @@ nsHTMLSelectElement::DispatchDOMEvent(const nsAString& aName)
aName, PR_TRUE, PR_TRUE);
}
void nsHTMLSelectElement::DispatchContentReset() {
nsIFormControlFrame* formControlFrame = GetFormControlFrame(PR_FALSE);
if (formControlFrame) {
// Only dispatch content reset notification if this is a list control
// frame or combo box control frame.
if (IsCombobox()) {
nsIComboboxControlFrame* comboFrame = nsnull;
CallQueryInterface(formControlFrame, &comboFrame);
if (comboFrame) {
comboFrame->OnContentReset();
}
} else {
nsIListControlFrame* listFrame = nsnull;
CallQueryInterface(formControlFrame, &listFrame);
if (listFrame) {
listFrame->OnContentReset();
}
}
}
}
//----------------------------------------------------------------------
//
// nsHTMLOptionCollection implementation

View File

@ -69,6 +69,7 @@
#include "nsIDOMText.h"
#include "nsReadableUtils.h"
#include "nsITextContent.h"
#include "nsLayoutUtils.h"
static NS_DEFINE_CID(kXULControllersCID, NS_XULCONTROLLERS_CID);
@ -253,7 +254,7 @@ nsHTMLTextAreaElement::SetFocus(nsPresContext* aPresContext)
nsIFormControlFrame* formControlFrame = GetFormControlFrame(PR_TRUE);
if (formControlFrame) {
formControlFrame->SetFocus(PR_TRUE, PR_TRUE);
formControlFrame->ScrollIntoView(aPresContext);
nsLayoutUtils::ScrollIntoView(formControlFrame);
}
}
}
@ -311,8 +312,7 @@ nsHTMLTextAreaElement::SelectAll(nsPresContext* aPresContext)
nsIFormControlFrame* formControlFrame = GetFormControlFrame(PR_TRUE);
if (formControlFrame) {
formControlFrame->SetProperty(aPresContext, nsHTMLAtoms::select,
EmptyString());
formControlFrame->SetFormProperty(nsHTMLAtoms::select, EmptyString());
}
return NS_OK;
@ -404,8 +404,7 @@ nsHTMLTextAreaElement::SetValueInternal(const nsAString& aValue,
textControlFrame->OwnsValue(&frameOwnsValue);
}
if (frameOwnsValue) {
formControlFrame->SetProperty(GetPresContext(),
nsHTMLAtoms::value, aValue);
formControlFrame->SetFormProperty(nsHTMLAtoms::value, aValue);
}
else {
if (mValue) {
@ -766,7 +765,6 @@ nsHTMLTextAreaElement::Reset()
GetDefaultValue(resetVal);
rv = SetValue(resetVal);
NS_ENSURE_SUCCESS(rv, rv);
formControlFrame->OnContentReset();
}
SetValueChanged(PR_FALSE);
return NS_OK;

View File

@ -37,6 +37,7 @@
#include "nsLayoutUtils.h"
#include "nsIFrame.h"
#include "nsIFormControlFrame.h"
#include "nsPresContext.h"
#include "nsIContent.h"
#include "nsFrameList.h"
@ -597,3 +598,20 @@ nsLayoutUtils::BinarySearchForPosition(nsIRenderingContext* aRendContext,
return PR_FALSE;
}
void
nsLayoutUtils::ScrollIntoView(nsIFormControlFrame* aFormFrame)
{
NS_ASSERTION(aFormFrame, "Null frame passed into ScrollIntoView");
nsIFrame* frame = nsnull;
CallQueryInterface(aFormFrame, &frame);
NS_ASSERTION(frame, "Form frame did not implement nsIFrame.");
if (frame) {
nsIPresShell* presShell = frame->GetPresContext()->GetPresShell();
if (presShell) {
presShell->ScrollFrameIntoView(frame,
NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE,
NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE);
}
}
}

View File

@ -39,6 +39,7 @@
#define nsLayoutUtils_h__
class nsIFrame;
class nsIFormControlFrame;
class nsPresContext;
class nsIContent;
class nsIAtom;
@ -321,6 +322,12 @@ public:
PRInt32 aCursorPos,
PRInt32& aIndex,
PRInt32& aTextWidth);
/**
* Scroll the given form control frame into view.
* @param aFormFrame Frame to scroll into view.
*/
static void ScrollIntoView(nsIFormControlFrame* aFormFrame);
};
#endif // nsLayoutUtils_h__

View File

@ -42,6 +42,7 @@
#include "nsIDOMEventReceiver.h"
#include "nsFrameManager.h"
#include "nsFormControlFrame.h"
#include "nsGfxButtonControlFrame.h"
#include "nsHTMLAtoms.h"
#include "nsCSSAnonBoxes.h"
#include "nsHTMLParts.h"
@ -418,64 +419,6 @@ nsComboboxControlFrame::Init(nsPresContext* aPresContext,
return nsAreaFrame::Init(aPresContext, aContent, aParent, aContext, aPrevInFlow);
}
//--------------------------------------------------------------
void
nsComboboxControlFrame::InitializeControl(nsPresContext* aPresContext)
{
nsFormControlHelper::Reset(this, aPresContext);
}
//--------------------------------------------------------------
NS_IMETHODIMP_(PRInt32)
nsComboboxControlFrame::GetFormControlType() const
{
return NS_FORM_SELECT;
}
//--------------------------------------------------------------
NS_IMETHODIMP
nsComboboxControlFrame::GetFormContent(nsIContent*& aContent) const
{
aContent = GetContent();
NS_IF_ADDREF(aContent);
return NS_OK;
}
//--------------------------------------------------------------
nscoord
nsComboboxControlFrame::GetVerticalBorderWidth(float aPixToTwip) const
{
return 0;
}
//--------------------------------------------------------------
nscoord
nsComboboxControlFrame::GetHorizontalBorderWidth(float aPixToTwip) const
{
return 0;
}
//--------------------------------------------------------------
nscoord
nsComboboxControlFrame::GetVerticalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerHeight) const
{
return 0;
}
//--------------------------------------------------------------
nscoord
nsComboboxControlFrame::GetHorizontalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerWidth,
nscoord aCharWidth) const
{
return 0;
}
void
nsComboboxControlFrame::SetFocus(PRBool aOn, PRBool aRepaint)
{
@ -505,19 +448,6 @@ nsComboboxControlFrame::SetFocus(PRBool aOn, PRBool aRepaint)
}
}
void
nsComboboxControlFrame::ScrollIntoView(nsPresContext* aPresContext)
{
if (aPresContext) {
nsIPresShell *presShell = aPresContext->GetPresShell();
if (presShell) {
presShell->ScrollFrameIntoView(this,
NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE,NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE);
}
}
}
void
nsComboboxControlFrame::ShowPopup(PRBool aShowPopup)
{
@ -627,17 +557,16 @@ nsComboboxControlFrame::ReflowComboChildFrame(nsIFrame* aFrame,
return rv;
}
// Suggest a size for the child frame.
// Only frames which implement the nsIFormControlFrame interface and
// honor the SetSuggestedSize method will be placed and sized correctly.
// Resize the child button frame to the specified size.
void
nsComboboxControlFrame::SetChildFrameSize(nsIFrame* aFrame, nscoord aWidth, nscoord aHeight)
nsComboboxControlFrame::SetButtonFrameSize(const nsSize& aSize)
{
nsIFormControlFrame* fcFrame = nsnull;
nsresult result = aFrame->QueryInterface(NS_GET_IID(nsIFormControlFrame), (void**)&fcFrame);
if (NS_SUCCEEDED(result) && (nsnull != fcFrame)) {
fcFrame->SetSuggestedSize(aWidth, aHeight);
// Check that the child frame being resized is an nsGfxButtonControlFrame.
if (mButtonFrame->GetType() == nsLayoutAtoms::gfxButtonControlFrame) {
NS_STATIC_CAST(nsGfxButtonControlFrame*, mButtonFrame)->SetSuggestedSize(aSize);
} else {
// This function should never be called with another frame type.
NS_NOTREACHED("Wrong type in SetButtonFrameSize");
}
}
@ -841,7 +770,6 @@ nsComboboxControlFrame::ReflowCombobox(nsPresContext * aPresContext,
nsHTMLReflowMetrics& aDesiredSize,
nsReflowStatus& aStatus,
nsIFrame * aDisplayFrame,
nsIFrame * aDropDownBtn,
nscoord& aDisplayWidth,
nscoord aBtnWidth,
const nsMargin& aBorderPadding,
@ -880,8 +808,8 @@ nsComboboxControlFrame::ReflowCombobox(nsPresContext * aPresContext,
nsRect displayRect(0,0,0,0);
aBtnWidth = 0;
aDisplayFrame->SetRect(displayRect);
aDropDownBtn->SetRect(buttonRect);
SetChildFrameSize(aDropDownBtn, aBtnWidth, aDesiredSize.height);
mButtonFrame->SetRect(buttonRect);
SetButtonFrameSize(nsSize(aBtnWidth, aDesiredSize.height));
aDesiredSize.width = 0;
aDesiredSize.height = dispHeight + aBorderPadding.top + aBorderPadding.bottom;
// XXX What about ascent and descent?
@ -893,7 +821,7 @@ nsComboboxControlFrame::ReflowCombobox(nsPresContext * aPresContext,
// This sets the button to be a specific size
// so no matter what it reflows at these values
SetChildFrameSize(aDropDownBtn, aBtnWidth, dispHeight);
SetButtonFrameSize(nsSize(aBtnWidth, dispHeight));
#ifdef FIX_FOR_BUG_53259
// Make sure we obey min/max-width and min/max-height
@ -1012,11 +940,11 @@ nsComboboxControlFrame::ReflowCombobox(nsPresContext * aPresContext,
}
}
#endif // IBMBIDI
aDropDownBtn->SetRect(buttonRect);
mButtonFrame->SetRect(buttonRect);
// since we have changed the height of the button
// make sure it has these new values
SetChildFrameSize(aDropDownBtn, aBtnWidth, aDesiredSize.height);
SetButtonFrameSize(nsSize(aBtnWidth, aDesiredSize.height));
// This is a last minute adjustment, if the CSS width was set and
// we calculated it to be a little big, then make sure we are no bigger the computed size
@ -1239,7 +1167,7 @@ nsComboboxControlFrame::Reflow(nsPresContext* aPresContext,
// so do a simple reflow and bail out
REFLOW_DEBUG_MSG("------------Reflowing AreaFrame and bailing----\n\n");
ReflowCombobox(aPresContext, firstPassState, aDesiredSize, aStatus,
mDisplayFrame, mButtonFrame, mItemDisplayWidth,
mDisplayFrame, mItemDisplayWidth,
scrollbarWidth, aReflowState.mComputedBorderPadding);
REFLOW_COUNTER();
UNCONSTRAINED_CHECK();
@ -1297,8 +1225,7 @@ nsComboboxControlFrame::Reflow(nsPresContext* aPresContext,
REFLOW_DEBUG_MSG("---- Doing AreaFrame Reflow and then bailing out\n");
// Do simple reflow and bail out
ReflowCombobox(aPresContext, firstPassState, aDesiredSize, aStatus,
mDisplayFrame, mButtonFrame,
mItemDisplayWidth, scrollbarWidth,
mDisplayFrame, mItemDisplayWidth, scrollbarWidth,
aReflowState.mComputedBorderPadding,
kSizeNotSet, PR_TRUE);
REFLOW_DEBUG_MSG3("+** Done nsCCF DW: %d DH: %d\n\n", PX(aDesiredSize.width), PX(aDesiredSize.height));
@ -1529,7 +1456,7 @@ nsComboboxControlFrame::Reflow(nsPresContext* aPresContext,
// this reflows and makes and last minute adjustments
ReflowCombobox(aPresContext, firstPassState, aDesiredSize, aStatus,
mDisplayFrame, mButtonFrame, mItemDisplayWidth, scrollbarWidth,
mDisplayFrame, mItemDisplayWidth, scrollbarWidth,
aReflowState.mComputedBorderPadding, size.height);
// The dropdown was reflowed UNCONSTRAINED before, now we need to reflow it
@ -1607,13 +1534,6 @@ nsComboboxControlFrame::Reflow(nsPresContext* aPresContext,
}
//--------------------------------------------------------------
NS_IMETHODIMP
nsComboboxControlFrame::GetName(nsAString* aResult)
{
nsFormControlHelper::GetName(mContent, aResult);
return NS_OK;
}
nsIFrame*
nsComboboxControlFrame::GetFrameForPoint(const nsPoint& aPoint,
@ -1935,26 +1855,32 @@ nsComboboxControlFrame::HandleEvent(nsPresContext* aPresContext,
}
NS_IMETHODIMP
nsComboboxControlFrame::SetProperty(nsPresContext* aPresContext, nsIAtom* aName, const nsAString& aValue)
nsresult
nsComboboxControlFrame::SetFormProperty(nsIAtom* aName, const nsAString& aValue)
{
nsIFormControlFrame* fcFrame = nsnull;
nsresult result = CallQueryInterface(mDropdownFrame, &fcFrame);
if ((NS_SUCCEEDED(result)) && (nsnull != fcFrame)) {
return fcFrame->SetProperty(aPresContext, aName, aValue);
if (NS_FAILED(result)) {
return result;
}
return result;
if (fcFrame) {
return fcFrame->SetFormProperty(aName, aValue);
}
return NS_OK;
}
NS_IMETHODIMP
nsComboboxControlFrame::GetProperty(nsIAtom* aName, nsAString& aValue)
nsresult
nsComboboxControlFrame::GetFormProperty(nsIAtom* aName, nsAString& aValue) const
{
nsIFormControlFrame* fcFrame = nsnull;
nsresult result = CallQueryInterface(mDropdownFrame, &fcFrame);
if ((NS_SUCCEEDED(result)) && (nsnull != fcFrame)) {
return fcFrame->GetProperty(aName, aValue);
if(NS_FAILED(result)) {
return result;
}
return result;
if (fcFrame) {
return fcFrame->GetFormProperty(aName, aValue);
}
return NS_OK;
}
nsIFrame*
@ -1974,10 +1900,8 @@ nsComboboxControlFrame::CreateAnonymousContent(nsPresContext* aPresContext,
//
// Note: The value attribute of the display content is set when an item is selected in the dropdown list.
// If the content specified below does not honor the value attribute than nothing will be displayed.
// In addition, if the frame created by content below for does not implement the nsIFormControlFrame
// interface and honor the SetSuggestedSize method the placement and size of the display area will not
// match what is normally desired for a combobox.
// In addition, if the frame created by content below for the button is not an nsGfxScrollFrame
// things will go wrong ... see SetButtonFrameSize.
// For now the content that is created corresponds to two input buttons. It would be better to create the
// tag as something other than input, but then there isn't any way to create a button frame since it
@ -2105,17 +2029,6 @@ nsComboboxControlFrame::CreateFrameFor(nsPresContext* aPresContext,
return NS_OK;
}
NS_IMETHODIMP
nsComboboxControlFrame::SetSuggestedSize(nscoord aWidth, nscoord aHeight)
{
return NS_OK;
}
NS_IMETHODIMP
nsComboboxControlFrame::Destroy(nsPresContext* aPresContext)
{
@ -2178,9 +2091,8 @@ nsComboboxControlFrame::SetInitialChildList(nsPresContext* aPresContext,
for (nsIFrame * child = aChildList; child;
child = child->GetNextSibling()) {
nsIFormControlFrame* fcFrame = nsnull;
CallQueryInterface(child, &fcFrame);
if (fcFrame && fcFrame->GetFormControlType() == NS_FORM_INPUT_BUTTON) {
nsCOMPtr<nsIFormControl> formControl = do_QueryInterface(child->GetContent());
if (formControl && formControl->GetType() == NS_FORM_INPUT_BUTTON) {
mButtonFrame = child;
break;
}
@ -2385,15 +2297,12 @@ void nsComboboxControlFrame::FireValueChangeEvent()
}
}
NS_IMETHODIMP
void
nsComboboxControlFrame::OnContentReset()
{
if (mListControlFrame) {
nsCOMPtr<nsIFormControlFrame> formControl =
do_QueryInterface(mListControlFrame);
formControl->OnContentReset();
mListControlFrame->OnContentReset();
}
return NS_OK;
}

View File

@ -143,26 +143,10 @@ public:
virtual nsIFrame* GetContentInsertionFrame();
// nsIFormControlFrame
NS_IMETHOD SetSuggestedSize(nscoord aWidth, nscoord aHeight);
NS_IMETHOD GetName(nsAString* aName);
NS_IMETHOD_(PRInt32) GetFormControlType() const;
NS_IMETHOD SetProperty(nsPresContext* aPresContext, nsIAtom* aName, const nsAString& aValue);
NS_IMETHOD GetProperty(nsIAtom* aName, nsAString& aValue);
void SetFocus(PRBool aOn, PRBool aRepaint);
void ScrollIntoView(nsPresContext* aPresContext);
virtual void InitializeControl(nsPresContext* aPresContext);
NS_IMETHOD OnContentReset();
NS_IMETHOD GetFormContent(nsIContent*& aContent) const;
virtual nscoord GetVerticalBorderWidth(float aPixToTwip) const;
virtual nscoord GetHorizontalBorderWidth(float aPixToTwip) const;
virtual nscoord GetVerticalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerHeight) const;
virtual nscoord GetHorizontalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerWidth,
nscoord aCharWidth) const;
// nsIFormControlFrame
virtual nsresult SetFormProperty(nsIAtom* aName, const nsAString& aValue);
virtual nsresult GetFormProperty(nsIAtom* aName, nsAString& aValue) const;
virtual void SetFocus(PRBool aOn, PRBool aRepaint);
//nsIComboboxControlFrame
NS_IMETHOD IsDroppedDown(PRBool * aDoDropDown) { *aDoDropDown = mDroppedDown; return NS_OK; }
@ -175,6 +159,7 @@ public:
NS_IMETHOD GetIndexOfDisplayArea(PRInt32* aSelectedIndex);
NS_IMETHOD RedisplaySelectedText();
NS_IMETHOD_(PRInt32) UpdateRecentIndex(PRInt32 aIndex);
virtual void OnContentReset();
// nsISelectControlFrame
NS_IMETHOD AddOption(nsPresContext* aPresContext, PRInt32 index);
@ -237,7 +222,7 @@ public:
protected:
void ShowPopup(PRBool aShowPopup);
void ShowList(nsPresContext* aPresContext, PRBool aShowList);
void SetChildFrameSize(nsIFrame* aFrame, nscoord aWidth, nscoord aHeight);
void SetButtonFrameSize(const nsSize& aSize);
void CheckFireOnChange();
void FireValueChangeEvent();
nsresult RedisplayText(PRInt32 aIndex);
@ -251,7 +236,6 @@ protected:
nsHTMLReflowMetrics& aDesiredSize,
nsReflowStatus& aStatus,
nsIFrame * aDisplayFrame,
nsIFrame * aDropDownBtn,
nscoord& aDisplayWidth,
nscoord aBtnWidth,
const nsMargin& aBorderPadding,

View File

@ -254,13 +254,6 @@ nsFileControlFrame::QueryInterface(const nsIID& aIID, void** aInstancePtr)
return nsHTMLContainerFrame::QueryInterface(aIID, aInstancePtr);
}
NS_IMETHODIMP_(PRInt32)
nsFileControlFrame::GetFormControlType() const
{
return NS_FORM_INPUT_FILE;
}
void
nsFileControlFrame::SetFocus(PRBool aOn, PRBool aRepaint)
{
@ -273,18 +266,6 @@ nsFileControlFrame::SetFocus(PRBool aOn, PRBool aRepaint)
}
}
void
nsFileControlFrame::ScrollIntoView(nsPresContext* aPresContext)
{
if (aPresContext) {
nsIPresShell *presShell = aPresContext->GetPresShell();
if (presShell) {
presShell->ScrollFrameIntoView(this,
NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE,NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE);
}
}
}
/**
* This is called when our browse button is clicked
*/
@ -332,7 +313,7 @@ nsFileControlFrame::MouseClick(nsIDOMEvent* aMouseEvent)
// Set default directry and filename
nsAutoString defaultName;
GetProperty(nsHTMLAtoms::value, defaultName);
GetFormProperty(nsHTMLAtoms::value, defaultName);
nsCOMPtr<nsILocalFile> currentFile = do_CreateInstance("@mozilla.org/file/local;1");
if (currentFile && !defaultName.IsEmpty()) {
@ -378,8 +359,7 @@ nsFileControlFrame::MouseClick(nsIDOMEvent* aMouseEvent)
nsAutoString unicodePath;
result = localFile->GetPath(unicodePath);
if (!unicodePath.IsEmpty()) {
mTextFrame->SetProperty(GetPresContext(), nsHTMLAtoms::value,
unicodePath);
mTextFrame->SetFormProperty(nsHTMLAtoms::value, unicodePath);
// May need to fire an onchange here
mTextFrame->CheckFireOnChange();
return NS_OK;
@ -402,9 +382,9 @@ NS_IMETHODIMP nsFileControlFrame::Reflow(nsPresContext* aPresContext,
if (eReflowReason_Initial == aReflowState.reason) {
mTextFrame = GetTextControlFrame(aPresContext, this);
if (!mTextFrame) return NS_ERROR_UNEXPECTED;
NS_ENSURE_TRUE(mTextFrame, NS_ERROR_UNEXPECTED);
if (mCachedState) {
mTextFrame->SetProperty(aPresContext, nsHTMLAtoms::value, *mCachedState);
mTextFrame->SetFormProperty(nsHTMLAtoms::value, *mCachedState);
delete mCachedState;
mCachedState = nsnull;
}
@ -524,15 +504,6 @@ nsFileControlFrame::GetSkipSides() const
return 0;
}
NS_IMETHODIMP
nsFileControlFrame::GetName(nsAString* aResult)
{
nsFormControlHelper::GetName(mContent, aResult);
return NS_OK;
}
void
nsFileControlFrame::SyncAttr(PRInt32 aNameSpaceID, nsIAtom* aAttribute,
PRInt32 aWhichControls)
@ -604,49 +575,23 @@ nsFileControlFrame::GetFrameName(nsAString& aResult) const
}
#endif
NS_IMETHODIMP
nsFileControlFrame::GetFormContent(nsIContent*& aContent) const
{
aContent = GetContent();
NS_IF_ADDREF(aContent);
return NS_OK;
}
nscoord
nsFileControlFrame::GetVerticalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerHeight) const
{
return 0;
}
nscoord
nsFileControlFrame::GetHorizontalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerWidth,
nscoord aCharWidth) const
{
return 0;
}
NS_IMETHODIMP nsFileControlFrame::SetProperty(nsPresContext* aPresContext,
nsIAtom* aName,
NS_IMETHODIMP nsFileControlFrame::SetFormProperty(nsIAtom* aName,
const nsAString& aValue)
{
nsresult rv = NS_OK;
if (nsHTMLAtoms::value == aName) {
if (mTextFrame) {
mTextFrame->SetValue(aValue);
} else {
if (mCachedState) delete mCachedState;
mCachedState = new nsString(aValue);
if (!mCachedState) rv = NS_ERROR_OUT_OF_MEMORY;
NS_ENSURE_TRUE(mCachedState, NS_ERROR_OUT_OF_MEMORY);
}
}
return rv;
return NS_OK;
}
NS_IMETHODIMP nsFileControlFrame::GetProperty(nsIAtom* aName, nsAString& aValue)
nsresult
nsFileControlFrame::GetFormProperty(nsIAtom* aName, nsAString& aValue) const
{
aValue.Truncate(); // initialize out param
@ -681,8 +626,3 @@ nsFileControlFrame::Paint(nsPresContext* aPresContext,
return nsFrame::Paint(aPresContext, aRenderingContext, aDirtyRect, aWhichLayer);
}
NS_IMETHODIMP
nsFileControlFrame::OnContentReset()
{
return NS_OK;
}

View File

@ -73,12 +73,12 @@ public:
const nsRect& aDirtyRect,
nsFramePaintLayer aWhichLayer,
PRUint32 aFlags = 0);
// nsIFormControlFrame
NS_IMETHOD SetProperty(nsPresContext* aPresContext, nsIAtom* aName, const nsAString& aValue);
NS_IMETHOD GetProperty(nsIAtom* aName, nsAString& aValue);
NS_IMETHOD QueryInterface(const nsIID& aIID, void** aInstancePtr);
NS_IMETHOD OnContentReset();
// nsIFormControlFrame
virtual nsresult SetFormProperty(nsIAtom* aName, const nsAString& aValue);
virtual nsresult GetFormProperty(nsIAtom* aName, nsAString& aValue) const;
virtual void SetFocus(PRBool aOn, PRBool aRepaint);
NS_IMETHOD Reflow(nsPresContext* aCX,
nsHTMLReflowMetrics& aDesiredSize,
@ -92,7 +92,7 @@ public:
#ifdef NS_DEBUG
NS_IMETHOD GetFrameName(nsAString& aResult) const;
#endif
NS_IMETHOD SetSuggestedSize(nscoord aWidth, nscoord aHeight) { return NS_OK; };
virtual nsIFrame* GetFrameForPoint(const nsPoint& aPoint,
nsFramePaintLayer aWhichLayer);
NS_IMETHOD AttributeChanged(PRInt32 aNameSpaceID,
@ -100,19 +100,7 @@ public:
PRInt32 aModType);
virtual PRBool IsLeaf() const;
NS_IMETHOD GetName(nsAString* aName);
NS_IMETHOD_(PRInt32) GetFormControlType() const;
void SetFocus(PRBool aOn, PRBool aRepaint);
void ScrollIntoView(nsPresContext* aPresContext);
NS_IMETHOD GetFormContent(nsIContent*& aContent) const;
virtual nscoord GetVerticalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerHeight) const;
virtual nscoord GetHorizontalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerWidth,
nscoord aCharWidth) const;
// from nsIAnonymousContentCreator
NS_IMETHOD CreateAnonymousContent(nsPresContext* aPresContext,

View File

@ -108,8 +108,6 @@ nsFormControlFrame::nsFormControlFrame()
: nsLeafFrame()
{
mDidInit = PR_FALSE;
mSuggestedWidth = NS_FORMSIZE_NOTSET;
mSuggestedHeight = NS_FORMSIZE_NOTSET;
// Reflow Optimization
mCacheSize.width = kSizeNotSet;
@ -529,7 +527,7 @@ nsFormControlFrame::Reflow(nsPresContext* aPresContext,
DISPLAY_REFLOW(aPresContext, this, aReflowState, aDesiredSize, aStatus);
if (!mDidInit) {
InitializeControl(aPresContext);
RegUnRegAccessKey(aPresContext, NS_STATIC_CAST(nsIFrame*, this), PR_TRUE);
mDidInit = PR_TRUE;
}
@ -580,29 +578,11 @@ nsFormControlFrame::RegUnRegAccessKey(nsPresContext* aPresContext, nsIFrame * aF
return NS_ERROR_FAILURE;
}
void
nsFormControlFrame::InitializeControl(nsPresContext* aPresContext)
{
RegUnRegAccessKey(aPresContext, NS_STATIC_CAST(nsIFrame*, this), PR_TRUE);
}
void
nsFormControlFrame::SetFocus(PRBool aOn, PRBool aRepaint)
{
}
void
nsFormControlFrame::ScrollIntoView(nsPresContext* aPresContext)
{
if (aPresContext) {
nsIPresShell *presShell = aPresContext->GetPresShell();
if (presShell) {
presShell->ScrollFrameIntoView(this,
NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE,NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE);
}
}
}
/*
* FIXME: this ::GetIID() method has no meaning in life and should be
* removed.
@ -621,30 +601,6 @@ nsFormControlFrame::GetCID()
return kButtonCID;
}
NS_IMETHODIMP_(PRInt32)
nsFormControlFrame::GetFormControlType() const
{
return nsFormControlHelper::GetType(mContent);
}
NS_IMETHODIMP
nsFormControlFrame::GetName(nsAString* aResult)
{
nsFormControlHelper::GetName(mContent, aResult);
return NS_OK;
}
NS_IMETHODIMP
nsFormControlFrame::GetValue(nsAString* aResult)
{
nsFormControlHelper::GetValueAttr(mContent, aResult);
return NS_OK;
}
NS_METHOD
nsFormControlFrame::HandleEvent(nsPresContext* aPresContext,
nsGUIEvent* aEvent,
@ -697,14 +653,6 @@ nsFormControlFrame::GetStyleSize(nsPresContext* aPresContext,
}
}
NS_IMETHODIMP
nsFormControlFrame::GetFormContent(nsIContent*& aContent) const
{
aContent = GetContent();
NS_IF_ADDREF(aContent);
return NS_OK;
}
void
nsFormControlFrame::GetCurrentCheckState(PRBool *aState)
{
@ -714,27 +662,19 @@ nsFormControlFrame::GetCurrentCheckState(PRBool *aState)
}
}
NS_IMETHODIMP
nsFormControlFrame::SetProperty(nsPresContext* aPresContext, nsIAtom* aName, const nsAString& aValue)
nsresult
nsFormControlFrame::SetFormProperty(nsIAtom* aName, const nsAString& aValue)
{
return NS_OK;
}
NS_IMETHODIMP
nsFormControlFrame::GetProperty(nsIAtom* aName, nsAString& aValue)
nsresult
nsFormControlFrame::GetFormProperty(nsIAtom* aName, nsAString& aValue) const
{
aValue.Truncate();
return NS_OK;
}
NS_IMETHODIMP
nsFormControlFrame::SetSuggestedSize(nscoord aWidth, nscoord aHeight)
{
mSuggestedWidth = aWidth;
mSuggestedHeight = aHeight;
return NS_OK;
}
nsresult
nsFormControlFrame::GetScreenHeight(nsPresContext* aPresContext,
nscoord& aHeight)

View File

@ -150,10 +150,6 @@ public:
*/
virtual const nsIID& GetIID();
NS_IMETHOD_(PRInt32) GetFormControlType() const;
NS_IMETHOD GetName(nsAString* aName);
NS_IMETHOD GetValue(nsAString* aName);
/**
* Respond to a enter key being pressed
*/
@ -164,13 +160,7 @@ public:
*/
virtual void ControlChanged(nsPresContext* aPresContext) {}
/**
* Chance to Initialize to a default value
*/
virtual void InitializeControl(nsPresContext* aPresContext);
virtual void SetFocus(PRBool aOn = PR_TRUE, PRBool aRepaint = PR_FALSE);
virtual void ScrollIntoView(nsPresContext* aPresContext);
/**
* Perform opertations before the widget associated with this frame has been
@ -187,8 +177,6 @@ public:
virtual void SetClickPoint(nscoord aX, nscoord aY);
NS_IMETHOD GetFormContent(nsIContent*& aContent) const;
/**
* Get the width and height of this control based on CSS
* @param aPresContext the presentation context
@ -199,11 +187,12 @@ public:
const nsHTMLReflowState& aReflowState,
nsSize& aSize);
// nsIFormControlFrame
NS_IMETHOD SetProperty(nsPresContext* aPresContext, nsIAtom* aName, const nsAString& aValue);
// nsIFormControlFrame
virtual nsresult SetFormProperty(nsIAtom* aName, const nsAString& aValue);
NS_IMETHOD GetProperty(nsIAtom* aName, nsAString& aValue);
// Resize Reflow Optimiaztion Methods
virtual nsresult GetFormProperty(nsIAtom* aName, nsAString& aValue) const;
// Resize Reflow Optimization Methods
static void SetupCachedSizes(nsSize& aCacheSize,
nscoord& aCachedAscent,
nscoord& aCachedMaxElementWidth,
@ -253,9 +242,6 @@ protected:
const nsHTMLReflowState& aReflowState,
nsHTMLReflowMetrics& aDesiredLayoutSize,
nsSize& aDesiredWidgetSize);
NS_IMETHOD SetSuggestedSize(nscoord aWidth, nscoord aHeight);
//
//-------------------------------------------------------------------------------------
// Utility methods for managing checkboxes and radiobuttons
@ -268,12 +254,10 @@ protected:
*/
void GetCurrentCheckState(PRBool* aState);
nsSize mWidgetSize;
PRBool mDidInit;
nsPoint mLastClickPoint;
nscoord mSuggestedWidth;
nscoord mSuggestedHeight;
// Reflow Optimization
nsSize mCacheSize;

View File

@ -118,7 +118,6 @@ void nsFormControlHelper::GetBoolString(const PRBool aValue,
aResult.Assign(NS_STRING_FALSE);
}
nsresult nsFormControlHelper::GetFrameFontFM(nsIFrame* aFrame,
nsIFontMetrics** aFontMet)
{
@ -319,26 +318,6 @@ nsFormControlHelper::PaintCheckMark(nsIRenderingContext& aRenderingContext,
aRenderingContext.FillPolygon(checkedPolygon, checkpoints);
}
PRBool
nsFormControlHelper::GetName(nsIContent* aContent, nsAString* aResult)
{
NS_PRECONDITION(aResult, "Null pointer bad!");
return aContent->IsContentOfType(nsIContent::eHTML) &&
aContent->GetAttr(kNameSpaceID_None, nsHTMLAtoms::name, *aResult);
}
PRInt32
nsFormControlHelper::GetType(nsIContent* aContent)
{
nsCOMPtr<nsIFormControl> formControl(do_QueryInterface(aContent));
if (formControl) {
return formControl->GetType();
}
NS_ERROR("Form control not implementing nsIFormControl, assuming TEXT type");
return NS_FORM_INPUT_TEXT;
}
PRBool
nsFormControlHelper::GetValueAttr(nsIContent* aContent, nsAString* aResult)
{

View File

@ -94,20 +94,7 @@ public:
static PRBool GetDisabled(nsIContent* aContent) {
return aContent->HasAttr(kNameSpaceID_None, nsHTMLAtoms::disabled);
};
/**
* Get the name of the form control
* @param aContent the content to get the name of
* @param aResult the returned name of the form control [OUT]
* @return PR_TRUE if things go well
* PR_FALSE if the name attribute is undefined
*/
static PRBool GetName(nsIContent* aContent, nsAString* aResult);
/**
* Get the type of the form control (if it's not obvious from the frame type)
* @param aContent the content to get the name of
* @return the returned type of the form control [OUT]
*/
static PRInt32 GetType(nsIContent* aContent);
/**
* Get the value of the form control (if it's just living in an attr)
* @param aContent the content to get the name of
@ -137,6 +124,7 @@ public:
* if aValue equals PR_TRUE, "0" if aValue equals PR_FALSE.
*/
static void GetBoolString(const PRBool aValue, nsAString& aResult);
static void GetRepChars(char& char1, char& char2) {
char1 = 'W';

View File

@ -60,10 +60,9 @@
const nscoord kSuggestedNotSet = -1;
nsGfxButtonControlFrame::nsGfxButtonControlFrame()
nsGfxButtonControlFrame::nsGfxButtonControlFrame():
mSuggestedSize(kSuggestedNotSet, kSuggestedNotSet)
{
mSuggestedWidth = kSuggestedNotSet;
mSuggestedHeight = kSuggestedNotSet;
}
nsIFrame*
@ -126,11 +125,11 @@ NS_IMETHODIMP
nsGfxButtonControlFrame::AddComputedBorderPaddingToDesiredSize(nsHTMLReflowMetrics& aDesiredSize,
const nsHTMLReflowState& aSuggestedReflowState)
{
if (kSuggestedNotSet == mSuggestedWidth) {
if (kSuggestedNotSet == mSuggestedSize.width) {
aDesiredSize.width += aSuggestedReflowState.mComputedBorderPadding.left + aSuggestedReflowState.mComputedBorderPadding.right;
}
if (kSuggestedNotSet == mSuggestedHeight) {
if (kSuggestedNotSet == mSuggestedSize.height) {
aDesiredSize.height += aSuggestedReflowState.mComputedBorderPadding.top + aSuggestedReflowState.mComputedBorderPadding.bottom;
}
return NS_OK;
@ -144,10 +143,10 @@ nsGfxButtonControlFrame::CreateAnonymousContent(nsPresContext* aPresContext,
{
// Get the text from the "value" attribute.
// If it is zero length, set it to a default value (localized)
nsAutoString initvalue;
GetValue(&initvalue);
nsAutoString initValue;
nsFormControlHelper::GetValueAttr(mContent, &initValue);
nsXPIDLString value;
value.Assign(initvalue);
value.Assign(initValue);
if (value.IsEmpty()) {
// Generate localized label.
// We can't make any assumption as to what the default would be
@ -274,8 +273,10 @@ else {
nsresult
nsGfxButtonControlFrame::GetDefaultLabel(nsXPIDLString& aString)
{
nsresult rv = NS_OK;
PRInt32 type = GetFormControlType();
nsCOMPtr<nsIFormControl> form = do_QueryInterface(mContent);
NS_ENSURE_TRUE(form, NS_ERROR_UNEXPECTED);
PRInt32 type = form->GetType();
const char *prop;
if (type == NS_FORM_INPUT_RESET) {
prop = "Reset";
@ -334,17 +335,17 @@ nsGfxButtonControlFrame::Reflow(nsPresContext* aPresContext,
DO_GLOBAL_REFLOW_COUNT("nsGfxButtonControlFrame", aReflowState.reason);
DISPLAY_REFLOW(aPresContext, this, aReflowState, aDesiredSize, aStatus);
if ((kSuggestedNotSet != mSuggestedWidth) ||
(kSuggestedNotSet != mSuggestedHeight)) {
if ((kSuggestedNotSet != mSuggestedSize.width) ||
(kSuggestedNotSet != mSuggestedSize.height)) {
nsHTMLReflowState suggestedReflowState(aReflowState);
// Honor the suggested width and/or height.
if (kSuggestedNotSet != mSuggestedWidth) {
suggestedReflowState.mComputedWidth = mSuggestedWidth;
if (kSuggestedNotSet != mSuggestedSize.width) {
suggestedReflowState.mComputedWidth = mSuggestedSize.width;
}
if (kSuggestedNotSet != mSuggestedHeight) {
suggestedReflowState.mComputedHeight = mSuggestedHeight;
if (kSuggestedNotSet != mSuggestedSize.height) {
suggestedReflowState.mComputedHeight = mSuggestedSize.height;
}
return nsHTMLButtonControlFrame::Reflow(aPresContext, aDesiredSize, suggestedReflowState, aStatus);
@ -356,13 +357,11 @@ nsGfxButtonControlFrame::Reflow(nsPresContext* aPresContext,
return nsHTMLButtonControlFrame::Reflow(aPresContext, aDesiredSize, aReflowState, aStatus);
}
NS_IMETHODIMP
nsGfxButtonControlFrame::SetSuggestedSize(nscoord aWidth, nscoord aHeight)
void
nsGfxButtonControlFrame::SetSuggestedSize(const nsSize& aSize)
{
mSuggestedWidth = aWidth;
mSuggestedHeight = aHeight;
mSuggestedSize = aSize;
//mState |= NS_FRAME_IS_DIRTY;
return NS_OK;
}
NS_IMETHODIMP

View File

@ -78,8 +78,6 @@ public:
virtual nsIAtom* GetType() const;
// nsFormControlFrame
NS_IMETHOD SetSuggestedSize(nscoord aWidth, nscoord aHeight);
#ifdef DEBUG
NS_IMETHOD GetFrameName(nsAString& aResult) const;
#endif
@ -98,6 +96,14 @@ public:
PRInt32 aModType);
virtual PRBool IsLeaf() const;
/**
* Set the suggested size of the button.
* @note This is NOT a virtual function, it will be called
* directly on an instance of this class.
* @param aSize The suggested size.
*/
void SetSuggestedSize(const nsSize& aSize);
protected:
NS_IMETHOD AddComputedBorderPaddingToDesiredSize(nsHTMLReflowMetrics& aDesiredSize,
@ -110,8 +116,7 @@ private:
NS_IMETHOD_(nsrefcnt) AddRef() { return NS_OK; }
NS_IMETHOD_(nsrefcnt) Release() { return NS_OK; }
nscoord mSuggestedWidth;
nscoord mSuggestedHeight;
nsSize mSuggestedSize;
nsCOMPtr<nsITextContent> mTextContent;
};

View File

@ -284,8 +284,3 @@ nsGfxCheckboxControlFrame::Reflow(nsPresContext* aPresContext,
}
#endif
NS_IMETHODIMP
nsGfxCheckboxControlFrame::OnContentReset()
{
return NS_OK;
}

View File

@ -84,9 +84,6 @@ public:
virtual void SetAdditionalStyleContext(PRInt32 aIndex,
nsStyleContext* aStyleContext);
// nsIFormControlFrame
NS_IMETHOD OnContentReset();
NS_IMETHOD QueryInterface(const nsIID& aIID, void** aInstancePtr);
#ifdef DEBUG_rodsXXX

View File

@ -260,8 +260,3 @@ nsGfxRadioControlFrame::Reflow(nsPresContext* aPresContext,
}
#endif
NS_IMETHODIMP
nsGfxRadioControlFrame::OnContentReset()
{
return NS_OK;
}

View File

@ -91,9 +91,6 @@ public:
nsIRenderingContext& aRenderingContext,
const nsRect& aDirtyRect);
// nsIFormControlFrame
NS_IMETHOD OnContentReset();
///XXX: End o the temporary methods
#ifdef DEBUG_rodsXXX
NS_IMETHOD Reflow(nsPresContext* aCX,

View File

@ -169,29 +169,6 @@ NS_IMETHODIMP nsHTMLButtonControlFrame::GetAccessible(nsIAccessible** aAccessibl
}
#endif
NS_IMETHODIMP_(PRInt32)
nsHTMLButtonControlFrame::GetFormControlType() const
{
return nsFormControlHelper::GetType(mContent);
}
NS_IMETHODIMP
nsHTMLButtonControlFrame::GetName(nsAString* aResult)
{
nsFormControlHelper::GetName(mContent, aResult);
return NS_OK;
}
NS_IMETHODIMP
nsHTMLButtonControlFrame::GetValue(nsAString* aResult)
{
nsFormControlHelper::GetValueAttr(mContent, aResult);
return NS_OK;
}
void
nsHTMLButtonControlFrame::ReParentFrameList(nsFrameManager* aFrameManager,
nsIFrame* aFrameList)
@ -236,19 +213,6 @@ nsHTMLButtonControlFrame::SetFocus(PRBool aOn, PRBool aRepaint)
{
}
void
nsHTMLButtonControlFrame::ScrollIntoView(nsPresContext* aPresContext)
{
if (aPresContext) {
nsIPresShell *presShell = aPresContext->GetPresShell();
if (presShell) {
presShell->ScrollFrameIntoView(this,
NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE,NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE);
}
}
}
NS_IMETHODIMP
nsHTMLButtonControlFrame::HandleEvent(nsPresContext* aPresContext,
nsGUIEvent* aEvent,
@ -555,33 +519,7 @@ nsHTMLButtonControlFrame::GetSkipSides() const
return 0;
}
NS_IMETHODIMP
nsHTMLButtonControlFrame::GetFormContent(nsIContent*& aContent) const
{
aContent = GetContent();
NS_IF_ADDREF(aContent);
return NS_OK;
}
nscoord
nsHTMLButtonControlFrame::GetVerticalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerHeight) const
{
return 0;
}
nscoord
nsHTMLButtonControlFrame::GetHorizontalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerWidth,
nscoord aCharWidth) const
{
return 0;
}
NS_IMETHODIMP nsHTMLButtonControlFrame::SetProperty(nsPresContext* aPresContext,
nsIAtom* aName, const nsAString& aValue)
nsresult nsHTMLButtonControlFrame::SetFormProperty(nsIAtom* aName, const nsAString& aValue)
{
if (nsHTMLAtoms::value == aName) {
return mContent->SetAttr(kNameSpaceID_None, nsHTMLAtoms::value,
@ -590,7 +528,7 @@ NS_IMETHODIMP nsHTMLButtonControlFrame::SetProperty(nsPresContext* aPresContext,
return NS_OK;
}
NS_IMETHODIMP nsHTMLButtonControlFrame::GetProperty(nsIAtom* aName, nsAString& aValue)
nsresult nsHTMLButtonControlFrame::GetFormProperty(nsIAtom* aName, nsAString& aValue) const
{
if (nsHTMLAtoms::value == aName)
mContent->GetAttr(kNameSpaceID_None, nsHTMLAtoms::value, aValue);
@ -611,16 +549,6 @@ nsHTMLButtonControlFrame::SetAdditionalStyleContext(PRInt32 aIndex,
mRenderer.SetStyleContext(aIndex, aStyleContext);
}
NS_IMETHODIMP nsHTMLButtonControlFrame::SetSuggestedSize(nscoord aWidth, nscoord aHeight)
{
// mSuggestedWidth = aWidth;
// mSuggestedHeight = aHeight;
return NS_OK;
}
NS_IMETHODIMP
nsHTMLButtonControlFrame::AppendFrames(nsIAtom* aListName,
nsIFrame* aFrameList)
@ -653,9 +581,3 @@ nsHTMLButtonControlFrame::ReplaceFrame(nsIAtom* aListName,
ReParentFrameList(GetPresContext()->FrameManager(), aNewFrame);
return mFrames.FirstChild()->ReplaceFrame(aListName, aOldFrame, aNewFrame);
}
NS_IMETHODIMP
nsHTMLButtonControlFrame::OnContentReset()
{
return NS_OK;
}

View File

@ -126,27 +126,10 @@ public:
}
#endif
NS_IMETHOD_(PRInt32) GetFormControlType() const;
NS_IMETHOD GetName(nsAString* aName);
NS_IMETHOD GetValue(nsAString* aName);
NS_IMETHOD OnContentReset();
void SetFocus(PRBool aOn, PRBool aRepaint);
void ScrollIntoView(nsPresContext* aPresContext);
NS_IMETHOD GetFormContent(nsIContent*& aContent) const;
virtual nscoord GetVerticalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerHeight) const;
virtual nscoord GetHorizontalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerWidth,
nscoord aCharWidth) const;
// nsIFormControlFrame
NS_IMETHOD SetProperty(nsPresContext* aPresContext, nsIAtom* aName, const nsAString& aValue);
NS_IMETHOD GetProperty(nsIAtom* aName, nsAString& aValue);
NS_IMETHOD SetSuggestedSize(nscoord aWidth, nscoord aHeight);
void SetFocus(PRBool aOn, PRBool aRepaint);
virtual nsresult SetFormProperty(nsIAtom* aName, const nsAString& aValue);
virtual nsresult GetFormProperty(nsIAtom* aName, nsAString& aValue) const;
// Inserted child content gets its frames parented by our child block
virtual nsIFrame* GetContentInsertionFrame() {

View File

@ -50,8 +50,8 @@ class nsCSSFrameConstructor;
// IID for the nsIComboboxControlFrame class
#define NS_ICOMBOBOXCONTROLFRAME_IID \
{ 0x6961f791, 0xa662, 0x11d2, \
{ 0x8d, 0xcf, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
{ 0x23f75e9c, 0x6850, 0x11da, \
{ 0x95, 0x2c, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f } }
/**
* nsIComboboxControlFrame is the common interface for frames of form controls. It
@ -108,6 +108,11 @@ public:
*/
NS_IMETHOD GetAbsoluteRect(nsRect* aRect) = 0;
/**
* Notification that the content has been reset
*/
virtual void OnContentReset() = 0;
/**
* This returns the index of the item that is currently being displayed
* in the display area. It may differ from what the currently Selected index

View File

@ -39,17 +39,15 @@
#define nsIFormControlFrame_h___
#include "nsISupports.h"
#include "nsFont.h"
class nsPresContext;
class nsAString;
class nsIContent;
class nsIAtom;
struct nsSize;
// IID for the nsIFormControlFrame class
#define NS_IFORMCONTROLFRAME_IID \
{ 0xf1911a34, 0xcdf7, 0x4f10, \
{ 0xbc, 0x2a, 0x77, 0x1f, 0x68, 0xce, 0xbc, 0x54 } }
{ 0x189e1565, 0x44f, 0x11da, \
{ 0x94, 0xfc, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f } }
/**
* nsIFormControlFrame is the common interface for frames of form controls. It
@ -61,33 +59,13 @@ class nsIFormControlFrame : public nsISupports {
public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_IFORMCONTROLFRAME_IID)
NS_IMETHOD_(PRInt32) GetFormControlType() const = 0;
NS_IMETHOD GetName(nsAString* aName) = 0;
/**
*
* @param aOn
* @param aRepaint
*/
virtual void SetFocus(PRBool aOn = PR_TRUE, PRBool aRepaint = PR_FALSE) = 0;
virtual void ScrollIntoView(nsPresContext* aPresContext) = 0;
/**
* Set the suggested size for the form element.
* This is used to control the size of the element during reflow if it hasn't had its size
* explicitly set.
* @param aWidth width of the form element
* @param aHeight height of the form element
* @returns NS_OK
*/
NS_IMETHOD SetSuggestedSize(nscoord aWidth, nscoord aHeight) = 0;
/**
* Get the content object associated with this frame. Adds a reference to
* the content object so the caller must do a release.
*
* @see nsISupports#Release()
*/
NS_IMETHOD GetFormContent(nsIContent*& aContent) const = 0;
/**
* Set a property on the form control frame.
*
@ -95,24 +73,17 @@ public:
* @param aValue value of the property
* @returns NS_OK if the property name is valid, otherwise an error code
*/
NS_IMETHOD SetProperty(nsPresContext* aPresContext, nsIAtom* aName, const nsAString& aValue) = 0;
virtual nsresult SetFormProperty(nsIAtom* aName, const nsAString& aValue) = 0;
/**
* Get a property from the form control frame
*
* @param aName name of the property to get
* @param aValue value of the property
* @returns NS_OK if the property name is valid, otherwise an error code
* @param aName name of the property to get.
* @param aValue Value to set.
* @returns NS_OK if the property name is valid, otherwise an error code.
*/
NS_IMETHOD GetProperty(nsIAtom* aName, nsAString& aValue) = 0;
/**
* Notification that the content has been reset
*/
NS_IMETHOD OnContentReset() = 0;
virtual nsresult GetFormProperty(nsIAtom* aName, nsAString& aValue) const = 0;
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsIFormControlFrame, NS_IFORMCONTROLFRAME_IID)

View File

@ -46,8 +46,8 @@ class nsIContent;
// IID for the nsIListControlFrame class
#define NS_ILISTCONTROLFRAME_IID \
{ 0xf44db101, 0xa73c, 0x11d2, \
{ 0x8d, 0xcf, 0x0, 0x60, 0x97, 0x3, 0xc1, 0x4e } }
{ 0xa28ca6f, 0x6850, 0x11da, \
{ 0x95, 0x2c, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f } }
/**
* nsIListControlFrame is the interface for frame-based listboxes.
@ -124,6 +124,11 @@ public:
* @param aIndex the index to actually select
*/
NS_IMETHOD ComboboxFinish(PRInt32 aIndex) = 0;
/**
* Notification that the content has been reset
*/
virtual void OnContentReset() = 0;
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsIListControlFrame, NS_ILISTCONTROLFRAME_IID)

View File

@ -45,9 +45,9 @@ class nsIDocShell;
class nsISelectionController;
#define NS_IGFXTEXTCONTROLFRAME2_IID \
{/* A744CFC9-2DA8-416d-A058-ADB1D4B3B534*/ \
0xa744cfc9, 0x2da8, 0x416d, \
{ 0xa0, 0x58, 0xad, 0xb1, 0xd4, 0xb3, 0xb5, 0x34 } }
{/* 0c3b64da-4431-11da-94fd-00e08161165f*/ \
0xc3b64da, 0x4431, 0x11da, \
{ 0x94, 0xfd, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f } }
class nsITextControlFrame : public nsIFormControlFrame
{
@ -72,7 +72,7 @@ public:
* value. If this is true, linebreaks will not be inserted even if
* wrap=hard.
*/
NS_IMETHOD GetValue(nsAString& aValue, PRBool aIgnoreWrap) = 0;
NS_IMETHOD GetValue(nsAString& aValue, PRBool aIgnoreWrap) const = 0;
NS_IMETHOD GetTextLength(PRInt32* aTextLength) = 0;

View File

@ -98,29 +98,10 @@ public:
NS_IMETHOD GetCursor(const nsPoint& aPoint,
nsIFrame::Cursor& aCursor);
NS_IMETHOD_(PRInt32) GetFormControlType() const;
NS_IMETHOD GetName(nsAString* aName);
void SetFocus(PRBool aOn, PRBool aRepaint);
void ScrollIntoView(nsPresContext* aPresContext);
NS_IMETHOD GetFormContent(nsIContent*& aContent) const;
virtual nscoord GetVerticalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerHeight) const;
virtual nscoord GetHorizontalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerWidth,
nscoord aCharWidth) const;
// nsIFormControlFrame
NS_IMETHOD SetProperty(nsPresContext* aPresContext, nsIAtom* aName, const nsAString& aValue);
NS_IMETHOD GetProperty(nsIAtom* aName, nsAString& aValue);
NS_IMETHOD SetSuggestedSize(nscoord aWidth, nscoord aHeight);
NS_IMETHOD OnContentReset();
// nsIFormContromFrame
virtual void SetFocus(PRBool aOn, PRBool aRepaint);
virtual nsresult SetFormProperty(nsIAtom* aName, const nsAString& aValue);
virtual nsresult GetFormProperty(nsIAtom* aName, nsAString& aValue) const;
// nsIImageControlFrame
NS_IMETHOD GetClickedX(PRInt32* aX);
@ -269,32 +250,6 @@ nsImageControlFrame::SetFocus(PRBool aOn, PRBool aRepaint)
{
}
void
nsImageControlFrame::ScrollIntoView(nsPresContext* aPresContext)
{
if (aPresContext) {
nsIPresShell *presShell = aPresContext->GetPresShell();
if (presShell) {
presShell->ScrollFrameIntoView(this,
NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE,NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE);
}
}
}
NS_IMETHODIMP_(PRInt32)
nsImageControlFrame::GetFormControlType() const
{
return NS_FORM_INPUT_IMAGE;
}
NS_IMETHODIMP
nsImageControlFrame::GetName(nsAString* aResult)
{
nsFormControlHelper::GetName(mContent, aResult);
return NS_OK;
}
NS_IMETHODIMP
nsImageControlFrame::GetCursor(const nsPoint& aPoint,
nsIFrame::Cursor& aCursor)
@ -310,58 +265,21 @@ nsImageControlFrame::GetCursor(const nsPoint& aPoint,
return NS_OK;
}
NS_IMETHODIMP
nsImageControlFrame::GetFormContent(nsIContent*& aContent) const
{
aContent = GetContent();
NS_IF_ADDREF(aContent);
return NS_OK;
}
nscoord
nsImageControlFrame::GetVerticalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerHeight) const
{
return 0;
}
nscoord
nsImageControlFrame::GetHorizontalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerWidth,
nscoord aCharWidth) const
{
return 0;
}
NS_IMETHODIMP nsImageControlFrame::SetProperty(nsPresContext* aPresContext,
nsIAtom* aName,
const nsAString& aValue)
nsresult
nsImageControlFrame::SetFormProperty(nsIAtom* aName,
const nsAString& aValue)
{
return NS_OK;
}
NS_IMETHODIMP nsImageControlFrame::GetProperty(nsIAtom* aName,
nsAString& aValue)
nsresult
nsImageControlFrame::GetFormProperty(nsIAtom* aName,
nsAString& aValue) const
{
aValue.Truncate();
return NS_OK;
}
NS_IMETHODIMP nsImageControlFrame::SetSuggestedSize(nscoord aWidth, nscoord aHeight)
{
// mSuggestedWidth = aWidth;
// mSuggestedHeight = aHeight;
return NS_OK;
}
NS_IMETHODIMP
nsImageControlFrame::OnContentReset()
{
return NS_OK;
}
NS_IMETHODIMP
nsImageControlFrame::GetClickedX(PRInt32* aX)
{

View File

@ -968,9 +968,7 @@ nsListControlFrame::Reflow(nsPresContext* aPresContext,
// We add in the height of optgroup labels (within the constraint above), bug 300474.
visibleHeight = ::GetOptGroupLabelsHeight(GetPresContext(), mContent, heightOfARow);
PRBool multipleSelections = PR_FALSE;
GetMultiple(&multipleSelections);
if (multipleSelections) {
if (GetMultiple()) {
if (length < 2) {
// Add in 1 heightOfARow also when length==0 to match how we calculate the desired size.
visibleHeight = heightOfARow + PR_MAX(heightOfARow, visibleHeight);
@ -1116,15 +1114,6 @@ nsListControlFrame::Reflow(nsPresContext* aPresContext,
return NS_OK;
}
//---------------------------------------------------------
NS_IMETHODIMP
nsListControlFrame::GetFormContent(nsIContent*& aContent) const
{
aContent = GetContent();
NS_IF_ADDREF(aContent);
return NS_OK;
}
nsGfxScrollFrameInner::ScrollbarStyles
nsListControlFrame::GetScrollbarStyles() const
{
@ -1285,11 +1274,9 @@ nsListControlFrame::PerformSelection(PRInt32 aClickedIndex,
{
PRBool wasChanged = PR_FALSE;
PRBool isMultiple;
GetMultiple(&isMultiple);
if (aClickedIndex == kNothingSelected) {
} else if (isMultiple) {
}
else if (GetMultiple()) {
if (aIsShift) {
// Make sure shift+click actually does something expected when
// the user has never clicked on the select
@ -1528,47 +1515,29 @@ nsListControlFrame::Init(nsPresContext* aPresContext,
return result;
}
//---------------------------------------------------------
nscoord
nsListControlFrame::GetVerticalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerHeight) const
{
return NSIntPixelsToTwips(0, aPixToTwip);
}
//---------------------------------------------------------
nscoord
nsListControlFrame::GetHorizontalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerWidth,
nscoord aCharWidth) const
{
return GetVerticalInsidePadding(aPresContext, aPixToTwip, aInnerWidth);
}
//---------------------------------------------------------
// Returns whether the nsIDOMHTMLSelectElement supports
// mulitple selection
//---------------------------------------------------------
NS_IMETHODIMP
nsListControlFrame::GetMultiple(PRBool* aMultiple, nsIDOMHTMLSelectElement* aSelect)
PRBool
nsListControlFrame::GetMultiple(nsIDOMHTMLSelectElement* aSelect) const
{
if (!aSelect) {
nsIDOMHTMLSelectElement* selectElement = nsnull;
nsresult result = mContent->QueryInterface(NS_GET_IID(nsIDOMHTMLSelectElement),
(void**)&selectElement);
if (NS_SUCCEEDED(result) && selectElement) {
result = selectElement->GetMultiple(aMultiple);
NS_RELEASE(selectElement);
}
return result;
PRBool multiple = PR_FALSE;
nsresult rv = NS_OK;
if (aSelect) {
rv = aSelect->GetMultiple(&multiple);
} else {
return aSelect->GetMultiple(aMultiple);
nsCOMPtr<nsIDOMHTMLSelectElement> selectElement =
do_QueryInterface(mContent);
if (selectElement) {
rv = selectElement->GetMultiple(&multiple);
}
}
if (NS_SUCCEEDED(rv)) {
return multiple;
}
return PR_FALSE;
}
@ -1614,7 +1583,7 @@ nsListControlFrame::GetOptionAsContent(nsIDOMHTMLOptionsCollection* aCollection,
// from the select
//---------------------------------------------------------
already_AddRefed<nsIContent>
nsListControlFrame::GetOptionContent(PRInt32 aIndex)
nsListControlFrame::GetOptionContent(PRInt32 aIndex) const
{
nsCOMPtr<nsIDOMHTMLOptionsCollection> options =
@ -1678,7 +1647,7 @@ nsListControlFrame::GetOption(nsIDOMHTMLOptionsCollection* aCollection,
// return PR_TRUE if it is, PR_FALSE if it is NOT
//---------------------------------------------------------
PRBool
nsListControlFrame::IsContentSelected(nsIContent* aContent)
nsListControlFrame::IsContentSelected(nsIContent* aContent) const
{
PRBool isSelected = PR_FALSE;
@ -1694,7 +1663,7 @@ nsListControlFrame::IsContentSelected(nsIContent* aContent)
// For a given index is return whether the content is selected
//---------------------------------------------------------
PRBool
nsListControlFrame::IsContentSelectedByIndex(PRInt32 aIndex)
nsListControlFrame::IsContentSelectedByIndex(PRInt32 aIndex) const
{
nsCOMPtr<nsIContent> content = GetOptionContent(aIndex);
NS_ASSERTION(content, "Failed to retrieve option content");
@ -1726,17 +1695,10 @@ nsListControlFrame::GetSkipSides() const
}
//---------------------------------------------------------
NS_IMETHODIMP_(PRInt32)
nsListControlFrame::GetFormControlType() const
{
return NS_FORM_SELECT;
}
NS_IMETHODIMP
void
nsListControlFrame::OnContentReset()
{
ResetList(PR_TRUE);
return NS_OK;
}
//---------------------------------------------------------
@ -1773,17 +1735,7 @@ nsListControlFrame::ResetList(PRBool aAllowScrolling)
// Combobox will redisplay itself with the OnOptionSelected event
}
//---------------------------------------------------------
NS_IMETHODIMP
nsListControlFrame::GetName(nsAString* aResult)
{
nsFormControlHelper::GetName(mContent, aResult);
return NS_OK;
}
//---------------------------------------------------------
void
nsListControlFrame::SetFocus(PRBool aOn, PRBool aRepaint)
@ -1806,20 +1758,6 @@ void nsListControlFrame::ComboboxFocusSet()
gLastKeyTime = 0;
}
//---------------------------------------------------------
void
nsListControlFrame::ScrollIntoView(nsPresContext* aPresContext)
{
if (aPresContext) {
nsIPresShell *presShell = aPresContext->GetPresShell();
if (presShell) {
presShell->ScrollFrameIntoView(this,
NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE,NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE);
}
}
}
//---------------------------------------------------------
NS_IMETHODIMP
nsListControlFrame::SetComboboxFrame(nsIFrame* aComboboxFrame)
@ -2169,8 +2107,8 @@ nsListControlFrame::OnSetSelectedIndex(PRInt32 aOldIndex, PRInt32 aNewIndex)
//----------------------------------------------------------------------
//---------------------------------------------------------
NS_IMETHODIMP
nsListControlFrame::SetProperty(nsPresContext* aPresContext, nsIAtom* aName,
nsresult
nsListControlFrame::SetFormProperty(nsIAtom* aName,
const nsAString& aValue)
{
if (nsHTMLAtoms::selected == aName) {
@ -2187,8 +2125,8 @@ nsListControlFrame::SetProperty(nsPresContext* aPresContext, nsIAtom* aName,
}
//---------------------------------------------------------
NS_IMETHODIMP
nsListControlFrame::GetProperty(nsIAtom* aName, nsAString& aValue)
nsresult
nsListControlFrame::GetFormProperty(nsIAtom* aName, nsAString& aValue) const
{
// Get the selected value of option from local cache (optimization vs. widget)
if (nsHTMLAtoms::selected == aName) {
@ -2321,14 +2259,6 @@ nsListControlFrame::GetMaximumSize(nsSize &aSize)
return NS_OK;
}
//---------------------------------------------------------
NS_IMETHODIMP
nsListControlFrame::SetSuggestedSize(nscoord aWidth, nscoord aHeight)
{
return NS_OK;
}
//----------------------------------------------------------------------
nsresult
nsListControlFrame::IsOptionDisabled(PRInt32 anIndex, PRBool &aIsDisabled)
@ -3097,11 +3027,8 @@ nsListControlFrame::KeyPress(nsIDOMEvent* aKeyEvent)
keycode == nsIDOMKeyEvent::DOM_VK_LEFT ||
keycode == nsIDOMKeyEvent::DOM_VK_DOWN ||
keycode == nsIDOMKeyEvent::DOM_VK_RIGHT)) {
PRBool isMultiple;
GetMultiple(&isMultiple);
// Don't go into multiple select mode unless this list can handle it
mControlSelectMode = isMultiple;
isControl = isMultiple;
isControl = mControlSelectMode = GetMultiple();
} else if (charcode != ' ') {
mControlSelectMode = PR_FALSE;
}

View File

@ -130,23 +130,9 @@ public:
#endif
// nsIFormControlFrame
NS_IMETHOD_(PRInt32) GetFormControlType() const;
NS_IMETHOD GetName(nsAString* aName);
NS_IMETHOD SetProperty(nsPresContext* aPresContext, nsIAtom* aName, const nsAString& aValue);
NS_IMETHOD GetProperty(nsIAtom* aName, nsAString& aValue);
NS_IMETHOD GetMultiple(PRBool* aResult, nsIDOMHTMLSelectElement* aSelect = nsnull);
NS_IMETHOD GetFormContent(nsIContent*& aContent) const;
NS_IMETHOD OnContentReset();
virtual nsresult SetFormProperty(nsIAtom* aName, const nsAString& aValue);
virtual nsresult GetFormProperty(nsIAtom* aName, nsAString& aValue) const;
virtual void SetFocus(PRBool aOn = PR_TRUE, PRBool aRepaint = PR_FALSE);
virtual void ScrollIntoView(nsPresContext* aPresContext);
virtual nscoord GetVerticalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerHeight) const;
virtual nscoord GetHorizontalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerWidth,
nscoord aCharWidth) const;
virtual nsGfxScrollFrameInner::ScrollbarStyles GetScrollbarStyles() const;
@ -164,7 +150,6 @@ public:
NS_IMETHOD GetOptionText(PRInt32 aIndex, nsAString & aStr);
NS_IMETHOD CaptureMouseEvents(nsPresContext* aPresContext, PRBool aGrabMouseEvents);
NS_IMETHOD GetMaximumSize(nsSize &aSize);
NS_IMETHOD SetSuggestedSize(nscoord aWidth, nscoord aHeight);
NS_IMETHOD GetNumberOfOptions(PRInt32* aNumOptions);
NS_IMETHOD SyncViewWithFrame();
NS_IMETHOD AboutToDropDown();
@ -173,6 +158,7 @@ public:
NS_IMETHOD SetOverrideReflowOptimization(PRBool aValue) { mOverrideReflowOpt = aValue; return NS_OK; }
NS_IMETHOD FireOnChange();
NS_IMETHOD ComboboxFinish(PRInt32 aIndex);
virtual void OnContentReset();
// nsISelectControlFrame
NS_IMETHOD AddOption(nsPresContext* aPresContext, PRInt32 index);
@ -213,7 +199,7 @@ public:
#endif
protected:
PRBool GetMultiple(nsIDOMHTMLSelectElement* aSelect = nsnull) const;
void DropDownToggleKey(nsIDOMEvent* aKeyEvent);
nsresult IsOptionDisabled(PRInt32 anIndex, PRBool &aIsDisabled);
nsresult ScrollToFrame(nsIContent * aOptElement);
@ -231,9 +217,9 @@ protected:
nsresult GetSizeAttribute(PRInt32 *aSize);
nsIContent* GetOptionFromContent(nsIContent *aContent);
nsresult GetIndexFromDOMEvent(nsIDOMEvent* aMouseEvent, PRInt32& aCurIndex);
already_AddRefed<nsIContent> GetOptionContent(PRInt32 aIndex);
PRBool IsContentSelected(nsIContent* aContent);
PRBool IsContentSelectedByIndex(PRInt32 aIndex);
already_AddRefed<nsIContent> GetOptionContent(PRInt32 aIndex) const;
PRBool IsContentSelected(nsIContent* aContent) const;
PRBool IsContentSelectedByIndex(PRInt32 aIndex) const;
PRBool IsOptionElement(nsIContent* aContent);
PRBool CheckIfAllFramesHere();
PRInt32 GetIndexFromContent(nsIContent *aContent);

View File

@ -270,8 +270,7 @@ nsTextInputListener::NotifySelectionChanged(nsIDOMDocument* aDoc, nsISelection*
nsISelectionListener::KEYPRESS_REASON |
nsISelectionListener::SELECTALL_REASON)))
{
nsCOMPtr<nsIContent> content;
mFrame->GetFormContent(*getter_AddRefs(content));
nsIContent* content = mFrame->GetContent();
if (content)
{
nsCOMPtr<nsIDocument> doc = content->GetDocument();
@ -1275,8 +1274,6 @@ nsTextControlFrame::nsTextControlFrame(nsIPresShell* aShell)
mUseEditor = PR_FALSE;
mIsProcessing = PR_FALSE;
mNotifyOnInput = PR_TRUE;
mSuggestedWidth = NS_FORMSIZE_NOTSET;
mSuggestedHeight = NS_FORMSIZE_NOTSET;
mScrollableView = nsnull;
mDidPreDestroy = PR_FALSE;
}
@ -1449,8 +1446,12 @@ nsTextControlFrame::GetType() const
// XXX: wouldn't it be nice to get this from the style context!
PRBool nsTextControlFrame::IsSingleLineTextControl() const
{
PRInt32 type = GetFormControlType();
return (type == NS_FORM_INPUT_TEXT) || (type == NS_FORM_INPUT_PASSWORD);
nsCOMPtr<nsIFormControl> formControl = do_QueryInterface(mContent);
if (formControl) {
PRInt32 type = formControl->GetType();
return (type == NS_FORM_INPUT_TEXT) || (type == NS_FORM_INPUT_PASSWORD);
}
return PR_FALSE;
}
PRBool nsTextControlFrame::IsTextArea() const
@ -1467,7 +1468,8 @@ PRBool nsTextControlFrame::IsPlainTextControl() const
PRBool nsTextControlFrame::IsPasswordTextControl() const
{
return GetFormControlType() == NS_FORM_INPUT_PASSWORD;
nsCOMPtr<nsIFormControl> formControl = do_QueryInterface(mContent);
return formControl && formControl->GetType() == NS_FORM_INPUT_PASSWORD;
}
@ -2243,20 +2245,7 @@ nsTextControlFrame::IsLeaf() const
return PR_TRUE;
}
//IMPLEMENTING NS_IFORMCONTROLFRAME
NS_IMETHODIMP
nsTextControlFrame::GetName(nsAString* aResult)
{
nsFormControlHelper::GetName(mContent, aResult);
return NS_OK;
}
NS_IMETHODIMP_(PRInt32)
nsTextControlFrame::GetFormControlType() const
{
return nsFormControlHelper::GetType(mContent);
}
static PRBool
IsFocusedContent(nsPresContext* aPresContext, nsIContent* aContent)
@ -2267,7 +2256,8 @@ IsFocusedContent(nsPresContext* aPresContext, nsIContent* aContent)
return focusedContent == aContent;
}
void nsTextControlFrame::SetFocus(PRBool aOn, PRBool aRepaint)
//IMPLEMENTING NS_IFORMCONTROLFRAME
void nsTextControlFrame::SetFocus(PRBool aOn, PRBool aRepaint)
{
if (!aOn || !mSelCon)
return;
@ -2307,54 +2297,7 @@ void nsTextControlFrame::SetFocus(PRBool aOn, PRBool aRepaint)
docSel->RemoveAllRanges();
}
void nsTextControlFrame::ScrollIntoView(nsPresContext* aPresContext)
{
if (aPresContext) {
nsIPresShell *presShell = aPresContext->GetPresShell();
if (presShell) {
presShell->ScrollFrameIntoView(this,
NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE,NS_PRESSHELL_SCROLL_IF_NOT_VISIBLE);
}
}
}
nscoord
nsTextControlFrame::GetVerticalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerHeight) const
{
return NSIntPixelsToTwips(0, aPixToTwip);
}
//---------------------------------------------------------
nscoord
nsTextControlFrame::GetHorizontalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerWidth,
nscoord aCharWidth) const
{
return GetVerticalInsidePadding(aPresContext, aPixToTwip, aInnerWidth);
}
NS_IMETHODIMP
nsTextControlFrame::SetSuggestedSize(nscoord aWidth, nscoord aHeight)
{
mSuggestedWidth = aWidth;
mSuggestedHeight = aHeight;
return NS_OK;
}
NS_IMETHODIMP
nsTextControlFrame::GetFormContent(nsIContent*& aContent) const
{
aContent = GetContent();
NS_IF_ADDREF(aContent);
return NS_OK;
}
NS_IMETHODIMP nsTextControlFrame::SetProperty(nsPresContext* aPresContext, nsIAtom* aName, const nsAString& aValue)
nsresult nsTextControlFrame::SetFormProperty(nsIAtom* aName, const nsAString& aValue)
{
if (!mIsProcessing)//some kind of lock.
{
@ -2386,8 +2329,8 @@ NS_IMETHODIMP nsTextControlFrame::SetProperty(nsPresContext* aPresContext, nsIAt
return NS_OK;
}
NS_IMETHODIMP
nsTextControlFrame::GetProperty(nsIAtom* aName, nsAString& aValue)
nsresult
nsTextControlFrame::GetFormProperty(nsIAtom* aName, nsAString& aValue) const
{
// Return the value of the property from the widget it is not null.
// If widget is null, assume the widget is GFX-rendered and return a member variable instead.
@ -3022,8 +2965,8 @@ nsresult
nsTextControlFrame::FireOnChange()
{
// Dispatch th1e change event
nsCOMPtr<nsIContent> content;
if (NS_SUCCEEDED(GetFormContent(*getter_AddRefs(content))))
nsIContent* content = GetContent();
if (content)
{
nsEventStatus status = nsEventStatus_eIgnore;
nsInputEvent event(PR_TRUE, NS_FORM_CHANGE, nsnull);
@ -3042,7 +2985,7 @@ nsTextControlFrame::FireOnChange()
//privates
NS_IMETHODIMP
nsTextControlFrame::GetValue(nsAString& aValue, PRBool aIgnoreWrap)
nsTextControlFrame::GetValue(nsAString& aValue, PRBool aIgnoreWrap) const
{
aValue.Truncate(); // initialize out param
nsresult rv = NS_OK;
@ -3330,12 +3273,6 @@ nsTextControlFrame::IsScrollable() const
return !IsSingleLineTextControl();
}
NS_IMETHODIMP
nsTextControlFrame::OnContentReset()
{
return NS_OK;
}
void
nsTextControlFrame::SetValueChanged(PRBool aValueChanged)
{

View File

@ -126,22 +126,9 @@ public:
nsIFrame* aChildList);
//==== BEGIN NSIFORMCONTROLFRAME
NS_IMETHOD_(PRInt32) GetFormControlType() const; //*
NS_IMETHOD GetName(nsAString* aName);//*
virtual void SetFocus(PRBool aOn , PRBool aRepaint);
virtual void ScrollIntoView(nsPresContext* aPresContext);
virtual nscoord GetVerticalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerHeight) const;
virtual nscoord GetHorizontalInsidePadding(nsPresContext* aPresContext,
float aPixToTwip,
nscoord aInnerWidth,
nscoord aCharWidth) const;/**/
NS_IMETHOD SetSuggestedSize(nscoord aWidth, nscoord aHeight);
NS_IMETHOD GetFormContent(nsIContent*& aContent) const;
NS_IMETHOD SetProperty(nsPresContext* aPresContext, nsIAtom* aName, const nsAString& aValue);
NS_IMETHOD GetProperty(nsIAtom* aName, nsAString& aValue);
NS_IMETHOD OnContentReset();
virtual nsresult SetFormProperty(nsIAtom* aName, const nsAString& aValue);
virtual nsresult GetFormProperty(nsIAtom* aName, nsAString& aValue) const;
//==== END NSIFORMCONTROLFRAME
@ -150,7 +137,7 @@ public:
NS_IMETHOD GetEditor(nsIEditor **aEditor);
NS_IMETHOD OwnsValue(PRBool* aOwnsValue);
NS_IMETHOD GetValue(nsAString& aValue, PRBool aIgnoreWrap);
NS_IMETHOD GetValue(nsAString& aValue, PRBool aIgnoreWrap) const;
NS_IMETHOD GetTextLength(PRInt32* aTextLength);
NS_IMETHOD CheckFireOnChange();
NS_IMETHOD SetSelectionStart(PRInt32 aSelectionStart);
@ -208,7 +195,6 @@ public: //for methods who access nsTextControlFrame directly
static NS_HIDDEN_(void) ShutDown();
protected:
/**
* Find out whether this control is scrollable (i.e. if it is not a single
* line text control)
@ -294,8 +280,6 @@ private:
nsCOMPtr<nsISelectionController> mSelCon;
//cached sizes and states
nscoord mSuggestedWidth;
nscoord mSuggestedHeight;
nsSize mSize;
// these packed bools could instead use the high order bits on mState, saving 4 bytes