2015-05-03 22:32:37 +03:00
|
|
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
2012-05-21 15:12:37 +04:00
|
|
|
/* 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/. */
|
2001-10-18 09:52:57 +04:00
|
|
|
|
|
|
|
#ifndef nsITextControlElement_h___
|
|
|
|
#define nsITextControlElement_h___
|
|
|
|
|
|
|
|
#include "nsISupports.h"
|
2010-11-16 23:45:49 +03:00
|
|
|
#include "nsCOMPtr.h"
|
2017-08-17 02:48:52 +03:00
|
|
|
#include "nsStringFwd.h"
|
2010-04-22 00:17:41 +04:00
|
|
|
class nsIContent;
|
|
|
|
class nsISelectionController;
|
|
|
|
class nsFrameSelection;
|
|
|
|
class nsTextControlFrame;
|
2001-10-18 09:52:57 +04:00
|
|
|
|
2013-12-03 18:40:12 +04:00
|
|
|
namespace mozilla {
|
2017-03-09 22:44:04 +03:00
|
|
|
|
|
|
|
class ErrorResult;
|
2017-06-22 09:21:31 +03:00
|
|
|
class TextEditor;
|
2017-03-09 22:44:04 +03:00
|
|
|
|
2013-12-03 18:40:12 +04:00
|
|
|
namespace dom {
|
|
|
|
class Element;
|
|
|
|
} // namespace dom
|
|
|
|
} // namespace mozilla
|
|
|
|
|
2001-10-18 09:52:57 +04:00
|
|
|
// IID for the nsITextControl interface
|
|
|
|
#define NS_ITEXTCONTROLELEMENT_IID \
|
2013-12-03 18:40:12 +04:00
|
|
|
{ 0x3df7db6d, 0xa548, 0x4e20, \
|
|
|
|
{ 0x97, 0xfd, 0x75, 0xa3, 0x31, 0xa2, 0xf3, 0xd4 } }
|
2001-10-18 09:52:57 +04:00
|
|
|
|
|
|
|
/**
|
2010-04-22 00:17:41 +04:00
|
|
|
* This interface is used for the text control frame to get the editor and
|
|
|
|
* selection controller objects, and some helper properties.
|
2001-10-18 09:52:57 +04:00
|
|
|
*/
|
|
|
|
class nsITextControlElement : public nsISupports {
|
|
|
|
public:
|
|
|
|
|
2005-11-11 17:36:26 +03:00
|
|
|
NS_DECLARE_STATIC_IID_ACCESSOR(NS_ITEXTCONTROLELEMENT_IID)
|
2001-10-18 09:52:57 +04:00
|
|
|
|
2001-11-19 13:35:52 +03:00
|
|
|
/**
|
2010-04-22 00:17:41 +04:00
|
|
|
* Tell the control that value has been deliberately changed (or not).
|
2001-11-19 13:35:52 +03:00
|
|
|
*/
|
2011-09-29 10:19:26 +04:00
|
|
|
NS_IMETHOD SetValueChanged(bool changed) = 0;
|
2001-11-19 13:35:52 +03:00
|
|
|
|
2001-11-05 09:50:21 +03:00
|
|
|
/**
|
2010-04-22 00:17:41 +04:00
|
|
|
* Find out whether this is a single line text control. (text or password)
|
|
|
|
* @return whether this is a single line text control
|
2001-11-05 09:50:21 +03:00
|
|
|
*/
|
2011-09-29 10:19:26 +04:00
|
|
|
NS_IMETHOD_(bool) IsSingleLineTextControl() const = 0;
|
2010-04-22 00:17:41 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Find out whether this control is a textarea.
|
|
|
|
* @return whether this is a textarea text control
|
|
|
|
*/
|
2011-09-29 10:19:26 +04:00
|
|
|
NS_IMETHOD_(bool) IsTextArea() const = 0;
|
2010-04-22 00:17:41 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Find out whether this is a password control (input type=password)
|
|
|
|
* @return whether this is a password ontrol
|
|
|
|
*/
|
2011-09-29 10:19:26 +04:00
|
|
|
NS_IMETHOD_(bool) IsPasswordTextControl() const = 0;
|
2010-04-22 00:17:41 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the cols attribute (if textarea) or a default
|
|
|
|
* @return the number of columns to use
|
|
|
|
*/
|
2012-08-22 19:56:38 +04:00
|
|
|
NS_IMETHOD_(int32_t) GetCols() = 0;
|
2010-04-22 00:17:41 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the column index to wrap at, or -1 if we shouldn't wrap
|
|
|
|
*/
|
2012-08-22 19:56:38 +04:00
|
|
|
NS_IMETHOD_(int32_t) GetWrapCols() = 0;
|
2010-04-22 00:17:41 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the rows attribute (if textarea) or a default
|
|
|
|
* @return the number of rows to use
|
|
|
|
*/
|
2012-08-22 19:56:38 +04:00
|
|
|
NS_IMETHOD_(int32_t) GetRows() = 0;
|
2010-04-22 00:17:41 +04:00
|
|
|
|
2013-03-25 23:35:55 +04:00
|
|
|
/**
|
|
|
|
* Get the default value of the text control
|
|
|
|
*/
|
|
|
|
NS_IMETHOD_(void) GetDefaultValueFromContent(nsAString& aValue) = 0;
|
|
|
|
|
2010-04-22 00:17:41 +04:00
|
|
|
/**
|
|
|
|
* Return true if the value of the control has been changed.
|
|
|
|
*/
|
2011-09-29 10:19:26 +04:00
|
|
|
NS_IMETHOD_(bool) ValueChanged() const = 0;
|
2010-04-22 00:17:41 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the current value of the text editor.
|
|
|
|
*
|
|
|
|
* @param aValue the buffer to retrieve the value in
|
|
|
|
* @param aIgnoreWrap whether to ignore the text wrapping behavior specified
|
|
|
|
* for the element.
|
|
|
|
*/
|
2011-09-29 10:19:26 +04:00
|
|
|
NS_IMETHOD_(void) GetTextEditorValue(nsAString& aValue, bool aIgnoreWrap) const = 0;
|
2010-04-22 00:17:41 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the editor object associated with the text editor.
|
|
|
|
* The return value is null if the control does not support an editor
|
|
|
|
* (for example, if it is a checkbox.)
|
|
|
|
*/
|
2017-06-22 09:21:31 +03:00
|
|
|
NS_IMETHOD_(mozilla::TextEditor*) GetTextEditor() = 0;
|
2010-04-22 00:17:41 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the selection controller object associated with the text editor.
|
|
|
|
* The return value is null if the control does not support an editor
|
|
|
|
* (for example, if it is a checkbox.)
|
|
|
|
*/
|
|
|
|
NS_IMETHOD_(nsISelectionController*) GetSelectionController() = 0;
|
|
|
|
|
|
|
|
NS_IMETHOD_(nsFrameSelection*) GetConstFrameSelection() = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Binds a frame to the text control. This is performed when a frame
|
|
|
|
* is created for the content node.
|
|
|
|
*/
|
|
|
|
NS_IMETHOD BindToFrame(nsTextControlFrame* aFrame) = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Unbinds a frame from the text control. This is performed when a frame
|
|
|
|
* belonging to a content node is destroyed.
|
|
|
|
*/
|
|
|
|
NS_IMETHOD_(void) UnbindFromFrame(nsTextControlFrame* aFrame) = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates an editor for the text control. This should happen when
|
|
|
|
* a frame has been created for the text control element, but the created
|
|
|
|
* editor may outlive the frame itself.
|
|
|
|
*/
|
|
|
|
NS_IMETHOD CreateEditor() = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the anonymous root node for the text control.
|
|
|
|
*/
|
2017-02-28 20:41:37 +03:00
|
|
|
NS_IMETHOD_(mozilla::dom::Element*) GetRootEditorNode() = 0;
|
2010-04-22 00:17:41 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the placeholder anonymous node for the text control.
|
|
|
|
*/
|
2013-12-03 18:40:12 +04:00
|
|
|
NS_IMETHOD_(mozilla::dom::Element*) GetPlaceholderNode() = 0;
|
2010-04-22 00:17:41 +04:00
|
|
|
|
2017-03-20 06:53:40 +03:00
|
|
|
/**
|
|
|
|
* Get the preview anonymous node for the text control.
|
|
|
|
*/
|
|
|
|
NS_IMETHOD_(mozilla::dom::Element*) GetPreviewNode() = 0;
|
|
|
|
|
2017-03-20 19:08:01 +03:00
|
|
|
/**
|
|
|
|
* Update preview value for the text control.
|
|
|
|
*/
|
|
|
|
NS_IMETHOD_(void) SetPreviewValue(const nsAString& aValue) = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the current preview value for text control.
|
|
|
|
*/
|
|
|
|
NS_IMETHOD_(void) GetPreviewValue(nsAString& aValue) = 0;
|
|
|
|
|
2017-03-22 11:55:56 +03:00
|
|
|
/**
|
|
|
|
* Enable preview for text control.
|
|
|
|
*/
|
|
|
|
NS_IMETHOD_(void) EnablePreview() = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Find out whether this control enables preview for form autofoll.
|
|
|
|
*/
|
|
|
|
NS_IMETHOD_(bool) IsPreviewEnabled() = 0;
|
|
|
|
|
2010-04-22 00:17:41 +04:00
|
|
|
/**
|
|
|
|
* Initialize the keyboard event listeners.
|
|
|
|
*/
|
|
|
|
NS_IMETHOD_(void) InitializeKeyboardEventListeners() = 0;
|
|
|
|
|
|
|
|
/**
|
2017-03-30 12:38:59 +03:00
|
|
|
* Update the visibility of both the placholder and preview text based on the element's state.
|
2010-04-22 00:17:41 +04:00
|
|
|
*/
|
2017-03-30 12:38:59 +03:00
|
|
|
NS_IMETHOD_(void) UpdateOverlayTextVisibility(bool aNotify) = 0;
|
2012-11-09 14:22:29 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the current expected placeholder visibility state.
|
|
|
|
*/
|
|
|
|
NS_IMETHOD_(bool) GetPlaceholderVisibility() = 0;
|
2010-04-22 00:17:41 +04:00
|
|
|
|
2017-03-30 12:38:59 +03:00
|
|
|
/**
|
|
|
|
* Returns the current expected preview visibility state.
|
|
|
|
*/
|
|
|
|
NS_IMETHOD_(bool) GetPreviewVisibility() = 0;
|
|
|
|
|
2010-08-21 21:52:57 +04:00
|
|
|
/**
|
|
|
|
* Callback called whenever the value is changed.
|
|
|
|
*/
|
2016-08-06 18:59:08 +03:00
|
|
|
NS_IMETHOD_(void) OnValueChanged(bool aNotify, bool aWasInteractiveUserChange) = 0;
|
2010-08-21 21:52:57 +04:00
|
|
|
|
2017-03-09 22:44:06 +03:00
|
|
|
/**
|
|
|
|
* Helpers for value manipulation from SetRangeText.
|
|
|
|
*/
|
|
|
|
virtual void GetValueFromSetRangeText(nsAString& aValue) = 0;
|
|
|
|
virtual nsresult SetValueFromSetRangeText(const nsAString& aValue) = 0;
|
|
|
|
|
2012-08-22 19:56:38 +04:00
|
|
|
static const int32_t DEFAULT_COLS = 20;
|
|
|
|
static const int32_t DEFAULT_ROWS = 1;
|
|
|
|
static const int32_t DEFAULT_ROWS_TEXTAREA = 2;
|
|
|
|
static const int32_t DEFAULT_UNDO_CAP = 1000;
|
2010-04-22 00:17:41 +04:00
|
|
|
|
2017-07-06 15:00:35 +03:00
|
|
|
// wrap can be one of these three values.
|
2010-04-22 00:17:41 +04:00
|
|
|
typedef enum {
|
|
|
|
eHTMLTextWrap_Off = 1, // "off"
|
|
|
|
eHTMLTextWrap_Hard = 2, // "hard"
|
|
|
|
eHTMLTextWrap_Soft = 3 // the default
|
|
|
|
} nsHTMLTextWrap;
|
|
|
|
|
2011-09-29 10:19:26 +04:00
|
|
|
static bool
|
2010-04-22 00:17:41 +04:00
|
|
|
GetWrapPropertyEnum(nsIContent* aContent, nsHTMLTextWrap& aWrapProp);
|
2011-07-30 01:31:57 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Does the editor have a selection cache?
|
|
|
|
*
|
|
|
|
* Note that this function has the side effect of making the editor for input
|
|
|
|
* elements be initialized eagerly.
|
|
|
|
*/
|
2011-09-29 10:19:26 +04:00
|
|
|
NS_IMETHOD_(bool) HasCachedSelection() = 0;
|
2010-11-16 23:45:49 +03:00
|
|
|
|
|
|
|
static already_AddRefed<nsITextControlElement>
|
|
|
|
GetTextControlElementFromEditingHost(nsIContent* aHost);
|
2001-10-18 09:52:57 +04:00
|
|
|
};
|
|
|
|
|
2005-11-11 17:36:26 +03:00
|
|
|
NS_DEFINE_STATIC_IID_ACCESSOR(nsITextControlElement,
|
|
|
|
NS_ITEXTCONTROLELEMENT_IID)
|
|
|
|
|
2001-10-18 09:52:57 +04:00
|
|
|
#endif // nsITextControlElement_h___
|
|
|
|
|