/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM 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 nsIMsgDBViewCommandUpdater; /* forward declaration */

class nsIMsgDatabase; /* forward declaration */

class nsIMsgSearchSession; /* forward declaration */

typedef PRInt32 nsMsgViewNotificationCodeValue;

typedef PRInt32 nsMsgViewCommandCheckStateValue;

typedef PRInt32 nsMsgViewCommandTypeValue;

typedef PRInt32 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_DEFINE_STATIC_IID_ACCESSOR(NS_MSGVIEWSORTORDER_IID)

  enum { none = 0 };

  enum { ascending = 1 };

  enum { descending = 2 };

};

/* 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_ISUPPORTS1(_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 "dac950b0-1dd1-11b2-be06-d4c2003a6927"

#define NS_MSGVIEWTYPE_IID \
  {0xdac950b0, 0x1dd1, 0x11b2, \
    { 0xbe, 0x06, 0xd4, 0xc2, 0x00, 0x3a, 0x69, 0x27 }}

class NS_NO_VTABLE nsMsgViewType {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_MSGVIEWTYPE_IID)

  enum { eShowAllThreads = 0 };

  enum { eShowThreadsWithUnread = 2 };

  enum { eShowWatchedThreadsWithUnread = 3 };

  enum { eShowQuickSearchResults = 4 };

};

/* 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_ISUPPORTS1(_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_DEFINE_STATIC_IID_ACCESSOR(NS_MSGVIEWFLAGSTYPE_IID)

  /**
     * flags for GetViewFlags
     */
  enum { kNone = 0 };

  enum { kThreadedDisplay = 1 };

  enum { kShowIgnored = 8 };

  enum { kUnreadOnly = 16 };

  enum { kExpandAll = 32 };

};

/* 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_ISUPPORTS1(_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 "b2f31bca-fd18-11d4-a5be-0060b0fc04b7"

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

class NS_NO_VTABLE nsMsgViewSortType {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_MSGVIEWSORTTYPE_IID)

  enum { byNone = 17 };

  enum { byDate = 18 };

  enum { bySubject = 19 };

  enum { byAuthor = 20 };

  enum { byId = 21 };

  enum { byThread = 22 };

  enum { byPriority = 23 };

  enum { byStatus = 24 };

  enum { bySize = 25 };

  enum { byFlagged = 26 };

  enum { byUnread = 27 };

  enum { byRecipient = 28 };

  enum { byLocation = 29 };

  enum { byLabel = 30 };

  enum { byJunkStatus = 31 };

  enum { byAttachments = 32 };

};

/* 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_ISUPPORTS1(_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_DEFINE_STATIC_IID_ACCESSOR(NS_MSGVIEWNOTIFICATIONCODE_IID)

  enum { none = 0 };

  enum { insertOrDelete = 1 };

  enum { changed = 2 };

  enum { scramble = 3 };

  enum { all = 4 };

  enum { totalContentChanged = 5 };

  enum { newTopIndex = 6 };

};

/* 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_ISUPPORTS1(_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_DEFINE_STATIC_IID_ACCESSOR(NS_MSGVIEWCOMMANDCHECKSTATE_IID)

  enum { notUsed = 0 };

  enum { checked = 1 };

  enum { unchecked = 2 };

};

/* 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_ISUPPORTS1(_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_DEFINE_STATIC_IID_ACCESSOR(NS_MSGVIEWCOMMANDTYPE_IID)

  enum { markMessagesRead = 0 };

  enum { markMessagesUnread = 1 };

  enum { toggleMessageRead = 2 };

  enum { flagMessages = 3 };

  enum { unflagMessages = 4 };

  enum { toggleThreadWatched = 6 };

  enum { deleteMsg = 7 };

  enum { deleteNoTrash = 8 };

  enum { markThreadRead = 9 };

  enum { markAllRead = 10 };

  enum { expandAll = 11 };

  enum { collapseAll = 12 };

  enum { copyMessages = 13 };

  enum { moveMessages = 14 };

  enum { selectAll = 15 };

  enum { downloadSelectedForOffline = 16 };

  enum { downloadFlaggedForOffline = 17 };

  enum { selectThread = 18 };

  enum { selectFlagged = 19 };

  enum { cmdRequiringMsgBody = 20 };

  enum { label0 = 21 };

  enum { label1 = 22 };

  enum { label2 = 23 };

  enum { label3 = 24 };

  enum { label4 = 25 };

  enum { label5 = 26 };

  enum { lastLabel = 26 };

  enum { junk = 27 };

  enum { unjunk = 28 };

  enum { undeleteMsg = 29 };

  enum { applyFilters = 30 };

  enum { runJunkControls = 31 };

  enum { deleteJunk = 32 };

};

/* 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_ISUPPORTS1(_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_DEFINE_STATIC_IID_ACCESSOR(NS_MSGNAVIGATIONTYPE_IID)

  enum { firstMessage = 1 };

  enum { nextMessage = 2 };

  enum { previousMessage = 3 };

  enum { lastMessage = 4 };

  /**
   * must match nsMsgViewCommandTypeValue toggleThreadKilled
   */
  enum { toggleThreadKilled = 5 };

  enum { firstUnreadMessage = 6 };

  enum { nextUnreadMessage = 7 };

  enum { previousUnreadMessage = 8 };

  enum { lastUnreadMessage = 9 };

  enum { nextUnreadThread = 10 };

  enum { nextUnreadFolder = 11 };

  enum { nextFolder = 12 };

  enum { readMore = 13 };

  /**
   * Go back to the previous visited message
   */
  enum { back = 15 };

  /**
   * Go forward to the previous visited message 
   */
  enum { forward = 16 };

  enum { firstFlagged = 17 };

  enum { nextFlagged = 18 };

  enum { previousFlagged = 19 };

  enum { firstNew = 20 };

  enum { editUndo = 21 };

  enum { editRedo = 22 };

};

