• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

KHTML

dom2_range.cpp

Go to the documentation of this file.
00001 
00026 #include "dom/dom_exception.h"
00027 #include "xml/dom_docimpl.h"
00028 #include "xml/dom2_rangeimpl.h"
00029 
00030 using namespace DOM;
00031 
00032 Range::Range()
00033 {
00034     // a range can't exist by itself - it must be associated with a document
00035     impl = 0;
00036 }
00037 
00038 Range::Range(const Document rootContainer)
00039 {
00040     if(rootContainer.handle())
00041     {
00042     impl = new RangeImpl(rootContainer.handle()->docPtr());
00043     impl->ref();
00044     }
00045     else
00046     impl = 0;
00047 }
00048 
00049 Range::Range(const Range &other)
00050 {
00051     impl = other.impl;
00052     if (impl) impl->ref();
00053 }
00054 
00055 Range::Range(const Node startContainer, const long startOffset, const Node endContainer, const long endOffset)
00056 {
00057     if (startContainer.isNull() || endContainer.isNull()) {
00058         throw DOMException(DOMException::NOT_FOUND_ERR);
00059     }
00060 
00061     if (!startContainer.handle()->getDocument() ||
00062         startContainer.handle()->getDocument() != endContainer.handle()->getDocument()) {
00063         throw DOMException(DOMException::WRONG_DOCUMENT_ERR);
00064     }
00065 
00066     impl = new RangeImpl(startContainer.handle()->docPtr(),startContainer.handle(),startOffset,endContainer.handle(),endOffset);
00067     impl->ref();
00068 }
00069 
00070 Range::Range(RangeImpl *i)
00071 {
00072     impl = i;
00073     if (impl) impl->ref();
00074 }
00075 
00076 Range &Range::operator = (const Range &other)
00077 {
00078     if ( impl != other.impl ) {
00079     if (impl) impl->deref();
00080     impl = other.impl;
00081     if (impl) impl->ref();
00082     }
00083     return *this;
00084 }
00085 
00086 Range::~Range()
00087 {
00088     if (impl) impl->deref();
00089 }
00090 
00091 Node Range::startContainer() const
00092 {
00093     if (!impl)
00094         throw DOMException(DOMException::INVALID_STATE_ERR);
00095 
00096     int exceptioncode = 0;
00097     NodeImpl *r = impl->startContainer(exceptioncode);
00098     throwException(exceptioncode);
00099     return r;
00100 }
00101 
00102 long Range::startOffset() const
00103 {
00104     if (!impl)
00105         throw DOMException(DOMException::INVALID_STATE_ERR);
00106 
00107     int exceptioncode = 0;
00108     long r = impl->startOffset(exceptioncode);
00109     throwException(exceptioncode);
00110     return r;
00111 
00112 }
00113 
00114 Node Range::endContainer() const
00115 {
00116     if (!impl)
00117         throw DOMException(DOMException::INVALID_STATE_ERR);
00118 
00119     int exceptioncode = 0;
00120     NodeImpl *r = impl->endContainer(exceptioncode);
00121     throwException(exceptioncode);
00122     return r;
00123 }
00124 
00125 long Range::endOffset() const
00126 {
00127     if (!impl)
00128         throw DOMException(DOMException::INVALID_STATE_ERR);
00129 
00130     int exceptioncode = 0;
00131     long r = impl->endOffset(exceptioncode);
00132     throwException(exceptioncode);
00133     return r;
00134 }
00135 
00136 bool Range::collapsed() const
00137 {
00138     if (!impl)
00139         throw DOMException(DOMException::INVALID_STATE_ERR);
00140 
00141     int exceptioncode = 0;
00142     bool r = impl->collapsed(exceptioncode);
00143     throwException(exceptioncode);
00144     return r;
00145 }
00146 
00147 Node Range::commonAncestorContainer()
00148 {
00149     if (!impl)
00150         throw DOMException(DOMException::INVALID_STATE_ERR);
00151 
00152     int exceptioncode = 0;
00153     NodeImpl *r = impl->commonAncestorContainer(exceptioncode);
00154     throwException(exceptioncode);
00155     return r;
00156 }
00157 
00158 void Range::setStart( const Node &refNode, long offset )
00159 {
00160     if (!impl)
00161         throw DOMException(DOMException::INVALID_STATE_ERR);
00162 
00163     int exceptioncode = 0;
00164     impl->setStart(refNode.handle(),offset,exceptioncode);
00165     throwException(exceptioncode);
00166 }
00167 
00168 void Range::setEnd( const Node &refNode, long offset )
00169 {
00170     if (!impl)
00171         throw DOMException(DOMException::INVALID_STATE_ERR);
00172 
00173     int exceptioncode = 0;
00174     impl->setEnd(refNode.handle(),offset,exceptioncode);
00175     throwException(exceptioncode);
00176 }
00177 
00178 void Range::setStartBefore( const Node &refNode )
00179 {
00180     if (!impl)
00181         throw DOMException(DOMException::INVALID_STATE_ERR);
00182 
00183 
00184     int exceptioncode = 0;
00185     impl->setStartBefore(refNode.handle(),exceptioncode);
00186     throwException(exceptioncode);
00187 }
00188 
00189 void Range::setStartAfter( const Node &refNode )
00190 {
00191     if (!impl)
00192         throw DOMException(DOMException::INVALID_STATE_ERR);
00193 
00194     int exceptioncode = 0;
00195     impl->setStartAfter(refNode.handle(),exceptioncode);
00196     throwException(exceptioncode);
00197 }
00198 
00199 void Range::setEndBefore( const Node &refNode )
00200 {
00201     if (!impl)
00202         throw DOMException(DOMException::INVALID_STATE_ERR);
00203 
00204     int exceptioncode = 0;
00205     impl->setEndBefore(refNode.handle(),exceptioncode);
00206     throwException(exceptioncode);
00207 }
00208 
00209 void Range::setEndAfter( const Node &refNode )
00210 {
00211     if (!impl)
00212         throw DOMException(DOMException::INVALID_STATE_ERR);
00213 
00214     int exceptioncode = 0;
00215     impl->setEndAfter(refNode.handle(),exceptioncode);
00216     throwException(exceptioncode);
00217 }
00218 
00219 void Range::collapse( bool toStart )
00220 {
00221     if (!impl)
00222         throw DOMException(DOMException::INVALID_STATE_ERR);
00223 
00224     int exceptioncode = 0;
00225     impl->collapse(toStart,exceptioncode);
00226     throwException(exceptioncode);
00227 }
00228 
00229 void Range::selectNode( const Node &refNode )
00230 {
00231     if (!impl)
00232         throw DOMException(DOMException::INVALID_STATE_ERR);
00233 
00234     int exceptioncode = 0;
00235     impl->selectNode(refNode.handle(),exceptioncode);
00236     throwException(exceptioncode);
00237 }
00238 
00239 void Range::selectNodeContents( const Node &refNode )
00240 {
00241     if (!impl)
00242         throw DOMException(DOMException::INVALID_STATE_ERR);
00243 
00244     int exceptioncode = 0;
00245     impl->selectNodeContents(refNode.handle(),exceptioncode);
00246     throwException(exceptioncode);
00247 }
00248 
00249 short Range::compareBoundaryPoints( CompareHow how, const Range &sourceRange )
00250 {
00251     if (!impl)
00252         throw DOMException(DOMException::INVALID_STATE_ERR);
00253 
00254     int exceptioncode = 0;
00255     short r = impl->compareBoundaryPoints(how,sourceRange.handle(),exceptioncode);
00256     throwException(exceptioncode);
00257     return r;
00258 }
00259 
00260 bool Range::boundaryPointsValid(  )
00261 {
00262     if (!impl)
00263         throw DOMException(DOMException::INVALID_STATE_ERR);
00264 
00265     return impl->boundaryPointsValid();
00266 }
00267 
00268 void Range::deleteContents(  )
00269 {
00270     if (!impl)
00271         throw DOMException(DOMException::INVALID_STATE_ERR);
00272 
00273     int exceptioncode = 0;
00274     impl->deleteContents(exceptioncode);
00275     throwException(exceptioncode);
00276 }
00277 
00278 DocumentFragment Range::extractContents(  )
00279 {
00280     if (!impl)
00281         throw DOMException(DOMException::INVALID_STATE_ERR);
00282 
00283     int exceptioncode = 0;
00284     DocumentFragmentImpl *r = impl->extractContents(exceptioncode);
00285     throwException(exceptioncode);
00286     return r;
00287 }
00288 
00289 DocumentFragment Range::cloneContents(  )
00290 {
00291     if (!impl)
00292         throw DOMException(DOMException::INVALID_STATE_ERR);
00293 
00294     int exceptioncode = 0;
00295     DocumentFragmentImpl *r = impl->cloneContents(exceptioncode);
00296     throwException(exceptioncode);
00297     return r;
00298 }
00299 
00300 void Range::insertNode( const Node &newNode )
00301 {
00302     if (!impl)
00303         throw DOMException(DOMException::INVALID_STATE_ERR);
00304 
00305     int exceptioncode = 0;
00306     impl->insertNode(newNode.handle(),exceptioncode);
00307     throwException(exceptioncode);
00308 }
00309 
00310 void Range::surroundContents( const Node &newParent )
00311 {
00312     if (!impl)
00313         throw DOMException(DOMException::INVALID_STATE_ERR);
00314 
00315     int exceptioncode = 0;
00316     impl->surroundContents(newParent.handle(),exceptioncode);
00317     throwException(exceptioncode);
00318 }
00319 
00320 Range Range::cloneRange(  )
00321 {
00322     if (!impl)
00323         throw DOMException(DOMException::INVALID_STATE_ERR);
00324 
00325     int exceptioncode = 0;
00326     RangeImpl *r = impl->cloneRange(exceptioncode);
00327     throwException(exceptioncode);
00328     return r;
00329 }
00330 
00331 DOMString Range::toString(  )
00332 {
00333     if (!impl)
00334         throw DOMException(DOMException::INVALID_STATE_ERR);
00335 
00336     int exceptioncode = 0;
00337     DOMString r = impl->toString(exceptioncode);
00338     throwException(exceptioncode);
00339     return r;
00340 
00341 }
00342 
00343 DOMString Range::toHTML(  )
00344 {
00345     if (!impl)
00346         throw DOMException(DOMException::INVALID_STATE_ERR);
00347     int exceptioncode = 0;
00348     DOMString r = impl->toHTML(exceptioncode);
00349     throwException(exceptioncode);
00350     return r;
00351 }
00352 
00353 DocumentFragment Range::createContextualFragment( const DOMString &html )
00354 {
00355     if (!impl)
00356         throw DOMException(DOMException::INVALID_STATE_ERR);
00357 
00358     int exceptioncode = 0;
00359     DocumentFragment r = impl->createContextualFragment(html, exceptioncode);
00360     throwException(exceptioncode);
00361     return r;
00362 }
00363 
00364 
00365 void Range::detach(  )
00366 {
00367     if (!impl)
00368         throw DOMException(DOMException::INVALID_STATE_ERR);
00369 
00370     int exceptioncode = 0;
00371     impl->detach(exceptioncode);
00372     throwException(exceptioncode);
00373 }
00374 
00375 bool Range::isDetached() const
00376 {
00377     if (!impl)
00378         throw DOMException(DOMException::INVALID_STATE_ERR);
00379 
00380     return impl->isDetached();
00381 }
00382 
00383 RangeImpl *Range::handle() const
00384 {
00385     return impl;
00386 }
00387 
00388 bool Range::isNull() const
00389 {
00390     return (impl == 0);
00391 }
00392 
00393 void Range::throwException(int exceptioncode) const
00394 {
00395     if (!exceptioncode)
00396         return;
00397 
00398     // ### also check for CSS & other exceptions?
00399     if (exceptioncode >= RangeException::_EXCEPTION_OFFSET && exceptioncode <= RangeException::_EXCEPTION_MAX)
00400         throw RangeException(static_cast<RangeException::RangeExceptionCode>(exceptioncode-RangeException::_EXCEPTION_OFFSET));
00401     else
00402         throw DOMException(exceptioncode);
00403 }
00404 
00405 
00406 

KHTML

Skip menu "KHTML"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • dcop
  • DNSSD
  • interfaces
  • Kate
  • kconf_update
  • KDECore
  • KDED
  • kdefx
  • KDEsu
  • kdeui
  • KDocTools
  • KHTML
  • KImgIO
  • KInit
  • kio
  • kioslave
  • KJS
  • KNewStuff
  • KParts
  • KUtils
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal