/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef nsListControlFrame_h___ #define nsListControlFrame_h___
class nsComboboxControlFrame; class nsPresContext;
namespace mozilla { class PresShell; class HTMLSelectEventListener;
namespace dom { class Event; class HTMLOptionElement; class HTMLSelectElement; class HTMLOptionsCollection;
} // namespace dom
} // namespace mozilla
/** * Frame-based listbox.
*/
class nsListControlFrame final : public mozilla::ScrollContainerFrame, public nsISelectControlFrame { public: using HTMLOptionElement = mozilla::dom::HTMLOptionElement;
// for accessibility purposes #ifdef ACCESSIBILITY
mozilla::a11y::AccType AccessibleType() final; #endif
int32_t GetSelectedIndex();
/** * Gets the text of the currently selected item. * If the there are zero items then an empty string is returned * If there is nothing selected, then the 0th item's text is returned.
*/ void GetOptionText(uint32_t aIndex, nsAString& aStr);
/** * Gets the content (an option) by index and then set it as * being selected or not selected.
*/
MOZ_CAN_RUN_SCRIPT_BOUNDARY
NS_IMETHOD OnOptionSelected(int32_t aIndex, bool aSelected) final;
MOZ_CAN_RUN_SCRIPT_BOUNDARY
NS_IMETHOD_(void)
OnSetSelectedIndex(int32_t aOldIndex, int32_t aNewIndex) final;
/** * Mouse event listeners. * @note These methods might destroy the frame, pres shell and other objects.
*/
MOZ_CAN_RUN_SCRIPT
nsresult HandleLeftButtonMouseDown(mozilla::dom::Event* aMouseEvent);
MOZ_CAN_RUN_SCRIPT
nsresult HandleLeftButtonMouseUp(mozilla::dom::Event* aMouseEvent);
MOZ_CAN_RUN_SCRIPT
nsresult DragMove(mozilla::dom::Event* aMouseEvent);
MOZ_CAN_RUN_SCRIPT
/** * Returns the options collection for mContent, if any.
*/
mozilla::dom::HTMLOptionsCollection* GetOptions() const; /** * Returns the HTMLOptionElement for a given index in mContent's collection.
*/
HTMLOptionElement* GetOption(uint32_t aIndex) const;
// Helper bool IsFocused() const;
/** * Function to paint the focus rect when our nsSelectsAreaFrame is painting. * @param aPt the offset of this frame, relative to the rendering reference * frame
*/ void PaintFocus(mozilla::gfx::DrawTarget* aDrawTarget, nsPoint aPt);
/** * If this frame IsFocused(), invalidates an area that includes anything * that PaintFocus will or could have painted --- basically the whole * GetOptionsContainer, plus some extra stuff if there are no options. This * must be called every time mEndSelectionIndex changes.
*/ void InvalidateFocus();
/** * Function to calculate the block size of a row, for use with the * "size" attribute. * Can't be const because GetNumberOfOptions() isn't const.
*/
nscoord CalcBSizeOfARow();
/** * Function to ask whether we're currently in what might be the * first pass of a two-pass reflow.
*/ bool MightNeedSecondPass() const { return mMightNeedSecondPass; }
/** * Return the number of displayed rows in the list.
*/
uint32_t GetNumDisplayRows() const { return mNumDisplayRows; }
#ifdef ACCESSIBILITY /** * Post a custom DOM event for the change, so that accessibility can * fire a native focus event for accessibility * (Some 3rd party products need to track our focus)
*/ void FireMenuItemActiveEvent(
nsIContent* aPreviousOption); // Inform assistive tech what got focused #endif
protected: /** * Updates the selected text in a combobox and then calls FireOnChange(). * @note This method might destroy the frame, pres shell and other objects. * Returns false if calling it destroyed |this|.
*/
MOZ_CAN_RUN_SCRIPT bool UpdateSelection();
/** * @return true if the <option> at aIndex is selectable by the user.
*/ bool IsOptionInteractivelySelectable(int32_t aIndex) const; /** * @return true if aOption in aSelect is selectable by the user.
*/ staticbool IsOptionInteractivelySelectable(
mozilla::dom::HTMLSelectElement* aSelect,
mozilla::dom::HTMLOptionElement* aOption);
public: /** * Resets the select back to it's original default values; * those values as determined by the original HTML
*/
MOZ_CAN_RUN_SCRIPT void ResetList(bool aAllowScrolling);
/** * Sets the mSelectedIndex and mOldSelectedIndex from figuring out what * item was selected using content * @param aPoint the event point, in listcontrolframe coordinates * @return NS_OK if it successfully found the selection
*/
nsresult GetIndexFromDOMEvent(mozilla::dom::Event* aMouseEvent,
int32_t& aCurIndex);
bool CheckIfAllFramesHere();
// guess at a row block size based on our own style.
nscoord CalcFallbackRowBSize(float aFontSizeInflation);
// CalcIntrinsicBSize computes our intrinsic block size (taking the // "size" attribute into account). This should only be called in // non-dropdown mode.
nscoord CalcIntrinsicBSize(nscoord aBSizeOfARow, int32_t aNumberOfOptions);
// Dropped down stuff void SetComboboxItem(int32_t aIndex);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.