зеркало из https://github.com/mozilla/pjs.git
More selection work.
This commit is contained in:
Родитель
d4e0a79380
Коммит
7513b7afc1
|
@ -87,8 +87,20 @@ nsXULTreeElement::GetSelectedCells(nsIDOMNodeList** aSelectedCells)
|
|||
NS_IMETHODIMP
|
||||
nsXULTreeElement::SelectItem(nsIDOMXULElement* aTreeItem)
|
||||
{
|
||||
// Sanity check. If we're the only item, just bail.
|
||||
PRUint32 length;
|
||||
mSelectedItems->GetLength(&length);
|
||||
if (length == 1) {
|
||||
// See if the single item already selected is us.
|
||||
nsCOMPtr<nsIDOMNode> domNode;
|
||||
mSelectedItems->Item(0, getter_AddRefs(domNode));
|
||||
nsCOMPtr<nsIDOMXULElement> treeItem = do_QueryInterface(domNode);
|
||||
if (treeItem.get() == aTreeItem)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// First clear our selection.
|
||||
ClearSelection();
|
||||
ClearItemSelection();
|
||||
|
||||
// Now add ourselves to the selection by setting our selected attribute.
|
||||
AddItemToSelection(aTreeItem);
|
||||
|
@ -99,8 +111,20 @@ nsXULTreeElement::SelectItem(nsIDOMXULElement* aTreeItem)
|
|||
NS_IMETHODIMP
|
||||
nsXULTreeElement::SelectCell(nsIDOMXULElement* aTreeCell)
|
||||
{
|
||||
// Sanity check. If we're the only item, just bail.
|
||||
PRUint32 length;
|
||||
mSelectedCells->GetLength(&length);
|
||||
if (length == 1) {
|
||||
// See if the single item already selected is us.
|
||||
nsCOMPtr<nsIDOMNode> domNode;
|
||||
mSelectedCells->Item(0, getter_AddRefs(domNode));
|
||||
nsCOMPtr<nsIDOMXULElement> treeCell = do_QueryInterface(domNode);
|
||||
if (treeCell.get() == aTreeCell)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// First clear our selection.
|
||||
ClearSelection();
|
||||
ClearCellSelection();
|
||||
|
||||
// Now add ourselves to the selection by setting our selected attribute.
|
||||
AddCellToSelection(aTreeCell);
|
||||
|
@ -109,21 +133,26 @@ nsXULTreeElement::SelectCell(nsIDOMXULElement* aTreeCell)
|
|||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULTreeElement::ClearSelection()
|
||||
nsXULTreeElement::ClearItemSelection()
|
||||
{
|
||||
// Enumerate the elements and remove them from the selection.
|
||||
PRUint32 length;
|
||||
mSelectedItems->GetLength(&length);
|
||||
PRUint32 i;
|
||||
for (i = 0; i < length; i++) {
|
||||
for (PRUint32 i = 0; i < length; i++) {
|
||||
nsCOMPtr<nsIDOMNode> node;
|
||||
mSelectedItems->Item(0, getter_AddRefs(node));
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(node);
|
||||
content->UnsetAttribute(kNameSpaceID_None, kSelectedAtom, PR_TRUE);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULTreeElement::ClearCellSelection()
|
||||
{
|
||||
PRUint32 length;
|
||||
mSelectedCells->GetLength(&length);
|
||||
for (i = 0; i < length; i++) {
|
||||
for (PRUint32 i = 0; i < length; i++) {
|
||||
nsCOMPtr<nsIDOMNode> node;
|
||||
mSelectedCells->Item(0, getter_AddRefs(node));
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(node);
|
||||
|
@ -188,8 +217,8 @@ nsXULTreeElement::ToggleCellSelection(nsIDOMXULElement* aTreeCell)
|
|||
nsAutoString isSelected;
|
||||
aTreeCell->GetAttribute("selected", isSelected);
|
||||
if (isSelected == "true")
|
||||
RemoveItemFromSelection(aTreeCell);
|
||||
else AddItemToSelection(aTreeCell);
|
||||
RemoveCellFromSelection(aTreeCell);
|
||||
else AddCellToSelection(aTreeCell);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -213,7 +242,8 @@ NS_IMETHODIMP
|
|||
nsXULTreeElement::SelectAll()
|
||||
{
|
||||
// Do a clear.
|
||||
ClearSelection();
|
||||
ClearItemSelection();
|
||||
ClearCellSelection();
|
||||
|
||||
// Now do an invert. That will select everything.
|
||||
InvertSelection();
|
||||
|
|
|
@ -7,7 +7,8 @@ interface XULTreeElement : XULElement {
|
|||
void selectItem(in XULElement treeItem);
|
||||
void selectCell(in XULElement treeCell);
|
||||
|
||||
void clearSelection();
|
||||
void clearItemSelection();
|
||||
void clearCellSelection();
|
||||
|
||||
void addItemToSelection(in XULElement treeItem);
|
||||
void removeItemFromSelection(in XULElement treeItem);
|
||||
|
@ -22,6 +23,5 @@ interface XULTreeElement : XULElement {
|
|||
void selectCellRange(in XULElement startItem, in XULElement endItem);
|
||||
|
||||
void selectAll();
|
||||
|
||||
void invertSelection();
|
||||
};
|
||||
|
|
|
@ -44,7 +44,9 @@ public:
|
|||
|
||||
NS_IMETHOD SelectCell(nsIDOMXULElement* aTreeCell)=0;
|
||||
|
||||
NS_IMETHOD ClearSelection()=0;
|
||||
NS_IMETHOD ClearItemSelection()=0;
|
||||
|
||||
NS_IMETHOD ClearCellSelection()=0;
|
||||
|
||||
NS_IMETHOD AddItemToSelection(nsIDOMXULElement* aTreeItem)=0;
|
||||
|
||||
|
@ -73,7 +75,8 @@ public:
|
|||
NS_IMETHOD GetSelectedCells(nsIDOMNodeList** aSelectedCells); \
|
||||
NS_IMETHOD SelectItem(nsIDOMXULElement* aTreeItem); \
|
||||
NS_IMETHOD SelectCell(nsIDOMXULElement* aTreeCell); \
|
||||
NS_IMETHOD ClearSelection(); \
|
||||
NS_IMETHOD ClearItemSelection(); \
|
||||
NS_IMETHOD ClearCellSelection(); \
|
||||
NS_IMETHOD AddItemToSelection(nsIDOMXULElement* aTreeItem); \
|
||||
NS_IMETHOD RemoveItemFromSelection(nsIDOMXULElement* aTreeItem); \
|
||||
NS_IMETHOD AddCellToSelection(nsIDOMXULElement* aTreeCell); \
|
||||
|
@ -92,7 +95,8 @@ public:
|
|||
NS_IMETHOD GetSelectedCells(nsIDOMNodeList** aSelectedCells) { return _to GetSelectedCells(aSelectedCells); } \
|
||||
NS_IMETHOD SelectItem(nsIDOMXULElement* aTreeItem) { return _to SelectItem(aTreeItem); } \
|
||||
NS_IMETHOD SelectCell(nsIDOMXULElement* aTreeCell) { return _to SelectCell(aTreeCell); } \
|
||||
NS_IMETHOD ClearSelection() { return _to ClearSelection(); } \
|
||||
NS_IMETHOD ClearItemSelection() { return _to ClearItemSelection(); } \
|
||||
NS_IMETHOD ClearCellSelection() { return _to ClearCellSelection(); } \
|
||||
NS_IMETHOD AddItemToSelection(nsIDOMXULElement* aTreeItem) { return _to AddItemToSelection(aTreeItem); } \
|
||||
NS_IMETHOD RemoveItemFromSelection(nsIDOMXULElement* aTreeItem) { return _to RemoveItemFromSelection(aTreeItem); } \
|
||||
NS_IMETHOD AddCellToSelection(nsIDOMXULElement* aTreeCell) { return _to AddCellToSelection(aTreeCell); } \
|
||||
|
|
|
@ -298,10 +298,10 @@ XULTreeElementSelectCell(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
|
|||
|
||||
|
||||
//
|
||||
// Native method ClearSelection
|
||||
// Native method ClearItemSelection
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
XULTreeElementClearSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
XULTreeElementClearItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
|
||||
|
||||
|
@ -314,7 +314,7 @@ XULTreeElementClearSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *ar
|
|||
}
|
||||
{
|
||||
PRBool ok;
|
||||
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.clearselection", &ok);
|
||||
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.clearitemselection", &ok);
|
||||
if (!ok) {
|
||||
//Need to throw error here
|
||||
return JS_FALSE;
|
||||
|
@ -329,7 +329,50 @@ XULTreeElementClearSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *ar
|
|||
|
||||
{
|
||||
|
||||
if (NS_OK != nativeThis->ClearSelection()) {
|
||||
if (NS_OK != nativeThis->ClearItemSelection()) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = JSVAL_VOID;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Native method ClearCellSelection
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
XULTreeElementClearCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
|
||||
nsIScriptSecurityManager *secMan;
|
||||
if (NS_OK != scriptCX->GetSecurityManager(&secMan)) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
{
|
||||
PRBool ok;
|
||||
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.clearcellselection", &ok);
|
||||
if (!ok) {
|
||||
//Need to throw error here
|
||||
return JS_FALSE;
|
||||
}
|
||||
NS_RELEASE(secMan);
|
||||
}
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if (nsnull == nativeThis) {
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
if (NS_OK != nativeThis->ClearCellSelection()) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
|
@ -926,7 +969,8 @@ static JSFunctionSpec XULTreeElementMethods[] =
|
|||
{
|
||||
{"selectItem", XULTreeElementSelectItem, 1},
|
||||
{"selectCell", XULTreeElementSelectCell, 1},
|
||||
{"clearSelection", XULTreeElementClearSelection, 0},
|
||||
{"clearItemSelection", XULTreeElementClearItemSelection, 0},
|
||||
{"clearCellSelection", XULTreeElementClearCellSelection, 0},
|
||||
{"addItemToSelection", XULTreeElementAddItemToSelection, 1},
|
||||
{"removeItemFromSelection", XULTreeElementRemoveItemFromSelection, 1},
|
||||
{"addCellToSelection", XULTreeElementAddCellToSelection, 1},
|
||||
|
|
|
@ -7,7 +7,8 @@ interface XULTreeElement : XULElement {
|
|||
void selectItem(in XULElement treeItem);
|
||||
void selectCell(in XULElement treeCell);
|
||||
|
||||
void clearSelection();
|
||||
void clearItemSelection();
|
||||
void clearCellSelection();
|
||||
|
||||
void addItemToSelection(in XULElement treeItem);
|
||||
void removeItemFromSelection(in XULElement treeItem);
|
||||
|
@ -22,6 +23,5 @@ interface XULTreeElement : XULElement {
|
|||
void selectCellRange(in XULElement startItem, in XULElement endItem);
|
||||
|
||||
void selectAll();
|
||||
|
||||
void invertSelection();
|
||||
};
|
||||
|
|
|
@ -44,7 +44,9 @@ public:
|
|||
|
||||
NS_IMETHOD SelectCell(nsIDOMXULElement* aTreeCell)=0;
|
||||
|
||||
NS_IMETHOD ClearSelection()=0;
|
||||
NS_IMETHOD ClearItemSelection()=0;
|
||||
|
||||
NS_IMETHOD ClearCellSelection()=0;
|
||||
|
||||
NS_IMETHOD AddItemToSelection(nsIDOMXULElement* aTreeItem)=0;
|
||||
|
||||
|
@ -73,7 +75,8 @@ public:
|
|||
NS_IMETHOD GetSelectedCells(nsIDOMNodeList** aSelectedCells); \
|
||||
NS_IMETHOD SelectItem(nsIDOMXULElement* aTreeItem); \
|
||||
NS_IMETHOD SelectCell(nsIDOMXULElement* aTreeCell); \
|
||||
NS_IMETHOD ClearSelection(); \
|
||||
NS_IMETHOD ClearItemSelection(); \
|
||||
NS_IMETHOD ClearCellSelection(); \
|
||||
NS_IMETHOD AddItemToSelection(nsIDOMXULElement* aTreeItem); \
|
||||
NS_IMETHOD RemoveItemFromSelection(nsIDOMXULElement* aTreeItem); \
|
||||
NS_IMETHOD AddCellToSelection(nsIDOMXULElement* aTreeCell); \
|
||||
|
@ -92,7 +95,8 @@ public:
|
|||
NS_IMETHOD GetSelectedCells(nsIDOMNodeList** aSelectedCells) { return _to GetSelectedCells(aSelectedCells); } \
|
||||
NS_IMETHOD SelectItem(nsIDOMXULElement* aTreeItem) { return _to SelectItem(aTreeItem); } \
|
||||
NS_IMETHOD SelectCell(nsIDOMXULElement* aTreeCell) { return _to SelectCell(aTreeCell); } \
|
||||
NS_IMETHOD ClearSelection() { return _to ClearSelection(); } \
|
||||
NS_IMETHOD ClearItemSelection() { return _to ClearItemSelection(); } \
|
||||
NS_IMETHOD ClearCellSelection() { return _to ClearCellSelection(); } \
|
||||
NS_IMETHOD AddItemToSelection(nsIDOMXULElement* aTreeItem) { return _to AddItemToSelection(aTreeItem); } \
|
||||
NS_IMETHOD RemoveItemFromSelection(nsIDOMXULElement* aTreeItem) { return _to RemoveItemFromSelection(aTreeItem); } \
|
||||
NS_IMETHOD AddCellToSelection(nsIDOMXULElement* aTreeCell) { return _to AddCellToSelection(aTreeCell); } \
|
||||
|
|
|
@ -298,10 +298,10 @@ XULTreeElementSelectCell(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
|
|||
|
||||
|
||||
//
|
||||
// Native method ClearSelection
|
||||
// Native method ClearItemSelection
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
XULTreeElementClearSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
XULTreeElementClearItemSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
|
||||
|
||||
|
@ -314,7 +314,7 @@ XULTreeElementClearSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *ar
|
|||
}
|
||||
{
|
||||
PRBool ok;
|
||||
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.clearselection", &ok);
|
||||
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.clearitemselection", &ok);
|
||||
if (!ok) {
|
||||
//Need to throw error here
|
||||
return JS_FALSE;
|
||||
|
@ -329,7 +329,50 @@ XULTreeElementClearSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *ar
|
|||
|
||||
{
|
||||
|
||||
if (NS_OK != nativeThis->ClearSelection()) {
|
||||
if (NS_OK != nativeThis->ClearItemSelection()) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
*rval = JSVAL_VOID;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Native method ClearCellSelection
|
||||
//
|
||||
PR_STATIC_CALLBACK(JSBool)
|
||||
XULTreeElementClearCellSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
|
||||
{
|
||||
nsIDOMXULTreeElement *nativeThis = (nsIDOMXULTreeElement*)nsJSUtils::nsGetNativeThis(cx, obj);
|
||||
|
||||
*rval = JSVAL_NULL;
|
||||
|
||||
nsIScriptContext *scriptCX = (nsIScriptContext *)JS_GetContextPrivate(cx);
|
||||
nsIScriptSecurityManager *secMan;
|
||||
if (NS_OK != scriptCX->GetSecurityManager(&secMan)) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
{
|
||||
PRBool ok;
|
||||
secMan->CheckScriptAccess(scriptCX, obj, "xultreeelement.clearcellselection", &ok);
|
||||
if (!ok) {
|
||||
//Need to throw error here
|
||||
return JS_FALSE;
|
||||
}
|
||||
NS_RELEASE(secMan);
|
||||
}
|
||||
|
||||
// If there's no private data, this must be the prototype, so ignore
|
||||
if (nsnull == nativeThis) {
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
if (NS_OK != nativeThis->ClearCellSelection()) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
|
@ -926,7 +969,8 @@ static JSFunctionSpec XULTreeElementMethods[] =
|
|||
{
|
||||
{"selectItem", XULTreeElementSelectItem, 1},
|
||||
{"selectCell", XULTreeElementSelectCell, 1},
|
||||
{"clearSelection", XULTreeElementClearSelection, 0},
|
||||
{"clearItemSelection", XULTreeElementClearItemSelection, 0},
|
||||
{"clearCellSelection", XULTreeElementClearCellSelection, 0},
|
||||
{"addItemToSelection", XULTreeElementAddItemToSelection, 1},
|
||||
{"removeItemFromSelection", XULTreeElementRemoveItemFromSelection, 1},
|
||||
{"addCellToSelection", XULTreeElementAddCellToSelection, 1},
|
||||
|
|
|
@ -87,8 +87,20 @@ nsXULTreeElement::GetSelectedCells(nsIDOMNodeList** aSelectedCells)
|
|||
NS_IMETHODIMP
|
||||
nsXULTreeElement::SelectItem(nsIDOMXULElement* aTreeItem)
|
||||
{
|
||||
// Sanity check. If we're the only item, just bail.
|
||||
PRUint32 length;
|
||||
mSelectedItems->GetLength(&length);
|
||||
if (length == 1) {
|
||||
// See if the single item already selected is us.
|
||||
nsCOMPtr<nsIDOMNode> domNode;
|
||||
mSelectedItems->Item(0, getter_AddRefs(domNode));
|
||||
nsCOMPtr<nsIDOMXULElement> treeItem = do_QueryInterface(domNode);
|
||||
if (treeItem.get() == aTreeItem)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// First clear our selection.
|
||||
ClearSelection();
|
||||
ClearItemSelection();
|
||||
|
||||
// Now add ourselves to the selection by setting our selected attribute.
|
||||
AddItemToSelection(aTreeItem);
|
||||
|
@ -99,8 +111,20 @@ nsXULTreeElement::SelectItem(nsIDOMXULElement* aTreeItem)
|
|||
NS_IMETHODIMP
|
||||
nsXULTreeElement::SelectCell(nsIDOMXULElement* aTreeCell)
|
||||
{
|
||||
// Sanity check. If we're the only item, just bail.
|
||||
PRUint32 length;
|
||||
mSelectedCells->GetLength(&length);
|
||||
if (length == 1) {
|
||||
// See if the single item already selected is us.
|
||||
nsCOMPtr<nsIDOMNode> domNode;
|
||||
mSelectedCells->Item(0, getter_AddRefs(domNode));
|
||||
nsCOMPtr<nsIDOMXULElement> treeCell = do_QueryInterface(domNode);
|
||||
if (treeCell.get() == aTreeCell)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// First clear our selection.
|
||||
ClearSelection();
|
||||
ClearCellSelection();
|
||||
|
||||
// Now add ourselves to the selection by setting our selected attribute.
|
||||
AddCellToSelection(aTreeCell);
|
||||
|
@ -109,21 +133,26 @@ nsXULTreeElement::SelectCell(nsIDOMXULElement* aTreeCell)
|
|||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULTreeElement::ClearSelection()
|
||||
nsXULTreeElement::ClearItemSelection()
|
||||
{
|
||||
// Enumerate the elements and remove them from the selection.
|
||||
PRUint32 length;
|
||||
mSelectedItems->GetLength(&length);
|
||||
PRUint32 i;
|
||||
for (i = 0; i < length; i++) {
|
||||
for (PRUint32 i = 0; i < length; i++) {
|
||||
nsCOMPtr<nsIDOMNode> node;
|
||||
mSelectedItems->Item(0, getter_AddRefs(node));
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(node);
|
||||
content->UnsetAttribute(kNameSpaceID_None, kSelectedAtom, PR_TRUE);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsXULTreeElement::ClearCellSelection()
|
||||
{
|
||||
PRUint32 length;
|
||||
mSelectedCells->GetLength(&length);
|
||||
for (i = 0; i < length; i++) {
|
||||
for (PRUint32 i = 0; i < length; i++) {
|
||||
nsCOMPtr<nsIDOMNode> node;
|
||||
mSelectedCells->Item(0, getter_AddRefs(node));
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(node);
|
||||
|
@ -188,8 +217,8 @@ nsXULTreeElement::ToggleCellSelection(nsIDOMXULElement* aTreeCell)
|
|||
nsAutoString isSelected;
|
||||
aTreeCell->GetAttribute("selected", isSelected);
|
||||
if (isSelected == "true")
|
||||
RemoveItemFromSelection(aTreeCell);
|
||||
else AddItemToSelection(aTreeCell);
|
||||
RemoveCellFromSelection(aTreeCell);
|
||||
else AddCellToSelection(aTreeCell);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -213,7 +242,8 @@ NS_IMETHODIMP
|
|||
nsXULTreeElement::SelectAll()
|
||||
{
|
||||
// Do a clear.
|
||||
ClearSelection();
|
||||
ClearItemSelection();
|
||||
ClearCellSelection();
|
||||
|
||||
// Now do an invert. That will select everything.
|
||||
InvertSelection();
|
||||
|
|
Загрузка…
Ссылка в новой задаче