Commit 316d8acd authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

XlsFile2 add palettes

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@64228 954022d7-b5bf-4e40-9824-e11837661b57
parent 6a6bd0e6
...@@ -43,6 +43,8 @@ void Font::writeFields(CFRecord& record) ...@@ -43,6 +43,8 @@ void Font::writeFields(CFRecord& record)
void Font::readFields(CFRecord& record) void Font::readFields(CFRecord& record)
{ {
global_info = record.getGlobalWorkbookInfo();
unsigned short flags; unsigned short flags;
record >> dyHeight >> flags; record >> dyHeight >> flags;
fItalic = GETBIT(flags, 1); fItalic = GETBIT(flags, 1);
...@@ -157,12 +159,12 @@ int Font::serialize_rPr(std::wostream & stream) ...@@ -157,12 +159,12 @@ int Font::serialize_rPr(std::wostream & stream)
} }
else else
{ {
int index = icv; std::map<int, std::wstring>::iterator it = global_info->colors_palette.find(icv);
if (icv < 17) if (it != global_info->colors_palette.end())
{ {
CP_XML_NODE(L"a:schemeClr") CP_XML_NODE(L"a:srgbClr")
{ {
CP_XML_ATTR(L"val", shemeColor[icv]); CP_XML_ATTR(L"val", it->second);
} }
} }
} }
......
...@@ -30,6 +30,8 @@ public: ...@@ -30,6 +30,8 @@ public:
void set_color_ext (FillInfoExt & color_ext); void set_color_ext (FillInfoExt & color_ext);
GlobalWorkbookInfoPtr global_info;
//----------------------------- //-----------------------------
BIFF_WORD dyHeight; // measured in twips (1/20 of of a printer's point) BIFF_WORD dyHeight; // measured in twips (1/20 of of a printer's point)
......
#include "Palette.h" #include "Palette.h"
#include <simple_xml_writer.h>
namespace XLS namespace XLS
{ {
...@@ -13,6 +14,7 @@ Palette::Palette() ...@@ -13,6 +14,7 @@ Palette::Palette()
Palette::Palette(const unsigned short ccv_init) Palette::Palette(const unsigned short ccv_init)
: ccv(ccv_init) : ccv(ccv_init)
{ {
} }
...@@ -34,14 +36,56 @@ void Palette::writeFields(CFRecord& record) ...@@ -34,14 +36,56 @@ void Palette::writeFields(CFRecord& record)
void Palette::readFields(CFRecord& record) void Palette::readFields(CFRecord& record)
{ {
GlobalWorkbookInfoPtr global_info = record.getGlobalWorkbookInfo();
unsigned short ccv; unsigned short ccv;
record >> ccv; record >> ccv;
for(int i = 0; i < ccv; ++i) for(int i = 0; i < ccv; ++i)
{ {
LongRGBPtr rgb(new LongRGB); LongRGBPtr rgb(new LongRGB);
record >> *rgb; record >> *rgb;
rgColor.push_back(rgb); rgColor.push_back(rgb);
global_info->RegisterPaletteColor(i, rgb->argb);
}
}
const std::wstring standart_color[8] = {
L"00000000",
L"00FFFFFF",
L"00FF0000",
L"0000FF00",
L"000000FF",
L"00FFFF00",
L"00FF00FF",
L"0000FFFF"};
int Palette::serialize(std::wostream & stream)
{
CP_XML_WRITER(stream)
{
CP_XML_NODE(L"indexedColors")
{
for(int i = 0; i < 8; ++i)
{
CP_XML_NODE(L"rgbColor")
{
CP_XML_ATTR(L"rgb", standart_color[i]);
}
}
for(int i = 0; i < rgColor.size(); ++i)
{
LongRGB * rgb = dynamic_cast<LongRGB *>(rgColor[i].get());
CP_XML_NODE(L"rgbColor")
{
CP_XML_ATTR(L"rgb", rgb->argb);
}
}
}
} }
return 0;
} }
} // namespace XLS } // namespace XLS
......
...@@ -21,15 +21,13 @@ public: ...@@ -21,15 +21,13 @@ public:
void writeFields(CFRecord& record); void writeFields(CFRecord& record);
void readFields(CFRecord& record); void readFields(CFRecord& record);
int serialize(std::wostream & stream);
static const ElementType type = typePalette; static const ElementType type = typePalette;
//----------------------------- //-----------------------------
BiffStructurePtrVector rgColor; BiffStructurePtrVector rgColor;
unsigned short ccv; unsigned short ccv;
public:
//BO_ATTRIB_MARKUP_BEGIN
//BO_ATTRIB_MARKUP_VECTOR_COMPLEX(rgColor, LongRGB)
//BO_ATTRIB_MARKUP_END
}; };
......
#include "LongRGB.h" #include "LongRGB.h"
#include <Binary/CFRecord.h> #include <Binary/CFRecord.h>
//#include <Exception/AttributeDataWrong.h>
namespace XLS namespace XLS
{ {
...@@ -36,29 +35,6 @@ BiffStructurePtr LongRGB::clone() ...@@ -36,29 +35,6 @@ BiffStructurePtr LongRGB::clone()
return BiffStructurePtr(new LongRGB(*this)); return BiffStructurePtr(new LongRGB(*this));
} }
//
//void LongRGBA::setXMLAttributes(MSXML2::IXMLDOMElementPtr xml_tag)
//{
// xml_tag->setAttribute(L"red", red);
// xml_tag->setAttribute(L"green", green);
// xml_tag->setAttribute(L"blue", blue);
// if(is_alpha)
// {
// xml_tag->setAttribute(L"alpha", alpha);
// }
// xml_tag->setAttribute(L"argb", argb);
//}
//
//void LongRGBA::getXMLAttributes(MSXML2::IXMLDOMElementPtr xml_tag)
//{
// argb = getStructAttribute(xml_tag, L"argb");
// if(!STR::fromARGB(static_cast<wchar_t*>(argb), red, green, blue, alpha))
// {
// throw;// EXCEPT::LE::AttributeDataWrong(L"argb", static_cast<char*>(getClassName()), argb);
// }
//}
void LongRGBA::store(CFRecord& record) void LongRGBA::store(CFRecord& record)
{ {
record << red << green << blue; record << red << green << blue;
......
...@@ -30,7 +30,7 @@ void Rgce::load(CFRecord& record, const size_t cce_val) ...@@ -30,7 +30,7 @@ void Rgce::load(CFRecord& record, const size_t cce_val)
while(record.getRdPtr() < where_to_stop) while(record.getRdPtr() < where_to_stop)
{ {
static PtgPtr & ptg = PtgFactory::loadPtg(record, cell_base_ref); PtgPtr & ptg = PtgFactory::loadPtg(record, cell_base_ref);
if (ptg.get() == NULL) if (ptg.get() == NULL)
break; break;
......
...@@ -150,6 +150,14 @@ int CELL_GROUP::serialize(std::wostream & stream) ...@@ -150,6 +150,14 @@ int CELL_GROUP::serialize(std::wostream & stream)
{ {
CP_XML_ATTR(L"collapsed", row->fCollapsed); CP_XML_ATTR(L"collapsed", row->fCollapsed);
} }
if ((row->fExAsc.value()) && (row->fExAsc))
{
CP_XML_ATTR(L"thickTop", true);
}
if ((row->fExDes.value()) && (row->fExDes))
{
CP_XML_ATTR(L"thickBot", true);
}
} }
if (row->rw + 1 <= current_row_number) if (row->rw + 1 <= current_row_number)
{ {
......
...@@ -140,6 +140,13 @@ int FORMATTING::serialize2(std::wostream & stream) ...@@ -140,6 +140,13 @@ int FORMATTING::serialize2(std::wostream & stream)
{ {
m_Styles->serialize(stream); m_Styles->serialize(stream);
} }
if (m_Palette)
{
CP_XML_NODE(L"colors")
{
m_Palette->serialize(CP_XML_STREAM());
}
}
} }
return 0; return 0;
......
...@@ -56,7 +56,12 @@ const size_t GlobalWorkbookInfo::RegisterFillId(const FillInfo& fill) ...@@ -56,7 +56,12 @@ const size_t GlobalWorkbookInfo::RegisterFillId(const FillInfo& fill)
void GlobalWorkbookInfo::RegisterFontColorId (int id, const FillInfoExt & font_color) void GlobalWorkbookInfo::RegisterFontColorId (int id, const FillInfoExt & font_color)
{ {
fonts_color_ext.insert(std::pair<int, FillInfoExt>(id,font_color)); fonts_color_ext.insert(std::pair<int, FillInfoExt>(id, font_color));
}
void GlobalWorkbookInfo::RegisterPaletteColor(int id, const std::wstring & argb)
{
colors_palette.insert(std::pair<int, std::wstring>(id, argb));
} }
const unsigned int GlobalWorkbookInfo::GenerateAXESId() const unsigned int GlobalWorkbookInfo::GenerateAXESId()
......
...@@ -21,8 +21,9 @@ public: ...@@ -21,8 +21,9 @@ public:
const size_t RegisterBorderId (const BorderInfo& border); const size_t RegisterBorderId (const BorderInfo& border);
const size_t RegisterFillId (const FillInfo& fill); const size_t RegisterFillId (const FillInfo& fill);
void RegisterFontColorId (int id, const FillInfoExt & font_color); void RegisterFontColorId (int id, const FillInfoExt & font_color);
void RegisterPaletteColor(int id, const std::wstring & argb);
const unsigned int GenerateAXESId(); const unsigned int GenerateAXESId();
unsigned short CodePage; unsigned short CodePage;
...@@ -35,6 +36,7 @@ public: ...@@ -35,6 +36,7 @@ public:
boost::unordered_map<BorderInfo, int> border_x_ids; boost::unordered_map<BorderInfo, int> border_x_ids;
boost::unordered_map<FillInfo, int> fill_x_ids; boost::unordered_map<FillInfo, int> fill_x_ids;
std::map<int, FillInfoExt> fonts_color_ext; std::map<int, FillInfoExt> fonts_color_ext;
std::map<int, std::wstring> colors_palette;
std::vector<BaseObjectPtr> *fonts; std::vector<BaseObjectPtr> *fonts;
......
...@@ -124,7 +124,11 @@ const bool WorksheetSubstream::loadContent(BinProcessor& proc) ...@@ -124,7 +124,11 @@ const bool WorksheetSubstream::loadContent(BinProcessor& proc)
} }
proc.optional<SCENARIOS>(); proc.optional<SCENARIOS>();
proc.optional<SORTANDFILTER>(); // Let it be optional if (proc.optional<SORTANDFILTER>())// Let it be optional
{
m_SORTANDFILTER = elements_.back();
elements_.pop_back();
}
if (proc.mandatory<Dimensions>()) if (proc.mandatory<Dimensions>())
{ {
...@@ -161,7 +165,14 @@ const bool WorksheetSubstream::loadContent(BinProcessor& proc) ...@@ -161,7 +165,14 @@ const bool WorksheetSubstream::loadContent(BinProcessor& proc)
proc.repeated<Note>(0, 0); proc.repeated<Note>(0, 0);
proc.repeated<PIVOTVIEW>(0, 0); proc.repeated<PIVOTVIEW>(0, 0);
proc.optional<DCON>(); proc.optional<DCON>();
proc.repeated<WINDOW>(1, 0);
count = proc.repeated<WINDOW>(1, 0);
while(count > 0)
{
m_WINDOW.insert(m_WINDOW.begin(), elements_.back());
elements_.pop_back();
count--;
}
proc.optional<SheetExt>(); //BulletinSearch.xls ??? proc.optional<SheetExt>(); //BulletinSearch.xls ???
......
...@@ -25,6 +25,7 @@ public: ...@@ -25,6 +25,7 @@ public:
size_t ws_index_; size_t ws_index_;
std::vector<BaseObjectPtr> m_MergeCells; std::vector<BaseObjectPtr> m_MergeCells;
std::vector<BaseObjectPtr> m_WINDOW;
BaseObjectPtr m_GLOBALS; BaseObjectPtr m_GLOBALS;
BaseObjectPtr m_PAGESETUP; BaseObjectPtr m_PAGESETUP;
...@@ -33,6 +34,7 @@ public: ...@@ -33,6 +34,7 @@ public:
BaseObjectPtr m_CELLTABLE; BaseObjectPtr m_CELLTABLE;
BaseObjectPtr m_SHFMLA_SET; BaseObjectPtr m_SHFMLA_SET;
BaseObjectPtr m_Dimensions; BaseObjectPtr m_Dimensions;
BaseObjectPtr m_SORTANDFILTER;
BaseObjectPtr m_OBJECTS; BaseObjectPtr m_OBJECTS;
std::vector<BaseObjectPtr> m_HLINK; std::vector<BaseObjectPtr> m_HLINK;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment