Lines 293-300
Link Here
|
293 |
rVector.resize( m_nLevel ); |
293 |
rVector.resize( m_nLevel ); |
294 |
|
294 |
|
295 |
vector< uno::Any >::iterator aIt( rVector.begin() ); |
295 |
vector< uno::Any >::iterator aIt( rVector.begin() ); |
296 |
for( sal_Int32 nN=0; aIt<rVector.end(); aIt++, nN++) |
296 |
for( sal_Int32 nN=1; aIt<rVector.end(); aIt++, nN++) |
297 |
{ |
297 |
{ |
298 |
if( nN==m_nLevel ) |
298 |
if( nN==m_nLevel ) |
299 |
break; |
299 |
break; |
300 |
} |
300 |
} |
Lines 315-322
Link Here
|
315 |
void operator() ( vector< uno::Any >& rVector ) |
315 |
void operator() ( vector< uno::Any >& rVector ) |
316 |
{ |
316 |
{ |
317 |
vector< uno::Any >::iterator aIt( rVector.begin() ); |
317 |
vector< uno::Any >::iterator aIt( rVector.begin() ); |
318 |
for( sal_Int32 nN=0; aIt<rVector.end(); aIt++, nN++) |
318 |
for( sal_Int32 nN=1; aIt<rVector.end(); aIt++, nN++) |
319 |
{ |
319 |
{ |
320 |
if( nN==m_nLevel ) |
320 |
if( nN==m_nLevel ) |
321 |
{ |
321 |
{ |
322 |
rVector.erase( aIt ); |
322 |
rVector.erase( aIt ); |
Lines 513-518
Link Here
|
513 |
return xSeq; |
513 |
return xSeq; |
514 |
} |
514 |
} |
515 |
|
515 |
|
|
|
516 |
Reference< chart2::data::XDataSequence > InternalDataProvider::lcl_createDataSequenceAndAddToMapByRole( |
517 |
const OUString & rRangeRepresentation ,const sal_Bool bCategory) |
518 |
{ |
519 |
OUString aRangeRepresentation = rRangeRepresentation; |
520 |
if( aRangeRepresentation.indexOf('{') >= 0 ) |
521 |
{ |
522 |
::std::vector< double > aNewData; |
523 |
::std::vector< uno::Any > aNewLabels; |
524 |
OUString aToken; |
525 |
sal_Int32 nCategories = 0; |
526 |
sal_Int32 nIndex = 0; |
527 |
bool bValues = true; |
528 |
bool bLabelSet = false; |
529 |
|
530 |
OUString str = aRangeRepresentation.replace('{',' ').replace('}',' '); |
531 |
|
532 |
m_aInternalData.clearDefaultData(); |
533 |
sal_Int32 n = m_aInternalData.getColumnCount(); |
534 |
|
535 |
if( n ) |
536 |
n = n - 1; |
537 |
|
538 |
do |
539 |
{ |
540 |
// TODO: This will be problematic if ';' is used in label names |
541 |
// '"' character also needs to be considered in such cases |
542 |
aToken = str.getToken(0,';',nIndex); |
543 |
if( !aToken.getLength() ) |
544 |
break; |
545 |
if( aToken.indexOf('"') < 0 ) |
546 |
{ |
547 |
if( !bCategory ) |
548 |
aNewData.push_back( aToken.toDouble() ); |
549 |
else |
550 |
{ |
551 |
aNewLabels.push_back( uno::makeAny(aToken.toDouble()) ); |
552 |
if( !nCategories && |
553 |
( !m_aInternalData.getComplexColumnLabel(n).size() || |
554 |
!m_aInternalData.getComplexColumnLabel(n).front().hasValue() ) ) |
555 |
{ |
556 |
m_aInternalData.setComplexColumnLabel( n, aNewLabels ); |
557 |
bLabelSet = true; |
558 |
} |
559 |
else |
560 |
{ |
561 |
m_aInternalData.setComplexRowLabel(nCategories, aNewLabels); |
562 |
if(nCategories==1 && bLabelSet) |
563 |
{ |
564 |
::std::vector< uno::Any > aLabels; |
565 |
m_aInternalData.setComplexRowLabel( 0, m_aInternalData.getComplexColumnLabel( n ) ); |
566 |
m_aInternalData.setComplexColumnLabel( n, aLabels ); |
567 |
} |
568 |
} |
569 |
aNewLabels.pop_back(); |
570 |
nCategories++; |
571 |
bValues = false; |
572 |
} |
573 |
} |
574 |
else |
575 |
{ |
576 |
aNewLabels.push_back( uno::makeAny(aToken.replace('"', ' ').trim()) ); |
577 |
|
578 |
if( !nCategories && |
579 |
( !m_aInternalData.getComplexColumnLabel(n).size() || |
580 |
!m_aInternalData.getComplexColumnLabel(n).front().hasValue() ) ) |
581 |
{ |
582 |
m_aInternalData.setComplexColumnLabel( n, aNewLabels ); |
583 |
bLabelSet = true; |
584 |
} |
585 |
else |
586 |
{ |
587 |
m_aInternalData.setComplexRowLabel(nCategories, aNewLabels); |
588 |
if(nCategories==1 && bLabelSet) |
589 |
{ |
590 |
::std::vector< uno::Any > aLabels; |
591 |
m_aInternalData.setComplexRowLabel( 0, m_aInternalData.getComplexColumnLabel( n ) ); |
592 |
m_aInternalData.setComplexColumnLabel( n, aLabels ); |
593 |
} |
594 |
} |
595 |
aNewLabels.pop_back(); |
596 |
nCategories++; |
597 |
bValues = false; |
598 |
} |
599 |
} while( nIndex >= 0 ); |
600 |
|
601 |
if( bValues ) |
602 |
{ |
603 |
m_aInternalData.insertColumn( n ); |
604 |
m_aInternalData.setColumnValues( n, aNewData ); |
605 |
aRangeRepresentation = OUString::valueOf( n ); |
606 |
} |
607 |
else if( nCategories > 1 ) |
608 |
{ |
609 |
aRangeRepresentation = lcl_aCategoriesRangeName; |
610 |
} |
611 |
else |
612 |
{ |
613 |
aRangeRepresentation = lcl_aLabelRangePrefix+OUString::valueOf( n ); |
614 |
} |
615 |
} |
616 |
|
617 |
Reference< chart2::data::XDataSequence > xSeq( |
618 |
new UncachedDataSequence( this, aRangeRepresentation )); |
619 |
lcl_addDataSequenceToMap( aRangeRepresentation, xSeq ); |
620 |
return xSeq; |
621 |
} |
622 |
//// |
516 |
Reference< chart2::data::XDataSequence > InternalDataProvider::lcl_createDataSequenceAndAddToMap( |
623 |
Reference< chart2::data::XDataSequence > InternalDataProvider::lcl_createDataSequenceAndAddToMap( |
517 |
const OUString & rRangeRepresentation, |
624 |
const OUString & rRangeRepresentation, |
518 |
const OUString & rRole ) |
625 |
const OUString & rRole ) |
Lines 676-681
Link Here
|
676 |
return true; |
783 |
return true; |
677 |
} |
784 |
} |
678 |
|
785 |
|
|
|
786 |
Reference< chart2::data::XDataSequence > InternalDataProvider::createDataSequenceByRangeRepresentationAndRole( |
787 |
const OUString& aRangeRepresentation ,const sal_Bool bCatogory ) |
788 |
{ |
789 |
if( aRangeRepresentation.match( lcl_aCategoriesRangeName )) |
790 |
{ |
791 |
OSL_ASSERT( aRangeRepresentation.equals( lcl_aCategoriesRangeName ) );//it is not expected nor implmented that only parts of the categories are really requested |
792 |
|
793 |
// categories |
794 |
return lcl_createDataSequenceAndAddToMap( lcl_aCategoriesRangeName, lcl_aCategoriesRoleName ); |
795 |
} |
796 |
else if( aRangeRepresentation.match( lcl_aLabelRangePrefix )) |
797 |
{ |
798 |
// label |
799 |
sal_Int32 nIndex = aRangeRepresentation.copy( lcl_aLabelRangePrefix.getLength()).toInt32(); |
800 |
return lcl_createDataSequenceAndAddToMap( lcl_aLabelRangePrefix + OUString::valueOf( nIndex )); |
801 |
} |
802 |
else if( aRangeRepresentation.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "last" ))) |
803 |
{ |
804 |
sal_Int32 nIndex = (m_bDataInColumns |
805 |
? m_aInternalData.getColumnCount() |
806 |
: m_aInternalData.getRowCount()) - 1; |
807 |
return lcl_createDataSequenceAndAddToMap( OUString::valueOf( nIndex )); |
808 |
} |
809 |
else if( aRangeRepresentation.getLength()) |
810 |
{ |
811 |
return lcl_createDataSequenceAndAddToMapByRole( aRangeRepresentation ,bCatogory ); |
812 |
} |
813 |
|
814 |
return Reference< chart2::data::XDataSequence >(); |
815 |
} |
816 |
|
817 |
|
679 |
Reference< chart2::data::XDataSequence > SAL_CALL InternalDataProvider::createDataSequenceByRangeRepresentation( |
818 |
Reference< chart2::data::XDataSequence > SAL_CALL InternalDataProvider::createDataSequenceByRangeRepresentation( |
680 |
const OUString& aRangeRepresentation ) |
819 |
const OUString& aRangeRepresentation ) |
681 |
throw (lang::IllegalArgumentException, |
820 |
throw (lang::IllegalArgumentException, |
Lines 706-713
Link Here
|
706 |
// data |
845 |
// data |
707 |
sal_Int32 nIndex = aRangeRepresentation.toInt32(); |
846 |
sal_Int32 nIndex = aRangeRepresentation.toInt32(); |
708 |
return lcl_createDataSequenceAndAddToMap( OUString::valueOf( nIndex )); |
847 |
return lcl_createDataSequenceAndAddToMap( OUString::valueOf( nIndex )); |
|
|
848 |
|
709 |
} |
849 |
} |
710 |
|
|
|
711 |
return Reference< chart2::data::XDataSequence >(); |
850 |
return Reference< chart2::data::XDataSequence >(); |
712 |
} |
851 |
} |
713 |
|
852 |
|