From 287a754d8443bdb021afb1e2bab6491c8b31cf8c Mon Sep 17 00:00:00 2001 From: "cmanske%netscape.com" Date: Tue, 21 Sep 1999 01:27:37 +0000 Subject: [PATCH] Adding CollapseToStart and CollapseToEnd to selection git-svn-id: svn://10.0.0.236/trunk@48469 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/layout/base/src/nsRangeList.cpp | 72 +++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/mozilla/layout/base/src/nsRangeList.cpp b/mozilla/layout/base/src/nsRangeList.cpp index 958844d5587..4eaf402d80c 100644 --- a/mozilla/layout/base/src/nsRangeList.cpp +++ b/mozilla/layout/base/src/nsRangeList.cpp @@ -98,6 +98,8 @@ public: NS_IMETHOD GetRangeAt(PRInt32 aIndex, nsIDOMRange** aReturn); NS_IMETHOD ClearSelection(); NS_IMETHOD Collapse(nsIDOMNode* aParentNode, PRInt32 aOffset); + NS_IMETHOD CollapseToStart(); + NS_IMETHOD CollapseToEnd(); NS_IMETHOD Extend(nsIDOMNode* aParentNode, PRInt32 aOffset); NS_IMETHOD ContainsNode(nsIDOMNode* aNode, PRBool aRecursive, PRBool* aAYes); NS_IMETHOD DeleteFromDocument(); @@ -2037,6 +2039,76 @@ nsDOMSelection::Collapse(nsIDOMNode* aParentNode, PRInt32 aOffset) return mRangeList->NotifySelectionListeners(); } +/* + * Sets the whole selection to be one point + * at the start of the current selection + */ +NS_IMETHODIMP +nsDOMSelection::CollapseToStart() +{ + PRInt32 cnt; + nsresult rv = GetRangeCount(&cnt); + if (NS_FAILED(rv) || cnt<=0 || !mRangeArray) + return NS_ERROR_FAILURE; + + // Get the first range (from GetRangeAt) + nsISupports* element = mRangeArray->ElementAt(0); + nsCOMPtr firstRange = do_QueryInterface(element); + if (!firstRange) + return NS_ERROR_FAILURE; + + nsCOMPtr parent; + rv = firstRange->GetStartParent(getter_AddRefs(parent)); + if (NS_SUCCEEDED(rv)) + { + if (parent) + { + PRInt32 startOffset; + firstRange->GetStartOffset(&startOffset); + rv = Collapse(parent, startOffset); + } else { + // not very likely! + rv = NS_ERROR_FAILURE; + } + } + return rv; +} + +/* + * Sets the whole selection to be one point + * at the end of the current selection + */ +NS_IMETHODIMP +nsDOMSelection::CollapseToEnd() +{ + PRInt32 cnt; + nsresult rv = GetRangeCount(&cnt); + if (NS_FAILED(rv) || cnt<=0 || !mRangeArray) + return NS_ERROR_FAILURE; + + // Get the last range (from GetRangeAt) + nsISupports* element = mRangeArray->ElementAt(cnt-1); + nsCOMPtr lastRange = do_QueryInterface(element); + if (!lastRange) + return NS_ERROR_FAILURE; + + nsCOMPtr parent; + rv = lastRange->GetEndParent(getter_AddRefs(parent)); + if (NS_SUCCEEDED(rv)) + { + if (parent) + { + PRInt32 endOffset; + lastRange->GetEndOffset(&endOffset); + rv = Collapse(parent, endOffset); + } else { + // not very likely! + rv = NS_ERROR_FAILURE; + } + } + return rv; +} + /* * IsCollapsed -- is the whole selection just one point, or unset? */