18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef DOMSelection_h 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define DOMSelection_h 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Forward.h> 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/PassRefPtr.h> 350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/RefCounted.h> 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class Frame; 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class Range; 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class Node; 428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian class VisibleSelection; 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef int ExceptionCode; 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class DOMSelection : public RefCounted<DOMSelection> { 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static PassRefPtr<DOMSelection> create(Frame* frame) { return adoptRef(new DOMSelection(frame)); } 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* frame() const; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void disconnectFrame(); 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Safari Selection Object API 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // These methods return the valid equivalents of internal editing positions. 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Node* baseNode() const; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Node* extentNode() const; 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int baseOffset() const; 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int extentOffset() const; 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String type() const; 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setBaseAndExtent(Node* baseNode, int baseOffset, Node* extentNode, int extentOffset, ExceptionCode&); 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setPosition(Node*, int offset, ExceptionCode&); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void modify(const String& alter, const String& direction, const String& granularity); 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Mozilla Selection Object API 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // In Firefox, anchor/focus are the equal to the start/end of the selection, 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // but reflect the direction in which the selection was made by the user. That does 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // not mean that they are base/extent, since the base/extent don't reflect 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // expansion. 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // These methods return the valid equivalents of internal editing positions. 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Node* anchorNode() const; 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int anchorOffset() const; 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Node* focusNode() const; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int focusOffset() const; 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isCollapsed() const; 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int rangeCount() const; 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void collapse(Node*, int offset, ExceptionCode&); 775ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen void collapseToEnd(ExceptionCode&); 785ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen void collapseToStart(ExceptionCode&); 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void extend(Node*, int offset, ExceptionCode&); 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PassRefPtr<Range> getRangeAt(int, ExceptionCode&); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void removeAllRanges(); 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void addRange(Range*); 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void deleteFromDocument(); 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool containsNode(const Node*, bool partlyContained) const; 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void selectAllChildren(Node*, ExceptionCode&); 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String toString(); 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Microsoft Selection Object API 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void empty(); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DOMSelection(Frame*); 948f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Convenience method for accessors, does not NULL check m_frame. 968f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian const VisibleSelection& visibleSelection() const; 978f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool isValidForPosition(Node*) const; 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* m_frame; 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // DOMSelection_h 105