Added flag functions.

This commit is contained in:
putterman%netscape.com 1999-01-28 01:23:40 +00:00
parent b5294bc4cb
commit e7895f5f2a
4 changed files with 154 additions and 48 deletions

View File

@ -15,8 +15,8 @@
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/*
/*
* DO NOT EDIT. THIS FILE IS GENERATED FROM nsIMsgFolder.idl
*/
@ -212,6 +212,21 @@ class nsIMsgFolder : public nsIRDFResource {
/* <IDL> */
NS_IMETHOD GetFlag(PRInt32 flag, PRBool *_retval) = 0;
/* <IDL> */
NS_IMETHOD ToggleFlag(PRInt32 flag) = 0;
/* <IDL> */
NS_IMETHOD OnFlagChange(PRInt32 flag) = 0;
/* <IDL> */
NS_IMETHOD GetFlags(PRInt32 *_retval) = 0;
/* <IDL> */
NS_IMETHOD GetFoldersWithFlag(PRInt32 flags, nsIMsgFolder **result, PRInt32 resultsize, PRInt32 *numFolders) = 0;
/* <IDL> */
NS_IMETHOD GetExpansionArray(const nsISupportsArray *expansionArray) = 0;
};
#endif /* __gen_nsIMsgFolder_h__ */

View File

@ -103,6 +103,16 @@ interface nsIMsgFolder : nsIRDFResource {
void SetFlag(in long flag);
void ClearFlag(in long flag);
boolean GetFlag(in long flag);
void ToggleFlag (in long flag);
void OnFlagChange (in long flag);
long GetFlags();
void GetFoldersWithFlag(in long flags, out nsIMsgFolder result,
in long resultsize, out long numFolders);
void GetExpansionArray(in nsISupportsArray expansionArray);
};

View File

