Various modifications/fixes/cleanup for frame-based listboxes.
Set display type to block for option elements in ua.css. Enable frame-based listboxes when widget render mode is gfx.
This commit is contained in:
@@ -1721,18 +1721,21 @@ nsCSSFrameConstructor::ConstructSelectFrame(nsIPresContext* aPresContext,
|
|||||||
PRBool aIsFixedPositioned,
|
PRBool aIsFixedPositioned,
|
||||||
nsAbsoluteItems& aFixedItems)
|
nsAbsoluteItems& aFixedItems)
|
||||||
{
|
{
|
||||||
|
#define NS_FRAME_BASED_COMBO_WORKS 0
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
nsWidgetRendering mode;
|
nsWidgetRendering mode;
|
||||||
aPresContext->GetWidgetRenderingMode(&mode);
|
aPresContext->GetWidgetRenderingMode(&mode);
|
||||||
//XXX: When frame-based rendering works uncomment this and remove the line below
|
|
||||||
// if (eWidgetRendering_Gfx == mode) {
|
if (eWidgetRendering_Gfx == mode) {
|
||||||
if (0) {
|
|
||||||
nsIDOMHTMLSelectElement* select = nsnull;
|
nsIDOMHTMLSelectElement* select = nsnull;
|
||||||
PRInt32 size = 1;
|
PRInt32 size = 1;
|
||||||
nsresult result = aContent->QueryInterface(kIDOMHTMLSelectElementIID, (void**)&select);
|
nsresult result = aContent->QueryInterface(kIDOMHTMLSelectElementIID, (void**)&select);
|
||||||
if (NS_OK == result) {
|
if (NS_OK == result) {
|
||||||
result = select->GetSize(&size);
|
result = select->GetSize(&size);
|
||||||
if (1 == size) {
|
if (1 == size) {
|
||||||
|
if (! NS_FRAME_BASED_COMBO_WORKS) {
|
||||||
|
rv = NS_NewSelectControlFrame(aNewFrame);
|
||||||
|
} else {
|
||||||
nsIFrame * comboboxFrame;
|
nsIFrame * comboboxFrame;
|
||||||
rv = NS_NewComboboxControlFrame(comboboxFrame);
|
rv = NS_NewComboboxControlFrame(comboboxFrame);
|
||||||
nsIComboboxControlFrame* comboBox;
|
nsIComboboxControlFrame* comboBox;
|
||||||
@@ -1798,6 +1801,7 @@ nsCSSFrameConstructor::ConstructSelectFrame(nsIPresContext* aPresContext,
|
|||||||
aStyleContext, PR_TRUE);
|
aStyleContext, PR_TRUE);
|
||||||
aNewFrame = comboboxFrame;
|
aNewFrame = comboboxFrame;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
nsIFrame * listFrame;
|
nsIFrame * listFrame;
|
||||||
|
|||||||
@@ -377,9 +377,11 @@ NS_IMETHODIMP nsComboboxControlFrame::Reflow(nsIPresContext& aPresConte
|
|||||||
aPresContext.GetScaledPixelsToTwips(&sp2t);
|
aPresContext.GetScaledPixelsToTwips(&sp2t);
|
||||||
nscoord onePixel = NSIntPixelsToTwips(1, sp2t);
|
nscoord onePixel = NSIntPixelsToTwips(1, sp2t);
|
||||||
|
|
||||||
|
#if 0
|
||||||
nscoord scrollbarWidth = 0;
|
nscoord scrollbarWidth = 0;
|
||||||
nscoord scrollbarHeight = 0;
|
nscoord scrollbarHeight = 0;
|
||||||
nsListControlFrame::GetScrollBarDimensions(aPresContext, scrollbarWidth, scrollbarHeight);
|
nsListControlFrame::GetScrollBarDimensions(aPresContext, scrollbarWidth, scrollbarHeight);
|
||||||
|
#endif
|
||||||
|
|
||||||
nscoord extra = desiredSize.height - (rowHeight * numRows);
|
nscoord extra = desiredSize.height - (rowHeight * numRows);
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -23,11 +23,9 @@
|
|||||||
#include "nsIDOMFocusListener.h"
|
#include "nsIDOMFocusListener.h"
|
||||||
#include "nsIPresContext.h"
|
#include "nsIPresContext.h"
|
||||||
#include "nsIFormControlFrame.h"
|
#include "nsIFormControlFrame.h"
|
||||||
#ifdef PLUGGABLE_EVENTS
|
|
||||||
#include "nsIPluggableEventListener.h"
|
|
||||||
#endif
|
|
||||||
#include "nsIListControlFrame.h"
|
#include "nsIListControlFrame.h"
|
||||||
|
|
||||||
|
|
||||||
class nsIDOMHTMLSelectElement;
|
class nsIDOMHTMLSelectElement;
|
||||||
class nsIDOMHTMLCollection;
|
class nsIDOMHTMLCollection;
|
||||||
class nsIDOMHTMLOptionElement;
|
class nsIDOMHTMLOptionElement;
|
||||||
@@ -35,33 +33,7 @@ class nsFormFrame;
|
|||||||
class nsScrollFrame;
|
class nsScrollFrame;
|
||||||
class nsIComboboxControlFrame;
|
class nsIComboboxControlFrame;
|
||||||
|
|
||||||
#if 0
|
|
||||||
struct nsInputDimSpec
|
|
||||||
{
|
|
||||||
nsIAtom* mColSizeAttr; // attribute used to determine width
|
|
||||||
PRBool mColSizeAttrInPixels; // is attribute value in pixels (otherwise num chars)
|
|
||||||
nsIAtom* mColValueAttr; // attribute used to get value to determine size
|
|
||||||
// if not determined above
|
|
||||||
nsString* mColDefaultValue; // default value if not determined above
|
|
||||||
nscoord mColDefaultSize; // default width if not determined above
|
|
||||||
PRBool mColDefaultSizeInPixels; // is default width in pixels (otherswise num chars)
|
|
||||||
nsIAtom* mRowSizeAttr; // attribute used to determine height
|
|
||||||
nscoord mRowDefaultSize; // default height if not determined above
|
|
||||||
|
|
||||||
nsInputDimSpec(nsIAtom* aColSizeAttr, PRBool aColSizeAttrInPixels,
|
|
||||||
nsIAtom* aColValueAttr, nsString* aColDefaultValue,
|
|
||||||
nscoord aColDefaultSize, PRBool aColDefaultSizeInPixels,
|
|
||||||
nsIAtom* aRowSizeAttr, nscoord aRowDefaultSize)
|
|
||||||
: mColSizeAttr(aColSizeAttr), mColSizeAttrInPixels(aColSizeAttrInPixels),
|
|
||||||
mColValueAttr(aColValueAttr),
|
|
||||||
mColDefaultValue(aColDefaultValue), mColDefaultSize(aColDefaultSize),
|
|
||||||
mColDefaultSizeInPixels(aColDefaultSizeInPixels),
|
|
||||||
mRowSizeAttr(aRowSizeAttr), mRowDefaultSize(aRowDefaultSize)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
/**
|
/**
|
||||||
* The block frame has two additional named child lists:
|
* The block frame has two additional named child lists:
|
||||||
* - "Floater-list" which contains the floated frames
|
* - "Floater-list" which contains the floated frames
|
||||||
@@ -73,9 +45,6 @@ struct nsInputDimSpec
|
|||||||
class nsListControlFrame : public nsScrollFrame,
|
class nsListControlFrame : public nsScrollFrame,
|
||||||
public nsIFormControlFrame,
|
public nsIFormControlFrame,
|
||||||
public nsIListControlFrame
|
public nsIListControlFrame
|
||||||
#ifdef PLUGGABLE_EVENTS
|
|
||||||
public nsIPluggableEventListener
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
friend nsresult NS_NewListControlFrame(nsIFrame*& aNewFrame);
|
friend nsresult NS_NewListControlFrame(nsIFrame*& aNewFrame);
|
||||||
@@ -101,20 +70,6 @@ public:
|
|||||||
const nsHTMLReflowState& aReflowState,
|
const nsHTMLReflowState& aReflowState,
|
||||||
nsReflowStatus& aStatus);
|
nsReflowStatus& aStatus);
|
||||||
|
|
||||||
//
|
|
||||||
/* virtual nsresult AppendNewFrames(nsIPresContext& aPresContext, nsIFrame*);
|
|
||||||
|
|
||||||
virtual nsresult InsertNewFrame(nsIPresContext& aPresContext,
|
|
||||||
nsBaseIBFrame* aParentFrame,
|
|
||||||
nsIFrame* aNewFrame,
|
|
||||||
nsIFrame* aPrevSibling);
|
|
||||||
|
|
||||||
virtual nsresult DoRemoveFrame(nsBlockReflowState& aState,
|
|
||||||
nsBaseIBFrame* aParentFrame,
|
|
||||||
nsIFrame* aDeletedFrame,
|
|
||||||
nsIFrame* aPrevSibling);
|
|
||||||
*/
|
|
||||||
|
|
||||||
NS_IMETHOD Init(nsIPresContext& aPresContext,
|
NS_IMETHOD Init(nsIPresContext& aPresContext,
|
||||||
nsIContent* aContent,
|
nsIContent* aContent,
|
||||||
nsIFrame* aParent,
|
nsIFrame* aParent,
|
||||||
@@ -127,24 +82,10 @@ public:
|
|||||||
NS_IMETHOD SetProperty(nsIAtom* aName, const nsString& aValue);
|
NS_IMETHOD SetProperty(nsIAtom* aName, const nsString& aValue);
|
||||||
NS_IMETHOD GetProperty(nsIAtom* aName, nsString& aValue);
|
NS_IMETHOD GetProperty(nsIAtom* aName, nsString& aValue);
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
virtual void GetStyleSize(nsIPresContext& aContext,
|
|
||||||
const nsHTMLReflowState& aReflowState,
|
|
||||||
nsSize& aSize);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
virtual void GetDesiredSize(nsIPresContext* aPresContext,
|
virtual void GetDesiredSize(nsIPresContext* aPresContext,
|
||||||
const nsHTMLReflowState& aReflowState,
|
const nsHTMLReflowState& aReflowState,
|
||||||
nsHTMLReflowMetrics& aDesiredLayoutSize,
|
nsHTMLReflowMetrics& aDesiredLayoutSize,
|
||||||
nsSize& aDesiredWidgetSize);
|
nsSize& aDesiredWidgetSize);
|
||||||
#if 0
|
|
||||||
nscoord CalculateSize (nsIPresContext* aPresContext, nsListControlFrame* aFrame,
|
|
||||||
const nsSize& aCSSSize, nsInputDimSpec& aDimensionSpec,
|
|
||||||
nsSize& aBounds, PRBool& aWidthExplicit,
|
|
||||||
PRBool& aHeightExplicit, nscoord& aRowSize,
|
|
||||||
nsIRenderingContext *aRendContext);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*virtual nsresult Focus(nsIDOMEvent* aEvent);
|
/*virtual nsresult Focus(nsIDOMEvent* aEvent);
|
||||||
virtual nsresult Blur(nsIDOMEvent* aEvent);
|
virtual nsresult Blur(nsIDOMEvent* aEvent);
|
||||||
@@ -156,21 +97,9 @@ public:
|
|||||||
|
|
||||||
NS_METHOD GetMultiple(PRBool* aResult, nsIDOMHTMLSelectElement* aSelect = nsnull);
|
NS_METHOD GetMultiple(PRBool* aResult, nsIDOMHTMLSelectElement* aSelect = nsnull);
|
||||||
|
|
||||||
///XXX: End o the temporary methods
|
|
||||||
#if 0
|
|
||||||
nscoord GetTextSize(nsIPresContext& aContext, nsListControlFrame* aFrame,
|
|
||||||
const nsString& aString, nsSize& aSize,
|
|
||||||
nsIRenderingContext *aRendContext);
|
|
||||||
|
|
||||||
nscoord GetTextSize(nsIPresContext& aContext, nsListControlFrame* aFrame,
|
|
||||||
PRInt32 aNumChars, nsSize& aSize,
|
|
||||||
nsIRenderingContext *aRendContext);
|
|
||||||
#endif
|
|
||||||
virtual nsresult GetSizeFromContent(PRInt32* aSize) const;
|
virtual nsresult GetSizeFromContent(PRInt32* aSize) const;
|
||||||
NS_IMETHOD GetMaxLength(PRInt32* aSize);
|
NS_IMETHOD GetMaxLength(PRInt32* aSize);
|
||||||
|
|
||||||
static void GetScrollBarDimensions(nsIPresContext& aPresContext,
|
|
||||||
nscoord &aWidth, nscoord &aHeight);
|
|
||||||
virtual nscoord GetVerticalBorderWidth(float aPixToTwip) const;
|
virtual nscoord GetVerticalBorderWidth(float aPixToTwip) const;
|
||||||
virtual nscoord GetHorizontalBorderWidth(float aPixToTwip) const;
|
virtual nscoord GetHorizontalBorderWidth(float aPixToTwip) const;
|
||||||
virtual nscoord GetVerticalInsidePadding(float aPixToTwip,
|
virtual nscoord GetVerticalInsidePadding(float aPixToTwip,
|
||||||
@@ -219,26 +148,21 @@ public:
|
|||||||
|
|
||||||
virtual void SetFormFrame(nsFormFrame* aFrame);
|
virtual void SetFormFrame(nsFormFrame* aFrame);
|
||||||
|
|
||||||
// nsIPluggableEventListener
|
|
||||||
NS_IMETHOD PluggableEventHandler(nsIPresContext& aPresContext,
|
|
||||||
nsGUIEvent* aEvent,
|
|
||||||
nsEventStatus& aEventStatus);
|
|
||||||
|
|
||||||
NS_IMETHOD PluggableGetFrameForPoint(const nsPoint& aPoint,
|
|
||||||
nsIFrame** aFrame);
|
|
||||||
|
|
||||||
// nsIListControlFrame
|
// nsIListControlFrame
|
||||||
NS_IMETHOD SetComboboxFrame(nsIFrame* aComboboxFrame);
|
NS_IMETHOD SetComboboxFrame(nsIFrame* aComboboxFrame);
|
||||||
NS_IMETHOD GetSelectedItem(nsString & aStr);
|
NS_IMETHOD GetSelectedItem(nsString & aStr);
|
||||||
NS_IMETHOD AboutToDropDown();
|
NS_IMETHOD AboutToDropDown();
|
||||||
|
|
||||||
|
|
||||||
// Static Methods
|
// Static Methods
|
||||||
static nsIDOMHTMLSelectElement* GetSelect(nsIContent * aContent);
|
static nsIDOMHTMLSelectElement* GetSelect(nsIContent * aContent);
|
||||||
static nsIDOMHTMLCollection* GetOptions(nsIContent * aContent, nsIDOMHTMLSelectElement* aSelect = nsnull);
|
static nsIDOMHTMLCollection* GetOptions(nsIContent * aContent, nsIDOMHTMLSelectElement* aSelect = nsnull);
|
||||||
static nsIDOMHTMLOptionElement* GetOption(nsIDOMHTMLCollection& aOptions, PRUint32 aIndex);
|
static nsIDOMHTMLOptionElement* GetOption(nsIDOMHTMLCollection& aOptions, PRUint32 aIndex);
|
||||||
static PRBool GetOptionValue(nsIDOMHTMLCollection& aCollecton, PRUint32 aIndex, nsString& aValue);
|
static PRBool GetOptionValue(nsIDOMHTMLCollection& aCollecton, PRUint32 aIndex, nsString& aValue);
|
||||||
|
|
||||||
|
nsIContent* GetOptionContent(PRUint32 aIndex);
|
||||||
|
PRBool IsFrameSelected(PRUint32 aIndex);
|
||||||
|
void SetFrameSelected(PRUint32 aIndex, PRBool aSelected);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
nsListControlFrame();
|
nsListControlFrame();
|
||||||
virtual ~nsListControlFrame();
|
virtual ~nsListControlFrame();
|
||||||
@@ -249,11 +173,13 @@ protected:
|
|||||||
nsIAtom* aList,
|
nsIAtom* aList,
|
||||||
nsIFrame** aFrame);
|
nsIFrame** aFrame);
|
||||||
|
|
||||||
|
// Utility methods
|
||||||
|
|
||||||
|
void DisplaySelected(nsIContent* aContent);
|
||||||
|
void DisplayDeselected(nsIContent* aContent);
|
||||||
|
void UpdateItem(nsIContent* aContent, PRBool aSelected);
|
||||||
|
|
||||||
// nsHTMLContainerFrame overrides
|
// nsHTMLContainerFrame overrides
|
||||||
virtual void PaintChildren(nsIPresContext& aPresContext,
|
|
||||||
nsIRenderingContext& aRenderingContext,
|
|
||||||
const nsRect& aDirtyRect,
|
|
||||||
nsFramePaintLayer aWhichLayer);
|
|
||||||
|
|
||||||
void ClearSelection();
|
void ClearSelection();
|
||||||
void InitializeFromContent(PRBool aDoDisplay = PR_FALSE);
|
void InitializeFromContent(PRBool aDoDisplay = PR_FALSE);
|
||||||
@@ -272,31 +198,22 @@ protected:
|
|||||||
|
|
||||||
// Data Members
|
// Data Members
|
||||||
nsFormFrame* mFormFrame;
|
nsFormFrame* mFormFrame;
|
||||||
|
|
||||||
PRInt32 mNumRows;
|
PRInt32 mNumRows;
|
||||||
|
//XXX: TODO: This should not be hardcoded to 64
|
||||||
PRBool mIsFrameSelected[64];
|
//ZZZ PRBool mIsFrameSelected[64];
|
||||||
PRInt32 mNumSelections;
|
PRInt32 mNumSelections;
|
||||||
PRInt32 mMaxNumSelections;
|
PRInt32 mMaxNumSelections;
|
||||||
PRBool mMultipleSelections;
|
PRBool mMultipleSelections;
|
||||||
|
|
||||||
|
|
||||||
//nsIContent * mSelectedContent;
|
|
||||||
PRInt32 mSelectedIndex;
|
PRInt32 mSelectedIndex;
|
||||||
PRInt32 mStartExtendedIndex;
|
PRInt32 mStartExtendedIndex;
|
||||||
PRInt32 mEndExtendedIndex;
|
PRInt32 mEndExtendedIndex;
|
||||||
|
|
||||||
nsIFrame * mHitFrame;
|
nsIFrame * mHitFrame;
|
||||||
nsIContent * mHitContent;
|
nsIContent * mHitContent;
|
||||||
|
|
||||||
nsIFrame * mCurrentHitFrame;
|
nsIFrame * mCurrentHitFrame;
|
||||||
nsIContent * mCurrentHitContent;
|
nsIContent * mCurrentHitContent;
|
||||||
|
|
||||||
nsIFrame * mSelectedFrame;
|
nsIFrame * mSelectedFrame;
|
||||||
nsIContent * mSelectedContent;
|
nsIContent * mSelectedContent;
|
||||||
|
|
||||||
PRBool mIsInitializedFromContent;
|
PRBool mIsInitializedFromContent;
|
||||||
|
|
||||||
nsIFrame * mContentFrame;
|
nsIFrame * mContentFrame;
|
||||||
PRBool mInDropDownMode;
|
PRBool mInDropDownMode;
|
||||||
nsIComboboxControlFrame * mComboboxFrame;
|
nsIComboboxControlFrame * mComboboxFrame;
|
||||||
|
|||||||
@@ -664,6 +664,7 @@ select {
|
|||||||
color:black;
|
color:black;
|
||||||
}
|
}
|
||||||
option {
|
option {
|
||||||
|
display:block;
|
||||||
}
|
}
|
||||||
|
|
||||||
option.selected {
|
option.selected {
|
||||||
@@ -673,8 +674,8 @@ option.selected {
|
|||||||
}
|
}
|
||||||
|
|
||||||
option[-moz-option-selected] {
|
option[-moz-option-selected] {
|
||||||
color:blue;
|
color:white;
|
||||||
background-color:green;
|
background-color: rgb(0,0,128);
|
||||||
}
|
}
|
||||||
|
|
||||||
option.selectedfocus {
|
option.selectedfocus {
|
||||||
|
|||||||
@@ -377,9 +377,11 @@ NS_IMETHODIMP nsComboboxControlFrame::Reflow(nsIPresContext& aPresConte
|
|||||||
aPresContext.GetScaledPixelsToTwips(&sp2t);
|
aPresContext.GetScaledPixelsToTwips(&sp2t);
|
||||||
nscoord onePixel = NSIntPixelsToTwips(1, sp2t);
|
nscoord onePixel = NSIntPixelsToTwips(1, sp2t);
|
||||||
|
|
||||||
|
#if 0
|
||||||
nscoord scrollbarWidth = 0;
|
nscoord scrollbarWidth = 0;
|
||||||
nscoord scrollbarHeight = 0;
|
nscoord scrollbarHeight = 0;
|
||||||
nsListControlFrame::GetScrollBarDimensions(aPresContext, scrollbarWidth, scrollbarHeight);
|
nsListControlFrame::GetScrollBarDimensions(aPresContext, scrollbarWidth, scrollbarHeight);
|
||||||
|
#endif
|
||||||
|
|
||||||
nscoord extra = desiredSize.height - (rowHeight * numRows);
|
nscoord extra = desiredSize.height - (rowHeight * numRows);
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -23,11 +23,9 @@
|
|||||||
#include "nsIDOMFocusListener.h"
|
#include "nsIDOMFocusListener.h"
|
||||||
#include "nsIPresContext.h"
|
#include "nsIPresContext.h"
|
||||||
#include "nsIFormControlFrame.h"
|
#include "nsIFormControlFrame.h"
|
||||||
#ifdef PLUGGABLE_EVENTS
|
|
||||||
#include "nsIPluggableEventListener.h"
|
|
||||||
#endif
|
|
||||||
#include "nsIListControlFrame.h"
|
#include "nsIListControlFrame.h"
|
||||||
|
|
||||||
|
|
||||||
class nsIDOMHTMLSelectElement;
|
class nsIDOMHTMLSelectElement;
|
||||||
class nsIDOMHTMLCollection;
|
class nsIDOMHTMLCollection;
|
||||||
class nsIDOMHTMLOptionElement;
|
class nsIDOMHTMLOptionElement;
|
||||||
@@ -35,33 +33,7 @@ class nsFormFrame;
|
|||||||
class nsScrollFrame;
|
class nsScrollFrame;
|
||||||
class nsIComboboxControlFrame;
|
class nsIComboboxControlFrame;
|
||||||
|
|
||||||
#if 0
|
|
||||||
struct nsInputDimSpec
|
|
||||||
{
|
|
||||||
nsIAtom* mColSizeAttr; // attribute used to determine width
|
|
||||||
PRBool mColSizeAttrInPixels; // is attribute value in pixels (otherwise num chars)
|
|
||||||
nsIAtom* mColValueAttr; // attribute used to get value to determine size
|
|
||||||
// if not determined above
|
|
||||||
nsString* mColDefaultValue; // default value if not determined above
|
|
||||||
nscoord mColDefaultSize; // default width if not determined above
|
|
||||||
PRBool mColDefaultSizeInPixels; // is default width in pixels (otherswise num chars)
|
|
||||||
nsIAtom* mRowSizeAttr; // attribute used to determine height
|
|
||||||
nscoord mRowDefaultSize; // default height if not determined above
|
|
||||||
|
|
||||||
nsInputDimSpec(nsIAtom* aColSizeAttr, PRBool aColSizeAttrInPixels,
|
|
||||||
nsIAtom* aColValueAttr, nsString* aColDefaultValue,
|
|
||||||
nscoord aColDefaultSize, PRBool aColDefaultSizeInPixels,
|
|
||||||
nsIAtom* aRowSizeAttr, nscoord aRowDefaultSize)
|
|
||||||
: mColSizeAttr(aColSizeAttr), mColSizeAttrInPixels(aColSizeAttrInPixels),
|
|
||||||
mColValueAttr(aColValueAttr),
|
|
||||||
mColDefaultValue(aColDefaultValue), mColDefaultSize(aColDefaultSize),
|
|
||||||
mColDefaultSizeInPixels(aColDefaultSizeInPixels),
|
|
||||||
mRowSizeAttr(aRowSizeAttr), mRowDefaultSize(aRowDefaultSize)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
/**
|
/**
|
||||||
* The block frame has two additional named child lists:
|
* The block frame has two additional named child lists:
|
||||||
* - "Floater-list" which contains the floated frames
|
* - "Floater-list" which contains the floated frames
|
||||||
@@ -73,9 +45,6 @@ struct nsInputDimSpec
|
|||||||
class nsListControlFrame : public nsScrollFrame,
|
class nsListControlFrame : public nsScrollFrame,
|
||||||
public nsIFormControlFrame,
|
public nsIFormControlFrame,
|
||||||
public nsIListControlFrame
|
public nsIListControlFrame
|
||||||
#ifdef PLUGGABLE_EVENTS
|
|
||||||
public nsIPluggableEventListener
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
friend nsresult NS_NewListControlFrame(nsIFrame*& aNewFrame);
|
friend nsresult NS_NewListControlFrame(nsIFrame*& aNewFrame);
|
||||||
@@ -101,20 +70,6 @@ public:
|
|||||||
const nsHTMLReflowState& aReflowState,
|
const nsHTMLReflowState& aReflowState,
|
||||||
nsReflowStatus& aStatus);
|
nsReflowStatus& aStatus);
|
||||||
|
|
||||||
//
|
|
||||||
/* virtual nsresult AppendNewFrames(nsIPresContext& aPresContext, nsIFrame*);
|
|
||||||
|
|
||||||
virtual nsresult InsertNewFrame(nsIPresContext& aPresContext,
|
|
||||||
nsBaseIBFrame* aParentFrame,
|
|
||||||
nsIFrame* aNewFrame,
|
|
||||||
nsIFrame* aPrevSibling);
|
|
||||||
|
|
||||||
virtual nsresult DoRemoveFrame(nsBlockReflowState& aState,
|
|
||||||
nsBaseIBFrame* aParentFrame,
|
|
||||||
nsIFrame* aDeletedFrame,
|
|
||||||
nsIFrame* aPrevSibling);
|
|
||||||
*/
|
|
||||||
|
|
||||||
NS_IMETHOD Init(nsIPresContext& aPresContext,
|
NS_IMETHOD Init(nsIPresContext& aPresContext,
|
||||||
nsIContent* aContent,
|
nsIContent* aContent,
|
||||||
nsIFrame* aParent,
|
nsIFrame* aParent,
|
||||||
@@ -127,24 +82,10 @@ public:
|
|||||||
NS_IMETHOD SetProperty(nsIAtom* aName, const nsString& aValue);
|
NS_IMETHOD SetProperty(nsIAtom* aName, const nsString& aValue);
|
||||||
NS_IMETHOD GetProperty(nsIAtom* aName, nsString& aValue);
|
NS_IMETHOD GetProperty(nsIAtom* aName, nsString& aValue);
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
virtual void GetStyleSize(nsIPresContext& aContext,
|
|
||||||
const nsHTMLReflowState& aReflowState,
|
|
||||||
nsSize& aSize);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
virtual void GetDesiredSize(nsIPresContext* aPresContext,
|
virtual void GetDesiredSize(nsIPresContext* aPresContext,
|
||||||
const nsHTMLReflowState& aReflowState,
|
const nsHTMLReflowState& aReflowState,
|
||||||
nsHTMLReflowMetrics& aDesiredLayoutSize,
|
nsHTMLReflowMetrics& aDesiredLayoutSize,
|
||||||
nsSize& aDesiredWidgetSize);
|
nsSize& aDesiredWidgetSize);
|
||||||
#if 0
|
|
||||||
nscoord CalculateSize (nsIPresContext* aPresContext, nsListControlFrame* aFrame,
|
|
||||||
const nsSize& aCSSSize, nsInputDimSpec& aDimensionSpec,
|
|
||||||
nsSize& aBounds, PRBool& aWidthExplicit,
|
|
||||||
PRBool& aHeightExplicit, nscoord& aRowSize,
|
|
||||||
nsIRenderingContext *aRendContext);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*virtual nsresult Focus(nsIDOMEvent* aEvent);
|
/*virtual nsresult Focus(nsIDOMEvent* aEvent);
|
||||||
virtual nsresult Blur(nsIDOMEvent* aEvent);
|
virtual nsresult Blur(nsIDOMEvent* aEvent);
|
||||||
@@ -156,21 +97,9 @@ public:
|
|||||||
|
|
||||||
NS_METHOD GetMultiple(PRBool* aResult, nsIDOMHTMLSelectElement* aSelect = nsnull);
|
NS_METHOD GetMultiple(PRBool* aResult, nsIDOMHTMLSelectElement* aSelect = nsnull);
|
||||||
|
|
||||||
///XXX: End o the temporary methods
|
|
||||||
#if 0
|
|
||||||
nscoord GetTextSize(nsIPresContext& aContext, nsListControlFrame* aFrame,
|
|
||||||
const nsString& aString, nsSize& aSize,
|
|
||||||
nsIRenderingContext *aRendContext);
|
|
||||||
|
|
||||||
nscoord GetTextSize(nsIPresContext& aContext, nsListControlFrame* aFrame,
|
|
||||||
PRInt32 aNumChars, nsSize& aSize,
|
|
||||||
nsIRenderingContext *aRendContext);
|
|
||||||
#endif
|
|
||||||
virtual nsresult GetSizeFromContent(PRInt32* aSize) const;
|
virtual nsresult GetSizeFromContent(PRInt32* aSize) const;
|
||||||
NS_IMETHOD GetMaxLength(PRInt32* aSize);
|
NS_IMETHOD GetMaxLength(PRInt32* aSize);
|
||||||
|
|
||||||
static void GetScrollBarDimensions(nsIPresContext& aPresContext,
|
|
||||||
nscoord &aWidth, nscoord &aHeight);
|
|
||||||
virtual nscoord GetVerticalBorderWidth(float aPixToTwip) const;
|
virtual nscoord GetVerticalBorderWidth(float aPixToTwip) const;
|
||||||
virtual nscoord GetHorizontalBorderWidth(float aPixToTwip) const;
|
virtual nscoord GetHorizontalBorderWidth(float aPixToTwip) const;
|
||||||
virtual nscoord GetVerticalInsidePadding(float aPixToTwip,
|
virtual nscoord GetVerticalInsidePadding(float aPixToTwip,
|
||||||
@@ -219,26 +148,21 @@ public:
|
|||||||
|
|
||||||
virtual void SetFormFrame(nsFormFrame* aFrame);
|
virtual void SetFormFrame(nsFormFrame* aFrame);
|
||||||
|
|
||||||
// nsIPluggableEventListener
|
|
||||||
NS_IMETHOD PluggableEventHandler(nsIPresContext& aPresContext,
|
|
||||||
nsGUIEvent* aEvent,
|
|
||||||
nsEventStatus& aEventStatus);
|
|
||||||
|
|
||||||
NS_IMETHOD PluggableGetFrameForPoint(const nsPoint& aPoint,
|
|
||||||
nsIFrame** aFrame);
|
|
||||||
|
|
||||||
// nsIListControlFrame
|
// nsIListControlFrame
|
||||||
NS_IMETHOD SetComboboxFrame(nsIFrame* aComboboxFrame);
|
NS_IMETHOD SetComboboxFrame(nsIFrame* aComboboxFrame);
|
||||||
NS_IMETHOD GetSelectedItem(nsString & aStr);
|
NS_IMETHOD GetSelectedItem(nsString & aStr);
|
||||||
NS_IMETHOD AboutToDropDown();
|
NS_IMETHOD AboutToDropDown();
|
||||||
|
|
||||||
|
|
||||||
// Static Methods
|
// Static Methods
|
||||||
static nsIDOMHTMLSelectElement* GetSelect(nsIContent * aContent);
|
static nsIDOMHTMLSelectElement* GetSelect(nsIContent * aContent);
|
||||||
static nsIDOMHTMLCollection* GetOptions(nsIContent * aContent, nsIDOMHTMLSelectElement* aSelect = nsnull);
|
static nsIDOMHTMLCollection* GetOptions(nsIContent * aContent, nsIDOMHTMLSelectElement* aSelect = nsnull);
|
||||||
static nsIDOMHTMLOptionElement* GetOption(nsIDOMHTMLCollection& aOptions, PRUint32 aIndex);
|
static nsIDOMHTMLOptionElement* GetOption(nsIDOMHTMLCollection& aOptions, PRUint32 aIndex);
|
||||||
static PRBool GetOptionValue(nsIDOMHTMLCollection& aCollecton, PRUint32 aIndex, nsString& aValue);
|
static PRBool GetOptionValue(nsIDOMHTMLCollection& aCollecton, PRUint32 aIndex, nsString& aValue);
|
||||||
|
|
||||||
|
nsIContent* GetOptionContent(PRUint32 aIndex);
|
||||||
|
PRBool IsFrameSelected(PRUint32 aIndex);
|
||||||
|
void SetFrameSelected(PRUint32 aIndex, PRBool aSelected);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
nsListControlFrame();
|
nsListControlFrame();
|
||||||
virtual ~nsListControlFrame();
|
virtual ~nsListControlFrame();
|
||||||
@@ -249,11 +173,13 @@ protected:
|
|||||||
nsIAtom* aList,
|
nsIAtom* aList,
|
||||||
nsIFrame** aFrame);
|
nsIFrame** aFrame);
|
||||||
|
|
||||||
|
// Utility methods
|
||||||
|
|
||||||
|
void DisplaySelected(nsIContent* aContent);
|
||||||
|
void DisplayDeselected(nsIContent* aContent);
|
||||||
|
void UpdateItem(nsIContent* aContent, PRBool aSelected);
|
||||||
|
|
||||||
// nsHTMLContainerFrame overrides
|
// nsHTMLContainerFrame overrides
|
||||||
virtual void PaintChildren(nsIPresContext& aPresContext,
|
|
||||||
nsIRenderingContext& aRenderingContext,
|
|
||||||
const nsRect& aDirtyRect,
|
|
||||||
nsFramePaintLayer aWhichLayer);
|
|
||||||
|
|
||||||
void ClearSelection();
|
void ClearSelection();
|
||||||
void InitializeFromContent(PRBool aDoDisplay = PR_FALSE);
|
void InitializeFromContent(PRBool aDoDisplay = PR_FALSE);
|
||||||
@@ -272,31 +198,22 @@ protected:
|
|||||||
|
|
||||||
// Data Members
|
// Data Members
|
||||||
nsFormFrame* mFormFrame;
|
nsFormFrame* mFormFrame;
|
||||||
|
|
||||||
PRInt32 mNumRows;
|
PRInt32 mNumRows;
|
||||||
|
//XXX: TODO: This should not be hardcoded to 64
|
||||||
PRBool mIsFrameSelected[64];
|
//ZZZ PRBool mIsFrameSelected[64];
|
||||||
PRInt32 mNumSelections;
|
PRInt32 mNumSelections;
|
||||||
PRInt32 mMaxNumSelections;
|
PRInt32 mMaxNumSelections;
|
||||||
PRBool mMultipleSelections;
|
PRBool mMultipleSelections;
|
||||||
|
|
||||||
|
|
||||||
//nsIContent * mSelectedContent;
|
|
||||||
PRInt32 mSelectedIndex;
|
PRInt32 mSelectedIndex;
|
||||||
PRInt32 mStartExtendedIndex;
|
PRInt32 mStartExtendedIndex;
|
||||||
PRInt32 mEndExtendedIndex;
|
PRInt32 mEndExtendedIndex;
|
||||||
|
|
||||||
nsIFrame * mHitFrame;
|
nsIFrame * mHitFrame;
|
||||||
nsIContent * mHitContent;
|
nsIContent * mHitContent;
|
||||||
|
|
||||||
nsIFrame * mCurrentHitFrame;
|
nsIFrame * mCurrentHitFrame;
|
||||||
nsIContent * mCurrentHitContent;
|
nsIContent * mCurrentHitContent;
|
||||||
|
|
||||||
nsIFrame * mSelectedFrame;
|
nsIFrame * mSelectedFrame;
|
||||||
nsIContent * mSelectedContent;
|
nsIContent * mSelectedContent;
|
||||||
|
|
||||||
PRBool mIsInitializedFromContent;
|
PRBool mIsInitializedFromContent;
|
||||||
|
|
||||||
nsIFrame * mContentFrame;
|
nsIFrame * mContentFrame;
|
||||||
PRBool mInDropDownMode;
|
PRBool mInDropDownMode;
|
||||||
nsIComboboxControlFrame * mComboboxFrame;
|
nsIComboboxControlFrame * mComboboxFrame;
|
||||||
|
|||||||
@@ -1721,18 +1721,21 @@ nsCSSFrameConstructor::ConstructSelectFrame(nsIPresContext* aPresContext,
|
|||||||
PRBool aIsFixedPositioned,
|
PRBool aIsFixedPositioned,
|
||||||
nsAbsoluteItems& aFixedItems)
|
nsAbsoluteItems& aFixedItems)
|
||||||
{
|
{
|
||||||
|
#define NS_FRAME_BASED_COMBO_WORKS 0
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
nsWidgetRendering mode;
|
nsWidgetRendering mode;
|
||||||
aPresContext->GetWidgetRenderingMode(&mode);
|
aPresContext->GetWidgetRenderingMode(&mode);
|
||||||
//XXX: When frame-based rendering works uncomment this and remove the line below
|
|
||||||
// if (eWidgetRendering_Gfx == mode) {
|
if (eWidgetRendering_Gfx == mode) {
|
||||||
if (0) {
|
|
||||||
nsIDOMHTMLSelectElement* select = nsnull;
|
nsIDOMHTMLSelectElement* select = nsnull;
|
||||||
PRInt32 size = 1;
|
PRInt32 size = 1;
|
||||||
nsresult result = aContent->QueryInterface(kIDOMHTMLSelectElementIID, (void**)&select);
|
nsresult result = aContent->QueryInterface(kIDOMHTMLSelectElementIID, (void**)&select);
|
||||||
if (NS_OK == result) {
|
if (NS_OK == result) {
|
||||||
result = select->GetSize(&size);
|
result = select->GetSize(&size);
|
||||||
if (1 == size) {
|
if (1 == size) {
|
||||||
|
if (! NS_FRAME_BASED_COMBO_WORKS) {
|
||||||
|
rv = NS_NewSelectControlFrame(aNewFrame);
|
||||||
|
} else {
|
||||||
nsIFrame * comboboxFrame;
|
nsIFrame * comboboxFrame;
|
||||||
rv = NS_NewComboboxControlFrame(comboboxFrame);
|
rv = NS_NewComboboxControlFrame(comboboxFrame);
|
||||||
nsIComboboxControlFrame* comboBox;
|
nsIComboboxControlFrame* comboBox;
|
||||||
@@ -1798,6 +1801,7 @@ nsCSSFrameConstructor::ConstructSelectFrame(nsIPresContext* aPresContext,
|
|||||||
aStyleContext, PR_TRUE);
|
aStyleContext, PR_TRUE);
|
||||||
aNewFrame = comboboxFrame;
|
aNewFrame = comboboxFrame;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
nsIFrame * listFrame;
|
nsIFrame * listFrame;
|
||||||
|
|||||||
@@ -664,6 +664,7 @@ select {
|
|||||||
color:black;
|
color:black;
|
||||||
}
|
}
|
||||||
option {
|
option {
|
||||||
|
display:block;
|
||||||
}
|
}
|
||||||
|
|
||||||
option.selected {
|
option.selected {
|
||||||
@@ -673,8 +674,8 @@ option.selected {
|
|||||||
}
|
}
|
||||||
|
|
||||||
option[-moz-option-selected] {
|
option[-moz-option-selected] {
|
||||||
color:blue;
|
color:white;
|
||||||
background-color:green;
|
background-color: rgb(0,0,128);
|
||||||
}
|
}
|
||||||
|
|
||||||
option.selectedfocus {
|
option.selectedfocus {
|
||||||
|
|||||||
@@ -151,6 +151,7 @@ install:: $(PROGRAM)
|
|||||||
$(MAKE_INSTALL) samples\test13.html $(DIST)\bin\res\samples
|
$(MAKE_INSTALL) samples\test13.html $(DIST)\bin\res\samples
|
||||||
$(MAKE_INSTALL) samples\test_pr.html $(DIST)\bin\res\samples
|
$(MAKE_INSTALL) samples\test_pr.html $(DIST)\bin\res\samples
|
||||||
$(MAKE_INSTALL) samples\test_gfx.html $(DIST)\bin\res\samples
|
$(MAKE_INSTALL) samples\test_gfx.html $(DIST)\bin\res\samples
|
||||||
|
$(MAKE_INSTALL) samples\test_lbox.html $(DIST)\bin\res\samples
|
||||||
$(MAKE_INSTALL) samples\toolbarTest1.xul $(DIST)\bin\res\samples
|
$(MAKE_INSTALL) samples\toolbarTest1.xul $(DIST)\bin\res\samples
|
||||||
$(MAKE_INSTALL) samples\treeTest1.xul $(DIST)\bin\res\samples
|
$(MAKE_INSTALL) samples\treeTest1.xul $(DIST)\bin\res\samples
|
||||||
$(MAKE_INSTALL) samples\xulTest.css $(DIST)\bin\res\samples
|
$(MAKE_INSTALL) samples\xulTest.css $(DIST)\bin\res\samples
|
||||||
@@ -202,6 +203,7 @@ clobber::
|
|||||||
rm -f $(DIST)\bin\res\samples\test12.html
|
rm -f $(DIST)\bin\res\samples\test12.html
|
||||||
rm -f $(DIST)\bin\res\samples\test_pr.html
|
rm -f $(DIST)\bin\res\samples\test_pr.html
|
||||||
rm -f $(DIST)\bin\res\samples\test_gfx.html
|
rm -f $(DIST)\bin\res\samples\test_gfx.html
|
||||||
|
rm -f $(DIST)\bin\res\samples\test_lbox.html
|
||||||
rm -f $(DIST)\bin\res\throbber\anim.gif
|
rm -f $(DIST)\bin\res\throbber\anim.gif
|
||||||
rm -f $(DIST)\bin\res\throbber\anims00.gif
|
rm -f $(DIST)\bin\res\throbber\anims00.gif
|
||||||
rm -f $(DIST)\bin\res\throbber\anims01.gif
|
rm -f $(DIST)\bin\res\throbber\anims01.gif
|
||||||
|
|||||||
63
webshell/tests/viewer/samples/test_lbox.html
Normal file
63
webshell/tests/viewer/samples/test_lbox.html
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<form>
|
||||||
|
<P> Side by Side listboxes <P> (left - single select, right - multiselect)
|
||||||
|
<BR>
|
||||||
|
<select name=select1 size=2>
|
||||||
|
<option>option 1</option>
|
||||||
|
<option>option 2</option>
|
||||||
|
<option selected>option 3</option>
|
||||||
|
<option>option 4</option>
|
||||||
|
<option>option 5</option>
|
||||||
|
<option>option 6</option>
|
||||||
|
<option>option 7</option>
|
||||||
|
<option>option 8</option>
|
||||||
|
</select>
|
||||||
|
<select name=select2 size=4 multiple>
|
||||||
|
<option>option 1</option>
|
||||||
|
<option>option 2</option>
|
||||||
|
<option>option 3</option>
|
||||||
|
<option>option 4</option>
|
||||||
|
<option>option 5</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<P> This listbox should be on a new line with now scrollbars
|
||||||
|
<BR>
|
||||||
|
<select name=select3 size=4 multiple>
|
||||||
|
<option>option 1</option>
|
||||||
|
<option>option 2</option>
|
||||||
|
</select>
|
||||||
|
<BR>
|
||||||
|
<P> This listbox has a specified width of 500px
|
||||||
|
<BR>
|
||||||
|
<select name=select4 style="width:500px;" size=2 multiple>
|
||||||
|
<option>option 1</option>
|
||||||
|
<option>option 2</option>
|
||||||
|
<option>option 3</option>
|
||||||
|
</select>
|
||||||
|
<BR>
|
||||||
|
|
||||||
|
<P> This listbox has a specified height of 100px
|
||||||
|
<BR>
|
||||||
|
<select name=select4 style="height:100px;" size=2 multiple>
|
||||||
|
<option>option 1</option>
|
||||||
|
<option>option 2</option>
|
||||||
|
<option>option 3</option>
|
||||||
|
</select>
|
||||||
|
<BR>
|
||||||
|
|
||||||
|
<P> This listbox should have 5pixel red inset borders
|
||||||
|
<P> the first option has orange text.
|
||||||
|
<P> the second option has yellow text.
|
||||||
|
<BR>
|
||||||
|
<select name=select5 style="border: 5px inset red;" size=3 multiple>
|
||||||
|
<option style="color:orange;">option 2</option>
|
||||||
|
<option style="color:yellow;">option 1</option>
|
||||||
|
<option>option 3</option>
|
||||||
|
<option>option 4</option>
|
||||||
|
</select>
|
||||||
|
<BR>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user