diff --git a/mozilla/calendar/modules/core/inc/nsLayerCollection.h b/mozilla/calendar/modules/core/inc/nsLayerCollection.h index 73b8788b04c..b83818c53d7 100644 --- a/mozilla/calendar/modules/core/inc/nsLayerCollection.h +++ b/mozilla/calendar/modules/core/inc/nsLayerCollection.h @@ -21,6 +21,7 @@ #include "nsILayer.h" #include "nsILayerCollection.h" +#include "nsIVector.h" class nsLayerCollection : public nsILayerCollection, nsILayer @@ -34,6 +35,14 @@ public: NS_IMETHOD Init(); + NS_IMETHOD CreateIterator(nsIIterator ** aIterator) ; + + NS_IMETHOD AddLayer(nsILayer * aLayer); + NS_IMETHOD RemoveLayer(nsILayer * aLayer); + +private: + nsIVector * mLayers ; + }; #endif //nsLayerCollection_h___ diff --git a/mozilla/calendar/modules/core/public/nsILayerCollection.h b/mozilla/calendar/modules/core/public/nsILayerCollection.h index fd9d2b3dad8..d5ab1ba3911 100644 --- a/mozilla/calendar/modules/core/public/nsILayerCollection.h +++ b/mozilla/calendar/modules/core/public/nsILayerCollection.h @@ -19,6 +19,7 @@ #define nsILayerCollection_h___ #include "nsISupports.h" +#include "nsIIterator.h" //91cd3b90-4ccb-11d2-924a-00805f8a7ab6 #define NS_ILAYER_COLLECTION_IID \ @@ -31,6 +32,13 @@ class nsILayerCollection : public nsISupports public: NS_IMETHOD Init() = 0; + NS_IMETHOD CreateIterator(nsIIterator ** aIterator) = 0; + + NS_IMETHOD AddLayer(nsILayer * aLayer) = 0; + NS_IMETHOD RemoveLayer(nsILayer * aLayer) = 0; + + + }; diff --git a/mozilla/calendar/modules/core/src/nsLayerCollection.cpp b/mozilla/calendar/modules/core/src/nsLayerCollection.cpp index f148e8c023b..d91bb9548f6 100644 --- a/mozilla/calendar/modules/core/src/nsLayerCollection.cpp +++ b/mozilla/calendar/modules/core/src/nsLayerCollection.cpp @@ -17,8 +17,10 @@ */ #include +#include "nscore.h" #include "nsLayerCollection.h" #include "nsCoreCIID.h" +#include "nsxpfcCIID.h" static NS_DEFINE_IID(kILayerIID, NS_ILAYER_IID); static NS_DEFINE_IID(kILayerCollectionIID, NS_ILAYER_COLLECTION_IID); @@ -27,6 +29,8 @@ static NS_DEFINE_IID(kCLayerCollectionCID, NS_LAYER_COLLECTION_CID); nsLayerCollection::nsLayerCollection(nsISupports* outer) { NS_INIT_REFCNT(); + mLayers = nsnull; + } nsresult nsLayerCollection::QueryInterface(REFNSIID aIID, void** aInstancePtr) @@ -65,12 +69,47 @@ NS_IMPL_RELEASE(nsLayerCollection) nsLayerCollection::~nsLayerCollection() { + // XXX: Need to add a way to remove ref when delete all! + NS_IF_RELEASE(mLayers); } nsresult nsLayerCollection::Init() { + static NS_DEFINE_IID(kCVectorCID, NS_VECTOR_CID); + + nsresult res = nsRepository::CreateInstance(kCVectorCID, + nsnull, + kCVectorCID, + (void **)&mLayers); + + if (NS_OK != res) + return res ; + + mLayers->Init(); return (NS_OK); } +nsresult nsLayerCollection :: CreateIterator(nsIIterator ** aIterator) +{ + if (mLayers) { + mLayers->CreateIterator(aIterator); + return NS_OK; + } + return NS_ERROR_FAILURE; +} + +nsresult nsLayerCollection :: AddLayer(nsILayer * aLayer) +{ + mLayers->Append(aLayer); + NS_ADDREF(aLayer); + return NS_OK; +} + +nsresult nsLayerCollection :: RemoveLayer(nsILayer * aLayer) +{ + mLayers->Remove(aLayer); + NS_IF_RELEASE(aLayer); + return NS_OK; +}