@ -20,6 +20,7 @@
#include "nsISupports.h"
#include "nsIRDFNode.h"
#include "nsIRDFResourceFactory.h"
#include "nsMsgFolderFlags.h"
/* use these macros to define a class IID for our component. */
static NS_DEFINE_IID(kIMsgFolderIID, NS_IMSGFOLDER_IID);
@ -1049,59 +1050,143 @@ NS_IMETHODIMP nsMsgFolder::GetLastMessageLoaded()
#endif
NS_IMETHODIMP nsMsgFolder::SetFlag (PRInt32 which)
NS_IMETHODIMP nsMsgFolder::SetFlag(PRInt32 flag)
{
// OnFlagChange can be expensive, so don't call it if we don't need to
PRBool flagSet;
nsresult rv;
if(!NS_SUCCEEDED(rv = GetFlag(flag, &flagSet)))
return rv;
if (!flagSet)
{
mFlags |= flag;
OnFlagChange(flag);
}
return NS_OK;
}
NS_IMETHODIMP nsMsgFolder::ClearFlag (PRInt32 which)
NS_IMETHODIMP nsMsgFolder::ClearFlag(PRInt32 flag)
{
// OnFlagChange can be expensive, so don't call it if we don't need to
PRBool flagSet;
nsresult rv;
if(!NS_SUCCEEDED(rv = GetFlag(flag, &flagSet)))
return rv;
if (!flagSet)
{
mFlags &= ~flag;
OnFlagChange (flag);
}
return NS_OK;
}
NS_IMETHODIMP nsMsgFolder::GetFlag(PRInt32 flag, PRBool *_retval)
{
*_retval = ((mFlags & flag) != 0);
return NS_OK;
}
NS_IMETHODIMP nsMsgFolder::ToggleFlag(PRInt32 flag)
{
mFlags ^= flag;
OnFlagChange (flag);
return NS_OK;
}
NS_IMETHODIMP nsMsgFolder::OnFlagChange(PRInt32 flag)
{
//Still need to implement
return NS_OK;
}
NS_IMETHODIMP nsMsgFolder::GetFlags(PRInt32 *_retval)
{
*_retval = mFlags;
return NS_OK;
}
NS_IMETHODIMP nsMsgFolder::GetFoldersWithFlag(PRInt32 flags, nsIMsgFolder **result,
PRInt32 resultsize, PRInt32 *numFolders)
{
int num = 0;
if ((flags & mFlags) == flags) {
if (result && (num < resultsize)) {
result[num] = this;
}
num++;
}
nsIMsgFolder *folder = nsnull;
for (int i=0; i < mSubFolders->Count(); i++) {
nsISupports *supports = mSubFolders->ElementAt(i);
if(NS_SUCCEEDED(supports->QueryInterface(kIMsgFolderIID, (void**)&folder)))
{
// CAREFUL! if NULL ise passed in for result then the caller
// still wants the full count! Otherwise, the result should be at most the
// number that the caller asked for.
int numSubFolders;
if (!result)
{
folder->GetFoldersWithFlag(flags, NULL, 0, &numSubFolders);
num += numSubFolders;
}
else if (num < resultsize)
{
folder->GetFoldersWithFlag(flags, result + num, resultsize - num, &numSubFolders);
num += numSubFolders;
}
else
{
NS_RELEASE(folder);
NS_RELEASE(supports);
break;
}
NS_RELEASE(folder);
}
NS_RELEASE(supports);
}
*numFolders = num;
return NS_OK;
}
NS_IMETHODIMP nsMsgFolder::GetExpansionArray(const nsISupportsArray *expansionArray)
{
// the application of flags in GetExpansionArray is subtly different
// than in GetFoldersWithFlag
for (int i = 0; i < mSubFolders->Count(); i++)
{
nsISupports *supports = mSubFolders->ElementAt(i);
nsIMsgFolder *folder = nsnull;
if(NS_SUCCEEDED(supports->QueryInterface(kIMsgFolderIID, (void**)&folder)))
{
((nsISupportsArray*)expansionArray)->InsertElementAt(folder, expansionArray->Count());
PRInt32 flags;
folder->GetFlags(&flags);
if (!(flags & MSG_FOLDER_FLAG_ELIDED))
folder->GetExpansionArray(expansionArray);
}
}
return NS_OK;
}
#ifdef HAVE_FLAGS
NS_IMETHODIMP nsMsgFolder::GetFlags(PRUint32 *flags) const
{
}
NS_IMETHODIMP nsMsgFolder::ToggleFlag (PRUint32 which)
{
}
NS_IMETHODIMP nsMsgFolder::OnFlagChange (PRUint32 which)
{
}
NS_IMETHODIMP nsMsgFolder::SetFlagInAllFolderPanes(PRUInt32 which)
{
}
NS_IMETHODIMP nsMsgFolder::TestFlag (PRUint32 which, PRBool *result)
{
}
NS_IMETHODIMP nsMsgFolder::GetFoldersWithFlag(PRUint32 flags, nsIMsgFolder** result,
PRInt32 resultsize, PRInt32 *numFolders)
{
}
NS_IMETHODIMP nsMsgFolder::GetExpansionArray (nsISupportsArray ** expansionArray )
{
}
#endif
#ifdef HAVE_NET

View File

@ -198,22 +198,18 @@ public:
NS_IMETHOD ClearFlag (PRInt32 which);
NS_IMETHOD GetFlag(PRInt32 flag, PRBool *_retval);
#ifdef HAVE_FLAGS
NS_IMETHOD ToggleFlag (PRUint32 which);
NS_IMETHOD OnFlagChange (PRUint32 which);
NS_IMETHOD GetFlags(PRUint32 *flags) const;
NS_IMETHOD ToggleFlag (PRInt32 which);
NS_IMETHOD OnFlagChange (PRInt32 which);
NS_IMETHOD GetFlags(PRInt32 *flags);
NS_IMETHOD SetFlagInAllFolderPanes(PRUInt32 which);
#ifdef HAVE_PANE
NS_IMETHOD SetFlagInAllFolderPanes(PRInt32 which);
#endif
NS_IMETHOD TestFlag (PRUint32 which, PRBool *result){ return (mFlags & which) != 0; } // Type conversion to char-sized XP_Bool
NS_IMETHOD GetFoldersWithFlag(PRUint32 flags, nsIMsgFolder** result,
NS_IMETHOD GetFoldersWithFlag(PRInt32 flags, nsIMsgFolder** result,
PRInt32 resultsize, PRInt32 *numFolders);
// for everyone else...
NS_IMETHOD GetExpansionArray (nsISupportsArray ** expansionArray );
#endif
NS_IMETHOD GetExpansionArray(const nsISupportsArray *expansionArray);
#ifdef HAVE_NET
NS_IMETHOD EscapeMessageId(const char *messageId, const char **escapeMessageID);