/* 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_ISUPPORTS1(_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 "704c7d28-fd1a-11d4-a5be-0060b0fc04b7"

#define NS_IMSGDBVIEW_IID \
  {0x704c7d28, 0xfd1a, 0x11d4, \
    { 0xa5, 0xbe, 0x00, 0x60, 0xb0, 0xfc, 0x04, 0xb7 }}

class NS_NO_VTABLE nsIMsgDBView : public nsISupports {
 public: 

  NS_DEFINE_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, PRInt32 *count) = 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, PRBool *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;

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

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

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

  /**
     * this method will automatically expand the destination thread, 
     * if needs be. 
     */
  /* 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, PRBool wrap) = 0;

  /**
     * Indicates if navigation of the passed motion type is valid. 
     */
  /* boolean navigateStatus (in nsMsgNavigationTypeValue motion); */
  NS_IMETHOD NavigateStatus(nsMsgNavigationTypeValue motion, PRBool *_retval) = 0;

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

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

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

  /* string getURIForViewIndex (in nsMsgViewIndex index); */
  NS_IMETHOD GetURIForViewIndex(nsMsgViewIndex index, char **_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 getURIsForSelection ([array, size_is (count)] out string uris, out unsigned long count); */
  NS_IMETHOD GetURIsForSelection(char ***uris, PRUint32 *count) = 0;

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

  /* readonly attribute string URIForFirstSelectedMessage; */
  NS_IMETHOD GetURIForFirstSelectedMessage(char * *aURIForFirstSelectedMessage) = 0;

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

  /* void loadMessageByMsgKey (in nsMsgKey aMsgKey); */
  NS_IMETHOD LoadMessageByMsgKey(nsMsgKey aMsgKey) = 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(PRUint32 *aNumSelected) = 0;

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

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

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

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

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

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

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

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

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

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

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

};

