Add missing chart data point ODF1.2 standard symbols

This commit is contained in:
Regina Henschel
2011-09-09 15:02:34 +02:00
committed by Kohei Yoshida
parent 53abf4dc1c
commit 3e5edf6ca9
10 changed files with 429 additions and 21 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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())

View File

@@ -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)

View File

@@ -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

View File

@@ -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
};

View File

@@ -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 }
};

View File

@@ -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

View File

@@ -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(

View File

@@ -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;