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

#ifndef __gen_nsIMsgThread_h__
#define __gen_nsIMsgThread_h__


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

#ifndef __gen_nsISimpleEnumerator_h__
#include "nsISimpleEnumerator.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 nsIMsgDBHdr; /* forward declaration */

class nsIDBChangeAnnouncer; /* forward declaration */


/* starting interface:    nsIMsgThread */
#define NS_IMSGTHREAD_IID_STR "df64af90-e2da-11d2-8d6c-00805f8a6617"

#define NS_IMSGTHREAD_IID \
  {0xdf64af90, 0xe2da, 0x11d2, \
    { 0x8d, 0x6c, 0x00, 0x80, 0x5f, 0x8a, 0x66, 0x17 }}

class NS_NO_VTABLE nsIMsgThread : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_IMSGTHREAD_IID)

  /* attribute nsMsgKey threadKey; */
  NS_IMETHOD GetThreadKey(nsMsgKey *aThreadKey) = 0;
  NS_IMETHOD SetThreadKey(nsMsgKey aThreadKey) = 0;

  /* attribute unsigned long flags; */
  NS_IMETHOD GetFlags(PRUint32 *aFlags) = 0;
  NS_IMETHOD SetFlags(PRUint32 aFlags) = 0;

  /* attribute string subject; */
  NS_IMETHOD GetSubject(char * *aSubject) = 0;
  NS_IMETHOD SetSubject(const char * aSubject) = 0;

  /* attribute unsigned long newestMsgDate; */
  NS_IMETHOD GetNewestMsgDate(PRUint32 *aNewestMsgDate) = 0;
  NS_IMETHOD SetNewestMsgDate(PRUint32 aNewestMsgDate) = 0;

  /* readonly attribute unsigned long numChildren; */
  NS_IMETHOD GetNumChildren(PRUint32 *aNumChildren) = 0;

  /* readonly attribute unsigned long numUnreadChildren; */
  NS_IMETHOD GetNumUnreadChildren(PRUint32 *aNumUnreadChildren) = 0;

  /* void AddChild (in nsIMsgDBHdr child, in nsIMsgDBHdr inReplyTo, in boolean threadInThread, in nsIDBChangeAnnouncer announcer); */
  NS_IMETHOD AddChild(nsIMsgDBHdr *child, nsIMsgDBHdr *inReplyTo, PRBool threadInThread, nsIDBChangeAnnouncer *announcer) = 0;

  /* nsIMsgDBHdr GetChildAt (in long index); */
  NS_IMETHOD GetChildAt(PRInt32 index, nsIMsgDBHdr **_retval) = 0;

  /* nsMsgKey GetChildKeyAt (in long index); */
  NS_IMETHOD GetChildKeyAt(PRInt32 index, nsMsgKey *_retval) = 0;

  /* nsIMsgDBHdr GetChild (in nsMsgKey msgKey); */
  NS_IMETHOD GetChild(nsMsgKey msgKey, nsIMsgDBHdr **_retval) = 0;

  /* nsIMsgDBHdr GetChildHdrAt (in long index); */
  NS_IMETHOD GetChildHdrAt(PRInt32 index, nsIMsgDBHdr **_retval) = 0;

  /* nsIMsgDBHdr GetRootHdr (out long index); */
  NS_IMETHOD GetRootHdr(PRInt32 *index, nsIMsgDBHdr **_retval) = 0;

  /* void RemoveChildAt (in long index); */
  NS_IMETHOD RemoveChildAt(PRInt32 index) = 0;

  /* void RemoveChildHdr (in nsIMsgDBHdr child, in nsIDBChangeAnnouncer announcer); */
  NS_IMETHOD RemoveChildHdr(nsIMsgDBHdr *child, nsIDBChangeAnnouncer *announcer) = 0;

  /* void MarkChildRead (in boolean bRead); */
  NS_IMETHOD MarkChildRead(PRBool bRead) = 0;

  /* nsIMsgDBHdr GetFirstUnreadChild (); */
  NS_IMETHOD GetFirstUnreadChild(nsIMsgDBHdr **_retval) = 0;

  /* nsISimpleEnumerator EnumerateMessages (in nsMsgKey parent); */
  NS_IMETHOD EnumerateMessages(nsMsgKey parent, nsISimpleEnumerator **_retval) = 0;

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGTHREAD \
  NS_IMETHOD GetThreadKey(nsMsgKey *aThreadKey); \
  NS_IMETHOD SetThreadKey(nsMsgKey aThreadKey); \
  NS_IMETHOD GetFlags(PRUint32 *aFlags); \
  NS_IMETHOD SetFlags(PRUint32 aFlags); \
  NS_IMETHOD GetSubject(char * *aSubject); \
  NS_IMETHOD SetSubject(const char * aSubject); \
  NS_IMETHOD GetNewestMsgDate(PRUint32 *aNewestMsgDate); \
  NS_IMETHOD SetNewestMsgDate(PRUint32 aNewestMsgDate); \
  NS_IMETHOD GetNumChildren(PRUint32 *aNumChildren); \
  NS_IMETHOD GetNumUnreadChildren(PRUint32 *aNumUnreadChildren); \
  NS_IMETHOD AddChild(nsIMsgDBHdr *child, nsIMsgDBHdr *inReplyTo, PRBool threadInThread, nsIDBChangeAnnouncer *announcer); \
  NS_IMETHOD GetChildAt(PRInt32 index, nsIMsgDBHdr **_retval); \
  NS_IMETHOD GetChildKeyAt(PRInt32 index, nsMsgKey *_retval); \
  NS_IMETHOD GetChild(nsMsgKey msgKey, nsIMsgDBHdr **_retval); \
  NS_IMETHOD GetChildHdrAt(PRInt32 index, nsIMsgDBHdr **_retval); \
  NS_IMETHOD GetRootHdr(PRInt32 *index, nsIMsgDBHdr **_retval); \
  NS_IMETHOD RemoveChildAt(PRInt32 index); \
  NS_IMETHOD RemoveChildHdr(nsIMsgDBHdr *child, nsIDBChangeAnnouncer *announcer); \
  NS_IMETHOD MarkChildRead(PRBool bRead); \
  NS_IMETHOD GetFirstUnreadChild(nsIMsgDBHdr **_retval); \
  NS_IMETHOD EnumerateMessages(nsMsgKey parent, nsISimpleEnumerator **_retval); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGTHREAD(_to) \
  NS_IMETHOD GetThreadKey(nsMsgKey *aThreadKey) { return _to GetThreadKey(aThreadKey); } \
  NS_IMETHOD SetThreadKey(nsMsgKey aThreadKey) { return _to SetThreadKey(aThreadKey); } \
  NS_IMETHOD GetFlags(PRUint32 *aFlags) { return _to GetFlags(aFlags); } \
  NS_IMETHOD SetFlags(PRUint32 aFlags) { return _to SetFlags(aFlags); } \
  NS_IMETHOD GetSubject(char * *aSubject) { return _to GetSubject(aSubject); } \
  NS_IMETHOD SetSubject(const char * aSubject) { return _to SetSubject(aSubject); } \
  NS_IMETHOD GetNewestMsgDate(PRUint32 *aNewestMsgDate) { return _to GetNewestMsgDate(aNewestMsgDate); } \
  NS_IMETHOD SetNewestMsgDate(PRUint32 aNewestMsgDate) { return _to SetNewestMsgDate(aNewestMsgDate); } \
  NS_IMETHOD GetNumChildren(PRUint32 *aNumChildren) { return _to GetNumChildren(aNumChildren); } \
  NS_IMETHOD GetNumUnreadChildren(PRUint32 *aNumUnreadChildren) { return _to GetNumUnreadChildren(aNumUnreadChildren); } \
  NS_IMETHOD AddChild(nsIMsgDBHdr *child, nsIMsgDBHdr *inReplyTo, PRBool threadInThread, nsIDBChangeAnnouncer *announcer) { return _to AddChild(child, inReplyTo, threadInThread, announcer); } \
  NS_IMETHOD GetChildAt(PRInt32 index, nsIMsgDBHdr **_retval) { return _to GetChildAt(index, _retval); } \
  NS_IMETHOD GetChildKeyAt(PRInt32 index, nsMsgKey *_retval) { return _to GetChildKeyAt(index, _retval); } \
  NS_IMETHOD GetChild(nsMsgKey msgKey, nsIMsgDBHdr **_retval) { return _to GetChild(msgKey, _retval); } \
  NS_IMETHOD GetChildHdrAt(PRInt32 index, nsIMsgDBHdr **_retval) { return _to GetChildHdrAt(index, _retval); } \
  NS_IMETHOD GetRootHdr(PRInt32 *index, nsIMsgDBHdr **_retval) { return _to GetRootHdr(index, _retval); } \
  NS_IMETHOD RemoveChildAt(PRInt32 index) { return _to RemoveChildAt(index); } \
  NS_IMETHOD RemoveChildHdr(nsIMsgDBHdr *child, nsIDBChangeAnnouncer *announcer) { return _to RemoveChildHdr(child, announcer); } \
  NS_IMETHOD MarkChildRead(PRBool bRead) { return _to MarkChildRead(bRead); } \
  NS_IMETHOD GetFirstUnreadChild(nsIMsgDBHdr **_retval) { return _to GetFirstUnreadChild(_retval); } \
  NS_IMETHOD EnumerateMessages(nsMsgKey parent, nsISimpleEnumerator **_retval) { return _to EnumerateMessages(parent, _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_NSIMSGTHREAD(_to) \
  NS_IMETHOD GetThreadKey(nsMsgKey *aThreadKey) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetThreadKey(aThreadKey); } \
  NS_IMETHOD SetThreadKey(nsMsgKey aThreadKey) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetThreadKey(aThreadKey); } \
  NS_IMETHOD GetFlags(PRUint32 *aFlags) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFlags(aFlags); } \
  NS_IMETHOD SetFlags(PRUint32 aFlags) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetFlags(aFlags); } \
  NS_IMETHOD GetSubject(char * *aSubject) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetSubject(aSubject); } \
  NS_IMETHOD SetSubject(const char * aSubject) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetSubject(aSubject); } \
  NS_IMETHOD GetNewestMsgDate(PRUint32 *aNewestMsgDate) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNewestMsgDate(aNewestMsgDate); } \
  NS_IMETHOD SetNewestMsgDate(PRUint32 aNewestMsgDate) { return !_to ? NS_ERROR_NULL_POINTER : _to->SetNewestMsgDate(aNewestMsgDate); } \
  NS_IMETHOD GetNumChildren(PRUint32 *aNumChildren) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNumChildren(aNumChildren); } \
  NS_IMETHOD GetNumUnreadChildren(PRUint32 *aNumUnreadChildren) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetNumUnreadChildren(aNumUnreadChildren); } \
  NS_IMETHOD AddChild(nsIMsgDBHdr *child, nsIMsgDBHdr *inReplyTo, PRBool threadInThread, nsIDBChangeAnnouncer *announcer) { return !_to ? NS_ERROR_NULL_POINTER : _to->AddChild(child, inReplyTo, threadInThread, announcer); } \
  NS_IMETHOD GetChildAt(PRInt32 index, nsIMsgDBHdr **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetChildAt(index, _retval); } \
  NS_IMETHOD GetChildKeyAt(PRInt32 index, nsMsgKey *_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetChildKeyAt(index, _retval); } \
  NS_IMETHOD GetChild(nsMsgKey msgKey, nsIMsgDBHdr **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetChild(msgKey, _retval); } \
  NS_IMETHOD GetChildHdrAt(PRInt32 index, nsIMsgDBHdr **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetChildHdrAt(index, _retval); } \
  NS_IMETHOD GetRootHdr(PRInt32 *index, nsIMsgDBHdr **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetRootHdr(index, _retval); } \
  NS_IMETHOD RemoveChildAt(PRInt32 index) { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveChildAt(index); } \
  NS_IMETHOD RemoveChildHdr(nsIMsgDBHdr *child, nsIDBChangeAnnouncer *announcer) { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveChildHdr(child, announcer); } \
  NS_IMETHOD MarkChildRead(PRBool bRead) { return !_to ? NS_ERROR_NULL_POINTER : _to->MarkChildRead(bRead); } \
  NS_IMETHOD GetFirstUnreadChild(nsIMsgDBHdr **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->GetFirstUnreadChild(_retval); } \
  NS_IMETHOD EnumerateMessages(nsMsgKey parent, nsISimpleEnumerator **_retval) { return !_to ? NS_ERROR_NULL_POINTER : _to->EnumerateMessages(parent, _retval); } 

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

