/* -*- 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 _XTABLE_HXX #define _XTABLE_HXX #include #include #include #include #include #include #include #include #include #include #include #include "svx/svxdllapi.h" #include #include #include #include class Color; class Bitmap; class VirtualDevice; class XOutdevItemPool; // Breite und Hoehe der LB-Bitmaps #define BITMAP_WIDTH 32 #define BITMAP_HEIGHT 12 // Standard-Vergleichsstring extern sal_Unicode pszStandard[]; // "standard" // Funktion zum Konvertieren in echte RGB-Farben, da mit // enum COL_NAME nicht verglichen werden kann. SVX_DLLPUBLIC Color RGB_Color( ColorData nColorName ); // --------------------- // class XPropertyEntry // --------------------- class XPropertyEntry { protected: String aName; XPropertyEntry(const String& rName) : aName(rName) {} XPropertyEntry(const XPropertyEntry& rOther): aName(rOther.aName) {} public: virtual ~XPropertyEntry() {} void SetName(const String& rName) { aName = rName; } String& GetName() { return aName; } }; // ------------------ // class XColorEntry // ------------------ class XColorEntry : public XPropertyEntry { Color aColor; public: XColorEntry(const Color& rColor, const String& rName) : XPropertyEntry(rName) , aColor(rColor) {} void SetColor(const Color& rColor) { aColor = rColor; } Color& GetColor() { return aColor; } }; // -------------------- // class XLineEndEntry // -------------------- class XLineEndEntry : public XPropertyEntry { basegfx::B2DPolyPolygon aB2DPolyPolygon; public: XLineEndEntry(const basegfx::B2DPolyPolygon& rB2DPolyPolygon, const String& rName) : XPropertyEntry(rName), aB2DPolyPolygon(rB2DPolyPolygon) {} void SetLineEnd(const basegfx::B2DPolyPolygon& rB2DPolyPolygon) { aB2DPolyPolygon = rB2DPolyPolygon; } basegfx::B2DPolyPolygon& GetLineEnd() { return aB2DPolyPolygon; } }; // ------------------ // class XDashEntry // ------------------ class XDashEntry : public XPropertyEntry { XDash aDash; public: XDashEntry(const XDash& rDash, const String& rName) : XPropertyEntry(rName), aDash(rDash) {} void SetDash(const XDash& rDash) { aDash = rDash; } XDash& GetDash() { return aDash; } }; // ------------------ // class XHatchEntry // ------------------ class XHatchEntry : public XPropertyEntry { XHatch aHatch; public: XHatchEntry(const XHatch& rHatch, const String& rName) : XPropertyEntry(rName), aHatch(rHatch) {} void SetHatch(const XHatch& rHatch) { aHatch = rHatch; } XHatch& GetHatch() { return aHatch; } }; // --------------------- // class XGradientEntry // --------------------- class XGradientEntry : public XPropertyEntry { XGradient aGradient; public: XGradientEntry(const XGradient& rGradient, const String& rName): XPropertyEntry(rName), aGradient(rGradient) {} void SetGradient(const XGradient& rGrad) { aGradient = rGrad; } XGradient& GetGradient() { return aGradient; } }; // --------------------- // class XBitmapEntry // --------------------- class XBitmapEntry : public XPropertyEntry { private: GraphicObject maGraphicObject; public: XBitmapEntry(const GraphicObject& rGraphicObject, const String& rName) : XPropertyEntry(rName), maGraphicObject(rGraphicObject) { } XBitmapEntry(const XBitmapEntry& rOther) : XPropertyEntry(rOther), maGraphicObject(rOther.maGraphicObject) { } const GraphicObject& GetGraphicObject() const { return maGraphicObject; } void SetGraphicObject(const GraphicObject& rGraphicObject) { maGraphicObject = rGraphicObject; } }; // -------------------- // class XPropertyList // -------------------- enum XPropertyListType { XCOLOR_LIST, XLINE_END_LIST, XDASH_LIST, XHATCH_LIST, XGRADIENT_LIST, XBITMAP_LIST, XPROPERTY_LIST_COUNT }; typedef rtl::Reference< class XPropertyList > XPropertyListRef; class XDashList ; typedef rtl::Reference< class XDashList > XDashListRef; class XHatchList ; typedef rtl::Reference< class XHatchList > XHatchListRef; class XColorList ; typedef rtl::Reference< class XColorList > XColorListRef; class XBitmapList ; typedef rtl::Reference< class XBitmapList > XBitmapListRef; class XLineEndList ; typedef rtl::Reference< class XLineEndList > XLineEndListRef; class XGradientList ; typedef rtl::Reference< class XGradientList > XGradientListRef; class SVX_DLLPUBLIC XPropertyList : public cppu::OWeakObject { private: SAL_DLLPRIVATE void* operator new(size_t); protected: SAL_DLLPRIVATE void operator delete(void *); protected: typedef ::std::vector< XPropertyEntry* > XPropertyEntryList_impl; typedef ::std::vector< Bitmap* > BitmapList_impl; XPropertyListType eType; String aName; // not persistent String aPath; XOutdevItemPool* pXPool; XPropertyEntryList_impl aList; BitmapList_impl* pBmpList; bool bListDirty; bool bBitmapsDirty; bool bOwnPool; bool bEmbedInDocument; XPropertyList( XPropertyListType t, const String& rPath, XOutdevItemPool* pXPool = NULL ); public: virtual ~XPropertyList(); XPropertyListType Type() const { return eType; } long Count() const; void Insert( XPropertyEntry* pEntry, long nIndex = CONTAINER_APPEND ); XPropertyEntry* Replace( XPropertyEntry* pEntry, long nIndex ); XPropertyEntry* Remove( long nIndex ); // Note: Get(long) & Get( String& ) are ambiguous XPropertyEntry* Get( long nIndex, sal_uInt16 nDummy ) const; long Get(const String& rName); Bitmap* GetBitmap( long nIndex ) const; const String& GetName() const { return aName; } void SetName( const String& rString ); const String& GetPath() const { return aPath; } void SetPath( const String& rString ) { aPath = rString; } sal_Bool IsDirty() const { return bListDirty && bBitmapsDirty; } void SetDirty( sal_Bool bDirty = sal_True ) { bListDirty = bDirty; bBitmapsDirty = bDirty; } bool IsEmbedInDocument() const { return bEmbedInDocument; } void SetEmbedInDocument(bool b) { bEmbedInDocument = b; } static OUString GetDefaultExt(XPropertyListType t); static OUString GetDefaultExtFilter(XPropertyListType t); OUString GetDefaultExt() const { return GetDefaultExt( eType ); } virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createInstance() = 0; bool Load(); bool LoadFrom( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > &xStorage, const OUString &rURL ); bool Save(); bool SaveTo ( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > &xStorage, const OUString &rURL, OUString *pOptName ); virtual sal_Bool Create() = 0; virtual sal_Bool CreateBitmapsForUI() = 0; virtual Bitmap* CreateBitmapForUI( long nIndex, sal_Bool bDelete = sal_True ) = 0; // Factory method for sub-classes static XPropertyListRef CreatePropertyList( XPropertyListType t, const String& rPath, XOutdevItemPool* pXPool = NULL ); // as above but initializes name as expected static XPropertyListRef CreatePropertyListFromURL( XPropertyListType t, const OUString & rUrl, XOutdevItemPool* pXPool = NULL ); // helper accessors inline XDashListRef AsDashList(); inline XHatchListRef AsHatchList(); inline XColorListRef AsColorList(); inline XBitmapListRef AsBitmapList(); inline XLineEndListRef AsLineEndList(); inline XGradientListRef AsGradientList(); }; // ------------------ // class XColorList // ------------------ class SVX_DLLPUBLIC XColorList : public XPropertyList { public: explicit XColorList( const String& rPath, XOutdevItemPool* pXInPool = NULL ) : XPropertyList( XCOLOR_LIST, rPath, pXInPool ) {} using XPropertyList::Replace; using XPropertyList::Remove; using XPropertyList::Get; XColorEntry* Replace(long nIndex, XColorEntry* pEntry ); XColorEntry* Remove(long nIndex); XColorEntry* GetColor(long nIndex) const; virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createInstance(); virtual sal_Bool Create(); virtual sal_Bool CreateBitmapsForUI(); virtual Bitmap* CreateBitmapForUI( long nIndex, sal_Bool bDelete = sal_True ); static XColorListRef CreateStdColorList(); static XColorListRef GetStdColorList(); // returns a singleton }; // ------------------- // class XLineEndList // ------------------- class impXLineEndList; class SVX_DLLPUBLIC XLineEndList : public XPropertyList { private: impXLineEndList* mpData; void impCreate(); void impDestroy(); public: explicit XLineEndList( const String& rPath, XOutdevItemPool* pXPool = 0 ); virtual ~XLineEndList(); using XPropertyList::Remove; XLineEndEntry* Remove(long nIndex); using XPropertyList::Get; XLineEndEntry* GetLineEnd(long nIndex) const; virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createInstance(); virtual sal_Bool Create(); virtual sal_Bool CreateBitmapsForUI(); virtual Bitmap* CreateBitmapForUI(long nIndex, sal_Bool bDelete = sal_True); }; // ------------------- // class XDashList // ------------------- class impXDashList; class SVX_DLLPUBLIC XDashList : public XPropertyList { private: impXDashList* mpData; void impCreate(); void impDestroy(); public: explicit XDashList( const String& rPath, XOutdevItemPool* pXPool = 0 ); virtual ~XDashList(); using XPropertyList::Replace; XDashEntry* Replace(XDashEntry* pEntry, long nIndex); using XPropertyList::Remove; XDashEntry* Remove(long nIndex); using XPropertyList::Get; XDashEntry* GetDash(long nIndex) const; virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createInstance(); virtual sal_Bool Create(); virtual sal_Bool CreateBitmapsForUI(); virtual Bitmap* CreateBitmapForUI(long nIndex, sal_Bool bDelete = sal_True); }; // ------------------- // class XHatchList // ------------------- class impXHatchList; class SVX_DLLPUBLIC XHatchList : public XPropertyList { private: impXHatchList* mpData; void impCreate(); void impDestroy(); public: explicit XHatchList( const String& rPath, XOutdevItemPool* pXPool = 0 ); virtual ~XHatchList(); using XPropertyList::Replace; XHatchEntry* Replace(XHatchEntry* pEntry, long nIndex); using XPropertyList::Remove; XHatchEntry* Remove(long nIndex); using XPropertyList::Get; XHatchEntry* GetHatch(long nIndex) const; virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createInstance(); virtual sal_Bool Create(); virtual sal_Bool CreateBitmapsForUI(); virtual Bitmap* CreateBitmapForUI(long nIndex, sal_Bool bDelete = sal_True); }; // ------------------- // class XGradientList // ------------------- class impXGradientList; class SVX_DLLPUBLIC XGradientList : public XPropertyList { private: impXGradientList* mpData; void impCreate(); void impDestroy(); public: explicit XGradientList( const String& rPath, XOutdevItemPool* pXPool = 0 ); virtual ~XGradientList(); using XPropertyList::Replace; XGradientEntry* Replace(XGradientEntry* pEntry, long nIndex); using XPropertyList::Remove; XGradientEntry* Remove(long nIndex); using XPropertyList::Get; XGradientEntry* GetGradient(long nIndex) const; virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createInstance(); virtual sal_Bool Create(); virtual sal_Bool CreateBitmapsForUI(); virtual Bitmap* CreateBitmapForUI(long nIndex, sal_Bool bDelete = sal_True); }; // ------------------- // class XBitmapList // ------------------- class SVX_DLLPUBLIC XBitmapList : public XPropertyList { public: explicit XBitmapList( const String& rPath, XOutdevItemPool* pXInPool = NULL ) : XPropertyList( XBITMAP_LIST, rPath, pXInPool ) {} using XPropertyList::Replace; using XPropertyList::Remove; XBitmapEntry* Remove(long nIndex); using XPropertyList::Get; XBitmapEntry* GetBitmap(long nIndex) const; virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createInstance(); virtual sal_Bool Create(); virtual sal_Bool CreateBitmapsForUI(); virtual Bitmap* CreateBitmapForUI( long nIndex, sal_Bool bDelete = sal_True ); }; // FIXME: could add type checking too ... inline XDashListRef XPropertyList::AsDashList() { return XDashListRef( static_cast (this) ); } inline XHatchListRef XPropertyList::AsHatchList() { return XHatchListRef( static_cast (this) ); } inline XColorListRef XPropertyList::AsColorList() { return XColorListRef( static_cast (this) ); } inline XBitmapListRef XPropertyList::AsBitmapList() { return XBitmapListRef( static_cast (this) ); } inline XLineEndListRef XPropertyList::AsLineEndList() { return XLineEndListRef( static_cast (this) ); } inline XGradientListRef XPropertyList::AsGradientList() { return XGradientListRef( static_cast (this) ); } #endif // _XTABLE_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */