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)
void Font::readFields(CFRecord& record)
{
global_info = record.getGlobalWorkbookInfo();
unsigned short flags;
record >> dyHeight >> flags;
fItalic = GETBIT(flags, 1);
......@@ -157,12 +159,12 @@ int Font::serialize_rPr(std::wostream & stream)
}
else
{
int index = icv;
if (icv < 17)
{
CP_XML_NODE(L"a:schemeClr")
{
CP_XML_ATTR(L"val", shemeColor[icv]);
std::map<int, std::wstring>::iterator it = global_info->colors_palette.find(icv);
if (it != global_info->colors_palette.end())
{
CP_XML_NODE(L"a:srgbClr")
{
CP_XML_ATTR(L"val", it->second);
}
}
}
......
......@@ -30,6 +30,8 @@ public:
void set_color_ext (FillInfoExt & color_ext);
GlobalWorkbookInfoPtr global_info;
//-----------------------------
BIFF_WORD dyHeight; // measured in twips (1/20 of of a printer's point)
......
#include "Palette.h"
#include <simple_xml_writer.h>
namespace XLS
{
......@@ -13,6 +14,7 @@ Palette::Palette()
Palette::Palette(const unsigned short ccv_init)
: ccv(ccv_init)
{
}
......@@ -34,14 +36,56 @@ void Palette::writeFields(CFRecord& record)
void Palette::readFields(CFRecord& record)
{
GlobalWorkbookInfoPtr global_info = record.getGlobalWorkbookInfo();
unsigned short ccv;
record >> ccv;
for(int i = 0; i < ccv; ++i)
{
LongRGBPtr rgb(new LongRGB);
record >> *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
......
......@@ -21,15 +21,13 @@ public:
void writeFields(CFRecord& record);
void readFields(CFRecord& record);
int serialize(std::wostream & stream);
static const ElementType type = typePalette;
//-----------------------------
BiffStructurePtrVector rgColor;
unsigned short ccv;
public:
//BO_ATTRIB_MARKUP_BEGIN
//BO_ATTRIB_MARKUP_VECTOR_COMPLEX(rgColor, LongRGB)
//BO_ATTRIB_MARKUP_END
};
......
#include "LongRGB.h"
#include <Binary/CFRecord.h>
//#include <Exception/AttributeDataWrong.h>
namespace XLS
{
......@@ -36,29 +35,6 @@ BiffStructurePtr LongRGB::clone()
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)
{
record << red << green << blue;
......
......@@ -30,7 +30,7 @@ void Rgce::load(CFRecord& record, const size_t cce_val)
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)
break;
......
......@@ -150,6 +150,14 @@ int CELL_GROUP::serialize(std::wostream & stream)
{
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)
{
......
......@@ -140,6 +140,13 @@ int FORMATTING::serialize2(std::wostream & stream)
{
m_Styles->serialize(stream);
}
if (m_Palette)
{
CP_XML_NODE(L"colors")
{
m_Palette->serialize(CP_XML_STREAM());
}
}
}
return 0;
......
......@@ -56,7 +56,12 @@ const size_t GlobalWorkbookInfo::RegisterFillId(const FillInfo& fill)
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()
......
......@@ -19,10 +19,11 @@ class GlobalWorkbookInfo
public:
GlobalWorkbookInfo(const unsigned short code_page);
const size_t RegisterBorderId (const BorderInfo& border);
const size_t RegisterFillId (const FillInfo& fill);
void RegisterFontColorId (int id, const FillInfoExt & font_color);
const size_t RegisterBorderId (const BorderInfo& border);
const size_t RegisterFillId (const FillInfo& fill);
void RegisterFontColorId (int id, const FillInfoExt & font_color);
void RegisterPaletteColor(int id, const std::wstring & argb);
const unsigned int GenerateAXESId();
unsigned short CodePage;
......@@ -35,6 +36,7 @@ public:
boost::unordered_map<BorderInfo, int> border_x_ids;
boost::unordered_map<FillInfo, int> fill_x_ids;
std::map<int, FillInfoExt> fonts_color_ext;
std::map<int, std::wstring> colors_palette;
std::vector<BaseObjectPtr> *fonts;
......
......@@ -124,7 +124,11 @@ const bool WorksheetSubstream::loadContent(BinProcessor& proc)
}
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>())
{
......@@ -161,7 +165,14 @@ const bool WorksheetSubstream::loadContent(BinProcessor& proc)
proc.repeated<Note>(0, 0);
proc.repeated<PIVOTVIEW>(0, 0);
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 ???
......
......@@ -25,6 +25,7 @@ public:
size_t ws_index_;
std::vector<BaseObjectPtr> m_MergeCells;
std::vector<BaseObjectPtr> m_WINDOW;
BaseObjectPtr m_GLOBALS;
BaseObjectPtr m_PAGESETUP;
......@@ -33,6 +34,7 @@ public:
BaseObjectPtr m_CELLTABLE;
BaseObjectPtr m_SHFMLA_SET;
BaseObjectPtr m_Dimensions;
BaseObjectPtr m_SORTANDFILTER;
BaseObjectPtr m_OBJECTS;
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