601 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			601 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * (c) Copyright Ascensio System SIA 2010-2014
 | |
|  *
 | |
|  * This program is a free software product. You can redistribute it and/or 
 | |
|  * modify it under the terms of the GNU Affero General Public License (AGPL) 
 | |
|  * version 3 as published by the Free Software Foundation. In accordance with 
 | |
|  * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect 
 | |
|  * that Ascensio System SIA expressly excludes the warranty of non-infringement
 | |
|  * of any third-party rights.
 | |
|  *
 | |
|  * This program is distributed WITHOUT ANY WARRANTY; without even the implied 
 | |
|  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR  PURPOSE. For 
 | |
|  * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
 | |
|  *
 | |
|  * You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
 | |
|  * EU, LV-1021.
 | |
|  *
 | |
|  * The  interactive user interfaces in modified source and object code versions
 | |
|  * of the Program must display Appropriate Legal Notices, as required under 
 | |
|  * Section 5 of the GNU AGPL version 3.
 | |
|  *
 | |
|  * Pursuant to Section 7(b) of the License you must retain the original Product
 | |
|  * logo when distributing the program. Pursuant to Section 7(e) we decline to
 | |
|  * grant you any rights under trademark law for use of our trademarks.
 | |
|  *
 | |
|  * All the Product's GUI elements, including illustrations and icon sets, as
 | |
|  * well as technical writing content are licensed under the terms of the
 | |
|  * Creative Commons Attribution-ShareAlike 4.0 International. See the License
 | |
|  * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
 | |
|  *
 | |
|  */
 | |
|  #pragma once
 | |
| 
 | |
| 
 | |
| #include "Shapes\Shape.h"
 | |
| #include "ElementSettings.h"
 | |
| 
 | |
| using namespace NSOfficeDrawing;
 | |
| 
 | |
| class CElementsContainer;
 | |
| 
 | |
| 
 | |
| class IElement
 | |
