/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM ../../../dist/idl/nsIMsgDBView.idl
 */

#ifndef __gen_nsIMsgDBView_h__
#define __gen_nsIMsgDBView_h__


#ifndef __gen_nsISupports_h__
#include "nsISupports.h"
#endif

#ifndef __gen_MailNewsTypes2_h__
#include "MailNewsTypes2.h"
#endif

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif
class nsIMsgFolder; /* forward declaration */

class nsIMsgWindow; /* forward declaration */

class nsIMessenger; /* forward declaration */

class nsIMsgDBHdr; /* forward declaration */

class nsIMsgThread; /* forward declaration */

class nsIMsgDBViewCommandUpdater; /* forward declaration */

class nsIMsgDatabase; /* forward declaration */

class nsIMsgSearchSession; /* forward declaration */

class nsIMutableArray; /* forward declaration */

class nsISimpleEnumerator; /* forward declaration */

class nsIMsgCustomColumnHandler; /* forward declaration */

typedef int32_t  nsMsgViewNotificationCodeValue;

typedef int32_t  nsMsgViewCommandCheckStateValue;

typedef int32_t  nsMsgViewCommandTypeValue;

typedef int32_t  nsMsgNavigationTypeValue;


/* starting interface:    nsMsgViewSortOrder */
#define NS_MSGVIEWSORTORDER_IID_STR "682a18be-fd18-11d4-a5be-0060b0fc04b7"

#define NS_MSGVIEWSORTORDER_IID \
  {0x682a18be, 0xfd18, 0x11d4, \
    { 0xa5, 0xbe, 0x00, 0x60, 0xb0, 0xfc, 0x04, 0xb7 }}

class NS_NO_VTABLE nsMsgViewSortOrder {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_MSGVIEWSORTORDER_IID)

  enum {
    none = 0,
    ascending = 1,
    descending = 2
  };

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsMsgViewSortOrder, NS_MSGVIEWSORTORDER_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSMSGVIEWSORTORDER \

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSMSGVIEWSORTORDER(_to) \

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSMSGVIEWSORTORDER(_to) \

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public nsMsgViewSortOrder
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSMSGVIEWSORTORDER

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS(_MYCLASS_, nsMsgViewSortOrder)

