summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/Platinum/Source/Extras/Managed/MediaObject.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libUPnP/Platinum/Source/Extras/Managed/MediaObject.h')
-rw-r--r--lib/libUPnP/Platinum/Source/Extras/Managed/MediaObject.h735
1 files changed, 735 insertions, 0 deletions
diff --git a/lib/libUPnP/Platinum/Source/Extras/Managed/MediaObject.h b/lib/libUPnP/Platinum/Source/Extras/Managed/MediaObject.h
new file mode 100644
index 0000000..11ebfce
--- /dev/null
+++ b/lib/libUPnP/Platinum/Source/Extras/Managed/MediaObject.h
@@ -0,0 +1,735 @@
+/*****************************************************************
+|
+| Platinum - Managed ActionDescription
+|
+| Copyright (c) 2004-2010, Plutinosoft, LLC.
+| All rights reserved.
+| http://www.plutinosoft.com
+|
+| This program is free software; you can redistribute it and/or
+| modify it under the terms of the GNU General Public License
+| as published by the Free Software Foundation; either version 2
+| of the License, or (at your option) any later version.
+|
+| OEMs, ISVs, VARs and other distributors that combine and
+| distribute commercially licensed software with Platinum software
+| and do not wish to distribute the source code for the commercially
+| licensed software under version 2, or (at your option) any later
+| version, of the GNU General Public License (the "GPL") must enter
+| into a commercial license agreement with Plutinosoft, LLC.
+|
+| This program is distributed in the hope that it will be useful,
+| but WITHOUT ANY WARRANTY; without even the implied warranty of
+| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+| GNU General Public License for more details.
+|
+| You should have received a copy of the GNU General Public License
+| along with this program; see the file LICENSE.txt. If not, write to
+| the Free Software Foundation, Inc.,
+| 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+| http://www.gnu.org/licenses/gpl-2.0.html
+|
+****************************************************************/
+#pragma once
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "PltMediaItem.h"
+#include "Http.h"
+
+namespace Platinum
+{
+
+/*----------------------------------------------------------------------
+| ObjectClass
++---------------------------------------------------------------------*/
+public ref class ObjectClass : public ManagedWrapper<PLT_ObjectClass>
+{
+public:
+
+ // properties
+
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Type, type, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, FriendlyName, friendly_name, m_pHandle);
+
+internal:
+
+ ObjectClass(PLT_ObjectClass& native) :
+ ManagedWrapper<PLT_ObjectClass>(native)
+ {}
+
+public:
+
+ ObjectClass(String^ type)
+ {
+ Type = type;
+ }
+
+ ObjectClass(String^ type, String^ friendly_name)
+ {
+ Type = type;
+ FriendlyName = friendly_name;
+ }
+};
+
+}
+
+// marshal wrapper
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::ObjectClass, PLT_ObjectClass);
+
+namespace Platinum
+{
+
+/*----------------------------------------------------------------------
+| PersonRole
++---------------------------------------------------------------------*/
+public ref class PersonRole : public ManagedWrapper<PLT_PersonRole>
+{
+public:
+
+ // properties
+
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Name, name, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Role, role, m_pHandle);
+
+internal:
+
+ PersonRole(PLT_PersonRole& native) :
+ ManagedWrapper<PLT_PersonRole>(native)
+ {}
+
+public:
+ PersonRole(String^ name)
+ {
+ Name = name;
+ }
+
+ PersonRole(String^ name, String^ role)
+ {
+ Name = name;
+ Role = role;
+ }
+};
+
+}
+
+// marshal wrapper
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::PersonRole, PLT_PersonRole);
+
+namespace Platinum
+{
+
+/*----------------------------------------------------------------------
+| PeopleInfo
++---------------------------------------------------------------------*/
+public ref class PeopleInfo : public ManagedWrapper<PLT_PeopleInfo>
+{
+public:
+
+ // properties
+
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Producer, producer, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Director, director, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Publisher, publisher, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Contributor, contributor, m_pHandle);
+
+ property IEnumerable<PersonRole^>^ Artists
+ {
+ IEnumerable<PersonRole^>^ get();
+ }
+
+ property IEnumerable<PersonRole^>^ Actors
+ {
+ IEnumerable<PersonRole^>^ get();
+ }
+
+ property IEnumerable<PersonRole^>^ Authors
+ {
+ IEnumerable<PersonRole^>^ get();
+ }
+
+public:
+
+ void AddArtist(PersonRole^ artist)
+ {
+ ((NPT_List<PLT_PersonRole>&)m_pHandle->artists).Add(artist->Handle);
+ }
+
+ void AddActor(PersonRole^ actor)
+ {
+ ((NPT_List<PLT_PersonRole>&)m_pHandle->actors).Add(actor->Handle);
+ }
+
+ void AddAuthors(PersonRole^ author)
+ {
+ ((NPT_List<PLT_PersonRole>&)m_pHandle->authors).Add(author->Handle);
+ }
+
+internal:
+
+ PeopleInfo(PLT_PeopleInfo& native) :
+ ManagedWrapper<PLT_PeopleInfo>(native)
+ {}
+};
+
+}
+
+// marshal wrapper
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::PeopleInfo, PLT_PeopleInfo);
+
+
+namespace Platinum
+{
+
+/*----------------------------------------------------------------------
+| AffiliationInfo
++---------------------------------------------------------------------*/
+public ref class AffiliationInfo : public ManagedWrapper<PLT_AffiliationInfo>
+{
+public:
+
+ // properties
+
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Album, album, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Playlist, playlist, m_pHandle);
+
+ property IEnumerable<String^>^ Genres
+ {
+ IEnumerable<String^>^ get();
+ }
+
+public:
+
+ void AddGenre(String^ genre)
+ {
+ m_pHandle->genres.Add(NPT_String(StringConv(genre)));
+ }
+
+internal:
+
+ AffiliationInfo(PLT_AffiliationInfo& native) :
+ ManagedWrapper<PLT_AffiliationInfo>(native)
+ {}
+};
+
+}
+
+// marshal wrapper
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::AffiliationInfo, PLT_AffiliationInfo);
+
+namespace Platinum
+{
+
+/*----------------------------------------------------------------------
+| DescriptionInfo
++---------------------------------------------------------------------*/
+public ref class DescriptionInfo : public ManagedWrapper<PLT_Description>
+{
+public:
+
+ // properties
+
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, DescriptionText, description, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, LongDescriptionText, long_description, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, IconUri, icon_uri, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Region, region, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Rating, rating, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Date, date, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Language, language, m_pHandle);
+
+internal:
+
+ DescriptionInfo(PLT_Description& native) :
+ ManagedWrapper<PLT_Description>(native)
+ {}
+};
+
+}
+
+// marshal wrapper
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::DescriptionInfo, PLT_Description);
+
+namespace Platinum
+{
+
+/*----------------------------------------------------------------------
+| RecordedInfo
++---------------------------------------------------------------------*/
+public ref class RecordedInfo : public ManagedWrapper<PLT_RecordedInfo>
+{
+public:
+
+ // properties
+
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, ProgramTitle, program_title, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, SeriesTitle, series_title, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(UInt32, EpisodeNumber, episode_number, m_pHandle);
+
+internal:
+
+ RecordedInfo(PLT_RecordedInfo& native) :
+ ManagedWrapper<PLT_RecordedInfo>(native)
+ {}
+};
+
+}
+
+// marshal wrapper
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::RecordedInfo, PLT_RecordedInfo);
+
+namespace Platinum
+{
+
+/*----------------------------------------------------------------------
+| AlbumArtInfo
++---------------------------------------------------------------------*/
+public ref class AlbumArtInfo : public ManagedWrapper<PLT_AlbumArtInfo>
+{
+public:
+
+ // properties
+
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Uri, uri, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, DlnaProfile, dlna_profile, m_pHandle);
+
+internal:
+
+ AlbumArtInfo(PLT_AlbumArtInfo& native) :
+ ManagedWrapper<PLT_AlbumArtInfo>(native)
+ {}
+
+public:
+ AlbumArtInfo(String^ uri)
+ {
+ Uri = uri;
+ }
+
+ AlbumArtInfo(String^ uri, String^ dlna_profile)
+ {
+ Uri = uri;
+ DlnaProfile = dlna_profile;
+ }
+};
+
+}
+
+// marshal wrapper
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::AlbumArtInfo, PLT_AlbumArtInfo);
+
+namespace Platinum
+{
+
+/*----------------------------------------------------------------------
+| ExtraInfo
++---------------------------------------------------------------------*/
+public ref class ExtraInfo : public ManagedWrapper<PLT_ExtraInfo>
+{
+public:
+
+ // properties
+
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, ArtistDiscographyUri, artist_discography_uri, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, LyricsUri, lyrics_uri, m_pHandle);
+
+ property IEnumerable<String^>^ Relations
+ {
+ IEnumerable<String^>^ get();
+ }
+
+ property IEnumerable<AlbumArtInfo^>^ AlbumArts
+ {
+ IEnumerable<AlbumArtInfo^>^ get();
+ }
+
+public:
+
+ void AddGenre(String^ relation)
+ {
+ m_pHandle->relations.Add(NPT_String(StringConv(relation)));
+ }
+
+ void AddAlbumArtInfo(AlbumArtInfo^ info)
+ {
+ m_pHandle->album_arts.Add(info->Handle);
+ }
+
+
+internal:
+
+ ExtraInfo(PLT_ExtraInfo& native) :
+ ManagedWrapper<PLT_ExtraInfo>(native)
+ {}
+};
+
+}
+
+// marshal wrapper
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::ExtraInfo, PLT_ExtraInfo);
+
+namespace Platinum
+{
+
+/*----------------------------------------------------------------------
+| MiscInfo
++---------------------------------------------------------------------*/
+public ref class MiscInfo : public ManagedWrapper<PLT_MiscInfo>
+{
+public:
+
+ // properties
+
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(UInt32, DvdRegionCode, dvdregioncode, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(UInt32, OriginalTrackNumber, original_track_number, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Toc, toc, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, UserAnnotation, user_annotation, m_pHandle);
+
+internal:
+
+ MiscInfo(PLT_MiscInfo& native) :
+ ManagedWrapper<PLT_MiscInfo>(native)
+ {}
+};
+
+}
+
+// marshal wrapper
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::MiscInfo, PLT_MiscInfo);
+
+namespace Platinum
+{
+
+/*----------------------------------------------------------------------
+| ProtocolInfo
++---------------------------------------------------------------------*/
+public ref class ProtocolInfo : public ManagedWrapper<PLT_ProtocolInfo>
+{
+public:
+
+ // properties
+
+public:
+ static ProtocolInfo^ GetProtocolInfo(String^ filename)
+ {
+ return GetProtocolInfo(filename, true, nullptr);
+ }
+
+ static ProtocolInfo^ GetProtocolInfo(String^ filename,
+ bool with_dlna_extension)
+ {
+ return GetProtocolInfo(filename, with_dlna_extension, nullptr);
+ }
+
+ static ProtocolInfo^ GetProtocolInfo(String^ filename,
+ bool with_dlna_extension,
+ HttpRequestContext^ context);
+
+ static ProtocolInfo^ GetProtocolInfoFromMimeType(String^ mime_type)
+ {
+ return GetProtocolInfoFromMimeType(mime_type, true, nullptr);
+ }
+
+ static ProtocolInfo^ GetProtocolInfoFromMimeType(String^ mime_type,
+ bool with_dlna_extension)
+ {
+ return GetProtocolInfoFromMimeType(mime_type, with_dlna_extension, nullptr);
+ }
+
+ static ProtocolInfo^ GetProtocolInfoFromMimeType(String^ mime_type,
+ bool with_dlna_extension,
+ HttpRequestContext^ context);
+
+internal:
+
+ ProtocolInfo(PLT_ProtocolInfo& native) :
+ ManagedWrapper<PLT_ProtocolInfo>(native)
+ {}
+
+public:
+
+ ProtocolInfo(NPT_String& protocol_info) :
+ ManagedWrapper<PLT_ProtocolInfo>()
+ {
+ *m_pHandle = PLT_ProtocolInfo(protocol_info);
+ }
+};
+
+}
+
+// marshal wrapper
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::ProtocolInfo, PLT_ProtocolInfo);
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::ProtocolInfo, NPT_String);
+
+namespace Platinum
+{
+
+/*----------------------------------------------------------------------
+| MediaResource
++---------------------------------------------------------------------*/
+public ref class MediaResource : public ManagedWrapper<PLT_MediaItemResource>
+{
+public:
+
+ // properties
+
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, URI, m_Uri, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_OBJECT_PROPERTY(ProtocolInfo^, ProtoInfo, m_ProtocolInfo, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(UInt32, Duration, m_Duration, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(UInt64, Size, m_Size, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Protection, m_Protection, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(UInt32, Bitrate, m_Bitrate, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(UInt32, BitsPerSample, m_BitsPerSample, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(UInt32, SampleFrequency, m_SampleFrequency, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(UInt32, NbAudioChannels, m_NbAudioChannels, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Resolution, m_Resolution, m_pHandle);
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(UInt32, ColorDepth, m_ColorDepth, m_pHandle);
+
+internal:
+
+ MediaResource(PLT_MediaItemResource& native) :
+ ManagedWrapper<PLT_MediaItemResource>(native)
+ {}
+
+public:
+ MediaResource() :
+ ManagedWrapper<PLT_MediaItemResource>()
+ {}
+};
+
+}
+
+// marshal wrapper
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::MediaResource, PLT_MediaItemResource);
+
+namespace Platinum
+{
+ref class MediaItem;
+ref class MediaContainer;
+
+/*----------------------------------------------------------------------
+| MediaObject
++---------------------------------------------------------------------*/
+public ref class MediaObject
+{
+protected:
+
+ PLT_MediaObjectReference* m_pHandle;
+
+public:
+
+ // properties
+
+ /* common properties */
+ PLATINUM_MANAGED_IMPLEMENT_OBJECT_PROPERTY(ObjectClass^, Class, m_ObjectClass, (*m_pHandle));
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, ObjectID, m_ObjectID, (*m_pHandle));
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, ParentID, m_ParentID, (*m_pHandle));
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, ReferenceID, m_ReferenceID, (*m_pHandle));
+
+ /* metadata */
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Title, m_Title, (*m_pHandle));
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Creator, m_Creator, (*m_pHandle));
+ PLATINUM_MANAGED_IMPLEMENT_STRING_PROPERTY(String^, Date, m_Date, (*m_pHandle));
+ PLATINUM_MANAGED_IMPLEMENT_OBJECT_PROPERTY(PeopleInfo^, People, m_People, (*m_pHandle));
+ PLATINUM_MANAGED_IMPLEMENT_OBJECT_PROPERTY(AffiliationInfo^, Affiliation, m_Affiliation, (*m_pHandle));
+ PLATINUM_MANAGED_IMPLEMENT_OBJECT_PROPERTY(DescriptionInfo^, Description, m_Description, (*m_pHandle));
+ PLATINUM_MANAGED_IMPLEMENT_OBJECT_PROPERTY(RecordedInfo^, Recorded, m_Recorded, (*m_pHandle));
+
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(bool, Restricted, m_Restricted, (*m_pHandle));
+
+ /* extras */
+ PLATINUM_MANAGED_IMPLEMENT_OBJECT_PROPERTY(ExtraInfo^, Extra, m_ExtraInfo, (*m_pHandle));
+
+ /* miscellaneous info */
+ PLATINUM_MANAGED_IMPLEMENT_OBJECT_PROPERTY(MiscInfo^, Miscellaneous, m_MiscInfo, (*m_pHandle));
+
+ property IEnumerable<MediaResource^>^ Resources
+ {
+ IEnumerable<MediaResource^>^ get();
+ }
+
+public:
+
+ void AddResource(MediaResource^ resource)
+ {
+ (*m_pHandle)->m_Resources.Add(resource->Handle);
+ }
+
+internal:
+
+ property PLT_MediaObjectReference& Handle
+ {
+ PLT_MediaObjectReference& get()
+ {
+ return *m_pHandle;
+ }
+ }
+
+public:
+
+ MediaItem^ item();
+ MediaContainer^ container();
+
+ String^ ToDidl(String^ filter)
+ {
+ NPT_String didl;
+ didl.Reserve(1024);
+
+ marshal_context c;
+ NPT_String _filter(c.marshal_as<const char*>(filter));
+
+ (*m_pHandle)->ToDidl(_filter, didl);
+
+ return marshal_as<String^>(didl.GetChars());
+ }
+
+public:
+
+ virtual Boolean Equals(Object^ obj) override
+ {
+ if (obj == nullptr)
+ return false;
+
+ if (!this->GetType()->IsInstanceOfType(obj))
+ return false;
+
+ return (*m_pHandle == *((MediaObject^)obj)->m_pHandle);
+ }
+
+internal:
+
+ MediaObject(PLT_MediaObjectReference& media)
+ {
+ if (media.IsNull())
+ throw gcnew ArgumentNullException("media");
+
+ m_pHandle = new PLT_MediaObjectReference(media);
+ }
+
+ MediaObject(PLT_MediaObject& media)
+ {
+ m_pHandle = new PLT_MediaObjectReference(&media);
+ }
+
+protected:
+
+ MediaObject(PLT_MediaObject* media)
+ {
+ if (media == NULL)
+ throw gcnew ArgumentNullException("media");
+
+ m_pHandle = new PLT_MediaObjectReference(media);
+ }
+
+public:
+
+ ~MediaObject()
+ {
+ // clean-up managed
+
+ // clean-up unmanaged
+ this->!MediaObject();
+ }
+
+ !MediaObject()
+ {
+ // clean-up unmanaged
+ if (m_pHandle != 0)
+ {
+ delete m_pHandle;
+
+ m_pHandle = 0;
+ }
+ }
+
+};
+
+/*----------------------------------------------------------------------
+| MediaItem
++---------------------------------------------------------------------*/
+public ref class MediaItem : public MediaObject
+{
+internal:
+
+ MediaItem(PLT_MediaItem& media) : MediaObject(media)
+ {}
+
+public:
+
+ MediaItem() : MediaObject(new PLT_MediaItem)
+ {}
+
+ MediaItem(PLT_MediaObjectReference& media) : MediaObject(media)
+ {
+ if (media->IsContainer())
+ throw gcnew ArgumentException("object");
+ }
+
+ MediaItem(MediaObject^ media) : MediaObject(*media->Handle)
+ {
+ if (media->Handle->IsContainer())
+ throw gcnew ArgumentException("object");
+ }
+
+ ~MediaItem()
+ {
+ this->!MediaItem();
+ }
+
+ !MediaItem()
+ {}
+};
+
+/*----------------------------------------------------------------------
+| MediaContainer
++---------------------------------------------------------------------*/
+public ref class MediaContainer : public MediaObject
+{
+public:
+
+ // properties
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(bool, Searchable, m_Searchable, ((PLT_MediaContainer*)m_pHandle->AsPointer()));
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(Int32, ChildrenCount, m_ChildrenCount, ((PLT_MediaContainer*)m_pHandle->AsPointer()));
+ PLATINUM_MANAGED_IMPLEMENT_PROPERTY(UInt32, ContainerUpdateID, m_ContainerUpdateID, ((PLT_MediaContainer*)m_pHandle->AsPointer()));
+
+internal:
+
+ MediaContainer(PLT_MediaContainer& media) :
+ MediaObject(media)
+ {}
+
+public:
+ MediaContainer() :
+ MediaObject(new PLT_MediaContainer)
+ {}
+
+ MediaContainer(PLT_MediaObjectReference& media) :
+ MediaObject(media)
+ {
+ if (!media->IsContainer())
+ throw gcnew ArgumentException("object");
+ }
+
+ MediaContainer(MediaObject^ media) :
+ MediaObject(*media->Handle)
+ {
+ if (!media->Handle->IsContainer())
+ throw gcnew ArgumentException("object");
+ }
+
+ ~MediaContainer()
+ {
+ this->!MediaContainer();
+ }
+
+ !MediaContainer()
+ {}
+};
+
+}
+
+// marshal wrapper
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::MediaObject, PLT_MediaObject);
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::MediaObject, PLT_MediaObjectReference);
+
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::MediaItem, PLT_MediaItem);
+PLATINUM_MANAGED_MARSHAL_AS(Platinum::MediaContainer, PLT_MediaContainer); \ No newline at end of file