Bug 44831 Drop down list in New Mailing List window doesn't display the Address Book names. r=putterman

This commit is contained in:
chuang%netscape.com 2000-08-16 22:48:56 +00:00
parent e5dab4596d
commit 6610b74192
7 changed files with 113 additions and 30 deletions

View File

@ -44,9 +44,11 @@ Rights Reserved.
<template>
<rule>
<treechildren>
<treeitem uri="...">
<treeitem uri="..."
IsMailList="rdf:http://home.netscape.com/NC-rdf#IsMailList">
<treerow>
<treecell indent="true" class="treecell-indent" value="rdf:http://home.netscape.com/NC-rdf#DirName"/>
<treecell indent="true" class="treecell-indent" value="rdf:http://home.netscape.com/NC-rdf#DirName"
IsMailList="rdf:http://home.netscape.com/NC-rdf#IsMailList"/>
</treerow>
</treeitem>
</treechildren>

View File

@ -27,6 +27,7 @@ Rights Reserved.
<!DOCTYPE window SYSTEM "chrome://messenger/locale/addressbook/abMailListDialog.dtd">
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:nc="http://home.netscape.com/NC-rdf#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
title="&mailListWindow.title;"
class="dialog"
@ -45,9 +46,11 @@ Rights Reserved.
<menulist id="abPopup">
<menupopup id="abPopup-menupopup" ref="abdirectory://" datasources="rdf:addressdirectory">
<template>
<rule nc:IsMailList="false">
<menuitem uri="..."
value="rdf:http://home.netscape.com/NC-rdf#DirName"
data="rdf:http://home.netscape.com/NC-rdf#DirUri"/>
</rule>
</template>
</menupopup>
</menulist>

View File

@ -28,6 +28,7 @@ Rights Reserved.
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:nc="http://home.netscape.com/NC-rdf#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
title="&editcardWindow.title;"
onload="OnLoadNewCard()"
@ -42,9 +43,11 @@ Rights Reserved.
<menulist id="abPopup">
<menupopup id="abPopup-menupopup" ref="abdirectory://" datasources="rdf:addressdirectory">
<template>
<menuitem uri="..."
value="rdf:http://home.netscape.com/NC-rdf#DirName"
data="rdf:http://home.netscape.com/NC-rdf#DirUri"/>
<rule nc:IsMailList="false">
<menuitem uri="..."
value="rdf:http://home.netscape.com/NC-rdf#DirName"
data="rdf:http://home.netscape.com/NC-rdf#DirUri"/>
</rule>
</template>
</menupopup>
</menulist>

View File

