⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htmlediting_impl.h

📁 khtml在gtk上的移植版本
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (C) 2004 Apple Computer, Inc.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  */#ifndef __htmleditingimpl_h__#define __htmleditingimpl_h__#include "htmlediting.h"#include "dom_position.h"#include "dom_selection.h"#include "dom_string.h"#include "dom2_range.h"#include "qvaluelist.h"#include "shared.h"namespace DOM {    class AtomicString;    class CSSProperty;    class CSSStyleDeclarationImpl;    class DocumentImpl;    class DOMString;    class ElementImpl;    class HTMLElementImpl;    class NodeImpl;    class NodeListImpl;    class Position;    class Range;    class Selection;    class TextImpl;    class TreeWalkerImpl;};namespace khtml {//------------------------------------------------------------------------------------------// EditCommandImplclass EditCommandImpl : public SharedCommandImpl{public:	EditCommandImpl(DOM::DocumentImpl *);	virtual ~EditCommandImpl();    virtual int commandID() const;    bool isCompositeStep() const { return parent().notNull(); }    EditCommand parent() const;    void setParent(const EditCommand &);    enum ECommandState { NotApplied, Applied };    	void apply();		void unapply();	void reapply();    virtual void doApply() = 0;    virtual void doUnapply() = 0;    virtual void doReapply();  // calls doApply()    virtual DOM::DocumentImpl * const document() const { return m_document; }    DOM::Selection startingSelection() const { return m_startingSelection; }    DOM::Selection endingSelection() const { return m_endingSelection; }            ECommandState state() const { return m_state; }    void setState(ECommandState state) { m_state = state; }    void setStartingSelection(const DOM::Selection &s);    void setEndingSelection(const DOM::Selection &s);private:    DOM::DocumentImpl *m_document;    ECommandState m_state;    DOM::Selection m_startingSelection;    DOM::Selection m_endingSelection;    EditCommand m_parent;};//------------------------------------------------------------------------------------------// CompositeEditCommandImplclass CompositeEditCommandImpl : public EditCommandImpl{public:	CompositeEditCommandImpl(DOM::DocumentImpl *);	virtual ~CompositeEditCommandImpl();	    virtual int commandID() const;	virtual void doApply() = 0;		virtual void doUnapply();	virtual void doReapply();protected:    //    // sugary-sweet convenience functions to help create and apply edit commands in composite commands    //    void appendNode(DOM::NodeImpl *parent, DOM::NodeImpl *appendChild);    void applyCommandToComposite(EditCommand &);    void deleteCollapsibleWhitespace();    void deleteCollapsibleWhitespace(const DOM::Selection &selection);    void deleteKeyPressed();    void deleteSelection();    void deleteSelection(const DOM::Selection &selection);    void deleteText(DOM::TextImpl *node, long offset, long count);    void inputText(const DOM::DOMString &text);    void insertNodeAfter(DOM::NodeImpl *insertChild, DOM::NodeImpl *refChild);    void insertNodeAt(DOM::NodeImpl *insertChild, DOM::NodeImpl *refChild, long offset);    void insertNodeBefore(DOM::NodeImpl *insertChild, DOM::NodeImpl *refChild);    void insertText(DOM::TextImpl *node, long offset, const DOM::DOMString &text);    void joinTextNodes(DOM::TextImpl *text1, DOM::TextImpl *text2);    void removeCSSProperty(DOM::CSSStyleDeclarationImpl *, int property);    void removeNodeAttribute(DOM::ElementImpl *, int attribute);    void removeNode(DOM::NodeImpl *removeChild);    void removeNodeAndPrune(DOM::NodeImpl *pruneNode, DOM::NodeImpl *stopNode=0);    void removeNodePreservingChildren(DOM::NodeImpl *node);    void replaceText(DOM::TextImpl *node, long offset, long count, const DOM::DOMString &replacementText);    void setNodeAttribute(DOM::ElementImpl *, int attribute, const DOM::DOMString &);    void splitTextNode(DOM::TextImpl *text, long offset);    DOM::ElementImpl *createTypingStyleElement() const;    QValueList<EditCommand> m_cmds;};//==========================================================================================// Concrete commands//------------------------------------------------------------------------------------------// AppendNodeCommandImplclass AppendNodeCommandImpl : public EditCommandImpl{public:    AppendNodeCommandImpl(DOM::DocumentImpl *, DOM::NodeImpl *parentNode, DOM::NodeImpl *appendChild);	virtual ~AppendNodeCommandImpl();    virtual int commandID() const;	virtual void doApply();	virtual void doUnapply();    DOM::NodeImpl *parentNode() const { return m_parentNode; }    DOM::NodeImpl *appendChild() const { return m_appendChild; }private:    DOM::NodeImpl *m_parentNode;        DOM::NodeImpl *m_appendChild;};//------------------------------------------------------------------------------------------// ApplyStyleCommandImplclass ApplyStyleCommandImpl : public CompositeEditCommandImpl{public:	ApplyStyleCommandImpl(DOM::DocumentImpl *, DOM::CSSStyleDeclarationImpl *style);	virtual ~ApplyStyleCommandImpl();	    virtual int commandID() const;	virtual void doApply();    DOM::CSSStyleDeclarationImpl *style() const { return m_style; }    struct StyleChange {        StyleChange() : applyBold(false), applyItalic(false) {}        DOM::DOMString cssStyle;        bool applyBold:1;        bool applyItalic:1;    };private:    // style-removal helpers    bool isHTMLStyleNode(DOM::HTMLElementImpl *);    void removeHTMLStyleNode(DOM::HTMLElementImpl *);    void removeCSSStyle(DOM::HTMLElementImpl *);    void removeStyle(const DOM::Position &start, const DOM::Position &end);    bool nodeFullySelected(const DOM::NodeImpl *node) const;    // style-application helpers    bool currentlyHasStyle(const DOM::Position &, const DOM::CSSProperty *) const;    StyleChange computeStyleChange(const DOM::Position &, DOM::CSSStyleDeclarationImpl *);    bool splitTextAtStartIfNeeded(const DOM::Position &start, const DOM::Position &end);    DOM::NodeImpl *splitTextAtEndIfNeeded(const DOM::Position &start, const DOM::Position &end);    void surroundNodeRangeWithElement(DOM::NodeImpl *start, DOM::NodeImpl *end, DOM::ElementImpl *element);    DOM::Position positionInsertionPoint(DOM::Position);    void applyStyleIfNeeded(DOM::NodeImpl *start, DOM::NodeImpl *end);        DOM::CSSStyleDeclarationImpl *m_style;};//------------------------------------------------------------------------------------------// DeleteCollapsibleWhitespaceCommandImplclass DeleteCollapsibleWhitespaceCommandImpl : public CompositeEditCommandImpl{ public:	DeleteCollapsibleWhitespaceCommandImpl(DOM::DocumentImpl *document);	DeleteCollapsibleWhitespaceCommandImpl(DOM::DocumentImpl *document, const DOM::Selection &selection);    	virtual ~DeleteCollapsibleWhitespaceCommandImpl();	    virtual int commandID() const;	virtual void doApply();private:    DOM::Position deleteWhitespace(const DOM::Position &pos);    unsigned long m_charactersDeleted;    DOM::Selection m_selectionToCollapse;    bool m_hasSelectionToCollapse;};//------------------------------------------------------------------------------------------// DeleteSelectionCommandImplclass DeleteSelectionCommandImpl : public CompositeEditCommandImpl{ public:	DeleteSelectionCommandImpl(DOM::DocumentImpl *document);	DeleteSelectionCommandImpl(DOM::DocumentImpl *document, const DOM::Selection &selection);    	virtual ~DeleteSelectionCommandImpl();	    virtual int commandID() const;	virtual void doApply();    private:    void deleteDownstreamWS(const DOM::Position &start);    bool containsOnlyWhitespace(const DOM::Position &start, const DOM::Position &end);    void joinTextNodesWithSameStyle();    DOM::Selection m_selectionToDelete;    bool m_hasSelectionToDelete;};//------------------------------------------------------------------------------------------// DeleteTextCommandImplclass DeleteTextCommandImpl : public EditCommandImpl{public:	DeleteTextCommandImpl(DOM::DocumentImpl *document, DOM::TextImpl *node, long offset, long count);	virtual ~DeleteTextCommandImpl();	    virtual int commandID() const;	virtual void doApply();	virtual void doUnapply();    DOM::TextImpl *node() const { return m_node; }    long offset() const { return m_offset; }    long count() const { return m_count; }private:    DOM::TextImpl *m_node;    long m_offset;    long m_count;    DOM::DOMString m_text;};//------------------------------------------------------------------------------------------// InputNewlineCommandImplclass InputNewlineCommandImpl : public CompositeEditCommandImpl{public:    InputNewlineCommandImpl(DOM::DocumentImpl *document);    virtual ~InputNewlineCommandImpl();    virtual int commandID() const;    virtual void doApply();private:    void insertNodeAfterPosition(DOM::NodeImpl *node, const DOM::Position &pos);    void insertNodeBeforePosition(DOM::NodeImpl *node, const DOM::Position &pos);};//------------------------------------------------------------------------------------------// InputTextCommandImplclass InputTextCommandImpl : public CompositeEditCommandImpl{public:    InputTextCommandImpl(DOM::DocumentImpl *document);    virtual ~InputTextCommandImpl();    virtual int commandID() const;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -