summaryrefslogtreecommitdiffstats
path: root/dom/html/nsITextControlElement.h
diff options
context:
space:
mode:
Diffstat (limited to 'dom/html/nsITextControlElement.h')
-rw-r--r--dom/html/nsITextControlElement.h205
1 files changed, 205 insertions, 0 deletions
diff --git a/dom/html/nsITextControlElement.h b/dom/html/nsITextControlElement.h
new file mode 100644
index 000000000..9adbf377e
--- /dev/null
+++ b/dom/html/nsITextControlElement.h
@@ -0,0 +1,205 @@
+/* -*- 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 nsITextControlElement_h___
+#define nsITextControlElement_h___
+
+#include "nsISupports.h"
+#include "nsCOMPtr.h"
+class nsIContent;
+class nsAString;
+class nsIEditor;
+class nsISelectionController;
+class nsFrameSelection;
+class nsTextControlFrame;
+
+namespace mozilla {
+namespace dom {
+class Element;
+} // namespace dom
+} // namespace mozilla
+
+// IID for the nsITextControl interface
+#define NS_ITEXTCONTROLELEMENT_IID \
+{ 0x3df7db6d, 0xa548, 0x4e20, \
+ { 0x97, 0xfd, 0x75, 0xa3, 0x31, 0xa2, 0xf3, 0xd4 } }
+
+/**
+ * This interface is used for the text control frame to get the editor and
+ * selection controller objects, and some helper properties.
+ */
+class nsITextControlElement : public nsISupports {
+public:
+
+ NS_DECLARE_STATIC_IID_ACCESSOR(NS_ITEXTCONTROLELEMENT_IID)
+
+ /**
+ * Tell the control that value has been deliberately changed (or not).
+ */
+ NS_IMETHOD SetValueChanged(bool changed) = 0;
+
+ /**
+ * Find out whether this is a single line text control. (text or password)
+ * @return whether this is a single line text control
+ */
+ NS_IMETHOD_(bool) IsSingleLineTextControl() const = 0;
+
+ /**
+ * Find out whether this control is a textarea.
+ * @return whether this is a textarea text control
+ */
+ NS_IMETHOD_(bool) IsTextArea() const = 0;
+
+ /**
+ * Find out whether this control edits plain text. (Currently always true.)
+ * @return whether this is a plain text control
+ */
+ NS_IMETHOD_(bool) IsPlainTextControl() const = 0;
+
+ /**
+ * Find out whether this is a password control (input type=password)
+ * @return whether this is a password ontrol
+ */
+ NS_IMETHOD_(bool) IsPasswordTextControl() const = 0;
+
+ /**
+ * Get the cols attribute (if textarea) or a default
+ * @return the number of columns to use
+ */
+ NS_IMETHOD_(int32_t) GetCols() = 0;
+
+ /**
+ * Get the column index to wrap at, or -1 if we shouldn't wrap
+ */
+ NS_IMETHOD_(int32_t) GetWrapCols() = 0;
+
+ /**
+ * Get the rows attribute (if textarea) or a default
+ * @return the number of rows to use
+ */
+ NS_IMETHOD_(int32_t) GetRows() = 0;
+
+ /**
+ * Get the default value of the text control
+ */
+ NS_IMETHOD_(void) GetDefaultValueFromContent(nsAString& aValue) = 0;
+
+ /**
+ * Return true if the value of the control has been changed.
+ */
+ NS_IMETHOD_(bool) ValueChanged() const = 0;
+
+ /**
+ * 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.
+ */
+ NS_IMETHOD_(void) GetTextEditorValue(nsAString& aValue, bool aIgnoreWrap) const = 0;
+
+ /**
+ * 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.)
+ */
+ NS_IMETHOD_(nsIEditor*) GetTextEditor() = 0;
+
+ /**
+ * 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.
+ */
+ NS_IMETHOD_(nsIContent*) GetRootEditorNode() = 0;
+
+ /**
+ * Create the placeholder anonymous node for the text control and returns it.
+ */
+ NS_IMETHOD_(mozilla::dom::Element*) CreatePlaceholderNode() = 0;
+
+ /**
+ * Get the placeholder anonymous node for the text control.
+ */
+ NS_IMETHOD_(mozilla::dom::Element*) GetPlaceholderNode() = 0;
+
+ /**
+ * Initialize the keyboard event listeners.
+ */
+ NS_IMETHOD_(void) InitializeKeyboardEventListeners() = 0;
+
+ /**
+ * Update the placeholder visibility based on the element's state.
+ */
+ NS_IMETHOD_(void) UpdatePlaceholderVisibility(bool aNotify) = 0;
+
+ /**
+ * Returns the current expected placeholder visibility state.
+ */
+ NS_IMETHOD_(bool) GetPlaceholderVisibility() = 0;
+
+ /**
+ * Callback called whenever the value is changed.
+ */
+ NS_IMETHOD_(void) OnValueChanged(bool aNotify, bool aWasInteractiveUserChange) = 0;
+
+ 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;
+
+ // wrap can be one of these three values.
+ typedef enum {
+ eHTMLTextWrap_Off = 1, // "off"
+ eHTMLTextWrap_Hard = 2, // "hard"
+ eHTMLTextWrap_Soft = 3 // the default
+ } nsHTMLTextWrap;
+
+ static bool
+ GetWrapPropertyEnum(nsIContent* aContent, nsHTMLTextWrap& aWrapProp);
+
+ /**
+ * 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.
+ */
+ NS_IMETHOD_(bool) HasCachedSelection() = 0;
+
+ static already_AddRefed<nsITextControlElement>
+ GetTextControlElementFromEditingHost(nsIContent* aHost);
+};
+
+NS_DEFINE_STATIC_IID_ACCESSOR(nsITextControlElement,
+ NS_ITEXTCONTROLELEMENT_IID)
+
+#endif // nsITextControlElement_h___
+