/* 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, PRInt32 *count); \
  NS_IMETHOD Close(void); \
  NS_IMETHOD Init(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater); \
  NS_IMETHOD Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder); \
  NS_IMETHOD DoCommand(nsMsgViewCommandTypeValue command); \
  NS_IMETHOD DoCommandWithFolder(nsMsgViewCommandTypeValue command, nsIMsgFolder *destFolder); \
  NS_IMETHOD GetCommandStatus(nsMsgViewCommandTypeValue command, PRBool *selectable_p, nsMsgViewCommandCheckStateValue *selected_p); \
  NS_IMETHOD GetViewType(nsMsgViewTypeValue *aViewType); \
  NS_IMETHOD GetViewFlags(nsMsgViewFlagsTypeValue *aViewFlags); \
  NS_IMETHOD SetViewFlags(nsMsgViewFlagsTypeValue aViewFlags); \
  NS_IMETHOD GetSortType(nsMsgViewSortTypeValue *aSortType); \
  NS_IMETHOD GetSortOrder(nsMsgViewSortOrderValue *aSortOrder); \
  NS_IMETHOD GetKeyForFirstSelectedMessage(nsMsgKey *aKeyForFirstSelectedMessage); \
  NS_IMETHOD ViewNavigate(nsMsgNavigationTypeValue motion, nsMsgKey *resultId, nsMsgViewIndex *resultIndex, nsMsgViewIndex *threadIndex, PRBool wrap); \
  NS_IMETHOD NavigateStatus(nsMsgNavigationTypeValue motion, PRBool *_retval); \
  NS_IMETHOD GetMsgFolder(nsIMsgFolder * *aMsgFolder); \
  NS_IMETHOD GetKeyAt(nsMsgViewIndex index, nsMsgKey *_retval); \
  NS_IMETHOD GetFolderForViewIndex(nsMsgViewIndex index, nsIMsgFolder **_retval); \
  NS_IMETHOD GetURIForViewIndex(nsMsgViewIndex index, char **_retval); \
  NS_IMETHOD CloneDBView(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater, nsIMsgDBView **_retval); \
  NS_IMETHOD GetURIsForSelection(char ***uris, PRUint32 *count); \
  NS_IMETHOD GetIndicesForSelection(nsMsgViewIndex **indices, PRUint32 *count); \
  NS_IMETHOD GetURIForFirstSelectedMessage(char * *aURIForFirstSelectedMessage); \
  NS_IMETHOD GetHdrForFirstSelectedMessage(nsIMsgDBHdr * *aHdrForFirstSelectedMessage); \
  NS_IMETHOD LoadMessageByMsgKey(nsMsgKey aMsgKey); \
  NS_IMETHOD LoadMessageByUrl(const char *aUrl); \
  NS_IMETHOD ReloadMessage(void); \
  NS_IMETHOD ReloadMessageWithAllParts(void); \
  NS_IMETHOD GetNumSelected(PRUint32 *aNumSelected); \
  NS_IMETHOD GetMsgToSelectAfterDelete(nsMsgViewIndex *aMsgToSelectAfterDelete); \
  NS_IMETHOD GetCurrentlyDisplayedMessage(nsMsgViewIndex *aCurrentlyDisplayedMessage); \
  NS_IMETHOD SelectMsgByKey(nsMsgKey key); \
  NS_IMETHOD GetSuppressMsgDisplay(PRBool *aSuppressMsgDisplay); \
  NS_IMETHOD SetSuppressMsgDisplay(PRBool aSuppressMsgDisplay); \
  NS_IMETHOD GetSuppressCommandUpdating(PRBool *aSuppressCommandUpdating); \
  NS_IMETHOD SetSuppressCommandUpdating(PRBool aSuppressCommandUpdating); \
  NS_IMETHOD OnDeleteCompleted(PRBool succeeded); \
  NS_IMETHOD GetDb(nsIMsgDatabase * *aDb); \
  NS_IMETHOD GetSupportsThreading(PRBool *aSupportsThreading); \
  NS_IMETHOD GetSearchSession(nsIMsgSearchSession * *aSearchSession); \
  NS_IMETHOD SetSearchSession(nsIMsgSearchSession * aSearchSession); \
  NS_IMETHOD GetRemoveRowOnMoveOrDelete(PRBool *aRemoveRowOnMoveOrDelete); \
  NS_IMETHOD FindIndexFromKey(nsMsgKey aMsgKey, PRBool aExpand, nsMsgViewIndex *_retval); 

/* 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, PRInt32 *count) { return _to Open(folder, sortType, sortOrder, viewFlags, count); } \
  NS_IMETHOD Close(void) { return _to Close(); } \
  NS_IMETHOD Init(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater) { return _to Init(aMessengerInstance, aMsgWindow, aCommandUpdater); } \
  NS_IMETHOD Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder) { return _to Sort(sortType, sortOrder); } \
  NS_IMETHOD DoCommand(nsMsgViewCommandTypeValue command) { return _to DoCommand(command); } \
  NS_IMETHOD DoCommandWithFolder(nsMsgViewCommandTypeValue command, nsIMsgFolder *destFolder) { return _to DoCommandWithFolder(command, destFolder); } \
  NS_IMETHOD GetCommandStatus(nsMsgViewCommandTypeValue command, PRBool *selectable_p, nsMsgViewCommandCheckStateValue *selected_p) { return _to GetCommandStatus(command, selectable_p, selected_p); } \
  NS_IMETHOD GetViewType(nsMsgViewTypeValue *aViewType) { return _to GetViewType(aViewType); } \
  NS_IMETHOD GetViewFlags(nsMsgViewFlagsTypeValue *aViewFlags) { return _to GetViewFlags(aViewFlags); } \
  NS_IMETHOD SetViewFlags(nsMsgViewFlagsTypeValue aViewFlags) { return _to SetViewFlags(aViewFlags); } \
  NS_IMETHOD GetSortType(nsMsgViewSortTypeValue *aSortType) { return _to GetSortType(aSortType); } \
  NS_IMETHOD GetSortOrder(nsMsgViewSortOrderValue *aSortOrder) { return _to GetSortOrder(aSortOrder); } \
  NS_IMETHOD GetKeyForFirstSelectedMessage(nsMsgKey *aKeyForFirstSelectedMessage) { return _to GetKeyForFirstSelectedMessage(aKeyForFirstSelectedMessage); } \
  NS_IMETHOD ViewNavigate(nsMsgNavigationTypeValue motion, nsMsgKey *resultId, nsMsgViewIndex *resultIndex, nsMsgViewIndex *threadIndex, PRBool wrap) { return _to ViewNavigate(motion, resultId, resultIndex, threadIndex, wrap); } \
  NS_IMETHOD NavigateStatus(nsMsgNavigationTypeValue motion, PRBool *_retval) { return _to NavigateStatus(motion, _retval); } \
  NS_IMETHOD GetMsgFolder(nsIMsgFolder * *aMsgFolder) { return _to GetMsgFolder(aMsgFolder); } \
  NS_IMETHOD GetKeyAt(nsMsgViewIndex index, nsMsgKey *_retval) { return _to GetKeyAt(index, _retval); } \
  NS_IMETHOD GetFolderForViewIndex(nsMsgViewIndex index, nsIMsgFolder **_retval) { return _to GetFolderForViewIndex(index, _retval); } \
  NS_IMETHOD GetURIForViewIndex(nsMsgViewIndex index, char **_retval) { return _to GetURIForViewIndex(index, _retval); } \
  NS_IMETHOD CloneDBView(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater, nsIMsgDBView **_retval) { return _to CloneDBView(aMessengerInstance, aMsgWindow, aCommandUpdater, _retval); } \
  NS_IMETHOD GetURIsForSelection(char ***uris, PRUint32 *count) { return _to GetURIsForSelection(uris, count); } \
  NS_IMETHOD GetIndicesForSelection(nsMsgViewIndex **indices, PRUint32 *count) { return _to GetIndicesForSelection(indices, count); } \
  NS_IMETHOD GetURIForFirstSelectedMessage(char * *aURIForFirstSelectedMessage) { return _to GetURIForFirstSelectedMessage(aURIForFirstSelectedMessage); } \
  NS_IMETHOD GetHdrForFirstSelectedMessage(nsIMsgDBHdr * *aHdrForFirstSelectedMessage) { return _to GetHdrForFirstSelectedMessage(aHdrForFirstSelectedMessage); } \
  NS_IMETHOD LoadMessageByMsgKey(nsMsgKey aMsgKey) { return _to LoadMessageByMsgKey(aMsgKey); } \
  NS_IMETHOD LoadMessageByUrl(const char *aUrl) { return _to LoadMessageByUrl(aUrl); } \
  NS_IMETHOD ReloadMessage(void) { return _to ReloadMessage(); } \
  NS_IMETHOD ReloadMessageWithAllParts(void) { return _to ReloadMessageWithAllParts(); } \
  NS_IMETHOD GetNumSelected(PRUint32 *aNumSelected) { return _to GetNumSelected(aNumSelected); } \
  NS_IMETHOD GetMsgToSelectAfterDelete(nsMsgViewIndex *aMsgToSelectAfterDelete) { return _to GetMsgToSelectAfterDelete(aMsgToSelectAfterDelete); } \
  NS_IMETHOD GetCurrentlyDisplayedMessage(nsMsgViewIndex *aCurrentlyDisplayedMessage) { return _to GetCurrentlyDisplayedMessage(aCurrentlyDisplayedMessage); } \
  NS_IMETHOD SelectMsgByKey(nsMsgKey key) { return _to SelectMsgByKey(key); } \
  NS_IMETHOD GetSuppressMsgDisplay(PRBool *aSuppressMsgDisplay) { return _to GetSuppressMsgDisplay(aSuppressMsgDisplay); } \
  NS_IMETHOD SetSuppressMsgDisplay(PRBool aSuppressMsgDisplay) { return _to SetSuppressMsgDisplay(aSuppressMsgDisplay); } \
  NS_IMETHOD GetSuppressCommandUpdating(PRBool *aSuppressCommandUpdating) { return _to GetSuppressCommandUpdating(aSuppressCommandUpdating); } \
  NS_IMETHOD SetSuppressCommandUpdating(PRBool aSuppressCommandUpdating) { return _to SetSuppressCommandUpdating(aSuppressCommandUpdating); } \
  NS_IMETHOD OnDeleteCompleted(PRBool succeeded) { return _to OnDeleteCompleted(succeeded); } \
  NS_IMETHOD GetDb(nsIMsgDatabase * *aDb) { return _to GetDb(aDb); } \
  NS_IMETHOD GetSupportsThreading(PRBool *aSupportsThreading) { return _to GetSupportsThreading(aSupportsThreading); } \
  NS_IMETHOD GetSearchSession(nsIMsgSearchSession * *aSearchSession) { return _to GetSearchSession(aSearchSession); } \
  NS_IMETHOD SetSearchSession(nsIMsgSearchSession * aSearchSession) { return _to SetSearchSession(aSearchSession); } \
  NS_IMETHOD GetRemoveRowOnMoveOrDelete(PRBool *aRemoveRowOnMoveOrDelete) { return _to GetRemoveRowOnMoveOrDelete(aRemoveRowOnMoveOrDelete); } \
  NS_IMETHOD FindIndexFromKey(nsMsgKey aMsgKey, PRBool aExpand, nsMsgViewIndex *_retval) { return _to FindIndexFromKey(aMsgKey, aExpand, _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, PRInt32 *count) { return !_to ? NS_ERROR_NULL_POINTER : _to->Open(folder, sortType, sortOrder, viewFlags, count); } \
  NS_IMETHOD Close(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->Close(); } \
  NS_IMETHOD Init(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater) { return !_to ? NS_ERROR_NULL_POINTER : _to->Init(aMessengerInstance, aMsgWindow, aCommandUpdater); } \
  NS_IMETHOD Sort(nsMsgViewSortTypeValue sortType, nsMsgViewSortOrderValue sortOrder) { return !_to ? NS_ERROR_NULL_POINTER : _to->Sort(sortType, sortOrder); } \
  NS_IMETHOD DoCommand(nsMsgViewCommandTypeValue command) { return !_to ? NS_ERROR_NULL_POINTER : _to->DoCommand(command); } \
  NS_IMETHOD DoCommandWithFolder(nsMsgViewCommandTypeValue command, nsIMsgFolder *destFolder) { return !_to ? NS_ERROR_NULL_POINTER : _to->DoCommandWithFolder(command, destFolder); } \
  NS_IMETHOD GetCommandStatus(nsMsgViewCommandTypeValue command, PRBool *selectable_p, nsMsgViewCommandCheckStateValue *selected_p) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCommandStatus(command, selectable_p, selected_p); } \
  NS_IMETHOD GetViewType(nsMsgViewTypeValue *aViewType) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetViewType(aViewType); } \
  NS_IMETHOD GetViewFlags(nsMsgViewFlagsTypeValue *aViewFlags) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetViewFlags(aViewFlags); } \
  NS_IMETHOD SetViewFlags(nsMsgViewFlagsTypeValue aViewFlags) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetViewFlags(aViewFlags); } \
  NS_IMETHOD GetSortType(nsMsgViewSortTypeValue *aSortType) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSortType(aSortType); } \
  NS_IMETHOD GetSortOrder(nsMsgViewSortOrderValue *aSortOrder) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSortOrder(aSortOrder); } \
  NS_IMETHOD GetKeyForFirstSelectedMessage(nsMsgKey *aKeyForFirstSelectedMessage) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetKeyForFirstSelectedMessage(aKeyForFirstSelectedMessage); } \
  NS_IMETHOD ViewNavigate(nsMsgNavigationTypeValue motion, nsMsgKey *resultId, nsMsgViewIndex *resultIndex, nsMsgViewIndex *threadIndex, PRBool wrap) { return !_to ? NS_ERROR_NULL_POINTER : _to->ViewNavigate(motion, resultId, resultIndex, threadIndex, wrap); } \
  NS_IMETHOD NavigateStatus(nsMsgNavigationTypeValue motion, PRBool *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->NavigateStatus(motion, _retval); } \
  NS_IMETHOD GetMsgFolder(nsIMsgFolder * *aMsgFolder) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgFolder(aMsgFolder); } \
  NS_IMETHOD GetKeyAt(nsMsgViewIndex index, nsMsgKey *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetKeyAt(index, _retval); } \
  NS_IMETHOD GetFolderForViewIndex(nsMsgViewIndex index, nsIMsgFolder **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFolderForViewIndex(index, _retval); } \
  NS_IMETHOD GetURIForViewIndex(nsMsgViewIndex index, char **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetURIForViewIndex(index, _retval); } \
  NS_IMETHOD CloneDBView(nsIMessenger *aMessengerInstance, nsIMsgWindow *aMsgWindow, nsIMsgDBViewCommandUpdater *aCommandUpdater, nsIMsgDBView **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->CloneDBView(aMessengerInstance, aMsgWindow, aCommandUpdater, _retval); } \
  NS_IMETHOD GetURIsForSelection(char ***uris, PRUint32 *count) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetURIsForSelection(uris, count); } \
  NS_IMETHOD GetIndicesForSelection(nsMsgViewIndex **indices, PRUint32 *count) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetIndicesForSelection(indices, count); } \
  NS_IMETHOD GetURIForFirstSelectedMessage(char * *aURIForFirstSelectedMessage) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetURIForFirstSelectedMessage(aURIForFirstSelectedMessage); } \
  NS_IMETHOD GetHdrForFirstSelectedMessage(nsIMsgDBHdr * *aHdrForFirstSelectedMessage) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetHdrForFirstSelectedMessage(aHdrForFirstSelectedMessage); } \
  NS_IMETHOD LoadMessageByMsgKey(nsMsgKey aMsgKey) { return !_to ? NS_ERROR_NULL_POINTER : _to->LoadMessageByMsgKey(aMsgKey); } \
  NS_IMETHOD LoadMessageByUrl(const char *aUrl) { return !_to ? NS_ERROR_NULL_POINTER : _to->LoadMessageByUrl(aUrl); } \
  NS_IMETHOD ReloadMessage(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->ReloadMessage(); } \
  NS_IMETHOD ReloadMessageWithAllParts(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->ReloadMessageWithAllParts(); } \
  NS_IMETHOD GetNumSelected(PRUint32 *aNumSelected) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNumSelected(aNumSelected); } \
  NS_IMETHOD GetMsgToSelectAfterDelete(nsMsgViewIndex *aMsgToSelectAfterDelete) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetMsgToSelectAfterDelete(aMsgToSelectAfterDelete); } \
  NS_IMETHOD GetCurrentlyDisplayedMessage(nsMsgViewIndex *aCurrentlyDisplayedMessage) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetCurrentlyDisplayedMessage(aCurrentlyDisplayedMessage); } \
  NS_IMETHOD SelectMsgByKey(nsMsgKey key) { return !_to ? NS_ERROR_NULL_POINTER : _to->SelectMsgByKey(key); } \
  NS_IMETHOD GetSuppressMsgDisplay(PRBool *aSuppressMsgDisplay) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSuppressMsgDisplay(aSuppressMsgDisplay); } \
  NS_IMETHOD SetSuppressMsgDisplay(PRBool aSuppressMsgDisplay) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSuppressMsgDisplay(aSuppressMsgDisplay); } \
  NS_IMETHOD GetSuppressCommandUpdating(PRBool *aSuppressCommandUpdating) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSuppressCommandUpdating(aSuppressCommandUpdating); } \
  NS_IMETHOD SetSuppressCommandUpdating(PRBool aSuppressCommandUpdating) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSuppressCommandUpdating(aSuppressCommandUpdating); } \
  NS_IMETHOD OnDeleteCompleted(PRBool succeeded) { return !_to ? NS_ERROR_NULL_POINTER : _to->OnDeleteCompleted(succeeded); } \
  NS_IMETHOD GetDb(nsIMsgDatabase * *aDb) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetDb(aDb); } \
  NS_IMETHOD GetSupportsThreading(PRBool *aSupportsThreading) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSupportsThreading(aSupportsThreading); } \
  NS_IMETHOD GetSearchSession(nsIMsgSearchSession * *aSearchSession) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSearchSession(aSearchSession); } \
  NS_IMETHOD SetSearchSession(nsIMsgSearchSession * aSearchSession) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSearchSession(aSearchSession); } \
  NS_IMETHOD GetRemoveRowOnMoveOrDelete(PRBool *aRemoveRowOnMoveOrDelete) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRemoveRowOnMoveOrDelete(aRemoveRowOnMoveOrDelete); } \
  NS_IMETHOD FindIndexFromKey(nsMsgKey aMsgKey, PRBool aExpand, nsMsgViewIndex *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->FindIndexFromKey(aMsgKey, aExpand, _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_ISUPPORTS1(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, PRInt32 *count)
{
    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, PRBool *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;
}

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

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

/* readonly attribute nsMsgKey keyForFirstSelectedMessage; */
NS_IMETHODIMP nsMsgDBView::GetKeyForFirstSelectedMessage(nsMsgKey *aKeyForFirstSelectedMessage)
{
    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, PRBool wrap)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

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

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

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

