/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef _nsMsgThreadedDBView_H_ #define _nsMsgThreadedDBView_H_ #include "mozilla/Attributes.h" #include "nsMsgGroupView.h" class nsMsgThreadedDBView : public nsMsgGroupView { public: nsMsgThreadedDBView(); virtual ~nsMsgThreadedDBView(); NS_IMETHOD Open(nsIMsgFolder* folder, nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder, nsMsgViewFlagsTypeValue viewFlags, int32_t* pCount) override; NS_IMETHOD CloneDBView(nsIMessenger* aMessengerInstance, nsIMsgWindow* aMsgWindow, nsIMsgDBViewCommandUpdater* aCommandUpdater, nsIMsgDBView** _retval) override; NS_IMETHOD Close() override; NS_IMETHOD Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder) override; NS_IMETHOD GetViewType(nsMsgViewTypeValue* aViewType) override; NS_IMETHOD OnParentChanged(nsMsgKey aKeyChanged, nsMsgKey oldParent, nsMsgKey newParent, nsIDBChangeListener* aInstigator) override; protected: virtual const char* GetViewName(void) override { return "ThreadedDBView"; } nsresult InitThreadedView(int32_t& count); virtual nsresult OnNewHeader(nsIMsgDBHdr* newHdr, nsMsgKey aParentKey, bool ensureListed) override; virtual nsresult AddMsgToThreadNotInView(nsIMsgThread* threadHdr, nsIMsgDBHdr* msgHdr, bool ensureListed); nsresult InitSort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder); virtual nsresult SortThreads(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder); virtual void OnExtraFlagChanged(nsMsgViewIndex index, uint32_t extraFlag) override; virtual void OnHeaderAddedOrDeleted() override; void ClearPrevIdArray(); virtual nsresult RemoveByIndex(nsMsgViewIndex index) override; nsMsgViewIndex GetInsertInfoForNewHdr(nsIMsgDBHdr* newHdr, nsMsgViewIndex threadIndex, int32_t targetLevel); void MoveThreadAt(nsMsgViewIndex threadIndex); // these are used to save off the previous view so that bopping back and forth // between two views is quick (e.g., threaded and flat sorted by date). bool m_havePrevView; nsTArray m_prevKeys; // this is used for caching non-threaded view. nsTArray m_prevFlags; nsTArray m_prevLevels; }; #endif