| {
 | |
| public:
 | |
| 	BOOL m_bIsBackground;
 | |
| 
 | |
| 	ElementType m_etType;
 | |
| 	CDoubleRect m_rcBounds;
 | |
| 	RECT m_rcBoundsOriginal;
 | |
| 
 | |
| 	double m_dStartTime;
 | |
| 	double m_dEndTime;
 | |
| 
 | |
| 	CInteractiveInfo m_oActions;
 | |
| 	CAnimationInfo m_oAnimations;
 | |
| 
 | |
| 	LONG m_lID;
 | |
| 	LONG m_lMasterID;
 | |
| 
 | |
| 	
 | |
| 	LONG m_lPlaceholderID;
 | |
| 	LONG m_lPlaceholderPosition;
 | |
| 
 | |
| 	LONG m_lPersistIndex;
 | |
| 
 | |
| 	
 | |
| 	
 | |
| 	
 | |
| 	
 | |
| 	
 | |
| 	IStream* m_pStream;
 | |
| 	LONG m_lOffsetTextStyle;
 | |
| 	LONG m_lOffsetTextProp;
 | |
| 
 | |
| 	
 | |
| 	CMetricInfo m_oMetric;
 | |
| 
 | |
| 	double m_dRotate;	
 | |
| 	bool m_bFlipH;		
 | |
| 	bool m_bFlipV;		
 | |
| public:	
 | |
| 	IElement()
 | |
| 	{
 | |
| 		m_dRotate = 0.0;
 | |
| 		m_bFlipH = false;
 | |
| 		m_bFlipV = false;
 | |
| 	}
 | |
| 	virtual ~IElement()
 | |
| 	{
 | |
| 		m_pStream = NULL;
 | |
| 		m_lOffsetTextStyle = -1;
 | |
| 		m_lOffsetTextProp = -1;
 | |
| 	}
 | |
| 
 | |
| 	virtual CString ToXml() = 0;
 | |
| 	virtual void NormalizeCoords(double dScaleX, double dScaleY)
 | |
| 	{
 | |
| 		m_rcBounds.left		= dScaleX * m_rcBoundsOriginal.left;
 | |
| 		m_rcBounds.right	= dScaleX * m_rcBoundsOriginal.right;
 | |
| 		m_rcBounds.top		= dScaleY * m_rcBoundsOriginal.top;
 | |
| 		m_rcBounds.bottom	= dScaleY * m_rcBoundsOriginal.bottom;
 | |
| 
 | |
| 		
 | |
| 	}
 | |
| 
 | |
| 	virtual void SetUpProperties(CProperties* pProps, CElementsContainer* pSlide);
 | |
| 	virtual IElement* CreateDublicate() = 0;
 | |
| 
 | |
| protected:
 | |
| 	virtual void SetUpProperty(CProperty* pProp, CElementsContainer* pSlide);
 | |
| 
 | |
| protected:
 | |
| 	virtual void SetProperiesToDublicate(IElement* pDublicate)
 | |
| 	{
 | |
| 		if (NULL == pDublicate)
 | |
| 			return;
 | |
| 
 | |
| 		pDublicate->m_bIsBackground = m_bIsBackground;
 | |
| 		
 | |
| 		pDublicate->m_etType = m_etType;
 | |
| 		pDublicate->m_rcBounds = m_rcBounds;
 | |
| 
 | |
| 		pDublicate->m_rcBoundsOriginal.left = m_rcBoundsOriginal.left;
 | |
| 		pDublicate->m_rcBoundsOriginal.top = m_rcBoundsOriginal.top;
 | |
| 		pDublicate->m_rcBoundsOriginal.right = m_rcBoundsOriginal.right;
 | |
| 		pDublicate->m_rcBoundsOriginal.bottom = m_rcBoundsOriginal.bottom;
 | |
| 
 | |
| 		pDublicate->m_dStartTime = m_dStartTime;
 | |
| 		pDublicate->m_dEndTime = m_dEndTime;
 | |
| 
 | |
| 		pDublicate->m_lID = m_lID;
 | |
| 		pDublicate->m_lMasterID = m_lMasterID;
 | |
| 
 | |
| 		pDublicate->m_lPlaceholderID = m_lPlaceholderID;
 | |
| 		pDublicate->m_lPlaceholderPosition = m_lPlaceholderPosition;
 | |
| 
 | |
| 		pDublicate->m_lPersistIndex = m_lPersistIndex;
 | |
| 
 | |
| 		pDublicate->m_pStream = m_pStream;
 | |
| 		pDublicate->m_lOffsetTextStyle = m_lOffsetTextStyle;
 | |
| 		pDublicate->m_lOffsetTextProp = m_lOffsetTextProp;
 | |
| 
 | |
| 		pDublicate->m_oMetric = m_oMetric;
 | |
| 
 | |
| 		pDublicate->m_dRotate	= m_dRotate;
 | |
| 		pDublicate->m_bFlipH	= m_bFlipH;
 | |
| 		pDublicate->m_bFlipV	= m_bFlipV;
 | |
| 	}
 | |
| };
 | |
| 
 | |
| 
 | |
| 
 | |
| class CVideoElement : public IElement
 | |