/* Header file */
class nsMsgThread : public nsIMsgThread
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGTHREAD

  nsMsgThread();

private:
  ~nsMsgThread();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsMsgThread, nsIMsgThread)

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

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

/* attribute nsMsgKey threadKey; */
NS_IMETHODIMP nsMsgThread::GetThreadKey(nsMsgKey *aThreadKey)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgThread::SetThreadKey(nsMsgKey aThreadKey)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long flags; */
NS_IMETHODIMP nsMsgThread::GetFlags(PRUint32 *aFlags)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgThread::SetFlags(PRUint32 aFlags)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute string subject; */
NS_IMETHODIMP nsMsgThread::GetSubject(char * *aSubject)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgThread::SetSubject(const char * aSubject)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* attribute unsigned long newestMsgDate; */
NS_IMETHODIMP nsMsgThread::GetNewestMsgDate(PRUint32 *aNewestMsgDate)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsMsgThread::SetNewestMsgDate(PRUint32 aNewestMsgDate)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute unsigned long numChildren; */
NS_IMETHODIMP nsMsgThread::GetNumChildren(PRUint32 *aNumChildren)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* readonly attribute unsigned long numUnreadChildren; */
NS_IMETHODIMP nsMsgThread::GetNumUnreadChildren(PRUint32 *aNumUnreadChildren)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void AddChild (in nsIMsgDBHdr child, in nsIMsgDBHdr inReplyTo, in boolean threadInThread, in nsIDBChangeAnnouncer announcer); */
NS_IMETHODIMP nsMsgThread::AddChild(nsIMsgDBHdr *child, nsIMsgDBHdr *inReplyTo, PRBool threadInThread, nsIDBChangeAnnouncer *announcer)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDBHdr GetChildAt (in long index); */
NS_IMETHODIMP nsMsgThread::GetChildAt(PRInt32 index, nsIMsgDBHdr **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsMsgKey GetChildKeyAt (in long index); */
NS_IMETHODIMP nsMsgThread::GetChildKeyAt(PRInt32 index, nsMsgKey *_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDBHdr GetChild (in nsMsgKey msgKey); */
NS_IMETHODIMP nsMsgThread::GetChild(nsMsgKey msgKey, nsIMsgDBHdr **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDBHdr GetChildHdrAt (in long index); */
NS_IMETHODIMP nsMsgThread::GetChildHdrAt(PRInt32 index, nsIMsgDBHdr **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDBHdr GetRootHdr (out long index); */
NS_IMETHODIMP nsMsgThread::GetRootHdr(PRInt32 *index, nsIMsgDBHdr **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void RemoveChildAt (in long index); */
NS_IMETHODIMP nsMsgThread::RemoveChildAt(PRInt32 index)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void RemoveChildHdr (in nsIMsgDBHdr child, in nsIDBChangeAnnouncer announcer); */
NS_IMETHODIMP nsMsgThread::RemoveChildHdr(nsIMsgDBHdr *child, nsIDBChangeAnnouncer *announcer)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void MarkChildRead (in boolean bRead); */
NS_IMETHODIMP nsMsgThread::MarkChildRead(PRBool bRead)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsIMsgDBHdr GetFirstUnreadChild (); */
NS_IMETHODIMP nsMsgThread::GetFirstUnreadChild(nsIMsgDBHdr **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* nsISimpleEnumerator EnumerateMessages (in nsMsgKey parent); */
NS_IMETHODIMP nsMsgThread::EnumerateMessages(nsMsgKey parent, nsISimpleEnumerator **_retval)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

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


#endif /* __gen_nsIMsgThread_h__ */