/* string getURIForViewIndex (in nsMsgViewIndex index); */
NS_IMETHODIMP nsMsgDBView::GetURIForViewIndex(nsMsgViewIndex index, char **_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 getURIsForSelection ([array, size_is (count)] out string uris, out unsigned long count); */
NS_IMETHODIMP nsMsgDBView::GetURIsForSelection(char ***uris, PRUint32 *count)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

/* readonly attribute string URIForFirstSelectedMessage; */
NS_IMETHODIMP nsMsgDBView::GetURIForFirstSelectedMessage(char * *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 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(PRUint32 *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;
}

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

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

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

/* void onDeleteCompleted (in boolean succeeded); */
NS_IMETHODIMP nsMsgDBView::OnDeleteCompleted(PRBool 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(PRBool *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(PRBool *aRemoveRowOnMoveOrDelete)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

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


/* starting interface:    nsIMsgDBViewCommandUpdater */
#define NS_IMSGDBVIEWCOMMANDUPDATER_IID_STR "65fc9ad5-0912-11d5-9901-001083010e9b"

#define NS_IMSGDBVIEWCOMMANDUPDATER_IID \
  {0x65fc9ad5, 0x0912, 0x11d5, \
    { 0x99, 0x01, 0x00, 0x10, 0x83, 0x01, 0x0e, 0x9b }}

class NS_NO_VTABLE nsIMsgDBViewCommandUpdater : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_IMSGDBVIEWCOMMANDUPDATER_IID)

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

  /* void displayMessageChanged (in nsIMsgFolder aFolder, in wstring aSubject, in string aKeywords); */
  NS_IMETHOD DisplayMessageChanged(nsIMsgFolder *aFolder, const PRUnichar *aSubject, const char *aKeywords) = 0;

  /**
	 * allows the backend to tell the front end to re-determine 
	 * which message we should selet after a delete or move
	 */
  /* void updateNextMessageAfterDelete (); */
  NS_IMETHOD UpdateNextMessageAfterDelete(void) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGDBVIEWCOMMANDUPDATER \
  NS_IMETHOD UpdateCommandStatus(void); \
  NS_IMETHOD DisplayMessageChanged(nsIMsgFolder *aFolder, const PRUnichar *aSubject, const char *aKeywords); \
  NS_IMETHOD UpdateNextMessageAfterDelete(void); 

/* 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) { return _to UpdateCommandStatus(); } \
  NS_IMETHOD DisplayMessageChanged(nsIMsgFolder *aFolder, const PRUnichar *aSubject, const char *aKeywords) { return _to DisplayMessageChanged(aFolder, aSubject, aKeywords); } \
  NS_IMETHOD UpdateNextMessageAfterDelete(void) { return _to UpdateNextMessageAfterDelete(); } 

/* 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) { return !_to ? NS_ERROR_NULL_POINTER : _to->UpdateCommandStatus(); } \
  NS_IMETHOD DisplayMessageChanged(nsIMsgFolder *aFolder, const PRUnichar *aSubject, const char *aKeywords) { return !_to ? NS_ERROR_NULL_POINTER : _to->DisplayMessageChanged(aFolder, aSubject, aKeywords); } \
  NS_IMETHOD UpdateNextMessageAfterDelete(void) { return !_to ? NS_ERROR_NULL_POINTER : _to->UpdateNextMessageAfterDelete(); } 

#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_ISUPPORTS1(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 wstring aSubject, in string aKeywords); */
NS_IMETHODIMP nsMsgDBViewCommandUpdater::DisplayMessageChanged(nsIMsgFolder *aFolder, const PRUnichar *aSubject, const char *aKeywords)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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

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


#endif /* __gen_nsIMsgDBView_h__ */