| {
 | |
| public:
 | |
| 	CStringW m_strFileName;
 | |
| 
 | |
| 	double   m_dVideoDuration;
 | |
| 	
 | |
| 	BYTE m_nAlpha;
 | |
| 	LONG m_lAngle;
 | |
| 
 | |
| public:
 | |
| 	CVideoElement():IElement()
 | |
| 	{
 | |
| 		m_bIsBackground = FALSE;
 | |
| 		
 | |
| 		m_pStream = NULL;
 | |
| 		m_lOffsetTextStyle = -1;
 | |
| 		m_lOffsetTextProp = -1;
 | |
| 		
 | |
| 		m_lID = -1;
 | |
| 		m_lMasterID = -1;
 | |
| 
 | |
| 		m_lPlaceholderID = -1;
 | |
| 		m_lPlaceholderPosition = -1;
 | |
| 
 | |
| 		m_lPersistIndex = -1;
 | |
| 
 | |
| 		m_etType = etVideo;
 | |
| 		
 | |
| 		m_rcBounds.left = 0; m_rcBounds.top = 0;
 | |
| 		m_rcBounds.right = 1; m_rcBounds.bottom = 1;
 | |
| 
 | |
| 		m_rcBoundsOriginal.left = 0; m_rcBoundsOriginal.top = 0;
 | |
| 		m_rcBoundsOriginal.right = 1; m_rcBoundsOriginal.bottom = 1;
 | |
| 
 | |
| 		m_strFileName = _T("");
 | |
| 
 | |
| 		m_dStartTime = 0.0;
 | |
| 		m_dEndTime = 30.0;
 | |
| 
 | |
| 		m_dVideoDuration = 0.0;
 | |
| 
 | |
| 		m_nAlpha = 0xFF;
 | |
| 	}
 | |
| 
 | |
| 	virtual ~CVideoElement()
 | |
| 	{
 | |
| 	}
 | |
| 
 | |
| 	virtual CString ToXml()
 | |
| 	{
 | |
| 		
 | |
| 		
 | |
| 
 | |
| 		double dCentreX = 100.0 * ((double)(m_rcBounds.right + m_rcBounds.left) / 2) / (double)m_oMetric.m_lMillimetresHor;
 | |
| 		double dCentreY = 100.0 * ((double)(m_rcBounds.top + m_rcBounds.bottom) / 2) / (double)m_oMetric.m_lMillimetresVer;
 | |
| 
 | |
| 		double dWidth  = 100.0 * ((double)(m_rcBounds.right - m_rcBounds.left)) / (double)m_oMetric.m_lMillimetresHor;
 | |
| 		double dHeight = 100.0 * ((double)(m_rcBounds.bottom - m_rcBounds.top)) / (double)m_oMetric.m_lMillimetresVer;
 | |
| 
 | |
| 		CString strOverlay = _T("");
 | |
| 		strOverlay.Format(_T("<OverlaySetting StartTime='%lf' EndTime='%lf'><AlphaTransparency>%d</AlphaTransparency><centerx>%lf</centerx><centery>%lf</centery><widthpercent>%lf</widthpercent><heightpercent>%lf</heightpercent><Rotate Angle='%d'/></OverlaySetting>"), 
 | |
| 							m_dStartTime, m_dEndTime, (int)m_nAlpha,
 | |
| 							dCentreX, dCentreY, dWidth, dHeight,
 | |
| 							(LONG)m_dRotate);
 | |
| 
 | |
| 		int lIndex = m_strFileName.Find(L"file:///");
 | |
| 		if (0 == lIndex)
 | |
| 		{
 | |
| 			m_strFileName = m_strFileName.Mid(8);
 | |
| 			m_strFileName.Replace('/', '\\');
 | |
| 		}
 | |
| 
 | |
| 		
 | |
| 		CString strFileName = StreamUtils::ConvertCStringWToCString(m_strFileName);
 | |
| 		NSAttributes::CorrectXmlString(strFileName);
 | |
| 
 | |
| 		CString strSingleSource = _T("");
 | |
| 		strSingleSource.Format(_T("<SingleSource><VideoSources><VideoSource FilePath='%s' AudioTrack='0' StartTime='0' EndTime='-1' VideoTrack='0' SPTrack='-1' CropScale='0' ResizeType='1'/></VideoSources></SingleSource>"), 
 | |
| 			strFileName);
 | |
| 		
 | |
| 		
 | |
| 
 | |
| 		return _T("<VideoOverlay>") + strOverlay + strSingleSource + _T("</VideoOverlay>");
 | |
| 	}
 | |
| 
 | |
| 	virtual IElement* CreateDublicate()
 | |
| 	{
 | |
| 		CVideoElement* pVideoElement = new CVideoElement();
 | |
| 		
 | |
| 		SetProperiesToDublicate((IElement*)pVideoElement);
 | |
| 
 | |
| 		pVideoElement->m_strFileName		= m_strFileName;
 | |
| 		pVideoElement->m_nAlpha				= m_nAlpha;
 | |
| 
 | |
| 		pVideoElement->m_dVideoDuration		= m_dVideoDuration;
 | |
| 
 | |
| 		return (IElement*)pVideoElement;
 | |
| 	}
 | |
| };
 | |
