init repo
This commit is contained in:
@@ -0,0 +1,537 @@
|
||||
/*
|
||||
* (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 "Formula.h"
|
||||
#include "./../BaseShape.h"
|
||||
|
||||
#include "../../../../XmlUtils.h"
|
||||
|
||||
using namespace NSOfficeDrawing;
|
||||
|
||||
namespace OOXMLShapes
|
||||
{
|
||||
enum ShapeType : unsigned short
|
||||
{
|
||||
sptMin = 0,
|
||||
sptNotPrimitive = sptMin,
|
||||
sptCAccentBorderCallout1,
|
||||
sptCAccentBorderCallout2,
|
||||
sptCAccentBorderCallout3,
|
||||
sptCAccentCallout1,
|
||||
sptCAccentCallout2,
|
||||
sptCAccentCallout3,
|
||||
sptCActionButtonBackPrevious,
|
||||
sptCActionButtonBeginning,
|
||||
sptCActionButtonBlank,
|
||||
sptCActionButtonDocument,
|
||||
sptCActionButtonEnd,
|
||||
sptCActionButtonForwardNext,
|
||||
sptCActionButtonHelp,
|
||||
sptCActionButtonHome,
|
||||
sptCActionButtonInformation,
|
||||
sptCActionButtonMovie,
|
||||
sptCActionButtonReturn,
|
||||
sptCActionButtonSound,
|
||||
sptCArc,
|
||||
sptCBentArrow,
|
||||
sptCBentConnector2,
|
||||
sptCBentConnector3,
|
||||
sptCBentConnector4,
|
||||
sptCBentConnector5,
|
||||
sptCBentUpArrow,
|
||||
sptCBevel,
|
||||
sptCBlockArc,
|
||||
sptCBorderCallout1,
|
||||
sptCBorderCallout2,
|
||||
sptCBorderCallout3,
|
||||
sptCBracePair,
|
||||
sptCBracketPair,
|
||||
sptCCallout1,
|
||||
sptCCallout2,
|
||||
sptCCallout3,
|
||||
sptCCan,
|
||||
sptCChartPlus,
|
||||
sptCChartStar,
|
||||
sptCChartX,
|
||||
sptCChevron,
|
||||
sptCChord,
|
||||
sptCCircularArrow,
|
||||
sptCCloud,
|
||||
sptCCloudCallout,
|
||||
sptCCorner,
|
||||
sptCCornerTabs,
|
||||
sptCCube,
|
||||
sptCCurvedConnector2,
|
||||
sptCCurvedConnector3,
|
||||
sptCCurvedConnector4,
|
||||
sptCCurvedConnector5,
|
||||
sptCCurvedDownArrow,
|
||||
sptCCurvedLeftArrow,
|
||||
sptCCurvedRightArrow,
|
||||
sptCCurvedUpArrow,
|
||||
sptCDecagon,
|
||||
sptCDiagStripe,
|
||||
sptCDiamond,
|
||||
sptCDodecagon,
|
||||
sptCDonut,
|
||||
sptCDoubleWave,
|
||||
sptCDownArrow,
|
||||
sptCDownArrowCallout,
|
||||
sptCEllipse,
|
||||
sptCEllipseRibbon,
|
||||
sptCEllipseRibbon2,
|
||||
sptCFlowChartAlternateProcess,
|
||||
sptCFlowChartCollate,
|
||||
sptCFlowChartConnector,
|
||||
sptCFlowChartDecision,
|
||||
sptCFlowChartDelay,
|
||||
sptCFlowChartDisplay,
|
||||
sptCFlowChartDocument,
|
||||
sptCFlowChartExtract,
|
||||
sptCFlowChartInputOutput,
|
||||
sptCFlowChartInternalStorage,
|
||||
sptCFlowChartMagneticDisk,
|
||||
sptCFlowChartMagneticDrum,
|
||||
sptCFlowChartMagneticTape,
|
||||
sptCFlowChartManualInput,
|
||||
sptCFlowChartManualOperation,
|
||||
sptCFlowChartMerge,
|
||||
sptCFlowChartMultidocument,
|
||||
sptCFlowChartOfflineStorage,
|
||||
sptCFlowChartOffpageConnector,
|
||||
sptCFlowChartOnlineStorage,
|
||||
sptCFlowChartOr,
|
||||
sptCFlowChartPredefinedProcess,
|
||||
sptCFlowChartPreparation,
|
||||
sptCFlowChartProcess,
|
||||
sptCFlowChartPunchedCard,
|
||||
sptCFlowChartPunchedTape,
|
||||
sptCFlowChartSort,
|
||||
sptCFlowChartSummingJunction,
|
||||
sptCFlowChartTerminator,
|
||||
sptCFoldedCorner,
|
||||
sptCFrame,
|
||||
sptCFunnel,
|
||||
sptCGear6,
|
||||
sptCGear9,
|
||||
sptCHalfFrame,
|
||||
sptCHeart,
|
||||
sptCHeptagon,
|
||||
sptCHexagon,
|
||||
sptCHomePlate,
|
||||
sptCHorizontalScroll,
|
||||
sptCIrregularSeal1,
|
||||
sptCIrregularSeal2,
|
||||
sptCLeftArrow,
|
||||
sptCLeftArrowCallout,
|
||||
sptCLeftBrace,
|
||||
sptCLeftBracket,
|
||||
sptCLeftCircularArrow,
|
||||
sptCLeftRightArrow,
|
||||
sptCLeftRightArrowCallout,
|
||||
sptCLeftRightCircularArrow,
|
||||
sptCLeftRightRibbon,
|
||||
sptCLeftRightUpArrow,
|
||||
sptCLeftUpArrow,
|
||||
sptCLightningBolt,
|
||||
sptCLine,
|
||||
sptCLineInv,
|
||||
sptCMathDivide,
|
||||
sptCMathEqual,
|
||||
sptCMathMinus,
|
||||
sptCMathMultiply,
|
||||
sptCMathNotEqual,
|
||||
sptCMathPlus,
|
||||
sptCMoon,
|
||||
sptCNonIsoscelesTrapezoid,
|
||||
sptCNoSmoking,
|
||||
sptCNotchedRightArrow,
|
||||
sptCOctagon,
|
||||
sptCParallelogram,
|
||||
sptCPentagon,
|
||||
sptCPie,
|
||||
sptCPieWedge,
|
||||
sptCPlaque,
|
||||
sptCPlaqueTabs,
|
||||
sptCPlus,
|
||||
sptCQuadArrow,
|
||||
sptCQuadArrowCallout,
|
||||
sptCRect,
|
||||
sptCRibbon,
|
||||
sptCRibbon2,
|
||||
sptCRightArrow,
|
||||
sptCRightArrowCallout,
|
||||
sptCRightBrace,
|
||||
sptCRightBracket,
|
||||
sptCRound1Rect,
|
||||
sptCRound2DiagRect,
|
||||
sptCRound2SameRect,
|
||||
sptCRoundRect,
|
||||
sptCRtTriangle,
|
||||
sptCSmileyFace,
|
||||
sptCSnip1Rect,
|
||||
sptCSnip2DiagRect,
|
||||
sptCSnip2SameRect,
|
||||
sptCSnipRoundRect,
|
||||
sptCSquareTabs,
|
||||
sptCStar10,
|
||||
sptCStar12,
|
||||
sptCStar16,
|
||||
sptCStar24,
|
||||
sptCStar32,
|
||||
sptCStar4,
|
||||
sptCStar5,
|
||||
sptCStar6,
|
||||
sptCStar7,
|
||||
sptCStar8,
|
||||
sptCStraightConnector1,
|
||||
sptCStripedRightArrow,
|
||||
sptCSun,
|
||||
sptCSwooshArrow,
|
||||
sptCTeardrop,
|
||||
sptCTextArchDown,
|
||||
sptCTextArchDownPour,
|
||||
sptCTextArchUp,
|
||||
sptCTextArchUpPour,
|
||||
sptCTextButton,
|
||||
sptCTextButtonPour,
|
||||
sptCTextCanDown,
|
||||
sptCTextCanUp,
|
||||
sptCTextCascadeDown,
|
||||
sptCTextCascadeUp,
|
||||
sptCTextChevron,
|
||||
sptCTextChevronInverted,
|
||||
sptCTextCircle,
|
||||
sptCTextCirclePour,
|
||||
sptCTextCurveDown,
|
||||
sptCTextCurveUp,
|
||||
sptCTextDeflate,
|
||||
sptCTextDeflateBottom,
|
||||
sptCTextDeflateInflate,
|
||||
sptCTextDeflateInflateDeflate,
|
||||
sptCTextDeflateTop,
|
||||
sptCTextDoubleWave1,
|
||||
sptCTextFadeDown,
|
||||
sptCTextFadeLeft,
|
||||
sptCTextFadeRight,
|
||||
sptCTextFadeUp,
|
||||
sptCTextInflate,
|
||||
sptCTextInflateBottom,
|
||||
sptCTextInflateTop,
|
||||
sptCTextPlain,
|
||||
sptCTextRingInside,
|
||||
sptCTextRingOutside,
|
||||
sptCTextSlantDown,
|
||||
sptCTextSlantUp,
|
||||
sptCTextStop,
|
||||
sptCTextTriangle,
|
||||
sptCTextTriangleInverted,
|
||||
sptCTextWave1,
|
||||
sptCTextWave2,
|
||||
sptCTextWave4,
|
||||
sptCTrapezoid,
|
||||
sptCTriangle,
|
||||
sptCUpArrow,
|
||||
sptCUpArrowCallout,
|
||||
sptCUpDownArrow,
|
||||
sptCUpDownArrowCallout,
|
||||
sptCUturnArrow,
|
||||
sptCVerticalScroll,
|
||||
sptCWave,
|
||||
sptCWedgeEllipseCallout,
|
||||
sptCWedgeRectCallout,
|
||||
sptCWedgeRoundRectCallout,
|
||||
|
||||
sptMax,
|
||||
sptNil = 0x0FFF,
|
||||
sptCustom = 0x1000
|
||||
};
|
||||
}
|
||||
|
||||
class CPPTXShape : public CBaseShape
|
||||
{
|
||||
public:
|
||||
OOXMLShapes::ShapeType m_eType;
|
||||
|
||||
NSGuidesOOXML::CFormulaManager FManager;
|
||||
public:
|
||||
CPPTXShape() : CBaseShape(), FManager(m_arAdjustments, Guides)
|
||||
{
|
||||
m_eType = OOXMLShapes::sptMin;
|
||||
}
|
||||
|
||||
~CPPTXShape()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
virtual bool LoadFromXML(const CString& xml)
|
||||
{
|
||||
XmlUtils::CXmlNode oNodePict;
|
||||
if (oNodePict.FromXmlString(xml))
|
||||
{
|
||||
return LoadFromXML(oNodePict);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool LoadFromXML(XmlUtils::CXmlNode& root)
|
||||
{
|
||||
|
||||
|
||||
XmlUtils::CXmlNode avLst;
|
||||
bool res = true;
|
||||
if(root.GetNode(_T("avLst"), avLst))
|
||||
res &= LoadAdjustValuesList(avLst.GetXml());
|
||||
|
||||
XmlUtils::CXmlNode gdLst;
|
||||
if(root.GetNode(_T("gdLst"), gdLst))
|
||||
res &= LoadGuidesList(gdLst.GetXml());
|
||||
|
||||
XmlUtils::CXmlNode ahLst;
|
||||
if(root.GetNode(_T("ahLst"), ahLst))
|
||||
res &= LoadAdjustHandlesList(ahLst.GetXml());
|
||||
|
||||
XmlUtils::CXmlNode cxnLst;
|
||||
if(root.GetNode(_T("cxnLst"), cxnLst))
|
||||
res &= LoadConnectorsList(cxnLst.GetXml());
|
||||
|
||||
XmlUtils::CXmlNode textRect;
|
||||
if(root.GetNode(_T("rect"), textRect))
|
||||
{
|
||||
m_strRect = textRect.GetXml();
|
||||
res &= LoadTextRect(m_strRect);
|
||||
}
|
||||
|
||||
XmlUtils::CXmlNode pathLst;
|
||||
if(root.GetNode(_T("pathLst"), pathLst))
|
||||
{
|
||||
m_strPath = pathLst.GetXml();
|
||||
res &= LoadPathList(m_strPath);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
virtual bool LoadAdjustValuesList(const CString& xml)
|
||||
{
|
||||
XmlUtils::CXmlNode avLst;
|
||||
if(avLst.FromXmlString(xml))
|
||||
{
|
||||
XmlUtils::CXmlNodes list;
|
||||
if(avLst.GetNodes(_T("gd"), list))
|
||||
{
|
||||
for(long i = 0; i < list.GetCount(); i++)
|
||||
{
|
||||
XmlUtils::CXmlNode gd;
|
||||
list.GetAt(i, gd);
|
||||
FManager.AddAdjustment(gd.GetAttribute(_T("name")), gd.GetAttribute(_T("fmla")));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool LoadGuidesList(const CString& xml)
|
||||
{
|
||||
XmlUtils::CXmlNode gdLst;
|
||||
if(gdLst.FromXmlString(xml))
|
||||
{
|
||||
XmlUtils::CXmlNodes list;
|
||||
if(gdLst.GetNodes(_T("gd"), list))
|
||||
{
|
||||
for(long i = 0; i < list.GetCount(); i++)
|
||||
{
|
||||
XmlUtils::CXmlNode gd;
|
||||
list.GetAt(i, gd);
|
||||
FManager.AddGuide(gd.GetAttribute(_T("name")), gd.GetAttribute(_T("fmla")));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool LoadAdjustHandlesList(const CString& xml)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool LoadConnectorsList(const CString& xml)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool LoadTextRect(const CString& xml)
|
||||
{
|
||||
XmlUtils::CXmlNode rect;
|
||||
if(rect.FromXmlString(xml))
|
||||
{
|
||||
RECT TextRect;
|
||||
TextRect.top = (long)FManager.GetValue(rect.GetAttribute(_T("t")));
|
||||
TextRect.left = (long)FManager.GetValue(rect.GetAttribute(_T("l")));
|
||||
TextRect.right = (long)FManager.GetValue(rect.GetAttribute(_T("r")));
|
||||
TextRect.bottom = (long)FManager.GetValue(rect.GetAttribute(_T("b")));
|
||||
if(m_arTextRects.GetSize() > 0)
|
||||
m_arTextRects[0] = TextRect;
|
||||
else m_arTextRects.Add(TextRect);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool LoadPathList(const CString& xml)
|
||||
{
|
||||
XmlUtils::CXmlNode pathLst;
|
||||
if(pathLst.FromXmlString(xml))
|
||||
{
|
||||
XmlUtils::CXmlNodes list;
|
||||
if(pathLst.GetNodes(_T("path"), list))
|
||||
{
|
||||
m_oPath.FromXML(list, FManager);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual bool SetAdjustment(long index, long value)
|
||||
{
|
||||
FManager.Clear();
|
||||
return (TRUE == m_arAdjustments.SetAtIndex(index, value));
|
||||
}
|
||||
|
||||
virtual CString ToXML(CGeomShapeInfo& GeomInfo, CMetricInfo& MetricInfo, double StartTime, double EndTime, CBrush_& Brush, CPen_& Pen)
|
||||
{
|
||||
FManager.SetWidthHeight((long)GeomInfo.m_dWidth, (long)GeomInfo.m_dHeight);
|
||||
ReCalculate();
|
||||
|
||||
return m_oPath.ToXml(GeomInfo, StartTime, EndTime, Pen, Brush, MetricInfo, NSBaseShape::pptx);
|
||||
}
|
||||
|
||||
virtual void ReCalculate()
|
||||
{
|
||||
FManager.ReCalculateGuides();
|
||||
LoadTextRect(m_strRect);
|
||||
LoadPathList(m_strPath);
|
||||
}
|
||||
|
||||
static CPPTXShape* CreateByType(OOXMLShapes::ShapeType type);
|
||||
virtual const ClassType GetClassType()const
|
||||
{
|
||||
return NSBaseShape::pptx;
|
||||
}
|
||||
|
||||
virtual bool SetProperties(CBaseShape* Shape)
|
||||
{
|
||||
if(Shape == NULL)
|
||||
return false;
|
||||
|
||||
if(Shape->GetClassType() != NSBaseShape::pptx)
|
||||
return false;
|
||||
|
||||
FManager = ((CPPTXShape*)Shape)->FManager;
|
||||
return CBaseShape::SetProperties(Shape);
|
||||
}
|
||||
|
||||
virtual bool SetToDublicate(CBaseShape* Shape)
|
||||
{
|
||||
if(Shape == NULL)
|
||||
return false;
|
||||
|
||||
if(Shape->GetClassType() != NSBaseShape::pptx)
|
||||
return false;
|
||||
|
||||
((CPPTXShape*)Shape)->FManager = FManager;
|
||||
return CBaseShape::SetToDublicate(Shape);
|
||||
}
|
||||
|
||||
bool SetShapeType(OOXMLShapes::ShapeType type)
|
||||
{
|
||||
CPPTXShape* l_pShape = CreateByType(type);
|
||||
if(l_pShape != NULL)
|
||||
{
|
||||
m_eType = type;
|
||||
|
||||
SetProperties(l_pShape);
|
||||
delete l_pShape;
|
||||
return true;
|
||||
}
|
||||
|
||||
m_eType = OOXMLShapes::sptCustom;
|
||||
return false;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user