/*
* (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
#ifndef OOX_STYLES_FILE_INCLUDE_H_
#define OOX_STYLES_FILE_INCLUDE_H_
#include "../CommonInclude.h"
#include "Borders.h"
#include "CellStyles.h"
#include "Xfs.h"
#include "Colors.h"
#include "Dxf.h"
#include "Fills.h"
#include "Fonts.h"
#include "NumFmts.h"
#include "TableStyles.h"
namespace OOX
{
namespace Spreadsheet
{
class CStyles : public OOX::File, public OOX::Spreadsheet::IFileContainer
{
public:
CStyles()
{
}
CStyles(const CPath& oPath)
{
read( oPath );
}
virtual ~CStyles()
{
}
public:
virtual void read(const CPath& oPath)
{
m_oReadPath = oPath;
IFileContainer::Read( oPath );
XmlUtils::CXmlLiteReader oReader;
if ( !oReader.FromFile( oPath.GetPath() ) )
return;
if ( !oReader.ReadNextNode() )
return;
CWCharWrapper sName = oReader.GetName();
if ( _T("styleSheet") == sName )
{
ReadAttributes( oReader );
if ( !oReader.IsEmptyNode() )
{
int nStylesDepth = oReader.GetDepth();
while ( oReader.ReadNextSiblingNode( nStylesDepth ) )
{
sName = oReader.GetName();
if ( _T("borders") == sName )
m_oBorders = oReader;
else if ( _T("cellStyles") == sName )
m_oCellStyles = oReader;
else if ( _T("cellStyleXfs") == sName )
m_oCellStyleXfs = oReader;
else if ( _T("cellXfs") == sName )
m_oCellXfs = oReader;
else if ( _T("colors") == sName )
m_oColors = oReader;
else if ( _T("dxfs") == sName )
m_oDxfs = oReader;
else if ( _T("fills") == sName )
m_oFills = oReader;
else if ( _T("fonts") == sName )
m_oFonts = oReader;
else if ( _T("numFmts") == sName )
m_oNumFmts = oReader;
else if ( _T("tableStyles") == sName )
m_oTableStyles = oReader;
}
}
}
}
virtual void write(const CPath& oPath, const CPath& oDirectory, CContentTypes& oContent) const
{
CStringWriter sXml;
sXml.WriteStringC(_T(""));
if(m_oNumFmts.IsInit())
m_oNumFmts->toXML(sXml);
if(m_oFonts.IsInit())
m_oFonts->toXML(sXml);
if(m_oFills.IsInit())
m_oFills->toXML(sXml);
if(m_oBorders.IsInit())
m_oBorders->toXML(sXml);
if(m_oCellStyleXfs.IsInit())
m_oCellStyleXfs->toXML(sXml);
if(m_oCellXfs.IsInit())
m_oCellXfs->toXML(sXml);
if(m_oCellStyles.IsInit())
m_oCellStyles->toXML(sXml);
if(m_oColors.IsInit())
m_oColors->toXML(sXml);
if(m_oDxfs.IsInit())
m_oDxfs->toXML(sXml);
if(m_oTableStyles.IsInit())
m_oTableStyles->toXML(sXml);
sXml.WriteStringC(_T(""));
CDirectory::SaveToFile( oPath.GetPath(), sXml.GetCString() );
oContent.Registration( type().OverrideType(), oDirectory, oPath.GetFilename() );
}
void PrepareToWrite()
{
if(false == m_oFills.IsInit())
m_oFills.Init();
if(m_oCellXfs.IsInit())
{
for(int i = 0, length = m_oCellXfs->m_arrItems.GetSize(); i < length; ++i)
{
OOX::Spreadsheet::CXfs* xfs = m_oCellXfs->m_arrItems[i];
if (false == xfs->m_oXfId.IsInit())
{
xfs->m_oXfId.Init();
xfs->m_oXfId->SetValue(0);
}
}
}
if(false == m_oCellStyles.IsInit())
m_oCellStyles.Init();
if(false == m_oCellStyles->m_oCount.IsInit())
{
m_oCellStyles->m_oCount.Init();
m_oCellStyles->m_oCount->SetValue(1);
}
if(0 == m_oCellStyles->m_arrItems.GetSize())
{
CCellStyle* pCellStyle = new CCellStyle();
pCellStyle->m_oName = _T("Normal");
pCellStyle->m_oXfId.Init();
pCellStyle->m_oXfId->SetValue(0);
pCellStyle->m_oBuiltinId.Init();
pCellStyle->m_oBuiltinId->SetValue(0);
m_oCellStyles->m_arrItems.Add(pCellStyle);
}
if(false == m_oCellStyleXfs.IsInit())
m_oCellStyleXfs.Init();
if(false == m_oCellStyleXfs->m_oCount.IsInit())
{
m_oCellStyleXfs->m_oCount.Init();
m_oCellStyleXfs->m_oCount->SetValue(1);
}
if(0 == m_oCellStyleXfs->m_arrItems.GetSize())
{
CXfs* pXfs = new CXfs();
pXfs->m_oNumFmtId.Init();
pXfs->m_oNumFmtId->SetValue(0);
pXfs->m_oFontId.Init();
pXfs->m_oFontId->SetValue(0);
pXfs->m_oFillId.Init();
pXfs->m_oFillId->SetValue(0);
pXfs->m_oBorderId.Init();
pXfs->m_oBorderId->SetValue(0);
m_oCellStyleXfs->m_arrItems.Add(pXfs);
}
if(false == m_oDxfs.IsInit())
m_oDxfs.Init();
if(false == m_oDxfs->m_oCount.IsInit())
{
m_oDxfs->m_oCount.Init();
m_oDxfs->m_oCount->SetValue(0);
}
if(false == m_oTableStyles.IsInit())
{
m_oTableStyles.Init();
m_oTableStyles->m_oCount.Init();
m_oTableStyles->m_oCount->SetValue(0);
}
if(false == m_oTableStyles->m_oDefaultPivotStyle.IsInit())
m_oTableStyles->m_oDefaultTableStyle = _T("TableStyleMedium2");
if(false == m_oTableStyles->m_oDefaultPivotStyle.IsInit())
m_oTableStyles->m_oDefaultPivotStyle = _T("PivotStyleLight16");
}
virtual const OOX::FileType type() const
{
return OOX::Spreadsheet::FileTypes::Styles;
}
virtual const CPath DefaultDirectory() const
{
return type().DefaultDirectory();
}
virtual const CPath DefaultFileName() const
{
return type().DefaultFileName();
}
const CPath& GetReadPath()
{
return m_oReadPath;
}
private:
CPath m_oReadPath;
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
{
}
public:
nullable m_oBorders;
nullable m_oCellStyles;
nullable m_oCellStyleXfs;
nullable m_oCellXfs;
nullable m_oColors;
nullable m_oDxfs;
nullable m_oFills;
nullable m_oFonts;
nullable m_oNumFmts;
nullable m_oTableStyles;
};
}
}
#endif // OOX_STYLES_FILE_INCLUDE_H_