diff --git a/mozilla/rdf/src/nsRDFDataModel.cpp b/mozilla/rdf/src/nsRDFDataModel.cpp index 3d60a905a09..f98c1fa33bb 100644 --- a/mozilla/rdf/src/nsRDFDataModel.cpp +++ b/mozilla/rdf/src/nsRDFDataModel.cpp @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in diff --git a/mozilla/rdf/src/nsRDFDataModelItem.cpp b/mozilla/rdf/src/nsRDFDataModelItem.cpp index 30d2e2914ba..ea7cf6941d6 100644 --- a/mozilla/rdf/src/nsRDFDataModelItem.cpp +++ b/mozilla/rdf/src/nsRDFDataModelItem.cpp @@ -20,6 +20,10 @@ #include "nsRDFDataModelItem.h" #include "rdf-int.h" +static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); +static NS_DEFINE_IID(kIDMItemIID, NS_IDMITEM_IID); +static NS_DEFINE_IID(kIRDFResourceIID, NS_IDMITEM_IID); + //////////////////////////////////////////////////////////////////////// nsRDFDataModelItem::nsRDFDataModelItem(nsRDFDataModel& model, RDF_Resource resource) @@ -44,8 +48,27 @@ nsRDFDataModelItem::~nsRDFDataModelItem(void) NS_IMPL_ADDREF(nsRDFDataModelItem); NS_IMPL_RELEASE(nsRDFDataModelItem); -static NS_DEFINE_IID(kIDMItemIID, NS_IDMITEM_IID); -NS_IMPL_QUERY_INTERFACE(nsRDFDataModelItem, kIDMItemIID); +NS_IMETHODIMP +nsRDFDataModelItem::QueryInterface(const nsIID& iid, void** result) +{ + if (! result) + return NS_ERROR_NULL_POINTER; + + *result = NULL; + if (iid.Equals(kIDMItemIID) || + iid.Equals(kISupportsIID)) { + *result = static_cast(this); + AddRef(); + return NS_OK; + } + else if (iid.Equals(kIRDFResourceIID)) { + *result = static_cast(this); + AddRef(); + return NS_OK; + } + return NS_ERROR_NO_INTERFACE; +} + //////////////////////////////////////////////////////////////////////// // nsIDMItem interface @@ -120,7 +143,20 @@ nsRDFDataModelItem::GetIntPropertyValue(PRInt32& value, const nsString& itemProp return NS_ERROR_NOT_IMPLEMENTED; } + //////////////////////////////////////////////////////////////////////// +// nsIRDFResource interface + +NS_IMETHODIMP +nsRDFDataModelItem::GetResource(RDF_Resource& resource /* out */) const +{ + resource = mResource; + return NS_OK; +} + + +//////////////////////////////////////////////////////////////////////// +// Implementation methods void nsRDFDataModelItem::InvalidateCachedSubtreeSize(void) @@ -204,7 +240,7 @@ nsRDFDataModelItem::Open(void) // Arcs are outbound, that is, from a parent to it's // child. Find all targets whose source is "me". cursor = RDF_GetTargets(mDataModel.GetDB(), - GetResource(), + mResource, mDataModel.GetArcProperty(), RDF_RESOURCE_TYPE, PR_TRUE); @@ -213,7 +249,7 @@ nsRDFDataModelItem::Open(void) // Arcs are inbound, that is, from a child to it's // parent. Find all sources whose target is "me". cursor = RDF_GetSources(mDataModel.GetDB(), - GetResource(), + mResource, mDataModel.GetArcProperty(), RDF_RESOURCE_TYPE, PR_TRUE); diff --git a/mozilla/rdf/src/nsRDFDataModelItem.h b/mozilla/rdf/src/nsRDFDataModelItem.h index 57dcca4ede6..fe6ba4b386f 100644 --- a/mozilla/rdf/src/nsRDFDataModelItem.h +++ b/mozilla/rdf/src/nsRDFDataModelItem.h @@ -21,13 +21,14 @@ #include "rdf.h" #include "nsIDMItem.h" +#include "nsIRDFResource.h" #include "nsVector.h" class nsRDFDataModel; //////////////////////////////////////////////////////////////////////// -class nsRDFDataModelItem : public nsIDMItem { +class nsRDFDataModelItem : public nsIDMItem, public nsIRDFResource { private: nsRDFDataModel& mDataModel; RDF_Resource mResource; @@ -76,15 +77,17 @@ public: NS_IMETHOD GetIntPropertyValue(PRInt32& value, const nsString& itemProperty) const; //////////////////////////////////////////////////////////////////////// + // nsIRDFResource interface + + NS_IMETHOD GetResource(RDF_Resource& resource /* out */) const; + + //////////////////////////////////////////////////////////////////////// + // Implementation methods nsRDFDataModel& GetDataModel(void) const { return mDataModel; } - RDF_Resource GetResource(void) const { - return mResource; - } - PRBool IsOpen(void) const { return mOpen; } diff --git a/mozilla/rdf/src/nsRDFTreeColumn.cpp b/mozilla/rdf/src/nsRDFTreeColumn.cpp index de6609f8f52..5772392042f 100644 --- a/mozilla/rdf/src/nsRDFTreeColumn.cpp +++ b/mozilla/rdf/src/nsRDFTreeColumn.cpp @@ -21,8 +21,10 @@ #include "nsIDMWidget.h" #include "nsIDataModel.h" -static NS_DEFINE_IID(kIDataModelIID, NS_IDATAMODEL_IID); -static NS_DEFINE_IID(kITreeColumnIID, NS_ITREECOLUMN_IID); +static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); +static NS_DEFINE_IID(kIDataModelIID, NS_IDATAMODEL_IID); +static NS_DEFINE_IID(kITreeColumnIID, NS_ITREECOLUMN_IID); +static NS_DEFINE_IID(kIRDFResourceIID, NS_IRDFRESOURCE_IID); const PRUint32 nsRDFTreeColumn::kDefaultWidth = 64; // XXX @@ -51,7 +53,27 @@ nsRDFTreeColumn::~nsRDFTreeColumn(void) NS_IMPL_ADDREF(nsRDFTreeColumn); NS_IMPL_RELEASE(nsRDFTreeColumn); -NS_IMPL_QUERY_INTERFACE(nsRDFTreeColumn, kITreeColumnIID); + +NS_IMETHODIMP +nsRDFTreeColumn::QueryInterface(const nsIID& iid, void** result) +{ + if (! result) + return NS_ERROR_NULL_POINTER; + + *result = NULL; + if (iid.Equals(kITreeColumnIID) || + iid.Equals(kISupportsIID)) { + *result = static_cast(this); + AddRef(); + return NS_OK; + } + else if (iid.Equals(kIRDFResourceIID)) { + *result = static_cast(this); + AddRef(); + return NS_OK; + } + return NS_ERROR_NO_INTERFACE; +} //////////////////////////////////////////////////////////////////////// @@ -98,6 +120,18 @@ nsRDFTreeColumn::SetPixelWidth(PRUint32 newWidth) //////////////////////////////////////////////////////////////////////// +// nsIRDFResource interface + +NS_IMETHODIMP +nsRDFTreeColumn::GetResource(RDF_Resource& result) const +{ + result = mProperty; + return NS_OK; +} + + +//////////////////////////////////////////////////////////////////////// +// Implementation methods void nsRDFTreeColumn::SetVisibility(PRBool visible) diff --git a/mozilla/rdf/src/nsRDFTreeColumn.h b/mozilla/rdf/src/nsRDFTreeColumn.h index 9f4be76e6ee..0748e1d86f9 100644 --- a/mozilla/rdf/src/nsRDFTreeColumn.h +++ b/mozilla/rdf/src/nsRDFTreeColumn.h @@ -21,11 +21,12 @@ #include "nsString.h" #include "nsITreeColumn.h" +#include "nsIRDFResource.h" #include "rdf.h" class nsRDFTreeDataModel; -class nsRDFTreeColumn : public nsITreeColumn { +class nsRDFTreeColumn : public nsITreeColumn, public nsIRDFResource { private: nsRDFTreeDataModel& mTree; nsString mName; @@ -63,14 +64,16 @@ public: NS_IMETHOD SetPixelWidth(PRUint32 newWidth); //////////////////////////////////////////////////////////////////////// + // nsIRDFResource interface + + NS_IMETHOD GetResource(RDF_Resource& result /* out */) const; + + //////////////////////////////////////////////////////////////////////// + // Implementation methods void SetVisibility(PRBool visible); PRBool IsVisible(void) const; - - RDF_Resource GetProperty(void) const { - return mProperty; - } }; #endif // nsRDFTreeColumn_h__ diff --git a/mozilla/rdf/src/nsRDFTreeDataModel.cpp b/mozilla/rdf/src/nsRDFTreeDataModel.cpp index 8902aba1d5f..041a57e9bd6 100644 --- a/mozilla/rdf/src/nsRDFTreeDataModel.cpp +++ b/mozilla/rdf/src/nsRDFTreeDataModel.cpp @@ -21,9 +21,10 @@ #include "nsRDFTreeDataModelItem.h" #include "rdf-int.h" -static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); -static NS_DEFINE_IID(kIDataModelIID, NS_IDATAMODEL_IID); +static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID); +static NS_DEFINE_IID(kIDataModelIID, NS_IDATAMODEL_IID); static NS_DEFINE_IID(kITreeDataModelIID, NS_ITREEDATAMODEL_IID); +static NS_DEFINE_IID(kIRDFResourceIID, NS_IRDFRESOURCE_IID); //////////////////////////////////////////////////////////////////////// @@ -80,7 +81,11 @@ nsRDFTreeDataModel::QueryInterface(const nsIID& iid, void** result) NS_IMETHODIMP nsRDFTreeDataModel::InitFromURL(const nsString& url) { - return nsRDFDataModel::InitFromURL(url); + nsresult res = nsRDFDataModel::InitFromURL(url); + if (NS_SUCCEEDED(res)) + res = CreateColumns(); + + return res; } @@ -170,12 +175,6 @@ nsRDFTreeDataModel::GetNthTreeItem(nsITreeDMItem*& pItem, PRUint32 n) const return NS_ERROR_NOT_IMPLEMENTED; } -#ifdef DYNAMIC_CASTING -#define DYNAMIC_CAST(__type, __pointer) dynamic_cast<__type>(__pointer) -#else -#define DYNAMIC_CAST(__type, __pointer) ((__type)(__pointer)) -#endif - NS_IMETHODIMP nsRDFTreeDataModel::GetItemTextForColumn(nsString& nodeText, nsITreeDMItem* pItem, @@ -185,34 +184,60 @@ nsRDFTreeDataModel::GetItemTextForColumn(nsString& nodeText, // HT_GetNodeData() does. Hopefully it's enough to do the job for // now. - // XXX may need to turn off the dynamic_cast stuff... - nsRDFTreeDataModelItem* item = - DYNAMIC_CAST(nsRDFTreeDataModelItem*, pItem); + nsresult res = NS_OK; + nsIRDFResource* itemRsrc = NULL; + nsIRDFResource* columnRsrc = NULL; - PR_ASSERT(item); - if (! item) - return NS_ERROR_UNEXPECTED; // XXX + do { + if (NS_FAILED(pItem->QueryInterface(kIRDFResourceIID, (void**) &itemRsrc))) { + res = NS_ERROR_INVALID_ARG; + PR_ASSERT(0); + break; + } - nsRDFTreeColumn* column = - DYNAMIC_CAST(nsRDFTreeColumn*, pColumn); + if (NS_FAILED(pColumn->QueryInterface(kIRDFResourceIID, (void**) &columnRsrc))) { + res = NS_ERROR_INVALID_ARG; + PR_ASSERT(0); + break; + } - PR_ASSERT(column); - if (! column) - return NS_ERROR_UNEXPECTED; // XXX + RDF_Resource item; + if (NS_FAILED(itemRsrc->GetResource(item))) { + res = NS_ERROR_UNEXPECTED; + PR_ASSERT(0); + break; + } + + RDF_Resource property; + if (NS_FAILED(columnRsrc->GetResource(property))) { + res = NS_ERROR_UNEXPECTED; + PR_ASSERT(0); + break; + } - const char* result = - (const char*) RDF_GetSlotValue(GetDB(), - item->GetResource(), // resource - column->GetProperty(), // property - RDF_STRING_TYPE, - PR_FALSE, - PR_TRUE); + const char* result = + (const char*) RDF_GetSlotValue(GetDB(), + item, + property, // property + RDF_STRING_TYPE, + PR_FALSE, + PR_TRUE); - PR_ASSERT(result); - if (! result) - return NS_ERROR_NULL_POINTER; + if (! result) { + res = NS_ERROR_UNEXPECTED; + PR_ASSERT(0); + break; + } + + nodeText = result; + } while (0); + + if (columnRsrc) + columnRsrc->Release(); + + if (itemRsrc) + itemRsrc->Release(); - nodeText = result; return NS_OK; } @@ -220,23 +245,27 @@ nsRDFTreeDataModel::GetItemTextForColumn(nsString& nodeText, //////////////////////////////////////////////////////////////////////// // nsRDFTreeDataModel implementation methods -void +nsresult nsRDFTreeDataModel::CreateColumns(void) { // This mostly came over from HT_NewView() nsRDFDataModelItem* root = GetRoot(); PR_ASSERT(root); if (! root) - return; + return NS_ERROR_NULL_POINTER; // XXX need something better here + + RDF_Resource rootResource; + if (NS_FAILED(root->GetResource(rootResource))) + return NS_ERROR_UNEXPECTED; RDF_Cursor cursor; - cursor = RDF_GetTargets(GetDB(), root->GetResource(), + cursor = RDF_GetTargets(GetDB(), rootResource, gNavCenter->RDF_Column, RDF_RESOURCE_TYPE, PR_TRUE); PR_ASSERT(cursor != NULL); if (cursor == NULL) - return; + return NS_ERROR_UNEXPECTED; // XXX need something better here RDF_Resource r; while ((r = static_cast(RDF_NextValue(cursor))) != NULL) { @@ -270,6 +299,8 @@ nsRDFTreeDataModel::CreateColumns(void) mColumns.Add(column); } RDF_DisposeCursor(cursor); + + return NS_OK; } void diff --git a/mozilla/rdf/src/nsRDFTreeDataModel.h b/mozilla/rdf/src/nsRDFTreeDataModel.h index 3dd27eb6dfc..d76995a13bd 100644 --- a/mozilla/rdf/src/nsRDFTreeDataModel.h +++ b/mozilla/rdf/src/nsRDFTreeDataModel.h @@ -84,7 +84,7 @@ public: private: nsVector mColumns; - void CreateColumns(void); + nsresult CreateColumns(void); };