Commit 52747d83 authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

XlsFile2

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@64366 954022d7-b5bf-4e40-9824-e11837661b57
parent c754742e
...@@ -50,26 +50,26 @@ void TxO::readFields(CFRecord& record) ...@@ -50,26 +50,26 @@ void TxO::readFields(CFRecord& record)
std::list<CFRecordPtr>& recs = continue_records[rt_Continue]; std::list<CFRecordPtr>& recs = continue_records[rt_Continue];
int sz = cchText;
if ( cbRuns ) if ( cbRuns )
{ {
if (record.getRdPtr() >= record.getDataSize()) while (record.getRdPtr() + cchText > record.getDataSize() && !recs.empty())
{ {
int sz = recs.size()-1; record.appendRawData(recs.front());
for(int i = 0; i < sz; i++) recs.pop_front();
{
record.appendRawData(recs.front());
recs.pop_front();
}
} }
commentText.setSize(cchText); commentText.setSize(cchText);
record >> commentText; record >> commentText;
TxOruns.set_records(&recs);
TxOruns.m_runCount = cbRuns / 8 - 1; TxOruns.m_runCount = cbRuns / 8 - 1;
TxOruns.load(record); TxOruns.load(record);
} }
while( !recs.empty() ) while( !recs.empty() )
{ {
sp_enabled = true;
mso_drawing_->storeRecordAndDecideProceeding(recs.front()); mso_drawing_->storeRecordAndDecideProceeding(recs.front());
recs.pop_front(); recs.pop_front();
} }
......
...@@ -19,7 +19,8 @@ class TxO: public BiffRecordContinued ...@@ -19,7 +19,8 @@ class TxO: public BiffRecordContinued
public: public:
TxO(MsoDrawingPtr mso_drawing) : mso_drawing_(mso_drawing), fmla(false) TxO(MsoDrawingPtr mso_drawing) : mso_drawing_(mso_drawing), fmla(false)
{ {
cbRuns = 0; cbRuns = 0;
sp_enabled = false;
} }
~TxO(); ~TxO();
...@@ -49,6 +50,8 @@ public: ...@@ -49,6 +50,8 @@ public:
TxORuns TxOruns; TxORuns TxOruns;
XLUnicodeStringNoCch commentText; XLUnicodeStringNoCch commentText;
bool sp_enabled;
MsoDrawingPtr mso_drawing_; MsoDrawingPtr mso_drawing_;
}; };
......
...@@ -87,17 +87,17 @@ void OfficeArtSpContainer::loadFields(XLS::CFRecord& record) ...@@ -87,17 +87,17 @@ void OfficeArtSpContainer::loadFields(XLS::CFRecord& record)
{ {
OfficeArtContainer::loadFields(record); OfficeArtContainer::loadFields(record);
//for (int i = 0 ; i < child_records.size(); i++) for (int i = 0 ; i < child_records.size(); i++)
//{ {
// switch(child_records[i]->rh_own.recType) switch(child_records[i]->rh_own.recType)
// { {
// case ODRAW::OfficeArtRecord::SpgrContainerFileBlock: case ODRAW::OfficeArtRecord::FSP:
// { {
// m_OfficeArtSpgrContainerFileBlock.push_back(child_records[i]); m_OfficeArtFSP = child_records[i];
// child_records.erase(child_records.begin() + i,child_records.begin() + i + 1); child_records.erase(child_records.begin() + i,child_records.begin() + i + 1); i--;
// }break; }break;
// } }
//} }
} }
......
...@@ -52,6 +52,8 @@ public: ...@@ -52,6 +52,8 @@ public:
XLS::BiffStructurePtr clone() { return XLS::BiffStructurePtr(new OfficeArtSpContainer(*this)); } XLS::BiffStructurePtr clone() { return XLS::BiffStructurePtr(new OfficeArtSpContainer(*this)); }
void loadFields(XLS::CFRecord& record); void loadFields(XLS::CFRecord& record);
OfficeArtRecordPtr m_OfficeArtFSP;
}; };
class OfficeArtClientData : public OfficeArtRecord class OfficeArtClientData : public OfficeArtRecord
......
...@@ -14,10 +14,12 @@ BiffStructurePtr TxORuns::clone() ...@@ -14,10 +14,12 @@ BiffStructurePtr TxORuns::clone()
TxORuns::TxORuns() TxORuns::TxORuns()
{ {
m_runCount = 0; m_runCount = 0;
recs = NULL;
} }
TxORuns::~TxORuns() TxORuns::~TxORuns()
{ {
recs = NULL;
} }
...@@ -29,10 +31,28 @@ void TxORuns::load(CFRecord& record) ...@@ -29,10 +31,28 @@ void TxORuns::load(CFRecord& record)
{ {
for (int i = 0; i < m_runCount; i++) for (int i = 0; i < m_runCount; i++)
{ {
while (record.getRdPtr() + 8 > record.getDataSize())
{
if ((recs) && (!recs->empty()))
{
record.appendRawData(recs->front());
recs->pop_front();
}
else return;
}
RunPtr run(new Run); RunPtr run(new Run);
run->load(record); run->load(record);
rgTxoRuns.push_back(run); rgTxoRuns.push_back(run);
} }
while (record.getRdPtr() + 8 > record.getDataSize())
{
if ((recs) && (!recs->empty()))
{
record.appendRawData(recs->front());
recs->pop_front();
}
else return;
}
lastRun.load(record); lastRun.load(record);
} }
......
...@@ -25,6 +25,13 @@ public: ...@@ -25,6 +25,13 @@ public:
int m_runCount; int m_runCount;
std::vector<RunPtr> rgTxoRuns; std::vector<RunPtr> rgTxoRuns;
TxOLastRun lastRun; TxOLastRun lastRun;
void set_records(std::list<CFRecordPtr>* recs_)
{
recs = recs_;
}
std::list<CFRecordPtr>* recs;
}; };
typedef boost::shared_ptr<TxORuns> TxORunsPtr; typedef boost::shared_ptr<TxORuns> TxORunsPtr;
......
...@@ -14,6 +14,7 @@ class CHART: public CompositeObject ...@@ -14,6 +14,7 @@ class CHART: public CompositeObject
public: public:
CHART(MsoDrawingPtr mso_drawing) : mso_drawing_(mso_drawing) CHART(MsoDrawingPtr mso_drawing) : mso_drawing_(mso_drawing)
{ {
sp_enabled = false;
} }
~CHART(); ~CHART();
...@@ -23,7 +24,10 @@ public: ...@@ -23,7 +24,10 @@ public:
static const ElementType type = typeCHART; static const ElementType type = typeCHART;
MsoDrawingPtr mso_drawing_; MsoDrawingPtr mso_drawing_;
BaseObjectPtr m_ChartSheetSubstream;
bool sp_enabled;
}; };
} // namespace XLS } // namespace XLS
......
...@@ -33,6 +33,9 @@ const bool CHART::loadContent(BinProcessor& proc) ...@@ -33,6 +33,9 @@ const bool CHART::loadContent(BinProcessor& proc)
return false; return false;
} }
m_ChartSheetSubstream = elements_.back();
elements_.pop_back();
int count = proc.repeated<Continue>(0, 0); int count = proc.repeated<Continue>(0, 0);
while (count > 0) while (count > 0)
...@@ -43,8 +46,11 @@ const bool CHART::loadContent(BinProcessor& proc) ...@@ -43,8 +46,11 @@ const bool CHART::loadContent(BinProcessor& proc)
CFRecordPtr r = CFRecordPtr(new CFRecord(CFRecordType::ANY_TYPE, proc.getGlobalWorkbookInfo())); CFRecordPtr r = CFRecordPtr(new CFRecord(CFRecordType::ANY_TYPE, proc.getGlobalWorkbookInfo()));
r->appendRawData(c->m_pData, c->m_iDataSize); r->appendRawData(c->m_pData, c->m_iDataSize);
mso_drawing_->storeRecordAndDecideProceeding(r); mso_drawing_->storeRecordAndDecideProceeding(r);
sp_enabled = true;
} }
elements_.pop_back();
count--; count--;
} }
......
...@@ -122,18 +122,13 @@ const bool OBJECTS::loadContentRead(BinReaderProcessor& proc) ...@@ -122,18 +122,13 @@ const bool OBJECTS::loadContentRead(BinReaderProcessor& proc)
} }
} }
//int count_2 = proc.repeated(parenthesis_objects_1, 0, 0); try
{
if (m_MsoDrawing->isReading == false) m_MsoDrawing->resetToBegin();
m_MsoDrawing->readFields();
}
catch(...)
{ {
try
{
m_MsoDrawing->resetToBegin();
m_MsoDrawing->readFields();
}
catch(...)
{
}
} }
return count_1 > 0 || count_4 > 0; return count_1 > 0 || count_4 > 0;
......
...@@ -519,6 +519,17 @@ void XlsConverter::convert(XLS::OBJECTS* objects) ...@@ -519,6 +519,17 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
bool note = false; bool note = false;
int ind = 0; int ind = 0;
if ((spgr) && (ind < spgr->child_records.size()))
{
ODRAW::OfficeArtSpContainer *s = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind].get());
if (s)
{
ODRAW::OfficeArtFSP *fsp = dynamic_cast<ODRAW::OfficeArtFSP*>(s->m_OfficeArtFSP.get());
if ((fsp) && (fsp->fPatriarch)) ind++;
}
}
for ( std::list<XLS::BaseObjectPtr>::iterator elem = objects->elements_.begin(); elem != objects->elements_.end(); elem++) for ( std::list<XLS::BaseObjectPtr>::iterator elem = objects->elements_.begin(); elem != objects->elements_.end(); elem++)
{ {
short type_object = -1; short type_object = -1;
...@@ -541,7 +552,7 @@ void XlsConverter::convert(XLS::OBJECTS* objects) ...@@ -541,7 +552,7 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
if (OBJ) obj = dynamic_cast<XLS::Obj *>(OBJ->m_Obj.get()); if (OBJ) obj = dynamic_cast<XLS::Obj *>(OBJ->m_Obj.get());
if (TEXTOBJECT) text_obj = dynamic_cast<XLS::TxO *>(TEXTOBJECT->m_TxO.get()); if (TEXTOBJECT) text_obj = dynamic_cast<XLS::TxO *>(TEXTOBJECT->m_TxO.get());
if (CHART) chart = dynamic_cast<XLS::ChartSheetSubstream *>(CHART->elements_.back().get()); if (CHART) chart = dynamic_cast<XLS::ChartSheetSubstream *>(CHART->m_ChartSheetSubstream.get());
if (obj) type_object = obj->cmo.ot; if (obj) type_object = obj->cmo.ot;
if (chart) type_object = 0x0005; if (chart) type_object = 0x0005;
...@@ -556,10 +567,21 @@ void XlsConverter::convert(XLS::OBJECTS* objects) ...@@ -556,10 +567,21 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
ODRAW::OfficeArtSpContainer *sp_text = NULL; ODRAW::OfficeArtSpContainer *sp_text = NULL;
if ( spgr) if ( spgr)
{ {
if (ind + 1 < spgr->child_records.size()) if (ind < spgr->child_records.size())
sp = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind+1].get()); {
if (text_obj && ind + 2 < spgr->child_records.size()) sp = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind].get());
sp_text = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind+2].get()); ind++;
}
if ((text_obj && ind < spgr->child_records.size()) && text_obj->sp_enabled)
{
sp_text = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind].get());
ind++;
}
if ((chart && ind < spgr->child_records.size()) && CHART->sp_enabled)
{
sp_text = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind].get());
ind++;
}
} }
...@@ -597,16 +619,15 @@ void XlsConverter::convert(XLS::OBJECTS* objects) ...@@ -597,16 +619,15 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
note = true; note = true;
} }
} }
ind++;
if ( spgr ) if ( spgr )
{ {
while (ind + 1 < spgr->child_records.size()) // бывает что эти элементы не привязаны к sp, а "лежат" сверху - FilterClickColour_2003.xls while (ind < spgr->child_records.size()) // бывает что эти элементы не привязаны к sp, а "лежат" сверху - FilterClickColour_2003.xls
{ {
ODRAW::OfficeArtClientData* client_data = NULL; ODRAW::OfficeArtClientData* client_data = NULL;
ODRAW::OfficeArtClientTextbox* text_client_data = NULL; ODRAW::OfficeArtClientTextbox* text_client_data = NULL;
client_data = dynamic_cast<ODRAW::OfficeArtClientData*> (spgr->child_records[ind+1].get()); client_data = dynamic_cast<ODRAW::OfficeArtClientData*> (spgr->child_records[ind].get());
text_client_data = dynamic_cast<ODRAW::OfficeArtClientTextbox*> (spgr->child_records[ind+1].get()); text_client_data = dynamic_cast<ODRAW::OfficeArtClientTextbox*> (spgr->child_records[ind].get());
if (client_data || text_client_data) if (client_data || text_client_data)
{ {
...@@ -617,7 +638,6 @@ void XlsConverter::convert(XLS::OBJECTS* objects) ...@@ -617,7 +638,6 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
if (TEXTOBJECT || CHART) if (TEXTOBJECT || CHART)
{ {
elem++; elem++;
ind++;
} }
} }
} }
...@@ -626,6 +646,8 @@ void XlsConverter::convert(ODRAW::OfficeArtSpContainer *sp) ...@@ -626,6 +646,8 @@ void XlsConverter::convert(ODRAW::OfficeArtSpContainer *sp)
{ {
if (sp == NULL) return; if (sp == NULL) return;
convert(sp->m_OfficeArtFSP.get());
for (int i = 0; i < sp->child_records.size(); i++) for (int i = 0; i < sp->child_records.size(); i++)
{ {
convert(sp->child_records[i].get()); convert(sp->child_records[i].get());
...@@ -670,6 +692,44 @@ void XlsConverter::convert_fill_style(std::vector<ODRAW::OfficeArtFOPTEPtr> & pr ...@@ -670,6 +692,44 @@ void XlsConverter::convert_fill_style(std::vector<ODRAW::OfficeArtFOPTEPtr> & pr
{ {
for (int i = 0 ; i < props.size() ; i++) for (int i = 0 ; i < props.size() ; i++)
{ {
switch(props[i]->opid)
{
case 0x0181:
{
ODRAW::fillColor * fill = (ODRAW::fillColor *)(props[i].get());
ODRAW::OfficeArtCOLORREF color(fill->op);
if (!color.colorRGB.empty())
xlsx_context->get_drawing_context().set_fill_color(color.colorRGB);
else if (color. fPaletteIndex)
{
std::map<int, std::wstring>::iterator it = xls_global_info->colors_palette.find(color.index);
if (it != xls_global_info->colors_palette.end())
{
xlsx_context->get_drawing_context().set_fill_color(it->second);
}
}
else
xlsx_context->get_drawing_context().set_fill_color(color.index, color.fSchemeIndex ? 1 : 3 );
}break;
case 0x0186:
{
//bool isIternal = false;
//std::wstring target;
//std::wstring rId = xlsx_context->get_mediaitems().find_image(props[i]->op , target, isIternal);
//xlsx_context->get_drawing_context().set_image(target);
}break;
case 0x01BF:
{
ODRAW::FillStyleBooleanProperties * fill = (ODRAW::FillStyleBooleanProperties *)(props[i].get());
if (fill)
{
if (fill->fFilled == false)
xlsx_context->get_drawing_context().set_fill_type(0);
}
}break;
}
} }
} }
void XlsConverter::convert_line_style(std::vector<ODRAW::OfficeArtFOPTEPtr> & props) void XlsConverter::convert_line_style(std::vector<ODRAW::OfficeArtFOPTEPtr> & props)
...@@ -683,8 +743,16 @@ void XlsConverter::convert_line_style(std::vector<ODRAW::OfficeArtFOPTEPtr> & pr ...@@ -683,8 +743,16 @@ void XlsConverter::convert_line_style(std::vector<ODRAW::OfficeArtFOPTEPtr> & pr
ODRAW::OfficeArtCOLORREF color(props[i]->op); ODRAW::OfficeArtCOLORREF color(props[i]->op);
if (!color.colorRGB.empty()) if (!color.colorRGB.empty())
xlsx_context->get_drawing_context().set_line_color(color.colorRGB); xlsx_context->get_drawing_context().set_line_color(color.colorRGB);
else if (color. fPaletteIndex)
{
std::map<int, std::wstring>::iterator it = xls_global_info->colors_palette.find(color.index);
if (it != xls_global_info->colors_palette.end())
{
xlsx_context->get_drawing_context().set_line_color(it->second);
}
}
else else
xlsx_context->get_drawing_context().set_line_color(color.index, color.fSchemeIndex ? 1 : (color. fPaletteIndex ? 2 : 3 )); xlsx_context->get_drawing_context().set_line_color(color.index, color.fSchemeIndex ? 1 : 3 );
}break; }break;
case 0x01C4: case 0x01C4:
{ {
...@@ -801,13 +869,22 @@ void XlsConverter::convert_geometry(std::vector<ODRAW::OfficeArtFOPTEPtr> & prop ...@@ -801,13 +869,22 @@ void XlsConverter::convert_geometry(std::vector<ODRAW::OfficeArtFOPTEPtr> & prop
{ {
for (int j=0 ; j < count_point[command[i].typeSegment]; j ++) for (int j=0 ; j < count_point[command[i].typeSegment]; j ++)
{ {
if (ind_point >= points.size()) if (ind_point < points.size())
break; {
CP_XML_NODE(L"a:pt") CP_XML_NODE(L"a:pt")
{
CP_XML_ATTR(L"x", points[ind_point].x);
CP_XML_ATTR(L"y", points[ind_point].y);
ind_point++;
}
}
else
{ {
CP_XML_ATTR(L"x", points[ind_point].x); CP_XML_NODE(L"a:pt")
CP_XML_ATTR(L"y", points[ind_point].y); {
ind_point++; CP_XML_ATTR(L"x", 0);
CP_XML_ATTR(L"y", 0);
}
} }
} }
} }
......
...@@ -11,7 +11,13 @@ ...@@ -11,7 +11,13 @@
namespace oox { namespace oox {
const static std::wstring shemeColor[17] = const static std::wstring shemeColor[17] =
{L"accent1",L"accent2",L"accent3",L"accent4",L"accent5",L"accent6",L"bg1",L"bg2",L"dk1",L"dk2",L"folHlink",L"hlink",L"lt1",L"lt2",L"phClr",L"tx1",L"tx2"}; {L"lt1",L"dk1",L"lt2",L"dk2",L"accent1",L"accent2",L"accent3",L"accent4",L"accent5",L"accent6",L"dk1",L"dk2",L"folHlink",L"hlink",L"tx1",L"tx2",L"phClr"};
const static std::wstring systemColor[30] =
{L"scrollBar", L"background", L"activeCaption", L"inactiveCaption", L"menu", L"window", L"windowFrame", L"menuText", L"windowText",
L"captionText", L"activeBorder", L"inactiveBorder", L"appWorkspace", L"highlight", L"highlightText", L"btnFace", L"btnShadow",
L"grayText", L"btnText", L"inactiveCaptionText", L"btnHighlight", L"3dDkShadow", L"3dLight", L"infoText", L"infoBk", L"hotLight",
L"gradientActiveCaption", L"gradientInactiveCaption", L"menuHighlight", L"menuBar"};
class xlsx_drawing_context_handle::Impl class xlsx_drawing_context_handle::Impl
{ {
...@@ -301,12 +307,18 @@ void xlsx_drawing_context::serialize_shape() ...@@ -301,12 +307,18 @@ void xlsx_drawing_context::serialize_shape()
} }
CP_XML_NODE(L"a:pathLst") CP_XML_NODE(L"a:pathLst")
{ {
CP_XML_NODE(L"a:path") int w = drawing_state.back().path_rect.right - drawing_state.back().path_rect.left;
int h = drawing_state.back().path_rect.bottom- drawing_state.back().path_rect.top;
if (w > 0 && h > 0)
{ {
CP_XML_ATTR(L"w", drawing_state.back().path_rect.right - drawing_state.back().path_rect.left); CP_XML_NODE(L"a:path")
CP_XML_ATTR(L"h", drawing_state.back().path_rect.bottom- drawing_state.back().path_rect.top); {
CP_XML_ATTR(L"w", w);
CP_XML_STREAM() << drawing_state.back().path; CP_XML_ATTR(L"h", h);
CP_XML_STREAM() << drawing_state.back().path;
}
} }
} }
} }
...@@ -323,19 +335,28 @@ void xlsx_drawing_context::serialize_shape() ...@@ -323,19 +335,28 @@ void xlsx_drawing_context::serialize_shape()
void xlsx_drawing_context::serialize_fill(std::wostream & stream) void xlsx_drawing_context::serialize_fill(std::wostream & stream)
{ {
if (drawing_state.back().fill.type == 0)
{
serialize_none_fill(stream);
return;
}
if (!drawing_state.back().image_target.empty()) if (!drawing_state.back().image_target.empty())
{ {
bool isIternal = false; bool isIternal = false;
std::wstring rId = handle_.impl_->get_mediaitems().find_image( drawing_state.back().image_target, isIternal); std::wstring rId = handle_.impl_->get_mediaitems().find_image( drawing_state.back().image_target, isIternal);
if (!rId.empty()) if (!rId.empty())
{ {
xlsx_drawings_->add(L"", isIternal, rId , drawing_state.back().image_target, drawing_state.back().type); xlsx_drawings_->add(L"", isIternal, rId , drawing_state.back().image_target, external_items::typeImage);
serialize_bitmap_fill(stream, rId); serialize_bitmap_fill(stream, rId);
}else return;
serialize_none_fill(stream); }
} }
else if (drawing_state.back().fill.color.index>=0 || !drawing_state.back().fill.color.rgb.empty())
serialize_none_fill(stream); {
serialize_solid_fill(stream, drawing_state.back().fill.color);
}
else serialize_none_fill(stream);
} }
void xlsx_drawing_context::serialize_none_fill(std::wostream & stream) void xlsx_drawing_context::serialize_none_fill(std::wostream & stream)
...@@ -345,7 +366,16 @@ void xlsx_drawing_context::serialize_none_fill(std::wostream & stream) ...@@ -345,7 +366,16 @@ void xlsx_drawing_context::serialize_none_fill(std::wostream & stream)
CP_XML_NODE(L"a:noFill"); CP_XML_NODE(L"a:noFill");
} }
} }
void xlsx_drawing_context::serialize_solid_fill(std::wostream & stream, const _color & color)
{
CP_XML_WRITER(stream)
{
CP_XML_NODE(L"a:solidFill")
{
serialize_color(CP_XML_STREAM(), drawing_state.back().fill.color);
}
}
}
void xlsx_drawing_context::serialize_xfrm(std::wostream & stream) void xlsx_drawing_context::serialize_xfrm(std::wostream & stream)
{ {
CP_XML_WRITER(stream) CP_XML_WRITER(stream)
...@@ -382,16 +412,27 @@ void xlsx_drawing_context::serialize_color (std::wostream & stream, const _color ...@@ -382,16 +412,27 @@ void xlsx_drawing_context::serialize_color (std::wostream & stream, const _color
CP_XML_ATTR(L"val", color.rgb); CP_XML_ATTR(L"val", color.rgb);
} }
} }
else if (color.bPalette){CP_XML_NODE(L"a:prstClr") { CP_XML_ATTR(L"val",L"black");}} else if (color.index >=0 && color.index < 17)
else if (color.bScheme)
//else
{ {
CP_XML_NODE(L"a:schemeClr") CP_XML_NODE(L"a:schemeClr")
{ {
CP_XML_ATTR(L"val", (color.index >=0 && color.index < 17) ? shemeColor[color.index] : L"tx1"); CP_XML_ATTR(L"val", shemeColor[color.index]);
}
}
else if (color.index >=0 && color.index < 30)
{
CP_XML_NODE(L"a:sysClr")
{
CP_XML_ATTR(L"val", systemColor[color.index]);
}
}
else
{
CP_XML_NODE(L"a:sysClr")
{
CP_XML_ATTR(L"val", L"lt1");
} }
} }
else{CP_XML_NODE(L"a:sysClr") { CP_XML_ATTR(L"val",L"windowText");}}
} }
} }
...@@ -597,8 +638,23 @@ void xlsx_drawing_context::set_line_color (int index, int type) ...@@ -597,8 +638,23 @@ void xlsx_drawing_context::set_line_color (int index, int type)
drawing_state.back().line.color.index = index; drawing_state.back().line.color.index = index;
if (type == 1) drawing_state.back().line.color.bScheme = true; if (type == 1) drawing_state.back().line.color.bScheme = true;
else if (type == 2) drawing_state.back().line.color.bPalette = true; }
void xlsx_drawing_context::set_fill_color (const std::wstring & color)
{
if (drawing_state.size() < 1 )return;
drawing_state.back().fill.color.rgb = color;
}
void xlsx_drawing_context::set_fill_color (int index, int type)
{
if (drawing_state.size() < 1 )return;
drawing_state.back().fill.color.index = index;
if (type == 1) drawing_state.back().fill.color.bScheme = true;
}
void xlsx_drawing_context::set_fill_type (int val)
{
if (drawing_state.size() < 1 )return;
drawing_state.back().fill.type = val;
} }
void xlsx_drawing_context::set_line_type (int val) void xlsx_drawing_context::set_line_type (int val)
{ {
......
...@@ -29,11 +29,10 @@ private: ...@@ -29,11 +29,10 @@ private:
struct _color struct _color
{ {
_color() : index(-1), bScheme(false), bPalette(false){} _color() : index(-1), bScheme(false){}
std::wstring rgb; std::wstring rgb;
int index; int index;
bool bScheme; bool bScheme;
bool bPalette;
}; };
struct _rect struct _rect
...@@ -98,6 +97,14 @@ public: ...@@ -98,6 +97,14 @@ public:
int width; int width;
}line; }line;
struct _fill
{
_fill() {opacity = 0; type = 1; }
_color color;
_color color2;
int opacity;
int type;
}fill;
}; };
struct _hlink_desc struct _hlink_desc
{ {
...@@ -134,7 +141,11 @@ public: ...@@ -134,7 +141,11 @@ public:
void set_rotation (int val); void set_rotation (int val);
void set_line_color (const std::wstring & color); void set_fill_color (const std::wstring & color);
void set_fill_color (int index, int type);
void set_fill_type (int val);
void set_line_color (const std::wstring & color);
void set_line_color (int index, int type); void set_line_color (int index, int type);
void set_line_type (int val); void set_line_type (int val);
void set_line_style (int val); void set_line_style (int val);
...@@ -158,6 +169,7 @@ public: ...@@ -158,6 +169,7 @@ public:
void serialize_line (std::wostream & stream); void serialize_line (std::wostream & stream);
void serialize_fill (std::wostream & stream); void serialize_fill (std::wostream & stream);
void serialize_bitmap_fill (std::wostream & stream, std::wstring rId, const std::wstring ns = L"a:"); void serialize_bitmap_fill (std::wostream & stream, std::wstring rId, const std::wstring ns = L"a:");
void serialize_solid_fill (std::wostream & stream, const _color &color);
void serialize_none_fill (std::wostream & stream); void serialize_none_fill (std::wostream & stream);
void serialize_xfrm (std::wostream & stream); void serialize_xfrm (std::wostream & stream);
void serialize_text (std::wostream & stream); void serialize_text (std::wostream & stream);
......
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