Commit 6a8d0cf3 authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

XlsFile2

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@64388 954022d7-b5bf-4e40-9824-e11837661b57
parent a0d32619
......@@ -96,6 +96,13 @@ void OfficeArtSpContainer::loadFields(XLS::CFRecord& record)
m_OfficeArtFSP = child_records[i];
child_records.erase(child_records.begin() + i,child_records.begin() + i + 1); i--;
}break;
case ODRAW::OfficeArtRecord::ChildAnchor:
case ODRAW::OfficeArtRecord::ClientAnchor:
{
m_OfficeArtAnchor = child_records[i];
child_records.erase(child_records.begin() + i,child_records.begin() + i + 1); i--;
}break;
}
}
......
......@@ -54,6 +54,7 @@ public:
void loadFields(XLS::CFRecord& record);
OfficeArtRecordPtr m_OfficeArtFSP;
OfficeArtRecordPtr m_OfficeArtAnchor;
};
class OfficeArtClientData : public OfficeArtRecord
......
......@@ -563,42 +563,26 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
}
//-----------------------------------------------------------------------------
ODRAW::OfficeArtSpContainer *sp = NULL;
ODRAW::OfficeArtSpContainer *sp_text = NULL;
if ( spgr)
{
if (ind < spgr->child_records.size())
{
sp = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind].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++;
}
}
if (type_object < 0)continue;
if (note && text_obj)
ODRAW::OfficeArtSpContainer *sp = NULL;
if (( spgr) && (ind < spgr->child_records.size()))
{
//convert_comment(text_obj/*, note_obj*/);
note = false;
continue;
sp = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind++].get());
}
note = false;
if (type_object < 0)continue;
if (xlsx_context->get_drawing_context().start_drawing(type_object))
{
convert(sp);
convert(sp_text);
if (!sp->m_OfficeArtAnchor)
{
if (( spgr) && (ind < spgr->child_records.size()))
{
sp = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind++].get());
}
convert(sp, true);
}
if (text_obj)
{
......@@ -612,29 +596,7 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
}
xlsx_context->get_drawing_context().end_drawing();
}
else
{
if (type_object == 0x19)
{
note = true;
}
}
if ( spgr )
{
while (ind < spgr->child_records.size()) // бывает что эти элементы не привязаны к sp, а "лежат" сверху - FilterClickColour_2003.xls
{
ODRAW::OfficeArtClientData* client_data = NULL;
ODRAW::OfficeArtClientTextbox* text_client_data = NULL;
client_data = dynamic_cast<ODRAW::OfficeArtClientData*> (spgr->child_records[ind].get());
text_client_data = dynamic_cast<ODRAW::OfficeArtClientTextbox*> (spgr->child_records[ind].get());
if (client_data || text_client_data)
{
ind++;
}else break;
}
}
if (TEXTOBJECT || CHART)
{
elem++;
......@@ -642,16 +604,20 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
}
}
void XlsConverter::convert(ODRAW::OfficeArtSpContainer *sp)
void XlsConverter::convert(ODRAW::OfficeArtSpContainer *sp, bool anchor_only)
{
if (sp == NULL) return;
if (!anchor_only)
{
convert(sp->m_OfficeArtFSP.get());
for (int i = 0; i < sp->child_records.size(); i++)
{
convert(sp->child_records[i].get());
}
}
convert(sp->m_OfficeArtAnchor.get());
}
void XlsConverter::convert(ODRAW::OfficeArtRecord * art)
......@@ -676,8 +642,8 @@ void XlsConverter::convert(ODRAW::OfficeArtRecord * art)
xlsx_context->get_drawing_context().set_anchor(strm.str());
}break;
}
}
void XlsConverter::convert(ODRAW::OfficeArtFSP * fsp)
{
if (fsp == NULL) return;
......@@ -714,10 +680,10 @@ void XlsConverter::convert_fill_style(std::vector<ODRAW::OfficeArtFOPTEPtr> & pr
}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);
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:
{
......
......@@ -86,7 +86,7 @@ private:
void convert(ODRAW::OfficeArtRecord * art);
void convert(ODRAW::OfficeArtBStoreContainer* art_bstore);
void convert(ODRAW::OfficeArtSpContainer * sp);
void convert(ODRAW::OfficeArtSpContainer * sp, bool anchor_only = false);
void convert(ODRAW::OfficeArtFOPT * fort);
void convert(ODRAW::OfficeArtFSP * fsp);
......
......@@ -10,8 +10,8 @@
namespace oox {
const static std::wstring shemeColor[17] =
{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 shemeColor[18] =
{L"accent1",L"accent2",L"accent3",L"accent4",L"accent5",L"accent6",L"bk1",L"bk2",L"dk1",L"dk2",L"folHlink",L"hlink",L"lt1",L"lt2",L"none", 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",
......@@ -412,7 +412,7 @@ void xlsx_drawing_context::serialize_color (std::wostream & stream, const _color
CP_XML_ATTR(L"val", color.rgb);
}
}
else if (color.index >=0 && color.index < 17)
else if (color.index >=0 && color.index < 17 && color.bScheme)
{
CP_XML_NODE(L"a:schemeClr")
{
......@@ -428,7 +428,7 @@ void xlsx_drawing_context::serialize_color (std::wostream & stream, const _color
}
else
{
CP_XML_NODE(L"a:sysClr")
CP_XML_NODE(L"a:schemeClr")
{
CP_XML_ATTR(L"val", L"lt1");
}
......@@ -592,6 +592,14 @@ void xlsx_drawing_context::set_anchor(const std::wstring & str)
drawing_state.back().anchor = str;
}
bool xlsx_drawing_context::is_anchor()
{
if (drawing_state.size() < 1 ) return false;
return !drawing_state.back().anchor.empty();
}
void xlsx_drawing_context::set_image(const std::wstring & str)
{
if (drawing_state.size() < 1 )return;
......@@ -636,6 +644,7 @@ void xlsx_drawing_context::set_line_color (int index, int type)
{
if (drawing_state.size() < 1 )return;
drawing_state.back().line.color.index = index;
drawing_state.back().line.color.rgb = L"";
if (type == 1) drawing_state.back().line.color.bScheme = true;
}
......
......@@ -89,7 +89,7 @@ public:
struct _line
{
_line() {opacity = 0; type = L"solidFill"; style = L"simple"; width = 0;}
_line() {opacity = 0; type = L"solidFill"; style = L"simple"; width = 0; color.rgb = L"000000";}
_color color;
int opacity;
std::wstring type;
......@@ -152,7 +152,10 @@ public:
void set_line_width (int val);
void set_image (const std::wstring & str);
void set_anchor (const std::wstring & str);
bool is_anchor ();
void set_properties (const std::wstring & str);
void set_hyperlink (const std::wstring & str);
......
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