summaryrefslogtreecommitdiff
path: root/include/svl/poolitem.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'include/svl/poolitem.hxx')
-rw-r--r--include/svl/poolitem.hxx415
1 files changed, 415 insertions, 0 deletions
diff --git a/include/svl/poolitem.hxx b/include/svl/poolitem.hxx
new file mode 100644
index 000000000000..5e041825186a
--- /dev/null
+++ b/include/svl/poolitem.hxx
@@ -0,0 +1,415 @@
+/* -*- 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 .
+ */
+#ifndef _SFXPOOLITEM_HXX
+#define _SFXPOOLITEM_HXX
+
+#include "svl/svldllapi.h"
+#include <com/sun/star/uno/Any.hxx>
+
+#include <sal/config.h>
+#include <tools/rtti.hxx>
+#include <limits.h>
+#include <tools/solar.h>
+#include <tools/debug.hxx>
+#include <tools/string.hxx>
+#include <svl/hint.hxx>
+
+typedef long SfxArgumentError;
+
+class SbxVariable;
+class SbxObject;
+class SvStream;
+class Color;
+class IntlWrapper;
+
+namespace com { namespace sun { namespace star { namespace uno { class Any; } } } }
+
+static const sal_uInt32 SFX_ITEMS_DIRECT= 0xffffffff;
+static const sal_uInt32 SFX_ITEMS_NULL= 0xfffffff0; // instead StoreSurrogate
+static const sal_uInt32 SFX_ITEMS_DEFAULT= 0xfffffffe;
+
+#define SFX_ITEMS_POOLDEFAULT 0xffff
+#define SFX_ITEMS_STATICDEFAULT 0xfffe
+#define SFX_ITEMS_DELETEONIDLE 0xfffd
+
+#define SFX_ITEMS_OLD_MAXREF 0xffef
+#define SFX_ITEMS_MAXREF 0xfffffffe
+#define SFX_ITEMS_SPECIAL 0xffffffff
+
+#define CONVERT_TWIPS 0x80 //Uno-Konvertierung fuer Massangaben (fuer MemberId)
+
+// -----------------------------------------------------------------------
+
+// UNO3 shortcuts
+
+// warning, if there is no boolean inside the any this will always return the value false
+inline sal_Bool Any2Bool( const ::com::sun::star::uno::Any&rValue )
+{
+ sal_Bool nValue = sal_False;
+ if( rValue.hasValue() )
+ {
+ if( rValue.getValueType() == ::getCppuBooleanType() )
+ {
+ nValue = *(sal_Bool*)rValue.getValue();
+ }
+ else
+ {
+ sal_Int32 nNum = 0;
+ if( rValue >>= nNum )
+ nValue = nNum != 0;
+ }
+ }
+
+ return nValue;
+}
+
+inline ::com::sun::star::uno::Any Bool2Any( sal_Bool bValue )
+{
+ return ::com::sun::star::uno::Any( &bValue, ::getCppuBooleanType() );
+}
+
+// -----------------------------------------------------------------------
+
+//! Notloesung!!!
+enum SfxFieldUnit
+{
+ SFX_FUNIT_NONE, SFX_FUNIT_MM, SFX_FUNIT_CM, SFX_FUNIT_M, SFX_FUNIT_KM,
+ SFX_FUNIT_TWIP, SFX_FUNIT_POINT, SFX_FUNIT_PICA,
+ SFX_FUNIT_INCH, SFX_FUNIT_FOOT, SFX_FUNIT_MILE, SFX_FUNIT_CHAR, SFX_FUNIT_LINE, SFX_FUNIT_CUSTOM
+};
+
+enum SfxMapUnit
+{
+ SFX_MAPUNIT_100TH_MM,
+ SFX_MAPUNIT_10TH_MM,
+ SFX_MAPUNIT_MM,
+ SFX_MAPUNIT_CM,
+ SFX_MAPUNIT_1000TH_INCH,
+ SFX_MAPUNIT_100TH_INCH,
+ SFX_MAPUNIT_10TH_INCH,
+ SFX_MAPUNIT_INCH,
+ SFX_MAPUNIT_POINT,
+ SFX_MAPUNIT_TWIP,
+ SFX_MAPUNIT_PIXEL,
+ SFX_MAPUNIT_SYSFONT,
+ SFX_MAPUNIT_APPFONT,
+ SFX_MAPUNIT_RELATIVE,
+ SFX_MAPUNIT_ABSOLUTE
+};
+
+// -----------------------------------------------------------------------
+
+enum SfxItemPresentation
+
+/* [Beschreibung]
+
+ Die Werte dieses Enums bezeichnen den Grad der textuellen
+ Presentation eines Items nach Aufruf der virtuellen Methode
+ <SfxPoolItem::GetPresentation()const>.
+*/
+
+{
+ SFX_ITEM_PRESENTATION_NONE,
+ SFX_ITEM_PRESENTATION_NAMEONLY,
+ SFX_ITEM_PRESENTATION_NAMELESS,
+ SFX_ITEM_PRESENTATION_COMPLETE
+};
+
+// -----------------------------------------------------------------------
+
+typedef sal_uInt16 SfxItemState;
+
+#define SFX_ITEM_UNKNOWN 0x0000
+
+#define SFX_ITEM_DISABLED 0x0001
+#define SFX_ITEM_READONLY 0x0002
+
+#define SFX_ITEM_DONTCARE 0x0010
+#define SFX_ITEM_DEFAULT 0x0020
+#define SFX_ITEM_SET 0x0030
+
+// old stuff - dont use!!!
+#define SFX_ITEM_AVAILABLE SFX_ITEM_DEFAULT
+#define SFX_ITEM_OFF SFX_ITEM_DEFAULT
+#define SFX_ITEM_ON SFX_ITEM_SET
+
+DBG_NAMEEX_VISIBILITY(SfxPoolItem, SVL_DLLPUBLIC)
+DBG_NAMEEX(SfxVoidItem)
+DBG_NAMEEX(SfxItemHandle)
+
+class SvXMLUnitConverter;
+class SfxItemPool;
+class SfxItemSet;
+
+
+// -----------------------------------------------------------------------
+
+class SVL_DLLPUBLIC SfxPoolItem
+{
+friend class SfxItemPool;
+friend class SfxItemDesruptor_Impl;
+friend class SfxItemPoolCache;
+friend class SfxItemSet;
+friend class SfxVoidItem;
+
+ sal_uLong m_nRefCount;
+ sal_uInt16 m_nWhich;
+ sal_uInt16 m_nKind;
+
+private:
+ inline void SetRefCount( sal_uLong n );
+ inline void SetKind( sal_uInt16 n );
+public:
+ inline sal_uLong AddRef( sal_uLong n = 1 ) const;
+private:
+ inline sal_uLong ReleaseRef( sal_uLong n = 1 ) const;
+ SVL_DLLPRIVATE long Delete_Impl(void*);
+
+protected:
+ explicit SfxPoolItem( sal_uInt16 nWhich = 0 );
+ SfxPoolItem( const SfxPoolItem& );
+
+public:
+ TYPEINFO();
+ virtual ~SfxPoolItem();
+
+ void SetWhich( sal_uInt16 nId ) {
+ DBG_CHKTHIS(SfxPoolItem, 0);
+ m_nWhich = nId; }
+ sal_uInt16 Which() const {
+ DBG_CHKTHIS(SfxPoolItem, 0);
+ return m_nWhich; }
+ virtual int operator==( const SfxPoolItem& ) const = 0;
+ int operator!=( const SfxPoolItem& rItem ) const
+ { return !(*this == rItem); }
+ virtual int Compare( const SfxPoolItem &rWith ) const;
+ virtual int Compare( const SfxPoolItem &rWith, const IntlWrapper& rIntlWrapper ) const;
+
+ virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePresentation,
+ SfxMapUnit eCoreMetric,
+ SfxMapUnit ePresentationMetric,
+ OUString &rText,
+ const IntlWrapper * pIntlWrapper = 0 ) const;
+
+ virtual sal_uInt16 GetVersion( sal_uInt16 nFileFormatVersion ) const;
+ virtual bool ScaleMetrics( long lMult, long lDiv );
+ virtual bool HasMetrics() const;
+
+ virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const;
+ virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 );
+
+ virtual SfxPoolItem* Create( SvStream &, sal_uInt16 nItemVersion ) const;
+ virtual SvStream& Store( SvStream &, sal_uInt16 nItemVersion ) const;
+ virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const = 0;
+
+ sal_uLong GetRefCount() const { return m_nRefCount; }
+ inline sal_uInt16 GetKind() const { return m_nKind; }
+
+ /** Read in a Unicode string from a streamed byte string representation.
+
+ @param rStream Some (input) stream. Its Stream/TargetCharSets must
+ be set to correct values!
+
+ @param rString On success, returns the reconstructed Unicode string.
+
+ @return True if the string was successfully read and reconstructed.
+ */
+ static OUString readByteString(SvStream & rStream);
+
+ /** Write a byte string representation of a Unicode string into a stream.
+
+ @param rStream Some (output) stream. Its Stream/TargetCharSets must
+ be set to correct values!
+
+ @param rString Some Unicode string.
+ */
+ static void writeByteString(SvStream & rStream,
+ const OUString& rString);
+
+ /** Read in a Unicode string from either a streamed Unicode or byte string
+ representation.
+
+ @param rStream Some (input) stream. If bUnicode is false, its
+ Stream/TargetCharSets must be set to correct values!
+
+ @param bUnicode Whether to read in a stream Unicode (true) or byte
+ string (false) representation.
+
+ @return On success, returns the reconstructed Unicode string.
+ */
+ static OUString readUnicodeString(SvStream & rStream, bool bUnicode);
+
+ /** Write a Unicode string representation of a Unicode string into a
+ stream.
+
+ @param rStream Some (output) stream.
+
+ @param rString Some Unicode string.
+ */
+ static void writeUnicodeString(SvStream & rStream,
+ const OUString& rString);
+
+private:
+ SfxPoolItem& operator=( const SfxPoolItem& ); // n.i.!!
+};
+
+// -----------------------------------------------------------------------
+
+inline void SfxPoolItem::SetRefCount( sal_uLong n )
+{
+ DBG_CHKTHIS( SfxPoolItem, 0 );
+ m_nRefCount = n;
+ m_nKind = 0;
+}
+
+inline void SfxPoolItem::SetKind( sal_uInt16 n )
+{
+ DBG_CHKTHIS( SfxPoolItem, 0 );
+ m_nRefCount = SFX_ITEMS_SPECIAL;
+ m_nKind = n;
+}
+
+inline sal_uLong SfxPoolItem::AddRef( sal_uLong n ) const
+{
+ DBG_CHKTHIS( SfxPoolItem, 0 );
+ DBG_ASSERT(m_nRefCount <= SFX_ITEMS_MAXREF, "AddRef with non-Pool-Item");
+ DBG_ASSERT(ULONG_MAX - m_nRefCount > n, "AddRef: refcount overflow");
+ return (const_cast<SfxPoolItem *>(this)->m_nRefCount += n);
+}
+
+inline sal_uLong SfxPoolItem::ReleaseRef( sal_uLong n ) const
+{
+ DBG_CHKTHIS( SfxPoolItem, 0 );
+ DBG_ASSERT(m_nRefCount <= SFX_ITEMS_MAXREF, "AddRef with non-Pool-Item");
+ DBG_ASSERT(m_nRefCount >= n, "AddRef: refcount underflow");
+ const_cast<SfxPoolItem *>(this)->m_nRefCount -= n;
+ return m_nRefCount;
+}
+
+// -----------------------------------------------------------------------
+
+inline int IsPoolDefaultItem(const SfxPoolItem *pItem )
+{
+ return pItem && pItem->GetKind() == SFX_ITEMS_POOLDEFAULT;
+}
+
+inline int IsStaticDefaultItem(const SfxPoolItem *pItem )
+{
+ return pItem && pItem->GetKind() == SFX_ITEMS_STATICDEFAULT;
+}
+
+inline int IsDefaultItem( const SfxPoolItem *pItem )
+{
+ return pItem && pItem->GetKind() >= SFX_ITEMS_STATICDEFAULT;
+}
+
+inline int IsPooledItem( const SfxPoolItem *pItem )
+{
+ return pItem && pItem->GetRefCount() > 0 && pItem->GetRefCount() <= SFX_ITEMS_MAXREF;
+}
+
+inline int IsInvalidItem(const SfxPoolItem *pItem)
+{
+ return pItem == (SfxPoolItem *)-1;
+}
+
+// -----------------------------------------------------------------------
+
+class SVL_DLLPUBLIC SfxVoidItem: public SfxPoolItem
+{
+ SfxVoidItem & operator=( const SfxVoidItem& ); // not implemented.
+public:
+ TYPEINFO();
+ explicit SfxVoidItem( sal_uInt16 nWhich );
+ SfxVoidItem( sal_uInt16 nWhich, SvStream & );
+ SfxVoidItem( const SfxVoidItem& );
+ ~SfxVoidItem();
+
+ virtual int operator==( const SfxPoolItem& ) const;
+
+ virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres,
+ SfxMapUnit eCoreMetric,
+ SfxMapUnit ePresMetric,
+ OUString &rText,
+ const IntlWrapper * = 0 ) const;
+
+ // von sich selbst eine Kopie erzeugen
+ virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const;
+ void SetWhich(sal_uInt16 nWh) { m_nWhich = nWh; }
+};
+
+// -----------------------------------------------------------------------
+
+class SVL_DLLPUBLIC SfxSetItem: public SfxPoolItem
+{
+ SfxItemSet *pSet;
+
+ SfxSetItem & operator=( const SfxSetItem& ); // not implemented.
+
+public:
+ TYPEINFO();
+ SfxSetItem( sal_uInt16 nWhich, SfxItemSet *pSet );
+ SfxSetItem( sal_uInt16 nWhich, const SfxItemSet &rSet );
+ SfxSetItem( const SfxSetItem&, SfxItemPool *pPool = 0 );
+ ~SfxSetItem();
+
+ virtual int operator==( const SfxPoolItem& ) const;
+
+ virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres,
+ SfxMapUnit eCoreMetric,
+ SfxMapUnit ePresMetric,
+ OUString &rText,
+ const IntlWrapper * = 0 ) const;
+
+ // von sich selbst eine Kopie erzeugen
+ virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const = 0;
+ virtual SfxPoolItem* Create(SvStream &, sal_uInt16 nVersion) const = 0;
+ virtual SvStream& Store(SvStream &, sal_uInt16 nVer) const;
+
+ const SfxItemSet& GetItemSet() const
+ { return *pSet; }
+ SfxItemSet& GetItemSet()
+ { return *pSet; }
+};
+
+// -----------------------------------------------------------------------
+// Handle Klasse fuer PoolItems
+
+class SVL_DLLPUBLIC SfxItemHandle
+{
+ sal_uInt16 *pRef;
+ SfxPoolItem *pItem;
+public:
+ explicit SfxItemHandle( SfxPoolItem& );
+ SfxItemHandle( const SfxItemHandle& );
+ ~SfxItemHandle();
+
+ const SfxItemHandle &operator=(const SfxItemHandle &);
+ const SfxPoolItem &GetItem() const { return *pItem; }
+};
+
+// -----------------------------------------------------------------------
+
+DECL_PTRHINT(SVL_DLLPUBLIC, SfxPoolItemHint, SfxPoolItem);
+
+// -----------------------------------------------------------------------
+
+#endif // #ifndef _SFXPOOLITEM_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */