1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3  * License, v. 2.0. If a copy of the MPL was not distributed with this
4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 
6 #ifndef _nsMsgQuickSearchDBView_H_
7 #define _nsMsgQuickSearchDBView_H_
8 
9 #include "mozilla/Attributes.h"
10 #include "nsMsgThreadedDBView.h"
11 #include "nsIMsgSearchNotify.h"
12 #include "nsIMsgSearchSession.h"
13 #include "nsCOMArray.h"
14 #include "nsIMsgHdr.h"
15 #include "nsIWeakReferenceUtils.h"
16 
17 class nsMsgQuickSearchDBView : public nsMsgThreadedDBView,
18                                public nsIMsgSearchNotify {
19  public:
20   nsMsgQuickSearchDBView();
21 
22   NS_DECL_ISUPPORTS_INHERITED
23   NS_DECL_NSIMSGSEARCHNOTIFY
24 
GetViewName(void)25   virtual const char* GetViewName(void) override { return "QuickSearchView"; }
26   NS_IMETHOD Open(nsIMsgFolder* folder, nsMsgViewSortTypeValue sortType,
27                   nsMsgViewSortOrderValue sortOrder,
28                   nsMsgViewFlagsTypeValue viewFlags, int32_t* pCount) override;
29   NS_IMETHOD OpenWithHdrs(nsIMsgEnumerator* aHeaders,
30                           nsMsgViewSortTypeValue aSortType,
31                           nsMsgViewSortOrderValue aSortOrder,
32                           nsMsgViewFlagsTypeValue aViewFlags,
33                           int32_t* aCount) override;
34   NS_IMETHOD CloneDBView(nsIMessenger* aMessengerInstance,
35                          nsIMsgWindow* aMsgWindow,
36                          nsIMsgDBViewCommandUpdater* aCommandUpdater,
37                          nsIMsgDBView** _retval) override;
38   NS_IMETHOD CopyDBView(nsMsgDBView* aNewMsgDBView,
39                         nsIMessenger* aMessengerInstance,
40                         nsIMsgWindow* aMsgWindow,
41                         nsIMsgDBViewCommandUpdater* aCmdUpdater) override;
42   NS_IMETHOD DoCommand(nsMsgViewCommandTypeValue aCommand) override;
43   NS_IMETHOD GetViewType(nsMsgViewTypeValue* aViewType) override;
44   NS_IMETHOD SetViewFlags(nsMsgViewFlagsTypeValue aViewFlags) override;
45   NS_IMETHOD SetSearchSession(nsIMsgSearchSession* aSearchSession) override;
46   NS_IMETHOD GetSearchSession(nsIMsgSearchSession** aSearchSession) override;
47   NS_IMETHOD OnHdrFlagsChanged(nsIMsgDBHdr* aHdrChanged, uint32_t aOldFlags,
48                                uint32_t aNewFlags,
49                                nsIDBChangeListener* aInstigator) override;
50   NS_IMETHOD OnHdrPropertyChanged(nsIMsgDBHdr* aHdrToChange, bool aPreChange,
51                                   uint32_t* aStatus,
52                                   nsIDBChangeListener* aInstigator) override;
53   NS_IMETHOD OnHdrDeleted(nsIMsgDBHdr* aHdrDeleted, nsMsgKey aParentKey,
54                           int32_t aFlags,
55                           nsIDBChangeListener* aInstigator) override;
56   NS_IMETHOD GetNumMsgsInView(int32_t* aNumMsgs) override;
57 
58  protected:
59   virtual ~nsMsgQuickSearchDBView();
60   nsWeakPtr m_searchSession;
61   nsTArray<nsMsgKey> m_origKeys;
62   bool m_usingCachedHits;
63   bool m_cacheEmpty;
64   nsCOMArray<nsIMsgDBHdr> m_hdrHits;
65   virtual nsresult AddHdr(nsIMsgDBHdr* msgHdr,
66                           nsMsgViewIndex* resultIndex = nullptr) override;
67   virtual nsresult OnNewHeader(nsIMsgDBHdr* newHdr, nsMsgKey aParentKey,
68                                bool ensureListed) override;
69   virtual nsresult DeleteMessages(nsIMsgWindow* window,
70                                   nsTArray<nsMsgViewIndex> const& selection,
71                                   bool deleteStorage) override;
72   virtual nsresult SortThreads(nsMsgViewSortTypeValue sortType,
73                                nsMsgViewSortOrderValue sortOrder) override;
74   virtual nsresult GetFirstMessageHdrToDisplayInThread(
75       nsIMsgThread* threadHdr, nsIMsgDBHdr** result) override;
76   virtual nsresult ExpansionDelta(nsMsgViewIndex index,
77                                   int32_t* expansionDelta) override;
78   virtual nsresult ListCollapsedChildren(
79       nsMsgViewIndex viewIndex,
80       nsTArray<RefPtr<nsIMsgDBHdr>>& messageArray) override;
81   virtual nsresult ListIdsInThread(nsIMsgThread* threadHdr,
82                                    nsMsgViewIndex startOfThreadViewIndex,
83                                    uint32_t* pNumListed) override;
84   virtual nsresult ListIdsInThreadOrder(nsIMsgThread* threadHdr,
85                                         nsMsgKey parentKey, uint32_t level,
86                                         nsMsgViewIndex* viewIndex,
87                                         uint32_t* pNumListed) override;
88   virtual nsresult ListIdsInThreadOrder(nsIMsgThread* threadHdr,
89                                         nsMsgKey parentKey, uint32_t level,
90                                         uint32_t callLevel, nsMsgKey keyToSkip,
91                                         nsMsgViewIndex* viewIndex,
92                                         uint32_t* pNumListed);
93   virtual nsresult GetMessageEnumerator(nsIMsgEnumerator** enumerator) override;
94   void SavePreSearchInfo();
95   void ClearPreSearchInfo();
96 };
97 
98 #endif
99