@ -57,28 +57,31 @@ static NS_DEFINE_CID(kRDFServiceCID, NS_RDFSERVICE_CID);
// Utilities
void nsAbRDFDataSource::createNode(nsString& str, nsIRDFNode **node)
nsresult nsAbRDFDataSource::createNode(nsString& str, nsIRDFNode **node)
{
*node = nsnull;
nsresult rv;
NS_WITH_SERVICE(nsIRDFService, rdf, kRDFServiceCID, &rv);
if (NS_FAILED(rv)) return; // always check this before proceeding
nsIRDFLiteral * value;
if (NS_SUCCEEDED(rdf->GetLiteral(str.GetUnicode(), &value)))
if (NS_FAILED(rv)) return rv; // always check this before proceeding
nsCOMPtr<nsIRDFLiteral> value;
rv = rdf->GetLiteral(str.GetUnicode(), getter_AddRefs(value));
if (NS_SUCCEEDED(rv))
{
*node = value;
NS_IF_ADDREF(*node);
}
return rv;
}
void nsAbRDFDataSource::createNode(PRUint32 value, nsIRDFNode **node)
nsresult nsAbRDFDataSource::createNode(PRUint32 value, nsIRDFNode **node)
{
char *valueStr = PR_smprintf("%d", value);
nsString str; str.AssignWithConversion(valueStr);
createNode(str, node);
PR_smprintf_free(valueStr);
nsresult rv;
nsAutoString str;
str.AppendInt((PRInt32)value);
rv = createNode(str, node);
return rv;
}
PRBool nsAbRDFDataSource::changeEnumFunc(nsISupports *aElement, void *aData)
{
nsAbRDFNotification* note = (nsAbRDFNotification *)aData;

View File

@ -53,8 +53,8 @@ public:
protected:
void createNode(nsString& str, nsIRDFNode **node);
void createNode(PRUint32 value, nsIRDFNode **node);
nsresult createNode(nsString& str, nsIRDFNode **node);
nsresult createNode(PRUint32 value, nsIRDFNode **node);
nsresult NotifyPropertyChanged(nsIRDFResource *resource, nsIRDFResource *propertyResource,
const PRUnichar *oldValue, const PRUnichar *newValue);

View File

@ -58,6 +58,7 @@ nsIRDFResource* nsAbDirectoryDataSource::kNC_Child = nsnull;
nsIRDFResource* nsAbDirectoryDataSource::kNC_DirName = nsnull;
nsIRDFResource* nsAbDirectoryDataSource::kNC_CardChild = nsnull;
nsIRDFResource* nsAbDirectoryDataSource::kNC_DirUri = nsnull;
nsIRDFResource* nsAbDirectoryDataSource::kNC_IsMailList = nsnull;
// commands
nsIRDFResource* nsAbDirectoryDataSource::kNC_Delete = nsnull;
@ -68,6 +69,7 @@ nsIRDFResource* nsAbDirectoryDataSource::kNC_NewDirectory = nsnull;
#define NC_RDF_DIRNAME "http://home.netscape.com/NC-rdf#DirName"
#define NC_RDF_CARDCHILD "http://home.netscape.com/NC-rdf#CardChild"
#define NC_RDF_DIRURI "http://home.netscape.com/NC-rdf#DirUri"
#define NC_RDF_ISMAILLIST "http://home.netscape.com/NC-rdf#IsMailList"
//Directory Commands
#define NC_RDF_DELETE "http://home.netscape.com/NC-rdf#Delete"
@ -102,6 +104,7 @@ nsAbDirectoryDataSource::~nsAbDirectoryDataSource (void)
NS_RELEASE2(kNC_DirName, refcnt);
NS_RELEASE2(kNC_CardChild, refcnt);
NS_RELEASE2(kNC_DirUri, refcnt);
NS_RELEASE2(kNC_IsMailList, refcnt);
NS_RELEASE2(kNC_Delete, refcnt);
NS_RELEASE2(kNC_DeleteCards, refcnt);
@ -134,12 +137,15 @@ nsAbDirectoryDataSource::Init()
mRDFService->GetResource(NC_RDF_DIRNAME, &kNC_DirName);
mRDFService->GetResource(NC_RDF_CARDCHILD, &kNC_CardChild);
mRDFService->GetResource(NC_RDF_DIRURI, &kNC_DirUri);
mRDFService->GetResource(NC_RDF_ISMAILLIST, &kNC_IsMailList);
mRDFService->GetResource(NC_RDF_DELETE, &kNC_Delete);
mRDFService->GetResource(NC_RDF_DELETECARDS, &kNC_DeleteCards);
mRDFService->GetResource(NC_RDF_NEWDIRECTORY, &kNC_NewDirectory);
}
CreateLiterals(mRDFService);
DIR_GetDirServers();
mInitialized = PR_TRUE;
@ -220,7 +226,9 @@ NS_IMETHODIMP nsAbDirectoryDataSource::GetTargets(nsIRDFResource* source,
*targets = cursor;
return NS_OK;
}
else if((kNC_DirName == property))
else if((kNC_DirName == property) ||
(kNC_DirUri == property) ||
(kNC_IsMailList == property))
{
nsSingletonEnumerator* cursor =
new nsSingletonEnumerator(property);
@ -245,16 +253,6 @@ NS_IMETHODIMP nsAbDirectoryDataSource::GetTargets(nsIRDFResource* source,
*targets = cursor;
return NS_OK;
}
}
else if((kNC_DirUri == property))
{
nsSingletonEnumerator* cursor =
new nsSingletonEnumerator(property);
if (cursor == nsnull)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(cursor);
*targets = cursor;
return NS_OK;
}
}
return NS_NewEmptyEnumerator(targets);
@ -298,7 +296,8 @@ nsAbDirectoryDataSource::HasArcOut(nsIRDFResource *aSource, nsIRDFResource *aArc
*result = (aArc == kNC_DirName ||
aArc == kNC_Child ||
aArc == kNC_CardChild ||
aArc == kNC_DirUri);
aArc == kNC_DirUri ||
aArc == kNC_IsMailList);
}
else {
*result = PR_FALSE;
@ -347,6 +346,7 @@ nsAbDirectoryDataSource::getDirectoryArcLabelsOut(nsIAbDirectory *directory,
(*arcs)->AppendElement(kNC_Child);
(*arcs)->AppendElement(kNC_CardChild);
(*arcs)->AppendElement(kNC_DirUri);
(*arcs)->AppendElement(kNC_IsMailList);
return NS_OK;
}
@ -522,6 +522,8 @@ nsresult nsAbDirectoryDataSource::createDirectoryNode(nsIAbDirectory* directory,
rv = createDirectoryUriNode(directory, target);
if ((kNC_Child == property))
rv = createDirectoryChildNode(directory, target);
if ((kNC_IsMailList == property))
rv = createDirectoryIsMailListNode(directory, target);
return rv;
}
@ -595,6 +597,36 @@ nsAbDirectoryDataSource::createDirectoryChildNode(nsIAbDirectory *directory,
return NS_RDF_NO_VALUE;
}
nsresult
nsAbDirectoryDataSource::createDirectoryIsMailListNode(nsIAbDirectory* directory,
nsIRDFNode **target)
{
nsresult rv;
PRBool bIsMailList = PR_FALSE;
rv = directory->GetIsMailList(&bIsMailList);
if (NS_FAILED(rv)) return rv;
*target = nsnull;
nsString nameString;
if (bIsMailList)
*target = kTrueLiteral;
else
*target = kFalseLiteral;
NS_IF_ADDREF(*target);
return NS_OK;
}
nsresult nsAbDirectoryDataSource::CreateLiterals(nsIRDFService *rdf)
{
nsAutoString str; str.AssignWithConversion("true");
createNode(str, getter_AddRefs(kTrueLiteral));
str.AssignWithConversion("false");
createNode(str, getter_AddRefs(kFalseLiteral));
return NS_OK;
}
nsresult nsAbDirectoryDataSource::DoDeleteFromDirectory(nsISupportsArray *parentDirs, nsISupportsArray *delDirs)
{
PRUint32 item, itemCount;
@ -701,6 +733,13 @@ nsresult nsAbDirectoryDataSource::DoDirectoryHasAssertion(nsIAbDirectory *direct
if(NS_SUCCEEDED(rv))
rv = directory->HasDirectory(newDirectory, hasAssertion);
}
else if ((kNC_IsMailList == property))
{
nsCOMPtr<nsIRDFResource> dirResource(do_QueryInterface(directory, &rv));
if(NS_FAILED(rv))
return rv;
rv = GetTargetHasAssertion(this, dirResource, property, tv, target, hasAssertion);
}
else
*hasAssertion = PR_FALSE;
@ -708,6 +747,31 @@ nsresult nsAbDirectoryDataSource::DoDirectoryHasAssertion(nsIAbDirectory *direct
}
nsresult nsAbDirectoryDataSource::GetTargetHasAssertion(nsIRDFDataSource *dataSource, nsIRDFResource* dirResource,
nsIRDFResource *property,PRBool tv, nsIRDFNode *target,PRBool* hasAssertion)
{
nsresult rv;
if(!hasAssertion)
return NS_ERROR_NULL_POINTER;
nsCOMPtr<nsIRDFNode> currentTarget;
rv = dataSource->GetTarget(dirResource, property,tv, getter_AddRefs(currentTarget));
if(NS_SUCCEEDED(rv))
{
nsCOMPtr<nsIRDFLiteral> value1(do_QueryInterface(target));
nsCOMPtr<nsIRDFLiteral> value2(do_QueryInterface(currentTarget));
if(value1 && value2)
//If the two values are equal then it has this assertion
*hasAssertion = (value1 == value2);
}
else
rv = NS_NOINTERFACE;
return rv;
}
nsresult NS_NewAbDirectoryDataSource(const nsIID& iid, void **result)
{
NS_PRECONDITION(result != nsnull, "null ptr");

View File

@ -101,6 +101,8 @@ protected:
nsIRDFNode **target);
nsresult createDirectoryChildNode(nsIAbDirectory *directory,
nsIRDFNode **target);
nsresult createDirectoryIsMailListNode(nsIAbDirectory *directory,
nsIRDFNode **target);
static nsresult getDirectoryArcLabelsOut(nsIAbDirectory *directory,
nsISupportsArray **arcs);
@ -116,18 +118,24 @@ protected:
PRBool tv, PRBool *hasAssertion);
nsresult DoNewDirectory(nsIAbDirectory *directory, nsISupportsArray *arguments);
nsresult CreateLiterals(nsIRDFService *rdf);
nsresult GetTargetHasAssertion(nsIRDFDataSource *dataSource, nsIRDFResource* dirResource,
nsIRDFResource *property,PRBool tv, nsIRDFNode *target,PRBool* hasAssertion);
static nsIRDFResource* kNC_Child;
static nsIRDFResource* kNC_DirName;
static nsIRDFResource* kNC_CardChild;
static nsIRDFResource* kNC_DirUri;
static nsIRDFResource* kNC_MailList;
static nsIRDFResource* kNC_IsMailList;
// commands
static nsIRDFResource* kNC_Delete;
static nsIRDFResource* kNC_DeleteCards;
static nsIRDFResource* kNC_NewDirectory;
//Cached literals
nsCOMPtr<nsIRDFNode> kTrueLiteral;
nsCOMPtr<nsIRDFNode> kFalseLiteral;
};
PR_EXTERN(nsresult) NS_NewAbDirectoryDataSource(const nsIID& iid, void **result);