| 
 | |
| class CImageElement : public IElement
 | |
| {
 | |
| public:
 | |
| 	CStringW m_strFileName;
 | |
| 
 | |
| 	BYTE m_nAlpha;
 | |
| 	bool m_bApplyBounds;
 | |
|     CDoubleRect m_rcImageBounds;
 | |
| 	CString m_strEffects;
 | |
| 
 | |
| 
 | |
| public:
 | |
| 	CImageElement():IElement()
 | |
| 	{
 | |
| 		m_bIsBackground = FALSE;
 | |
| 		
 | |
| 		m_pStream = NULL;
 | |
| 		m_lOffsetTextStyle = -1;
 | |
| 		m_lOffsetTextProp = -1;
 | |
| 		
 | |
| 		m_lID = -1;
 | |
| 		m_lMasterID = -1;
 | |
| 
 | |
| 		m_lPlaceholderID = -1;
 | |
| 		m_lPlaceholderPosition = -1;
 | |
| 
 | |
| 		m_lPersistIndex = -1;
 | |
| 
 | |
| 		m_etType = etPicture;
 | |
| 		
 | |
| 		m_rcBounds.left = 0; m_rcBounds.top = 0;
 | |
| 		m_rcBounds.right = 1; m_rcBounds.bottom = 1;
 | |
| 
 | |
| 		m_rcBoundsOriginal.left = 0; m_rcBoundsOriginal.top = 0;
 | |
| 		m_rcBoundsOriginal.right = 1; m_rcBoundsOriginal.bottom = 1;
 | |
| 
 | |
| 		m_strFileName = _T("");
 | |
| 
 | |
| 		m_dStartTime = 0.0;
 | |
| 		m_dEndTime = 30.0;
 | |
| 
 | |
| 		m_nAlpha = 0xFF;
 | |
| 
 | |
| 		m_bApplyBounds = false;
 | |
| 		m_rcImageBounds.top = 0.0;
 | |
| 		m_rcImageBounds.left = 0.0;
 | |
| 		m_rcImageBounds.right = 0.0;
 | |
| 		m_rcImageBounds.bottom = 0.0;
 | |
| 		m_strEffects = _T("");
 | |
| 	}
 | |
| 
 | |
| 	virtual ~CImageElement()
 | |
| 	{
 | |
| 	}
 | |
| 
 | |
| 	virtual CString ToXml()
 | |
| 	{
 | |
| 		LONG lFlags = 0;
 | |
| 		if (m_bFlipH)
 | |
| 			lFlags |= 0x0001;
 | |
| 		if (m_bFlipV)
 | |
| 			lFlags |= 0x0002;
 | |
| 
 | |
| 		CString strFileName = StreamUtils::ConvertCStringWToCString(m_strFileName);
 | |
| 		NSAttributes::CorrectXmlString(strFileName);
 | |
| 
 | |
| 		
 | |
| 
 | |
| 		CString strEffect = _T("");
 | |
| 		strEffect.Format(_T("<ImagePaint-DrawImageFromFile left='%d' top='%d' right='%d' bottom='%d' angle='%lf' flags='%d' filepath='%s' metric='0' backcolor='-1' scaletype='-1' scalecolor='255' widthmetric='%d' heightmetric='%d'>\
 | |
| 				<timeline type='1' begin='%lf' end='%lf' fadein='0' fadeout='0' completeness='1.0' /></ImagePaint-DrawImageFromFile>"), 
 | |
| 				(LONG)m_rcBounds.left, (LONG)m_rcBounds.top, (LONG)m_rcBounds.right, (LONG)m_rcBounds.bottom,
 | |
| 				m_dRotate, lFlags, StreamUtils::ConvertCStringWToCString(m_strFileName), 
 | |
| 				m_oMetric.m_lMillimetresHor, m_oMetric.m_lMillimetresVer, 
 | |
| 				m_dStartTime, m_dEndTime);
 | |
| 		
 | |
| 		return strEffect;
 | |
| 	}
 | |
| 
 | |
| 	virtual void SetUpProperty(CProperty* pProp, CElementsContainer* pSlide);
 | |
| 
 | |
| 	virtual IElement* CreateDublicate()
 | |
| 	{
 | |
| 		CImageElement* pImageElement = new CImageElement();
 | |
| 		
 | |
| 		SetProperiesToDublicate((IElement*)pImageElement);
 | |
| 
 | |
| 		pImageElement->m_strFileName = m_strFileName;
 | |
| 		pImageElement->m_nAlpha = m_nAlpha;
 | |
| 
 | |
| 		pImageElement->m_bApplyBounds = m_bApplyBounds;
 | |
| 		pImageElement->m_rcImageBounds.top = m_rcImageBounds.top;
 | |
| 		pImageElement->m_rcImageBounds.left = m_rcImageBounds.left;
 | |
| 		pImageElement->m_rcImageBounds.right = m_rcImageBounds.right;
 | |
| 		pImageElement->m_rcImageBounds.bottom = m_rcImageBounds.bottom;
 | |
| 		pImageElement->m_strEffects = m_strEffects;
 | |
| 
 | |
| 
 | |
| 		return (IElement*)pImageElement;
 | |
| 	}
 | |
| };
 | |
| 
 | |
| class CTextElement : public IElement
 | |
| {
 | |
| public:
 | |
| 	CTextAttributesEx m_oSettings;
 | |
| 
 | |
| public:
 | |
| 
 | |
| 	CTextElement():IElement()
 | |
| 	{
 | |
| 		m_bIsBackground = FALSE;
 | |
| 		
 | |
| 		m_pStream = NULL;
 | |
| 		m_lOffsetTextStyle = -1;
 | |
| 		m_lOffsetTextProp = -1;
 | |
| 		
 | |
| 		m_lID = -1;
 | |
| 		m_lMasterID = -1;
 | |
| 
 | |
| 		m_lPlaceholderID = -1;
 | |
| 		m_lPlaceholderPosition = -1;
 | |
| 
 | |
| 		m_lPersistIndex = -1;
 | |
| 
 | |
| 		m_etType = etText;
 | |
| 	}
 | |
| 
 | |
| 	virtual ~CTextElement()
 | |
| 	{
 | |
| 	}
 | |
| 
 | |
| 	virtual CString ToXml()
 | |
| 	{
 | |
| 		CGeomShapeInfo oInfo;
 | |
| 		oInfo.SetBounds(m_rcBounds);
 | |
| 
 | |
| 		oInfo.m_dRotate = m_dRotate;
 | |
| 		oInfo.m_bFlipH	= m_bFlipH;
 | |
| 		oInfo.m_bFlipV	= m_bFlipV;
 | |
| 		
 | |
| 		CString strXml = m_oSettings.ToString(oInfo, m_oMetric, m_dStartTime, m_dEndTime);
 | |
| 		return strXml;
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	virtual IElement* CreateDublicate()
 | |
| 	{
 | |
| 		CTextElement* pTextElement = new CTextElement();
 | |
| 		
 | |
| 		SetProperiesToDublicate((IElement*)pTextElement);
 | |
| 
 | |
| 		pTextElement->m_oSettings = m_oSettings;
 | |
| 
 | |
| 		return (IElement*)pTextElement;
 | |
| 	}
 | |
| };
 | |
| 
 | |
| class CShapeElement : public IElement
 | |
| {
 | |
| private:
 | |
| 	NSBaseShape::ClassType m_ClassType;
 | |
| public:
 | |
| 	int m_lShapeType;
 | |
| 	CString m_strXmlTransform;
 | |
| 
 | |
| 	
 | |
| 	CShape m_oShape;
 | |
| 	
 | |
| 	
 | |
| public:
 | |
| 	CShapeElement(NSBaseShape::ClassType ClassType, int eType) :IElement(), m_strXmlTransform(_T("")), m_lShapeType(eType), m_oShape(ClassType, eType)
 | |
| 	{
 | |
| 		m_bIsBackground = FALSE;
 | |
| 		m_ClassType = ClassType;
 | |
| 		
 | |
| 		m_pStream = NULL;
 | |
| 		m_lOffsetTextStyle = -1;
 | |
| 		m_lOffsetTextProp = -1;
 | |
| 		
 | |
| 		m_lID = -1;
 | |
| 		m_lMasterID = -1;
 | |
| 
 | |
| 		m_lPlaceholderID = -1;
 | |
| 		m_lPlaceholderPosition = -1;
 | |
| 
 | |
| 		m_lPersistIndex = -1;
 | |
| 
 | |
| 		m_etType = etShape;
 | |
| 
 | |
| 		
 | |
| 
 | |
| 		m_oShape.m_rcBounds = m_rcBounds;
 | |
| 
 | |
| 		m_oShape.m_dStartTime = m_dStartTime;
 | |
| 		m_oShape.m_dStartTime = m_dEndTime;
 | |
| 		
 | |
| 		
 | |
| 	}
 | |
| 
 | |
| 	CShapeElement(const CString& str):IElement(), m_oShape(NSBaseShape::unknown, 0x1000)
 | |
| 	{
 | |
| 		m_lShapeType = 0x1000;
 | |
| 		m_oShape.LoadFromXML(str);
 | |
| 		m_ClassType = m_oShape.m_pShape->GetClassType();
 | |
| 	}
 | |
| 
 | |
| 	virtual ~CShapeElement()
 | |
| 	{
 | |
| 		
 | |
| 	}
 | |
| 
 | |
| 	virtual CString ToXml()
 | |
| 	{
 | |
| 		m_strXmlTransform = _T("");
 | |
| 		
 | |
| 		CGeomShapeInfo oInfo;
 | |
| 		oInfo.SetBounds(m_rcBounds);
 | |
| 
 | |
| 		oInfo.m_dRotate = m_dRotate;
 | |
| 		oInfo.m_bFlipH	= m_bFlipH;
 | |
| 		oInfo.m_bFlipV	= m_bFlipV;
 | |
| 
 | |
| 		m_strXmlTransform = m_oShape.ToXml(oInfo, m_oMetric, m_dStartTime, m_dEndTime);
 | |
| 
 | |
| 		return m_strXmlTransform;
 | |
| 	}
 | |
| 
 | |
| 	virtual void SetUpProperties(CProperties* pProps, CElementsContainer* pSlide);
 | |
| 
 | |
| 	virtual IElement* CreateDublicate()
 | |
| 	{
 | |
| 		CShapeElement* pShapeElement = new CShapeElement(m_ClassType, m_lShapeType);
 | |
| 		
 | |
| 		SetProperiesToDublicate((IElement*)pShapeElement);
 | |
| 
 | |
| 		m_oShape.SetToDublicate(&pShapeElement->m_oShape);
 | |
| 		
 | |
| 		pShapeElement->m_strXmlTransform = m_strXmlTransform;
 | |
| 
 | |
| 		return (IElement*)pShapeElement;
 | |
| 	}
 | |
| };
 | |
| 
 | |
| class CAudioElement : public IElement
 | |
| {
 | |
| public:
 | |
| 	CStringW m_strFileName;
 | |
| 	
 | |
| 	BYTE m_nAmplify;
 | |
| 	bool m_bWithVideo;
 | |
| 	double m_dAudioDuration;
 | |
| 	bool m_bLoop;
 | |
| 
 | |
| 	double m_dClipStartTime;
 | |
| 	double m_dClipEndTime;
 | |
| 
 | |
| public:
 | |
| 	CAudioElement():IElement()
 | |
| 	{
 | |
| 		m_bIsBackground = FALSE;
 | |
| 		
 | |
| 		m_pStream = NULL;
 | |
| 		m_lOffsetTextStyle = -1;
 | |
| 		m_lOffsetTextProp = -1;
 | |
| 		
 | |
| 		m_lID = -1;
 | |
| 		m_lMasterID = -1;
 | |
| 
 | |
| 		m_lPlaceholderID = -1;
 | |
| 		m_lPlaceholderPosition = -1;
 | |
| 
 | |
| 		m_lPersistIndex = -1;
 | |
| 
 | |
| 		m_etType = etAudio;
 | |
| 		
 | |
| 		m_rcBounds.left = 0; m_rcBounds.top = 0;
 | |
| 		m_rcBounds.right = 1; m_rcBounds.bottom = 1;
 | |
| 
 | |
| 		m_rcBoundsOriginal.left = 0; m_rcBoundsOriginal.top = 0;
 | |
| 		m_rcBoundsOriginal.right = 1; m_rcBoundsOriginal.bottom = 1;
 | |
| 
 | |
| 		m_strFileName = _T("");
 | |
| 
 | |
| 		m_dStartTime = 0.0;
 | |
| 		m_dEndTime = 30.0;
 | |
| 
 | |
| 		m_nAmplify = 100;
 | |
| 		m_bWithVideo = false;
 | |
| 
 | |
| 		m_dAudioDuration = 0.0;
 | |
| 		m_bLoop = false;
 | |
| 
 | |
| 		m_dClipStartTime	= 0.0;
 | |
| 		m_dClipEndTime		= -1.0;
 | |
| 	}
 | |
| 
 | |
| 	virtual ~CAudioElement()
 | |
| 	{
 | |
| 	}
 | |
| 
 | |
| 	virtual CString ToXml()
 | |
| 	{
 | |
| 
 | |
| 		CString strOverlay1 = _T("");
 | |
| 		CString strOverlay2 = _T("");
 | |
| 		strOverlay1.Format(_T("<AudioSource StartTime='%lf' Duration='%lf' Amplify='%lf'>"), m_dStartTime, m_dEndTime-m_dStartTime, (double)m_nAmplify);
 | |
| 
 | |
| 		int lIndex = m_strFileName.Find(L"file:///");
 | |
| 		if (0 == lIndex)
 | |
| 		{
 | |
| 			m_strFileName = m_strFileName.Mid(8);
 | |
| 			m_strFileName.Replace('/', '\\');
 | |
| 			m_strFileName.Replace(L"%20", L" ");
 | |
| 		}
 | |
| 
 | |
| 		CString strFileName = StreamUtils::ConvertCStringWToCString(m_strFileName);
 | |
| 		NSAttributes::CorrectXmlString(strFileName);
 | |
| 		
 | |
| 		strOverlay2.Format(_T("<Source StartTime='%lf' EndTime='%lf' FilePath='%s'/></AudioSource>"), m_dClipStartTime, m_dClipEndTime, strFileName);
 | |
| 
 | |
| 		
 | |
| 		strOverlay1 += strOverlay2;
 | |
| 
 | |
| 		return strOverlay1;
 | |
| 	}
 | |
| 
 | |
| 	virtual IElement* CreateDublicate()
 | |
| 	{
 | |
| 		CAudioElement* pAudioElement = new CAudioElement();
 | |
| 		
 | |
| 		SetProperiesToDublicate((IElement*)pAudioElement);
 | |
| 
 | |
| 		pAudioElement->m_strFileName = m_strFileName;
 | |
| 		pAudioElement->m_nAmplify = m_nAmplify;
 | |
| 		pAudioElement->m_bWithVideo = m_bWithVideo;
 | |
| 
 | |
| 		pAudioElement->m_dAudioDuration = m_dAudioDuration;
 | |
| 		pAudioElement->m_bLoop			= m_bLoop;
 | |
| 
 | |
| 		pAudioElement->m_dClipStartTime	= m_dClipStartTime;
 | |
| 		pAudioElement->m_dClipEndTime	= m_dClipEndTime;
 | |
| 
 | |
| 		return (IElement*)pAudioElement;
 | |
| 	}
 | |
| };
 |