summaryrefslogtreecommitdiff
path: root/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx')
-rw-r--r--chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx276
1 files changed, 276 insertions, 0 deletions
diff --git a/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx b/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx
new file mode 100644
index 000000000000..2fee8702e6d8
--- /dev/null
+++ b/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx
@@ -0,0 +1,276 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_chart2.hxx"
+#include "RegressionCurveHelper.hxx"
+#include "RegressionCurveItemConverter.hxx"
+#include "SchWhichPairs.hxx"
+#include "macros.hxx"
+#include "ItemPropertyMap.hxx"
+#include "GraphicPropertyItemConverter.hxx"
+
+#include <com/sun/star/chart2/XRegressionCurve.hpp>
+
+// for SfxBoolItem
+#include <svl/eitem.hxx>
+#include <svx/chrtitem.hxx>
+
+#include <functional>
+#include <algorithm>
+
+using namespace ::com::sun::star;
+
+namespace
+{
+
+::chart::RegressionCurveHelper::tRegressionType lcl_convertRegressionType( SvxChartRegress eRegress )
+{
+ ::chart::RegressionCurveHelper::tRegressionType eType = ::chart::RegressionCurveHelper::REGRESSION_TYPE_NONE;
+ switch( eRegress )
+ {
+ case CHREGRESS_LINEAR:
+ eType = ::chart::RegressionCurveHelper::REGRESSION_TYPE_LINEAR;
+ break;
+ case CHREGRESS_LOG:
+ eType = ::chart::RegressionCurveHelper::REGRESSION_TYPE_LOG;
+ break;
+ case CHREGRESS_EXP:
+ eType = ::chart::RegressionCurveHelper::REGRESSION_TYPE_EXP;
+ break;
+ case CHREGRESS_POWER:
+ eType = ::chart::RegressionCurveHelper::REGRESSION_TYPE_POWER;
+ break;
+ case CHREGRESS_NONE:
+ break;
+ }
+ return eType;
+}
+
+} // anonymous namespace
+
+namespace chart
+{
+namespace wrapper
+{
+
+RegressionCurveItemConverter::RegressionCurveItemConverter(
+ const uno::Reference< beans::XPropertySet > & rPropertySet,
+ const uno::Reference< chart2::XRegressionCurveContainer > & xRegCurveCnt,
+ SfxItemPool& rItemPool,
+ SdrModel& rDrawModel,
+ const uno::Reference< lang::XMultiServiceFactory > & xNamedPropertyContainerFactory ) :
+ ItemConverter( rPropertySet, rItemPool ),
+ m_spGraphicConverter( new GraphicPropertyItemConverter(
+ rPropertySet, rItemPool, rDrawModel,
+ xNamedPropertyContainerFactory,
+ GraphicPropertyItemConverter::LINE_PROPERTIES )),
+ m_xCurveContainer( xRegCurveCnt )
+{}
+
+RegressionCurveItemConverter::~RegressionCurveItemConverter()
+{}
+
+void RegressionCurveItemConverter::FillItemSet( SfxItemSet & rOutItemSet ) const
+{
+ m_spGraphicConverter->FillItemSet( rOutItemSet );
+
+ // own items
+ ItemConverter::FillItemSet( rOutItemSet );
+}
+
+bool RegressionCurveItemConverter::ApplyItemSet( const SfxItemSet & rItemSet )
+{
+ bool bResult = m_spGraphicConverter->ApplyItemSet( rItemSet );
+
+ // own items
+ return ItemConverter::ApplyItemSet( rItemSet ) || bResult;
+}
+
+const USHORT * RegressionCurveItemConverter::GetWhichPairs() const
+{
+ // must span all used items!
+ return nRegressionCurveWhichPairs;
+}
+
+bool RegressionCurveItemConverter::GetItemProperty(
+ tWhichIdType /* nWhichId */, tPropertyNameWithMemberId & /* rOutProperty */ ) const
+{
+ // No own (non-special) properties
+ return false;
+}
+
+
+bool RegressionCurveItemConverter::ApplySpecialItem(
+ USHORT nWhichId, const SfxItemSet & rItemSet )
+ throw( uno::Exception )
+{
+ uno::Reference< chart2::XRegressionCurve > xCurve( GetPropertySet(), uno::UNO_QUERY );
+ bool bChanged = false;
+
+ switch( nWhichId )
+ {
+ case SCHATTR_REGRESSION_TYPE:
+ {
+ OSL_ASSERT( xCurve.is());
+ if( xCurve.is())
+ {
+ SvxChartRegress eRegress = static_cast< SvxChartRegress >(
+ static_cast< sal_Int32 >( RegressionCurveHelper::getRegressionType( xCurve )));
+ SvxChartRegress eNewRegress = static_cast< const SvxChartRegressItem & >(
+ rItemSet.Get( nWhichId )).GetValue();
+ if( eRegress != eNewRegress )
+ {
+ // note that changing the regression type changes the object
+ // for which this converter was created. Not optimal, but
+ // currently the only way to handle the type in the
+ // regression curve properties dialog
+ RegressionCurveHelper::replaceOrAddCurveAndReduceToOne(
+ lcl_convertRegressionType( eNewRegress ), m_xCurveContainer,
+ uno::Reference< uno::XComponentContext >());
+ uno::Reference< beans::XPropertySet > xNewPropSet(
+ RegressionCurveHelper::getFirstCurveNotMeanValueLine( m_xCurveContainer ),
+ uno::UNO_QUERY );
+ OSL_ASSERT( xNewPropSet.is());
+ if( xNewPropSet.is())
+ {
+ resetPropertySet( xNewPropSet );
+ bChanged = true;
+ }
+ }
+ }
+ }
+ break;
+
+ case SCHATTR_REGRESSION_SHOW_EQUATION:
+ {
+ OSL_ASSERT( xCurve.is());
+ if( xCurve.is())
+ {
+ bool bNewShow = static_cast< BOOL >(
+ static_cast< const SfxBoolItem & >(
+ rItemSet.Get( nWhichId )).GetValue());
+
+ uno::Reference< beans::XPropertySet > xEqProp( xCurve->getEquationProperties());
+ OSL_ASSERT( xEqProp.is());
+ bool bOldShow = false;
+ if( xEqProp.is() &&
+ (xEqProp->getPropertyValue( C2U( "ShowEquation" )) >>= bOldShow) &&
+ bOldShow != bNewShow )
+ {
+ xEqProp->setPropertyValue( C2U( "ShowEquation" ), uno::makeAny( bNewShow ));
+ bChanged = true;
+ }
+ }
+ }
+ break;
+
+ case SCHATTR_REGRESSION_SHOW_COEFF:
+ {
+ OSL_ASSERT( xCurve.is());
+ if( xCurve.is())
+ {
+ bool bNewShow = static_cast< BOOL >(
+ static_cast< const SfxBoolItem & >(
+ rItemSet.Get( nWhichId )).GetValue());
+
+ uno::Reference< beans::XPropertySet > xEqProp( xCurve->getEquationProperties());
+ OSL_ASSERT( xEqProp.is());
+ bool bOldShow = false;
+ if( xEqProp.is() &&
+ (xEqProp->getPropertyValue( C2U( "ShowCorrelationCoefficient" )) >>= bOldShow) &&
+ bOldShow != bNewShow )
+ {
+ xEqProp->setPropertyValue( C2U( "ShowCorrelationCoefficient" ), uno::makeAny( bNewShow ));
+ bChanged = true;
+ }
+ }
+ }
+ break;
+ }
+
+ return bChanged;
+}
+
+void RegressionCurveItemConverter::FillSpecialItem(
+ USHORT nWhichId, SfxItemSet & rOutItemSet ) const
+ throw( uno::Exception )
+{
+ uno::Reference< chart2::XRegressionCurve > xCurve( GetPropertySet(), uno::UNO_QUERY );
+
+ switch( nWhichId )
+ {
+ case SCHATTR_REGRESSION_TYPE:
+ {
+ OSL_ASSERT( xCurve.is());
+ if( xCurve.is())
+ {
+ SvxChartRegress eRegress = static_cast< SvxChartRegress >(
+ static_cast< sal_Int32 >( RegressionCurveHelper::getRegressionType( xCurve )));
+ rOutItemSet.Put( SvxChartRegressItem( eRegress, SCHATTR_REGRESSION_TYPE ));
+ }
+ }
+ break;
+
+ case SCHATTR_REGRESSION_SHOW_EQUATION:
+ {
+ OSL_ASSERT( xCurve.is());
+ if( xCurve.is())
+ {
+ uno::Reference< beans::XPropertySet > xEqProp( xCurve->getEquationProperties());
+ OSL_ASSERT( xEqProp.is());
+ bool bShow = false;
+ if( xEqProp.is() &&
+ (xEqProp->getPropertyValue( C2U( "ShowEquation" )) >>= bShow))
+ {
+ rOutItemSet.Put( SfxBoolItem( nWhichId, bShow ));
+ }
+ }
+ }
+ break;
+
+ case SCHATTR_REGRESSION_SHOW_COEFF:
+ {
+ OSL_ASSERT( xCurve.is());
+ if( xCurve.is())
+ {
+ uno::Reference< beans::XPropertySet > xEqProp( xCurve->getEquationProperties());
+ OSL_ASSERT( xEqProp.is());
+ bool bShow = false;
+ if( xEqProp.is() &&
+ (xEqProp->getPropertyValue( C2U( "ShowCorrelationCoefficient" )) >>= bShow))
+ {
+ rOutItemSet.Put( SfxBoolItem( nWhichId, bShow ));
+ }
+ }
+ }
+ break;
+ }
+}
+
+} // namespace wrapper
+} // namespace chart