summaryrefslogtreecommitdiffstats
path: root/chart2/source/controller/inc/ItemConverter.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'chart2/source/controller/inc/ItemConverter.hxx')
-rw-r--r--chart2/source/controller/inc/ItemConverter.hxx185
1 files changed, 185 insertions, 0 deletions
diff --git a/chart2/source/controller/inc/ItemConverter.hxx b/chart2/source/controller/inc/ItemConverter.hxx
new file mode 100644
index 0000000000..031a633c22
--- /dev/null
+++ b/chart2/source/controller/inc/ItemConverter.hxx
@@ -0,0 +1,185 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#pragma once
+
+#include <unotools/eventlisteneradapter.hxx>
+#include <svl/itemset.hxx>
+
+#include <utility>
+
+namespace com::sun::star::beans { class XPropertySet; }
+namespace com::sun::star::beans { class XPropertySetInfo; }
+
+namespace chart::wrapper {
+
+
+/** This class serves for conversion between properties of an XPropertySet and
+ SfxItems in SfxItemSets.
+
+ With this helper classes, you can feed dialogs with XPropertySets and let
+ those modify by the dialogs.
+
+ You must implement GetWhichPairs() such that an SfxItemSet created with
+ CreateEmptyItemSet() is able to hold all items that may be mapped.
+
+ You also have to implement GetItemProperty(), in order to return the
+ property name for a given which-id together with the corresponding member-id
+ that has to be used for conversion in QueryValue/PutValue.
+
+ FillSpecialItem and ApplySpecialItem may be used for special handling of
+ individual item, e.g. if you need member-ids in QueryValue/PutValue
+
+ A typical use could be the following:
+
+ ::comphelper::ChartTypeItemConverter aItemConverter( xPropertySet, GetItemPool() );
+ SfxItemSet aItemSet = aItemConverter.CreateEmptyItemSet();
+ aItemConverter.FillItemSet( aItemSet );
+ bool bChanged = false;
+
+ MyDialog aDlg( aItemSet );
+ if( aDlg.Execute() == RET_OK )
+ {
+ const SfxItemSet* pOutItemSet = aDlg.GetOutputItemSet();
+ if( pOutItemSet )
+ bChanged = aItemConverter.ApplyItemSet( *pOutItemSet );
+ }
+
+ if( bChanged )
+ {
+ [ apply model changes to view ]
+ }
+ */
+class ItemConverter :
+ public ::utl::OEventListenerAdapter
+{
+public:
+ /** Construct an item converter that uses the given property set for
+ reading/writing converted items
+ */
+ ItemConverter(
+ css::uno::Reference< css::beans::XPropertySet > xPropertySet ,
+ SfxItemPool& rItemPool );
+ virtual ~ItemConverter() override;
+
+ typedef sal_uInt16 tWhichIdType;
+ typedef OUString tPropertyNameType;
+ typedef sal_uInt8 tMemberIdType;
+
+ typedef std::pair< tPropertyNameType, tMemberIdType > tPropertyNameWithMemberId;
+
+ /** applies all properties that can be mapped to items into the given item
+ set.
+
+ Call this method before opening a dialog.
+
+ @param rOutItemSet
+ the SfxItemSet is filled with all items that are a result of a
+ conversion from a property of the internal XPropertySet.
+ */
+ virtual void FillItemSet( SfxItemSet & rOutItemSet ) const;
+
+ /** applies all properties that are results of a conversion from all items
+ in rItemSet to the internal XPropertySet.
+
+ Call this method after a dialog was closed with OK
+
+ @return true, if any properties have been changed, false otherwise.
+ */
+ virtual bool ApplyItemSet( const SfxItemSet & rItemSet );
+
+ /** creates an empty item set using the given pool or a common pool if empty
+ (see GetItemPool) and allowing all items given in the ranges returned by
+ GetWhichPairs.
+ */
+ SfxItemSet CreateEmptyItemSet() const;
+
+ /** Invalidates all items in rDestSet, that are set (state SfxItemState::SET) in
+ both item sets (rDestSet and rSourceSet) and have differing content.
+ */
+ static void InvalidateUnequalItems( SfxItemSet &rDestSet, const SfxItemSet &rSourceSet );
+
+protected:
+
+ /** implement this method to provide an array of which-ranges
+ */
+ virtual const WhichRangesContainer& GetWhichPairs() const = 0;
+
+ /** implement this method to return a Property object for a given which id.
+
+ @param rOutProperty
+ If true is returned, this contains the property name and the
+ corresponding Member-Id.
+
+ @return true, if the item can be mapped to a property.
+ */
+ virtual bool GetItemProperty( tWhichIdType nWhichId, tPropertyNameWithMemberId & rOutProperty ) const = 0;
+
+ /** for items that can not be mapped directly to a property.
+
+ This method is called from FillItemSet(), if GetItemProperty() returns
+ false.
+
+ The default implementation does nothing except showing an assertion
+
+ @throws css::uno::Exception
+ */
+ virtual void FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const;
+
+ /** for items that can not be mapped directly to a property.
+
+ This method is called from ApplyItemSet(), if GetItemProperty() returns
+ false.
+
+ The default implementation returns just false and shows an assertion
+
+ @return true if the item changed a property, false otherwise.
+
+ @throws css::uno::Exception
+ */
+ virtual bool ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet & rItemSet );
+
+ /// Returns the pool
+ SfxItemPool & GetItemPool() const { return m_rItemPool;}
+
+ /** Returns the XPropertySet that was given in the CTOR and is used to apply
+ items in ApplyItemSet().
+ */
+ const css::uno::Reference< css::beans::XPropertySet >& GetPropertySet() const { return m_xPropertySet;}
+
+ // ____ ::utl::OEventListenerAdapter ____
+ virtual void _disposing( const css::lang::EventObject& rSource ) override;
+
+protected:
+ /** sets a new property set, that you get with GetPropertySet(). It should
+ not be necessary to use this method. It is introduced to allow changing
+ the regression type of a regression curve which changes the object
+ identity.
+ */
+ void resetPropertySet( const css::uno::Reference< css::beans::XPropertySet > & xPropSet );
+
+private:
+ css::uno::Reference< css::beans::XPropertySet > m_xPropertySet;
+ css::uno::Reference< css::beans::XPropertySetInfo > m_xPropertySetInfo;
+
+ SfxItemPool& m_rItemPool;
+};
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */