KHTML
dom2_range.h
Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 #ifndef _dom2_range_h_
00031 #define _dom2_range_h_
00032 
00033 #include <dom/dom_doc.h>
00034 #include <dom/dom_misc.h>
00035 
00036 namespace DOM {
00037 
00038 class DocumentFragment;
00039 class Node;
00040 class DOMString;
00041 class DocumentImpl;
00042 class RangeImpl;
00043 
00044 class DOMException;
00045 
00046 
00047 class KHTML_EXPORT RangeException {
00048 public:
00049     RangeException(unsigned short _code) { code = _code; }
00050     RangeException(const RangeException &other) { code = other.code; }
00051 
00052     RangeException & operator = (const RangeException &other)
00053     { code = other.code; return *this; }
00054 
00055     virtual ~RangeException() {}
00060     enum RangeExceptionCode {
00061         BAD_BOUNDARYPOINTS_ERR         = 1,
00062         INVALID_NODE_TYPE_ERR          = 2,
00063         _EXCEPTION_OFFSET              = 2000,
00064         _EXCEPTION_MAX                 = 2999
00065     };
00066     unsigned short code;
00067 };
00068 
00069 
00070 class KHTML_EXPORT Range
00071 {
00072     friend class DocumentImpl;
00073     friend class Document;
00074     friend class RangeImpl;
00075 public:
00076     Range();
00077     Range(const Document rootContainer);
00078     Range(const Range &other);
00079     Range(const Node startContainer, const long startOffset, const Node endContainer, const long endOffset);
00080 
00081     Range & operator = (const Range &other);
00082 
00083     ~Range();
00084 
00089     Node startContainer() const;
00090 
00095     long startOffset() const;
00096 
00101     Node endContainer() const;
00102 
00107     long endOffset() const;
00108 
00113     bool collapsed() const;
00114 
00120     
00121     Node commonAncestorContainer();
00122 
00144     void setStart ( const Node &refNode, long offset );
00145 
00164     void setEnd ( const Node &refNode, long offset );
00165 
00180     void setStartBefore ( const Node &refNode );
00181 
00196     void setStartAfter ( const Node &refNode );
00197 
00212     void setEndBefore ( const Node &refNode );
00213 
00228     void setEndAfter ( const Node &refNode );
00229 
00239     void collapse ( bool toStart );
00240 
00255     void selectNode ( const Node &refNode );
00256 
00270     void selectNodeContents ( const Node &refNode );
00271 
00272     enum CompareHow {
00273     START_TO_START = 0,
00274     START_TO_END = 1,
00275     END_TO_END = 2,
00276     END_TO_START = 3
00277     };
00278 
00295     short compareBoundaryPoints ( CompareHow how, const Range &sourceRange );
00296 
00308     bool boundaryPointsValid (  );
00309 
00323     void deleteContents (  );
00324 
00340     DocumentFragment extractContents (  );
00341 
00353     DocumentFragment cloneContents (  );
00354 
00381     void insertNode ( const Node &newNode );
00382 
00415     void surroundContents ( const Node &newParent );
00416 
00424     Range cloneRange (  );
00425 
00432     DOMString toString (  );
00433 
00437     DOMString toHTML (  );
00438 
00439     
00440     DocumentFragment createContextualFragment (const DOMString &html);
00441 
00450     void detach (  );
00451 
00457     bool isDetached() const;
00458 
00463     RangeImpl *handle() const;
00464     bool isNull() const;
00465 
00466 protected:
00467     RangeImpl *impl;
00468     Range(RangeImpl *i);
00469 private:
00470     void throwException(int exceptioncode) const;
00471 };
00472 
00473 } 
00474 
00475 #endif