_MYCLASS_::_MYCLASS_()
{
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* End of implementation class template. */
#endif


/* starting interface:    nsMsgViewType */
#define NS_MSGVIEWTYPE_IID_STR "f28a1cdf-06c3-4e98-8f66-f49991670071"

#define NS_MSGVIEWTYPE_IID \
  {0xf28a1cdf, 0x06c3, 0x4e98, \
    { 0x8f, 0x66, 0xf4, 0x99, 0x91, 0x67, 0x00, 0x71 }}

class NS_NO_VTABLE nsMsgViewType {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_MSGVIEWTYPE_IID)

  enum {
    eShowAllThreads = 0,
    eShowThreadsWithUnread = 2,
    eShowWatchedThreadsWithUnread = 3,
    eShowQuickSearchResults = 4,
    eShowVirtualFolderResults = 5,
    eShowSearch = 6
  };

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsMsgViewType, NS_MSGVIEWTYPE_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSMSGVIEWTYPE \

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSMSGVIEWTYPE(_to) \

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSMSGVIEWTYPE(_to) \

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public nsMsgViewType
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSMSGVIEWTYPE

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS(_MYCLASS_, nsMsgViewType)

_MYCLASS_::_MYCLASS_()
{
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* End of implementation class template. */
#endif


/* starting interface:    nsMsgViewFlagsType */
#define NS_MSGVIEWFLAGSTYPE_IID_STR "64852276-1dd2-11b2-8103-afe12002c053"

#define NS_MSGVIEWFLAGSTYPE_IID \
  {0x64852276, 0x1dd2, 0x11b2, \
    { 0x81, 0x03, 0xaf, 0xe1, 0x20, 0x02, 0xc0, 0x53 }}

class NS_NO_VTABLE nsMsgViewFlagsType {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_MSGVIEWFLAGSTYPE_IID)

  enum {
    kNone = 0,
    kThreadedDisplay = 1,
    kShowIgnored = 8,
    kUnreadOnly = 16,
    kExpandAll = 32,
    kGroupBySort = 64
  };

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsMsgViewFlagsType, NS_MSGVIEWFLAGSTYPE_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSMSGVIEWFLAGSTYPE \

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSMSGVIEWFLAGSTYPE(_to) \

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSMSGVIEWFLAGSTYPE(_to) \

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public nsMsgViewFlagsType
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSMSGVIEWFLAGSTYPE

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS(_MYCLASS_, nsMsgViewFlagsType)

_MYCLASS_::_MYCLASS_()
{
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* End of implementation class template. */
#endif


/* starting interface:    nsMsgViewSortType */
#define NS_MSGVIEWSORTTYPE_IID_STR "b94fc200-3008-420a-85c7-67842f133ef8"

#define NS_MSGVIEWSORTTYPE_IID \
  {0xb94fc200, 0x3008, 0x420a, \
    { 0x85, 0xc7, 0x67, 0x84, 0x2f, 0x13, 0x3e, 0xf8 }}

class NS_NO_VTABLE nsMsgViewSortType {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_MSGVIEWSORTTYPE_IID)

  enum {
    byNone = 17,
    byDate = 18,
    bySubject = 19,
    byAuthor = 20,
    byId = 21,
    byThread = 22,
    byPriority = 23,
    byStatus = 24,
    bySize = 25,
    byFlagged = 26,
    byUnread = 27,
    byRecipient = 28,
    byLocation = 29,
    byTags = 30,
    byJunkStatus = 31,
    byAttachments = 32,
    byAccount = 33,
    byCustom = 34,
    byReceived = 35,
    byCorrespondent = 36
  };

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsMsgViewSortType, NS_MSGVIEWSORTTYPE_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSMSGVIEWSORTTYPE \

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSMSGVIEWSORTTYPE(_to) \

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSMSGVIEWSORTTYPE(_to) \

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public nsMsgViewSortType
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSMSGVIEWSORTTYPE

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS(_MYCLASS_, nsMsgViewSortType)

_MYCLASS_::_MYCLASS_()
{
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* End of implementation class template. */
#endif


/* starting interface:    nsMsgViewNotificationCode */
#define NS_MSGVIEWNOTIFICATIONCODE_IID_STR "255d1c1e-fde7-11d4-a5be-0060b0fc04b7"

#define NS_MSGVIEWNOTIFICATIONCODE_IID \
  {0x255d1c1e, 0xfde7, 0x11d4, \
    { 0xa5, 0xbe, 0x00, 0x60, 0xb0, 0xfc, 0x04, 0xb7 }}

class NS_NO_VTABLE nsMsgViewNotificationCode {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_MSGVIEWNOTIFICATIONCODE_IID)

  enum {
    none = 0,
    insertOrDelete = 1,
    changed = 2,
    scramble = 3,
    all = 4,
    totalContentChanged = 5,
    newTopIndex = 6
  };

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsMsgViewNotificationCode, NS_MSGVIEWNOTIFICATIONCODE_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSMSGVIEWNOTIFICATIONCODE \

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSMSGVIEWNOTIFICATIONCODE(_to) \

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSMSGVIEWNOTIFICATIONCODE(_to) \

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public nsMsgViewNotificationCode
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSMSGVIEWNOTIFICATIONCODE

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS(_MYCLASS_, nsMsgViewNotificationCode)

_MYCLASS_::_MYCLASS_()
{
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* End of implementation class template. */
#endif


/* starting interface:    nsMsgViewCommandCheckState */
#define NS_MSGVIEWCOMMANDCHECKSTATE_IID_STR "4ec9248e-0108-11d5-a5be-0060b0fc04b7"

#define NS_MSGVIEWCOMMANDCHECKSTATE_IID \
  {0x4ec9248e, 0x0108, 0x11d5, \
    { 0xa5, 0xbe, 0x00, 0x60, 0xb0, 0xfc, 0x04, 0xb7 }}

class NS_NO_VTABLE nsMsgViewCommandCheckState {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_MSGVIEWCOMMANDCHECKSTATE_IID)

  enum {
    notUsed = 0,
    checked = 1,
    unchecked = 2
  };

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsMsgViewCommandCheckState, NS_MSGVIEWCOMMANDCHECKSTATE_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSMSGVIEWCOMMANDCHECKSTATE \

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSMSGVIEWCOMMANDCHECKSTATE(_to) \

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSMSGVIEWCOMMANDCHECKSTATE(_to) \

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public nsMsgViewCommandCheckState
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSMSGVIEWCOMMANDCHECKSTATE

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS(_MYCLASS_, nsMsgViewCommandCheckState)

_MYCLASS_::_MYCLASS_()
{
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* End of implementation class template. */
#endif


/* starting interface:    nsMsgViewCommandType */
#define NS_MSGVIEWCOMMANDTYPE_IID_STR "ad36e6cc-0109-11d5-a5be-0060b0fc04b7"

#define NS_MSGVIEWCOMMANDTYPE_IID \
  {0xad36e6cc, 0x0109, 0x11d5, \
    { 0xa5, 0xbe, 0x00, 0x60, 0xb0, 0xfc, 0x04, 0xb7 }}

class NS_NO_VTABLE nsMsgViewCommandType {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_MSGVIEWCOMMANDTYPE_IID)

  enum {
    markMessagesRead = 0,
    markMessagesUnread = 1,
    toggleMessageRead = 2,
    flagMessages = 3,
    unflagMessages = 4,
    toggleThreadWatched = 6,
    deleteMsg = 7,
    deleteNoTrash = 8,
    markThreadRead = 9,
    markAllRead = 10,
    expandAll = 11,
    collapseAll = 12,
    copyMessages = 13,
    moveMessages = 14,
    selectAll = 15,
    downloadSelectedForOffline = 16,
    downloadFlaggedForOffline = 17,
    selectThread = 18,
    selectFlagged = 19,
    cmdRequiringMsgBody = 20,
    label0 = 21,
    label1 = 22,
    label2 = 23,
    label3 = 24,
    label4 = 25,
    label5 = 26,
    lastLabel = 26,
    junk = 27,
    unjunk = 28,
    undeleteMsg = 29,
    applyFilters = 30,
    runJunkControls = 31,
    deleteJunk = 32
  };

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsMsgViewCommandType, NS_MSGVIEWCOMMANDTYPE_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSMSGVIEWCOMMANDTYPE \

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSMSGVIEWCOMMANDTYPE(_to) \

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSMSGVIEWCOMMANDTYPE(_to) \

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public nsMsgViewCommandType
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSMSGVIEWCOMMANDTYPE

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS(_MYCLASS_, nsMsgViewCommandType)

_MYCLASS_::_MYCLASS_()
{
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* End of implementation class template. */
#endif


/* starting interface:    nsMsgNavigationType */
#define NS_MSGNAVIGATIONTYPE_IID_STR "65903eb2-1dd2-11b2-ac45-c5b69c1618d7"

#define NS_MSGNAVIGATIONTYPE_IID \
  {0x65903eb2, 0x1dd2, 0x11b2, \
    { 0xac, 0x45, 0xc5, 0xb6, 0x9c, 0x16, 0x18, 0xd7 }}

class NS_NO_VTABLE nsMsgNavigationType {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_MSGNAVIGATIONTYPE_IID)

  enum {
    firstMessage = 1,
    nextMessage = 2,
    previousMessage = 3,
    lastMessage = 4,
    toggleThreadKilled = 5,
    firstUnreadMessage = 6,
    nextUnreadMessage = 7,
    previousUnreadMessage = 8,
    lastUnreadMessage = 9,
    nextUnreadThread = 10,
    nextUnreadFolder = 11,
    nextFolder = 12,
    readMore = 13,
    back = 15,
    forward = 16,
    firstFlagged = 17,
    nextFlagged = 18,
    previousFlagged = 19,
    firstNew = 20,
    editUndo = 21,
    editRedo = 22,
    toggleSubthreadKilled = 23
  };

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsMsgNavigationType, NS_MSGNAVIGATIONTYPE_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSMSGNAVIGATIONTYPE \

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSMSGNAVIGATIONTYPE(_to) \

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSMSGNAVIGATIONTYPE(_to) \

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class _MYCLASS_ : public nsMsgNavigationType
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSMSGNAVIGATIONTYPE

  _MYCLASS_();

private:
  ~_MYCLASS_();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS(_MYCLASS_, nsMsgNavigationType)

_MYCLASS_::_MYCLASS_()
{
  /* member initializers and constructor code */
}

_MYCLASS_::~_MYCLASS_()
{
  /* destructor code */
}

/* End of implementation class template. */
#endif


/* starting interface:    nsIMsgDBView */
#define NS_IMSGDBVIEW_IID_STR "9fca0eab-7498-4915-8260-3fcd995bbdd8"

#define NS_IMSGDBVIEW_IID \
  {0x9fca0eab, 0x7498, 0x4915, \
    { 0x82, 0x60, 0x3f, 0xcd, 0x99, 0x5b, 0xbd, 0xd8 }}

class NS_NO_VTABLE nsIMsgDBView : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGDBVIEW_IID)

  /* void open (in nsIMsgFolder folder, in nsMsgViewSortTypeValue sortType, in nsMsgViewSortOrderValue sortOrder, in nsMsgViewFlagsTypeValue viewFlags, out long count); */
  NS_IMETHOD Open(nsIMsgFolder *folder, nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder, nsMsgViewFlagsTypeValue viewFlags, int32_t *count) = 0;

  /* void openWithHdrs (in nsISimpleEnumerator aHeaders, in nsMsgViewSortTypeValue aSortType, in nsMsgViewSortOrderValue aSortOrder, in nsMsgViewFlagsTypeValue aViewFlags, out long aCount); */
  NS_IMETHOD OpenWithHdrs(nsISimpleEnumerator *aHeaders, nsMsgViewSortTypeValue aSortType, nsMsgViewSortOrderValue aSortOrder, nsMsgViewFlagsTypeValue aViewFlags, int32_t *aCount) = 0;

  /* void close (); */
  NS_IMETHOD Close(void) = 0;

  /* void init (in nsIMessenger aMessengerInstance, in nsIMsgWindow aMsgWindow, in nsIMsgDBViewCommandUpdater aCommandUpdater); */
  NS_IMETHOD Init(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater) = 0;

  /* void sort (in nsMsgViewSortTypeValue sortType, in nsMsgViewSortOrderValue sortOrder); */
  NS_IMETHOD Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder) = 0;

  /* void doCommand (in nsMsgViewCommandTypeValue command); */
  NS_IMETHOD DoCommand(nsMsgViewCommandTypeValue command) = 0;

  /* void doCommandWithFolder (in nsMsgViewCommandTypeValue command, in nsIMsgFolder destFolder); */
  NS_IMETHOD DoCommandWithFolder(nsMsgViewCommandTypeValue command, nsIMsgFolder *destFolder) = 0;

  /* void getCommandStatus (in nsMsgViewCommandTypeValue command, out boolean selectable_p, out nsMsgViewCommandCheckStateValue selected_p); */
  NS_IMETHOD GetCommandStatus(nsMsgViewCommandTypeValue command, bool *selectable_p, nsMsgViewCommandCheckStateValue *selected_p) = 0;

  /* readonly attribute nsMsgViewTypeValue viewType; */
  NS_IMETHOD GetViewType(nsMsgViewTypeValue *aViewType) = 0;

  /* attribute nsMsgViewFlagsTypeValue viewFlags; */
  NS_IMETHOD GetViewFlags(nsMsgViewFlagsTypeValue *aViewFlags) = 0;
  NS_IMETHOD SetViewFlags(nsMsgViewFlagsTypeValue aViewFlags) = 0;

  /* attribute nsMsgViewSortTypeValue sortType; */
  NS_IMETHOD GetSortType(nsMsgViewSortTypeValue *aSortType) = 0;
  NS_IMETHOD SetSortType(nsMsgViewSortTypeValue aSortType) = 0;

  /* readonly attribute nsMsgViewSortOrderValue sortOrder; */
  NS_IMETHOD GetSortOrder(nsMsgViewSortOrderValue *aSortOrder) = 0;

  /* attribute nsMsgViewSortTypeValue secondarySortType; */
  NS_IMETHOD GetSecondarySortType(nsMsgViewSortTypeValue *aSecondarySortType) = 0;
  NS_IMETHOD SetSecondarySortType(nsMsgViewSortTypeValue aSecondarySortType) = 0;

  /* attribute nsMsgViewSortOrderValue secondarySortOrder; */
  NS_IMETHOD GetSecondarySortOrder(nsMsgViewSortOrderValue *aSecondarySortOrder) = 0;
  NS_IMETHOD SetSecondarySortOrder(nsMsgViewSortOrderValue aSecondarySortOrder) = 0;

  /* readonly attribute nsMsgKey keyForFirstSelectedMessage; */
  NS_IMETHOD GetKeyForFirstSelectedMessage(nsMsgKey *aKeyForFirstSelectedMessage) = 0;

  /* readonly attribute nsMsgViewIndex viewIndexForFirstSelectedMsg; */
  NS_IMETHOD GetViewIndexForFirstSelectedMsg(nsMsgViewIndex *aViewIndexForFirstSelectedMsg) = 0;

  /* void viewNavigate (in nsMsgNavigationTypeValue motion, out nsMsgKey resultId, out nsMsgViewIndex resultIndex, out nsMsgViewIndex threadIndex, in boolean wrap); */
  NS_IMETHOD ViewNavigate(nsMsgNavigationTypeValue motion, nsMsgKey *resultId, nsMsgViewIndex *resultIndex, nsMsgViewIndex *threadIndex, bool wrap) = 0;

  /* boolean navigateStatus (in nsMsgNavigationTypeValue motion); */
  NS_IMETHOD NavigateStatus(nsMsgNavigationTypeValue motion, bool *_retval) = 0;

  /* readonly attribute nsIMsgFolder msgFolder; */
  NS_IMETHOD GetMsgFolder(nsIMsgFolder * *aMsgFolder) = 0;

  /* attribute nsIMsgFolder viewFolder; */
  NS_IMETHOD GetViewFolder(nsIMsgFolder * *aViewFolder) = 0;
  NS_IMETHOD SetViewFolder(nsIMsgFolder *aViewFolder) = 0;

  /* nsMsgKey getKeyAt (in nsMsgViewIndex index); */
  NS_IMETHOD GetKeyAt(nsMsgViewIndex index, nsMsgKey *_retval) = 0;

  /* unsigned long getFlagsAt (in nsMsgViewIndex aIndex); */
  NS_IMETHOD GetFlagsAt(nsMsgViewIndex aIndex, uint32_t *_retval) = 0;

  /* nsIMsgDBHdr getMsgHdrAt (in nsMsgViewIndex aIndex); */
  NS_IMETHOD GetMsgHdrAt(nsMsgViewIndex aIndex, nsIMsgDBHdr * *_retval) = 0;

  /* nsIMsgFolder getFolderForViewIndex (in nsMsgViewIndex index); */
  NS_IMETHOD GetFolderForViewIndex(nsMsgViewIndex index, nsIMsgFolder * *_retval) = 0;

  /* ACString getURIForViewIndex (in nsMsgViewIndex index); */
  NS_IMETHOD GetURIForViewIndex(nsMsgViewIndex index, nsACString & _retval) = 0;

  /* nsIMsgDBView cloneDBView (in nsIMessenger aMessengerInstance, in nsIMsgWindow aMsgWindow, in nsIMsgDBViewCommandUpdater aCommandUpdater); */
  NS_IMETHOD CloneDBView(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater, nsIMsgDBView * *_retval) = 0;

  /* void getSelectedMsgHdrs ([optional] out unsigned long count, [array, size_is (count), retval] out nsIMsgDBHdr headers); */
  NS_IMETHOD GetSelectedMsgHdrs(uint32_t *count, nsIMsgDBHdr * **headers) = 0;

  /* [deprecated] nsIMutableArray getMsgHdrsForSelection (); */
  NS_IMETHOD GetMsgHdrsForSelection(nsIMutableArray * *_retval) = 0;

  /* void getURIsForSelection (out unsigned long count, [array, size_is (count), retval] out string uris); */
  NS_IMETHOD GetURIsForSelection(uint32_t *count, char * **uris) = 0;

  /* void getIndicesForSelection (out unsigned long count, [array, size_is (count), retval] out nsMsgViewIndex indices); */
  NS_IMETHOD GetIndicesForSelection(uint32_t *count, nsMsgViewIndex **indices) = 0;

  /* readonly attribute ACString URIForFirstSelectedMessage; */
  NS_IMETHOD GetURIForFirstSelectedMessage(nsACString & aURIForFirstSelectedMessage) = 0;

  /* readonly attribute nsIMsgDBHdr hdrForFirstSelectedMessage; */
  NS_IMETHOD GetHdrForFirstSelectedMessage(nsIMsgDBHdr * *aHdrForFirstSelectedMessage) = 0;

  /* void loadMessageByMsgKey (in nsMsgKey aMsgKey); */
  NS_IMETHOD LoadMessageByMsgKey(nsMsgKey aMsgKey) = 0;

  /* void loadMessageByViewIndex (in nsMsgViewIndex aIndex); */
  NS_IMETHOD LoadMessageByViewIndex(nsMsgViewIndex aIndex) = 0;

  /* void loadMessageByUrl (in string aUrl); */
  NS_IMETHOD LoadMessageByUrl(const char * aUrl) = 0;

  /* void reloadMessage (); */
  NS_IMETHOD ReloadMessage(void) = 0;

  /* void reloadMessageWithAllParts (); */
  NS_IMETHOD ReloadMessageWithAllParts(void) = 0;

  /* readonly attribute unsigned long numSelected; */
  NS_IMETHOD GetNumSelected(uint32_t *aNumSelected) = 0;

  /* readonly attribute nsMsgViewIndex msgToSelectAfterDelete; */
  NS_IMETHOD GetMsgToSelectAfterDelete(nsMsgViewIndex *aMsgToSelectAfterDelete) = 0;

  /* readonly attribute nsMsgViewIndex currentlyDisplayedMessage; */
  NS_IMETHOD GetCurrentlyDisplayedMessage(nsMsgViewIndex *aCurrentlyDisplayedMessage) = 0;

  /* readonly attribute long numMsgsInView; */
  NS_IMETHOD GetNumMsgsInView(int32_t *aNumMsgsInView) = 0;

  /* void selectMsgByKey (in nsMsgKey key); */
  NS_IMETHOD SelectMsgByKey(nsMsgKey key) = 0;

  /* void selectFolderMsgByKey (in nsIMsgFolder aFolder, in nsMsgKey aKey); */
  NS_IMETHOD SelectFolderMsgByKey(nsIMsgFolder *aFolder, nsMsgKey aKey) = 0;

  /* attribute boolean suppressMsgDisplay; */
  NS_IMETHOD GetSuppressMsgDisplay(bool *aSuppressMsgDisplay) = 0;
  NS_IMETHOD SetSuppressMsgDisplay(bool aSuppressMsgDisplay) = 0;

  /* attribute boolean suppressCommandUpdating; */
  NS_IMETHOD GetSuppressCommandUpdating(bool *aSuppressCommandUpdating) = 0;
  NS_IMETHOD SetSuppressCommandUpdating(bool aSuppressCommandUpdating) = 0;

  /* attribute boolean suppressChangeNotifications; */
  NS_IMETHOD GetSuppressChangeNotifications(bool *aSuppressChangeNotifications) = 0;
  NS_IMETHOD SetSuppressChangeNotifications(bool aSuppressChangeNotifications) = 0;

  /* void onDeleteCompleted (in boolean succeeded); */
  NS_IMETHOD OnDeleteCompleted(bool succeeded) = 0;

  /* readonly attribute nsIMsgDatabase db; */
  NS_IMETHOD GetDb(nsIMsgDatabase * *aDb) = 0;

  /* readonly attribute boolean supportsThreading; */
  NS_IMETHOD GetSupportsThreading(bool *aSupportsThreading) = 0;

  /* attribute nsIMsgSearchSession searchSession; */
  NS_IMETHOD GetSearchSession(nsIMsgSearchSession * *aSearchSession) = 0;
  NS_IMETHOD SetSearchSession(nsIMsgSearchSession *aSearchSession) = 0;

  /* readonly attribute boolean removeRowOnMoveOrDelete; */
  NS_IMETHOD GetRemoveRowOnMoveOrDelete(bool *aRemoveRowOnMoveOrDelete) = 0;

  /* nsMsgViewIndex findIndexFromKey (in nsMsgKey aMsgKey, in boolean aExpand); */
  NS_IMETHOD FindIndexFromKey(nsMsgKey aMsgKey, bool aExpand, nsMsgViewIndex *_retval) = 0;

  /* nsMsgViewIndex findIndexOfMsgHdr (in nsIMsgDBHdr aMsgHdr, in boolean aExpand); */
  NS_IMETHOD FindIndexOfMsgHdr(nsIMsgDBHdr *aMsgHdr, bool aExpand, nsMsgViewIndex *_retval) = 0;

  /* void ExpandAndSelectThreadByIndex (in nsMsgViewIndex aIndex, in boolean aAugment); */
  NS_IMETHOD ExpandAndSelectThreadByIndex(nsMsgViewIndex aIndex, bool aAugment) = 0;

  /* nsIMsgThread getThreadContainingIndex (in nsMsgViewIndex aIndex); */
  NS_IMETHOD GetThreadContainingIndex(nsMsgViewIndex aIndex, nsIMsgThread * *_retval) = 0;

  /* void insertTreeRows (in nsMsgViewIndex aIndex, in unsigned long aNumRows, in nsMsgKey aKey, in nsMsgViewFlagsTypeValue aFlags, in unsigned long aLevel, in nsIMsgFolder aFolder); */
  NS_IMETHOD InsertTreeRows(nsMsgViewIndex aIndex, uint32_t aNumRows, nsMsgKey aKey, nsMsgViewFlagsTypeValue aFlags, uint32_t aLevel, nsIMsgFolder *aFolder) = 0;

  /* void removeTreeRows (in nsMsgViewIndex aIndex, in unsigned long aNumRows); */
  NS_IMETHOD RemoveTreeRows(nsMsgViewIndex aIndex, uint32_t aNumRows) = 0;

  /* void NoteChange (in nsMsgViewIndex aFirstLineChanged, in long aNumRows, in nsMsgViewNotificationCodeValue aChangeType); */
  NS_IMETHOD NoteChange(nsMsgViewIndex aFirstLineChanged, int32_t aNumRows, nsMsgViewNotificationCodeValue aChangeType) = 0;

  /* nsIMsgThread getThreadContainingMsgHdr (in nsIMsgDBHdr aMsgHdr); */
  NS_IMETHOD GetThreadContainingMsgHdr(nsIMsgDBHdr *aMsgHdr, nsIMsgThread * *_retval) = 0;

  /* readonly attribute boolean usingLines; */
  NS_IMETHOD GetUsingLines(bool *aUsingLines) = 0;

  /* void addColumnHandler (in AString aColumn, in nsIMsgCustomColumnHandler aHandler); */
  NS_IMETHOD AddColumnHandler(const nsAString & aColumn, nsIMsgCustomColumnHandler *aHandler) = 0;

  /* void removeColumnHandler (in AString aColumn); */
  NS_IMETHOD RemoveColumnHandler(const nsAString & aColumn) = 0;

  /* nsIMsgCustomColumnHandler getColumnHandler (in AString aColumn); */
  NS_IMETHOD GetColumnHandler(const nsAString & aColumn, nsIMsgCustomColumnHandler * *_retval) = 0;

  /* attribute AString curCustomColumn; */
  NS_IMETHOD GetCurCustomColumn(nsAString & aCurCustomColumn) = 0;
  NS_IMETHOD SetCurCustomColumn(const nsAString & aCurCustomColumn) = 0;

  /* AString cellTextForColumn (in long aRow, in wstring aColumnName); */
  NS_IMETHOD CellTextForColumn(int32_t aRow, const char16_t * aColumnName, nsAString & _retval) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgDBView, NS_IMSGDBVIEW_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGDBVIEW \
  NS_IMETHOD Open(nsIMsgFolder *folder, nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder, nsMsgViewFlagsTypeValue viewFlags, int32_t *count) override; \
  NS_IMETHOD OpenWithHdrs(nsISimpleEnumerator *aHeaders, nsMsgViewSortTypeValue aSortType, nsMsgViewSortOrderValue aSortOrder, nsMsgViewFlagsTypeValue aViewFlags, int32_t *aCount) override; \
  NS_IMETHOD Close(void) override; \
  NS_IMETHOD Init(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater) override; \
  NS_IMETHOD Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder) override; \
  NS_IMETHOD DoCommand(nsMsgViewCommandTypeValue command) override; \
  NS_IMETHOD DoCommandWithFolder(nsMsgViewCommandTypeValue command, nsIMsgFolder *destFolder) override; \
  NS_IMETHOD GetCommandStatus(nsMsgViewCommandTypeValue command, bool *selectable_p, nsMsgViewCommandCheckStateValue *selected_p) override; \
  NS_IMETHOD GetViewType(nsMsgViewTypeValue *aViewType) override; \
  NS_IMETHOD GetViewFlags(nsMsgViewFlagsTypeValue *aViewFlags) override; \
  NS_IMETHOD SetViewFlags(nsMsgViewFlagsTypeValue aViewFlags) override; \
  NS_IMETHOD GetSortType(nsMsgViewSortTypeValue *aSortType) override; \
  NS_IMETHOD SetSortType(nsMsgViewSortTypeValue aSortType) override; \
  NS_IMETHOD GetSortOrder(nsMsgViewSortOrderValue *aSortOrder) override; \
  NS_IMETHOD GetSecondarySortType(nsMsgViewSortTypeValue *aSecondarySortType) override; \
  NS_IMETHOD SetSecondarySortType(nsMsgViewSortTypeValue aSecondarySortType) override; \
  NS_IMETHOD GetSecondarySortOrder(nsMsgViewSortOrderValue *aSecondarySortOrder) override; \
  NS_IMETHOD SetSecondarySortOrder(nsMsgViewSortOrderValue aSecondarySortOrder) override; \
  NS_IMETHOD GetKeyForFirstSelectedMessage(nsMsgKey *aKeyForFirstSelectedMessage) override; \
  NS_IMETHOD GetViewIndexForFirstSelectedMsg(nsMsgViewIndex *aViewIndexForFirstSelectedMsg) override; \
  NS_IMETHOD ViewNavigate(nsMsgNavigationTypeValue motion, nsMsgKey *resultId, nsMsgViewIndex *resultIndex, nsMsgViewIndex *threadIndex, bool wrap) override; \
  NS_IMETHOD NavigateStatus(nsMsgNavigationTypeValue motion, bool *_retval) override; \
  NS_IMETHOD GetMsgFolder(nsIMsgFolder * *aMsgFolder) override; \
  NS_IMETHOD GetViewFolder(nsIMsgFolder * *aViewFolder) override; \
  NS_IMETHOD SetViewFolder(nsIMsgFolder *aViewFolder) override; \
  NS_IMETHOD GetKeyAt(nsMsgViewIndex index, nsMsgKey *_retval) override; \
  NS_IMETHOD GetFlagsAt(nsMsgViewIndex aIndex, uint32_t *_retval) override; \
  NS_IMETHOD GetMsgHdrAt(nsMsgViewIndex aIndex, nsIMsgDBHdr * *_retval) override; \
  NS_IMETHOD GetFolderForViewIndex(nsMsgViewIndex index, nsIMsgFolder * *_retval) override; \
  NS_IMETHOD GetURIForViewIndex(nsMsgViewIndex index, nsACString & _retval) override; \
  NS_IMETHOD CloneDBView(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater, nsIMsgDBView * *_retval) override; \
  NS_IMETHOD GetSelectedMsgHdrs(uint32_t *count, nsIMsgDBHdr * **headers) override; \
  NS_IMETHOD GetMsgHdrsForSelection(nsIMutableArray * *_retval) override; \
  NS_IMETHOD GetURIsForSelection(uint32_t *count, char * **uris) override; \
  NS_IMETHOD GetIndicesForSelection(uint32_t *count, nsMsgViewIndex **indices) override; \
  NS_IMETHOD GetURIForFirstSelectedMessage(nsACString & aURIForFirstSelectedMessage) override; \
  NS_IMETHOD GetHdrForFirstSelectedMessage(nsIMsgDBHdr * *aHdrForFirstSelectedMessage) override; \
  NS_IMETHOD LoadMessageByMsgKey(nsMsgKey aMsgKey) override; \
  NS_IMETHOD LoadMessageByViewIndex(nsMsgViewIndex aIndex) override; \
  NS_IMETHOD LoadMessageByUrl(const char * aUrl) override; \
  NS_IMETHOD ReloadMessage(void) override; \
  NS_IMETHOD ReloadMessageWithAllParts(void) override; \
  NS_IMETHOD GetNumSelected(uint32_t *aNumSelected) override; \
  NS_IMETHOD GetMsgToSelectAfterDelete(nsMsgViewIndex *aMsgToSelectAfterDelete) override; \
  NS_IMETHOD GetCurrentlyDisplayedMessage(nsMsgViewIndex *aCurrentlyDisplayedMessage) override; \
  NS_IMETHOD GetNumMsgsInView(int32_t *aNumMsgsInView) override; \
  NS_IMETHOD SelectMsgByKey(nsMsgKey key) override; \
  NS_IMETHOD SelectFolderMsgByKey(nsIMsgFolder *aFolder, nsMsgKey aKey) override; \
  NS_IMETHOD GetSuppressMsgDisplay(bool *aSuppressMsgDisplay) override; \
  NS_IMETHOD SetSuppressMsgDisplay(bool aSuppressMsgDisplay) override; \
  NS_IMETHOD GetSuppressCommandUpdating(bool *aSuppressCommandUpdating) override; \
  NS_IMETHOD SetSuppressCommandUpdating(bool aSuppressCommandUpdating) override; \
  NS_IMETHOD GetSuppressChangeNotifications(bool *aSuppressChangeNotifications) override; \
  NS_IMETHOD SetSuppressChangeNotifications(bool aSuppressChangeNotifications) override; \
  NS_IMETHOD OnDeleteCompleted(bool succeeded) override; \
  NS_IMETHOD GetDb(nsIMsgDatabase * *aDb) override; \
  NS_IMETHOD GetSupportsThreading(bool *aSupportsThreading) override; \
  NS_IMETHOD GetSearchSession(nsIMsgSearchSession * *aSearchSession) override; \
  NS_IMETHOD SetSearchSession(nsIMsgSearchSession *aSearchSession) override; \
  NS_IMETHOD GetRemoveRowOnMoveOrDelete(bool *aRemoveRowOnMoveOrDelete) override; \
  NS_IMETHOD FindIndexFromKey(nsMsgKey aMsgKey, bool aExpand, nsMsgViewIndex *_retval) override; \
  NS_IMETHOD FindIndexOfMsgHdr(nsIMsgDBHdr *aMsgHdr, bool aExpand, nsMsgViewIndex *_retval) override; \
  NS_IMETHOD ExpandAndSelectThreadByIndex(nsMsgViewIndex aIndex, bool aAugment) override; \
  NS_IMETHOD GetThreadContainingIndex(nsMsgViewIndex aIndex, nsIMsgThread * *_retval) override; \
  NS_IMETHOD InsertTreeRows(nsMsgViewIndex aIndex, uint32_t aNumRows, nsMsgKey aKey, nsMsgViewFlagsTypeValue aFlags, uint32_t aLevel, nsIMsgFolder *aFolder) override; \
  NS_IMETHOD RemoveTreeRows(nsMsgViewIndex aIndex, uint32_t aNumRows) override; \
  NS_IMETHOD NoteChange(nsMsgViewIndex aFirstLineChanged, int32_t aNumRows, nsMsgViewNotificationCodeValue aChangeType) override; \
  NS_IMETHOD GetThreadContainingMsgHdr(nsIMsgDBHdr *aMsgHdr, nsIMsgThread * *_retval) override; \
  NS_IMETHOD GetUsingLines(bool *aUsingLines) override; \
  NS_IMETHOD AddColumnHandler(const nsAString & aColumn, nsIMsgCustomColumnHandler *aHandler) override; \
  NS_IMETHOD RemoveColumnHandler(const nsAString & aColumn) override; \
  NS_IMETHOD GetColumnHandler(const nsAString & aColumn, nsIMsgCustomColumnHandler * *_retval) override; \
  NS_IMETHOD GetCurCustomColumn(nsAString & aCurCustomColumn) override; \
  NS_IMETHOD SetCurCustomColumn(const nsAString & aCurCustomColumn) override; \
  NS_IMETHOD CellTextForColumn(int32_t aRow, const char16_t * aColumnName, nsAString & _retval) override; 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGDBVIEW(_to) \
  NS_IMETHOD Open(nsIMsgFolder *folder, nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder, nsMsgViewFlagsTypeValue viewFlags, int32_t *count) override { return _to Open(folder, sortType, sortOrder, viewFlags, count); } \
  NS_IMETHOD OpenWithHdrs(nsISimpleEnumerator *aHeaders, nsMsgViewSortTypeValue aSortType, nsMsgViewSortOrderValue aSortOrder, nsMsgViewFlagsTypeValue aViewFlags, int32_t *aCount) override { return _to OpenWithHdrs(aHeaders, aSortType, aSortOrder, aViewFlags, aCount); } \
  NS_IMETHOD Close(void) override { return _to Close(); } \
  NS_IMETHOD Init(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater) override { return _to Init(aMessengerInstance, aMsgWindow, aCommandUpdater); } \
  NS_IMETHOD Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder) override { return _to Sort(sortType, sortOrder); } \
  NS_IMETHOD DoCommand(nsMsgViewCommandTypeValue command) override { return _to DoCommand(command); } \
  NS_IMETHOD DoCommandWithFolder(nsMsgViewCommandTypeValue command, nsIMsgFolder *destFolder) override { return _to DoCommandWithFolder(command, destFolder); } \
  NS_IMETHOD GetCommandStatus(nsMsgViewCommandTypeValue command, bool *selectable_p, nsMsgViewCommandCheckStateValue *selected_p) override { return _to GetCommandStatus(command, selectable_p, selected_p); } \
  NS_IMETHOD GetViewType(nsMsgViewTypeValue *aViewType) override { return _to GetViewType(aViewType); } \
  NS_IMETHOD GetViewFlags(nsMsgViewFlagsTypeValue *aViewFlags) override { return _to GetViewFlags(aViewFlags); } \
  NS_IMETHOD SetViewFlags(nsMsgViewFlagsTypeValue aViewFlags) override { return _to SetViewFlags(aViewFlags); } \
  NS_IMETHOD GetSortType(nsMsgViewSortTypeValue *aSortType) override { return _to GetSortType(aSortType); } \
  NS_IMETHOD SetSortType(nsMsgViewSortTypeValue aSortType) override { return _to SetSortType(aSortType); } \
  NS_IMETHOD GetSortOrder(nsMsgViewSortOrderValue *aSortOrder) override { return _to GetSortOrder(aSortOrder); } \
  NS_IMETHOD GetSecondarySortType(nsMsgViewSortTypeValue *aSecondarySortType) override { return _to GetSecondarySortType(aSecondarySortType); } \
  NS_IMETHOD SetSecondarySortType(nsMsgViewSortTypeValue aSecondarySortType) override { return _to SetSecondarySortType(aSecondarySortType); } \
  NS_IMETHOD GetSecondarySortOrder(nsMsgViewSortOrderValue *aSecondarySortOrder) override { return _to GetSecondarySortOrder(aSecondarySortOrder); } \
  NS_IMETHOD SetSecondarySortOrder(nsMsgViewSortOrderValue aSecondarySortOrder) override { return _to SetSecondarySortOrder(aSecondarySortOrder); } \
  NS_IMETHOD GetKeyForFirstSelectedMessage(nsMsgKey *aKeyForFirstSelectedMessage) override { return _to GetKeyForFirstSelectedMessage(aKeyForFirstSelectedMessage); } \
  NS_IMETHOD GetViewIndexForFirstSelectedMsg(nsMsgViewIndex *aViewIndexForFirstSelectedMsg) override { return _to GetViewIndexForFirstSelectedMsg(aViewIndexForFirstSelectedMsg); } \
  NS_IMETHOD ViewNavigate(nsMsgNavigationTypeValue motion, nsMsgKey *resultId, nsMsgViewIndex *resultIndex, nsMsgViewIndex *threadIndex, bool wrap) override { return _to ViewNavigate(motion, resultId, resultIndex, threadIndex, wrap); } \
  NS_IMETHOD NavigateStatus(nsMsgNavigationTypeValue motion, bool *_retval) override { return _to NavigateStatus(motion, _retval); } \
  NS_IMETHOD GetMsgFolder(nsIMsgFolder * *aMsgFolder) override { return _to GetMsgFolder(aMsgFolder); } \
  NS_IMETHOD GetViewFolder(nsIMsgFolder * *aViewFolder) override { return _to GetViewFolder(aViewFolder); } \
  NS_IMETHOD SetViewFolder(nsIMsgFolder *aViewFolder) override { return _to SetViewFolder(aViewFolder); } \
  NS_IMETHOD GetKeyAt(nsMsgViewIndex index, nsMsgKey *_retval) override { return _to GetKeyAt(index, _retval); } \
  NS_IMETHOD GetFlagsAt(nsMsgViewIndex aIndex, uint32_t *_retval) override { return _to GetFlagsAt(aIndex, _retval); } \
  NS_IMETHOD GetMsgHdrAt(nsMsgViewIndex aIndex, nsIMsgDBHdr * *_retval) override { return _to GetMsgHdrAt(aIndex, _retval); } \
  NS_IMETHOD GetFolderForViewIndex(nsMsgViewIndex index, nsIMsgFolder * *_retval) override { return _to GetFolderForViewIndex(index, _retval); } \
  NS_IMETHOD GetURIForViewIndex(nsMsgViewIndex index, nsACString & _retval) override { return _to GetURIForViewIndex(index, _retval); } \
  NS_IMETHOD CloneDBView(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater, nsIMsgDBView * *_retval) override { return _to CloneDBView(aMessengerInstance, aMsgWindow, aCommandUpdater, _retval); } \
  NS_IMETHOD GetSelectedMsgHdrs(uint32_t *count, nsIMsgDBHdr * **headers) override { return _to GetSelectedMsgHdrs(count, headers); } \
  NS_IMETHOD GetMsgHdrsForSelection(nsIMutableArray * *_retval) override { return _to GetMsgHdrsForSelection(_retval); } \
  NS_IMETHOD GetURIsForSelection(uint32_t *count, char * **uris) override { return _to GetURIsForSelection(count, uris); } \
  NS_IMETHOD GetIndicesForSelection(uint32_t *count, nsMsgViewIndex **indices) override { return _to GetIndicesForSelection(count, indices); } \
  NS_IMETHOD GetURIForFirstSelectedMessage(nsACString & aURIForFirstSelectedMessage) override { return _to GetURIForFirstSelectedMessage(aURIForFirstSelectedMessage); } \
  NS_IMETHOD GetHdrForFirstSelectedMessage(nsIMsgDBHdr * *aHdrForFirstSelectedMessage) override { return _to GetHdrForFirstSelectedMessage(aHdrForFirstSelectedMessage); } \
  NS_IMETHOD LoadMessageByMsgKey(nsMsgKey aMsgKey) override { return _to LoadMessageByMsgKey(aMsgKey); } \
  NS_IMETHOD LoadMessageByViewIndex(nsMsgViewIndex aIndex) override { return _to LoadMessageByViewIndex(aIndex); } \
  NS_IMETHOD LoadMessageByUrl(const char * aUrl) override { return _to LoadMessageByUrl(aUrl); } \
  NS_IMETHOD ReloadMessage(void) override { return _to ReloadMessage(); } \
  NS_IMETHOD ReloadMessageWithAllParts(void) override { return _to ReloadMessageWithAllParts(); } \
  NS_IMETHOD GetNumSelected(uint32_t *aNumSelected) override { return _to GetNumSelected(aNumSelected); } \
  NS_IMETHOD GetMsgToSelectAfterDelete(nsMsgViewIndex *aMsgToSelectAfterDelete) override { return _to GetMsgToSelectAfterDelete(aMsgToSelectAfterDelete); } \
  NS_IMETHOD GetCurrentlyDisplayedMessage(nsMsgViewIndex *aCurrentlyDisplayedMessage) override { return _to GetCurrentlyDisplayedMessage(aCurrentlyDisplayedMessage); } \
  NS_IMETHOD GetNumMsgsInView(int32_t *aNumMsgsInView) override { return _to GetNumMsgsInView(aNumMsgsInView); } \
  NS_IMETHOD SelectMsgByKey(nsMsgKey key) override { return _to SelectMsgByKey(key); } \
  NS_IMETHOD SelectFolderMsgByKey(nsIMsgFolder *aFolder, nsMsgKey aKey) override { return _to SelectFolderMsgByKey(aFolder, aKey); } \
  NS_IMETHOD GetSuppressMsgDisplay(bool *aSuppressMsgDisplay) override { return _to GetSuppressMsgDisplay(aSuppressMsgDisplay); } \
  NS_IMETHOD SetSuppressMsgDisplay(bool aSuppressMsgDisplay) override { return _to SetSuppressMsgDisplay(aSuppressMsgDisplay); } \
  NS_IMETHOD GetSuppressCommandUpdating(bool *aSuppressCommandUpdating) override { return _to GetSuppressCommandUpdating(aSuppressCommandUpdating); } \
  NS_IMETHOD SetSuppressCommandUpdating(bool aSuppressCommandUpdating) override { return _to SetSuppressCommandUpdating(aSuppressCommandUpdating); } \
  NS_IMETHOD GetSuppressChangeNotifications(bool *aSuppressChangeNotifications) override { return _to GetSuppressChangeNotifications(aSuppressChangeNotifications); } \
  NS_IMETHOD SetSuppressChangeNotifications(bool aSuppressChangeNotifications) override { return _to SetSuppressChangeNotifications(aSuppressChangeNotifications); } \
  NS_IMETHOD OnDeleteCompleted(bool succeeded) override { return _to OnDeleteCompleted(succeeded); } \
  NS_IMETHOD GetDb(nsIMsgDatabase * *aDb) override { return _to GetDb(aDb); } \
  NS_IMETHOD GetSupportsThreading(bool *aSupportsThreading) override { return _to GetSupportsThreading(aSupportsThreading); } \
  NS_IMETHOD GetSearchSession(nsIMsgSearchSession * *aSearchSession) override { return _to GetSearchSession(aSearchSession); } \
  NS_IMETHOD SetSearchSession(nsIMsgSearchSession *aSearchSession) override { return _to SetSearchSession(aSearchSession); } \
  NS_IMETHOD GetRemoveRowOnMoveOrDelete(bool *aRemoveRowOnMoveOrDelete) override { return _to GetRemoveRowOnMoveOrDelete(aRemoveRowOnMoveOrDelete); } \
  NS_IMETHOD FindIndexFromKey(nsMsgKey aMsgKey, bool aExpand, nsMsgViewIndex *_retval) override { return _to FindIndexFromKey(aMsgKey, aExpand, _retval); } \
  NS_IMETHOD FindIndexOfMsgHdr(nsIMsgDBHdr *aMsgHdr, bool aExpand, nsMsgViewIndex *_retval) override { return _to FindIndexOfMsgHdr(aMsgHdr, aExpand, _retval); } \
  NS_IMETHOD ExpandAndSelectThreadByIndex(nsMsgViewIndex aIndex, bool aAugment) override { return _to ExpandAndSelectThreadByIndex(aIndex, aAugment); } \
  NS_IMETHOD GetThreadContainingIndex(nsMsgViewIndex aIndex, nsIMsgThread * *_retval) override { return _to GetThreadContainingIndex(aIndex, _retval); } \
  NS_IMETHOD InsertTreeRows(nsMsgViewIndex aIndex, uint32_t aNumRows, nsMsgKey aKey, nsMsgViewFlagsTypeValue aFlags, uint32_t aLevel, nsIMsgFolder *aFolder) override { return _to InsertTreeRows(aIndex, aNumRows, aKey, aFlags, aLevel, aFolder); } \
  NS_IMETHOD RemoveTreeRows(nsMsgViewIndex aIndex, uint32_t aNumRows) override { return _to RemoveTreeRows(aIndex, aNumRows); } \
  NS_IMETHOD NoteChange(nsMsgViewIndex aFirstLineChanged, int32_t aNumRows, nsMsgViewNotificationCodeValue aChangeType) override { return _to NoteChange(aFirstLineChanged, aNumRows, aChangeType); } \
  NS_IMETHOD GetThreadContainingMsgHdr(nsIMsgDBHdr *aMsgHdr, nsIMsgThread * *_retval) override { return _to GetThreadContainingMsgHdr(aMsgHdr, _retval); } \
  NS_IMETHOD GetUsingLines(bool *aUsingLines) override { return _to GetUsingLines(aUsingLines); } \
  NS_IMETHOD AddColumnHandler(const nsAString & aColumn, nsIMsgCustomColumnHandler *aHandler) override { return _to AddColumnHandler(aColumn, aHandler); } \
  NS_IMETHOD RemoveColumnHandler(const nsAString & aColumn) override { return _to RemoveColumnHandler(aColumn); } \
  NS_IMETHOD GetColumnHandler(const nsAString & aColumn, nsIMsgCustomColumnHandler * *_retval) override { return _to GetColumnHandler(aColumn, _retval); } \
  NS_IMETHOD GetCurCustomColumn(nsAString & aCurCustomColumn) override { return _to GetCurCustomColumn(aCurCustomColumn); } \
  NS_IMETHOD SetCurCustomColumn(const nsAString & aCurCustomColumn) override { return _to SetCurCustomColumn(aCurCustomColumn); } \
  NS_IMETHOD CellTextForColumn(int32_t aRow, const char16_t * aColumnName, nsAString & _retval) override { return _to CellTextForColumn(aRow, aColumnName, _retval); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGDBVIEW(_to) \
  NS_IMETHOD Open(nsIMsgFolder *folder, nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder, nsMsgViewFlagsTypeValue viewFlags, int32_t *count) override { return !_to ? NS_ERROR_NULL_POINTER : _to->Open(folder, sortType, sortOrder, viewFlags, count); } \
  NS_IMETHOD OpenWithHdrs(nsISimpleEnumerator *aHeaders, nsMsgViewSortTypeValue aSortType, nsMsgViewSortOrderValue aSortOrder, nsMsgViewFlagsTypeValue aViewFlags, int32_t *aCount) override { return !_to ? NS_ERROR_NULL_POINTER : _to->OpenWithHdrs(aHeaders, aSortType, aSortOrder, aViewFlags, aCount); } \
  NS_IMETHOD Close(void) override { return !_to ? NS_ERROR_NULL_POINTER : _to->Close(); } \
  NS_IMETHOD Init(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater) override { return !_to ? NS_ERROR_NULL_POINTER : _to->Init(aMessengerInstance, aMsgWindow, aCommandUpdater); } \
  NS_IMETHOD Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder) override { return !_to ? NS_ERROR_NULL_POINTER : _to->Sort(sortType, sortOrder); } \
  NS_IMETHOD DoCommand(nsMsgViewCommandTypeValue command) override { return !_to ? NS_ERROR_NULL_POINTER : _to->DoCommand(command); } \
  NS_IMETHOD DoCommandWithFolder(nsMsgViewCommandTypeValue command, nsIMsgFolder *destFolder) override { return !_to ? NS_ERROR_NULL_POINTER : _to->DoCommandWithFolder(command, destFolder); } \
  NS_IMETHOD GetCommandStatus(nsMsgViewCommandTypeValue command, bool *selectable_p, nsMsgViewCommandCheckStateValue *selected_p) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCommandStatus(command, selectable_p, selected_p); } \
  NS_IMETHOD GetViewType(nsMsgViewTypeValue *aViewType) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetViewType(aViewType); } \
  NS_IMETHOD GetViewFlags(nsMsgViewFlagsTypeValue *aViewFlags) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetViewFlags(aViewFlags); } \
  NS_IMETHOD SetViewFlags(nsMsgViewFlagsTypeValue aViewFlags) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetViewFlags(aViewFlags); } \
  NS_IMETHOD GetSortType(nsMsgViewSortTypeValue *aSortType) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSortType(aSortType); } \
  NS_IMETHOD SetSortType(nsMsgViewSortTypeValue aSortType) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSortType(aSortType); } \
  NS_IMETHOD GetSortOrder(nsMsgViewSortOrderValue *aSortOrder) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSortOrder(aSortOrder); } \
  NS_IMETHOD GetSecondarySortType(nsMsgViewSortTypeValue *aSecondarySortType) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSecondarySortType(aSecondarySortType); } \
  NS_IMETHOD SetSecondarySortType(nsMsgViewSortTypeValue aSecondarySortType) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSecondarySortType(aSecondarySortType); } \
  NS_IMETHOD GetSecondarySortOrder(nsMsgViewSortOrderValue *aSecondarySortOrder) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSecondarySortOrder(aSecondarySortOrder); } \
  NS_IMETHOD SetSecondarySortOrder(nsMsgViewSortOrderValue aSecondarySortOrder) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSecondarySortOrder(aSecondarySortOrder); } \
  NS_IMETHOD GetKeyForFirstSelectedMessage(nsMsgKey *aKeyForFirstSelectedMessage) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetKeyForFirstSelectedMessage(aKeyForFirstSelectedMessage); } \
  NS_IMETHOD GetViewIndexForFirstSelectedMsg(nsMsgViewIndex *aViewIndexForFirstSelectedMsg) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetViewIndexForFirstSelectedMsg(aViewIndexForFirstSelectedMsg); } \
  NS_IMETHOD ViewNavigate(nsMsgNavigationTypeValue motion, nsMsgKey *resultId, nsMsgViewIndex *resultIndex, nsMsgViewIndex *threadIndex, bool wrap) override { return !_to ? NS_ERROR_NULL_POINTER : _to->ViewNavigate(motion, resultId, resultIndex, threadIndex, wrap); } \
  NS_IMETHOD NavigateStatus(nsMsgNavigationTypeValue motion, bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->NavigateStatus(motion, _retval); } \
  NS_IMETHOD GetMsgFolder(nsIMsgFolder * *aMsgFolder) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgFolder(aMsgFolder); } \
  NS_IMETHOD GetViewFolder(nsIMsgFolder * *aViewFolder) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetViewFolder(aViewFolder); } \
  NS_IMETHOD SetViewFolder(nsIMsgFolder *aViewFolder) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetViewFolder(aViewFolder); } \
  NS_IMETHOD GetKeyAt(nsMsgViewIndex index, nsMsgKey *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetKeyAt(index, _retval); } \
  NS_IMETHOD GetFlagsAt(nsMsgViewIndex aIndex, uint32_t *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFlagsAt(aIndex, _retval); } \
  NS_IMETHOD GetMsgHdrAt(nsMsgViewIndex aIndex, nsIMsgDBHdr * *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgHdrAt(aIndex, _retval); } \
  NS_IMETHOD GetFolderForViewIndex(nsMsgViewIndex index, nsIMsgFolder * *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFolderForViewIndex(index, _retval); } \
  NS_IMETHOD GetURIForViewIndex(nsMsgViewIndex index, nsACString & _retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetURIForViewIndex(index, _retval); } \
  NS_IMETHOD CloneDBView(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater, nsIMsgDBView * *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->CloneDBView(aMessengerInstance, aMsgWindow, aCommandUpdater, _retval); } \
  NS_IMETHOD GetSelectedMsgHdrs(uint32_t *count, nsIMsgDBHdr * **headers) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSelectedMsgHdrs(count, headers); } \
  NS_IMETHOD GetMsgHdrsForSelection(nsIMutableArray * *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgHdrsForSelection(_retval); } \
  NS_IMETHOD GetURIsForSelection(uint32_t *count, char * **uris) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetURIsForSelection(count, uris); } \
  NS_IMETHOD GetIndicesForSelection(uint32_t *count, nsMsgViewIndex **indices) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIndicesForSelection(count, indices); } \
  NS_IMETHOD GetURIForFirstSelectedMessage(nsACString & aURIForFirstSelectedMessage) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetURIForFirstSelectedMessage(aURIForFirstSelectedMessage); } \
  NS_IMETHOD GetHdrForFirstSelectedMessage(nsIMsgDBHdr * *aHdrForFirstSelectedMessage) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetHdrForFirstSelectedMessage(aHdrForFirstSelectedMessage); } \
  NS_IMETHOD LoadMessageByMsgKey(nsMsgKey aMsgKey) override { return !_to ? NS_ERROR_NULL_POINTER : _to->LoadMessageByMsgKey(aMsgKey); } \
  NS_IMETHOD LoadMessageByViewIndex(nsMsgViewIndex aIndex) override { return !_to ? NS_ERROR_NULL_POINTER : _to->LoadMessageByViewIndex(aIndex); } \
  NS_IMETHOD LoadMessageByUrl(const char * aUrl) override { return !_to ? NS_ERROR_NULL_POINTER : _to->LoadMessageByUrl(aUrl); } \
  NS_IMETHOD ReloadMessage(void) override { return !_to ? NS_ERROR_NULL_POINTER : _to->ReloadMessage(); } \
  NS_IMETHOD ReloadMessageWithAllParts(void) override { return !_to ? NS_ERROR_NULL_POINTER : _to->ReloadMessageWithAllParts(); } \
  NS_IMETHOD GetNumSelected(uint32_t *aNumSelected) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNumSelected(aNumSelected); } \
  NS_IMETHOD GetMsgToSelectAfterDelete(nsMsgViewIndex *aMsgToSelectAfterDelete) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgToSelectAfterDelete(aMsgToSelectAfterDelete); } \
  NS_IMETHOD GetCurrentlyDisplayedMessage(nsMsgViewIndex *aCurrentlyDisplayedMessage) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCurrentlyDisplayedMessage(aCurrentlyDisplayedMessage); } \
  NS_IMETHOD GetNumMsgsInView(int32_t *aNumMsgsInView) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNumMsgsInView(aNumMsgsInView); } \
  NS_IMETHOD SelectMsgByKey(nsMsgKey key) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SelectMsgByKey(key); } \
  NS_IMETHOD SelectFolderMsgByKey(nsIMsgFolder *aFolder, nsMsgKey aKey) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SelectFolderMsgByKey(aFolder, aKey); } \
  NS_IMETHOD GetSuppressMsgDisplay(bool *aSuppressMsgDisplay) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSuppressMsgDisplay(aSuppressMsgDisplay); } \
  NS_IMETHOD SetSuppressMsgDisplay(bool aSuppressMsgDisplay) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSuppressMsgDisplay(aSuppressMsgDisplay); } \
  NS_IMETHOD GetSuppressCommandUpdating(bool *aSuppressCommandUpdating) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSuppressCommandUpdating(aSuppressCommandUpdating); } \
  NS_IMETHOD SetSuppressCommandUpdating(bool aSuppressCommandUpdating) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSuppressCommandUpdating(aSuppressCommandUpdating); } \
  NS_IMETHOD GetSuppressChangeNotifications(bool *aSuppressChangeNotifications) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSuppressChangeNotifications(aSuppressChangeNotifications); } \
  NS_IMETHOD SetSuppressChangeNotifications(bool aSuppressChangeNotifications) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSuppressChangeNotifications(aSuppressChangeNotifications); } \
  NS_IMETHOD OnDeleteCompleted(bool succeeded) override { return !_to ? NS_ERROR_NULL_POINTER : _to->OnDeleteCompleted(succeeded); } \
  NS_IMETHOD GetDb(nsIMsgDatabase * *aDb) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDb(aDb); } \
  NS_IMETHOD GetSupportsThreading(bool *aSupportsThreading) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSupportsThreading(aSupportsThreading); } \
  NS_IMETHOD GetSearchSession(nsIMsgSearchSession * *aSearchSession) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSearchSession(aSearchSession); } \
  NS_IMETHOD SetSearchSession(nsIMsgSearchSession *aSearchSession) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSearchSession(aSearchSession); } \
  NS_IMETHOD GetRemoveRowOnMoveOrDelete(bool *aRemoveRowOnMoveOrDelete) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRemoveRowOnMoveOrDelete(aRemoveRowOnMoveOrDelete); } \
  NS_IMETHOD FindIndexFromKey(nsMsgKey aMsgKey, bool aExpand, nsMsgViewIndex *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->FindIndexFromKey(aMsgKey, aExpand, _retval); } \
  NS_IMETHOD FindIndexOfMsgHdr(nsIMsgDBHdr *aMsgHdr, bool aExpand, nsMsgViewIndex *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->FindIndexOfMsgHdr(aMsgHdr, aExpand, _retval); } \
  NS_IMETHOD ExpandAndSelectThreadByIndex(nsMsgViewIndex aIndex, bool aAugment) override { return !_to ? NS_ERROR_NULL_POINTER : _to->ExpandAndSelectThreadByIndex(aIndex, aAugment); } \
  NS_IMETHOD GetThreadContainingIndex(nsMsgViewIndex aIndex, nsIMsgThread * *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetThreadContainingIndex(aIndex, _retval); } \
  NS_IMETHOD InsertTreeRows(nsMsgViewIndex aIndex, uint32_t aNumRows, nsMsgKey aKey, nsMsgViewFlagsTypeValue aFlags, uint32_t aLevel, nsIMsgFolder *aFolder) override { return !_to ? NS_ERROR_NULL_POINTER : _to->InsertTreeRows(aIndex, aNumRows, aKey, aFlags, aLevel, aFolder); } \
  NS_IMETHOD RemoveTreeRows(nsMsgViewIndex aIndex, uint32_t aNumRows) override { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveTreeRows(aIndex, aNumRows); } \
  NS_IMETHOD NoteChange(nsMsgViewIndex aFirstLineChanged, int32_t aNumRows, nsMsgViewNotificationCodeValue aChangeType) override { return !_to ? NS_ERROR_NULL_POINTER : _to->NoteChange(aFirstLineChanged, aNumRows, aChangeType); } \
  NS_IMETHOD GetThreadContainingMsgHdr(nsIMsgDBHdr *aMsgHdr, nsIMsgThread * *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetThreadContainingMsgHdr(aMsgHdr, _retval); } \
  NS_IMETHOD GetUsingLines(bool *aUsingLines) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetUsingLines(aUsingLines); } \
  NS_IMETHOD AddColumnHandler(const nsAString & aColumn, nsIMsgCustomColumnHandler *aHandler) override { return !_to ? NS_ERROR_NULL_POINTER : _to->AddColumnHandler(aColumn, aHandler); } \
  NS_IMETHOD RemoveColumnHandler(const nsAString & aColumn) override { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveColumnHandler(aColumn); } \
  NS_IMETHOD GetColumnHandler(const nsAString & aColumn, nsIMsgCustomColumnHandler * *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetColumnHandler(aColumn, _retval); } \
  NS_IMETHOD GetCurCustomColumn(nsAString & aCurCustomColumn) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCurCustomColumn(aCurCustomColumn); } \
  NS_IMETHOD SetCurCustomColumn(const nsAString & aCurCustomColumn) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SetCurCustomColumn(aCurCustomColumn); } \
  NS_IMETHOD CellTextForColumn(int32_t aRow, const char16_t * aColumnName, nsAString & _retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->CellTextForColumn(aRow, aColumnName, _retval); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsMsgDBView : public nsIMsgDBView
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGDBVIEW

  nsMsgDBView();

private:
  ~nsMsgDBView();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS(nsMsgDBView, nsIMsgDBView)

nsMsgDBView::nsMsgDBView()
{
  /* member initializers and constructor code */
}

nsMsgDBView::~nsMsgDBView()
{
  /* destructor code */
}

/* void open (in nsIMsgFolder folder, in nsMsgViewSortTypeValue sortType, in nsMsgViewSortOrderValue sortOrder, in nsMsgViewFlagsTypeValue viewFlags, out long count); */
NS_IMETHODIMP nsMsgDBView::Open(nsIMsgFolder *folder, nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder, nsMsgViewFlagsTypeValue viewFlags, int32_t *count)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void openWithHdrs (in nsISimpleEnumerator aHeaders, in nsMsgViewSortTypeValue aSortType, in nsMsgViewSortOrderValue aSortOrder, in nsMsgViewFlagsTypeValue aViewFlags, out long aCount); */
NS_IMETHODIMP nsMsgDBView::OpenWithHdrs(nsISimpleEnumerator *aHeaders, nsMsgViewSortTypeValue aSortType, nsMsgViewSortOrderValue aSortOrder, nsMsgViewFlagsTypeValue aViewFlags, int32_t *aCount)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void close (); */
NS_IMETHODIMP nsMsgDBView::Close()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void init (in nsIMessenger aMessengerInstance, in nsIMsgWindow aMsgWindow, in nsIMsgDBViewCommandUpdater aCommandUpdater); */
NS_IMETHODIMP nsMsgDBView::Init(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void sort (in nsMsgViewSortTypeValue sortType, in nsMsgViewSortOrderValue sortOrder); */
NS_IMETHODIMP nsMsgDBView::Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void doCommand (in nsMsgViewCommandTypeValue command); */
NS_IMETHODIMP nsMsgDBView::DoCommand(nsMsgViewCommandTypeValue command)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void doCommandWithFolder (in nsMsgViewCommandTypeValue command, in nsIMsgFolder destFolder); */
NS_IMETHODIMP nsMsgDBView::DoCommandWithFolder(nsMsgViewCommandTypeValue command, nsIMsgFolder *destFolder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getCommandStatus (in nsMsgViewCommandTypeValue command, out boolean selectable_p, out nsMsgViewCommandCheckStateValue selected_p); */
NS_IMETHODIMP nsMsgDBView::GetCommandStatus(nsMsgViewCommandTypeValue command, bool *selectable_p, nsMsgViewCommandCheckStateValue *selected_p)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsMsgViewTypeValue viewType; */
NS_IMETHODIMP nsMsgDBView::GetViewType(nsMsgViewTypeValue *aViewType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsMsgViewFlagsTypeValue viewFlags; */
NS_IMETHODIMP nsMsgDBView::GetViewFlags(nsMsgViewFlagsTypeValue *aViewFlags)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDBView::SetViewFlags(nsMsgViewFlagsTypeValue aViewFlags)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsMsgViewSortTypeValue sortType; */
NS_IMETHODIMP nsMsgDBView::GetSortType(nsMsgViewSortTypeValue *aSortType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDBView::SetSortType(nsMsgViewSortTypeValue aSortType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsMsgViewSortOrderValue sortOrder; */
NS_IMETHODIMP nsMsgDBView::GetSortOrder(nsMsgViewSortOrderValue *aSortOrder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsMsgViewSortTypeValue secondarySortType; */
NS_IMETHODIMP nsMsgDBView::GetSecondarySortType(nsMsgViewSortTypeValue *aSecondarySortType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDBView::SetSecondarySortType(nsMsgViewSortTypeValue aSecondarySortType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsMsgViewSortOrderValue secondarySortOrder; */
NS_IMETHODIMP nsMsgDBView::GetSecondarySortOrder(nsMsgViewSortOrderValue *aSecondarySortOrder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDBView::SetSecondarySortOrder(nsMsgViewSortOrderValue aSecondarySortOrder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsMsgKey keyForFirstSelectedMessage; */
NS_IMETHODIMP nsMsgDBView::GetKeyForFirstSelectedMessage(nsMsgKey *aKeyForFirstSelectedMessage)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsMsgViewIndex viewIndexForFirstSelectedMsg; */
NS_IMETHODIMP nsMsgDBView::GetViewIndexForFirstSelectedMsg(nsMsgViewIndex *aViewIndexForFirstSelectedMsg)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void viewNavigate (in nsMsgNavigationTypeValue motion, out nsMsgKey resultId, out nsMsgViewIndex resultIndex, out nsMsgViewIndex threadIndex, in boolean wrap); */
NS_IMETHODIMP nsMsgDBView::ViewNavigate(nsMsgNavigationTypeValue motion, nsMsgKey *resultId, nsMsgViewIndex *resultIndex, nsMsgViewIndex *threadIndex, bool wrap)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean navigateStatus (in nsMsgNavigationTypeValue motion); */
NS_IMETHODIMP nsMsgDBView::NavigateStatus(nsMsgNavigationTypeValue motion, bool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsIMsgFolder msgFolder; */
NS_IMETHODIMP nsMsgDBView::GetMsgFolder(nsIMsgFolder * *aMsgFolder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsIMsgFolder viewFolder; */
NS_IMETHODIMP nsMsgDBView::GetViewFolder(nsIMsgFolder * *aViewFolder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDBView::SetViewFolder(nsIMsgFolder *aViewFolder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsMsgKey getKeyAt (in nsMsgViewIndex index); */
NS_IMETHODIMP nsMsgDBView::GetKeyAt(nsMsgViewIndex index, nsMsgKey *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* unsigned long getFlagsAt (in nsMsgViewIndex aIndex); */
NS_IMETHODIMP nsMsgDBView::GetFlagsAt(nsMsgViewIndex aIndex, uint32_t *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDBHdr getMsgHdrAt (in nsMsgViewIndex aIndex); */
NS_IMETHODIMP nsMsgDBView::GetMsgHdrAt(nsMsgViewIndex aIndex, nsIMsgDBHdr * *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgFolder getFolderForViewIndex (in nsMsgViewIndex index); */
NS_IMETHODIMP nsMsgDBView::GetFolderForViewIndex(nsMsgViewIndex index, nsIMsgFolder * *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* ACString getURIForViewIndex (in nsMsgViewIndex index); */
NS_IMETHODIMP nsMsgDBView::GetURIForViewIndex(nsMsgViewIndex index, nsACString & _retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDBView cloneDBView (in nsIMessenger aMessengerInstance, in nsIMsgWindow aMsgWindow, in nsIMsgDBViewCommandUpdater aCommandUpdater); */
NS_IMETHODIMP nsMsgDBView::CloneDBView(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater, nsIMsgDBView * *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getSelectedMsgHdrs ([optional] out unsigned long count, [array, size_is (count), retval] out nsIMsgDBHdr headers); */
NS_IMETHODIMP nsMsgDBView::GetSelectedMsgHdrs(uint32_t *count, nsIMsgDBHdr * **headers)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* [deprecated] nsIMutableArray getMsgHdrsForSelection (); */
NS_IMETHODIMP nsMsgDBView::GetMsgHdrsForSelection(nsIMutableArray * *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getURIsForSelection (out unsigned long count, [array, size_is (count), retval] out string uris); */
NS_IMETHODIMP nsMsgDBView::GetURIsForSelection(uint32_t *count, char * **uris)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void getIndicesForSelection (out unsigned long count, [array, size_is (count), retval] out nsMsgViewIndex indices); */
NS_IMETHODIMP nsMsgDBView::GetIndicesForSelection(uint32_t *count, nsMsgViewIndex **indices)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute ACString URIForFirstSelectedMessage; */
NS_IMETHODIMP nsMsgDBView::GetURIForFirstSelectedMessage(nsACString & aURIForFirstSelectedMessage)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsIMsgDBHdr hdrForFirstSelectedMessage; */
NS_IMETHODIMP nsMsgDBView::GetHdrForFirstSelectedMessage(nsIMsgDBHdr * *aHdrForFirstSelectedMessage)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void loadMessageByMsgKey (in nsMsgKey aMsgKey); */
NS_IMETHODIMP nsMsgDBView::LoadMessageByMsgKey(nsMsgKey aMsgKey)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void loadMessageByViewIndex (in nsMsgViewIndex aIndex); */
NS_IMETHODIMP nsMsgDBView::LoadMessageByViewIndex(nsMsgViewIndex aIndex)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void loadMessageByUrl (in string aUrl); */
NS_IMETHODIMP nsMsgDBView::LoadMessageByUrl(const char * aUrl)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void reloadMessage (); */
NS_IMETHODIMP nsMsgDBView::ReloadMessage()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void reloadMessageWithAllParts (); */
NS_IMETHODIMP nsMsgDBView::ReloadMessageWithAllParts()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute unsigned long numSelected; */
NS_IMETHODIMP nsMsgDBView::GetNumSelected(uint32_t *aNumSelected)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsMsgViewIndex msgToSelectAfterDelete; */
NS_IMETHODIMP nsMsgDBView::GetMsgToSelectAfterDelete(nsMsgViewIndex *aMsgToSelectAfterDelete)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsMsgViewIndex currentlyDisplayedMessage; */
NS_IMETHODIMP nsMsgDBView::GetCurrentlyDisplayedMessage(nsMsgViewIndex *aCurrentlyDisplayedMessage)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute long numMsgsInView; */
NS_IMETHODIMP nsMsgDBView::GetNumMsgsInView(int32_t *aNumMsgsInView)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void selectMsgByKey (in nsMsgKey key); */
NS_IMETHODIMP nsMsgDBView::SelectMsgByKey(nsMsgKey key)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void selectFolderMsgByKey (in nsIMsgFolder aFolder, in nsMsgKey aKey); */
NS_IMETHODIMP nsMsgDBView::SelectFolderMsgByKey(nsIMsgFolder *aFolder, nsMsgKey aKey)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean suppressMsgDisplay; */
NS_IMETHODIMP nsMsgDBView::GetSuppressMsgDisplay(bool *aSuppressMsgDisplay)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDBView::SetSuppressMsgDisplay(bool aSuppressMsgDisplay)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean suppressCommandUpdating; */
NS_IMETHODIMP nsMsgDBView::GetSuppressCommandUpdating(bool *aSuppressCommandUpdating)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDBView::SetSuppressCommandUpdating(bool aSuppressCommandUpdating)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute boolean suppressChangeNotifications; */
NS_IMETHODIMP nsMsgDBView::GetSuppressChangeNotifications(bool *aSuppressChangeNotifications)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDBView::SetSuppressChangeNotifications(bool aSuppressChangeNotifications)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void onDeleteCompleted (in boolean succeeded); */
NS_IMETHODIMP nsMsgDBView::OnDeleteCompleted(bool succeeded)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute nsIMsgDatabase db; */
NS_IMETHODIMP nsMsgDBView::GetDb(nsIMsgDatabase * *aDb)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean supportsThreading; */
NS_IMETHODIMP nsMsgDBView::GetSupportsThreading(bool *aSupportsThreading)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute nsIMsgSearchSession searchSession; */
NS_IMETHODIMP nsMsgDBView::GetSearchSession(nsIMsgSearchSession * *aSearchSession)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDBView::SetSearchSession(nsIMsgSearchSession *aSearchSession)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean removeRowOnMoveOrDelete; */
NS_IMETHODIMP nsMsgDBView::GetRemoveRowOnMoveOrDelete(bool *aRemoveRowOnMoveOrDelete)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsMsgViewIndex findIndexFromKey (in nsMsgKey aMsgKey, in boolean aExpand); */
NS_IMETHODIMP nsMsgDBView::FindIndexFromKey(nsMsgKey aMsgKey, bool aExpand, nsMsgViewIndex *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsMsgViewIndex findIndexOfMsgHdr (in nsIMsgDBHdr aMsgHdr, in boolean aExpand); */
NS_IMETHODIMP nsMsgDBView::FindIndexOfMsgHdr(nsIMsgDBHdr *aMsgHdr, bool aExpand, nsMsgViewIndex *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void ExpandAndSelectThreadByIndex (in nsMsgViewIndex aIndex, in boolean aAugment); */
NS_IMETHODIMP nsMsgDBView::ExpandAndSelectThreadByIndex(nsMsgViewIndex aIndex, bool aAugment)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgThread getThreadContainingIndex (in nsMsgViewIndex aIndex); */
NS_IMETHODIMP nsMsgDBView::GetThreadContainingIndex(nsMsgViewIndex aIndex, nsIMsgThread * *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void insertTreeRows (in nsMsgViewIndex aIndex, in unsigned long aNumRows, in nsMsgKey aKey, in nsMsgViewFlagsTypeValue aFlags, in unsigned long aLevel, in nsIMsgFolder aFolder); */
NS_IMETHODIMP nsMsgDBView::InsertTreeRows(nsMsgViewIndex aIndex, uint32_t aNumRows, nsMsgKey aKey, nsMsgViewFlagsTypeValue aFlags, uint32_t aLevel, nsIMsgFolder *aFolder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void removeTreeRows (in nsMsgViewIndex aIndex, in unsigned long aNumRows); */
NS_IMETHODIMP nsMsgDBView::RemoveTreeRows(nsMsgViewIndex aIndex, uint32_t aNumRows)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void NoteChange (in nsMsgViewIndex aFirstLineChanged, in long aNumRows, in nsMsgViewNotificationCodeValue aChangeType); */
NS_IMETHODIMP nsMsgDBView::NoteChange(nsMsgViewIndex aFirstLineChanged, int32_t aNumRows, nsMsgViewNotificationCodeValue aChangeType)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgThread getThreadContainingMsgHdr (in nsIMsgDBHdr aMsgHdr); */
NS_IMETHODIMP nsMsgDBView::GetThreadContainingMsgHdr(nsIMsgDBHdr *aMsgHdr, nsIMsgThread * *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute boolean usingLines; */
NS_IMETHODIMP nsMsgDBView::GetUsingLines(bool *aUsingLines)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void addColumnHandler (in AString aColumn, in nsIMsgCustomColumnHandler aHandler); */
NS_IMETHODIMP nsMsgDBView::AddColumnHandler(const nsAString & aColumn, nsIMsgCustomColumnHandler *aHandler)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void removeColumnHandler (in AString aColumn); */
NS_IMETHODIMP nsMsgDBView::RemoveColumnHandler(const nsAString & aColumn)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgCustomColumnHandler getColumnHandler (in AString aColumn); */
NS_IMETHODIMP nsMsgDBView::GetColumnHandler(const nsAString & aColumn, nsIMsgCustomColumnHandler * *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute AString curCustomColumn; */
NS_IMETHODIMP nsMsgDBView::GetCurCustomColumn(nsAString & aCurCustomColumn)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgDBView::SetCurCustomColumn(const nsAString & aCurCustomColumn)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* AString cellTextForColumn (in long aRow, in wstring aColumnName); */
NS_IMETHODIMP nsMsgDBView::CellTextForColumn(int32_t aRow, const char16_t * aColumnName, nsAString & _retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


/* starting interface:    nsIMsgDBViewCommandUpdater */
#define NS_IMSGDBVIEWCOMMANDUPDATER_IID_STR "ce8f52ee-e742-4b31-8bdd-2b3a8168a117"

#define NS_IMSGDBVIEWCOMMANDUPDATER_IID \
  {0xce8f52ee, 0xe742, 0x4b31, \
    { 0x8b, 0xdd, 0x2b, 0x3a, 0x81, 0x68, 0xa1, 0x17 }}

class NS_NO_VTABLE nsIMsgDBViewCommandUpdater : public nsISupports {
 public: 

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGDBVIEWCOMMANDUPDATER_IID)

  /* void updateCommandStatus (); */
  NS_IMETHOD UpdateCommandStatus(void) = 0;

  /* void displayMessageChanged (in nsIMsgFolder aFolder, in AString aSubject, in ACString aKeywords); */
  NS_IMETHOD DisplayMessageChanged(nsIMsgFolder *aFolder, const nsAString & aSubject, const nsACString & aKeywords) = 0;

  /* void updateNextMessageAfterDelete (); */
  NS_IMETHOD UpdateNextMessageAfterDelete(void) = 0;

  /* boolean summarizeSelection (); */
  NS_IMETHOD SummarizeSelection(bool *_retval) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgDBViewCommandUpdater, NS_IMSGDBVIEWCOMMANDUPDATER_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGDBVIEWCOMMANDUPDATER \
  NS_IMETHOD UpdateCommandStatus(void) override; \
  NS_IMETHOD DisplayMessageChanged(nsIMsgFolder *aFolder, const nsAString & aSubject, const nsACString & aKeywords) override; \
  NS_IMETHOD UpdateNextMessageAfterDelete(void) override; \
  NS_IMETHOD SummarizeSelection(bool *_retval) override; 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGDBVIEWCOMMANDUPDATER(_to) \
  NS_IMETHOD UpdateCommandStatus(void) override { return _to UpdateCommandStatus(); } \
  NS_IMETHOD DisplayMessageChanged(nsIMsgFolder *aFolder, const nsAString & aSubject, const nsACString & aKeywords) override { return _to DisplayMessageChanged(aFolder, aSubject, aKeywords); } \
  NS_IMETHOD UpdateNextMessageAfterDelete(void) override { return _to UpdateNextMessageAfterDelete(); } \
  NS_IMETHOD SummarizeSelection(bool *_retval) override { return _to SummarizeSelection(_retval); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGDBVIEWCOMMANDUPDATER(_to) \
  NS_IMETHOD UpdateCommandStatus(void) override { return !_to ? NS_ERROR_NULL_POINTER : _to->UpdateCommandStatus(); } \
  NS_IMETHOD DisplayMessageChanged(nsIMsgFolder *aFolder, const nsAString & aSubject, const nsACString & aKeywords) override { return !_to ? NS_ERROR_NULL_POINTER : _to->DisplayMessageChanged(aFolder, aSubject, aKeywords); } \
  NS_IMETHOD UpdateNextMessageAfterDelete(void) override { return !_to ? NS_ERROR_NULL_POINTER : _to->UpdateNextMessageAfterDelete(); } \
  NS_IMETHOD SummarizeSelection(bool *_retval) override { return !_to ? NS_ERROR_NULL_POINTER : _to->SummarizeSelection(_retval); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsMsgDBViewCommandUpdater : public nsIMsgDBViewCommandUpdater
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGDBVIEWCOMMANDUPDATER

  nsMsgDBViewCommandUpdater();

private:
  ~nsMsgDBViewCommandUpdater();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS(nsMsgDBViewCommandUpdater, nsIMsgDBViewCommandUpdater)

nsMsgDBViewCommandUpdater::nsMsgDBViewCommandUpdater()
{
  /* member initializers and constructor code */
}

nsMsgDBViewCommandUpdater::~nsMsgDBViewCommandUpdater()
{
  /* destructor code */
}

/* void updateCommandStatus (); */
NS_IMETHODIMP nsMsgDBViewCommandUpdater::UpdateCommandStatus()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void displayMessageChanged (in nsIMsgFolder aFolder, in AString aSubject, in ACString aKeywords); */
NS_IMETHODIMP nsMsgDBViewCommandUpdater::DisplayMessageChanged(nsIMsgFolder *aFolder, const nsAString & aSubject, const nsACString & aKeywords)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void updateNextMessageAfterDelete (); */
NS_IMETHODIMP nsMsgDBViewCommandUpdater::UpdateNextMessageAfterDelete()
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* boolean summarizeSelection (); */
NS_IMETHODIMP nsMsgDBViewCommandUpdater::SummarizeSelection(bool *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


#endif /* __gen_nsIMsgDBView_h__ */
