summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRegina Henschel <rb.henschel@t-online.de>2011-09-09 15:02:34 +0200
committerKohei Yoshida <kohei.yoshida@suse.com>2011-09-20 12:14:13 -0400
commit3e5edf6ca9d3bc56549602bda2adc855dd57f658 (patch)
tree51e8993e730ff7f17721c4b8c126fc92ab92bb34
parent53abf4dc1c065fba3ec9e691cacd55aceaf19fc7 (diff)
Add missing chart data point ODF1.2 standard symbols
-rw-r--r--chart2/source/controller/chartapiwrapper/WrappedSymbolProperties.cxx2
-rw-r--r--chart2/source/view/main/ShapeFactory.cxx323
-rw-r--r--cui/source/tabpages/tpline.cxx37
-rw-r--r--oox/source/drawingml/chart/typegroupconverter.cxx12
-rw-r--r--sc/source/filter/excel/xlchart.cxx22
-rw-r--r--xmloff/inc/xmloff/xmltoken.hxx6
-rw-r--r--xmloff/source/chart/XMLSymbolTypePropertyHdl.cxx7
-rw-r--r--xmloff/source/core/xmltoken.cxx6
-rw-r--r--xmloff/source/transform/StyleOASISTContext.cxx14
-rw-r--r--xmloff/source/transform/StyleOOoTContext.cxx21
10 files changed, 429 insertions, 21 deletions
diff --git a/chart2/source/controller/chartapiwrapper/WrappedSymbolProperties.cxx b/chart2/source/controller/chartapiwrapper/WrappedSymbolProperties.cxx
index 5707a0aa8f21..97d3156dadf2 100644
--- a/chart2/source/controller/chartapiwrapper/WrappedSymbolProperties.cxx
+++ b/chart2/source/controller/chartapiwrapper/WrappedSymbolProperties.cxx
@@ -151,7 +151,7 @@ sal_Int32 lcl_getSymbolType( const ::com::sun::star::chart2::Symbol& rSymbol )
nSymbol = ::com::sun::star::chart::ChartSymbolType::AUTO;
break;
case chart2::SymbolStyle_STANDARD:
- nSymbol = rSymbol.StandardSymbol%8;
+ nSymbol = rSymbol.StandardSymbol%15;
break;
case chart2::SymbolStyle_POLYGON://new feature
nSymbol = ::com::sun::star::chart::ChartSymbolType::AUTO;
diff --git a/chart2/source/view/main/ShapeFactory.cxx b/chart2/source/view/main/ShapeFactory.cxx
index e152c47b3a7c..dc06ebac0dbe 100644
--- a/chart2/source/view/main/ShapeFactory.cxx
+++ b/chart2/source/view/main/ShapeFactory.cxx
@@ -1263,6 +1263,13 @@ enum SymbolType { SYMBOL_SQUARE=0
, SYMBOL_ARROW_LEFT
, SYMBOL_BOWTIE
, SYMBOL_SANDGLASS
+ , SYMBOL_CIRCLE
+ , SYMBOL_STAR
+ , SYMBOL_X
+ , SYMBOL_PLUS
+ , SYMBOL_ASTERISK
+ , SYMBOL_HORIZONTAL_BAR
+ , SYMBOL_VERTICAL_BAR
, SYMBOL_COUNT
};
@@ -1286,6 +1293,9 @@ drawing::PolyPolygonShape3D createPolyPolygon_Symbol( const drawing::Position3D&
const double fWidthH = rSize.DirectionX/2.0; //fWidthH stands for Half Width
const double fHeightH = rSize.DirectionY/2.0; //fHeightH stands for Half Height
+ double fMaxSize = fHeightH > fWidthH ? fHeightH : fWidthH; //assumes non negative
+ const sal_Int32 nQuarterCount = 35; // points inside a quadrant, used in case circle
+
sal_Int32 nPointCount = 4; //all arrow symbols only need 4 points
switch( eSymbolType )
{
@@ -1293,8 +1303,25 @@ drawing::PolyPolygonShape3D createPolyPolygon_Symbol( const drawing::Position3D&
case SYMBOL_DIAMOND:
case SYMBOL_BOWTIE:
case SYMBOL_SANDGLASS:
+ case SYMBOL_HORIZONTAL_BAR:
+ case SYMBOL_VERTICAL_BAR:
nPointCount = 5;
break;
+ case SYMBOL_X:
+ nPointCount = 13;
+ break;
+ case SYMBOL_PLUS:
+ nPointCount = 13;
+ break;
+ case SYMBOL_STAR:
+ nPointCount = 9;
+ break;
+ case SYMBOL_ASTERISK:
+ nPointCount = 19;
+ break;
+ case SYMBOL_CIRCLE:
+ nPointCount = 5 + 4 * nQuarterCount;
+ break;
default:
break;
}
@@ -1323,6 +1350,24 @@ drawing::PolyPolygonShape3D createPolyPolygon_Symbol( const drawing::Position3D&
switch(eSymbolType)
{
+ case SYMBOL_SQUARE:
+ {
+ *pInnerSequenceX++ = fX-fWidthH;
+ *pInnerSequenceY++ = fY-fHeightH;
+
+ *pInnerSequenceX++ = fX-fWidthH;
+ *pInnerSequenceY++ = fY+fHeightH;
+
+ *pInnerSequenceX++ = fX+fWidthH;
+ *pInnerSequenceY++ = fY+fHeightH;
+
+ *pInnerSequenceX++ = fX+fWidthH;
+ *pInnerSequenceY++ = fY-fHeightH;
+
+ *pInnerSequenceX++ = fX-fWidthH;
+ *pInnerSequenceY++ = fY-fHeightH;
+ break;
+ }
case SYMBOL_ARROW_UP:
{
*pInnerSequenceX++ = fX-fWidthH;
@@ -1438,6 +1483,284 @@ drawing::PolyPolygonShape3D createPolyPolygon_Symbol( const drawing::Position3D&
*pInnerSequenceY++ = fY;
break;
}
+ case SYMBOL_HORIZONTAL_BAR:
+ {
+ *pInnerSequenceX++ = fX-fWidthH;
+ *pInnerSequenceY++ = fY-0.2*fHeightH;
+
+ *pInnerSequenceX++ = fX+fWidthH;
+ *pInnerSequenceY++ = fY-0.2*fHeightH;
+
+
+ *pInnerSequenceX++ = fX+fWidthH;
+ *pInnerSequenceY++ = fY+0.2*fHeightH;
+
+ *pInnerSequenceX++ = fX-fWidthH;
+ *pInnerSequenceY++ = fY+0.2*fHeightH;
+
+ *pInnerSequenceX++ = fX-fWidthH;
+ *pInnerSequenceY++ = fY-0.2*fHeightH;
+ break;
+ }
+ case SYMBOL_VERTICAL_BAR:
+ {
+ *pInnerSequenceX++ = fX-0.2*fWidthH;
+ *pInnerSequenceY++ = fY-fHeightH;
+
+ *pInnerSequenceX++ = fX+0.2*fWidthH;
+ *pInnerSequenceY++ = fY-fHeightH;
+
+
+ *pInnerSequenceX++ = fX+0.2*fWidthH;
+ *pInnerSequenceY++ = fY+fHeightH;
+
+ *pInnerSequenceX++ = fX-0.2*fWidthH;
+ *pInnerSequenceY++ = fY+fHeightH;
+
+ *pInnerSequenceX++ = fX-0.2*fWidthH;
+ *pInnerSequenceY++ = fY-fHeightH;
+
+ break;
+ }
+ case SYMBOL_CIRCLE:
+ {
+ double fOmega = 1.5707963267948966192 / (nQuarterCount + 1.0);
+ // one point in the middle of each edge to get full size bounding rectangle
+ *pInnerSequenceX++ = fX + fWidthH;
+ *pInnerSequenceY++ = fY;
+ // 0 to PI/2
+ for (sal_Int32 i = 1; i <= nQuarterCount; ++i)
+ {
+ *pInnerSequenceX++ = fX + fWidthH * cos( i * fOmega );
+ *pInnerSequenceY++ = fY - fHeightH * sin( i * fOmega );
+ }
+ // PI/2 to PI
+ *pInnerSequenceX++ = fX;
+ *pInnerSequenceY++ = fY - fHeightH;
+ for (sal_Int32 i = 1; i <= nQuarterCount; ++i)
+ {
+ *pInnerSequenceX++ = fX - fWidthH * sin( i * fOmega);
+ *pInnerSequenceY++ = fY - fHeightH * cos( i * fOmega);
+ }
+ // PI to 3/2*PI
+ *pInnerSequenceX++ = fX - fWidthH;
+ *pInnerSequenceY++ = fY;
+ for (sal_Int32 i = 1; i <= nQuarterCount; ++i)
+ {
+ *pInnerSequenceX++ = fX - fWidthH * cos( i * fOmega);
+ *pInnerSequenceY++ = fY + fHeightH * sin( i * fOmega);
+ }
+ // 3/2*PI to 2*PI
+ *pInnerSequenceX++ = fX;
+ *pInnerSequenceY++ = fY + fHeightH;
+ for (sal_Int32 i = 1; i <= nQuarterCount; ++i)
+ {
+ *pInnerSequenceX++ = fX + fWidthH * sin(i * fOmega);
+ *pInnerSequenceY++ = fY + fHeightH * cos(i * fOmega);
+ }
+ // close polygon
+ *pInnerSequenceX++ = fX + fWidthH;
+ *pInnerSequenceY++ = fY;
+ break;
+ }
+ case SYMBOL_STAR:
+ {
+ *pInnerSequenceX++ = fX;
+ *pInnerSequenceY++ = fY-fHeightH;
+
+ *pInnerSequenceX++ = fX+0.2*fWidthH;
+ *pInnerSequenceY++ = fY-0.2*fHeightH;
+
+ *pInnerSequenceX++ = fX+fWidthH;
+ *pInnerSequenceY++ = fY;
+
+ *pInnerSequenceX++ = fX+0.2*fWidthH;
+ *pInnerSequenceY++ = fY+0.2*fHeightH;
+
+ *pInnerSequenceX++ = fX;
+ *pInnerSequenceY++ = fY+fHeightH;
+
+ *pInnerSequenceX++ = fX-0.2*fWidthH;
+ *pInnerSequenceY++ = fY+0.2*fHeightH;
+
+ *pInnerSequenceX++ = fX-fWidthH;
+ *pInnerSequenceY++ = fY;
+
+ *pInnerSequenceX++ = fX-0.2*fWidthH;
+ *pInnerSequenceY++ = fY-0.2*fHeightH;
+
+ *pInnerSequenceX++ = fX;
+ *pInnerSequenceY++ = fY-fHeightH;
+ break;
+ }
+ case SYMBOL_X:
+ {
+ const double fScaleX = fWidthH / 128.0;
+ const double fScaleY = fHeightH / 128.0;
+ const double fSmall = sqrt(200.0);
+ const double fLarge = 128.0 - fSmall;
+
+ *pInnerSequenceX++ = fX;
+ *pInnerSequenceY++ = fY - fScaleY * fSmall;
+
+ *pInnerSequenceX++ = fX - fScaleX * fLarge;
+ *pInnerSequenceY++ = fY - fHeightH;
+
+ *pInnerSequenceX++ = fX - fWidthH;
+ *pInnerSequenceY++ = fY - fScaleY * fLarge;
+
+ *pInnerSequenceX++ = fX - fScaleX * fSmall;
+ *pInnerSequenceY++ = fY;
+
+ *pInnerSequenceX++ = fX - fWidthH;
+ *pInnerSequenceY++ = fY + fScaleY * fLarge;
+
+ *pInnerSequenceX++ = fX - fScaleX * fLarge;
+ *pInnerSequenceY++ = fY + fHeightH;
+
+ *pInnerSequenceX++ = fX;
+ *pInnerSequenceY++ = fY + fScaleY * fSmall;
+
+ *pInnerSequenceX++ = fX + fScaleX * fLarge;
+ *pInnerSequenceY++ = fY + fHeightH;
+
+ *pInnerSequenceX++ = fX + fWidthH;
+ *pInnerSequenceY++ = fY + fScaleY * fLarge;
+
+ *pInnerSequenceX++ = fX + fScaleX * fSmall;
+ *pInnerSequenceY++ = fY;
+
+ *pInnerSequenceX++ = fX + fWidthH;
+ *pInnerSequenceY++ = fY - fScaleY * fLarge;
+
+ *pInnerSequenceX++ = fX + fScaleX * fLarge;
+ *pInnerSequenceY++ = fY - fHeightH;
+
+ *pInnerSequenceX++ = fX;
+ *pInnerSequenceY++ = fY - fScaleY * fSmall;
+ break;
+
+ }
+ case SYMBOL_PLUS:
+ {
+ const double fScaleX = fWidthH / 128.0;
+ const double fScaleY = fHeightH / 128.0;
+ const double fHalf = 10.0; //half line width on 256 size square
+ const double fdX = fScaleX * fHalf;
+ const double fdY = fScaleY * fHalf;
+
+ *pInnerSequenceX++ = fX-fdX;
+ *pInnerSequenceY++ = fY-fHeightH;
+
+ *pInnerSequenceX++ = fX-fdX;
+ *pInnerSequenceY++ = fY-fdY;
+
+ *pInnerSequenceX++ = fX-fWidthH;
+ *pInnerSequenceY++ = fY-fdY;
+
+ *pInnerSequenceX++ = fX-fWidthH;
+ *pInnerSequenceY++ = fY+fdY;
+
+ *pInnerSequenceX++ = fX-fdX;
+ *pInnerSequenceY++ = fY+fdY;
+
+ *pInnerSequenceX++ = fX-fdX;
+ *pInnerSequenceY++ = fY+fHeightH;
+
+ *pInnerSequenceX++ = fX+fdX;
+ *pInnerSequenceY++ = fY+fHeightH;
+
+ *pInnerSequenceX++ = fX+fdX;
+ *pInnerSequenceY++ = fY+fdY;
+
+ *pInnerSequenceX++ = fX+fWidthH;
+ *pInnerSequenceY++ = fY+fdY;
+
+ *pInnerSequenceX++ = fX+fWidthH;
+ *pInnerSequenceY++ = fY-fdY;
+
+ *pInnerSequenceX++ = fX+fdX;
+ *pInnerSequenceY++ = fY-fdY;
+
+ *pInnerSequenceX++ = fX+fdY;
+ *pInnerSequenceY++ = fY-fHeightH;
+
+ *pInnerSequenceX++ = fX-fdX;
+ *pInnerSequenceY++ = fY-fHeightH;
+ break;
+
+ }
+ case SYMBOL_ASTERISK:
+ {
+ const double fHalf = 10.0; // half line width on 256 size square
+ const double fTwoY = fHalf * sqrt(3.0);
+ const double fFourY = (128.0 - 2.0 * fHalf ) / sqrt(3.0);
+ const double fThreeX = 128.0 - fHalf;
+ const double fThreeY = fHalf * sqrt(3.0) + fFourY;
+ const double fFiveX = 2.0 * fHalf;
+
+ const double fScaleX = fWidthH / 128.0;
+ const double fScaleY = fHeightH / 128.0;
+
+ //1
+ *pInnerSequenceX++ = fX-fScaleX * fHalf;
+ *pInnerSequenceY++ = fY-fHeightH;
+ //2
+ *pInnerSequenceX++ = fX-fScaleX * fHalf;
+ *pInnerSequenceY++ = fY-fScaleY * fTwoY;
+ //3
+ *pInnerSequenceX++ = fX-fScaleX * fThreeX;
+ *pInnerSequenceY++ = fY-fScaleY * fThreeY;
+ //4
+ *pInnerSequenceX++ = fX-fWidthH;
+ *pInnerSequenceY++ = fY-fScaleY * fFourY;
+ //5
+ *pInnerSequenceX++ = fX-fScaleX * fFiveX;
+ *pInnerSequenceY++ = fY;
+ //6 as 4
+ *pInnerSequenceX++ = fX-fWidthH;
+ *pInnerSequenceY++ = fY+fScaleY * fFourY;
+ //7 as 3
+ *pInnerSequenceX++ = fX-fScaleX * fThreeX;
+ *pInnerSequenceY++ = fY+fScaleY * fThreeY;
+ //8 as 2
+ *pInnerSequenceX++ = fX-fScaleX * fHalf;
+ *pInnerSequenceY++ = fY+fScaleY * fTwoY;
+ //9 as 1
+ *pInnerSequenceX++ = fX-fScaleX * fHalf;
+ *pInnerSequenceY++ = fY+fHeightH;
+ //10 as 1
+ *pInnerSequenceX++ = fX+fScaleX * fHalf;
+ *pInnerSequenceY++ = fY+fHeightH;
+ //11 as 2
+ *pInnerSequenceX++ = fX+fScaleX * fHalf;
+ *pInnerSequenceY++ = fY+fScaleY * fTwoY;
+ //12 as 3
+ *pInnerSequenceX++ = fX+fScaleX * fThreeX;
+ *pInnerSequenceY++ = fY+fScaleY * fThreeY;
+ //13 as 4
+ *pInnerSequenceX++ = fX+fWidthH;
+ *pInnerSequenceY++ = fY+fScaleY * fFourY;
+ //14 as 5
+ *pInnerSequenceX++ = fX+fScaleX * fFiveX;
+ *pInnerSequenceY++ = fY;
+ //15 as 4
+ *pInnerSequenceX++ = fX+fWidthH;
+ *pInnerSequenceY++ = fY-fScaleY * fFourY;
+ //16 as 3
+ *pInnerSequenceX++ = fX+fScaleX * fThreeX;
+ *pInnerSequenceY++ = fY-fScaleY * fThreeY;
+ //17 as 2
+ *pInnerSequenceX++ = fX+fScaleX * fHalf;
+ *pInnerSequenceY++ = fY-fScaleY * fTwoY;
+ // 18 as 1
+ *pInnerSequenceX++ = fX+fScaleX * fHalf;
+ *pInnerSequenceY++ = fY-fHeightH;
+ // 19 = 1, closing
+ *pInnerSequenceX++ = fX-fScaleX * fHalf;
+ *pInnerSequenceY++ = fY-fHeightH;
+ break;
+ }
default: //case SYMBOL_SQUARE:
{
*pInnerSequenceX++ = fX-fWidthH;
diff --git a/cui/source/tabpages/tpline.cxx b/cui/source/tabpages/tpline.cxx
index 2b44a9ebd136..b6825b92225b 100644
--- a/cui/source/tabpages/tpline.cxx
+++ b/cui/source/tabpages/tpline.cxx
@@ -910,8 +910,6 @@ void SvxLineTabPage::Reset( const SfxItemSet& rAttrs )
if(pObj)
{
pObj=pObj->Clone();
- pPage->NbcInsertObject(pObj);
- pView->MarkObj(pObj,pPageView);
if(pSymbolAttr)
{
pObj->SetMergedItemSet(*pSymbolAttr);
@@ -920,17 +918,31 @@ void SvxLineTabPage::Reset( const SfxItemSet& rAttrs )
{
pObj->SetMergedItemSet(rOutAttrs);
}
+
+ pPage->NbcInsertObject(pObj);
+
+ // Generate invisible square to give all symbol types a
+ // bitmap size, which is indepedent from specific glyph
+ SdrObject *pInvisibleSquare=pSymbolList->GetObj(0);
+ pInvisibleSquare=pInvisibleSquare->Clone();
+ pPage->NbcInsertObject(pInvisibleSquare);
+ pInvisibleSquare->SetMergedItem(XFillTransparenceItem(100));
+ pInvisibleSquare->SetMergedItem(XLineTransparenceItem(100));
+
+ pView->MarkAll();
GDIMetaFile aMeta(pView->GetAllMarkedMetaFile());
aSymbolGraphic=Graphic(aMeta);
aSymbolSize=pObj->GetSnapRect().GetSize();
- aSymbolGraphic.SetPrefSize(aSymbolSize);
+ aSymbolGraphic.SetPrefSize(pInvisibleSquare->GetSnapRect().GetSize());
aSymbolGraphic.SetPrefMapMode(MAP_100TH_MM);
bPrevSym=sal_True;
bEnable=sal_True;
bIgnoreGraphic=sal_True;
pView->UnmarkAll();
+ pInvisibleSquare=pPage->RemoveObject(1);
+ SdrObject::Free( pInvisibleSquare);
pObj=pPage->RemoveObject(0);
SdrObject::Free( pObj );
}
@@ -957,12 +969,12 @@ void SvxLineTabPage::Reset( const SfxItemSet& rAttrs )
bPrevSym=sal_True;
}
}
+
if(rAttrs.GetItemState(rAttrs.GetPool()->GetWhich(SID_ATTR_SYMBOLSIZE),sal_True,&pPoolItem) == SFX_ITEM_SET)
{
aSymbolSize = ((const SvxSizeItem *)pPoolItem)->GetSize();
}
-
aSymbolRatioCB.Enable(bEnable);
aSymbolHeightFT.Enable(bEnable);
aSymbolWidthFT.Enable(bEnable);
@@ -1537,6 +1549,15 @@ IMPL_LINK( SvxLineTabPage, MenuCreateHdl_Impl, MenuButton *, pButton )
PopupMenu* pPopup = new PopupMenu;
String aEmptyStr;
+
+ // Generate invisible square to give all symbols a
+ // bitmap size, which is indepedent from specific glyph
+ SdrObject *pInvisibleSquare=pSymbolList->GetObj(0);
+ pInvisibleSquare=pInvisibleSquare->Clone();
+ pPage->NbcInsertObject(pInvisibleSquare);
+ pInvisibleSquare->SetMergedItem(XFillTransparenceItem(100));
+ pInvisibleSquare->SetMergedItem(XLineTransparenceItem(100));
+
for(long i=0;; ++i)
{
SdrObject *pObj=pSymbolList->GetObj(i);
@@ -1545,7 +1566,6 @@ IMPL_LINK( SvxLineTabPage, MenuCreateHdl_Impl, MenuButton *, pButton )
pObj=pObj->Clone();
aGrfNames.push_back(aEmptyStr);
pPage->NbcInsertObject(pObj);
- pView->MarkObj(pObj,pPageView);
if(pSymbolAttr)
{
pObj->SetMergedItemSet(*pSymbolAttr);
@@ -1554,11 +1574,11 @@ IMPL_LINK( SvxLineTabPage, MenuCreateHdl_Impl, MenuButton *, pButton )
{
pObj->SetMergedItemSet(rOutAttrs);
}
-
+ pView->MarkAll();
Bitmap aBitmap(pView->GetAllMarkedBitmap());
GDIMetaFile aMeta(pView->GetAllMarkedMetaFile());
pView->UnmarkAll();
- pObj=pPage->RemoveObject(0);
+ pObj=pPage->RemoveObject(1);
SdrObject::Free(pObj);
SvxBrushItem* pBrushItem = new SvxBrushItem(Graphic(aMeta), GPOS_AREA, SID_ATTR_BRUSH);
@@ -1585,6 +1605,9 @@ IMPL_LINK( SvxLineTabPage, MenuCreateHdl_Impl, MenuButton *, pButton )
Image aImage(aBitmap);
pPopup->InsertItem(pInfo->nItemId,aEmptyStr,aImage);
}
+ pInvisibleSquare=pPage->RemoveObject(0);
+ SdrObject::Free(pInvisibleSquare);
+
aSymbolMB.GetPopupMenu()->SetPopupMenu( MN_SYMBOLS, pPopup );
if(aGrfNames.empty())
diff --git a/oox/source/drawingml/chart/typegroupconverter.cxx b/oox/source/drawingml/chart/typegroupconverter.cxx
index 5dba350de392..39246947420d 100644
--- a/oox/source/drawingml/chart/typegroupconverter.cxx
+++ b/oox/source/drawingml/chart/typegroupconverter.cxx
@@ -451,19 +451,19 @@ void TypeGroupConverter::convertMarker( PropertySet& rPropSet, sal_Int32 nOoxSym
// symbol style
cssc::Symbol aSymbol;
aSymbol.Style = cssc::SymbolStyle_STANDARD;
- switch( nOoxSymbol )
+ switch( nOoxSymbol ) // compare with XclChPropSetHelper::WriteMarkerProperties in xlchart.cxx
{
case XML_auto: aSymbol.Style = cssc::SymbolStyle_AUTO; break;
case XML_none: aSymbol.Style = cssc::SymbolStyle_NONE; break;
case XML_square: aSymbol.StandardSymbol = 0; break; // square
case XML_diamond: aSymbol.StandardSymbol = 1; break; // diamond
case XML_triangle: aSymbol.StandardSymbol = 3; break; // arrow up
- case XML_x: aSymbol.StandardSymbol = 6; break; // bow tie
- case XML_star: aSymbol.StandardSymbol = 7; break; // sand glass
+ case XML_x: aSymbol.StandardSymbol = 10; break; // X, legacy bow tie
+ case XML_star: aSymbol.StandardSymbol = 12; break; // asterisk, legacy sand glass
case XML_dot: aSymbol.StandardSymbol = 4; break; // arrow right
- case XML_dash: aSymbol.StandardSymbol = 2; break; // arrow down
- case XML_circle: aSymbol.StandardSymbol = 4; break; // arrow right
- case XML_plus: aSymbol.StandardSymbol = 5; break; // arrow left
+ case XML_dash: aSymbol.StandardSymbol = 13; break; // horizontal bar, legacy arrow down
+ case XML_circle: aSymbol.StandardSymbol = 8; break; // circle, legacy arrow right
+ case XML_plus: aSymbol.StandardSymbol = 11; break; // plus, legacy arrow left
}
// symbol size (points in OOXML, 1/100 mm in Chart2)
diff --git a/sc/source/filter/excel/xlchart.cxx b/sc/source/filter/excel/xlchart.cxx
index 6a71736aecc5..bffe9aeb287f 100644
--- a/sc/source/filter/excel/xlchart.cxx
+++ b/sc/source/filter/excel/xlchart.cxx
@@ -944,10 +944,17 @@ void XclChPropSetHelper::ReadMarkerProperties(
case 1: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_DIAMOND; break; // diamond
case 2: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STDDEV; break; // arrow down
case 3: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_TRIANGLE; break; // arrow up
- case 4: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_CIRCLE; break; // arrow right
+ case 4: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_DOWJ; break; // arrow right, same as import
case 5: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_PLUS; break; // arrow left
case 6: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_CROSS; break; // bow tie
case 7: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STAR; break; // sand glass
+ case 8: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_CIRCLE; break; // circle new in LibO3.5
+ case 9: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_DIAMOND; break; // star new in LibO3.5
+ case 10: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_CROSS; break; // X new in LibO3.5
+ case 11: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_PLUS; break; // plus new in LibO3.5
+ case 12: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STAR; break; // asterisk new in LibO3.5
+ case 13: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STDDEV; break; // horizontal bar new in LibO3.5
+ case 14: rMarkerFmt.mnMarkerType = EXC_CHMARKERFORMAT_STAR; break; // vertical bar new in LibO3.5
default: rMarkerFmt.mnMarkerType = XclChartHelper::GetAutoMarkerType( nFormatIdx );
}
break;
@@ -1153,12 +1160,13 @@ void XclChPropSetHelper::WriteMarkerProperties(
case EXC_CHMARKERFORMAT_SQUARE: aApiSymbol.StandardSymbol = 0; break; // square
case EXC_CHMARKERFORMAT_DIAMOND: aApiSymbol.StandardSymbol = 1; break; // diamond
case EXC_CHMARKERFORMAT_TRIANGLE: aApiSymbol.StandardSymbol = 3; break; // arrow up
- case EXC_CHMARKERFORMAT_CROSS: aApiSymbol.StandardSymbol = 6; break; // bow tie
- case EXC_CHMARKERFORMAT_STAR: aApiSymbol.StandardSymbol = 7; break; // sand glass
- case EXC_CHMARKERFORMAT_DOWJ: aApiSymbol.StandardSymbol = 4; break; // arrow right
- case EXC_CHMARKERFORMAT_STDDEV: aApiSymbol.StandardSymbol = 2; break; // arrow down
- case EXC_CHMARKERFORMAT_CIRCLE: aApiSymbol.StandardSymbol = 4; break; // arrow right
- case EXC_CHMARKERFORMAT_PLUS: aApiSymbol.StandardSymbol = 5; break; // arrow left
+ case EXC_CHMARKERFORMAT_CROSS: aApiSymbol.StandardSymbol = 10; break; // X, legacy bow tie
+ case EXC_CHMARKERFORMAT_STAR: aApiSymbol.StandardSymbol = 12; break; // asterisk, legacy sand glass
+ case EXC_CHMARKERFORMAT_DOWJ: aApiSymbol.StandardSymbol = 4; break; // arrow right, same as export
+ case EXC_CHMARKERFORMAT_STDDEV: aApiSymbol.StandardSymbol = 13; break; // horizontal bar, legacy arrow down
+ case EXC_CHMARKERFORMAT_CIRCLE: aApiSymbol.StandardSymbol = 8; break; // circle, legacy arrow right
+ case EXC_CHMARKERFORMAT_PLUS: aApiSymbol.StandardSymbol = 11; break; // plus, legacy arrow left
+ default: break;
}
// symbol size
diff --git a/xmloff/inc/xmloff/xmltoken.hxx b/xmloff/inc/xmloff/xmltoken.hxx
index a923f467ea2d..746e75d63d31 100644
--- a/xmloff/inc/xmloff/xmltoken.hxx
+++ b/xmloff/inc/xmloff/xmltoken.hxx
@@ -3139,6 +3139,12 @@ namespace xmloff { namespace token {
XML_MARGIN, // #i117001#
+ // regina, ODF1.2 additional symbols in charts
+ XML_STAR,
+ XML_ASTERISK,
+ XML_HORIZONTAL_BAR,
+ XML_VERTICAL_BAR,
+
XML_TOKEN_END
};
diff --git a/xmloff/source/chart/XMLSymbolTypePropertyHdl.cxx b/xmloff/source/chart/XMLSymbolTypePropertyHdl.cxx
index 4eba27eb4307..c284c57e96f1 100644
--- a/xmloff/source/chart/XMLSymbolTypePropertyHdl.cxx
+++ b/xmloff/source/chart/XMLSymbolTypePropertyHdl.cxx
@@ -63,6 +63,13 @@ SvXMLSignedEnumMapEntry aXMLChartSymbolNameMap[] =
{ XML_ARROW_LEFT, 5 },
{ XML_BOW_TIE, 6 },
{ XML_HOURGLASS, 7 },
+ { XML_CIRCLE, 8 },
+ { XML_STAR, 9 },
+ { XML_X, 10 },
+ { XML_PLUS, 11 },
+ { XML_ASTERISK, 12 },
+ { XML_HORIZONTAL_BAR, 13 },
+ { XML_VERTICAL_BAR, 14 },
{ XML_TOKEN_INVALID, 0 }
};
diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx
index b07e77a9bedf..45bcc35d82bf 100644
--- a/xmloff/source/core/xmltoken.cxx
+++ b/xmloff/source/core/xmltoken.cxx
@@ -3137,6 +3137,12 @@ namespace xmloff { namespace token {
TOKEN( "margin", XML_MARGIN),
+ // regina, ODF1.2 additional symbols in charts
+ TOKEN( "star", XML_STAR ),
+ TOKEN( "asterisk", XML_ASTERISK ),
+ TOKEN( "horizontal-bar", XML_HORIZONTAL_BAR ),
+ TOKEN( "vertical-bar", XML_VERTICAL_BAR ),
+
#if OSL_DEBUG_LEVEL > 0
{ 0, NULL, NULL, XML_TOKEN_END }
#else
diff --git a/xmloff/source/transform/StyleOASISTContext.cxx b/xmloff/source/transform/StyleOASISTContext.cxx
index 2ef42bf0dfe2..b6e361f9754e 100644
--- a/xmloff/source/transform/StyleOASISTContext.cxx
+++ b/xmloff/source/transform/StyleOASISTContext.cxx
@@ -389,6 +389,20 @@ void XMLPropertiesTContext_Impl::StartElement(
nSymbolType = 6;
else if( IsXMLToken( rAttrValue, XML_HOURGLASS ))
nSymbolType = 7;
+ else if( IsXMLToken( rAttrValue, XML_CIRCLE ))
+ nSymbolType = 8;
+ else if( IsXMLToken( rAttrValue, XML_STAR ))
+ nSymbolType = 9;
+ else if( IsXMLToken( rAttrValue, XML_X ))
+ nSymbolType = 10;
+ else if( IsXMLToken( rAttrValue, XML_PLUS ))
+ nSymbolType = 11;
+ else if( IsXMLToken( rAttrValue, XML_ASTERISK ))
+ nSymbolType = 12;
+ else if( IsXMLToken( rAttrValue, XML_HORIZONTAL_BAR ))
+ nSymbolType = 13;
+ else if( IsXMLToken( rAttrValue, XML_VERTICAL_BAR ))
+ nSymbolType = 14;
if( nSymbolType >= 0 )
pAttrList->AddAttribute(
diff --git a/xmloff/source/transform/StyleOOoTContext.cxx b/xmloff/source/transform/StyleOOoTContext.cxx
index f74ebdeeda31..88cff6bbf080 100644
--- a/xmloff/source/transform/StyleOOoTContext.cxx
+++ b/xmloff/source/transform/StyleOOoTContext.cxx
@@ -772,6 +772,27 @@ void XMLPropertiesOOoTContext_Impl::StartElement(
case 7:
eToken = XML_HOURGLASS;
break;
+ case 8:
+ eToken = XML_CIRCLE;
+ break;
+ case 9:
+ eToken = XML_STAR;
+ break;
+ case 10:
+ eToken = XML_X;
+ break;
+ case 11:
+ eToken = XML_PLUS;
+ break;
+ case 12:
+ eToken = XML_ASTERISK;
+ break;
+ case 13:
+ eToken = XML_HORIZONTAL_BAR;
+ break;
+ case 14:
+ eToken = XML_VERTICAL_BAR;
+ break;
default:
OSL_FAIL( "invalid named symbol" );
break;