//        Copyright 2016, 2021, 2023-2024 Avid Technology, Inc.
//        All rights reserved.
// 
// This file is part of the Avid AAX SDK.
// 
// The AAX SDK is subject to commercial or open-source licensing.
// 
// By using the AAX SDK, you agree to the terms of both the Avid AAX SDK License
// Agreement and Avid Privacy Policy.
// 
// AAX SDK License: https://developer.avid.com/aax
// Privacy Policy: https://www.avid.com/legal/privacy-policy-statement
// 
// Or: You may also use this code under the terms of the GPL v3 (see
// www.gnu.org/licenses).
// 
// THE AAX SDK IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
// EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
// DISCLAIMED.

digraph aax_desc_interfaces {
	graph [ fontname=Helvetica ];
	ranksep=0.75;
	rankdir=RL;
	
	node [shape=record, fontname=Helvetica, fontsize=10];
	
	
	// Description callback
	desc [ label="GetEffectDescriptions()" URL="\ref AAXRegisterPlugin" shape=egg color="gray"];
	
	// Description interfaces
	icoll [ shape=none, margin=0, tooltip="AAX_ICollection" label=<
		<TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0" CELLPADDING="4">
			<TR>
				<TD PORT="head" BGCOLOR="lightgray" HREF="\ref AAX_ICollection">AAX_ICollection</TD>
			</TR>
			<TR>
				<TD PORT="newdesc" HREF="\ref AAX_ICollection::NewDescriptor()">NewDescriptor()</TD>
			</TR>
			<TR>
				<TD PORT="addeffect" HREF="\ref AAX_ICollection::AddEffect()">AddEffect()</TD>
			</TR>
		</TABLE>> ];
	ipidesc [ shape=none, margin=0, tooltip="AAX_IEffectDescriptor" label=<
		<TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0" CELLPADDING="4">
			<TR>
				<TD PORT="head" BGCOLOR="lightgray" HREF="\ref AAX_IEffectDescriptor"><B>AAX_IEffectDescriptor</B></TD>
			</TR>
			<TR>
				<TD PORT="newcompdesc" HREF="\ref AAX_IEffectDescriptor::NewComponentDescriptor()">NewComponentDescriptor()</TD>
			</TR>
			<TR>
				<TD PORT="addcomp" HREF="\ref AAX_IEffectDescriptor::AddComponent()">AddComponent()</TD>
			</TR>
			<TR>
				<TD PORT="newpropmap" HREF="\ref AAX_IEffectDescriptor::NewPropertyMap()">NewPropertyMap()</TD>
			</TR>
			<TR>
				<TD PORT="setprops" HREF="\ref AAX_IEffectDescriptor::SetProperties()">SetProperties()</TD>
			</TR>
			<TR>
				<TD PORT="addmeterdesc" HREF="\ref AAX_IEffectDescriptor::AddMeterDescription()">AddMeterDescription()</TD>
			</TR>
		</TABLE>> ];
	icompdesc [ shape=none, margin=0, tooltip="AAX_IComponentDescriptor" label=<
		<TABLE BORDER="1" CELLBORDER="0" CELLSPACING="0" CELLPADDING="4">
			<TR>
				<TD PORT="head" BGCOLOR="lightgray" HREF="\ref AAX_IComponentDescriptor"><B>AAX_IComponentDescriptor</B></TD>
			</TR>
			<TR>
				<TD PORT="newpropmap" HREF="\ref AAX_IComponentDescriptor::NewPropertyMap()">NewPropertyMap()</TD>
			</TR>
			<TR>
				<TD PORT="addprocessproc_nat" HREF="\ref AAX_IComponentDescriptor::AddProcessProc_Native()">AddProcessProc_Native()</TD>
			</TR>
			<TR>
				<TD PORT="addprocessproc_ti" HREF="\ref AAX_IComponentDescriptor::AddProcessProc_TI()">AddProcessProc_TI()</TD>
			</TR>
		</TABLE>> ];
	
	// Property maps
	ipropmap_pi [ shape=none, margin=0, tooltip="AAX_IPropertyMap" label=<
		<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
			<TR>
				<TD PORT="main" BGCOLOR="lightgray" HREF="\ref AAX_IPropertyMap"><B>AAX_IPropertyMap</B></TD>
			</TR>
			<TR>
				<TD BORDER="0"></TD>
			</TR>
			<TR>
				<TD PORT="meter" BGCOLOR="lightgray" HREF="\ref AAX_IPropertyMap"><B>AAX_IPropertyMap</B></TD>
			</TR>
		</TABLE>> ];
	ipropmap_comp [ shape=none, margin=0, tooltip="AAX_IPropertyMap" label=<
		<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4">
			<TR>
				<TD PORT="nat" BGCOLOR="lightgray" HREF="\ref AAX_IPropertyMap"><B>AAX_IPropertyMap</B></TD>
			</TR>
			<TR>
				<TD BORDER="0"></TD>
			</TR>
			<TR>
				<TD PORT="ti" BGCOLOR="lightgray" HREF="\ref AAX_IPropertyMap"><B>AAX_IPropertyMap</B></TD>
			</TR>
		</TABLE>> ];

	// Creation connections
	icoll -> desc [constraint=false color="grey"];
	ipidesc:head -> icoll:addeffect [weight=3.0 color="grey"];
	icompdesc:head -> ipidesc:addcomp [weight=3.0 color="grey"];
	
	ipropmap_pi:main:w -> ipidesc:setprops:w [color="grey" constraint=false];
	ipropmap_pi:meter:w -> ipidesc:addmeterdesc:w [color="grey" constraint=false];
	ipropmap_comp:nat:w -> icompdesc:addprocessproc_nat:w [color="grey" constraint=false];
	ipropmap_comp:ti:w -> icompdesc:addprocessproc_ti:w [color="grey" constraint=false];
	
	// Return connections
	icoll:newdesc -> ipidesc:head:n [constraint=false];
	ipidesc:newcompdesc -> icompdesc:head:n [constraint=false];

	ipidesc:newpropmap:e -> ipropmap_pi:main:e [constraint=false];
	ipidesc:newpropmap:e -> ipropmap_pi:meter:e [constraint=false];
	icompdesc:newpropmap:e -> ipropmap_comp:nat:e [constraint=false];
	icompdesc:newpropmap:e -> ipropmap_comp:ti:e [constraint=false];
	
	// Layout requirements
	{ rank=same; desc; icoll; }
	{ rank=same; ipidesc; ipropmap_pi; }
	{ rank=same; icompdesc; ipropmap_comp; }
}
