diff --git a/mozilla/mailnews/base/src/nsMsgDBView.cpp b/mozilla/mailnews/base/src/nsMsgDBView.cpp index eee7ac4b573..ed27fc71e34 100644 --- a/mozilla/mailnews/base/src/nsMsgDBView.cpp +++ b/mozilla/mailnews/base/src/nsMsgDBView.cpp @@ -2035,7 +2035,7 @@ NS_IMETHODIMP nsMsgDBView::Close() // row count, which get determine from the number of keys. m_keys.RemoveAll(); // be consistent - m_flags.RemoveAll(); + m_flags.Clear(); m_levels.Clear(); // clear these out since they no longer apply if we're switching a folder @@ -2280,7 +2280,7 @@ NS_IMETHODIMP nsMsgDBView::DoCommand(nsMsgViewCommandTypeValue command) nsMsgViewIndex numIndices = GetSize(); for (nsMsgViewIndex curIndex = 0; curIndex < numIndices; curIndex++) { - if (m_flags.GetAt(curIndex) & MSG_FLAG_MARKED) + if (m_flags[curIndex] & MSG_FLAG_MARKED) mTreeSelection->ToggleSelect(curIndex); } mTreeSelection->SetSelectEventsSuppressed(PR_FALSE); @@ -2448,7 +2448,7 @@ nsMsgDBView::CopyMessages(nsIMsgWindow *window, nsMsgViewIndex *indices, PRInt32 messageArray->AppendElement(msgHdr); // if we are deleting rows, save off the keys if (m_deletingRows) - mIndicesToNoteChange.Add(indices[index]); + mIndicesToNoteChange.AppendElement(indices[index]); } } @@ -2672,7 +2672,7 @@ nsresult nsMsgDBView::RemoveByIndex(nsMsgViewIndex index) if (!IsValidIndex(index)) return NS_MSG_INVALID_DBVIEW_INDEX; m_keys.RemoveAt(index); - m_flags.RemoveAt(index); + m_flags.RemoveElementAt(index); m_levels.RemoveElementAt(index); // the call to NoteChange() has to happen after we remove the key @@ -2708,7 +2708,7 @@ nsresult nsMsgDBView::DeleteMessages(nsIMsgWindow *window, nsMsgViewIndex *indic messageArray->AppendElement(msgHdr); // if we are deleting rows, save off the keys if (m_deletingRows) - mIndicesToNoteChange.Add(indices[index]); + mIndicesToNoteChange.AppendElement(indices[index]); } } @@ -3147,7 +3147,7 @@ nsMsgDBView::DetermineActionsForJunkMsgs(PRBool* movingJunkMessages, PRBool* mar // make a copy of each array and copy them over. nsresult nsMsgDBView::ReverseThreads() { - nsUInt32Array newFlagArray; + nsTArray newFlagArray; nsMsgKeyArray newKeyArray; nsTArray newLevelArray; @@ -3155,7 +3155,7 @@ nsresult nsMsgDBView::ReverseThreads() PRInt32 viewSize = GetSize(); newKeyArray.SetSize(m_keys.GetSize()); - newFlagArray.SetSize(m_flags.GetSize()); + newFlagArray.SetLength(m_flags.Length()); newLevelArray.SetLength(m_levels.Length()); for (sourceIndex = 0, destIndex = viewSize - 1; sourceIndex < viewSize;) @@ -3164,7 +3164,7 @@ nsresult nsMsgDBView::ReverseThreads() PRBool inExpandedThread = PR_FALSE; for (endThread = sourceIndex; endThread < viewSize; endThread++) { - PRUint32 flags = m_flags.GetAt(endThread); + PRUint32 flags = m_flags[endThread]; if (!inExpandedThread && (flags & (MSG_VIEW_FLAG_ISTHREAD|MSG_VIEW_FLAG_HASCHILDREN)) && !(flags & MSG_FLAG_ELIDED)) inExpandedThread = PR_TRUE; else if (flags & MSG_VIEW_FLAG_ISTHREAD) @@ -3181,7 +3181,7 @@ nsresult nsMsgDBView::ReverseThreads() while (endThread >= sourceIndex) { newKeyArray.SetAt(destIndex, m_keys.GetAt(endThread)); - newFlagArray.SetAt(destIndex, m_flags.GetAt(endThread)); + newFlagArray[destIndex] = m_flags[endThread]; newLevelArray[destIndex] = m_levels[endThread]; endThread--; destIndex--; @@ -3192,7 +3192,7 @@ nsresult nsMsgDBView::ReverseThreads() // just assign the new data ptrs to the old arrays and "forget" the new // arrays' data ptrs, so they won't be freed when the arrays are deleted. m_keys.CopyArray(newKeyArray); - m_flags.CopyArray(newFlagArray); + m_flags.SwapElements(newFlagArray); m_levels.SwapElements(newLevelArray); return NS_OK; @@ -3210,9 +3210,9 @@ nsresult nsMsgDBView::ReverseSort() { // swap flags PRUint32 end = num - i - 1; - PRUint32 tempFlags = m_flags.GetAt(i); - m_flags.SetAt(i, m_flags.GetAt(end)); - m_flags.SetAt(end, tempFlags); + PRUint32 tempFlags = m_flags[i]; + m_flags[i] = m_flags[end]; + m_flags[end] = tempFlags; // swap keys nsMsgKey tempKey = m_keys.GetAt(i); @@ -3973,7 +3973,7 @@ NS_IMETHODIMP nsMsgDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOr IdKey *info = (IdKey*)pTemp; pPtrBase[numSoFar] = info; info->id = thisKey; - info->bits = m_flags.GetAt(numSoFar); + info->bits = m_flags[numSoFar]; info->dword = longValue; //info->pad = 0; @@ -4028,7 +4028,7 @@ NS_IMETHODIMP nsMsgDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOr for (PRUint32 i = 0; i < numSoFar; i++) { m_keys.SetAt(i, pPtrBase[i]->id); - m_flags.SetAt(i, pPtrBase[i]->bits); + m_flags[i] = pPtrBase[i]->bits; if (folders) folders->SetElementAt(i, pPtrBase[i]->folder); @@ -4489,8 +4489,8 @@ nsresult nsMsgDBView::CollapseByIndex(nsMsgViewIndex index, PRUint32 *pNumCollap for (int i = 1; i <= threadCount && index + 1 < m_keys.GetSize(); i++) { m_keys.RemoveAt(index + 1); - m_flags.RemoveAt(index + 1); } + m_flags.RemoveElementsAt(index + 1, threadCount); m_levels.RemoveElementsAt(index + 1, threadCount); if (pNumCollapsed != nsnull) *pNumCollapsed = numRemoved; @@ -4701,7 +4701,7 @@ nsresult nsMsgDBView::AddHdr(nsIMsgDBHdr *msgHdr) { PRUint32 flags = 0; #ifdef DEBUG_bienvenu - NS_ASSERTION((int) m_keys.GetSize() == m_flags.GetSize() && (int) m_keys.GetSize() == m_levels.Length(), "view arrays out of sync!"); + NS_ASSERTION(m_keys.GetSize() == m_flags.Length() && m_keys.GetSize() == m_levels.Length(), "view arrays out of sync!"); #endif if (!GetShowingIgnored()) @@ -4735,7 +4735,7 @@ nsresult nsMsgDBView::AddHdr(nsIMsgDBHdr *msgHdr) if (m_sortOrder == nsMsgViewSortOrder::ascending) { m_keys.Add(msgKey); - m_flags.Add(flags); + m_flags.AppendElement(flags); m_levels.AppendElement(levelToAdd); // the call to NoteChange() has to happen after we add the key @@ -4745,7 +4745,7 @@ nsresult nsMsgDBView::AddHdr(nsIMsgDBHdr *msgHdr) else { m_keys.InsertAt(0, msgKey); - m_flags.InsertAt(0, flags); + m_flags.InsertElementAt(0, flags); m_levels.InsertElementAt(0, levelToAdd); // the call to NoteChange() has to happen after we insert the key @@ -4757,7 +4757,7 @@ nsresult nsMsgDBView::AddHdr(nsIMsgDBHdr *msgHdr) else { m_keys.InsertAt(insertIndex, msgKey); - m_flags.InsertAt(insertIndex, flags); + m_flags.InsertElementAt(insertIndex, flags); PRInt32 level = 0; m_levels.InsertElementAt(insertIndex, level); @@ -4829,7 +4829,7 @@ nsresult nsMsgDBView::ListIdsInThreadOrder(nsIMsgThread *threadHdr, nsMsgKey par AdjustReadFlag(msgHdr, &msgFlags); m_keys.SetAt(*viewIndex, msgKey); // ### TODO - how about hasChildren flag? - m_flags.SetAt(*viewIndex, msgFlags & ~MSG_VIEW_FLAGS); + m_flags[*viewIndex] = msgFlags & ~MSG_VIEW_FLAGS; // ### TODO this is going to be tricky - might use enumerators m_levels[*viewIndex] = level; // turn off thread or elided bit if they got turned on (maybe from new only view?) @@ -4855,7 +4855,7 @@ nsresult nsMsgDBView::ListIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex st threadHdr->GetNumChildren(&numChildren); numChildren--; // account for the existing thread root m_keys.InsertAt(viewIndex, 0, numChildren); - m_flags.InsertAt(viewIndex, 0, numChildren); + m_flags.InsertElementsAt(viewIndex, numChildren, 0); m_levels.InsertElementsAt(viewIndex, numChildren, 1); // default unthreaded level // ### need to rework this when we implemented threading in group views. @@ -4879,7 +4879,7 @@ nsresult nsMsgDBView::ListIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex st msgHdr->GetFlags(&msgFlags); AdjustReadFlag(msgHdr, &msgFlags); m_keys.SetAt(viewIndex, msgKey); - m_flags.SetAt(viewIndex, msgFlags & ~MSG_VIEW_FLAGS); + m_flags[viewIndex] = msgFlags & ~MSG_VIEW_FLAGS; // here, we're either flat, or we're grouped - in either case, level is 1 // turn off thread or elided bit if they got turned on (maybe from new only view?) if (i > 0) @@ -4893,7 +4893,7 @@ nsresult nsMsgDBView::ListIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIndex st { NS_NOTREACHED("thread corrupt in db"); m_keys.RemoveAt(viewIndex, numChildren - *pNumListed); - m_flags.RemoveAt(viewIndex, numChildren - *pNumListed); + m_flags.RemoveElementsAt(viewIndex, numChildren - *pNumListed); m_levels.RemoveElementsAt(viewIndex, numChildren - *pNumListed); // if we've listed fewer messages than are in the thread, then the db // is corrupt, and we should invalidate it. @@ -4978,7 +4978,7 @@ nsresult nsMsgDBView::ListUnreadIdsInThread(nsIMsgThread *threadHdr, nsMsgViewIn if (msgKey != topLevelMsgKey) { m_keys.InsertAt(viewIndex, msgKey); - m_flags.InsertAt(viewIndex, msgFlags); + m_flags.InsertElementAt(viewIndex, msgFlags); levelToAdd = FindLevelInThread(msgHdr, startOfThreadViewIndex, viewIndex); m_levels.InsertElementAt(viewIndex, levelToAdd); viewIndex++; @@ -5064,7 +5064,7 @@ NS_IMETHODIMP nsMsgDBView::OnAnnouncerGoingAway(nsIDBChangeAnnouncer *instigator // row count, which get determine from the number of keys. m_keys.RemoveAll(); // be consistent - m_flags.RemoveAll(); + m_flags.Clear(); m_levels.Clear(); // tell the tree all the rows have gone away @@ -5235,7 +5235,7 @@ nsresult nsMsgDBView::MarkThreadRead(nsIMsgThread *threadHdr, nsMsgViewIndex thr { PRBool threadElided = PR_TRUE; if (threadIndex != nsMsgViewIndex_None) - threadElided = (m_flags.GetAt(threadIndex) & MSG_FLAG_ELIDED); + threadElided = (m_flags[threadIndex] & MSG_FLAG_ELIDED); PRUint32 numChildren; threadHdr->GetNumChildren(&numChildren); @@ -5369,7 +5369,7 @@ nsresult nsMsgDBView::NavigateFromPos(nsMsgNavigationTypeValue motion, nsMsgView startIndex = nsMsgViewIndex_None; // note fall thru - is this motion ever used? case nsMsgNavigationType::nextUnreadMessage: for (curIndex = (startIndex == nsMsgViewIndex_None) ? 0 : startIndex; curIndex <= lastIndex && lastIndex != nsMsgViewIndex_None; curIndex++) { - PRUint32 flags = m_flags.GetAt(curIndex); + PRUint32 flags = m_flags[curIndex]; // don't return start index since navigate should move if (!(flags & (MSG_FLAG_READ | MSG_VIEW_FLAG_DUMMY)) && (curIndex != startIndex)) @@ -5638,7 +5638,7 @@ nsresult nsMsgDBView::FindNextFlagged(nsMsgViewIndex startIndex, nsMsgViewIndex { for (curIndex = startIndex; curIndex <= lastIndex; curIndex++) { - PRUint32 flags = m_flags.GetAt(curIndex); + PRUint32 flags = m_flags[curIndex]; if (flags & MSG_FLAG_MARKED) { *pResultIndex = curIndex; @@ -5678,7 +5678,7 @@ nsresult nsMsgDBView::FindPrevUnread(nsMsgKey startKey, nsMsgKey *pResultKey, for (; (int) curIndex >= 0 && (*pResultKey == nsMsgKey_None); curIndex--) { - PRUint32 flags = m_flags.GetAt(curIndex); + PRUint32 flags = m_flags[curIndex]; if (curIndex != startIndex && flags & MSG_VIEW_FLAG_ISTHREAD && flags & MSG_FLAG_ELIDED) { @@ -5720,7 +5720,7 @@ nsresult nsMsgDBView::FindPrevFlagged(nsMsgViewIndex startIndex, nsMsgViewIndex if (curIndex != 0) curIndex--; - PRUint32 flags = m_flags.GetAt(curIndex); + PRUint32 flags = m_flags[curIndex]; if (flags & MSG_FLAG_MARKED) { *pResultIndex = curIndex; @@ -6040,13 +6040,13 @@ nsMsgDBView::OnDeleteCompleted(PRBool aSucceeded) { if (aSucceeded) { - PRUint32 numIndices = mIndicesToNoteChange.GetSize(); + PRUint32 numIndices = mIndicesToNoteChange.Length(); if (numIndices) { if (mTree) { if (numIndices > 1) - mIndicesToNoteChange.QuickSort(CompareViewIndices); + mIndicesToNoteChange.Sort(); // the call to NoteChange() has to happen after we are done removing the keys // as NoteChange() will call RowCountChanged() which will call our GetRowCount() @@ -6057,7 +6057,7 @@ nsMsgDBView::OnDeleteCompleted(PRBool aSucceeded) if (numIndices > 1) mTree->EndUpdateBatch(); } - mIndicesToNoteChange.RemoveAll(); + mIndicesToNoteChange.Clear(); } } } @@ -6081,7 +6081,7 @@ PRBool nsMsgDBView::OfflineMsgSelected(nsMsgViewIndex * indices, PRInt32 numIndi for (nsMsgViewIndex index = 0; index < (nsMsgViewIndex) numIndices; index++) { - PRUint32 flags = m_flags.GetAt(indices[index]); + PRUint32 flags = m_flags[indices[index]]; if ((flags & MSG_FLAG_OFFLINE)) return PR_TRUE; } @@ -6092,7 +6092,7 @@ PRBool nsMsgDBView::NonDummyMsgSelected(nsMsgViewIndex * indices, PRInt32 numInd { for (nsMsgViewIndex index = 0; index < (nsMsgViewIndex) numIndices; index++) { - PRUint32 flags = m_flags.GetAt(indices[index]); + PRUint32 flags = m_flags[indices[index]]; if (!(flags & MSG_VIEW_FLAG_DUMMY)) return PR_TRUE; } @@ -6319,7 +6319,7 @@ nsresult nsMsgDBView::CopyDBView(nsMsgDBView *aNewMsgDBView, nsIMessenger *aMess aNewMsgDBView->mShowSizeInLines = mShowSizeInLines; aNewMsgDBView->mHeaderParser = mHeaderParser; aNewMsgDBView->mDeleteModel = mDeleteModel; - aNewMsgDBView->m_flags.CopyArray(m_flags); + aNewMsgDBView->m_flags = m_flags; aNewMsgDBView->m_levels = m_levels; aNewMsgDBView->m_keys.CopyArray(m_keys); diff --git a/mozilla/mailnews/base/src/nsMsgDBView.h b/mozilla/mailnews/base/src/nsMsgDBView.h index 8eb307ac885..ed38730f2de 100644 --- a/mozilla/mailnews/base/src/nsMsgDBView.h +++ b/mozilla/mailnews/base/src/nsMsgDBView.h @@ -349,7 +349,7 @@ protected: void FreeAll(nsVoidArray *ptrs); void ClearHdrCache(); nsMsgKeyArray m_keys; - nsUInt32Array m_flags; + nsTArray m_flags; nsTArray m_levels; nsMsgImapDeleteModel mDeleteModel; @@ -411,7 +411,7 @@ protected: nsMsgViewIndex *mJunkIndices; PRUint32 mNumJunkIndices; - nsUInt32Array mIndicesToNoteChange; + nsTArray mIndicesToNoteChange; // the saved search views keep track of the XX most recently deleted msg ids, so that if the // delete is undone, we can add the msg back to the search results, even if it no longer diff --git a/mozilla/mailnews/base/src/nsMsgGroupView.cpp b/mozilla/mailnews/base/src/nsMsgGroupView.cpp index 61cfeea401c..8c6191a593c 100755 --- a/mozilla/mailnews/base/src/nsMsgGroupView.cpp +++ b/mozilla/mailnews/base/src/nsMsgGroupView.cpp @@ -326,7 +326,7 @@ nsMsgGroupThread *nsMsgGroupView::AddHdrToThread(nsIMsgDBHdr *msgHdr, PRBool *pN if (insertIndex == nsMsgViewIndex_None) insertIndex = m_keys.GetSize(); m_keys.InsertAt(insertIndex, msgKey); - m_flags.InsertAt(insertIndex, msgFlags | MSG_VIEW_FLAG_ISTHREAD | MSG_FLAG_ELIDED); + m_flags.InsertElementAt(insertIndex, msgFlags | MSG_VIEW_FLAG_ISTHREAD | MSG_FLAG_ELIDED); m_levels.InsertElementAt(insertIndex, 0); // if grouped by date, insert dummy header for "age" if (GroupViewUsesDummyRow()) @@ -434,7 +434,7 @@ nsresult nsMsgGroupView::HandleDayChange() // row count, which get determine from the number of keys. m_keys.RemoveAll(); // be consistent - m_flags.RemoveAll(); + m_flags.Clear(); m_levels.Clear(); // this needs to happen after we remove all the keys, since RowCountChanged() will call our GetRowCount() @@ -514,7 +514,7 @@ nsresult nsMsgGroupView::OnNewHeader(nsIMsgDBHdr *newHdr, nsMsgKey aParentKey, P } m_keys.InsertAt(threadIndex + msgIndexInThread, msgKey); - m_flags.InsertAt(threadIndex + msgIndexInThread, msgFlags); + m_flags.InsertElementAt(threadIndex + msgIndexInThread, msgFlags); if (msgIndexInThread > 0) { m_levels.InsertElementAt(threadIndex + msgIndexInThread, 1); @@ -587,7 +587,7 @@ NS_IMETHODIMP nsMsgGroupView::OnHdrDeleted(nsIMsgDBHdr *aHdrDeleted, nsMsgKey aP { nsMsgDBView::RemoveByIndex(viewIndexOfThread - 1); if (m_deletingRows) - mIndicesToNoteChange.Add(viewIndexOfThread - 1); + mIndicesToNoteChange.AppendElement(viewIndexOfThread - 1); } } else if (rootDeleted && viewIndexOfThread > 0) diff --git a/mozilla/mailnews/base/src/nsMsgQuickSearchDBView.cpp b/mozilla/mailnews/base/src/nsMsgQuickSearchDBView.cpp index 00646e2aa12..8ee0c3d37a6 100644 --- a/mozilla/mailnews/base/src/nsMsgQuickSearchDBView.cpp +++ b/mozilla/mailnews/base/src/nsMsgQuickSearchDBView.cpp @@ -307,7 +307,7 @@ nsMsgQuickSearchDBView::OnNewSearch() m_keys.RemoveAll(); m_levels.Clear(); - m_flags.RemoveAll(); + m_flags.Clear(); m_hdrHits.Clear(); // this needs to happen after we remove all the keys, since RowCountChanged() will call our GetRowCount() if (mTree) @@ -454,7 +454,7 @@ nsresult nsMsgQuickSearchDBView::SortThreads(nsMsgViewSortTypeValue sortType, ns } m_keys.RemoveAll(); m_levels.Clear(); - m_flags.RemoveAll(); + m_flags.Clear(); // now we've build up the list of thread ids - need to build the view // from that. So for each thread id, we need to list the messages in the thread. PRUint32 numThreads = threadRootIds.GetSize(); @@ -476,7 +476,7 @@ nsresult nsMsgQuickSearchDBView::SortThreads(nsMsgViewSortTypeValue sortType, ns displayRootHdr->GetFlags(&rootFlags); rootFlags |= MSG_VIEW_FLAG_ISTHREAD; m_keys.Add(rootKey); - m_flags.Add(rootFlags); + m_flags.AppendElement(rootFlags); m_levels.AppendElement(0); nsMsgViewIndex startOfThreadViewIndex = m_keys.GetSize() - 1; @@ -519,11 +519,11 @@ nsresult nsMsgQuickSearchDBView::ListIdsInThread(nsIMsgThread *threadHdr, nsMsg msgHdr->GetFlags(&childFlags); PRUint8 levelToAdd; m_keys.InsertAt(viewIndex, msgKey); - m_flags.InsertAt(viewIndex, childFlags); + m_flags.InsertElementAt(viewIndex, childFlags); if (! (rootFlags & MSG_VIEW_FLAG_HASCHILDREN)) { rootFlags |= MSG_VIEW_FLAG_HASCHILDREN; - m_flags.SetAt(startOfThreadViewIndex, rootFlags); + m_flags[startOfThreadViewIndex] = rootFlags; } levelToAdd = FindLevelInThread(msgHdr, startOfThreadViewIndex, viewIndex); m_levels.InsertElementAt(viewIndex, levelToAdd); diff --git a/mozilla/mailnews/base/src/nsMsgSearchDBView.cpp b/mozilla/mailnews/base/src/nsMsgSearchDBView.cpp index a9379d4b760..f0bd74bf306 100644 --- a/mozilla/mailnews/base/src/nsMsgSearchDBView.cpp +++ b/mozilla/mailnews/base/src/nsMsgSearchDBView.cpp @@ -48,6 +48,7 @@ #include "nsMsgUtils.h" #include "nsITreeColumns.h" #include "nsIMsgMessageService.h" +#include "nsAutoPtr.h" nsMsgSearchDBView::nsMsgSearchDBView() { @@ -110,8 +111,6 @@ nsMsgSearchDBView::CopyDBView(nsMsgDBView *aNewMsgDBView, nsIMessenger *aMesseng m_dbToUseList[i]->AddListener(newMsgDBView); } - // nsUInt32Array* mTestIndices; - return NS_OK; } @@ -193,7 +192,7 @@ nsresult nsMsgSearchDBView::AddHdrFromFolder(nsIMsgDBHdr *msgHdr, nsISupports *f msgHdr->GetFlags(&msgFlags); m_keys.Add(msgKey); m_levels.AppendElement(0); - m_flags.Add(msgFlags); + m_flags.AppendElement(msgFlags); // this needs to be called after we add the key, since RowCountChanged() will call our GetRowCount() if (mTree) @@ -253,7 +252,7 @@ nsMsgSearchDBView::OnNewSearch() m_folders->Clear(); m_keys.RemoveAll(); m_levels.Clear(); - m_flags.RemoveAll(); + m_flags.Clear(); // needs to happen after we remove the keys, since RowCountChanged() will call our GetRowCount() if (mTree) @@ -317,13 +316,13 @@ NS_IMETHODIMP nsMsgSearchDBView::DoCommand(nsMsgViewCommandTypeValue command) // ApplyCommandToIndices with the command and the indices in the // selection that are from that folder. - nsUInt32Array *indexArrays; + nsAutoArrayPtr > indexArrays; PRInt32 numArrays; - rv = PartitionSelectionByFolder(indices, numIndices, &indexArrays, &numArrays); + rv = PartitionSelectionByFolder(indices, numIndices, getter_Transfers(indexArrays), &numArrays); NS_ENSURE_SUCCESS(rv, rv); for (PRInt32 folderIndex = 0; folderIndex < numArrays; folderIndex++) { - rv = ApplyCommandToIndices(command, indexArrays[folderIndex].GetData(), indexArrays[folderIndex].GetSize()); + rv = ApplyCommandToIndices(command, indexArrays[folderIndex].Elements(), indexArrays[folderIndex].Length()); NS_ENSURE_SUCCESS(rv, rv); } @@ -378,38 +377,45 @@ nsMsgSearchDBView::CopyMessages(nsIMsgWindow *window, nsMsgViewIndex *indices, P } nsresult -nsMsgSearchDBView::PartitionSelectionByFolder(nsMsgViewIndex *indices, PRInt32 numIndices, nsUInt32Array **indexArrays, PRInt32 *numArrays) +nsMsgSearchDBView::PartitionSelectionByFolder(nsMsgViewIndex *indices, PRInt32 numIndices, nsTArray **indexArrays, PRInt32 *numArrays) { - nsresult rv = NS_OK; - nsCOMPtr uniqueFoldersSelected = do_CreateInstance(NS_SUPPORTSARRAY_CONTRACTID, &rv); + nsMsgViewIndex i; + PRInt32 folderIndex; + nsCOMArray uniqueFoldersSelected; + nsTArray numIndicesSelected; mCurIndex = 0; //Build unique folder list based on headers selected by the user - for (nsMsgViewIndex i = 0; i < (nsMsgViewIndex) numIndices; i++) + for (i = 0; i < (nsMsgViewIndex) numIndices; i++) { - nsCOMPtr curSupports = getter_AddRefs(m_folders->ElementAt(indices[i])); - if ( uniqueFoldersSelected->IndexOf(curSupports) < 0) - uniqueFoldersSelected->AppendElement(curSupports); + nsCOMPtr curSupports = dont_AddRef(m_folders->ElementAt(indices[i])); + folderIndex = uniqueFoldersSelected.IndexOf(curSupports); + if (folderIndex < 0) + { + uniqueFoldersSelected.AppendObject(curSupports); + numIndicesSelected.AppendElement(1); + } + else + { + numIndicesSelected[folderIndex]++; + } } - PRUint32 numFolders =0; - rv = uniqueFoldersSelected->Count(&numFolders); //group the headers selected by each folder - *indexArrays = new nsUInt32Array[numFolders]; + PRInt32 numFolders = uniqueFoldersSelected.Count(); + *indexArrays = new nsTArray[numFolders]; *numArrays = numFolders; NS_ENSURE_TRUE(*indexArrays, NS_ERROR_OUT_OF_MEMORY); - for (PRUint32 folderIndex=0; folderIndex < numFolders; folderIndex++) + for (folderIndex = 0; folderIndex < numFolders; folderIndex++) { - nsCOMPtr curFolder = - do_QueryElementAt(uniqueFoldersSelected, folderIndex, &rv); - for (nsMsgViewIndex i = 0; i < (nsMsgViewIndex) numIndices; i++) - { - nsCOMPtr msgFolder = do_QueryElementAt(m_folders, - indices[i], &rv); - if (NS_SUCCEEDED(rv) && msgFolder && msgFolder == curFolder) - (*indexArrays)[folderIndex].Add(indices[i]); - } + (*indexArrays)[folderIndex].SetCapacity(numIndicesSelected[folderIndex]); } - return rv; + for (i = 0; i < (nsMsgViewIndex) numIndices; i++) + { + nsCOMPtr curSupports = getter_AddRefs(m_folders->ElementAt(indices[i])); + PRInt32 folderIndex = uniqueFoldersSelected.IndexOf(curSupports); + (*indexArrays)[folderIndex].AppendElement(indices[i]); + } + return NS_OK; } diff --git a/mozilla/mailnews/base/src/nsMsgSearchDBView.h b/mozilla/mailnews/base/src/nsMsgSearchDBView.h index 0e974c35b6a..d89c0113a49 100644 --- a/mozilla/mailnews/base/src/nsMsgSearchDBView.h +++ b/mozilla/mailnews/base/src/nsMsgSearchDBView.h @@ -84,7 +84,7 @@ protected: virtual nsresult DeleteMessages(nsIMsgWindow *window, nsMsgViewIndex *indices, PRInt32 numIndices, PRBool deleteStorage); nsresult GetFoldersAndHdrsForSelection(nsMsgViewIndex *indices, PRInt32 numIndices); nsresult GroupSearchResultsByFolder(); - nsresult PartitionSelectionByFolder(nsMsgViewIndex *indices, PRInt32 numIndices, nsUInt32Array **indexArrays, PRInt32 *numArrays); + nsresult PartitionSelectionByFolder(nsMsgViewIndex *indices, PRInt32 numIndices, nsTArray **indexArrays, PRInt32 *numArrays); virtual nsresult ApplyCommandToIndicesWithFolder(nsMsgViewCommandTypeValue command, nsMsgViewIndex* indices, PRInt32 numIndices, nsIMsgFolder *destFolder); diff --git a/mozilla/mailnews/base/src/nsMsgThreadedDBView.cpp b/mozilla/mailnews/base/src/nsMsgThreadedDBView.cpp index 1d7a27b40f6..be4419a1929 100644 --- a/mozilla/mailnews/base/src/nsMsgThreadedDBView.cpp +++ b/mozilla/mailnews/base/src/nsMsgThreadedDBView.cpp @@ -103,9 +103,9 @@ NS_IMETHODIMP nsMsgThreadedDBView::Open(nsIMsgFolder *folder, nsMsgViewSortTypeV PRInt32 unreadMsgsInView = 0; if (!(m_viewFlags & nsMsgViewFlagsType::kThreadedDisplay)) { - for (PRInt32 i = 0; i < m_flags.GetSize(); i++) + for (PRInt32 i = 0; i < m_flags.Length(); i++) { - if (! (m_flags.GetAt(i) & MSG_FLAG_READ)) + if (! (m_flags[i] & MSG_FLAG_READ)) unreadMsgsInView++; } if (unreadMessages != unreadMsgsInView) @@ -126,10 +126,10 @@ nsresult nsMsgThreadedDBView::InitThreadedView(PRInt32 *pCount) nsresult rv; m_keys.RemoveAll(); - m_flags.RemoveAll(); + m_flags.Clear(); m_levels.Clear(); m_prevKeys.RemoveAll(); - m_prevFlags.RemoveAll(); + m_prevFlags.Clear(); m_prevLevels.Clear(); m_havePrevView = PR_FALSE; nsresult getSortrv = NS_OK; // ### TODO m_db->GetSortInfo(&sortType, &sortOrder); @@ -187,7 +187,7 @@ nsresult nsMsgThreadedDBView::SortThreads(nsMsgViewSortTypeValue sortType, nsMsg } } m_keys.SetSize(numThreads); - m_flags.SetSize(numThreads); + m_flags.SetLength(numThreads); m_levels.SetLength(numThreads); //m_viewFlags &= ~nsMsgViewFlagsType::kThreadedDisplay; m_sortType = nsMsgViewSortType::byNone; // sort from scratch @@ -239,7 +239,7 @@ nsresult nsMsgThreadedDBView::AddKeys(nsMsgKey *pKeys, PRInt32 *pFlags, const ch PRInt32 numAdded = 0; // Allocate enough space first to avoid memory allocation/deallocation. m_keys.AllocateSpace(numKeysToAdd+m_keys.GetSize()); - m_flags.AllocateSpace(numKeysToAdd+m_flags.GetSize()); + m_flags.SetCapacity(m_flags.Length() + numKeysToAdd); m_levels.SetCapacity(m_levels.Length() + numKeysToAdd); for (PRInt32 i = 0; i < numKeysToAdd; i++) { @@ -256,7 +256,7 @@ nsresult nsMsgThreadedDBView::AddKeys(nsMsgKey *pKeys, PRInt32 *pFlags, const ch // should this be persistent? Doesn't seem to need to be. flag |= MSG_VIEW_FLAG_ISTHREAD; m_keys.Add(pKeys[i]); - m_flags.Add(flag); + m_flags.AppendElement(flag); m_levels.AppendElement(pLevels[i]); numAdded++; // we expand as we build the view, which allows us to insert at the end of the key array, @@ -309,8 +309,7 @@ NS_IMETHODIMP nsMsgThreadedDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgVi // restore saved id array and flags array m_keys.RemoveAll(); m_keys.InsertAt(0, &m_prevKeys); - m_flags.RemoveAll(); - m_flags.InsertAt(0, &m_prevFlags); + m_flags = m_prevFlags; m_levels = m_prevLevels; m_sortValid = PR_TRUE; @@ -354,15 +353,14 @@ NS_IMETHODIMP nsMsgThreadedDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgVi // going from SortByThread to non-thread sort - must build new key, level,and flags arrays m_prevKeys.RemoveAll(); m_prevKeys.InsertAt(0, &m_keys); - m_prevFlags.RemoveAll(); - m_prevFlags.InsertAt(0, &m_flags); + m_prevFlags = m_flags; m_prevLevels = m_levels; // do this before we sort, so that we'll use the cheap method // of expanding. m_viewFlags &= ~(nsMsgViewFlagsType::kThreadedDisplay | nsMsgViewFlagsType::kGroupBySort); ExpandAll(); // m_idArray.RemoveAll(); - // m_flags.RemoveAll(); + // m_flags.Clear(); m_havePrevView = PR_TRUE; } } @@ -507,7 +505,7 @@ void nsMsgThreadedDBView::OnExtraFlagChanged(nsMsgViewIndex index, PRUint32 extr nsMsgViewIndex prevViewIndex = m_prevKeys.FindIndex(keyChanged); if (prevViewIndex != nsMsgViewIndex_None) { - PRUint32 prevFlag = m_prevFlags.GetAt(prevViewIndex); + PRUint32 prevFlag = m_prevFlags[prevViewIndex]; // don't want to change the elided bit, or has children or is thread if (prevFlag & MSG_FLAG_ELIDED) extraFlag |= MSG_FLAG_ELIDED; @@ -521,7 +519,7 @@ void nsMsgThreadedDBView::OnExtraFlagChanged(nsMsgViewIndex index, PRUint32 extr extraFlag |= MSG_VIEW_FLAG_HASCHILDREN; else extraFlag &= ~MSG_VIEW_FLAG_HASCHILDREN; - m_prevFlags.SetAt(prevViewIndex, extraFlag); // will this be right? + m_prevFlags[prevViewIndex] = extraFlag; // will this be right? } } } @@ -541,7 +539,7 @@ void nsMsgThreadedDBView::ClearPrevIdArray() { m_prevKeys.RemoveAll(); m_prevLevels.Clear(); - m_prevFlags.RemoveAll(); + m_prevFlags.Clear(); m_havePrevView = PR_FALSE; } @@ -627,7 +625,7 @@ nsresult nsMsgThreadedDBView::OnNewHeader(nsIMsgDBHdr *newHdr, nsMsgKey aParentK insertIndex = GetInsertInfoForNewHdr(newHdr, parentIndex, level); } m_keys.InsertAt(insertIndex, newKey); - m_flags.InsertAt(insertIndex, newFlags, 1); + m_flags.InsertElementAt(insertIndex, newFlags); m_levels.InsertElementAt(insertIndex, level); // the call to NoteChange() has to happen after we add the key @@ -767,7 +765,7 @@ nsresult nsMsgThreadedDBView::RemoveByIndex(nsMsgViewIndex index) msgHdr->GetFlags(&flag); if (numThreadChildren > 1) flag |= MSG_VIEW_FLAG_ISTHREAD | MSG_VIEW_FLAG_HASCHILDREN; - m_flags.SetAtGrow(index, flag); + m_flags[index] = flag; m_levels[index] = 0; } } diff --git a/mozilla/mailnews/base/src/nsMsgThreadedDBView.h b/mozilla/mailnews/base/src/nsMsgThreadedDBView.h index ab9197c4aae..577b6dfbf56 100644 --- a/mozilla/mailnews/base/src/nsMsgThreadedDBView.h +++ b/mozilla/mailnews/base/src/nsMsgThreadedDBView.h @@ -78,7 +78,7 @@ protected: // between two views is quick (e.g., threaded and flat sorted by date). PRBool m_havePrevView; nsMsgKeyArray m_prevKeys; //this is used for caching non-threaded view. - nsUInt32Array m_prevFlags; + nsTArray m_prevFlags; nsTArray m_prevLevels; nsCOMPtr m_threadEnumerator; }; diff --git a/mozilla/mailnews/base/src/nsMsgXFVirtualFolderDBView.cpp b/mozilla/mailnews/base/src/nsMsgXFVirtualFolderDBView.cpp index 6e76f44e628..c5d3e2a0466 100755 --- a/mozilla/mailnews/base/src/nsMsgXFVirtualFolderDBView.cpp +++ b/mozilla/mailnews/base/src/nsMsgXFVirtualFolderDBView.cpp @@ -161,7 +161,7 @@ nsresult nsMsgXFVirtualFolderDBView::InsertHdrFromFolder(nsIMsgDBHdr *msgHdr, ns msgHdr->GetMessageKey(&msgKey); msgHdr->GetFlags(&msgFlags); m_keys.InsertAt(insertIndex, msgKey); - m_flags.InsertAt(insertIndex, msgFlags); + m_flags.InsertElementAt(insertIndex, msgFlags); m_folders->InsertElementAt(folder, insertIndex); m_levels.InsertElementAt(insertIndex, 0); @@ -293,7 +293,7 @@ nsMsgXFVirtualFolderDBView::OnSearchDone(nsresult status) // folder - easier than trying to keep the count up to date in the face of // search hits coming in while the user is reading/deleting messages. PRInt32 numUnread = 0; - for (PRInt32 i = 0; i < m_flags.GetSize(); i++) + for (PRUint32 i = 0; i < m_flags.Length(); i++) if (!(m_flags[i] & MSG_FLAG_READ)) numUnread++; dbFolderInfo->SetNumUnreadMessages(numUnread); @@ -323,7 +323,7 @@ nsMsgXFVirtualFolderDBView::OnNewSearch() m_folders->Clear(); m_keys.RemoveAll(); m_levels.Clear(); - m_flags.RemoveAll(); + m_flags.Clear(); // needs to happen after we remove the keys, since RowCountChanged() will call our GetRowCount() if (mTree)