26 #ifndef __htmleditingimpl_h__ 27 #define __htmleditingimpl_h__ 29 #include "misc/shared.h" 31 #include "xml/dom_position.h" 32 #include "xml/dom_selection.h" 35 #include "xml/dom_nodeimpl.h" 41 class CSSStyleDeclarationImpl;
42 class DocumentFragmentImpl;
46 class HTMLElementImpl;
56 using DOM::DocumentImpl;
62 class EditCommandImpl;
70 virtual bool isCompositeStep()
const = 0;
72 virtual void apply() = 0;
73 virtual void unapply() = 0;
74 virtual void reapply() = 0;
76 virtual DOM::DocumentImpl* document()
const = 0;
78 virtual DOM::Selection startingSelection()
const = 0;
79 virtual DOM::Selection endingSelection()
const = 0;
81 virtual void setStartingSelection(
const DOM::Selection &s) = 0;
82 virtual void setEndingSelection(
const DOM::Selection &s) = 0;
107 virtual void doApply() = 0;
108 virtual void doUnapply() = 0;
109 virtual void doReapply();
111 virtual DOM::DocumentImpl*
document()
const {
return m_document.get(); }
119 void setStartingSelection(
const DOM::Selection &s);
120 void setEndingSelection(
const DOM::Selection &s);
127 DocPtr<DOM::DocumentImpl> m_document;
129 DOM::Selection m_startingSelection;
130 DOM::Selection m_endingSelection;
131 RefPtr<EditCommandImpl> m_parent;
143 virtual void doApply() = 0;
144 virtual void doUnapply();
145 virtual void doReapply();
151 void appendNode(DOM::NodeImpl *parent, DOM::NodeImpl *appendChild);
152 void applyCommandToComposite(PassRefPtr<EditCommandImpl>);
153 void deleteCollapsibleWhitespace();
154 void deleteCollapsibleWhitespace(
const DOM::Selection &selection);
155 void deleteKeyPressed();
156 void deleteSelection();
157 void deleteSelection(
const DOM::Selection &selection);
158 void deleteText(DOM::TextImpl *node,
long offset,
long count);
160 void insertNodeAfter(DOM::NodeImpl *insertChild, DOM::NodeImpl *refChild);
161 void insertNodeAt(DOM::NodeImpl *insertChild, DOM::NodeImpl *refChild,
long offset);
162 void insertNodeBefore(DOM::NodeImpl *insertChild, DOM::NodeImpl *refChild);
163 void insertText(DOM::TextImpl *node,
long offset,
const DOM::DOMString &text);
164 void joinTextNodes(DOM::TextImpl *text1, DOM::TextImpl *text2);
165 void removeCSSProperty(DOM::CSSStyleDeclarationImpl *,
int property);
166 void removeNodeAttribute(DOM::ElementImpl *,
int attribute);
167 void removeNode(DOM::NodeImpl *removeChild);
168 void removeNodeAndPrune(DOM::NodeImpl *pruneNode, DOM::NodeImpl *stopNode=0);
169 void removeNodePreservingChildren(DOM::NodeImpl *node);
170 void replaceText(DOM::TextImpl *node,
long offset,
long count,
const DOM::DOMString &replacementText);
171 void setNodeAttribute(DOM::ElementImpl *,
int attribute,
const DOM::DOMString &);
172 void splitTextNode(DOM::TextImpl *text,
long offset);
174 DOM::ElementImpl *createTypingStyleElement()
const;
190 virtual void doApply();
191 virtual void doUnapply();
197 DOM::NodeImpl *m_parentNode;
198 DOM::NodeImpl *m_appendChild;
210 virtual void doApply();
212 DOM::CSSStyleDeclarationImpl *
style()
const {
return m_style; }
223 bool isHTMLStyleNode(DOM::HTMLElementImpl *);
224 void removeHTMLStyleNode(DOM::HTMLElementImpl *);
225 void removeCSSStyle(DOM::HTMLElementImpl *);
226 void removeStyle(
const DOM::Position &start,
const DOM::Position &end);
227 bool nodeFullySelected(
const DOM::NodeImpl *node)
const;
230 bool currentlyHasStyle(
const DOM::Position &,
const DOM::CSSProperty *)
const;
231 StyleChange computeStyleChange(
const DOM::Position &, DOM::CSSStyleDeclarationImpl *);
232 bool splitTextAtStartIfNeeded(
const DOM::Position &start,
const DOM::Position &end);
233 DOM::NodeImpl *splitTextAtEndIfNeeded(
const DOM::Position &start,
const DOM::Position &end);
234 void surroundNodeRangeWithElement(DOM::NodeImpl *start, DOM::NodeImpl *end, DOM::ElementImpl *element);
235 DOM::Position positionInsertionPoint(DOM::Position);
236 void applyStyleIfNeeded(DOM::NodeImpl *start, DOM::NodeImpl *end);
238 DOM::CSSStyleDeclarationImpl *m_style;
252 virtual void doApply();
255 DOM::Position deleteWhitespace(
const DOM::Position &pos);
257 unsigned long m_charactersDeleted;
258 DOM::Selection m_selectionToCollapse;
259 bool m_hasSelectionToCollapse;
273 virtual void doApply();
276 void deleteContentBeforeOffset(NodeImpl *node,
int offset);
277 void deleteContentAfterOffset(NodeImpl *node,
int offset);
278 void deleteContentInsideNode(NodeImpl *node,
int startOffset,
int endOffset);
279 void deleteDownstreamWS(
const DOM::Position &start);
280 bool containsOnlyWhitespace(
const DOM::Position &start,
const DOM::Position &
end);
281 void joinTextNodesWithSameStyle();
283 DOM::Selection m_selectionToDelete;
284 bool m_hasSelectionToDelete;
296 virtual void doApply();
297 virtual void doUnapply();
299 DOM::TextImpl *
node()
const {
return m_node; }
301 long count()
const {
return m_count; }
304 DOM::TextImpl *m_node;
319 virtual void doApply();
322 void insertNodeAfterPosition(DOM::NodeImpl *node,
const DOM::Position &pos);
323 void insertNodeBeforePosition(DOM::NodeImpl *node,
const DOM::Position &pos);
335 virtual void doApply();
337 void deleteCharacter();
344 DOM::Position prepareForTextInsertion(
bool adjustDownstream);
346 void insertSpace(DOM::TextImpl *textNode,
unsigned long offset);
348 unsigned long m_charactersAdded;
360 virtual void doApply();
361 virtual void doUnapply();
364 DOM::NodeImpl *
refChild()
const {
return m_refChild; }
367 DOM::NodeImpl *m_insertChild;
368 DOM::NodeImpl *m_refChild;
380 virtual void doApply();
381 virtual void doUnapply();
383 DOM::TextImpl *
node()
const {
return m_node; }
388 DOM::TextImpl *m_node;
402 virtual void doApply();
403 virtual void doUnapply();
409 DOM::TextImpl *m_text1;
410 DOM::TextImpl *m_text2;
411 unsigned long m_offset;
423 virtual void doApply();
426 DOM::DocumentFragmentImpl *m_fragment;
427 bool m_selectReplacement;
436 MoveSelectionCommandImpl(DOM::DocumentImpl *document, DOM::DocumentFragmentImpl *fragment, DOM::Position &position);
439 virtual void doApply();
442 DOM::DocumentFragmentImpl *m_fragment;
443 DOM::Position m_position;
455 virtual void doApply();
456 virtual void doUnapply();
462 DOM::CSSStyleDeclarationImpl *m_decl;
477 virtual void doApply();
478 virtual void doUnapply();
480 DOM::ElementImpl *
element()
const {
return m_element; }
481 DOM::NodeImpl::Id
attribute()
const {
return m_attribute; }
484 DOM::ElementImpl *m_element;
485 DOM::NodeImpl::Id m_attribute;
498 virtual void doApply();
499 virtual void doUnapply();
501 DOM::NodeImpl *
node()
const {
return m_removeChild; }
504 DOM::NodeImpl *m_parent;
505 DOM::NodeImpl *m_removeChild;
506 DOM::NodeImpl *m_refChild;
518 virtual void doApply();
520 DOM::NodeImpl *
pruneNode()
const {
return m_pruneNode; }
521 DOM::NodeImpl *
stopNode()
const {
return m_stopNode; }
524 DOM::NodeImpl *m_pruneNode;
525 DOM::NodeImpl *m_stopNode;
537 virtual void doApply();
539 DOM::NodeImpl *
node()
const {
return m_node; }
542 DOM::NodeImpl *m_node;
554 virtual void doApply();
555 virtual void doUnapply();
557 DOM::ElementImpl *
element()
const {
return m_element; }
558 DOM::NodeImpl::Id
attribute()
const {
return m_attribute; }
562 DOM::ElementImpl *m_element;
563 DOM::NodeImpl::Id m_attribute;
577 virtual void doApply();
578 virtual void doUnapply();
580 DOM::TextImpl *
node()
const {
return m_text2; }
584 DOM::TextImpl *m_text1;
585 DOM::TextImpl *m_text2;
586 unsigned long m_offset;
598 virtual void doApply();
604 void insertNewline();
605 void deleteKeyPressed();
609 static void deleteKeyPressed0(DocumentImpl *document);
610 static void insertNewline0(DocumentImpl *document);
611 static void insertText0(DocumentImpl *document,
const DOMString &text);
614 void issueCommandForDeleteKey();
615 void removeCommand(
const PassRefPtr<EditCommandImpl>);
616 void typingAddedToOpenCommand();
618 bool m_openForMoreTyping;
627 enum Type { OrderedList, UnorderedList };
632 virtual void doApply();
634 static void insertList(DocumentImpl *document,
Type type);
653 virtual void doApply();
DOM::NodeImpl * node() const
DOM::NodeImpl * node() const
DOM::NodeImpl * pruneNode() const
virtual DOM::DocumentImpl * document() const
bool openForMoreTyping() const
DOM::NodeImpl * appendChild() const
QList< RefPtr< EditCommandImpl > > m_cmds
DOM::NodeImpl * stopNode() const
DOM::TextImpl * node() const
DOM::Selection startingSelection() const
DOM::Selection endingSelection() const
DOM::NodeImpl::Id attribute() const
QString indent(QString text, int spaces)
DOM::CSSStyleDeclarationImpl * style() const
void setState(ECommandState state)
virtual ~SharedCommandImpl()
ECommandState state() const
DOM::TextImpl * secondNode() const
DOM::NodeImpl * insertChild() const
DOM::CSSStyleDeclarationImpl * styleDeclaration() const
This class implements the basic string we use in the DOM.
virtual bool isTypingCommand() const
DOM::NodeImpl * refChild() const
DOM::TextImpl * node() const
virtual bool isInputTextCommand() const
DOM::TextImpl * node() const
DOM::ElementImpl * element() const
This library provides a full-featured HTML parser and widget.
bool isCompositeStep() const
virtual bool isTypingCommand() const
virtual bool isInputTextCommand() const
DOM::NodeImpl::Id attribute() const
DOM::TextImpl * firstNode() const
DOM::ElementImpl * element() const
unsigned long charactersAdded() const
DOM::DOMString value() const
DOM::NodeImpl * parentNode() const
DOM::DOMString text() const