diff options
author | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2013-04-18 18:26:28 +0200 |
---|---|---|
committer | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2013-04-23 22:20:31 +0200 |
commit | b9337e22ce1dbf2eba0e8c8db294ae99f4111f91 (patch) | |
tree | 53ee1bd3dfd213815a21579151983cb997922b05 /include/svx | |
parent | f4e1642a1761d5eab6ccdd89928869c2b2f1528a (diff) |
execute move of global headers
see https://gerrit.libreoffice.org/#/c/3367/
and Change-Id: I00c96fa77d04b33a6f8c8cd3490dfcd9bdc9e84a for details
Change-Id: I199a75bc4042af20817265d5ef85b1134a96ff5a
Diffstat (limited to 'include/svx')
526 files changed, 64621 insertions, 0 deletions
diff --git a/include/svx/AccessibleControlShape.hxx b/include/svx/AccessibleControlShape.hxx new file mode 100644 index 000000000000..54cdd7719c99 --- /dev/null +++ b/include/svx/AccessibleControlShape.hxx @@ -0,0 +1,210 @@ +/* -*- 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 _SVX_ACCESSIBILITY_ACCESSIBLE_CONTROL_SHAPE_HXX +#define _SVX_ACCESSIBILITY_ACCESSIBLE_CONTROL_SHAPE_HXX + +#include <svx/AccessibleShape.hxx> + +#include <com/sun/star/accessibility/XAccessibleAction.hpp> +#include <com/sun/star/accessibility/XAccessibleEventListener.hpp> +#include <com/sun/star/util/XModeChangeBroadcaster.hpp> +#include <com/sun/star/container/XContainerListener.hpp> +#include <cppuhelper/implbase3.hxx> +#include <comphelper/uno3.hxx> + +namespace com { namespace sun { namespace star { namespace awt { + class XControl; +} } } } + +namespace comphelper +{ + class OWrappedAccessibleChildrenManager; +} + +class SdrObject; +namespace accessibility { + + typedef ::cppu::ImplHelper4 < ::com::sun::star::beans::XPropertyChangeListener + , ::com::sun::star::util::XModeChangeListener + , ::com::sun::star::container::XContainerListener + , ::com::sun::star::accessibility::XAccessibleEventListener + > AccessibleControlShape_Base; +/** @descr +*/ +class AccessibleControlShape + :public AccessibleShape + ,public AccessibleControlShape_Base +{ +public: + //===== internal ======================================================== + AccessibleControlShape( + const AccessibleShapeInfo& rShapeInfo, + const AccessibleShapeTreeInfo& rShapeTreeInfo); + virtual ~AccessibleControlShape( ); + +protected: + //--- XAccessible ---------------------------------------- + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext> SAL_CALL getAccessibleContext( ) throw(::com::sun::star::uno::RuntimeException); + + //--- XAccessibleComponent ------------------------------- + /// forward the focus to the contained control(in alive mode) + virtual void SAL_CALL grabFocus( ) throw(::com::sun::star::uno::RuntimeException); + + //--- XAccessibleContext --------------------------------- + virtual sal_Int32 SAL_CALL getAccessibleChildCount( ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i ) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) throw (::com::sun::star::uno::RuntimeException); + + //--- XServiceInfo --------------------------------------- + virtual OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException); + + //--- XInterface ----------------------------------------- + DECLARE_XINTERFACE( ) + + //--- XTypeProvider -------------------------------------- + DECLARE_XTYPEPROVIDER( ) + + //--- XPropertyChangeListener ---------------------------- + virtual void SAL_CALL propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& _rEvent ) throw(::com::sun::star::uno::RuntimeException); + + //--- XComponent ----------------------------------------- + virtual void SAL_CALL disposing( ); + + //--- XEventListener ------------------------------------- + virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); + + //--- XModeChangeListener -------------------------------- + virtual void SAL_CALL modeChanged( const ::com::sun::star::util::ModeChangeEvent& _rSource ) throw(::com::sun::star::uno::RuntimeException); + + //--- XAccessibleEventListener ---------------------------- + virtual void SAL_CALL notifyEvent( const ::com::sun::star::accessibility::AccessibleEventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException); + + //--- document::XEventListener ---------------------------- + using AccessibleShape::notifyEvent; + + // XVclContainerListener + virtual void SAL_CALL elementInserted( const ::com::sun::star::container::ContainerEvent& Event ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL elementRemoved( const ::com::sun::star::container::ContainerEvent& Event ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL elementReplaced( const ::com::sun::star::container::ContainerEvent& Event ) throw (::com::sun::star::uno::RuntimeException); + +protected: + /** Initialize a new shape. See the documentation of the base' constructor + for the reason of this method's existence. + */ + virtual void Init( ); + + /// Create a name string that contains the accessible name. + virtual OUString + CreateAccessibleBaseName( ) + throw(::com::sun::star::uno::RuntimeException); + + /** Create a unique name string that contains the accessible name. The + name consists of the base name and the index. + */ + virtual OUString + CreateAccessibleName( ) + throw(::com::sun::star::uno::RuntimeException); + + /// Create a description string that contains the accessible description. + virtual OUString + CreateAccessibleDescription( ) + throw(::com::sun::star::uno::RuntimeException); + +#ifdef DBG_UTIL + /// Set the specified state + virtual sal_Bool SetState( sal_Int16 _nState ); +#endif // DBG_UTIL + + /// (safely) reads the given property from the model of the UNO control + OUString getControlModelStringProperty( const OUString& _rPropertyName ) const SAL_THROW(( )); + + /// ensure that our control model exists(will be retrieved upon need only) + sal_Bool ensureControlModelAccess( ) SAL_THROW(( )); + + /// ensures that we're listening for the given property if(and only if!) necessary + bool ensureListeningState( const bool _bCurrentlyListening, const bool _bNeedNewListening, + const OUString& _rPropertyName ); + + /// starts multiplexing the state changes of our aggregate context + void startStateMultiplexing( ); + /// stops multiplexing the state changes of our aggregate context + void stopStateMultiplexing( ); + + /// retrieves the SdrObject of the shape we represent + SdrObject* getSdrObject( ) const; + + /** adjusts our AccessibleRole, depending on the control type we're working for + + <p>Only to be called during inituialization</p> + */ + void adjustAccessibleRole( ); + + /** initializes composed states of the context + + <p>Some of the states of our inner context need to be propagated to the "composed context", too + (such as "checked" for check boxes). At lifetime, this is done by multiplexing state changes, + at initialization time, this method is used.</p> + */ + void initializeComposedState( ); + +private: + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > + m_xControlModel; + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > + m_xModelPropsMeta; // cache this for performance reasons + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > + m_xUnoControl; // our UNO control + + ::com::sun::star::uno::WeakReference< ::com::sun::star::accessibility::XAccessibleContext > + m_aControlContext; // the AccessibleContext of the control + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XAggregation > + m_xControlContextProxy; // the proxy for "aggregating" the AccessibleContext of the control + ::com::sun::star::uno::Reference< ::com::sun::star::lang::XTypeProvider > + m_xControlContextTypeAccess; // cached interface of our aggregate + ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > + m_xControlContextComponent; // cached interface of our aggregate + + ::comphelper::OWrappedAccessibleChildrenManager* + m_pChildManager; + + bool m_bListeningForName : 1; // are we currently listening for changes of the "Name" property? + bool m_bListeningForDesc : 1; // are we currently listening for changes of the "HelpText" property? + bool m_bMultiplexingStates : 1; // are we currently multiplexing state changes of the native context? + bool m_bDisposeNativeContext : 1; // do we need to dispose mxNativeContextComponent? + bool m_bWaitingForControl : 1; // if we are created before our control exists, we need to wait for it to appear ... + +private: + /** Don't use the default constructor. Use the public constructor that + takes the original shape and the parent as arguments instead. + */ + AccessibleControlShape( ); + + /// Don't use the constructor. not implemented. + AccessibleControlShape(const AccessibleControlShape&); + + /// Don't use the assignment operator. not implemented. + AccessibleControlShape& operator= (const AccessibleControlShape&); +}; + +} // end of namespace accessibility + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/AccessibleGraphicShape.hxx b/include/svx/AccessibleGraphicShape.hxx new file mode 100644 index 000000000000..cfe87332fe38 --- /dev/null +++ b/include/svx/AccessibleGraphicShape.hxx @@ -0,0 +1,117 @@ +/* -*- 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 _SVX_ACCESSIBILITY_ACCESSIBLE_GRAPHIC_SHAPE_HXX +#define _SVX_ACCESSIBILITY_ACCESSIBLE_GRAPHIC_SHAPE_HXX + +#include <svx/AccessibleShape.hxx> +#include <com/sun/star/accessibility/XAccessibleImage.hpp> +#include "svx/svxdllapi.h" + +namespace accessibility { + +/** @descr + This class makes graphic shapes accessible. With respect to its + base class <type>AccessibleShape</type> it supports the additional + <type>XAccessibleImage</type> interface. +*/ +class SVX_DLLPUBLIC AccessibleGraphicShape + : public AccessibleShape, + public ::com::sun::star::accessibility::XAccessibleImage +{ +public: + //===== internal ======================================================== + AccessibleGraphicShape ( + const AccessibleShapeInfo& rShapeInfo, + const AccessibleShapeTreeInfo& rShapeTreeInfo); + + virtual ~AccessibleGraphicShape (void); + + //===== XAccessibleImage ================================================ + + OUString SAL_CALL getAccessibleImageDescription (void) + throw (::com::sun::star::uno::RuntimeException); + + sal_Int32 SAL_CALL getAccessibleImageHeight (void) + throw (::com::sun::star::uno::RuntimeException); + + sal_Int32 SAL_CALL getAccessibleImageWidth (void) + throw (::com::sun::star::uno::RuntimeException); + + //===== XInterface ====================================================== + + virtual com::sun::star::uno::Any SAL_CALL + queryInterface (const com::sun::star::uno::Type & rType) + throw (::com::sun::star::uno::RuntimeException); + + virtual void SAL_CALL + acquire (void) + throw (); + + virtual void SAL_CALL + release (void) + throw (); + + //===== XServiceInfo ==================================================== + + /** Returns an identifier for the implementation of this object. + */ + virtual OUString SAL_CALL + getImplementationName (void) + throw (::com::sun::star::uno::RuntimeException); + + virtual ::com::sun::star::uno::Sequence< OUString> SAL_CALL + getSupportedServiceNames (void) + throw (::com::sun::star::uno::RuntimeException); + + //===== XTypeProvider =================================================== + + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL + getTypes (void) + throw (::com::sun::star::uno::RuntimeException); + +protected: + /// Create a name string that contains the accessible name. + virtual OUString + CreateAccessibleBaseName () + throw (::com::sun::star::uno::RuntimeException); + + /// Create a description string that contains the accessible description. + virtual OUString + CreateAccessibleDescription () + throw (::com::sun::star::uno::RuntimeException); + +private: + /** Don't use the default constructor. Use the public constructor that + takes the original shape and the parent as arguments instead. + */ + SVX_DLLPRIVATE AccessibleGraphicShape (void); + + /// Don't use the constructor. Not yet implemented. + SVX_DLLPRIVATE AccessibleGraphicShape (const AccessibleGraphicShape&); + + /// Don't use the assignment operator. Not yet implemented. + SVX_DLLPRIVATE AccessibleGraphicShape& operator= (const AccessibleGraphicShape&); +}; + +} // end of namespace accessibility + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/AccessibleOLEShape.hxx b/include/svx/AccessibleOLEShape.hxx new file mode 100644 index 000000000000..1c3fe797ed59 --- /dev/null +++ b/include/svx/AccessibleOLEShape.hxx @@ -0,0 +1,123 @@ +/* -*- 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 _SVX_ACCESSIBILITY_ACCESSIBLE_OLE_SHAPE_HXX +#define _SVX_ACCESSIBILITY_ACCESSIBLE_OLE_SHAPE_HXX + +#include <svx/AccessibleShape.hxx> + +#include <com/sun/star/accessibility/XAccessibleAction.hpp> +#include "svx/svxdllapi.h" + +namespace accessibility { + +/** @descr + This class makes OLE objects accessible. With respect to its + base class <type>AccessibleShape</type> it supports the additional + <type>XAccessibleAction</type> interface. +*/ +class SVX_DLLPUBLIC AccessibleOLEShape + : public AccessibleShape, + public ::com::sun::star::accessibility::XAccessibleAction +{ +public: + //===== internal ======================================================== + AccessibleOLEShape ( + const AccessibleShapeInfo& rShapeInfo, + const AccessibleShapeTreeInfo& rShapeTreeInfo); + virtual ~AccessibleOLEShape (void); + + //===== XAccessibleAction =============================================== + + sal_Int32 SAL_CALL getAccessibleActionCount (void) + throw (::com::sun::star::uno::RuntimeException); + + sal_Bool SAL_CALL doAccessibleAction (sal_Int32 nIndex) + throw (::com::sun::star::lang::IndexOutOfBoundsException, + ::com::sun::star::uno::RuntimeException); + + OUString SAL_CALL getAccessibleActionDescription (sal_Int32 nIndex) + throw (::com::sun::star::lang::IndexOutOfBoundsException, + ::com::sun::star::uno::RuntimeException); + + ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessibleKeyBinding> SAL_CALL getAccessibleActionKeyBinding ( + sal_Int32 nIndex) + throw (::com::sun::star::lang::IndexOutOfBoundsException, + ::com::sun::star::uno::RuntimeException); + + //===== XInterface ====================================================== + + virtual com::sun::star::uno::Any SAL_CALL + queryInterface (const com::sun::star::uno::Type & rType) + throw (::com::sun::star::uno::RuntimeException); + + virtual void SAL_CALL + acquire (void) + throw (); + + virtual void SAL_CALL + release (void) + throw (); + + //===== XServiceInfo ==================================================== + + virtual OUString SAL_CALL + getImplementationName (void) + throw (::com::sun::star::uno::RuntimeException); + + virtual ::com::sun::star::uno::Sequence< OUString> SAL_CALL + getSupportedServiceNames (void) + throw (::com::sun::star::uno::RuntimeException); + + //===== XTypeProvider =================================================== + + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL + getTypes (void) + throw (::com::sun::star::uno::RuntimeException); + +protected: + /// Create a name string that contains the accessible name. + virtual OUString + CreateAccessibleBaseName () + throw (::com::sun::star::uno::RuntimeException); + + /// Create a description string that contains the accessible description. + virtual OUString + CreateAccessibleDescription () + throw (::com::sun::star::uno::RuntimeException); + +private: + /** Don't use the default constructor. Use the public constructor that + takes the original shape and the parent as arguments instead. + */ + SVX_DLLPRIVATE AccessibleOLEShape (void); + + /// Don't use the constructor. Not yet implemented. + SVX_DLLPRIVATE AccessibleOLEShape (const AccessibleOLEShape&); + + /// Don't use the assignment operator. Not yet implemented. + SVX_DLLPRIVATE AccessibleOLEShape& operator= (const AccessibleOLEShape&); +}; + +} // end of namespace accessibility + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/AccessibleShape.hxx b/include/svx/AccessibleShape.hxx new file mode 100644 index 000000000000..450b090f7562 --- /dev/null +++ b/include/svx/AccessibleShape.hxx @@ -0,0 +1,397 @@ +/* -*- 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 _SVX_ACCESSIBILITY_ACCESSIBLE_SHAPE_HXX +#define _SVX_ACCESSIBILITY_ACCESSIBLE_SHAPE_HXX + +#include <editeng/AccessibleContextBase.hxx> +#include <editeng/AccessibleComponentBase.hxx> +#include <svx/IAccessibleViewForwarderListener.hxx> +#include <com/sun/star/document/XEventListener.hpp> +#include <com/sun/star/accessibility/XAccessible.hpp> +#include <com/sun/star/accessibility/XAccessibleExtendedComponent.hpp> +#include <com/sun/star/accessibility/AccessibleRole.hpp> +#include <com/sun/star/drawing/XShape.hpp> +#include <com/sun/star/lang/XEventListener.hpp> +#include <com/sun/star/lang/XUnoTunnel.hpp> +#include <svx/AccessibleTextHelper.hxx> +#include "svx/svxdllapi.h" +#include "ChildrenManager.hxx" + +class SdrObject; + +namespace accessibility { + +class AccessibleShapeInfo; +class AccessibleShapeTreeInfo; +class IAccessibleParent; + +/** This base class provides a base implementation for all shapes. For more + detailed documentation about the methods refer to the descriptions of + the implemented interfaces. These are, among others, + <type>XAccessible</type>, <type>XAccessibleContext</type>, + <type>XAccessibleComponent</type> and + <type>XAccessibleExtendedComponent</type>. + + <p>The children of a shape can stem from two sources which, in case of + SVX and SD shapes, are mutually exclusive. This implementation, + however, handles both simultaniously to cope with future extensions or + shapes from other projects. + <ul> + <li>If this shape is a group shape, i.e. a + <type>SvxShapeGroup</type> or a <type>Svx3DSceneObject</type>, it + can have nested shapes.</li> + <li>If this shape is a descendant from <type>SvxShapeText</type> + then the text paragraphs are its children.</li> + </ul> + </p> + + <p>Accessible shapes do not listen for disposing() calls of the UNO + shapes they make accessible. This is the task of their owner, usually a + container, who can then call dispose() at the accessible object.</p> +*/ +class SVX_DLLPUBLIC AccessibleShape + : public AccessibleContextBase, + public AccessibleComponentBase, + public IAccessibleViewForwarderListener, + public ::com::sun::star::document::XEventListener, + public ::com::sun::star::lang::XUnoTunnel +{ +public: + //===== internal ======================================================== + + /** Create a new accessible object that makes the given shape accessible. + @param rShapeInfo + This object contains all information specific to the new + accessible shape. That are e.g. the shape to be made accessible + and the accessible object that will become the parent of the new + object. + @param rShapeTreeInfo + Bundel of information passed to this shape and all of its desendants. + @attention + Always call the <member>init</member> method after creating a + new accessible shape. This is one way to overcome the potential + problem of registering the new object with e.g. event + broadcasters. That would delete the new object if a broadcaster + would not keep a strong reference to the new object. + */ + AccessibleShape ( + const AccessibleShapeInfo& rShapeInfo, + const AccessibleShapeTreeInfo& rShapeTreeInfo); + + /** The destructor releases its children manager and text engine if + still existent. These are responsible to send appropriate events. + */ + virtual ~AccessibleShape (void); + + /** Initialize a new shape. See the documentation of the constructor + for the reason of this method's existence. + */ + virtual void Init (void); + + /** Compare two accessible shapes using object identity + @param rShape + This is the second operand. + @return + Returns true if both shapes are the same object. + */ + virtual bool operator== (const AccessibleShape& rShape); + + /** Set the specified state. If the state is <const>FOCUSED</const> + then, additionally to the inherited functionality, the focus + listeners registered with the <type>XAccessibleComponent</type> + interface are called (if that state really changes). + + @param aState + The state to turn on. + + @return + The returned flag indicates whether the specified state has been + changed (<TRUE/>), i.e. it has formerly not been set. + */ + virtual sal_Bool SetState (sal_Int16 aState); + + /** Reset the specified state. If the state is <const>FOCUSED</const> + then, additionally to the inherited functionality, the focus + listeners registered with the <type>XAccessibleComponent</type> + interface are called (if that state really changes). + + @param aState + The state to turn off. + + @return + The returned flag indicates whether the specified state has been + changed (<TRUE/>), i.e. it has formerly been set. + */ + virtual sal_Bool ResetState (sal_Int16 aState); + + /** Return the state of the specified state. Take the + <const>FOCUSED</const> state from the accessible edit engine. + + @param aState + The state for which to return its value. + @return + A value of <TRUE/> indicates that the state is set. A <FALSE/> + value indicates an unset state or the inability to access the + entity that manages the state set. + + */ + sal_Bool GetState (sal_Int16 aState); + + + //===== XAccessibleContext ============================================== + + /// Return the number of currently visible children. + virtual sal_Int32 SAL_CALL + getAccessibleChildCount (void) + throw (::com::sun::star::uno::RuntimeException); + + /** Return the specified child. + @param nIndex + Index of the requested child. + @return + Reference of the requested child which is the accessible object + of a visible shape. + @raises IndexOutOfBoundsException + Throws an exception if the index is not valid. + */ + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible> SAL_CALL + getAccessibleChild (sal_Int32 nIndex) + throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + + + /// Return the set of current states. + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessibleStateSet> SAL_CALL + getAccessibleStateSet (void) + throw (::com::sun::star::uno::RuntimeException); + + /// Return this objects index among the parents children. + virtual sal_Int32 SAL_CALL + getAccessibleIndexInParent (void) + throw (::com::sun::star::uno::RuntimeException); + + //===== XAccessibleComponent ============================================ + + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible > SAL_CALL + getAccessibleAtPoint (const ::com::sun::star::awt::Point& aPoint) + throw (::com::sun::star::uno::RuntimeException); + + virtual ::com::sun::star::awt::Rectangle SAL_CALL getBounds (void) + throw (::com::sun::star::uno::RuntimeException); + + virtual ::com::sun::star::awt::Point SAL_CALL getLocation (void) + throw (::com::sun::star::uno::RuntimeException); + + virtual ::com::sun::star::awt::Point SAL_CALL getLocationOnScreen (void) + throw (::com::sun::star::uno::RuntimeException); + + virtual ::com::sun::star::awt::Size SAL_CALL getSize (void) + throw (::com::sun::star::uno::RuntimeException); + + virtual sal_Int32 SAL_CALL getForeground (void) + throw (::com::sun::star::uno::RuntimeException); + + virtual sal_Int32 SAL_CALL getBackground (void) + throw (::com::sun::star::uno::RuntimeException); + + //===== XAccessibleEventBroadcaster ===================================== + + /** This call is forwarded to a) the base class and b) to the + accessible edit engine if it is present. + + @param rxListener + This listener is informed about accessibility events. + */ + virtual void SAL_CALL + addAccessibleEventListener ( + const ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessibleEventListener >& rxListener) + throw (::com::sun::star::uno::RuntimeException); + + /** This call is forwarded to a) the base class and b) to the + accessible edit engine if it is present. + + @param rxListener + This listener will not be informed about accessibility events + anymore. + */ + virtual void SAL_CALL + removeAccessibleEventListener ( + const ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessibleEventListener >& rxListener) + throw (::com::sun::star::uno::RuntimeException); + + + //===== XInterface ====================================================== + + virtual com::sun::star::uno::Any SAL_CALL + queryInterface (const com::sun::star::uno::Type & rType) + throw (::com::sun::star::uno::RuntimeException); + + virtual void SAL_CALL + acquire (void) + throw (); + + virtual void SAL_CALL + release (void) + throw (); + + + //===== XServiceInfo ==================================================== + + /** Returns an identifier for the implementation of this object. + */ + virtual OUString SAL_CALL + getImplementationName (void) + throw (::com::sun::star::uno::RuntimeException); + + virtual ::com::sun::star::uno::Sequence< OUString> SAL_CALL + getSupportedServiceNames (void) + throw (::com::sun::star::uno::RuntimeException); + + //===== XTypeProvider =================================================== + + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL + getTypes (void) + throw (::com::sun::star::uno::RuntimeException); + + //===== IAccessibleViewForwarderListener ================================ + virtual void ViewForwarderChanged (ChangeType aChangeType, + const IAccessibleViewForwarder* pViewForwarder); + + //===== lang::XEventListener ============================================ + + /** Listen for disposing events of the model. The accessible shape + remains functional when this happens. + */ + virtual void SAL_CALL + disposing (const ::com::sun::star::lang::EventObject& Source) + throw (::com::sun::star::uno::RuntimeException); + + //===== document::XEventListener ======================================== + + virtual void SAL_CALL + notifyEvent (const ::com::sun::star::document::EventObject& rEventObject) + throw (::com::sun::star::uno::RuntimeException); + + + //===== XUnoTunnel ======================================================== + + static const ::com::sun::star::uno::Sequence< sal_Int8 >& getUnoTunnelImplementationId() throw(); + static AccessibleShape* getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxIFace ) throw(); + sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& _rIdentifier ) throw(::com::sun::star::uno::RuntimeException); + + //===== Misc ======================================================== + + ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > + GetXShape(); + + /** set the index _nIndex at the accessible shape + @param _nIndex + The new index in parent. + */ + inline void setIndexInParent(sal_Int32 _nIndex) { m_nIndexInParent = _nIndex; } + +protected: + /// Children manager. May be empty if there are no children. + ChildrenManager* mpChildrenManager; + + /// Reference to the actual shape. + ::com::sun::star::uno::Reference< + ::com::sun::star::drawing::XShape> mxShape; + + /** Bundle of information passed to all shapes in a document tree. + */ + AccessibleShapeTreeInfo maShapeTreeInfo; + + /** Index that is appended to the object's name to disambiguate between + different names with the otherwise same name. + */ + long mnIndex; + + /** the index in parent. + */ + sal_Int32 m_nIndexInParent; + + /** The accessible text engine. May be NULL if it can not be created. + */ + AccessibleTextHelper* mpText; + + /** This object can be used to modify the child list of our parent. + */ + IAccessibleParent* mpParent; + + /** This object can be removed when we have an extra interface to ask if the shape is selected + */ + SdrObject* m_pShape; + + /** This method is called from the component helper base class while + disposing. + */ + virtual void SAL_CALL disposing (void); + + /** Create a base name string that contains the accessible name. + */ + virtual OUString + CreateAccessibleBaseName (void) + throw (::com::sun::star::uno::RuntimeException); + + /** Create a unique name string that contains the accessible name. The + name consists of the base name and the index. + */ + virtual OUString + CreateAccessibleName (void) + throw (::com::sun::star::uno::RuntimeException); + + /// Create a description string that contains the accessible description. + virtual OUString + CreateAccessibleDescription (void) + throw (::com::sun::star::uno::RuntimeException); + + /** Update the <const>OPAQUE</const> and <const>SELECTED</const> state. + */ + virtual void UpdateStates (void); + +private: + /** Don't use the default constructor. Use the public constructor that + takes the original shape and the parent as arguments instead. + */ + SVX_DLLPRIVATE explicit AccessibleShape (void); + /// Don't use the copy constructor. Is there any use for it? + SVX_DLLPRIVATE explicit AccessibleShape (const AccessibleShape&); + /// Don't use the assignment operator. Do we need this? + SVX_DLLPRIVATE AccessibleShape& operator= (const AccessibleShape&); + + /** Call this method when the title, name, or description of the mxShape + member (may) have been changed. + This method adapts the name and description members of the + AccessibleContextBase base class. + */ + void UpdateNameAndDescription (void); +}; + +} // end of namespace accessibility + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/AccessibleShapeInfo.hxx b/include/svx/AccessibleShapeInfo.hxx new file mode 100644 index 000000000000..c7ef007c9d65 --- /dev/null +++ b/include/svx/AccessibleShapeInfo.hxx @@ -0,0 +1,103 @@ +/* -*- 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 _SVX_ACCESSIBILITY_ACCESSIBLE_SHAPE_INFO_HXX +#define _SVX_ACCESSIBILITY_ACCESSIBLE_SHAPE_INFO_HXX + +#include <com/sun/star/drawing/XShape.hpp> +#include <com/sun/star/accessibility/XAccessible.hpp> +#include <svx/IAccessibleParent.hxx> +#include "svx/svxdllapi.h" + +namespace accessibility { + +/** @descr + This class is a container for the information specific for a single + shape that is passed to the constructor of that shape. It allows to + separate the class definitions of the shapes from the information + needed on construction. Only the shapes' implementation has to be + adapted to a modified <type>AccessibleShapeInfo</type> definition. + + <p>Note that this class complements the + <type>AccessibleShapeTreeInfo</type> interface which contains + information that is passed to all shapes in a subtree not just to a + single shape. </p> +*/ +class SVX_DLLPUBLIC AccessibleShapeInfo +{ +public: + /** The shape itself for which an accessible object is to be + constructed. + */ + ::com::sun::star::uno::Reference< + ::com::sun::star::drawing::XShape> mxShape; + + /** The accessible parent object of the shape. + */ + ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible> mxParent; + + /** This object that may be realized by the same implementation as that + of that of <member>mxParent</member> can be used to modify + parent/child relationships with the shape as initiator. + Note that NULL is a valid value for this member. + */ + IAccessibleParent* mpChildrenManager; + + /** This index is used to disambiguate names of accessible objects. A + value of (the default) -1 leads to the use of the object's z-order + instead. Because that is not a good substitute, better pass an ever + increasing counter. + */ + sal_Int32 mnIndex; + + /** Copy the given values into the members described above. + */ + AccessibleShapeInfo ( + const ::com::sun::star::uno::Reference< + ::com::sun::star::drawing::XShape>& rxShape, + const ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible>& rxParent, + IAccessibleParent* pChildrenManager, + sal_Int32 nIndex = -1); + + /** Copy the given values into the members described above. + The accessible parent implementation object is set to NULL. + */ + AccessibleShapeInfo ( + const ::com::sun::star::uno::Reference< + ::com::sun::star::drawing::XShape>& rxShape, + const ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible>& rxParent, + sal_Int32 nIndex = -1); + + ~AccessibleShapeInfo (void); + + AccessibleShapeInfo (const AccessibleShapeInfo&); +private: + // Don't use these three methods. + SVX_DLLPRIVATE explicit AccessibleShapeInfo (void); + SVX_DLLPRIVATE AccessibleShapeInfo& operator= (const AccessibleShapeInfo&); +}; + +} // end of namespace accessibility + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/AccessibleShapeTreeInfo.hxx b/include/svx/AccessibleShapeTreeInfo.hxx new file mode 100644 index 000000000000..da234960977e --- /dev/null +++ b/include/svx/AccessibleShapeTreeInfo.hxx @@ -0,0 +1,197 @@ +/* -*- 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 _SVX_ACCESSIBILITY_ACCESSIBLE_SHAPE_TREE_INFO_HXX +#define _SVX_ACCESSIBILITY_ACCESSIBLE_SHAPE_TREE_INFO_HXX + +#include <com/sun/star/accessibility/XAccessibleComponent.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/document/XEventBroadcaster.hpp> +#include <com/sun/star/frame/XController.hpp> +#include <svx/IAccessibleViewForwarder.hxx> +#include "svx/svxdllapi.h" + +class SdrView; +class Window; + +namespace accessibility { + +/** This class bundles all information that is passed down the tree of + accessible shapes so that each shape has access to that info. + + There are basically four members that can be set and queried: + <ul> + <li>The model broadcaster is used for getting notified about shape + changes. Using this broadcaster makes in unnecessary to register at + each shape seperately.</li> + <li>The view forwarder is responsible for transformation between + coordinate systems and for providing the visible area both with respect + to a specific window.</li> + <li>The SdrView is used for creating accessible edit engines.</li> + <li>The Window is used for creating accessible edit engines.</li> + </ul> +*/ +class SVX_DLLPUBLIC AccessibleShapeTreeInfo +{ +public: + /** Use this constructor to create an empty object that is filled later + with more meaningfull data. + */ + AccessibleShapeTreeInfo (void); + + /** Create a copy of the given shape info. + @param rInfo + The shape tree info object to copy. + */ + AccessibleShapeTreeInfo (const AccessibleShapeTreeInfo& rInfo); + + ~AccessibleShapeTreeInfo (void); + + AccessibleShapeTreeInfo& operator= (const AccessibleShapeTreeInfo& rInfo); + + /** Deprecated. Don't use this method. + */ + void SetDocumentWindow (const ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessibleComponent>& rxViewWindow); + + /** Deprecated. Use the correctly named SetModelBroadcaster method + instead. + */ + void SetControllerBroadcaster (const ::com::sun::star::uno::Reference< + ::com::sun::star::document::XEventBroadcaster>& rxControllerBroadcaster); + /** Deprecated. Use the correctly named GetModelBroadcaster method + instead. + */ + ::com::sun::star::uno::Reference< + ::com::sun::star::document::XEventBroadcaster> + GetControllerBroadcaster (void) const; + + /** Set a new broadcaster that sends events indicating shape changes. + The broadcaster usually is or belongs to a document model. + @param rxModelBroadcaster + The new broadcaster. It replaces the current one. An empty + reference may be passed to unset the broadcaster + */ + void SetModelBroadcaster (const ::com::sun::star::uno::Reference< + ::com::sun::star::document::XEventBroadcaster>& rxModelBroadcaster); + + /** Return the current model broadcaster. + @return + The returned reference may be empty if the broadcaster has not + been set or has been set to an empty reference. + */ + ::com::sun::star::uno::Reference< + ::com::sun::star::document::XEventBroadcaster> + GetModelBroadcaster (void) const; + + /** Set the view that will be used to construct SvxTextEditSources which + in turn are used to create accessible edit engines. + @param pView + The new SdrView that replaces the current one. A NULL pointer + may be passed to unset the view. + */ + void SetSdrView (SdrView* pView); + + /** Return the current SdrView. + @return + The returned value may be NULL. + */ + SdrView* GetSdrView (void) const; + + /** Set a new controller. This will usually but not necessarily + correspond to the SdrView. + @param rxController + The new controller that replaces the current one. An empty + reference may be passed to unset the controller. + */ + void SetController (const ::com::sun::star::uno::Reference< + ::com::sun::star::frame::XController>& rxController); + + /** Return the currently set controller. + @return + The reference to the currently set controller may be empty. + */ + ::com::sun::star::uno::Reference< + ::com::sun::star::frame::XController> + GetController (void) const; + + /** Set the window that is used to construct SvxTextEditSources which in + turn is used to create accessible edit engines. + */ + void SetWindow (Window* pWindow); + + /** Return the current Window. + @return + The returned value may be NULL. + */ + Window* GetWindow (void) const; + + /** The view forwarder allows the transformation between internal + and pixel coordinates and can be asked for the visible area. + @param pViewForwarder + This view forwarder replaces the current one. + */ + void SetViewForwarder (const IAccessibleViewForwarder* pViewForwarder); + + /** Return the current view forwarder. + @return + The returned pointer may be NULL. + */ + const IAccessibleViewForwarder* GetViewForwarder (void) const; + +private: + /** Deprecated. + */ + ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessibleComponent> mxDocumentWindow; + + /** this broadcaster sends events indicating shape changes. + The broadcaster usually is or belongs to a document model. + + This once was named mxControllerBroadcaster. + */ + ::com::sun::star::uno::Reference< + ::com::sun::star::document::XEventBroadcaster> mxModelBroadcaster; + + /** This view is necessary to construct an SvxTextEditSource which in + turn is used to create an accessible edit engine. + */ + SdrView* mpView; + + /** The controller is used e.g. for obtaining the selected shapes. + */ + ::com::sun::star::uno::Reference< + ::com::sun::star::frame::XController> mxController; + + /** This window is necessary to construct an SvxTextEditSource which in + turn is used to create an accessible edit engine. + */ + Window* mpWindow; + + /** The view forwarder allows the transformation between internal + and pixel coordinates and can be asked for the visible area. + */ + const IAccessibleViewForwarder* mpViewForwarder; +}; + +} // end of namespace accessibility + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/AccessibleTableShape.hxx b/include/svx/AccessibleTableShape.hxx new file mode 100644 index 000000000000..fe239cf271c7 --- /dev/null +++ b/include/svx/AccessibleTableShape.hxx @@ -0,0 +1,126 @@ +/* -*- 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 _SVX_ACCESSIBILITY_ACCESSIBLE_TABLE_SHAPE_HXX +#define _SVX_ACCESSIBILITY_ACCESSIBLE_TABLE_SHAPE_HXX + +#include <com/sun/star/table/XTable.hpp> +#include <com/sun/star/accessibility/XAccessibleTable.hpp> +#include <com/sun/star/accessibility/XAccessibleSelection.hpp> +#include <com/sun/star/util/XModifyListener.hpp> + +#include <rtl/ref.hxx> + +#include <cppuhelper/implbase2.hxx> + +#include <svx/AccessibleShape.hxx> + +#include <boost/noncopyable.hpp> + +namespace sdr { namespace table { + class SvxTableController; +} } + +namespace accessibility +{ + class AccessibleTableShapeImpl; + + typedef ::cppu::ImplInheritanceHelper2< AccessibleShape, + ::com::sun::star::accessibility::XAccessibleSelection, + ::com::sun::star::accessibility::XAccessibleTable + > AccessibleTableShape_Base; +/** @descr +*/ +class AccessibleTableShape : boost::noncopyable, public AccessibleTableShape_Base +{ +public: + AccessibleTableShape( const AccessibleShapeInfo& rShapeInfo, const AccessibleShapeTreeInfo& rShapeTreeInfo ); + virtual ~AccessibleTableShape( ); + + virtual void Init (void); + + // XInterface + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& aType ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire( ) throw (); + virtual void SAL_CALL release( ) throw (); + + // XAccessible + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext> SAL_CALL getAccessibleContext( ) throw(::com::sun::star::uno::RuntimeException); + + // XAccessibleContext + virtual sal_Int32 SAL_CALL getAccessibleChildCount( ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i ) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) throw (::com::sun::star::uno::RuntimeException); + virtual sal_Int16 SAL_CALL getAccessibleRole (void) throw (::com::sun::star::uno::RuntimeException); + + // XAccessibleTable + virtual sal_Int32 SAL_CALL getAccessibleRowCount() throw (::com::sun::star::uno::RuntimeException); + virtual sal_Int32 SAL_CALL getAccessibleColumnCount( ) throw (::com::sun::star::uno::RuntimeException); + virtual OUString SAL_CALL getAccessibleRowDescription( sal_Int32 nRow ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + virtual OUString SAL_CALL getAccessibleColumnDescription( sal_Int32 nColumn ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + virtual sal_Int32 SAL_CALL getAccessibleRowExtentAt( sal_Int32 nRow, sal_Int32 nColumn ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + virtual sal_Int32 SAL_CALL getAccessibleColumnExtentAt( sal_Int32 nRow, sal_Int32 nColumn ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleTable > SAL_CALL getAccessibleRowHeaders( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleTable > SAL_CALL getAccessibleColumnHeaders( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleRows( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getSelectedAccessibleColumns( ) throw (::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL isAccessibleRowSelected( sal_Int32 nRow ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL isAccessibleColumnSelected( sal_Int32 nColumn ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleCellAt( sal_Int32 nRow, sal_Int32 nColumn ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleCaption( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getAccessibleSummary( ) throw (::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL isAccessibleSelected( sal_Int32 nRow, sal_Int32 nColumn ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + virtual sal_Int32 SAL_CALL getAccessibleIndex( sal_Int32 nRow, sal_Int32 nColumn ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + virtual sal_Int32 SAL_CALL getAccessibleRow( sal_Int32 nChildIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + virtual sal_Int32 SAL_CALL getAccessibleColumn( sal_Int32 nChildIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + + // XAccessibleSelection + virtual void SAL_CALL selectAccessibleChild( sal_Int32 nChildIndex ) throw ( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int32 nChildIndex ) throw ( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL clearAccessibleSelection( ) throw ( ::com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL selectAllAccessibleChildren( ) throw ( ::com::sun::star::uno::RuntimeException ); + virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount( ) throw ( ::com::sun::star::uno::RuntimeException ); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) throw ( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL deselectAccessibleChild( sal_Int32 nChildIndex ) throw ( ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException ); + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName( ) throw(::com::sun::star::uno::RuntimeException); + + // XComponent + virtual void SAL_CALL disposing( ); + + using AccessibleShape::disposing; + +protected: + virtual OUString CreateAccessibleBaseName(void) throw (::com::sun::star::uno::RuntimeException); + + sdr::table::SvxTableController* getTableController(); + + void checkCellPosition( sal_Int32 nCol, sal_Int32 nRow ) throw ( ::com::sun::star::lang::IndexOutOfBoundsException ); + void getColumnAndRow( sal_Int32 nChildIndex, sal_Int32& rnColumn, sal_Int32& rnRow ) throw (::com::sun::star::lang::IndexOutOfBoundsException ); + +private: + rtl::Reference< AccessibleTableShapeImpl > mxImpl; +}; + +} // end of namespace accessibility + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/AccessibleTextHelper.hxx b/include/svx/AccessibleTextHelper.hxx new file mode 100644 index 000000000000..c930af0cb2e4 --- /dev/null +++ b/include/svx/AccessibleTextHelper.hxx @@ -0,0 +1,425 @@ +/* -*- 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 _SVX_ACCESSILE_TEXT_HELPER_HXX_ +#define _SVX_ACCESSILE_TEXT_HELPER_HXX_ + +#include <memory> +#include <sal/types.h> +#include <tools/gen.hxx> +#include <com/sun/star/uno/Any.hxx> +#include <com/sun/star/uno/Reference.hxx> +#include <com/sun/star/accessibility/XAccessible.hpp> +#include <com/sun/star/accessibility/XAccessibleContext.hpp> +#include <com/sun/star/accessibility/XAccessibleComponent.hpp> +#include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp> +#include "svx/svxdllapi.h" + + +class SvxTextForwarder; +class SvxViewForwarder; +class SvxEditSource; + +namespace accessibility +{ + + class AccessibleTextHelper_Impl; + + /** Helper class for objects containing EditEngine/Outliner text + + This class provides the methods from the XAccessibleContext, + XAccessibleEventBroadcaster and XAccessibleComponent + interfaces, that are common to all accessible objects + containing an edit engine. + + The text contained in the EditEngine/Outliner is presented as + children of this class, namely for every text paragraph a + AccessibleEditableTextPara child object is generated. As this + class manages these children for itself, it has to send out + AccessibleEventId::CHILD events on your + behalf. Thus, you must forward every call to your + addEventListener()/removeEventListener() methods to the + AccessibleTextHelper (methods + AddEventListener/RemoveEventListener), otherwise none or not + every one of your event listener will notice child changes. + + You have to implement the SvxEditSource, SvxTextForwarder, + SvxViewForwarder and SvxEditViewForwarder interfaces in order + to enable your object to cooperate with this + class. SvxTextForwarder encapsulates the fact that text + objects do not necessarily have an EditEngine at their + disposal, SvxViewForwarder and SvxEditViewForwarder do the + same for the document and the edit view. The three mentioned + forwarder objects are not stored by the AccessibleTextHelper, + but fetched every time from the SvxEditSource. So you are best + off making your SvxEditSource::Get*Forwarder methods cache the + current forwarder. + + To support changes in edit mode or conversion of fixed text + into EditEngine text, you can change the SvxEditSource this + class is referring to. This might render all children invalid + and change the child count, since the AccessibleTextHelper + reinitializes itself from scratch. + + This class registers itself at the SvxEditSource as a state + listener and manages the state of its children (i.e. the + paragraphs). See the method documentation of + AccessibleTextHelper::SetEditSource for the expected + events. Generally, be prepared that when sending any of these + events via SvxEditSource::GetBroadcaster() broadcaster, the + AccessibleTextHelper will call the SvxEditSource and their + forwarder to update it's state. Avoid being inconsistent in + the facts you tell in the events, e.g. when sending a + TEXT_HINT_PARAINSERTED event, the + SvxEditSource::GetTextForwarder().GetParagraphCount() should + already include the newly inserted paragraph. + + @attention All public methods must not be called with any + mutex hold, except when calling from the main thread (with + holds the solar mutex), unless stated otherwise. This is + because they themselves might need the solar mutex in addition + to the object mutex, and the ordering of the locking must be: + first solar mutex, then object mutex. Furthermore, state + change events might be fired internally. + + @derive Use this class in an aggregation and forward, or + derive from it and overwrite. If the Remove/AddEventListener + methods are overwritten, make sure FireEvent is adapted, + too. + + @see SvxEditSource + @see SvxTextForwarder + @see SvxViewForwarder + @see SvxEditViewForwarder + */ + class SVX_DLLPUBLIC AccessibleTextHelper + { + + public: + typedef ::std::vector< sal_Int16 > VectorOfStates; + + /** Create accessible text object for given edit source + + @param pEditSource + The edit source to use. Object ownership is transferred + from the caller to the callee. The object listens on the + SvxEditSource for object disposal, so no provisions have + to be taken if the caller destroys the data (e.g. the + model) contained in the given SvxEditSource. + + */ + SAL_WNODEPRECATED_DECLARATIONS_PUSH + explicit AccessibleTextHelper( ::std::auto_ptr< SvxEditSource > pEditSource ); + SAL_WNODEPRECATED_DECLARATIONS_POP + virtual ~AccessibleTextHelper(); + + protected: + + // declared, but not defined + AccessibleTextHelper( const AccessibleTextHelper& ); + // declared, but not defined + AccessibleTextHelper& operator= ( const AccessibleTextHelper& ); + + public: + /** Query the current edit source + + @attention This method returns by reference, so you are + responsible for serialization (typically, you aquired the + solar mutex when calling this method). Thus, the method + should only be called from the main office thread. + + */ + virtual const SvxEditSource& GetEditSource() const SAL_THROW((::com::sun::star::uno::RuntimeException)); + + /** Set the current edit source + + @attention Might fire state change events, therefore, + don't hold any mutex except solar mutex, which you are + required to lock before. This method should only be called + from the main office thread. + + The EditSource set here is required to broadcast out the + following hints: EDITSOURCE_HINT_PARASMOVED, + EDITSOURCE_HINT_SELECTIONCHANGED, TEXT_HINT_MODIFIED, + TEXT_HINT_PARAINSERTED, TEXT_HINT_PARAREMOVED, + TEXT_HINT_TEXTHEIGHTCHANGED, + TEXT_HINT_VIEWSCROLLED. Otherwise, not all state changes + will get noticed by the accessibility object. Further + more, when the corresponding core object or the model is + dying, either the edit source must be set to NULL or it + has to broadcast a SFX_HINT_DYING hint. + + If the SvxEditSource's managed text can change between + edit/non-edit mode (i.e. there are times when + SvxEditSource::GetEditViewForwarder(sal_False) returns + NULL), then the two additional hints are required: + HINT_BEGEDIT and HINT_ENDEDIT. When the + AccessibleTextHelper receives a HINT_BEGEDIT, it expects + the SvxEditSource already in edit mode. On a HINT_ENDEDIT, + edit mode must already been left. The rationale for these + events are the fact that focus and selection have to be + updated in edit mode, and completely relinquished and + reset to the parent (for the focus) in non-edit mode. + + This class does not have a dispose method, since it is not + a UNO component. Nevertheless, it holds C++ references to + several core objects, so you should issue a + SetEditSource(::std::auto_ptr<SvxEditSource>(NULL)) in + your dispose() method. + + @param pEditSource + The new edit source to set. Object ownership is transferred + from the caller to the callee. + */ + SAL_WNODEPRECATED_DECLARATIONS_PUSH + virtual void SetEditSource( ::std::auto_ptr< SvxEditSource > pEditSource ) SAL_THROW((::com::sun::star::uno::RuntimeException)); + SAL_WNODEPRECATED_DECLARATIONS_POP + + /** Set the event source + + You should set the event source before registering any + event listener and before requesting any child. Children + of this object receive the event source as their parent + accessible object. That is, the event source is best set + in your object's init method. + + @attention When setting a reference here, you should call + Dispose() when you as the owner are disposing, since until + then this object will hold that reference + + @param rInterface + The interface that should be set as the source for + accessibility events sent by this object. + */ + virtual void SetEventSource( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >& rInterface ); + + /** Get the event source + + @return the interface that is set as the source for + accessibility events sent by this object. + */ + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > GetEventSource() const; + + /** Set offset of EditEngine/Outliner from parent + + If the origin of the underlying EditEngine/Outliner does + not correspond to the upper left corner of the object + using this class, you have to specify the offset. + + @attention Might fire state change events, therefore, + don't hold any mutex except solar mutex, which you are + required to lock before. This method should only be called + from the main office thread. + + @param rPoint + The offset in screen coordinates (i.e. pixel) + */ + virtual void SetOffset( const Point& rPoint ); + + /** Query offset of EditEngine/Outliner from parent + + @return the offset in screen coordinates (i.e. pixel) + */ + virtual Point GetOffset() const; + + /** Set offset the object adds to all children's indices + + This can be used if the owner of this object has children + handled by itself. Setting an offset different from 0 + leads to this object mimicking that all it's children are + within the range [nOffset, GetChildCount()+nOffset). That + means, GetChild() also expects the index to be in this + range. + + @attention Might fire state change events, therefore, + don't hold any mutex except solar mutex, which you are + required to lock before. This method should only be called + from the main office thread. + + @param nOffset + The offset to add to every children's index. + */ + virtual void SetStartIndex( sal_Int32 nOffset ); + + /** Query offset the object adds to all children's indices + + @return the offset to add to every children's index. + */ + virtual sal_Int32 GetStartIndex() const; + + /** Sets a vector of additional accessible states. + + The states are passed to every created child object + (text paragraph). The state values are defined in + com::sun::star::accessibility::AccessibleStateType. + + This function has to be called before querying for + any children (e.g. with GetChild()). + */ + void SetAdditionalChildStates( const VectorOfStates& rChildStates ); + + /** Update the visible children + + @attention Might fire state change events, therefore, + don't hold any mutex except solar mutex, which you are + required to lock before. This method should only be called + from the main office thread. + + This method reevaluates the visibility of all + children. Call this method if your visibility state has + changed somehow, e.g. if the visible area has changed and + the AccessibleTextHelper isn't notified internally + (e.g. via TEXT_HINT_VIEWSCROLLED). Normally, there should + not be a need to call this method. + */ + virtual void UpdateChildren() SAL_THROW((::com::sun::star::uno::RuntimeException)); + + /** Drop all references and enter disposed state + + This method drops all references to external objects (also + the event source reference set via SetEventSource()) and + sets the object into the disposed state (i.e. the methods + return default values or throw a uno::DisposedException + exception). + */ + virtual void Dispose(); + + /** Set the focus state of the accessibility object + + Since this class handles children which also might get the + focus, the user of this class is encouraged to delegate + focus handling. Whenever the focus state of the + surrounding object changes, this method has to be called. + + The protocol of focus handling for a user of this class is + then to call SetFocus() with the appropriate focus state, + and HaveFocus() to determine the focus state you tell the + outside. + + @attention Might fire state change events, therefore, + don't hold any mutex except solar mutex, which you are + required to lock before. This method should only be called + from the main office thread. + + @param bHaveFocus + Whether we got or we lost the focus. Set to sal_True if + focus is gotten, sal_False otherwise. + + @see HaveFocus() + */ + virtual void SetFocus( sal_Bool bHaveFocus = sal_True ) SAL_THROW((::com::sun::star::uno::RuntimeException)); + + /** Query the focus state of the surrounding object + + If focus handling is delegated to this class, determine + focus state with this method. Be prepared that even if you + set the focus with SetFocus(sal_True), this method might + return sal_False. This is the case if one of the children + actually got the focus. + + @return the state of the focus ownership + */ + virtual sal_Bool HaveFocus() SAL_THROW((::com::sun::star::uno::RuntimeException)); + + /** Call this method to invoke all event listeners with the given event + + @attention Fires state change events, therefore, don't hold any mutex + + @param nEventId + Id of the event to send, @see AccessibleEventId + + @param rNewValue + The value we've changed into + + @param rOldValue + The old value before the change + */ + virtual void FireEvent( const sal_Int16 nEventId, + const ::com::sun::star::uno::Any& rNewValue = ::com::sun::star::uno::Any(), + const ::com::sun::star::uno::Any& rOldValue = ::com::sun::star::uno::Any() ) const; + + /** Call this method to invoke all event listeners with the given event + + @attention Fires state change events, therefore, don't hold any mutex + + @param rEvent + The event to send, @see AccessibleEventObject + + */ + // TODO: make that virtual next time + void FireEvent( const ::com::sun::star::accessibility::AccessibleEventObject& rEvent ) const; + + /** Query select state of the text managed by this object + + @attention Don't call with locked mutexes. You may hold + the solar mutex, but this method aquires it anyway. + + @return sal_True, if the text or parts of it are currently selected + */ + virtual sal_Bool IsSelected() const; + + // XAccessibleContext child handling methods + //----------------------------------------------------------------- + /** Implements getAccessibleChildCount + + @attention Don't call with locked mutexes. You may hold + the solar mutex, but this method aquires it anyway. + */ + virtual sal_Int32 GetChildCount() SAL_THROW((::com::sun::star::uno::RuntimeException)); + /** Implements getAccessibleChild + + @attention Don't call with locked mutexes. You may hold + the solar mutex, but this method aquires it anyway. + */ + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > GetChild( sal_Int32 i ) SAL_THROW((::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException)); + + // XAccessibleEventBroadcaster child related methods + //----------------------------------------------------------------- + /** Implements addEventListener + + @attention Don't call with locked mutexes + */ + virtual void AddEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleEventListener >& xListener ) SAL_THROW((::com::sun::star::uno::RuntimeException)); + /** Implements removeEventListener + + @attention Don't call with locked mutexes + */ + virtual void RemoveEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleEventListener >& xListener ) SAL_THROW((::com::sun::star::uno::RuntimeException)); + + // XAccessibleComponent child related methods + //----------------------------------------------------------------- + /** Implements getAccessibleAt + + @attention Don't call with locked mutexes. You may hold + the solar mutex, but this method aquires it anyway. + */ + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL GetAt( const ::com::sun::star::awt::Point& aPoint ) SAL_THROW((::com::sun::star::uno::RuntimeException)); + + private: + + /// @dyn + const std::auto_ptr< AccessibleTextHelper_Impl > mpImpl; + + }; + +} // end of namespace accessibility + +#endif /* _SVX_ACCESSILE_TEXT_HELPER_HXX_ */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/ActionDescriptionProvider.hxx b/include/svx/ActionDescriptionProvider.hxx new file mode 100644 index 000000000000..ce616409922e --- /dev/null +++ b/include/svx/ActionDescriptionProvider.hxx @@ -0,0 +1,59 @@ +/* -*- 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 _SVX_ACTIONDESCRIPTIONPROVIDER_HXX +#define _SVX_ACTIONDESCRIPTIONPROVIDER_HXX + +#include "svx/svxdllapi.h" + +// header for class OUString +#include <rtl/ustring.hxx> + +//----------------------------------------------------------------------------- +/** This class provides localized descriptions for some basic actions done with objects. +The strings are intended to be provided to the user e.g. as description for undo actions in the menu. +The name of the object acted on and the type of action needs to be given as input parameter. +*/ + +class SVX_DLLPUBLIC ActionDescriptionProvider +{ +public: + enum ActionType + { + INSERT + , DELETE + , CUT + , MOVE + , RESIZE + , ROTATE + , TRANSFORM + , FORMAT + , MOVE_TOTOP + , MOVE_TOBOTTOM + , POS_SIZE + }; + +public: + static OUString createDescription( ActionType eActionType + , const OUString& rObjectName ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/ChildrenManager.hxx b/include/svx/ChildrenManager.hxx new file mode 100644 index 000000000000..6f05fe95426a --- /dev/null +++ b/include/svx/ChildrenManager.hxx @@ -0,0 +1,210 @@ +/* -*- 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 _SVX_ACCESSIBILITY_CHILDREN_MANAGER_HXX +#define _SVX_ACCESSIBILITY_CHILDREN_MANAGER_HXX + +#include <svx/IAccessibleViewForwarderListener.hxx> +#include <svx/AccessibleShapeTreeInfo.hxx> +#include <com/sun/star/drawing/XShape.hpp> +#include <com/sun/star/drawing/XShapes.hpp> +#include <memory> +#include "svx/svxdllapi.h" + +namespace accessibility { + +class AccessibleContextBase; +class AccessibleShape; +class ChildrenManagerImpl; + +/** The <type>AccessibleChildrenManager</type> class acts as a cache of the + accessible objects of the currently visible shapes of a draw page and as + a factory to create the corresponding accessible object for a given + shape. + + <p>There are two sources of shapes. The first is a list of UNO shapes. + It is passes to the constructor and can be re-set with a call to + <member>SetShapeList</member>. Accessibility objects which represent + these shapes are constructed usually on demand. The second source is a + set of single <type>AccessibleShape</type> objects added by calls to + <member>AddAccessibleShape</member>. These are not modified by this + class. They are only copied into the list of visible shapes depending + on their visibility. The later list can be cleared by calling + <member>ClearAccessibleShapeList</member>. The actual set of children + accessible through the <member>GetChildrenCount</member> and + <member>GetChild</member> methods are the accessible objects that lie + completely or partially inside the visible area obtained from the view + forwarder in the shape tree info.</p> + + <p>A children manager registers itself at the broadcaster passed to its + constructor and transforms/forwards the received events to the listeners + of the also given context base. The transformation process includes + interpreting a <type>document::XEventListener</type>, the change from + XShape references to the associated XAccessible reference, and the + creation of an XAccessibleEventObject. The event object is then passed + to the <method>fireEvent</method> method of the context and from there + forwarded to all listeners.</p> + + <p>Note that some of the data given to the constructor is passed to the + accessible shape objects created by that child manager which in turn + pass these data to their child managers. The data is thus propagated + down a tree of child managers/accessible shape objects from a top level + class that is usually a document/model. This is the way to give all + accessible objects access to data normally known only to the top level + owner of the shapes.</p> +*/ +class SVX_DLLPUBLIC ChildrenManager + : public IAccessibleViewForwarderListener +{ +public: + /** Create a children manager, which manages the children of the given + parent. The parent is used for creating accessible objects. The + list of shapes for which to create those objects is not derived from + the parent and has to be provided seperately by calling one of the + update methods. + @param rxParent + The parent of the accessible objects which will be created + on demand at some point of time in the future. + @param rxShapeList + List of UNO shapes to manage. + @param rShapeTreeInfo + Bundel of information passed down the shape tree. + @param rContext + An accessible context object that is called for fireing events + for new and deleted children, i.e. that holds a list of + listeners to be informed. + */ + ChildrenManager (const ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible>& rxParent, + const ::com::sun::star::uno::Reference< + ::com::sun::star::drawing::XShapes>& rxShapeList, + const AccessibleShapeTreeInfo& rShapeTreeInfo, + AccessibleContextBase& rContext); + + /** If there still are managed children these are marked as DEFUNC and + released. + */ + virtual ~ChildrenManager (void); + + /** Return the number of currently visible accessible children. + @return + If there are no children a 0 is returned. + */ + long GetChildCount (void) const throw (); + + /** Return the requested accessible child or throw and + IndexOutOfBoundsException if the given index is invalid. + @param nIndex + Index of the requested child. Call getChildCount for obtaining + the number of children. + @return + In case of a valid index this method returns a reference to the + requested accessible child. This reference is empty if it has + not been possible to create the accessible object of the + corresponding shape. + @raises + Throws an IndexOutOfBoundsException if the index is not valid. + */ + ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible> + GetChild (long nIndex) + throw (::com::sun::star::uno::RuntimeException, + ::com::sun::star::lang::IndexOutOfBoundsException); + + /** Update the child manager. Take care of a modified set of children + and modified visible area. This method can optimize the update + process with respect seperate updates of a modified children list + and visible area. + @param bCreateNewObjectsOnDemand + If </true> then accessible objects associated with the visible + shapes are created only when asked for. No event is sent on + creation. If </false> then the accessible objects are created + before this method returns and events are sent to inform the + listeners of the new object. + */ + void Update (bool bCreateNewObjectsOnDemand = true); + + /** Replace the list of UNO shapes by the specified list. + @param xShapeList + The new list of shapes. + */ + void SetShapeList (const ::com::sun::star::uno::Reference< + ::com::sun::star::drawing::XShapes>& xShapeList); + + /** Add an accessible shape. The difference to the UNO shapes in the + list passed to the constructor the specified object does not have to + be created by the shape factory. This gives the caller full control + over object creation. + + @param pShape + This class <em>does</em> take ownership of the argument. + */ + void AddAccessibleShape (std::auto_ptr<AccessibleShape> pShape); + + /** Clear the list of accessible shapes which have been added by + previous calls to <member>AddAccessibleShape</member>. + */ + void ClearAccessibleShapeList (void); + + /** Take a new event shape tree info. Call this method to inform the + children manager of a change of the info bundle. + @param rShapeTreeInfo + The new info that replaces the current one. + */ + void SetInfo (AccessibleShapeTreeInfo& rShapeTreeInfo); + + /** Update the SELECTED and FOCUSED states of all visible children + according to the given selection. This includes setting + <em>and</em> resetting the states. + */ + void UpdateSelection (void); + + /** Return whether one of the shapes managed by this object has + currently the focus. + @return + Returns <true/> when there is a shape that has the focus and + <false/> when there is no such shape. + */ + bool HasFocus (void); + + /** When there is a shape that currently has the focus, + i.e. <member>HasFocus()</member> returns <true/> then remove the + focus from that shape. Otherwise nothing changes. + */ + void RemoveFocus (void); + + //===== IAccessibleViewForwarderListener ================================ + virtual void ViewForwarderChanged (ChangeType aChangeType, + const IAccessibleViewForwarder* pViewForwarder); + +protected: + ChildrenManagerImpl* mpImpl; + +private: + // Don't use the copy constructor or the assignment operator. They are + // not implemented (and are not intended to be). + SVX_DLLPRIVATE ChildrenManager (const ChildrenManager&); + SVX_DLLPRIVATE ChildrenManager& operator= (const ChildrenManager&); +}; + +} // end of namespace accessibility + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/DescriptionGenerator.hxx b/include/svx/DescriptionGenerator.hxx new file mode 100644 index 000000000000..fce8478719c9 --- /dev/null +++ b/include/svx/DescriptionGenerator.hxx @@ -0,0 +1,200 @@ +/* -*- 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 _SVX_ACCESSIBILITY_DESCRIPTION_GENERATOR_HXX +#define _SVX_ACCESSIBILITY_DESCRIPTION_GENERATOR_HXX + +#include <com/sun/star/drawing/XShape.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <rtl/ustrbuf.hxx> +#include "svx/svxdllapi.h" + + +namespace accessibility { + +/** This class creates description strings for shapes. + <p>Initialized with a given shape additional calls to the + <member>addProperty</member> method will build a descriptive string that + starts with a general shape description and the shapes style. Appended + are all the specified property names and values that differ from the + default values in the style.</p> +*/ +class SVX_DLLPUBLIC DescriptionGenerator +{ +public: + enum PropertyType { + COLOR, + INTEGER, + STRING, + FILL_STYLE + }; + + /** Creates a new description generator with an empty description + string. Usually you will want to call initialize next to specifiy + a general description of the shape. + @param xShape + The shape from which properties will be extracted by later calls + to <member>addProperty</member>. + */ + DescriptionGenerator (const ::com::sun::star::uno::Reference< + ::com::sun::star::drawing::XShape>& xShape); + + ~DescriptionGenerator (void); + + /** Initialize the description with the given prefix followed by the + shape's style in parantheses and a colon. + @param sPrefix + An introductory description of the shape that is made more + specific by later calls to <member>addProperty</member>. + */ + void Initialize (OUString sPrefix); + + /** Initialize the description with the specified string from the + resource followed by the shape's style in parantheses and a colon. + @param nResourceId + A resource id the specifies the introductory description of the + shape that is made more specific by later calls to + <member>addProperty</member>. + */ + void Initialize (sal_Int32 nResourceId); + + /** Returns the description string and then resets it. Usually called + as last method before destroying the object. + @return + The description string in its current form. + */ + OUString operator() (void); + + /** Add the given property name and its associated value to the + description string. If the property value does not differ from the + default value of the shape's style then the description string is + not modified. + @param sPropertyName + The Name of the property to append. + @param aType + Type of the property's value. It controls the transformation + into the value's string representation. + @param sLocalizedName + Localized name of the property. An empty string tells the + method to use the property name instead. + @param nWhichId + This which id is used to localize the property value. If it is + not known a value of -1 signals to use a default representation. + */ + void AddProperty (const OUString& sPropertyName, + PropertyType aType, + const OUString& sLocalizedName=OUString(), + long nWhichId=-1); + + /** Add the given property name and its associated value to the + description string. If the property value does not differ from the + default value of the shape's style then the description string is + not modified. This method forwards the request to its cousing but + first replaces the id of the localized name by the associated string + from the resource. + @param sPropertyName + The Name of the property to append. + @param aType + Type of the property's value. It controls the transformation + into the value's string representation. + @param nResourceId + Id of the kocalized name of the property int the resource. + @param nWhichId + This which id is used to localize the property value. If it is + not known a value of -1 signals to use a default representation. + */ + void AddProperty (const OUString& sPropertyName, + PropertyType aType, + sal_Int32 nResourceId, + long nWhichId=-1); + + /** Append the given string as is to the current description. + @param sString + String to append to the current description. It is not modified + in any way. + */ + void AppendString (const OUString& sString); + + /** Add properties that describe line and border attributes. + */ + void AddLineProperties (void); + + /** Add properties that describe how areas are filled. + */ + void AddFillProperties (void); + + /** Add properties that describesattributes of 3D objects. + */ + void Add3DProperties (void); + + /** Add properties that describe text attributes. + */ + void AddTextProperties (void); + +private: + /// Reference to the shape from which the properties are extracted. + ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape> mxShape; + + /// Reference to the shape's property set. + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> mxSet; + + /// The description string that is build. + OUStringBuffer msDescription; + + /** This flag is used to determine whether to insert a separator e.g. a + comma before the next property. + */ + bool mbIsFirstProperty; + + /** Add a property value formated as color to the description string. + */ + SVX_DLLPRIVATE void AddColor (const OUString& sPropertyName, + const OUString& sLocalizedName); + + /** Add a property value formated as integer to the description string. + */ + SVX_DLLPRIVATE void AddInteger (const OUString& sPropertyName, + const OUString& sLocalizedName); + + /** Add a property value formated as string to the description string. + @param sPropertyName + Name of the property. + */ + SVX_DLLPRIVATE void AddString (const OUString& sPropertyName, + const OUString& sLocalizedName, long nWhichId = -1); + + /** Add a property value formated as fill style to the description + string. If the fill style is <const>HATCH</const>, + <const>GRADIENT</const>, or <const>BITMAP</const>, then the of the + hatch, gradient, or bitmap is appended as well. + @param sPropertyName + Name of the property. Usually this will be "FillStyle". + */ + SVX_DLLPRIVATE void AddFillStyle (const OUString& sPropertyName, + const OUString& sLocalizedName); +}; + + +} // end of namespace accessibility + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/EnhancedCustomShape2d.hxx b/include/svx/EnhancedCustomShape2d.hxx new file mode 100644 index 000000000000..600e247db6b5 --- /dev/null +++ b/include/svx/EnhancedCustomShape2d.hxx @@ -0,0 +1,228 @@ +/* -*- 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 _ENHANCEDCUSTOMSHAPE2D_HXX +#define _ENHANCEDCUSTOMSHAPE2D_HXX + +#include <svx/msdffdef.hxx> +#include <svx/sdasitm.hxx> +#include <com/sun/star/uno/Sequence.h> +#include <com/sun/star/beans/PropertyValues.hpp> +#include <com/sun/star/awt/Point.hpp> +#include <com/sun/star/awt/Size.hpp> +#include <svl/itemset.hxx> +#include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.hpp> +#include <com/sun/star/drawing/EnhancedCustomShapeSegment.hpp> +#include <com/sun/star/drawing/EnhancedCustomShapeParameter.hpp> +#include <com/sun/star/drawing/EnhancedCustomShapeTextFrame.hpp> +#include <com/sun/star/drawing/EnhancedCustomShapeAdjustmentValue.hpp> +#include <svx/EnhancedCustomShapeFunctionParser.hxx> +#include <tools/gen.hxx> + +#include <boost/shared_ptr.hpp> +#include <vector> + +#define DFF_CUSTOMSHAPE_FLIP_V 1 +#define DFF_CUSTOMSHAPE_FLIP_H 2 +#define DFF_CUSTOMSHAPE_EXCH 4 + +class SdrModel; +class SdrObject; +class SfxItemSet; +struct SvxMSDffVertPair; +struct SvxMSDffCalculationData; +struct SvxMSDffTextRectangles; + +#define HANDLE_FLAGS_MIRRORED_X 0x0001 +#define HANDLE_FLAGS_MIRRORED_Y 0x0002 +#define HANDLE_FLAGS_SWITCHED 0x0004 +#define HANDLE_FLAGS_POLAR 0x0008 +#define HANDLE_FLAGS_MAP 0x0010 +#define HANDLE_FLAGS_RANGE_X_MINIMUM 0x0020 +#define HANDLE_FLAGS_RANGE_X_MAXIMUM 0x0040 +#define HANDLE_FLAGS_RANGE_Y_MINIMUM 0x0080 +#define HANDLE_FLAGS_RANGE_Y_MAXIMUM 0x0100 +#define HANDLE_FLAGS_RADIUS_RANGE_MINIMUM 0x0200 +#define HANDLE_FLAGS_RADIUS_RANGE_MAXIMUM 0x0400 +#define HANDLE_FLAGS_REFX 0x0800 +#define HANDLE_FLAGS_REFY 0x1000 +#define HANDLE_FLAGS_REFANGLE 0x2000 +#define HANDLE_FLAGS_REFR 0x4000 + +// MSDFF_HANDLE_FLAGS_RANGE_Y seems to be not defined in +// escher, but we are using it internally in to differentiate +// between X_RANGE and Y_RANGE + +class SdrPathObj; + +class EnhancedCustomShape2d : public SfxItemSet +{ + SdrObject* pCustomShapeObj; + MSO_SPT eSpType; + + sal_Int32 nCoordLeft; + sal_Int32 nCoordTop; + sal_Int32 nCoordWidthG; + sal_Int32 nCoordHeightG; + sal_Int32 nCoordWidth; + sal_Int32 nCoordHeight; + Rectangle aLogicRect; + + double fXScale; + double fYScale; + double fXRatio; + double fYRatio; + + sal_Bool bOOXMLShape; + + sal_Int32 nXRef; + sal_Int32 nYRef; + sal_uInt32 nFlags; + sal_uInt32 nColorData; + + /* + + */ + struct EquationResult { + sal_Bool bReady; + double fValue; + }; + com::sun::star::uno::Sequence< OUString > seqEquations; + std::vector< ::boost::shared_ptr< EnhancedCustomShape::ExpressionNode > > vNodesSharedPtr; + std::vector< EquationResult > vEquationResults; + + com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeSegment > seqSegments; + com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeParameterPair> seqCoordinates; + com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeTextFrame > seqTextFrames; + com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeParameterPair> seqGluePoints; + com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeAdjustmentValue > seqAdjustmentValues; + com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValues > seqHandles; + com::sun::star::uno::Sequence< com::sun::star::awt::Size > seqSubViewSize; + + sal_Bool bTextFlow : 1; + sal_Bool bFilled : 1; + sal_Bool bStroked : 1; + + sal_Bool bFlipH; + sal_Bool bFlipV; + sal_Int32 nRotateAngle; + + bool SetAdjustValueAsDouble( const double& rValue, const sal_Int32 nIndex ); + sal_Int32 GetLuminanceChange( sal_uInt32 nIndex ) const; + Color GetColorData( const Color& rFillColor, sal_uInt32 nIndex, double dBrightness ) const; + void AdaptObjColor(SdrPathObj& rObj, const SfxItemSet& rCustomShapeSet, + sal_uInt32& nColorIndex, sal_uInt32 nColorCount); + bool GetParameter( double& rParameterReturnValue, const com::sun::star::drawing::EnhancedCustomShapeParameter&, + const bool bReplaceGeoWidth, const bool bReplaceGeoHeight ) const; + Point GetPoint( const com::sun::star::drawing::EnhancedCustomShapeParameterPair&, + const bool bScale = true, const bool bReplaceGeoSize = false ) const; + + void CreateSubPath( sal_uInt16& rSrcPt, sal_uInt16& rSegmentInd, std::vector< SdrPathObj* >& rObjectList, + sal_Bool bLineGeometryNeededOnly, sal_Bool bSortFilledObjectsToBack, + sal_Int32 nIndex ); + SdrObject* CreatePathObj( sal_Bool bLineGeometryNeededOnly ); + const sal_Int32* ApplyShapeAttributes( const SdrCustomShapeGeometryItem& rItem ); + + void SetPathSize( sal_Int32 nIndex = 0 ); + + public : + + struct Handle + { + sal_uInt32 nFlags; + + sal_Bool bMirroredX; + sal_Bool bMirroredY; + sal_Bool bSwitched; + + com::sun::star::drawing::EnhancedCustomShapeParameterPair aPosition; + com::sun::star::drawing::EnhancedCustomShapeParameterPair aPolar; + + sal_Int32 nRefX; + sal_Int32 nRefY; + sal_Int32 nRefAngle; + sal_Int32 nRefR; + + com::sun::star::drawing::EnhancedCustomShapeParameter aRadiusRangeMinimum; + com::sun::star::drawing::EnhancedCustomShapeParameter aRadiusRangeMaximum; + com::sun::star::drawing::EnhancedCustomShapeParameter aXRangeMinimum; + com::sun::star::drawing::EnhancedCustomShapeParameter aXRangeMaximum; + com::sun::star::drawing::EnhancedCustomShapeParameter aYRangeMinimum; + com::sun::star::drawing::EnhancedCustomShapeParameter aYRangeMaximum; + + Handle() : bMirroredX ( sal_False ), bMirroredY ( sal_False ), bSwitched( sal_False ), + nRefX( -1 ), nRefY( -1 ), nRefAngle( -1 ), nRefR( -1 ) {}; + }; + + sal_Bool IsFlipVert() { return bFlipV; }; + sal_Bool IsFlipHorz() { return bFlipH; }; + sal_Int32 GetRotateAngle() { return nRotateAngle; }; + SVX_DLLPUBLIC bool IsPostRotate() const; + + SVX_DLLPUBLIC SdrObject* CreateLineGeometry(); + SVX_DLLPUBLIC SdrObject* CreateObject( sal_Bool bLineGeometryNeededOnly ); + SVX_DLLPUBLIC void ApplyGluePoints( SdrObject* pObj ); + SVX_DLLPUBLIC Rectangle GetTextRect() const; + + SVX_DLLPUBLIC sal_uInt32 GetHdlCount() const; + SVX_DLLPUBLIC bool GetHandlePosition( const sal_uInt32 nIndex, Point& rReturnPosition ) const; + SVX_DLLPUBLIC bool SetHandleControllerPosition( const sal_uInt32 nIndex, const com::sun::star::awt::Point& rPosition ); + + SVX_DLLPUBLIC EnhancedCustomShape2d( SdrObject* pSdrObjCustomShape ); + SVX_DLLPUBLIC ~EnhancedCustomShape2d(); + + enum EnumFunc + { + ENUM_FUNC_PI, + ENUM_FUNC_LEFT, + ENUM_FUNC_TOP, + ENUM_FUNC_RIGHT, + ENUM_FUNC_BOTTOM, + ENUM_FUNC_XSTRETCH, + ENUM_FUNC_YSTRETCH, + ENUM_FUNC_HASSTROKE, + ENUM_FUNC_HASFILL, + ENUM_FUNC_WIDTH, + ENUM_FUNC_HEIGHT, + ENUM_FUNC_LOGWIDTH, + ENUM_FUNC_LOGHEIGHT + }; + double GetEnumFunc( const EnumFunc eVal ) const; + + double GetAdjustValueAsDouble( const sal_Int32 nIndex ) const; + double GetEquationValueAsDouble( const sal_Int32 nIndex ) const; + sal_Int32 GetAdjustValueAsInteger( const sal_Int32 nIndex, const sal_Int32 nDefault = 0 ) const; + + SVX_DLLPUBLIC static OUString GetEquation( const sal_uInt16 nFlags, sal_Int16 nPara1, sal_Int16 nPara2, sal_Int16 nPara3 ); + + static void AppendEnhancedCustomShapeEquationParameter( OUString& rParameter, const sal_Int16 nPara, const bool bIsSpecialValue ); + + static void SetEnhancedCustomShapeEquationParameter( com::sun::star::drawing::EnhancedCustomShapeParameter& + rParameter, const sal_Int16 nPara, const sal_Bool bIsSpecialValue ); + SVX_DLLPUBLIC static void SetEnhancedCustomShapeParameter( com::sun::star::drawing::EnhancedCustomShapeParameter& + rParameter, const sal_Int32 nValue ); + SVX_DLLPUBLIC static void SetEnhancedCustomShapeHandleParameter( com::sun::star::drawing::EnhancedCustomShapeParameter& + rParameter, const sal_Int32 nPara, const bool bIsSpecialValue, bool bHorz ); + static bool ConvertSequenceToEnhancedCustomShape2dHandle( const com::sun::star::beans::PropertyValues& rHandleProperties, + EnhancedCustomShape2d::Handle& rDestinationHandle ); + static void SwapStartAndEndArrow( SdrObject* pObj ); +}; +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/EnhancedCustomShapeFunctionParser.hxx b/include/svx/EnhancedCustomShapeFunctionParser.hxx new file mode 100644 index 000000000000..28df983df61c --- /dev/null +++ b/include/svx/EnhancedCustomShapeFunctionParser.hxx @@ -0,0 +1,208 @@ +/* -*- 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 _ENHANCEDCUSTOMSHAPEFUNCTIONPARSER_HXX +#define _ENHANCEDCUSTOMSHAPEFUNCTIONPARSER_HXX + +#include <sal/config.h> +#include <boost/shared_ptr.hpp> +#include "EnhancedCustomShapeFunctionParser.hxx" +#include <com/sun/star/drawing/EnhancedCustomShapeParameter.hpp> +#include <com/sun/star/drawing/EnhancedCustomShapeParameterType.hpp> +#include <vector> + +#include <svx/svxdllapi.h> + +struct EnhancedCustomShapeEquation +{ + sal_Int32 nOperation; + sal_Int32 nPara[ 3 ]; + + EnhancedCustomShapeEquation() : + nOperation ( 0 ) + { + nPara[ 0 ] = nPara[ 1 ] = nPara[ 2 ] = 0; + } +}; + +class EnhancedCustomShape2d; + +namespace EnhancedCustomShape { + +enum ExpressionFunct +{ + FUNC_CONST, + + ENUM_FUNC_PI, + ENUM_FUNC_LEFT, + ENUM_FUNC_TOP, + ENUM_FUNC_RIGHT, + ENUM_FUNC_BOTTOM, + ENUM_FUNC_XSTRETCH, + ENUM_FUNC_YSTRETCH, + ENUM_FUNC_HASSTROKE, + ENUM_FUNC_HASFILL, + ENUM_FUNC_WIDTH, + ENUM_FUNC_HEIGHT, + ENUM_FUNC_LOGWIDTH, + ENUM_FUNC_LOGHEIGHT, + ENUM_FUNC_ADJUSTMENT, + ENUM_FUNC_EQUATION, + + UNARY_FUNC_ABS, + UNARY_FUNC_SQRT, + UNARY_FUNC_SIN, + UNARY_FUNC_COS, + UNARY_FUNC_TAN, + UNARY_FUNC_ATAN, + UNARY_FUNC_NEG, + + BINARY_FUNC_PLUS, + BINARY_FUNC_MINUS, + BINARY_FUNC_MUL, + BINARY_FUNC_DIV, + BINARY_FUNC_MIN, + BINARY_FUNC_MAX, + BINARY_FUNC_ATAN2, + + TERNARY_FUNC_IF +}; + +#define EXPRESSION_FLAG_SUMANGLE_MODE 1 + +SVX_DLLPUBLIC void FillEquationParameter( const com::sun::star::drawing::EnhancedCustomShapeParameter&, const sal_Int32, EnhancedCustomShapeEquation& ); + +class ExpressionNode +{ +public: + virtual ~ExpressionNode(); + + /** Predicate whether this node is constant. + + This predicate returns true, if this node is + neither time- nor ViewInfo dependent. This allows + for certain obtimizations, i.e. not the full + expression tree needs be represented by + ExpressionNodes. + + @returns true, if the note is constant + */ + virtual bool isConstant() const = 0; + + /** Operator to calculate function value. + + This method calculates the function value. + */ + virtual double operator()() const = 0; + + /** Operator to retrieve the type of expression node + */ + virtual ExpressionFunct getType() const = 0; + + /** Operator to retrieve the ms version of expression + */ + virtual com::sun::star::drawing::EnhancedCustomShapeParameter fillNode( + std::vector< EnhancedCustomShapeEquation >& rEquations, ExpressionNode* pOptionalArg, sal_uInt32 nFlags ) = 0; +}; +typedef ::boost::shared_ptr< ExpressionNode > ExpressionNodeSharedPtr; + +/** This exception is thrown, when the arithmetic expression + parser failed to parse a string. + */ +struct ParseError +{ + ParseError() {} + ParseError( const char* ) {} +}; + +class FunctionParser +{ +public: + + /** Parse a string + + The following grammar is accepted by this method: + <code> + + number_digit = '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9' + + number = number number_digit | number_digit + + identifier = 'pi'|'left'|'top'|'right'|'bottom'|'xstretch'|'ystretch'| + 'hasstroke'|'hasfill'|'width'|'height'|'logwidth'|'logheight' + + unary_function = 'abs'|'sqrt'|'sin'|'cos'|'tan'|'atan' + binary_function = 'min'|'max'|'atan2' + ternary_function = 'if' + + function_reference = '?' 'a-z,A-Z,0-9' ' ' + modifier_reference = '$' '0-9' ' ' + + basic_expression = + number | + identifier | + function_reference | + unary_function '(' additive_expression ')' | + binary_function '(' additive_expression ',' additive_expression ')' | + ternary_function '(' additive_expression ',' additive_expression ', + ' additive_expression ')' | '(' additive_expression ')' + + unary_expression = '-' basic_expression + + multiplicative_expression = + basic_expression | + multiplicative_expression '*' basic_expression | + multiplicative_expression '/' basic_expression + + additive_expression = + multiplicative_expression | + additive_expression '+' multiplicative_expression | + additive_expression '-' multiplicative_expression + + </code> + + @param rFunction + The string to parse + + @param rCustoShape + The CustomShape is required for calculation of dynamic values such + "hasstroke", function references and or modifier references ... + + @throws ParseError if an invalid expression is given. + + @return the generated function object. + */ + + SVX_DLLPUBLIC static ExpressionNodeSharedPtr parseFunction( const OUString& rFunction, const EnhancedCustomShape2d& rCustoShape ); + +private: + // disabled constructor/destructor, since this is + // supposed to be a singleton + FunctionParser(); + + // default: disabled copy/assignment + FunctionParser(const FunctionParser&); + FunctionParser& operator=( const FunctionParser& ); +}; + +} + +#endif /* _ENHANCEDCUSTOMSHAPEFUNCTIONPARSER_HXX */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/EnhancedCustomShapeGeometry.hxx b/include/svx/EnhancedCustomShapeGeometry.hxx new file mode 100644 index 000000000000..4669e68ca137 --- /dev/null +++ b/include/svx/EnhancedCustomShapeGeometry.hxx @@ -0,0 +1,95 @@ +/* -*- 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 _ENHANCEDCUSTOMSHAPEGEOMETRY_HXX +#define _ENHANCEDCUSTOMSHAPEGEOMETRY_HXX + +#include <sal/types.h> +#include <svx/msdffdef.hxx> + +struct SvxMSDffVertPair +{ + sal_Int32 nValA; + sal_Int32 nValB; +}; +struct SvxMSDffCalculationData +{ + sal_uInt16 nFlags; + sal_Int16 nVal[ 3 ]; +}; +struct SvxMSDffTextRectangles +{ + SvxMSDffVertPair nPairA; + SvxMSDffVertPair nPairB; +}; + +#define MSDFF_HANDLE_FLAGS_MIRRORED_X 0x0001 +#define MSDFF_HANDLE_FLAGS_MIRRORED_Y 0x0002 +#define MSDFF_HANDLE_FLAGS_SWITCHED 0x0004 +#define MSDFF_HANDLE_FLAGS_POLAR 0x0008 +#define MSDFF_HANDLE_FLAGS_MAP 0x0010 +#define MSDFF_HANDLE_FLAGS_RANGE 0x0020 +#define MSDFF_HANDLE_FLAGS_RANGE_X_MIN_IS_SPECIAL 0x0080 +#define MSDFF_HANDLE_FLAGS_RANGE_X_MAX_IS_SPECIAL 0x0100 +#define MSDFF_HANDLE_FLAGS_RANGE_Y_MIN_IS_SPECIAL 0x0200 +#define MSDFF_HANDLE_FLAGS_RANGE_Y_MAX_IS_SPECIAL 0x0400 +#define MSDFF_HANDLE_FLAGS_CENTER_X_IS_SPECIAL 0x0800 +#define MSDFF_HANDLE_FLAGS_CENTER_Y_IS_SPECIAL 0x1000 +#define MSDFF_HANDLE_FLAGS_RADIUS_RANGE 0x2000 + +struct SvxMSDffHandle +{ + sal_uInt32 nFlags; + sal_Int32 nPositionX, nPositionY, nCenterX, nCenterY, nRangeXMin, nRangeXMax, nRangeYMin, nRangeYMax; +}; +struct mso_CustomShape +{ + SvxMSDffVertPair* pVertices; + sal_uInt32 nVertices; + sal_uInt16* pElements; + sal_uInt32 nElements; + SvxMSDffCalculationData* pCalculation; + sal_uInt32 nCalculation; + sal_Int32* pDefData; + SvxMSDffTextRectangles* pTextRect; + sal_uInt32 nTextRect; + sal_Int32 nCoordWidth; + sal_Int32 nCoordHeight; + sal_Int32 nXRef; + sal_Int32 nYRef; + SvxMSDffVertPair* pGluePoints; + sal_uInt32 nGluePoints; + SvxMSDffHandle* pHandles; + sal_uInt32 nHandles; +}; + +#define MSO_I | (sal_Int32)0x80000000 + +sal_Bool SortFilledObjectsToBackByDefault( MSO_SPT eSpType ); +SVX_DLLPUBLIC sal_Bool IsCustomShapeFilledByDefault( MSO_SPT eSpType ); +SVX_DLLPUBLIC sal_Int16 GetCustomShapeConnectionTypeDefault( MSO_SPT eSpType ); + +// #i28269# +SVX_DLLPUBLIC sal_Bool IsCustomShapeStrokedByDefault( MSO_SPT eSpType ); + +SVX_DLLPUBLIC const mso_CustomShape* GetCustomShapeContent( MSO_SPT eSpType ); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/EnhancedCustomShapeTypeNames.hxx b/include/svx/EnhancedCustomShapeTypeNames.hxx new file mode 100644 index 000000000000..6be004105956 --- /dev/null +++ b/include/svx/EnhancedCustomShapeTypeNames.hxx @@ -0,0 +1,33 @@ +/* -*- 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 _ENHANCED_CUSTOMSHAPE_TYPE_NAMES_HXX +#define _ENHANCED_CUSTOMSHAPE_TYPE_NAMES_HXX +#include <svx/msdffdef.hxx> +#include <rtl/ustring.hxx> + +namespace EnhancedCustomShapeTypeNames +{ + SVX_DLLPUBLIC MSO_SPT Get( const OUString& ); + SVX_DLLPUBLIC OUString Get( const MSO_SPT ); +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/IAccessibleParent.hxx b/include/svx/IAccessibleParent.hxx new file mode 100644 index 000000000000..05854b66e3b8 --- /dev/null +++ b/include/svx/IAccessibleParent.hxx @@ -0,0 +1,89 @@ +/* -*- 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 _SVX_ACCESSIBILITY_IACCESSIBLE_PARENT_HXX +#define _SVX_ACCESSIBILITY_IACCESSIBLE_PARENT_HXX + +#include <com/sun/star/uno/RuntimeException.hpp> +#include <com/sun/star/drawing/XShape.hpp> +#include <sal/types.h> + +namespace accessibility { + +class AccessibleShape; +class AccessibleShapeTreeInfo; + +/** This interface contains methods missing from the + <type>XAccessibleContext</type> interface that allow the modification of + parent/child relationship. +*/ +class IAccessibleParent +{ +public: + /** Allow for a virtual destructor. + */ + virtual ~IAccessibleParent (void){}; + + /** A call to this method requests the implementor to replace one child + with another and send the appropriate notifications. That are two + child events: One notifying the removal of the current child and one + about the existence of the new child. The index of the new child is + implementation dependent, i.e. it is not garanteed that the + replacement has the same index as the current child has. + + <p>A default implementation can just use the ShapeTypeHandler::CreateAccessibleObject + to let a factory create the new instance with the parameters given, and then + place the new shape into the own structures.</p> + + @param pCurrentChild + This child is about to be replaced. + + @param _rxShape + The UNO shape which the old and new child represent + + @param _nIndex + The IndexInParent of the old child. Note that the index in + parent of the replacement is not necessarily the same as + that of the current child. + + @param _rShapeTreeInfo + The TreeInfo for the old child. + + @return + If the replacement has taken place successfully <TRUE/> is + returned. If the replacement can not be carried out or an error + occurs that does not result in an exception then <FALSE/> is + returned. + + @raises RuntimeException + in case something went heavily wrong + */ + virtual sal_Bool ReplaceChild ( + AccessibleShape* pCurrentChild, + const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& _rxShape, + const long _nIndex, + const AccessibleShapeTreeInfo& _rShapeTreeInfo + ) throw (::com::sun::star::uno::RuntimeException) = 0; +}; + +} // end of namespace accessibility + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/IAccessibleViewForwarder.hxx b/include/svx/IAccessibleViewForwarder.hxx new file mode 100644 index 000000000000..60883e754ee3 --- /dev/null +++ b/include/svx/IAccessibleViewForwarder.hxx @@ -0,0 +1,126 @@ +/* -*- 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 _SVX_ACCESSIBILITY_IACCESSIBLE_VIEW_FORWARDER_HXX +#define _SVX_ACCESSIBILITY_IACCESSIBLE_VIEW_FORWARDER_HXX + +#include <sal/types.h> +#include <tools/gen.hxx> + + +namespace accessibility { + + + +/** <p>This interface provides the means to transform between internal + coordinates in 100th of mm and screen coordinates without giving direct + access to the underlying view. Each view forwarder represents a + specific real or virtual window. A call to + <method>GetVisibleArea</method> returns the visible rectangle that + corresponds to this window.</p> + + <p>This interface is similar to the <type>SvxViewForwarder</type> but + differs in two important points: Firstly the <member>GetVisArea</member> + method returns a rectangle in internal coordinates and secondly the + transformation methods do not require explicit mapmodes. These have to + be provided implicitely by the classes that implement this + interface. A third, less important, difference are the additional + transfomation methods for sizes. The reasons for their existince are + convenience and improved performance.</p> + + @attention + Note, that modifications of the underlying view that lead to + different transformations between internal and screen coordinates or + change the validity of the forwarder have to be signaled seperately. +*/ +class IAccessibleViewForwarder +{ +public: + virtual ~IAccessibleViewForwarder (void){}; + + /** This method informs you about the state of the forwarder. Do not + use it when the returned value is <false/>. + + @return + Return <true/> if the view forwarder is valid and <false/> else. + */ + virtual sal_Bool IsValid (void) const = 0; + + /** Returns the area of the underlying document that is visible in the + * corresponding window. + + @return + The rectangle of the visible part of the document. The values + are, contrary to the base class, in internal coordinates of + 100th of mm. + */ + virtual Rectangle GetVisibleArea() const = 0; + + /** Transform the specified point from internal coordinates in 100th of + mm to an absolute screen position. + + @param rPoint + Point in internal coordinates (100th of mm). + + @return + The same point but in screen coordinates relative to the upper + left corner of the (current) screen. + */ + virtual Point LogicToPixel (const Point& rPoint) const = 0; + + /** Transform the specified size from internal coordinates in 100th of + mm to a screen oriented pixel size. + + @param rSize + Size in internal coordinates (100th of mm). + + @return + The same size but in screen coordinates. + */ + virtual Size LogicToPixel (const Size& rSize) const = 0; + + /** Transform the specified point from absolute screen coordinates to + internal coordinates (100th of mm). + + @param rPoint + Point in screen coordinates relative to the upper left corner of + the (current) screen. + + @return + The same point but in internal coordinates (100th of mm). + */ + virtual Point PixelToLogic (const Point& rPoint) const = 0; + + /** Transform the specified size from screen coordinates to internal + coordinates (100th of mm). + + @param rSize + Size in screen coordinates. + + @return + The same size but in internal coordinates (100th of mm). + */ + virtual Size PixelToLogic (const Size& rSize) const = 0; +}; + +} // end of namespace accessibility + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/IAccessibleViewForwarderListener.hxx b/include/svx/IAccessibleViewForwarderListener.hxx new file mode 100644 index 000000000000..8a9a061bfb5e --- /dev/null +++ b/include/svx/IAccessibleViewForwarderListener.hxx @@ -0,0 +1,70 @@ +/* -*- 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 _SVX_ACCESSIBILITY_IACCESSIBLE_VIEW_FORWARDER_LISTENER_HXX +#define _SVX_ACCESSIBILITY_IACCESSIBLE_VIEW_FORWARDER_LISTENER_HXX + +#include <sal/types.h> + + +namespace accessibility { + +class IAccessibleViewForwarder; + +/** <p>The purpose of this interface is to notify a user of an + IAccessibleViewForwarder when that view forwarder changes its + properties. Such a change may be one of the following: + <ul> + <li>Change of the coordinate transformation.</li> + <li>Change of the visible area (which in turn results in a change of the + coordinate transformation.</li> + <li>Change of the validity state of the view forwarder.</li> +*/ +class IAccessibleViewForwarderListener +{ +public: + /** Enumeration of the different change types. + */ + enum ChangeType {TRANSFORMATION, VISIBLE_AREA, STATE}; + + /** This method is called to indicate a change of the specified view + forwarder. + @param aChangeType + The type of the change. TRANSFORMATION indicates a change of + the coordinate transformation with a constant visible area. If + the visible area changes, just use VISIBLE_AREA. This changes + the transformation implicitly. The value STATE indicates a + change of the validity state. Check the IsValid method of the + view forwarder before doing further calls. + @param pViewForwarder + The modified view forwarder. It is specified just in case that + there is more than one view forwarder in use at the same time. + */ + virtual void ViewForwarderChanged (ChangeType aChangeType, + const IAccessibleViewForwarder* pViewForwarder) = 0; + +protected: + ~IAccessibleViewForwarderListener() {} +}; + +} // end of namespace accessibility + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/ParseContext.hxx b/include/svx/ParseContext.hxx new file mode 100644 index 000000000000..55934efcc545 --- /dev/null +++ b/include/svx/ParseContext.hxx @@ -0,0 +1,80 @@ +/* -*- 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 SVX_QUERYDESIGNCONTEXT_HXX +#define SVX_QUERYDESIGNCONTEXT_HXX + +#include "svx/svxdllapi.h" +#include <connectivity/IParseContext.hxx> +#include <tools/string.hxx> +#include <unotools/localedatawrapper.hxx> + + +#include <vector> + +namespace svxform +{ + //========================================================================== + //= OSystemParseContext + //========================================================================== + class SVX_DLLPUBLIC OSystemParseContext : public ::connectivity::IParseContext + { + private: + + ::std::vector< String > m_aLocalizedKeywords; + + public: + OSystemParseContext(); + + virtual ~OSystemParseContext(); + // retrieves language specific error messages + virtual OUString getErrorMessage(ErrorCode _eCodes) const; + + // retrieves language specific keyword strings (only ASCII allowed) + virtual OString getIntlKeywordAscii(InternationalKeyCode _eKey) const; + + // finds out, if we have an international keyword (only ASCII allowed) + virtual InternationalKeyCode getIntlKeyCode(const OString& rToken) const; + + /** get's a locale instance which should be used when parsing in the context specified by this instance + <p>if this is not overridden by derived classes, it returns the static default locale.</p> + */ + virtual ::com::sun::star::lang::Locale getPreferredLocale( ) const; + + }; + + //========================================================================== + //= OParseContextClient + //========================================================================== + /** helper class which needs access to a (shared and ref-counted) OSystemParseContext + instance. + */ + class SVX_DLLPUBLIC OParseContextClient + { + protected: + OParseContextClient(); + virtual ~OParseContextClient(); + + const OSystemParseContext* getParseContext() const; + }; +} +#endif // SVX_QUERYDESIGNCONTEXT_HXX + + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/ShapeTypeHandler.hxx b/include/svx/ShapeTypeHandler.hxx new file mode 100644 index 000000000000..4dea0232bc90 --- /dev/null +++ b/include/svx/ShapeTypeHandler.hxx @@ -0,0 +1,220 @@ +/* -*- 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 _SVX_ACCESSIBILITY_SHAPE_TYPE_HANDLER_HXX +#define _SVX_ACCESSIBILITY_SHAPE_TYPE_HANDLER_HXX + +#include <svx/AccessibleShapeTreeInfo.hxx> +#include <svx/AccessibleShapeInfo.hxx> +#include <svx/AccessibleShape.hxx> +#include <com/sun/star/accessibility/XAccessible.hpp> +#include <com/sun/star/uno/XInterface.hpp> +#include <com/sun/star/drawing/XShape.hpp> +#include <comphelper/stl_types.hxx> +#include <com/sun/star/document/XEventBroadcaster.hpp> +#include "svx/svxdllapi.h" + +#include <rtl/ustring.hxx> +#include <vector> +#include <boost/unordered_map.hpp> + +namespace accessibility { + +/** Use an integer to represent shape type ids. A ShapeTypeId is unique + inside one project but is not over the project boundaries. +*/ +typedef int ShapeTypeId; + +/** Define the function type for creating accessible objects for given + service names. +*/ +typedef AccessibleShape* (*tCreateFunction) + (const AccessibleShapeInfo& rShapeInfo, + const AccessibleShapeTreeInfo& rShapeTreeInfo, + ShapeTypeId nId); + +/** Each shape type is described by listing its id, its service name and a + function which creates a new accessible object that can represent that + service. The id has to be unique with respect to the create function. +*/ +struct ShapeTypeDescriptor +{ + ShapeTypeId mnShapeTypeId; + OUString msServiceName; + tCreateFunction maCreateFunction; + ShapeTypeDescriptor ( + ShapeTypeId nId, const OUString& sName, tCreateFunction aFunction) + : mnShapeTypeId (nId), + msServiceName (sName), + maCreateFunction (aFunction) + {} + ShapeTypeDescriptor (void) + : mnShapeTypeId (-1), + msServiceName (), + maCreateFunction (NULL) + {} +}; + +/** @descr + This class is a singleton that has the purpose to transform between + service names of shapes and associated enum values and to create new + accessible objects for given shapes. +*/ +class SVX_DLLPUBLIC ShapeTypeHandler +{ +public: + enum { UNKNOWN_SHAPE_TYPE = 0 }; + + /** This function returns a reference to the only instance of this class. + Use this instance to retrieve a shape's type and service name. + @return + Returns a reference to a <type>ShapeTypeHandler</type> object. + */ + static ShapeTypeHandler& Instance (void); + + /** Determines the type id of a shape with the given service name. + @param aServiceName + Service name of the shape for which to return the type id. + @return + Returns the type id of the shape with the given service name or + -1 when the service name is not known. + */ + ShapeTypeId GetTypeId (const OUString& aServiceName) const; + + /** Determines the type id of the specified shape. + @param xShape + Reference to the shape for which to return the type id. + @return + Returns the type id of the specified shape or + -1 when the given reference is either not + set or the referenced object does not support the + <type>XShapeDescriptor</type> interface. + */ + ShapeTypeId GetTypeId (const ::com::sun::star::uno::Reference< + ::com::sun::star::drawing::XShape>& rxShape) const; + + /** Create a new accessible object for the given shape. + @param rShapeInfo + Bundle of information passed to the new accessible shape. + @param rShapeTreeInfo + Bundle of information passed down the shape tree. + @return + Pointer to the implementation object that implements the + <code>XAccessible</code> interface. This pointer may be NULL + if the specified shape is of unknown type. + */ + AccessibleShape* + CreateAccessibleObject ( + const AccessibleShapeInfo& rShapeInfo, + const AccessibleShapeTreeInfo& rShapeTreeInfo) const; + + /** Compatibility function. + */ + AccessibleShape* + CreateAccessibleObject ( + const ::com::sun::star::uno::Reference< + ::com::sun::star::drawing::XShape>& rxShape, + const ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible>& rxParent, + const AccessibleShapeTreeInfo& rShapeTreeInfo) const + { + AccessibleShapeInfo aShapeInfo(rxShape, rxParent); + return CreateAccessibleObject (aShapeInfo, rShapeTreeInfo); + } + + /** Add new shape types to the internal tables. Each new shape type is + described by one shape type descriptor. See + <type>ShapeTypeDescriptor</type> for more details. + + @param nDescriptorCount + Number of new shape types. + @param aDescriptorList + Array of new shape type descriptors. + @return + The returned flag indicates whether the specified shape + descriptors have been successfully added. + */ + bool AddShapeTypeList (int nDescriptorCount, + ShapeTypeDescriptor aDescriptorList[]); + + /// get the accessible base name for an object + static OUString CreateAccessibleBaseName ( + const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rxShape) + throw (::com::sun::star::uno::RuntimeException); + +protected: + // Declare default constructor, copy constructor, destructor, and + // assignment operation protected so that no one accidentally creates a + // second instance of this singleton class or deletes it. + ShapeTypeHandler (void); + ShapeTypeHandler (const ShapeTypeHandler& aHandler); // never implemented, this is a singleton class + ShapeTypeHandler& operator= (const ShapeTypeHandler& aHandler); // never implemented, this is a singleton class + + /** This destructor is never called at the moment. But because this + class is a singleton this is not a problem. + */ + virtual ~ShapeTypeHandler (void); + +private: + /// Pointer to the only instance of this class. + static ShapeTypeHandler* instance; + + /** List of shape type descriptors. This list is normally build up in + several steps when libraries that implement shapes are loaded and + call the addShapeTypeList method. After that no modifications of + the list take place. + */ + ::std::vector<ShapeTypeDescriptor> maShapeTypeDescriptorList; + + /** This hash map allows the fast look up of a type descriptor for a + given service name. + */ + typedef ::boost::unordered_map< + OUString,ShapeTypeId, + OUStringHash, + ::comphelper::UStringEqual> tServiceNameToSlotId; + mutable tServiceNameToSlotId maServiceNameToSlotId; + + /** Determine the slot id of the specified shape type. With this id + internal methods can access the associated type descriptor. + @param aServiceName + Service name of the shape for which to return the slot id. + @return + Returns the slot id of the shape with the given service name or + 0 when the service name is not known. + */ + SVX_DLLPRIVATE long GetSlotId (const OUString& aServiceName) const; + + /** Determine the slot id of the specified shape type. With this id + internal methods can access the associated type descriptor. + @param rxShape + Shape for which to return the slot id. + @return + Returns the slot id of the shape with the given service name or + 0 when the service name is not known. + */ + SVX_DLLPRIVATE long GetSlotId (const ::com::sun::star::uno::Reference< + ::com::sun::star::drawing::XShape>& rxShape) const; +}; + +} // end of namespace accessible + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/SmartTagCtl.hxx b/include/svx/SmartTagCtl.hxx new file mode 100644 index 000000000000..59a7c59168e3 --- /dev/null +++ b/include/svx/SmartTagCtl.hxx @@ -0,0 +1,78 @@ +/* -*- 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 _SVX_SMARTTAGSCONTROL_HXX +#define _SVX_SMARTTAGSCONTROL_HXX + +#include <tools/link.hxx> +#include <sfx2/mnuitem.hxx> +#include "svx/svxdllapi.h" +#include <com/sun/star/uno/Reference.hxx> + +#include <vector> + +class SfxBindings; +class SvxSmartTagItem; +class PopupMenu; + +namespace com { namespace sun { namespace star { namespace smarttags { + class XSmartTagAction; +} } } } + +namespace com { namespace sun { namespace star { namespace container { + class XStringKeyMap; +} } } } + +// class SvxFontMenuControl ---------------------------------------------- + +class SVX_DLLPUBLIC SvxSmartTagsControl : public SfxMenuControl +{ +private: + PopupMenu* mpMenu; + Menu& mrParent; + const SvxSmartTagItem* mpSmartTagItem; + + struct InvokeAction + { + com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagAction > mxAction; + com::sun::star::uno::Reference< com::sun::star::container::XStringKeyMap > mxSmartTagProperties; + sal_uInt32 mnActionID; + InvokeAction( com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagAction > xAction, + com::sun::star::uno::Reference< com::sun::star::container::XStringKeyMap > xSmartTagProperties, + sal_uInt32 nActionID ) : mxAction( xAction ), mxSmartTagProperties( xSmartTagProperties ), mnActionID( nActionID ) {} + }; + + std::vector< InvokeAction > maInvokeActions; + + void FillMenu(); + DECL_LINK( MenuSelect, PopupMenu * ); + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + +public: + SvxSmartTagsControl( sal_uInt16 nId, Menu&, SfxBindings& ); + ~SvxSmartTagsControl(); + + virtual PopupMenu* GetPopup() const; + SFX_DECL_MENU_CONTROL(); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/SmartTagItem.hxx b/include/svx/SmartTagItem.hxx new file mode 100644 index 000000000000..8b4364b979a8 --- /dev/null +++ b/include/svx/SmartTagItem.hxx @@ -0,0 +1,87 @@ +/* -*- 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 _SVX_SMARTTAGITEM_HXX +#define _SVX_SMARTTAGITEM_HXX + +#include <svl/poolitem.hxx> +#include <com/sun/star/uno/Reference.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include <com/sun/star/smarttags/XSmartTagAction.hpp> +#include "svx/svxdllapi.h" + +namespace com { namespace sun { namespace star { namespace container { + class XStringKeyMap; +} } } } + +namespace com { namespace sun { namespace star { namespace text { + class XTextRange; +} } } } + +namespace com { namespace sun { namespace star { namespace frame { + class XController; +} } } } + +// class SvxSmartTagItem ----------------------------------------------------- + +class SVX_DLLPUBLIC SvxSmartTagItem : public SfxPoolItem +{ + const com::sun::star::uno::Sequence < com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagAction > > > maActionComponentsSequence; + const com::sun::star::uno::Sequence < com::sun::star::uno::Sequence< sal_Int32 > > maActionIndicesSequence; + const com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::container::XStringKeyMap > > maStringKeyMaps; + const com::sun::star::uno::Reference<com::sun::star::text::XTextRange> mxRange; + const com::sun::star::uno::Reference<com::sun::star::frame::XController> mxController; + const com::sun::star::lang::Locale maLocale; + const OUString maApplicationName; + const OUString maRangeText; + +public: + TYPEINFO(); + + SvxSmartTagItem( const sal_uInt16 nId, + const com::sun::star::uno::Sequence < com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagAction > > >& rActionComponentsSequence, + const com::sun::star::uno::Sequence < com::sun::star::uno::Sequence< sal_Int32 > >& rActionIndicesSequence, + const com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::container::XStringKeyMap > >& rStringKeyMaps, + const com::sun::star::uno::Reference<com::sun::star::text::XTextRange> rRange, + const com::sun::star::uno::Reference<com::sun::star::frame::XController> rController, + const com::sun::star::lang::Locale rLocale, + const OUString& rApplicationName, + const OUString& rRangeText ); + + // "pure virtual Methoden" vom SfxPoolItem + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + virtual SfxPoolItem* Create(SvStream &, sal_uInt16) const; // leer + virtual SvStream& Store(SvStream &, sal_uInt16 nItemVersion) const; // leer + 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 ); + + const com::sun::star::uno::Sequence < com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagAction > > >& GetActionComponentsSequence() const { return maActionComponentsSequence; } + const com::sun::star::uno::Sequence < com::sun::star::uno::Sequence< sal_Int32 > >& GetActionIndicesSequence() const { return maActionIndicesSequence; } + const com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::container::XStringKeyMap > >& GetStringKeyMaps() const { return maStringKeyMaps; } + const com::sun::star::uno::Reference<com::sun::star::text::XTextRange>& GetTextRange() const { return mxRange; } + const com::sun::star::uno::Reference<com::sun::star::frame::XController>& GetController() const { return mxController; } + const com::sun::star::lang::Locale& GetLocale() const { return maLocale; } + const OUString GetApplicationName() const { return maApplicationName; } + const OUString GetRangeText() const { return maRangeText; } +}; + +#endif // #ifndef _SVX_SMARTTAGITEM_HXX + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/SmartTagMgr.hxx b/include/svx/SmartTagMgr.hxx new file mode 100644 index 000000000000..836ff820650f --- /dev/null +++ b/include/svx/SmartTagMgr.hxx @@ -0,0 +1,226 @@ +/* -*- 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 _SMARTTAGMGR_HXX +#define _SMARTTAGMGR_HXX + +#include <cppuhelper/implbase2.hxx> +#include <com/sun/star/uno/Reference.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include <com/sun/star/util/XModifyListener.hpp> +#include <com/sun/star/util/XChangesListener.hpp> +#include "svx/svxdllapi.h" + +#include <vector> +#include <map> +#include <set> + +namespace com { namespace sun { namespace star { namespace uno { + class XComponentContext; +} } } } + +namespace com { namespace sun { namespace star { namespace smarttags { + class XSmartTagRecognizer; + class XSmartTagAction; +} } } } + +namespace com { namespace sun { namespace star { namespace text { + class XTextMarkup; +} } } } + +namespace com { namespace sun { namespace star { namespace i18n { + class XBreakIterator; +} } } } + +namespace com { namespace sun { namespace star { namespace lang { + struct Locale; + struct EventObject; + struct ChangesEvent; +} } } } + +namespace com { namespace sun { namespace star { namespace beans { + class XPropertySet; +} } } } + +namespace com { namespace sun { namespace star { namespace frame { + class XController; +} } } } + +/** A reference to a smart tag action + + An action service can support various actions. Therefore an ActionReference + consists of a reference to the service and and index. + */ +struct ActionReference +{ + com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagAction > mxSmartTagAction; + sal_Int32 mnSmartTagIndex; + ActionReference( com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagAction > xSmartTagAction, sal_Int32 nSmartTagIndex ) + : mxSmartTagAction( xSmartTagAction), mnSmartTagIndex( nSmartTagIndex ) {} +}; + +/** The smart tag manager maintains all installed action and recognizer services + + This class organizes the available smarttag libraries and provides access functions + to these libraries. The smart tag manager is a singleton. +*/ +class SVX_DLLPUBLIC SmartTagMgr : public cppu::WeakImplHelper2< ::com::sun::star::util::XModifyListener, + ::com::sun::star::util::XChangesListener > +{ +private: + + const OUString maApplicationName; + std::vector< com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagRecognizer > > maRecognizerList; + std::vector< com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagAction > > maActionList; + std::set< OUString > maDisabledSmartTagTypes; + std::multimap < OUString, ActionReference > maSmartTagMap; + mutable com::sun::star::uno::Reference< com::sun::star::i18n::XBreakIterator > mxBreakIter; + com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext> mxContext; + com::sun::star::uno::Reference< com::sun::star::beans::XPropertySet > mxConfigurationSettings; + bool mbLabelTextWithSmartTags; + + /** Checks for installed smart tag recognizers/actions and stores them in + maRecognizerList and maActionList. + */ + void LoadLibraries(); + + /** Prepare configuration access. + */ + void PrepareConfiguration( const OUString& rConfigurationGroupName ); + + /** Reads the configuration data. + */ + void ReadConfiguration( bool bExcludedTypes, bool bRecognize ); + + /** Registeres the smart tag manager as listener at the package manager. + */ + void RegisterListener(); + + /** Sets up a map that maps smart tag type names to actions references. + */ + void AssociateActionsWithRecognizers(); + + void CreateBreakIterator() const; + +public: + + SmartTagMgr( const OUString& rApplicationName ); + virtual ~SmartTagMgr(); + + /** Triggeres configuration reading, library loading and listener registration + NOTE: MUST BE CALLED AFTER CONSTRUCTION! + */ + void Init( const OUString& rConfigurationGroupName ); + + /** Dispatches the recognize call to all installed smart tag recognizers + + @param rText + The string to be scanned by the recognizers. + + @param xMarkup + The object allows the recognizers to store any found smart tags. + + @param xController + The current controller of the document. + + @param rLocale + The locale of rText. + + @param nStart + The start offset of the text to be scanned in rText. + + @param nLen + The length of the text to be scanned. + + */ + void Recognize( const OUString& rText, + const com::sun::star::uno::Reference< com::sun::star::text::XTextMarkup > xMarkup, + const com::sun::star::uno::Reference< com::sun::star::frame::XController > xController, + const com::sun::star::lang::Locale& rLocale, + sal_uInt32 nStart, sal_uInt32 nLen ) const; + + /** Returns all action references associated with a given list of smart tag types + + @param rSmartTagTypes + The list of types + + @param rActionComponentsSequence + Output parameter + + @param rActionIndicesSequence + Output parameter + */ + void GetActionSequences( com::sun::star::uno::Sequence < OUString >& rSmartTagTypes, + com::sun::star::uno::Sequence < com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagAction > > >& rActionComponentsSequence, + com::sun::star::uno::Sequence < com::sun::star::uno::Sequence< sal_Int32 > >& rActionIndicesSequence ) const; + + /** Returns the caption for a smart tag type. + + @param rSmartTagType + The given smart tag type. + + @param rLocale + The locale. + */ + OUString GetSmartTagCaption( const OUString& rSmartTagType, const com::sun::star::lang::Locale& rLocale ) const; + + /** Returns true if the given smart tag type is enabled. + */ + bool IsSmartTagTypeEnabled( const OUString& rSmartTagType ) const; + + /** Enable or disable smart tags. + */ + bool IsLabelTextWithSmartTags() const { return mbLabelTextWithSmartTags; } + + /** Returns the number of registered recognizers. + */ + sal_uInt32 NumberOfRecognizers() const { return maRecognizerList.size(); } + + /** Returns a recognizer. + */ + com::sun::star::uno::Reference< com::sun::star::smarttags::XSmartTagRecognizer > + GetRecognizer( sal_uInt32 i ) const { return maRecognizerList[i]; } + + /** Is smart tag recognization active? + */ + bool IsSmartTagsEnabled() const { return 0 != NumberOfRecognizers() && + IsLabelTextWithSmartTags(); } + + /** Writes configuration settings. + */ + void WriteConfiguration( const bool* bLabelTextWithSmartTags, + const std::vector< OUString >* pDisabledTypes ) const; + + /** Returns the name of the application this instance has been created by. + */ + const OUString GetApplicationName() const { return maApplicationName; } + + // ::com::sun::star::lang::XEventListener + virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException); + + // ::com::sun::star::util::XModifyListener + virtual void SAL_CALL modified( const ::com::sun::star::lang::EventObject& aEvent ) throw(::com::sun::star::uno::RuntimeException); + + // ::com::sun::star::util::XChangesListener + virtual void SAL_CALL changesOccurred( const ::com::sun::star::util::ChangesEvent& Event ) throw(::com::sun::star::uno::RuntimeException); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/SpellDialogChildWindow.hxx b/include/svx/SpellDialogChildWindow.hxx new file mode 100644 index 000000000000..669c5d193dfa --- /dev/null +++ b/include/svx/SpellDialogChildWindow.hxx @@ -0,0 +1,119 @@ +/* -*- 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 SVX_SPELL_DIALOG_CHILD_WINDOW_HXX +#define SVX_SPELL_DIALOG_CHILD_WINDOW_HXX + +#include <sfx2/childwin.hxx> +#include <editeng/SpellPortions.hxx> +#include "svx/svxdllapi.h" +#include <vcl/image.hxx> + +class AbstractSpellDialog; + +namespace svx { + +/** The child window wrapper of the actual spellin dialog. To use the + spelling dialog in an application you have to do the ususal things: + <ol> + <li>Call this class' RegisterChildWindow() method with the module + as second argument that you want the dialog included in.</li> + <li>In the SFX_IMPL_INTERFACE implementation of the view shell + that wants to use the dialog call SFX_CHILDWINDOW_REGISTRATION() + with the id returned by this class' GetChildWindowId() + method.</li> + <li>Include the item associated with this child window to the SDI + description of the view shell.</li> + </ol> +*/ +class SVX_DLLPUBLIC SpellDialogChildWindow + : public SfxChildWindow +{ + friend class SpellDialog; + AbstractSpellDialog* m_pAbstractSpellDialog; +public: + SpellDialogChildWindow ( + Window*pParent, + sal_uInt16 nId, + SfxBindings* pBindings, + SfxChildWinInfo* pInfo); + virtual ~SpellDialogChildWindow (); + +protected: + /** This abstract method has to be defined by a derived class. It + returns the next wrong sentence. + @return + returns an empty vector if no error could be found + */ + virtual SpellPortions GetNextWrongSentence (bool bRecheck) = 0; + + /** This abstract method applies the changes made in the spelling dialog + to the document. + The dialog always updates its settings when it gets the focus. The document + can rely on the fact that the methods ApplyChangedSentence() is called for the + position that the last GetNextWrongSentence() returned. + If 'bRecheck' is set to true then the same sentence should be rechecked once from + the start. This should be used too find errors that the user has introduced by + manual changes in the edit field, and in order to not miss the still following errors + in that sentence. + */ + virtual void ApplyChangedSentence(const SpellPortions& rChanged, bool bRecheck ) = 0; + /** This methods determines whether the application supports AutoCorrection + */ + virtual bool HasAutoCorrection(); + /** This method adds a word pair to the AutoCorrection - if available + */ + virtual void AddAutoCorrection(const String& rOld, const String& rNew, LanguageType eLanguage); + /** Return the sfx bindings for this child window. They are + retrieved from the dialog so they do not have to be stored in + this class as well. The bindings may be necessary to be used + by the abstract methods. + */ + /** This method determines if grammar checking is supported + */ + virtual bool HasGrammarChecking(); + /** determines if grammar checking is switched on + */ + virtual bool IsGrammarChecking(); + /** switches grammar checking on/off + */ + virtual void SetGrammarChecking(bool bOn); + + SfxBindings& GetBindings (void) const; + /** Set the spell dialog into the 'resume' state. This method should be called + to notify the SpellDialog about changes in the document that invalidate the + current state which results in disabling most of the dialog controls and presenting + a "Resume" button that initiates a reinitialization. + */ + void InvalidateSpellDialog(); + /** Notifies the ChildWindow about the get focus event. The ChildWindow should no check if + the spelling dialog should be set to the 'Resume' state by calling InvalidateSpellDialog() + */ + virtual void GetFocus() = 0; + /** Notifies the ChildWindow about the lose focus event. The ChildWindow should use it to save + the current selection/state. + */ + virtual void LoseFocus() = 0; +}; + +} // end of namespace ::svx + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/SvxShapeTypes.hxx b/include/svx/SvxShapeTypes.hxx new file mode 100644 index 000000000000..4821603938ed --- /dev/null +++ b/include/svx/SvxShapeTypes.hxx @@ -0,0 +1,75 @@ +/* -*- 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 _SVX_ACCESSIBILITY_SVX_SHAPE_TYPES_HXX +#define _SVX_ACCESSIBILITY_SVX_SHAPE_TYPES_HXX + +#include <svx/ShapeTypeHandler.hxx> +#include <com/sun/star/accessibility/XAccessible.hpp> + +namespace accessibility { + +/** Register the SVX draw shape types with the ShapeTypeHandler singleton. + This method is usually called from the shape type handler constructor. +*/ +void RegisterDrawShapeTypes (void); + +/** Enum describing all shape types known in the SVX project. +*/ +enum SvxShapeTypes +{ + DRAWING_RECTANGLE = 1, + DRAWING_ELLIPSE, + DRAWING_CONTROL, + DRAWING_CONNECTOR, + DRAWING_MEASURE, + DRAWING_LINE, + DRAWING_POLY_POLYGON, + DRAWING_POLY_LINE, + DRAWING_OPEN_BEZIER, + DRAWING_CLOSED_BEZIER, + DRAWING_OPEN_FREEHAND, + DRAWING_CLOSED_FREEHAND, + DRAWING_POLY_POLYGON_PATH, + DRAWING_POLY_LINE_PATH, + DRAWING_GRAPHIC_OBJECT, + DRAWING_GROUP, + DRAWING_TEXT, + DRAWING_OLE, + DRAWING_PAGE, + DRAWING_CAPTION, + DRAWING_FRAME, + DRAWING_PLUGIN, + DRAWING_APPLET, + DRAWING_3D_SCENE, + DRAWING_3D_CUBE, + DRAWING_3D_SPHERE, + DRAWING_3D_LATHE, + DRAWING_3D_EXTRUDE, + DRAWING_CUSTOM, + DRAWING_TABLE, /* = 30 */ + DRAWING_MEDIA, /* = 31 */ + DRAWING_END = DRAWING_MEDIA +}; + +} // end of namespace accessibility + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/UnoNamespaceMap.hxx b/include/svx/UnoNamespaceMap.hxx new file mode 100644 index 000000000000..be9d7788bbc1 --- /dev/null +++ b/include/svx/UnoNamespaceMap.hxx @@ -0,0 +1,36 @@ +/* -*- 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 _SVX_UNONAMESPACEMAP_HXX_ +#define _SVX_UNONAMESPACEMAP_HXX_ + +#include <com/sun/star/uno/XInterface.hpp> +#include "svx/svxdllapi.h" + +class SfxItemPool; + +namespace svx { + +SVX_DLLPUBLIC com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL NamespaceMap_createInstance( sal_uInt16* pWhichIds, SfxItemPool* pPool ); + +} + +#endif // _SVX_UNONAMESPACEMAP_HXX_ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/XPropertyTable.hxx b/include/svx/XPropertyTable.hxx new file mode 100644 index 000000000000..0722434963f9 --- /dev/null +++ b/include/svx/XPropertyTable.hxx @@ -0,0 +1,39 @@ +/* -*- 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 _SVX_XPROPERTYTABLE_HXX +#define _SVX_XPROPERTYTABLE_HXX + +#include <com/sun/star/uno/XInterface.hpp> +#include "svx/svxdllapi.h" +#include <svx/xtable.hxx> + +// FIXME: should have a single factory method with an enumeration here [!] + +::com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL SvxUnoXColorTable_createInstance( XPropertyList* pList ) throw(); +::com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL SvxUnoXLineEndTable_createInstance( XPropertyList* pList ) throw(); +::com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL SvxUnoXDashTable_createInstance( XPropertyList* pList ) throw(); +::com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL SvxUnoXHatchTable_createInstance( XPropertyList* pList ) throw(); +::com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL SvxUnoXGradientTable_createInstance( XPropertyList* pList ) throw(); +::com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL SvxUnoXBitmapTable_createInstance( XPropertyList* pList ) throw(); + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/algitem.hxx b/include/svx/algitem.hxx new file mode 100644 index 000000000000..00a554d6e5f9 --- /dev/null +++ b/include/svx/algitem.hxx @@ -0,0 +1,122 @@ +/* -*- 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 _SVX_ALGITEM_HXX +#define _SVX_ALGITEM_HXX + +#include <svx/svxids.hrc> +#include <svl/poolitem.hxx> +#include <svl/eitem.hxx> +#include <editeng/svxenum.hxx> +#include "svx/svxdllapi.h" + +class SvStream; + +//------------------------------------------------------------------------ + +class SVX_DLLPUBLIC SvxOrientationItem: public SfxEnumItem +{ +public: + TYPEINFO(); + + SvxOrientationItem( + const SvxCellOrientation eOrientation /*= SVX_ORIENTATION_STANDARD*/, + const sal_uInt16 nId ); + + SvxOrientationItem( + sal_Int32 nRotation, sal_Bool bStacked, + const sal_uInt16 nId ); + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) 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 sal_uInt16 GetValueCount() const; + virtual String GetValueText( sal_uInt16 nVal ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + virtual SfxPoolItem* Create( SvStream& rStream, sal_uInt16 nVer ) const; + + inline SvxOrientationItem& operator=(const SvxOrientationItem& rOrientation) + { + SetValue( rOrientation.GetValue() ); + return *this; + } + + /** Returns sal_True, if the item represents STACKED state. */ + sal_Bool IsStacked() const; + /** Returns the rotation this item represents (returns nStdAngle for STANDARD and STACKED state). */ + sal_Int32 GetRotation( sal_Int32 nStdAngle = 0 ) const; + /** Fills this item according to passed item values. */ + void SetFromRotation( sal_Int32 nRotation, sal_Bool bStacked ); +}; + +//------------------------------------------------------------------------ + +class SVX_DLLPUBLIC SvxMarginItem: public SfxPoolItem +{ + sal_Int16 nLeftMargin; + sal_Int16 nTopMargin; + sal_Int16 nRightMargin; + sal_Int16 nBottomMargin; +public: + TYPEINFO(); + SvxMarginItem( const sal_uInt16 nId ); + SvxMarginItem( sal_Int16 nLeft, sal_Int16 nTop /*= 0*/, + sal_Int16 nRight /*= 0*/, sal_Int16 nBottom /*= 0*/, + const sal_uInt16 nId ); + SvxMarginItem( const SvxMarginItem& ); + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + virtual SfxPoolItem* Create( SvStream& rStream, sal_uInt16 nVer ) const; + virtual SvStream& Store( SvStream&, sal_uInt16 nItemVersion ) 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 ); + + sal_Int16 GetLeftMargin() const {return nLeftMargin; } + sal_Bool SetLeftMargin(sal_Int16 nLeft); + sal_Int16 GetTopMargin() const {return nTopMargin; } + sal_Bool SetTopMargin(sal_Int16 nTop); + sal_Int16 GetRightMargin() const {return nRightMargin; } + sal_Bool SetRightMargin(sal_Int16 nRight); + sal_Int16 GetBottomMargin() const {return nBottomMargin; } + sal_Bool SetBottomMargin(sal_Int16 nBottom); + + inline SvxMarginItem& operator=(const SvxMarginItem& rMargin) + { + nLeftMargin = rMargin.nLeftMargin; + nTopMargin = rMargin.nTopMargin; + nRightMargin = rMargin.nRightMargin; + nBottomMargin = rMargin.nBottomMargin; + return *this; + } +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/anchorid.hxx b/include/svx/anchorid.hxx new file mode 100644 index 000000000000..f532b34b3fb2 --- /dev/null +++ b/include/svx/anchorid.hxx @@ -0,0 +1,36 @@ +/* -*- 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 _SVX_ANCHORID_HXX +#define _SVX_ANCHORID_HXX + + +enum SvxAnchorIds +{ + SVX_OBJ_AT_CNTNT = 0x01, // Frame bound to paragraph + SVX_OBJ_IN_CNTNT = 0x02, // Frame bound to character + SVX_OBJ_PAGE = 0x04, // Frame bound to page + SVX_OBJ_AT_FLY = 0x08 // Frame bound to other frame +// SVX_OBJ_AUTO_CNTNT = 0x10 // Automatically positioned frame bound to paragraph +}; + + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/bmpmask.hxx b/include/svx/bmpmask.hxx new file mode 100644 index 000000000000..247beaafc7d2 --- /dev/null +++ b/include/svx/bmpmask.hxx @@ -0,0 +1,181 @@ +/* -*- 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 _BMPMASK_HXX_ +#define _BMPMASK_HXX_ + +#include <sfx2/ctrlitem.hxx> +#include <sfx2/dockwin.hxx> +#include <vcl/toolbox.hxx> +#include <vcl/fixed.hxx> +#include <vcl/group.hxx> +#include <vcl/graph.hxx> +#include "svx/svxdllapi.h" + +#include <svx/dlgctrl.hxx> + +/************************************************************************* +|* +|* class SvxBmpMaskSelectItem +|* +\************************************************************************/ +class SvxBmpMask; + +class SvxBmpMaskSelectItem : public SfxControllerItem +{ +private: + SvxBmpMask &rBmpMask; + +protected: + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + +public: + SvxBmpMaskSelectItem( sal_uInt16 nId, SvxBmpMask& rMask, + SfxBindings& rBindings ); +}; + +/************************************************************************* +|* +|* Derivative from SfxChildWindow as 'container' for Float +|* +\************************************************************************/ + +class SVX_DLLPUBLIC SvxBmpMaskChildWindow : public SfxChildWindow +{ + public: + SvxBmpMaskChildWindow( Window*, + sal_uInt16, SfxBindings*, + SfxChildWinInfo* ); + + SFX_DECL_CHILDWINDOW_WITHID(SvxBmpMaskChildWindow); +}; + +/************************************************************************* +|* +|* class SvxBmpMask +|* +\************************************************************************/ + +class MaskData; +class MaskSet; +class ColorWindow; + +class SVX_DLLPUBLIC SvxBmpMask : public SfxDockingWindow +{ + friend class MaskData; + friend class MaskSet; + + Size aLastSize; + ToolBox aTbxPipette; + ColorWindow* pCtlPipette; + PushButton aBtnExec; + FixedLine aGrpQ; + + FixedText aFt1; + FixedText aFt2; + FixedText aFt3; + CheckBox aCbx1; + MaskSet* pQSet1; + MetricField aSp1; + ColorLB aLbColor1; + + CheckBox aCbx2; + MaskSet* pQSet2; + MetricField aSp2; + ColorLB aLbColor2; + + CheckBox aCbx3; + MaskSet* pQSet3; + MetricField aSp3; + ColorLB aLbColor3; + + CheckBox aCbx4; + MaskSet* pQSet4; + MetricField aSp4; + ColorLB aLbColor4; + + MaskData* pData; + CheckBox aCbxTrans; + ColorLB aLbColorTrans; + + XColorListRef pColLst; + Color aPipetteColor; + SvxBmpMaskSelectItem aSelItem; + + Image maImgPipette; + + virtual sal_Bool Close(); + +#ifdef BMPMASK_PRIVATE + + sal_uInt16 InitColorArrays( Color* pSrcCols, Color* pDstCols, + sal_uIntPtr* pTols ); + + Bitmap ImpMask( const Bitmap& rBitmap ); + GDIMetaFile ImpMask( const GDIMetaFile& rMtf ); + Animation ImpMask( const Animation& rAnimation ); + BitmapEx ImpMaskTransparent( const BitmapEx& rBitmapEx, + const Color& rColor, + const long nTol ); + BitmapEx ImpReplaceTransparency( const BitmapEx& rBmpEx, + const Color& rColor ); + Animation ImpReplaceTransparency( const Animation& rAnim, + const Color& rColor ); + GDIMetaFile ImpReplaceTransparency( const GDIMetaFile& rMtf, + const Color& rColor ); + +#endif // BMPMASK_PRIVATE + +public: + + SvxBmpMask( SfxBindings *pBindinx, + SfxChildWindow *pCW, + Window* pParent, + const ResId& rResId ); + ~SvxBmpMask(); + + void SetColor( const Color& rColor ); + void PipetteClicked(); + + sal_Bool NeedsColorList() const; + void SetColorList( const XColorListRef &pColorList ); + + void SetExecState( sal_Bool bEnable ); + + Graphic Mask( const Graphic& rGraphic ); + + sal_Bool IsEyedropping() const; + + void onSelect( MaskSet* pSet ); + + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + void ApplyStyle(); + +private: + + /** Set names for accessible objects. This is necessary for objects + like the source color checkboxes which initially have no name and + for which the description would be read by AT. + */ + SVX_DLLPRIVATE void SetAccessibleNames (void); +}; + +#endif // _BMPMASK_HXX_ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/camera3d.hxx b/include/svx/camera3d.hxx new file mode 100644 index 000000000000..96a5526b4501 --- /dev/null +++ b/include/svx/camera3d.hxx @@ -0,0 +1,78 @@ +/* -*- 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 _CAMERA3D_HXX +#define _CAMERA3D_HXX + +#include <svx/viewpt3d.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* Camera derivative +|* +\************************************************************************/ + +class SVX_DLLPUBLIC Camera3D : public Viewport3D +{ + protected: + basegfx::B3DPoint aResetPos; + basegfx::B3DPoint aResetLookAt; + double fResetFocalLength; + double fResetBankAngle; + + basegfx::B3DPoint aPosition; + basegfx::B3DPoint aLookAt; + double fFocalLength; + double fBankAngle; + + bool bAutoAdjustProjection; + + public: + Camera3D(const basegfx::B3DPoint& rPos, const basegfx::B3DPoint& rLookAt, + double fFocalLen = 35.0, double fBankAng = 0); + Camera3D(); + + void SetDefaults(const basegfx::B3DPoint& rPos, const basegfx::B3DPoint& rLookAt, + double fFocalLen = 35.0, double fBankAng = 0); + + void SetViewWindow(double fX, double fY, double fW, double fH); + + void SetPosition(const basegfx::B3DPoint& rNewPos); + const basegfx::B3DPoint& GetPosition() const { return aPosition; } + void SetLookAt(const basegfx::B3DPoint& rNewLookAt); + const basegfx::B3DPoint& GetLookAt() const { return aLookAt; } + void SetPosAndLookAt(const basegfx::B3DPoint& rNewPos, const basegfx::B3DPoint& rNewLookAt); + + // Focal length in mm + void SetFocalLength(double fLen); + double GetFocalLength() const { return fFocalLength; } + + // Bank angle links/rechts + void SetBankAngle(double fAngle); + double GetBankAngle() const { return fBankAngle; } + + void SetAutoAdjustProjection(bool bAdjust = true) + { bAutoAdjustProjection = bAdjust; } + bool IsAutoAdjustProjection() const { return bAutoAdjustProjection; } +}; + +#endif // _CAMERA3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/charmap.hxx b/include/svx/charmap.hxx new file mode 100644 index 000000000000..8f1ff765f78d --- /dev/null +++ b/include/svx/charmap.hxx @@ -0,0 +1,134 @@ +/* -*- 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 _SVX_CHARMAP_HXX +#define _SVX_CHARMAP_HXX + +#include <vcl/ctrl.hxx> +#include <vcl/metric.hxx> +#include <vcl/scrbar.hxx> +#include <boost/shared_ptr.hpp> +#include <map> +#include <tools/shl.hxx> +#include "svx/svxdllapi.h" + +// define ---------------------------------------------------------------- + +#define COLUMN_COUNT 16 +#define ROW_COUNT 8 + +namespace svx +{ + struct SvxShowCharSetItem; + class SvxShowCharSetVirtualAcc; +} + +// class SvxShowCharSet -------------------------------------------------- + +class SVX_DLLPUBLIC SvxShowCharSet : public Control +{ +public: + SvxShowCharSet( Window* pParent, const ResId& rResId ); + SvxShowCharSet( Window* pParent ); + ~SvxShowCharSet(); + + void SetFont( const Font& rFont ); + + void SelectCharacter( sal_uInt32 cNew, sal_Bool bFocus = sal_False ); + sal_UCS4 GetSelectCharacter() const; + + Link GetDoubleClickHdl() const { return aDoubleClkHdl; } + void SetDoubleClickHdl( const Link& rLink ) { aDoubleClkHdl = rLink; } + Link GetSelectHdl() const { return aSelectHdl; } + void SetSelectHdl( const Link& rHdl ) { aSelectHdl = rHdl; } + Link GetHighlightHdl() const { return aHighHdl; } + void SetHighlightHdl( const Link& rHdl ) { aHighHdl = rHdl; } + Link GetPreSelectHdl() const { return aHighHdl; } + void SetPreSelectHdl( const Link& rHdl ) { aPreSelectHdl = rHdl; } + static sal_uInt32& getSelectedChar(); + +#ifdef _SVX_CHARMAP_CXX_ + ::svx::SvxShowCharSetItem* ImplGetItem( int _nPos ); + int FirstInView( void) const; + int LastInView( void) const; + int PixelToMapIndex( const Point&) const; + void SelectIndex( int index, sal_Bool bFocus = sal_False ); + void DeSelect(); + inline sal_Bool IsSelected(sal_uInt16 _nPos) const { return _nPos == nSelectedIndex; } + inline sal_uInt16 GetSelectIndexId() const { return sal::static_int_cast<sal_uInt16>(nSelectedIndex); } + sal_uInt16 GetRowPos(sal_uInt16 _nPos) const; + sal_uInt16 GetColumnPos(sal_uInt16 _nPos) const; + + ScrollBar* getScrollBar(); + void ReleaseAccessible(); + sal_Int32 getMaxCharCount() const; +#endif // _SVX_CHARMAP_CXX_ + + virtual void Resize(); + +protected: + virtual void Paint( const Rectangle& ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void MouseButtonUp( const MouseEvent& rMEvt ); + virtual void MouseMove( const MouseEvent& rMEvt ); + virtual void Command( const CommandEvent& rCEvt ); + virtual void KeyInput( const KeyEvent& rKEvt ); + virtual void GetFocus(); + virtual void LoseFocus(); + virtual void StateChanged( StateChangedType nStateChange ); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible(); + + + +private: + typedef ::std::map<sal_Int32, boost::shared_ptr<svx::SvxShowCharSetItem> > ItemsMap; + ItemsMap m_aItems; + Link aDoubleClkHdl; + Link aSelectHdl; + Link aHighHdl; + Link aPreSelectHdl; + ::svx::SvxShowCharSetVirtualAcc* m_pAccessible; + ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > m_xAccessible; + long nX; + long nY; + long m_nXGap; + long m_nYGap; + sal_Bool bDrag; + + sal_Int32 nSelectedIndex; + + FontCharMap maFontCharMap; + ScrollBar aVscrollSB; + +private: + void DrawChars_Impl( int n1, int n2); + void InitSettings( sal_Bool bForeground, sal_Bool bBackground); + // abstraction layers are: Unicode<->MapIndex<->Pixel + Point MapIndexToPixel( int) const; + DECL_LINK(VscrollHdl, void *); + + void init(); + Rectangle getGridRectangle(const Point &rPointUL, const Size &rOutputSize); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/charthelper.hxx b/include/svx/charthelper.hxx new file mode 100644 index 000000000000..3b43c4bb7f10 --- /dev/null +++ b/include/svx/charthelper.hxx @@ -0,0 +1,52 @@ +/* + * 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 CHARTHELPER_HXX +#define CHARTHELPER_HXX + +#include <com/sun/star/frame/XModel.hpp> +#include <com/sun/star/uno/Sequence.hxx> +#include <basegfx/range/b2drange.hxx> +#include <svx/svxdllapi.h> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +namespace svt { class EmbeddedObjectRef; } + +////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC ChartHelper +{ +public: + // test if given reference is a chart + static bool IsChart(const svt::EmbeddedObjectRef& xObjRef); + + // try to access rXModel in case of a chart to to get the chart content + // as sequence of primitives. Return range of primitives (chart size) in rRange; + // it will be used to embed the chart to the SdrObject transformation. This + // allows to define possible distances between chart and SDrObject bounds here + static drawinglayer::primitive2d::Primitive2DSequence tryToGetChartContentAsPrimitive2DSequence( + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& rXModel, + basegfx::B2DRange& rRange); +}; + +////////////////////////////////////////////////////////////////////////////// + +#endif //CHARTHELPER_HXX diff --git a/include/svx/checklbx.hxx b/include/svx/checklbx.hxx new file mode 100644 index 000000000000..8a9b3558d272 --- /dev/null +++ b/include/svx/checklbx.hxx @@ -0,0 +1,81 @@ +/* -*- 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 _SVX_CHECKLBX_HXX +#define _SVX_CHECKLBX_HXX + +#include <svtools/treelistbox.hxx> +#include <svtools/svlbitm.hxx> + +#include <vcl/lstbox.hxx> +#include "svx/svxdllapi.h" + +// class SvxCheckListBox ------------------------------------------------- + +class SVX_DLLPUBLIC SvxCheckListBox : public SvTreeListBox +{ + using Window::GetText; + +private: + SvLBoxButtonData* pCheckButton; + +#ifdef _SVX_CHECKLBX_CXX + SVX_DLLPRIVATE void Init_Impl(); +#endif + + using SvTreeListBox::InsertEntry; + // Avoid ambiguity with new InsertEntry: + virtual SvTreeListEntry* InsertEntry( const XubString& rText, SvTreeListEntry* pParent, + sal_Bool bChildrenOnDemand, + sal_uIntPtr nPos, void* pUserData, + SvLBoxButtonKind eButtonKind ); + +public: + SvxCheckListBox( Window* pParent, WinBits nWinStyle = 0 ); + SvxCheckListBox( Window* pParent, const ResId& rResId ); + SvxCheckListBox( Window* pParent, const ResId& rResId, + const Image& rNormalStaticImage ); + ~SvxCheckListBox(); + + void InsertEntry ( const String& rStr, + sal_uInt16 nPos = LISTBOX_APPEND, + void* pUserData = NULL, + SvLBoxButtonKind eButtonKind = + SvLBoxButtonKind_enabledCheckbox ); + void RemoveEntry ( sal_uInt16 nPos ); + + void SelectEntryPos ( sal_uInt16 nPos, sal_Bool bSelect = sal_True ); + sal_uInt16 GetSelectEntryPos () const; + + String GetText ( sal_uInt16 nPos ) const; + sal_uInt16 GetCheckedEntryCount() const; + void CheckEntryPos ( sal_uInt16 nPos, sal_Bool bCheck = sal_True ); + sal_Bool IsChecked ( sal_uInt16 nPos ) const; + void ToggleCheckButton ( SvTreeListEntry* pEntry ); + + void* SetEntryData ( sal_uInt16 nPos, void* pNewData ); + void* GetEntryData ( sal_uInt16 nPos ) const; + + virtual void MouseButtonDown ( const MouseEvent& rMEvt ); + virtual void KeyInput ( const KeyEvent& rKEvt ); +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/chrtitem.hxx b/include/svx/chrtitem.hxx new file mode 100644 index 000000000000..92045aa37c77 --- /dev/null +++ b/include/svx/chrtitem.hxx @@ -0,0 +1,334 @@ +/* -*- 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 _SVX_CHRTITEM_HXX +#define _SVX_CHRTITEM_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +//------------------------------------------------------------------------ + +enum SvxChartStyle +{ + CHSTYLE_2D_LINE, + CHSTYLE_2D_STACKEDLINE, + CHSTYLE_2D_PERCENTLINE, + CHSTYLE_2D_COLUMN, + CHSTYLE_2D_STACKEDCOLUMN, + CHSTYLE_2D_PERCENTCOLUMN, + CHSTYLE_2D_BAR, + CHSTYLE_2D_STACKEDBAR, + CHSTYLE_2D_PERCENTBAR, + CHSTYLE_2D_AREA, + CHSTYLE_2D_STACKEDAREA, + CHSTYLE_2D_PERCENTAREA, + CHSTYLE_2D_PIE, + CHSTYLE_3D_STRIPE, + CHSTYLE_3D_COLUMN, + CHSTYLE_3D_FLATCOLUMN, + CHSTYLE_3D_STACKEDFLATCOLUMN, + CHSTYLE_3D_PERCENTFLATCOLUMN, + CHSTYLE_3D_AREA, + CHSTYLE_3D_STACKEDAREA, + CHSTYLE_3D_PERCENTAREA, + CHSTYLE_3D_SURFACE, + CHSTYLE_3D_PIE, + CHSTYLE_2D_XY, + CHSTYLE_3D_XYZ, + CHSTYLE_2D_LINESYMBOLS, + CHSTYLE_2D_STACKEDLINESYM, + CHSTYLE_2D_PERCENTLINESYM, + CHSTYLE_2D_XYSYMBOLS, + CHSTYLE_3D_XYZSYMBOLS, + CHSTYLE_2D_DONUT1, + CHSTYLE_2D_DONUT2, + CHSTYLE_3D_BAR, + CHSTYLE_3D_FLATBAR, + CHSTYLE_3D_STACKEDFLATBAR, + CHSTYLE_3D_PERCENTFLATBAR, + CHSTYLE_2D_PIE_SEGOF1, + CHSTYLE_2D_PIE_SEGOFALL, + CHSTYLE_2D_NET, + CHSTYLE_2D_NET_SYMBOLS, + CHSTYLE_2D_NET_STACK, + CHSTYLE_2D_NET_SYMBOLS_STACK, + CHSTYLE_2D_NET_PERCENT, + CHSTYLE_2D_NET_SYMBOLS_PERCENT, + CHSTYLE_2D_CUBIC_SPLINE, + CHSTYLE_2D_CUBIC_SPLINE_SYMBOL, + CHSTYLE_2D_B_SPLINE, + CHSTYLE_2D_B_SPLINE_SYMBOL, + CHSTYLE_2D_CUBIC_SPLINE_XY, + CHSTYLE_2D_CUBIC_SPLINE_SYMBOL_XY, + CHSTYLE_2D_B_SPLINE_XY, + CHSTYLE_2D_B_SPLINE_SYMBOL_XY, + CHSTYLE_2D_XY_LINE, + CHSTYLE_2D_LINE_COLUMN, + CHSTYLE_2D_LINE_STACKEDCOLUMN, + CHSTYLE_2D_STOCK_1, + CHSTYLE_2D_STOCK_2, + CHSTYLE_2D_STOCK_3, + CHSTYLE_2D_STOCK_4, + CHSTYLE_ADDIN +}; + +#define CHSTYLE_COUNT (CHSTYLE_ADDIN + 1) + +enum SvxChartDataDescr +{ + CHDESCR_NONE, + CHDESCR_VALUE, + CHDESCR_PERCENT, + CHDESCR_TEXT, + CHDESCR_TEXTANDPERCENT, + CHDESCR_NUMFORMAT_PERCENT, + CHDESCR_NUMFORMAT_VALUE, + CHDESCR_TEXTANDVALUE +}; + +#define CHDESCR_COUNT (CHDESCR_TEXTANDVALUE + 1) + +enum SvxChartTextOrder +{ + CHTXTORDER_SIDEBYSIDE, + CHTXTORDER_UPDOWN, + CHTXTORDER_DOWNUP, + CHTXTORDER_AUTO +}; + +#define CHTXTORDER_COUNT (CHTXTORDER_AUTO + 1) + +enum SvxChartTextOrient +{ + CHTXTORIENT_AUTOMATIC, + CHTXTORIENT_STANDARD, + CHTXTORIENT_BOTTOMTOP, + CHTXTORIENT_STACKED, + CHTXTORIENT_TOPBOTTOM +}; + +#define CHTXTORIENT_COUNT (CHTXTORIENT_TOPBOTTOM + 1) + +enum SvxChartKindError +{ + CHERROR_NONE, + CHERROR_VARIANT, + CHERROR_SIGMA, + CHERROR_PERCENT, + CHERROR_BIGERROR, + CHERROR_CONST, + CHERROR_STDERROR, + CHERROR_RANGE +}; + +#define CHERROR_COUNT (CHERROR_RANGE + 1) + +enum SvxChartIndicate +{ + CHINDICATE_NONE, + CHINDICATE_BOTH, + CHINDICATE_UP, + CHINDICATE_DOWN +}; + +#define CHINDICATE_COUNT (CHINDICATE_DOWN + 1) + +enum SvxChartRegress +{ + CHREGRESS_NONE, + CHREGRESS_LINEAR, + CHREGRESS_LOG, + CHREGRESS_EXP, + CHREGRESS_POWER +}; + +#define CHREGRESS_COUNT (CHREGRESS_POWER + 1) + +//------------------------------------------------------------------ + +class SVX_DLLPUBLIC SvxChartStyleItem : public SfxEnumItem +{ +public: + TYPEINFO(); + SvxChartStyleItem(SvxChartStyle eStyle /*= CHSTYLE_2D_LINE*/, + sal_uInt16 nId ); + SvxChartStyleItem(SvStream& rIn, sal_uInt16 nId ); + + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + + sal_uInt16 GetValueCount() const { return CHSTYLE_COUNT; } + SvxChartStyle GetValue() const + { return (SvxChartStyle)SfxEnumItem::GetValue(); } +}; + +//------------------------------------------------------------------ + +class SVX_DLLPUBLIC SvxChartRegressItem : public SfxEnumItem +{ +public: + TYPEINFO(); + SvxChartRegressItem(SvxChartRegress eRegress /*= CHREGRESS_LINEAR*/, + sal_uInt16 nId ); + SvxChartRegressItem(SvStream& rIn, sal_uInt16 nId ); + + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + + sal_uInt16 GetValueCount() const { return CHREGRESS_COUNT; } + SvxChartRegress GetValue() const + { return (SvxChartRegress)SfxEnumItem::GetValue(); } + sal_uInt16 GetVersion (sal_uInt16 nFileFormatVersion) const; +}; + +//------------------------------------------------------------------ + +class SVX_DLLPUBLIC SvxChartDataDescrItem : public SfxEnumItem +{ +public: + TYPEINFO(); + SvxChartDataDescrItem(SvStream& rIn, + sal_uInt16 nId ); + + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + + sal_uInt16 GetValueCount() const { return CHDESCR_COUNT; } + SvxChartDataDescr GetValue() const + { return (SvxChartDataDescr)SfxEnumItem::GetValue(); } +}; + +//------------------------------------------------------------------ + +class SVX_DLLPUBLIC SvxChartTextOrderItem : public SfxEnumItem +{ +public: + TYPEINFO(); + SvxChartTextOrderItem(SvxChartTextOrder eOrder /*= CHTXTORDER_SIDEBYSIDE*/, + sal_uInt16 nId ); + SvxChartTextOrderItem(SvStream& rIn, + sal_uInt16 nId ); + + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) 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 ); + + sal_uInt16 GetValueCount() const { return CHTXTORDER_COUNT; } + SvxChartTextOrder GetValue() const + { return (SvxChartTextOrder)SfxEnumItem::GetValue(); } +}; + +//------------------------------------------------------------------ + +class SVX_DLLPUBLIC SvxChartTextOrientItem : public SfxEnumItem +{ +public: + TYPEINFO(); + SvxChartTextOrientItem(SvStream& rIn, + sal_uInt16 nId ); + + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + + sal_uInt16 GetValueCount() const { return CHTXTORDER_COUNT; } + SvxChartTextOrient GetValue() const + { return (SvxChartTextOrient)SfxEnumItem::GetValue(); } +}; + +//------------------------------------------------------------------ + +class SVX_DLLPUBLIC SvxChartKindErrorItem : public SfxEnumItem +{ +public: + TYPEINFO(); + SvxChartKindErrorItem(SvxChartKindError /*eOrient = CHERROR_NONE*/, + sal_uInt16 nId ); + SvxChartKindErrorItem(SvStream& rIn, + sal_uInt16 nId ); + + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + + sal_uInt16 GetValueCount() const { return CHERROR_COUNT; } + SvxChartKindError GetValue() const + { return (SvxChartKindError)SfxEnumItem::GetValue(); } + + sal_uInt16 GetVersion (sal_uInt16 nFileFormatVersion) const; +}; + +//------------------------------------------------------------------ + +class SVX_DLLPUBLIC SvxChartIndicateItem : public SfxEnumItem +{ +public: + TYPEINFO(); + SvxChartIndicateItem(SvxChartIndicate eOrient /*= CHINDICATE_NONE*/, + sal_uInt16 nId ); + SvxChartIndicateItem(SvStream& rIn, + sal_uInt16 nId ); + + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + + sal_uInt16 GetValueCount() const { return CHINDICATE_COUNT; } + SvxChartIndicate GetValue() const + { return (SvxChartIndicate)SfxEnumItem::GetValue(); } + + sal_uInt16 GetVersion (sal_uInt16 nFileFormatVersion) const; +}; + +//------------------------------------------------------------------ + +class SVX_DLLPUBLIC SvxDoubleItem : public SfxPoolItem +{ + double fVal; + +public: + TYPEINFO(); + SvxDoubleItem(double fValue /*= 0.0*/, sal_uInt16 nId ); + SvxDoubleItem(const SvxDoubleItem& rItem); + + 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 String GetValueText() const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0) const; + + virtual int operator == (const SfxPoolItem&) const; + virtual SfxPoolItem* Clone(SfxItemPool *pPool = NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVersion) const; + virtual SvStream& Store(SvStream& rOut, sal_uInt16 nItemVersion ) const; + + virtual double GetMin() const; + virtual double GetMax() const; + + virtual SfxFieldUnit GetUnit() const; + + double GetValue() const { return fVal; } + void SetValue(double fNewVal) { fVal = fNewVal; } +}; + +#endif // _SVX_CHRTITEM_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/clipboardctl.hxx b/include/svx/clipboardctl.hxx new file mode 100644 index 000000000000..465436367fad --- /dev/null +++ b/include/svx/clipboardctl.hxx @@ -0,0 +1,58 @@ +/* -*- 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 _SVX_CLIPBOARDCTL_HXX_ +#define _SVX_CLIPBOARDCTL_HXX_ + +#include <sfx2/tbxctrl.hxx> +#include <sfx2/ctrlitem.hxx> +#include <svl/poolitem.hxx> + + +#include "svx/svxdllapi.h" + +class PopupMenu; +class SvxClipboardFmtItem; + + +class SVX_DLLPUBLIC SvxClipBoardControl : public SfxToolBoxControl +{ + SfxPoolItem* pClipboardFmtItem; + PopupMenu* pPopup; + sal_Bool bDisabled; + + void DelPopup(); + +public: + SFX_DECL_TOOLBOX_CONTROL(); + + SvxClipBoardControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxClipBoardControl(); + + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); + virtual void StateChanged( sal_uInt16 nSID, + SfxItemState eState, + const SfxPoolItem* pState ); +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/clipfmtitem.hxx b/include/svx/clipfmtitem.hxx new file mode 100644 index 000000000000..2debc5e0747d --- /dev/null +++ b/include/svx/clipfmtitem.hxx @@ -0,0 +1,57 @@ +/* -*- 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 _SVX_CLIPFMTITEM_HXX +#define _SVX_CLIPFMTITEM_HXX + +#include <rtl/ustring.hxx> +#include <svl/poolitem.hxx> +#include "svx/svxdllapi.h" + +struct SvxClipboardFmtItem_Impl; + +class SVX_DLLPUBLIC SvxClipboardFmtItem : public SfxPoolItem +{ + SvxClipboardFmtItem_Impl* pImpl; +protected: + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + +public: + TYPEINFO(); + SvxClipboardFmtItem( sal_uInt16 nId = 0 ); + SvxClipboardFmtItem( const SvxClipboardFmtItem& ); + virtual ~SvxClipboardFmtItem(); + + virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ) const; + virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId ); + + void AddClipbrdFormat( sal_uIntPtr nId, sal_uInt16 nPos = USHRT_MAX ); + void AddClipbrdFormat( sal_uIntPtr nId, const OUString& rName, + sal_uInt16 nPos = USHRT_MAX ); + sal_uInt16 Count() const; + + sal_uIntPtr GetClipbrdFormatId( sal_uInt16 nPos ) const; + const OUString GetClipbrdFormatName( sal_uInt16 nPos ) const; +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/colrctrl.hxx b/include/svx/colrctrl.hxx new file mode 100644 index 000000000000..ee3451bc857c --- /dev/null +++ b/include/svx/colrctrl.hxx @@ -0,0 +1,135 @@ +/* -*- 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 _SVX_COLRCTRL_HXX +#define _SVX_COLRCTRL_HXX + +#include <sfx2/dockwin.hxx> +#include <sfx2/childwin.hxx> +#include <svtools/valueset.hxx> +#include <svtools/transfer.hxx> +#include <svl/lstner.hxx> +#include <svx/svxdllapi.h> +#include <svx/xtable.hxx> + +class SvData; + +/************************************************************************* +|* +|* SvxColorValueSet +|* +\************************************************************************/ + +class SvxColorValueSet : public ValueSet, public DragSourceHelper +{ + using ValueSet::StartDrag; + +private: + + sal_Bool bLeft; + Point aDragPosPixel; + +protected: + + void DoDrag(); + + // ValueSet + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void MouseButtonUp( const MouseEvent& rMEvt ); + virtual void Command(const CommandEvent& rCEvt ); + + // DragSourceHelper + virtual void StartDrag( sal_Int8 nAction, const Point& rPtPixel ); + + DECL_STATIC_LINK(SvxColorValueSet, ExecDragHdl, void*); + +public: + SvxColorValueSet( Window* pParent, const ResId& rResId ); + + sal_Bool IsLeftButton() const { return bLeft; } +}; + +/************************************************************************* +|* +|* Derivation from SfxChildWindow as "container" for Controller +|* +\************************************************************************/ + +class SVX_DLLPUBLIC SvxColorChildWindow : public SfxChildWindow +{ + public: + SvxColorChildWindow( Window*, sal_uInt16, SfxBindings*, + SfxChildWinInfo* ); + + SFX_DECL_CHILDWINDOW_WITHID(SvxColorChildWindow); +}; + +/************************************************************************* +|* +|* SvxColorDockingWindow +|* +\************************************************************************/ + +class SvxColorDockingWindow : public SfxDockingWindow, public SfxListener +{ + friend class SvxColorChildWindow; + +private: + XColorListRef pColorList; + SvxColorValueSet aColorSet; + sal_uInt16 nLeftSlot; + sal_uInt16 nRightSlot; + sal_uInt16 nCols; + sal_uInt16 nLines; + long nCount; + Size aColorSize; + Size aItemSize; + + void FillValueSet(); + void SetSize(); + DECL_LINK( SelectHdl, void * ); + + /** This function is called when the window gets the focus. It grabs + the focus to the color value set so that it can be controlled with + the keyboard. + */ + virtual void GetFocus (void); + +protected: + virtual sal_Bool Close(); + virtual void Resize(); + virtual void Resizing( Size& rSize ); + +public: + SvxColorDockingWindow( SfxBindings* pBindings, + SfxChildWindow *pCW, + Window* pParent, + const ResId& rResId ); + ~SvxColorDockingWindow(); + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + void SetSlotIDs( sal_uInt16 nLeft, sal_uInt16 nRight ) + { nLeftSlot = nLeft; nRightSlot = nRight; } + + virtual long Notify( NotifyEvent& rNEvt ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/compressgraphicdialog.hxx b/include/svx/compressgraphicdialog.hxx new file mode 100644 index 000000000000..a733fa2b6298 --- /dev/null +++ b/include/svx/compressgraphicdialog.hxx @@ -0,0 +1,95 @@ +/* -*- 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 _COMPRESS_GRAPHIC_DIALOG_HXX +#define _COMPRESS_GRAPHIC_DIALOG_HXX + +#include <vcl/dialog.hxx> +#include <vcl/button.hxx> +#include <vcl/fixed.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/field.hxx> +#include <sfx2/bindings.hxx> +#include "svx/svxdllapi.h" + +class SdrGrafObj; + +class SVX_DLLPUBLIC CompressGraphicsDialog : public ModalDialog +{ +private: + FixedText* m_pFixedText2; + FixedText* m_pFixedText3; + FixedText* m_pFixedText5; + FixedText* m_pFixedText6; + + CheckBox* m_pReduceResolutionCB; + NumericField* m_pMFNewWidth; + NumericField* m_pMFNewHeight; + ComboBox* m_pResolutionLB; + RadioButton* m_pLosslessRB; + RadioButton* m_pJpegCompRB; + NumericField* m_pCompressionMF; + NumericField* m_pQualityMF; + PushButton* m_pBtnCalculate; + ListBox* m_pInterpolationCombo; + + SdrGrafObj* m_pGraphicObj; + Graphic m_aGraphic; + Size m_aViewSize100mm; + Rectangle m_aCropRectangle; + SfxBindings& m_rBindings; + + double m_dResolution; + + void Initialize(); + + DECL_LINK( NewWidthModifiedHdl, void* ); + DECL_LINK( NewHeightModifiedHdl, void* ); + DECL_LINK( ResolutionModifiedHdl, void* ); + DECL_LINK( ToggleCompressionRB, void* ); + DECL_LINK( ToggleReduceResolutionRB, void* ); + + DECL_LINK( CalculateClickHdl, void* ); + + void Update(); + void UpdateNewWidthMF(); + void UpdateNewHeightMF(); + void UpdateResolutionLB(); + + void Compress(SvStream& aStream); + + double GetViewWidthInch(); + double GetViewHeightInch(); + + sal_uLong GetSelectedInterpolationType(); + +public: + CompressGraphicsDialog( Window* pParent, SdrGrafObj* pGraphicObj, SfxBindings& rBindings ); + CompressGraphicsDialog( Window* pParent, Graphic& rGraphic, Size rViewSize100mm, Rectangle& rCropRectangle, SfxBindings& rBindings ); + + virtual ~CompressGraphicsDialog(); + + SdrGrafObj* GetCompressedSdrGrafObj(); + Graphic GetCompressedGraphic(); + + Rectangle GetScaledCropRectangle(); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/connctrl.hxx b/include/svx/connctrl.hxx new file mode 100644 index 000000000000..a559f615c14c --- /dev/null +++ b/include/svx/connctrl.hxx @@ -0,0 +1,66 @@ +/* -*- 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 _SVX_CONNCTRL_HXX +#define _SVX_CONNCTRL_HXX + +#include <vcl/ctrl.hxx> +#include "svx/svxdllapi.h" + +class SfxItemSet; +class SdrEdgeObj; +class SdrView; +class SdrObjList; + +/************************************************************************* +|* +|* SvxXConnectionPreview +|* +\************************************************************************/ +class SVX_DLLPUBLIC SvxXConnectionPreview : public Control +{ + friend class SvxConnectionPage; + +private: + const SfxItemSet& rAttrs; + SdrEdgeObj* pEdgeObj; + SdrObjList* pObjList; + const SdrView* pView; + + SVX_DLLPRIVATE void SetStyles(); +public: + SvxXConnectionPreview( Window* pParent, const ResId& rResId, + const SfxItemSet& rInAttrs ); + ~SvxXConnectionPreview(); + + virtual void Paint( const Rectangle& rRect ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + + void SetAttributes( const SfxItemSet& rInAttrs ); + sal_uInt16 GetLineDeltaAnz(); + + void Construct(); + void SetView( const SdrView* pSdrView ) { pView = pSdrView; } + + virtual void DataChanged( const DataChangedEvent& rDCEvt ); +}; + + +#endif // _SVX_CONNCTRL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/contdlg.hxx b/include/svx/contdlg.hxx new file mode 100644 index 000000000000..2ba38f1e9e31 --- /dev/null +++ b/include/svx/contdlg.hxx @@ -0,0 +1,98 @@ +/* -*- 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 _CONTDLG_HXX_ +#define _CONTDLG_HXX_ + +#include <sfx2/basedlgs.hxx> +#include <sfx2/ctrlitem.hxx> +#include <sfx2/childwin.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* Derivation from SfxChildWindow as "container" for Float +|* +\************************************************************************/ + +class Graphic; + +class SVX_DLLPUBLIC SvxContourDlgChildWindow : public SfxChildWindow +{ + public: + + SvxContourDlgChildWindow( Window*, sal_uInt16, SfxBindings*, SfxChildWinInfo* ); + + SFX_DECL_CHILDWINDOW_WITHID( SvxContourDlgChildWindow ); +}; + +#ifndef _REDUCED_ContourDlg_HXX_ +#define _REDUCED_CONTDLG_HXX_ + +class SvxSuperContourDlg; + +class SvxContourDlgItem : public SfxControllerItem +{ + SvxSuperContourDlg& rDlg; + +protected: + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + +public: + + SvxContourDlgItem( sal_uInt16 nId, SvxSuperContourDlg& rDlg, SfxBindings& rBindings ); +}; + +class SVX_DLLPUBLIC SvxContourDlg : public SfxFloatingWindow +{ + using Window::Update; + + SvxSuperContourDlg* pSuperClass; + + +protected: + + void SetSuperClass( SvxSuperContourDlg& rSuperClass ) { pSuperClass = &rSuperClass; } + +public: + + SvxContourDlg( SfxBindings *pBindings, SfxChildWindow *pCW, + Window* pParent, const ResId& rResId ); + ~SvxContourDlg(); + + const Graphic& GetGraphic() const; + sal_Bool IsGraphicChanged() const; + + PolyPolygon GetPolyPolygon(); + + const void* GetEditingObject() const; + + void Update( const Graphic& rGraphic, sal_Bool bGraphicLinked, + const PolyPolygon* pPolyPoly = NULL, void* pEditingObj = NULL ); + + static PolyPolygon CreateAutoContour( const Graphic& rGraphic, + const Rectangle* pRect = NULL, + const sal_uIntPtr nFlags = 0L ); +}; + +#endif // _REDUCED_CONTDLG_HXX_ +#endif // _CONTDLG_HXX_ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/ctredlin.hxx b/include/svx/ctredlin.hxx new file mode 100644 index 000000000000..c88b74238ae9 --- /dev/null +++ b/include/svx/ctredlin.hxx @@ -0,0 +1,391 @@ +/* -*- 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 _SVX_CTREDLIN_HXX +#define _SVX_CTREDLIN_HXX + +#include <vcl/morebtn.hxx> +#include <vcl/combobox.hxx> +#include <svtools/headbar.hxx> +#include <svtools/svtabbx.hxx> +#include "svtools/svlbitm.hxx" +#include <vcl/lstbox.hxx> +#include <vcl/tabpage.hxx> +#include <vcl/field.hxx> +#include <vcl/fixed.hxx> + +#ifndef _SVX_SIMPTABL +#include <svx/simptabl.hxx> +#endif +#include <vcl/tabctrl.hxx> +#include <tools/datetime.hxx> +#include <unotools/textsearch.hxx> +#include "svtools/treelistentry.hxx" +#include "svx/svxdllapi.h" + +#define FLT_DATE_BEFORE 0 +#define FLT_DATE_SINCE 1 +#define FLT_DATE_EQUAL 2 +#define FLT_DATE_NOTEQUAL 3 +#define FLT_DATE_BETWEEN 4 +#define FLT_DATE_SAVE 5 + + +// Struct for sorting data + +class SVX_DLLPUBLIC RedlinData +{ +public: + RedlinData(); + virtual ~RedlinData(); + sal_Bool bDisabled; + DateTime aDateTime; + void* pData; +}; + +class SvxRedlinEntry : public SvTreeListEntry +{ +public: + SvxRedlinEntry(); + virtual ~SvxRedlinEntry(); +}; + +// Class for the representation of Strings depending on the font +class SvLBoxColorString : public SvLBoxString +{ +private: + + Color aPrivColor; + +public: + SvLBoxColorString( SvTreeListEntry*,sal_uInt16 nFlags,const XubString& rStr, + const Color& rCol); + SvLBoxColorString(); + ~SvLBoxColorString(); + + virtual void Paint( + const Point& rPos, SvTreeListBox& rOutDev, const SvViewDataEntry* pView, const SvTreeListEntry* pEntry); + + SvLBoxItem* Create() const; +}; + +class SVX_DLLPUBLIC SvxRedlinTable : public SvxSimpleTable +{ + using SvTabListBox::InsertEntry; + +private: + + sal_Bool bIsCalc; + sal_uInt16 nDatePos; + sal_Bool bAuthor; + sal_Bool bDate; + sal_Bool bComment; + sal_uInt16 nDaTiMode; + DateTime aDaTiFirst; + DateTime aDaTiLast; + DateTime aDaTiFilterFirst; + DateTime aDaTiFilterLast; + String aAuthor; + Color aEntryColor; + String aCurEntry; + utl::TextSearch* pCommentSearcher; + Link aColCompareLink; + +protected: + + virtual StringCompare ColCompare(SvTreeListEntry*,SvTreeListEntry*); + virtual void InitEntry(SvTreeListEntry*, const OUString&, const Image&, const Image&, SvLBoxButtonKind); + + + +public: + + SvxRedlinTable(SvxSimpleTableContainer& rParent, WinBits nBits = WB_BORDER); + ~SvxRedlinTable(); + + // For FilterPage only { + void SetFilterDate(sal_Bool bFlag=sal_True); + void SetDateTimeMode(sal_uInt16 nMode); + void SetFirstDate(const Date&); + void SetLastDate(const Date&); + void SetFirstTime(const Time&); + void SetLastTime(const Time&); + void SetFilterAuthor(sal_Bool bFlag=sal_True); + void SetAuthor(const String &); + void SetFilterComment(sal_Bool bFlag=sal_True); + void SetCommentParams( const utl::SearchParam* pSearchPara ); + + void UpdateFilterTest(); + // } For FilterPage only + + void SetCalcView(sal_Bool bFlag=sal_True); + + // no NULL-pointer checking { + sal_Bool IsValidEntry(const String* pAuthor,const DateTime *pDateTime,const String* pComment); + sal_Bool IsValidEntry(const String* pAuthor,const DateTime *pDateTime); + sal_Bool IsValidComment(const String* pComment); + // } + + SvTreeListEntry* InsertEntry(const String& ,RedlinData *pUserData, + SvTreeListEntry* pParent=NULL,sal_uIntPtr nPos=LIST_APPEND); + + SvTreeListEntry* InsertEntry(const String& ,RedlinData *pUserData,const Color&, + SvTreeListEntry* pParent=NULL,sal_uIntPtr nPos=LIST_APPEND); + + + virtual SvTreeListEntry* CreateEntry() const; + + void SetColCompareHdl(const Link& rLink ) { aColCompareLink = rLink; } + const Link& GetColCompareHdl() const { return aColCompareLink; } + + +}; + +//================================================================== +// Filter- Tabpage +//================================================================== +class SVX_DLLPUBLIC SvxTPFilter: public TabPage +{ +private: + + Link aReadyLink; + Link aModifyLink; + Link aModifyDateLink; + Link aModifyAuthorLink; + Link aModifyRefLink; + Link aRefLink; + Link aModifyComLink; + + SvxRedlinTable* pRedlinTable; + CheckBox* m_pCbDate; + ListBox* m_pLbDate; + DateField* m_pDfDate; + TimeField* m_pTfDate; + PushButton* m_pIbClock; + FixedText* m_pFtDate2; + DateField* m_pDfDate2; + TimeField* m_pTfDate2; + PushButton* m_pIbClock2; + CheckBox* m_pCbAuthor; + ListBox* m_pLbAuthor; + CheckBox* m_pCbRange; + Edit* m_pEdRange; + PushButton* m_pBtnRange; + CheckBox* m_pCbAction; + ListBox* m_pLbAction; + CheckBox* m_pCbComment; + Edit* m_pEdComment; + sal_Bool bModified; + + DECL_LINK( SelDateHdl, ListBox* ); + DECL_LINK( RowEnableHdl, CheckBox* ); + DECL_LINK( TimeHdl, ImageButton* ); + DECL_LINK( ModifyHdl, void* ); + DECL_LINK( ModifyDate, void* ); + DECL_LINK( RefHandle, PushButton* ); + + +protected: + + void ShowDateFields(sal_uInt16 nKind); + void EnableDateLine1(sal_Bool bFlag); + void EnableDateLine2(sal_Bool bFlag); + +public: + SvxTPFilter( Window * pParent); + + virtual void DeactivatePage(); + void SetRedlinTable(SvxRedlinTable*); + + Date GetFirstDate() const; + void SetFirstDate(const Date &aDate); + Time GetFirstTime() const; + void SetFirstTime(const Time &aTime); + + Date GetLastDate() const; + void SetLastDate(const Date &aDate); + Time GetLastTime() const; + void SetLastTime(const Time &aTime); + + void SetDateMode(sal_uInt16 nMode); + sal_uInt16 GetDateMode(); + + void ClearAuthors(); + void InsertAuthor( const String& rString, sal_uInt16 nPos = LISTBOX_APPEND ); + String GetSelectedAuthor()const; + void SelectedAuthorPos(sal_uInt16 nPos); + sal_uInt16 SelectAuthor(const String& aString); + void SetComment(const String &rComment); + String GetComment()const; + + + // Methods for Calc { + void SetRange(const String& rString); + String GetRange() const; + void HideRange(sal_Bool bHide=sal_True); + void SetFocusToRange(); + // } Methods for Calc + + void DisableRef(sal_Bool bFlag); + + sal_Bool IsDate(); + sal_Bool IsAuthor(); + sal_Bool IsRange(); + sal_Bool IsAction(); + sal_Bool IsComment(); + + void ShowAction(sal_Bool bShow=sal_True); + + void CheckDate(sal_Bool bFlag=sal_True); + void CheckAuthor(sal_Bool bFlag=sal_True); + void CheckRange(sal_Bool bFlag=sal_True); + void CheckAction(sal_Bool bFlag=sal_True); + void CheckComment(sal_Bool bFlag=sal_True); + + ListBox* GetLbAction(); + + void SetReadyHdl( const Link& rLink ) { aReadyLink= rLink; } + const Link& GetReadyHdl() const { return aReadyLink; } + + void SetModifyHdl( const Link& rLink ) { aModifyLink = rLink; } + const Link& GetModifyHdl() const { return aModifyLink; } + + void SetModifyDateHdl( const Link& rLink ) { aModifyDateLink = rLink; } + const Link& GetModifyDateHdl() const { return aModifyDateLink; } + + void SetModifyAuthorHdl( const Link& rLink ) { aModifyAuthorLink = rLink; } + const Link& GetModifyAuthorHdl() const { return aModifyAuthorLink; } + + void SetModifyCommentHdl(const Link& rLink ) { aModifyComLink = rLink; } + const Link& GetModifyCommentHdl() const { return aModifyComLink; } + + + // Methods for Calc { + void SetModifyRangeHdl( const Link& rLink ) { aModifyRefLink = rLink; } + const Link& GetModifyRangeHdl() const { return aModifyRefLink; } + + void SetRefHdl( const Link& rLink ) { aRefLink = rLink; } + const Link& GetRefHdl() const { return aRefLink; } + + void Enable( bool bEnable = true, bool bChild = true ); + void Disable( bool bChild = true ); + + // } Methods for Calc +}; + + +//================================================================== +// View- Tabpage +//================================================================== + +class SVX_DLLPUBLIC SvxTPView: public TabPage +{ +private: + + Link AcceptClickLk; + Link AcceptAllClickLk; + Link RejectClickLk; + Link RejectAllClickLk; + Link UndoClickLk; + + SvxRedlinTable* m_pViewData; + PushButton* m_pAccept; + PushButton* m_pReject; + PushButton* m_pAcceptAll; + PushButton* m_pRejectAll; + PushButton* m_pUndo; + + DECL_LINK( PbClickHdl, PushButton* ); + +public: + SvxTPView(Window * pParent); + ~SvxTPView(); + + void InsertWriterHeader(); + void InsertCalcHeader(); + SvxRedlinTable* GetTableControl(); + + void EnableAccept(sal_Bool nFlag=sal_True); + void EnableAcceptAll(sal_Bool nFlag=sal_True); + void EnableReject(sal_Bool nFlag=sal_True); + void EnableRejectAll(sal_Bool nFlag=sal_True); + void EnableUndo(sal_Bool nFlag=sal_True); + + void DisableAccept() {EnableAccept(sal_False);} + void DisableAcceptAll() {EnableAcceptAll(sal_False);} + void DisableReject() {EnableReject(sal_False);} + void DisableRejectAll() {EnableRejectAll(sal_False);} + void DisableUndo() {EnableUndo(sal_False);} + + void ShowUndo(sal_Bool nFlag=sal_True); + void HideUndo() {ShowUndo(sal_False);} + sal_Bool IsUndoVisible(); + + void SetAcceptClickHdl( const Link& rLink ) { AcceptClickLk = rLink; } + const Link& GetAcceptClickHdl() const { return AcceptClickLk; } + + void SetAcceptAllClickHdl( const Link& rLink ) { AcceptAllClickLk = rLink; } + const Link& GetAcceptAllClickHdl() const { return AcceptAllClickLk; } + + void SetRejectClickHdl( const Link& rLink ) { RejectClickLk = rLink; } + const Link& GetRejectClickHdl() const { return RejectClickLk; } + + void SetRejectAllClickHdl( const Link& rLink ) { RejectAllClickLk = rLink; } + const Link& GetRejectAllClickHdl() const { return RejectAllClickLk; } + + void SetUndoClickHdl( const Link& rLink ) { UndoClickLk = rLink; } + const Link& GetUndoAllClickHdl() const { return UndoClickLk; } + + virtual void ActivatePage(); + virtual void DeactivatePage(); +}; + +//================================================================== +// Redlining - Control (Accept- Changes) +//================================================================== + +class SVX_DLLPUBLIC SvxAcceptChgCtr + : public TabControl + , public VclBuilderContainer +{ +private: + + SvxTPFilter* pTPFilter; + SvxTPView* pTPView; + + sal_uInt16 m_nViewPageId; + sal_uInt16 m_nFilterPageId; + +public: + SvxAcceptChgCtr(Window* pParent); + + ~SvxAcceptChgCtr(); + + void ShowFilterPage(); + void ShowViewPage(); + + SvxTPFilter* GetFilterPage(); + SvxTPView* GetViewPage(); + SvxRedlinTable* GetViewTable(); +}; + + +#endif // _SVX_CTREDLIN_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/cube3d.hxx b/include/svx/cube3d.hxx new file mode 100644 index 000000000000..5d65cc5ad8ea --- /dev/null +++ b/include/svx/cube3d.hxx @@ -0,0 +1,88 @@ +/* -*- 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 _E3D_CUBE3D_HXX +#define _E3D_CUBE3D_HXX + +#include <svx/obj3d.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* | +|* Create a 3D cuboid; aPos: Center oder left, bottom, behind |__ +|* (depending on bPosIsCenter) / +|* nSideFlags indicates, if only some of the cuboid surfaces can +|* be created; the corresponding bits are defined in the enum. +|* The flag bDblSided indicates whether the created surfaces are +|* two-sided (which only makes sense if not all of the surfaces were +|* created). +|* +\************************************************************************/ + +enum { CUBE_BOTTOM = 0x0001, CUBE_BACK = 0x0002, CUBE_LEFT = 0x0004, + CUBE_TOP = 0x0008, CUBE_RIGHT = 0x0010, CUBE_FRONT = 0x0020, + CUBE_FULL = 0x003F, CUBE_OPEN_TB = 0x0036, CUBE_OPEN_LR = 0x002B, + CUBE_OPEN_FB = 0x001D }; + +class SVX_DLLPUBLIC E3dCubeObj : public E3dCompoundObject +{ +private: + // Parameter + basegfx::B3DPoint aCubePos; + basegfx::B3DVector aCubeSize; + sal_uInt16 nSideFlags; + + // BOOLeans + unsigned bPosIsCenter : 1; + +protected: + void SetDefaultAttributes(E3dDefaultAttributes& rDefault); + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + +public: + TYPEINFO(); + E3dCubeObj(E3dDefaultAttributes& rDefault, basegfx::B3DPoint aPos, const basegfx::B3DVector& r3DSize); + E3dCubeObj(); + + virtual sal_uInt16 GetObjIdentifier() const; + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + + virtual E3dCubeObj* Clone() const; + + // Set local parameters with geometry recreation + void SetCubePos(const basegfx::B3DPoint& rNew); + const basegfx::B3DPoint& GetCubePos() { return aCubePos; } + + void SetCubeSize(const basegfx::B3DVector& rNew); + const basegfx::B3DVector& GetCubeSize() { return aCubeSize; } + + void SetPosIsCenter(sal_Bool bNew); + sal_Bool GetPosIsCenter() { return (sal_Bool)bPosIsCenter; } + + sal_uInt16 GetSideFlags() { return nSideFlags; } + + // TakeObjName...() is for the display in the UI, for example "3 frames selected". + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; +}; + +#endif // _E3D_CUBE3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/dataaccessdescriptor.hxx b/include/svx/dataaccessdescriptor.hxx new file mode 100644 index 000000000000..67ecb5165805 --- /dev/null +++ b/include/svx/dataaccessdescriptor.hxx @@ -0,0 +1,136 @@ +/* -*- 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 _SVX_DATACCESSDESCRIPTOR_HXX_ +#define _SVX_DATACCESSDESCRIPTOR_HXX_ + +#include <com/sun/star/beans/PropertyValue.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include "svx/svxdllapi.h" + +//........................................................................ +namespace svx +{ +//........................................................................ + + class ODADescriptorImpl; + + //==================================================================== + //= DataAccessDescriptorProperty + //==================================================================== + enum DataAccessDescriptorProperty + { + daDataSource, /// data source name (string) + daDatabaseLocation, /// database file URL (string) + daConnectionResource, /// database driver URL (string) + daConnection, /// connection (XConnection) + + daCommand, /// command (string) + daCommandType, /// command type (long) + daEscapeProcessing, /// escape processing (boolean) + daFilter, /// additional filter (string) + daCursor, /// the cursor (XResultSet) + + daColumnName, /// column name (string) + daColumnObject, /// column object (XPropertySet) + + daSelection, /// selection (sequence< any >) + daBookmarkSelection, /// selection are bookmarks? (boolean) + + daComponent /// component name (XContent) + }; + + //==================================================================== + //= ODataAccessDescriptor + //==================================================================== + /** class encapsulating the <type scope="com::sun::star::sdb">DataAccessDescriptor</type> service. + */ + class SVX_DLLPUBLIC ODataAccessDescriptor + { + protected: + ODADescriptorImpl* m_pImpl; + + public: + ODataAccessDescriptor(); + ODataAccessDescriptor( const ODataAccessDescriptor& _rSource ); + ODataAccessDescriptor( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rValues ); + ODataAccessDescriptor( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rValues ); + + // allows to construct a descriptor from an Any containing either an XPropertySet or a property value sequence + ODataAccessDescriptor( const ::com::sun::star::uno::Any& _rValues ); + + const ODataAccessDescriptor& operator=(const ODataAccessDescriptor& _rSource); + + ~ODataAccessDescriptor(); + + /** returns the descriptor as property value sequence + <p>If you call this method more than once, without writing any values between both calls, the same object + is returned. If you wrote values, a new object is returned.</p> + */ + ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > + createPropertyValueSequence(); + + /** initialized the descriptor from the property values given + <p>If <arg>_bClear</arg> is <TRUE/>, the descriptor will clear all it's current settings before + initializing with the new ones.</p> + */ + void initializeFrom( + const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rValues, + sal_Bool _bClear = sal_True); + + /// checks whether or not a given property is present in the descriptor + sal_Bool has(DataAccessDescriptorProperty _eWhich) const; + + /** erases the given property from the descriptor + */ + void erase(DataAccessDescriptorProperty _eWhich); + + /** empties the descriptor + */ + void clear(); + + /// return the value of a given property + const ::com::sun::star::uno::Any& operator [] ( DataAccessDescriptorProperty _eWhich ) const; + + /** return the (modifiable) value of a given property + <p>This operator is not allowed to be called if the descriptor is readonly.</p> + */ + ::com::sun::star::uno::Any& operator [] ( DataAccessDescriptorProperty _eWhich ); + + + /** returns either the data source name if given or the database location + */ + OUString getDataSource() const; + + + /** set the data source name, if it is not file URL + @param _sDataSourceNameOrLocation + the data source name or database location + */ + void setDataSource(const OUString& _sDataSourceNameOrLocation); + }; + +//........................................................................ +} // namespace svx +//........................................................................ + +#endif // _SVX_DATACCESSDESCRIPTOR_HXX_ + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/databaselocationinput.hxx b/include/svx/databaselocationinput.hxx new file mode 100644 index 000000000000..6acb2194a810 --- /dev/null +++ b/include/svx/databaselocationinput.hxx @@ -0,0 +1,88 @@ +/* -*- 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 SVX_DATABASELOCATIONINPUT_HXX +#define SVX_DATABASELOCATIONINPUT_HXX + +#include "svx/svxdllapi.h" + +class PushButton; +class String; +namespace svt { class OFileURLControl; } +namespace comphelper { class ComponentContext; } + +#include <memory> + +//........................................................................ +namespace svx +{ +//........................................................................ + + //==================================================================== + //= DatabaseLocationInputController + //==================================================================== + class DatabaseLocationInputController_Impl; + /** helper class to control controls needed to input a database location + + If you allow, in your dialog, to save a database document, then you usually + have a OFileURLControl for inputting the actual location, and a push button + to browse for a location. + + This helper class controls such two UI elements. + */ + class SVX_DLLPUBLIC DatabaseLocationInputController + { + public: + DatabaseLocationInputController( + const ::comphelper::ComponentContext& _rContext, + ::svt::OFileURLControl& _rLocationInput, + PushButton& _rBrowseButton + ); + ~DatabaseLocationInputController(); + + /** sets the given URL at the input control, after translating it into a system path + */ + void setURL( const String& _rURL ); + + /** returns the current database location, in form of an URL (not a system path) + */ + String getURL() const; + + /** prepares committing the database location entered in the input field + + Effectively, this method checks whether the file in the location already + exists, and if so, it asks the user whether to overwrite it. + + If the method is called multiple times, this check only happens when the location + changed since the last call. + */ + bool prepareCommit(); + + private: + ::std::auto_ptr< DatabaseLocationInputController_Impl > + m_pImpl; + }; + +//........................................................................ +} // namespace svx +//........................................................................ + +#endif // SVX_DATABASELOCATIONINPUT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/databaseregistrationui.hxx b/include/svx/databaseregistrationui.hxx new file mode 100644 index 000000000000..c3efaa524359 --- /dev/null +++ b/include/svx/databaseregistrationui.hxx @@ -0,0 +1,47 @@ +/* -*- 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 SVX_DATABASE_REGISTRATION_UI_HXX +#define SVX_DATABASE_REGISTRATION_UI_HXX + +#include "svx/svxdllapi.h" +#include <tools/solar.h> + +class Window; + +#define SID_SB_POOLING_ENABLED (RID_OFA_START + 247) +#define SID_SB_DRIVER_TIMEOUTS (RID_OFA_START + 248) +#define SID_SB_DB_REGISTER (RID_OFA_START + 249) + +//........................................................................ +namespace svx +{ +//........................................................................ + + /** opens a dialog which allows the user to administrate the database registrations + */ + sal_uInt16 SVX_DLLPUBLIC administrateDatabaseRegistration( Window* _parentWindow ); + +//........................................................................ +} // namespace svx +//........................................................................ + +#endif // SVX_DATABASE_REGISTRATION_UI_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/dbaexchange.hxx b/include/svx/dbaexchange.hxx new file mode 100644 index 000000000000..f4f40673d87b --- /dev/null +++ b/include/svx/dbaexchange.hxx @@ -0,0 +1,290 @@ +/* -*- 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 _SVX_DBAEXCHANGE_HXX_ +#define _SVX_DBAEXCHANGE_HXX_ + +#include <svtools/transfer.hxx> +#include <comphelper/stl_types.hxx> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/sdbc/XConnection.hpp> +#include <svx/dataaccessdescriptor.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include "svx/svxdllapi.h" + +//........................................................................ +namespace svx +{ +//........................................................................ + +// column transfer formats +#define CTF_FIELD_DESCRIPTOR 0x0001 // the field descriptor format +#define CTF_CONTROL_EXCHANGE 0x0002 // the control exchange format +#define CTF_COLUMN_DESCRIPTOR 0x0004 // data access descriptor for a column + + //==================================================================== + //= OColumnTransferable + //==================================================================== + class SVX_DLLPUBLIC OColumnTransferable : public TransferableHelper + { + protected: + ODataAccessDescriptor m_aDescriptor; + OUString m_sCompatibleFormat; + sal_Int32 m_nFormatFlags; + + public: + /** construct the transferable + */ + OColumnTransferable( + const OUString& _rDatasource + ,const OUString& _rConnectionResource + ,const sal_Int32 _nCommandType + ,const OUString& _rCommand + ,const OUString& _rFieldName + ,sal_Int32 _nFormats + ); + + /** construct the transferable from a data access descriptor + + Note that some of the aspects, in particular all which cannot be represented + as string, can only be transported via the CTF_COLUMN_DESCRIPTOR format. + + @param _rDescriptor + The descriptor for the column. It must contain at least + <ul><li>information sufficient to create a connection, that is, either one of DataSource, DatabaseLocation, + ConnectionResource, and daConnection</li> + <li>a Command</li> + <li>a CommandType</li> + <li>a ColumnName or ColumnObject</li> + </ul> + */ + OColumnTransferable( + const ODataAccessDescriptor& _rDescriptor, + sal_Int32 _nFormats + ); + + /** construct the transferable from a DatabaseForm component and a field name + + @param _rxForm + the form which is bound to the data source which's field is to be dragged + + @param _rFieldName + the name of the field to be dragged + + @param _rxColumn + the column object. Won't be used if <arg>_nFormats</arg> does not include the CTF_COLUMN_DESCRIPTOR + flag.<br/> + May be <NULL/>. + + @param _rxConnection + the connection the column belongs to. Won't be used if <arg>_nFormats</arg> does not include the CTF_COLUMN_DESCRIPTOR + flag.<br/> + May be <NULL/>. + + @param _nFormats + supported formats. Must be a combination of the CTF_XXX flags + */ + OColumnTransferable( + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxForm, + const OUString& _rFieldName, + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxColumn, + const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection, + sal_Int32 _nFormats + ); + + /** checks whether or not a column descriptor can be extracted from the data flavor vector given + @param _rFlavors + available flavors + @param _nFormats + formats to accept + */ + static sal_Bool canExtractColumnDescriptor(const DataFlavorExVector& _rFlavors, sal_Int32 _nFormats); + + /** extracts a column descriptor from the transferable given + */ + static sal_Bool extractColumnDescriptor( + const TransferableDataHelper& _rData + ,OUString& _rDatasource + ,OUString& _rDatabaseLocation + ,OUString& _rConnectionResource + ,sal_Int32& _nCommandType + ,OUString& _rCommand + ,OUString& _rFieldName + ); + + /** extracts a column descriptor from the transferable given + */ + static ODataAccessDescriptor + extractColumnDescriptor(const TransferableDataHelper& _rData); + + /** adds the data contained in the object to the given data container + <p>This method helps you treating this class as simple container class:<br/> + At the moment, it is a data container and a transferable. + Using <method>addDataToContainer</method>, you can treat the class as dumb data container, + doing the Drag'n'Drop with a <type>TransferDataContainer</type> instance (which may contain + additional formats)</p> + @TODO + split this class into a two separate classes: one for the data container aspect, one for + the transfer aspect + */ + void addDataToContainer( TransferDataContainer* _pContainer ); + + protected: + // TransferableHelper overridables + virtual void AddSupportedFormats(); + virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); + + static sal_uInt32 getDescriptorFormatId(); + + private: + SVX_DLLPRIVATE void implConstruct( + const OUString& _rDatasource + ,const OUString& _rConnectionResource + ,const sal_Int32 _nCommandType + ,const OUString& _rCommand + ,const OUString& _rFieldName + ); + }; + + //==================================================================== + //= ODataAccessObjectTransferable + //==================================================================== + /** class for transfering data access objects (tables, queries, statements ...) + */ + class SVX_DLLPUBLIC ODataAccessObjectTransferable : public TransferableHelper + { + ODataAccessDescriptor m_aDescriptor; + OUString m_sCompatibleObjectDescription; + // needed to provide a SOT_FORMATSTR_ID_SBA_DATAEXCHANGE format + + public: + /** should be used copying and the connection is needed. + @param _rDatasource + The data source name. + @param _nCommandType + The kind of command. @see com.sun.star.sdbc.CommandType + @param _rCommand + The command, either a name of a table or query or a SQL statement. + */ + ODataAccessObjectTransferable( + const OUString& _rDatasourceOrLocation + ,const OUString& _rConnectionResource + ,const sal_Int32 _nCommandType + ,const OUString& _rCommand + ,const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection + ); + + /** should be used when copying a query object and no connection is available. + @param _rDatasource + The data source name. + @param _nCommandType + The kind of command. @see com.sun.star.sdbc.CommandType + @param _rCommand + The command, either a name of a table or query or a SQL statement. + */ + ODataAccessObjectTransferable( + const OUString& _rDatasourceOrLocation + ,const OUString& _rConnectionResource + ,const sal_Int32 _nCommandType + ,const OUString& _rCommand + ); + + /** with this ctor, only the object descriptor format will be provided + */ + ODataAccessObjectTransferable( + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxLivingForm + ); + + /** checks whether or not an object descriptor can be extracted from the data flavor vector given + @param _rFlavors + available flavors + @param _nFormats + formats to accept + */ + static sal_Bool canExtractObjectDescriptor(const DataFlavorExVector& _rFlavors); + + /** extracts a object descriptor from the transferable given + */ + static ODataAccessDescriptor + extractObjectDescriptor(const TransferableDataHelper& _rData); + + protected: + virtual void AddSupportedFormats(); + virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); + virtual void ObjectReleased(); + + protected: + const ODataAccessDescriptor& getDescriptor() const { return m_aDescriptor; } + ODataAccessDescriptor& getDescriptor() { return m_aDescriptor; } + protected: + void addCompatibleSelectionDescription( + const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& _rSelRows + ); + // normally, a derived class could simply access getDescriptor[daSelection] and place the sequence therein + // but unfortunately, we have this damned compatible format, and this can't be accessed in + // derived classes (our class is the only one which should be contaminated with this) + + private: + SVX_DLLPRIVATE void construct( const OUString& _rDatasourceOrLocation + ,const OUString& _rConnectionResource + ,const sal_Int32 _nCommandType + ,const OUString& _rCommand + ,const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection + ,sal_Bool _bAddCommand + ,const OUString& _sActiveCommand); + }; + + //==================================================================== + //= OMultiColumnTransferable + //==================================================================== + /** class for transfering multiple columns + */ + class SVX_DLLPUBLIC OMultiColumnTransferable : public TransferableHelper + { + ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > m_aDescriptors; + + public: + OMultiColumnTransferable(const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _aDescriptors); + + /** checks whether or not an object descriptor can be extracted from the data flavor vector given + @param _rFlavors + available flavors + @param _nFormats + formats to accept + */ + static sal_Bool canExtractDescriptor(const DataFlavorExVector& _rFlavors); + + /** extracts a object descriptor from the transferable given + */ + static ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > extractDescriptor(const TransferableDataHelper& _rData); + + protected: + virtual void AddSupportedFormats(); + virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); + virtual void ObjectReleased(); + static sal_uInt32 getDescriptorFormatId(); + }; + +//........................................................................ +} // namespace svx +//........................................................................ + +#endif // _SVX_DBAEXCHANGE_HXX_ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/dbaobjectex.hxx b/include/svx/dbaobjectex.hxx new file mode 100644 index 000000000000..9be3bfbf0da2 --- /dev/null +++ b/include/svx/dbaobjectex.hxx @@ -0,0 +1,78 @@ +/* -*- 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 SVX_DBAOBJECTEX_HXX +#define SVX_DBAOBJECTEX_HXX + +#include <svtools/transfer.hxx> +#include <comphelper/stl_types.hxx> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/sdbc/XConnection.hpp> +#include <com/sun/star/ucb/XContent.hpp> +#include <svx/dataaccessdescriptor.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include "svx/svxdllapi.h" + +//........................................................................ +namespace svx +{ +//........................................................................ + + //==================================================================== + //= OComponentTransferable + //==================================================================== + class SVX_DLLPUBLIC OComponentTransferable : public TransferableHelper + { + protected: + ODataAccessDescriptor m_aDescriptor; + + public: + /** construct the transferable + */ + OComponentTransferable( + const OUString& _rDatasourceOrLocation + ,const ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XContent>& _xContent + ); + + /** checks whether or not a component descriptor can be extracted from the data flavor vector given + @param _rFlavors + available flavors + */ + static sal_Bool canExtractComponentDescriptor(const DataFlavorExVector& _rFlavors,sal_Bool _bForm ); + + /** extracts a component descriptor from the transferable given + */ + static ODataAccessDescriptor + extractComponentDescriptor(const TransferableDataHelper& _rData); + + protected: + // TransferableHelper overridables + virtual void AddSupportedFormats(); + virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); + + static sal_uInt32 getDescriptorFormatId(sal_Bool _bExtractForm); + }; + +//........................................................................ +} // namespace svx +//........................................................................ + +#endif // SVX_DBAOBJECTEX_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/dbcharsethelper.hxx b/include/svx/dbcharsethelper.hxx new file mode 100644 index 000000000000..318d35a54f69 --- /dev/null +++ b/include/svx/dbcharsethelper.hxx @@ -0,0 +1,59 @@ +/* -*- 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 SVX_DBCHARSETHELPER_HXX +#define SVX_DBCHARSETHELPER_HXX +#include "svx/svxdllapi.h" +#include "svx/dbtoolsclient.hxx" + +//........................................................................ +namespace svxform +{ +//........................................................................ + + //==================================================================== + //= ODataAccessCharsetHelper + //==================================================================== + class SVX_DLLPUBLIC ODataAccessCharsetHelper : public ODbtoolsClient + { + protected: + mutable ::rtl::Reference< ::connectivity::simple::IDataAccessCharSet > m_xCharsetHelper; + + protected: + virtual bool ensureLoaded() const; + + public: + ODataAccessCharsetHelper( ); + + inline sal_Int32 getSupportedTextEncodings( ::std::vector< rtl_TextEncoding >& _rEncs ) const + { + if ( ensureLoaded() ) + return m_xCharsetHelper->getSupportedTextEncodings( _rEncs ); + return 0; + } + }; + +//........................................................................ +} // namespace svxform +//........................................................................ + +#endif // SVX_DBCHARSETCLIENT_HXX + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/dbtoolsclient.hxx b/include/svx/dbtoolsclient.hxx new file mode 100644 index 000000000000..c1afd4690509 --- /dev/null +++ b/include/svx/dbtoolsclient.hxx @@ -0,0 +1,204 @@ +/* -*- 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 SVX_DBTOOLSCLIENT_HXX +#define SVX_DBTOOLSCLIENT_HXX + +#include <connectivity/virtualdbtools.hxx> +#include <osl/mutex.hxx> +#include <osl/module.h> +#include <tools/solar.h> +#include <unotools/sharedunocomponent.hxx> +#include "svx/svxdllapi.h" + +//........................................................................ +namespace svxform +{ +//........................................................................ + + typedef ::utl::SharedUNOComponent< ::com::sun::star::sdbc::XConnection > SharedConnection; + + //==================================================================== + //= ODbtoolsClient + //==================================================================== + /** base class for classes which want to use dbtools features with load-on-call + of the dbtools lib. + */ + class SVX_DLLPUBLIC ODbtoolsClient + { + private: + static sal_Int32 s_nClients; + static oslModule s_hDbtoolsModule; + static ::connectivity::simple::createDataAccessToolsFactoryFunction + s_pFactoryCreationFunc; + + mutable sal_Bool m_bCreateAlready; + + private: + mutable ::rtl::Reference< ::connectivity::simple::IDataAccessToolsFactory > m_xDataAccessFactory; + + protected: + ODbtoolsClient(); + virtual ~ODbtoolsClient(); + + virtual bool ensureLoaded() const; + + protected: + const ::rtl::Reference< ::connectivity::simple::IDataAccessToolsFactory >& + getFactory() const { return m_xDataAccessFactory; } + + private: + static void registerClient(); + static void revokeClient(); + }; + + //==================================================================== + //= OStaticDataAccessTools + //==================================================================== + class SVX_DLLPUBLIC OStaticDataAccessTools : public ODbtoolsClient + { + protected: + mutable ::rtl::Reference< ::connectivity::simple::IDataAccessTools > m_xDataAccessTools; + + protected: + virtual bool ensureLoaded() const; + + public: + OStaticDataAccessTools(); + + const ::rtl::Reference< ::connectivity::simple::IDataAccessTools >& getDataAccessTools() const { return m_xDataAccessTools; } + + // ------------------------------------------------ + ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier> getNumberFormats( + const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& _rxConn, + sal_Bool _bAllowDefault + ) const; + + // ------------------------------------------------ + sal_Int32 getDefaultNumberFormat( + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _xColumn, + const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatTypes >& _xTypes, + const ::com::sun::star::lang::Locale& _rLocale ); + + // ------------------------------------------------ + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection> getConnection_withFeedback( + const OUString& _rDataSourceName, + const OUString& _rUser, + const OUString& _rPwd, + const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext>& _rxContext + ) const SAL_THROW ( (::com::sun::star::sdbc::SQLException) ); + + // ------------------------------------------------ + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection> connectRowset( + const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& _rxRowSet, + const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext>& _rxContext, + sal_Bool _bSetAsActiveConnection + ) const SAL_THROW ( ( ::com::sun::star::sdbc::SQLException + , ::com::sun::star::lang::WrappedTargetException + , ::com::sun::star::uno::RuntimeException) ); + + // ------------------------------------------------ + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection> getRowSetConnection( + const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& _rxRowSet) + const SAL_THROW ( (::com::sun::star::uno::RuntimeException) ); + + // ------------------------------------------------ + void TransferFormComponentProperties( + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxOld, + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxNew, + const ::com::sun::star::lang::Locale& _rLocale + ) const; + + // ------------------------------------------------ + OUString quoteName( + const OUString& _rQuote, + const OUString& _rName + ) const; + + // ------------------------------------------------ + OUString composeTableNameForSelect( + const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection, + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xTable + ) const; + + // ------------------------------------------------ + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDataSource > getDataSource( + const OUString& _rsRegisteredName, + const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext>& _rxContext + ) const; + + // ------------------------------------------------ + /** check if the property "Privileges" supports ::com::sun::star::sdbcx::Privilege::INSERT + @param _rxCursorSet the property set + */ + sal_Bool canInsert(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxCursorSet) const; + + // ------------------------------------------------ + /** check if the property "Privileges" supports ::com::sun::star::sdbcx::Privilege::UPDATE + @param _rxCursorSet the property set + */ + sal_Bool canUpdate(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _rxCursorSet) const; + + // ------------------------------------------------ + ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > + getFieldsByCommandDescriptor( + const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxConnection, + const sal_Int32 _nCommandType, + const OUString& _rCommand, + ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& _rxKeepFieldsAlive, + ::dbtools::SQLExceptionInfo* _pErrorInfo = NULL + ) SAL_THROW( ( ) ); + + // ------------------------------------------------ + bool isEmbeddedInDatabase( + const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxComponent, + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection >& _rxActualConnection + ); + + // ------------------------------------------------ + bool isEmbeddedInDatabase( + const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxComponent + ); + }; + + //==================================================================== + //= DBToolsObjectFactory + //==================================================================== + class SVX_DLLPUBLIC DBToolsObjectFactory : public ODbtoolsClient + { + public: + DBToolsObjectFactory(); + ~DBToolsObjectFactory(); + + // ------------------------------------------------ + ::std::auto_ptr< ::dbtools::FormattedColumnValue > createFormattedColumnValue( + const ::comphelper::ComponentContext& _rContext, + const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& _rxRowSet, + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxColumn + ); + }; + +//........................................................................ +} // namespace svxform +//........................................................................ + +#endif // SVX_DBTOOLSCLIENT_HXX + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/def3d.hxx b/include/svx/def3d.hxx new file mode 100644 index 000000000000..565f396a6d3b --- /dev/null +++ b/include/svx/def3d.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SVX_DEF3D_HXX +#define _SVX_DEF3D_HXX + +#ifndef _INC_MATH +#include <math.h> +#endif +#include <tools/solar.h> + +const double fPiDiv180 = 0.01745329251994; +const double EPSILON = 1e-06; + +#define DEG2RAD(fAngle) (fPiDiv180 * (fAngle)) + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +//+++ 3D helper functions ++++++++++++++++++++++++++++++++++++++++++++++++ +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +enum E3dDragConstraint { E3DDRAG_CONSTR_X = 0x0001, + E3DDRAG_CONSTR_Y = 0x0002, + E3DDRAG_CONSTR_Z = 0x0004, + E3DDRAG_CONSTR_XY = 0x0003, + E3DDRAG_CONSTR_XZ = 0x0005, + E3DDRAG_CONSTR_YZ = 0x0006, + E3DDRAG_CONSTR_XYZ = 0x0007 +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/deflt3d.hxx b/include/svx/deflt3d.hxx new file mode 100644 index 000000000000..a5db1345fc05 --- /dev/null +++ b/include/svx/deflt3d.hxx @@ -0,0 +1,129 @@ +/* -*- 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 _E3D_DEFLT3D_HXX +#define _E3D_DEFLT3D_HXX + +#include <basegfx/point/b3dpoint.hxx> +#include <basegfx/vector/b3dvector.hxx> +#include "svx/svxdllapi.h" +#include <tools/color.hxx> + +/************************************************************************* +|* +|* Class for managing the 3D default attributes +|* +\************************************************************************/ + +class SVX_DLLPUBLIC E3dDefaultAttributes +{ +private: + // Compound object + Color aDefaultAmbientColor; + sal_Bool bDefaultCreateNormals; + sal_Bool bDefaultCreateTexture; + + // Cube object + basegfx::B3DPoint aDefaultCubePos; + basegfx::B3DVector aDefaultCubeSize; + sal_uInt16 nDefaultCubeSideFlags; + sal_Bool bDefaultCubePosIsCenter; + + // Sphere object + basegfx::B3DPoint aDefaultSphereCenter; + basegfx::B3DVector aDefaultSphereSize; + + // Lathe object + long nDefaultLatheEndAngle; + sal_Bool bDefaultLatheSmoothed; + sal_Bool bDefaultLatheSmoothFrontBack; + sal_Bool bDefaultLatheCharacterMode; + sal_Bool bDefaultLatheCloseFront; + sal_Bool bDefaultLatheCloseBack; + + // Extrude object + sal_Bool bDefaultExtrudeSmoothed; + sal_Bool bDefaultExtrudeSmoothFrontBack; + sal_Bool bDefaultExtrudeCharacterMode; + sal_Bool bDefaultExtrudeCloseFront; + sal_Bool bDefaultExtrudeCloseBack; + +public: + // Construktor + E3dDefaultAttributes(); + + // Reset to defaults + void Reset(); + + // Getter/Setter for default values of all 3D objects + // Compound object + const Color& GetDefaultAmbientColor() { return aDefaultAmbientColor; } + void SetDefaultAmbientColor(const Color& rNew) { aDefaultAmbientColor = rNew; } + + sal_Bool GetDefaultCreateNormals() const { return bDefaultCreateNormals; } + void SetDefaultCreateNormals(const sal_Bool bNew) { bDefaultCreateNormals = bNew; } + sal_Bool GetDefaultCreateTexture() const { return bDefaultCreateTexture; } + void SetDefaultCreateTexture(const sal_Bool bNew) { bDefaultCreateTexture = bNew; } + + // Cube object + const basegfx::B3DPoint& GetDefaultCubePos() { return aDefaultCubePos; } + void SetDefaultCubePos(const basegfx::B3DPoint& rNew) { aDefaultCubePos = rNew; } + const basegfx::B3DVector& GetDefaultCubeSize() { return aDefaultCubeSize; } + void SetDefaultCubeSize(const basegfx::B3DVector& rNew) { aDefaultCubeSize = rNew; } + sal_uInt16 GetDefaultCubeSideFlags() const { return nDefaultCubeSideFlags; } + void SetDefaultCubeSideFlags(const sal_uInt16 nNew) { nDefaultCubeSideFlags = nNew; } + sal_Bool GetDefaultCubePosIsCenter() const { return bDefaultCubePosIsCenter; } + void SetDefaultCubePosIsCenter(const sal_Bool bNew) { bDefaultCubePosIsCenter = bNew; } + + // Sphere object + const basegfx::B3DPoint& GetDefaultSphereCenter() { return aDefaultSphereCenter; } + void SetDefaultSphereCenter(const basegfx::B3DPoint& rNew) { aDefaultSphereCenter = rNew; } + const basegfx::B3DVector& GetDefaultSphereSize() { return aDefaultSphereSize; } + void SetDefaultSphereSize(const basegfx::B3DPoint& rNew) { aDefaultSphereSize = rNew; } + + // Lathe object + long GetDefaultLatheEndAngle() const { return nDefaultLatheEndAngle; } + void SetDefaultLatheEndAngle(const long nNew) { nDefaultLatheEndAngle = nNew; } + sal_Bool GetDefaultLatheSmoothed() const { return bDefaultLatheSmoothed; } + void SetDefaultLatheSmoothed(const sal_Bool bNew) { bDefaultLatheSmoothed = bNew; } + sal_Bool GetDefaultLatheSmoothFrontBack() const { return bDefaultLatheSmoothFrontBack; } + void SetDefaultLatheSmoothFrontBack(const sal_Bool bNew) { bDefaultLatheSmoothFrontBack = bNew; } + sal_Bool GetDefaultLatheCharacterMode() const { return bDefaultLatheCharacterMode; } + void SetDefaultLatheCharacterMode(const sal_Bool bNew) { bDefaultLatheCharacterMode = bNew; } + sal_Bool GetDefaultLatheCloseFront() const { return bDefaultLatheCloseFront; } + void SetDefaultLatheCloseFront(const sal_Bool bNew) { bDefaultLatheCloseFront = bNew; } + sal_Bool GetDefaultLatheCloseBack() const { return bDefaultLatheCloseBack; } + void SetDefaultLatheCloseBack(const sal_Bool bNew) { bDefaultLatheCloseBack = bNew; } + + // Extrude object + sal_Bool GetDefaultExtrudeSmoothed() const { return bDefaultExtrudeSmoothed; } + void SetDefaultExtrudeSmoothed(const sal_Bool bNew) { bDefaultExtrudeSmoothed = bNew; } + sal_Bool GetDefaultExtrudeSmoothFrontBack() const { return bDefaultExtrudeSmoothFrontBack; } + void SetDefaultExtrudeSmoothFrontBack(const sal_Bool bNew) { bDefaultExtrudeSmoothFrontBack = bNew; } + sal_Bool GetDefaultExtrudeCharacterMode() const { return bDefaultExtrudeCharacterMode; } + void SetDefaultExtrudeCharacterMode(const sal_Bool bNew) { bDefaultExtrudeCharacterMode = bNew; } + sal_Bool GetDefaultExtrudeCloseFront() const { return bDefaultExtrudeCloseFront; } + void SetDefaultExtrudeCloseFront(const sal_Bool bNew) { bDefaultExtrudeCloseFront = bNew; } + sal_Bool GetDefaultExtrudeCloseBack() const { return bDefaultExtrudeCloseBack; } + void SetDefaultExtrudeCloseBack(const sal_Bool bNew) { bDefaultExtrudeCloseBack = bNew; } +}; + +#endif // _E3D_DEFLT3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/dialcontrol.hxx b/include/svx/dialcontrol.hxx new file mode 100644 index 000000000000..fbb4d271679d --- /dev/null +++ b/include/svx/dialcontrol.hxx @@ -0,0 +1,140 @@ +/* -*- 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 SVX_DIALCONTROL_HXX +#define SVX_DIALCONTROL_HXX + +#include <memory> +#include <vcl/ctrl.hxx> +#include <sfx2/itemconnect.hxx> +#include "svx/svxdllapi.h" + +class NumericField; + +namespace svx { + +// ============================================================================ + +struct DialControl_Impl; + +/** This control allows to input a rotation angle, visualized by a dial. + + Usage: A single click sets a rotation angle rounded to steps of 15 degrees. + Dragging with the left mouse button sets an exact rotation angle. Pressing + the ESCAPE key during mouse drag cancels the operation and restores the old + state of the control. + + It is possible to link a numeric field to this control using the function + SetLinkedField(). The DialControl will take full control of this numeric + field: + - Sets the rotation angle to the numeric field in mouse operations. + - Shows the value entered/modified in the numeric field. + - Enables/disables/shows/hides the field according to own state changes. + */ +class SVX_DLLPUBLIC DialControl : public Control +{ +public: + explicit DialControl( Window* pParent, const ResId& rResId ); + explicit DialControl( Window* pParent, WinBits nBits ); + + virtual ~DialControl(); + + virtual void Paint( const Rectangle& rRect ); + + virtual void StateChanged( StateChangedType nStateChange ); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void MouseMove( const MouseEvent& rMEvt ); + virtual void MouseButtonUp( const MouseEvent& rMEvt ); + virtual void KeyInput( const KeyEvent& rKEvt ); + virtual void LoseFocus(); + + virtual Size GetOptimalSize() const; + virtual void Resize(); + + /** Returns true, if the control is not in "don't care" state. */ + bool HasRotation() const; + /** Sets the control to "don't care" state. */ + void SetNoRotation(); + + /** Returns the current rotation angle in 1/100 degrees. */ + sal_Int32 GetRotation() const; + /** Sets the rotation to the passed value (in 1/100 degrees). */ + void SetRotation( sal_Int32 nAngle ); + + /** Links the passed numeric edit field to the control (bi-directional). */ + void SetLinkedField( NumericField* pField ); + /** Returns the linked numeric edit field, or 0. */ + NumericField* GetLinkedField() const; + + /** The passed handler is called whenever the totation value changes. */ + void SetModifyHdl( const Link& rLink ); + /** Returns the current modify handler. */ + const Link& GetModifyHdl() const; + + /** Save value for later comparison */ + void SaveValue(); + + /** Compare value with the saved value */ + bool IsValueModified(); + +private: + void Init( const Size& rWinSize, const Font& rWinFont ); + void Init( const Size& rWinSize ); + void InvalidateControl(); + + void ImplSetRotation( sal_Int32 nAngle, bool bBroadcast ); + void ImplSetFieldLink( const Link& rLink ); + + void HandleMouseEvent( const Point& rPos, bool bInitial ); + void HandleEscapeEvent(); + + DECL_LINK( LinkedFieldModifyHdl, NumericField* ); + + std::auto_ptr< DialControl_Impl > mpImpl; +}; + +// ============================================================================ + +/** Wrapper for usage of a DialControl in item connections. */ +class SVX_DLLPUBLIC DialControlWrapper : public sfx::SingleControlWrapper< DialControl, sal_Int32 > +{ +public: + explicit DialControlWrapper( DialControl& rDial ); + + virtual bool IsControlDontKnow() const; + virtual void SetControlDontKnow( bool bSet ); + + virtual sal_Int32 GetControlValue() const; + virtual void SetControlValue( sal_Int32 nValue ); +}; + +// ---------------------------------------------------------------------------- + +/** An item<->control connection for a DialControl. */ +typedef sfx::ItemControlConnection< sfx::Int32ItemWrapper, DialControlWrapper > DialControlConnection; + +// ============================================================================ + +} // namespace svx + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/dialmgr.hxx b/include/svx/dialmgr.hxx new file mode 100644 index 000000000000..ba2941da2298 --- /dev/null +++ b/include/svx/dialmgr.hxx @@ -0,0 +1,39 @@ +/* -*- 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 _SVX_DIALMGR_HXX +#define _SVX_DIALMGR_HXX + +#include <tools/resid.hxx> +#include "svx/svxdllapi.h" + +// forward --------------------------------------------------------------- + +class ResMgr; +struct SVX_DLLPUBLIC DialogsResMgr +{ + static ResMgr* GetResMgr(); +}; + +#define DIALOG_MGR() (*DialogsResMgr::GetResMgr()) +#define SVX_RES(i) ResId(i,DIALOG_MGR()) +#define SVX_RESSTR(i) SVX_RES(i).toString() + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/dialogs.hrc b/include/svx/dialogs.hrc new file mode 100644 index 000000000000..d41157c46877 --- /dev/null +++ b/include/svx/dialogs.hrc @@ -0,0 +1,1031 @@ +/* -*- 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 _SVX_DIALOGS_HRC +#define _SVX_DIALOGS_HRC + +#include <svx/svxids.hrc> +#include <sfx2/dialogs.hrc> + +// Resource-Id's ------------------------------------------------------------ + +// Please maintain FIRSTFREE (does not apply to strings) +#define RID_SVX_FIRSTFREE 314 + +// some strings also used in CUI +#define RID_SVXERRCTX (RID_SVX_START + 351) +#define RID_SVXSTR_COLOR (RID_SVX_START + 179) +#define RID_SVXSTR_TRANSPARENT (RID_SVX_START + 190) +#define RID_SVXSTR_AUTOMATIC (RID_SVX_START + 841) +#define RID_SVXSTR_INVISIBLE (RID_SVX_START + 178) +#define RID_SVXSTR_NONE (RID_SVX_START + 183) +#define RID_SVXSTR_SOLID (RID_SVX_START + 160) +#define RID_SVXSTR_LINEEND (RID_SVX_START + 237) +#define RID_SVXSTR_GRADIENT (RID_SVX_START + 161) +#define RID_SVXSTR_HATCH (RID_SVX_START + 180) +#define RID_SVXSTR_BITMAP (RID_SVX_START + 167) +#define RID_SVXSTR_LINESTYLE (RID_SVX_START + 173) +#define RID_SVXSTR_FIELDUNIT_TABLE (RID_SVX_START + 311) +#define RID_SVXSTR_COLOR_USER (RID_SVX_START + 250) +#define RID_SVXSTR_GALLERYPROPS_GALTHEME (RID_SVX_START + 251) +#define RID_SVXSTR_GALLERY_THEMEITEMS (RID_SVX_START + 252) +#define RID_SVXSTR_GALLERY_THEMENAME (RID_SVX_START + 253) +#define RID_SVXSTR_GALLERY_FILESFOUND (RID_SVX_START + 254) +#define RID_SVXSTR_GALLERY_PREVIEW (RID_SVX_START + 255) + +// factory IDs of tabpages implemented in CUI +#define RID_SVXPAGE_CHAR_TWOLINES (RID_SVX_START + 242) +#define RID_SVXPAGE_EXT_PARAGRAPH (RID_SVX_START + 7) +#define RID_SVXPAGE_GRFCROP (RID_SVX_START + 238) +#define RID_SVXPAGE_CHAR_NAME (RID_SVX_START + 239) +#define RID_SVXPAGE_CHAR_EFFECTS (RID_SVX_START + 240) +#define RID_SVXPAGE_CHAR_POSITION (RID_SVX_START + 241) +#define RID_SVXPAGE_STD_PARAGRAPH (RID_SVX_START + 6) +#define RID_SVXPAGE_ALIGN_PARAGRAPH (RID_SVX_START + 187) +#define RID_SVXPAGE_PARA_ASIAN (RID_SVX_START + 245) +#define RID_SVXPAGE_TABULATOR (RID_SVX_START + 2) +#define RID_SFXPAGE_DBREGISTER (RID_OFA_START + 123) +#define RID_SVXPAGE_NUMBERFORMAT (RID_SVX_START + 41) +#define RID_SVXPAGE_ALIGNMENT (RID_SVX_START + 90) +#define RID_SVXPAGE_BORDER (RID_SVX_START + 5) +#define RID_SVXPAGE_BACKGROUND (RID_SVX_START + 1) +#define RID_SVXPAGE_PAGE (RID_SVX_START + 25) +#define RID_SVXPAGE_LINE (RID_SVX_START + 51) +#define RID_SVXPAGE_AREA (RID_SVX_START + 56) +#define RID_SVXPAGE_SHADOW (RID_SVX_START + 61) +#define RID_SVXPAGE_TRANSPARENCE (RID_SVX_START + 54) +#define RID_SVXPAGE_TEXTATTR (RID_SVX_START + 153) +#define RID_SVXPAGE_TEXTANIMATION (RID_SVX_START + 184) +#define RID_SVXPAGE_MEASURE (RID_SVX_START + 161) +#define RID_SVXPAGE_CONNECTION (RID_SVX_START + 191) +#define RID_SVXPAGE_LINE_DEF (RID_SVX_START + 52) +#define RID_SVXPAGE_LINEEND_DEF (RID_SVX_START + 53) +#define RID_SVXPAGE_NUM_OPTIONS (RID_SVX_START + 219) +#define RID_SVXPAGE_NUM_POSITION (RID_SVX_START + 220) +#define RID_SVXPAGE_PICK_SINGLE_NUM (RID_SVX_START + 215) +#define RID_SVXPAGE_PICK_BULLET (RID_SVX_START + 216) +#define RID_SVXPAGE_PICK_NUM (RID_SVX_START + 217) +#define RID_SVXPAGE_PICK_BMP (RID_SVX_START + 218) +#define RID_SVXPAGE_CAPTION (RID_SVX_START + 150) +#define RID_SVXPAGE_SWPOSSIZE (RID_SVX_START + 288) +#define RID_SVXPAGE_POSITION_SIZE (RID_SVX_START + 87) +#define RID_SVXPAGE_EVENTASSIGN (RID_SVX_START + 303) +#define RID_SVXPAGE_HATCH (RID_SVX_START + 57) +#define RID_SVXPAGE_BITMAP (RID_SVX_START + 58) +#define RID_SVXPAGE_GRADIENT (RID_SVX_START + 59) +#define RID_SVXPAGE_ANGLE (RID_SVX_START + 48) +#define RID_SVXPAGE_SLANT (RID_SVX_START + 49) +#define RID_SVXPAGE_DISTRIBUTE (RID_SVX_START + 236) +#define RID_SVXPAGE_MACROASSIGN (RID_SVX_START + 296) + + +// why extra defines for pages that already exist? +#define RID_SCH_TransformTabDLG_SVXPAGE_ANGLE (RID_SVX_START + 998) +#define RID_SCH_TransformTabDLG_SVXPAGE_SLANT (RID_SVX_START + 999) + +// ID of tabpages implemented in SVX, but used in CUI +#define RID_SVXPAGE_GRID (RID_SVX_START + 152) + +// factory IDs of dialogs implemented in CUI +#define RID_SVX_GRFFILTER_DLG_SEPIA (RID_SVX_START + 334) +#define RID_SVX_GRFFILTER_DLG_POSTER (RID_SVX_START + 335) +#define RID_SVX_GRFFILTER_DLG_MOSAIC (RID_SVX_START + 332) +#define RID_SVX_GRFFILTER_DLG_SOLARIZE (RID_SVX_START + 333) +#define RID_SVX_GRFFILTER_DLG_EMBOSS (RID_SVX_START + 336) +#define RID_SVX_GRFFILTER_DLG_SMOOTH (RID_SVX_START + 337) +#define RID_SVXDLG_SEARCHFORMAT (RID_SVX_START + 21) +#define RID_SVXDLG_CHARMAP ( RID_SVX_START + 10 ) + +// IDs of options pages of applications +#define RID_SW_TP_MAILCONFIG (RID_OFA_START + 102) +#define RID_SW_TP_STD_FONT_CJK (RID_OFA_START + 247) +#define RID_SW_TP_STD_FONT_CTL (RID_OFA_START + 251) +#define RID_SW_TP_OPTLOAD_PAGE (RID_OFA_START + 214) +#define RID_SW_TP_CONTENT_OPT (RID_OFA_START + 206) +#define RID_SW_TP_OPTSHDWCRSR (RID_OFA_START + 211) +#define RID_SW_TP_STD_FONT (RID_OFA_START + 208) +#define RID_SW_TP_OPTPRINT_PAGE (RID_OFA_START + 209) +#define RID_SW_TP_OPTTABLE_PAGE (RID_OFA_START + 210) +#define RID_SW_TP_REDLINE_OPT (RID_OFA_START + 212) +#define RID_SW_TP_OPTCOMPATIBILITY_PAGE (RID_OFA_START + 255) +#define RID_SW_TP_COMPARISON_OPT (RID_OFA_START + 257) +#define RID_SW_TP_HTML_CONTENT_OPT (RID_OFA_START + 240) +#define RID_SW_TP_HTML_OPTPRINT_PAGE (RID_OFA_START + 242) +#define RID_SW_TP_HTML_OPTTABLE_PAGE (RID_OFA_START + 243) +#define RID_SW_TP_HTML_OPTGRID_PAGE (RID_OFA_START + 244) +#define RID_SW_TP_HTML_OPTSHDWCRSR (RID_OFA_START + 246) +#define RID_SW_TP_BACKGROUND (RID_OFA_START + 217) +#define RID_SW_TP_OPTCAPTION_PAGE (RID_OFA_START + 256) +#define SID_SC_TP_LAYOUT (RID_OFA_START + 218) +#define SID_SC_TP_CONTENT (RID_OFA_START + 219) +#define SID_SC_TP_INPUT (RID_OFA_START + 220) +#define SID_SC_TP_GRID (RID_OFA_START + 221) +#define SID_SC_TP_USERLISTS (RID_OFA_START + 222) +#define SID_SC_TP_CALC (RID_OFA_START + 223) +#define SID_SC_TP_CHANGES (RID_OFA_START + 224) +#define RID_SC_TP_PRINT (RID_OFA_START + 248) +#define SID_SI_TP_PRINT (RID_OFA_START + 236) +#define SID_SI_TP_CONTENTS (RID_OFA_START + 232) +#define SID_SI_TP_SNAP (RID_OFA_START + 234) +#define SID_SI_TP_MISC (RID_OFA_START + 237) +#define SID_SD_TP_PRINT (RID_OFA_START + 220) +#define SID_SD_TP_CONTENTS (RID_OFA_START + 225) +#define SID_SD_TP_SNAP (RID_OFA_START + 227) +#define SID_SD_TP_MISC (RID_OFA_START + 231) +#define RID_OFA_TP_INTERNATIONAL_SD (RID_OFA_START + 253) +#define RID_OFA_TP_INTERNATIONAL_IMPR (RID_OFA_START + 254) +#define RID_OFA_TP_INTERNATIONAL (RID_OFA_START + 252) // calc +#define RID_SC_TP_DEFAULTS (RID_OFA_START + 253) + +//--------------------------------------------------------------------- + +// ResId fuer den Suchen/Ersetzen-Dialog +#define RID_SVXDLG_SEARCH (RID_SVX_START + 20) + +// ResId fuer die PageDialog +#define RID_SVXQBX_DELETE_HEADFOOT (RID_SVX_START + 28) + +// ResId's fuer Dialoge aus StarDraw +#define RID_SVXSW_FRAMEPOSITIONS (RID_SVX_START + 289) + +#define RID_SVXIL_FRAME (RID_SVX_START + 65) + +#define RID_SVXFLOAT_3D (RID_SVX_START + 209) + +#define RID_SVXIMAGE_LIGHT_ON (RID_SVX_START + 210) +#define RID_SVXIMAGE_LIGHT_OFF (RID_SVX_START + 211) +#define RID_SVXIMAGE_COLORDLG (RID_SVX_START + 214) + +#define RID_SVXFLOAT3D_COLOR_LIGHT_PRE (RID_SVX_START + 72) +#define RID_SVXFLOAT3D_FAVORITE (RID_SVX_START + 73) +#define RID_SVXFLOAT3D_FIX_X (RID_SVX_START + 74) +#define RID_SVXFLOAT3D_FIX_Y (RID_SVX_START + 75) +#define RID_SVXFLOAT3D_FIX_Z (RID_SVX_START + 76) +#define RID_SVXFLOAT3D_FIX_R (RID_SVX_START + 77) +#define RID_SVXFLOAT3D_FIX_G (RID_SVX_START + 78) +#define RID_SVXFLOAT3D_FIX_B (RID_SVX_START + 84) + +// ResId's for the FontMenu controls +#define RID_MN_FONTSIZE (RID_SVX_START + 80) + +// ResId for zoom popup menu +#define RID_SVXMNU_ZOOM (RID_SVX_START + 82) + +// ResId for funktion popup menue +#define RID_SVXMNU_PSZ_FUNC (RID_SVX_START + 83) +#define RID_SVXMNU_XMLSECSTATBAR (RID_SVX_START + 84) + +// ResId for position and size bitmap +#define RID_SVXBMP_POSITION (RID_SVX_START + 85) +#define RID_SVXBMP_SIZE (RID_SVX_START + 86) + +#define RID_SVXBMP_SIGNET (RID_SVX_START + 87) +#define RID_SVXBMP_SIGNET_BROKEN (RID_SVX_START + 89) +#define RID_SVXBMP_SIGNET_NOTVALIDATED (RID_SVX_START + 91) + +#define RID_SVXBMP_SLIDERBUTTON (RID_SVX_START + 67) +#define RID_SVXBMP_SLIDERDECREASE (RID_SVX_START + 68) +#define RID_SVXBMP_SLIDERINCREASE (RID_SVX_START + 69) + +// Menu for the ruler +#define RID_SVXMN_RULER (RID_SVX_START + 92) + +// FontWork dialog +#define RID_SVXDLG_FONTWORK (RID_SVX_START + 93) + +// FontWork ValueSet bitmaps +#define RID_SVXBMP_FONTWORK_FORM1 (RID_SVX_START + 94) +#define RID_SVXBMP_FONTWORK_FORM2 (RID_SVX_START + 95) +#define RID_SVXBMP_FONTWORK_FORM3 (RID_SVX_START + 96) +#define RID_SVXBMP_FONTWORK_FORM4 (RID_SVX_START + 97) +#define RID_SVXBMP_FONTWORK_FORM5 (RID_SVX_START + 98) +#define RID_SVXBMP_FONTWORK_FORM6 (RID_SVX_START + 99) +#define RID_SVXBMP_FONTWORK_FORM7 (RID_SVX_START + 100) +#define RID_SVXBMP_FONTWORK_FORM8 (RID_SVX_START + 101) +#define RID_SVXBMP_FONTWORK_FORM9 (RID_SVX_START + 102) +#define RID_SVXBMP_FONTWORK_FORM10 (RID_SVX_START + 103) +#define RID_SVXBMP_FONTWORK_FORM11 (RID_SVX_START + 104) +#define RID_SVXBMP_FONTWORK_FORM12 (RID_SVX_START + 105) + +#define RID_SVXCTRL_COLOR (RID_SVX_START + 117) + +// for Toolbox-Control style +#define RID_SVXTBX_STYLE (RID_SVX_START + 120) + +#define RID_SVXDLG_PASSWORD (RID_SVX_START + 141) +#define RID_SVXDLG_COMPRESSGRAPHICS (RID_SVX_START + 142) + +// Dialog for functions +#define RID_SVXDLG_CALCFUNC (RID_SVX_START + 206) + +// QueryBox for Exit Recovery Wizard +#define RID_SVXQB_EXIT_RECOVERY (RID_SVX_START + 215) + +#define RID_SVXCTRL_RECTBTNS (RID_SVX_START + 226) + +// ResId's for Starone impl. bitmaps +#define RID_UNODRAW_OBJECTS (RID_SVX_START + 233) +#define RID_UNODRAW_OLE2 (RID_SVX_START + 234) +#define RID_UNODRAW_GRAPHICS (RID_SVX_START + 235) + +#define RID_SVXIMG_NOTCHECKED (RID_SVX_START + 243) +#define RID_SVXIMG_CHECKED (RID_SVX_START + 244) + +#define RID_SVXDLG_TEXTCONTROL_CHARATTR (RID_SVX_START + 286) +#define RID_SVXDLG_TEXTCONTROL_PARAATTR (RID_SVX_START + 287) + +#define RID_SVXDLG_LINK_WARNING (RID_SVX_START + 313) +// !!! please update RID_SVX_FIRSTFREE !!! see line 46 + +// Strings ------------------------------------------------------------------ + +// Strings for the language +#define RID_SVXSTR_LANGUAGE_ALL (RID_SVX_START + 15) + +// Strings from the search dialog +#define RID_SVXSTR_SEARCH_STYLES (RID_SVX_START + 80) +#define RID_SVXSTR_SEARCH (RID_SVX_START + 81) +#define RID_SVXSTR_REPLACE (RID_SVX_START + 82) +#define RID_SVXSTR_WRITER_STYLES (RID_SVX_START + 83) +#define RID_SVXSTR_CALC_STYLES (RID_SVX_START + 85) +// ResIds for the PageDialog + +// Strings of the ToolBox-Controls from tbcontrl.cxx +#define RID_SVXSTR_FILLPATTERN (RID_SVX_START + 191) +#define RID_SVXSTR_FRAME (RID_SVX_START + 192) +#define RID_SVXSTR_FRAME_COLOR (RID_SVX_START + 194) +#define RID_SVXSTR_FRAME_STYLE (RID_SVX_START + 195) +#define RID_SVXSTR_EXTRAS_CHARBACKGROUND (RID_SVX_START + 196) +#define RID_SVXSTR_CLEARFORM (RID_SVX_START + 197) +#define RID_SVXSTR_MORE (RID_SVX_START + 198) +#define RID_SVXSTR_CHARFONTNAME_NOTAVAILABLE (RID_SVX_START + 199) +#define RID_SVXSTR_CHARFONTNAME (RID_SVX_START + 200) + +// Strings for insert/overwrite mode +#define RID_SVXSTR_INSERT_HELPTEXT (RID_SVX_START + 210) +#define RID_SVXSTR_OVERWRITE_HELPTEXT (RID_SVX_START + 211) +#define RID_SVXSTR_OVERWRITE_TEXT (RID_SVX_START + 212) + +// Strings for the selection mode +#define RID_SVXMENU_SELECTION (RID_SVX_START + 213) +#define RID_SVXBMP_SELECTION (RID_SVX_START + 215) + +#define RID_SVXSTR_XMLSEC_SIG_OK (RID_SVX_START + 222) +#define RID_SVXSTR_XMLSEC_SIG_OK_NO_VERIFY (RID_SVX_START + 223) +#define RID_SVXSTR_XMLSEC_SIG_NOT_OK (RID_SVX_START + 224) +#define RID_SVXSTR_XMLSEC_NO_SIG (RID_SVX_START + 225) +#define RID_SVXSTR_XMLSEC_SIG_CERT_OK_PARTIAL_SIG (RID_SVX_START + 226) + +// Strings for the ruler +#define RID_SVXSTR_RULER_START (RID_SVX_START + 245) +#define RID_SVXSTR_RULER_TAB_LEFT (RID_SVX_START + 245) +#define RID_SVXSTR_RULER_TAB_RIGHT (RID_SVX_START + 246) +#define RID_SVXSTR_RULER_TAB_DECIMAL (RID_SVX_START + 247) +#define RID_SVXSTR_RULER_TAB_CENTER (RID_SVX_START + 248) + +// Close (in TabDialog line/aria) +#define RID_SVXSTR_CLOSE (RID_SVX_START + 260) + +// FontWork-ValueSet-Strings +#define RID_SVXSTR_FONTWORK_FORM1 (RID_SVX_START + 261) +#define RID_SVXSTR_FONTWORK_FORM2 (RID_SVX_START + 262) +#define RID_SVXSTR_FONTWORK_FORM3 (RID_SVX_START + 263) +#define RID_SVXSTR_FONTWORK_FORM4 (RID_SVX_START + 264) +#define RID_SVXSTR_FONTWORK_FORM5 (RID_SVX_START + 265) +#define RID_SVXSTR_FONTWORK_FORM6 (RID_SVX_START + 266) +#define RID_SVXSTR_FONTWORK_FORM7 (RID_SVX_START + 267) +#define RID_SVXSTR_FONTWORK_FORM8 (RID_SVX_START + 268) +#define RID_SVXSTR_FONTWORK_FORM9 (RID_SVX_START + 269) +#define RID_SVXSTR_FONTWORK_FORM10 (RID_SVX_START + 270) +#define RID_SVXSTR_FONTWORK_FORM11 (RID_SVX_START + 271) +#define RID_SVXSTR_FONTWORK_FORM12 (RID_SVX_START + 272) +#define RID_SVXSTR_FONTWORK_UNDOCREATE (RID_SVX_START + 273) + +// Color strings +#define RID_SVXSTR_BLACK (RID_SVX_START + 275) +#define RID_SVXSTR_BLUE (RID_SVX_START + 276) +#define RID_SVXSTR_GREEN (RID_SVX_START + 277) +#define RID_SVXSTR_CYAN (RID_SVX_START + 278) +#define RID_SVXSTR_RED (RID_SVX_START + 279) +#define RID_SVXSTR_MAGENTA (RID_SVX_START + 280) +#define RID_SVXSTR_BROWN (RID_SVX_START + 281) +#define RID_SVXSTR_GREY (RID_SVX_START + 282) +#define RID_SVXSTR_LIGHTGREY (RID_SVX_START + 283) +#define RID_SVXSTR_LIGHTBLUE (RID_SVX_START + 284) +#define RID_SVXSTR_LIGHTGREEN (RID_SVX_START + 285) +#define RID_SVXSTR_LIGHTCYAN (RID_SVX_START + 286) +#define RID_SVXSTR_LIGHTRED (RID_SVX_START + 287) +#define RID_SVXSTR_LIGHTMAGENTA (RID_SVX_START + 288) +#define RID_SVXSTR_YELLOW (RID_SVX_START + 289) +#define RID_SVXSTR_WHITE (RID_SVX_START + 290) +#define RID_SVXSTR_BLUEGREY (RID_SVX_START + 291) +#define RID_SVXSTR_ORANGE (RID_SVX_START + 292) + +// Line endings strings +#define RID_SVXSTR_ARROW (RID_SVX_START + 300) +#define RID_SVXSTR_SQUARE (RID_SVX_START + 301) +#define RID_SVXSTR_CIRCLE (RID_SVX_START + 302) + +#define RID_SVXSTR_TRANSPARENCE (RID_SVX_START + 305) +#define RID_SVXSTR_CENTERED (RID_SVX_START + 306) +#define RID_SVXSTR_NOTCENTERED (RID_SVX_START + 307) + +#define RID_SVXSTR_VIEW (RID_SVX_START + 308) +#define RID_SVXSTR_FILTER (RID_SVX_START + 309) + +// String-Arrays +#define RID_SVXSTR_TEXTENCODING_TABLE (RID_SVX_START + 312) + +// Graphic filter +#define RID_SVXTBX_GRFFILTER (RID_SVX_START + 331) + +#define RID_SVXERRCODE (RID_SVX_START + 350) + +// gallery +#define RID_SVX_GALLERY_START (RID_SVX_START + 360) +// RID_SVX_GALLERY_END (RID_SVX_START + 410) + +// Define - Region for bitmap masking +// !!! don't use defines from this region !!! +#define RID_SVX_BMPMASK_START (RID_SVX_START + 420) +// RID_SVX_BMPMASK_END (RID_SVX_START + 440) + +// Define - Region for IMAP editor +// !!! don't use defines from this region !!! +#define RID_SVX_IMAP_START (RID_SVX_START + 450) +// RID_SVX_IMAP_END (RID_SVX_START + 460) + +// Define - Region for contour editor +// !!! don't use defines from this region !!! +#define RID_SVX_CONTOUR_START (RID_SVX_START + 461) +// RID_SVX_CONTOUR_END (RID_SVX_START + 471) + +#define RID_SVXIMG_GRAF_RED (RID_SVX_START + 472) +#define RID_SVXIMG_GRAF_GREEN (RID_SVX_START + 473) +#define RID_SVXIMG_GRAF_BLUE (RID_SVX_START + 474) +#define RID_SVXIMG_GRAF_LUMINANCE (RID_SVX_START + 475) +#define RID_SVXIMG_GRAF_CONTRAST (RID_SVX_START + 476) +#define RID_SVXIMG_GRAF_GAMMA (RID_SVX_START + 477) +#define RID_SVXIMG_GRAF_TRANSPARENCE (RID_SVX_START + 478) + +#define RID_SVX_RELOAD_NORMAL (RID_SVX_START + 480) +#define RID_SVX_RELOAD_SPECIAL (RID_SVX_START + 481) + +// Defines for the 3D engine +#define RID_SVX_3D_UNDO_EXCHANGE_PASTE (RID_SVX_START + 489) +#define RID_SVX_3D_CREATE_LATHE (RID_SVX_START + 490) +#define RID_SVX_3D_UNDO_SEGMENTS (RID_SVX_START + 491) +#define RID_SVX_3D_UNDO_DEEPTH (RID_SVX_START + 492) +#define RID_SVX_3D_UNDO_FOCAL (RID_SVX_START + 493) +#define RID_SVX_3D_UNDO_CAMPOS (RID_SVX_START + 494) +#define RID_SVX_3D_UNDO_ROTATE (RID_SVX_START + 495) +#define RID_SVX_3D_UNDO_EXTRUDE (RID_SVX_START + 496) +#define RID_SVX_3D_UNDO_LATHE (RID_SVX_START + 497) +#define RID_SVX_3D_UNDO_BREAK_LATHE (RID_SVX_START + 498) +#define RID_SVX_3D_UNDO_ATTRIBUTES (RID_SVX_START + 499) + +// ResIds for graphics drawmode +#define RID_SVXSTR_GRAFMODE_STANDARD (RID_SVX_START + 520) +#define RID_SVXSTR_GRAFMODE_GREYS (RID_SVX_START + 521) +#define RID_SVXSTR_GRAFMODE_MONO (RID_SVX_START + 522) +#define RID_SVXSTR_GRAFMODE_WATERMARK (RID_SVX_START + 523) + + +// Strings for Plugin-Filedialog +#define STR_INSERT_VIDEO_EXTFILTER_IVF (RID_SVX_START + 524) +#define STR_INSERT_VIDEO_EXTFILTER_AVI (RID_SVX_START + 525) +#define STR_INSERT_VIDEO_EXTFILTER_MOV (RID_SVX_START + 526) +#define STR_INSERT_VIDEO_EXTFILTER_MPEG (RID_SVX_START + 527) +#define STR_EXTFILTER_ALL (RID_SVX_START + 528) +#define STR_INSERT_SOUND_TITLE (RID_SVX_START + 529) +#define STR_INSERT_VIDEO_TITLE (RID_SVX_START + 530) + +#define RID_SVXSTR_BACKGROUND (RID_SVX_START + 531) + +// BM: some additional standard colors +#define RID_SVXSTR_VIOLET (RID_SVX_START + 540) +#define RID_SVXSTR_BORDEAUX (RID_SVX_START + 541) +#define RID_SVXSTR_PALE_YELLOW (RID_SVX_START + 542) +#define RID_SVXSTR_PALE_GREEN (RID_SVX_START + 543) +#define RID_SVXSTR_DKVIOLET (RID_SVX_START + 544) +#define RID_SVXSTR_SALMON (RID_SVX_START + 545) +#define RID_SVXSTR_SEABLUE (RID_SVX_START + 546) +#define RID_SVXSTR_COLOR_SUN (RID_SVX_START + 547) + +// LibreOffice palette colors +#define RID_SVXSTR_LIBRE_GREEN_1 (RID_SVX_START + 548) +#define RID_SVXSTR_LIBRE_GREEN_ACCENT (RID_SVX_START + 549) +#define RID_SVXSTR_LIBRE_BLUE_ACCENT (RID_SVX_START + 550) +#define RID_SVXSTR_LIBRE_ORANGE_ACCENT (RID_SVX_START + 551) +#define RID_SVXSTR_LIBRE_PURPLE (RID_SVX_START + 552) +#define RID_SVXSTR_LIBRE_PURPLE_ACCENT (RID_SVX_START + 553) +#define RID_SVXSTR_LIBRE_YELLOW_ACCENT (RID_SVX_START + 554) + +// JP: string resource ids for table-autoformat-names, used in SW/SC +// !!! Urgent: the order of Ids is persistent. New Ids have to append !!! +#define RID_SVXSTR_TBLAFMT_BEGIN (RID_SVX_START + 560) +#define RID_SVXSTR_TBLAFMT_3D RID_SVXSTR_TBLAFMT_BEGIN +#define RID_SVXSTR_TBLAFMT_BLACK1 (RID_SVX_START + 561) +#define RID_SVXSTR_TBLAFMT_BLACK2 (RID_SVX_START + 562) +#define RID_SVXSTR_TBLAFMT_BLUE (RID_SVX_START + 563) +#define RID_SVXSTR_TBLAFMT_BROWN (RID_SVX_START + 564) +#define RID_SVXSTR_TBLAFMT_CURRENCY (RID_SVX_START + 565) +#define RID_SVXSTR_TBLAFMT_CURRENCY_3D (RID_SVX_START + 566) +#define RID_SVXSTR_TBLAFMT_CURRENCY_GRAY (RID_SVX_START + 567) +#define RID_SVXSTR_TBLAFMT_CURRENCY_LAVENDER (RID_SVX_START + 568) +#define RID_SVXSTR_TBLAFMT_CURRENCY_TURQUOISE (RID_SVX_START + 569) +#define RID_SVXSTR_TBLAFMT_GRAY (RID_SVX_START + 570) +#define RID_SVXSTR_TBLAFMT_GREEN (RID_SVX_START + 571) +#define RID_SVXSTR_TBLAFMT_LAVENDER (RID_SVX_START + 572) +#define RID_SVXSTR_TBLAFMT_RED (RID_SVX_START + 573) +#define RID_SVXSTR_TBLAFMT_TURQUOISE (RID_SVX_START + 574) +#define RID_SVXSTR_TBLAFMT_YELLOW (RID_SVX_START + 575) +#define RID_SVXSTR_TBLAFMT_END (RID_SVX_START + 576) + +// string resources for XLineCap item +#define RID_SVXSTR_LINECAP_BUTT (RID_SVX_START + 586 ) +#define RID_SVXSTR_LINECAP_ROUND (RID_SVX_START + 587 ) +#define RID_SVXSTR_LINECAP_SQUARE (RID_SVX_START + 588 ) + +// string resources for XLineJoint item +#define RID_SVXSTR_LINEJOINT_NONE RID_SVXSTR_NONE +#define RID_SVXSTR_LINEJOINT_MIDDLE (RID_SVX_START + 589 ) +#define RID_SVXSTR_LINEJOINT_BEVEL (RID_SVX_START + 590 ) +#define RID_SVXSTR_LINEJOINT_MITER (RID_SVX_START + 591 ) +#define RID_SVXSTR_LINEJOINT_ROUND (RID_SVX_START + 592 ) + +// Default-Color-Names +#define RID_SVXSTR_BLACK_DEF (RID_SVX_START + 595) +#define RID_SVXSTR_BLUE_DEF (RID_SVX_START + 596) +#define RID_SVXSTR_GREEN_DEF (RID_SVX_START + 597) +#define RID_SVXSTR_CYAN_DEF (RID_SVX_START + 598) +#define RID_SVXSTR_RED_DEF (RID_SVX_START + 599) +#define RID_SVXSTR_MAGENTA_DEF (RID_SVX_START + 600) +#define RID_SVXSTR_BROWN_DEF (RID_SVX_START + 601) +#define RID_SVXSTR_GREY_DEF (RID_SVX_START + 602) +#define RID_SVXSTR_LIGHTGREY_DEF (RID_SVX_START + 603) +#define RID_SVXSTR_LIGHTBLUE_DEF (RID_SVX_START + 604) +#define RID_SVXSTR_LIGHTGREEN_DEF (RID_SVX_START + 605) +#define RID_SVXSTR_LIGHTCYAN_DEF (RID_SVX_START + 606) +#define RID_SVXSTR_LIGHTRED_DEF (RID_SVX_START + 607) +#define RID_SVXSTR_LIGHTMAGENTA_DEF (RID_SVX_START + 608) +#define RID_SVXSTR_YELLOW_DEF (RID_SVX_START + 609) +#define RID_SVXSTR_WHITE_DEF (RID_SVX_START + 610) +#define RID_SVXSTR_BLUEGREY_DEF (RID_SVX_START + 611) +#define RID_SVXSTR_ORANGE_DEF (RID_SVX_START + 612) +#define RID_SVXSTR_VIOLET_DEF (RID_SVX_START + 613) +#define RID_SVXSTR_BORDEAUX_DEF (RID_SVX_START + 614) +#define RID_SVXSTR_PALE_YELLOW_DEF (RID_SVX_START + 615) +#define RID_SVXSTR_PALE_GREEN_DEF (RID_SVX_START + 616) +#define RID_SVXSTR_DKVIOLET_DEF (RID_SVX_START + 617) +#define RID_SVXSTR_SALMON_DEF (RID_SVX_START + 618) +#define RID_SVXSTR_SEABLUE_DEF (RID_SVX_START + 619) +#define RID_SVXSTR_COLOR_SUN_DEF (RID_SVX_START + 620) +#define RID_SVXSTR_COLOR_CHART (RID_SVX_START + 621) +#define RID_SVXSTR_COLOR_CHART_DEF (RID_SVX_START + 622) +// LibreOffice palette colors +#define RID_SVXSTR_LIBRE_GREEN_1_DEF (RID_SVX_START + 623) +#define RID_SVXSTR_LIBRE_GREEN_ACCENT_DEF (RID_SVX_START + 624) +#define RID_SVXSTR_LIBRE_BLUE_ACCENT_DEF (RID_SVX_START + 625) +#define RID_SVXSTR_LIBRE_ORANGE_ACCENT_DEF (RID_SVX_START + 626) +#define RID_SVXSTR_LIBRE_PURPLE_DEF (RID_SVX_START + 627) +#define RID_SVXSTR_LIBRE_PURPLE_ACCENT_DEF (RID_SVX_START + 628) +#define RID_SVXSTR_LIBRE_YELLOW_ACCENT_DEF (RID_SVX_START + 629) + +// Tango palette colors +#define RID_SVXSTR_TANGO_BUTTER (RID_SVX_START + 630) +#define RID_SVXSTR_TANGO_ORANGE (RID_SVX_START + 631) +#define RID_SVXSTR_TANGO_CHOCOLATE (RID_SVX_START + 632) +#define RID_SVXSTR_TANGO_CHAMELEON (RID_SVX_START + 633) +#define RID_SVXSTR_TANGO_SKY_BLUE (RID_SVX_START + 634) +#define RID_SVXSTR_TANGO_PLUM (RID_SVX_START + 635) +#define RID_SVXSTR_TANGO_SCARLET_RED (RID_SVX_START + 636) +#define RID_SVXSTR_TANGO_ALUMINIUM (RID_SVX_START + 637) +#define RID_SVXSTR_TANGO_BUTTER_DEF (RID_SVX_START + 638) +#define RID_SVXSTR_TANGO_ORANGE_DEF (RID_SVX_START + 639) +#define RID_SVXSTR_TANGO_CHOCOLATE_DEF (RID_SVX_START + 640) +#define RID_SVXSTR_TANGO_CHAMELEON_DEF (RID_SVX_START + 641) +#define RID_SVXSTR_TANGO_SKY_BLUE_DEF (RID_SVX_START + 642) +#define RID_SVXSTR_TANGO_PLUM_DEF (RID_SVX_START + 643) +#define RID_SVXSTR_TANGO_SCARLET_RED_DEF (RID_SVX_START + 644) +#define RID_SVXSTR_TANGO_ALUMINIUM_DEF (RID_SVX_START + 645) + +// Default-Gradient-Names +#define RID_SVXSTR_GRDT0_DEF (RID_SVX_START + 2000) +#define RID_SVXSTR_GRDT1_DEF (RID_SVX_START + 2001) +#define RID_SVXSTR_GRDT2_DEF (RID_SVX_START + 2002) +#define RID_SVXSTR_GRDT3_DEF (RID_SVX_START + 2003) +#define RID_SVXSTR_GRDT4_DEF (RID_SVX_START + 2004) +#define RID_SVXSTR_GRDT5_DEF (RID_SVX_START + 2005) +#define RID_SVXSTR_GRDT6_DEF (RID_SVX_START + 2006) +#define RID_SVXSTR_GRDT7_DEF (RID_SVX_START + 2007) +#define RID_SVXSTR_GRDT8_DEF (RID_SVX_START + 2008) +#define RID_SVXSTR_GRDT9_DEF (RID_SVX_START + 2009) +#define RID_SVXSTR_GRDT10_DEF (RID_SVX_START + 2010) +#define RID_SVXSTR_GRDT11_DEF (RID_SVX_START + 2011) +#define RID_SVXSTR_GRDT12_DEF (RID_SVX_START + 2012) +#define RID_SVXSTR_GRDT13_DEF (RID_SVX_START + 2013) +#define RID_SVXSTR_GRDT14_DEF (RID_SVX_START + 2014) +#define RID_SVXSTR_GRDT15_DEF (RID_SVX_START + 2015) +#define RID_SVXSTR_GRDT16_DEF (RID_SVX_START + 2016) +#define RID_SVXSTR_GRDT17_DEF (RID_SVX_START + 2017) +#define RID_SVXSTR_GRDT18_DEF (RID_SVX_START + 2018) +#define RID_SVXSTR_GRDT19_DEF (RID_SVX_START + 2019) +#define RID_SVXSTR_GRDT20_DEF (RID_SVX_START + 2020) +#define RID_SVXSTR_GRDT21_DEF (RID_SVX_START + 2021) +#define RID_SVXSTR_GRDT22_DEF (RID_SVX_START + 2022) +#define RID_SVXSTR_GRDT23_DEF (RID_SVX_START + 2023) +#define RID_SVXSTR_GRDT24_DEF (RID_SVX_START + 2024) +#define RID_SVXSTR_GRDT25_DEF (RID_SVX_START + 2025) +#define RID_SVXSTR_GRDT26_DEF (RID_SVX_START + 2026) +#define RID_SVXSTR_GRDT27_DEF (RID_SVX_START + 2027) +#define RID_SVXSTR_GRDT28_DEF (RID_SVX_START + 2028) +#define RID_SVXSTR_GRDT29_DEF (RID_SVX_START + 2029) +#define RID_SVXSTR_GRDT30_DEF (RID_SVX_START + 2030) +#define RID_SVXSTR_GRDT31_DEF (RID_SVX_START + 2031) +#define RID_SVXSTR_GRDT32_DEF (RID_SVX_START + 2032) +#define RID_SVXSTR_GRDT33_DEF (RID_SVX_START + 2033) +#define RID_SVXSTR_GRDT34_DEF (RID_SVX_START + 2034) +#define RID_SVXSTR_GRDT35_DEF (RID_SVX_START + 2035) +#define RID_SVXSTR_GRDT36_DEF (RID_SVX_START + 2036) +#define RID_SVXSTR_GRDT37_DEF (RID_SVX_START + 2037) +#define RID_SVXSTR_GRDT38_DEF (RID_SVX_START + 2038) +#define RID_SVXSTR_GRDT39_DEF (RID_SVX_START + 2039) +#define RID_SVXSTR_GRDT40_DEF (RID_SVX_START + 2040) +#define RID_SVXSTR_GRDT41_DEF (RID_SVX_START + 2041) +#define RID_SVXSTR_GRDT42_DEF (RID_SVX_START + 2042) +#define RID_SVXSTR_GRDT43_DEF (RID_SVX_START + 2043) +#define RID_SVXSTR_GRDT44_DEF (RID_SVX_START + 2044) +#define RID_SVXSTR_GRDT45_DEF (RID_SVX_START + 2045) +#define RID_SVXSTR_GRDT46_DEF (RID_SVX_START + 2046) +#define RID_SVXSTR_GRDT47_DEF (RID_SVX_START + 2047) +#define RID_SVXSTR_GRDT48_DEF (RID_SVX_START + 2048) +#define RID_SVXSTR_GRDT49_DEF (RID_SVX_START + 2049) +#define RID_SVXSTR_GRDT50_DEF (RID_SVX_START + 2050) +#define RID_SVXSTR_GRDT51_DEF (RID_SVX_START + 2051) +#define RID_SVXSTR_GRDT52_DEF (RID_SVX_START + 2052) +#define RID_SVXSTR_GRDT53_DEF (RID_SVX_START + 2053) +#define RID_SVXSTR_GRDT54_DEF (RID_SVX_START + 2054) +#define RID_SVXSTR_GRDT55_DEF (RID_SVX_START + 2055) +#define RID_SVXSTR_GRDT56_DEF (RID_SVX_START + 2056) +#define RID_SVXSTR_GRDT57_DEF (RID_SVX_START + 2057) +#define RID_SVXSTR_GRDT58_DEF (RID_SVX_START + 2058) +#define RID_SVXSTR_GRDT0 (RID_SVX_START + 2060) +#define RID_SVXSTR_GRDT1 (RID_SVX_START + 2061) +#define RID_SVXSTR_GRDT2 (RID_SVX_START + 2062) +#define RID_SVXSTR_GRDT3 (RID_SVX_START + 2063) +#define RID_SVXSTR_GRDT4 (RID_SVX_START + 2064) +#define RID_SVXSTR_GRDT5 (RID_SVX_START + 2065) +#define RID_SVXSTR_GRDT6 (RID_SVX_START + 2066) +#define RID_SVXSTR_GRDT7 (RID_SVX_START + 2067) +#define RID_SVXSTR_GRDT8 (RID_SVX_START + 2068) +#define RID_SVXSTR_GRDT9 (RID_SVX_START + 2069) +#define RID_SVXSTR_GRDT10 (RID_SVX_START + 2070) +#define RID_SVXSTR_GRDT11 (RID_SVX_START + 2071) +#define RID_SVXSTR_GRDT12 (RID_SVX_START + 2072) +#define RID_SVXSTR_GRDT13 (RID_SVX_START + 2073) +#define RID_SVXSTR_GRDT14 (RID_SVX_START + 2074) +#define RID_SVXSTR_GRDT15 (RID_SVX_START + 2075) +#define RID_SVXSTR_GRDT16 (RID_SVX_START + 2076) +#define RID_SVXSTR_GRDT17 (RID_SVX_START + 2077) +#define RID_SVXSTR_GRDT18 (RID_SVX_START + 2078) +#define RID_SVXSTR_GRDT19 (RID_SVX_START + 2079) +#define RID_SVXSTR_GRDT20 (RID_SVX_START + 2080) +#define RID_SVXSTR_GRDT21 (RID_SVX_START + 2081) +#define RID_SVXSTR_GRDT22 (RID_SVX_START + 2082) +#define RID_SVXSTR_GRDT23 (RID_SVX_START + 2083) +#define RID_SVXSTR_GRDT24 (RID_SVX_START + 2084) +#define RID_SVXSTR_GRDT25 (RID_SVX_START + 2085) +#define RID_SVXSTR_GRDT26 (RID_SVX_START + 2086) +#define RID_SVXSTR_GRDT27 (RID_SVX_START + 2087) +#define RID_SVXSTR_GRDT28 (RID_SVX_START + 2088) +#define RID_SVXSTR_GRDT29 (RID_SVX_START + 2089) +#define RID_SVXSTR_GRDT30 (RID_SVX_START + 2090) +#define RID_SVXSTR_GRDT31 (RID_SVX_START + 2091) +#define RID_SVXSTR_GRDT32 (RID_SVX_START + 2092) +#define RID_SVXSTR_GRDT33 (RID_SVX_START + 2093) +#define RID_SVXSTR_GRDT34 (RID_SVX_START + 2094) +#define RID_SVXSTR_GRDT35 (RID_SVX_START + 2095) +#define RID_SVXSTR_GRDT36 (RID_SVX_START + 2096) +#define RID_SVXSTR_GRDT37 (RID_SVX_START + 2097) +#define RID_SVXSTR_GRDT38 (RID_SVX_START + 2098) +#define RID_SVXSTR_GRDT39 (RID_SVX_START + 2099) +#define RID_SVXSTR_GRDT40 (RID_SVX_START + 2100) +#define RID_SVXSTR_GRDT41 (RID_SVX_START + 2101) +#define RID_SVXSTR_GRDT42 (RID_SVX_START + 2102) +#define RID_SVXSTR_GRDT43 (RID_SVX_START + 2103) +#define RID_SVXSTR_GRDT44 (RID_SVX_START + 2104) +#define RID_SVXSTR_GRDT45 (RID_SVX_START + 2105) +#define RID_SVXSTR_GRDT46 (RID_SVX_START + 2106) +#define RID_SVXSTR_GRDT47 (RID_SVX_START + 2107) +#define RID_SVXSTR_GRDT48 (RID_SVX_START + 2108) +#define RID_SVXSTR_GRDT49 (RID_SVX_START + 2109) +#define RID_SVXSTR_GRDT50 (RID_SVX_START + 2110) +#define RID_SVXSTR_GRDT51 (RID_SVX_START + 2111) +#define RID_SVXSTR_GRDT52 (RID_SVX_START + 2112) +#define RID_SVXSTR_GRDT53 (RID_SVX_START + 2113) +#define RID_SVXSTR_GRDT54 (RID_SVX_START + 2114) +#define RID_SVXSTR_GRDT55 (RID_SVX_START + 2115) +#define RID_SVXSTR_GRDT56 (RID_SVX_START + 2116) +#define RID_SVXSTR_GRDT57 (RID_SVX_START + 2117) +#define RID_SVXSTR_GRDT58 (RID_SVX_START + 2118) +#define RID_SVXSTR_GRDT_DEF_START RID_SVXSTR_GRDT0_DEF +#define RID_SVXSTR_GRDT_DEF_END RID_SVXSTR_GRDT58_DEF +#define RID_SVXSTR_GRDT_START RID_SVXSTR_GRDT0 +// RID_SVXSTR_GRDT_END RID_SVXSTR_GRDT58 + +// Default-Hatch-Names +#define RID_SVXSTR_HATCH0_DEF (RID_SVX_START + 661) +#define RID_SVXSTR_HATCH1_DEF (RID_SVX_START + 662) +#define RID_SVXSTR_HATCH2_DEF (RID_SVX_START + 663) +#define RID_SVXSTR_HATCH3_DEF (RID_SVX_START + 664) +#define RID_SVXSTR_HATCH4_DEF (RID_SVX_START + 665) +#define RID_SVXSTR_HATCH5_DEF (RID_SVX_START + 666) +#define RID_SVXSTR_HATCH6_DEF (RID_SVX_START + 667) +#define RID_SVXSTR_HATCH7_DEF (RID_SVX_START + 668) +#define RID_SVXSTR_HATCH8_DEF (RID_SVX_START + 669) +#define RID_SVXSTR_HATCH9_DEF (RID_SVX_START + 670) +#define RID_SVXSTR_HATCH10_DEF (RID_SVX_START + 671) +#define RID_SVXSTR_HATCH0 (RID_SVX_START + 672) +#define RID_SVXSTR_HATCH1 (RID_SVX_START + 673) +#define RID_SVXSTR_HATCH2 (RID_SVX_START + 674) +#define RID_SVXSTR_HATCH3 (RID_SVX_START + 675) +#define RID_SVXSTR_HATCH4 (RID_SVX_START + 676) +#define RID_SVXSTR_HATCH5 (RID_SVX_START + 677) +#define RID_SVXSTR_HATCH6 (RID_SVX_START + 678) +#define RID_SVXSTR_HATCH7 (RID_SVX_START + 679) +#define RID_SVXSTR_HATCH8 (RID_SVX_START + 680) +#define RID_SVXSTR_HATCH9 (RID_SVX_START + 681) +#define RID_SVXSTR_HATCH10 (RID_SVX_START + 682) +#define RID_SVXSTR_HATCH_DEF_START RID_SVXSTR_HATCH0_DEF +#define RID_SVXSTR_HATCH_DEF_END RID_SVXSTR_HATCH10_DEF +#define RID_SVXSTR_HATCH_START RID_SVXSTR_HATCH0 +// RID_SVXSTR_HATCH_END RID_SVXSTR_HATCH10 + +// Default-Bitmap-Names +#define RID_SVXSTR_BMP0_DEF (RID_SVX_START + 691) +#define RID_SVXSTR_BMP1_DEF (RID_SVX_START + 692) +#define RID_SVXSTR_BMP2_DEF (RID_SVX_START + 693) +#define RID_SVXSTR_BMP3_DEF (RID_SVX_START + 694) +#define RID_SVXSTR_BMP4_DEF (RID_SVX_START + 695) +#define RID_SVXSTR_BMP5_DEF (RID_SVX_START + 696) +#define RID_SVXSTR_BMP6_DEF (RID_SVX_START + 697) +#define RID_SVXSTR_BMP7_DEF (RID_SVX_START + 698) +#define RID_SVXSTR_BMP8_DEF (RID_SVX_START + 699) +#define RID_SVXSTR_BMP9_DEF (RID_SVX_START + 700) +#define RID_SVXSTR_BMP10_DEF (RID_SVX_START + 701) +#define RID_SVXSTR_BMP11_DEF (RID_SVX_START + 702) +#define RID_SVXSTR_BMP12_DEF (RID_SVX_START + 703) +#define RID_SVXSTR_BMP13_DEF (RID_SVX_START + 704) +#define RID_SVXSTR_BMP14_DEF (RID_SVX_START + 705) +#define RID_SVXSTR_BMP15_DEF (RID_SVX_START + 706) +#define RID_SVXSTR_BMP16_DEF (RID_SVX_START + 707) +#define RID_SVXSTR_BMP17_DEF (RID_SVX_START + 708) +#define RID_SVXSTR_BMP18_DEF (RID_SVX_START + 709) +#define RID_SVXSTR_BMP19_DEF (RID_SVX_START + 710) +#define RID_SVXSTR_BMP20_DEF (RID_SVX_START + 711) +#define RID_SVXSTR_BMP21_DEF (RID_SVX_START + 712) +#define RID_SVXSTR_BMP0 (RID_SVX_START + 713) +#define RID_SVXSTR_BMP1 (RID_SVX_START + 714) +#define RID_SVXSTR_BMP2 (RID_SVX_START + 715) +#define RID_SVXSTR_BMP3 (RID_SVX_START + 716) +#define RID_SVXSTR_BMP4 (RID_SVX_START + 717) +#define RID_SVXSTR_BMP5 (RID_SVX_START + 718) +#define RID_SVXSTR_BMP6 (RID_SVX_START + 719) +#define RID_SVXSTR_BMP7 (RID_SVX_START + 720) +#define RID_SVXSTR_BMP8 (RID_SVX_START + 721) +#define RID_SVXSTR_BMP9 (RID_SVX_START + 722) +#define RID_SVXSTR_BMP10 (RID_SVX_START + 723) +#define RID_SVXSTR_BMP11 (RID_SVX_START + 724) +#define RID_SVXSTR_BMP12 (RID_SVX_START + 725) +#define RID_SVXSTR_BMP13 (RID_SVX_START + 726) +#define RID_SVXSTR_BMP14 (RID_SVX_START + 727) +#define RID_SVXSTR_BMP15 (RID_SVX_START + 728) +#define RID_SVXSTR_BMP16 (RID_SVX_START + 729) +#define RID_SVXSTR_BMP17 (RID_SVX_START + 730) +#define RID_SVXSTR_BMP18 (RID_SVX_START + 731) +#define RID_SVXSTR_BMP19 (RID_SVX_START + 732) +#define RID_SVXSTR_BMP20 (RID_SVX_START + 733) +#define RID_SVXSTR_BMP21 (RID_SVX_START + 734) +#define RID_SVXSTR_BMP_DEF_START RID_SVXSTR_BMP0_DEF +#define RID_SVXSTR_BMP_DEF_END RID_SVXSTR_BMP21_DEF +#define RID_SVXSTR_BMP_START RID_SVXSTR_BMP0 +// RID_SVXSTR_BMP_END RID_SVXSTR_BMP21 + +// Default-Linestyle-Names +#define RID_SVXSTR_DASH0_DEF (RID_SVX_START + 740) +#define RID_SVXSTR_DASH1_DEF (RID_SVX_START + 741) +#define RID_SVXSTR_DASH2_DEF (RID_SVX_START + 742) +#define RID_SVXSTR_DASH3_DEF (RID_SVX_START + 743) +#define RID_SVXSTR_DASH4_DEF (RID_SVX_START + 744) +#define RID_SVXSTR_DASH5_DEF (RID_SVX_START + 745) +#define RID_SVXSTR_DASH6_DEF (RID_SVX_START + 746) +#define RID_SVXSTR_DASH7_DEF (RID_SVX_START + 747) +#define RID_SVXSTR_DASH8_DEF (RID_SVX_START + 748) +#define RID_SVXSTR_DASH9_DEF (RID_SVX_START + 749) +#define RID_SVXSTR_DASH10_DEF (RID_SVX_START + 750) +#define RID_SVXSTR_DASH11_DEF (RID_SVX_START + 751) +#define RID_SVXSTR_DASH12_DEF (RID_SVX_START + 752) +#define RID_SVXSTR_DASH0 (RID_SVX_START + 753) +#define RID_SVXSTR_DASH1 (RID_SVX_START + 754) +#define RID_SVXSTR_DASH2 (RID_SVX_START + 755) +#define RID_SVXSTR_DASH3 (RID_SVX_START + 756) +#define RID_SVXSTR_DASH4 (RID_SVX_START + 757) +#define RID_SVXSTR_DASH5 (RID_SVX_START + 758) +#define RID_SVXSTR_DASH6 (RID_SVX_START + 759) +#define RID_SVXSTR_DASH7 (RID_SVX_START + 760) +#define RID_SVXSTR_DASH8 (RID_SVX_START + 761) +#define RID_SVXSTR_DASH9 (RID_SVX_START + 762) +#define RID_SVXSTR_DASH10 (RID_SVX_START + 763) +#define RID_SVXSTR_DASH11 (RID_SVX_START + 764) +#define RID_SVXSTR_DASH12 (RID_SVX_START + 765) +#define RID_SVXSTR_DASH_DEF_START RID_SVXSTR_DASH0_DEF +#define RID_SVXSTR_DASH_DEF_END RID_SVXSTR_DASH12_DEF +#define RID_SVXSTR_DASH_START RID_SVXSTR_DASH0 +// RID_SVXSTR_DASH_END RID_SVXSTR_DASH12 + +// Default-Line-End-Names +// Shifted numbers. Old value range from +770 to +795 is unused now +#define RID_SVXSTR_LEND0_DEF (RID_SVX_START + 2770) +#define RID_SVXSTR_LEND1_DEF (RID_SVX_START + 2771) +#define RID_SVXSTR_LEND2_DEF (RID_SVX_START + 2772) +#define RID_SVXSTR_LEND3_DEF (RID_SVX_START + 2773) +#define RID_SVXSTR_LEND4_DEF (RID_SVX_START + 2774) +#define RID_SVXSTR_LEND5_DEF (RID_SVX_START + 2775) +#define RID_SVXSTR_LEND6_DEF (RID_SVX_START + 2776) +#define RID_SVXSTR_LEND7_DEF (RID_SVX_START + 2777) +#define RID_SVXSTR_LEND8_DEF (RID_SVX_START + 2778) +#define RID_SVXSTR_LEND9_DEF (RID_SVX_START + 2779) +#define RID_SVXSTR_LEND10_DEF (RID_SVX_START + 2780) +#define RID_SVXSTR_LEND11_DEF (RID_SVX_START + 2781) +#define RID_SVXSTR_LEND12_DEF (RID_SVX_START + 2782) +#define RID_SVXSTR_LEND13_DEF (RID_SVX_START + 2783) +#define RID_SVXSTR_LEND14_DEF (RID_SVX_START + 2784) +#define RID_SVXSTR_LEND15_DEF (RID_SVX_START + 2785) +#define RID_SVXSTR_LEND16_DEF (RID_SVX_START + 2786) +#define RID_SVXSTR_LEND17_DEF (RID_SVX_START + 2787) +#define RID_SVXSTR_LEND18_DEF (RID_SVX_START + 2788) +#define RID_SVXSTR_LEND19_DEF (RID_SVX_START + 2789) +#define RID_SVXSTR_LEND20_DEF (RID_SVX_START + 2790) +#define RID_SVXSTR_LEND0 (RID_SVX_START + 2791) +#define RID_SVXSTR_LEND1 (RID_SVX_START + 2792) +#define RID_SVXSTR_LEND2 (RID_SVX_START + 2793) +#define RID_SVXSTR_LEND3 (RID_SVX_START + 2794) +#define RID_SVXSTR_LEND4 (RID_SVX_START + 2795) +#define RID_SVXSTR_LEND5 (RID_SVX_START + 2796) +#define RID_SVXSTR_LEND6 (RID_SVX_START + 2797) +#define RID_SVXSTR_LEND7 (RID_SVX_START + 2798) +#define RID_SVXSTR_LEND8 (RID_SVX_START + 2799) +#define RID_SVXSTR_LEND9 (RID_SVX_START + 2800) +#define RID_SVXSTR_LEND10 (RID_SVX_START + 2801) +#define RID_SVXSTR_LEND11 (RID_SVX_START + 2802) +#define RID_SVXSTR_LEND12 (RID_SVX_START + 2803) +#define RID_SVXSTR_LEND13 (RID_SVX_START + 2804) +#define RID_SVXSTR_LEND14 (RID_SVX_START + 2805) +#define RID_SVXSTR_LEND15 (RID_SVX_START + 2806) +#define RID_SVXSTR_LEND16 (RID_SVX_START + 2807) +#define RID_SVXSTR_LEND17 (RID_SVX_START + 2808) +#define RID_SVXSTR_LEND18 (RID_SVX_START + 2809) +#define RID_SVXSTR_LEND19 (RID_SVX_START + 2810) +#define RID_SVXSTR_LEND20 (RID_SVX_START + 2811) +#define RID_SVXSTR_LEND_DEF_START RID_SVXSTR_LEND0_DEF +#define RID_SVXSTR_LEND_DEF_END RID_SVXSTR_LEND20_DEF +#define RID_SVXSTR_LEND_START RID_SVXSTR_LEND0 +// RID_SVXSTR_LEND_END RID_SVXSTR_LEND20 + +#define RID_SVXSTR_QRY_PRINT_TITLE (RID_SVX_START + 802) +#define RID_SVXSTR_QRY_PRINT_MSG (RID_SVX_START + 803) +#define RID_SVXSTR_QRY_PRINT_ALL (RID_SVX_START + 804) +#define RID_SVXSTR_QRY_PRINT_SELECTION (RID_SVX_START + 805) + +// strings for graphic attributes/undo +#define RID_SVXSTR_GRAFCROP (RID_SVX_START + 820) +#define RID_SVXSTR_UNDO_GRAFMODE (RID_SVX_START + 821) +#define RID_SVXSTR_UNDO_GRAFRED (RID_SVX_START + 822) +#define RID_SVXSTR_UNDO_GRAFGREEN (RID_SVX_START + 823) +#define RID_SVXSTR_UNDO_GRAFBLUE (RID_SVX_START + 824) +#define RID_SVXSTR_UNDO_GRAFLUMINANCE (RID_SVX_START + 825) +#define RID_SVXSTR_UNDO_GRAFCONTRAST (RID_SVX_START + 826) +#define RID_SVXSTR_UNDO_GRAFGAMMA (RID_SVX_START + 827) +#define RID_SVXSTR_UNDO_GRAFTRANSPARENCY (RID_SVX_START + 828) +#define RID_SVXSTR_UNDO_GRAFCROP (RID_SVXSTR_GRAFCROP) + +// listbox control for UNDO and REDO +#define RID_SVXTBX_UNDO_REDO_CTRL (RID_SVX_START + 845) +#define RID_SVXSTR_NUM_UNDO_ACTIONS (RID_SVX_START + 846) +#define RID_SVXSTR_NUM_REDO_ACTIONS (RID_SVX_START + 847) +#define RID_SVXSTR_NUM_UNDO_ACTION (RID_SVX_START + 848) +#define RID_SVXSTR_NUM_REDO_ACTION (RID_SVX_START + 849) + +// Default-transparence-gradient-names +#define RID_SVXSTR_TRASNGR0_DEF (RID_SVX_START + 850) +#define RID_SVXSTR_TRASNGR0 (RID_SVX_START + 851) +#define RID_SVXSTR_TRASNGR_DEF_START RID_SVXSTR_TRASNGR0_DEF +#define RID_SVXSTR_TRASNGR_DEF_END RID_SVXSTR_TRASNGR0_DEF +#define RID_SVXSTR_TRASNGR_START RID_SVXSTR_TRASNGR0 +// RID_SVXSTR_TRASNGR_END RID_SVXSTR_TRASNGR0 + +#define RID_SVXSTR_BORDER_CONTROL (RID_SVX_START + 852) + +// Accessibility strings. The actual string ids are defined in +// svx/inc/accessibility.hrc, the strings are defined in +// svx/source/accessibility/accessibility.src +#define RID_SVXSTR_ACCESSIBILITY_START (RID_SVX_START + 860) +// RID_SVXSTR_ACCESSIBILITY_END (RID_SVX_START + 950) + +#define RID_SVXSTR_EXPORT_GRAPHIC_TITLE (RID_SVX_START + 984) + +#define RID_SVXFLOAT_EXTRUSION_DIRECTION (RID_SVX_START + 985) + +#define RID_SVX_EXTRUSION_BAR (RID_SVX_START + 986) +#define RID_SVX_FONTWORK_BAR (RID_SVX_START + 987) + +#define RID_SVXFLOAT_EXTRUSION_DEPTH (RID_SVX_START + 988) +#define RID_SVXFLOAT_EXTRUSION_LIGHTING (RID_SVX_START + 989) +#define RID_SVXFLOAT_EXTRUSION_SURFACE (RID_SVX_START + 990) +#define RID_SVXSTR_EXTRUSION_COLOR (RID_SVX_START + 991) + +#define RID_SVXSTR_DEPTH_0 (RID_SVX_START + 992) +#define RID_SVXSTR_DEPTH_1 (RID_SVX_START + 993) +#define RID_SVXSTR_DEPTH_2 (RID_SVX_START + 994) +#define RID_SVXSTR_DEPTH_3 (RID_SVX_START + 995) +#define RID_SVXSTR_DEPTH_4 (RID_SVX_START + 996) + +#define RID_SVXSTR_DEPTH_0_INCH (RID_SVX_START + 997) +#define RID_SVXSTR_DEPTH_1_INCH (RID_SVX_START + 998) +#define RID_SVXSTR_DEPTH_2_INCH (RID_SVX_START + 999) +#define RID_SVXSTR_DEPTH_3_INCH (RID_SVX_START + 1000) +#define RID_SVXSTR_DEPTH_4_INCH (RID_SVX_START + 1001) + +#define RID_SVXFLOAT_FONTWORK_ALIGNMENT (RID_SVX_START + 1002) +#define RID_SVXFLOAT_FONTWORK_CHARSPACING (RID_SVX_START + 1003) + +/* #i35426# DR 2004-10-19: (RID_SVX_START+1002) and (RID_SVX_START+1003) are + already used for RID_SVXFLOAT_FONTWORK_ALIGNMENT and + RID_SVXFLOAT_FONTWORK_CHARSPACING above. But these IDs describe floating + windows, and the following IDs are for strings, so this is no conflict. */ +#define RID_SVXSTR_PAGES (RID_SVX_START + 1002) + +#define RID_SVXSTR_UNDO_APPLY_FONTWORK_SHAPE (RID_SVX_START + 1118) +#define RID_SVXSTR_UNDO_APPLY_FONTWORK_SAME_LETTER_HEIGHT (RID_SVX_START + 1119) +#define RID_SVXSTR_UNDO_APPLY_FONTWORK_ALIGNMENT (RID_SVX_START + 1120) +#define RID_SVXSTR_UNDO_APPLY_FONTWORK_CHARACTER_SPACING (RID_SVX_START + 1122) +#define RID_SVXSTR_UNDO_APPLY_EXTRUSION_ON_OFF (RID_SVX_START + 1123) +#define RID_SVXSTR_UNDO_APPLY_EXTRUSION_ROTATE_DOWN (RID_SVX_START + 1124) +#define RID_SVXSTR_UNDO_APPLY_EXTRUSION_ROTATE_UP (RID_SVX_START + 1125) +#define RID_SVXSTR_UNDO_APPLY_EXTRUSION_ROTATE_LEFT (RID_SVX_START + 1126) +#define RID_SVXSTR_UNDO_APPLY_EXTRUSION_ROTATE_RIGHT (RID_SVX_START + 1127) +#define RID_SVXSTR_UNDO_APPLY_EXTRUSION_DEPTH (RID_SVX_START + 1128) +#define RID_SVXSTR_UNDO_APPLY_EXTRUSION_ORIENTATION (RID_SVX_START + 1129) +#define RID_SVXSTR_UNDO_APPLY_EXTRUSION_PROJECTION (RID_SVX_START + 1130) +#define RID_SVXSTR_UNDO_APPLY_EXTRUSION_LIGHTING (RID_SVX_START + 1131) +#define RID_SVXSTR_UNDO_APPLY_EXTRUSION_BRIGHTNESS (RID_SVX_START + 1132) +#define RID_SVXSTR_UNDO_APPLY_EXTRUSION_SURFACE (RID_SVX_START + 1133) +#define RID_SVXSTR_UNDO_APPLY_EXTRUSION_COLOR (RID_SVX_START + 1134) + +#define RID_SVXSTR_STYLEFAMILY_TABLEDESIGN (RID_SVX_START + 1168) + // if you add here, remember to adjust RID_SVXSTR_NEXTFREE + +#define RID_SVXSTR_BULLET_DESCRIPTIONS (RID_SVX_START + 1138)//? +#define RID_SVXSTR_SINGLENUM_DESCRIPTIONS (RID_SVX_START + 1146)//? +#define RID_SVXSTR_OUTLINENUM_DESCRIPTIONS (RID_SVX_START + 1154)//? +#define RID_SVXSTR_BULLET_DESCRIPTION_0 (RID_SVXSTR_BULLET_DESCRIPTIONS + 0)//? +#define RID_SVXSTR_BULLET_DESCRIPTION_1 (RID_SVXSTR_BULLET_DESCRIPTIONS + 1)//? +#define RID_SVXSTR_BULLET_DESCRIPTION_2 (RID_SVXSTR_BULLET_DESCRIPTIONS + 2)//? +#define RID_SVXSTR_BULLET_DESCRIPTION_3 (RID_SVXSTR_BULLET_DESCRIPTIONS + 3)//? +#define RID_SVXSTR_BULLET_DESCRIPTION_4 (RID_SVXSTR_BULLET_DESCRIPTIONS + 4)//? +#define RID_SVXSTR_BULLET_DESCRIPTION_5 (RID_SVXSTR_BULLET_DESCRIPTIONS + 5)//? +#define RID_SVXSTR_BULLET_DESCRIPTION_6 (RID_SVXSTR_BULLET_DESCRIPTIONS + 6)//? +#define RID_SVXSTR_BULLET_DESCRIPTION_7 (RID_SVXSTR_BULLET_DESCRIPTIONS + 7)//? +#define RID_SVXSTR_SINGLENUM_DESCRIPTION_0 (RID_SVXSTR_SINGLENUM_DESCRIPTIONS + 0)//? +#define RID_SVXSTR_SINGLENUM_DESCRIPTION_1 (RID_SVXSTR_SINGLENUM_DESCRIPTIONS + 1)//? +#define RID_SVXSTR_SINGLENUM_DESCRIPTION_2 (RID_SVXSTR_SINGLENUM_DESCRIPTIONS + 2)//? +#define RID_SVXSTR_SINGLENUM_DESCRIPTION_3 (RID_SVXSTR_SINGLENUM_DESCRIPTIONS + 3)//? +#define RID_SVXSTR_SINGLENUM_DESCRIPTION_4 (RID_SVXSTR_SINGLENUM_DESCRIPTIONS + 4)//? +#define RID_SVXSTR_SINGLENUM_DESCRIPTION_5 (RID_SVXSTR_SINGLENUM_DESCRIPTIONS + 5)//? +#define RID_SVXSTR_SINGLENUM_DESCRIPTION_6 (RID_SVXSTR_SINGLENUM_DESCRIPTIONS + 6)//? +#define RID_SVXSTR_SINGLENUM_DESCRIPTION_7 (RID_SVXSTR_SINGLENUM_DESCRIPTIONS + 7)//? +#define RID_SVXSTR_OUTLINENUM_DESCRIPTION_0 (RID_SVXSTR_OUTLINENUM_DESCRIPTIONS + 0)//? +#define RID_SVXSTR_OUTLINENUM_DESCRIPTION_1 (RID_SVXSTR_OUTLINENUM_DESCRIPTIONS + 1)//? +#define RID_SVXSTR_OUTLINENUM_DESCRIPTION_2 (RID_SVXSTR_OUTLINENUM_DESCRIPTIONS + 2)//? +#define RID_SVXSTR_OUTLINENUM_DESCRIPTION_3 (RID_SVXSTR_OUTLINENUM_DESCRIPTIONS + 3)//? +#define RID_SVXSTR_OUTLINENUM_DESCRIPTION_4 (RID_SVXSTR_OUTLINENUM_DESCRIPTIONS + 4)//? +#define RID_SVXSTR_OUTLINENUM_DESCRIPTION_5 (RID_SVXSTR_OUTLINENUM_DESCRIPTIONS + 5)//? +#define RID_SVXSTR_OUTLINENUM_DESCRIPTION_6 (RID_SVXSTR_OUTLINENUM_DESCRIPTIONS + 6)//? +#define RID_SVXSTR_OUTLINENUM_DESCRIPTION_7 (RID_SVXSTR_OUTLINENUM_DESCRIPTIONS + 7)//? + +#define RID_SVXSTR_FINDBAR_FIND (RID_SVX_START + 1190) + +#define RID_SVXSTR_NEXTFREE (RID_SVX_START + 1191) + +#define RID_SVXSTR_TEXTCOLOR (RID_SVX_START + 1178) +// ---------------------------------------------------------------------------- +// if we have _a_lot_ time, we should group the resource ids by type, instead +// of grouping them by semantics. The reason is that resource ids have to be +// unique relative to a fixed type (you can't have two dialogs with the same +// resource id), but they do not need to be unique gloablly (means you can have +// a dialog and a string, both with the same id) +// I suggest sticking to per-type ids instead of per-semantic ids, this is +// better maintainable (IMO), and does not waste that much ids + +// ---------------------------------------------------------------------------- +// "Window" resource ids + + +// ---------------------------------------------------------------------------- +// "ModalDialog" resource ids + +#define RID_SVX_MDLG_FONTWORK_GALLERY ( RID_SVX_START + 2 ) +#define RID_SVX_MDLG_EXTRUSION_DEPTH ( RID_SVX_START + 3 ) + +// ---------------------------------------------------------------------------- +// "Menu" resource ids +#define RID_SVX_MDLG_FONTWORK_CHARSPACING ( RID_SVX_START + 19 ) + +// document recovery and error report +// recycling ids from DBMgr +#define RID_SVX_MDLG_DOCRECOVERY_PROGR ( RID_SVX_START + 11 ) +#define RID_SVX_MDLG_DOCRECOVERY_BROKEN ( RID_SVX_START + 12 ) +#define RID_SVX_MDLG_ERR_REP_OPTIONS ( RID_SVX_START + 13 ) +#define RID_SVX_MDLG_ERR_REP_PREVIEW ( RID_SVX_START + 14 ) + +#define RID_SVX_TABDLG_DOCRECOVERY ( RID_SVX_START + 0 ) + +#define RID_SVXPAGE_DOCRECOVERY_SAVE ( RID_SVX_START + 8 ) +#define RID_SVXPAGE_DOCRECOVERY_RECOVER ( RID_SVX_START + 9 ) +#define RID_SVXPAGE_ERR_REP_WELCOME ( RID_SVX_START + 10 ) +#define RID_SVXPAGE_ERR_REP_SEND ( RID_SVX_START + 11 ) + +// ---------------------------------------------------------------------------- + +// !!!! double defined ID's (see below) !!! +#define RID_OFA_AUTOCORR_DLG (RID_OFA_START + 101) + +#define RID_OFA_GENERAL_OPTIONS_DLG (RID_OFA_START + 105) +#define RID_OFADLG_INTERNET (RID_OFA_START + 106) +#define RID_OFA_TABNEW_DLG (RID_OFA_START + 107) +#define RID_OFADLG_BROWSER (RID_OFA_START + 108) +#define RID_OFA_FORMNEW_DLG (RID_OFA_START + 112) +#define RID_OFA_TABPROPERTIES (RID_OFA_START + 113) +#define RID_OFADLG_REGISTRATION (RID_OFA_START + 114) +#define RID_OFADLG_AWCP_VALUES (RID_OFA_START + 117) + +// TabPages -------------------------------------------------------------- + +// !!!! double defined ID's (see above) !!! + +#define OFA_TP_APPEARANCE (RID_OFA_START + 203) +#define OFA_TP_TABPROPERTIES_GENERAL (RID_OFA_START + 204) + +//the RID_??_TP_* are duplicate in offids.hrc + +#define RID_SW_TP_LAYOUT_OPT (RID_OFA_START + 207) +#define RID_SW_TP_OPTINSERT_PAGE (RID_OFA_START + 213) +#define RID_SW_TP_OPTTEST_PAGE (RID_OFA_START + 215) +#define RID_SW_TP_OPTSRCVIEW (RID_OFA_START + 216) +#define RID_SW_TP_OPTINSERT_HTML_PAGE (RID_OFA_START + 238) +#define RID_SW_TP_HTML_LAYOUT_OPT (RID_OFA_START + 241) +#define SID_SD_TP_LAYOUT (RID_OFA_START + 226) +#define SID_SD_TP_SCALE (RID_OFA_START + 228) +#define SID_SD_TP_GRID (RID_OFA_START + 229) +#define SID_SI_TP_LAYOUT (RID_OFA_START + 233) +#define SID_SI_TP_GRID (RID_OFA_START + 235) +#define SID_SC_TP_MISC (RID_OFA_START + 239) +#define OFA_TP_TABPROPERTIES_TEXT (RID_OFA_START + 245) +#define OFA_TP_HELPERPROG (RID_OFA_START + 249) +#define STR_COLORTABLE (RID_OFA_START + 257) +#define STR_SWITCH (RID_OFA_START + 258) +#define SID_SC_TP_FORMULA (RID_OFA_START + 259) +#define SID_SC_TP_COMPATIBILITY (RID_OFA_START + 260) + +// ---------------------------------------------------------------------------- +// ooo-build specific resources + +#define SVX_OOO_BUILD_START (RID_SVX_START + 1200) + +#define RID_SVXBMP_DOC_MODIFIED_YES (SVX_OOO_BUILD_START + 1) +#define RID_SVXBMP_DOC_MODIFIED_NO (SVX_OOO_BUILD_START + 2) +#define RID_SVXBMP_DOC_MODIFIED_FEEDBACK (SVX_OOO_BUILD_START + 3) +#define RID_SVXSTR_DOC_MODIFIED_YES (SVX_OOO_BUILD_START + 4) +#define RID_SVXSTR_DOC_MODIFIED_NO (SVX_OOO_BUILD_START + 5) +#define RID_SVXSTR_DOC_LOAD (SVX_OOO_BUILD_START + 6) + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/dlgctl3d.hxx b/include/svx/dlgctl3d.hxx new file mode 100644 index 000000000000..cc45a444c99c --- /dev/null +++ b/include/svx/dlgctl3d.hxx @@ -0,0 +1,204 @@ +/* -*- 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 _SVX_DLGCTL3D_HXX +#define _SVX_DLGCTL3D_HXX + +#include <vcl/ctrl.hxx> +#include <vcl/scrbar.hxx> +#include <vcl/button.hxx> +#include <svl/itemset.hxx> +#include "svx/svxdllapi.h" +#include <basegfx/vector/b3dvector.hxx> + +////////////////////////////////////////////////////////////////////////////// + +class FmFormModel; +class FmFormPage; +class E3dView; +class E3dPolyScene; +class E3dObject; + +////////////////////////////////////////////////////////////////////////////// + +#define PREVIEW_OBJECTTYPE_SPHERE 0x0000 +#define PREVIEW_OBJECTTYPE_CUBE 0x0001 + +////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC Svx3DPreviewControl : public Control +{ +protected: + FmFormModel* mpModel; + FmFormPage* mpFmPage; + E3dView* mp3DView; + E3dPolyScene* mpScene; + E3dObject* mp3DObj; + sal_uInt16 mnObjectType; + + void Construct(); + +public: + Svx3DPreviewControl(Window* pParent, const ResId& rResId); + Svx3DPreviewControl(Window* pParent, WinBits nStyle = 0); + ~Svx3DPreviewControl(); + + virtual void Paint( const Rectangle& rRect ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void Resize(); + + void Reset(); + virtual void SetObjectType(sal_uInt16 nType); + sal_uInt16 GetObjectType() const { return( mnObjectType ); } + SfxItemSet Get3DAttributes() const; + virtual void Set3DAttributes(const SfxItemSet& rAttr); +}; + +////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC Svx3DLightControl : public Svx3DPreviewControl +{ + // Callback for interactive changes + Link maUserInteractiveChangeCallback; + Link maUserSelectionChangeCallback; + Link maChangeCallback; + Link maSelectionChangeCallback; + + // lights + sal_uInt32 maSelectedLight; + + // extra objects for light control + E3dObject* mpExpansionObject; + E3dObject* mpLampBottomObject; + E3dObject* mpLampShaftObject; + std::vector< E3dObject* > maLightObjects; + + // 3d rotations of object + double mfRotateX; + double mfRotateY; + double mfRotateZ; + + // interaction parameters + Point maActionStartPoint; + sal_Int32 mnInteractionStartDistance; + double mfSaveActionStartHor; + double mfSaveActionStartVer; + double mfSaveActionStartRotZ; + + // bitfield + unsigned mbMouseMoved : 1; + unsigned mbGeometrySelected : 1; + + void Construct2(); + void ConstructLightObjects(); + void AdaptToSelectedLight(); + void TrySelection(Point aPosPixel); + +public: + Svx3DLightControl(Window* pParent, WinBits nStyle = 0); + ~Svx3DLightControl(); + + virtual void Paint(const Rectangle& rRect); + virtual void MouseButtonDown(const MouseEvent& rMEvt); + virtual void Tracking( const TrackingEvent& rTEvt ); + virtual void Resize(); + + virtual void SetObjectType(sal_uInt16 nType); + + // register user callback + void SetUserInteractiveChangeCallback(Link aNew) { maUserInteractiveChangeCallback = aNew; } + void SetUserSelectionChangeCallback(Link aNew) { maUserSelectionChangeCallback = aNew; } + void SetChangeCallback(Link aNew) { maChangeCallback = aNew; } + void SetSelectionChangeCallback(Link aNew) { maSelectionChangeCallback = aNew; } + + // selection checks + bool IsSelectionValid(); + bool IsGeometrySelected() { return mbGeometrySelected; } + + // get/set position of selected lamp in polar coordinates, Hor:[0..360.0[ and Ver:[-90..90] degrees + void GetPosition(double& rHor, double& rVer); + void SetPosition(double fHor, double fVer); + + // get/set rotation of 3D object + void SetRotation(double fRotX, double fRotY, double fRotZ); + void GetRotation(double& rRotX, double& rRotY, double& rRotZ); + + void SelectLight(sal_uInt32 nLightNumber); + virtual void Set3DAttributes(const SfxItemSet& rAttr); + sal_uInt32 GetSelectedLight() { return maSelectedLight; } + + // light data access + bool GetLightOnOff(sal_uInt32 nNum) const; + Color GetLightColor(sal_uInt32 nNum) const; + basegfx::B3DVector GetLightDirection(sal_uInt32 nNum) const; +}; + +////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SvxLightCtl3D : public Control +{ +private: + // local controls + Svx3DLightControl maLightControl; + ScrollBar maHorScroller; + ScrollBar maVerScroller; + PushButton maSwitcher; + + // callback for interactive changes + Link maUserInteractiveChangeCallback; + Link maUserSelectionChangeCallback; + +public: + SvxLightCtl3D( Window* pParent, const ResId& rResId); + ~SvxLightCtl3D(); + + // react to size changes + virtual void Resize(); + void NewLayout(); + + // check the selection for validity + void CheckSelection(); + + // bring further settings to the outside world + Svx3DLightControl& GetSvx3DLightControl() { return maLightControl; } + + // register user callback + void SetUserInteractiveChangeCallback(Link aNew) { maUserInteractiveChangeCallback = aNew; } + void SetUserSelectionChangeCallback(Link aNew) { maUserSelectionChangeCallback = aNew; } + + virtual void KeyInput( const KeyEvent& rKEvt ); + virtual void GetFocus(); + virtual void LoseFocus(); + +protected: + + DECL_LINK( InternalInteractiveChange, void*); + DECL_LINK( InternalSelectionChange, void*); + DECL_LINK( ScrollBarMove, void*); + DECL_LINK( ButtonPress, void*); + + // initialize local parameters + void Init(); + + void move( double fDeltaHor, double fDeltaVer ); +}; + +#endif // _SCH_DLGCTL3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/dlgctrl.hxx b/include/svx/dlgctrl.hxx new file mode 100644 index 000000000000..7297bd559bb5 --- /dev/null +++ b/include/svx/dlgctrl.hxx @@ -0,0 +1,449 @@ +/* -*- 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 _SVX_DLG_CTRL_HXX +#define _SVX_DLG_CTRL_HXX + +#include <svtools/ctrlbox.hxx> +#include <sfx2/tabdlg.hxx> +#include "svx/svxdllapi.h" +#include <svx/rectenum.hxx> +#include <vcl/graph.hxx> +#include <svx/xtable.hxx> + +class XOBitmap; +class XOutdevItemPool; + +namespace com { namespace sun { namespace star { namespace awt { + struct Point; +} } } } + +/************************************************************************* +|* Derived from SfxTabPage for being able to get notified through the +|* virtual method from the control. +\************************************************************************/ + +class SvxTabPage : public SfxTabPage +{ + +public: + SvxTabPage(Window* pParent, ResId Id, const SfxItemSet& rInAttrs) + : SfxTabPage(pParent, Id, rInAttrs) + { + } + SvxTabPage(Window *pParent, const OString& rID, const OUString& rUIXMLDescription, const SfxItemSet &rAttrSet) + : SfxTabPage(pParent, rID, rUIXMLDescription, rAttrSet) + { + } + virtual void PointChanged( Window* pWindow, RECT_POINT eRP ) = 0; +}; + +/************************************************************************* +|* Control for display and selection of the corner and center points of +|* an object +\************************************************************************/ + +typedef sal_uInt16 CTL_STATE; +#define CS_NOHORZ 1 // no horizontal input information is used +#define CS_NOVERT 2 // no vertikal input information is used + +class SvxRectCtlAccessibleContext; + +class SVX_DLLPUBLIC SvxRectCtl : public Control +{ +private: + SVX_DLLPRIVATE void InitSettings( sal_Bool bForeground, sal_Bool bBackground ); + SVX_DLLPRIVATE void InitRectBitmap( void ); + SVX_DLLPRIVATE Bitmap& GetRectBitmap( void ); + SVX_DLLPRIVATE void Resize_Impl(); + +protected: + SvxRectCtlAccessibleContext* pAccContext; + sal_uInt16 nBorderWidth; + sal_uInt16 nRadius; + Size aSize; + Point aPtLT, aPtMT, aPtRT; + Point aPtLM, aPtMM, aPtRM; + Point aPtLB, aPtMB, aPtRB; + Point aPtNew; + RECT_POINT eRP, eDefRP; + CTL_STYLE eCS; + Bitmap* pBitmap; + CTL_STATE m_nState; + + sal_Bool mbCompleteDisable; + + RECT_POINT GetRPFromPoint( Point ) const; + Point GetPointFromRP( RECT_POINT ) const; + void SetFocusRect( const Rectangle* pRect = NULL ); // pRect == NULL -> calculate rectangle in method + Point SetActualRPWithoutInvalidate( RECT_POINT eNewRP ); // returns the last point + + virtual void GetFocus(); + virtual void LoseFocus(); + + Point GetApproxLogPtFromPixPt( const Point& rRoughPixelPoint ) const; +public: + SvxRectCtl( Window* pParent, const ResId& rResId, RECT_POINT eRpt = RP_MM, + sal_uInt16 nBorder = 200, sal_uInt16 nCircle = 80, CTL_STYLE eStyle = CS_RECT ); + SvxRectCtl( Window* pParent, RECT_POINT eRpt = RP_MM, + sal_uInt16 nBorder = 200, sal_uInt16 nCircle = 80, CTL_STYLE eStyle = CS_RECT ); + virtual ~SvxRectCtl(); + + virtual void Paint( const Rectangle& rRect ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void KeyInput( const KeyEvent& rKeyEvt ); + virtual void StateChanged( StateChangedType nStateChange ); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + virtual void Resize(); + + void Reset(); + RECT_POINT GetActualRP() const; + void SetActualRP( RECT_POINT eNewRP ); + + void SetState( CTL_STATE nState ); + + sal_uInt8 GetNumOfChildren( void ) const; // returns number of usable radio buttons + + Rectangle CalculateFocusRectangle( void ) const; + Rectangle CalculateFocusRectangle( RECT_POINT eRectPoint ) const; + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible(); + + RECT_POINT GetApproxRPFromPixPt( const ::com::sun::star::awt::Point& rPixelPoint ) const; + + sal_Bool IsCompletelyDisabled() const { return mbCompleteDisable; } + void DoCompletelyDisable(sal_Bool bNew); +}; + +/************************************************************************* +|* Preview control for the display of bitmaps +\************************************************************************/ + +class SVX_DLLPUBLIC SvxBitmapCtl +{ +protected: + Size aSize; + sal_uInt16 nLines; + Color aPixelColor, aBackgroundColor; + const sal_uInt16* pBmpArray; + +public: + SvxBitmapCtl( Window* pParent, const Size& rSize ); + ~SvxBitmapCtl(); + + BitmapEx GetBitmapEx(); + + void SetBmpArray( const sal_uInt16* pPixel ) { pBmpArray = pPixel; } + void SetLines( sal_uInt16 nLns ) { nLines = nLns; } + void SetPixelColor( Color aColor ) { aPixelColor = aColor; } + void SetBackgroundColor( Color aColor ) { aBackgroundColor = aColor; } +}; + +/************************************************************************* +|* Control for editing bitmaps +\************************************************************************/ + +class SVX_DLLPUBLIC SvxPixelCtl : public Control +{ +private: + using OutputDevice::SetLineColor; + +protected: + sal_uInt16 nLines, nSquares; + Color aPixelColor; + Color aBackgroundColor; + Color aLineColor; + Size aRectSize; + sal_uInt16* pPixel; + sal_Bool bPaintable; + + void ChangePixel( sal_uInt16 nPixel ); + +public: + SvxPixelCtl( Window* pParent, const ResId& rResId, + sal_uInt16 nNumber = 8 ); + ~SvxPixelCtl(); + + virtual void Paint( const Rectangle& rRect ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + + void SetXBitmap( const BitmapEx& rBitmapEx ); + + void SetPixelColor( const Color& rCol ) { aPixelColor = rCol; } + void SetBackgroundColor( const Color& rCol ) { aBackgroundColor = rCol; } + void SetLineColor( const Color& rCol ) { aLineColor = rCol; } + + sal_uInt16 GetLineCount() const { return nLines; } + Color GetPixelColor() const { return aPixelColor; } + Color GetBackgroundColor() const { return aBackgroundColor; } + + sal_uInt16* GetBitmapPixelPtr() { return pPixel; } + + void SetPaintable( sal_Bool bTmp ) { bPaintable = bTmp; } + void Reset(); +}; + +/************************************************************************/ + +class SVX_DLLPUBLIC ColorLB : public ColorListBox +{ + +public: + ColorLB( Window* pParent, ResId Id ) : ColorListBox( pParent, Id ) {} + ColorLB( Window* pParent, WinBits aWB ) : ColorListBox( pParent, aWB ) {} + + virtual void Fill( const XColorListRef &pTab ); + + void Append( XColorEntry* pEntry, Bitmap* pBmp = NULL ); + void Modify( XColorEntry* pEntry, sal_uInt16 nPos, Bitmap* pBmp = NULL ); +}; + +/************************************************************************/ + +class SVX_DLLPUBLIC HatchingLB : public ListBox +{ + XHatchListRef mpList; + sal_Bool mbUserDraw; +public: + HatchingLB( Window* pParent, ResId Id, sal_Bool bUserDraw = sal_True ); + + virtual void Fill( const XHatchListRef &pList ); + virtual void UserDraw( const UserDrawEvent& rUDEvt ); + + void Append( XHatchEntry* pEntry, Bitmap* pBmp = NULL ); + void Modify( XHatchEntry* pEntry, sal_uInt16 nPos, Bitmap* pBmp = NULL ); +}; + +/************************************************************************/ + +class SVX_DLLPUBLIC GradientLB : public ListBox +{ + XGradientListRef mpList; + sal_Bool mbUserDraw; +public: + GradientLB( Window* pParent, ResId Id, sal_Bool bUserDraw = sal_True ); + GradientLB( Window* pParent, WinBits aWB, sal_Bool bUserDraw = sal_True ); + + virtual void Fill( const XGradientListRef &pList ); + virtual void UserDraw( const UserDrawEvent& rUDEvt ); + + void Append( XGradientEntry* pEntry, Bitmap* pBmp = NULL ); + void Modify( XGradientEntry* pEntry, sal_uInt16 nPos, Bitmap* pBmp = NULL ); + void SelectEntryByList( const XGradientListRef &pList, const String& rStr, + const XGradient& rXGradient, sal_uInt16 nDist = 0 ); +}; + +/************************************************************************/ + +class SVX_DLLPUBLIC BitmapLB : public ListBox +{ +public: + BitmapLB(Window* pParent, ResId Id, bool bUserDraw = true); + + virtual void Fill(const XBitmapListRef &pList); + virtual void UserDraw(const UserDrawEvent& rUDEvt); + + void Append(XBitmapEntry* pEntry, BitmapEx* pBmpEx = NULL); + void Modify(XBitmapEntry* pEntry, sal_uInt16 nPos, BitmapEx* pBmpEx = NULL); + +private: + VirtualDevice maVD; + BitmapEx maBitmapEx; + + XBitmapListRef mpList; + bool mbUserDraw; + + SVX_DLLPRIVATE void SetVirtualDevice(); +}; + +/************************************************************************/ + +class FillAttrLB : public ColorListBox +{ +private: + VirtualDevice maVD; + BitmapEx maBitmapEx; + + void SetVirtualDevice(); + +public: + FillAttrLB( Window* pParent, WinBits aWB ); + + virtual void Fill( const XColorListRef &pList ); + virtual void Fill( const XHatchListRef &pList ); + virtual void Fill( const XGradientListRef &pList ); + virtual void Fill( const XBitmapListRef &pList ); +}; + +/************************************************************************/ + +class FillTypeLB : public ListBox +{ + +public: + FillTypeLB( Window* pParent, ResId Id ) : ListBox( pParent, Id ) {} + FillTypeLB( Window* pParent, WinBits aWB ) : ListBox( pParent, aWB ) {} + + virtual void Fill(); +}; + +/************************************************************************/ + +class SVX_DLLPUBLIC LineLB : public ListBox +{ + +public: + LineLB( Window* pParent, ResId Id ) : ListBox( pParent, Id ) {} + LineLB( Window* pParent, WinBits aWB ) : ListBox( pParent, aWB ) {} + + virtual void Fill( const XDashListRef &pList ); + + void Append( XDashEntry* pEntry, Bitmap* pBmp = NULL ); + void Modify( XDashEntry* pEntry, sal_uInt16 nPos, Bitmap* pBmp = NULL ); + void FillStyles(); +}; + +/************************************************************************/ + +class SVX_DLLPUBLIC LineEndLB : public ListBox +{ + +public: + LineEndLB( Window* pParent, ResId Id ) : ListBox( pParent, Id ) {} + LineEndLB( Window* pParent, WinBits aWB ) : ListBox( pParent, aWB ) {} + + virtual void Fill( const XLineEndListRef &pList, sal_Bool bStart = sal_True ); + + void Append( XLineEndEntry* pEntry, Bitmap* pBmp = NULL, + sal_Bool bStart = sal_True ); + void Modify( XLineEndEntry* pEntry, sal_uInt16 nPos, Bitmap* pBmp = NULL, + sal_Bool bStart = sal_True ); +}; + +////////////////////////////////////////////////////////////////////////////// + +class SdrObject; +class SdrModel; + +class SvxPreviewBase : public Control +{ +private: + SdrModel* mpModel; + VirtualDevice* mpBufferDevice; + +protected: + void InitSettings(bool bForeground, bool bBackground); + + // prepare buffered paint + void LocalPrePaint(); + + // end and output buffered paint + void LocalPostPaint(); + +public: + SvxPreviewBase(Window* pParent, const ResId& rResId); + SvxPreviewBase(Window* pParent); + virtual ~SvxPreviewBase(); + + // change support + virtual void StateChanged(StateChangedType nStateChange); + virtual void DataChanged(const DataChangedEvent& rDCEvt); + + // dada read access + SdrModel& getModel() const { return *mpModel; } + OutputDevice& getBufferDevice() const { return *mpBufferDevice; } +}; + +/************************************************************************* +|* +|* SvxLinePreview +|* +\************************************************************************/ + +class SVX_DLLPUBLIC SvxXLinePreview : public SvxPreviewBase +{ +private: + SdrObject* mpLineObjA; + SdrObject* mpLineObjB; + SdrObject* mpLineObjC; + + Graphic* mpGraphic; + sal_Bool mbWithSymbol; + Size maSymbolSize; + +public: + SvxXLinePreview( Window* pParent, const ResId& rResId ); + virtual ~SvxXLinePreview(); + + void SetLineAttributes(const SfxItemSet& rItemSet); + + void ShowSymbol( sal_Bool b ) { mbWithSymbol = b; }; + void SetSymbol( Graphic* p, const Size& s ); + void ResizeSymbol( const Size& s ); + + virtual void Paint( const Rectangle& rRect ); +}; + +/************************************************************************* +|* +|* SvxXRectPreview +|* +\************************************************************************/ + +class SVX_DLLPUBLIC SvxXRectPreview : public SvxPreviewBase +{ +private: + SdrObject* mpRectangleObject; + +public: + SvxXRectPreview(Window* pParent, const ResId& rResId); + SvxXRectPreview(Window* pParent); + virtual ~SvxXRectPreview(); + + void SetAttributes(const SfxItemSet& rItemSet); + + virtual void Paint( const Rectangle& rRect ); + virtual void Resize(); +}; + +/************************************************************************* +|* +|* SvxXShadowPreview +|* +\************************************************************************/ + +class SVX_DLLPUBLIC SvxXShadowPreview : public SvxPreviewBase +{ +private: + SdrObject* mpRectangleObject; + SdrObject* mpRectangleShadow; + +public: + SvxXShadowPreview( Window* pParent, const ResId& rResId ); + virtual ~SvxXShadowPreview(); + + void SetRectangleAttributes(const SfxItemSet& rItemSet); + void SetShadowAttributes(const SfxItemSet& rItemSet); + void SetShadowPosition(const Point& rPos); + + virtual void Paint( const Rectangle& rRect ); +}; + +#endif // _SVX_DLG_CTRL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/dlgutil.hxx b/include/svx/dlgutil.hxx new file mode 100644 index 000000000000..238a90dd121a --- /dev/null +++ b/include/svx/dlgutil.hxx @@ -0,0 +1,40 @@ +/* -*- 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 _SVX_DLGUTIL_HXX +#define _SVX_DLGUTIL_HXX + +#include <svtools/unitconv.hxx> +#include <svx/svxdllapi.h> + +// macro ----------------------------------------------------------------- + +// typedef --------------------------------------------------------------- + +// Functions ------------------------------------------------------------- +class SfxItemSet; + +SVX_DLLPUBLIC FieldUnit GetModuleFieldUnit( const SfxItemSet& ); +SVX_DLLPUBLIC bool GetApplyCharUnit( const SfxItemSet& ); + +static const int OUTPUT_DRAWMODE_COLOR = (DRAWMODE_DEFAULT); +static const int OUTPUT_DRAWMODE_CONTRAST = (DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/drawitem.hxx b/include/svx/drawitem.hxx new file mode 100644 index 000000000000..16447dce67cc --- /dev/null +++ b/include/svx/drawitem.hxx @@ -0,0 +1,213 @@ +/* -*- 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 _SVX_DRAWITEM_HXX +#define _SVX_DRAWITEM_HXX + +#include <svl/poolitem.hxx> +#include <svx/xtable.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include <com/sun/star/drawing/LineDash.hpp> +#include "svx/svxdllapi.h" + +//================================================================== +// SvxColorListItem +//================================================================== + +class SVX_DLLPUBLIC SvxColorListItem: public SfxPoolItem +{ + XColorListRef pColorList; + +public: + TYPEINFO(); + SvxColorListItem(); + SvxColorListItem( XColorListRef pTable, + sal_uInt16 nWhich ); + SvxColorListItem( const SvxColorListItem& ); + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) 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 ); + + XColorListRef GetColorList() const { return pColorList; } + void SetColorList( const XColorListRef &pTable ) { pColorList = pTable; } +}; + + +//================================================================== +// SvxGradientListItem +//================================================================== + +class SVX_DLLPUBLIC SvxGradientListItem: public SfxPoolItem +{ + XGradientListRef pGradientList; + +public: + TYPEINFO(); + SvxGradientListItem(); + SvxGradientListItem( XGradientListRef pList, + sal_uInt16 nWhich ); + SvxGradientListItem( const SvxGradientListItem& ); + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) 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 ); + + XGradientListRef GetGradientList() const { return pGradientList; } + void SetGradientList( XGradientListRef pList ) { + pGradientList = pList; } +}; + + +//================================================================== +// SvxHatchListItem +//================================================================== +class SVX_DLLPUBLIC SvxHatchListItem: public SfxPoolItem +{ + XHatchListRef pHatchList; + +public: + TYPEINFO(); + SvxHatchListItem(); + SvxHatchListItem( XHatchListRef pList, + sal_uInt16 nWhich ); + SvxHatchListItem( const SvxHatchListItem& ); + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) 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 ); + + XHatchListRef GetHatchList() const { return pHatchList; } + void SetHatchList( XHatchListRef pList ) { + pHatchList = pList; } +}; + + + +//================================================================== +// SvxBitmapListItem +//================================================================== +class SVX_DLLPUBLIC SvxBitmapListItem: public SfxPoolItem +{ + XBitmapListRef pBitmapList; + +public: + TYPEINFO(); + SvxBitmapListItem(); + SvxBitmapListItem( XBitmapListRef pBL, + sal_uInt16 nWhich ); + SvxBitmapListItem( const SvxBitmapListItem& ); + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) 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 ); + + XBitmapListRef GetBitmapList() const { return pBitmapList; } + void SetBitmapList( XBitmapListRef pList ) { + pBitmapList = pList; } +}; + + + +//================================================================== +// SvxDashListItem +//================================================================== +class SVX_DLLPUBLIC SvxDashListItem: public SfxPoolItem +{ + XDashListRef pDashList; + +public: + TYPEINFO(); + SvxDashListItem(); + SvxDashListItem( XDashListRef pList, + sal_uInt16 nWhich ); + SvxDashListItem( const SvxDashListItem& ); + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) 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 ); + + XDashListRef GetDashList() const { return pDashList; } +}; + + +//================================================================== +// SvxLineEndListItem +//================================================================== +class SVX_DLLPUBLIC SvxLineEndListItem: public SfxPoolItem +{ + XLineEndListRef pLineEndList; + +public: + TYPEINFO(); + SvxLineEndListItem(); + SvxLineEndListItem( XLineEndListRef pList, + sal_uInt16 nWhich ); + SvxLineEndListItem( const SvxLineEndListItem& ); + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) 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 ); + + XLineEndListRef GetLineEndList() const { return pLineEndList; } + void SetLineEndList( XLineEndListRef pList ) { + pLineEndList = pList; } +}; + + + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/dstribut_enum.hxx b/include/svx/dstribut_enum.hxx new file mode 100644 index 000000000000..58d798311d3f --- /dev/null +++ b/include/svx/dstribut_enum.hxx @@ -0,0 +1,42 @@ +/* -*- 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 _SVX_DSTRIBUT_ENUM_HXX +#define _SVX_DSTRIBUT_ENUM_HXX + +enum SvxDistributeHorizontal +{ + SvxDistributeHorizontalNone = 0, + SvxDistributeHorizontalLeft, + SvxDistributeHorizontalCenter, + SvxDistributeHorizontalDistance, + SvxDistributeHorizontalRight +}; + +enum SvxDistributeVertical +{ + SvxDistributeVerticalNone = 0, + SvxDistributeVerticalTop, + SvxDistributeVerticalCenter, + SvxDistributeVerticalDistance, + SvxDistributeVerticalBottom +}; + +#endif // _SVX_DSTRIBUT_ENUM_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/e3ditem.hxx b/include/svx/e3ditem.hxx new file mode 100644 index 000000000000..dfd722cd8347 --- /dev/null +++ b/include/svx/e3ditem.hxx @@ -0,0 +1,65 @@ +/* -*- 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 _SVXE3DITEM_HXX +#define _SVXE3DITEM_HXX + +#include <svl/poolitem.hxx> +#include <basegfx/vector/b3dvector.hxx> +#include "svx/svxdllapi.h" + +#ifndef _SVXVECT3DITEM_HXX +#define _SVXVECT3DITEM_HXX + +class SvStream; + +class SVX_DLLPUBLIC SvxB3DVectorItem : public SfxPoolItem +{ + basegfx::B3DVector aVal; + +public: + TYPEINFO(); + SvxB3DVectorItem(); + SvxB3DVectorItem( sal_uInt16 nWhich, const basegfx::B3DVector& rVal ); + SvxB3DVectorItem( const SvxB3DVectorItem& ); + ~SvxB3DVectorItem(); + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + virtual SfxPoolItem* Create(SvStream &, sal_uInt16 nVersion) const; + virtual SvStream& Store(SvStream &, sal_uInt16 nItemVersion ) 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 ); + + const basegfx::B3DVector& GetValue() const { return aVal; } + void SetValue( const basegfx::B3DVector& rNewVal ) { + DBG_ASSERT( GetRefCount() == 0, "SetValue() with pooled item" ); + aVal = rNewVal; + } + + virtual sal_uInt16 GetVersion (sal_uInt16 nFileFormatVersion) const; +}; + +#endif + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/e3dsceneupdater.hxx b/include/svx/e3dsceneupdater.hxx new file mode 100644 index 000000000000..a0223fbf9ed4 --- /dev/null +++ b/include/svx/e3dsceneupdater.hxx @@ -0,0 +1,68 @@ +/* -*- 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 _E3D_SCENEUPDATER_HXX +#define _E3D_SCENEUPDATER_HXX + +#include <svx/svxdllapi.h> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrObject; +class E3dScene; +namespace drawinglayer { namespace geometry { + class ViewInformation3D; +}} + +////////////////////////////////////////////////////////////////////////////// +// This class is a helper to encapsulate 3D object changes which shall change the +// scene's 2D geometry. E.g. when moving one 3D object in a scene, the visualisation +// would not change since the scene's 2D attributes are defined by it's 2D object +// transformation and the changed content would be projected to the same 2D bounds +// as before. To reflect the fact that the 2D positions may 'change' for the user's +// imagination, it is necessary to calculate a new 2D object transformation of the scene +// (the SnapRect) using the old 3D transformation stack and the eventually changed +// 3D content and tu use it. This is only wanted if changes to the scene's +// content are intended to change the scene's 2D geometry attributes + +class SVX_DLLPUBLIC E3DModifySceneSnapRectUpdater +{ + // the scene which may be changed. This gets set to the outmost scene + // of the to-be-changed 3D object when the scene has a 3d transformation + // stack at construction time. In all other cases it's set to zero and + // no action needs to be taken + E3dScene* mpScene; + + // the 3d transformation stack at the time of construction, valid when + // mpScene is not zero + drawinglayer::geometry::ViewInformation3D* mpViewInformation3D; + +public: + // the constructor evaluates and sets the members at construction time + E3DModifySceneSnapRectUpdater(const SdrObject* pObject); + + // the destructor will take action if mpScene is not zero and modify the + // 2D geomeztry of the target scene + ~E3DModifySceneSnapRectUpdater(); +}; + +#endif // _E3D_SCENEUPDATER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/e3dundo.hxx b/include/svx/e3dundo.hxx new file mode 100644 index 000000000000..468a7ad77ca0 --- /dev/null +++ b/include/svx/e3dundo.hxx @@ -0,0 +1,112 @@ +/* -*- 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 _E3D_UNDO_HXX +#define _E3D_UNDO_HXX + +#include <svx/svdundo.hxx> +#include <svx/scene3d.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************\ +|* +|* Base class for all 3D undo actions. +|* +\************************************************************************/ +class E3dUndoAction : public SdrUndoAction +{ + + protected : + E3dObject *pMy3DObj; + + public: + TYPEINFO(); + E3dUndoAction (SdrModel *pModel, + E3dObject *p3DObj) : + SdrUndoAction (*pModel), + pMy3DObj (p3DObj) + { + } + + virtual ~E3dUndoAction (); + + virtual sal_Bool CanRepeat(SfxRepeatTarget&) const; +}; + +/************************************************************************\ +|* +|* Undo for 3D rotation through the rotation matrices +|* +\************************************************************************/ +class E3dRotateUndoAction : public E3dUndoAction +{ + basegfx::B3DHomMatrix aMyOldRotation; + basegfx::B3DHomMatrix aMyNewRotation; + + public: + TYPEINFO(); + E3dRotateUndoAction (SdrModel *pModel, + E3dObject *p3DObj, + const basegfx::B3DHomMatrix &aOldRotation, + const basegfx::B3DHomMatrix &aNewRotation) : + E3dUndoAction (pModel, p3DObj), + aMyOldRotation (aOldRotation), + aMyNewRotation (aNewRotation) + { + } + + virtual ~E3dRotateUndoAction (); + + virtual void Undo(); + virtual void Redo(); + +}; + +/************************************************************************\ +|* +|* Undo for 3D attributes (implemented using Set3DAttributes()) +|* +\************************************************************************/ +class SVX_DLLPUBLIC E3dAttributesUndoAction : public SdrUndoAction +{ + using SdrUndoAction::Repeat; + + SdrObject* pObject; + + const SfxItemSet aNewSet; + const SfxItemSet aOldSet; + + public: + TYPEINFO(); + E3dAttributesUndoAction( SdrModel &rModel, + E3dObject* pInObject, + const SfxItemSet& rNewSet, + const SfxItemSet& rOldSet); + + virtual ~E3dAttributesUndoAction(); + + virtual sal_Bool CanRepeat(SfxRepeatTarget& rView) const; + virtual void Undo(); + virtual void Redo(); + virtual void Repeat(); +}; + +#endif // _E3D_CUBE3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/extedit.hxx b/include/svx/extedit.hxx new file mode 100644 index 000000000000..6f3c44afcbb0 --- /dev/null +++ b/include/svx/extedit.hxx @@ -0,0 +1,53 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Version: MPL 1.1 / GPLv3+ / LGPLv3+ + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (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.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Initial Developer of the Original Code is + * [ Surendran Mahendran <surenspost@gmail.com>] + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 3 or later (the "GPLv3+"), or + * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), + * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable + * instead of those above. + */ +#ifndef _EXTEDIT_HXX +#define _EXTEDIT_HXX + +#include <svtools/grfmgr.hxx> +#include <osl/file.hxx> +#include <osl/process.h> +#include <vcl/graph.hxx> +#include <vcl/timer.hxx> +#include <svx/svxdllapi.h> + +class SVX_DLLPUBLIC ExternalToolEdit +{ +public: + GraphicObject* m_pGraphicObject; + OUString m_aFileName; + + ExternalToolEdit(); + virtual ~ExternalToolEdit(); + + virtual void Update( Graphic& aGraphic ) = 0; + void Edit( GraphicObject *pGraphic ); + + DECL_LINK( StartListeningEvent, void *pEvent ); + + static void threadWorker( void *pThreadData ); + static void HandleCloseEvent( ExternalToolEdit* pData ); +}; + + +#endif diff --git a/include/svx/exthelpid.hrc b/include/svx/exthelpid.hrc new file mode 100644 index 000000000000..b89d2f5b9fa1 --- /dev/null +++ b/include/svx/exthelpid.hrc @@ -0,0 +1,34 @@ +/* -*- 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 _SVX_EXTHELPID_HRC +#define _SVX_EXTHELPID_HRC + +// these HIDs are used in SVX and also in other modules, mainly CUI +// the reason is that different controls have the same help texts assigned +// but are implemented in different libraries +// to avoid "exporting" the whole HID list only those few ones that are shared +// are moved to this exported (delivered) hrc file + +// Help-Ids -------------------------------------------------------------- +#define HID_GALLERY_ACTUALIZE "SVX_HID_GALLERY_ACTUALIZE" +#define HID_GALLERY_TITLE "SVX_HID_GALLERY_TITLE" + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/extrud3d.hxx b/include/svx/extrud3d.hxx new file mode 100644 index 000000000000..60da90841abb --- /dev/null +++ b/include/svx/extrud3d.hxx @@ -0,0 +1,102 @@ +/* -*- 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 _E3D_EXTRUD3D_HXX +#define _E3D_EXTRUD3D_HXX + +#include <svx/obj3d.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* 3D extrusion object created from the provided 2D polygon +|* +\************************************************************************/ + +class SVX_DLLPUBLIC E3dExtrudeObj : public E3dCompoundObject +{ +private: + // to allow sdr::properties::E3dExtrudeProperties access to SetGeometryValid() + friend class sdr::properties::E3dExtrudeProperties; + + // geometry, which determines the object + basegfx::B2DPolyPolygon maExtrudePolygon; + +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + void SetDefaultAttributes(E3dDefaultAttributes& rDefault); + +public: + TYPEINFO(); + + E3dExtrudeObj(E3dDefaultAttributes& rDefault, const basegfx::B2DPolyPolygon& rPP, double fDepth); + E3dExtrudeObj(); + + // PercentDiagonal: 0..100, before 0.0..0.5 + sal_uInt16 GetPercentDiagonal() const + { return ((const Svx3DPercentDiagonalItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_PERCENT_DIAGONAL)).GetValue(); } + + // BackScale: 0..100, before 0.0..1.0 + sal_uInt16 GetPercentBackScale() const + { return ((const Svx3DBackscaleItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_BACKSCALE)).GetValue(); } + + // BackScale: 0..100, before 0.0..1.0 + sal_uInt32 GetExtrudeDepth() const + { return ((const Svx3DDepthItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_DEPTH)).GetValue(); } + + // #107245# GetSmoothNormals() for bExtrudeSmoothed + sal_Bool GetSmoothNormals() const + { return ((const Svx3DSmoothNormalsItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_SMOOTH_NORMALS)).GetValue(); } + + // #107245# GetSmoothLids() for bExtrudeSmoothFrontBack + sal_Bool GetSmoothLids() const + { return ((const Svx3DSmoothLidsItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_SMOOTH_LIDS)).GetValue(); } + + // #107245# GetCharacterMode() for bExtrudeCharacterMode + sal_Bool GetCharacterMode() const + { return ((const Svx3DCharacterModeItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_CHARACTER_MODE)).GetValue(); } + + // #107245# GetCloseFront() for bExtrudeCloseFront + sal_Bool GetCloseFront() const + { return ((const Svx3DCloseFrontItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_CLOSE_FRONT)).GetValue(); } + + // #107245# GetCloseBack() for bExtrudeCloseBack + sal_Bool GetCloseBack() const + { return ((const Svx3DCloseBackItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_CLOSE_BACK)).GetValue(); } + + virtual sal_uInt16 GetObjIdentifier() const; + + virtual E3dExtrudeObj* Clone() const; + + // TakeObjName...() is for the display in the UI (for example "3 frames selected") + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + // set/get local parameters with geometry regeneration + void SetExtrudePolygon(const basegfx::B2DPolyPolygon &rNew); + const basegfx::B2DPolyPolygon &GetExtrudePolygon() { return maExtrudePolygon; } + + virtual bool IsBreakObjPossible(); + virtual SdrAttrObj* GetBreakObj(); +}; + +#endif // _E3D_EXTRUD3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/extrusionbar.hxx b/include/svx/extrusionbar.hxx new file mode 100644 index 000000000000..0cb9e829db45 --- /dev/null +++ b/include/svx/extrusionbar.hxx @@ -0,0 +1,55 @@ +/* -*- 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 _SVX_EXTRUSION_BAR_HXX +#define _SVX_EXTRUSION_BAR_HXX + +#include <sfx2/shell.hxx> +#include <sfx2/module.hxx> +#include <svx/ifaceids.hxx> +#include "svx/svxdllapi.h" + +class SfxViewShell; +class SdrView; + +/************************************************************************/ + +namespace svx +{ + +SVX_DLLPUBLIC bool checkForSelectedCustomShapes( SdrView* pSdrView, bool bOnlyExtruded ); + +class SVX_DLLPUBLIC ExtrusionBar : public SfxShell +{ +public: + TYPEINFO(); + SFX_DECL_INTERFACE(SVX_INTERFACE_EXTRUSION_BAR) + + ExtrusionBar(SfxViewShell* pViewShell ); + ~ExtrusionBar(); + + static void execute( SdrView* pSdrView, SfxRequest& rReq, SfxBindings& rBindings ); + static void getState( SdrView* pSdrView, SfxItemSet& rSet ); +}; + +} + +#endif // _SVX_EXTRUSION_BAR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/extrusioncolorcontrol.hxx b/include/svx/extrusioncolorcontrol.hxx new file mode 100644 index 000000000000..1c2538832788 --- /dev/null +++ b/include/svx/extrusioncolorcontrol.hxx @@ -0,0 +1,50 @@ +/* -*- 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 _SVX_EXTRUSIONCOLORCONTROL_HXX +#define _SVX_EXTRUSIONCOLORCONTROL_HXX + +#include <sfx2/tbxctrl.hxx> +#include "svx/svxdllapi.h" +#include "svx/tbxcolorupdate.hxx" + +namespace svx { + +class SVX_DLLPUBLIC ExtrusionColorControl : public SfxToolBoxControl +{ +private: + ToolboxButtonColorUpdater* mpBtnUpdater; + Color mLastColor; + +public: + SFX_DECL_TOOLBOX_CONTROL(); + ExtrusionColorControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~ExtrusionColorControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); +}; + +} + +#endif // _SVX_EXTRUSIONCOLORCONTROL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/f3dchild.hxx b/include/svx/f3dchild.hxx new file mode 100644 index 000000000000..8b0446d1cd83 --- /dev/null +++ b/include/svx/f3dchild.hxx @@ -0,0 +1,44 @@ +/* -*- 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 _SVX_F3DCHILD_HXX +#define _SVX_F3DCHILD_HXX + + +#include <sfx2/childwin.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* Derived from SfxChildWindow as "container" for 3D Window +|* +\************************************************************************/ + +class SVX_DLLPUBLIC Svx3DChildWindow : public SfxChildWindow +{ + public: + Svx3DChildWindow( Window*, sal_uInt16, SfxBindings*, SfxChildWinInfo* ); + + SFX_DECL_CHILDWINDOW_WITHID(Svx3DChildWindow); +}; + +#endif // _SVX_F3DCHILD_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fillctrl.hxx b/include/svx/fillctrl.hxx new file mode 100644 index 000000000000..065321f51a64 --- /dev/null +++ b/include/svx/fillctrl.hxx @@ -0,0 +1,99 @@ +/* -*- 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 _FILLCTRL_HXX +#define _FILLCTRL_HXX + +#include <svl/lstner.hxx> +#include <sfx2/tbxctrl.hxx> +#include "svx/svxdllapi.h" + +class XFillStyleItem; +class XFillColorItem; +class XFillGradientItem; +class XFillHatchItem; +class XFillBitmapItem; +class FillControl; +class SvxFillTypeBox; +class SvxFillAttrBox; +class ListBox; + +/************************************************************************* +|* +|* Class for surface attributes (controls and controller) +|* +\************************************************************************/ + +class SVX_DLLPUBLIC SvxFillToolBoxControl: public SfxToolBoxControl +{ +private: + XFillStyleItem* pStyleItem; + XFillColorItem* pColorItem; + XFillGradientItem* pGradientItem; + XFillHatchItem* pHatchItem; + XFillBitmapItem* pBitmapItem; + + FillControl* pFillControl; + SvxFillTypeBox* pFillTypeLB; + SvxFillAttrBox* pFillAttrLB; + + sal_Bool bUpdate; + sal_Bool bIgnoreStatusUpdate; + sal_uInt16 eLastXFS; + +public: + SFX_DECL_TOOLBOX_CONTROL(); + + SvxFillToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxFillToolBoxControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + void Update( const SfxPoolItem* pState ); + virtual Window* CreateItemWindow( Window *pParent ); + void IgnoreStatusUpdate( sal_Bool bSet ); +}; + +//======================================================================== + +class FillControl : public Window +{ +private: + friend class SvxFillToolBoxControl; + + SvxFillTypeBox* pLbFillType; + SvxFillAttrBox* pLbFillAttr; + Size aLogicalFillSize; + Size aLogicalAttrSize; + Timer aDelayTimer; + + DECL_LINK( DelayHdl, void * ); + DECL_LINK( SelectFillTypeHdl, ListBox * ); + DECL_LINK( SelectFillAttrHdl, ListBox * ); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); +public: + FillControl( Window* pParent, WinBits nStyle = 0 ); + ~FillControl(); + + virtual void Resize(); +}; + +#endif // _FILLCTRL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/flagsdef.hxx b/include/svx/flagsdef.hxx new file mode 100644 index 000000000000..0b2ea7a6aa70 --- /dev/null +++ b/include/svx/flagsdef.hxx @@ -0,0 +1,97 @@ +/* -*- 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 _SVX_FLAGSDEF_HXX +#define _SVX_FLAGSDEF_HXX + +// defines --------------------------------------------------------------- + +// copy from border.hxx +// Border-Modes for paragraphs, textframes and tables +#define SW_BORDER_MODE_PARA 0x01 +#define SW_BORDER_MODE_TABLE 0x02 +#define SW_BORDER_MODE_FRAME 0x04 + +// flags for SvxBackgroundTabPage +#define SVX_SHOW_SELECTOR 0x01 +#define SVX_SHOW_PARACTL 0x02 +#define SVX_ENABLE_TRANSPARENCY 0x04 +#define SVX_SHOW_TBLCTL 0x08 + +// flags for SvxBorderTabPage +#define SVX_HIDESHADOWCTL 0x01 + +// copy from chardlg.hxx +#define DISABLE_CASEMAP ((sal_uInt16)0x0001) +#define DISABLE_WORDLINE ((sal_uInt16)0x0002) +#define DISABLE_BLINK ((sal_uInt16)0x0004) +#define DISABLE_UNDERLINE_COLOR ((sal_uInt16)0x0008) + +#define DISABLE_LANGUAGE ((sal_uInt16)0x0010) +#define DISABLE_HIDE_LANGUAGE ((sal_uInt16)0x0020) + +// flags for SvxCharBasePage's child class +#define SVX_PREVIEW_CHARACTER 0x01 +// flags for SvxCharNamePage +#define SVX_RELATIVE_MODE 0x02 +// flags for SvxCharEffectsPage +#define SVX_ENABLE_FLASH 0x04 + + +// copy from numfmt.hxx +#define SVX_NUMVAL_STANDARD -1234.12345678901234 +#define SVX_NUMVAL_CURRENCY -1234 +#define SVX_NUMVAL_PERCENT -0.1295 +#define SVX_NUMVAL_TIME 36525.5678935185 +#define SVX_NUMVAL_DATE 36525.5678935185 +#define SVX_NUMVAL_BOOLEAN 1 + +// copy from page.hxx +// enum ------------------------------------------------------------------ + +enum SvxModeType +{ + SVX_PAGE_MODE_STANDARD, + SVX_PAGE_MODE_CENTER, + SVX_PAGE_MODE_PRESENTATION +}; +// define ---------------------------------------------------------------- + +// 1/2 cm in TWIPS +// Is also used for minimum size of LayFrms of any kind +#define MM50 283 //from original svx/inc/paragrph.hxx + +//--------------from original svx/inc/tabstpge.hxx +#define TABTYPE_LEFT 0x0001 +#define TABTYPE_RIGHT 0x0002 +#define TABTYPE_CENTER 0x0004 +#define TABTYPE_DEZIMAL 0x0008 +#define TABTYPE_ALL 0x000F + +#define TABFILL_NONE 0x0010 +#define TABFILL_POINT 0x0020 +#define TABFILL_DASHLINE 0x0040 +#define TABFILL_SOLIDLINE 0x0080 +#define TABFILL_SPECIAL 0x0100 +#define TABFILL_ALL 0x01F0 + +//----- + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/float3d.hxx b/include/svx/float3d.hxx new file mode 100644 index 000000000000..1809e715c3ad --- /dev/null +++ b/include/svx/float3d.hxx @@ -0,0 +1,291 @@ +/* -*- 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 _SVX_FLOAT3D_HXX +#define _SVX_FLOAT3D_HXX + +#include <sfx2/ctrlitem.hxx> +#include <vcl/fixed.hxx> +#include <vcl/field.hxx> +#include <sfx2/dockwin.hxx> +#include <vcl/button.hxx> +#include <svtools/stdctrl.hxx> +#include "svx/svxdllapi.h" + +#include <svx/f3dchild.hxx> +#include <svx/dlgctl3d.hxx> +#include <svx/dlgctrl.hxx> +#include <svx/svdmodel.hxx> + +enum ViewType3D +{ + VIEWTYPE_GEO = 1, + VIEWTYPE_REPRESENTATION, + VIEWTYPE_LIGHT, + VIEWTYPE_TEXTURE, + VIEWTYPE_MATERIAL +}; + +class SdrModel; +class FmFormModel; +class VirtualDevice; +class E3dView; +class SdrPageView; +class Svx3DCtrlItem; +class SvxConvertTo3DItem; + +//------------------------------------------------------------------------ +struct Svx3DWinImpl; + +class SVX_DLLPUBLIC Svx3DWin : public SfxDockingWindow +{ + friend class Svx3DChildWindow; + friend class Svx3DCtrlItem; + using Window::Update; + +private: + ImageButton aBtnGeo; + ImageButton aBtnRepresentation; + ImageButton aBtnLight; + ImageButton aBtnTexture; + ImageButton aBtnMaterial; + ImageButton aBtnUpdate; + ImageButton aBtnAssign; + +// geometry + FixedLine aFLGeometrie; + FixedText aFtPercentDiagonal; + MetricField aMtrPercentDiagonal; + FixedText aFtBackscale; + MetricField aMtrBackscale; + FixedText aFtEndAngle; + MetricField aMtrEndAngle; + FixedText aFtDepth; + MetricField aMtrDepth; + FixedLine aFLSegments; + + FixedText aFtHorizontal; + NumericField aNumHorizontal; + FixedText aFtVertical; + NumericField aNumVertical; + FixedLine aFLNormals; + + ImageButton aBtnNormalsObj; + ImageButton aBtnNormalsFlat; + ImageButton aBtnNormalsSphere; + ImageButton aBtnNormalsInvert; + ImageButton aBtnTwoSidedLighting; + + ImageButton aBtnDoubleSided; + FixedLine aFLRepresentation; +// presentation + FixedText aFtShademode; + ListBox aLbShademode; + FixedLine aFLShadow; + ImageButton aBtnShadow3d; + FixedText aFtSlant; + MetricField aMtrSlant; + FixedText aFtDistance; + MetricField aMtrDistance; + FixedText aFtFocalLeng; + MetricField aMtrFocalLength; + FixedLine aFLCamera; + FixedLine aFLLight; + +// lighting + ImageButton aBtnLight1; + ImageButton aBtnLight2; + ImageButton aBtnLight3; + ImageButton aBtnLight4; + ImageButton aBtnLight5; + ImageButton aBtnLight6; + ImageButton aBtnLight7; + ImageButton aBtnLight8; + FixedText aFTLightsource; + ColorLB aLbLight1; + ColorLB aLbLight2; + ColorLB aLbLight3; + ColorLB aLbLight4; + ColorLB aLbLight5; + ColorLB aLbLight6; + ColorLB aLbLight7; + ColorLB aLbLight8; + + ImageButton aBtnLightColor; + + // #99694# Keyboard shortcuts activate the next control, so the + // order needed to be changed here + FixedText aFTAmbientlight; // Text label + ColorLB aLbAmbientlight; // ListBox + ImageButton aBtnAmbientColor; // color button + + FixedLine aFLTexture; + +// Textures + FixedText aFtTexKind; + ImageButton aBtnTexLuminance; + ImageButton aBtnTexColor; + FixedText aFtTexMode; + ImageButton aBtnTexReplace; + ImageButton aBtnTexModulate; + ImageButton aBtnTexBlend; + FixedText aFtTexProjectionX; + ImageButton aBtnTexObjectX; + ImageButton aBtnTexParallelX; + ImageButton aBtnTexCircleX; + FixedText aFtTexProjectionY; + ImageButton aBtnTexObjectY; + ImageButton aBtnTexParallelY; + ImageButton aBtnTexCircleY; + FixedText aFtTexFilter; + ImageButton aBtnTexFilter; + +// material +// material editor + FixedLine aFLMaterial; + FixedText aFtMatFavorites; + ListBox aLbMatFavorites; + FixedText aFtMatColor; + ColorLB aLbMatColor; + ImageButton aBtnMatColor; + FixedText aFtMatEmission; + ColorLB aLbMatEmission; + ImageButton aBtnEmissionColor; + FixedLine aFLMatSpecular; + FixedText aFtMatSpecular; + ColorLB aLbMatSpecular; + ImageButton aBtnSpecularColor; + FixedText aFtMatSpecularIntensity; + MetricField aMtrMatSpecularIntensity; + + Svx3DPreviewControl aCtlPreview; + SvxLightCtl3D aCtlLightPreview; + +// bottom part + ImageButton aBtnConvertTo3D; + ImageButton aBtnLatheObject; + ImageButton aBtnPerspective; + +// the rest ... + Image aImgLightOn; + Image aImgLightOff; + sal_Bool bUpdate; + ViewType3D eViewType; + Size aSize; + + // Model, Page, View etc. for favourites + FmFormModel* pModel; + VirtualDevice* pVDev; + E3dView* p3DView; + + SfxBindings* pBindings; + Svx3DCtrlItem* pControllerItem; + + SvxConvertTo3DItem* pConvertTo3DItem; + SvxConvertTo3DItem* pConvertTo3DLatheItem; + + Svx3DWinImpl* mpImpl; + SfxMapUnit ePoolUnit; + FieldUnit eFUnit; + + // ItemSet used to remember set 2d attributes + SfxItemSet* mpRemember2DAttributes; + + sal_Bool bOnly3DChanged; + + //------------------------------------ + + DECL_LINK( ClickViewTypeHdl, void * ); + DECL_LINK( ClickUpdateHdl, void * ); + DECL_LINK( ClickAssignHdl, void * ); + DECL_LINK( ClickHdl, PushButton * ); + DECL_LINK( ClickColorHdl, PushButton * ); + DECL_LINK( SelectHdl, void * ); + DECL_LINK( ModifyHdl, void * ); + void ClickLight(PushButton &rBtn); + + DECL_LINK( ChangeLightCallbackHdl, void * ); + DECL_LINK( ChangeSelectionCallbackHdl, void * ); + + SVX_DLLPRIVATE void Construct(); + SVX_DLLPRIVATE void Reset(); + + SVX_DLLPRIVATE sal_Bool LBSelectColor( ColorLB* pLb, const Color& rColor ); + SVX_DLLPRIVATE sal_uInt16 GetLightSource( const PushButton* pBtn = NULL ); + SVX_DLLPRIVATE ColorLB* GetLbByButton( const PushButton* pBtn = NULL ); + + SVX_DLLPRIVATE bool GetUILightState( const ImageButton& rBtn ) const; + SVX_DLLPRIVATE void SetUILightState( ImageButton& aBtn, bool bState ); + +protected: + virtual void Resize(); + +public: + Svx3DWin( SfxBindings* pBindings, SfxChildWindow *pCW, + Window* pParent ); + ~Svx3DWin(); + + void InitColorLB( const SdrModel* pDoc ); + sal_Bool IsUpdateMode() const { return bUpdate; } + + void Update( SfxItemSet& rSet ); + void GetAttr( SfxItemSet& rSet ); + + void UpdatePreview(); // nach oben (private) + void DocumentReload(); // #83951# +}; + +/************************************************************************* +|* +|* Controller item for 3D Window (Floating/Docking) +|* +\************************************************************************/ + +class Svx3DCtrlItem : public SfxControllerItem +{ + protected: + virtual void StateChanged( sal_uInt16 nSId, SfxItemState eState, + const SfxPoolItem* pState ); + + public: + Svx3DCtrlItem( sal_uInt16, SfxBindings* ); +}; + +/************************************************************************* +|* +|* ControllerItem for State of a Slot +|* (SID_CONVERT_TO_3D, SID_CONVERT_TO_3D_LATHE_FAST) +|* +\************************************************************************/ + +class SvxConvertTo3DItem : public SfxControllerItem +{ + sal_Bool bState; + +protected: + virtual void StateChanged(sal_uInt16 nSId, SfxItemState eState, const SfxPoolItem* pState); + +public: + SvxConvertTo3DItem(sal_uInt16 nId, SfxBindings* pBindings); + sal_Bool GetState() const { return bState; } +}; + +#endif // _SVX_FLOAT3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmdmod.hxx b/include/svx/fmdmod.hxx new file mode 100644 index 000000000000..b59eb65c7f59 --- /dev/null +++ b/include/svx/fmdmod.hxx @@ -0,0 +1,40 @@ +/* -*- 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 _SVX_FMDMOD_HXX +#define _SVX_FMDMOD_HXX + +#include <svx/unomod.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC SvxFmMSFactory : public SvxUnoDrawMSFactory +{ + +public: + SvxFmMSFactory() {}; + + virtual ~SvxFmMSFactory() {} + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL createInstance(const OUString& ServiceSpecifier) throw( ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException ); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL createInstanceWithArguments(const OUString& ServiceSpecifier, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& Arguments) throw( ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException ); + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getAvailableServiceNames(void) throw( ::com::sun::star::uno::RuntimeException ); +}; + +#endif // _SVX_FMDMOD_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmdpage.hxx b/include/svx/fmdpage.hxx new file mode 100644 index 000000000000..50b99f8116a6 --- /dev/null +++ b/include/svx/fmdpage.hxx @@ -0,0 +1,67 @@ +/* -*- 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 _SVX_FMDPAGE_HXX +#define _SVX_FMDPAGE_HXX + +#include <com/sun/star/form/XFormsSupplier2.hpp> +#include <svx/unopage.hxx> +#include <comphelper/uno3.hxx> +#include "svx/svxdllapi.h" + +//================================================================== +// SvxFmDrawPage +//================================================================== +class SVX_DLLPUBLIC SvxFmDrawPage :public SvxDrawPage + ,public ::com::sun::star::form::XFormsSupplier2 +{ +protected: + + // Creating a SdrObject based on a Description. Cann be used by derived classes to + // support own ::com::sun::star::drawing::Shapes (for example Controls) + virtual SdrObject *_CreateSdrObject( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & xShape )throw (); + + // The following method is called when a SvxShape object should be created. + // Derived classes can create a derivation or an object aggregating SvxShape. + virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > _CreateShape( SdrObject *pObj ) const throw (); + +public: + SvxFmDrawPage( SdrPage* pPage ); + virtual ~SvxFmDrawPage() throw (); + + // UNO connection + DECLARE_UNO3_AGG_DEFAULTS(SvxFmDrawPage, SvxDrawPage); + + virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& aType ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw(::com::sun::star::uno::RuntimeException); + + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); + + // XFormsSupplier + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > SAL_CALL getForms(void) throw( ::com::sun::star::uno::RuntimeException ); + + // XFormsSupplier2 + virtual sal_Bool SAL_CALL hasForms(void) throw( ::com::sun::star::uno::RuntimeException ); + + // ::com::sun::star::lang::XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames(void) throw( ::com::sun::star::uno::RuntimeException ); +}; + +#endif // _SVX_FMDPAGE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmglob.hxx b/include/svx/fmglob.hxx new file mode 100644 index 000000000000..71909d43e8a9 --- /dev/null +++ b/include/svx/fmglob.hxx @@ -0,0 +1,59 @@ +/* -*- 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 _SVX_FMGLOB_HXX +#define _SVX_FMGLOB_HXX + +#include <tools/solar.h> +#include <svx/svdobj.hxx> +#include <com/sun/star/form/FormComponentType.hpp> + +const sal_uInt32 FmFormInventor = sal_uInt32('F')*0x00000001+ + sal_uInt32('M')*0x00000100+ + sal_uInt32('0')*0x00010000+ + sal_uInt32('1')*0x01000000; + +const sal_uInt16 OBJ_FM_CONTROL = ::com::sun::star::form::FormComponentType::CONTROL; + // for form components +const sal_uInt16 OBJ_FM_EDIT = ::com::sun::star::form::FormComponentType::TEXTFIELD; +const sal_uInt16 OBJ_FM_BUTTON = ::com::sun::star::form::FormComponentType::COMMANDBUTTON; +const sal_uInt16 OBJ_FM_FIXEDTEXT = ::com::sun::star::form::FormComponentType::FIXEDTEXT; +const sal_uInt16 OBJ_FM_LISTBOX = ::com::sun::star::form::FormComponentType::LISTBOX; +const sal_uInt16 OBJ_FM_CHECKBOX = ::com::sun::star::form::FormComponentType::CHECKBOX; +const sal_uInt16 OBJ_FM_COMBOBOX = ::com::sun::star::form::FormComponentType::COMBOBOX; +const sal_uInt16 OBJ_FM_RADIOBUTTON = ::com::sun::star::form::FormComponentType::RADIOBUTTON; +const sal_uInt16 OBJ_FM_GROUPBOX = ::com::sun::star::form::FormComponentType::GROUPBOX; +const sal_uInt16 OBJ_FM_GRID = ::com::sun::star::form::FormComponentType::GRIDCONTROL; +const sal_uInt16 OBJ_FM_IMAGEBUTTON = ::com::sun::star::form::FormComponentType::IMAGEBUTTON; +const sal_uInt16 OBJ_FM_FILECONTROL = ::com::sun::star::form::FormComponentType::FILECONTROL; +const sal_uInt16 OBJ_FM_DATEFIELD = ::com::sun::star::form::FormComponentType::DATEFIELD; +const sal_uInt16 OBJ_FM_TIMEFIELD = ::com::sun::star::form::FormComponentType::TIMEFIELD; +const sal_uInt16 OBJ_FM_NUMERICFIELD = ::com::sun::star::form::FormComponentType::NUMERICFIELD; +const sal_uInt16 OBJ_FM_CURRENCYFIELD = ::com::sun::star::form::FormComponentType::CURRENCYFIELD; +const sal_uInt16 OBJ_FM_PATTERNFIELD = ::com::sun::star::form::FormComponentType::PATTERNFIELD; +const sal_uInt16 OBJ_FM_HIDDEN = ::com::sun::star::form::FormComponentType::HIDDENCONTROL; +const sal_uInt16 OBJ_FM_IMAGECONTROL = ::com::sun::star::form::FormComponentType::IMAGECONTROL; +const sal_uInt16 OBJ_FM_FORMATTEDFIELD = ::com::sun::star::form::FormComponentType::PATTERNFIELD + 1; +const sal_uInt16 OBJ_FM_SCROLLBAR = ::com::sun::star::form::FormComponentType::PATTERNFIELD + 2; +const sal_uInt16 OBJ_FM_SPINBUTTON = ::com::sun::star::form::FormComponentType::PATTERNFIELD + 3; +const sal_uInt16 OBJ_FM_NAVIGATIONBAR = ::com::sun::star::form::FormComponentType::PATTERNFIELD + 4; + +#endif // _FM_FMGLOB_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmgridcl.hxx b/include/svx/fmgridcl.hxx new file mode 100644 index 000000000000..b0d225ccef24 --- /dev/null +++ b/include/svx/fmgridcl.hxx @@ -0,0 +1,206 @@ +/* -*- 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 _SVX_FMGRIDCL_HXX +#define _SVX_FMGRIDCL_HXX + +#include <com/sun/star/container/XIndexContainer.hpp> +#include <com/sun/star/container/XNameContainer.hpp> + +#include <svx/gridctrl.hxx> +#include <svtools/transfer.hxx> +#include "svx/svxdllapi.h" + +//================================================================== +// FmGridHeader +//================================================================== +struct FmGridHeaderData; +class SVX_DLLPUBLIC FmGridHeader + :public ::svt::EditBrowserHeader + ,public DropTargetHelper +{ +protected: + FmGridHeaderData* m_pImpl; + + // trigger context menu execution + void triggerColumnContextMenu( const ::Point& _rPreferredPos ); + +public: + FmGridHeader( BrowseBox* pParent, WinBits nWinBits = WB_STDHEADERBAR | WB_DRAG ); + ~FmGridHeader(); + +public: + struct AccessControl { friend class FmGridControl; private: AccessControl() { } }; + + inline void triggerColumnContextMenu( const ::Point& _rPreferredPos, const AccessControl& ) + { + triggerColumnContextMenu( _rPreferredPos ); + } + +protected: + virtual void Command( const CommandEvent& rCEvt ); + virtual void RequestHelp( const HelpEvent& rHEvt ); + virtual void Select(); + + /** the value returned by GetItemPos is meaningless for the grid model if there are hidden columns, + so use GetModelColumnPos instead + */ + sal_uInt16 GetModelColumnPos(sal_uInt16 nId) const; + + /** This is called before executing a context menu for a column. rMenu contains the initial entries + handled by this base class' method (which always has to be called). + Derived classes may alter the menu in any way and handle any additional entries in + PostExecuteColumnContextMenu. + All disabled entries will be removed before executing the menu, so be careful with separators + near entries you probably wish to disable ... + */ + virtual void PreExecuteColumnContextMenu(sal_uInt16 nColId, PopupMenu& rMenu); + /** After executing the context menu for a column this method is called. + */ + virtual void PostExecuteColumnContextMenu(sal_uInt16 nColId, const PopupMenu& rMenu, sal_uInt16 nExecutionResult); + + // DropTargetHelper + virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ); + virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ); + + /** selects the column at the selection supplier. + @param nColumnId + The column id. + */ + void notifyColumnSelect(sal_uInt16 nColumnId); +private: + DECL_LINK( OnAsyncExecuteDrop, void* ); +}; + +//================================================================== +// FmGridControl +//================================================================== +class FmXGridPeer; +class SVX_DLLPUBLIC FmGridControl : public DbGridControl + +{ + friend class FmGridHeader; + friend class FmXGridPeer; + + FmXGridPeer* m_pPeer; + sal_Int32 m_nCurrentSelectedColumn; // this is the column model (not the view) posisition ... + sal_uInt16 m_nMarkedColumnId; + sal_Bool m_bSelecting; + sal_Bool m_bInColumnMove : 1; + +public: + FmGridControl( + const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >&, + Window* pParent, + FmXGridPeer* _pPeer, + WinBits nBits); + + // Window + virtual void KeyInput( const KeyEvent& rKEvt ); + + // ::com::sun::star::beans::XPropertyChangeListener + void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt); + + // ::com::sun::star::form::XPositioningListener + void positioned(const ::com::sun::star::lang::EventObject& rEvent); + + // XBound + sal_Bool commit(); + + // ::com::sun::star::form::XInsertListener + void inserted(const ::com::sun::star::lang::EventObject& rEvent); + + void markColumn(sal_uInt16 nId); + sal_Bool isColumnMarked(sal_uInt16 nId) const; + + sal_Int32 GetSelectedColumn() const; + + /** return the name of the specified object. + @param eObjType + The type to ask for + @param _nPosition + The position of a tablecell (index position), header bar colum/row cell + @return + The name of the specified object. + */ + virtual OUString GetAccessibleObjectName( ::svt::AccessibleBrowseBoxObjType eObjType,sal_Int32 _nPosition = -1) const; + + /** return the description of the specified object. + @param eObjType + The type to ask for + @param _nPosition + The position of a tablecell (index position), header bar colum/row cell + @return + The description of the specified object. + */ + virtual OUString GetAccessibleObjectDescription( ::svt::AccessibleBrowseBoxObjType eObjType,sal_Int32 _nPosition = -1) const; + +protected: + virtual void Command(const CommandEvent& rEvt); + + virtual BrowserHeader* imp_CreateHeaderBar(BrowseBox* pParent); + virtual long QueryMinimumRowHeight(); + virtual void RowHeightChanged(); + virtual void ColumnResized(sal_uInt16 nId); + virtual void ColumnMoved(sal_uInt16 nId); + virtual void DeleteSelectedRows(); + virtual void SetDesignMode(sal_Bool bMode); + virtual void CellModified(); + virtual void HideColumn(sal_uInt16 nId); + virtual void ShowColumn(sal_uInt16 nId); + + sal_Bool IsInColumnMove() const {return m_bInColumnMove;} + + virtual void BeginCursorAction(); + virtual void EndCursorAction(); + virtual void Select(); + + // Initialize columns + // a.) only by column description + virtual void InitColumnsByModels(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& xColumns); + // b.) during alivemode by database fields + virtual void InitColumnsByFields(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& xFields); + + // some kind of impl version (for one single column) of our version of InitColumnsByFields + void InitColumnByField( + DbGridColumn* _pColumn, + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxColumnModel, + const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxFieldsByNames, + const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& _rxFieldsByIndex + ); + + FmXGridPeer* GetPeer() const {return m_pPeer;} + + ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any> + getSelectionBookmarks(); + sal_Bool selectBookmarks(const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any>& _rBookmarks); + + /** returns if a column is selected + @param nColumnId + The column id. + @param _pColumn + The column to compare with. + @return + <TRUE/> if the column is selected, otherwise <FALSE/> + */ + sal_Bool isColumnSelected(sal_uInt16 nColumnId,DbGridColumn* _pColumn); +}; + +#endif // _SVX_FMGRIDCL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmgridif.hxx b/include/svx/fmgridif.hxx new file mode 100644 index 000000000000..7a1951d4dea0 --- /dev/null +++ b/include/svx/fmgridif.hxx @@ -0,0 +1,544 @@ +/* -*- 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 _SVX_FMGRIDIF_HXX +#define _SVX_FMGRIDIF_HXX + +#include "svx/svxdllapi.h" + +#include <com/sun/star/view/XSelectionSupplier.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/container/XEnumerationAccess.hpp> +#include <com/sun/star/container/XContainer.hpp> +#include <com/sun/star/container/XContainerListener.hpp> +#include <com/sun/star/sdbc/XRowSetListener.hpp> +#include <com/sun/star/sdb/XRowSetSupplier.hpp> +#include <com/sun/star/form/XReset.hpp> +#include <com/sun/star/form/XBoundComponent.hpp> +#include <com/sun/star/form/XLoadListener.hpp> +#include <com/sun/star/form/XGridControl.hpp> +#include <com/sun/star/form/XGridPeer.hpp> +#include <com/sun/star/frame/XDispatchProvider.hpp> +#include <com/sun/star/frame/XStatusListener.hpp> +#include <com/sun/star/frame/XDispatchProviderInterception.hpp> +#include <com/sun/star/view/XSelectionChangeListener.hpp> +#include <com/sun/star/util/XModeSelector.hpp> +#include <com/sun/star/util/XModifyListener.hpp> +#include <com/sun/star/util/XModifyBroadcaster.hpp> + +#include <tools/wintypes.hxx> +#include <toolkit/controls/unocontrol.hxx> +#include <toolkit/awt/vclxwindow.hxx> +#include <comphelper/uno3.hxx> +#include <cppuhelper/implbase10.hxx> + +#ifndef INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_19 +#define INCLUDED_COMPHELPER_IMPLBASE_VAR_HXX_19 +#define COMPHELPER_IMPLBASE_INTERFACE_NUMBER 19 +#include <comphelper/implbase_var.hxx> +#endif + + +class DbGridColumn; + +class OWeakSubObject : public ::cppu::OWeakObject +{ +protected: + ::cppu::OWeakObject& m_rParent; + +public: + OWeakSubObject(::cppu::OWeakObject& rParent) : m_rParent(rParent) { } + + virtual void SAL_CALL acquire() throw() { m_rParent.acquire(); } + virtual void SAL_CALL release() throw() { m_rParent.release(); } +}; + +//================================================================== +// FmXModifyMultiplexer +//================================================================== +class FmXModifyMultiplexer :public OWeakSubObject + ,public ::cppu::OInterfaceContainerHelper + ,public ::com::sun::star::util::XModifyListener +{ +public: + FmXModifyMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); + DECLARE_UNO3_DEFAULTS(FmXModifyMultiplexer,OWeakSubObject); + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::lang::XEventListener + virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::util::XModifyListener + virtual void SAL_CALL modified(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); + +// resolve ambiguity : both OWeakObject and OInterfaceContainerHelper have these memory operators + void * SAL_CALL operator new( size_t size ) throw() { return OWeakSubObject::operator new(size); } + void SAL_CALL operator delete( void * p ) throw() { OWeakSubObject::operator delete(p); } +}; + +//================================================================== +// FmXUpdateMultiplexer +//================================================================== +class FmXUpdateMultiplexer : public OWeakSubObject, + public ::cppu::OInterfaceContainerHelper, + public ::com::sun::star::form::XUpdateListener +{ +public: + FmXUpdateMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); + DECLARE_UNO3_DEFAULTS(FmXUpdateMultiplexer,OWeakSubObject); + + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::lang::XEventListener + virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::form::XUpdateListener + virtual sal_Bool SAL_CALL approveUpdate(const ::com::sun::star::lang::EventObject &) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL updated(const ::com::sun::star::lang::EventObject &) throw(::com::sun::star::uno::RuntimeException); + +// resolve ambiguity : both OWeakObject and OInterfaceContainerHelper have these memory operators + void * SAL_CALL operator new( size_t size ) throw() { return OWeakSubObject::operator new(size); } + void SAL_CALL operator delete( void * p ) throw() { OWeakSubObject::operator delete(p); } +}; + +//================================================================== +// FmXSelectionMultiplexer +//================================================================== +class FmXSelectionMultiplexer :public OWeakSubObject + ,public ::cppu::OInterfaceContainerHelper + ,public ::com::sun::star::view::XSelectionChangeListener +{ +public: + FmXSelectionMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); + DECLARE_UNO3_DEFAULTS(FmXSelectionMultiplexer, OWeakSubObject); + + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::lang::XEventListener + virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::view::XSelectionChangeListener + virtual void SAL_CALL selectionChanged( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException); + +// resolve ambiguity : both OWeakObject and OInterfaceContainerHelper have these memory operators + void * SAL_CALL operator new( size_t size ) throw() { return OWeakSubObject::operator new(size); } + void SAL_CALL operator delete( void * p ) throw() { OWeakSubObject::operator delete(p); } +}; + +//================================================================== +// FmXGridControlMultiplexer +//================================================================== +class FmXGridControlMultiplexer :public OWeakSubObject + ,public ::cppu::OInterfaceContainerHelper + ,public ::com::sun::star::form::XGridControlListener +{ +public: + FmXGridControlMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); + DECLARE_UNO3_DEFAULTS( FmXGridControlMultiplexer, OWeakSubObject ); + + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::lang::XEventListener + virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::view::XSelectionChangeListener + virtual void SAL_CALL columnChanged( const ::com::sun::star::lang::EventObject& _event ) throw (::com::sun::star::uno::RuntimeException); + +// resolve ambiguity : both OWeakObject and OInterfaceContainerHelper have these memory operators + void * SAL_CALL operator new( size_t size ) throw() { return OWeakSubObject::operator new(size); } + void SAL_CALL operator delete( void * p ) throw() { OWeakSubObject::operator delete(p); } +}; + +//================================================================== +// FmXContainerMultiplexer +//================================================================== +class FmXContainerMultiplexer : public OWeakSubObject, + public ::cppu::OInterfaceContainerHelper, + public ::com::sun::star::container::XContainerListener +{ +public: + FmXContainerMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(FmXContainerMultiplexer,OWeakSubObject); + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::lang::XEventListener + virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::container::XContainerListener + virtual void SAL_CALL elementInserted(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException); + +// resolve ambiguity : both OWeakObject and OInterfaceContainerHelper have these memory operators + void * SAL_CALL operator new( size_t size ) throw() { return OWeakSubObject::operator new(size); } + void SAL_CALL operator delete( void * p ) throw() { OWeakSubObject::operator delete(p); } +}; + +//================================================================== +// FmXGridControl +//================================================================== +typedef ::cppu::ImplHelper10< ::com::sun::star::form::XBoundComponent, + ::com::sun::star::form::XGridControl, + ::com::sun::star::util::XModifyBroadcaster, + ::com::sun::star::container::XIndexAccess, + ::com::sun::star::container::XEnumerationAccess, + ::com::sun::star::util::XModeSelector, + ::com::sun::star::container::XContainer, + ::com::sun::star::frame::XDispatchProvider, + ::com::sun::star::frame::XDispatchProviderInterception, + ::com::sun::star::view::XSelectionSupplier + > FmXGridControl_BASE; + +class FmXGridPeer; +class SVX_DLLPUBLIC FmXGridControl :public UnoControl + ,public FmXGridControl_BASE +{ + FmXModifyMultiplexer m_aModifyListeners; + FmXUpdateMultiplexer m_aUpdateListeners; + FmXContainerMultiplexer m_aContainerListeners; + FmXSelectionMultiplexer m_aSelectionListeners; + FmXGridControlMultiplexer m_aGridControlListeners; + +protected: + sal_uInt16 m_nPeerCreationLevel; + sal_Bool m_bInDraw; + + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext; + +public: + FmXGridControl(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >&); + virtual ~FmXGridControl(); + + // UNO connection + DECLARE_UNO3_AGG_DEFAULTS(FmXGridControl, UnoControl); + virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException); + +// XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::lang::XComponent + virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::lang::XServiceInfo + virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) throw(); + virtual OUString SAL_CALL getImplementationName() throw(); + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(); + +// ::com::sun::star::awt::XControl + virtual void SAL_CALL createPeer(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XToolkit >& _rToolkit, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >& Parent) throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL setModel(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& Model) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setDesignMode(sal_Bool bOn) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::awt::XView + virtual void SAL_CALL draw( sal_Int32 x, sal_Int32 y ) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::form::XBoundComponent + virtual void SAL_CALL addUpdateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener >& l) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeUpdateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener >& l) throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL commit() throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::container::XElementAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType( ) throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasElements( ) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::container::XEnumerationAccess + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createEnumeration() throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::container::XIndexAccess + virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getByIndex(sal_Int32 _rIndex) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::form::XGridControl + virtual void SAL_CALL addGridControlListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XGridControlListener >& _listener ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeGridControlListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XGridControlListener >& _listener ) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::form::XGrid (base of XGridControl) + virtual sal_Int16 SAL_CALL getCurrentColumnPosition() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setCurrentColumnPosition(sal_Int16 nPos) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::form::XGridFieldDataSupplier (base of XGridControl) + virtual ::com::sun::star::uno::Sequence< sal_Bool > SAL_CALL queryFieldDataType( const ::com::sun::star::uno::Type& xType ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL queryFieldData( sal_Int32 nRow, const ::com::sun::star::uno::Type& xType ) throw(::com::sun::star::uno::RuntimeException); + +// UnoControl + virtual OUString GetComponentServiceName(); + +// ::com::sun::star::util::XModifyBroadcaster + virtual void SAL_CALL addModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& l) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& l) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::util::XModeSelector + virtual void SAL_CALL setMode(const OUString& Mode) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); + virtual OUString SAL_CALL getMode() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< OUString> SAL_CALL getSupportedModes() throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsMode(const OUString& Mode) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::container::XContainer + virtual void SAL_CALL addContainerListener(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& l) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeContainerListener(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& l) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::frame::XDispatchProvider + virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL queryDispatch(const ::com::sun::star::util::URL& aURL, const OUString& aTargetFrameName, sal_Int32 nSearchFlags) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > > SAL_CALL queryDispatches(const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::frame::XDispatchProviderInterception + virtual void SAL_CALL registerDispatchProviderInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& xInterceptor) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL releaseDispatchProviderInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& xInterceptor) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::view::XSelectionSupplier + virtual sal_Bool SAL_CALL select( const ::com::sun::star::uno::Any& aSelection ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getSelection( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addSelectionChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeSelectionChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); + +protected: + virtual FmXGridPeer* imp_CreatePeer(Window* pParent); + // ImplCreatePeer would be better, but doesn't work because it's not exported + +}; + +//================================================================== +// FmXGridPeer -> Peer for the Gridcontrol +//================================================================== +typedef ::comphelper::ImplHelper19 < ::com::sun::star::form::XGridPeer, + ::com::sun::star::form::XBoundComponent, + ::com::sun::star::form::XGridControl, + ::com::sun::star::sdb::XRowSetSupplier, + ::com::sun::star::util::XModifyBroadcaster, + ::com::sun::star::beans::XPropertyChangeListener, + ::com::sun::star::container::XContainerListener, + ::com::sun::star::sdbc::XRowSetListener, + ::com::sun::star::form::XLoadListener, + ::com::sun::star::view::XSelectionChangeListener, + ::com::sun::star::container::XIndexAccess, + ::com::sun::star::container::XEnumerationAccess, + ::com::sun::star::util::XModeSelector, + ::com::sun::star::container::XContainer, + ::com::sun::star::frame::XStatusListener, + ::com::sun::star::frame::XDispatchProvider, + ::com::sun::star::frame::XDispatchProviderInterception, + ::com::sun::star::form::XResetListener, + ::com::sun::star::view::XSelectionSupplier + > FmXGridPeer_BASE; +class FmGridControl; +class SVX_DLLPUBLIC FmXGridPeer :public VCLXWindow + ,public FmXGridPeer_BASE +{ + ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > m_xColumns; + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet > m_xCursor; + ::cppu::OInterfaceContainerHelper m_aModifyListeners, + m_aUpdateListeners, + m_aContainerListeners, + m_aSelectionListeners, + m_aGridControlListeners; + + OUString m_aMode; + sal_Int32 m_nCursorListening; + + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor > m_xFirstDispatchInterceptor; + + sal_Bool m_bInterceptingDispatch; + + sal_Bool* m_pStateCache; + // one bool for each supported url + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > * m_pDispatchers; + // one dispatcher for each supported url + // (I would like to have a vector here but including the stl in an exported file seems + // very risky to me ....) + + class GridListenerDelegator; + friend class GridListenerDelegator; + GridListenerDelegator* m_pGridListener; + +protected: + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext; + ::osl::Mutex m_aMutex; + +public: + FmXGridPeer(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >&); + ~FmXGridPeer(); + + // spaeter Constructor, immer nach dem realen Constructor zu rufen ! + void Create(Window* pParent, WinBits nStyle); + +// UNO connection + DECLARE_UNO3_DEFAULTS(FmXGridPeer, VCLXWindow); + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(const ::com::sun::star::uno::Type& _rType) throw (::com::sun::star::uno::RuntimeException); + +// XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type> SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence<sal_Int8> SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::lang::XUnoTunnel + static const ::com::sun::star::uno::Sequence< sal_Int8 >& getUnoTunnelImplementationId() throw(); + static FmXGridPeer* getImplementation( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxIFace ) throw(); + sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& _rIdentifier ) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::form::XGridPeer + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > SAL_CALL getColumns( ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setColumns( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >& aColumns ) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::lang::XComponent + virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::lang::XEventListener + virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::form::XBoundComponent + virtual void SAL_CALL addUpdateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener >& l) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeUpdateListener(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XUpdateListener >& l) throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL commit() throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::container::XElementAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType( ) throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasElements( ) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::container::XEnumerationAccess + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createEnumeration() throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::container::XIndexAccess + virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getByIndex(sal_Int32 _rIndex) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::beans::XPropertyChangeListener + virtual void SAL_CALL SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::form::XLoadListener + virtual void SAL_CALL loaded(const ::com::sun::star::lang::EventObject& rEvent) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL unloaded(const ::com::sun::star::lang::EventObject& rEvent) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL unloading(const ::com::sun::star::lang::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL reloading(const ::com::sun::star::lang::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL reloaded(const ::com::sun::star::lang::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::sdbc::XRowSetListener + virtual void SAL_CALL cursorMoved(const ::com::sun::star::lang::EventObject& event) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL rowChanged(const ::com::sun::star::lang::EventObject& event) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL rowSetChanged(const ::com::sun::star::lang::EventObject& event) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::container::XContainerListener + virtual void SAL_CALL elementInserted(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL elementRemoved(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL elementReplaced(const ::com::sun::star::container::ContainerEvent& Event) throw(::com::sun::star::uno::RuntimeException); + +// VCLXWindow + virtual void SAL_CALL setProperty( const OUString& PropertyName, const ::com::sun::star::uno::Any& Value ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getProperty( const OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessibleContext > + CreateAccessibleContext(); + +// ::com::sun::star::form::XGridControl + virtual void SAL_CALL addGridControlListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XGridControlListener >& _listener ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeGridControlListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XGridControlListener >& _listener ) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::form::XGrid (base of XGridControl) + virtual sal_Int16 SAL_CALL getCurrentColumnPosition() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setCurrentColumnPosition(sal_Int16 nPos) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::form::XGridFieldDataSupplier (base of XGridControl) + virtual ::com::sun::star::uno::Sequence< sal_Bool > SAL_CALL queryFieldDataType( const ::com::sun::star::uno::Type& xType ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL queryFieldData( sal_Int32 nRow, const ::com::sun::star::uno::Type& xType ) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::sdb::XRowSetSupplier + virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet > SAL_CALL getRowSet() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setRowSet(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& xDataSource) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::util::XModifyBroadcaster + virtual void SAL_CALL addModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& l) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeModifyListener(const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& l) throw(::com::sun::star::uno::RuntimeException); + +// UnoControl + virtual void SAL_CALL SAL_CALL setDesignMode(sal_Bool bOn) throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL isDesignMode() throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::view::XSelectionChangeListener + virtual void SAL_CALL selectionChanged(const ::com::sun::star::lang::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException); + + void CellModified(); + +// PropertyListening + void updateGrid(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& _rDatabaseCursor); + void startCursorListening(); + void stopCursorListening(); + +// ::com::sun::star::util::XModeSelector + virtual void SAL_CALL setMode(const OUString& Mode) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); + virtual OUString SAL_CALL getMode() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedModes() throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsMode(const OUString& Mode) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::container::XContainer + virtual void SAL_CALL addContainerListener(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& l) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeContainerListener(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener >& l) throw(::com::sun::star::uno::RuntimeException); + + void columnVisible(DbGridColumn* pColumn); + void columnHidden(DbGridColumn* pColumn); + +// ::com::sun::star::awt::XView + virtual void SAL_CALL draw( sal_Int32 x, sal_Int32 y ) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::frame::XDispatchProvider + virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL queryDispatch(const ::com::sun::star::util::URL& aURL, const OUString& aTargetFrameName, sal_Int32 nSearchFlags) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > > SAL_CALL queryDispatches(const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::frame::XDispatchProviderInterception + virtual void SAL_CALL registerDispatchProviderInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& xInterceptor) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL releaseDispatchProviderInterceptor(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterceptor >& xInterceptor) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::frame::XStatusListener + virtual void SAL_CALL statusChanged(const ::com::sun::star::frame::FeatureStateEvent& Event) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::form::XResetListener + virtual sal_Bool SAL_CALL approveReset(const ::com::sun::star::lang::EventObject& rEvent) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL resetted(const ::com::sun::star::lang::EventObject& rEvent) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::view::XSelectionSupplier + virtual sal_Bool SAL_CALL select( const ::com::sun::star::uno::Any& aSelection ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getSelection( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addSelectionChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeSelectionChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); + +protected: + virtual FmGridControl* imp_CreateControl(Window* pParent, WinBits nStyle); + + static ::com::sun::star::uno::Sequence< ::com::sun::star::util::URL>& getSupportedURLs(); + static ::com::sun::star::uno::Sequence<sal_uInt16>& getSupportedGridSlots(); + void ConnectToDispatcher(); + void DisConnectFromDispatcher(); + void UpdateDispatches(); // will connect if not already connected and just update else + + /** If a derived class wants to listen at some column properties, it doesn't have + to overload all methods affecting columns (setColumns, elementInserted, elementRemoved ...) + Instead it may use addColumnListeners and removeColumnListeners which are called in all + the cases. + */ + virtual void addColumnListeners(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xCol); + virtual void removeColumnListeners(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xCol); + + void selectionChanged(); + void columnChanged(); + + DECL_LINK(OnQueryGridSlotState, void*); + DECL_LINK(OnExecuteGridSlot, void*); +}; + + + +#endif // _SVX_FMGRID_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmmodel.hxx b/include/svx/fmmodel.hxx new file mode 100644 index 000000000000..980f2a58e3d8 --- /dev/null +++ b/include/svx/fmmodel.hxx @@ -0,0 +1,93 @@ +/* -*- 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 _SVX_FMMODEL_HXX +#define _SVX_FMMODEL_HXX + +#include <svx/svdmodel.hxx> +#include "svx/svxdllapi.h" + +class SfxObjectShell; +class SfxItemPool; +class FmXUndoEnvironment; +class SfxObjectShell; +class SbxObject; +class SbxArray; +class SbxValue; + +struct FmFormModelImplData; +class SVX_DLLPUBLIC FmFormModel : + public SdrModel +{ +private: + FmFormModelImplData* m_pImpl; + SfxObjectShell* m_pObjShell; + + sal_Bool m_bOpenInDesignMode : 1; + sal_Bool m_bAutoControlFocus : 1; + + SVX_DLLPRIVATE FmFormModel( const FmFormModel& ); // never implemented + SVX_DLLPRIVATE void operator=(const FmFormModel& rSrcModel); // never implemented + +public: + TYPEINFO(); + + FmFormModel(SfxItemPool* pPool=NULL, SfxObjectShell* pPers=NULL ); + FmFormModel(const XubString& rPath, SfxItemPool* pPool=NULL, + SfxObjectShell* pPers=NULL ); + FmFormModel(const XubString& rPath, SfxItemPool* pPool, SfxObjectShell* pPers, + bool bUseExtColorTable); + + virtual ~FmFormModel(); + + virtual SdrPage* AllocPage(bool bMasterPage); + virtual void InsertPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF); + virtual SdrPage* RemovePage(sal_uInt16 nPgNum); + virtual void MovePage(sal_uInt16 nPgNum, sal_uInt16 nNewPos); + virtual void InsertMasterPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF); + virtual SdrPage* RemoveMasterPage(sal_uInt16 nPgNum); + + virtual SdrLayerID GetControlExportLayerId( const SdrObject& rObj ) const; + SfxObjectShell* GetObjectShell() const { return m_pObjShell; } + void SetObjectShell( SfxObjectShell* pShell ); + + sal_Bool GetOpenInDesignMode() const { return m_bOpenInDesignMode; } + void SetOpenInDesignMode( sal_Bool _bOpenDesignMode ); + + sal_Bool GetAutoControlFocus() const { return m_bAutoControlFocus; } + void SetAutoControlFocus( sal_Bool _bAutoControlFocus ); + + /** check whether the OpenInDesignMode has been set explicitly or been loaded (<FALSE/>) + or if it still has the default value from construction (<TRUE/>) + */ + sal_Bool OpenInDesignModeIsDefaulted(); + + /** determines whether form controls should use the SdrModel's reference device for text rendering + */ + sal_Bool ControlsUseRefDevice() const; + + FmXUndoEnvironment& GetUndoEnv(); + +private: + void implSetOpenInDesignMode( sal_Bool _bOpenDesignMode, sal_Bool _bForce ); +}; + +#endif // _FM_FMMODEL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmobjfac.hxx b/include/svx/fmobjfac.hxx new file mode 100644 index 000000000000..1686f891f357 --- /dev/null +++ b/include/svx/fmobjfac.hxx @@ -0,0 +1,44 @@ +/* -*- 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 _SVX_FMOBJFAC_HXX +#define _SVX_FMOBJFAC_HXX + +#include <tools/link.hxx> +#include "svx/svxdllapi.h" + +class SdrObjFactory; + + + +class SVX_DLLPUBLIC FmFormObjFactory +{ +public: + FmFormObjFactory(); + ~FmFormObjFactory(); + + DECL_LINK(MakeObject, SdrObjFactory*); +}; + + + + +#endif // _FM_FMOBJFAC_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmpage.hxx b/include/svx/fmpage.hxx new file mode 100644 index 000000000000..ba3bdd13679d --- /dev/null +++ b/include/svx/fmpage.hxx @@ -0,0 +1,82 @@ +/* -*- 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 _SVX_FMPAGE_HXX +#define _SVX_FMPAGE_HXX + +#include <svx/svdpage.hxx> +#include <comphelper/uno3.hxx> +#include "svx/svxdllapi.h" +#include <tools/contnr.hxx> + +class StarBASIC; +class FmFormModel; +class FmFormPageImpl; // contains a list of all forms + +namespace com { namespace sun { namespace star { + namespace form { + class XForms; + } +}}} + +class SdrView; +class HelpEvent; + +class SVX_DLLPUBLIC FmFormPage : public SdrPage +{ + friend class FmFormObj; + FmFormPageImpl* m_pImpl; + String m_sPageName; + StarBASIC* m_pBasic; + +public: + TYPEINFO(); + + FmFormPage(FmFormModel& rModel,StarBASIC*, bool bMasterPage=sal_False); + FmFormPage(const FmFormPage& rPage); + ~FmFormPage(); + + virtual void SetModel(SdrModel* pNewModel); + + virtual SdrPage* Clone() const; + using SdrPage::Clone; + + virtual void InsertObject(SdrObject* pObj, sal_uLong nPos = CONTAINER_APPEND, + const SdrInsertReason* pReason=NULL); + + virtual SdrObject* RemoveObject(sal_uLong nObjNum); + + // access to all forms + const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForms>& GetForms( bool _bForceCreate = true ) const; + + FmFormPageImpl& GetImpl() const { return *m_pImpl; } + +public: + const String& GetName() const { return m_sPageName; } + void SetName( const String& rName ) { m_sPageName = rName; } + StarBASIC* GetBasic() const { return m_pBasic; } + sal_Bool RequestHelp( + Window* pWin, + SdrView* pView, + const HelpEvent& rEvt ); +}; + +#endif // _SVX_FMPAGE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmresids.hrc b/include/svx/fmresids.hrc new file mode 100644 index 000000000000..73cf4c043e7a --- /dev/null +++ b/include/svx/fmresids.hrc @@ -0,0 +1,227 @@ +/* -*- 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 _SVX_FMRESIDS_HRC +#define _SVX_FMRESIDS_HRC + +#include <svl/solar.hrc> + +// unnamed resources ------------------------------------------------------- +// sub resources ..................... + +// ImageList-Id's ----------------------------------------------------------- +#define RID_SVXIMGLIST_FMEXPL (RID_FORMS_START + 0) + +// Image-Id's ----------------------------------------------------------- +#define RID_SVXIMG_FORM SID_FM_CONFIG +#define RID_SVXIMG_CONTROL SID_CHOOSE_CONTROLS +#define RID_SVXIMG_COLLAPSEDNODE (RID_FORMS_START + 2) +#define RID_SVXIMG_EXPANDEDNODE (RID_FORMS_START + 3) +#define RID_SVXIMG_BUTTON SID_FM_PUSHBUTTON +#define RID_SVXIMG_RADIOBUTTON SID_FM_RADIOBUTTON +#define RID_SVXIMG_CHECKBOX SID_FM_CHECKBOX +#define RID_SVXIMG_FIXEDTEXT SID_FM_FIXEDTEXT +#define RID_SVXIMG_GROUPBOX SID_FM_GROUPBOX +#define RID_SVXIMG_EDIT SID_FM_EDIT +#define RID_SVXIMG_LISTBOX SID_FM_LISTBOX +#define RID_SVXIMG_COMBOBOX SID_FM_COMBOBOX +#define RID_SVXIMG_FORMS (RID_FORMS_START +13) +#define RID_SVXIMG_IMAGEBUTTON SID_FM_IMAGEBUTTON +#define RID_SVXIMG_IMAGECONTROL SID_FM_IMAGECONTROL +#define RID_SVXIMG_FILECONTROL SID_FM_FILECONTROL +#define RID_SVXIMG_DATEFIELD SID_FM_DATEFIELD +#define RID_SVXIMG_TIMEFIELD SID_FM_TIMEFIELD +#define RID_SVXIMG_NUMERICFIELD SID_FM_NUMERICFIELD +#define RID_SVXIMG_CURRENCYFIELD SID_FM_CURRENCYFIELD +#define RID_SVXIMG_PATTERNFIELD SID_FM_PATTERNFIELD +#define RID_SVXIMG_HIDDEN (RID_FORMS_START +22) +#define RID_SVXIMG_GRID SID_FM_DBGRID +#define RID_SVXIMG_FORMATTEDFIELD SID_FM_FORMATTEDFIELD +#define RID_SVXIMG_FILTER SID_FM_FILTERCRIT +#define RID_SVXIMG_DATE_N_TIME_FIELDS SID_FM_TWOFIELDS_DATE_N_TIME +#define RID_SVXIMG_FIELD (RID_FORMS_START +27) +#define RID_SVXIMG_SCROLLBAR SID_FM_SCROLLBAR +#define RID_SVXIMG_SPINBUTTON SID_FM_SPINBUTTON +#define RID_SVXIMG_NAVIGATIONBAR SID_FM_NAVIGATIONBAR + +// Dialog-Id's ----------------------------------------------------------- +#define RID_SVXDLG_SETFORM (RID_FORMS_START + 5) +#define RID_SVX_FMEXPLORER (RID_FORMS_START + 6) +#define RID_SVXDLG_ADD_DATAITEM (RID_FORMS_START + 12) +#define RID_SVXDLG_ADD_CONDITION (RID_FORMS_START + 13) +#define RID_SVXDLG_NAMESPACE_ITEM (RID_FORMS_START + 14) +#define RID_SVXDLG_MANAGE_NAMESPACE (RID_FORMS_START + 15) +#define RID_SVXDLG_ADD_SUBMISSION (RID_FORMS_START + 16) +#define RID_SVXDLG_ADD_MODEL (RID_FORMS_START + 17) +#define RID_SVXDLG_ADD_INSTANCE (RID_FORMS_START + 18) +#define RID_SVXWIN_DATANAVIGATOR (RID_FORMS_START + 19) +#define RID_SVX_XFORMS_TABPAGES (RID_FORMS_START + 20) + +// Toolbars ------------------------------------------------------------ +#define RID_SVXTBX_FORM_NAVIGATION (RID_FORMS_START + 1) +#define RID_SVXTBX_FORM_FILTER (RID_FORMS_START + 2) +#define RID_SVXTBX_TEXT_CONTROL_ATTRIBUTES (RID_FORMS_START + 3) +#define RID_SVXTBX_CONTROLS (RID_FORMS_START + 4) +#define RID_SVXTBX_MORECONTROLS (RID_FORMS_START + 5) +#define RID_SVXTBX_FORMDESIGN (RID_FORMS_START + 6) + +// Menu-Id's ----------------------------------------------------------- +#define RID_FMEXPLORER_POPUPMENU (RID_FORMS_START + 0) +#define RID_SVXMNU_ROWS (RID_FORMS_START + 1) +#define RID_SVXMNU_COLS (RID_FORMS_START + 2) +#define RID_SVXMNU_CELL (RID_FORMS_START + 3) +#define RID_FMSHELL_CONVERSIONMENU (RID_FORMS_START + 4) +#define RID_FM_FILTER_MENU (RID_FORMS_START + 5) +#define RID_FM_TEXTATTRIBUTE_MENU (RID_FORMS_START + 6) +#define MENU_FM_TEXTATTRIBITES_STYLE (RID_FORMS_START + 7) +#define MENU_FM_TEXTATTRIBITES_ALIGNMENT (RID_FORMS_START + 8) +#define MENU_FM_TEXTATTRIBITES_SPACING (RID_FORMS_START + 9) +#define RID_MENU_DATANAVIGATOR (RID_FORMS_START + 10) + +// QueryBox-Id's ----------------------------------------------------------- +#define RID_QRY_SAVEMODIFIED (RID_FORMS_START + 1) +#define RID_QRY_REMOVE_MODEL (RID_FORMS_START + 2) +#define RID_QRY_REMOVE_INSTANCE (RID_FORMS_START + 3) +#define RID_QRY_REMOVE_ELEMENT (RID_FORMS_START + 4) +#define RID_QRY_REMOVE_ATTRIBUTE (RID_FORMS_START + 5) +#define RID_QRY_LINK_WARNING (RID_FORMS_START + 6) +#define RID_QRY_REMOVE_SUBMISSION (RID_FORMS_START + 7) +#define RID_QRY_REMOVE_BINDING (RID_FORMS_START + 8) + +// ErrorBox-Id's ----------------------------------------------------------- +#define RID_ERR_INVALID_XMLNAME (RID_FORMS_START + 1) +#define RID_ERR_INVALID_XMLPREFIX (RID_FORMS_START + 2) +#define RID_ERR_DOUBLE_MODELNAME (RID_FORMS_START + 3) +#define RID_ERR_EMPTY_SUBMISSIONNAME (RID_FORMS_START + 4) + +// String-Id's ----------------------------------------------------------- +#define RID_STR_FORMSHELL (RID_FORMS_START + 10) +#define RID_STR_STDFORMNAME (RID_FORMS_START + 11) +#define RID_STR_REC_TEXT (RID_FORMS_START + 12) +#define RID_STR_REC_FROM_TEXT (RID_FORMS_START + 13) +#define RID_STR_UNDO_PROPERTY (RID_FORMS_START + 14) +#define RID_STR_UNDO_CONTAINER_INSERT (RID_FORMS_START + 15) +#define RID_STR_UNDO_CONTAINER_REMOVE (RID_FORMS_START + 16) +#define RID_STR_UNDO_CONTAINER_REMOVE_MULTIPLE (RID_FORMS_START + 27) +#define RID_STR_UNDO_CONTAINER_REPLACE (RID_FORMS_START + 28) +#define RID_STR_UNDO_DELETE_LOGICAL (RID_FORMS_START + 30) +#define RID_STR_UNDO_MODEL_REPLACE (RID_FORMS_START + 31) +#define RID_STR_NAVIGATIONBAR (RID_FORMS_START + 32) +#define RID_STR_FORM (RID_FORMS_START + 36) +#define RID_STR_FIELDSELECTION (RID_FORMS_START + 37) +#define RID_STR_NO_PROPERTIES (RID_FORMS_START + 38) +#define RID_STR_PROPERTIES_CONTROL (RID_FORMS_START + 39) +#define RID_STR_PROPERTIES_FORM (RID_FORMS_START + 40) +#define RID_STR_FMEXPLORER (RID_FORMS_START + 41) +#define RID_STR_FORMS (RID_FORMS_START + 42) +#define RID_STR_WRITEERROR (RID_FORMS_START + 43) +#define RID_STR_DELETECONFIRM_RECORD (RID_FORMS_START + 44) +#define RID_STR_DELETECONFIRM (RID_FORMS_START + 45) +#define RID_STR_GROUPBOX (RID_FORMS_START + 46) +#define RID_STR_NAVIGATION (RID_FORMS_START + 47) +#define RID_STR_COLUMN (RID_FORMS_START + 48) +#define RID_STR_DATE (RID_FORMS_START + 49) +#define RID_STR_TIME (RID_FORMS_START + 50) +#define RID_STR_PROPTITLE_NAVBAR (RID_FORMS_START + 51) +#define RID_STR_PROPTITLE_PUSHBUTTON (RID_FORMS_START + 52) +#define RID_STR_PROPTITLE_RADIOBUTTON (RID_FORMS_START + 53) +#define RID_STR_PROPTITLE_CHECKBOX (RID_FORMS_START + 54) +#define RID_STR_PROPTITLE_FIXEDTEXT (RID_FORMS_START + 55) +#define RID_STR_PROPTITLE_GROUPBOX (RID_FORMS_START + 56) +#define RID_STR_PROPTITLE_EDIT (RID_FORMS_START + 57) +#define RID_STR_PROPTITLE_LISTBOX (RID_FORMS_START + 58) +#define RID_STR_PROPTITLE_COMBOBOX (RID_FORMS_START + 59) +#define RID_STR_PROPTITLE_IMAGEBUTTON (RID_FORMS_START + 60) +#define RID_STR_PROPTITLE_IMAGECONTROL (RID_FORMS_START + 61) +#define RID_STR_PROPTITLE_FILECONTROL (RID_FORMS_START + 62) +#define RID_STR_PROPTITLE_DATEFIELD (RID_FORMS_START + 63) +#define RID_STR_PROPTITLE_TIMEFIELD (RID_FORMS_START + 64) +#define RID_STR_PROPTITLE_NUMERICFIELD (RID_FORMS_START + 65) +#define RID_STR_PROPTITLE_CURRENCYFIELD (RID_FORMS_START + 66) +#define RID_STR_PROPTITLE_PATTERNFIELD (RID_FORMS_START + 67) +#define RID_STR_PROPTITLE_DBGRID (RID_FORMS_START + 68) +#define RID_STR_PROPTITLE_MULTISELECT (RID_FORMS_START + 69) +#define RID_STR_DELETECONFIRM_RECORDS (RID_FORMS_START + 70) +#define RID_STR_CONTROL (RID_FORMS_START + 71) +#define RID_STR_POSTFIX_DATE (RID_FORMS_START + 72) +#define RID_STR_POSTFIX_TIME (RID_FORMS_START + 73) +#define RID_STR_NODATACONTROLS (RID_FORMS_START + 77) +#define RID_STR_FILTER_NAVIGATOR (RID_FORMS_START + 78) +#define RID_STR_FILTER_FILTER_FOR (RID_FORMS_START + 79) +#define RID_STR_FILTER_FILTER_OR (RID_FORMS_START + 80) +#define RID_STR_PROPTITLE_FORMATTED (RID_FORMS_START + 81) +#define RID_STR_SYNTAXERROR (RID_FORMS_START + 82) + // FREE +#define RID_STR_NOCONTROLS_FOR_EXTERNALDISPLAY (RID_FORMS_START + 84) +#define RID_STR_AUTOFIELD (RID_FORMS_START + 89) +#define RID_STR_SVT_SQL_SYNTAX_ERROR (RID_FORMS_START + 90) +#define RID_STR_SVT_SQL_SYNTAX_VALUE_NO_LIKE (RID_FORMS_START + 91) +#define RID_STR_SVT_SQL_SYNTAX_FIELD_NO_LIKE (RID_FORMS_START + 92) +#define RID_STR_SVT_SQL_SYNTAX_CRIT_NO_COMPARE (RID_FORMS_START + 93) +#define RID_STR_SVT_SQL_SYNTAX_INT_NO_VALID (RID_FORMS_START + 94) +#define RID_STR_SVT_SQL_SYNTAX_ACCESS_DAT_NO_VALID (RID_FORMS_START + 95) +#define RID_STR_SVT_SQL_SYNTAX_REAL_NO_VALID (RID_FORMS_START + 96) +#define RID_STR_SVT_SQL_SYNTAX_TABLE (RID_FORMS_START + 97) +#define RID_STR_SVT_SQL_SYNTAX_COLUMN (RID_FORMS_START + 98) +#define RID_STR_PROPTITLE_SCROLLBAR (RID_FORMS_START + 99) +#define RID_STR_PROPTITLE_SPINBUTTON (RID_FORMS_START + 100) +#define RID_STR_PROPTITLE_HIDDEN (RID_FORMS_START + 101) + // FREE +#define RID_STR_DATANAVIGATOR (RID_FORMS_START + 124) +#define RID_STR_DATANAV_SUBM_PARENT (RID_FORMS_START + 125) +#define RID_STR_DATANAV_SUBM_ID (RID_FORMS_START + 126) +#define RID_STR_DATANAV_SUBM_ACTION (RID_FORMS_START + 127) +#define RID_STR_DATANAV_SUBM_METHOD (RID_FORMS_START + 128) +#define RID_STR_DATANAV_SUBM_REF (RID_FORMS_START + 129) +#define RID_STR_DATANAV_SUBM_BIND (RID_FORMS_START + 130) +#define RID_STR_DATANAV_SUBM_REPLACE (RID_FORMS_START + 131) +#define RID_STR_DATANAV_ADD_ELEMENT (RID_FORMS_START + 132) +#define RID_STR_DATANAV_EDIT_ELEMENT (RID_FORMS_START + 133) +#define RID_STR_DATANAV_REMOVE_ELEMENT (RID_FORMS_START + 134) +#define RID_STR_DATANAV_ADD_ATTRIBUTE (RID_FORMS_START + 135) +#define RID_STR_DATANAV_EDIT_ATTRIBUTE (RID_FORMS_START + 136) +#define RID_STR_DATANAV_REMOVE_ATTRIBUTE (RID_FORMS_START + 137) +#define RID_STR_DATANAV_ADD_BINDING (RID_FORMS_START + 138) +#define RID_STR_DATANAV_EDIT_BINDING (RID_FORMS_START + 139) +#define RID_STR_DATANAV_REMOVE_BINDING (RID_FORMS_START + 140) +#define RID_STR_DATANAV_ADD_SUBMISSION (RID_FORMS_START + 141) +#define RID_STR_DATANAV_EDIT_SUBMISSION (RID_FORMS_START + 142) +#define RID_STR_DATANAV_REMOVE_SUBMISSION (RID_FORMS_START + 143) +#define RID_STR_DATANAV_LINKWARN_BUTTON (RID_FORMS_START + 144) +#define RID_STR_SVT_SQL_SYNTAX_TABLE_OR_QUERY (RID_FORMS_START + 145) +#define RID_STR_SVT_SQL_SYNTAX_TABLE_EXISTS (RID_FORMS_START + 146) +#define RID_STR_SVT_SQL_SYNTAX_QUERY_EXISTS (RID_FORMS_START + 147) +#define RID_STR_READONLY_VIEW (RID_FORMS_START + 148) +#define RID_STR_ALREADYEXISTOVERWRITE (RID_FORMS_START + 149) +#define RID_STR_OBJECT_LABEL (RID_FORMS_START + 150) + +// Error-String-Id's ----------------------------------------------------------- +#define RID_ERR_START (RID_FORMS_START + 600) +#define RID_ERR_CONTEXT_ADDFORM (RID_ERR_START + 0) +#define RID_ERR_DUPLICATE_NAME (RID_ERR_START + 1) +#define RID_ERR_FIELDREQUIRED (RID_ERR_START + 2) +#define RID_ERR_NO_ELEMENT (RID_ERR_START + 4) + +// untyped resources ---------------------------------------------------------- + +#define RID_RSC_TABWIN_PREFIX ( RID_FORMS_START + 0 ) +#define RID_RSC_SQL_INTERNATIONAL ( RID_FORMS_START + 1 ) + +#endif // _FM_FMPAGE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmsearch.hxx b/include/svx/fmsearch.hxx new file mode 100644 index 000000000000..2cd75167ea05 --- /dev/null +++ b/include/svx/fmsearch.hxx @@ -0,0 +1,77 @@ +/* -*- 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 _FMSEARCH_HXX +#define _FMSEARCH_HXX + +#include <com/sun/star/sdbc/XResultSet.hpp> +#include <vcl/dialog.hxx> +#include <vcl/button.hxx> +#include <vcl/fixed.hxx> +#include <vcl/edit.hxx> +#include <vcl/combobox.hxx> +#include <vcl/lstbox.hxx> +#include <comphelper/uno3.hxx> +#include <comphelper/stl_types.hxx> +#include <tools/string.hxx> +#include "svx/svxdllapi.h" + +namespace com { namespace sun { namespace star { + namespace util { + class XNumberFormatsSupplier; + } +}}} + +// =================================================================================================== +// Hilfsmethoden + +SVX_DLLPUBLIC sal_Bool IsSearchableControl( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& _xControl, + OUString* pCurrentText = NULL); + // check if the control has one of the interfaces we can use for searching + // *pCurrentText will be filled with the current text of the control (as used when searching this control) + +// =================================================================================================== +// Hilfsstrukturen + +struct FmFoundRecordInformation +{ + ::com::sun::star::uno::Any aPosition; // bookmark of the record in which the text was found + sal_Int16 nFieldPos; // ditto : the relative position of the column (in the string name of the field list in the constructor) + sal_Int16 nContext; // the context in which was searched and found (if the current search knows several contexts) +}; + +// =================================================================================================== +// = struct FmSearchContext - information for the search in different contexts +// =================================================================================================== + +struct FmSearchContext +{ + // [in] + sal_Int16 nContext; // the number of the context + // [out] + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet> xCursor; // the iterator for the context + String strUsedFields; // a list of field names separeted by ';' + ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > > + arrFields; // the corresponding text interfaces for the fields in strUsedFields + String sFieldDisplayNames; // if not empty : names to be displayed for the searchable fields (must have the same token count as strUsedFields !) +}; + +#endif // _FMSEARCH_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmshell.hxx b/include/svx/fmshell.hxx new file mode 100644 index 000000000000..c6091aa4ba24 --- /dev/null +++ b/include/svx/fmshell.hxx @@ -0,0 +1,181 @@ +/* -*- 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 _SVX_FMSHELL_HXX +#define _SVX_FMSHELL_HXX + +// *************************************************************************************************** +// *************************************************************************************************** +// *************************************************************************************************** + +#include <sfx2/shell.hxx> +#include <sfx2/module.hxx> +#include <vcl/event.hxx> + +#include <svx/svxids.hrc> +#include <svx/fmview.hxx> +#include "svx/svxdllapi.h" + +#include <svx/ifaceids.hxx> + +//======================================================================== +class FmFormModel; +class FmFormPage; +class FmXFormShell; +class FmFormView; +class SdrView; +class SdrPage; +class SdrUnoObj; + +namespace com { namespace sun { namespace star { namespace form { + class XForm; + namespace runtime { + class XFormController; + } +} } } } + +namespace svx +{ + class ISdrObjectFilter; +} + +//======================================================================== +class SVX_DLLPUBLIC FmDesignModeChangedHint : public SfxHint +{ + sal_Bool m_bDesignMode; + +public: + TYPEINFO(); + FmDesignModeChangedHint( sal_Bool bDesMode ); + virtual ~FmDesignModeChangedHint(); + + sal_Bool GetDesignMode() const { return m_bDesignMode; } +}; + +//======================================================================== +class SVX_DLLPUBLIC FmFormShell : public SfxShell +{ + friend class FmFormView; + friend class FmXFormShell; + + FmXFormShell* m_pImpl; + FmFormView* m_pFormView; + FmFormModel* m_pFormModel; + SfxViewShell* m_pParentShell; + + sal_uInt16 m_nLastSlot; + sal_Bool m_bDesignMode : 1; + sal_Bool m_bHasForms : 1; // flag storing if the forms on a page exist, + // only for the DesignMode, see UIFeatureChanged! + + // the marks of a FormView have changed... + void NotifyMarkListChanged(FmFormView*); + // (the FormView itself is not a broadcaster, therefore it can't always correctly notify the + // form explorer who is interested in the event) + + class FormShellWaitObject + { + Window* m_pWindow; + public: + FormShellWaitObject(const FmFormShell* _pShell); + ~FormShellWaitObject(); + }; + friend class FormShellWaitObject; + + const OutputDevice* GetCurrentViewDevice() const { return m_pFormView ? m_pFormView->GetActualOutDev() : NULL; } + +public: + SFX_DECL_INTERFACE(SVX_INTERFACE_FORM_SH) + TYPEINFO(); + + FmFormShell(SfxViewShell* pParent, FmFormView* pView = NULL); + virtual ~FmFormShell(); + + virtual void Execute( SfxRequest& ); + virtual void GetState( SfxItemSet& ); + virtual sal_Bool HasUIFeature( sal_uInt32 nFeature ); + + void ExecuteTextAttribute( SfxRequest& ); + void GetTextAttributeState( SfxItemSet& ); + + sal_Bool GetY2KState(sal_uInt16& nReturn); + void SetY2KState(sal_uInt16 n); + + void SetView(FmFormView* pView); + + FmFormView* GetFormView() const { return m_pFormView; } + FmFormModel* GetFormModel() const { return m_pFormModel; } + FmFormPage* GetCurPage() const; + FmXFormShell* GetImpl() const {return m_pImpl;}; + + sal_uInt16 PrepareClose(sal_Bool bUI = sal_True, sal_Bool bForBrowsing = sal_False); + + bool IsActiveControl() const; + void ForgetActiveControl(); + void SetControlActivationHandler( const Link& _rHdl ); + + virtual void Activate(sal_Bool bMDI); + virtual void Deactivate(sal_Bool bMDI); + + // helper methods for implementing XFormLayerAccess + SdrUnoObj* GetFormControl( + const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& _rxModel, + const SdrView& _rView, + const OutputDevice& _rDevice, + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl >& _out_rxControl + ) const; + + ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > GetFormController( + const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm, + const SdrView& _rView, + const OutputDevice& _rDevice + ) const; + + /** puts the focus into the document window, if current a form control has the focus. Otherwise, moves the focus + to the control belonging to the given SdrUnoObj. + */ + void ToggleControlFocus( + const SdrUnoObj& i_rNextCandidate, + const SdrView& i_rView, + OutputDevice& i_rDevice + ) const; + + ::std::auto_ptr< ::svx::ISdrObjectFilter > + CreateFocusableControlFilter( + const SdrView& i_rView, + const OutputDevice& i_rDevice + ) const; + + sal_Bool IsDesignMode() const { return m_bDesignMode; } + void SetDesignMode( sal_Bool _bDesignMode ); + +protected: + void GetFormState(SfxItemSet &rSet, sal_uInt16 nWhich); + + // is there a form on the current page? + void DetermineForms(sal_Bool bInvalidate); + void impl_setDesignMode( sal_Bool bDesign); +}; + +// *************************************************************************************************** +// *************************************************************************************************** +// *************************************************************************************************** + +#endif // _SVX_FMSHELL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmsrccfg.hxx b/include/svx/fmsrccfg.hxx new file mode 100644 index 000000000000..8ad3d2edc569 --- /dev/null +++ b/include/svx/fmsrccfg.hxx @@ -0,0 +1,147 @@ +/* -*- 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 _FMSRCCF_HXX_ +#define _FMSRCCF_HXX_ + +#include <unotools/configvaluecontainer.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include "svx/svxdllapi.h" + +// =================================================================================================== + +#define MATCHING_ANYWHERE 0 +#define MATCHING_BEGINNING 1 +#define MATCHING_END 2 +#define MATCHING_WHOLETEXT 3 + +// this constants should NOT be just changed, since the SearchDialog performs no conversion of the settings of +// its ListBox, but instead just passes them along to the appropriate methods of SearchEngine +// (so if you change the constants or the order of the listbox entries in the dialog, then the other has +// to be adapted) + + +//........................................................................ +namespace svxform +{ +//........................................................................ + + // =================================================================================================== + // = struct FmSearchParams - parameters of a search + // =================================================================================================== + + struct SVX_DLLPUBLIC FmSearchParams + { + protected: + sal_Int32 nTransliterationFlags; + // they're way too sensitive for direct access .... + + public: + // no bit fields at all (want to pass the addresses to the OConfigurationValueContainer) + ::com::sun::star::uno::Sequence< OUString > + aHistory; + OUString sSingleSearchField; + + sal_Int16 nSearchForType; + sal_Int16 nPosition; + sal_Int16 nLevOther; + sal_Int16 nLevShorter; + sal_Int16 nLevLonger; + sal_Bool bLevRelaxed; + + sal_Bool bAllFields; + sal_Bool bUseFormatter; + sal_Bool bBackwards; + sal_Bool bWildcard; + sal_Bool bRegular; + sal_Bool bApproxSearch; + // the last three are mutually exclusive + + sal_Bool bSoundsLikeCJK; + + // ...................................... + FmSearchParams(); + + sal_Bool isIgnoreWidthCJK( ) const; + + sal_Int32 getTransliterationFlags( ) const { return nTransliterationFlags; } + void setTransliterationFlags( sal_Int32 _nFlags ) { nTransliterationFlags = _nFlags; } + + sal_Bool isCaseSensitive( ) const; + void setCaseSensitive( sal_Bool _bCase ); + }; + + // =================================================================================================== + // = class FmSearchConfigItem - a ConfigItem, that remembers search parameters + // =================================================================================================== + + class SVX_DLLPUBLIC FmSearchConfigItem + :protected FmSearchParams + ,public ::utl::OConfigurationValueContainer + // order matters! + { + private: + ::osl::Mutex m_aMutex; + + // wrapper properties: + // some of the members of FmSearchParams are must be translated to be stored in the configuration + OUString m_sSearchForType; + OUString m_sSearchPosition; + + sal_Bool m_bIsMatchCase; + sal_Bool m_bIsMatchFullHalfWidthForms; + sal_Bool m_bIsMatchHiraganaKatakana; + sal_Bool m_bIsMatchContractions; + sal_Bool m_bIsMatchMinusDashCho_on; + sal_Bool m_bIsMatchRepeatCharMarks; + sal_Bool m_bIsMatchVariantFormKanji; + sal_Bool m_bIsMatchOldKanaForms; + sal_Bool m_bIsMatch_DiZi_DuZu; + sal_Bool m_bIsMatch_BaVa_HaFa; + sal_Bool m_bIsMatch_TsiThiChi_DhiZi; + sal_Bool m_bIsMatch_HyuIyu_ByuVyu; + sal_Bool m_bIsMatch_SeShe_ZeJe; + sal_Bool m_bIsMatch_IaIya; + sal_Bool m_bIsMatch_KiKu; + sal_Bool m_bIsIgnorePunctuation; + sal_Bool m_bIsIgnoreWhitespace; + sal_Bool m_bIsIgnoreProlongedSoundMark; + sal_Bool m_bIsIgnoreMiddleDot; + + public: + FmSearchConfigItem(); + ~FmSearchConfigItem(); + + const FmSearchParams& getParams( ) const; + void setParams( const FmSearchParams& _rParams ); + + private: + SVX_DLLPRIVATE void implTranslateFromConfig( ); + SVX_DLLPRIVATE void implTranslateToConfig( ); + }; + +//........................................................................ +} // namespace svxform +//........................................................................ + +// =================================================================================================== + +#endif // _FMSRCCF_HXX_ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmsrcimp.hxx b/include/svx/fmsrcimp.hxx new file mode 100644 index 000000000000..6fc1a2aeaa4e --- /dev/null +++ b/include/svx/fmsrcimp.hxx @@ -0,0 +1,390 @@ +/* -*- 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 _FMSRCIMP_HXX +#define _FMSRCIMP_HXX + +#include <svx/fmtools.hxx> +#include "svx/svxdllapi.h" + +#include <com/sun/star/awt/XCheckBox.hpp> +#include <com/sun/star/awt/XListBox.hpp> +#include <com/sun/star/awt/XTextComponent.hpp> +#include <com/sun/star/util/XNumberFormatsSupplier.hpp> +#include <com/sun/star/util/XNumberFormatter.hpp> + +#include <comphelper/stl_types.hxx> +#include <cppuhelper/implbase1.hxx> +#include <osl/mutex.hxx> +#include <unotools/charclass.hxx> +#include <unotools/collatorwrapper.hxx> +#include <osl/thread.hxx> + +#include <deque> + +// =================================================================================================== +// = class FmSearchThread +// =================================================================================================== + +class FmSearchEngine; +class FmSearchThread : public ::osl::Thread +{ + FmSearchEngine* m_pEngine; + Link m_aTerminationHdl; + + virtual void SAL_CALL run(); + virtual void SAL_CALL onTerminated(); + +public: + FmSearchThread(FmSearchEngine* pEngine) : m_pEngine(pEngine) { } + void setTerminationHandler(Link aHdl) { m_aTerminationHdl = aHdl; } +}; + +// =================================================================================================== +// = struct FmSearchProgress - the owner of SearchEngine receives this structure for status updates +// = (at the end of the search) +// =================================================================================================== + +struct FmSearchProgress +{ + enum STATE { STATE_PROGRESS, STATE_PROGRESS_COUNTING, STATE_CANCELED, STATE_SUCCESSFULL, STATE_NOTHINGFOUND, STATE_ERROR }; + // (move to new record; progress during counting of records; cancelled; record found; nothing found; + // any non-processable error) + STATE aSearchState; + + // current record - always valid (e.g. of interest for continuing search in case of cancellation) + sal_uInt32 nCurrentRecord; + // Overflow - only valid in case of STATE_PROGRESS + sal_Bool bOverflow; + + // the position of the search cursor - valid in case of STATE_SUCCESSFULL, STATE_CANCELED and STATE_NOTHING_FOUND + ::com::sun::star::uno::Any aBookmark; + // the field, in which the text was found - valid in case of STATE_SUCCESSFULL + sal_Int32 nFieldIndex; +}; + +// =================================================================================================== +// = class FmRecordCountListener - utility class for FmSearchEngine, listens at a certain cursor and provides +// = the differences in RecordCount +// =================================================================================================== + +class FmRecordCountListener : public ::cppu::WeakImplHelper1< ::com::sun::star::beans::XPropertyChangeListener> +{ +// attribute + Link m_lnkWhoWantsToKnow; + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xListening; + +// attribute access +public: + Link SetPropChangeHandler(const Link& lnk); + +// methods +public: + FmRecordCountListener(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet >& dbcCursor); + // the set has to support the sdb::ResultSet service + virtual ~FmRecordCountListener(); + + // DECLARE_UNO3_AGG_DEFAULTS(FmPropertyListener, UsrObject); + // virtual sal_Bool queryInterface(::com::sun::star::uno::Uik aUik, ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& rOut); + +// ::com::sun::star::lang::XEventListener + virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw(::com::sun::star::uno::RuntimeException); + +// ::com::sun::star::beans::XPropertyChangeListener + virtual void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw(::com::sun::star::uno::RuntimeException); + + void DisConnect(); + +private: + void NotifyCurrentCount(); + +}; + +// =================================================================================================== +// = class FmSearchEngine - Impl class for FmSearchDialog +// =================================================================================================== + +namespace svxform { + // We have three possible control types we may search in, determined by the supported interfaces : ::com::sun::star::awt::XTextComponent, ::com::sun::star::awt::XListBox, ::com::sun::star::awt::XCheckBox. + // While searching we don't want to do this distinction for every control in every round. So we need some helpers. + class ControlTextWrapper + { + // attributes + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > m_xControl; + // attribute access + public: + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getControl() const{ return m_xControl; } + public: + ControlTextWrapper(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xControl) { m_xControl = _xControl; } + virtual ~ControlTextWrapper() { } + + virtual OUString getCurrentText() const = 0; + }; + class SimpleTextWrapper : public ControlTextWrapper + { + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent > m_xText; + public: + SimpleTextWrapper(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XTextComponent >& _xText); + virtual OUString getCurrentText() const; + }; + class ListBoxWrapper : public ControlTextWrapper + { + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XListBox > m_xBox; + public: + ListBoxWrapper(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XListBox >& _xBox); + virtual OUString getCurrentText() const; + }; + class CheckBoxWrapper : public ControlTextWrapper + { + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XCheckBox > m_xBox; + public: + CheckBoxWrapper(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XCheckBox >& _xBox); + virtual OUString getCurrentText() const; + }; +} + +enum FMSEARCH_MODE { SM_BRUTE, SM_ALLOWSCHEDULE, SM_USETHREAD }; + +DECLARE_STL_VECTOR( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>, InterfaceArray); + +class SVX_DLLPUBLIC FmSearchEngine +{ + friend class FmSearchThread; + + enum SEARCH_RESULT { SR_FOUND, SR_NOTFOUND, SR_ERROR, SR_CANCELED }; + enum SEARCHFOR_TYPE { SEARCHFOR_STRING, SEARCHFOR_NULL, SEARCHFOR_NOTNULL }; + + CursorWrapper m_xSearchCursor; + std::deque<sal_Int32> m_arrFieldMapping; + // since the iterator could have more columns, as managed here (in this field listbox), + // a mapping of this ::com::sun::star::form keys on the indices of the respective columns is kept in the iterator + + // the formatter + ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier > m_xFormatSupplier; + ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter > m_xFormatter; + + CharClass m_aCharacterClassficator; + CollatorWrapper m_aStringCompare; + + // the collection of all interesting fields (or their ::com::sun::star::data::XDatabaseVariant interfaces and FormatKeys) + struct FieldInfo + { + ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XColumn > xContents; + sal_uInt32 nFormatKey; + sal_Bool bDoubleHandling; + }; + + DECLARE_STL_VECTOR(FieldInfo, FieldCollection); + FieldCollection m_arrUsedFields; + sal_Int32 m_nCurrentFieldIndex; // the last parameter of RebuildUsedFields, it allows checks in FormatField + + DECLARE_STL_VECTOR(svxform::ControlTextWrapper*, ControlTextSuppliers); + ControlTextSuppliers m_aControlTexts; + + sal_Bool m_bUsingTextComponents; + CursorWrapper m_xOriginalIterator; + CursorWrapper m_xClonedIterator; + + // data for the decision in which field a "Found" is accepted + ::com::sun::star::uno::Any m_aPreviousLocBookmark; // position of the last finding + FieldCollectionIterator m_iterPreviousLocField; // field of the last finding + + // Kommunikation mit dem Thread, der die eigentliche Suche durchfuehrt + OUString m_strSearchExpression; // forward direction + SEARCHFOR_TYPE m_eSearchForType; // ditto + SEARCH_RESULT m_srResult; // backward direction + + // der Link, dem ich Fortschritte und Ergebnisse mitteile + Link m_aProgressHandler; + sal_Bool m_bSearchingCurrently : 1; // is an (asynchronous) search running? + sal_Bool m_bCancelAsynchRequest : 1; // should be cancelled ? + ::osl::Mutex m_aCancelAsynchAccess; // access to_bCancelAsynchRequest (technically only + // relevant for m_eMode == SM_USETHREAD) + FMSEARCH_MODE m_eMode; // current mode + + // parameters for the search + sal_Bool m_bFormatter : 1; // use field formatting + sal_Bool m_bForward : 1; // direction + sal_Bool m_bWildcard : 1; // wildcard search + sal_Bool m_bRegular : 1; // regular expression + sal_Bool m_bLevenshtein : 1; // Levenshtein search + sal_Bool m_bTransliteration : 1; // Levenshtein search + + sal_Bool m_bLevRelaxed : 1; // parameters for Levenshtein search + sal_uInt16 m_nLevOther; + sal_uInt16 m_nLevShorter; + sal_uInt16 m_nLevLonger; + + sal_uInt16 m_nPosition; // if not regular or levenshtein, then one of the MATCHING_... values + + sal_Int32 m_nTransliterationFlags; + +// ------------- +// member access +private: + SVX_DLLPRIVATE sal_Bool CancelRequested(); // provides a through m_aCancelAsynchAccess backed interpretation of m_bCancelAsynchRequest + +public: + void SetCaseSensitive(sal_Bool bSet); + sal_Bool GetCaseSensitive() const; + + void SetFormatterUsing(sal_Bool bSet); // this is somewhat more extensive, so no inline ... here + sal_Bool GetFormatterUsing() const { return m_bFormatter; } + + void SetDirection(sal_Bool bForward) { m_bForward = bForward; } + sal_Bool GetDirection() const { return m_bForward; } + + void SetWildcard(sal_Bool bSet) { m_bWildcard = bSet; } + sal_Bool GetWildcard() const { return m_bWildcard; } + + void SetRegular(sal_Bool bSet) { m_bRegular = bSet; } + sal_Bool GetRegular() const { return m_bRegular; } + + void SetLevenshtein(sal_Bool bSet) { m_bLevenshtein = bSet; } + sal_Bool GetLevenshtein() const { return m_bLevenshtein; } + + void SetIgnoreWidthCJK(sal_Bool bSet); + sal_Bool GetIgnoreWidthCJK() const; + + void SetTransliteration(sal_Bool bSet) { m_bTransliteration = bSet; } + sal_Bool GetTransliteration() const { return m_bTransliteration; } + + void SetLevRelaxed(sal_Bool bSet) { m_bLevRelaxed = bSet; } + sal_Bool GetLevRelaxed() const { return m_bLevRelaxed; } + void SetLevOther(sal_uInt16 nHowMuch) { m_nLevOther = nHowMuch; } + sal_uInt16 GetLevOther() const { return m_nLevOther; } + void SetLevShorter(sal_uInt16 nHowMuch) { m_nLevShorter = nHowMuch; } + sal_uInt16 GetLevShorter() const { return m_nLevShorter; } + void SetLevLonger(sal_uInt16 nHowMuch) { m_nLevLonger = nHowMuch; } + sal_uInt16 GetLevLonger() const { return m_nLevLonger; } + // all Lev. values will only be considered in case of m_bLevenshtein==sal_True + + void SetTransliterationFlags(sal_Int32 _nFlags) { m_nTransliterationFlags = _nFlags; } + sal_Int32 GetTransliterationFlags() const { return m_nTransliterationFlags; } + + void SetPosition(sal_uInt16 nValue) { m_nPosition = nValue; } + sal_uInt16 GetPosition() const { return m_nPosition; } + // position will be ignored in case of m_bWildCard==sal_True + + FMSEARCH_MODE GetSearchMode() const { return m_eMode; } + +public: + /** two constructs, both analogical to FmSearchDialog, therefore look this up for explanations .... + xCursor has to implement ::com::sun::star::data::DatabaseCursor service each time. + If eMode == SM_USETHREAD, a ProgressHandler should be set, because in this case the result forwarding will be done + by this handler. + If eMode != SM_USETHREAD, SearchNext and StarOver won't return, until the search has finished (independently of its + success), only then the result can be requested. If additionally the ProgressHandler is set, it will be called for + every record as well as at the end of the search. + */ + FmSearchEngine( + const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext, + const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet >& xCursor, + const OUString& strVisibleFields, + const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >& xFormat, + FMSEARCH_MODE eMode); + FmSearchEngine( + const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext, + const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet >& xCursor, + const OUString& strVisibleFields, + const InterfaceArray& arrFields, + FMSEARCH_MODE eMode); + + virtual ~FmSearchEngine(); + + /** the link will be called on every record and after the completion of the search, the parameter is a pointer to + a FmSearchProgress structure + the handler should be in any case thread-safe + */ + void SetProgressHandler(Link aHdl) { m_aProgressHandler = aHdl; } + + /// search for the next appearance (for nDirection values check DIRECTION_*-defines) + void SearchNext(const OUString& strExpression); + /// analogous, search for "NULL" (_bSearchForNull==sal_True) or "not NULL" + void SearchNextSpecial(sal_Bool _bSearchForNull); + /// search for the next appearance, dependent on nDirection from the start or end + void StartOver(const OUString& strExpression); + /// analogous, search for "NULL" (_bSearchForNull==sal_True) or "not NULL" + void StartOverSpecial(sal_Bool _bSearchForNull); + /// invalidate previous search reference + void InvalidatePreviousLoc(); + + /** rebuilds m_arrUsedFields (nFieldIndex==-1 means all fields, otherwise it specifies the field index) + if bForce is not set, nothing will happen in case of nFieldIndex == m_nCurrentFieldIndex + (calls InvalidatePreviousLoc) + */ + void RebuildUsedFields(sal_Int32 nFieldIndex, sal_Bool bForce = sal_False); + OUString FormatField(sal_Int32 nWhich); + + /// returns directly; once it was really aborted, ProgressHandler is called with STATE_CANCELED + void CancelSearch(); + + /** only valid, if not an (asynchronous) search is running, the next search will then be executed + on top of the new iterator with the new parameter + */ + sal_Bool SwitchToContext(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet >& xCursor, const OUString& strVisibleFields, const InterfaceArray& arrFields, + sal_Int32 nFieldIndex); + +protected: + void Init(const OUString& strVisibleFields); + + void SearchNextImpl(); + // this Impl method is running in SearchThread + + // start a thread-search (or call SearchNextImpl directly, depending on the search mode) + void ImplStartNextSearch(); + +private: + SVX_DLLPRIVATE void clearControlTexts(); + SVX_DLLPRIVATE void fillControlTexts(const InterfaceArray& arrFields); + + // three methods implementing a complete search loop (null/not null, wildcard, SearchText) + // (they all have some code in common, but with this solution we have do do a distinction only once per search (before + // starting the loop), not in every loop step + SVX_DLLPRIVATE SEARCH_RESULT SearchSpecial(sal_Bool _bSearchForNull, sal_Int32& nFieldPos, FieldCollectionIterator& iterFieldLoop, + const FieldCollectionIterator& iterBegin, const FieldCollectionIterator& iterEnd); + SVX_DLLPRIVATE SEARCH_RESULT SearchWildcard(const OUString& strExpression, sal_Int32& nFieldPos, FieldCollectionIterator& iterFieldLoop, + const FieldCollectionIterator& iterBegin, const FieldCollectionIterator& iterEnd); + SVX_DLLPRIVATE SEARCH_RESULT SearchRegularApprox(const OUString& strExpression, sal_Int32& nFieldPos, FieldCollectionIterator& iterFieldLoop, + const FieldCollectionIterator& iterBegin, const FieldCollectionIterator& iterEnd); + + SVX_DLLPRIVATE void PropagateProgress(sal_Bool _bDontPropagateOverflow); + // call the ProgressHandler with STATE_PROGRESS and the current position of the search iterator + + // helpers, that are needed several times + SVX_DLLPRIVATE sal_Bool MoveCursor(); + // moves m_xSearchIterator with respect to direction/overflow cursor + SVX_DLLPRIVATE sal_Bool MoveField(sal_Int32& nPos, FieldCollectionIterator& iter, const FieldCollectionIterator& iterBegin, const FieldCollectionIterator& iterEnd); + // moves the iterator with respect to the direction/overflow iterator/overflow cursor + SVX_DLLPRIVATE void BuildAndInsertFieldInfo(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& xAllFields, sal_Int32 nField); + // builds a FieldInfo in relation to field number nField (in xAllFields) and adds it to m_arrUsedFields + // xAllFields needs to support the DatabaseRecord service + SVX_DLLPRIVATE OUString FormatField(const FieldInfo& rField); + // formats the field with the NumberFormatter + + SVX_DLLPRIVATE sal_Bool HasPreviousLoc() { return m_aPreviousLocBookmark.hasValue(); } + + DECL_LINK(OnSearchTerminated, FmSearchThread*); + // is used by SearchThread, after the return from this handler the thread removes itself + DECL_LINK(OnNewRecordCount, void*); +}; + +#endif // _FMSRCIMP_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmtools.hxx b/include/svx/fmtools.hxx new file mode 100644 index 000000000000..bd24488c73a8 --- /dev/null +++ b/include/svx/fmtools.hxx @@ -0,0 +1,225 @@ +/* -*- 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 _SVX_FMTOOLS_HXX +#define _SVX_FMTOOLS_HXX + +#include "svx/svxdllapi.h" + +#include <com/sun/star/sdb/SQLContext.hpp> +#include <com/sun/star/sdb/XSQLQueryComposerFactory.hpp> +#include <com/sun/star/sdbcx/Privilege.hpp> +#include <com/sun/star/sdbcx/XColumnsSupplier.hpp> +#include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp> +#include <com/sun/star/sdbc/XRowSet.hpp> +#include <com/sun/star/sdbc/XDatabaseMetaData.hpp> +#include <com/sun/star/sdb/XColumn.hpp> +#include <com/sun/star/sdb/XColumnUpdate.hpp> +#include <com/sun/star/sdb/SQLErrorEvent.hpp> +#include <com/sun/star/sdbc/XConnection.hpp> +#include <com/sun/star/sdbc/XResultSet.hpp> +#include <com/sun/star/sdbc/XResultSetUpdate.hpp> +#include <com/sun/star/sdbcx/XRowLocate.hpp> +#include <com/sun/star/sdbc/XDataSource.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/frame/XDispatchProviderInterception.hpp> +#include <com/sun/star/frame/XDispatchProviderInterceptor.hpp> +#include <com/sun/star/container/XIndexContainer.hpp> +#include <com/sun/star/frame/XDispatch.hpp> +#include <com/sun/star/frame/XStatusListener.hpp> +#include <com/sun/star/frame/FeatureStateEvent.hpp> +#include <com/sun/star/frame/XModel.hpp> +#include <com/sun/star/script/ScriptEventDescriptor.hpp> +#include <com/sun/star/container/XNameAccess.hpp> +#include <com/sun/star/container/XEnumeration.hpp> +#include <com/sun/star/container/XIndexAccess.hpp> +#include <com/sun/star/awt/XControlModel.hpp> +#include <com/sun/star/awt/XControl.hpp> +#include <com/sun/star/awt/FontSlant.hpp> +#include <com/sun/star/awt/FontDescriptor.hpp> +#include <com/sun/star/awt/FontUnderline.hpp> +#include <com/sun/star/awt/FontStrikeout.hpp> +#include <com/sun/star/util/XNumberFormatsSupplier.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/io/XObjectInputStream.hpp> +#include <com/sun/star/io/XObjectOutputStream.hpp> +#include <com/sun/star/io/XPersistObject.hpp> +#include <com/sun/star/util/XNumberFormatter.hpp> +#include <com/sun/star/util/XNumberFormats.hpp> + +#include <tools/wintypes.hxx> +#include <cppuhelper/weakref.hxx> +#include <comphelper/uno3.hxx> +#include <comphelper/stl_types.hxx> +#include <cppuhelper/implbase1.hxx> + +#include <set> + +class Window; + +//================================================================== +// common types +//================================================================== +// displaying a database exception for the user +// display info about a simple ::com::sun::star::sdbc::SQLException +void displayException(const ::com::sun::star::sdbc::SQLException&, Window* _pParent = NULL); +void displayException(const ::com::sun::star::sdbc::SQLWarning&, Window* _pParent = NULL); +SVX_DLLPUBLIC void displayException(const ::com::sun::star::sdb::SQLContext&, Window* _pParent = NULL); +void displayException(const ::com::sun::star::sdb::SQLErrorEvent&, Window* _pParent = NULL); +void displayException(const ::com::sun::star::uno::Any&, Window* _pParent = NULL); + +sal_Int32 getElementPos(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess>& xCont, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& xElement); + +SVX_DLLPUBLIC OUString getLabelName(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& xControlModel); + +// =================================================================================================== +// = class CursorWrapper - a helper class which works in common with a ::com::sun::star::uno::Reference<XDatabaseUpdateCursor>, +// XDatabaseBookmarkCursor and XDatabaseDirectCursor each +// =================================================================================================== + +class CursorWrapper +{ +private: + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> m_xGeneric; + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet> m_xMoveOperations; + ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XRowLocate> m_xBookmarkOperations; + ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XColumnsSupplier> m_xColumnsSupplier; + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> m_xPropertyAccess; + +public: + // Construction/Destruction + CursorWrapper() { } + CursorWrapper(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& _rxCursor, sal_Bool bUseCloned = sal_False); + SVX_DLLPUBLIC CursorWrapper(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet>& _rxCursor, sal_Bool bUseCloned = sal_False); + // if bUseCloned == sal_True, the cursor is first doubled over the XCloneable interface (which it must implement) + // and then used + + friend bool operator==(const CursorWrapper& lhs, const CursorWrapper& rhs) + { + return lhs.m_xGeneric.get() == rhs.m_xGeneric.get(); + } + + sal_Bool is() const { return m_xMoveOperations.is(); } + sal_Bool Is() const { return m_xMoveOperations.is(); } + + CursorWrapper* operator ->() { return this; } + operator const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& () const{ return m_xGeneric; } + + // 'Conversions' + const CursorWrapper& operator=(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet>& xCursor); + operator const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet>& () const { return m_xMoveOperations; } + operator const ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XRowLocate>& () const { return m_xBookmarkOperations; } + operator const ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XColumnsSupplier>& () const { return m_xColumnsSupplier; } + + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& getPropertySet() const { return m_xPropertyAccess; } + const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet >& getResultSet() const { return m_xMoveOperations; } + const ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XRowLocate >& getRowLocate() const { return m_xBookmarkOperations; } + const ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XColumnsSupplier >& getColumnsSupplier() const { return m_xColumnsSupplier; } + + // the usual queryInterface + ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& type) throw ( ::com::sun::star::uno::RuntimeException ) + { return m_xMoveOperations->queryInterface(type); } + + // ::com::sun::star::uno::Reference< ::com::sun::star::sdbcx::XRowLocate> + ::com::sun::star::uno::Any getBookmark(void) + throw( ::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException ) + { return m_xBookmarkOperations->getBookmark(); } + sal_Bool moveToBookmark(const ::com::sun::star::uno::Any& bookmark) throw( ::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException ) { return m_xBookmarkOperations->moveToBookmark(bookmark); } + sal_Bool moveRelativeToBookmark(const ::com::sun::star::uno::Any& bookmark, sal_Int32 rows) throw( ::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException ) { return m_xBookmarkOperations->moveRelativeToBookmark(bookmark, rows); } + sal_Int32 compareBookmarks(const ::com::sun::star::uno::Any& lhs, const ::com::sun::star::uno::Any& rhs) const throw( ::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException ) { return m_xBookmarkOperations->compareBookmarks(lhs, rhs); } + sal_Int32 hasOrderedBookmarks(void) const throw( ::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException ) { return m_xBookmarkOperations->hasOrderedBookmarks(); } + sal_Int32 hashBookmark(const ::com::sun::star::uno::Any& bookmark) const throw( ::com::sun::star::sdbc::SQLException, ::com::sun::star::uno::RuntimeException ) { return m_xBookmarkOperations->hashBookmark(bookmark); } + + // ::com::sun::star::sdbc::XResultSet + sal_Bool isBeforeFirst() const { return m_xMoveOperations->isBeforeFirst(); } + sal_Bool isAfterLast() const { return m_xMoveOperations->isAfterLast(); } + sal_Bool isFirst() const { return m_xMoveOperations->isFirst(); } + sal_Bool isLast() const { return m_xMoveOperations->isLast(); } + void beforeFirst() { m_xMoveOperations->beforeFirst(); } + sal_Bool first() { return m_xMoveOperations->first(); } + sal_Bool last() { return m_xMoveOperations->last(); } + sal_Int32 getRow() const { return m_xMoveOperations->getRow(); } + sal_Bool absolute(sal_Int32 nPosition) { return m_xMoveOperations->absolute(nPosition); } + sal_Bool relative(sal_Int32 nCount) { return m_xMoveOperations->relative(nCount); } + sal_Bool previous() { return m_xMoveOperations->previous(); } + sal_Bool next() { return m_xMoveOperations->next(); } + void refreshRow() { m_xMoveOperations->refreshRow(); } + sal_Bool rowUpdated() { return m_xMoveOperations->rowUpdated(); } + sal_Bool rowInserted() { return m_xMoveOperations->rowInserted(); } + sal_Bool rowDeleted() { return m_xMoveOperations->rowDeleted(); } + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> getStatement() { return m_xMoveOperations->getStatement(); } + // ::com::sun::star::sdbcx::XColumnsSupplier + ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess> getColumns() const throw( ::com::sun::star::uno::RuntimeException ) { return m_xColumnsSupplier->getColumns(); } +private: + void ImplConstruct(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet>& _rxCursor, sal_Bool bUseCloned); +}; + + +class FmXDisposeMultiplexer; +class FmXDisposeListener +{ + friend class FmXDisposeMultiplexer; + + FmXDisposeMultiplexer* m_pAdapter; + ::osl::Mutex& m_rMutex; + +public: + FmXDisposeListener(::osl::Mutex& _rMutex) : m_pAdapter(NULL), m_rMutex(_rMutex) { } + virtual ~FmXDisposeListener(); + + virtual void disposing(const ::com::sun::star::lang::EventObject& _rEvent, sal_Int16 _nId) throw( ::com::sun::star::uno::RuntimeException ) = 0; + +protected: + void setAdapter(FmXDisposeMultiplexer* pAdapter); +}; + +//============================================================================== + +class FmXDisposeMultiplexer :public ::cppu::WeakImplHelper1< ::com::sun::star::lang::XEventListener> +{ + ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent> m_xObject; + FmXDisposeListener* m_pListener; + sal_Int16 m_nId; + + virtual ~FmXDisposeMultiplexer(); +public: + FmXDisposeMultiplexer(FmXDisposeListener* _pListener, const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent>& _rxObject, sal_Int16 _nId = -1); + +// ::com::sun::star::lang::XEventListener + virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw(::com::sun::star::uno::RuntimeException); + + void dispose(); +}; + +// ================================================================== + +sal_Int16 getControlTypeByObject(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XServiceInfo>& _rxObject); + // get the object type (OBJ_FM_...) from the services the object supports + +//================================================================== +sal_Bool isRowSetAlive(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& _rxRowSet); + // checks if the ::com::sun::star::sdbcx::XColumnsSupplier provided by _rxRowSet supllies any columns + +//================================================================== +typedef ::std::set < ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > + , ::comphelper::OInterfaceCompare< ::com::sun::star::uno::XInterface > + > InterfaceBag; + +#endif // _SVX_FMTOOLS_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fmview.hxx b/include/svx/fmview.hxx new file mode 100644 index 000000000000..07ce4c02c106 --- /dev/null +++ b/include/svx/fmview.hxx @@ -0,0 +1,164 @@ +/* -*- 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 _SVX_FMVIEW_HXX +#define _SVX_FMVIEW_HXX + +#include <svx/view3d.hxx> +#include <comphelper/uno3.hxx> +#include "svx/svxdllapi.h" + +namespace com { namespace sun { namespace star { + namespace beans { + class XPropertySet; + } + namespace util { + class XNumberFormats; + } +}}} + +class OutputDevice; +class FmFormModel; +class FmFormObj; +class FmFormPage; +class FmFormShell; +class FmXFormView; + +namespace svx { + class ODataAccessDescriptor; + struct OXFormsDescriptor; +} + +class SdrUnoObj; +namespace com { namespace sun { namespace star { namespace form { + class XForm; + namespace runtime { + class XFormController; + } +} } } } + +class SVX_DLLPUBLIC FmFormView : public E3dView +{ + FmXFormView* pImpl; + FmFormShell* pFormShell; + + void Init(); + +public: + TYPEINFO(); + + FmFormView(FmFormModel* pModel, OutputDevice* pOut = 0L); + virtual ~FmFormView(); + + /** create a control pair (label/bound control) for the database field description given. + @param rFieldDesc + description of the field. see clipboard format SBA-FIELDFORMAT + @deprecated + This method is deprecated. Use the version with a ODataAccessDescriptor instead. + */ + SdrObject* CreateFieldControl(const OUString& rFieldDesc) const; + + /** create a control pair (label/bound control) for the database field description given. + */ + SdrObject* CreateFieldControl( const ::svx::ODataAccessDescriptor& _rColumnDescriptor ); + + /** create a control pair (label/bound control) for the xforms description given. + */ + SdrObject* CreateXFormsControl( const ::svx::OXFormsDescriptor &_rDesc ); + + virtual void MarkListHasChanged(); + virtual void AddWindowToPaintView(OutputDevice* pNewWin); + virtual void DeleteWindowFromPaintView(OutputDevice* pOldWin); + + static void createControlLabelPair( + OutputDevice* _pOutDev, + sal_Int32 _nXOffsetMM, + sal_Int32 _nYOffsetMM, + const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxField, + const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormats >& _rxNumberFormats, + sal_uInt16 _nControlObjectID, + const OUString& _rFieldPostfix, + sal_uInt32 _nInventor, + sal_uInt16 _nLabelObjectID, + SdrPage* _pLabelPage, + SdrPage* _pControlPage, + SdrModel* _pModel, + SdrUnoObj*& _rpLabel, + SdrUnoObj*& _rpControl + ); + + virtual SdrPageView* ShowSdrPage(SdrPage* pPage); + virtual void HideSdrPage(); + + // for copying complete form structures, not only control models + virtual SdrModel* GetMarkedObjModel() const; + using E3dView::Paste; + virtual sal_Bool Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst=NULL, sal_uInt32 nOptions=0); + + virtual sal_Bool MouseButtonDown( const MouseEvent& _rMEvt, Window* _pWin ); + + /** grab the focus to the first form control on the view + @param _bForceSync + <TRUE/> if the handling should be done synchronously. + */ + SVX_DLLPRIVATE void GrabFirstControlFocus( sal_Bool _bForceSync = sal_False ); + + /** returns the form controller for a given form and a given device + */ + SVX_DLLPRIVATE ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > + GetFormController( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& _rxForm, const OutputDevice& _rDevice ) const; + + // SdrView + sal_Bool KeyInput(const KeyEvent& rKEvt, Window* pWin); + + /// shortcut to "GetSdrPageView() ? PTR_CAST( FmFormPage, GetSdrPageView() ) : NULL" + FmFormPage* GetCurPage(); + + SVX_DLLPRIVATE void ActivateControls(SdrPageView*); + SVX_DLLPRIVATE void DeactivateControls(SdrPageView*); + + SVX_DLLPRIVATE void ChangeDesignMode(sal_Bool bDesign); + + SVX_DLLPRIVATE FmXFormView* GetImpl() const { return pImpl; } + SVX_DLLPRIVATE FmFormShell* GetFormShell() const { return pFormShell; } + + struct FormShellAccess { friend class FmFormShell; private: FormShellAccess() { } }; + void SetFormShell( FmFormShell* pShell, FormShellAccess ) { pFormShell = pShell; } + + struct ImplAccess { friend class FmXFormView; private: ImplAccess() { } }; + void SetMoveOutside( bool _bMoveOutside, ImplAccess ) { E3dView::SetMoveOutside( _bMoveOutside ); } + virtual void InsertControlContainer(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer >& xCC); + virtual void RemoveControlContainer(const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer >& xCC); + + virtual SdrPaintWindow* BeginCompleteRedraw(OutputDevice* pOut); + virtual void EndCompleteRedraw(SdrPaintWindow& rPaintWindow, bool bPaintFormLayer); + + SVX_DLLPRIVATE const OutputDevice* GetActualOutDev() const {return pActualOutDev;} + SVX_DLLPRIVATE sal_Bool checkUnMarkAll(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _xSource); + +private: + SVX_DLLPRIVATE void AdjustMarks(const SdrMarkList& rMarkList); + SVX_DLLPRIVATE FmFormObj* getMarkedGrid() const; + protected: + using E3dView::SetMoveOutside; +}; + +#endif // _FML_FMVIEW_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fntctl.hxx b/include/svx/fntctl.hxx new file mode 100644 index 000000000000..08f9f798b066 --- /dev/null +++ b/include/svx/fntctl.hxx @@ -0,0 +1,58 @@ +/* -*- 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 _SVX_FNTCTL_HXX +#define _SVX_FNTCTL_HXX + +#include <sfx2/mnuitem.hxx> +#include <svl/lstner.hxx> +#include "svx/svxdllapi.h" + + + +class FontNameMenu; +class SfxBindings; + +// class SvxFontMenuControl ---------------------------------------------- + +class SVX_DLLPUBLIC SvxFontMenuControl : public SfxMenuControl, public SfxListener +{ +private: + FontNameMenu* pMenu; + Menu& rParent; + + SVX_DLLPRIVATE void FillMenu(); + DECL_LINK( MenuSelect, FontNameMenu * ); + SVX_DLLPRIVATE virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + SVX_DLLPRIVATE virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + +public: + SvxFontMenuControl( sal_uInt16 nId, Menu&, SfxBindings& ); + ~SvxFontMenuControl(); + + virtual PopupMenu* GetPopup() const; + + SFX_DECL_MENU_CONTROL(); +}; + + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fntctrl.hxx b/include/svx/fntctrl.hxx new file mode 100644 index 000000000000..cd8449117d76 --- /dev/null +++ b/include/svx/fntctrl.hxx @@ -0,0 +1,97 @@ +/* -*- 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 _SVX_FNTCTRL_HXX +#define _SVX_FNTCTRL_HXX + +#include <vcl/window.hxx> +#include <editeng/svxfont.hxx> +#include "svx/svxdllapi.h" +#include <svl/itempool.hxx> +#include <svl/itemset.hxx> + +#include <rtl/ustring.hxx> + +// forward --------------------------------------------------------------- + +class SfxItemSet; +class FontPrevWin_Impl; + +// class SvxFontPrevWindow ----------------------------------------------- + +class SVX_DLLPUBLIC SvxFontPrevWindow : public Window +{ + using OutputDevice::SetFont; +private: + FontPrevWin_Impl* pImpl; + + SVX_DLLPRIVATE void InitSettings( sal_Bool bForeground, sal_Bool bBackground ); + SVX_DLLPRIVATE void Init (); + SVX_DLLPRIVATE void SetFontSize(const SfxItemSet& rSet, sal_uInt16 nSlot, SvxFont& rFont); + SVX_DLLPRIVATE void SetFontLang(const SfxItemSet& rSet, sal_uInt16 nSlot, SvxFont& rFont); + + Size m_aInitialSize; + +public: + SvxFontPrevWindow( Window* pParent, const ResId& rId ); + SvxFontPrevWindow(Window* pParent); + virtual ~SvxFontPrevWindow(); + + virtual void StateChanged( StateChangedType nStateChange ); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + + void Init( const SfxItemSet& rSet ); + + // for reasons of efficiency not const + SvxFont& GetFont(); + const SvxFont& GetFont() const; + void SetFont( const SvxFont& rNormalFont, const SvxFont& rCJKFont, const SvxFont& rCTLFont ); + SvxFont& GetCJKFont(); + SvxFont& GetCTLFont(); + void SetColor( const Color& rColor ); + void ResetColor(); + void SetBackColor( const Color& rColor ); + void UseResourceText( bool bUse = true ); + void Paint( const Rectangle& ); + + bool IsTwoLines() const; + void SetTwoLines(bool bSet); + + void SetBrackets(sal_Unicode cStart, sal_Unicode cEnd); + + void SetFontWidthScale( sal_uInt16 nScaleInPercent ); + + void AutoCorrectFontColor( void ); + + void SetPreviewText( const OUString& rString ); + void SetFontNameAsPreviewText(); + + void SetFont( const SfxItemSet& rSet, sal_uInt16 nSlot, SvxFont& rFont ); + void SetFontStyle( const SfxItemSet& rSet, sal_uInt16 nSlotPosture, sal_uInt16 nSlotWeight, SvxFont& rFont ); // posture/weight + void SetFontWidthScale( const SfxItemSet& rSet ); + void SetFontEscapement( sal_uInt8 nProp, sal_uInt8 nEscProp, short nEsc ); + + void SetFromItemSet( const SfxItemSet &rSet, + bool bPreviewBackgroundToCharacter = false ); + + virtual Size GetOptimalSize() const; +}; + +#endif // #ifndef _SVX_FNTCTRL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fntszctl.hxx b/include/svx/fntszctl.hxx new file mode 100644 index 000000000000..117553e8e07b --- /dev/null +++ b/include/svx/fntszctl.hxx @@ -0,0 +1,58 @@ +/* -*- 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 _SVX_FNTSZCTL_HXX +#define _SVX_FNTSZCTL_HXX + +#include <sfx2/mnuitem.hxx> +#include "svx/svxdllapi.h" + + + +class SfxBindings; +class FontSizeMenu; + +// class SvxFontSizeMenuControl ------------------------------------------ + +class SVX_DLLPUBLIC SvxFontSizeMenuControl : public SfxMenuControl +{ +private: + FontSizeMenu* pMenu; + Menu& rParent; + SfxStatusForwarder aFontNameForwarder; + + DECL_LINK( MenuSelect, FontSizeMenu * ); + +protected: + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + +public: + SvxFontSizeMenuControl( sal_uInt16 nId, Menu&, SfxBindings& ); + ~SvxFontSizeMenuControl(); + + virtual PopupMenu* GetPopup() const; + + SFX_DECL_MENU_CONTROL(); +}; + + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fontlb.hxx b/include/svx/fontlb.hxx new file mode 100644 index 000000000000..b45ed086efd0 --- /dev/null +++ b/include/svx/fontlb.hxx @@ -0,0 +1,105 @@ +/* -*- 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 SVX_FONTLB_HXX +#define SVX_FONTLB_HXX + +#include <svtools/svtabbx.hxx> +#include <svtools/svlbitm.hxx> +#include <vcl/virdev.hxx> +#include "svx/svxdllapi.h" + +// ============================================================================ + +/** A list box string item which stores its text and font. */ +class SvLBoxFontString : public SvLBoxString +{ +private: + Font maFont; /// The font used by this item. + bool mbUseColor; /// true = use font color, false = default listbox color. + +public: + SvLBoxFontString(); + SvLBoxFontString( + SvTreeListEntry* pEntry, + sal_uInt16 nFlags, + const XubString& rString, + const Font& rFont, + const Color* pColor = NULL ); + + virtual ~SvLBoxFontString(); + + /** Creates a new empty list box item. */ + virtual SvLBoxItem* Create() const; + + void InitViewData( SvTreeListBox*,SvTreeListEntry*,SvViewDataItem* ); + + /** Paints this entry to the specified position, using the own font settings. */ + virtual void Paint( + const Point& rPos, SvTreeListBox& rOutDev, const SvViewDataEntry* pView, const SvTreeListEntry* pEntry); +}; + + +// ============================================================================ + +/** A list box supporting formatted string entries. */ +class SVX_DLLPUBLIC SvxFontListBox : public SvTabListBox +{ +private: + Font maStdFont; /// Used for entries without specific font. + + // The following members are used to store additional parameters for InitEntry(). + Font maEntryFont; /// Current entry font used in InitEntry(). + const Color* mpEntryColor; /// Current entry color used in InitEntry(). + bool mbUseFont; /// true = Use maEntryFont/mpEntryColor in InitEntry(). + +public: + SvxFontListBox(Window* pParent, WinBits nStyle = WB_BORDER); + + /** Inserts a list entry and sets the font used for this entry. + @param pColor The font color. NULL = use default listbox text color. */ + void InsertFontEntry( + const String& rString, const Font& rFont, const Color* pColor = NULL ); + + /** Selects/deselects an entry specified by its position in the list box. */ + void SelectEntryPos( sal_uInt16 nPos, bool bSelect = true ); + /** Removes a selection. */ + void SetNoSelection(); + + /** Returns the position of the entry currently selected or LIST_APPEND. */ + sal_uLong GetSelectEntryPos() const; + /** Returns the text of the selected entry or an empty string. */ + XubString GetSelectEntry() const; + +protected: + /** Initializes a new SvLBoxFontString entry. + @descr Uses current value of maEntryFont to set the entry font (if mbUseFont is true). */ + virtual void InitEntry( + SvTreeListEntry* pEntry, + const OUString& rEntryText, + const Image& rCollImg, + const Image& rExpImg, + SvLBoxButtonKind eButtonKind); +}; + +// ============================================================================ + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fontwork.hxx b/include/svx/fontwork.hxx new file mode 100644 index 000000000000..4d2c4a0f6558 --- /dev/null +++ b/include/svx/fontwork.hxx @@ -0,0 +1,182 @@ +/* -*- 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 _SVX_FONTWORK_HXX +#define _SVX_FONTWORK_HXX + +#include <vcl/toolbox.hxx> +#include <vcl/fixed.hxx> +#include <svtools/valueset.hxx> +#include <sfx2/dockwin.hxx> +#include <sfx2/ctrlitem.hxx> +#include <svx/xenum.hxx> +#include <svx/dlgctrl.hxx> +#include "svx/svxdllapi.h" + +// forward --------------------------------------------------------------- + +class SdrView; +class SdrPageView; +class SdrObject; + +class XFormTextAdjustItem; +class XFormTextDistanceItem; +class XFormTextStartItem; +class XFormTextMirrorItem; +class XFormTextStdFormItem; +class XFormTextHideFormItem; +class XFormTextOutlineItem; +class XFormTextShadowItem; +class XFormTextShadowColorItem; +class XFormTextShadowXValItem; +class XFormTextShadowYValItem; + +/************************************************************************* +|* +|* ControllerItem for Fontwork +|* +\************************************************************************/ + +class SvxFontWorkDialog; + +class SvxFontWorkControllerItem : public SfxControllerItem +{ + SvxFontWorkDialog &rFontWorkDlg; + +protected: + virtual void StateChanged(sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState); + +public: + SvxFontWorkControllerItem(sal_uInt16 nId, SvxFontWorkDialog&, SfxBindings&); +}; + +/************************************************************************* +|* +|* Derived from SfxChildWindow as "container" for fontwork dialog +|* +\************************************************************************/ + +class SVX_DLLPUBLIC SvxFontWorkChildWindow : public SfxChildWindow +{ + public: + SvxFontWorkChildWindow(Window*, sal_uInt16, SfxBindings*, SfxChildWinInfo*); + SFX_DECL_CHILDWINDOW_WITHID(SvxFontWorkChildWindow); +}; + +/************************************************************************* +|* +|* Floating window for setting attributes of text effects +|* +\************************************************************************/ + +class SVX_DLLPUBLIC SvxFontWorkDialog : public SfxDockingWindow +{ + #define CONTROLLER_COUNT 12 + + SvxFontWorkControllerItem* pCtrlItems[CONTROLLER_COUNT]; + + ValueSet aFormSet; + + ToolBox aTbxStyle; + ToolBox aTbxAdjust; + + FixedImage aFbDistance; + MetricField aMtrFldDistance; + FixedImage aFbTextStart; + MetricField aMtrFldTextStart; + + ToolBox aTbxShadow; + + FixedImage aFbShadowX; + MetricField aMtrFldShadowX; + FixedImage aFbShadowY; + MetricField aMtrFldShadowY; + + ColorLB aShadowColorLB; + + SfxBindings& rBindings; + Timer aInputTimer; + + sal_uInt16 nLastStyleTbxId; + sal_uInt16 nLastAdjustTbxId; + sal_uInt16 nLastShadowTbxId; + long nSaveShadowX; + long nSaveShadowY; + long nSaveShadowAngle; + long nSaveShadowSize; + + ImageList maImageList; + + XColorListRef pColorList; + +#ifdef _SVX_FONTWORK_CXX + friend class SvxFontWorkChildWindow; + friend class SvxFontWorkControllerItem; + + DECL_LINK( SelectStyleHdl_Impl, void * ); + DECL_LINK( SelectAdjustHdl_Impl, void * ); + DECL_LINK( SelectShadowHdl_Impl, void * ); + + DECL_LINK( ModifyInputHdl_Impl, void * ); + DECL_LINK( InputTimoutHdl_Impl, void * ); + + DECL_LINK( FormSelectHdl_Impl, void * ); + DECL_LINK( ColorSelectHdl_Impl, void * ); + + void SetStyle_Impl(const XFormTextStyleItem*); + void SetAdjust_Impl(const XFormTextAdjustItem*); + void SetDistance_Impl(const XFormTextDistanceItem*); + void SetStart_Impl(const XFormTextStartItem*); + void SetMirror_Impl(const XFormTextMirrorItem*); + void SetStdForm_Impl(const XFormTextStdFormItem*); + void SetShowForm_Impl(const XFormTextHideFormItem*); + void SetOutline_Impl(const XFormTextOutlineItem*); + void SetShadow_Impl(const XFormTextShadowItem*, + bool bRestoreValues = false); + void SetShadowColor_Impl(const XFormTextShadowColorItem*); + void SetShadowXVal_Impl(const XFormTextShadowXValItem*); + void SetShadowYVal_Impl(const XFormTextShadowYValItem*); +#endif + + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + void ApplyImageList(); + + protected: + virtual void Zoom(); + virtual SfxChildAlignment CheckAlignment( SfxChildAlignment eActAlign, + SfxChildAlignment eAlign ); + + public: + SvxFontWorkDialog( SfxBindings *pBindinx, + SfxChildWindow *pCW, + Window* pParent, + const ResId& rResId ); + ~SvxFontWorkDialog(); + + void SetColorList(const XColorListRef &pTable); + void SetActive(bool bActivate = true); + + void CreateStdFormObj(SdrView& rView, SdrPageView& rPV, + const SfxItemSet& rAttr, SdrObject& rOldObj, + XFormTextStdForm eForm); +}; + +#endif // _SVX_FONTWORK_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fontworkbar.hxx b/include/svx/fontworkbar.hxx new file mode 100644 index 000000000000..8b7d04ef8c3a --- /dev/null +++ b/include/svx/fontworkbar.hxx @@ -0,0 +1,55 @@ +/* -*- 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 _SVX_FONTWORK_BAR_HXX +#define _SVX_FONTWORK_BAR_HXX + +#include <sfx2/shell.hxx> +#include <sfx2/module.hxx> +#include <svx/ifaceids.hxx> +#include "svx/svxdllapi.h" + +class SfxViewShell; +class SdrView; + +/************************************************************************/ + +namespace svx +{ + +bool SVX_DLLPUBLIC checkForSelectedFontWork( SdrView* pSdrView, sal_uInt32& nCheckStatus ); + +class SVX_DLLPUBLIC FontworkBar : public SfxShell +{ +public: + TYPEINFO(); + SFX_DECL_INTERFACE(SVX_INTERFACE_FONTWORK_BAR) + + FontworkBar(SfxViewShell* pViewShell ); + ~FontworkBar(); + + static void execute( SdrView* pSdrView, SfxRequest& rReq, SfxBindings& rBindings ); + static void getState( SdrView* pSdrView, SfxItemSet& rSet ); +}; + +} + +#endif // _SVX_FONTWORK_BAR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/fontworkgallery.hxx b/include/svx/fontworkgallery.hxx new file mode 100644 index 000000000000..34f1bafabcb9 --- /dev/null +++ b/include/svx/fontworkgallery.hxx @@ -0,0 +1,124 @@ +/* -*- 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 _SVX_FONTWORK_GALLERY_DIALOG_HXX +#define _SVX_FONTWORK_GALLERY_DIALOG_HXX + +#include "svx/svxdllapi.h" + +#include <vcl/fixed.hxx> +#include <vcl/button.hxx> +#include <vcl/dialog.hxx> +#include <vcl/field.hxx> + +#include <svtools/valueset.hxx> + +#include <sfx2/tbxctrl.hxx> + +#include <vector> + +class FmFormModel; +class SdrView; +class Window; +class SdrTextObj; +class SdrObject; +class SdrModel; + +class SfxBindings; +class SfxStatusForwarder; + +//------------------------------------------------------------------------ + +namespace svx +{ + +class SVX_DLLPUBLIC FontWorkShapeTypeControl : public SfxToolBoxControl +{ + using SfxToolBoxControl::Select; + +public: + SFX_DECL_TOOLBOX_CONTROL(); + FontWorkShapeTypeControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~FontWorkShapeTypeControl(); + + virtual void Select( sal_Bool bMod1 = sal_False ); + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); +}; + +//------------------------------------------------------------------------ + +class FontworkCharacterSpacingDialog : public ModalDialog +{ + FixedText maFLScale; + MetricField maMtrScale; + OKButton maOKButton; + CancelButton maCancelButton; + HelpButton maHelpButton; + +public: + FontworkCharacterSpacingDialog( Window* pParent, sal_Int32 nScale ); + ~FontworkCharacterSpacingDialog(); + + sal_Int32 getScale() const; +}; + + +class SVX_DLLPUBLIC FontWorkGalleryDialog : public ModalDialog +{ + FixedLine maFLFavorites; + ValueSet maCtlFavorites; + OKButton maOKButton; + CancelButton maCancelButton; + HelpButton maHelpButton; + + sal_uInt16 mnThemeId; + + SdrView* mpSdrView; + FmFormModel* mpModel; + + String maStrClickToAddText; + + DECL_LINK( DoubleClickFavoriteHdl, void * ); + DECL_LINK( ClickOKHdl, void * ); + DECL_LINK( ClickTextDirectionHdl, ImageButton * ); + + SdrObject** mppSdrObject; + SdrModel* mpDestModel; + + void initfavorites(sal_uInt16 nThemeId, std::vector< Bitmap * >& rFavorites); + void insertSelectedFontwork(); + void fillFavorites( sal_uInt16 nThemeId, std::vector< Bitmap * >& rFavorites ); + + std::vector< Bitmap * > maFavoritesHorizontal; + +public: + FontWorkGalleryDialog( SdrView* pView, Window* pParent, sal_uInt16 nSID ); + ~FontWorkGalleryDialog(); + + // SJ: if the SdrObject** is set, the SdrObject is not inserted into the page when executing the dialog + void SetSdrObjectRef( SdrObject**, SdrModel* pModel ); +}; + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/formatpaintbrushctrl.hxx b/include/svx/formatpaintbrushctrl.hxx new file mode 100644 index 000000000000..e77a12f00ef4 --- /dev/null +++ b/include/svx/formatpaintbrushctrl.hxx @@ -0,0 +1,67 @@ +/* -*- 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 _SVX_FORMATPAINTBRUSHCTRL_HXX +#define _SVX_FORMATPAINTBRUSHCTRL_HXX + +// header for class SfxToolBoxControl +#include <sfx2/tbxctrl.hxx> +// header for class Timer +#include <vcl/timer.hxx> +#include "svx/svxdllapi.h" + +//............................................................................. +namespace svx +{ +//............................................................................. + +//----------------------------------------------------------------------------- +/** +*/ + +class SVX_DLLPUBLIC FormatPaintBrushToolBoxControl : public SfxToolBoxControl +{ + using SfxToolBoxControl::Select; + +public: + SFX_DECL_TOOLBOX_CONTROL(); + FormatPaintBrushToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~FormatPaintBrushToolBoxControl(); + + virtual void DoubleClick(); + virtual void Click(); + virtual void Select( sal_Bool bMod1 = sal_False ); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); +private: + DECL_LINK( WaitDoubleClickHdl, void* ); + void impl_executePaintBrush(); + +private: + bool m_bPersistentCopy;//indicates that the content of the format clipboard should not be erased after paste + Timer m_aDoubleClickTimer; +}; + +//............................................................................. +} //namespace svx +//............................................................................. +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/framebordertype.hxx b/include/svx/framebordertype.hxx new file mode 100644 index 000000000000..18db6b901c0a --- /dev/null +++ b/include/svx/framebordertype.hxx @@ -0,0 +1,58 @@ +/* -*- 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 SVX_FRAMEBORDERTYPE_HXX +#define SVX_FRAMEBORDERTYPE_HXX + +#include "svx/svxdllapi.h" + +namespace svx { + +// ============================================================================ + +/** Enumerates all borders a frame selection control can contain. */ +enum FrameBorderType +{ + FRAMEBORDER_NONE, /// No border (special state). + FRAMEBORDER_LEFT, /// Left frame border. + FRAMEBORDER_RIGHT, /// Right frame border. + FRAMEBORDER_TOP, /// Top frame border. + FRAMEBORDER_BOTTOM, /// Bottom frame border. + FRAMEBORDER_HOR, /// Inner horizontal frame border. + FRAMEBORDER_VER, /// Inner vertical frame border. + FRAMEBORDER_TLBR, /// Top-left to bottom-right frame border. + FRAMEBORDER_BLTR /// Bottom-left to top-right frame border. +}; + +/** The number of valid frame border types (excluding FRAMEBORDER_NONE). */ +const int FRAMEBORDERTYPE_COUNT = 8; + +/** Returns the frame border type from a 0-based integer index. */ +SVX_DLLPUBLIC FrameBorderType GetFrameBorderTypeFromIndex( size_t nIndex ); + +/** Returns the zero-based index of a valid frame border type. */ +size_t GetIndexFromFrameBorderType( FrameBorderType eBorder ); + +// ============================================================================ + +} // namespace svx + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/framelink.hxx b/include/svx/framelink.hxx new file mode 100644 index 000000000000..a8a05076f471 --- /dev/null +++ b/include/svx/framelink.hxx @@ -0,0 +1,699 @@ +/* -*- 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 SVX_FRAMELINK_HXX +#define SVX_FRAMELINK_HXX + +#include <algorithm> +#include <sal/types.h> +#include <tools/color.hxx> +#include "svx/svxdllapi.h" +#include <vcl/outdev.hxx> +#include <editeng/borderline.hxx> + +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> + +class Point; +class Rectangle; +class OutputDevice; + +namespace svx { +namespace frame { + +// ============================================================================ +// Enums +// ============================================================================ + +/** Specifies how the reference points for frame borders are used. + */ +enum RefMode +{ + /** Frame borders are drawn centered to the reference points. */ + REFMODE_CENTERED, + + /** The reference points specify the begin of the frame border width. + + The result is that horizontal lines are drawn below, and vertical lines + are drawn right of the reference points. + */ + REFMODE_BEGIN, + + /** The reference points specify the end of the frame border width. + + The result is that horizontal lines are drawn above, and vertical lines + are drawn left of the reference points. + */ + REFMODE_END +}; + +// ============================================================================ +// Classes +// ============================================================================ + +/** Contains the widths of primary and secondary line of a frame style. + + In the following, "frame style" is a complete style of one frame border, + i.e. the double line at the left side of the frame. A "line" is always a + trivial single line, i.e. the first line of a double frame style. + + The following states of the members of this struct are valid: + + mnPrim mnDist mnSecn frame style + ------------------------------------------------- + 0 0 0 invisible + >0 0 0 single + >0 >0 >0 double + + The behaviour of the member functions for other states is not defined. + + Per definition the primary line in double frame styles is: + - The top line for horizontal frame borders. + - The left line for vertical frame borders. + - The bottom-left line for top-left to bottom-right diagonal frame borders. + - The top-left line for bottom-left to top-right diagonal frame borders. + + The following picture shows the upper end of a vertical double frame + border. + + |<---------------- GetWidth() ----------------->| + | | + |<----- mnPrim ----->||<- mnDist ->||<- mnSecn >| + | || || | + ###################### ############# + ###################### ############# + ###################### ############# + ###################### ############# + ###################### | ############# + ###################### | ############# + | + |<- middle of the frame border + */ +class SVX_DLLPUBLIC Style +{ +public: + /** Constructs an invisible frame style. */ + inline explicit Style() + : meRefMode( REFMODE_CENTERED ) + , mnType( ::com::sun::star::table::BorderLineStyle::SOLID ) + { Clear(); } + /** Constructs a frame style with passed line widths. */ + inline explicit Style( double nP, double nD, double nS, editeng::SvxBorderStyle nType ) : + meRefMode( REFMODE_CENTERED ), mnType( nType ) + { Clear(); Set( nP, nD, nS ); } + /** Constructs a frame style with passed color and line widths. */ + inline explicit Style( const Color& rColorPrim, const Color& rColorSecn, const Color& rColorGap, bool bUseGapColor, + double nP, double nD, double nS, editeng::SvxBorderStyle nType ) : + meRefMode( REFMODE_CENTERED ), mnType( nType ) + { Set( rColorPrim, rColorSecn, rColorGap, bUseGapColor, nP, nD, nS ); } + /** Constructs a frame style from the passed SvxBorderLine struct. */ + inline explicit Style( const editeng::SvxBorderLine& rBorder, double fScale = 1.0, sal_uInt16 nMaxWidth = SAL_MAX_UINT16 ) : + meRefMode( REFMODE_CENTERED ) { Set( rBorder, fScale, nMaxWidth ); } + /** Constructs a frame style from the passed SvxBorderLine struct. Clears the style, if pBorder is 0. */ + inline explicit Style( const editeng::SvxBorderLine* pBorder, double fScale = 1.0, sal_uInt16 nMaxWidth = SAL_MAX_UINT16 ) : + meRefMode( REFMODE_CENTERED ) { Set( pBorder, fScale, nMaxWidth ); } + + inline RefMode GetRefMode() const { return meRefMode; } + inline const Color& GetColorPrim() const { return maColorPrim; } + inline const Color& GetColorSecn() const { return maColorSecn; } + inline const Color& GetColorGap() const { return maColorGap; } + inline bool UseGapColor() const { return mbUseGapColor; } + inline double Prim() const { return mnPrim; } + inline double Dist() const { return mnDist; } + inline double Secn() const { return mnSecn; } + inline editeng::SvxBorderStyle Type() const { return mnType; } + + /** Returns the total width of this frame style. */ + inline double GetWidth() const { return mnPrim + mnDist + mnSecn; } + + /** Sets the frame style to invisible state. */ + void Clear(); + /** Sets the frame style to the passed line widths. */ + void Set( double nP, double nD, double nS ); + /** Sets the frame style to the passed line widths. */ + void Set( const Color& rColorPrim, const Color& rColorSecn, const Color& rColorGap, bool bUseGapColor, + double nP, double nD, double nS ); + /** Sets the frame style to the passed SvxBorderLine struct. */ + void Set( const editeng::SvxBorderLine& rBorder, double fScale = 1.0, sal_uInt16 nMaxWidth = SAL_MAX_UINT16 ); + /** Sets the frame style to the passed SvxBorderLine struct. Clears the style, if pBorder is 0. */ + void Set( const editeng::SvxBorderLine* pBorder, double fScale = 1.0, sal_uInt16 nMaxWidth = SAL_MAX_UINT16 ); + + /** Sets a new reference point handling mode, does not modify other settings. */ + inline void SetRefMode( RefMode eRefMode ) { meRefMode = eRefMode; } + /** Sets a new color, does not modify other settings. */ + inline void SetColorPrim( const Color& rColor ) { maColorPrim = rColor; } + inline void SetColorSecn( const Color& rColor ) { maColorSecn = rColor; } + inline void SetColorGap( bool bUseIt, const Color& rColor ) { maColorGap = rColor; mbUseGapColor = bUseIt; } + /** Sets whether to use dotted style for single hair lines. */ + inline void SetType( editeng::SvxBorderStyle nType ) { mnType = nType; } + + /** Mirrors this style (exchanges primary and secondary), if it is a double frame style. */ + Style& MirrorSelf(); + /** Returns this style mirrored, if it is a double frame style, otherwise a simple copy. */ + Style Mirror() const; + +private: + Color maColorPrim; + Color maColorSecn; + Color maColorGap; + bool mbUseGapColor; + RefMode meRefMode; /// Reference point handling for this frame border. + double mnPrim; /// Width of primary (single, left, or top) line. + double mnDist; /// Distance between primary and secondary line. + double mnSecn; /// Width of secondary (right or bottom) line. + editeng::SvxBorderStyle mnType; +}; + +bool operator==( const Style& rL, const Style& rR ); +SVX_DLLPUBLIC bool operator<( const Style& rL, const Style& rR ); + +inline bool operator!=( const Style& rL, const Style& rR ) { return !(rL == rR); } +inline bool operator>( const Style& rL, const Style& rR ) { return rR < rL; } +inline bool operator<=( const Style& rL, const Style& rR ) { return !(rR < rL); } +inline bool operator>=( const Style& rL, const Style& rR ) { return !(rL < rR); } + +// ---------------------------------------------------------------------------- + +/** Extends the Style struct with an angle for diagonal frame borders. + + The angle is specified in radian (a full circle is equivalent to 2*PI). + It is dependent on the context, how the value is interpreted, i.e. it may + specify the angle to a horizontal or vertical frame border. + */ +class DiagStyle : public Style +{ +public: + /** Constructs an invisible diagonal frame style. */ + inline explicit DiagStyle() : mfAngle( 0.0 ) {} + /** Constructs a diagonal frame style passed style and angle. */ + inline explicit DiagStyle( const Style& rStyle, double fAngle ) : + Style( rStyle ), mfAngle( fAngle ) {} + + inline double GetAngle() const { return mfAngle; } + + /** Returns this style mirrored, if it is a double frame style, otherwise a simple copy. */ + inline DiagStyle Mirror() const { return DiagStyle( Style::Mirror(), mfAngle ); } + +private: + double mfAngle; /// Angle between this and hor. or vert. border. +}; + +// ============================================================================ +// Various helper functions +// ============================================================================ + +/** Returns the angle between horizontal border of a rectangle and its diagonal. + + The returned values represents the inner angle between the diagonals and + horizontal borders, and is therefore in the range [0,PI/2] (inclusive). The + passed sizes may be negative, calculation is done with absolute values. + */ +SVX_DLLPUBLIC double GetHorDiagAngle( long nWidth, long nHeight ); + +/** Returns the angle between horizontal border of a rectangle and its diagonal. + + The returned values represents the inner angle between the diagonals and + horizontal borders, and is therefore in the range [0,PI/2] (inclusive). The + passed rectangle positions may be unordered, they are adjusted internally. + */ +inline double GetHorDiagAngle( long nX1, long nX2, long nY1, long nY2 ) +{ return GetHorDiagAngle( nX2 - nX1, nY2 - nY1 ); } + +/** Returns the angle between horizontal border of a rectangle and its diagonal. + + The returned values represents the inner angle between the diagonals and + horizontal borders, and is therefore in the range [0,PI/2] (inclusive). The + passed rectangle edges may be unordered, they are adjusted internally. + */ +inline double GetHorDiagAngle( const Point& rP1, const Point& rP2 ) +{ return GetHorDiagAngle( rP2.X() - rP1.X(), rP2.Y() - rP1.Y() ); } + +/** Returns the angle between horizontal border of a rectangle and its diagonal. + + The returned values represents the inner angle between the diagonals and + horizontal borders, and is therefore in the range [0,PI/2] (inclusive). + */ +inline double GetHorDiagAngle( const Rectangle& rRect ) +{ return GetHorDiagAngle( rRect.GetWidth(), rRect.GetHeight() ); } + +// ---------------------------------------------------------------------------- + +/** Returns the angle between vertical border of a rectangle and its diagonal. + + The returned values represents the inner angle between the diagonals and + vertical borders, and is therefore in the range [0,PI/2] (inclusive). The + passed sizes may be negative, calculation is done with absolute values. + */ +inline double GetVerDiagAngle( long nWidth, long nHeight ) +{ return GetHorDiagAngle( nHeight, nWidth ); } + +/** Returns the angle between vertical border of a rectangle and its diagonal. + + The returned values represents the inner angle between the diagonals and + vertical borders, and is therefore in the range [0,PI/2] (inclusive). The + passed rectangle positions may be unordered, they are adjusted internally. + */ +inline double GetVerDiagAngle( long nX1, long nX2, long nY1, long nY2 ) +{ return GetVerDiagAngle( nX2 - nX1, nY2 - nY1 ); } + +/** Returns the angle between vertical border of a rectangle and its diagonal. + + The returned values represents the inner angle between the diagonals and + vertical borders, and is therefore in the range [0,PI/2] (inclusive). The + passed rectangle edges may be unordered, they are adjusted internally. + */ +inline double GetVerDiagAngle( const Point& rP1, const Point& rP2 ) +{ return GetVerDiagAngle( rP2.X() - rP1.X(), rP2.Y() - rP1.Y() ); } + +/** Returns the angle between vertical border of a rectangle and its diagonal. + + The returned values represents the inner angle between the diagonals and + vertical borders, and is therefore in the range [0,PI/2] (inclusive). + */ +inline double GetVerDiagAngle( const Rectangle& rRect ) +{ return GetVerDiagAngle( rRect.GetWidth(), rRect.GetHeight() ); } + +// ============================================================================ + +/** Returns an X coordinate for a diagonal frame border in the specified height. + + This function is for usage with the top-left end of a top-left to + bottom-right diagonal frame border, connected to the left end of a + horizontal frame border. + + The function returns the relative X position (i.e. for a polygon) of the + diagonal frame border according to the specified relative Y position. The + mentioned positions are relative to the reference point of both frame + borders. + + +---------------------------------------------------------- + | The horizontal frame border. + | | + - - - - - - | --+-- <---- Reference point for horizontal and diagonal frame borders. + ^ | \ | \ + nVerOffs | \ \ <--- The diagonal frame border. + v +---\ \------------------------------------------------ + - - - - - - - - -\- - -X <----- The function calculates the X position of i.e. + \ \ this point (relative from X of reference point). + \ \ + Primary -->\ \<-- Secondary + + @param nVerOffs + The vertical position of the point to be calculated, relative to the Y + coordinate of the reference point. + @param nDiagOffs + The width offset across the diagonal frame border (0 = middle), + regardless of the gradient of the diagonal frame border (always + vertical to the direction of the diagonal frame border). This value is + not related in any way to the reference point. For details about + relative width offsets, see description of class Style. + @param fAngle + Inner (right) angle between diagonal and horizontal frame border. + */ +SVX_DLLPUBLIC long GetTLDiagOffset( long nVerOffs, long nDiagOffs, double fAngle ); + +/** Returns an X coordinate for a diagonal frame border in the specified height. + + This function is for usage with the bottom-left end of a bottom-left to + top-right diagonal frame border, connected to the left end of a horizontal + frame border. + + The function returns the relative X position (i.e. for a polygon) of the + diagonal frame border according to the specified relative Y position. The + mentioned positions are relative to the reference point of both frame + borders. + + Primary -->/ /<--- Secondary + / / + / / The function calculates the X position of i.e. + - - - - - - - - -/- - -X <----- this point (relative from X of reference point). + ^ +---/ /------------------------------------------------ + nVerOffs | / / <--- The diagonal frame border. + v | / | / + - - - - - - | --+-- <---- Reference point for horizontal and diagonal frame borders. + | | + | The horizontal frame border. + +---------------------------------------------------------- + + @param nVerOffs + The vertical position of the point to be calculated, relative to the Y + coordinate of the reference point. + @param nDiagOffs + The width offset across the diagonal frame border (0 = middle), + regardless of the gradient of the diagonal frame border (always + vertical to the direction of the diagonal frame border). This value is + not related in any way to the reference point. For details about + relative width offsets, see description of class Style. + @param fAngle + Inner (right) angle between diagonal and horizontal frame border. + */ +long GetBLDiagOffset( long nVerOffs, long nDiagOffs, double fAngle ); + +/** Returns an X coordinate for a diagonal frame border in the specified height. + + This function is for usage with the bottom-right end of a top-left to + bottom-right diagonal frame border, connected to the right end of a + horizontal frame border. + + @param nVerOffs + The vertical position of the point to be calculated, relative to the Y + coordinate of the reference point. + @param nDiagOffs + The width offset across the diagonal frame border (0 = middle), + regardless of the gradient of the diagonal frame border (always + vertical to the direction of the diagonal frame border). This value is + not related in any way to the reference point. For details about + relative width offsets, see description of class Style. + @param fAngle + Inner (left) angle between diagonal and horizontal frame border. + */ +long GetBRDiagOffset( long nVerOffs, long nDiagOffs, double fAngle ); + +/** Returns an X coordinate for a diagonal frame border in the specified height. + + This function is for usage with the top-right end of a bottom-left to + top-right diagonal frame border, connected to the right end of a horizontal + frame border. + + @param nVerOffs + The vertical position of the point to be calculated, relative to the Y + coordinate of the reference point. + @param nDiagOffs + The width offset across the diagonal frame border (0 = middle), + regardless of the gradient of the diagonal frame border (always + vertical to the direction of the diagonal frame border). This value is + not related in any way to the reference point. For details about + relative width offsets, see description of class Style. + @param fAngle + Inner (left) angle between diagonal and horizontal frame border. + */ +long GetTRDiagOffset( long nVerOffs, long nDiagOffs, double fAngle ); + +// ============================================================================ + +/** Checks whether two horizontal frame borders are "connectable". + + Two borders are "connectable" in terms of this function, if both can be + drawn with only one call of a border drawing function. This means, the two + frame borders must have equal style and color, and none of the other + vertical and diagonal frame borders break the lines of the two borders in + any way (i.e. two vertical double frame borders would break the horizonal + frame borders). Of course this function can be used for vertical frame + borders as well. + + The follong picture shows the meaning of all passed parameters: + + \ rTFromT / + \ | / + rTFromTL | rTFromTR + \ | / + \ | / + ======== rLBorder ========= ========== rRBorder ======= + / | \ + / | \ + rBFromBL | rBFromBR + / | \ + / rBFromB \ + + @return + True, if rLBorder and rRBorder can be drawn in one step without + interruption at their connection point. + */ +SVX_DLLPUBLIC bool CheckFrameBorderConnectable( + const Style& rLBorder, /// Style of the left frame border to connect. + const Style& rRBorder, /// Style of the right frame border to connect. + + const Style& rTFromTL, /// Diagonal frame border from top-left to connection point. + const Style& rTFromT, /// Vertical frame border from top to connection point. + const Style& rTFromTR, /// Horizontal frame border from top-right to connection point. + + const Style& rBFromBL, /// Diagonal frame border from bottom-left to connection point. + const Style& rBFromB, /// Vertical frame border from bottom to connection point. + const Style& rBFromBR /// Horizontal frame border from bottom-right to connection point. +); + +// ============================================================================ +// Drawing functions +// ============================================================================ + +/** Draws a horizontal frame border, regards all connected frame styles. + + The frame style to draw is passed as parameter rBorder. The function + calculates the adjustment in X direction for left and right end of primary + and secondary line of the frame border (the style may present a double + line). The line ends may differ according to the connected frame styles + coming from top, bottom, left, right, and/or diagonal. + + Thick frame styles are always drawn centered (in width) to the passed + reference points. The Y coordinates of both reference points must be equal + (the line cannot be drawn slanted). + + The function preserves all settings of the passed output device. + + All parameters starting with "rL" refer to the left end of the processed + frame border, all parameters starting with "rR" refer to the right end. + The following part of the parameter name starting with "From" specifies + where the frame border comes from. Example: "rLFromTR" means the frame + border coming from top-right, connected to the left end of rBorder (and + therefore a diagonal frame border). + + The follong picture shows the meaning of all passed parameters: + + rLFromT / \ rRFromT + | / \ | + | rLFromTR rRFromTL | + | / \ | + | / \ | + --- rLFromL --- ============== rBorder ============== --- rRFromR --- + | \ / | + | \ / | + | rLFromBR rRFromBL | + | \ / | + rLFromB \ / rRFromB + */ +SVX_DLLPUBLIC drawinglayer::primitive2d::Primitive2DSequence CreateBorderPrimitives( + const Point& rLPos, /// Reference point for left end of the processed frame border. + const Point& rRPos, /// Reference point for right end of the processed frame border. + const Style& rBorder, /// Style of the processed frame border. + + const DiagStyle& rLFromTR, /// Diagonal frame border from top-right to left end of rBorder. + const Style& rLFromT, /// Vertical frame border from top to left end of rBorder. + const Style& rLFromL, /// Horizontal frame border from left to left end of rBorder. + const Style& rLFromB, /// Vertical frame border from bottom to left end of rBorder. + const DiagStyle& rLFromBR, /// Diagonal frame border from bottom-right to left end of rBorder. + + const DiagStyle& rRFromTL, /// Diagonal frame border from top-left to right end of rBorder. + const Style& rRFromT, /// Vertical frame border from top to right end of rBorder. + const Style& rRFromR, /// Horizontal frame border from right to right end of rBorder. + const Style& rRFromB, /// Vertical frame border from bottom to right end of rBorder. + const DiagStyle& rRFromBL, /// Diagonal frame border from bottom-left to right end of rBorder. + + const Color* pForceColor = 0,/// If specified, overrides frame border color. + const long& rRotationT = 9000, /// Angle of the top slanted frames in 100th of degree + const long& rRotationB = 9000 /// Angle of the bottom slanted frames in 100th of degree +); + +SVX_DLLPUBLIC drawinglayer::primitive2d::Primitive2DSequence CreateBorderPrimitives( + const Point& rLPos, /// Reference point for left end of the processed frame border. + const Point& rRPos, /// Reference point for right end of the processed frame border. + const Style& rBorder, /// Style of the processed frame border. + + const Style& rLFromT, /// Vertical frame border from top to left end of rBorder. + const Style& rLFromL, /// Horizontal frame border from left to left end of rBorder. + const Style& rLFromB, /// Vertical frame border from bottom to left end of rBorder. + + const Style& rRFromT, /// Vertical frame border from top to right end of rBorder. + const Style& rRFromR, /// Horizontal frame border from right to right end of rBorder. + const Style& rRFromB, /// Vertical frame border from bottom to right end of rBorder. + + const Color* pForceColor = 0,/// If specified, overrides frame border color. + const long& rRotationT = 9000, /// Angle of the top slanted frame in 100th of degrees + const long& rRotationB = 9000 /// Angle of the bottom slanted frame in 100th of degrees +); + +SVX_DLLPUBLIC drawinglayer::primitive2d::Primitive2DSequence CreateClippedBorderPrimitives ( + const Point& rStart, const Point& rEnd, const Style& rBorder, + const Rectangle& rClipRect ); + +/** Draws a horizontal frame border, regards all connected frame styles. + + The frame style to draw is passed as parameter rBorder. The function + calculates the adjustment in X direction for left and right end of primary + and secondary line of the frame border (the style may present a double + line). The line ends may differ according to the connected frame styles + coming from top, bottom, left, right, and/or diagonal. + + Thick frame styles are always drawn centered (in width) to the passed + reference points. The Y coordinates of both reference points must be equal + (the line cannot be drawn slanted). + + The function preserves all settings of the passed output device. + + All parameters starting with "rL" refer to the left end of the processed + frame border, all parameters starting with "rR" refer to the right end. + The following part of the parameter name starting with "From" specifies + where the frame border comes from. Example: "rLFromTR" means the frame + border coming from top-right, connected to the left end of rBorder (and + therefore a diagonal frame border). + + The follong picture shows the meaning of all passed parameters: + + rLFromT / \ rRFromT + | / \ | + | rLFromTR rRFromTL | + | / \ | + | / \ | + --- rLFromL --- ============== rBorder ============== --- rRFromR --- + | \ / | + | \ / | + | rLFromBR rRFromBL | + | \ / | + rLFromB \ / rRFromB + */ +SVX_DLLPUBLIC void DrawHorFrameBorder( + OutputDevice& rDev, /// The output device used to draw the frame border. + + const Point& rLPos, /// Reference point for left end of the processed frame border. + const Point& rRPos, /// Reference point for right end of the processed frame border. + const Style& rBorder, /// Style of the processed frame border. + + const DiagStyle& rLFromTR, /// Diagonal frame border from top-right to left end of rBorder. + const Style& rLFromT, /// Vertical frame border from top to left end of rBorder. + const Style& rLFromL, /// Horizontal frame border from left to left end of rBorder. + const Style& rLFromB, /// Vertical frame border from bottom to left end of rBorder. + const DiagStyle& rLFromBR, /// Diagonal frame border from bottom-right to left end of rBorder. + + const DiagStyle& rRFromTL, /// Diagonal frame border from top-left to right end of rBorder. + const Style& rRFromT, /// Vertical frame border from top to right end of rBorder. + const Style& rRFromR, /// Horizontal frame border from right to right end of rBorder. + const Style& rRFromB, /// Vertical frame border from bottom to right end of rBorder. + const DiagStyle& rRFromBL, /// Diagonal frame border from bottom-left to right end of rBorder. + + const Color* pForceColor = 0 /// If specified, overrides frame border color. +); + +// ============================================================================ + +/** Draws a vertical frame border, regards all connected frame styles. + + The frame style to draw is passed as parameter rBorder. The function + calculates the adjustment in Y direction for top and bottom end of primary + and secondary line of the frame border (the style may present a double + line). The line ends may differ according to the connected frame styles + coming from left, right, top, bottom, and/or diagonal. + + Thick frame styles are always drawn centered (in width) to the passed + reference points. The X coordinates of both reference points must be equal + (the line cannot be drawn slanted). + + The function preserves all settings of the passed output device. + + All parameters starting with "rT" refer to the top end of the processed + frame border, all parameters starting with "rB" refer to the bottom end. + The following part of the parameter name starting with "From" specifies + where the frame border comes from. Example: "rTFromBL" means the frame + border coming from bottom-left, connected to the top end of rBorder (and + therefore a diagonal frame border). + + The follong picture shows the meaning of all passed parameters: + + | + rTFromT + | + | + --- rTFromL --- --- rTFromR --- + / # \ + / # \ + rTFromBL # rTFromBR + / # \ + / # \ + # + rBorder + # + \ # / + \ # / + rBFromTL # rBFromTR + \ # / + \ # / + --- rBFromL --- --- rBFromR --- + | + | + rBFromB + | + */ +SVX_DLLPUBLIC void DrawVerFrameBorder( + OutputDevice& rDev, /// The output device used to draw the frame border. + + const Point& rTPos, /// Reference point for top end of the processed frame border. + const Point& rBPos, /// Reference point for bottom end of the processed frame border. + const Style& rBorder, /// Style of the processed frame border. + + const DiagStyle& rTFromBL, /// Diagonal frame border from bottom-right to top end of rBorder. + const Style& rTFromL, /// Horizontal frame border from left to top end of rBorder. + const Style& rTFromT, /// Vertical frame border from top to top end of rBorder. + const Style& rTFromR, /// Horizontal frame border from right to top end of rBorder. + const DiagStyle& rTFromBR, /// Diagonal frame border from bottom-right to top end of rBorder. + + const DiagStyle& rBFromTL, /// Diagonal frame border from top-left to bottom end of rBorder. + const Style& rBFromL, /// Horizontal frame border from left to bottom end of rBorder. + const Style& rBFromB, /// Vertical frame border from bottom to bottom end of rBorder. + const Style& rBFromR, /// Horizontal frame border from right to bottom end of rBorder. + const DiagStyle& rBFromTR, /// Diagonal frame border from top-right to bottom end of rBorder. + + const Color* pForceColor = 0 /// If specified, overrides frame border color. +); + +// ============================================================================ + +/** Draws both diagonal frame borders, regards all connected frame styles. + + One or both passed diagonal frame styles may be invisible. + + The function preserves all settings of the passed output device. + */ +SVX_DLLPUBLIC void DrawDiagFrameBorders( + OutputDevice& rDev, /// The output device used to draw the frame border. + + const Rectangle& rRect, /// Rectangle for both diagonal frame borders. + const Style& rTLBR, /// Style of the processed top-left to bottom-right diagonal frame border. + const Style& rBLTR, /// Style of the processed bottom-left to top-right diagonal frame border. + + const Style& rTLFromB, /// Vertical frame border from bottom to top-left end of rTLBR. + const Style& rTLFromR, /// Horizontal frame border from right to top-left end of rTLBR. + const Style& rBRFromT, /// Vertical frame border from top to bottom-right end of rTLBR. + const Style& rBRFromL, /// Horizontal frame border from left to bottom-right end of rTLBR. + + const Style& rBLFromT, /// Vertical frame border from top to bottom-left end of rBLTR. + const Style& rBLFromR, /// Horizontal frame border from right to bottom-left end of rBLTR. + const Style& rTRFromB, /// Vertical frame border from bottom to top-right end of rBLTR. + const Style& rTRFromL, /// Horizontal frame border from left to top-right end of rBLTR. + + const Color* pForceColor = 0, /// If specified, overrides frame border color. + bool bDiagDblClip = false /// true = Use clipping for crossing double frame borders. +); + +// ============================================================================ + +} // namespace frame +} // namespace svx + +/* Yes, I love ASCII art. :-) -DR- */ + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/framelinkarray.hxx b/include/svx/framelinkarray.hxx new file mode 100644 index 000000000000..b0afbd4b4b30 --- /dev/null +++ b/include/svx/framelinkarray.hxx @@ -0,0 +1,479 @@ +/* -*- 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 SVX_FRAMELINKARRAY_HXX +#define SVX_FRAMELINKARRAY_HXX + +#include <svx/framelink.hxx> +#include <drawinglayer/processor2d/baseprocessor2d.hxx> + +#include <memory> + +#include <vector> +#include "svx/svxdllapi.h" + +namespace svx { +namespace frame { + +// ============================================================================ + + +struct Cell +{ + Style maLeft; + Style maRight; + Style maTop; + Style maBottom; + Style maTLBR; + Style maBLTR; + long mnAddLeft; + long mnAddRight; + long mnAddTop; + long mnAddBottom; + bool mbMergeOrig; + bool mbOverlapX; + bool mbOverlapY; + + explicit Cell(); + + inline bool IsMerged() const { return mbMergeOrig || mbOverlapX || mbOverlapY; } + inline bool IsOverlapped() const { return mbOverlapX || mbOverlapY; } + + void MirrorSelfX( bool bMirrorStyles, bool bSwapDiag ); +}; + +typedef std::vector< long > LongVec; +typedef std::vector< Cell > CellVec; + +struct ArrayImpl +{ + CellVec maCells; + LongVec maWidths; + LongVec maHeights; + mutable LongVec maXCoords; + mutable LongVec maYCoords; + size_t mnWidth; + size_t mnHeight; + size_t mnFirstClipCol; + size_t mnFirstClipRow; + size_t mnLastClipCol; + size_t mnLastClipRow; + mutable bool mbXCoordsDirty; + mutable bool mbYCoordsDirty; + bool mbDiagDblClip; + + explicit ArrayImpl( size_t nWidth, size_t nHeight, bool bDiagDblClip ); + + inline bool IsValidPos( size_t nCol, size_t nRow ) const + { return (nCol < mnWidth) && (nRow < mnHeight); } + inline size_t GetIndex( size_t nCol, size_t nRow ) const + { return nRow * mnWidth + nCol; } + + const Cell& GetCell( size_t nCol, size_t nRow ) const; + Cell& GetCellAcc( size_t nCol, size_t nRow ); + + size_t GetMergedFirstCol( size_t nCol, size_t nRow ) const; + size_t GetMergedFirstRow( size_t nCol, size_t nRow ) const; + size_t GetMergedLastCol( size_t nCol, size_t nRow ) const; + size_t GetMergedLastRow( size_t nCol, size_t nRow ) const; + + const Cell& GetMergedOriginCell( size_t nCol, size_t nRow ) const; + + bool IsMergedOverlappedLeft( size_t nCol, size_t nRow ) const; + bool IsMergedOverlappedRight( size_t nCol, size_t nRow ) const; + bool IsMergedOverlappedTop( size_t nCol, size_t nRow ) const; + bool IsMergedOverlappedBottom( size_t nCol, size_t nRow ) const; + + bool IsInClipRange( size_t nCol, size_t nRow ) const; + bool IsColInClipRange( size_t nCol ) const; + bool IsRowInClipRange( size_t nRow ) const; + + inline size_t GetMirrorCol( size_t nCol ) const { return mnWidth - nCol - 1; } + inline size_t GetMirrorRow( size_t nRow ) const { return mnHeight - nRow - 1; } + + long GetColPosition( size_t nCol ) const; + long GetRowPosition( size_t nRow ) const; + + long GetColWidth( size_t nFirstCol, size_t nLastCol ) const; + long GetRowHeight( size_t nFirstRow, size_t nLastRow ) const; + + double GetHorDiagAngle( size_t nCol, size_t nRow, bool bSimple = false ) const; + double GetVerDiagAngle( size_t nCol, size_t nRow, bool bSimple = false ) const; +}; + +/** Stores frame styles of an array of cells, supports merged ranges. + + This class is able to store the frame styles of an array of cells and to + draw the entire array or parts of it to any output device. + + Every cell contains the style of the left, right, top, bottom, top-left to + bottom-right, and bottom-left to top-right frame border. + + On drawing, the thicker frame border of neighbored cells is selected + automatically. All borders are drawn "connected", that means, the correct + start and end coordinates of all lines of the borders are calculated, + especaially, if they are drawn together with diagonal frame borders. + + This array fully supports merged cell ranges. In a merged range, the frame + borders of the top-left cell is extended to the entire range, and all other + cells in that range are overlapped. Again, all connected frame borders, + also diagonals and frame borders from adjacent merged ranges, are handled + automatically. + + Additionally, a clipping range can be set. If such a range is used, all + frame borders outside this range are completely ignored, and are not used + in the connected border calculation anymore. + + The array can be mirrored in both directions. It is possible to specify, + whether to mirror the double frame styles, and whether to swap diagonal + frame borders. + */ +class SVX_DLLPUBLIC Array +{ +public: + /** Constructs an empty array. */ + explicit Array(); + + /** Destructs the array. */ + ~Array(); + + // array size and column/row indexes -------------------------------------- + + /** Reinitializes the array with the specified size. Clears all styles. */ + void Initialize( size_t nWidth, size_t nHeight ); + + /** Returns the number of columns in the array. */ + size_t GetColCount() const; + + /** Returns the number of rows in the array. */ + size_t GetRowCount() const; + + /** Returns the number of cells in the array. */ + size_t GetCellCount() const; + + /** Returns the cell index from the cell address (nCol,nRow). */ + size_t GetCellIndex( size_t nCol, size_t nRow, bool bRTL = false) const; + + // cell border styles ----------------------------------------------------- + + /** Sets the left frame style of the cell (nCol,nRow). Ignores merged ranges. */ + void SetCellStyleLeft( size_t nCol, size_t nRow, const Style& rStyle ); + + /** Sets the right frame style of the cell (nCol,nRow). Ignores merged ranges. */ + void SetCellStyleRight( size_t nCol, size_t nRow, const Style& rStyle ); + + /** Sets the top frame style of the cell (nCol,nRow). Ignores merged ranges. */ + void SetCellStyleTop( size_t nCol, size_t nRow, const Style& rStyle ); + + /** Sets the bottom frame style of the specified cell (nCol,nRow). Ignores merged ranges. */ + void SetCellStyleBottom( size_t nCol, size_t nRow, const Style& rStyle ); + + /** Sets the top-left to bottom-right frame style of the cell (nCol,nRow). Ignores merged ranges. */ + void SetCellStyleTLBR( size_t nCol, size_t nRow, const Style& rStyle ); + + /** Sets the bottom-left to top-right frame style of the cell (nCol,nRow). Ignores merged ranges. */ + void SetCellStyleBLTR( size_t nCol, size_t nRow, const Style& rStyle ); + + /** Sets both diagonal frame styles of the specified cell (nCol,nRow). Ignores merged ranges. */ + void SetCellStyleDiag( size_t nCol, size_t nRow, const Style& rTLBR, const Style& rBLTR ); + + /** Sets the left frame style of the specified column. Ignores merged ranges. */ + void SetColumnStyleLeft( size_t nCol, const Style& rStyle ); + + /** Sets the right frame style of the specified column. Ignores merged ranges. */ + void SetColumnStyleRight( size_t nCol, const Style& rStyle ); + + /** Sets the top frame style of the specified row. Ignores merged ranges. */ + void SetRowStyleTop( size_t nRow, const Style& rStyle ); + + /** Sets the bottom frame style of the specified row. Ignores merged ranges. */ + void SetRowStyleBottom( size_t nRow, const Style& rStyle ); + + /** Returns the left frame style of the cell (nCol,nRow). + @param bSimple + true = Ignores merged ranges and neighbor cells; + false = Returns thicker of own left style or right style of the cell to the left. + Returns the style only if visible (i.e. at left border of a merged range). + @return + The left frame style or an invisible style for invalid cell addresses. */ + const Style& GetCellStyleLeft( size_t nCol, size_t nRow, bool bSimple = false ) const; + + /** Returns the right frame style of the cell (nCol,nRow). + @param bSimple + true = Ignores merged ranges and neighbor cells; + false = Returns thicker of own right style or left style of the cell to the right. + Returns the style only if visible (i.e. at right border of a merged range). + @return + The left frame style or an invisible style for invalid cell addresses. */ + const Style& GetCellStyleRight( size_t nCol, size_t nRow, bool bSimple = false ) const; + + /** Returns the top frame style of the cell (nCol,nRow). + @param bSimple + true = Ignores merged ranges and neighbor cells; + false = Returns thicker of own top style or bottom style of the cell above. + Returns the style only if visible (i.e. at top border of a merged range). + @return + The top frame style or an invisible style for invalid cell addresses. */ + const Style& GetCellStyleTop( size_t nCol, size_t nRow, bool bSimple = false ) const; + + /** Returns the top frame style of the cell (nCol,nRow). + @param bSimple + true = Ignores merged ranges and neighbor cells; + false = Returns thicker of own top style or bottom style of the cell above. + Returns the style only if visible (i.e. at top border of a merged range). + @return + The top frame style or an invisible style for invalid cell addresses. */ + const Style& GetCellStyleBottom( size_t nCol, size_t nRow, bool bSimple = false ) const; + + /** Returns the top-left to bottom-right frame style of the cell (nCol,nRow). + @param bSimple + true = Ignores merged ranges; + false = Returns the visible style (i.e. from top-left corner of a merged range). + @return + The top-left to bottom-right frame style or an invisible style for invalid cell addresses. */ + const Style& GetCellStyleTLBR( size_t nCol, size_t nRow, bool bSimple = false ) const; + + /** Returns the bottom-left to top-right frame style of the cell (nCol,nRow). + @param bSimple + true = Ignores merged ranges; + false = Returns the visible style (i.e. from top-left corner of a merged range). + @return + The bottom-left to top-right frame style or an invisible style for invalid cell addresses. */ + const Style& GetCellStyleBLTR( size_t nCol, size_t nRow, bool bSimple = false ) const; + + /** Returns the top-left to bottom-right frame style of the cell (nCol,nRow). + @return + The top-left to bottom-right frame style, if the cell is not part of + a merged range, or if (nCol,nRow) is the top-left corner of a merged + range (useful to find connected frame styles). + An invisible style for invalid cell addresses. */ + const Style& GetCellStyleTL( size_t nCol, size_t nRow ) const; + + /** Returns the top-left to bottom-right frame style of the cell (nCol,nRow). + @return + The top-left to bottom-right frame style, if the cell is not part of + a merged range, or if (nCol,nRow) is the bottom-right corner of a + merged range (useful to find connected frame styles). + An invisible style for invalid cell addresses. */ + const Style& GetCellStyleBR( size_t nCol, size_t nRow ) const; + + /** Returns the bottom-left to top-right frame style of the cell (nCol,nRow). + @return + The bottom-left to top-right frame style, if the cell is not part of + a merged range, or if (nCol,nRow) is the bottom-left corner of a + merged range (useful to find connected frame styles). + An invisible style for invalid cell addresses. */ + const Style& GetCellStyleBL( size_t nCol, size_t nRow ) const; + + /** Returns the bottom-left to top-right frame style of the cell (nCol,nRow). + @return + The bottom-left to top-right frame style, if the cell is not part of + a merged range, or if (nCol,nRow) is the top-right corner of a + merged range (useful to find connected frame styles). + An invisible style for invalid cell addresses. */ + const Style& GetCellStyleTR( size_t nCol, size_t nRow ) const; + + // cell merging ----------------------------------------------------------- + + /** Inserts a new merged cell range. + @precond The range must not intersect other merged ranges. */ + void SetMergedRange( size_t nFirstCol, size_t nFirstRow, size_t nLastCol, size_t nLastRow ); + + /** Sets an additional left width for the merged range that contains (nCol,nRow). + @descr Useful to handle merged ranges that are not completely part of the array. + @precond The merged range must be at the left border of the array. */ + void SetAddMergedLeftSize( size_t nCol, size_t nRow, long nAddSize ); + + /** Sets an additional right width for the merged range that contains (nCol,nRow). + @descr Useful to handle merged ranges that are not completely part of the array. + @precond The merged range must be at the right border of the array. */ + void SetAddMergedRightSize( size_t nCol, size_t nRow, long nAddSize ); + + /** Sets an additional top height for the merged range that contains (nCol,nRow). + @descr Useful to handle merged ranges that are not completely part of the array. + @precond The merged range must be at the top border of the array. */ + void SetAddMergedTopSize( size_t nCol, size_t nRow, long nAddSize ); + + /** Sets an additional bottom height for the merged range that contains (nCol,nRow). + @descr Useful to handle merged ranges that are not completely part of the array. + @precond The merged range must be at the bottom border of the array. */ + void SetAddMergedBottomSize( size_t nCol, size_t nRow, long nAddSize ); + + /** Returns true, if the cell (nCol,nRow) is part of a merged range. */ + bool IsMerged( size_t nCol, size_t nRow ) const; + + /** Returns true, if the left border of the cell (nCol,nRow) is overlapped by a merged range. */ + bool IsMergedOverlappedLeft( size_t nCol, size_t nRow ) const; + + /** Returns true, if the right border of the cell (nCol,nRow) is overlapped by a merged range. */ + bool IsMergedOverlappedRight( size_t nCol, size_t nRow ) const; + + /** Returns the address of the top-left cell of the merged range that contains (nCol,nRow). */ + void GetMergedOrigin( size_t& rnFirstCol, size_t& rnFirstRow, size_t nCol, size_t nRow ) const; + + /** Returns the top-left and bottom-right address of the merged range that contains (nCol,nRow). */ + void GetMergedRange( size_t& rnFirstCol, size_t& rnFirstRow, + size_t& rnLastCol, size_t& rnLastRow, size_t nCol, size_t nRow ) const; + + // clipping --------------------------------------------------------------- + + /** Sets a clipping range. + @descr + No cell borders outside of this clipping range will be drawn. In + difference to simply using the DrawRange() function with the same + range, a clipping range causes the drawing functions to completely + ignore the frame styles connected from outside. This is used i.e. + in Calc to print single pages and to draw the print preview. + Partly visible diagonal frame borders in merged ranges are correctly + clipped too. This array can handle only one clip range at a time. */ + void SetClipRange( size_t nFirstCol, size_t nFirstRow, size_t nLastCol, size_t nLastRow ); + + /** Returns the rectangle (output coordinates) of the current clipping range. */ + Rectangle GetClipRangeRectangle() const; + + // cell coordinates ------------------------------------------------------- + + /** Sets the X output coordinate of the left column. */ + void SetXOffset( long nXOffset ); + + /** Sets the Y output coordinate of the top row. */ + void SetYOffset( long nYOffset ); + + /** Sets the output width of the specified column. */ + void SetColWidth( size_t nCol, long nWidth ); + + /** Sets the output height of the specified row. */ + void SetRowHeight( size_t nRow, long nHeight ); + + /** Sets the same output width for all columns. */ + void SetAllColWidths( long nWidth ); + + /** Sets the same output height for all rows. */ + void SetAllRowHeights( long nHeight ); + + /** Returns the X output coordinate of the left border of the specified column. + @descr The column index <array-width> returns the X output coordinate + of the right array border. */ + long GetColPosition( size_t nCol ) const; + + /** Returns the Y output coordinate of the top border of the specified row. + @descr The row index <array-height> returns the Y output coordinate + of the bottom array border. */ + long GetRowPosition( size_t nRow ) const; + + /** Returns the output width of the specified range of columns. */ + long GetColWidth( size_t nFirstCol, size_t nLastCol ) const; + + /** Returns the output height of the specified range of rows. */ + long GetRowHeight( size_t nFirstRow, size_t nLastRow ) const; + + /** Returns the output width of the entire array. */ + long GetWidth() const; + + /** Returns the output height of the entire array. */ + long GetHeight() const; + + /** Returns the top-left output position of the cell (nCol,nRow). + @param bSimple + true = Ignores merged ranges; + false = Returns output position of top-left corner of merged ranges. */ + Point GetCellPosition( size_t nCol, size_t nRow, bool bSimple = false ) const; + + /** Returns the output size of the cell (nCol,nRow). + @param bSimple + true = Ignores merged ranges; + false = Returns total output size of merged ranges. */ + Size GetCellSize( size_t nCol, size_t nRow, bool bSimple = false ) const; + + /** Returns the output rectangle of the cell (nCol,nRow). + @param bSimple + true = Ignores merged ranges; + false = Returns total output rectangle of merged ranges. */ + Rectangle GetCellRect( size_t nCol, size_t nRow, bool bSimple = false ) const; + + // diagonal frame borders ------------------------------------------------- + + /** Returns the angle between horizontal and diagonal border of the cell (nCol,nRow). + @param bSimple + true = Ignores merged ranges; + false = Returns the horizontal angle of merged ranges. */ + double GetHorDiagAngle( size_t nCol, size_t nRow, bool bSimple = false ) const; + + /** Returns the angle between vertical and diagonal border of the cell (nCol,nRow). + @param bSimple + true = Ignores merged ranges; + false = Returns the vertical angle of merged ranges. */ + double GetVerDiagAngle( size_t nCol, size_t nRow, bool bSimple = false ) const; + + /** Specifies whether to use polygon clipping to draw diagonal frame borders. + @descr + If enabled, diagonal frame borders are drawn interrupted, if they are + crossed by a double frame border. Polygon clipping is very expensive + and should only be used for very small output devices (i.e. in the + Border tab page). Default after construction is OFF. */ + void SetUseDiagDoubleClipping( bool bSet ); + + // mirroring -------------------------------------------------------------- + + /** Mirrors the entire array horizontally. + @param bMirrorStyles + true = Swap primary and secondary line of all vertical double frame borders. + @param bSwapDiag + true = Swap top-left to bottom-right and bottom-left to top-right frame borders. */ + void MirrorSelfX( bool bMirrorStyles, bool bSwapDiag ); + + // drawing ---------------------------------------------------------------- + + /** Draws the part of the specified range, that is inside the clipping range. + @param pForceColor + If not NULL, only this color will be used to draw all frame borders. */ + void DrawRange( drawinglayer::processor2d::BaseProcessor2D* rDev, + size_t nFirstCol, size_t nFirstRow, + size_t nLastCol, size_t nLastRow, + const Color* pForceColor = 0 ) const; + + /** Draws the part of the specified range, that is inside the clipping range. + @param pForceColor + If not NULL, only this color will be used to draw all frame borders. */ + void DrawRange( OutputDevice& rDev, + size_t nFirstCol, size_t nFirstRow, + size_t nLastCol, size_t nLastRow, + const Color* pForceColor = 0 ) const; + + /** Draws the part of the array, that is inside the clipping range. + @param pForceColor + If not NULL, only this color will be used to draw all frame borders. */ + void DrawArray( OutputDevice& rDev, const Color* pForceColor = 0 ) const; + + // ------------------------------------------------------------------------ + +private: + typedef std::auto_ptr< ArrayImpl > ArrayImplPtr; + + ArrayImplPtr mxImpl; +}; + +// ============================================================================ + +} // namespace frame +} // namespace svx + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/frmdirlbox.hxx b/include/svx/frmdirlbox.hxx new file mode 100644 index 000000000000..1248e63558a5 --- /dev/null +++ b/include/svx/frmdirlbox.hxx @@ -0,0 +1,97 @@ +/* -*- 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 _SVX_FRMDIRLBOX_HXX +#define _SVX_FRMDIRLBOX_HXX + +#include <vcl/lstbox.hxx> +#include <sfx2/itemconnect.hxx> +#include <editeng/frmdir.hxx> +#include "svx/svxdllapi.h" + +class SvxFrameDirectionItem; + +namespace svx { + +// ============================================================================ + +/** This listbox contains entries to select horizontal text direction. + + The control works on the SvxFrameDirection enumeration (i.e. left-to-right, + right-to-left), used i.e. in conjunction with the SvxFrameDirectionItem. + */ +class SVX_DLLPUBLIC FrameDirectionListBox : public ListBox +{ +public: + explicit FrameDirectionListBox( Window* pParent, const ResId& rResId ); + explicit FrameDirectionListBox( Window* pParent, WinBits nBits ); + virtual ~FrameDirectionListBox(); + + /** Inserts a string with corresponding direction enum into the listbox. */ + void InsertEntryValue( + const String& rString, + SvxFrameDirection eDirection, + sal_uInt16 nPos = LISTBOX_APPEND ); + /** Removes the entry, that represents the specified frame direction. */ + void RemoveEntryValue( SvxFrameDirection eDirection ); + + /** Selects the specified frame direction. */ + void SelectEntryValue( SvxFrameDirection eDirection ); + /** Returns the currently selected frame direction. */ + SvxFrameDirection GetSelectEntryValue() const; + + /** Saves the currently selected frame direction. */ + inline void SaveValue() { meSaveValue = GetSelectEntryValue(); } + /** Returns the frame direction saved with SaveValue(). */ + inline SvxFrameDirection GetSavedValue() const { return meSaveValue; } + +private: + SvxFrameDirection meSaveValue; /// Saved value for later comparison. +}; + +typedef FrameDirectionListBox FrameDirListBox; + +// ============================================================================ + +/** Wrapper for usage of a FrameDirectionListBox in item connections. */ +class SVX_DLLPUBLIC FrameDirListBoxWrapper : public sfx::SingleControlWrapper< FrameDirListBox, SvxFrameDirection > +{ +public: + explicit FrameDirListBoxWrapper( FrameDirListBox& rListBox ); + + virtual bool IsControlDontKnow() const; + virtual void SetControlDontKnow( bool bSet ); + + virtual SvxFrameDirection GetControlValue() const; + virtual void SetControlValue( SvxFrameDirection eValue ); +}; + +/** Wrapper for usage of a SvxFrameDirectionItem in item connections. */ +typedef sfx::ValueItemWrapper< SvxFrameDirectionItem, SvxFrameDirection, sal_uInt16 > FrameDirItemWrapper; + +/** An item<->control connection for a FrameDirectionListBox. */ +typedef sfx::ItemControlConnection< FrameDirItemWrapper, FrameDirListBoxWrapper > FrameDirListBoxConnection; + +// ============================================================================ + +} // namespace svx + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/frmsel.hxx b/include/svx/frmsel.hxx new file mode 100644 index 000000000000..48b720856c86 --- /dev/null +++ b/include/svx/frmsel.hxx @@ -0,0 +1,202 @@ +/* -*- 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 SVX_FRMSEL_HXX +#define SVX_FRMSEL_HXX + +#include <memory> +#include <tools/color.hxx> +#include <vcl/ctrl.hxx> +#include <vcl/bitmap.hxx> +#include <editeng/borderline.hxx> +#include <svx/framebordertype.hxx> +#include "svx/svxdllapi.h" + +namespace editeng { + class SvxBorderLine; +} + +namespace svx { + +struct FrameSelectorImpl; + +// ============================================================================ + +typedef int FrameSelFlags; + +const FrameSelFlags FRAMESEL_NONE = 0x0000; +/** If set, the left frame border is enabled. */ +const FrameSelFlags FRAMESEL_LEFT = 0x0001; +/** If set, the right frame border is enabled. */ +const FrameSelFlags FRAMESEL_RIGHT = 0x0002; +/** If set, the top frame border is enabled. */ +const FrameSelFlags FRAMESEL_TOP = 0x0004; +/** If set, the bottom frame border is enabled. */ +const FrameSelFlags FRAMESEL_BOTTOM = 0x0008; +/** If set, the inner horizontal frame border is enabled. */ +const FrameSelFlags FRAMESEL_INNER_HOR = 0x0010; +/** If set, the inner vertical frame border is enabled. */ +const FrameSelFlags FRAMESEL_INNER_VER = 0x0020; +/** If set, the top-left to bottom-right diagonal frame border is enabled. */ +const FrameSelFlags FRAMESEL_DIAG_TLBR = 0x0040; +/** If set, the bottom-left to top-right diagonal frame border is enabled. */ +const FrameSelFlags FRAMESEL_DIAG_BLTR = 0x0080; + +/** If set, all four outer frame borders are enabled. */ +const FrameSelFlags FRAMESEL_OUTER = FRAMESEL_LEFT|FRAMESEL_RIGHT|FRAMESEL_TOP|FRAMESEL_BOTTOM; +/** If set, both inner frame borders are enabled. */ +const FrameSelFlags FRAMESEL_INNER = FRAMESEL_INNER_HOR|FRAMESEL_INNER_VER; +/** If set, both diagonal frame borders are enabled. */ +const FrameSelFlags FRAMESEL_DIAGONAL = FRAMESEL_DIAG_TLBR|FRAMESEL_DIAG_BLTR; + +/** If set, all frame borders will support the don't care state. */ +const FrameSelFlags FRAMESEL_DONTCARE = 0x0100; + +// ---------------------------------------------------------------------------- + +/** All possible states of a frame border. */ +enum FrameBorderState +{ + FRAMESTATE_SHOW, /// Frame border has a visible style. + FRAMESTATE_HIDE, /// Frame border is hidden (off). + FRAMESTATE_DONTCARE /// Frame border is in don't care state (if enabled). +}; + +// ============================================================================ + +class SVX_DLLPUBLIC FrameSelector : public Control +{ +public: + FrameSelector(Window* pParent); + virtual ~FrameSelector(); + + /** Initializes the control, enables/disables frame borders according to flags. */ + void Initialize( FrameSelFlags nFlags ); + + // enabled frame borders -------------------------------------------------- + + /** Returns true, if the specified frame border is enabled. */ + bool IsBorderEnabled( FrameBorderType eBorder ) const; + /** Returns the number of enabled frame borders. */ + sal_Int32 GetEnabledBorderCount() const; + /** Returns the border type from the passed index (counts only enabled frame borders). */ + FrameBorderType GetEnabledBorderType( sal_Int32 nIndex ) const; + /** Returns the index of a frame border (counts only enabled borders) from passed type. */ + sal_Int32 GetEnabledBorderIndex( FrameBorderType eBorder ) const; + + // frame border state and style ------------------------------------------- + + /** Returns true, if the control supports the "don't care" frame border state. */ + bool SupportsDontCareState() const; + + /** Returns the state (visible/hidden/don't care) of the specified frame border. */ + FrameBorderState GetFrameBorderState( FrameBorderType eBorder ) const; + /** Returns the style of the specified frame border, if it is visible. */ + const editeng::SvxBorderLine* GetFrameBorderStyle( FrameBorderType eBorder ) const; + + /** Shows the specified frame border using the passed style, or hides it, if pStyle is 0. */ + void ShowBorder( FrameBorderType eBorder, const editeng::SvxBorderLine* pStyle ); + /** Sets the specified frame border to "don't care" state. */ + void SetBorderDontCare( FrameBorderType eBorder ); + + /** Returns true, if any enabled frame border has a visible style (not "don't care"). */ + bool IsAnyBorderVisible() const; + /** Hides all enabled frame borders. */ + void HideAllBorders(); + + /** Returns true, if all visible frame borders have equal widths. + @descr Ignores hidden and "don't care" frame borders. On success, + returns the width in the passed parameter. */ + bool GetVisibleWidth( long& rnWidth, editeng::SvxBorderStyle& rnStyle ) const; + /** Returns true, if all visible frame borders have equal color. + @descr Ignores hidden and "don't care" frame borders. On success, + returns the color in the passed parameter. */ + bool GetVisibleColor( Color& rColor ) const; + + // frame border selection ------------------------------------------------- + + /** Returns the current selection handler. */ + const Link& GetSelectHdl() const; + /** Sets the passed handler that is called if the selection of the control changes. */ + void SetSelectHdl( const Link& rHdl ); + + /** Returns true, if the specified frame border is selected. */ + bool IsBorderSelected( FrameBorderType eBorder ) const; + /** Selects or deselects the specified frame border. */ + void SelectBorder( FrameBorderType eBorder, bool bSelect = true ); + /** Deselects the specified frame border. */ + inline void DeselectBorder( FrameBorderType eBorder ) { SelectBorder( eBorder, false ); } + + /** Returns true, if any of the enabled frame borders is selected. */ + bool IsAnyBorderSelected() const; + /** Selects or deselects all frame borders. */ + void SelectAllBorders( bool bSelect = true ); + /** Deselects all frame borders. */ + inline void DeselectAllBorders() { SelectAllBorders( false ); } + + /** Selects or deselects all visible frame borders (ignores hidden and "don't care" borders). */ + void SelectAllVisibleBorders( bool bSelect = true ); + + /** Sets the passed line widths to all selected frame borders (in twips). */ + void SetStyleToSelection( long nWidth, editeng::SvxBorderStyle nStyle ); + /** Sets the passed color to all selected frame borders. */ + void SetColorToSelection( const Color& rColor ); + + // accessibility ---------------------------------------------------------- + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > + CreateAccessible(); + + /** Returns the accessibility child object of the specified frame border (if enabled). */ + ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > + GetChildAccessible( FrameBorderType eBorder ); + /** Returns the accessibility child object with specified index (counts enabled frame borders only). */ + ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > + GetChildAccessible( sal_Int32 nIndex ); + /** Returns the accessibility child object at the specified position (relative to control). */ + ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > + GetChildAccessible( const Point& rPos ); + + /** Returns true, if the passed point is inside the click area of any enabled frame border. */ + bool ContainsClickPoint( const Point& rPos ) const; + /** Returns the bounding rectangle of the specified frame border (if enabled). */ + Rectangle GetClickBoundRect( FrameBorderType eBorder ) const; + + // ------------------------------------------------------------------------ +protected: + virtual void Paint( const Rectangle& rRect ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void KeyInput( const KeyEvent& rKEvt ); + virtual void GetFocus(); + virtual void LoseFocus(); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + virtual void Resize(); + virtual Size GetOptimalSize() const; + +private: + std::auto_ptr< FrameSelectorImpl > mxImpl; +}; + +// ============================================================================ + +} // namespace svx + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/galbrws.hxx b/include/svx/galbrws.hxx new file mode 100644 index 000000000000..0269643c658b --- /dev/null +++ b/include/svx/galbrws.hxx @@ -0,0 +1,89 @@ +/* -*- 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 _SVX_GALBRWS_HXX_ +#define _SVX_GALBRWS_HXX_ + +#include <sfx2/ctrlitem.hxx> +#include <sfx2/dockwin.hxx> +#include <vcl/graph.hxx> +#include <tools/urlobj.hxx> +#include "svx/svxdllapi.h" + +#define GALLERYBROWSER() ((GalleryBrowser*)( SfxViewFrame::Current()->GetChildWindow(GalleryChildWindow::GetChildWindowId())->GetWindow())) + +class SVX_DLLPUBLIC GalleryChildWindow : public SfxChildWindow +{ +public: + GalleryChildWindow( Window*, sal_uInt16, SfxBindings*, SfxChildWinInfo* ); + ~GalleryChildWindow(); + + SFX_DECL_CHILDWINDOW_WITHID( GalleryChildWindow ); +}; + +class FmFormModel; +class GalleryBrowser1; +class GalleryBrowser2; +class GallerySplitter; +class Gallery; + +class GalleryBrowser : public SfxDockingWindow +{ + friend class GalleryBrowser1; + friend class GalleryBrowser2; + friend class GallerySplitter; + using Window::KeyInput; + +private: + + Size maLastSize; + GallerySplitter* mpSplitter; + GalleryBrowser1* mpBrowser1; + GalleryBrowser2* mpBrowser2; + Gallery* mpGallery; + + void InitSettings(); + + virtual sal_Bool Close(); + virtual void Resize(); + virtual void GetFocus(); + + DECL_LINK( SplitHdl, void* ); + +protected: + + void ThemeSelectionHasChanged(); + +public: + + GalleryBrowser( SfxBindings* pBindings, SfxChildWindow* pCW, + Window* pParent, const ResId& rResId ); + ~GalleryBrowser(); + + INetURLObject GetURL() const; + String GetFilterName() const; + Graphic GetGraphic() const; + sal_Bool IsLinkage() const; + + sal_Bool KeyInput( const KeyEvent& rKEvt, Window* pWindow ); +}; + +#endif // _SVX_GALBRWS_HXX_ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/galctrl.hxx b/include/svx/galctrl.hxx new file mode 100644 index 000000000000..782163aa95fd --- /dev/null +++ b/include/svx/galctrl.hxx @@ -0,0 +1,167 @@ +/* -*- 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 _SVX_GALCTRL_HXX_ +#define _SVX_GALCTRL_HXX_ + +#include <vcl/dialog.hxx> +#include <vcl/graph.hxx> +#include <vcl/fixed.hxx> +#include <vcl/group.hxx> +#include <vcl/button.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/menu.hxx> +#include <vcl/edit.hxx> +#include <vcl/combobox.hxx> +#include <svl/slstitm.hxx> +#include <svtools/transfer.hxx> +#include <svtools/valueset.hxx> +#include <svtools/brwbox.hxx> +#include <svtools/grfmgr.hxx> +#include "svx/galmisc.hxx" +#include "svx/svxdllapi.h" + +class GalleryTheme; +class GalleryBrowser2; + +class SVX_DLLPUBLIC GalleryPreview : public Window, public DropTargetHelper, public DragSourceHelper +{ +private: + + GraphicObject aGraphicObj; + Rectangle aPreviewRect; + GalleryTheme* mpTheme; + + SVX_DLLPRIVATE sal_Bool ImplGetGraphicCenterRect( const Graphic& rGraphic, Rectangle& rResultRect ) const; + SVX_DLLPRIVATE void InitSettings(); + + // Window + SVX_DLLPRIVATE virtual void Paint(const Rectangle& rRect); + SVX_DLLPRIVATE virtual void MouseButtonDown(const MouseEvent& rMEvt); + SVX_DLLPRIVATE virtual void Command(const CommandEvent& rCEvt); + SVX_DLLPRIVATE virtual void KeyInput( const KeyEvent& rKEvt ); + SVX_DLLPRIVATE virtual void DataChanged( const DataChangedEvent& rDCEvt ); + + + // DropTargetHelper + SVX_DLLPRIVATE virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ); + SVX_DLLPRIVATE virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ); + + // DragSourceHelper + SVX_DLLPRIVATE virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ); + + DECL_LINK( MenuSelectHdl, Menu* ); + +public: + + GalleryPreview( GalleryBrowser2* pParent, GalleryTheme* pTheme ); + GalleryPreview( Window* pParent, const ResId& rResId ); + ~GalleryPreview(); + + void SetGraphic( const Graphic& rGraphic ) { aGraphicObj.SetGraphic( rGraphic ); } + bool SetGraphic( const INetURLObject& ); + void PreviewMedia( const INetURLObject& rURL ); +}; + +class GalleryIconView : public ValueSet, public DropTargetHelper, public DragSourceHelper +{ + using ValueSet::StartDrag; + +private: + + GalleryTheme* mpTheme; + + void InitSettings(); + + // ValueSet + virtual void UserDraw( const UserDrawEvent& rUDEvt ); + + // Window + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + virtual void Command( const CommandEvent& rCEvt ); + virtual void KeyInput( const KeyEvent& rKEvt ); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + + // DropTargetHelper + virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ); + virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ); + + // DragSourceHelper + virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ); + +public: + + GalleryIconView( GalleryBrowser2* pParent, GalleryTheme* pTheme ); + ~GalleryIconView(); +}; + +class GalleryListView : public BrowseBox +{ + using BrowseBox::AcceptDrop; + using BrowseBox::ExecuteDrop; + +private: + + Link maSelectHdl; + GalleryTheme* mpTheme; + sal_uIntPtr mnCurRow; + + void InitSettings(); + + // BrowseBox + virtual sal_Bool SeekRow( long nRow ); + virtual void PaintField( OutputDevice& rDev, const Rectangle& rRect, sal_uInt16 nColumnId ) const; + virtual void DoubleClick( const BrowserMouseEvent& rEvt ); + virtual void Select(); + virtual sal_Int8 AcceptDrop( const BrowserAcceptDropEvent& rEvt ); + virtual sal_Int8 ExecuteDrop( const BrowserExecuteDropEvent& rEvt ); + virtual void KeyInput( const KeyEvent& rKEvt ); + + // Window + virtual void Command( const CommandEvent& rCEvt ); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + + // DragSourceHelper + virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ); + +public: + + GalleryListView( GalleryBrowser2* pParent, GalleryTheme* pTheme ); + ~GalleryListView(); + + void SetSelectHdl( const Link& rSelectHdl ) { maSelectHdl = rSelectHdl; } + + /** GetCellText returns the text at the given position + @param _nRow + the number of the row + @param _nColId + the ID of the column + @return + the text out of the cell + */ + virtual String GetCellText(long _nRow, sal_uInt16 _nColId) const; + + // from IAccessibleTableProvider + virtual Rectangle GetFieldCharacterBounds(sal_Int32 _nRow,sal_Int32 _nColumnPos,sal_Int32 nIndex); + virtual sal_Int32 GetFieldIndexAtPoint(sal_Int32 _nRow,sal_Int32 _nColumnPos,const Point& _rPoint); +}; + +#endif // _SVX_GALCTRL_HXX_ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/gallery.hxx b/include/svx/gallery.hxx new file mode 100644 index 000000000000..a2b010b9f4f0 --- /dev/null +++ b/include/svx/gallery.hxx @@ -0,0 +1,120 @@ +/* -*- 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 _GALLERY_HXX_ +#define _GALLERY_HXX_ + +#include <tools/solar.h> +#include <tools/string.hxx> +#include <tools/urlobj.hxx> +#include <vector> +#include "svx/svxdllapi.h" + +#define SGA_FORMAT_NONE 0x00000000L +#define SGA_FORMAT_STRING 0x00000001L +#define SGA_FORMAT_GRAPHIC 0x00000010L +#define SGA_FORMAT_SOUND 0x00000100L +#define SGA_FORMAT_OLE 0x00001000L +#define SGA_FORMAT_SVDRAW 0x00010000L +#define SGA_FORMAT_ALL 0xFFFFFFFFL + +#define SVX_GALLERY() (GalleryExplorer::GetGallery()) + +// Defines for preinstalled themes +// Has to be in sync with svx/inc/galtheme.hrc +#define GALLERY_THEME_3D 1 +#define GALLERY_THEME_BULLETS 3 +#define GALLERY_THEME_HOMEPAGE 10 +#define GALLERY_THEME_HTMLBUTTONS 15 +#define GALLERY_THEME_POWERPOINT 16 +#define GALLERY_THEME_SOUNDS 18 +#define GALLERY_THEME_USERSOUNDS 21 + +#define GALLERY_THEME_FONTWORK 37 +#define GALLERY_THEME_FONTWORK_VERTICAL 38 + +class Gallery; +class VCDrawModel; +class FmFormModel; +class SdrModel; +class Graphic; +class FmFormModel; +class Bitmap; +class OutputDevice; + +class SVX_DLLPUBLIC GalleryExplorer +{ +private: + + SVX_DLLPRIVATE static Gallery* ImplGetGallery(); + +public: + + static GalleryExplorer* GetGallery(); + +public: + + INetURLObject GetURL() const; + String GetFilterName() const; + Graphic GetGraphic() const; + sal_Bool IsLinkage() const; + + static bool FillThemeList( std::vector<String>& rThemeList ); + + // FillObjList is filling rObjList with Strings of the internal Gallery Object URL + static sal_Bool FillObjList( const String& rThemeName, std::vector<String> &rObjList ); + static sal_Bool FillObjList( const sal_uInt32 nThemeId, std::vector<String> &rObjList ); + static bool FillObjList( const sal_uInt32 nThemeId, std::vector<OUString> &rObjList ); + + // FillObjTitleList is filling the rList with the title for each gallery object + static sal_Bool FillObjListTitle( const sal_uInt32 nThemeId, std::vector< OUString >& rList ); + + static sal_Bool InsertURL( const String& rThemeName, const String& rURL ); + static sal_Bool InsertURL( sal_uIntPtr nThemeId, const String& rURL ); + + static sal_Bool InsertURL( const String& rThemeName, const String& rURL, + const sal_uIntPtr nSgaFormat /* = SGA_FORMAT_ALL */ ); + static sal_Bool InsertURL( sal_uIntPtr nThemeId, const String& rURL, + const sal_uIntPtr nSgaFormat /* = SGA_FORMAT_ALL */ ); + + static sal_Bool GetGraphicObj( const String& rThemeName, sal_uIntPtr nPos, + Graphic* pGraphic = NULL, Bitmap* pThumb = NULL, + sal_Bool bProgess = sal_False ); + static sal_Bool GetGraphicObj( sal_uIntPtr nThemeId, sal_uIntPtr nPos, + Graphic* pGraphic = NULL, Bitmap* pThumb = NULL, + sal_Bool bProgess = sal_False ); + + static sal_uIntPtr GetSdrObjCount( const String& rThemeName ); + static sal_uIntPtr GetSdrObjCount( sal_uIntPtr nThemeId ); + + static sal_Bool GetSdrObj( const String& rThemeName, sal_uIntPtr nSdrModelPos, + SdrModel* pModel = NULL, Bitmap* pThumb = NULL ); + static sal_Bool GetSdrObj( sal_uIntPtr nThemeId, sal_uIntPtr nSdrModelPos, + SdrModel* pModel = NULL, Bitmap* pThumb = NULL ); + + static sal_Bool BeginLocking( const String& rThemeName ); + static sal_Bool BeginLocking( sal_uIntPtr nThemeId ); + + static sal_Bool EndLocking( const String& rThemeName ); + static sal_Bool EndLocking( sal_uIntPtr nThemeId ); +}; + +#endif // _GALLERY_HXX_ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/gallery1.hxx b/include/svx/gallery1.hxx new file mode 100644 index 000000000000..e116c14b8cf6 --- /dev/null +++ b/include/svx/gallery1.hxx @@ -0,0 +1,171 @@ +/* -*- 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 _SVX_GALLERY1_HXX_ +#define _SVX_GALLERY1_HXX_ + +#include <tools/string.hxx> +#include <tools/urlobj.hxx> +#include <svl/brdcst.hxx> +#include "svx/svxdllapi.h" + +#include <cstdio> +#include <vector> + +// --------------------- +// - GalleryThemeEntry - +// --------------------- + +class SvStream; + +class GalleryThemeEntry +{ +private: + + OUString aName; + INetURLObject aThmURL; + INetURLObject aSdgURL; + INetURLObject aSdvURL; + sal_uInt32 nFileNumber; + sal_uInt32 nId; + sal_Bool bReadOnly; + sal_Bool bModified; + sal_Bool bThemeNameFromResource; + + GalleryThemeEntry(); + INetURLObject ImplGetURLIgnoreCase( const INetURLObject& rURL ) const; + +public: + + GalleryThemeEntry( const INetURLObject& rBaseURL, const String& rName, + sal_uInt32 nFileNumber, sal_Bool bReadOnly, + sal_Bool bNewFile, sal_uInt32 nId, sal_Bool bThemeNameFromResource ); + ~GalleryThemeEntry() {}; + + const OUString& GetThemeName() const { return aName; } + sal_uInt32 GetFileNumber() const { return nFileNumber; } + + const INetURLObject& GetThmURL() const { return aThmURL; } + const INetURLObject& GetSdgURL() const { return aSdgURL; } + const INetURLObject& GetSdvURL() const { return aSdvURL; } + + sal_Bool IsReadOnly() const { return bReadOnly; } + sal_Bool IsDefault() const; + + sal_Bool IsHidden() const { return aName.match("private://gallery/hidden/"); } + + sal_Bool IsModified() const { return bModified; } + void SetModified( sal_Bool bSet ) { bModified = ( bSet && !IsReadOnly() ); } + + void SetName( const OUString& rNewName ); + sal_Bool IsNameFromResource() const { return bThemeNameFromResource; } + + sal_uInt32 GetId() const { return nId; } + void SetId( sal_uInt32 nNewId, sal_Bool bResetThemeName ); +}; + +typedef ::std::vector< GalleryThemeEntry* > GalleryThemeList; + +// --------------------------- +// - GalleryImportThemeEntry - +// --------------------------- + +struct GalleryImportThemeEntry +{ + OUString aThemeName; + OUString aUIName; + INetURLObject aURL; +}; + +typedef ::std::vector< GalleryImportThemeEntry* > GalleryImportThemeList; + +// ----------------------------------------------------------------------------- + +SvStream& operator<<( SvStream& rOut, const GalleryImportThemeEntry& rEntry ); +SvStream& operator>>( SvStream& rIn, GalleryImportThemeEntry& rEntry ); + +// ----------- +// - Gallery - +// ----------- + +class SfxListener; +class GalleryTheme; +class GalleryThemeCacheEntry; + +class Gallery : public SfxBroadcaster +{ + // only for gengal utility! + friend Gallery* createGallery( const OUString& ); + friend void disposeGallery( Gallery* ); + + typedef std::vector<GalleryThemeCacheEntry*> GalleryCacheThemeList; + +private: + + GalleryThemeList aThemeList; + GalleryImportThemeList aImportList; + GalleryCacheThemeList aThemeCache; + INetURLObject aRelURL; + INetURLObject aUserURL; + rtl_TextEncoding nReadTextEncoding; + sal_uIntPtr nLastFileNumber; + sal_Bool bMultiPath; + + void ImplLoad( const OUString& rMultiPath ); + void ImplLoadSubDirs( const INetURLObject& rBaseURL, sal_Bool& rbIsReadOnly ); + + SVX_DLLPUBLIC GalleryThemeEntry* ImplGetThemeEntry( const OUString& rThemeName ); + GalleryThemeEntry* ImplGetThemeEntry( sal_uIntPtr nThemeId ); + + GalleryTheme* ImplGetCachedTheme( const GalleryThemeEntry* pThemeEntry ); + void ImplDeleteCachedTheme( GalleryTheme* pTheme ); + + SVX_DLLPUBLIC Gallery( const OUString& rMultiPath ); + SVX_DLLPUBLIC ~Gallery(); + +public: + + SVX_DLLPUBLIC static Gallery* GetGalleryInstance(); + + size_t GetThemeCount() const { return aThemeList.size(); } + const GalleryThemeEntry* GetThemeInfo( size_t nPos ) + { return nPos < aThemeList.size() ? aThemeList[ nPos ] : NULL; } + const GalleryThemeEntry* GetThemeInfo( const String& rThemeName ) { return ImplGetThemeEntry( rThemeName ); } + + SVX_DLLPUBLIC sal_Bool HasTheme( const String& rThemeName ); + OUString GetThemeName( sal_uIntPtr nThemeId ) const; + + SVX_DLLPUBLIC sal_Bool CreateTheme( const String& rThemeName, sal_uInt32 nNumFrom = 0 ); + sal_Bool RenameTheme( const String& rOldName, const String& rNewName ); + SVX_DLLPUBLIC sal_Bool RemoveTheme( const String& rThemeName ); + + SVX_DLLPUBLIC GalleryTheme* AcquireTheme( const String& rThemeName, SfxListener& rListener ); + SVX_DLLPUBLIC void ReleaseTheme( GalleryTheme* pTheme, SfxListener& rListener ); + +public: + + const INetURLObject& GetUserURL() const { return aUserURL; } + const INetURLObject& GetRelativeURL() const { return aRelURL; } + + sal_Bool IsMultiPath() const { return bMultiPath; } +}; + +#endif // _SVX_GALLERY1_HXX_ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/galmisc.hxx b/include/svx/galmisc.hxx new file mode 100644 index 000000000000..16f84cbe907b --- /dev/null +++ b/include/svx/galmisc.hxx @@ -0,0 +1,223 @@ +/* -*- 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 _SVX_GALMISC_HXX_ +#define _SVX_GALMISC_HXX_ + +#include <sot/storage.hxx> +#include <tools/urlobj.hxx> +#include <svtools/imap.hxx> +#include <svl/hint.hxx> +#include <svtools/transfer.hxx> +#include <svx/svdobj.hxx> +#include <com/sun/star/uno/Reference.h> +#include <com/sun/star/awt/XProgressMonitor.hpp> +#include "svx/svxdllapi.h" +#include <tools/date.hxx> +#include <tools/time.hxx> + +class GalleryTheme; + +struct ExchangeData +{ + GalleryTheme* pTheme; + String aEditedTitle; + Date aThemeChangeDate; + Time aThemeChangeTime; + + ExchangeData() : + aThemeChangeDate( Date::EMPTY ), + aThemeChangeTime( Time::EMPTY ) + {} +}; + +enum SgaObjKind +{ + SGA_OBJ_NONE = 0, // abstract object + SGA_OBJ_BMP = 1, // bitmap object + SGA_OBJ_SOUND = 2, // sound object + SGA_OBJ_VIDEO = 3, // video object + SGA_OBJ_ANIM = 4, // animation object + SGA_OBJ_SVDRAW = 5, // Svdraw object + SGA_OBJ_INET = 6 // graphics from the internet +}; + +#define IV_IMAPINFO (sal_uInt32('S')*0x00000001+sal_uInt32('D')*0x00000100+sal_uInt32('U')*0x00010000+sal_uInt32('D')*0x01000000) +#define ID_IMAPINFO 2 + +#define USERDATA_HDL() (LINK(this,SgaUserDataFactory,MakeUserData)) + +#define GAL_RES(nId) ResId(nId, *GetGalleryResMgr()) +#define GAL_RESSTR(nId) GAL_RES(nId).toString() +#define STREAMBUF_SIZE 16384L + +#define SGA_IMPORT_NONE 0x0000 +#define SGA_IMPORT_FILE 0x0001 +#define SGA_IMPORT_INET 0x0002 + +#define GALLERY_PROGRESS_RANGE 10000 + +#define GALLERY_FG_COLOR Application::GetSettings().GetStyleSettings().GetWindowTextColor() +#define GALLERY_BG_COLOR Application::GetSettings().GetStyleSettings().GetWindowColor() +#define GALLERY_DLG_COLOR Application::GetSettings().GetStyleSettings().GetDialogColor() + +class ResMgr; +class String; +class SvStream; +class Graphic; +class FmFormModel; +class ImageMap; +class Gallery; + +SVX_DLLPUBLIC ResMgr* GetGalleryResMgr(); +sal_uInt16 GalleryGraphicImport( const INetURLObject& rURL, Graphic& rGraphic, String& rFilterName, sal_Bool bShowProgress = sal_False ); +sal_Bool GallerySvDrawImport( SvStream& rIStm, SdrModel& rModel ); +sal_Bool CreateIMapGraphic( const FmFormModel& rModel, Graphic& rGraphic, ImageMap& rImageMap ); +SVX_DLLPUBLIC String GetReducedString( const INetURLObject& rURL, sal_uIntPtr nMaxLen ); +String GetSvDrawStreamNameFromURL( const INetURLObject& rSvDrawObjURL ); + +sal_Bool FileExists( const INetURLObject& rURL ); +sal_Bool CreateDir( const INetURLObject& rURL ); +sal_Bool CopyFile( const INetURLObject& rSrcURL, const INetURLObject& rDstURL ); +sal_Bool KillFile( const INetURLObject& rURL ); +BitmapEx GalleryResGetBitmapEx( sal_uInt32 nId ); + +class SgaIMapInfo : public SdrObjUserData, public SfxListener +{ + ImageMap aImageMap; + +public: + SgaIMapInfo() : SdrObjUserData( IV_IMAPINFO, ID_IMAPINFO, 0 ) {}; + + SgaIMapInfo( const ImageMap& rImageMap) : + SdrObjUserData( IV_IMAPINFO, ID_IMAPINFO, 0 ), + aImageMap( rImageMap ) {}; + + virtual ~SgaIMapInfo() {}; + + virtual SdrObjUserData* Clone( SdrObject* ) const + { + SgaIMapInfo* pInfo = new SgaIMapInfo; + pInfo->aImageMap = aImageMap; + return pInfo; + } + + const ImageMap& GetImageMap() const { return aImageMap; } +}; + +class SgaUserDataFactory +{ +public: + SgaUserDataFactory() { SdrObjFactory::InsertMakeUserDataHdl( USERDATA_HDL() ); } + ~SgaUserDataFactory() { SdrObjFactory::RemoveMakeUserDataHdl( USERDATA_HDL() ); } + + DECL_LINK( MakeUserData, SdrObjFactory* ); +}; + +class GraphicFilter; + +class SVX_DLLPUBLIC GalleryProgress +{ + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XProgressBar > mxProgressBar; + GraphicFilter* mpFilter; + + public: + + GalleryProgress( GraphicFilter* pFilter = NULL ); + ~GalleryProgress(); + + void Update( sal_uIntPtr nVal, sal_uIntPtr nMaxVal ); +}; + +class Gallery; +class GalleryTheme; +class GraphicObject; + +class GalleryTransferable : public TransferableHelper +{ +friend class GalleryTheme; +using TransferableHelper::CopyToClipboard; + +private: + + GalleryTheme* mpTheme; + SgaObjKind meObjectKind; + sal_uInt32 mnObjectPos; + SotStorageStreamRef mxModelStream; + GraphicObject* mpGraphicObject; + ImageMap* mpImageMap; + INetURLObject* mpURL; + +protected: + + GalleryTransferable( GalleryTheme* pTheme, sal_uIntPtr nObjectPos, bool bLazy ); + ~GalleryTransferable(); + + void InitData( bool bLazy ); + + // TransferableHelper + virtual void AddSupportedFormats(); + virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); + virtual sal_Bool WriteObject( SotStorageStreamRef& rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); + virtual void DragFinished( sal_Int8 nDropAction ); + virtual void ObjectReleased(); + + void CopyToClipboard( Window* pWindow ); + void StartDrag( Window* pWindow, sal_Int8 nDragSourceActions, + sal_Int32 nDragPointer = DND_POINTER_NONE, + sal_Int32 nDragImage = DND_IMAGE_NONE ); +}; + +#define GALLERY_HINT_NONE 0x00000000 +#define GALLERY_HINT_CLOSE_THEME 0x00000001 +#define GALLERY_HINT_THEME_REMOVED 0x00000002 +#define GALLERY_HINT_THEME_RENAMED 0x00000004 +#define GALLERY_HINT_THEME_CREATED 0x00000008 +#define GALLERY_HINT_THEME_UPDATEVIEW 0x00000010 +#define GALLERY_HINT_CLOSE_OBJECT 0x00000020 +#define GALLERY_HINT_OBJECT_REMOVED 0x00000040 + +class GalleryHint : public SfxHint +{ +private: + + sal_uIntPtr mnType; + OUString maThemeName; + OUString maStringData; + sal_uIntPtr mnData1; + sal_uIntPtr mnData2; + +public: + + GalleryHint( sal_uIntPtr nType, const String& rThemeName, sal_uIntPtr nData1 = 0UL, sal_uIntPtr nData2 = 0UL ) : + mnType( nType ), maThemeName( rThemeName ), mnData1( nData1 ), mnData2( nData2 ) {} + + GalleryHint( sal_uIntPtr nType, const String& rThemeName, const String& rStringData, sal_uIntPtr nData1 = 0UL, sal_uIntPtr nData2 = 0UL ) : + mnType( nType ), maThemeName( rThemeName ), maStringData( rStringData ), mnData1( nData1 ), mnData2( nData2 ) {} + + sal_uIntPtr GetType() const { return mnType; } + const OUString& GetThemeName() const { return maThemeName; } + const OUString& GetStringData() const { return maStringData; } + sal_uIntPtr GetData1() const { return mnData1; } + sal_uIntPtr GetData2() const { return mnData2; } +}; + + #endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/galtheme.hxx b/include/svx/galtheme.hxx new file mode 100644 index 000000000000..0326418e8e6a --- /dev/null +++ b/include/svx/galtheme.hxx @@ -0,0 +1,225 @@ +/* -*- 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 _SVX_GALTHEME_HXX_ +#define _SVX_GALTHEME_HXX_ + +#include "svx/svxdllapi.h" + +#include <tools/debug.hxx> +#include <tools/urlobj.hxx> +#include <vcl/salctype.hxx> +#include <svl/brdcst.hxx> +#include <svl/lstner.hxx> +#include <svtools/transfer.hxx> +#include <sot/storage.hxx> +#include <svx/svdmodel.hxx> +#include <svx/galmisc.hxx> +#include <vector> + +// ----------------- +// - GalleryObject - +// ----------------- +// -------------- +// - SgaObjKind - +// -------------- + +struct GalleryObject +{ + INetURLObject aURL; + sal_uInt32 nOffset; + SgaObjKind eObjKind; + sal_Bool bDummy; +}; + +typedef ::std::vector< GalleryObject* > GalleryObjectList; + +class GalleryThemeEntry; +class SgaObject; +class FmFormModel; +class ListBox; + +// ----------------- +// - GalDragParams - +// ----------------- + +struct GalDragParams +{ + Region aDragRegion; + sal_uIntPtr nDragObjPos; + OUString aThemeName; + OUString aFileName; + SgaObjKind eObjKind; +}; + +// ---------------- +// - GalleryTheme - +// ---------------- + +class Gallery; +class GalleryProgress; +namespace unogallery +{ + class GalleryTheme; + class GalleryItem; +} + +class GalleryTheme : public SfxBroadcaster +{ + friend class Gallery; + friend class GalleryThemeCacheEntry; + friend class ::unogallery::GalleryTheme; + friend class ::unogallery::GalleryItem; + +private: + + GalleryObjectList aObjectList; + String m_aDestDir; + SotStorageRef aSvDrawStorageRef; + Gallery* pParent; + GalleryThemeEntry* pThm; + sal_uIntPtr mnThemeLockCount; + sal_uIntPtr mnBroadcasterLockCount; + sal_uIntPtr nDragPos; + sal_Bool bDragging; + sal_Bool bAbortActualize; + + void ImplCreateSvDrawStorage(); + SVX_DLLPUBLIC SgaObject* ImplReadSgaObject( GalleryObject* pEntry ); + sal_Bool ImplWriteSgaObject( const SgaObject& rObj, size_t nPos, GalleryObject* pExistentEntry ); + void ImplWrite(); + const GalleryObject* ImplGetGalleryObject( size_t nPos ) const + { return ( nPos < aObjectList.size() ) ? aObjectList[ nPos ] : NULL; } + SVX_DLLPUBLIC const GalleryObject* ImplGetGalleryObject( const INetURLObject& rURL ); + + size_t ImplGetGalleryObjectPos( const GalleryObject* pObj ) const + { + for ( size_t i = 0, n = aObjectList.size(); i < n; ++i ) + if ( pObj == aObjectList[ i ] ) + return i; + return size_t(-1); + } + INetURLObject ImplGetURL( const GalleryObject* pObject ) const; + INetURLObject ImplCreateUniqueURL( SgaObjKind eObjKind, sal_uIntPtr nFormat = CVT_UNKNOWN ); + void ImplSetModified( sal_Bool bModified ); + void ImplBroadcast( sal_uIntPtr nUpdatePos ); + + GalleryTheme(); + GalleryTheme( Gallery* pGallery, GalleryThemeEntry* pThemeEntry ); + ~GalleryTheme(); + +public: + + static GalleryThemeEntry* CreateThemeEntry( const INetURLObject& rURL, sal_Bool bReadOnly ); + + size_t GetObjectCount() const { return aObjectList.size(); } + + SVX_DLLPUBLIC SgaObject* AcquireObject( size_t nPos ); + SVX_DLLPUBLIC void ReleaseObject( SgaObject* pObj ); + + SVX_DLLPUBLIC bool InsertObject( const SgaObject& rObj, sal_uIntPtr nPos = LIST_APPEND ); + SVX_DLLPUBLIC bool RemoveObject( size_t nPos ); + bool ChangeObjectPos( size_t nOldPos, size_t nNewPos ); + + SVX_DLLPUBLIC const OUString& GetName() const; + const OUString& GetRealName() const; + + const String& GetDestDir() const { return m_aDestDir; } + void SetDestDir(const String& rDestDir) { m_aDestDir = rDestDir; } + + const INetURLObject& GetThmURL() const; + SVX_DLLPUBLIC const INetURLObject& GetSdgURL() const; + const INetURLObject& GetSdvURL() const; + + SVX_DLLPUBLIC sal_uInt32 GetId() const; + void SetId( sal_uInt32 nNewId, sal_Bool bResetThemeName ); + + void SetDragging( sal_Bool bSet ) { bDragging = bSet; } + sal_Bool IsDragging() const { return bDragging; } + + void LockTheme() { ++mnThemeLockCount; } + sal_Bool UnlockTheme(); + + void LockBroadcaster() { mnBroadcasterLockCount++; } + SVX_DLLPUBLIC void UnlockBroadcaster( sal_uIntPtr nUpdatePos = 0 ); + sal_Bool IsBroadcasterLocked() const { return mnBroadcasterLockCount > 0; } + + void SetDragPos( sal_uIntPtr nPos ) { nDragPos = nPos; } + sal_uIntPtr GetDragPos() const { return nDragPos; } + + sal_Bool IsThemeNameFromResource() const; + + SVX_DLLPUBLIC sal_Bool IsReadOnly() const; + SVX_DLLPUBLIC sal_Bool IsDefault() const; + sal_Bool IsModified() const; + + SVX_DLLPUBLIC void Actualize( const Link& rActualizeLink, GalleryProgress* pProgress = NULL ); + void AbortActualize() { bAbortActualize = sal_True; } + + Gallery* GetParent() const { return pParent; } + SotStorageRef GetSvDrawStorage() const { return aSvDrawStorageRef; } + +public: + + SgaObjKind GetObjectKind( sal_uIntPtr nPos ) const + { + DBG_ASSERT( nPos < GetObjectCount(), "Position out of range" ); + return ImplGetGalleryObject( nPos )->eObjKind; + } + + + const INetURLObject& GetObjectURL( sal_uIntPtr nPos ) const + { + DBG_ASSERT( nPos < GetObjectCount(), "Position out of range" ); + return ImplGetGalleryObject( nPos )->aURL; + } + + sal_Bool GetThumb( sal_uIntPtr nPos, Bitmap& rBmp, sal_Bool bProgress = sal_False ); + + SVX_DLLPUBLIC sal_Bool GetGraphic( sal_uIntPtr nPos, Graphic& rGraphic, sal_Bool bProgress = sal_False ); + SVX_DLLPUBLIC sal_Bool InsertGraphic( const Graphic& rGraphic, sal_uIntPtr nInsertPos = LIST_APPEND ); + + SVX_DLLPUBLIC sal_Bool GetModel( sal_uIntPtr nPos, SdrModel& rModel, sal_Bool bProgress = sal_False ); + SVX_DLLPUBLIC sal_Bool InsertModel( const FmFormModel& rModel, sal_uIntPtr nInsertPos = LIST_APPEND ); + + sal_Bool GetModelStream( sal_uIntPtr nPos, SotStorageStreamRef& rModelStreamRef, sal_Bool bProgress = sal_False ); + sal_Bool InsertModelStream( const SotStorageStreamRef& rModelStream, sal_uIntPtr nInsertPos = LIST_APPEND ); + + sal_Bool GetURL( sal_uIntPtr nPos, INetURLObject& rURL, sal_Bool bProgress = sal_False ); + SVX_DLLPUBLIC sal_Bool InsertURL( const INetURLObject& rURL, sal_uIntPtr nInsertPos = LIST_APPEND ); + sal_Bool InsertFileOrDirURL( const INetURLObject& rFileOrDirURL, sal_uIntPtr nInsertPos = LIST_APPEND ); + + sal_Bool InsertTransferable( const ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable >& rxTransferable, sal_uIntPtr nInsertPos ); + + void CopyToClipboard( Window* pWindow, sal_uIntPtr nPos ); + void StartDrag( Window* pWindow, sal_uIntPtr nPos ); + +public: + + SvStream& WriteData( SvStream& rOut ) const; + SvStream& ReadData( SvStream& rIn ); + static SVX_DLLPUBLIC void InsertAllThemes( ListBox& rListBox ); +}; + +SvStream& operator<<( SvStream& rOut, const GalleryTheme& rTheme ); +SvStream& operator>>( SvStream& rIn, GalleryTheme& rTheme ); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/globl3d.hxx b/include/svx/globl3d.hxx new file mode 100644 index 000000000000..d5d495153a7b --- /dev/null +++ b/include/svx/globl3d.hxx @@ -0,0 +1,42 @@ +/* -*- 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 _E3D_GLOBL3D_HXX +#define _E3D_GLOBL3D_HXX + +#include <tools/solar.h> + +const sal_uInt32 E3dInventor = sal_uInt32('E')*0x00000001+ + sal_uInt32('3')*0x00000100+ + sal_uInt32('D')*0x00010000+ + sal_uInt32('1')*0x01000000; + +const sal_uInt16 E3D_SCENE_ID = 1; +const sal_uInt16 E3D_POLYSCENE_ID = 2; +const sal_uInt16 E3D_OBJECT_ID = 3; // should not be used, it's only a helper class for E3DScene and E3DCompoundObject +const sal_uInt16 E3D_CUBEOBJ_ID = 4; +const sal_uInt16 E3D_SPHEREOBJ_ID = 5; +const sal_uInt16 E3D_EXTRUDEOBJ_ID = 6; +const sal_uInt16 E3D_LATHEOBJ_ID = 7; +const sal_uInt16 E3D_COMPOUNDOBJ_ID = 8; +const sal_uInt16 E3D_POLYGONOBJ_ID = 9; + +#endif // _E3D_GLOBL3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/grafctrl.hxx b/include/svx/grafctrl.hxx new file mode 100644 index 000000000000..10b050990d62 --- /dev/null +++ b/include/svx/grafctrl.hxx @@ -0,0 +1,183 @@ +/* -*- 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 _SVX_GRAFCTRL_HXX +#define _SVX_GRAFCTRL_HXX + +#include <svl/lstner.hxx> +#include <svl/intitem.hxx> +#include <sfx2/tbxctrl.hxx> +#include "svx/svxdllapi.h" + +// ---------------- +// - TbxImageItem - +// ---------------- + +class SVX_DLLPUBLIC TbxImageItem : public SfxUInt16Item +{ +public: + TYPEINFO(); + TbxImageItem( sal_uInt16 nWhich = 0, sal_uInt16 nImage = 0 ); + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const; + virtual int operator==( const SfxPoolItem& ) const; +}; + +// ------------------------------- +// - SvxGrafFilterToolBoxControl - +// ------------------------------- + +class SVX_DLLPUBLIC SvxGrafFilterToolBoxControl : public SfxToolBoxControl +{ +public: + + SFX_DECL_TOOLBOX_CONTROL(); + + SvxGrafFilterToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxGrafFilterToolBoxControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); +}; + +// ------------------------- +// - SvxGrafToolBoxControl - +// ------------------------- + +class SvxGrafToolBoxControl : public SfxToolBoxControl +{ +public: + SvxGrafToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxGrafToolBoxControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + virtual Window* CreateItemWindow( Window *pParent ); +}; + +// ---------------------------- +// - SvxGrafRedToolBoxControl - +// ---------------------------- + +class SVX_DLLPUBLIC SvxGrafRedToolBoxControl : public SvxGrafToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxGrafRedToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); +}; + +// ------------------------------ +// - SvxGrafGreenToolBoxControl - +// ------------------------------ + +class SVX_DLLPUBLIC SvxGrafGreenToolBoxControl : public SvxGrafToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxGrafGreenToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); +}; + +// ----------------------------- +// - SvxGrafBlueToolBoxControl - +// ----------------------------- + +class SVX_DLLPUBLIC SvxGrafBlueToolBoxControl : public SvxGrafToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxGrafBlueToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); +}; + +// ---------------------------------- +// - SvxGrafLuminanceToolBoxControl - +// ---------------------------------- + +class SVX_DLLPUBLIC SvxGrafLuminanceToolBoxControl : public SvxGrafToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxGrafLuminanceToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); +}; + +// --------------------------------- +// - SvxGrafContrastToolBoxControl - +// --------------------------------- + +class SVX_DLLPUBLIC SvxGrafContrastToolBoxControl : public SvxGrafToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxGrafContrastToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); +}; + +// ------------------------------ +// - SvxGrafGammaToolBoxControl - +// ------------------------------ + +class SVX_DLLPUBLIC SvxGrafGammaToolBoxControl : public SvxGrafToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxGrafGammaToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); +}; + +// ------------------------------------- +// - SvxGrafTransparenceToolBoxControl - +// ------------------------------------- + +class SVX_DLLPUBLIC SvxGrafTransparenceToolBoxControl : public SvxGrafToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxGrafTransparenceToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); +}; + +// ----------------------------- +// - SvxGrafModeToolBoxControl - +// ----------------------------- + +class SVX_DLLPUBLIC SvxGrafModeToolBoxControl : public SfxToolBoxControl, public SfxListener +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxGrafModeToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxGrafModeToolBoxControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + virtual Window* CreateItemWindow( Window *pParent ); +}; + +// --------------------- +// - SvxGrafAttrHelper - +// --------------------- + +class SdrView; +class SfxRequest; + +class SVX_DLLPUBLIC SvxGrafAttrHelper +{ +public: + + static void ExecuteGrafAttr( SfxRequest& rReq, SdrView& rView ); + static void GetGrafAttrState( SfxItemSet& rSet, SdrView& rView ); +}; + +#endif // _SVX_GRAFCTRL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/graphctl.hxx b/include/svx/graphctl.hxx new file mode 100644 index 000000000000..1d91aa3ddd7e --- /dev/null +++ b/include/svx/graphctl.hxx @@ -0,0 +1,160 @@ +/* -*- 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 _GRAPHCTL_HXX +#define _GRAPHCTL_HXX + +#include <vcl/ctrl.hxx> +#include <vcl/graph.hxx> +#include "svx/svxdllapi.h" + +#include <svx/svdview.hxx> +#include <svx/svdobj.hxx> + +class GraphCtrlUserCall; +class SvxGraphCtrlAccessibleContext; + +#define WB_SDRMODE ((WinBits)0x0080) +#define WB_ANIMATION ((WinBits)0x0100) + +class SVX_DLLPUBLIC GraphCtrl : public Control +{ + friend class GraphCtrlView; + friend class GraphCtrlUserCall; + + Graphic aGraphic; + Timer aUpdateTimer; + Link aMousePosLink; + Link aGraphSizeLink; + Link aMarkObjLink; + Link aUpdateLink; + MapMode aMap100; + Size aGraphSize; + Point aMousePos; + GraphCtrlUserCall* pUserCall; + WinBits nWinStyle; + SdrObjKind eObjKind; + sal_uInt16 nPolyEdit; + sal_Bool bEditMode; + sal_Bool bSdrMode; + sal_Bool bAnim; + + DECL_LINK( UpdateHdl, Timer* ); + + SvxGraphCtrlAccessibleContext* mpAccContext; + +protected: + + SdrModel* pModel; + SdrView* pView; + + virtual void Paint( const Rectangle& rRect ); + virtual void Resize(); + virtual void KeyInput(const KeyEvent& rKEvt); + virtual void MouseButtonDown(const MouseEvent& rMEvt); + virtual void MouseButtonUp(const MouseEvent& rMEvt); + virtual void MouseMove(const MouseEvent& rMEvt); + + virtual void InitSdrModel(); + + virtual void SdrObjCreated( const SdrObject& rObj ); + virtual void SdrObjChanged( const SdrObject& rObj ); + virtual void MarkListHasChanged(); + + SdrObjUserCall* GetSdrUserCall() { return (SdrObjUserCall*) pUserCall; } + +public: + + GraphCtrl( Window* pParent, const ResId& rResId ); + ~GraphCtrl(); + + void SetWinStyle( WinBits nWinBits ); + WinBits GetWinStyle() const { return nWinStyle; } + + void SetGraphic( const Graphic& rGraphic, sal_Bool bNewModel = sal_True ); + const Graphic& GetGraphic() const { return aGraphic; } + const Size& GetGraphicSize() const { return aGraphSize; } + + const Point& GetMousePos() const { return aMousePos; } + + void SetEditMode( const sal_Bool bEditMode ); + sal_Bool IsEditMode() const { return bEditMode; } + + void SetPolyEditMode( const sal_uInt16 nPolyEdit ); + sal_uInt16 GetPolyEditMode() const { return nPolyEdit; } + + void SetObjKind( const SdrObjKind eObjKind ); + SdrObjKind GetObjKind() const { return eObjKind; } + + SdrModel* GetSdrModel() const { return pModel; } + SdrView* GetSdrView() const { return pView; } + SdrObject* GetSelectedSdrObject() const; + sal_Bool IsChanged() const { return bSdrMode ? pModel->IsChanged() : sal_False; } + + void SetMousePosLink( const Link& rLink ) { aMousePosLink = rLink; } + const Link& GetMousePosLink() const { return aMousePosLink; } + + void SetGraphSizeLink( const Link& rLink ) { aGraphSizeLink = rLink; } + const Link& GetGraphSizeLink() const { return aGraphSizeLink; } + + void SetMarkObjLink( const Link& rLink ) { aMarkObjLink = rLink; } + const Link& GetMarkObjLink() const { return aMarkObjLink; } + + void SetUpdateLink( const Link& rLink ) { aUpdateLink = rLink; } + const Link& GetUpdateLink() const { return aUpdateLink; } + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible(); +}; + + +class GraphCtrlUserCall : public SdrObjUserCall +{ + GraphCtrl& rWin; + +public: + + GraphCtrlUserCall( GraphCtrl& rGraphWin ) : rWin( rGraphWin ) {}; + virtual ~GraphCtrlUserCall() {}; + + virtual void Changed( const SdrObject& rObj, SdrUserCallType eType, const Rectangle& rOldBoundRect ); +}; + +class GraphCtrlView : public SdrView +{ + GraphCtrl& rGraphCtrl; + +protected: + + virtual void MarkListHasChanged() + { + SdrView::MarkListHasChanged(); + rGraphCtrl.MarkListHasChanged(); + } + +public: + + GraphCtrlView( SdrModel* pModel, GraphCtrl* pWindow) : + SdrView ( pModel, pWindow ), + rGraphCtrl ( *pWindow ) {}; + + virtual ~GraphCtrlView() {}; +}; + +#endif // _GRAPHCTL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/graphichelper.hxx b/include/svx/graphichelper.hxx new file mode 100644 index 000000000000..650a300b6da6 --- /dev/null +++ b/include/svx/graphichelper.hxx @@ -0,0 +1,40 @@ +/* -*- 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 _GRAPHICHELPER_HXX +#define _GRAPHICHELPER_HXX + +#include <vcl/graph.hxx> +#include <svx/svxdllapi.h> + +#include <com/sun/star/drawing/XShape.hpp> + +class SVX_DLLPUBLIC GraphicHelper +{ + +public: + static void GetPreferedExtension( OUString& rExtension, const Graphic& rGraphic ); + static OUString ExportGraphic( const Graphic& rGraphic, const OUString& rGraphicName ); + static void SaveShapeAsGraphic( const com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape ); +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/grfcrop.hxx b/include/svx/grfcrop.hxx new file mode 100644 index 000000000000..06836b2827cd --- /dev/null +++ b/include/svx/grfcrop.hxx @@ -0,0 +1,74 @@ +/* -*- 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 _SVX_GRFCROP_HXX +#define _SVX_GRFCROP_HXX + +#include <svl/poolitem.hxx> +#include "svx/svxdllapi.h" + + +#define GRFCROP_VERSION_SWDEFAULT 0 +#define GRFCROP_VERSION_MOVETOSVX 1 + +class SVX_DLLPUBLIC SvxGrfCrop : public SfxPoolItem +{ + sal_Int32 nLeft, nRight, nTop, nBottom; +public: + SvxGrfCrop( sal_uInt16 ); + SvxGrfCrop( sal_Int32 nLeft, sal_Int32 nRight, + sal_Int32 nTop, sal_Int32 nBottom, + sal_uInt16 ); + virtual ~SvxGrfCrop(); + + // "pure virtual methods" from SfxPoolItem + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Create(SvStream &, sal_uInt16 nVer) const; + virtual SvStream& Store(SvStream &, sal_uInt16 nIVer) const; + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, + const IntlWrapper* pIntl = 0 ) 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 ); + + void SetLeft( sal_Int32 nVal ) { nLeft = nVal; } + void SetRight( sal_Int32 nVal ) { nRight = nVal; } + void SetTop( sal_Int32 nVal ) { nTop = nVal; } + void SetBottom( sal_Int32 nVal ) { nBottom = nVal; } + + sal_Int32 GetLeft() const { return nLeft; } + sal_Int32 GetRight() const { return nRight; } + sal_Int32 GetTop() const { return nTop; } + sal_Int32 GetBottom() const { return nBottom; } + + inline SvxGrfCrop& operator=( const SvxGrfCrop& rCrop ) + { + nLeft = rCrop.GetLeft(); nTop = rCrop.GetTop(); + nRight = rCrop.GetRight(); nBottom = rCrop.GetBottom(); + return *this; + } +}; + + +#endif // _GRFATR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/grfflt.hxx b/include/svx/grfflt.hxx new file mode 100644 index 000000000000..8557c121c648 --- /dev/null +++ b/include/svx/grfflt.hxx @@ -0,0 +1,61 @@ +/* -*- 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 _SVX_GRFFLT_HXX +#define _SVX_GRFFLT_HXX + +#include <vcl/fixed.hxx> +#include <vcl/field.hxx> +#include <vcl/button.hxx> +#include <vcl/timer.hxx> +#include <vcl/dialog.hxx> +#include <vcl/group.hxx> +#include <vcl/salbtype.hxx> +#include <svtools/grfmgr.hxx> +#include <svx/graphctl.hxx> +#include <svx/dlgctrl.hxx> +#include <svx/rectenum.hxx> +#include "svx/svxdllapi.h" + +// --------------- +// - Error codes - +// --------------- + +#define SVX_GRAPHICFILTER_ERRCODE_NONE 0x00000000 +#define SVX_GRAPHICFILTER_UNSUPPORTED_GRAPHICTYPE 0x00000001 +#define SVX_GRAPHICFILTER_UNSUPPORTED_SLOT 0x00000002 + +// -------------------- +// - SvxGraphicFilter - +// -------------------- + +class SfxRequest; +class SfxItemSet; + +class SVX_DLLPUBLIC SvxGraphicFilter +{ +public: + + static sal_uLong ExecuteGrfFilterSlot( SfxRequest& rReq, GraphicObject& rFilterObject ); + static void DisableGraphicFilterSlots( SfxItemSet& rSet ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/gridctrl.hxx b/include/svx/gridctrl.hxx new file mode 100644 index 000000000000..9a146353950d --- /dev/null +++ b/include/svx/gridctrl.hxx @@ -0,0 +1,606 @@ +/* -*- 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 _SVX_GRIDCTRL_HXX +#define _SVX_GRIDCTRL_HXX + +#include <com/sun/star/sdbc/XRowSet.hpp> +#include <com/sun/star/sdbc/XRowSetListener.hpp> +#include <com/sun/star/sdb/XRowsChangeListener.hpp> +#include <com/sun/star/beans/PropertyChangeEvent.hpp> +#include <com/sun/star/util/XNumberFormatter.hpp> +#include <com/sun/star/util/Date.hpp> +#include <com/sun/star/container/XIndexAccess.hpp> +#include <vcl/fixed.hxx> +#include <vcl/field.hxx> + +#include <vcl/button.hxx> +#include <tools/ref.hxx> +#include <svtools/editbrowsebox.hxx> +#include <osl/mutex.hxx> +#include <comphelper/propmultiplex.hxx> +#include <svtools/transfer.hxx> +#include "svx/svxdllapi.h" +#include <vector> + +class DbGridControl; +class CursorWrapper; + +sal_Bool CompareBookmark(const ::com::sun::star::uno::Any& aLeft, const ::com::sun::star::uno::Any& aRight); + +namespace svxform +{ + class DataColumn; +} +typedef ::std::vector< ::svxform::DataColumn* > DbDataColumns; + +enum GridRowStatus +{ + GRS_CLEAN, + GRS_MODIFIED, + GRS_DELETED, + GRS_INVALID +}; + +//================================================================== +// DbGridRow, description of rows +//================================================================== + +class DbGridRow : public SvRefBase +{ + ::com::sun::star::uno::Any m_aBookmark; // ::com::sun::star::text::Bookmark of the row, can be set + DbDataColumns m_aVariants; + GridRowStatus m_eStatus; + sal_Bool m_bIsNew; + // row is no longer valid + // is removed on the next positioning +public: + DbGridRow():m_eStatus(GRS_CLEAN), m_bIsNew(sal_True) { } + DbGridRow(CursorWrapper* pCur, sal_Bool bPaintCursor); + void SetState(CursorWrapper* pCur, sal_Bool bPaintCursor); + + ~DbGridRow(); + + sal_Bool HasField(sal_uInt32 nPos) const { return nPos < m_aVariants.size(); } + const ::svxform::DataColumn& GetField(sal_uInt32 nPos) const { return *m_aVariants[ nPos ]; } + + void SetStatus(GridRowStatus _eStat) { m_eStatus = _eStat; } + GridRowStatus GetStatus() const { return m_eStatus; } + void SetNew(sal_Bool _bNew) { m_bIsNew = _bNew; } + sal_Bool IsNew() const { return m_bIsNew; } + + const ::com::sun::star::uno::Any& GetBookmark() const { return m_aBookmark; } + + sal_Bool IsValid() const { return m_eStatus == GRS_CLEAN || m_eStatus == GRS_MODIFIED; } + sal_Bool IsModified() const { return m_eStatus == GRS_MODIFIED; } +}; + +SV_DECL_REF(DbGridRow) + +//================================================================== +// DbGridControl +//================================================================== +class DbGridColumn; +typedef ::std::vector< DbGridColumn* > DbGridColumns; + +//================================================================== +class FmGridListener +{ +public: + virtual void selectionChanged() = 0; + virtual void columnChanged() = 0; + +protected: + ~FmGridListener() {} +}; + +#define GRID_COLUMN_NOT_FOUND SAL_MAX_UINT16 + +//================================================================== +// InitWindowFacet, describing which aspect of a column's Window to (re-)initialize +//================================================================== +enum InitWindowFacet +{ + InitFont = 0x01, + InitForeground = 0x02, + InitBackground = 0x04, + InitWritingMode = 0x08, + InitAll = 0xFF +}; + +//================================================================== +class FmXGridSourcePropListener; +class DisposeListenerGridBridge; +typedef ::svt::EditBrowseBox DbGridControl_Base; +class SVX_DLLPUBLIC DbGridControl : public DbGridControl_Base +{ + friend class FmXGridSourcePropListener; + friend class GridFieldValueListener; + friend class DisposeListenerGridBridge; + +public: + //================================================================== + // NavigationBar + //================================================================== + class NavigationBar: public Control + { + class AbsolutePos : public NumericField + { + public: + AbsolutePos(Window* pParent, WinBits nStyle = 0); + + virtual void KeyInput(const KeyEvent& rEvt); + virtual void LoseFocus(); + }; + + friend class NavigationBar::AbsolutePos; + + // zusaetzliche Controls + FixedText m_aRecordText; + AbsolutePos m_aAbsolute; // absolute positioning + FixedText m_aRecordOf; + FixedText m_aRecordCount; + + ImageButton m_aFirstBtn; // ImageButton for 'go to the first record' + ImageButton m_aPrevBtn; // ImageButton for 'go to the previous record' + ImageButton m_aNextBtn; // ImageButton for 'go to the next record' + ImageButton m_aLastBtn; // ImageButton for 'go to the last record' + ImageButton m_aNewBtn; // ImageButton for 'go to a new record' + sal_uInt16 m_nDefaultWidth; + sal_Int32 m_nCurrentPos; + + sal_Bool m_bPositioning; // protect PositionDataSource against recursion + + public: + // StatusIds for Controls of the Bar + // important for invalidation + enum State + { + RECORD_TEXT = 1, + RECORD_ABSOLUTE, + RECORD_OF, + RECORD_COUNT, + RECORD_FIRST, + RECORD_NEXT, + RECORD_PREV, + RECORD_LAST, + RECORD_NEW + }; + + NavigationBar(Window* pParent, WinBits nStyle = 0); + + // Status methods for Controls + void InvalidateAll(sal_Int32 nCurrentPos = -1, sal_Bool bAll = sal_False); + void InvalidateState(sal_uInt16 nWhich) {SetState(nWhich);} + void SetState(sal_uInt16 nWhich); + sal_Bool GetState(sal_uInt16 nWhich) const; + sal_uInt16 GetDefaultWidth() const {return m_nDefaultWidth;} + + protected: + virtual void Resize(); + virtual void Paint(const Rectangle& rRect); + virtual void StateChanged( StateChangedType nType ); + + private: + DECL_LINK(OnClick, Button*); + sal_uInt16 ArrangeControls(); + + void PositionDataSource(sal_Int32 nRecord); + }; + + friend class DbGridControl::NavigationBar; + +public: + // these options are or'ed and indicate, which of the single + // features can be released, default is readonly which means 0 + enum Option + { + OPT_READONLY = 0x00, + OPT_INSERT = 0x01, + OPT_UPDATE = 0x02, + OPT_DELETE = 0x04 + }; + +private: + Font m_aDefaultFont; + Link m_aMasterStateProvider; + Link m_aMasterSlotExecutor; + + ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter > m_xFormatter; + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext; + + DbGridColumns m_aColumns; // Column description + NavigationBar m_aBar; + DbGridRowRef m_xDataRow; // Row which can be modified + // comes from the data cursor + DbGridRowRef m_xSeekRow, // Row to which the iterator can set + // comes from the data cursor + + m_xEmptyRow; // record set to insert + + sal_uInt32 m_nAsynAdjustEvent; + + // if we modify the row for the new record, we automatically insert a "new new row". + // But if somebody else inserts a new record into the data source, we have to do the same. + // For that reason we have to listen to some properties of our data source. + ::comphelper::OPropertyChangeMultiplexer* m_pDataSourcePropMultiplexer; + FmXGridSourcePropListener* m_pDataSourcePropListener; + ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XRowsChangeListener> + m_xRowSetListener; // get notification when rows were changed + + void* m_pFieldListeners; + // property listeners for field values + + DisposeListenerGridBridge* m_pCursorDisposeListener; + // need to know about the diposing of the seek cursor + // construct analogous to the data source proplistener/multiplexer above : + // DisposeListenerGridBridge is a bridge from FmXDisposeListener which I don't want to be derived from + + FmGridListener* m_pGridListener; + +protected: + CursorWrapper* m_pDataCursor; // Cursor for Updates + CursorWrapper* m_pSeekCursor; // Cursor for Seeking + +private: + // iteration variables + DbGridRowRef m_xCurrentRow; + DbGridRowRef m_xPaintRow; // Row to be displayed + sal_Int32 m_nSeekPos; // Position of the SeekCursor + sal_Int32 m_nTotalCount; // is set when the data cursor finished counting the + // records. Initial value is -1 + osl::Mutex m_aDestructionSafety; + osl::Mutex m_aAdjustSafety; + + com::sun::star::util::Date + m_aNullDate; // NullDate of the Numberformatter; + + BrowserMode m_nMode; + sal_Int32 m_nCurrentPos; // Current position; + sal_uInt32 m_nDeleteEvent; // EventId for asychronous deletion of rows + sal_uInt16 m_nOptions; // What is the able to do (Insert, Update, Delete) + // default readonly + sal_uInt16 m_nOptionMask; // the mask of options to be enabled in setDataSource + // (with respect to the data source capabilities) + // defaults to (insert | update | delete) + sal_uInt16 m_nLastColId; + long m_nLastRowId; + + sal_Bool m_bDesignMode : 1; // default = sal_False + sal_Bool m_bRecordCountFinal : 1; + sal_Bool m_bMultiSelection : 1; + sal_Bool m_bNavigationBar : 1; + + sal_Bool m_bSynchDisplay : 1; + sal_Bool m_bForceROController : 1; + sal_Bool m_bHandle : 1; + sal_Bool m_bFilterMode : 1; + sal_Bool m_bWantDestruction : 1; + sal_Bool m_bInAdjustDataSource : 1; + sal_Bool m_bPendingAdjustRows : 1; // if an async adjust is pending, is it for AdjustRows or AdjustDataSource ? + sal_Bool m_bHideScrollbars : 1; + +protected: + sal_Bool m_bUpdating : 1; // are any updates being executed right now? + +protected: + virtual sal_Bool SeekRow(long nRow); + virtual void VisibleRowsChanged( long nNewTopRow, sal_uInt16 nNumRows); + virtual void PaintStatusCell(OutputDevice& rDev, const Rectangle& rRect) const; + virtual void PaintCell(OutputDevice& rDev, const Rectangle& rRect, sal_uInt16 nColId) const; + virtual RowStatus GetRowStatus(long nRow) const; + virtual sal_Bool CursorMoving(long nNewRow, sal_uInt16 nNewCol); + virtual void CursorMoved(); + virtual void ArrangeControls(sal_uInt16& nX, sal_uInt16 nY); + virtual sal_uInt32 GetTotalCellWidth(long nRow, sal_uInt16 nColId); + virtual void Command(const CommandEvent& rEvt); + virtual long PreNotify(NotifyEvent& rEvt); + virtual void KeyInput(const KeyEvent& rEvt); + virtual void StateChanged( StateChangedType nType ); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + virtual void Select(); + + virtual ::svt::CellController* GetController(long nRow, sal_uInt16 nCol); + + virtual void CellModified(); + virtual sal_Bool SaveModified(); + virtual sal_Bool IsModified() const; + + virtual sal_uInt16 AppendColumn(const String& rName, sal_uInt16 nWidth = 0, sal_uInt16 nPos = HEADERBAR_APPEND, sal_uInt16 nId = (sal_uInt16)-1); + virtual void RemoveColumn(sal_uInt16 nId); + virtual DbGridColumn* CreateColumn(sal_uInt16 nId) const; + virtual void ColumnMoved(sal_uInt16 nId); + virtual sal_Bool SaveRow(); + virtual sal_Bool IsTabAllowed(sal_Bool bForward) const; + + /// hide a column + virtual void HideColumn(sal_uInt16 nId); + /// show a column + virtual void ShowColumn(sal_uInt16 nId); + + /** This is called before executing a context menu for a row. rMenu contains the initial entries + handled by this base class' method (which always has to be called). + Derived classes may alter the menu in any way and handle any additional entries in + PostExecuteColumnContextMenu. + All disabled entries will be removed before executing the menu, so be careful with separators + near entries you probably wish to disable ... + */ + virtual void PreExecuteRowContextMenu(sal_uInt16 nRow, PopupMenu& rMenu); + /** After executing the context menu for a row this method is called. + */ + virtual void PostExecuteRowContextMenu(sal_uInt16 nRow, const PopupMenu& rMenu, sal_uInt16 nExecutionResult); + + virtual void DataSourcePropertyChanged(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw(::com::sun::star::uno::RuntimeException); + + virtual void FieldValueChanged(sal_uInt16 _nId, const ::com::sun::star::beans::PropertyChangeEvent& _evt); + virtual void FieldListenerDisposing(sal_uInt16 _nId); + + virtual void disposing(sal_uInt16 _nId, const ::com::sun::star::lang::EventObject& _rEvt); + + // own overridables + /// called when the current row changed + virtual void onRowChange(); + /// called when the current column changed + virtual void onColumnChange(); + + // DragSourceHelper overridables + virtual void StartDrag( sal_Int8 nAction, const Point& rPosPixel ); + + void executeRowContextMenu( long _nRow, const Point& _rPreferredPos ); + +public: + DbGridControl( + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >, + Window* pParent, + WinBits nBits = WB_BORDER); + + virtual ~DbGridControl(); + + virtual void Init(); + virtual void InitColumnsByFields(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& xFields) = 0; + virtual void RemoveRows(); + + /** GetCellText returns the text at the given position + @param _nRow + the number of the row + @param _nColId + the ID of the column + @return + the text out of the cell + */ + virtual String GetCellText(long _nRow, sal_uInt16 _nColId) const; + + void RemoveRows(sal_Bool bNewCursor); + + void InvalidateStatus(); + + const ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatter >& getNumberFormatter() const {return m_xFormatter;} + + // the data source + // the options can restrict but not extend the update abilities + virtual void setDataSource(const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSet >& rCursor, + sal_uInt16 nOpts = OPT_INSERT | OPT_UPDATE | OPT_DELETE); + virtual void Dispatch(sal_uInt16 nId); + + CursorWrapper* getDataSource() const {return m_pDataCursor;} + const DbGridColumns& GetColumns() const {return m_aColumns;} + + void EnableHandle(sal_Bool bEnable); + sal_Bool HasHandle() const {return m_bHandle;} + void InsertHandleColumn(); + + // which position does the column with the id in the ::com::sun::star::sdbcx::View have, the handle column doesn't count + sal_uInt16 GetViewColumnPos( sal_uInt16 nId ) const { sal_uInt16 nPos = GetColumnPos(nId); return (nPos==BROWSER_INVALIDID) ? GRID_COLUMN_NOT_FOUND : nPos-1; } + + // which position does the column with the id in m_aColumns have, that means the ::com::sun::star::sdbcx::Container + // returned from the GetColumns (may be different from the position returned by GetViewColumnPos + // if there are hidden columns) + sal_uInt16 GetModelColumnPos( sal_uInt16 nId ) const; + + // the number of columns in the model + sal_uInt16 GetViewColCount() const { return ColCount() - 1; } + sal_uInt16 GetModelColCount() const { return (sal_uInt16)m_aColumns.size(); } + // reverse to GetViewColumnPos: Id of position, the first non-handle column has position 0 + sal_uInt16 GetColumnIdFromViewPos( sal_uInt16 nPos ) const { return GetColumnId(nPos + 1); } + sal_uInt16 GetColumnIdFromModelPos( sal_uInt16 nPos ) const; + + virtual void SetDesignMode(sal_Bool bMode); + sal_Bool IsDesignMode() const {return m_bDesignMode;} + sal_Bool IsOpen() const {return m_pSeekCursor != NULL;} + + virtual void SetFilterMode(sal_Bool bMode); + sal_Bool IsFilterMode() const {return m_bFilterMode;} + sal_Bool IsFilterRow(long nRow) const {return m_bFilterMode && nRow == 0;} + + void EnableNavigationBar(sal_Bool bEnable); + sal_Bool HasNavigationBar() const {return m_bNavigationBar;} + + sal_uInt16 GetOptions() const {return m_nOptions;} + NavigationBar& GetNavigationBar() {return m_aBar;} + sal_uInt16 SetOptions(sal_uInt16 nOpt); + // The new options are interpreted with respect to the current data source. If it is unable + // to update, to insert or to restore, the according options are ignored. If the grid isn't + // connected to a data source, all options except OPT_READONLY are ignored. + + const com::sun::star::util::Date& getNullDate() const {return m_aNullDate;} + + // positioning + void MoveToPosition(sal_uInt32 nPos); + void MoveToFirst(); + void MoveToNext(); + void MoveToPrev(); + void MoveToLast(); + void AppendNew(); + + // adjustment of the cursors in case the data cursor has been + // moved from the outside. + // the flag indicates if an adjustment of the row count should be + // done as well + void AdjustDataSource(sal_Bool bFull = sal_False); + void Undo(); + + virtual void BeginCursorAction(); + virtual void EndCursorAction(); + + // is the current line being updated + sal_Bool IsUpdating() const {return m_bUpdating;} + + virtual void RowRemoved( long nRow, long nNumRows = 1, sal_Bool bDoPaint = sal_True ); + virtual void RowInserted( long nRow, long nNumRows = 1, sal_Bool bDoPaint = sal_True, sal_Bool bKeepSelection = sal_False ); + virtual void RowModified( long nRow, sal_uInt16 nColId = USHRT_MAX ); + + void resetCurrentRow(); + + sal_Bool getDisplaySynchron() const { return m_bSynchDisplay; } + void setDisplaySynchron(sal_Bool bSync); + // when set to sal_False, the display is no longer in sync with the current cursor position + // (means that in AdjustDataSource we are jumping to a row not belonging to CursorPosition) + // when using this, you should know what you are doing, because for example entering data + // in a row in the display that is not in sync with the position of the cursor can be very critical + + const DbGridRowRef& GetCurrentRow() const {return m_xCurrentRow;} + + void SetStateProvider(const Link& rProvider) { m_aMasterStateProvider = rProvider; } + // if this link is set the given provider will be asked for the state of my items. + // the return values are interpreted as follows : + // <0 -> not specified (use default mechanism to determine the state) + // ==0 -> the item is disabled + // >0 -> the item is enabled + void SetSlotExecutor(const Link& rExecutor) { m_aMasterSlotExecutor = rExecutor; } + // analogous : if this link is set, all nav-bar slots will be routed through it when executed + // if the handler returns nonzero, no further handling of the slot occurs + + void EnablePermanentCursor(sal_Bool bEnable); + sal_Bool IsPermanentCursorEnabled() const; + + /** forces both scrollbars to be hidden + + For the horizontal srollbar, this is overruled by enabling the navigation bar: A navigation + bar <b>always</b> implies a horizontal scroll bar + @seealso EnableNavigationBar + */ + void ForceHideScrollbars( sal_Bool _bForce ); + + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > + getContext() const { return m_xContext; } + + /// returns <TRUE/> if the text of the given cell can be copied into the clipboard + sal_Bool canCopyCellText(sal_Int32 _nRow, sal_Int16 _nColId); + /// copies the text of the given cell into the clipboard + void copyCellText(sal_Int32 _nRow, sal_Int16 _nColId); + + // selectin listener handling + FmGridListener* getGridListener() const { return m_pGridListener; } + void setGridListener( FmGridListener* _pListener ) { m_pGridListener = _pListener; } + + // helper class to grant access to selected methods from within the DbCellControl class + struct GrantControlAccess + { + friend class DbCellControl; + friend class RowSetEventListener; + protected: + GrantControlAccess() { } + }; + + /// called when a controller needs to be re-initialized + void refreshController(sal_uInt16 _nColId, GrantControlAccess _aAccess); + + CursorWrapper* GetSeekCursor(GrantControlAccess /*_aAccess*/) const { return m_pSeekCursor; } + const DbGridRowRef& GetSeekRow(GrantControlAccess /*_aAccess*/) const { return m_xSeekRow; } + void SetSeekPos(sal_Int32 nPos,GrantControlAccess /*_aAccess*/) {m_nSeekPos = nPos;} + + /** + @return + The count of additional controls of the control area. + */ + virtual sal_Int32 GetAccessibleControlCount() const; + + /** Creates the accessible object of an additional control. + @param _nIndex + The 0-based index of the control. + @return + The XAccessible interface of the specified control. + */ + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible > + CreateAccessibleControl( sal_Int32 _nIndex ); + + // IAccessibleTableProvider + /** Creates the accessible object of a data table cell. + @param nRow The row index of the cell. + @param nColumnId The column ID of the cell. + @return The XAccessible interface of the specified cell. */ + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::accessibility::XAccessible > + CreateAccessibleCell( sal_Int32 nRow, sal_uInt16 nColumnId ); + +protected: + void RecalcRows(long nNewTopRow, sal_uInt16 nLinesOnScreen, sal_Bool bUpdateCursor); + sal_Bool SeekCursor(long nRow, sal_Bool bAbsolute = sal_False); + void RemoveColumns(); // cleaning of own structures + void AdjustRows(); + sal_Int32 AlignSeekCursor(); + sal_Bool SetCurrent(long nNewRow); + + String GetCurrentRowCellText(DbGridColumn* pCol,const DbGridRowRef& _rRow) const; + virtual void DeleteSelectedRows(); + sal_Bool IsValid(const DbGridRowRef& _xRow) const {return _xRow && _xRow->IsValid();} + + // row which is currently being appended + sal_Bool IsCurrentAppending() const; + + // empty row for insertion + sal_Bool IsInsertionRow(long nRow) const; + + void SetSeekPos(sal_Int32 nPos) {m_nSeekPos = nPos;} + sal_Int32 GetCurrentPos() const {return m_nCurrentPos;} + sal_Int32 GetSeekPos() const {return m_nSeekPos;} + sal_Int32 GetTotalCount() const {return m_nTotalCount;} + + const DbGridRowRef& GetEmptyRow() const { return m_xEmptyRow; } + const DbGridRowRef& GetSeekRow() const { return m_xSeekRow; } + const DbGridRowRef& GetPaintRow() const { return m_xPaintRow; } + CursorWrapper* GetSeekCursor() const { return m_pSeekCursor; } + + + void ConnectToFields(); + void DisconnectFromFields(); + + void implAdjustInSolarThread(sal_Bool _bRows); + // calls AdjustRows or AdjustDataSource, synchron if the caller is running in the solar thread, else asynchron + +protected: + virtual void InitController(::svt::CellControllerRef& rController, long nRow, sal_uInt16 nCol); + void Construct(); + void ImplInitWindow( const InitWindowFacet _eInitWhat ); + DECL_LINK(OnDelete, void*); + + DECL_LINK(OnAsyncAdjust, void*); + // if the param is != NULL, AdjustRows will be called, else AdjustDataSource + +private: + using BrowseBox::InsertHandleColumn; +}; + + +SV_IMPL_REF(DbGridRow); + + +#endif // _SVX_GRIDCTRL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/hdft.hxx b/include/svx/hdft.hxx new file mode 100644 index 000000000000..bb1d2f507d3d --- /dev/null +++ b/include/svx/hdft.hxx @@ -0,0 +1,127 @@ +/* -*- 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 _SVX_HDFT_HXX +#define _SVX_HDFT_HXX + +#include <sfx2/tabdlg.hxx> + +#include <vcl/fixed.hxx> + +#include <vcl/field.hxx> + +#include <vcl/group.hxx> +#include <svx/pagectrl.hxx> +#include "svx/svxdllapi.h" + +namespace svx +{ + SVX_DLLPUBLIC bool ShowBorderBackgroundDlg( Window* pParent, SfxItemSet* pBBSet, + bool bEnableBackgroundSelector ); +} + +// class SvxHFPage ------------------------------------------------------ + +class SVX_DLLPUBLIC SvxHFPage: public SfxTabPage +{ + using TabPage::ActivatePage; + using TabPage::DeactivatePage; + +public: + + virtual sal_Bool FillItemSet( SfxItemSet& rOutSet ); + virtual void Reset( const SfxItemSet& rSet ); + + virtual ~SvxHFPage(); + + void DisableDeleteQueryBox() { bDisableQueryBox = sal_True; } + void EnableBackgroundSelector( sal_Bool bNew ) { bEnableBackgroundSelector = bNew; } + void EnableDynamicSpacing(); + +protected: + virtual void ActivatePage( const SfxItemSet& rSet ); + virtual int DeactivatePage( SfxItemSet* pSet = 0 ); + + SvxHFPage( Window* pParent, const SfxItemSet& rSet, sal_uInt16 nSetId ); + + FixedText* m_pPageLbl; + CheckBox* m_pTurnOnBox; + CheckBox* m_pCntSharedBox; + CheckBox* m_pCntSharedFirstBox; + FixedText* m_pLMLbl; + MetricField* m_pLMEdit; + FixedText* m_pRMLbl; + MetricField* m_pRMEdit; + FixedText* m_pDistFT; + MetricField* m_pDistEdit; + CheckBox* m_pDynSpacingCB; + FixedText* m_pHeightFT; + MetricField* m_pHeightEdit; + CheckBox* m_pHeightDynBtn; + SvxPageWindow* m_pBspWin; + PushButton* m_pBackgroundBtn; + + sal_uInt16 nId; + SfxItemSet* pBBSet; + sal_Bool bDisableQueryBox; + sal_Bool bEnableBackgroundSelector; + bool bInReset; + + void InitHandler(); + DECL_LINK( TurnOnHdl, CheckBox*); + DECL_LINK(DistModify, void *); + DECL_LINK(HeightModify, void *); + DECL_LINK(BorderModify, void *); + DECL_LINK(BackgroundHdl, void *); + + void UpdateExample(); + DECL_LINK(RangeHdl, void *); + +private: +#ifdef _SVX_HDFT_CXX + SVX_DLLPRIVATE void ResetBackground_Impl( const SfxItemSet& rSet ); +#endif +}; + +// class SvxHeaderPage --------------------------------------------------- + +class SVX_DLLPUBLIC SvxHeaderPage : public SvxHFPage +{ +public: + static SfxTabPage* Create( Window* pParent, const SfxItemSet& rSet ); + static sal_uInt16* GetRanges(); + +private: + SvxHeaderPage( Window* pParent, const SfxItemSet& rSet ); +}; + +// class SvxFooterPage --------------------------------------------------- + +class SVX_DLLPUBLIC SvxFooterPage : public SvxHFPage +{ +public: + static SfxTabPage* Create( Window* pParent, const SfxItemSet& rSet ); + static sal_uInt16* GetRanges(); + +private: + SVX_DLLPRIVATE SvxFooterPage( Window* pParent, const SfxItemSet& rSet ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/helperhittest3d.hxx b/include/svx/helperhittest3d.hxx new file mode 100644 index 000000000000..1c9ecd417732 --- /dev/null +++ b/include/svx/helperhittest3d.hxx @@ -0,0 +1,102 @@ +/* -*- 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 INCLUDED_SVX_HELPERHITTEST_HXX +#define INCLUDED_SVX_HELPERHITTEST_HXX + +#include "svx/svxdllapi.h" +#include <sal/types.h> +#include <vector> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +namespace basegfx { + class B2DPoint; +} + +namespace drawinglayer { namespace geometry { + class ViewInformation3D; +}} + +class E3dCompoundObject; +class E3dScene; + +////////////////////////////////////////////////////////////////////////////// + +/** support for getting a ViewInformation3D for a given CompoudObject3D + with correct ObjectTransformation filled out + + @param o_rViewInformation3D + The ViewInformation3D created which will be overwritten + + @param rCandidate + The E3dCompoundObject for which the ViewInformation3D shall be + prepared + + @return + A pointer to the found and used root scene. This is also a hint + if the operation succeeded or not, since when object has no root + scene (is not inserted to a model), an empty ViewInformation3D + will be used +*/ +E3dScene* fillViewInformation3DForCompoundObject( + drawinglayer::geometry::ViewInformation3D& o_rViewInformation3D, + const E3dCompoundObject& rCandidate); + +/** support for getting all from a 2d position hit objects in a 3d scene + in a depth sorted array + + @param rPoint + 2D Point in view coordinates + + @param rScene + The 3D Scene for HitTest + + @param o_rResult + Output parameter which contains all hit 3D objects inside rScene. This + vector will be changed in any case. If it's empty, no hit exists. If it's + not empty, the first object is the object closest to the viewer + +*/ +SVX_DLLPUBLIC void getAllHit3DObjectsSortedFrontToBack( + const basegfx::B2DPoint& rPoint, + const E3dScene& rScene, + ::std::vector< const E3dCompoundObject* >& o_rResult); + +/** support for checking if the single given 3d object is hit at position + + @param rPoint + 2D Point in view coordinates + + @param rCandidate + The 3D Object which needs checking + + @return + true if hit, false if not +*/ +bool checkHitSingle3DObject( + const basegfx::B2DPoint& rPoint, + const E3dCompoundObject& rCandidate); + +////////////////////////////////////////////////////////////////////////////// + +#endif // INCLUDED_SVX_HELPERHITTEST_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/hlnkitem.hxx b/include/svx/hlnkitem.hxx new file mode 100644 index 000000000000..d1bdcfe5aa71 --- /dev/null +++ b/include/svx/hlnkitem.hxx @@ -0,0 +1,103 @@ +/* -*- 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 _SVX_HLNKITEM_HXX +#define _SVX_HLNKITEM_HXX + +#include <tools/string.hxx> +#include <svl/poolitem.hxx> +#include <sfx2/sfxsids.hrc> +#include <svl/macitem.hxx> +#include "svx/svxdllapi.h" + +#define HYPERDLG_EVENT_MOUSEOVER_OBJECT 0x0001 +#define HYPERDLG_EVENT_MOUSECLICK_OBJECT 0x0002 +#define HYPERDLG_EVENT_MOUSEOUT_OBJECT 0x0004 + +enum SvxLinkInsertMode +{ + HLINK_DEFAULT, + HLINK_FIELD, + HLINK_BUTTON, + HLINK_HTMLMODE = 0x0080 +}; + +class SVX_DLLPUBLIC SvxHyperlinkItem : public SfxPoolItem +{ + String sName; + String sURL; + String sTarget; + SvxLinkInsertMode eType; + + String sIntName; + SvxMacroTableDtor* pMacroTable; + + sal_uInt16 nMacroEvents; + +public: + TYPEINFO(); + + SvxHyperlinkItem( sal_uInt16 _nWhich = SID_HYPERLINK_GETLINK ): + SfxPoolItem(_nWhich), pMacroTable(NULL) { eType = HLINK_DEFAULT; nMacroEvents=0; }; + SvxHyperlinkItem( const SvxHyperlinkItem& rHyperlinkItem ); + SvxHyperlinkItem( sal_uInt16 nWhich, String& rName, String& rURL, + String& rTarget, String& rIntName, + SvxLinkInsertMode eTyp = HLINK_FIELD, + sal_uInt16 nEvents = 0, + SvxMacroTableDtor *pMacroTbl =NULL ); + virtual ~SvxHyperlinkItem () { delete pMacroTable; } + + inline SvxHyperlinkItem& operator=( const SvxHyperlinkItem &rItem ); + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) 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 ); + + const String& GetName() const { return sName; } + void SetName(const String& rName) { sName = rName; } + + const String& GetURL() const { return sURL; } + void SetURL(const String& rURL) { sURL = rURL; } + + const String& GetIntName () const { return sIntName; } + void SetIntName(const String& rIntName) { sIntName = rIntName; } + + const String& GetTargetFrame() const { return sTarget; } + void SetTargetFrame(const String& rTarget) { sTarget = rTarget; } + + SvxLinkInsertMode GetInsertMode() const { return eType; } + void SetInsertMode( SvxLinkInsertMode eNew ) { eType = eNew; } + + void SetMacro( sal_uInt16 nEvent, const SvxMacro& rMacro ); + + void SetMacroTable( const SvxMacroTableDtor& rTbl ); + const SvxMacroTableDtor* GetMacroTbl() const { return pMacroTable; } + + void SetMacroEvents (const sal_uInt16 nEvents) { nMacroEvents = nEvents; } + sal_uInt16 GetMacroEvents() const { return nMacroEvents; } + + virtual SvStream& Store( SvStream &, sal_uInt16 nItemVersion ) const; + virtual SfxPoolItem* Create( SvStream &, sal_uInt16 nVer ) const; + +}; + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/hyperdlg.hxx b/include/svx/hyperdlg.hxx new file mode 100644 index 000000000000..b7215ce1b732 --- /dev/null +++ b/include/svx/hyperdlg.hxx @@ -0,0 +1,49 @@ +/* -*- 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 _SVX_TAB_HYPERLINK_HXX +#define _SVX_TAB_HYPERLINK_HXX + +#include <sfx2/childwin.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* Hyperlink-Dialog +|* +\************************************************************************/ + +class AbstractSvxHpLinkDlg; + +class SVX_DLLPUBLIC SvxHlinkDlgWrapper : public SfxChildWindow +{ +private: + AbstractSvxHpLinkDlg* mpDlg; + +public: + SvxHlinkDlgWrapper( Window*pParent, sal_uInt16 nId, + SfxBindings* pBindings, SfxChildWinInfo* pInfo ); + + SFX_DECL_CHILDWINDOW_WITHID(SvxHlinkDlgWrapper); + virtual sal_Bool QueryClose(); +}; + +#endif // _SVX_TAB_HYPERLINK_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/ifaceids.hxx b/include/svx/ifaceids.hxx new file mode 100644 index 000000000000..20ab313de5e1 --- /dev/null +++ b/include/svx/ifaceids.hxx @@ -0,0 +1,38 @@ +/* -*- 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 _SVX_IFACEIDS_HXX +#define _SVX_IFACEIDS_HXX + +// ----------------------------------------------------------------------- + +#include <sfx2/shell.hxx> + +#define SVX_INTERFACE_BASIDE_DOCSH (SFX_INTERFACE_IDE_START+ 0) +#define SVX_INTERFACE_BASIDE_VIEWSH (SFX_INTERFACE_IDE_START+ 1) +#define SVX_INTERFACE_EXTRUSION_BAR (SFX_INTERFACE_IDE_START+ 2) +#define SVX_INTERFACE_FONTWORK_BAR (SFX_INTERFACE_IDE_START+ 3) + +#define HID_INTERFACE_BASIDE_VIEWSH SVX_INTERFACE_BASIDE_VIEWSH + +#define SVX_INTERFACE_FORM_SH (SFX_INTERFACE_IDE_END+ 1) + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/imapdlg.hxx b/include/svx/imapdlg.hxx new file mode 100644 index 000000000000..9afd8b01a6fa --- /dev/null +++ b/include/svx/imapdlg.hxx @@ -0,0 +1,180 @@ +/* -*- 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 _IMAPDLG_HXX_ +#define _IMAPDLG_HXX_ + +#include <svtools/inettbc.hxx> +#include <sfx2/childwin.hxx> +#include <sfx2/ctrlitem.hxx> +#include <sfx2/basedlgs.hxx> + +#include <vcl/fixed.hxx> + +#include <vcl/combobox.hxx> + +#include <vcl/edit.hxx> + +#include <vcl/toolbox.hxx> + +#include <vcl/status.hxx> +#include "svx/svxdllapi.h" +#include <vector> + + +#ifndef _GOMISC_HXX +class ImageMap; +#endif + + +/************************************************************************* +|* +|* Derivation from SfxChildWindow as "container" for float +|* +\************************************************************************/ + +class Graphic; +typedef ::std::vector< String* > TargetList; + +class SVX_DLLPUBLIC SvxIMapDlgChildWindow : public SfxChildWindow +{ + public: + + SvxIMapDlgChildWindow( Window*, sal_uInt16, SfxBindings*, SfxChildWinInfo* ); + + SFX_DECL_CHILDWINDOW_WITHID( SvxIMapDlgChildWindow ); + + static void UpdateIMapDlg( const Graphic& rGraphic, const ImageMap* pImageMap = NULL, + const TargetList* pTargetList = NULL, void* pEditingObj = NULL ); +}; + + +#ifndef _REDUCED_IMAPDLG_HXX_ +#define _REDUCED_IMAPDLG_HXX_ + +class SvxIMapDlg; + +class SvxIMapDlgItem : public SfxControllerItem +{ + SvxIMapDlg& rIMap; + + +protected: + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + + +public: + + SvxIMapDlgItem( sal_uInt16 nId, SvxIMapDlg& rIMapDlg, SfxBindings& rBindings ); +}; + +class IMapOwnData; +class IMapWindow; + +class SVX_DLLPUBLIC SvxIMapDlg : public SfxModelessDialog // SfxFloatingWindow +{ + friend class IMapOwnData; + friend class IMapWindow; + using Window::Update; + + ToolBox aTbxIMapDlg1; + FixedText aFtURL; + SvtURLBox maURLBox; + FixedText aFtText; + Edit aEdtText; + FixedText maFtTarget; + ComboBox maCbbTarget; + StatusBar aStbStatus; + ImageList maImageList; + + Size aLastSize; + IMapWindow* pIMapWnd; + IMapOwnData* pOwnData; + void* pCheckObj; + SvxIMapDlgItem aIMapItem; + + virtual void Resize(); + virtual sal_Bool Close(); + +#ifdef _IMAPDLG_PRIVATE + + DECL_LINK( TbxClickHdl, ToolBox* ); + DECL_LINK( InfoHdl, IMapWindow* ); + DECL_LINK( MousePosHdl, IMapWindow* ); + DECL_LINK( GraphSizeHdl, IMapWindow* ); + DECL_LINK( URLModifyHdl, void* ); + DECL_LINK( URLLoseFocusHdl, void* ); + DECL_LINK(UpdateHdl, void *); + DECL_LINK( TbxUpdateHdl, Timer* ); + DECL_LINK( StateHdl, IMapWindow* ); + DECL_LINK( MiscHdl, void* ); + + void DoOpen(); + sal_Bool DoSave(); + +#endif + + +public: + + SvxIMapDlg( SfxBindings *pBindings, SfxChildWindow *pCW, + Window* pParent, const ResId& rResId ); + ~SvxIMapDlg(); + + void SetExecState( sal_Bool bEnable ); + + void SetGraphic( const Graphic& rGraphic ); + + void SetEditingObject( void* pObj ) { pCheckObj = pObj; } + const void* GetEditingObject() const { return pCheckObj; } + + void SetImageMap( const ImageMap& rImageMap ); + const ImageMap& GetImageMap() const; + + void SetTargetList( const TargetList& rTargetList ); + + void Update( const Graphic& rGraphic, const ImageMap* pImageMap = NULL, + const TargetList* pTargetList = NULL, void* pEditingObj = NULL ); + + virtual void KeyInput( const KeyEvent& rKEvt ); + + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + void ApplyImageList(); +}; + + +/************************************************************************* +|* +|* Defines +|* +\************************************************************************/ + +#define SVXIMAPDLG() ( (SvxIMapDlg*) ( SfxViewFrame::Current()->GetChildWindow( \ + SvxIMapDlgChildWindow::GetChildWindowId() )-> \ + GetWindow() ) ) + + +#endif // _REDUCED_IMAPDLG_HXX_ +#endif // _IMAPDLG_HXX_ + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/insctrl.hxx b/include/svx/insctrl.hxx new file mode 100644 index 000000000000..9fbcd4e0e490 --- /dev/null +++ b/include/svx/insctrl.hxx @@ -0,0 +1,51 @@ +/* -*- 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 _SVX_INSCTRL_HXX +#define _SVX_INSCTRL_HXX + +#include <sfx2/stbitem.hxx> +#include "svx/svxdllapi.h" + +// class SvxInsertToolBoxControl ----------------------------------------- + +class SVX_DLLPUBLIC SvxInsertStatusBarControl : public SfxStatusBarControl +{ +public: + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual void Click(); + virtual void Paint( const UserDrawEvent& rEvt ); + + SFX_DECL_STATUSBAR_CONTROL(); + + SvxInsertStatusBarControl( sal_uInt16 nSlotId, sal_uInt16 nId, StatusBar& rStb ); + ~SvxInsertStatusBarControl(); + +private: + sal_Bool bInsert; + +#ifdef _SVX_INSCTRL_CXX + SVX_DLLPRIVATE void DrawItemText_Impl(); +#endif +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/ipolypolygoneditorcontroller.hxx b/include/svx/ipolypolygoneditorcontroller.hxx new file mode 100644 index 000000000000..870ebce0b922 --- /dev/null +++ b/include/svx/ipolypolygoneditorcontroller.hxx @@ -0,0 +1,72 @@ +/* -*- 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 _SDR_IPOLYPOLYGONEDITORCONTROLLER_HXX +#define _SDR_IPOLYPOLYGONEDITORCONTROLLER_HXX + +#include "svx/svxdllapi.h" +#include <svx/svdedtv.hxx> + +//************************************************************ +// Defines +//************************************************************ + +enum SdrPathSmoothKind {SDRPATHSMOOTH_DONTCARE, // only for status query + SDRPATHSMOOTH_ANGULAR, // angular + SDRPATHSMOOTH_ASYMMETRIC, // asymmetric, normal Smooth + SDRPATHSMOOTH_SYMMETRIC}; // symmetric + +enum SdrPathSegmentKind {SDRPATHSEGMENT_DONTCARE, // only for status query + SDRPATHSEGMENT_LINE, // straight path segment + SDRPATHSEGMENT_CURVE, // curve path segment (Bezier) + SDRPATHSEGMENT_TOGGLE}; // only for Set: Toggle + +enum SdrObjClosedKind {SDROBJCLOSED_DONTCARE, // only for status query + SDROBJCLOSED_OPEN, // non-closed object (line, polyline, ...) + SDROBJCLOSED_CLOSED, // closed object (polygon, ...) + SDROBJCLOSED_TOGGLE}; // only for Set: Toggle (not implemented yet) + +class IPolyPolygonEditorController +{ +public: + virtual void DeleteMarkedPoints() = 0; + virtual sal_Bool IsDeleteMarkedPointsPossible() const = 0; + + virtual void RipUpAtMarkedPoints() = 0; + virtual bool IsRipUpAtMarkedPointsPossible() const = 0; + + virtual sal_Bool IsSetMarkedSegmentsKindPossible() const = 0; + virtual SdrPathSegmentKind GetMarkedSegmentsKind() const = 0; + virtual void SetMarkedSegmentsKind(SdrPathSegmentKind eKind) = 0; + + virtual sal_Bool IsSetMarkedPointsSmoothPossible() const = 0; + virtual SdrPathSmoothKind GetMarkedPointsSmooth() const = 0; + virtual void SetMarkedPointsSmooth(SdrPathSmoothKind eKind) = 0; + + virtual void CloseMarkedObjects(sal_Bool bToggle, sal_Bool bOpen ) = 0; + virtual bool IsOpenCloseMarkedObjectsPossible() const = 0; + virtual SdrObjClosedKind GetMarkedObjectsClosedState() const = 0; + +protected: + ~IPolyPolygonEditorController() {} +}; + +#endif //_SDR_IPOLYPOLYGONEDITORCONTROLLER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/itemwin.hxx b/include/svx/itemwin.hxx new file mode 100644 index 000000000000..d2a1b25997e0 --- /dev/null +++ b/include/svx/itemwin.hxx @@ -0,0 +1,186 @@ +/* -*- 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 _SVX_ITEMWIN_HXX +#define _SVX_ITEMWIN_HXX + +#include <vcl/bitmap.hxx> + +#include <svx/dlgctrl.hxx> +#include "svx/svxdllapi.h" + +// forward --------------------------------------------------------------- + +class XLineColorItem; +class XLineWidthItem; +class SfxObjectShell; + +// class SvxLineBox ------------------------------------------------------ + +class SvxLineBox : public LineLB +{ + sal_uInt16 nCurPos; + Timer aDelayTimer; + Size aLogicalSize; + sal_Bool bRelease; + SfxObjectShell* mpSh; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > mxFrame; + +#ifdef _SVX_ITEMWIN_CXX + DECL_LINK(DelayHdl_Impl, void *); + + void ReleaseFocus_Impl(); +#endif +public: + SvxLineBox( Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, + WinBits nBits = WB_BORDER | WB_DROPDOWN | WB_AUTOHSCROLL ); + ~SvxLineBox(); + + void FillControl(); + +protected: + virtual void Select(); + virtual long PreNotify( NotifyEvent& rNEvt ); + virtual long Notify( NotifyEvent& rNEvt ); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + +}; + +// class SvxColorBox ----------------------------------------------------- + +class SvxColorBox : public ColorLB +{ + using Window::Update; + + sal_uInt16 nCurPos; + Timer aDelayTimer; + Size aLogicalSize; + sal_Bool bRelease; + OUString maCommand; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > mxFrame; + +#ifdef _SVX_ITEMWIN_CXX + void ReleaseFocus_Impl(); +#endif + +public: + SvxColorBox( Window* pParent, + const OUString& rCommand, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, + WinBits nBits = WB_BORDER | WB_DROPDOWN | WB_AUTOHSCROLL ); + ~SvxColorBox(); + + void Update( const XLineColorItem* pItem ); + +protected: + virtual void Select(); + virtual long PreNotify( NotifyEvent& rNEvt ); + virtual long Notify( NotifyEvent& rNEvt ); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + +}; + +// class SvxMetricField -------------------------------------------------- + +class SVX_DLLPUBLIC SvxMetricField : public MetricField +{ + using Window::Update; + + String aCurTxt; + SfxMapUnit ePoolUnit; + FieldUnit eDlgUnit; + Size aLogicalSize; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > mxFrame; + +#ifdef _SVX_ITEMWIN_CXX + void ReleaseFocus_Impl(); +#endif + +protected: + virtual void Modify(); + virtual void Down(); + virtual void Up(); // just to be sure + + virtual long PreNotify( NotifyEvent& rNEvt ); + virtual long Notify( NotifyEvent& rNEvt ); + virtual void DataChanged( const DataChangedEvent& rDCEvt ); + +public: + SvxMetricField( Window* pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, + WinBits nBits = WB_BORDER | WB_SPIN | WB_REPEAT ); + ~SvxMetricField(); + + void Update( const XLineWidthItem* pItem ); + void SetCoreUnit( SfxMapUnit eUnit ); + void RefreshDlgUnit(); +}; + +// class SvxFillTypeBox -------------------------------------------------- + +class SvxFillTypeBox : public FillTypeLB +{ +public: + SvxFillTypeBox( Window* pParent, WinBits nBits = WB_BORDER | WB_DROPDOWN | WB_AUTOHSCROLL ); + ~SvxFillTypeBox(); + + void Selected() { bSelect = sal_True; } + sal_Bool IsRelease() { return bRelease;} + +protected: + virtual long PreNotify( NotifyEvent& rNEvt ); + virtual long Notify( NotifyEvent& rNEvt ); + +private: + sal_uInt16 nCurPos; + sal_Bool bSelect; + sal_Bool bRelease; + +#ifdef _SVX_ITEMWIN_CXX + void ReleaseFocus_Impl(); +#endif +}; + +// class SvxFillAttrBox -------------------------------------------------- + +class SvxFillAttrBox : public FillAttrLB +{ +public: + SvxFillAttrBox( Window* pParent, WinBits nBits = WB_BORDER | WB_DROPDOWN | WB_AUTOHSCROLL ); + ~SvxFillAttrBox(); + + sal_Bool IsRelease() { return bRelease;} + +protected: + virtual long PreNotify( NotifyEvent& rNEvt ); + virtual long Notify( NotifyEvent& rNEvt ); + virtual void Select(); + +private: + sal_uInt16 nCurPos; + sal_Bool bRelease; + +#ifdef _SVX_ITEMWIN_CXX + void ReleaseFocus_Impl(); +#endif +}; + +#endif // #ifndef _SVX_ITEMWIN_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/itextprovider.hxx b/include/svx/itextprovider.hxx new file mode 100644 index 000000000000..3202e4d65495 --- /dev/null +++ b/include/svx/itextprovider.hxx @@ -0,0 +1,42 @@ +/* -*- 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/. + */ + +#if !defined SVX_ITEXTPROVIDER_HXX_INCLUDED +#define SVX_ITEXTPROVIDER_HXX_INCLUDED + +#include <sal/types.h> + +#include <svx/svxdllapi.h> + +class SdrText; + +namespace svx +{ + + /** This interface provides access to text object(s) in an SdrObject. + + */ + class SVX_DLLPUBLIC ITextProvider + { + public: + /** Return the number of texts available for this object. */ + virtual sal_Int32 getTextCount() const = 0; + + /** Return the nth available text. */ + virtual SdrText* getText(sal_Int32 nIndex) const = 0; + + protected: + ~ITextProvider() {} + }; + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/langbox.hxx b/include/svx/langbox.hxx new file mode 100644 index 000000000000..106af28ee913 --- /dev/null +++ b/include/svx/langbox.hxx @@ -0,0 +1,93 @@ +/* -*- 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 _SVX_LANGBOX_HXX +#define _SVX_LANGBOX_HXX + +#include <com/sun/star/uno/Sequence.hxx> +#include <vcl/lstbox.hxx> +#include "svx/svxdllapi.h" +#include <vcl/image.hxx> +#include <tools/solar.h> + +class SvtLanguageTable; + +#define LANG_LIST_EMPTY 0x0000 +#define LANG_LIST_ALL 0x0001 +#define LANG_LIST_WESTERN 0x0002 +#define LANG_LIST_CTL 0x0004 +#define LANG_LIST_CJK 0x0008 +#define LANG_LIST_FBD_CHARS 0x0010 +#define LANG_LIST_SPELL_AVAIL 0x0020 +#define LANG_LIST_HYPH_AVAIL 0x0040 +#define LANG_LIST_THES_AVAIL 0x0080 +#define LANG_LIST_ONLY_KNOWN 0x0100 // list only locales provided by I18N +#define LANG_LIST_SPELL_USED 0x0200 +#define LANG_LIST_HYPH_USED 0x0400 +#define LANG_LIST_THES_USED 0x0800 +#define LANG_LIST_ALSO_PRIMARY_ONLY 0x1000 // Do not exclude primary-only + // languages that do not form a + // locale, such as Arabic as + // opposed to Arabic-Egypt. + + +// load language strings from resource +SVX_DLLPUBLIC String GetDicInfoStr( const String& rName, const sal_uInt16 nLang, bool bNeg ); + +class SVX_DLLPUBLIC SvxLanguageBox : public ListBox +{ +public: + +private: + Image m_aNotCheckedImage; + Image m_aCheckedImage; + String m_aAllString; + com::sun::star::uno::Sequence< sal_Int16 > *m_pSpellUsedLang; + SvtLanguageTable* m_pLangTable; + sal_Int16 m_nLangList; + sal_Bool m_bHasLangNone; + sal_Bool m_bLangNoneIsLangAll; + sal_Bool m_bWithCheckmark; + + SVX_DLLPRIVATE void Init(); + SVX_DLLPRIVATE sal_uInt16 ImplInsertImgEntry( const String& rEntry, sal_uInt16 nPos, bool bChecked ); + SVX_DLLPRIVATE sal_uInt16 ImplInsertLanguage(LanguageType, sal_uInt16, sal_Int16 ); + +public: + SvxLanguageBox(Window* pParent, const ResId& rResId, sal_Bool bCheck = sal_False); + SvxLanguageBox(Window* pParent, WinBits nBits, sal_Bool bCheck = sal_False); + ~SvxLanguageBox(); + + void SetLanguageList( sal_Int16 nLangList, + sal_Bool bHasLangNone, sal_Bool bLangNoneIsLangAll = sal_False, + sal_Bool bCheckSpellAvail = sal_False ); + + sal_uInt16 InsertLanguage( const LanguageType eLangType, sal_uInt16 nPos = LISTBOX_APPEND ); + sal_uInt16 InsertDefaultLanguage( sal_Int16 nType, sal_uInt16 nPos = LISTBOX_APPEND ); + sal_uInt16 InsertSystemLanguage( sal_uInt16 nPos = LISTBOX_APPEND ); + sal_uInt16 InsertLanguage( const LanguageType eLangType, + sal_Bool bCheckEntry, sal_uInt16 nPos = LISTBOX_APPEND ); + void RemoveLanguage( const LanguageType eLangType ); + void SelectLanguage( const LanguageType eLangType, sal_Bool bSelect = sal_True ); + LanguageType GetSelectLanguage() const; + sal_Bool IsLanguageSelected( const LanguageType eLangType ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/lathe3d.hxx b/include/svx/lathe3d.hxx new file mode 100644 index 000000000000..c43c4265bb2c --- /dev/null +++ b/include/svx/lathe3d.hxx @@ -0,0 +1,114 @@ +/* -*- 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 _E3D_LATHE3D_HXX +#define _E3D_LATHE3D_HXX + +#include <svx/obj3d.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* Create a 3D rotation object from a passed 2D polygon +|* +|* The aPolyPoly3D is rotated around its axis in nHSegments steps. +|* nVSegments contains the number of lines of aPolyPoly3D and therefore +|* is effectively a vertical segmentation. +|* +\************************************************************************/ + +class SVX_DLLPUBLIC E3dLatheObj : public E3dCompoundObject +{ +private: + // Part codes for Wireframe generation: standard oder cover surface + enum { LATHE_PART_STD = 1, LATHE_PART_COVER = 2 }; + basegfx::B2DPolyPolygon maPolyPoly2D; + + protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + void SetDefaultAttributes(E3dDefaultAttributes& rDefault); + + public: + TYPEINFO(); + E3dLatheObj(E3dDefaultAttributes& rDefault, const basegfx::B2DPolyPolygon rPoly2D); + E3dLatheObj(); + + // HorizontalSegments: + sal_uInt32 GetHorizontalSegments() const + { return ((const Svx3DHorizontalSegmentsItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_HORZ_SEGS)).GetValue(); } + + // VerticalSegments: + sal_uInt32 GetVerticalSegments() const + { return ((const Svx3DVerticalSegmentsItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_VERT_SEGS)).GetValue(); } + + // PercentDiagonal: 0..100, before 0.0..0.5 + sal_uInt16 GetPercentDiagonal() const + { return ((const Svx3DPercentDiagonalItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_PERCENT_DIAGONAL)).GetValue(); } + + // BackScale: 0..100, before 0.0..1.0 + sal_uInt16 GetBackScale() const + { return ((const Svx3DBackscaleItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_BACKSCALE)).GetValue(); } + + // EndAngle: 0..10000 + sal_uInt32 GetEndAngle() const + { return ((const Svx3DEndAngleItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_END_ANGLE)).GetValue(); } + + // #107245# GetSmoothNormals() for bLatheSmoothed + sal_Bool GetSmoothNormals() const + { return ((const Svx3DSmoothNormalsItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_SMOOTH_NORMALS)).GetValue(); } + + // #107245# GetSmoothLids() for bLatheSmoothFrontBack + sal_Bool GetSmoothLids() const + { return ((const Svx3DSmoothLidsItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_SMOOTH_LIDS)).GetValue(); } + + // #107245# GetCharacterMode() for bLatheCharacterMode + sal_Bool GetCharacterMode() const + { return ((const Svx3DCharacterModeItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_CHARACTER_MODE)).GetValue(); } + + // #107245# GetCloseFront() for bLatheCloseFront + sal_Bool GetCloseFront() const + { return ((const Svx3DCloseFrontItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_CLOSE_FRONT)).GetValue(); } + + // #107245# GetCloseBack() for bLatheCloseBack + sal_Bool GetCloseBack() const + { return ((const Svx3DCloseBackItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_CLOSE_BACK)).GetValue(); } + + virtual sal_uInt16 GetObjIdentifier() const; + + virtual E3dLatheObj* Clone() const; + + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + + // TakeObjName...() is for the display in the UI, for example "3 frames selected". + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + // set/get local parameters with geometry recreation + void SetPolyPoly2D(const basegfx::B2DPolyPolygon& rNew); + const basegfx::B2DPolyPolygon& GetPolyPoly2D() { return maPolyPoly2D; } + + // break up + virtual bool IsBreakObjPossible(); + virtual SdrAttrObj* GetBreakObj(); +}; + +#endif // _E3D_LATHE3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/layctrl.hxx b/include/svx/layctrl.hxx new file mode 100644 index 000000000000..b32c2a514adc --- /dev/null +++ b/include/svx/layctrl.hxx @@ -0,0 +1,69 @@ +/* -*- 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 _SVX_LAYCTRL_HXX +#define _SVX_LAYCTRL_HXX + +#include <sfx2/tbxctrl.hxx> +#include "svx/svxdllapi.h" + +// class SvxTableToolBoxControl ------------------------------------------ + +class SVX_DLLPUBLIC SvxTableToolBoxControl : public SfxToolBoxControl +{ +private: + bool bEnabled; + +public: + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); + virtual SfxPopupWindow* CreatePopupWindowCascading(); + virtual void StateChanged( sal_uInt16 nSID, + SfxItemState eState, + const SfxPoolItem* pState ); + + SFX_DECL_TOOLBOX_CONTROL(); + + SvxTableToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxTableToolBoxControl(); +}; + +// class SvxColumnsToolBoxControl ---------------------------------------- + +class SVX_DLLPUBLIC SvxColumnsToolBoxControl : public SfxToolBoxControl +{ + bool bEnabled; +public: + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); + virtual SfxPopupWindow* CreatePopupWindowCascading(); + + SFX_DECL_TOOLBOX_CONTROL(); + + SvxColumnsToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxColumnsToolBoxControl(); + + virtual void StateChanged( sal_uInt16 nSID, + SfxItemState eState, + const SfxPoolItem* pState ); +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/lboxctrl.hxx b/include/svx/lboxctrl.hxx new file mode 100644 index 000000000000..2c449b0db745 --- /dev/null +++ b/include/svx/lboxctrl.hxx @@ -0,0 +1,77 @@ +/* -*- 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 _SVX_LBOXCTRL_HXX_ +#define _SVX_LBOXCTRL_HXX_ + +#include <sfx2/tbxctrl.hxx> +#include <rtl/ustring.hxx> +#include <vector> +#include "svx/svxdllapi.h" + +class ToolBox; +class SvxPopupWindowListBox; + +///////////////////////////////////////////////////////////////// + +class SvxListBoxControl : public SfxToolBoxControl +{ +protected: + String aActionStr; + SvxPopupWindowListBox * pPopupWin; + + void Impl_SetInfo( sal_uInt16 nCount ); + + DECL_LINK( PopupModeEndHdl, void * ); + DECL_LINK( SelectHdl, void * ); + +public: + SvxListBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + virtual ~SvxListBoxControl(); + + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); + virtual void StateChanged( sal_uInt16 nSID, + SfxItemState eState, + const SfxPoolItem* pState ); +}; + +///////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SvxUndoRedoControl : public SvxListBoxControl +{ + std::vector< OUString > aUndoRedoList; + OUString aDefaultText; + +public: + SFX_DECL_TOOLBOX_CONTROL(); + + SvxUndoRedoControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + + virtual ~SvxUndoRedoControl(); + virtual void StateChanged( sal_uInt16 nSID, + SfxItemState eState, + const SfxPoolItem* pState ); + + virtual SfxPopupWindow* CreatePopupWindow(); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/linectrl.hxx b/include/svx/linectrl.hxx new file mode 100644 index 000000000000..4d09d55183a4 --- /dev/null +++ b/include/svx/linectrl.hxx @@ -0,0 +1,168 @@ +/* -*- 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 _SVX_LINECTRL_HXX +#define _SVX_LINECTRL_HXX + + +#include <svtools/valueset.hxx> +#include <svl/lstner.hxx> +#include <sfx2/tbxctrl.hxx> +#include <svx/svxdllapi.h> +#include <svx/xtable.hxx> + +class XLineStyleItem; +class XLineDashItem; +class SvxLineBox; +class SvxMetricField; +class SvxColorBox; + +//======================================================================== +// SvxLineStyleController: +//======================================================================== + +class SVX_DLLPUBLIC SvxLineStyleToolBoxControl : public SfxToolBoxControl +{ +private: + XLineStyleItem* pStyleItem; + XLineDashItem* pDashItem; + + sal_Bool bUpdate; + +public: + SFX_DECL_TOOLBOX_CONTROL(); + + SvxLineStyleToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxLineStyleToolBoxControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + void Update( const SfxPoolItem* pState ); + virtual Window* CreateItemWindow( Window *pParent ); +}; + +//======================================================================== +// SvxLineWidthController: +//======================================================================== + +class SVX_DLLPUBLIC SvxLineWidthToolBoxControl : public SfxToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + + SvxLineWidthToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxLineWidthToolBoxControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual Window* CreateItemWindow( Window *pParent ); +}; + +//======================================================================== +// SvxLineColorController: +//======================================================================== + +class SVX_DLLPUBLIC SvxLineColorToolBoxControl : public SfxToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + + SvxLineColorToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxLineColorToolBoxControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + void Update( const SfxPoolItem* pState ); + virtual Window* CreateItemWindow( Window *pParent ); +}; + +//======================================================================== +// class SvxLineEndWindow +//======================================================================== +class SvxLineEndWindow : public SfxPopupWindow +{ + using FloatingWindow::StateChanged; + +private: + XLineEndListRef pLineEndList; + ValueSet aLineEndSet; + sal_uInt16 nCols; + sal_uInt16 nLines; + sal_uIntPtr nLineEndWidth; + Size aBmpSize; + sal_Bool bPopupMode; + bool mbInResize; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > mxFrame; + + + DECL_LINK( SelectHdl, void * ); + void FillValueSet(); + void SetSize(); + void implInit(); + +protected: + virtual void Resizing( Size& rSize ); + virtual void Resize(); + virtual sal_Bool Close(); + virtual void PopupModeEnd(); + + /** This function is called when the window gets the focus. It grabs + the focus to the line ends value set so that it can be controlled with + the keyboard. + */ + virtual void GetFocus (void); + +public: + SvxLineEndWindow( sal_uInt16 nId, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, + const String& rWndTitle ); + SvxLineEndWindow( sal_uInt16 nId, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rFrame, + Window* pParentWindow, + const String& rWndTitle ); + ~SvxLineEndWindow(); + + void StartSelection(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual SfxPopupWindow* Clone() const; +}; + +//======================================================================== +// class SvxLineEndToolBoxControl +//======================================================================== + +class SVX_DLLPUBLIC SvxLineEndToolBoxControl : public SfxToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxLineEndToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxLineEndToolBoxControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); +}; + + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/linkwarn.hxx b/include/svx/linkwarn.hxx new file mode 100644 index 000000000000..67d41adb6384 --- /dev/null +++ b/include/svx/linkwarn.hxx @@ -0,0 +1,47 @@ +/* -*- 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 _SFX_LINKWARN_HXX +#define _SFX_LINKWARN_HXX + +#include <vcl/button.hxx> +#include <vcl/fixed.hxx> +#include <sfx2/basedlgs.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC SvxLinkWarningDialog : public SfxModalDialog +{ +private: + FixedImage m_aQueryImage; + FixedText m_aInfoText; + OKButton m_aLinkGraphicBtn; + CancelButton m_aEmbedGraphicBtn; + FixedLine m_aOptionLine; + CheckBox m_aWarningOnBox; + + void InitSize(); + +public: + SvxLinkWarningDialog( Window* pParent, const String& _rFileName ); + virtual ~SvxLinkWarningDialog(); +}; + +#endif // #ifndef _SFX_LINKWARN_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/measctrl.hxx b/include/svx/measctrl.hxx new file mode 100644 index 000000000000..dfd1ff7202de --- /dev/null +++ b/include/svx/measctrl.hxx @@ -0,0 +1,59 @@ +/* -*- 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 _SVX_MEASCTRL_HXX +#define _SVX_MEASCTRL_HXX + +#include <vcl/ctrl.hxx> +#include "svx/svxdllapi.h" + + +class SfxItemSet; +class SdrMeasureObj; +class SdrModel; + +/************************************************************************* +|* +|* SvxXMeasurePreview +|* +\************************************************************************/ +class SVX_DLLPUBLIC SvxXMeasurePreview : public Control +{ + friend class SvxMeasurePage; + +private: + const SfxItemSet& rAttrs; + SdrMeasureObj* pMeasureObj; + SdrModel* pModel; + +public: + SvxXMeasurePreview( Window* pParent, const ResId& rResId, + const SfxItemSet& rInAttrs ); + ~SvxXMeasurePreview(); + + virtual void Paint( const Rectangle& rRect ); + virtual void MouseButtonDown( const MouseEvent& rMEvt ); + + void SetAttributes( const SfxItemSet& rInAttrs ); + + virtual void DataChanged( const DataChangedEvent& rDCEvt ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/modctrl.hxx b/include/svx/modctrl.hxx new file mode 100644 index 000000000000..89ea37eefef3 --- /dev/null +++ b/include/svx/modctrl.hxx @@ -0,0 +1,59 @@ +/* -*- 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 _SVX_MODCTRL_HXX +#define _SVX_MODCTRL_HXX + +#include <tools/link.hxx> +#include <sfx2/stbitem.hxx> +#include "svx/svxdllapi.h" + +#include <boost/shared_ptr.hpp> + +// Forward declarations +class Timer; + +// class SvxModifyControl ------------------------------------------------ + +class SVX_DLLPUBLIC SvxModifyControl : public SfxStatusBarControl +{ +public: + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual void Paint( const UserDrawEvent& rUsrEvt ); + virtual void DoubleClick(); + + SFX_DECL_STATUSBAR_CONTROL(); + + SvxModifyControl( sal_uInt16 nSlotId, sal_uInt16 nId, StatusBar& rStb ); + +private: // Links + DECL_LINK( OnTimer, Timer * ); + +private: // Functions + void _repaint(); + +private: + struct ImplData; + ::boost::shared_ptr<ImplData> mpImpl; +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/msdffdef.hxx b/include/svx/msdffdef.hxx new file mode 100644 index 000000000000..3ff5a3dbebe8 --- /dev/null +++ b/include/svx/msdffdef.hxx @@ -0,0 +1,1184 @@ +/* -*- 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 _MSDFFDEF_HXX +#define _MSDFFDEF_HXX + +#include <sal/types.h> +#include <tools/solar.h> +#include <tools/stream.hxx> +#include "svx/svxdllapi.h" + +#define DFF_COMMON_RECORD_HEADER_SIZE 8 + +const sal_uInt32 nMaxLegalDffRecordLength = \ + SAL_MAX_UINT32 - DFF_COMMON_RECORD_HEADER_SIZE; + +#define DFF_PSFLAG_CONTAINER 0x0F // If the version field of a record + // header takes on this value, the + // record header marks the start of + // a container. + +#define DFF_PST_Unknown 0 +#define DFF_PST_SubContainerCompleted 1 +#define DFF_PST_IRRAtom 2 +#define DFF_PST_PSS 3 +#define DFF_PST_SubContainerException 4 +#define DFF_PST_ClientSignal1 6 +#define DFF_PST_ClientSignal2 7 +#define DFF_PST_PowerPointStateInfoAtom 10 +#define DFF_PST_Document 1000 +#define DFF_PST_DocumentAtom 1001 +#define DFF_PST_EndDocument 1002 +#define DFF_PST_SlidePersist 1003 +#define DFF_PST_SlideBase 1004 +#define DFF_PST_SlideBaseAtom 1005 +#define DFF_PST_Slide 1006 +#define DFF_PST_SlideAtom 1007 +#define DFF_PST_Notes 1008 +#define DFF_PST_NotesAtom 1009 +#define DFF_PST_Environment 1010 +#define DFF_PST_SlidePersistAtom 1011 +#define DFF_PST_Scheme 1012 +#define DFF_PST_SchemeAtom 1013 +#define DFF_PST_DocViewInfo 1014 +#define DFF_PST_SslideLayoutAtom 1015 +#define DFF_PST_MainMaster 1016 +#define DFF_PST_SSSlideInfoAtom 1017 +#define DFF_PST_SlideViewInfo 1018 +#define DFF_PST_GuideAtom 1019 +#define DFF_PST_ViewInfo 1020 +#define DFF_PST_ViewInfoAtom 1021 +#define DFF_PST_SlideViewInfoAtom 1022 +#define DFF_PST_VBAInfo 1023 +#define DFF_PST_VBAInfoAtom 1024 +#define DFF_PST_SSDocInfoAtom 1025 +#define DFF_PST_Summary 1026 +#define DFF_PST_Texture 1027 +#define DFF_PST_VBASlideInfo 1028 +#define DFF_PST_VBASlideInfoAtom 1029 +#define DFF_PST_DocRoutingSlip 1030 +#define DFF_PST_OutlineViewInfo 1031 +#define DFF_PST_SorterViewInfo 1032 +#define DFF_PST_ExObjList 1033 +#define DFF_PST_ExObjListAtom 1034 +#define DFF_PST_PPDrawingGroup 1035 +#define DFF_PST_PPDrawing 1036 +#define DFF_PST_NamedShows 1040 +#define DFF_PST_NamedShow 1041 +#define DFF_PST_NamedShowSlides 1042 +#define DFF_PST_List 2000 +#define DFF_PST_FontCollection 2005 +#define DFF_PST_ListPlaceholder 2017 +#define DFF_PST_BookmarkCollection 2019 +#define DFF_PST_SoundCollection 2020 +#define DFF_PST_SoundCollAtom 2021 +#define DFF_PST_Sound 2022 +#define DFF_PST_SoundData 2023 +#define DFF_PST_BookmarkSeedAtom 2025 +#define DFF_PST_GuideList 2026 +#define DFF_PST_RunArray 2028 +#define DFF_PST_RunArrayAtom 2029 +#define DFF_PST_ArrayElementAtom 2030 +#define DFF_PST_Int4ArrayAtom 2031 +#define DFF_PST_ColorSchemeAtom 2032 +#define DFF_PST_OEShape 3008 +#define DFF_PST_ExObjRefAtom 3009 +#define DFF_PST_OEPlaceholderAtom 3011 +#define DFF_PST_GrColor 3020 +#define DFF_PST_GrectAtom 3025 +#define DFF_PST_GratioAtom 3031 +#define DFF_PST_Gscaling 3032 +#define DFF_PST_GpointAtom 3034 +#define DFF_PST_OEShapeAtom 3035 +#define DFF_PST_OutlineTextRefAtom 3998 +#define DFF_PST_TextHeaderAtom 3999 +#define DFF_PST_TextCharsAtom 4000 +#define DFF_PST_StyleTextPropAtom 4001 +#define DFF_PST_BaseTextPropAtom 4002 +#define DFF_PST_TxMasterStyleAtom 4003 +#define DFF_PST_TxCFStyleAtom 4004 +#define DFF_PST_TxPFStyleAtom 4005 +#define DFF_PST_TextRulerAtom 4006 +#define DFF_PST_TextBookmarkAtom 4007 +#define DFF_PST_TextBytesAtom 4008 +#define DFF_PST_TxSIStyleAtom 4009 +#define DFF_PST_TextSpecInfoAtom 4010 +#define DFF_PST_DefaultRulerAtom 4011 +#define DFF_PST_FontEntityAtom 4023 +#define DFF_PST_FontEmbedData 4024 +#define DFF_PST_TypeFace 4025 +#define DFF_PST_CString 4026 +#define DFF_PST_ExternalObject 4027 +#define DFF_PST_MetaFile 4033 +#define DFF_PST_ExOleObj 4034 +#define DFF_PST_ExOleObjAtom 4035 +#define DFF_PST_ExPlainLinkAtom 4036 +#define DFF_PST_CorePict 4037 +#define DFF_PST_CorePictAtom 4038 +#define DFF_PST_ExPlainAtom 4039 +#define DFF_PST_SrKinsoku 4040 +#define DFF_PST_Handout 4041 +#define DFF_PST_ExEmbed 4044 +#define DFF_PST_ExEmbedAtom 4045 +#define DFF_PST_ExLink 4046 +#define DFF_PST_ExLinkAtom_old 4047 +#define DFF_PST_BookmarkEntityAtom 4048 +#define DFF_PST_ExLinkAtom 4049 +#define DFF_PST_SrKinsokuAtom 4050 +#define DFF_PST_ExHyperlinkAtom 4051 +#define DFF_PST_ExPlain 4053 +#define DFF_PST_ExPlainLink 4054 +#define DFF_PST_ExHyperlink 4055 +#define DFF_PST_SlideNumberMCAtom 4056 +#define DFF_PST_HeadersFooters 4057 +#define DFF_PST_HeadersFootersAtom 4058 +#define DFF_PST_RecolorEntryAtom 4062 +#define DFF_PST_TxInteractiveInfoAtom 4063 +#define DFF_PST_EmFormatAtom 4065 +#define DFF_PST_CharFormatAtom 4066 +#define DFF_PST_ParaFormatAtom 4067 +#define DFF_PST_MasterText 4068 +#define DFF_PST_RecolorInfoAtom 4071 +#define DFF_PST_ExQuickTime 4073 +#define DFF_PST_ExQuickTimeMovie 4074 +#define DFF_PST_ExQuickTimeMovieData 4075 +#define DFF_PST_ExSubscription 4076 +#define DFF_PST_ExSubscriptionSection 4077 +#define DFF_PST_ExControl 4078 +#define DFF_PST_ExControlAtom 4091 +#define DFF_PST_SlideListWithText 4080 +#define DFF_PST_AnimationInfoAtom 4081 +#define DFF_PST_InteractiveInfo 4082 +#define DFF_PST_InteractiveInfoAtom 4083 +#define DFF_PST_SlideList 4084 +#define DFF_PST_UserEditAtom 4085 +#define DFF_PST_CurrentUserAtom 4086 +#define DFF_PST_DateTimeMCAtom 4087 +#define DFF_PST_GenericDateMCAtom 4088 +#define DFF_PST_HeaderMCAtom 4089 +#define DFF_PST_FooterMCAtom 4090 +#define DFF_PST_ExMediaAtom 4100 +#define DFF_PST_ExVideo 4101 +#define DFF_PST_ExAviMovie 4102 +#define DFF_PST_ExMCIMovie 4103 +#define DFF_PST_ExMIDIAudio 4109 +#define DFF_PST_ExCDAudio 4110 +#define DFF_PST_ExWAVAudioEmbedded 4111 +#define DFF_PST_ExWAVAudioLink 4112 +#define DFF_PST_ExOleObjStg 4113 +#define DFF_PST_ExCDAudioAtom 4114 +#define DFF_PST_ExWAVAudioEmbeddedAtom 4115 +#define DFF_PST_AnimationInfo 4116 +#define DFF_PST_RTFDateTimeMCAtom 4117 +#define DFF_PST_ProgTags 5000 +#define DFF_PST_ProgStringTag 5001 +#define DFF_PST_ProgBinaryTag 5002 +#define DFF_PST_BinaryTagData 5003 +#define DFF_PST_PrintOptions 6000 +#define DFF_PST_PersistPtrFullBlock 6001 +#define DFF_PST_PersistPtrIncrementalBlock 6002 +#define DFF_PST_RulerIndentAtom 10000 +#define DFF_PST_GscalingAtom 10001 +#define DFF_PST_GrColorAtom 10002 +#define DFF_PST_GLPointAtom 10003 +#define DFF_PST_GlineAtom 10004 + +// Record Name FBT-Value Instance Contents Wrd Exl Ppt Ver + +#define DFF_msofbtDggContainer 0xF000 // per-document data X X X +#define DFF_msofbtDgg 0xF006 // an FDGG and several FIDCLs X X X 0 +#define DFF_msofbtCLSID 0xF016 // the CLSID of the application that put the data on the clipboard C C C 0 +#define DFF_msofbtOPT 0xF00B // count of properties the document-wide default shape properties X X X 3 +#define DFF_msofbtColorMRU 0xF11A // count of colors the colors in the MRU swatch X X X 0 +#define DFF_msofbtSplitMenuColors 0xF11E // count of colors the colors in the top-level split menus X X X 0 +#define DFF_msofbtBstoreContainer 0xF001 // count of BLIPs all images in the document (JPEGs, metafiles, etc.) X X X +#define DFF_msofbtBSE 0xF007 // BLIP type an FBSE (one per BLIP) X X X 2 +#define DFF_msofbtBlipFirst 0xF018 // range of fbts reserved for various kinds of BLIPs X X X +#define DFF_msofbtBlipLast 0xF117 // range of fbts reserved for various kinds of BLIPs X X X + +#define DFF_msofbtDgContainer 0xF002 // per-sheet/page/slide data X X X +#define DFF_msofbtDg 0xF008 // drawing ID an FDG X X X 0 +#define DFF_msofbtRegroupItems 0xF118 // count of regroup entries several FRITs X X X 0 +#define DFF_msofbtColorScheme 0xF120 // count of colors the colors of the source host's color scheme C C 0 +#define DFF_msofbtSpgrContainer 0xF003 // several SpContainers, the first of which is the group shape itself X X X +#define DFF_msofbtSpContainer 0xF004 // a shape X X X +#define DFF_msofbtSpgr 0xF009 // an FSPGR; only present if the shape is a group shape X X X 1 +#define DFF_msofbtSp 0xF00A // shape type an FSP X X X 2 +#define DFF_msofbtTextbox 0xF00C // RTF text C C C 0 +#define DFF_msofbtClientTextbox 0xF00D // host-defined the text in the textbox, in host-defined format X X X +#define DFF_msofbtAnchor 0xF00E // a RECT, in 100000ths of an inch C C C 0 +#define DFF_msofbtChildAnchor 0xF00F // a RECT, in units relative to the parent group X X X 0 +#define DFF_msofbtClientAnchor 0xF010 // host-defined the location of the shape, in a host-defined format X X X +#define DFF_msofbtClientData 0xF011 // host-defined host-specific data X X X +#define DFF_msofbtOleObject 0xF11F // a serialized IStorage for an OLE object C C C 0 +#define DFF_msofbtDeletedPspl 0xF11D // an FPSPL; only present in top-level deleted shapes X 0 +#define DFF_msofbtUDefProp 0xF122 // range of fbts reserved for various kinds of BLIPs X X X +#define DFF_msofbtSolverContainer 0xF005 // count of rules the rules governing shapes X X X +#define DFF_msofbtConnectorRule 0xF012 // an FConnectorRule X X 1 +#define DFF_msofbtAlignRule 0xF013 // an FAlignRule X X X 0 +#define DFF_msofbtArcRule 0xF014 // an FARCRU X X X 0 +#define DFF_msofbtClientRule 0xF015 // host-defined host-defined +#define DFF_msofbtCalloutRule 0xF017 // an FCORU X X X 0 + +#define DFF_msofbtSelection 0xF119 // an FDGSL followed by the SPIDs of the shapes in the selection X 0 + +// Values for the ULONG in DFF_PST_TextHeaderAtom +enum DFF_TextHeader { + DFFTH_TITLE, + DFFTH_BODY, + DFFTH_NOTES, + DFFTH_NOTUSED, + DFFTH_OTHER, // Text in a Shape + DFFTH_CENTERBODY, // Subtitle in Title-Slide + DFFTH_CENTERTITLE, // Title in Title-Slide + DFFTH_HALFBODY, // Body in two-column slide + DFFTH_QUARTERBODY // Body in four-body slide +}; + + +// Shape Properties +// 1pt = 12700 EMU (English Metric Units) +// 1pt = 20 Twip = 20/1440" = 1/72" +// 1twip=635 EMU +// 1" = 12700*72 = 914400 EMU +// 1" = 25.4mm +// 1mm = 36000 EMU +// Transform +#define DFF_Prop_Rotation 4 // Fixed Point 16.16 degrees +// Protection +#define DFF_Prop_LockRotation 119 // sal_Bool No rotation +#define DFF_Prop_LockAspectRatio 120 // sal_Bool Don't allow changes in aspect ratio +#define DFF_Prop_LockPosition 121 // sal_Bool Don't allow the shape to be moved +#define DFF_Prop_LockAgainstSelect 122 // sal_Bool Shape may not be selected +#define DFF_Prop_LockCropping 123 // sal_Bool No cropping this shape +#define DFF_Prop_LockVertices 124 // sal_Bool Edit Points not allowed +#define DFF_Prop_LockText 125 // sal_Bool Do not edit text +#define DFF_Prop_LockAdjustHandles 126 // sal_Bool Do not adjust +#define DFF_Prop_LockAgainstGrouping 127 // sal_Bool Do not group this shape +// Text +#define DFF_Prop_lTxid 128 // LONG id for the text, value determined by the host +#define DFF_Prop_dxTextLeft 129 // LONG margins relative to shape's inscribed text rectangle (in EMUs) +#define DFF_Prop_dyTextTop 130 // LONG +#define DFF_Prop_dxTextRight 131 // LONG +#define DFF_Prop_dyTextBottom 132 // LONG +#define DFF_Prop_WrapText 133 // MSO_WRAPMODE Wrap text at shape margins +#define DFF_Prop_scaleText 134 // LONG Text zoom/scale (used if fFitTextToShape) +#define DFF_Prop_anchorText 135 // MSO_ANCHOR How to anchor the text +#define DFF_Prop_txflTextFlow 136 // MSO_TXFL Text flow +#define DFF_Prop_cdirFont 137 // MSO_CDIR Font rotation +#define DFF_Prop_hspNext 138 // MSO_HSP ID of the next shape (used by Word for linked textboxes) +#define DFF_Prop_txdir 139 // MSO_TXDIR Bi-Di Text direction +#define DFF_Prop_SelectText 187 // sal_Bool sal_True if single click selects text, sal_False if two clicks +#define DFF_Prop_AutoTextMargin 188 // sal_Bool use host's margin calculations +#define DFF_Prop_RotateText 189 // sal_Bool Rotate text with shape +#define DFF_Prop_FitShapeToText 190 // sal_Bool Size shape to fit text size +#define DFF_Prop_FitTextToShape 191 // sal_Bool Size text to fit shape size +// GeoText +#define DFF_Prop_gtextUNICODE 192 // WCHAR* UNICODE text string +#define DFF_Prop_gtextRTF 193 // char* RTF text string +#define DFF_Prop_gtextAlign 194 // MSO_GEOTEXTALIGN alignment on curve +#define DFF_Prop_gtextSize 195 // LONG default point size +#define DFF_Prop_gtextSpacing 196 // LONG fixed point 16.16 +#define DFF_Prop_gtextFont 197 // WCHAR* font family name +#define DFF_Prop_gtextFReverseRows 240 // sal_Bool 8000 Reverse row order +#define DFF_Prop_fGtext 241 // sal_Bool 4000 Has text effect +#define DFF_Prop_gtextFVertical 242 // sal_Bool 2000 Rotate characters +#define DFF_Prop_gtextFKern 243 // sal_Bool 1000 Kern characters +#define DFF_Prop_gtextFTight 244 // sal_Bool 800 Tightening or tracking +#define DFF_Prop_gtextFStretch 245 // sal_Bool 400 Stretch to fit shape +#define DFF_Prop_gtextFShrinkFit 246 // sal_Bool 200 Char bounding box +#define DFF_Prop_gtextFBestFit 247 // sal_Bool 100 Scale text-on-path +#define DFF_Prop_gtextFNormalize 248 // sal_Bool 80 Stretch char height +#define DFF_Prop_gtextFDxMeasure 249 // sal_Bool 40 Do not measure along path +#define DFF_Prop_gtextFBold 250 // sal_Bool 20 Bold font +#define DFF_Prop_gtextFItalic 251 // sal_Bool 10 Italic font +#define DFF_Prop_gtextFUnderline 252 // sal_Bool 8 Underline font +#define DFF_Prop_gtextFShadow 253 // sal_Bool 4 Shadow font +#define DFF_Prop_gtextFSmallcaps 254 // sal_Bool 2 Small caps font +#define DFF_Prop_gtextFStrikethrough 255 // sal_Bool 1 Strike through font +// Blip +#define DFF_Prop_cropFromTop 256 // LONG 16.16 fraction times total image width or height, as appropriate. +#define DFF_Prop_cropFromBottom 257 // LONG +#define DFF_Prop_cropFromLeft 258 // LONG +#define DFF_Prop_cropFromRight 259 // LONG +#define DFF_Prop_pib 260 // IMsoBlip* Blip to display +#define DFF_Prop_pibName 261 // WCHAR* Blip file name +#define DFF_Prop_pibFlags 262 // MSO_BLIPFLAGS Blip flags +#define DFF_Prop_pictureTransparent 263 // LONG transparent color (none if ~0UL) +#define DFF_Prop_pictureContrast 264 // LONG contrast setting +#define DFF_Prop_pictureBrightness 265 // LONG brightness setting +#define DFF_Prop_pictureGamma 266 // LONG 16.16 gamma +#define DFF_Prop_pictureId 267 // LONG Host-defined ID for OLE objects (usually a pointer) +#define DFF_Prop_pictureDblCrMod 268 // MSO_CLR Modification used if shape has double shadow +#define DFF_Prop_pictureFillCrMod 269 // MSO_CLR +#define DFF_Prop_pictureLineCrMod 270 // MSO_CLR +#define DFF_Prop_pibPrint 271 // IMsoBlip* Blip to display when printing +#define DFF_Prop_pibPrintName 272 // WCHAR* Blip file name +#define DFF_Prop_pibPrintFlags 273 // MSO_BLIPFLAGS Blip flags +#define DFF_Prop_fNoHitTestPicture 316 // sal_Bool Do not hit test the picture +#define DFF_Prop_pictureGray 317 // sal_Bool grayscale display +#define DFF_Prop_pictureBiLevel 318 // sal_Bool bi-level display +#define DFF_Prop_pictureActive 319 // sal_Bool Server is active (OLE objects only) +// Geometry +#define DFF_Prop_geoLeft 320 // LONG Defines the G (geometry) coordinate space. +#define DFF_Prop_geoTop 321 // LONG +#define DFF_Prop_geoRight 322 // LONG +#define DFF_Prop_geoBottom 323 // LONG +#define DFF_Prop_shapePath 324 // MSO_SHAPEPATH +#define DFF_Prop_pVertices 325 // IMsoArray An array of points, in G units. +#define DFF_Prop_pSegmentInfo 326 // IMsoArray +#define DFF_Prop_adjustValue 327 // LONG Adjustment values corresponding to the positions of the +#define DFF_Prop_adjust2Value 328 // LONG adjust handles of the shape. The number of values used +#define DFF_Prop_adjust3Value 329 // LONG and their allowable ranges vary from shape type to shape type. +#define DFF_Prop_adjust4Value 330 // LONG +#define DFF_Prop_adjust5Value 331 // LONG +#define DFF_Prop_adjust6Value 332 // LONG +#define DFF_Prop_adjust7Value 333 // LONG +#define DFF_Prop_adjust8Value 334 // LONG +#define DFF_Prop_adjust9Value 335 // LONG +#define DFF_Prop_adjust10Value 336 // LONG +#define DFF_Prop_connectorPoints 337 // IMsoArray +#define DFF_Prop_stretchPointX 339 // LONG +#define DFF_Prop_stretchPointY 340 // LONG +#define DFF_Prop_Handles 341 // H* +#define DFF_Prop_pFormulas 342 // LONG +#define DFF_Prop_textRectangles 343 // LONG +#define DFF_Prop_connectorType 344 // LONG ->0=none, 1=segments, 2=custom, 3=rect +#define DFF_Prop_fShadowOK 378 // sal_Bool Shadow may be set +#define DFF_Prop_f3DOK 379 // sal_Bool 3D may be set +#define DFF_Prop_fLineOK 380 // sal_Bool Line style may be set +#define DFF_Prop_fGtextOK 381 // sal_Bool Text effect (FontWork) supported +#define DFF_Prop_fFillShadeShapeOK 382 // BOOL +#define DFF_Prop_fFillOK 383 // sal_Bool OK to fill the shape through the UI or VBA? +// FillStyle +#define DFF_Prop_fillType 384 // MSO_FILLTYPE Type of fill +#define DFF_Prop_fillColor 385 // MSO_CLR Foreground color +#define DFF_Prop_fillOpacity 386 // LONG Fixed 16.16 +#define DFF_Prop_fillBackColor 387 // MSO_CLR Background color +#define DFF_Prop_fillBackOpacity 388 // LONG Shades only +#define DFF_Prop_fillCrMod 389 // MSO_CLR Modification for BW views +#define DFF_Prop_fillBlip 390 // IMsoBlip* Pattern/texture +#define DFF_Prop_fillBlipName 391 // WCHAR* Blip file name +#define DFF_Prop_fillBlipFlags 392 // MSO_BLIPFLAGS Blip flags +#define DFF_Prop_fillWidth 393 // LONG How big (A units) to make a metafile texture. +#define DFF_Prop_fillHeight 394 // LONG +#define DFF_Prop_fillAngle 395 // LONG Fade angle - degrees in 16.16 +#define DFF_Prop_fillFocus 396 // LONG Linear shaded fill focus percent +#define DFF_Prop_fillToLeft 397 // LONG Fraction 16.16 +#define DFF_Prop_fillToTop 398 // LONG Fraction 16.16 +#define DFF_Prop_fillToRight 399 // LONG Fraction 16.16 +#define DFF_Prop_fillToBottom 400 // LONG Fraction 16.16 +#define DFF_Prop_fillRectLeft 401 // LONG For shaded fills, use the specified rectangle instead of the shape's bounding rect to define how large the fade is going to be. +#define DFF_Prop_fillRectTop 402 // LONG +#define DFF_Prop_fillRectRight 403 // LONG +#define DFF_Prop_fillRectBottom 404 // LONG +#define DFF_Prop_fillDztype 405 // MSO_DZTYPE +#define DFF_Prop_fillShadePreset 406 // LONG Special shades +#define DFF_Prop_fillShadeColors 407 // IMsoArray a preset array of colors +#define DFF_Prop_fillOriginX 408 // LONG +#define DFF_Prop_fillOriginY 409 // LONG +#define DFF_Prop_fillShapeOriginX 410 // LONG +#define DFF_Prop_fillShapeOriginY 411 // LONG +#define DFF_Prop_fillShadeType 412 // MSO_SHADETYPE Type of shading, if a shaded (gradient) fill. +#define DFF_Prop_fFilled 443 // sal_Bool Is shape filled? +#define DFF_Prop_fHitTestFill 444 // sal_Bool Should we hit test fill? +#define DFF_Prop_fillShape 445 // sal_Bool Register pattern on shape +#define DFF_Prop_fillUseRect 446 // sal_Bool Use the large rect? +#define DFF_Prop_fNoFillHitTest 447 // sal_Bool Hit test a shape as though filled +// LineStyle +#define DFF_Prop_lineColor 448 // MSO_CLR Color of line +#define DFF_Prop_lineOpacity 449 // LONG Not implemented +#define DFF_Prop_lineBackColor 450 // MSO_CLR Background color +#define DFF_Prop_lineCrMod 451 // MSO_CLR Modification for BW views +#define DFF_Prop_lineType 452 // MSO_LINETYPE Type of line +#define DFF_Prop_lineFillBlip 453 // IMsoBlip* Pattern/texture +#define DFF_Prop_lineFillBlipName 454 // WCHAR* Blip file name +#define DFF_Prop_lineFillBlipFlags 455 // MSO_BLIPFLAGS Blip flags +#define DFF_Prop_lineFillWidth 456 // LONG How big (A units) to make a metafile texture. +#define DFF_Prop_lineFillHeight 457 // LONG +#define DFF_Prop_lineFillDztype 458 // MSO_DZTYPE How to interpret fillWidth/Height numbers. +#define DFF_Prop_lineWidth 459 // LONG A units; 1pt == 12700 EMUs +#define DFF_Prop_lineMiterLimit 460 // LONG ratio (16.16) of width +#define DFF_Prop_lineStyle 461 // MSO_LINESTYLE Draw parallel lines? +#define DFF_Prop_lineDashing 462 // MSO_LINEDASHING Can be overridden by: +#define DFF_Prop_lineDashStyle 463 // IMsoArray As Win32 ExtCreatePen +#define DFF_Prop_lineStartArrowhead 464 // MSO_LINEEND Arrow at start +#define DFF_Prop_lineEndArrowhead 465 // MSO_LINEEND Arrow at end +#define DFF_Prop_lineStartArrowWidth 466 // MSO_LINEENDWIDTH Arrow at start +#define DFF_Prop_lineStartArrowLength 467 // MSO_LINEENDLENGTH Arrow at end +#define DFF_Prop_lineEndArrowWidth 468 // MSO_LINEENDWIDTH Arrow at start +#define DFF_Prop_lineEndArrowLength 469 // MSO_LINEENDLENGTH Arrow at end +#define DFF_Prop_lineJoinStyle 470 // MSO_LINEJOIN How to join lines +#define DFF_Prop_lineEndCapStyle 471 // MSO_LINECAP How to end lines +#define DFF_Prop_fArrowheadsOK 507 // sal_Bool Allow arrowheads if prop. is set +#define DFF_Prop_fLine 508 // sal_Bool Any line? +#define DFF_Prop_fHitTestLine 509 // sal_Bool Should we hit test lines? +#define DFF_Prop_lineFillShape 510 // sal_Bool Register pattern on shape +#define DFF_Prop_fNoLineDrawDash 511 // sal_Bool Draw a dashed line if no line +// ShadowStyle +#define DFF_Prop_shadowType 512 // MSO_SHADOWTYPE Type of effect +#define DFF_Prop_shadowColor 513 // MSO_CLR Foreground color +#define DFF_Prop_shadowHighlight 514 // MSO_CLR Embossed color +#define DFF_Prop_shadowCrMod 515 // MSO_CLR Modification for BW views +#define DFF_Prop_shadowOpacity 516 // LONG Fixed 16.16 +#define DFF_Prop_shadowOffsetX 517 // LONG Offset shadow +#define DFF_Prop_shadowOffsetY 518 // LONG Offset shadow +#define DFF_Prop_shadowSecondOffsetX 519 // LONG Double offset shadow +#define DFF_Prop_shadowSecondOffsetY 520 // LONG Double offset shadow +#define DFF_Prop_shadowScaleXToX 521 // LONG 16.16 +#define DFF_Prop_shadowScaleYToX 522 // LONG 16.16 +#define DFF_Prop_shadowScaleXToY 523 // LONG 16.16 +#define DFF_Prop_shadowScaleYToY 524 // LONG 16.16 +#define DFF_Prop_shadowPerspectiveX 525 // LONG 16.16 / weight +#define DFF_Prop_shadowPerspectiveY 526 // LONG 16.16 / weight +#define DFF_Prop_shadowWeight 527 // LONG scaling factor +#define DFF_Prop_shadowOriginX 528 // LONG +#define DFF_Prop_shadowOriginY 529 // LONG +#define DFF_Prop_fShadow 574 // sal_Bool Any shadow? +#define DFF_Prop_fshadowObscured 575 // sal_Bool Excel5-style shadow +// PerspectiveStyle +#define DFF_Prop_perspectiveType 576 // MSO_XFORMTYPE Where transform applies +#define DFF_Prop_perspectiveOffsetX 577 // LONG The LONG values define a transformation matrix, effectively, each value is scaled by the perspectiveWeight parameter. +#define DFF_Prop_perspectiveOffsetY 578 // LONG +#define DFF_Prop_perspectiveScaleXToX 579 // LONG +#define DFF_Prop_perspectiveScaleYToX 580 // LONG +#define DFF_Prop_perspectiveScaleXToY 581 // LONG +#define DFF_Prop_perspectiveScaleYToY 582 // LONG +#define DFF_Prop_perspectivePerspectiveX 583 // LONG +#define DFF_Prop_perspectivePerspectiveY 584 // LONG +#define DFF_Prop_perspectiveWeight 585 // LONG Scaling factor +#define DFF_Prop_perspectiveOriginX 586 // LONG +#define DFF_Prop_perspectiveOriginY 587 // LONG +#define DFF_Prop_fPerspective 639 // sal_Bool On/off +// 3D Object +#define DFF_Prop_c3DSpecularAmt 640 // LONG Fixed-point 16.16 +#define DFF_Prop_c3DDiffuseAmt 641 // LONG Fixed-point 16.16 +#define DFF_Prop_c3DShininess 642 // LONG Default gives OK results +#define DFF_Prop_c3DEdgeThickness 643 // LONG Specular edge thickness +#define DFF_Prop_c3DExtrudeForward 644 // LONG Distance of extrusion in EMUs +#define DFF_Prop_c3DExtrudeBackward 645 // LONG +#define DFF_Prop_c3DExtrudePlane 646 // LONG Extrusion direction +#define DFF_Prop_c3DExtrusionColor 647 // MSO_CLR Basic color of extruded part of shape; the lighting model used will determine the exact shades used when rendering. +#define DFF_Prop_c3DCrMod 648 // MSO_CLR Modification for BW views +#define DFF_Prop_f3D 700 // sal_Bool Does this shape have a 3D effect? +#define DFF_Prop_fc3DMetallic 701 // sal_Bool Use metallic specularity? +#define DFF_Prop_fc3DUseExtrusionColor 702 // BOOL +#define DFF_Prop_fc3DLightFace 703 // BOOL +// 3D Style +#define DFF_Prop_c3DYRotationAngle 704 // LONG degrees (16.16) about y axis +#define DFF_Prop_c3DXRotationAngle 705 // LONG degrees (16.16) about x axis +#define DFF_Prop_c3DRotationAxisX 706 // LONG These specify the rotation axis; only their relative magnitudes matter. +#define DFF_Prop_c3DRotationAxisY 707 // LONG +#define DFF_Prop_c3DRotationAxisZ 708 // LONG +#define DFF_Prop_c3DRotationAngle 709 // LONG degrees (16.16) about axis +#define DFF_Prop_c3DRotationCenterX 710 // LONG rotation center x (16.16 or g-units) +#define DFF_Prop_c3DRotationCenterY 711 // LONG rotation center y (16.16 or g-units) +#define DFF_Prop_c3DRotationCenterZ 712 // LONG rotation center z (absolute (emus)) +#define DFF_Prop_c3DRenderMode 713 // MSO_3DRENDERMODE Full,wireframe, or bcube +#define DFF_Prop_c3DTolerance 714 // LONG pixels (16.16) +#define DFF_Prop_c3DXViewpoint 715 // LONG X view point (emus) +#define DFF_Prop_c3DYViewpoint 716 // LONG Y view point (emus) +#define DFF_Prop_c3DZViewpoint 717 // LONG Z view distance (emus) +#define DFF_Prop_c3DOriginX 718 // LONG +#define DFF_Prop_c3DOriginY 719 // LONG +#define DFF_Prop_c3DSkewAngle 720 // LONG degree (16.16) skew angle +#define DFF_Prop_c3DSkewAmount 721 // LONG Percentage skew amount +#define DFF_Prop_c3DAmbientIntensity 722 // LONG Fixed point intensity +#define DFF_Prop_c3DKeyX 723 // LONG Key light source direc- +#define DFF_Prop_c3DKeyY 724 // LONG tion; only their relative +#define DFF_Prop_c3DKeyZ 725 // LONG magnitudes matter +#define DFF_Prop_c3DKeyIntensity 726 // LONG Fixed point intensity +#define DFF_Prop_c3DFillX 727 // LONG Fill light source direc- +#define DFF_Prop_c3DFillY 728 // LONG tion; only their relative +#define DFF_Prop_c3DFillZ 729 // LONG magnitudes matter +#define DFF_Prop_c3DFillIntensity 730 // LONG Fixed point intensity +#define DFF_Prop_fc3DConstrainRotation 763 // BOOL +#define DFF_Prop_fc3DRotationCenterAuto 764 // BOOL +#define DFF_Prop_fc3DParallel 765 // sal_Bool Parallel projection? +#define DFF_Prop_fc3DKeyHarsh 766 // sal_Bool Is key lighting harsh? +#define DFF_Prop_fc3DFillHarsh 767 // sal_Bool Is fill lighting harsh? +// Shape +#define DFF_Prop_hspMaster 769 // MSO_HSP master shape +#define DFF_Prop_cxstyle 771 // MSO_CXSTYLE Type of connector +#define DFF_Prop_bWMode 772 // MSO_BWMODE Settings for modifications to be made when in different forms of black-and-white mode. +#define DFF_Prop_bWModePureBW 773 // MSO_BWMODE +#define DFF_Prop_bWModeBW 774 // MSO_BWMODE +#define DFF_Prop_fOleIcon 826 // sal_Bool For OLE objects, whether the object is in icon form +#define DFF_Prop_fPreferRelativeResize 827 // sal_Bool For UI only. Prefer relative resizing. +#define DFF_Prop_fLockShapeType 828 // sal_Bool Lock the shape type (don't allow Change Shape) +#define DFF_Prop_fDeleteAttachedObject 830 // BOOL +#define DFF_Prop_fBackground 831 // sal_Bool If sal_True, this is the background shape. + +// Callout +#define DFF_Prop_spcot 832 // MSO_SPCOT Callout type +#define DFF_Prop_dxyCalloutGap 833 // LONG Distance from box to first point.(EMUs) +#define DFF_Prop_spcoa 834 // MSO_SPCOA Callout angle +#define DFF_Prop_spcod 835 // MSO_SPCOD Callout drop type +#define DFF_Prop_dxyCalloutDropSpecified 836 // LONG if mso_spcodSpecified, the actual drop distance +#define DFF_Prop_dxyCalloutLengthSpecified 837 // LONG if fCalloutLengthSpecified, the actual distance +#define DFF_Prop_fCallout 889 // sal_Bool Is the shape a callout? +#define DFF_Prop_fCalloutAccentBar 890 // sal_Bool does callout have accent bar +#define DFF_Prop_fCalloutTextBorder 891 // sal_Bool does callout have a text border +#define DFF_Prop_fCalloutMinusX 892 // BOOL +#define DFF_Prop_fCalloutMinusY 893 // BOOL +#define DFF_Prop_fCalloutDropAuto 894 // sal_Bool If true, then we occasionally invert the drop distance +#define DFF_Prop_fCalloutLengthSpecified 895 // sal_Bool if true, we look at dxyCalloutLengthSpecified + +// GroupShape +#define DFF_Prop_wzName 896 // WCHAR* Shape Name (present only if explicitly set) +#define DFF_Prop_wzDescription 897 // WCHAR* alternate text +#define DFF_Prop_pihlShape 898 // IHlink* The hyperlink in the shape. +#define DFF_Prop_pWrapPolygonVertices 899 // IMsoArray The polygon that text will be wrapped around (Word) +#define DFF_Prop_dxWrapDistLeft 900 // LONG Left wrapping distance from text (Word) +#define DFF_Prop_dyWrapDistTop 901 // LONG Top wrapping distance from text (Word) +#define DFF_Prop_dxWrapDistRight 902 // LONG Right wrapping distance from text (Word) +#define DFF_Prop_dyWrapDistBottom 903 // LONG Bottom wrapping distance from text (Word) +#define DFF_Prop_lidRegroup 904 // LONG Regroup ID +#define DFF_Prop_tableProperties 927 // LONG +#define DFF_Prop_tableRowProperties 928 // LONG* +#define DFF_Prop_fEditedWrap 953 // sal_Bool Has the wrap polygon been edited? +#define DFF_Prop_fBehindDocument 954 // sal_Bool Word-only (shape is behind text) +#define DFF_Prop_fOnDblClickNotify 955 // sal_Bool Notify client on a double click +#define DFF_Prop_fIsButton 956 // sal_Bool A button shape (i.e., clicking performs an action). Set for shapes with attached hyperlinks or macros. +#define DFF_Prop_fOneD 957 // sal_Bool 1D adjustment +#define DFF_Prop_fHidden 958 // sal_Bool Do not display +#define DFF_Prop_fPrint 959 // sal_Bool Print this shape +// entsprechende BitFlags +#define DFF_PBit_EditedWrap 0x00000040 +#define DFF_PBit_BehindDocument 0x00000020 +#define DFF_PBit_OnDblClickNotify 0x00000010 +#define DFF_PBit_IsButton 0x00000008 +#define DFF_PBit_OneD 0x00000004 +#define DFF_PBit_Hidden 0x00000002 +#define DFF_PBit_Print 0x00000001 + +// properties of the second property set +#define DFF_Prop_metroBlob 937 // XML ZipPackage* + +//--------------------------------------------------------------------------- +// linchpin: the shape type +//--------------------------------------------------------------------------- +typedef enum + { + mso_sptMin = 0, + mso_sptNotPrimitive = mso_sptMin, + mso_sptRectangle = 1, + mso_sptRoundRectangle = 2, + mso_sptEllipse = 3, + mso_sptDiamond = 4, + mso_sptIsocelesTriangle = 5, + mso_sptRightTriangle = 6, + mso_sptParallelogram = 7, + mso_sptTrapezoid = 8, + mso_sptHexagon = 9, + mso_sptOctagon = 10, + mso_sptPlus = 11, + mso_sptStar = 12, + mso_sptArrow = 13, + mso_sptThickArrow = 14, + mso_sptHomePlate = 15, + mso_sptCube = 16, + mso_sptBalloon = 17, + mso_sptSeal = 18, + mso_sptArc = 19, + mso_sptLine = 20, + mso_sptPlaque = 21, + mso_sptCan = 22, + mso_sptDonut = 23, + mso_sptTextSimple = 24, + mso_sptTextOctagon = 25, + mso_sptTextHexagon = 26, + mso_sptTextCurve = 27, + mso_sptTextWave = 28, + mso_sptTextRing = 29, + mso_sptTextOnCurve = 30, + mso_sptTextOnRing = 31, + mso_sptStraightConnector1 = 32, + mso_sptBentConnector2 = 33, + mso_sptBentConnector3 = 34, + mso_sptBentConnector4 = 35, + mso_sptBentConnector5 = 36, + mso_sptCurvedConnector2 = 37, + mso_sptCurvedConnector3 = 38, + mso_sptCurvedConnector4 = 39, + mso_sptCurvedConnector5 = 40, + mso_sptCallout1 = 41, + mso_sptCallout2 = 42, + mso_sptCallout3 = 43, + mso_sptAccentCallout1 = 44, + mso_sptAccentCallout2 = 45, + mso_sptAccentCallout3 = 46, + mso_sptBorderCallout1 = 47, + mso_sptBorderCallout2 = 48, + mso_sptBorderCallout3 = 49, + mso_sptAccentBorderCallout1 = 50, + mso_sptAccentBorderCallout2 = 51, + mso_sptAccentBorderCallout3 = 52, + mso_sptRibbon = 53, + mso_sptRibbon2 = 54, + mso_sptChevron = 55, + mso_sptPentagon = 56, + mso_sptNoSmoking = 57, + mso_sptSeal8 = 58, + mso_sptSeal16 = 59, + mso_sptSeal32 = 60, + mso_sptWedgeRectCallout = 61, + mso_sptWedgeRRectCallout = 62, + mso_sptWedgeEllipseCallout = 63, + mso_sptWave = 64, + mso_sptFoldedCorner = 65, + mso_sptLeftArrow = 66, + mso_sptDownArrow = 67, + mso_sptUpArrow = 68, + mso_sptLeftRightArrow = 69, + mso_sptUpDownArrow = 70, + mso_sptIrregularSeal1 = 71, + mso_sptIrregularSeal2 = 72, + mso_sptLightningBolt = 73, + mso_sptHeart = 74, + mso_sptPictureFrame = 75, + mso_sptQuadArrow = 76, + mso_sptLeftArrowCallout = 77, + mso_sptRightArrowCallout = 78, + mso_sptUpArrowCallout = 79, + mso_sptDownArrowCallout = 80, + mso_sptLeftRightArrowCallout = 81, + mso_sptUpDownArrowCallout = 82, + mso_sptQuadArrowCallout = 83, + mso_sptBevel = 84, + mso_sptLeftBracket = 85, + mso_sptRightBracket = 86, + mso_sptLeftBrace = 87, + mso_sptRightBrace = 88, + mso_sptLeftUpArrow = 89, + mso_sptBentUpArrow = 90, + mso_sptBentArrow = 91, + mso_sptSeal24 = 92, + mso_sptStripedRightArrow = 93, + mso_sptNotchedRightArrow = 94, + mso_sptBlockArc = 95, + mso_sptSmileyFace = 96, + mso_sptVerticalScroll = 97, + mso_sptHorizontalScroll = 98, + mso_sptCircularArrow = 99, + mso_sptNotchedCircularArrow = 100, + mso_sptUturnArrow = 101, + mso_sptCurvedRightArrow = 102, + mso_sptCurvedLeftArrow = 103, + mso_sptCurvedUpArrow = 104, + mso_sptCurvedDownArrow = 105, + mso_sptCloudCallout = 106, + mso_sptEllipseRibbon = 107, + mso_sptEllipseRibbon2 = 108, + mso_sptFlowChartProcess = 109, + mso_sptFlowChartDecision = 110, + mso_sptFlowChartInputOutput = 111, + mso_sptFlowChartPredefinedProcess = 112, + mso_sptFlowChartInternalStorage = 113, + mso_sptFlowChartDocument = 114, + mso_sptFlowChartMultidocument = 115, + mso_sptFlowChartTerminator = 116, + mso_sptFlowChartPreparation = 117, + mso_sptFlowChartManualInput = 118, + mso_sptFlowChartManualOperation = 119, + mso_sptFlowChartConnector = 120, + mso_sptFlowChartPunchedCard = 121, + mso_sptFlowChartPunchedTape = 122, + mso_sptFlowChartSummingJunction = 123, + mso_sptFlowChartOr = 124, + mso_sptFlowChartCollate = 125, + mso_sptFlowChartSort = 126, + mso_sptFlowChartExtract = 127, + mso_sptFlowChartMerge = 128, + mso_sptFlowChartOfflineStorage = 129, + mso_sptFlowChartOnlineStorage = 130, + mso_sptFlowChartMagneticTape = 131, + mso_sptFlowChartMagneticDisk = 132, + mso_sptFlowChartMagneticDrum = 133, + mso_sptFlowChartDisplay = 134, + mso_sptFlowChartDelay = 135, + mso_sptTextPlainText = 136, + mso_sptTextStop = 137, + mso_sptTextTriangle = 138, + mso_sptTextTriangleInverted = 139, + mso_sptTextChevron = 140, + mso_sptTextChevronInverted = 141, + mso_sptTextRingInside = 142, + mso_sptTextRingOutside = 143, + mso_sptTextArchUpCurve = 144, + mso_sptTextArchDownCurve = 145, + mso_sptTextCircleCurve = 146, + mso_sptTextButtonCurve = 147, + mso_sptTextArchUpPour = 148, + mso_sptTextArchDownPour = 149, + mso_sptTextCirclePour = 150, + mso_sptTextButtonPour = 151, + mso_sptTextCurveUp = 152, + mso_sptTextCurveDown = 153, + mso_sptTextCascadeUp = 154, + mso_sptTextCascadeDown = 155, + mso_sptTextWave1 = 156, + mso_sptTextWave2 = 157, + mso_sptTextWave3 = 158, + mso_sptTextWave4 = 159, + mso_sptTextInflate = 160, + mso_sptTextDeflate = 161, + mso_sptTextInflateBottom = 162, + mso_sptTextDeflateBottom = 163, + mso_sptTextInflateTop = 164, + mso_sptTextDeflateTop = 165, + mso_sptTextDeflateInflate = 166, + mso_sptTextDeflateInflateDeflate = 167, + mso_sptTextFadeRight = 168, + mso_sptTextFadeLeft = 169, + mso_sptTextFadeUp = 170, + mso_sptTextFadeDown = 171, + mso_sptTextSlantUp = 172, + mso_sptTextSlantDown = 173, + mso_sptTextCanUp = 174, + mso_sptTextCanDown = 175, + mso_sptFlowChartAlternateProcess = 176, + mso_sptFlowChartOffpageConnector = 177, + mso_sptCallout90 = 178, + mso_sptAccentCallout90 = 179, + mso_sptBorderCallout90 = 180, + mso_sptAccentBorderCallout90 = 181, + mso_sptLeftRightUpArrow = 182, + mso_sptSun = 183, + mso_sptMoon = 184, + mso_sptBracketPair = 185, + mso_sptBracePair = 186, + mso_sptSeal4 = 187, + mso_sptDoubleWave = 188, + mso_sptActionButtonBlank = 189, + mso_sptActionButtonHome = 190, + mso_sptActionButtonHelp = 191, + mso_sptActionButtonInformation = 192, + mso_sptActionButtonForwardNext = 193, + mso_sptActionButtonBackPrevious = 194, + mso_sptActionButtonEnd = 195, + mso_sptActionButtonBeginning = 196, + mso_sptActionButtonReturn = 197, + mso_sptActionButtonDocument = 198, + mso_sptActionButtonSound = 199, + mso_sptActionButtonMovie = 200, + mso_sptHostControl = 201, + mso_sptTextBox = 202, + mso_sptMax = 0x0FFF, + mso_sptNil = mso_sptMax + } MSO_SPT; + +// different enums from the OfficeDraw documentation, Appendix D - beginning +// +// note: in opposite to the MS documentation, they all +// start with "mso_" instead of "mso" +// +enum MSO_ShapePath { + mso_shapeLines, // A line of straight segments + mso_shapeLinesClosed, // A closed polygonal object + mso_shapeCurves, // A line of Bezier curve segments + mso_shapeCurvesClosed, // A closed shape with curved edges + mso_shapeComplex // pSegmentInfo must be non-empty +}; + +enum MSO_WrapMode { + mso_wrapSquare, + mso_wrapByPoints, + mso_wrapNone, + mso_wrapTopBottom, + mso_wrapThrough +}; + +enum MSO_BWMode { + mso_bwColor, // only used for predefined shades + mso_bwAutomatic, // depends on object type + mso_bwGrayScale, // shades of gray only + mso_bwLightGrayScale, // shades of light gray only + mso_bwInverseGray, // dark gray mapped to light gray, etc. + mso_bwGrayOutline, // pure gray and white + mso_bwBlackTextLine, // black text and lines, all else grayscale + mso_bwHighContrast, // pure black and white mode (no grays) + mso_bwBlack, // solid black + mso_bwWhite, // solid white + mso_bwDontShow, // object not drawn + mso_bwNumModes // number of Black and white modes +}; + +enum MSO_Anchor { + mso_anchorTop, + mso_anchorMiddle, + mso_anchorBottom, + mso_anchorTopCentered, + mso_anchorMiddleCentered, + mso_anchorBottomCentered, + mso_anchorTopBaseline, + mso_anchorBottomBaseline, + mso_anchorTopCenteredBaseline, + mso_anchorBottomCenteredBaseline +}; + +enum MSO_CDir { + mso_cdir0, // Right + mso_cdir90, // Down + mso_cdir180, // Left + mso_cdir270 // Up +}; + +// connector style +enum MSO_ConnectorStyle { + mso_cxstyleStraight = 0, + mso_cxstyleBent, + mso_cxstyleCurved, + mso_cxstyleNone +}; + +// MSO_TXFL -- text flow +enum MSO_TextFlow { + mso_txflHorzN, // Horizontal non-@ + mso_txflTtoBA, // Top to Bottom @-font + mso_txflBtoT, // Bottom to Top non-@ + mso_txflTtoBN, // Top to Bottom non-@ + mso_txflHorzA, // Horizontal @-font + mso_txflVertN // Vertical, non-@ +}; + +// MSO_TXDIR - text direction (needed for Bi-Di support) +enum MSO_TextDir { + mso_txdirLTR, // left-to-right text direction + mso_txdirRTL, // right-to-left text direction + mso_txdirContext // context text direction +}; + +// MSO_SPCOT -- Callout Type +enum MSO_SPCalloutType { + mso_spcotRightAngle = 1, + mso_spcotOneSegment = 2, + mso_spcotTwoSegment = 3, + mso_spcotThreeSegment = 4 +}; + +// MSO_SPCOA -- Callout Angle +enum MSO_SPCalloutAngle { + mso_spcoaAny, + mso_spcoa30, + mso_spcoa45, + mso_spcoa60, + mso_spcoa90, + mso_spcoa0 +}; + +// MSO_SPCOD -- Callout Drop +enum MSO_SPCalloutDrop { + mso_spcodTop, + mso_spcodCenter, + mso_spcodBottom, + mso_spcodSpecified +}; + +// MSO_GEOTEXTALIGN - FontWork alignment +enum MSO_GeoTextAlign { + mso_alignTextStretch, /* Stretch each line of text to fit width. */ + mso_alignTextCenter, /* Center text on width. */ + mso_alignTextLeft, /* Left justify. */ + mso_alignTextRight, /* Right justify. */ + mso_alignTextLetterJust, /* Spread letters out to fit width. */ + mso_alignTextWordJust, /* Spread words out to fit width. */ + mso_alignTextInvalid /* Invalid */ +}; + +// MSO_BLIPFLAGS - flags for pictures +enum MSO_BlipFlags { + mso_blipflagDefault = 0, + mso_blipflagComment = 0, // Blip name is a comment + mso_blipflagFile, // Blip name is a file name + mso_blipflagURL, // Blip name is a full URL + mso_blipflagType = 3, // Mask to extract type + /* Or the following flags with any of the above. */ + mso_blipflagDontSave = 4, // A "dont" is the depression in the metal + // body work of an automobile caused when a + // cyclist violently thrusts his or her nose + // at it, thus a DontSave is another name for + // a cycle lane. + mso_blipflagDoNotSave = 4, // For those who prefer English + mso_blipflagLinkToFile = 8 +}; + +enum MSO_3DRenderMode { + mso_FullRender, // Generate a full rendering + mso_Wireframe, // Generate a wireframe + mso_BoundingCube // Generate a bounding cube +}; + +enum MSO_XFormType { + mso_xformAbsolute, // Apply transform in absolute space centered on shape + mso_xformShape, // Apply transform to shape geometry + mso_xformDrawing // Apply transform in drawing space +}; + +enum MSO_ShadowType { + mso_shadowOffset, // N pixel offset shadow + mso_shadowDouble, // Use second offset too + mso_shadowRich, // Rich perspective shadow (cast relative to shape) + mso_shadowShape, // Rich perspective shadow (cast in shape space) + mso_shadowDrawing, // Perspective shadow cast in drawing space + mso_shadowEmbossOrEngrave +}; + +// MSO_DZTYPE - the type of a (length) measurement +enum MSO_DZType { + mso_dztypeMin = 0, + mso_dztypeDefault = 0, // Default size, ignore the values + mso_dztypeA = 1, // Values are in EMUs + mso_dztypeV = 2, // Values are in pixels + mso_dztypeShape = 3, // Values are 16.16 fractions of shape size + mso_dztypeFixedAspect = 4, // Aspect ratio is fixed + mso_dztypeAFixed = 5, // EMUs, fixed aspect ratio + mso_dztypeVFixed = 6, // Pixels, fixed aspect ratio + mso_dztypeShapeFixed = 7, // Proportion of shape, fixed aspect ratio + mso_dztypeFixedAspectEnlarge + = 8, // Aspect ratio is fixed, favor larger size + mso_dztypeAFixedBig = 9, // EMUs, fixed aspect ratio + mso_dztypeVFixedBig = 10, // Pixels, fixed aspect ratio + mso_dztypeShapeFixedBig= 11, // Proportion of shape, fixed aspect ratio + mso_dztypeMax = 11 +}; + +enum MSO_FillType { + mso_fillSolid, // Fill with a solid color + mso_fillPattern, // Fill with a pattern (bitmap) + mso_fillTexture, // A texture (pattern with its own color map) + mso_fillPicture, // Center a picture in the shape + mso_fillShade, // Shade from start to end points + mso_fillShadeCenter, // Shade from bounding rectangle to end point + mso_fillShadeShape, // Shade from shape outline to end point + mso_fillShadeScale, // Similar to mso_fillShade, but the fillAngle + // is additionally scaled by the aspect ratio of + // the shape. If shape is square, it is the + // same as mso_fillShade. + mso_fillShadeTitle, // special type - shade to title --- for PP + mso_fillBackground // Use the background fill color/pattern +}; + +// MSO_SHADETYPE - how to interpret the colors in a shaded fill. +enum MSO_ShadeType { + mso_shadeNone = 0, // Interpolate without correction between RGBs + mso_shadeGamma = 1, // Apply gamma correction to colors + mso_shadeSigma = 2, // Apply a sigma transfer function to position + mso_shadeBand = 4, // Add a flat band at the start of the shade + mso_shadeOneColor = 8, // This is a one color shade + + /* A parameter for the band or sigma function can be stored in the top + 16 bits of the value - this is a proportion of *each* band of the + shade to make flat (or the approximate equal value for a sigma + function). NOTE: the parameter is not used for the sigma function, + instead a built in value is used. This value should not be changed + from the default! */ + mso_shadeParameterShift = 16, + mso_shadeParameterMask = 0xffff0000, + + mso_shadeDefault = (mso_shadeGamma|mso_shadeSigma| + (16384<<mso_shadeParameterShift)) +}; + +// MSOLINESTYLE - compound line style +enum MSO_LineStyle { + mso_lineSimple, // Single line (of width lineWidth) + mso_lineDouble, // Double lines of equal width + mso_lineThickThin, // Double lines, one thick, one thin + mso_lineThinThick, // Double lines, reverse order + mso_lineTriple // Three lines, thin, thick, thin +}; + +// MSO_LINETYPE - how to "fill" the line contour +enum MSO_LineType { + mso_lineSolidType, // Fill with a solid color + mso_linePattern, // Fill with a pattern (bitmap) + mso_lineTexture, // A texture (pattern with its own color map) + mso_linePicture // Center a picture in the shape +}; + +// MSO_LINEDASHING - dashed line style +enum MSO_LineDashing { + mso_lineSolid, // Solid (continuous) pen + mso_lineDashSys, // PS_DASH system dash style + mso_lineDotSys, // PS_DOT system dash style + mso_lineDashDotSys, // PS_DASHDOT system dash style + mso_lineDashDotDotSys, // PS_DASHDOTDOT system dash style + mso_lineDotGEL, // square dot style + mso_lineDashGEL, // dash style + mso_lineLongDashGEL, // long dash style + mso_lineDashDotGEL, // dash short dash + mso_lineLongDashDotGEL, // long dash short dash + mso_lineLongDashDotDotGEL // long dash short dash short dash +}; + +// MSO_LINEEND - line end effect +enum MSO_LineEnd { + mso_lineNoEnd, + mso_lineArrowEnd, + mso_lineArrowStealthEnd, + mso_lineArrowDiamondEnd, + mso_lineArrowOvalEnd, + mso_lineArrowOpenEnd +}; + +// MSO_LINEENDWIDTH - size of arrowhead +enum MSO_LineEndWidth { + mso_lineNarrowArrow, + mso_lineMediumWidthArrow, + mso_lineWideArrow +}; + +// MSO_LINEENDLENGTH - size of arrowhead +enum MSO_LineEndLength { + mso_lineShortArrow, + mso_lineMediumLenArrow, + mso_lineLongArrow +}; + +// MSO_LINEJOIN - line join style. +enum MSO_LineJoin { + mso_lineJoinBevel, // Join edges by a straight line + mso_lineJoinMiter, // Extend edges until they join + mso_lineJoinRound // Draw an arc between the two edges +}; + +// MSO_LINECAP - line cap style (applies to ends of dash segments too). +enum MSO_LineCap { + mso_lineEndCapRound, // Rounded ends - the default + mso_lineEndCapSquare, // Square protrudes by half line width + mso_lineEndCapFlat // Line ends at end point +}; +// verschiedene enums aus der OfficeDraw-Doku, Appendix D - Ende + +// BStore-Container +// FBSE - File Blip Store Entry +typedef struct _MSOF_BSE { + sal_uInt8 btWin32; // Required type on Win32 + sal_uInt8 btMacOS; // Required type on Mac + sal_uInt8 rgbUid[16]; // Identifier of blip + sal_uInt16 tag; // currently unused + sal_uIntPtr size; // Blip size in stream + sal_uIntPtr cRef; // Reference count on the blip + sal_uIntPtr /*MSOFO*/ foDelay; // File offset in the delay stream + sal_uInt8 usage; // How this blip is used (MSOBLIPUSAGE) + sal_uInt8 cbName; // length of the blip name + sal_uInt8 unused2; // for the future + sal_uInt8 unused3; // for the future +} MSO_FBSE; + +typedef enum { + mso_blipUsageDefault, // All non-texture fill blips get this. + mso_blipUsageTexture, + mso_blipUsageMax = 255 // Since this is stored in a byte +} MSO_BLIPUSAGE; + +typedef enum { // GEL provided types... + mso_blipERROR = 0, // An error occurred during loading + mso_blipUNKNOWN, // An unknown blip type + mso_blipEMF, // Windows Enhanced Metafile + mso_blipWMF, // Windows Metafile + mso_blipPICT, // Macintosh PICT + mso_blipJPEG, // JFIF + mso_blipPNG, // PNG + mso_blipDIB, // Windows DIB + mso_blipFirstClient = 32, // First client defined blip type + mso_blipLastClient = 255 // Last client defined blip type +} MSO_BLIPTYPE; + +typedef enum { + mso_biUNKNOWN = 0, + mso_biWMF = 0x216, // Metafile header then compressed WMF + mso_biEMF = 0x3D4, // Metafile header then compressed EMF + mso_biPICT = 0x542, // Metafile header then compressed PICT + mso_biPNG = 0x6E0, // One byte tag then PNG data + mso_biJFIF = 0x46A, // One byte tag then JFIF data + mso_biJPEG = mso_biJFIF, + mso_biDIB = 0x7A8, // One byte tag then DIB data + mso_biClient=0x800 // Clients should set this bit +} MSO_BI; // Blip signature as encoded in the MSO_FBH.inst + +typedef enum { + mso_compressionDeflate = 0, + mso_compressionNone = 254, // Used only if compression fails + mso_compressionTest = 255 // For testing only +} MSO_BLIPCOMPRESSION; + +typedef enum { + mso_filterAdaptive = 0, // PNG type - not used/supported for metafile + mso_filterNone = 254, + mso_filterTest = 255 // For testing only +} MSO_BLIPFILTER; + +typedef enum { + mso_syscolorButtonFace, // COLOR_BTNFACE + mso_syscolorWindowText, // COLOR_WINDOWTEXT + mso_syscolorMenu, // COLOR_MENU + mso_syscolorHighlight, // COLOR_HIGHLIGHT + mso_syscolorHighlightText, // COLOR_HIGHLIGHTTEXT + mso_syscolorCaptionText, // COLOR_CAPTIONTEXT + mso_syscolorActiveCaption, // COLOR_ACTIVECAPTION + mso_syscolorButtonHighlight, // COLOR_BTNHIGHLIGHT + mso_syscolorButtonShadow, // COLOR_BTNSHADOW + mso_syscolorButtonText, // COLOR_BTNTEXT + mso_syscolorGrayText, // COLOR_GRAYTEXT + mso_syscolorInactiveCaption, // COLOR_INACTIVECAPTION + mso_syscolorInactiveCaptionText, // COLOR_INACTIVECAPTIONTEXT + mso_syscolorInfoBackground, // COLOR_INFOBK + mso_syscolorInfoText, // COLOR_INFOTEXT + mso_syscolorMenuText, // COLOR_MENUTEXT + mso_syscolorScrollbar, // COLOR_SCROLLBAR + mso_syscolorWindow, // COLOR_WINDOW + mso_syscolorWindowFrame, // COLOR_WINDOWFRAME + mso_syscolor3DLight, // COLOR_3DLIGHT + mso_syscolorMax, // Count of system colors + + mso_colorFillColor = 0xF0, // Use the fillColor property + mso_colorLineOrFillColor, // Use the line color only if there is a line + mso_colorLineColor, // Use the lineColor property + mso_colorShadowColor, // Use the shadow color + mso_colorThis, // Use this color (only valid as described below) + mso_colorFillBackColor, // Use the fillBackColor property + mso_colorLineBackColor, // Use the lineBackColor property + mso_colorFillThenLine, // Use the fillColor unless no fill and line + mso_colorIndexMask = 0xFF, // Extract the color index + + mso_colorProcessMask =0xFFFF00,// All the processing bits + mso_colorModificationMask =0x0F00, // Just the function + mso_colorModFlagMask =0xF000, // Just the additional flags + mso_colorDarken =0x0100, // Darken color by parameter/255 + mso_colorLighten =0x0200, // Lighten color by parameter/255 + mso_colorAdd =0x0300, // Add grey level RGB(param,param,param) + mso_colorSubtract =0x0400, // Subtract grey level RGB(p,p,p) + mso_colorReverseSubtract =0x0500, // Subtract from grey level RGB(p,p,p) + /* In the following "black" means maximum component value, white minimum. + The operation is per component, to guarantee white combine with + mso_colorGray */ + mso_colorBlackWhite =0x0600, // Black if < uParam, else white (>=) + mso_colorInvert =0x2000, // Invert color (at the *end*) + mso_colorInvert128 =0x4000, // Invert by toggling the top bit + mso_colorGray =0x8000, // Make the color gray (before the above!) + mso_colorBParamMask =0xFF0000,// Parameter used as above + mso_colorBParamShift = 16 // To extract the parameter value +} MSO_SYSCOLORINDEX; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/numfmtsh.hxx b/include/svx/numfmtsh.hxx new file mode 100644 index 000000000000..2a8607c13b42 --- /dev/null +++ b/include/svx/numfmtsh.hxx @@ -0,0 +1,229 @@ +/* -*- 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 _SVX_NUMFMTSH_HXX +#define _SVX_NUMFMTSH_HXX + +#include <tools/string.hxx> +#include <i18nlangtag/lang.h> + +#include "svx/svxdllapi.h" + +#include <svl/zforlist.hxx> + +#include <vector> +#include <map> + +class Color; + +enum SvxNumberValueType +{ + SVX_VALUE_TYPE_UNDEFINED = 0, + SVX_VALUE_TYPE_NUMBER, + SVX_VALUE_TYPE_STRING +}; + +// sort order of the category ListBox entries in the TabPage +#define CAT_ALL 0 +#define CAT_USERDEFINED 1 +#define CAT_NUMBER 2 +#define CAT_PERCENT 3 +#define CAT_CURRENCY 4 +#define CAT_DATE 5 +#define CAT_TIME 6 +#define CAT_SCIENTIFIC 7 +#define CAT_FRACTION 8 +#define CAT_BOOLEAN 9 +#define CAT_TEXT 10 + +#define SELPOS_NONE -1 + +#define NUMBERFORMAT_ENTRY_NEW_CURRENCY NUMBERFORMAT_ENTRY_NOT_FOUND-1 + + +class SVX_DLLPUBLIC SvxNumberFormatShell +{ +public: + SvxNumberFormatShell( SvNumberFormatter* pNumFormatter, + sal_uInt32 nFormatKey, + SvxNumberValueType eNumValType, + const String& rNumStr ); + + SvxNumberFormatShell( SvNumberFormatter* pNumFormatter, + sal_uInt32 nFormatKey, + SvxNumberValueType eNumValType, + double nNumVal, + const String* pNumStr = NULL ); + + ~SvxNumberFormatShell(); + + + static SvxNumberFormatShell* Create( SvNumberFormatter* pNumFormatter, + sal_uInt32 nFormatKey, + SvxNumberValueType eNumValType, + const String& rNumStr ); + + static SvxNumberFormatShell* Create( SvNumberFormatter* pNumFormatter, + sal_uInt32 nFormatKey, + SvxNumberValueType eNumValType, + double nNumVal, + const String* pNumStr = NULL ); + + + void GetInitSettings( sal_uInt16& nCatLbPos, + LanguageType& rLangType, + sal_uInt16& nFmtLbSelPos, + std::vector<String*>& rFmtEntries, + String& rPrevString, + Color*& rpPrevColor ); + + void CategoryChanged( sal_uInt16 nCatLbPos, + short& rFmtSelPos, + std::vector<String*>& rFmtEntries ); + + void LanguageChanged( LanguageType eLangType, + short& rFmtSelPos, + std::vector<String*>& rFmtEntries ); + + void FormatChanged( sal_uInt16 nFmtLbPos, + String& rPreviewStr, + Color*& rpFontColor ); + + bool AddFormat( String& rFormat, + xub_StrLen& rErrPos, + sal_uInt16& rCatLbSelPos, + short& rFmtSelPos, + std::vector<String*>& rFmtEntries ); + + bool RemoveFormat( const String& rFormat, + sal_uInt16& rCatLbSelPos, + short& rFmtSelPos, + std::vector<String*>& rFmtEntries ); + + void MakeFormat( String& rFormat, + bool bThousand, + bool bNegRed, + sal_uInt16 nPrecision, + sal_uInt16 nLeadingZeroes, + sal_uInt16 nCurrencyEntryPos); + + void GetOptions( const String& rFormat, + bool& rThousand, + bool& rNegRed, + sal_uInt16& rPrecision, + sal_uInt16& rLeadingZeroes, + sal_uInt16& rCatLbPos ); + + void MakePreviewString( const String& rFormatStr, + String& rPreviewStr, + Color*& rpFontColor ); + + void MakePrevStringFromVal( const String& rFormatStr, + String& rPreviewStr, + Color*& rpFontColor, + double nValue); + + bool IsUserDefined( const String& rFmtString ); + bool IsTmpCurrencyFormat( const String& rFmtString ); + bool FindEntry( const String& rFmtString, sal_uInt32* pAt = NULL ); + + void ValidateNewEntries( bool bValidate = true ) { bUndoAddList = !bValidate; } + size_t GetUpdateDataCount() const; + void GetUpdateData( sal_uInt32* pDelArray, const sal_uInt32 nSize ); + + void SetCurNumFmtKey( sal_uInt32 nNew ) { nCurFormatKey = nNew; } + void SetCurLanguage( LanguageType eNew ) { eCurLanguage = eNew; } + sal_uInt32 GetCurNumFmtKey() const { return nCurFormatKey; } + LanguageType GetCurLanguage() const { return eCurLanguage; } + + /** Returns the name of Standard, General, ... for the + current language. */ + String GetStandardName() const; + + String GetComment4Entry(short nEntry); + short GetCategory4Entry(short nEntry); + bool GetUserDefined4Entry(short nEntry); + String GetFormat4Entry(short nEntry); + void SetComment4Entry(short nEntry,String aCommentString); + + void SetCurrencySymbol(sal_uInt16 nPos); + sal_uInt32 GetCurrencySymbol(); + sal_uInt16 FindCurrencyFormat( const String& rFmtString ); + sal_uInt16 FindCurrencyFormat(const NfCurrencyEntry* pTmpCurrencyEntry,bool bTmpBanking); + void SetCurCurrencyEntry(NfCurrencyEntry*); + short GetListPos4Entry(sal_uInt32 nIdx); + short GetListPos4Entry( const String& rFmtString ); + + void GetCurrencySymbols(std::vector<OUString>& rList, sal_uInt16* pPos ); + void GetCurrencySymbols(std::vector<OUString>& rList, bool bFlag ); + + sal_uInt16 FindCurrencyTableEntry( const String& rFmtString, bool &bTestBanking ); + bool IsInTable(sal_uInt16 nPos, bool bTmpBanking, + OUString const& rFmtString); + + void SetUseStarFormat( bool bUse ) { bUseStarFormat = bUse; } + bool IsUseStarFormat( void ) { return bUseStarFormat; } +private: + static const double DEFAULT_NUMVALUE; + + SvNumberFormatter* pFormatter; + SvNumberFormatTable* pCurFmtTable; + SvxNumberValueType eValType; + String aValStr; + double nValNum; + bool bUndoAddList; + std::vector<sal_uInt32> aAddList; + std::vector<sal_uInt32> aDelList; + std::vector<sal_uInt32> aCurEntryList; + sal_uInt32 nCurFormatKey; + short nCurCategory; + LanguageType eCurLanguage; + std::vector<sal_uInt16> aCurCurrencyList; + NfCurrencyEntry* pCurCurrencyEntry; + bool bBankingSymbol; + sal_uInt16 nCurCurrencyEntryPos; + std::vector<String*> aCurrencyFormatList; + bool bUseStarFormat; +#ifdef _SVX_NUMFMTSH_CXX + SVX_DLLPRIVATE short FillEntryList_Impl( std::vector<String*>& rList ); + SVX_DLLPRIVATE void FillEListWithStd_Impl( std::vector<String*>& rList,sal_uInt16 aPrivCat, short &Pos); + SVX_DLLPRIVATE short FillEListWithFormats_Impl( std::vector<String*>& rList,short nSelPos, + NfIndexTableOffset eOffsetStart, + NfIndexTableOffset eOffsetEnd); + SVX_DLLPRIVATE short FillEListWithDateTime_Impl( std::vector<String*>& rList,short nSelPos); + SVX_DLLPRIVATE short FillEListWithCurrency_Impl( std::vector<String*>& rList,short nSelPos); + SVX_DLLPRIVATE short FillEListWithSysCurrencys( std::vector<String*>& rList,short nSelPos); + SVX_DLLPRIVATE short FillEListWithUserCurrencys( std::vector<String*>& rList,short nSelPos); + SVX_DLLPRIVATE short FillEListWithUsD_Impl( std::vector<String*>& rList, sal_uInt16 nPrivCat, short Pos ); + + SVX_DLLPRIVATE ::std::vector<sal_uInt32>::iterator GetRemoved_Impl( size_t nKey ); + SVX_DLLPRIVATE bool IsRemoved_Impl( size_t nKey ); + SVX_DLLPRIVATE ::std::vector<sal_uInt32>::iterator GetAdded_Impl( size_t nKey ); + SVX_DLLPRIVATE bool IsAdded_Impl( size_t nKey ); + + SVX_DLLPRIVATE void GetPreviewString_Impl( String& rString, + Color*& rpColor ); + SVX_DLLPRIVATE void PosToCategory_Impl( sal_uInt16 nPos, short& rCategory ); + SVX_DLLPRIVATE void CategoryToPos_Impl( short nCategory, sal_uInt16& rPos ); +#endif +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/numinf.hxx b/include/svx/numinf.hxx new file mode 100644 index 000000000000..f6cd721e8cd9 --- /dev/null +++ b/include/svx/numinf.hxx @@ -0,0 +1,87 @@ +/* -*- 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 _SVX_NUMINF_HXX +#define _SVX_NUMINF_HXX + +#include <svl/itempool.hxx> +#include <svx/numfmtsh.hxx> +#include "svx/svxdllapi.h" + +// class SvxNumberInfoItem ----------------------------------------------- + + + +/* +This item is used as a transport medium for a number formatter +*/ + +class SVX_DLLPUBLIC SvxNumberInfoItem : public SfxPoolItem +{ +public: + TYPEINFO(); + + SvxNumberInfoItem( const sal_uInt16 nId ); + SvxNumberInfoItem( SvNumberFormatter* pNumFormatter, + const sal_uInt16 nId ); + SvxNumberInfoItem( SvNumberFormatter* pNumFormatter, const String& rVal, + const sal_uInt16 nId ); + SvxNumberInfoItem( SvNumberFormatter* pNumFormatter, const double& rVal, + const sal_uInt16 nId ); + // if both double and String are supplied, String is used for text formats + SvxNumberInfoItem( SvNumberFormatter* pNumFormatter, const double& rVal, + const String& rValueStr, const sal_uInt16 nId ); + SvxNumberInfoItem( const SvxNumberInfoItem& ); + ~SvxNumberInfoItem(); + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + virtual SfxPoolItem* Create( SvStream& rStream, sal_uInt16 nVer ) const; + virtual SvStream& Store( SvStream& , sal_uInt16 nItemVersion ) const; + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + SvNumberFormatter* GetNumberFormatter() const { return pFormatter; } + const String& GetValueString() const { return aStringVal; } + double GetValueDouble() const { return nDoubleVal; } + + const sal_uInt32* GetDelArray() const { return pDelFormatArr; } + void SetDelFormatArray( const sal_uInt32* pData, + const sal_uInt32 nCount ); + + SvxNumberValueType GetValueType() const { return eValueType; } + sal_uInt32 GetDelCount() const { return nDelCount; } + +private: + SvNumberFormatter* pFormatter; + SvxNumberValueType eValueType; + String aStringVal; + double nDoubleVal; + + sal_uInt32* pDelFormatArr; + sal_uInt32 nDelCount; +}; + + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/numvset.hxx b/include/svx/numvset.hxx new file mode 100644 index 000000000000..264f1ffa2459 --- /dev/null +++ b/include/svx/numvset.hxx @@ -0,0 +1,117 @@ +/* -*- 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 _SVX_NUMVSET_HXX +#define _SVX_NUMVSET_HXX + +#include <svtools/valueset.hxx> +#include <limits.h> +#include <com/sun/star/uno/Reference.h> +#include <com/sun/star/uno/Sequence.h> +#include <com/sun/star/lang/Locale.hpp> +#include "svx/svxdllapi.h" + +namespace com{namespace sun{ namespace star{ + namespace container{ + class XIndexAccess; + } + namespace beans{ + struct PropertyValue; + } + namespace text{ + class XNumberingFormatter; + } +}}} + +class SvxBrushItem; +class SvxNumRule; +struct SvxBmpItemInfo +{ + SvxBrushItem* pBrushItem; + sal_uInt16 nItemId; +}; + +class SVX_DLLPUBLIC SvxNumValueSet : public ValueSet +{ + Color aLineColor; + sal_uInt16 nPageType; + sal_Bool bHTMLMode; + Rectangle aOrgRect; + VirtualDevice* pVDev; + + com::sun::star::uno::Reference<com::sun::star::text::XNumberingFormatter> xFormatter; + com::sun::star::lang::Locale aLocale; + + com::sun::star::uno::Sequence< + com::sun::star::uno::Sequence< + com::sun::star::beans::PropertyValue> > aNumSettings; + + com::sun::star::uno::Sequence< + com::sun::star::uno::Reference< + com::sun::star::container::XIndexAccess> > aOutlineSettings; + + public: + SvxNumValueSet(Window* pParent, WinBits nWinBits = WB_TABSTOP); + void init(sal_uInt16 nType); + ~SvxNumValueSet(); + + virtual void UserDraw( const UserDrawEvent& rUDEvt ); + + void SetHTMLMode(sal_Bool bSet) {bHTMLMode = bSet;} + void SetNumberingSettings( + const com::sun::star::uno::Sequence< + com::sun::star::uno::Sequence< + com::sun::star::beans::PropertyValue> >& aNum, + com::sun::star::uno::Reference<com::sun::star::text::XNumberingFormatter>& xFormatter, + const com::sun::star::lang::Locale& rLocale ); + + void SetOutlineNumberingSettings( + com::sun::star::uno::Sequence< + com::sun::star::uno::Reference< + com::sun::star::container::XIndexAccess> >& rOutline, + com::sun::star::uno::Reference<com::sun::star::text::XNumberingFormatter>& xFormatter, + const com::sun::star::lang::Locale& rLocale); +}; + +class SVX_DLLPUBLIC SvxBmpNumValueSet : public SvxNumValueSet +{ + String sBullets; + Timer aFormatTimer; + sal_Bool bGrfNotFound; + + void init(); + + protected: + DECL_LINK(FormatHdl_Impl, void *); + + void SetGrfNotFound(sal_Bool bSet) {bGrfNotFound = bSet;} + sal_Bool IsGrfNotFound()const {return bGrfNotFound;} + + Timer& GetFormatTimer() {return aFormatTimer;} + + public: + SvxBmpNumValueSet(Window* pParent, WinBits nWinBits = WB_TABSTOP); + ~SvxBmpNumValueSet(); + + virtual void UserDraw( const UserDrawEvent& rUDEvt ); + +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/obj3d.hxx b/include/svx/obj3d.hxx new file mode 100644 index 000000000000..1074fbccb256 --- /dev/null +++ b/include/svx/obj3d.hxx @@ -0,0 +1,319 @@ +/* -*- 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 _E3D_OBJ3D_HXX +#define _E3D_OBJ3D_HXX + +#include <svx/svdoattr.hxx> +#include <svx/svdobj.hxx> +#include <svx/def3d.hxx> +#include <svx/svdpage.hxx> +#include <svx/deflt3d.hxx> +#include <vcl/bitmap.hxx> +#include <svx/svx3ditems.hxx> +#include <svx/xflclit.hxx> +#include <svl/itemset.hxx> +#include <basegfx/range/b3drange.hxx> +#include <basegfx/polygon/b3dpolypolygon.hxx> +#include <basegfx/point/b2dpoint.hxx> +#include <basegfx/polygon/b2dpolygon.hxx> +#include <basegfx/vector/b2enums.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// Forward declaration +//************************************************************ + +class SfxPoolItem; +class Viewport3D; +class E3dScene; +class E3dPolyScene; + +namespace basegfx { class B3DPolyPolygon; } +namespace sdr { namespace properties { + class BaseProperties; + class E3dProperties; + class E3dCompoundProperties; + class E3dExtrudeProperties; + class E3dLatheProperties; + class E3dSphereProperties; +}} + +/************************************************************************* +|* +|* GeoData relevant for undo actions +|* +\************************************************************************/ + +class E3DObjGeoData : public SdrObjGeoData +{ +public: + basegfx::B3DRange maLocalBoundVol; // surrounding volume of the object + basegfx::B3DHomMatrix maTransformation; // lokal transformations + + E3DObjGeoData() {} +}; + +/************************************************************************* +|* +|* List for 3D objects +|* +\************************************************************************/ + +class E3dObjList : public SdrObjList +{ +public: + TYPEINFO(); + E3dObjList(SdrModel* pNewModel = 0, SdrPage* pNewPage = 0, E3dObjList* pNewUpList = 0); + SVX_DLLPUBLIC E3dObjList(const E3dObjList& rSrcList); + SVX_DLLPUBLIC virtual ~E3dObjList(); + + virtual void NbcInsertObject(SdrObject* pObj, sal_uIntPtr nPos=CONTAINER_APPEND, const SdrInsertReason* pReason=NULL); + virtual void InsertObject(SdrObject* pObj, sal_uIntPtr nPos=CONTAINER_APPEND, const SdrInsertReason* pReason=NULL); + virtual SdrObject* NbcRemoveObject(sal_uIntPtr nObjNum); + virtual SdrObject* RemoveObject(sal_uIntPtr nObjNum); +}; + +/************************************************************************* +|* +|* Base class for 3D objects +|* +\************************************************************************/ + +class SVX_DLLPUBLIC E3dObject : public SdrAttrObj +{ +private: + // to allow sdr::properties::E3dProperties access to StructureChanged() + friend class sdr::properties::E3dProperties; + + // Allow everything for E3dObjList and E3dDragMethod + friend class E3dObjList; + friend class E3dDragMethod; + + protected: + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + + E3dObjList maSubList; // child objects + + basegfx::B3DRange maLocalBoundVol; // surrounding volume of the object (from the geometry generation) + basegfx::B3DHomMatrix maTransformation; // local transformation + basegfx::B3DHomMatrix maFullTransform; // global transformation (including. parents) + + // Flags + unsigned mbTfHasChanged : 1; + unsigned mbIsSelected : 1; + + public: + void SetBoundVolInvalid(); + + protected: + void SetTransformChanged(); + virtual void NewObjectInserted(const E3dObject* p3DObj); + virtual void StructureChanged(); + basegfx::B3DRange RecalcBoundVolume() const; + +protected: + // E3dObject is only a helper class (for E3DScene and E3DCompoundObject) + // and no instances should be created from anyone, so i move the constructors + // to protected area + E3dObject(); + E3dObject(sal_Bool bIsFromChart); + +public: + TYPEINFO(); + virtual void RecalcSnapRect(); + virtual void SetRectsDirty(sal_Bool bNotMyself = sal_False); + + virtual ~E3dObject(); + + virtual sal_uInt32 GetObjInventor() const; + virtual sal_uInt16 GetObjIdentifier() const; + + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + + virtual void NbcSetLayer(SdrLayerID nLayer); + + virtual void SetObjList(SdrObjList* pNewObjList); + virtual void SetPage(SdrPage* pNewPage); + virtual void SetModel(SdrModel* pNewModel); + virtual void NbcMove(const Size& rSize); + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + virtual SdrObjList* GetSubList() const; + + // Insert 3D object into the group; transfer to other owner! + virtual void Insert3DObj(E3dObject* p3DObj); + void Remove3DObj(E3dObject* p3DObj); + + E3dObject* GetParentObj() const; + virtual E3dScene* GetScene() const; + + const basegfx::B3DRange& GetBoundVolume() const; + void InvalidateBoundVolume(); + + // calculate complete transformation including all parents + const basegfx::B3DHomMatrix& GetFullTransform() const; + + // get and (re)set transformation matrix + const basegfx::B3DHomMatrix& GetTransform() const; + virtual void NbcSetTransform(const basegfx::B3DHomMatrix& rMatrix); + virtual void SetTransform(const basegfx::B3DHomMatrix& rMatrix); + + // 2D rotations, are implemented as a rotation around the Z axis + // which is vertical to the screen, plus a shift of the scene. + // This means that also the scene (E3dScene) must define this + // routine as virtual in its class. + virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs); + + // get wireframe polygon for local object. No transform is applied. + basegfx::B3DPolyPolygon CreateWireframe() const; + + // TakeObjName...() is for the display in the UI, for example "3 frames selected". + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + sal_uInt16 GetLogicalGroup() { return 0; } + virtual E3dObject* Clone() const; + E3dObject& operator=( const E3dObject& rObj ); + + virtual SdrObjGeoData *NewGeoData() const; + virtual void SaveGeoData(SdrObjGeoData& rGeo) const; + virtual void RestGeoData(const SdrObjGeoData& rGeo); + + // get/set the selection + bool GetSelected() const { return mbIsSelected; } + void SetSelected(bool bNew); + + // break up + virtual bool IsBreakObjPossible(); + virtual SdrAttrObj* GetBreakObj(); +}; + +/************************************************************************* +|* +|* Class for all compound objects (Cube, Lathe, Scene, Extrude) +|* This class saves some ISA queries and accelerates the behaviour +|* significantly, because all the attributes etc. are kept through this. +|* The polygons may only keep attributes if they are directly +|* subordinated to the scene. +|* +\************************************************************************/ + +class SVX_DLLPUBLIC E3dCompoundObject : public E3dObject +{ +private: + // to allow sdr::properties::E3dCompoundProperties access to SetGeometryValid() + friend class sdr::properties::E3dCompoundProperties; + friend class sdr::properties::E3dExtrudeProperties; + friend class sdr::properties::E3dLatheProperties; + friend class sdr::properties::E3dSphereProperties; + +protected: + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + + // material of the object + Color aMaterialAmbientColor; + + // attributes for geometry creation + unsigned bCreateNormals : 1; + unsigned bCreateTexture : 1; + +protected: + void SetDefaultAttributes(E3dDefaultAttributes& rDefault); + + // convert given basegfx::B3DPolyPolygon to screen coor + basegfx::B2DPolyPolygon TransformToScreenCoor(const basegfx::B3DPolyPolygon& rCandidate); + +public : + TYPEINFO(); + + E3dCompoundObject(); + E3dCompoundObject(E3dDefaultAttributes& rDefault); + virtual ~E3dCompoundObject(); + + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + virtual sal_uInt32 GetHdlCount() const; + virtual void AddToHdlList(SdrHdlList& rHdlList) const; + + // DoubleSided: sal_True/FALSE + sal_Bool GetDoubleSided() const + { return ((const Svx3DDoubleSidedItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_DOUBLE_SIDED)).GetValue(); } + + // NormalsKind: 0 == sal_False/sal_False, 1 == sal_True/sal_False, else == sal_True/TRUE + sal_uInt16 GetNormalsKind() const + { return ((const Svx3DNormalsKindItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_NORMALS_KIND)).GetValue(); } + + // NormalsInvert: sal_True/FALSE + sal_Bool GetNormalsInvert() const + { return ((const Svx3DNormalsInvertItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_NORMALS_INVERT)).GetValue(); } + + // TextureProjX: 0 == sal_False/sal_False, 1 == sal_True/sal_False, else == sal_True/TRUE + sal_uInt16 GetTextureProjectionX() const + { return ((const Svx3DTextureProjectionXItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_TEXTURE_PROJ_X)).GetValue(); } + + // TextureProjY: 0 == sal_False/sal_False, 1 == sal_True/sal_False, else == sal_True/TRUE + sal_uInt16 GetTextureProjectionY() const + { return ((const Svx3DTextureProjectionYItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_TEXTURE_PROJ_Y)).GetValue(); } + + // Shadow3D: sal_True/FALSE + sal_Bool GetShadow3D() const + { return ((const Svx3DShadow3DItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_SHADOW_3D)).GetValue(); } + + // MaterialColor: Color + Color GetMaterialColor() const + { return ((const Svx3DMaterialColorItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_MAT_COLOR)).GetValue(); } + + // MaterialEmission: Color + Color GetMaterialEmission() const + { return ((const Svx3DMaterialEmissionItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_MAT_EMISSION)).GetValue(); } + + // MaterialSpecular: Color + Color GetMaterialSpecular() const + { return ((const Svx3DMaterialSpecularItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_MAT_SPECULAR)).GetValue(); } + + // MaterialSpecularIntensity: + sal_uInt16 GetMaterialSpecularIntensity() const + { return ((const Svx3DMaterialSpecularIntensityItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_MAT_SPECULAR_INTENSITY)).GetValue(); } + + // TextureFilter: sal_True/FALSE + sal_Bool GetTextureFilter() const + { return ((const Svx3DTextureFilterItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_TEXTURE_FILTER)).GetValue(); } + + // #i28528# + // Added extra Item (Bool) for chart2 to be able to show reduced line geometry + sal_Bool GetReducedLineGeometry() const + { return ((const Svx3DReducedLineGeometryItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_REDUCED_LINE_GEOMETRY)).GetValue(); } + + virtual sal_uInt16 GetObjIdentifier() const; + virtual void RecalcSnapRect(); + + // set/get parameters for geometry creation + sal_Bool GetCreateNormals() const { return bCreateNormals; } + + sal_Bool GetCreateTexture() const { return bCreateTexture; } + + virtual E3dCompoundObject* Clone() const; + + // material of the object + const Color& GetMaterialAmbientColor() const { return aMaterialAmbientColor; } + + bool IsAOrdNumRemapCandidate(E3dScene*& prScene) const; +}; + +#endif // _E3D_OBJ3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/objfac3d.hxx b/include/svx/objfac3d.hxx new file mode 100644 index 000000000000..6f8c67288e1f --- /dev/null +++ b/include/svx/objfac3d.hxx @@ -0,0 +1,50 @@ +/* -*- 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 _OBJFAC3D_HXX +#define _OBJFAC3D_HXX + +#include "svx/svxdllapi.h" + + +/************************************************************************* +|* +|* Factory for chart-specific objects +|* +\************************************************************************/ + +class SdrObjFactory; + + +#include <tools/link.hxx> + +class SVX_DLLPUBLIC E3dObjFactory +{ +public: + E3dObjFactory(); + ~E3dObjFactory(); + + DECL_LINK(MakeObject, SdrObjFactory*); +}; + + + +#endif // _OBJFAC3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/ofaitem.hxx b/include/svx/ofaitem.hxx new file mode 100644 index 000000000000..61a0bb38950a --- /dev/null +++ b/include/svx/ofaitem.hxx @@ -0,0 +1,78 @@ +/* -*- 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 _OFF_OFAITEM_HXX +#define _OFF_OFAITEM_HXX + +#include <svl/poolitem.hxx> +#include <rtl/ref.hxx> +#include "svx/svxdllapi.h" + +// class OfaPtrItem ------------------------------------------------------ + +class SVX_DLLPUBLIC OfaPtrItem : public SfxPoolItem +{ +private: + void* pPtr; + +public: + OfaPtrItem( sal_uInt16 nWhich, void *pPtr ); + OfaPtrItem( const OfaPtrItem& ); + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + void* GetValue() const { return pPtr; } + void SetValue( void* pNewPtr ) { pPtr = pNewPtr; } +}; + +// class OfaRefItem - for ref counting items + +template <class reference_type> +class OfaRefItem : public SfxPoolItem +{ + private: + rtl::Reference<reference_type> mxRef; +public: + OfaRefItem( sal_uInt16 _nWhich, const rtl::Reference<reference_type> &xRef ) + : SfxPoolItem( _nWhich ), mxRef( xRef ) + {} + OfaRefItem( const OfaRefItem& rItem ) + : SfxPoolItem( rItem.Which() ), mxRef( rItem.mxRef ) + {} + virtual int operator==( const SfxPoolItem& rItem ) const + { + return mxRef == ((OfaRefItem<reference_type> &)rItem).mxRef; + } + virtual SfxPoolItem*Clone( SfxItemPool* /*pPool = 0*/ ) const + { + return new OfaRefItem( *this ); + } + inline rtl::Reference<reference_type> GetValue() const + { + return mxRef; + } + inline void SetValue( const rtl::Reference<reference_type> &xRef ) + { + mxRef = xRef; + } +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/optgenrl.hxx b/include/svx/optgenrl.hxx new file mode 100644 index 000000000000..54df8e21dbf2 --- /dev/null +++ b/include/svx/optgenrl.hxx @@ -0,0 +1,42 @@ +/* -*- 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 _SVX_OPTGENRL_HXX +#define _SVX_OPTGENRL_HXX + +// Defines for setting the focus of a Edit via a slot from external. +#define UNKNOWN_EDIT ((sal_uInt16)0) +#define COMPANY_EDIT ((sal_uInt16)1) +#define FIRSTNAME_EDIT ((sal_uInt16)2) +#define LASTNAME_EDIT ((sal_uInt16)3) +#define STREET_EDIT ((sal_uInt16)4) +#define COUNTRY_EDIT ((sal_uInt16)5) +#define PLZ_EDIT ((sal_uInt16)6) +#define CITY_EDIT ((sal_uInt16)7) +#define STATE_EDIT ((sal_uInt16)8) +#define TITLE_EDIT ((sal_uInt16)9) +#define POSITION_EDIT ((sal_uInt16)10) +#define SHORTNAME_EDIT ((sal_uInt16)11) +#define TELPRIV_EDIT ((sal_uInt16)12) +#define TELCOMPANY_EDIT ((sal_uInt16)13) +#define FAX_EDIT ((sal_uInt16)14) +#define EMAIL_EDIT ((sal_uInt16)15) + +#endif // #ifndef _SVX_OPTGENRL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/optgrid.hxx b/include/svx/optgrid.hxx new file mode 100644 index 000000000000..300dfaabcd4a --- /dev/null +++ b/include/svx/optgrid.hxx @@ -0,0 +1,170 @@ +/* -*- 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 _SVX_OPTGRID_HXX +#define _SVX_OPTGRID_HXX + +#include <sfx2/tabdlg.hxx> +#include <svl/eitem.hxx> +#include <vcl/group.hxx> +#include <vcl/fixed.hxx> +#include <vcl/field.hxx> +#include "svx/svxdllapi.h" + +class SvxGridTabPage; + +// class SvxOptionsGrid -------------------------------------------------- + +class SVX_DLLPUBLIC SvxOptionsGrid +{ +protected: + sal_uInt32 nFldDrawX; + sal_uInt32 nFldDivisionX; + sal_uInt32 nFldDrawY; + sal_uInt32 nFldDivisionY; + sal_uInt32 nFldSnapX; + sal_uInt32 nFldSnapY; + sal_Bool bUseGridsnap:1; + sal_Bool bSynchronize:1; + sal_Bool bGridVisible:1; + sal_Bool bEqualGrid: 1; + +public: + SvxOptionsGrid(); + ~SvxOptionsGrid(); + + void SetFldDrawX( sal_uInt32 nSet){nFldDrawX = nSet;} + void SetFldDivisionX(sal_uInt32 nSet){nFldDivisionX = nSet;} + void SetFldDrawY ( sal_uInt32 nSet){nFldDrawY = nSet;} + void SetFldDivisionY(sal_uInt32 nSet){nFldDivisionY = nSet;} + void SetFldSnapX( sal_uInt32 nSet){nFldSnapX = nSet;} + void SetFldSnapY ( sal_uInt32 nSet){nFldSnapY = nSet;} + void SetUseGridSnap( sal_Bool bSet ) {bUseGridsnap = bSet;} + void SetSynchronize( sal_Bool bSet ) {bSynchronize = bSet;} + void SetGridVisible( sal_Bool bSet ) {bGridVisible = bSet;} + void SetEqualGrid( sal_Bool bSet ) {bEqualGrid = bSet;} + + sal_uInt32 GetFldDrawX( ) const { return nFldDrawX; } + sal_uInt32 GetFldDivisionX() const { return nFldDivisionX;} + sal_uInt32 GetFldDrawY ( ) const { return nFldDrawY; } + sal_uInt32 GetFldDivisionY() const { return nFldDivisionY;} + sal_uInt32 GetFldSnapX( ) const { return nFldSnapX; } + sal_uInt32 GetFldSnapY ( ) const { return nFldSnapY; } + sal_Bool GetUseGridSnap( ) const { return bUseGridsnap; } + sal_Bool GetSynchronize( ) const { return bSynchronize; } + sal_Bool GetGridVisible( ) const { return bGridVisible; } + sal_Bool GetEqualGrid() const { return bEqualGrid; } +}; + +// class SvxGridItem ----------------------------------------------------- + +class SVX_DLLPUBLIC SvxGridItem : public SvxOptionsGrid, public SfxPoolItem +{ + // #i9076# + friend class SvxGridTabPage; + +public: + SvxGridItem( sal_uInt16 _nWhich) : SfxPoolItem(_nWhich){}; + SvxGridItem( const SvxGridItem& pTestItem ); + + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + virtual int operator==( const SfxPoolItem& ) const; + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + +}; + +// class SvxGridTabPage -------------------------------------------------- + +class SVX_DLLPUBLIC SvxGridTabPage : public SfxTabPage +{ + using TabPage::ActivatePage; + using TabPage::DeactivatePage; + +public: + SvxGridTabPage( Window* pParent, const SfxItemSet& rSet ); + + static SfxTabPage* Create( Window* pParent, const SfxItemSet& rAttrSet ); + + virtual sal_Bool FillItemSet( SfxItemSet& rSet ); + virtual void Reset( const SfxItemSet& rSet ); + + virtual void ActivatePage( const SfxItemSet& rSet ); + virtual int DeactivatePage( SfxItemSet* pSet ); + +private: + CheckBox aCbxUseGridsnap; + CheckBox aCbxGridVisible; + + FixedLine aFlResolution; + FixedText aFtDrawX; + MetricField aMtrFldDrawX; + FixedText aFtDrawY; + MetricField aMtrFldDrawY; + + FixedLine aFlDivision; + FixedText aFtDivisionX; + NumericField aNumFldDivisionX; + FixedText aDivisionPointX; + + FixedText aFtDivisionY; + NumericField aNumFldDivisionY; + FixedText aDivisionPointY; + + CheckBox aCbxSynchronize; + FixedLine aGrpDrawGrid; + +protected: + //these controls are used in draw and impress + FixedLine aGrpSnap; + CheckBox aCbxSnapHelplines; + CheckBox aCbxSnapBorder; + CheckBox aCbxSnapFrame; + CheckBox aCbxSnapPoints; + FixedText aFtSnapArea; + MetricField aMtrFldSnapArea; + + FixedLine aSeparatorFL; + + FixedLine aGrpOrtho; + CheckBox aCbxOrtho; + CheckBox aCbxBigOrtho; + CheckBox aCbxRotate; + MetricField aMtrFldAngle; + FixedText aFtBezAngle; + MetricField aMtrFldBezAngle; + +private: + sal_Bool bAttrModified; + +#ifdef _SVX_OPTGRID_CXX + DECL_LINK( ClickRotateHdl_Impl, void * ); + DECL_LINK( ChangeDrawHdl_Impl, MetricField * ); + DECL_LINK( ChangeGridsnapHdl_Impl, void * ); + DECL_LINK( ChangeDivisionHdl_Impl, NumericField * ); + +#endif +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/orienthelper.hxx b/include/svx/orienthelper.hxx new file mode 100644 index 000000000000..c012f1e4d8d0 --- /dev/null +++ b/include/svx/orienthelper.hxx @@ -0,0 +1,121 @@ +/* -*- 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 SVX_ORIENTHELPER_HXX +#define SVX_ORIENTHELPER_HXX + +#include <memory> +#include <vcl/window.hxx> +#include <sfx2/itemconnect.hxx> +#include "svx/svxdllapi.h" + +class NumericField; +class CheckBox; + +namespace svx { + +class DialControl; + +// ============================================================================ + +struct OrientationHelper_Impl; + +/** A helper class that manages a DialControl and a "Stacked text" check box. + + This helper remembers a DialControl for entering a rotation angle, and a + check box for stacked text, that enables/disables other controls dependent + on its state. + + It is possible to register more controls that have to be enabled/disabled + together with this helper object (optionally dependent on the stacked text + check box), using the function AddDependentWindow(). All registered windows + are handled on a call of Enable(), or Show(), or on changing the state of + the "Stacked text" check box. + + Note: The member function SetStackedState() should be used instead of + direct modifications of the "Stacked text" check box. Otherwise the update + mechanism of registered controls will not work. + */ +class SVX_DLLPUBLIC OrientationHelper +{ +public: + /** @param rNfRotation A numeric field that will be connected to the DialControl. */ + explicit OrientationHelper( + DialControl& rCtrlDial, + NumericField& rNfRotation, + CheckBox& rCbStacked ); + + virtual ~OrientationHelper(); + + /** Registers the passed window to be enabled/disabled on call of Enable(). + @param eDisableIfStacked + STATE_CHECK: Window always disabled, if stacked text is turned on. + STATE_NOCHECK: Window always disabled, if stacked text is turned off. + STATE_DONTKNOW: Window will be enabled/disabled independent from stacked text. */ + void AddDependentWindow( Window& rWindow, TriState eDisableIfStacked = STATE_DONTKNOW ); + + /** Enables or disables the dial control and all dependent windows. */ + void Enable( bool bEnable = true ); + /** Disables the dial control and all dependent windows. */ + inline void Disable() { Enable( false ); } + + /** Shows or hides the dial control and all dependent windows. */ + void Show( bool bShow = true ); + /** Hides the dial control and all dependent windows. */ + inline void Hide() { Show( false ); } + + /** Sets the "stacked" check box to the passed state and updates dependent controls. */ + void SetStackedState( TriState eState ); + /** Returns the state of the "stacked" check box. */ + TriState GetStackedState() const; + + /** Enables/disables the "don't know" state of the "Stacked text" check box. */ + void EnableStackedTriState( bool bEnable = true ); + +private: + std::auto_ptr< OrientationHelper_Impl > mpImpl; +}; + +// ============================================================================ + +/** Wrapper for usage of the stacked attribute of an OrientationHelper in item connections. */ +class SVX_DLLPUBLIC OrientStackedWrapper : public sfx::SingleControlWrapper< OrientationHelper, bool > +{ +public: + explicit OrientStackedWrapper( OrientationHelper& rOrientHlp ); + + virtual bool IsControlDontKnow() const; + virtual void SetControlDontKnow( bool bSet ); + + virtual bool GetControlValue() const; + virtual void SetControlValue( bool bValue ); +}; + +// ---------------------------------------------------------------------------- + +/** An item<->control connection for the stacked attribute of an OrientationHelper. */ +typedef sfx::ItemControlConnection< sfx::BoolItemWrapper, OrientStackedWrapper > OrientStackedConnection; + +// ============================================================================ + +} // namespace + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/pagectrl.hxx b/include/svx/pagectrl.hxx new file mode 100644 index 000000000000..9a6e2ca90821 --- /dev/null +++ b/include/svx/pagectrl.hxx @@ -0,0 +1,164 @@ +/* -*- 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 _SVX_PAGECTRL_HXX +#define _SVX_PAGECTRL_HXX + +#include <vcl/window.hxx> +#include "svx/svxdllapi.h" + +// forward --------------------------------------------------------------- + +class SvxBoxItem; +struct PageWindow_Impl; + +// class SvxPageWindow --------------------------------------------------- + +class SVX_DLLPUBLIC SvxPageWindow : public Window +{ + using Window::GetBorder; + +private: + Size aWinSize; + Size aSize; + + long nTop; + long nBottom; + long nLeft; + long nRight; + Color aColor; + + PageWindow_Impl* pImpl; + + long nHdLeft; + long nHdRight; + long nHdDist; + long nHdHeight; + Color aHdColor; + SvxBoxItem* pHdBorder; + + long nFtLeft; + long nFtRight; + long nFtDist; + long nFtHeight; + Color aFtColor; + SvxBoxItem* pFtBorder; + + sal_Bool bFooter :1; + sal_Bool bHeader :1; + sal_Bool bTable :1; + sal_Bool bHorz :1; + sal_Bool bVert :1; + + sal_uInt16 eUsage; + + String aLeftText; + String aRightText; + +protected: + virtual void Paint( const Rectangle& rRect ); + + virtual void DrawPage( const Point& rPoint, + const sal_Bool bSecond, + const sal_Bool bEnabled ); + +public: + SvxPageWindow( Window* pParent, const ResId& rId ); + SvxPageWindow( Window* pParent ); + ~SvxPageWindow(); + + void SetWidth( long nW ) { aSize.Width() = nW; } + void SetHeight( long nH ) { aSize.Height() = nH; } + + void SetSize( const Size& rSz ) { aSize = rSz; } + const Size& GetSize() const { return aSize; } + + void SetTop( long nNew ) { nTop = nNew; } + void SetBottom( long nNew ) { nBottom = nNew; } + void SetLeft( long nNew ) { nLeft = nNew; } + void SetRight( long nNew ) { nRight = nNew; } + void SetColor( const Color& rNew ) { aColor = rNew; } + void SetBorder( const SvxBoxItem& rNew ); + void SetBitmap( Bitmap* pBmp ); + + long GetTop() const { return nTop; } + long GetBottom() const { return nBottom;} + long GetLeft() const { return nLeft; } + long GetRight() const { return nRight; } + + const Color& GetColor() const { return aColor; } + const SvxBoxItem& GetBorder() const; + + void SetHdLeft( long nNew ) { nHdLeft = nNew; } + void SetHdRight( long nNew ) { nHdRight = nNew; } + void SetHdDist( long nNew ) { nHdDist = nNew; } + void SetHdHeight( long nNew ) { nHdHeight = nNew; } + void SetHdColor( const Color& aNew ) { aHdColor = aNew; } + void SetHdBorder( const SvxBoxItem& rNew ); + + long GetHdLeft() const { return nHdLeft; } + long GetHdRight() const { return nHdRight; } + long GetHdDist() const { return nHdDist; } + long GetHdHeight() const { return nHdHeight;} + + const Color& GetHdColor() const { return aHdColor; } + const SvxBoxItem& GetHdBorder() const { return *pHdBorder; } + + void SetFtLeft( long nNew ) { nFtLeft = nNew; } + void SetFtRight( long nNew ) { nFtRight = nNew; } + void SetFtDist( long nNew ) { nFtDist = nNew; } + void SetFtHeight( long nNew ) { nFtHeight = nNew; } + void SetFtColor( const Color& aNew ) { aFtColor = aNew; } + void SetFtBorder( const SvxBoxItem& rNew ); + + long GetFtLeft() const { return nFtLeft; } + long GetFtRight() const { return nFtRight; } + long GetFtDist() const { return nFtDist; } + long GetFtHeight() const { return nFtHeight;} + + const Color& GetFtColor() const { return aFtColor; } + const SvxBoxItem& GetFtBorder() const { return *pFtBorder; } + + void SetUsage( sal_uInt16 eU ) { eUsage = eU; } + sal_uInt16 GetUsage() const { return eUsage;} + + void SetHeader( sal_Bool bNew ) { bHeader = bNew; } + sal_Bool GetHeader() const { return bHeader;} + void SetFooter( sal_Bool bNew ) { bFooter = bNew; } + sal_Bool GetFooter() const { return bFooter;} + + void SetTable( sal_Bool bNew ) { bTable = bNew; } + sal_Bool GetTable() const { return bTable;} + void SetHorz( sal_Bool bNew ) { bHorz = bNew; } + sal_Bool GetHorz() const { return bHorz;} + void SetVert( sal_Bool bNew ) { bVert = bNew; } + sal_Bool GetVert() const { return bVert;} + + void EnableFrameDirection(sal_Bool bEnable); + //uses enum SvxFrameDirection + void SetFrameDirection(sal_Int32 nFrameDirection); + + void ResetBackground(); + + virtual Size GetOptimalSize() const; +}; + +#endif // #ifndef _SVX_PAGECTRL_HXX + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/pageitem.hxx b/include/svx/pageitem.hxx new file mode 100644 index 000000000000..48d5dd98f04d --- /dev/null +++ b/include/svx/pageitem.hxx @@ -0,0 +1,134 @@ +/* -*- 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 _SVX_PAGEITEM_HXX +#define _SVX_PAGEITEM_HXX + +#include <svl/poolitem.hxx> +#include <tools/string.hxx> +#include "svx/svxdllapi.h" + + +enum SvxNumType +{ + SVX_CHARS_UPPER_LETTER, + SVX_CHARS_LOWER_LETTER, + SVX_ROMAN_UPPER, + SVX_ROMAN_LOWER, + SVX_ARABIC, + SVX_NUMBER_NONE, + SVX_CHAR_SPECIAL, + SVX_PAGEDESC +}; + +/*-------------------------------------------------------------------- + usage of the page + --------------------------------------------------------------------*/ + +enum SvxPageUsage +{ + SVX_PAGE_LEFT = 0x0001, + SVX_PAGE_RIGHT = 0x0002, + SVX_PAGE_ALL = 0x0003, + SVX_PAGE_MIRROR = 0x0007, + SVX_PAGE_HEADERSHARE = 0x0040, + SVX_PAGE_FOOTERSHARE = 0x0080 +}; + +/*-------------------------------------------------------------------- + parts of the page description + --------------------------------------------------------------------*/ + +/* +This item describes a page attribute (name of the template, enumeration, +portait or landscape, layout) +*/ + +class SVX_DLLPUBLIC SvxPageItem: public SfxPoolItem +{ +private: + String aDescName; // name of the template + SvxNumType eNumType; // enumeration + sal_Bool bLandscape; // Portrait / Landscape + sal_uInt16 eUse; // Layout + +public: + + TYPEINFO(); + SvxPageItem( const sal_uInt16 nId ); + SvxPageItem( const SvxPageItem& rItem ); + + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + virtual int operator==( const SfxPoolItem& ) const; + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) 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 ) const; + virtual SvStream& Store( SvStream& , sal_uInt16 nItemVersion ) const; + + // orientation + sal_uInt16 GetPageUsage() const { return eUse; } + void SetPageUsage(sal_uInt16 eU) { eUse= eU; } + + sal_Bool IsLandscape() const { return bLandscape; } + void SetLandscape(sal_Bool bL) { bLandscape = bL; } + + // enumeration + SvxNumType GetNumType() const { return eNumType; } + void SetNumType(SvxNumType eNum) { eNumType = eNum; } + + // name of the descriptor + const String& GetDescName() const { return aDescName; } + void SetDescName(const String& rStr) { aDescName = rStr; } +}; + + + +/*-------------------------------------------------------------------- + container for header/footer attributes + --------------------------------------------------------------------*/ + +class SVX_DLLPUBLIC SvxSetItem: public SfxSetItem +{ +public: + SvxSetItem( const sal_uInt16 nId, const SfxItemSet& rSet ); + SvxSetItem( const SvxSetItem& rItem ); + SvxSetItem( const sal_uInt16 nId, SfxItemSet* pSet ); + + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual SfxPoolItem* Create( SvStream&, sal_uInt16 nVersion ) const; + virtual SvStream& Store( SvStream&, sal_uInt16 nItemVersion ) const; +}; + + + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/paraprev.hxx b/include/svx/paraprev.hxx new file mode 100644 index 000000000000..ebef6399fcac --- /dev/null +++ b/include/svx/paraprev.hxx @@ -0,0 +1,102 @@ +/* -*- 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 _SVX_PARAPREV_HXX +#define _SVX_PARAPREV_HXX + +#include <vcl/window.hxx> +#include <editeng/svxenum.hxx> +#include "svx/svxdllapi.h" + +// enum ------------------------------------------------------------------ + +enum SvxPrevLineSpace +{ + SVX_PREV_LINESPACE_1 = 0, + SVX_PREV_LINESPACE_15, + SVX_PREV_LINESPACE_2, + SVX_PREV_LINESPACE_PROP, + SVX_PREV_LINESPACE_MIN, + SVX_PREV_LINESPACE_DURCH +}; + +// class SvxParaPrevWindow ----------------------------------------------- + +class SVX_DLLPUBLIC SvxParaPrevWindow : public Window +{ + using Window::Draw; +private: + Size aWinSize; + Size aSize; + + // indentation + long nLeftMargin; + long nRightMargin; + short nFirstLineOfst; + // distances + sal_uInt16 nUpper; + sal_uInt16 nLower; + // adjustment + SvxAdjust eAdjust; + // last line in justification + SvxAdjust eLastLine; + // line distance + SvxPrevLineSpace eLine; + sal_uInt16 nLineVal; + + String aText; + Rectangle Lines[9]; + +protected: + virtual void Paint( const Rectangle& rRect ); + + void DrawParagraph( sal_Bool bAll ); + +public: + SvxParaPrevWindow( Window* pParent, const ResId& rId ); + + void SetFirstLineOfst( short nNew ) { nFirstLineOfst = nNew; } + void SetLeftMargin( long nNew ) { nLeftMargin = nNew; } + void SetRightMargin( long nNew ) { nRightMargin = nNew; } + void SetUpper( sal_uInt16 nNew ) { nUpper = nNew; } + void SetLower( sal_uInt16 nNew ) { nLower = nNew; } + void SetAdjust( SvxAdjust eNew ) { eAdjust = eNew; } + void SetLastLine( SvxAdjust eNew ) { eLastLine = eNew; } + void SetLineSpace( SvxPrevLineSpace eNew, sal_uInt16 nNew = 0 ) + { eLine = eNew; nLineVal = nNew; } + void SetText( const OUString& rStr ) { aText = rStr; } + void SetSize( Size aNew ) { aSize = aNew; } + + short GetFirstLineOfst() const { return nFirstLineOfst; } + long GetLeftMargin() const { return nLeftMargin; } + long GetRightMargin() const { return nRightMargin; } + sal_uInt16 GetUpper() const { return nUpper; } + sal_uInt16 GetLower() const { return nLower; } + SvxAdjust GetAdjust() const { return eAdjust; } + + SvxPrevLineSpace GetLineEnum() const { return eLine; } + sal_uInt16 GetLineValue() const { return nLineVal; } + OUString GetText() const { return aText; } + Size GetSize() const { return aSize; } + + void Draw( sal_Bool bAll ) { DrawParagraph( bAll ); } +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/passwd.hxx b/include/svx/passwd.hxx new file mode 100644 index 000000000000..b59898db66f7 --- /dev/null +++ b/include/svx/passwd.hxx @@ -0,0 +1,71 @@ +/* -*- 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 _SVX_PASSWD_HXX +#define _SVX_PASSWD_HXX + +#include <sfx2/basedlgs.hxx> + +#include <vcl/fixed.hxx> + +#include <vcl/edit.hxx> + +#include <vcl/button.hxx> +#include "svx/svxdllapi.h" + +// class SvxPasswordDialog ----------------------------------------------- + +class SVX_DLLPUBLIC SvxPasswordDialog : public SfxModalDialog +{ +private: + FixedLine aOldFL; + FixedText aOldPasswdFT; + Edit aOldPasswdED; + FixedLine aNewFL; + FixedText aNewPasswdFT; + Edit aNewPasswdED; + FixedText aRepeatPasswdFT; + Edit aRepeatPasswdED; + OKButton aOKBtn; + CancelButton aEscBtn; + HelpButton aHelpBtn; + + String aOldPasswdErrStr; + String aRepeatPasswdErrStr; + + Link aCheckPasswordHdl; + + sal_Bool bEmpty; + + DECL_LINK(ButtonHdl, void *); + DECL_LINK(EditModifyHdl, void *); + +public: + SvxPasswordDialog( Window* pParent, sal_Bool bAllowEmptyPasswords = sal_False, sal_Bool bDisableOldPassword = sal_False ); + ~SvxPasswordDialog(); + + String GetOldPassword() const { return aOldPasswdED.GetText(); } + String GetNewPassword() const { return aNewPasswdED.GetText(); } + + void SetCheckPasswordHdl( const Link& rLink ) { aCheckPasswordHdl = rLink; } +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/pfiledlg.hxx b/include/svx/pfiledlg.hxx new file mode 100644 index 000000000000..e472349a6c53 --- /dev/null +++ b/include/svx/pfiledlg.hxx @@ -0,0 +1,51 @@ +/* -*- 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 _SVX_PFILEDLG_HXX +#define _SVX_PFILEDLG_HXX + +#include <sfx2/filedlghelper.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* Filedialog to insert Plugin-Fileformats +|* +\************************************************************************/ + +class SVX_DLLPUBLIC SvxPluginFileDlg +{ +private: + sfx2::FileDialogHelper maFileDlg; + +public: + // with nKind = SID_INSERT_SOUND or + // nKind = SID_INSERT_VIDEO + SvxPluginFileDlg (Window *pParent, sal_uInt16 nKind ); + ~SvxPluginFileDlg (); + + ErrCode Execute(); + String GetPath() const; + + void SetContext( sfx2::FileDialogHelper::Context eNewContext ); +}; + +#endif // _SVX_PFILEDLG_HXX + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/polygn3d.hxx b/include/svx/polygn3d.hxx new file mode 100644 index 000000000000..843eac5c288a --- /dev/null +++ b/include/svx/polygn3d.hxx @@ -0,0 +1,72 @@ +/* -*- 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 _E3D_POLYGON3D_HXX +#define _E3D_POLYGON3D_HXX + +#include <svx/obj3d.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC E3dPolygonObj : public E3dCompoundObject +{ +private: + // parameters + basegfx::B3DPolyPolygon aPolyPoly3D; + basegfx::B3DPolyPolygon aPolyNormals3D; + basegfx::B2DPolyPolygon aPolyTexture2D; + sal_Bool bLineOnly; + + SVX_DLLPRIVATE void CreateDefaultNormals(); + SVX_DLLPRIVATE void CreateDefaultTexture(); + +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + +public: + void SetPolyPolygon3D(const basegfx::B3DPolyPolygon& rNewPolyPoly3D); + void SetPolyNormals3D(const basegfx::B3DPolyPolygon& rNewPolyPoly3D); + void SetPolyTexture2D(const basegfx::B2DPolyPolygon& rNewPolyPoly2D); + + TYPEINFO(); + + E3dPolygonObj( + E3dDefaultAttributes& rDefault, + const basegfx::B3DPolyPolygon& rPolyPoly3D, + sal_Bool bLinOnly=sal_False); + + E3dPolygonObj(); + virtual ~E3dPolygonObj(); + + const basegfx::B3DPolyPolygon& GetPolyPolygon3D() const { return aPolyPoly3D; } + const basegfx::B3DPolyPolygon& GetPolyNormals3D() const { return aPolyNormals3D; } + const basegfx::B2DPolyPolygon& GetPolyTexture2D() const { return aPolyTexture2D; } + + virtual sal_uInt16 GetObjIdentifier() const; + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + + virtual E3dPolygonObj* Clone() const; + + // LineOnly? + sal_Bool GetLineOnly() { return bLineOnly; } + void SetLineOnly(sal_Bool bNew); +}; + +#endif // _E3D_POLYGON3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/polypolygoneditor.hxx b/include/svx/polypolygoneditor.hxx new file mode 100644 index 000000000000..94fabbe4e292 --- /dev/null +++ b/include/svx/polypolygoneditor.hxx @@ -0,0 +1,68 @@ +/* -*- 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 _SDR_POLYPOLYGONEDITOR_HXX_ +#define _SDR_POLYPOLYGONEDITOR_HXX_ + +#include "svx/svxdllapi.h" + +#include "svx/ipolypolygoneditorcontroller.hxx" + +#include <basegfx/polygon/b2dpolypolygon.hxx> +#include <set> + +namespace sdr +{ + +/** this class implements some helper functions to edit a B2DPolyPolygon */ +class SVX_DLLPUBLIC PolyPolygonEditor +{ +public: + PolyPolygonEditor( const basegfx::B2DPolyPolygon& rPolyPolygon, bool bClosed ); + + const basegfx::B2DPolyPolygon& GetPolyPolygon() const { return maPolyPolygon; } + + /** returns true if the B2DPolyPolygon was changed. + Warning: B2DPolyPolygon can be empty after this operation! + */ + bool DeletePoints( const std::set< sal_uInt16 >& rAbsPoints ); + + /** returns true if the B2DPolyPolygon was changed. + */ + bool SetSegmentsKind(SdrPathSegmentKind eKind, const std::set< sal_uInt16 >& rAbsPoints); + + /** returns true if the B2DPolyPolygon was changed. + */ + bool SetPointsSmooth( basegfx::B2VectorContinuity eFlags, const std::set< sal_uInt16 >& rAbsPoints); + + /** Outputs the realative position ( polygon number and point number in that polygon ) from the absolut point number. + False is returned if the given absolute point is greater not inside this B2DPolyPolygon + */ + static bool GetRelativePolyPoint( const basegfx::B2DPolyPolygon& rPoly, sal_uInt32 nAbsPnt, sal_uInt32& rPolyNum, sal_uInt32& rPointNum ); + +private: + basegfx::B2DPolyPolygon maPolyPolygon; + bool mbIsClosed; +}; + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/polysc3d.hxx b/include/svx/polysc3d.hxx new file mode 100644 index 000000000000..e25a0bdb36b1 --- /dev/null +++ b/include/svx/polysc3d.hxx @@ -0,0 +1,45 @@ +/* -*- 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 _E3D_POLYSC3D_HXX +#define _E3D_POLYSC3D_HXX + +#include <svx/svdpage.hxx> +#include <svx/scene3d.hxx> + +/************************************************************************* +|* +|* 3D scene displayed through 2D polygons +|* +\************************************************************************/ + +class SVX_DLLPUBLIC E3dPolyScene : public E3dScene +{ +public: + TYPEINFO(); + E3dPolyScene(); + E3dPolyScene(E3dDefaultAttributes& rDefault); + + virtual sal_uInt16 GetObjIdentifier() const; + virtual E3dPolyScene* Clone() const; +}; + +#endif // _E3D_POLYSC3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/postattr.hxx b/include/svx/postattr.hxx new file mode 100644 index 000000000000..9bdd2698551e --- /dev/null +++ b/include/svx/postattr.hxx @@ -0,0 +1,122 @@ +/* -*- 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 _SVX_POSTATTR_HXX +#define _SVX_POSTATTR_HXX + +#include <svl/stritem.hxx> +#include "svx/svxdllapi.h" + +// class SvxPostItAuthorItem --------------------------------------------- + + + +/* +The author shorthand symbol of a note +*/ + +class SVX_DLLPUBLIC SvxPostItAuthorItem: public SfxStringItem +{ +public: + TYPEINFO(); + + SvxPostItAuthorItem( sal_uInt16 nWhich ); + + SvxPostItAuthorItem( const String& rAuthor, sal_uInt16 nWhich ); + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + inline SvxPostItAuthorItem& operator=( const SvxPostItAuthorItem& rAuthor ) + { + SetValue( rAuthor.GetValue() ); + return *this; + } +}; + + +// class SvxPostItDateItem ----------------------------------------------- + + + +/* +The date of a note +*/ + +class SVX_DLLPUBLIC SvxPostItDateItem: public SfxStringItem +{ +public: + TYPEINFO(); + + SvxPostItDateItem( sal_uInt16 nWhich ); + + SvxPostItDateItem( const String& rDate, sal_uInt16 nWhich ); + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + inline SvxPostItDateItem& operator=( const SvxPostItDateItem& rDate ) + { + SetValue( rDate.GetValue() ); + return *this; + } +}; + + +// class SvxPostItTextItem ----------------------------------------------- + + + +/* +The text of a note +*/ + +class SVX_DLLPUBLIC SvxPostItTextItem: public SfxStringItem +{ +public: + TYPEINFO(); + + SvxPostItTextItem( sal_uInt16 nWhich ); + + SvxPostItTextItem( const String& rText, sal_uInt16 nWhich ); + // "pure virtual methods" from SfxPoolItem + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + inline SvxPostItTextItem& operator=( const SvxPostItTextItem& rText ) + { + SetValue( rText.GetValue() ); + return *this; + } +}; + + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/prtqry.hxx b/include/svx/prtqry.hxx new file mode 100644 index 000000000000..558301a3c978 --- /dev/null +++ b/include/svx/prtqry.hxx @@ -0,0 +1,34 @@ +/* -*- 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 _SVX_PRTQRY_HXX +#define _SVX_PRTQRY_HXX + +#include <vcl/msgbox.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC SvxPrtQryBox : public MessBox +{ +public: + SvxPrtQryBox(Window* pParent); + ~SvxPrtQryBox(); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/pszctrl.hxx b/include/svx/pszctrl.hxx new file mode 100644 index 000000000000..a4280844099c --- /dev/null +++ b/include/svx/pszctrl.hxx @@ -0,0 +1,51 @@ +/* -*- 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 _SVX_PSZCTRL_HXX +#define _SVX_PSZCTRL_HXX + +#include <sfx2/stbitem.hxx> +#include "svx/svxdllapi.h" + +// forward --------------------------------------------------------------- + +class SvxSizeItem; +struct SvxPosSizeStatusBarControl_Impl; + +// class SvxPosSizeToolBoxControl ---------------------------------------- + +class SVX_DLLPUBLIC SvxPosSizeStatusBarControl : public SfxStatusBarControl +{ +private: + SvxPosSizeStatusBarControl_Impl* pImp; + SVX_DLLPRIVATE String GetMetricStr_Impl( long nVal ); +public: + SFX_DECL_STATUSBAR_CONTROL(); + + SvxPosSizeStatusBarControl( sal_uInt16 nSlotId, sal_uInt16 nId, StatusBar& rStb ); + ~SvxPosSizeStatusBarControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + virtual void Paint( const UserDrawEvent& rEvt ); + virtual void Command( const CommandEvent& rCEvt ); +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/rectenum.hxx b/include/svx/rectenum.hxx new file mode 100644 index 000000000000..4e6c5486f2b6 --- /dev/null +++ b/include/svx/rectenum.hxx @@ -0,0 +1,40 @@ +/* -*- 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 _SVX_RECTENUM_HXX +#define _SVX_RECTENUM_HXX + +// enum ------------------------------------------------------------------ + +enum RECT_POINT +{ + RP_LT, RP_MT, RP_RT, RP_LM, RP_MM, RP_RM, RP_LB, RP_MB, RP_RB +}; + +enum CTL_STYLE +{ + CS_RECT, + CS_LINE, + CS_ANGLE, + CS_SHADOW +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/relfld.hxx b/include/svx/relfld.hxx new file mode 100644 index 000000000000..fa544c2d00a5 --- /dev/null +++ b/include/svx/relfld.hxx @@ -0,0 +1,55 @@ +/* -*- 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 _SVX_RELFLD_HXX +#define _SVX_RELFLD_HXX + +#include <vcl/field.hxx> +#include "svx/svxdllapi.h" + + +// class SvxRelativeField ------------------------------------------------ + +class SVX_DLLPUBLIC SvxRelativeField : public MetricField +{ +private: + sal_uInt16 nRelMin; + sal_uInt16 nRelMax; + sal_uInt16 nRelStep; + sal_Bool bRelativeMode; + sal_Bool bRelative; + sal_Bool bNegativeEnabled; + +protected: + void Modify(); + +public: + SvxRelativeField( Window* pParent, const ResId& rResId ); + + void EnableRelativeMode( sal_uInt16 nMin = 50, sal_uInt16 nMax = 150, + sal_uInt16 nStep = 5 ); + sal_Bool IsRelativeMode() const { return bRelativeMode; } + void SetRelative( sal_Bool bRelative = sal_False ); + sal_Bool IsRelative() const { return bRelative; } + void EnableNegativeMode() {bNegativeEnabled = sal_True;} +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/rotmodit.hxx b/include/svx/rotmodit.hxx new file mode 100644 index 000000000000..f945280fc2b2 --- /dev/null +++ b/include/svx/rotmodit.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SVX_ROTMODIT_HXX +#define _SVX_ROTMODIT_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +//---------------------------------------------------------------------------- +// Alignment with rotated text + +enum SvxRotateMode +{ + SVX_ROTATE_MODE_STANDARD, + SVX_ROTATE_MODE_TOP, + SVX_ROTATE_MODE_CENTER, + SVX_ROTATE_MODE_BOTTOM +}; + +class SVX_DLLPUBLIC SvxRotateModeItem: public SfxEnumItem +{ +public: + TYPEINFO(); + + SvxRotateModeItem( SvxRotateMode eMode=SVX_ROTATE_MODE_STANDARD, sal_uInt16 nWhich=0); + SvxRotateModeItem( const SvxRotateModeItem& rItem ); + ~SvxRotateModeItem(); + + virtual sal_uInt16 GetValueCount() const; + virtual String GetValueText( sal_uInt16 nVal ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + virtual SfxPoolItem* Create(SvStream &, sal_uInt16) const; + virtual sal_uInt16 GetVersion( sal_uInt16 nFileVersion ) const; + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString& rText, const IntlWrapper * = 0 ) 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 ); +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/rubydialog.hxx b/include/svx/rubydialog.hxx new file mode 100644 index 000000000000..f1538a32c3ec --- /dev/null +++ b/include/svx/rubydialog.hxx @@ -0,0 +1,177 @@ +/* -*- 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 _SVX_RUBYDLG_HXX_ +#define _SVX_RUBYDLG_HXX_ + +#include <sfx2/childwin.hxx> +#include <sfx2/basedlgs.hxx> +#include <vcl/layout.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/fixed.hxx> +#include <vcl/button.hxx> +#include <vcl/edit.hxx> +#include <vcl/scrbar.hxx> +#include <com/sun/star/uno/Reference.h> +#include "svx/svxdllapi.h" + +namespace com{namespace sun{namespace star{ + namespace view{ + class XSelectionChangeListener; + } +}}} + + +class SvxRubyDialog; +class RubyPreview : public Window +{ +protected: + virtual void Paint( const Rectangle& rRect ); + SvxRubyDialog* m_pParentDlg; + +public: + RubyPreview(Window *pParent); + void setRubyDialog(SvxRubyDialog* pParentDlg) + { + m_pParentDlg = pParentDlg; + } + virtual Size GetOptimalSize() const; +}; + +class SVX_DLLPUBLIC SvxRubyChildWindow : public SfxChildWindow +{ + public: + + SvxRubyChildWindow( Window*, sal_uInt16, SfxBindings*, SfxChildWinInfo* ); + + SFX_DECL_CHILDWINDOW( SvxRubyChildWindow ); + +}; +class SvxRubyData_Impl; +class RubyEdit : public Edit +{ + Link aScrollHdl; + Link aJumpHdl; + virtual void GetFocus(); + virtual long PreNotify( NotifyEvent& rNEvt ); +public: + RubyEdit(Window* pParent, const ResId& rResId) + : Edit(pParent, rResId) + { + } + RubyEdit(Window* pParent) + : Edit(pParent, WB_BORDER) + { + } + void SetScrollHdl(Link& rLink) {aScrollHdl = rLink;} + void SetJumpHdl(Link& rLink) {aJumpHdl = rLink;} +}; + + +class SvxRubyDialog : public SfxModelessDialog +{ + using Window::SetText; + using Window::GetText; + + friend class RubyPreview; + + FixedText* m_pLeftFT; + FixedText* m_pRightFT; + RubyEdit* m_pLeft1ED; + RubyEdit* m_pRight1ED; + RubyEdit* m_pLeft2ED; + RubyEdit* m_pRight2ED; + RubyEdit* m_pLeft3ED; + RubyEdit* m_pRight3ED; + RubyEdit* m_pLeft4ED; + RubyEdit* m_pRight4ED; + + RubyEdit* aEditArr[8]; + VclScrolledWindow* m_pScrolledWindow; + ScrollBar* m_pScrollSB; + + ListBox* m_pAdjustLB; + + ListBox* m_pPositionLB; + + FixedText* m_pCharStyleFT; + ListBox* m_pCharStyleLB; + PushButton* m_pStylistPB; + + RubyPreview* m_pPreviewWin; + + PushButton* m_pApplyPB; + PushButton* m_pClosePB; + + long nLastPos; + long nCurrentEdit; + + sal_Bool bModified; + + com::sun::star::uno::Reference<com::sun::star::view::XSelectionChangeListener> xImpl; + SfxBindings* pBindings; + SvxRubyData_Impl* pImpl; + + DECL_LINK(ApplyHdl_Impl, void *); + DECL_LINK(CloseHdl_Impl, void *); + DECL_LINK(StylistHdl_Impl, void *); + DECL_LINK(ScrollHdl_Impl, ScrollBar*); + DECL_LINK(PositionHdl_Impl, ListBox*); + DECL_LINK(AdjustHdl_Impl, ListBox*); + DECL_LINK(CharStyleHdl_Impl, void *); + DECL_LINK(EditModifyHdl_Impl, Edit*); + DECL_LINK(EditScrollHdl_Impl, sal_Int32*); + DECL_LINK(EditJumpHdl_Impl, sal_Int32*); + + void SetText(sal_Int32 nPos, Edit& rLeft, Edit& rRight); + void GetText(); + void ClearCharStyleList(); + void AssertOneEntry(); + + void Update(); + virtual sal_Bool Close(); + + long GetLastPos() const {return nLastPos;} + void SetLastPos(long nSet) {nLastPos = nSet;} + + sal_Bool IsModified() const {return bModified;} + void SetModified(sal_Bool bSet) {bModified = bSet;} + + void EnableControls(bool bEnable); + + void GetCurrentText(String& rBase, String& rRuby); + + void UpdateColors( void ); +protected: + virtual void DataChanged( const DataChangedEvent& rDCEvt ); +public: + + SvxRubyDialog(SfxBindings *pBindings, SfxChildWindow *pCW, + Window* pParent); + virtual ~SvxRubyDialog(); + + virtual void Activate(); + virtual void Deactivate(); +}; + +#endif // _SVX_RUBYDLG_HXX_ + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/ruler.hxx b/include/svx/ruler.hxx new file mode 100644 index 000000000000..aa18893ec3cc --- /dev/null +++ b/include/svx/ruler.hxx @@ -0,0 +1,259 @@ +/* -*- 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 _SVX_RULER_HXX +#define _SVX_RULER_HXX + +#include <vcl/menu.hxx> +#include <svtools/ruler.hxx> +#include <svl/lstner.hxx> +#include "svx/svxdllapi.h" + +class SvxProtectItem; +class SvxRulerItem; +class SfxBindings; +class SvxLongLRSpaceItem; +class SvxLongULSpaceItem; +class SvxTabStopItem; +class SvxLRSpaceItem; +class SvxPagePosSizeItem; +class SvxColumnItem; +class SfxRectangleItem; +class SvxObjectItem; +class SfxBoolItem; +struct SvxRuler_Impl; + +class SVX_DLLPUBLIC SvxRuler: public Ruler, public SfxListener +{ + friend class SvxRulerItem; + using Window::Notify; + + SvxRulerItem **pCtrlItem; + SvxLongLRSpaceItem *pLRSpaceItem; // left and right edge + SfxRectangleItem *pMinMaxItem; // maxima for dragging + SvxLongULSpaceItem *pULSpaceItem; // upper and lower edge + SvxTabStopItem *pTabStopItem; // tab stops + SvxLRSpaceItem *pParaItem; // paragraphs + SvxLRSpaceItem *pParaBorderItem; // border distance + SvxPagePosSizeItem *pPagePosItem; // page distance to the rule + SvxColumnItem *pColumnItem; // columns + SvxObjectItem *pObjectItem; // object + Window *pEditWin; + SvxRuler_Impl *pRuler_Imp; + sal_Bool bAppSetNullOffset :1; + sal_Bool bHorz :1; + long lLogicNullOffset; // in logic coordinates + long lAppNullOffset; // in logic coordinates + long lMinFrame; // minimal frame width in pixels + long lInitialDragPos; + sal_uInt16 nFlags; + enum { + NONE = 0x0000, + DRAG_OBJECT = 0x0001, + // reduce size of the last column, shift + DRAG_OBJECT_SIZE_LINEAR = 0x0002, + DRAG_OBJECT_SIZE_PROPORTIONAL = 0x0004, // proportional, Ctrl + // only current line (table; Shift-Ctrl) + DRAG_OBJECT_ACTLINE_ONLY = 0x0008, + // currently same key assignment + DRAG_OBJECT_LEFT_INDENT_ONLY = DRAG_OBJECT_SIZE_PROPORTIONAL + } + nDragType; + sal_uInt16 nDefTabType; + sal_uInt16 nTabCount; + sal_uInt16 nTabBufSize; + long lDefTabDist; + long lTabPos; + RulerTab *pTabs; // tab positions in pixel + RulerIndent *pIndents; // paragraph margins in pixel + RulerBorder *pBorders; + sal_uInt16 nBorderCount; + RulerBorder *pObjectBorders; + SfxBindings *pBindings; + long nDragOffset; + long nMaxLeft; + long nMaxRight; + sal_Bool bValid; + sal_Bool bListening; + sal_Bool bActive; + void StartListening_Impl(); + long GetCorrectedDragPos( sal_Bool bLeft = sal_True, sal_Bool bRight = sal_True ); + void DrawLine_Impl(long &lTabPos, int, sal_Bool Hori=sal_True); + sal_uInt16 GetObjectBordersOff(sal_uInt16 nIdx) const; + + // page borders or surrounding frame + void UpdateFrame(const SvxLongLRSpaceItem *); + void UpdateFrame(const SvxLongULSpaceItem *); + void UpdateFrameMinMax(const SfxRectangleItem *); + // paragraph indentations + void UpdatePara(const SvxLRSpaceItem *); + // Border distance + void UpdateParaBorder(const SvxLRSpaceItem *); + // Tabs + void Update(const SvxTabStopItem *); + // page position and width + void Update(const SvxPagePosSizeItem *); + // columns + void Update(const SvxColumnItem *, sal_uInt16 nSID); + // object selection + void Update(const SvxObjectItem *); + // protect + void Update( const SvxProtectItem* ); + // left-to-right text + void UpdateTextRTL( const SfxBoolItem* ); + // paragraph indentations + void UpdatePara(); + void UpdateTabs(); + void UpdatePage(); + void UpdateFrame(); + void UpdateColumns(); + void UpdateObject(); + + long PixelHAdjust(long lPos, long lPos2) const; + long PixelVAdjust(long lPos, long lPos2) const; + long PixelAdjust(long lPos, long lPos2) const; + + long ConvertHPosPixel(long lPos) const; + long ConvertVPosPixel(long lPos) const; + long ConvertHSizePixel(long lSize) const; + long ConvertVSizePixel(long lSize) const; + + long ConvertPosPixel(long lPos) const; + long ConvertSizePixel(long lSize) const; + + long ConvertHPosLogic(long lPos) const; + long ConvertVPosLogic(long lPos) const; + long ConvertHSizeLogic(long lSize) const; + long ConvertVSizeLogic(long lSize) const; + + long ConvertPosLogic(long lPos) const; + long ConvertSizeLogic(long lSize) const; + + long GetFirstLineIndent() const; + long GetLeftIndent() const; + long GetRightIndent() const; + long GetLogicRightIndent() const; + + inline long GetLeftFrameMargin() const; + long GetRightFrameMargin() const; + + void CalcMinMax(); + + void EvalModifier(); + void DragMargin1(); + //adjust the left margin either after DragMargin1() or after DragBorders() + void AdjustMargin1(long lDiff); + void DragMargin2(); + void DragIndents(); + void DragTabs(); + void DragBorders(); + void DragObjectBorder(); + + void ApplyMargins(); + void ApplyIndents(); + void ApplyTabs(); + void ApplyBorders(); + void ApplyObject(); + + long GetFrameLeft() const; + void SetFrameLeft(long); + + long GetLeftMin() const; + long GetRightMax() const; + + DECL_LINK( TabMenuSelect, Menu * ); + DECL_LINK( MenuSelect, Menu * ); + void PrepareProportional_Impl(RulerType); + + sal_uInt16 GetNextVisible(sal_uInt16 nColumn); + sal_uInt16 GetPrevVisible(sal_uInt16 nColumn); + +enum UpdateType { + MOVE_ALL, + MOVE_LEFT, + MOVE_RIGHT + }; + void UpdateParaContents_Impl(long lDiff, UpdateType = MOVE_ALL); + +protected: + virtual void Command( const CommandEvent& rCEvt ); + virtual void Click(); + virtual long StartDrag(); + virtual void Drag(); + virtual void EndDrag(); + virtual void ExtraDown(); + virtual void MouseMove( const MouseEvent& rMEvt ); + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + virtual void Update(); + + // calculation of boundary values for object borders + // values refer to the page + virtual sal_Bool CalcLimits(long &nMax1, long &nMax2, sal_Bool bFirst) const; + sal_Bool IsActLastColumn( + sal_Bool bForceDontConsiderHidden = sal_False, sal_uInt16 nAct=USHRT_MAX) const ; + sal_Bool IsActFirstColumn( + sal_Bool bForceDontConsiderHidden = sal_False, sal_uInt16 nAct=USHRT_MAX) const; + sal_uInt16 GetActLeftColumn( + sal_Bool bForceDontConsiderHidden = sal_False, sal_uInt16 nAct=USHRT_MAX ) const; + sal_uInt16 GetActRightColumn ( + sal_Bool bForceDontConsiderHidden = sal_False, sal_uInt16 nAct=USHRT_MAX ) const; + long CalcPropMaxRight(sal_uInt16 nCol=USHRT_MAX) const; + long GetPageWidth() const; + +public: +#define SVXRULER_SUPPORT_TABS 0x0001 +#define SVXRULER_SUPPORT_PARAGRAPH_MARGINS 0x0002 +#define SVXRULER_SUPPORT_BORDERS 0x0004 +#define SVXRULER_SUPPORT_OBJECT 0x0008 +#define SVXRULER_SUPPORT_SET_NULLOFFSET 0x0010 +#define SVXRULER_SUPPORT_NEGATIVE_MARGINS 0x0020 +#define SVXRULER_SUPPORT_PARAGRAPH_MARGINS_VERTICAL 0x0040 +#define SVXRULER_SUPPORT_REDUCED_METRIC 0x0080 //shorten the context menu to select metric + + SvxRuler(Window* pParent, + Window *pEditWin, + sal_uInt16 nRulerFlags, + SfxBindings &rBindings, + WinBits nWinStyle = WB_STDRULER); + ~SvxRuler(); + + void SetMinFrameSize(long lSize); + long GetMinFrameSize() const ; + + sal_uInt16 GetRulerFlags() const { return nFlags; } + + void SetDefTabDist(long); + + // set/get NullOffset in logic units + void SetNullOffsetLogic(long lOff = 0); + long GetNullOffsetLogic() const { return lAppNullOffset; } + + void SetActive(sal_Bool bOn = sal_True); + sal_Bool IsActive() const { return bActive; } + + void ForceUpdate() { Update(); } + + //#i24363# tab stops relative to indent + void SetTabsRelativeToIndent( sal_Bool bRel = sal_True ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/rulritem.hxx b/include/svx/rulritem.hxx new file mode 100644 index 000000000000..545edb4cda85 --- /dev/null +++ b/include/svx/rulritem.hxx @@ -0,0 +1,278 @@ +/* -*- 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 _SVX_RULRITEM_HXX +#define _SVX_RULRITEM_HXX + +#include <tools/gen.hxx> +#include <svl/poolitem.hxx> +#include "svx/svxdllapi.h" +#include <vector> + +class SVX_DLLPUBLIC SvxLongLRSpaceItem : public SfxPoolItem +{ + long lLeft; // nLeft or the negativ first-line indentation + long lRight; // the unproblematic right edge + + protected: + + virtual int operator==( const SfxPoolItem& ) 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 String GetValueText() const; + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + +private: + SVX_DLLPRIVATE const SvxLongLRSpaceItem& operator=(const SvxLongLRSpaceItem &); // n.i. + +public: + TYPEINFO(); + SvxLongLRSpaceItem(long lLeft, long lRight, sal_uInt16 nId); + SvxLongLRSpaceItem(const SvxLongLRSpaceItem &); + SvxLongLRSpaceItem(); + + long GetLeft() const { return lLeft; } + long GetRight() const { return lRight; } + void SetLeft(long lArgLeft) {lLeft=lArgLeft;} + void SetRight(long lArgRight) {lRight=lArgRight;} +}; + +class SVX_DLLPUBLIC SvxLongULSpaceItem : public SfxPoolItem +{ + long lLeft; // nLeft or the negative first-line indentation + long lRight; // the unproblematic right edge + + protected: + + virtual int operator==( const SfxPoolItem& ) 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 String GetValueText() const; + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + +private: + SVX_DLLPRIVATE const SvxLongULSpaceItem& operator=(const SvxLongULSpaceItem &); // n.i. + +public: + TYPEINFO(); + SvxLongULSpaceItem(long lUpper, long lLower, sal_uInt16 nId); + SvxLongULSpaceItem(const SvxLongULSpaceItem &); + SvxLongULSpaceItem(); + + long GetUpper() const { return lLeft; } + long GetLower() const { return lRight; } + void SetUpper(long lArgLeft) {lLeft=lArgLeft;} + void SetLower(long lArgRight) {lRight=lArgRight;} +}; + +class SVX_DLLPUBLIC SvxPagePosSizeItem : public SfxPoolItem +{ + Point aPos; + long lWidth; + long lHeight; +protected: + virtual int operator==( const SfxPoolItem& ) 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 String GetValueText() const; + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + +private: + SVX_DLLPRIVATE const SvxPagePosSizeItem& operator=(const SvxPagePosSizeItem &); // n.i. +public: + TYPEINFO(); + SvxPagePosSizeItem(const Point &rPos, long lWidth, long lHeight); + SvxPagePosSizeItem(const SvxPagePosSizeItem &); + SvxPagePosSizeItem(); + + const Point &GetPos() const { return aPos; } + long GetWidth() const { return lWidth; } + long GetHeight() const { return lHeight; } +}; + +struct SvxColumnDescription +{ + long nStart; /* Start of the column */ + long nEnd; /* End of the column */ + sal_Bool bVisible; /* Visibility */ + + long nEndMin; //min. possible position of end + long nEndMax; //max. possible position of end + + SvxColumnDescription(): + nStart(0), nEnd(0), bVisible(sal_True), nEndMin(0), nEndMax(0) {} + + SvxColumnDescription(const SvxColumnDescription &rCopy) : + nStart(rCopy.nStart), nEnd(rCopy.nEnd), + bVisible(rCopy.bVisible), + nEndMin(rCopy.nEndMin), nEndMax(rCopy.nEndMax) + {} + + SvxColumnDescription(long start, long end, sal_Bool bVis = sal_True): + nStart(start), nEnd(end), + bVisible(bVis), + nEndMin(0), nEndMax(0) {} + + SvxColumnDescription(long start, long end, + long endMin, long endMax, sal_Bool bVis = sal_True): + nStart(start), nEnd(end), + bVisible(bVis), + nEndMin(endMin), nEndMax(endMax) + {} + + int operator==(const SvxColumnDescription &rCmp) const { + return nStart == rCmp.nStart && + bVisible == rCmp.bVisible && + nEnd == rCmp.nEnd && + nEndMin == rCmp.nEndMin && + nEndMax == rCmp.nEndMax; + } + int operator!=(const SvxColumnDescription &rCmp) const { + return !operator==(rCmp); + } + long GetWidth() const { return nEnd - nStart; } +}; + +class SVX_DLLPUBLIC SvxColumnItem : public SfxPoolItem +{ + std::vector<SvxColumnDescription> aColumns;// Column array + long nLeft, // Left edge for the table + nRight; // Right edge for the table; for columns always + // equal to the surrounding frame + sal_uInt16 nActColumn; // the current column + sal_uInt8 bTable; // table? + sal_uInt8 bOrtho; // evenly spread columns + +protected: + virtual int operator==( const SfxPoolItem& ) const; + + virtual String GetValueText() const; + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) 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 ); +public: + TYPEINFO(); + // right edge of the surrounding frame + // nLeft, nRight each the distance to the surrounding frame + SvxColumnItem(sal_uInt16 nAct = 0); // columns + SvxColumnItem(sal_uInt16 nActCol, + sal_uInt16 nLeft, sal_uInt16 nRight = 0); // Table with borders + SvxColumnItem(const SvxColumnItem &); + ~SvxColumnItem(); + + const SvxColumnItem &operator=(const SvxColumnItem &); + + sal_uInt16 Count() const { return aColumns.size(); } + SvxColumnDescription &operator[](sal_uInt16 i) + { return aColumns[i]; } + const SvxColumnDescription &operator[](sal_uInt16 i) const + { return aColumns[i]; } + void Insert(const SvxColumnDescription &rDesc, sal_uInt16 nPos) { + aColumns.insert(aColumns.begin() + nPos, rDesc); + } + void Append(const SvxColumnDescription &rDesc) { Insert(rDesc, Count()); } + void SetLeft(long left) { nLeft = left; } + void SetRight(long right) { nRight = right; } + void SetActColumn(sal_uInt16 nCol) { nActColumn = nCol; } + + sal_uInt16 GetActColumn() const { return nActColumn; } + sal_Bool IsFirstAct() const { return nActColumn == 0; } + sal_Bool IsLastAct() const { return nActColumn == Count()-1; } + long GetLeft() { return nLeft; } + long GetRight() { return nRight; } + + sal_Bool IsTable() const { return bTable; } + + sal_Bool CalcOrtho() const; + void SetOrtho(sal_Bool bVal) { bOrtho = bVal; } + sal_Bool IsOrtho () const { return sal_False ; } + + sal_Bool IsConsistent() const { return nActColumn < aColumns.size(); } +}; + +// class SvxObjectItem --------------------------------------------------- + +class SVX_DLLPUBLIC SvxObjectItem : public SfxPoolItem +{ +private: + long nStartX; /* Start in x direction */ + long nEndX; /* End in x direction */ + long nStartY; /* Start in y direction */ + long nEndY; /* Ende in y direction */ + sal_Bool bLimits; /* boundary limit control by the application */ +protected: + virtual int operator==( const SfxPoolItem& ) const; + + virtual String GetValueText() const; + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) 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 ); +private: + SVX_DLLPRIVATE const SvxObjectItem &operator=(const SvxObjectItem &); // n.i. +public: + TYPEINFO(); + SvxObjectItem(long nStartX, long nEndX, + long nStartY, long nEndY, + sal_Bool bLimits = sal_False); + SvxObjectItem(const SvxObjectItem &); + + sal_Bool HasLimits() const { return bLimits; } + + long GetStartX() const { return nStartX; } + long GetEndX() const { return nEndX; } + long GetStartY() const { return nStartY; } + long GetEndY() const { return nEndY; } + + void SetStartX(long l) { nStartX = l; } + void SetEndX(long l) { nEndX = l; } + void SetStartY(long l) { nStartY = l; } + void SetEndY(long l) { nEndY = l; } +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/scene3d.hxx b/include/svx/scene3d.hxx new file mode 100644 index 000000000000..c2e9f7776b83 --- /dev/null +++ b/include/svx/scene3d.hxx @@ -0,0 +1,239 @@ +/* -*- 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 _E3D_SCENE3D_HXX +#define _E3D_SCENE3D_HXX + +#include <svx/camera3d.hxx> +#include <tools/b3dtrans.hxx> +#include <svx/svxdllapi.h> +#include <svx/obj3d.hxx> + +namespace sdr { namespace properties { + class BaseProperties; + class E3dSceneProperties; +}} + +namespace drawinglayer { namespace geometry { + class ViewInformation3D; +}} + +/************************************************************************* +|* +|* GeoData relevant for undo actions +|* +\************************************************************************/ + +class E3DSceneGeoData : public E3DObjGeoData +{ +public: + Camera3D aCamera; + + E3DSceneGeoData() {} +}; + +class Imp3DDepthRemapper; + +/************************************************************************* +|* +|* base class for 3D scenes +|* +\************************************************************************/ + +class SVX_DLLPUBLIC E3dScene : public E3dObject +{ +private: + // to allow sdr::properties::E3dSceneProperties access to StructureChanged() + friend class sdr::properties::E3dSceneProperties; + +protected: + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + + // transformations + B3dCamera aCameraSet; + Camera3D aCamera; + + Imp3DDepthRemapper* mp3DDepthRemapper; + + // Flag to determine if only selected objects should be drawn + unsigned bDrawOnlySelected : 1; + + virtual void NewObjectInserted(const E3dObject* p3DObj); + virtual void StructureChanged(); + + void RebuildLists(); + + virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint); + +protected: + void SetDefaultAttributes(E3dDefaultAttributes& rDefault); + + void ImpCleanup3DDepthMapper(); + +public: + TYPEINFO(); + E3dScene(); + E3dScene(E3dDefaultAttributes& rDefault); + virtual ~E3dScene(); + + virtual void SetBoundRectDirty(); + + // access to cleanup of depth mapper + void Cleanup3DDepthMapper() { ImpCleanup3DDepthMapper(); } + + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + + sal_uInt32 RemapOrdNum(sal_uInt32 nOrdNum) const; + + // Perspective: enum ProjectionType { PR_PARALLEL, PR_PERSPECTIVE } + ProjectionType GetPerspective() const + { return (ProjectionType)((const Svx3DPerspectiveItem&)GetObjectItemSet().Get(SDRATTR_3DSCENE_PERSPECTIVE)).GetValue(); } + + // Distance: + double GetDistance() const + { return (double)((const Svx3DDistanceItem&)GetObjectItemSet().Get(SDRATTR_3DSCENE_DISTANCE)).GetValue(); } + + // Focal length: before cm, now 1/10th mm (*100) + double GetFocalLength() const + { return ((const Svx3DFocalLengthItem&)GetObjectItemSet().Get(SDRATTR_3DSCENE_FOCAL_LENGTH)).GetValue(); } + + // Two sided lighting: + sal_Bool GetTwoSidedLighting() const + { return ((const Svx3DTwoSidedLightingItem&)GetObjectItemSet().Get(SDRATTR_3DSCENE_TWO_SIDED_LIGHTING)).GetValue(); } + + // Lightcolor: + Color GetLightColor1() const + { return ((const Svx3DLightcolor1Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTCOLOR_1)).GetValue(); } + Color GetLightColor2() const + { return ((const Svx3DLightcolor2Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTCOLOR_2)).GetValue(); } + Color GetLightColor3() const + { return ((const Svx3DLightcolor3Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTCOLOR_3)).GetValue(); } + Color GetLightColor4() const + { return ((const Svx3DLightcolor4Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTCOLOR_4)).GetValue(); } + Color GetLightColor5() const + { return ((const Svx3DLightcolor5Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTCOLOR_5)).GetValue(); } + Color GetLightColor6() const + { return ((const Svx3DLightcolor6Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTCOLOR_6)).GetValue(); } + Color GetLightColor7() const + { return ((const Svx3DLightcolor7Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTCOLOR_7)).GetValue(); } + Color GetLightColor8() const + { return ((const Svx3DLightcolor8Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTCOLOR_8)).GetValue(); } + + // Ambient color: + Color GetGlobalAmbientColor() const + { return ((const Svx3DAmbientcolorItem&)GetObjectItemSet().Get(SDRATTR_3DSCENE_AMBIENTCOLOR)).GetValue(); } + + // Light on/off: + sal_Bool GetLightOnOff1() const + { return ((const Svx3DLightOnOff1Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTON_1)).GetValue(); } + sal_Bool GetLightOnOff2() const + { return ((const Svx3DLightOnOff2Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTON_2)).GetValue(); } + sal_Bool GetLightOnOff3() const + { return ((const Svx3DLightOnOff3Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTON_3)).GetValue(); } + sal_Bool GetLightOnOff4() const + { return ((const Svx3DLightOnOff4Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTON_4)).GetValue(); } + sal_Bool GetLightOnOff5() const + { return ((const Svx3DLightOnOff5Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTON_5)).GetValue(); } + sal_Bool GetLightOnOff6() const + { return ((const Svx3DLightOnOff6Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTON_6)).GetValue(); } + sal_Bool GetLightOnOff7() const + { return ((const Svx3DLightOnOff7Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTON_7)).GetValue(); } + sal_Bool GetLightOnOff8() const + { return ((const Svx3DLightOnOff8Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTON_8)).GetValue(); } + + // Light direction: + basegfx::B3DVector GetLightDirection1() const + { return ((const Svx3DLightDirection1Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTDIRECTION_1)).GetValue(); } + basegfx::B3DVector GetLightDirection2() const + { return ((const Svx3DLightDirection2Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTDIRECTION_2)).GetValue(); } + basegfx::B3DVector GetLightDirection3() const + { return ((const Svx3DLightDirection3Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTDIRECTION_3)).GetValue(); } + basegfx::B3DVector GetLightDirection4() const + { return ((const Svx3DLightDirection4Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTDIRECTION_4)).GetValue(); } + basegfx::B3DVector GetLightDirection5() const + { return ((const Svx3DLightDirection5Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTDIRECTION_5)).GetValue(); } + basegfx::B3DVector GetLightDirection6() const + { return ((const Svx3DLightDirection6Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTDIRECTION_6)).GetValue(); } + basegfx::B3DVector GetLightDirection7() const + { return ((const Svx3DLightDirection7Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTDIRECTION_7)).GetValue(); } + basegfx::B3DVector GetLightDirection8() const + { return ((const Svx3DLightDirection8Item&)GetObjectItemSet().Get(SDRATTR_3DSCENE_LIGHTDIRECTION_8)).GetValue(); } + + // ShadowSlant: + sal_uInt16 GetShadowSlant() const + { return ((const Svx3DShadowSlantItem&)GetObjectItemSet().Get(SDRATTR_3DSCENE_SHADOW_SLANT)).GetValue(); } + + // ShadeMode: 0 == FLAT, 1 == PHONG, 2 == SMOOTH, 3 == ForceDraft + sal_uInt16 GetShadeMode() const + { return ((const Svx3DShadeModeItem&)GetObjectItemSet().Get(SDRATTR_3DSCENE_SHADE_MODE)).GetValue(); } + + // set flag to draw only selected + void SetDrawOnlySelected(sal_Bool bNew) { bDrawOnlySelected = bNew; } + bool GetDrawOnlySelected() const { return bDrawOnlySelected; } + virtual sal_uInt16 GetObjIdentifier() const; + + virtual void NbcSetSnapRect(const Rectangle& rRect); + virtual void NbcMove(const Size& rSize); + virtual void NbcResize(const Point& rRef, const Fraction& rXFact, + const Fraction& rYFact); + virtual void RecalcSnapRect(); + + virtual E3dScene* GetScene() const; + void SetCamera(const Camera3D& rNewCamera); + const Camera3D& GetCamera() const { return aCamera; } + void removeAllNonSelectedObjects(); + + virtual E3dScene* Clone() const; + E3dScene& operator=(const E3dScene&); + + virtual SdrObjGeoData *NewGeoData() const; + virtual void SaveGeoData(SdrObjGeoData& rGeo) const; + virtual void RestGeoData(const SdrObjGeoData& rGeo); + + virtual void NbcSetTransform(const basegfx::B3DHomMatrix& rMatrix); + virtual void SetTransform(const basegfx::B3DHomMatrix& rMatrix); + + virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs); + void RotateScene(const Point& rRef, long nWink, double sn, double cs); + + // TakeObjName...() is for the display in the UI, for example "3 frames selected". + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + // get transformations + B3dCamera& GetCameraSet() { return aCameraSet; } + + // break up + virtual bool IsBreakObjPossible(); + + // polygon which is built during creation + virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const; + + // create moves + virtual bool BegCreate(SdrDragStat& rStat); + virtual bool MovCreate(SdrDragStat& rStat); // true=Xor muss repainted werden + virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); + virtual bool BckCreate(SdrDragStat& rStat); + virtual void BrkCreate(SdrDragStat& rStat); +}; + +#endif // _E3D_SCENE3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdangitm.hxx b/include/svx/sdangitm.hxx new file mode 100644 index 000000000000..1b5435067332 --- /dev/null +++ b/include/svx/sdangitm.hxx @@ -0,0 +1,49 @@ +/* -*- 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 _SDANGITM_HXX +#define _SDANGITM_HXX + +#include <svl/intitem.hxx> +#include "svx/svxdllapi.h" + + +//------------------------------------------------------------ +// class SdrAngleItem +//------------------------------------------------------------ +class SVX_DLLPUBLIC SdrAngleItem: public SfxInt32Item { +public: + TYPEINFO(); + SdrAngleItem(): SfxInt32Item() {} + SdrAngleItem(sal_uInt16 nId, sal_Int32 nAngle=0): SfxInt32Item(nId,nAngle) {} + SdrAngleItem(sal_uInt16 nId, SvStream& rIn): SfxInt32Item(nId,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString& rText, + const IntlWrapper * + pIntlWrapper = 0) const; +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdasaitm.hxx b/include/svx/sdasaitm.hxx new file mode 100644 index 000000000000..67e97fb0c454 --- /dev/null +++ b/include/svx/sdasaitm.hxx @@ -0,0 +1,71 @@ +/* -*- 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 _SDASAITM_HXX +#define _SDASAITM_HXX + +#include <vector> + +#include <svl/poolitem.hxx> + +class SdrCustomShapeAdjustmentValue +{ + sal_uInt32 nValue; + + friend class SdrCustomShapeAdjustmentItem; + + public : + + void SetValue( sal_Int32 nVal ) { nValue = nVal; }; + sal_Int32 GetValue() const { return nValue; }; + +}; + +class SdrCustomShapeAdjustmentItem : public SfxPoolItem +{ + std::vector<SdrCustomShapeAdjustmentValue> aAdjustmentValueList; + + public : + + TYPEINFO(); + SVX_DLLPUBLIC SdrCustomShapeAdjustmentItem(); + SdrCustomShapeAdjustmentItem( SvStream& rIn, sal_uInt16 nVersion ); + SVX_DLLPUBLIC ~SdrCustomShapeAdjustmentItem(); + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePresentation, + SfxMapUnit eCoreMetric, SfxMapUnit ePresentationMetric, + OUString &rText, const IntlWrapper * = 0) const; + virtual SfxPoolItem* Create( SvStream&, sal_uInt16 nItem ) const; + virtual SvStream& Store( SvStream&, sal_uInt16 nVersion ) const; + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual sal_uInt16 GetVersion( sal_uInt16 nFileFormatVersion ) 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 ); + + sal_uInt32 GetCount() const { return aAdjustmentValueList.size(); }; + SVX_DLLPUBLIC const SdrCustomShapeAdjustmentValue& GetValue( sal_uInt32 nIndex ) const; + SVX_DLLPUBLIC void SetValue( sal_uInt32 nIndex, + const SdrCustomShapeAdjustmentValue& rVal ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdasitm.hxx b/include/svx/sdasitm.hxx new file mode 100644 index 000000000000..e54bf1f654e2 --- /dev/null +++ b/include/svx/sdasitm.hxx @@ -0,0 +1,132 @@ +/* -*- 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 _SDASITM_HXX +#define _SDASITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdooitm.hxx> +#include <svl/stritem.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include <com/sun/star/beans/PropertyValue.hpp> +#include <com/sun/star/uno/Any.hxx> +#include <rtl/ustring.hxx> +#include <boost/unordered_map.hpp> +#include <map> +#include "svx/svxdllapi.h" + +class SdrCustomShapeEngineItem : public SfxStringItem +{ + public : + SdrCustomShapeEngineItem(); +}; + +class SdrCustomShapeDataItem : public SfxStringItem +{ + public : + SdrCustomShapeDataItem(); +}; + +class SVX_DLLPUBLIC SdrCustomShapeGeometryItem : public SfxPoolItem +{ +public: + typedef std::pair < const OUString, const OUString > PropertyPair; + +private: + struct SVX_DLLPUBLIC PropertyEq + { + bool operator()( const OUString&, const OUString& ) const; + }; + struct SVX_DLLPUBLIC PropertyPairEq + { + bool operator()( const SdrCustomShapeGeometryItem::PropertyPair&, const SdrCustomShapeGeometryItem::PropertyPair& ) const; + }; + struct SVX_DLLPUBLIC PropertyPairHash + { + size_t operator()( const SdrCustomShapeGeometryItem::PropertyPair& ) const; + }; + typedef boost::unordered_map < PropertyPair, sal_Int32, PropertyPairHash, PropertyPairEq > PropertyPairHashMap; + typedef boost::unordered_map< OUString, sal_Int32, OUStringHash, PropertyEq > PropertyHashMap; + + PropertyHashMap aPropHashMap; + PropertyPairHashMap aPropPairHashMap; + + com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > aPropSeq; + + public : + + TYPEINFO(); + + SdrCustomShapeGeometryItem(); + SdrCustomShapeGeometryItem( const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& ); + SdrCustomShapeGeometryItem( SvStream& rIn, sal_uInt16 nVersion ); + ~SdrCustomShapeGeometryItem(); + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePresentation, + SfxMapUnit eCoreMetric, SfxMapUnit ePresentationMetric, + OUString &rText, const IntlWrapper * = 0) const; + + virtual SfxPoolItem* Create( SvStream&, sal_uInt16 nItem ) const; + virtual SvStream& Store( SvStream&, sal_uInt16 nVersion ) const; + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual sal_uInt16 GetVersion( sal_uInt16 nFileFormatVersion ) 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 ); + + const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& GetGeometry() const; + + com::sun::star::uno::Any* GetPropertyValueByName( const OUString& rPropName ); + com::sun::star::uno::Any* GetPropertyValueByName( const OUString& rPropName, const OUString& rPropName2 ); + + void SetPropertyValue( const com::sun::star::beans::PropertyValue& rPropVal ); + void SetPropertyValue( const OUString& rSequenceName, const com::sun::star::beans::PropertyValue& rPropVal ); + + void ClearPropertyValue( const OUString& rPropertyName ); +}; + +class SdrCustomShapeReplacementURLItem : public SfxStringItem +{ + public : + SdrCustomShapeReplacementURLItem(); +}; + +//--------------------------- +// class SdrTextWordWrapItem +//--------------------------- +class SdrTextWordWrapItem : public SdrOnOffItem { +public: + SdrTextWordWrapItem( sal_Bool bAuto = sal_False ): SdrOnOffItem( SDRATTR_TEXT_WORDWRAP, bAuto ) {} + SdrTextWordWrapItem( SvStream& rIn ) : SdrOnOffItem( SDRATTR_TEXT_WORDWRAP, rIn ) {} +}; + +//------------------------------- +// class SdrTextAutoGrowSizeItem +//------------------------------- +class SdrTextAutoGrowSizeItem : public SdrOnOffItem { +public: + SdrTextAutoGrowSizeItem( sal_Bool bAuto = sal_False ): SdrOnOffItem( SDRATTR_TEXT_AUTOGROWSIZE, bAuto ) {} + SdrTextAutoGrowSizeItem( SvStream& rIn ) : SdrOnOffItem( SDRATTR_TEXT_AUTOGROWSIZE, rIn ) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sderitm.hxx b/include/svx/sderitm.hxx new file mode 100644 index 000000000000..61751bd3cad2 --- /dev/null +++ b/include/svx/sderitm.hxx @@ -0,0 +1,36 @@ +/* -*- 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 _SDERITM_HXX +#define _SDERITM_HXX + +#include <svx/sdmetitm.hxx> +#include <svx/svddef.hxx> + +//------------------------------ +// class SdrEckenradiusItem +//------------------------------ +class SdrEckenradiusItem: public SdrMetricItem { +public: + SdrEckenradiusItem(long nRadius=0): SdrMetricItem(SDRATTR_ECKENRADIUS,nRadius) {} + SdrEckenradiusItem(SvStream& rIn) : SdrMetricItem(SDRATTR_ECKENRADIUS,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdgcoitm.hxx b/include/svx/sdgcoitm.hxx new file mode 100644 index 000000000000..186c764d3d1b --- /dev/null +++ b/include/svx/sdgcoitm.hxx @@ -0,0 +1,80 @@ +/* -*- 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 _SDGCOITM_HXX +#define _SDGCOITM_HXX + +#include <svx/sdprcitm.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +//----------------- +// SdrGrafRedItem - +//----------------- + +class SVX_DLLPUBLIC SdrGrafRedItem : public SdrSignedPercentItem +{ +public: + + TYPEINFO(); + + SdrGrafRedItem( short nRedPercent = 0 ) : SdrSignedPercentItem( SDRATTR_GRAFRED, nRedPercent ) {} + SdrGrafRedItem( SvStream& rIn ) : SdrSignedPercentItem( SDRATTR_GRAFRED, rIn ) {} + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; +}; + +//------------------- +// SdrGrafGreenItem - +//------------------- + +class SVX_DLLPUBLIC SdrGrafGreenItem : public SdrSignedPercentItem +{ +public: + + TYPEINFO(); + + SdrGrafGreenItem( short nGreenPercent = 0 ) : SdrSignedPercentItem( SDRATTR_GRAFGREEN, nGreenPercent ) {} + SdrGrafGreenItem( SvStream& rIn ) : SdrSignedPercentItem( SDRATTR_GRAFGREEN, rIn ) {} + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; +}; + +//------------------- +// SdrGrafBlueItem - +//------------------- + +class SVX_DLLPUBLIC SdrGrafBlueItem : public SdrSignedPercentItem +{ +public: + + TYPEINFO(); + + SdrGrafBlueItem( short nBluePercent = 0 ) : SdrSignedPercentItem( SDRATTR_GRAFBLUE, nBluePercent ) {} + SdrGrafBlueItem( SvStream& rIn ) : SdrSignedPercentItem( SDRATTR_GRAFBLUE, rIn ) {} + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; +}; + +#endif // _SDGCOITM_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdgcpitm.hxx b/include/svx/sdgcpitm.hxx new file mode 100644 index 000000000000..48eea4733624 --- /dev/null +++ b/include/svx/sdgcpitm.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SDGCPITM_HXX +#define _SDGCPITM_HXX + +#include <svx/grfcrop.hxx> +#include <svx/svddef.hxx> + +//------------------ +// SdrGrafCropItem - +//------------------ + +class SVX_DLLPUBLIC SdrGrafCropItem : public SvxGrfCrop +{ +public: + + TYPEINFO(); + + SdrGrafCropItem( sal_Int32 nLeftCrop = 0, sal_Int32 nTopCrop = 0, + sal_Int32 nRightCrop = 0, sal_Int32 nBottomCrop = 0, + sal_uInt16 nWhichId = SDRATTR_GRAFCROP ) : + SvxGrfCrop( nLeftCrop, nRightCrop, nTopCrop, nBottomCrop, nWhichId ) {} + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + virtual sal_uInt16 GetVersion( sal_uInt16 nFileVersion ) const; +}; + +#endif // _SDGCPITM_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdggaitm.hxx b/include/svx/sdggaitm.hxx new file mode 100644 index 000000000000..d7c44fe0918e --- /dev/null +++ b/include/svx/sdggaitm.hxx @@ -0,0 +1,49 @@ +/* -*- 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 _SDGGAITM_HXX +#define _SDGGAITM_HXX + +#include <svl/intitem.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +//---------------------- +// SdrGrafGamma100Item - +//---------------------- + +class SVX_DLLPUBLIC SdrGrafGamma100Item : public SfxUInt32Item +{ +public: + + TYPEINFO(); + + SdrGrafGamma100Item( sal_uIntPtr nGamma100 = 100 ) : SfxUInt32Item( SDRATTR_GRAFGAMMA, nGamma100 ) {} + SdrGrafGamma100Item( SvStream& rIn ) : SfxUInt32Item( SDRATTR_GRAFGAMMA, rIn ) {} + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) 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 ); +}; + +#endif // _SDGGAITM_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdginitm.hxx b/include/svx/sdginitm.hxx new file mode 100644 index 000000000000..5b17ddef807d --- /dev/null +++ b/include/svx/sdginitm.hxx @@ -0,0 +1,46 @@ +/* -*- 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 _SDGINITM_HXX +#define _SDGINITM_HXX + +#include <svx/sdooitm.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +//-------------------- +// SdrGrafInvertItem - +//-------------------- + +class SVX_DLLPUBLIC SdrGrafInvertItem : public SdrOnOffItem +{ +public: + + TYPEINFO(); + + SdrGrafInvertItem( sal_Bool bInvert = sal_False ) : SdrOnOffItem( SDRATTR_GRAFINVERT, bInvert ) {} + SdrGrafInvertItem( SvStream& rIn ) : SdrOnOffItem( SDRATTR_GRAFINVERT, rIn ) {} + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; +}; + +#endif // _SDGINITM_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdgluitm.hxx b/include/svx/sdgluitm.hxx new file mode 100644 index 000000000000..2f2b21a83842 --- /dev/null +++ b/include/svx/sdgluitm.hxx @@ -0,0 +1,63 @@ +/* -*- 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 _SDGLUITM_HXX +#define _SDGLUITM_HXX + +#include <svx/sdprcitm.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +//----------------------- +// SdrGrafLuminanceItem - +//----------------------- + +class SVX_DLLPUBLIC SdrGrafLuminanceItem : public SdrSignedPercentItem +{ +public: + + TYPEINFO(); + + SdrGrafLuminanceItem( short nLuminancePercent = 0 ) : SdrSignedPercentItem( SDRATTR_GRAFLUMINANCE, nLuminancePercent ) {} + SdrGrafLuminanceItem( SvStream& rIn ) : SdrSignedPercentItem( SDRATTR_GRAFLUMINANCE, rIn ) {} + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; +}; + +//---------------------- +// SdrGrafContrastItem - +//---------------------- + +class SVX_DLLPUBLIC SdrGrafContrastItem : public SdrSignedPercentItem +{ +public: + + TYPEINFO(); + + SdrGrafContrastItem( short nContrastPercent = 0 ) : SdrSignedPercentItem( SDRATTR_GRAFCONTRAST, nContrastPercent ) {} + SdrGrafContrastItem( SvStream& rIn ) : SdrSignedPercentItem( SDRATTR_GRAFCONTRAST, rIn ) {} + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; +}; + +#endif // _SDGLUITM_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdgmoitm.hxx b/include/svx/sdgmoitm.hxx new file mode 100644 index 000000000000..b97178357244 --- /dev/null +++ b/include/svx/sdgmoitm.hxx @@ -0,0 +1,56 @@ +/* -*- 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 _SDGMOITM_HXX +#define _SDGMOITM_HXX + +#include <svtools/grfmgr.hxx> +#include <svl/eitem.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +//------------------ +// SdrGrafModeItem - +//------------------ + +class SVX_DLLPUBLIC SdrGrafModeItem : public SfxEnumItem +{ +public: + + TYPEINFO(); + + SdrGrafModeItem( GraphicDrawMode eMode = GRAPHICDRAWMODE_STANDARD ) : SfxEnumItem( SDRATTR_GRAFMODE, (sal_uInt16)eMode ) {} + SdrGrafModeItem( SvStream& rIn ) : SfxEnumItem( SDRATTR_GRAFMODE, rIn ) {} + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + virtual sal_uInt16 GetValueCount() const; + GraphicDrawMode GetValue() const { return (GraphicDrawMode) SfxEnumItem::GetValue(); } + + virtual OUString GetValueTextByPos( sal_uInt16 nPos ) const; + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString& rText, const IntlWrapper * = 0) const; + +}; + +#endif // _SDGMOITM_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdgtritm.hxx b/include/svx/sdgtritm.hxx new file mode 100644 index 000000000000..f09d5abbcba0 --- /dev/null +++ b/include/svx/sdgtritm.hxx @@ -0,0 +1,45 @@ +/* -*- 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 _SDGTRITM_HXX +#define _SDGTRITM_HXX + +#include <svx/sdprcitm.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +//-------------------------- +// SdrGrafTransparenceItem - +//-------------------------- + +class SVX_DLLPUBLIC SdrGrafTransparenceItem : public SdrPercentItem +{ +public: + + TYPEINFO(); + SdrGrafTransparenceItem( sal_uInt16 nTransparencePercent = 0 ) : SdrPercentItem( SDRATTR_GRAFTRANSPARENCE, nTransparencePercent ) {} + SdrGrafTransparenceItem( SvStream& rIn ) : SdrPercentItem( SDRATTR_GRAFTRANSPARENCE, rIn ) {} + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; +}; + +#endif // _SDGTRITM_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdmetitm.hxx b/include/svx/sdmetitm.hxx new file mode 100644 index 000000000000..9045dc91916d --- /dev/null +++ b/include/svx/sdmetitm.hxx @@ -0,0 +1,51 @@ +/* -*- 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 _SDMETITM_HXX +#define _SDMETITM_HXX + +#include <svl/intitem.hxx> +#include "svx/svxdllapi.h" + + +//------------------------------------------------------------ +// class SdrAngleItem +// For all metrics. GetPresentation returns for example for +// Value=2500 a "25mm". +//------------------------------------------------------------ +class SVX_DLLPUBLIC SdrMetricItem: public SfxInt32Item { +public: + TYPEINFO(); + SdrMetricItem(): SfxInt32Item() {} + SdrMetricItem(sal_uInt16 nId, sal_Int32 nVal=0): SfxInt32Item(nId,nVal) {} + SdrMetricItem(sal_uInt16 nId, SvStream& rIn): SfxInt32Item(nId,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual bool HasMetrics() const; + virtual bool ScaleMetrics(long nMul, long nDiv); + + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString& rText, const IntlWrapper * = 0) const; +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdooitm.hxx b/include/svx/sdooitm.hxx new file mode 100644 index 000000000000..ff6a1f9b0bfa --- /dev/null +++ b/include/svx/sdooitm.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SDOOITM_HXX +#define _SDOOITM_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + + +//------------------------------------------------------------ +// class SdrOnOffItem +// here GetValueTextByVal() returns "an" or "aus" instead +// of "TRUE" or "FALSE" +//------------------------------------------------------------ +class SVX_DLLPUBLIC SdrOnOffItem: public SfxBoolItem { +public: + TYPEINFO(); + SdrOnOffItem(): SfxBoolItem() {} + SdrOnOffItem(sal_uInt16 nId, sal_Bool bOn=sal_False): SfxBoolItem(nId,bOn) {} + SdrOnOffItem(sal_uInt16 nId, SvStream& rIn): SfxBoolItem(nId,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + + virtual OUString GetValueTextByVal(sal_Bool bVal) const; + + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdprcitm.hxx b/include/svx/sdprcitm.hxx new file mode 100644 index 000000000000..7e01de417185 --- /dev/null +++ b/include/svx/sdprcitm.hxx @@ -0,0 +1,65 @@ +/* -*- 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 _SDPRCITM_HXX +#define _SDPRCITM_HXX + +#include <svl/intitem.hxx> +#include "svx/svxdllapi.h" + + +//------------------------------------------------------------ +// class SdrPercentItem +// Integer percents of 0 +//------------------------------------------------------------ + +class SVX_DLLPUBLIC SdrPercentItem : public SfxUInt16Item +{ +public: + TYPEINFO(); + SdrPercentItem(): SfxUInt16Item() {} + SdrPercentItem(sal_uInt16 nId, sal_uInt16 nVal=0): SfxUInt16Item(nId,nVal) {} + SdrPercentItem(sal_uInt16 nId, SvStream& rIn): SfxUInt16Item(nId,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +//------------------------------------------------------------ +// class SdrSignedPercentItem +// Integer percents of +/- +//------------------------------------------------------------ + +class SVX_DLLPUBLIC SdrSignedPercentItem : public SfxInt16Item +{ +public: + TYPEINFO(); + SdrSignedPercentItem(): SfxInt16Item() {} + SdrSignedPercentItem( sal_uInt16 nId, sal_Int16 nVal = 0 ) : SfxInt16Item( nId,nVal ) {} + SdrSignedPercentItem( sal_uInt16 nId, SvStream& rIn ) : SfxInt16Item( nId,rIn ) {} + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0 ) const; +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/animation/animationstate.hxx b/include/svx/sdr/animation/animationstate.hxx new file mode 100644 index 000000000000..39fcf8ae04f1 --- /dev/null +++ b/include/svx/sdr/animation/animationstate.hxx @@ -0,0 +1,75 @@ +/* -*- 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 _SDR_ANIMATION_ANIMATIONSTATE_HXX +#define _SDR_ANIMATION_ANIMATIONSTATE_HXX + +#include <sal/types.h> +#include <vector> +#include <svx/sdr/animation/scheduler.hxx> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +namespace sdr +{ + namespace contact + { + class ViewObjectContact; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace animation + { + class PrimitiveAnimation : public Event + { + protected: + // the animated VOC + sdr::contact::ViewObjectContact& mrVOContact; + + // the vetor of animated primitives + drawinglayer::primitive2d::Primitive2DSequence maAnimatedPrimitives; + + // local helpers + double getSmallestNextTime(double fCurrentTime); + void prepareNextEvent(); + + public: + // basic constructor. + PrimitiveAnimation(sdr::contact::ViewObjectContact& rVOContact, const drawinglayer::primitive2d::Primitive2DSequence& rAnimatedPrimitives); + + // destructor + virtual ~PrimitiveAnimation(); + + // execute event, from base class Event + virtual void Trigger(sal_uInt32 nTime); + }; + } // end of namespace animation +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_ANIMATION_ANIMATIONSTATE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/animation/objectanimator.hxx b/include/svx/sdr/animation/objectanimator.hxx new file mode 100644 index 000000000000..0c59afee92f5 --- /dev/null +++ b/include/svx/sdr/animation/objectanimator.hxx @@ -0,0 +1,49 @@ +/* -*- 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 _SDR_ANIMATION_OBJECTANIMATOR_HXX +#define _SDR_ANIMATION_OBJECTANIMATOR_HXX + +#include <sal/types.h> +#include <vector> +#include <vcl/timer.hxx> +#include <svx/sdr/animation/scheduler.hxx> +#include <svx/sdr/animation/animationstate.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace animation + { + class primitiveAnimator : public Scheduler + { + public: + // basic constructor and destructor + primitiveAnimator(); + SVX_DLLPUBLIC virtual ~primitiveAnimator(); + }; + } // end of namespace animation +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_ANIMATION_OBJECTANIMATOR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/animation/scheduler.hxx b/include/svx/sdr/animation/scheduler.hxx new file mode 100644 index 000000000000..a2681b740eb1 --- /dev/null +++ b/include/svx/sdr/animation/scheduler.hxx @@ -0,0 +1,148 @@ +/* -*- 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 _SDR_ANIMATION_SCHEDULER_HXX +#define _SDR_ANIMATION_SCHEDULER_HXX + +#include <sal/types.h> +#include <vcl/timer.hxx> +#include <svx/svxdllapi.h> + +////////////////////////////////////////////////////////////////////////////// +// event class + +namespace sdr +{ + namespace animation + { + class Event + { + // time of event in ms + sal_uInt32 mnTime; + + // pointer for simply linked list + Event* mpNext; + + public: + // constructor/destructor + explicit Event(sal_uInt32 nTime); + SVX_DLLPUBLIC virtual ~Event(); + + // access to mpNext + Event* GetNext() const; + void SetNext(Event* pNew); + + // get/set time + sal_uInt32 GetTime() const; + void SVX_DLLPUBLIC SetTime(sal_uInt32 nNew); + + // execute event + virtual void Trigger(sal_uInt32 nTime) = 0; + }; + } // end of namespace animation +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// +// eventlist class + +namespace sdr +{ + namespace animation + { + class EventList + { + // pointer to first entry + Event* mpHead; + + public: + // constructor/destructor + EventList(); + SVX_DLLPUBLIC virtual ~EventList(); + + // insert/remove time dependent + void Insert(Event* pNew); + void Remove(Event* pOld); + + // clear list + void Clear(); + + // get first + Event* GetFirst(); + }; + } // end of namespace animation +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// +// scheduler class + +namespace sdr +{ + namespace animation + { + class Scheduler : public Timer + { + // time in ms + sal_uInt32 mnTime; + + // next delta time + sal_uInt32 mnDeltaTime; + + // list of events + EventList maList; + + // Flag which remembers if this timer is paused. Default + // is false. + bool mbIsPaused; + + public: + // constructor/destructor + Scheduler(); + SVX_DLLPUBLIC virtual ~Scheduler(); + + // From baseclass Timer, the timeout call + SVX_DLLPUBLIC virtual void Timeout(); + + // get time + sal_uInt32 GetTime(); + + // #i38135# + void SetTime(sal_uInt32 nTime); + + // execute all ripe events, removes executed ones from the scheduler + void triggerEvents(); + + // re-start or stop timer according to event list + void checkTimeout(); + + // insert/remove events, wrapper to EventList methods + void SVX_DLLPUBLIC InsertEvent(Event* pNew); + void RemoveEvent(Event* pOld); + + // get/set pause + bool IsPaused() const { return mbIsPaused; } + void SetPaused(bool bNew); + }; + } // end of namespace animation +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_ANIMATION_SCHEDULER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/attribute/sdrfilltextattribute.hxx b/include/svx/sdr/attribute/sdrfilltextattribute.hxx new file mode 100644 index 000000000000..f64bac542a76 --- /dev/null +++ b/include/svx/sdr/attribute/sdrfilltextattribute.hxx @@ -0,0 +1,65 @@ +/* -*- 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 _SDR_ATTRIBUTE_SDRFILLTEXTATTRIBUTE_HXX +#define _SDR_ATTRIBUTE_SDRFILLTEXTATTRIBUTE_HXX + +#include <sal/types.h> +#include <drawinglayer/attribute/sdrfillattribute.hxx> +#include <drawinglayer/attribute/fillgradientattribute.hxx> +#include <svx/sdr/attribute/sdrtextattribute.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace attribute + { + class SdrFillTextAttribute + { + // shadow and text attributes + SdrFillAttribute maFill; // fill attributes (if used) + FillGradientAttribute maFillFloatTransGradient; // fill float transparence gradient (if used) + SdrTextAttribute maTextAttribute; // text and text attributes (if used) + + public: + SdrFillTextAttribute( + const SdrFillAttribute& rFill, + const FillGradientAttribute& rFillFloatTransGradient, + const SdrTextAttribute& rTextAttribute); + SdrFillTextAttribute(); + SdrFillTextAttribute(const SdrFillTextAttribute& rCandidate); + SdrFillTextAttribute& operator=(const SdrFillTextAttribute& rCandidate); + + // compare operator + bool operator==(const SdrFillTextAttribute& rCandidate) const; + + // data access + const SdrFillAttribute& getFill() const { return maFill; } + const FillGradientAttribute& getFillFloatTransGradient() const { return maFillFloatTransGradient; } + const SdrTextAttribute& getText() const { return maTextAttribute; } + }; + } // end of namespace attribute +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_ATTRIBUTE_SDRFILLTEXTATTRIBUTE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/attribute/sdrformtextattribute.hxx b/include/svx/sdr/attribute/sdrformtextattribute.hxx new file mode 100644 index 000000000000..5a406376dccd --- /dev/null +++ b/include/svx/sdr/attribute/sdrformtextattribute.hxx @@ -0,0 +1,83 @@ +/* -*- 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 _SDR_ATTRIBUTE_SDRFORMTEXTATTRIBUTE_HXX +#define _SDR_ATTRIBUTE_SDRFORMTEXTATTRIBUTE_HXX + +#include <sal/types.h> +#include <svx/xenum.hxx> +#include <tools/color.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +class SfxItemSet; + +namespace drawinglayer { namespace attribute { + class ImpSdrFormTextAttribute; + class SdrFormTextOutlineAttribute; +}} + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace attribute + { + class SdrFormTextAttribute + { + private: + ImpSdrFormTextAttribute* mpSdrFormTextAttribute; + + public: + /// constructors/assignmentoperator/destructor + SdrFormTextAttribute(const SfxItemSet& rSet); + SdrFormTextAttribute(); + SdrFormTextAttribute(const SdrFormTextAttribute& rCandidate); + SdrFormTextAttribute& operator=(const SdrFormTextAttribute& rCandidate); + ~SdrFormTextAttribute(); + + // checks if the incarnation is default constructed + bool isDefault() const; + + // compare operator + bool operator==(const SdrFormTextAttribute& rCandidate) const; + + // data read access + sal_Int32 getFormTextDistance() const; + sal_Int32 getFormTextStart() const; + sal_Int32 getFormTextShdwXVal() const; + sal_Int32 getFormTextShdwYVal() const; + XFormTextStyle getFormTextStyle() const; + XFormTextAdjust getFormTextAdjust() const; + XFormTextShadow getFormTextShadow() const; + Color getFormTextShdwColor() const; + const SdrFormTextOutlineAttribute& getOutline() const; + const SdrFormTextOutlineAttribute& getShadowOutline() const; + bool getFormTextMirror() const; + bool getFormTextOutline() const; + }; + } // end of namespace attribute +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_ATTRIBUTE_SDRFORMTEXTATTRIBUTE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/attribute/sdrformtextoutlineattribute.hxx b/include/svx/sdr/attribute/sdrformtextoutlineattribute.hxx new file mode 100644 index 000000000000..139fb0fd045e --- /dev/null +++ b/include/svx/sdr/attribute/sdrformtextoutlineattribute.hxx @@ -0,0 +1,74 @@ +/* -*- 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 _SDR_ATTRIBUTE_SDRFORMTEXTOUTLINEATTRIBUTE_HXX +#define _SDR_ATTRIBUTE_SDRFORMTEXTOUTLINEATTRIBUTE_HXX + +#include <sal/types.h> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +namespace drawinglayer { namespace attribute { + class ImpSdrFormTextOutlineAttribute; + class LineAttribute; + class StrokeAttribute; +}} + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace attribute + { + class SdrFormTextOutlineAttribute + { + private: + ImpSdrFormTextOutlineAttribute* mpSdrFormTextOutlineAttribute; + + public: + /// constructors/assignmentoperator/destructor + SdrFormTextOutlineAttribute( + const LineAttribute& rLineAttribute, + const StrokeAttribute& rStrokeAttribute, + sal_uInt8 nTransparence); + SdrFormTextOutlineAttribute(); + SdrFormTextOutlineAttribute(const SdrFormTextOutlineAttribute& rCandidate); + SdrFormTextOutlineAttribute& operator=(const SdrFormTextOutlineAttribute& rCandidate); + ~SdrFormTextOutlineAttribute(); + + // checks if the incarnation is default constructed + bool isDefault() const; + + // compare operator + bool operator==(const SdrFormTextOutlineAttribute& rCandidate) const; + + // data read access + const LineAttribute& getLineAttribute() const; + const StrokeAttribute& getStrokeAttribute() const; + sal_uInt8 getTransparence() const; + }; + } // end of namespace attribute +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_ATTRIBUTE_SDRFORMTEXTOUTLINEATTRIBUTE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/attribute/sdrlinefillshadowtextattribute.hxx b/include/svx/sdr/attribute/sdrlinefillshadowtextattribute.hxx new file mode 100644 index 000000000000..20c853915737 --- /dev/null +++ b/include/svx/sdr/attribute/sdrlinefillshadowtextattribute.hxx @@ -0,0 +1,69 @@ +/* -*- 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 _SDR_ATTRIBUTE_SDRLINEFILLSHADOWTEXTATTRIBUTE_HXX +#define _SDR_ATTRIBUTE_SDRLINEFILLSHADOWTEXTATTRIBUTE_HXX + +#include <sal/types.h> +#include <svx/sdr/attribute/sdrlineshadowtextattribute.hxx> +#include <drawinglayer/attribute/sdrfillattribute.hxx> +#include <drawinglayer/attribute/fillgradientattribute.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace attribute + { + class SdrLineFillShadowTextAttribute : public SdrLineShadowTextAttribute + { + // add fill and transGradient attributes + SdrFillAttribute maFill; // fill attributes (if used) + FillGradientAttribute maFillFloatTransGradient; // fill float transparence gradient (if used) + + public: + SdrLineFillShadowTextAttribute( + const SdrLineAttribute& rLine, + const SdrFillAttribute& rFill, + const SdrLineStartEndAttribute& rLineStartEnd, + const SdrShadowAttribute& rShadow, + const FillGradientAttribute& rFillFloatTransGradient, + const SdrTextAttribute& rTextAttribute); + SdrLineFillShadowTextAttribute(); + SdrLineFillShadowTextAttribute(const SdrLineFillShadowTextAttribute& rCandidate); + SdrLineFillShadowTextAttribute& operator=(const SdrLineFillShadowTextAttribute& rCandidate); + + // checks if the incarnation is default constructed + bool isDefault() const; + + // compare operator + bool operator==(const SdrLineFillShadowTextAttribute& rCandidate) const; + + // data access + const SdrFillAttribute& getFill() const { return maFill; } + const FillGradientAttribute& getFillFloatTransGradient() const { return maFillFloatTransGradient; } + }; + } // end of namespace attribute +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_ATTRIBUTE_SDRLINEFILLSHADOWTEXTATTRIBUTE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/attribute/sdrlineshadowtextattribute.hxx b/include/svx/sdr/attribute/sdrlineshadowtextattribute.hxx new file mode 100644 index 000000000000..4a82d683ec26 --- /dev/null +++ b/include/svx/sdr/attribute/sdrlineshadowtextattribute.hxx @@ -0,0 +1,67 @@ +/* -*- 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 _SDR_ATTRIBUTE_SDRLINESHADOWTEXTATTRIBUTE_HXX +#define _SDR_ATTRIBUTE_SDRLINESHADOWTEXTATTRIBUTE_HXX + +#include <sal/types.h> +#include <svx/sdr/attribute/sdrshadowtextattribute.hxx> +#include <drawinglayer/attribute/sdrlineattribute.hxx> +#include <drawinglayer/attribute/sdrlinestartendattribute.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace attribute + { + class SdrLineShadowTextAttribute : public SdrShadowTextAttribute + { + // line, shadow, lineStartEnd and text attributes + SdrLineAttribute maLine; // line attributes (if used) + SdrLineStartEndAttribute maLineStartEnd; // line start end (if used) + + public: + SdrLineShadowTextAttribute( + const SdrLineAttribute& rLine, + const SdrLineStartEndAttribute& rLineStartEnd, + const SdrShadowAttribute& rShadow, + const SdrTextAttribute& rTextAttribute); + SdrLineShadowTextAttribute(); + SdrLineShadowTextAttribute(const SdrLineShadowTextAttribute& rCandidate); + SdrLineShadowTextAttribute& operator=(const SdrLineShadowTextAttribute& rCandidate); + + // checks if the incarnation is default constructed + bool isDefault() const; + + // compare operator + bool operator==(const SdrLineShadowTextAttribute& rCandidate) const; + + // data access + const SdrLineAttribute& getLine() const { return maLine; } + const SdrLineStartEndAttribute& getLineStartEnd() const { return maLineStartEnd; } + }; + } // end of namespace attribute +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_ATTRIBUTE_SDRLINESHADOWTEXTATTRIBUTE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/attribute/sdrshadowtextattribute.hxx b/include/svx/sdr/attribute/sdrshadowtextattribute.hxx new file mode 100644 index 000000000000..0b82edc12241 --- /dev/null +++ b/include/svx/sdr/attribute/sdrshadowtextattribute.hxx @@ -0,0 +1,64 @@ +/* -*- 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 _SDR_ATTRIBUTE_SDRSHADOWTEXTATTRIBUTE_HXX +#define _SDR_ATTRIBUTE_SDRSHADOWTEXTATTRIBUTE_HXX + +#include <sal/types.h> +#include <drawinglayer/attribute/sdrshadowattribute.hxx> +#include <svx/sdr/attribute/sdrtextattribute.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace attribute + { + class SdrShadowTextAttribute + { + // shadow and text attributes + SdrShadowAttribute maShadow; // shadow attributes (if used) + SdrTextAttribute maTextAttribute; // text and text attributes (if used) + + public: + SdrShadowTextAttribute( + const SdrShadowAttribute& rShadow, + const SdrTextAttribute& rTextAttribute); + SdrShadowTextAttribute(); + SdrShadowTextAttribute(const SdrShadowTextAttribute& rCandidate); + SdrShadowTextAttribute& operator=(const SdrShadowTextAttribute& rCandidate); + + // checks if the incarnation is default constructed + bool isDefault() const; + + // compare operator + bool operator==(const SdrShadowTextAttribute& rCandidate) const; + + // data access + const SdrShadowAttribute& getShadow() const { return maShadow; } + const SdrTextAttribute& getText() const { return maTextAttribute; } + }; + } // end of namespace attribute +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_ATTRIBUTE_SDRSHADOWTEXTATTRIBUTE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/attribute/sdrtextattribute.hxx b/include/svx/sdr/attribute/sdrtextattribute.hxx new file mode 100644 index 000000000000..ac85aebc8d46 --- /dev/null +++ b/include/svx/sdr/attribute/sdrtextattribute.hxx @@ -0,0 +1,122 @@ +/* -*- 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 _SDR_ATTRIBUTE_SDRTEXTATTRIBUTE_HXX +#define _SDR_ATTRIBUTE_SDRTEXTATTRIBUTE_HXX + +#include <sal/types.h> +#include <svx/xenum.hxx> +#include <editeng/outlobj.hxx> +#include <svx/sdtaitm.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +class SdrText; + +namespace drawinglayer { namespace animation { + class AnimationEntryList; +}} + +namespace drawinglayer { namespace attribute { + class SdrFormTextAttribute; +}} + +namespace drawinglayer { namespace attribute { + class ImpSdrTextAttribute; +}} + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace attribute + { + class SdrTextAttribute + { + private: + ImpSdrTextAttribute* mpSdrTextAttribute; + + public: + /// constructors/assignmentoperator/destructor + SdrTextAttribute( + const SdrText& rSdrText, + const OutlinerParaObject& rOutlinerParaObject, + XFormTextStyle eFormTextStyle, + sal_Int32 aTextLeftDistance, + sal_Int32 aTextUpperDistance, + sal_Int32 aTextRightDistance, + sal_Int32 aTextLowerDistance, + SdrTextHorzAdjust aSdrTextHorzAdjust, + SdrTextVertAdjust aSdrTextVertAdjust, + bool bContour, + bool bFitToSize, + bool bAutoFit, + bool bHideContour, + bool bBlink, + bool bScroll, + bool bInEditMode, + bool bFixedCellHeight, + bool bWrongSpell); + SdrTextAttribute(); + SdrTextAttribute(const SdrTextAttribute& rCandidate); + SdrTextAttribute& operator=(const SdrTextAttribute& rCandidate); + ~SdrTextAttribute(); + + // checks if the incarnation is default constructed + bool isDefault() const; + + // compare operator + bool operator==(const SdrTextAttribute& rCandidate) const; + + // data read access + const SdrText& getSdrText() const; + const OutlinerParaObject& getOutlinerParaObject() const; + bool isContour() const; + bool isFitToSize() const; + bool isAutoFit() const; + bool isHideContour() const; + bool isBlink() const; + bool isScroll() const; + bool isInEditMode() const; + bool isFixedCellHeight() const; + const SdrFormTextAttribute& getSdrFormTextAttribute() const; + sal_Int32 getTextLeftDistance() const; + sal_Int32 getTextUpperDistance() const; + sal_Int32 getTextRightDistance() const; + sal_Int32 getTextLowerDistance() const; + SdrTextHorzAdjust getSdrTextHorzAdjust() const; + SdrTextVertAdjust getSdrTextVertAdjust() const; + + // helpers: animation timing generators + void getBlinkTextTiming( + drawinglayer::animation::AnimationEntryList& rAnimList) const; + void getScrollTextTiming( + drawinglayer::animation::AnimationEntryList& rAnimList, + double fFrameLength, + double fTextLength) const; + }; + } // end of namespace attribute +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_ATTRIBUTE_SDRTEXTATTRIBUTE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/displayinfo.hxx b/include/svx/sdr/contact/displayinfo.hxx new file mode 100644 index 000000000000..6c4b85e6f989 --- /dev/null +++ b/include/svx/sdr/contact/displayinfo.hxx @@ -0,0 +1,107 @@ +/* -*- 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 _SDR_CONTACT_DISPLAYINFO_HXX +#define _SDR_CONTACT_DISPLAYINFO_HXX + +#include <svx/svdsob.hxx> +#include <vcl/region.hxx> +#include "svx/svxdllapi.h" + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC DisplayInfo + { + protected: + // The Layers which shall be processed (visible) + SetOfByte maProcessLayers; + + // The redraw area, in logical coordinates of OutputDevice. If Region + // is empty, everything needs to be redrawn + Region maRedrawArea; + + // bitfield + + // Internal flag to know when the control layer is painted. Default is + // false. If set to true, painting of the page, page borders and + // the rasters will be suppressed as if mbPageProcessingActive is set (see there). + // This flag is set internally from the processing mechanism to avoid double page + // painting when the control layer needs to be painted as last layer + unsigned mbControlLayerProcessingActive : 1; + + // Internal flag to decide if page stuff (background, border, MasterPage, grid, etc...) + // will be processed at all. This flag is user-defined and will not be changed from the + // processing mechanism. Default is true, thus set to false if PagePainting should be suppressed. + // For more granular switching page stuff painting on and off, use the according flags at the + // view (->Is*Visible()) + unsigned mbPageProcessingActive : 1; + + // Internal flag to remember if EnteredGroupDrawMode is active. Default is true + // since this mode starts activated and gets switched off when reacing + // the current group level. Should only be changed by instances which do + // primitive processing + unsigned mbGhostedDrawModeActive : 1; + + // Internal flag to know if a MasterPage is processed as SubContent of another + // page. Initialized to false, this should only be changed from the instance which + // is processing the MasterPage asSubContent and knows what it does + unsigned mbSubContentActive : 1; + + public: + // basic constructor. + DisplayInfo(); + + // destructor + virtual ~DisplayInfo(); + + // access to ProcessLayers + void SetProcessLayers(const SetOfByte& rSet); + const SetOfByte& GetProcessLayers() const { return maProcessLayers; } + + // access to RedrawArea + void SetRedrawArea(const Region& rRegion); + const Region& GetRedrawArea() const { return maRedrawArea; } + + // Access to ControlLayerProcessingActive flag + void SetControlLayerProcessingActive(bool bDoPaint); + bool GetControlLayerProcessingActive() const { return mbControlLayerProcessingActive; } + + // Access to PageProcessingActive flag + void SetPageProcessingActive(bool bDoPaint); + bool GetPageProcessingActive() const { return mbPageProcessingActive; } + + // Save the original DrawMode from outdev + void ClearGhostedDrawMode(); + void SetGhostedDrawMode(); + bool IsGhostedDrawModeActive() const { return mbGhostedDrawModeActive; } + + // access to master page painting flag + bool GetSubContentActive() const { return mbSubContentActive; } + void SetSubContentActive(bool bNew); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_DISPLAYINFO_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/objectcontact.hxx b/include/svx/sdr/contact/objectcontact.hxx new file mode 100644 index 000000000000..fb67a18803fd --- /dev/null +++ b/include/svx/sdr/contact/objectcontact.hxx @@ -0,0 +1,221 @@ +/* -*- 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 _SDR_CONTACT_OBJECTCONTACT_HXX +#define _SDR_CONTACT_OBJECTCONTACT_HXX + +#include <svx/sdr/animation/objectanimator.hxx> +#include "svx/svxdllapi.h" +#include <drawinglayer/geometry/viewinformation2d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SetOfByte; +class Rectangle; +class SdrPageView; +class OutputDevice; + +namespace sdr { namespace contact { + class DisplayInfo; + class ViewContact; + class ViewObjectContactRedirector; +}} + +namespace sdr { namespace event { + class TimerEventHandler; +}} + +namespace basegfx { + class B2DRange; + class B2DHomMatrix; +} + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ObjectContact + { + private: + // make ViewObjectContact a friend to exclusively allow it to use + // AddViewObjectContact/RemoveViewObjectContact + friend class ViewObjectContact; + + // All VOCs which are created using this OC, thus remembering this OC + // as a reference. All those VOCs need to be deleted when the OC goes down. + // Registering and de-registering is done in the VOC constructors/destructors. + std::vector< ViewObjectContact* > maViewObjectContactVector; + + // A new ViewObjectContact was created and shall be remembered. + void AddViewObjectContact(ViewObjectContact& rVOContact); + + // A ViewObjectContact was deleted and shall be forgotten. + virtual void RemoveViewObjectContact(ViewObjectContact& rVOContact); + + // the primitiveAnimator which is used if this View and/or the contained primitives + // support animatedSwitchPrimitives + sdr::animation::primitiveAnimator maPrimitiveAnimator; + + // the EventHandler for e.g. asynchronious loading of graphics + sdr::event::TimerEventHandler* mpEventHandler; + + // The redirector. If set it is used to pipe all supported calls + // to the redirector + ViewObjectContactRedirector* mpViewObjectContactRedirector; + + // the Primitive2DParameters containing view information + drawinglayer::geometry::ViewInformation2D maViewInformation2D; + + // bitfield + // flag for preview renderer + unsigned mbIsPreviewRenderer : 1; + + // method to create a EventHandler. Needs to give a result. + sdr::event::TimerEventHandler* CreateEventHandler(); + + protected: + // Interface to allow derivates to travel over the registered VOC's + sal_uInt32 getViewObjectContactCount() const { return maViewObjectContactVector.size(); } + ViewObjectContact* getViewObjectContact(sal_uInt32 a) const { return maViewObjectContactVector[a]; } + + // interface to allow derivates to set PreviewRenderer flag + void setPreviewRenderer(bool bNew) { mbIsPreviewRenderer = bNew; } + + // interface to allow derivates to set ViewInformation2D + void updateViewInformation2D(const drawinglayer::geometry::ViewInformation2D& rViewInformation2D) { maViewInformation2D = rViewInformation2D; } + + public: + // basic constructor + ObjectContact(); + virtual ~ObjectContact(); + + // LazyInvalidate request. This is used from the VOCs to mark that they + // got invalidated by an ActionCanged() call. An active view needs to remember + // this and take action on it. Default implementation directly calls back + // triggerLazyInvalidate() wich promptly handles the request + virtual void setLazyInvalidate(ViewObjectContact& rVOC); + + // call this to support evtl. preparations for repaint. Default does nothing + virtual void PrepareProcessDisplay(); + + // Process the whole displaying + virtual void ProcessDisplay(DisplayInfo& rDisplayInfo); + + // test if visualizing of entered groups is switched on at all. Default + // implementation returns sal_False. + virtual bool DoVisualizeEnteredGroup() const; + + // get active group's (the entered group) ViewContact + virtual const ViewContact* getActiveViewContact() const; + + // Invalidate given rectangle at the window/output which is represented by + // this ObjectContact. Default does nothing. + virtual void InvalidatePartOfView(const basegfx::B2DRange& rRange) const; + + // Get info if given Rectangle is visible in this view + virtual bool IsAreaVisible(const basegfx::B2DRange& rRange) const; + + // Get info about the need to visualize GluePoints. The default + // is that it is not necessary. + virtual bool AreGluePointsVisible() const; + + // method to get the primitiveAnimator + sdr::animation::primitiveAnimator& getPrimitiveAnimator(); + + // method to get the EventHandler. It will + // return a existing one or create a new one using CreateEventHandler(). + sdr::event::TimerEventHandler& GetEventHandler() const; + + // delete the EventHandler + void DeleteEventHandler(); + + // test if there is an EventHandler without creating one on demand + bool HasEventHandler() const; + + // check if text animation is allowed. Default is sal_true. + virtual bool IsTextAnimationAllowed() const; + + // check if graphic animation is allowed. Default is sal_true. + virtual bool IsGraphicAnimationAllowed() const; + + // check if asynchronious graphis loading is allowed. Default is sal_False. + virtual bool IsAsynchronGraphicsLoadingAllowed() const; + + // access to ViewObjectContactRedirector + ViewObjectContactRedirector* GetViewObjectContactRedirector() const; + void SetViewObjectContactRedirector(ViewObjectContactRedirector* pNew); + + // check if buffering of MasterPages is allowed. Default is sal_False. + virtual bool IsMasterPageBufferingAllowed() const; + + // print? Default is false + virtual bool isOutputToPrinter() const; + + // window? Default is true + virtual bool isOutputToWindow() const; + + // VirtualDevice? Default is false + virtual bool isOutputToVirtualDevice() const; + + // recording MetaFile? Default is false + virtual bool isOutputToRecordingMetaFile() const; + + // pdf export? Default is false + virtual bool isOutputToPDFFile() const; + + // gray display mode + virtual bool isDrawModeGray() const; + + // gray display mode + virtual bool isDrawModeBlackWhite() const; + + // high contrast display mode + virtual bool isDrawModeHighContrast() const; + + // check if this is a preview renderer. Default is sal_False. + bool IsPreviewRenderer() const { return mbIsPreviewRenderer; } + + // get Primitive2DParameters for this view + const drawinglayer::geometry::ViewInformation2D& getViewInformation2D() const { return maViewInformation2D; } + + // access to SdrPageView. May return 0L like the default implementations do. Needs to be overloaded as needed. + virtual SdrPageView* TryToGetSdrPageView() const; + + // access to OutputDevice. May return 0L like the default implementations do. Needs to be overloaded as needed. + virtual OutputDevice* TryToGetOutputDevice() const; + + // reset ViewPort at internal ViewInformation2D. This is needed when the OC is used + // not for ProcessDisplay() but to get a VOC associated with it. When trying to get + // a sequence of primitives from the VOC then, the last initialized ViewPort from + // the last ProcessDisplay() is used for geometric visibility testing. If this is not + // wanted (like in such cases) this method is used. It will reuse the current + // ViewInformation2D, but clear the ViewPort (no ViewPort means all is visible) + void resetViewPort(); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_OBJECTCONTACT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/objectcontactofobjlistpainter.hxx b/include/svx/sdr/contact/objectcontactofobjlistpainter.hxx new file mode 100644 index 000000000000..9c4a0bff1763 --- /dev/null +++ b/include/svx/sdr/contact/objectcontactofobjlistpainter.hxx @@ -0,0 +1,145 @@ +/* -*- 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 _SDR_CONTACT_OBJECTCONTACTOFOBJLISTPAINTER_HXX +#define _SDR_CONTACT_OBJECTCONTACTOFOBJLISTPAINTER_HXX + +#include <svx/sdr/contact/objectcontact.hxx> +#include "svx/svxdllapi.h" +#include <svx/svdpage.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrPage; +class SdrObject; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ObjectContactPainter : public ObjectContact + { + protected: + // Hierarchy access methods + virtual sal_uInt32 GetPaintObjectCount() const = 0; + virtual ViewContact& GetPaintObjectViewContact(sal_uInt32 nIndex) const = 0; + + public: + // basic constructor/destructor + ObjectContactPainter(); + virtual ~ObjectContactPainter(); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + // typedef for transferring SdrObject + typedef ::std::vector< SdrObject* > SdrObjectVector; + + class SVX_DLLPUBLIC ObjectContactOfObjListPainter : public ObjectContactPainter + { + protected: + // Target OutputDevice + OutputDevice& mrTargetOutputDevice; + + // Set StartPoint for next run, also given in constructor + SdrObjectVector maStartObjects; + + // the processed page which is the base e.g. for PageNumberFields + const SdrPage* mpProcessedPage; + + // Hierarchy access methods + virtual sal_uInt32 GetPaintObjectCount() const; + virtual ViewContact& GetPaintObjectViewContact(sal_uInt32 nIndex) const; + + public: + // basic constructor/destructor + ObjectContactOfObjListPainter( + OutputDevice& rTargetDevice, + const SdrObjectVector& rObjects, + const SdrPage* pProcessedPage); + virtual ~ObjectContactOfObjListPainter(); + + // Process the whole displaying + virtual void ProcessDisplay(DisplayInfo& rDisplayInfo); + + // VirtualDevice? Default is false + virtual bool isOutputToVirtualDevice() const; + + // recording MetaFile? Default is false + virtual bool isOutputToRecordingMetaFile() const; + + // pdf export? Default is false + virtual bool isOutputToPDFFile() const; + + // access to OutputDevice. May return 0L like the default implementations do. Needs to be overloaded as needed. + virtual OutputDevice* TryToGetOutputDevice() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ObjectContactOfPagePainter : public ObjectContactPainter + { + protected: + // the original ObjectContact this painter is working on + ObjectContact& mrOriginalObjectContact; + + // Set StartPoint for next run, also given in constructor + SdrPageWeakRef mxStartPage; + + // Hierarchy access methods + virtual sal_uInt32 GetPaintObjectCount() const; + virtual ViewContact& GetPaintObjectViewContact(sal_uInt32 nIndex) const; + + public: + // basic constructor + ObjectContactOfPagePainter( + const SdrPage* pPage, + ObjectContact& rOriginalObjectContact); + virtual ~ObjectContactOfPagePainter(); + + // set another page + void SetStartPage(const SdrPage* pPage); + const SdrPage* GetStartPage() const { return mxStartPage.get(); } + + // access to OutputDevice. May return 0L like the default implementations do. Needs to be overloaded as needed. + virtual OutputDevice* TryToGetOutputDevice() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_OBJECTCONTACTOFOBJLISTPAINTER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/objectcontactofpageview.hxx b/include/svx/sdr/contact/objectcontactofpageview.hxx new file mode 100644 index 000000000000..06371bf35b81 --- /dev/null +++ b/include/svx/sdr/contact/objectcontactofpageview.hxx @@ -0,0 +1,144 @@ +/* -*- 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 _SDR_CONTACT_OBJECTCONTACTOFPAGEVIEW_HXX +#define _SDR_CONTACT_OBJECTCONTACTOFPAGEVIEW_HXX + +#include <svx/sdr/contact/objectcontact.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrPageWindow; +class SdrPage; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ObjectContactOfPageView : public ObjectContact, public Timer + { + protected: + // the owner of this ObjectContactOfPageView. Set from constructor and not + // to be changed in any way. + SdrPageWindow& mrPageWindow; + + // Process the whole displaying, the real version + void DoProcessDisplay(DisplayInfo& rDisplayInfo); + + public: + // access to SdrPageWindow + SdrPageWindow& GetPageWindow() const { return mrPageWindow; } + + // access to SdrPage of PageView + SdrPage* GetSdrPage() const; + + // basic constructor, used from SdrPageView. + explicit ObjectContactOfPageView(SdrPageWindow& rPageWindow); + virtual ~ObjectContactOfPageView(); + + // LazyInvalidate request. This is used from the VOCs to mark that they + // got invalidated by an ActionCanged() call. An active view needs to remember + // this and take action on it. Default implementation directly calls back + // triggerLazyInvalidate() wich promptly handles the request + virtual void setLazyInvalidate(ViewObjectContact& rVOC); + + // call this to support evtl. preparations for repaint + virtual void PrepareProcessDisplay(); + + // From baseclass Timer, the timeout call triggered by te LazyInvalidate mechanism + virtual void Timeout(); + + // Process the whole displaying + virtual void ProcessDisplay(DisplayInfo& rDisplayInfo); + + // test if visualizing of entered groups is switched on at all + virtual bool DoVisualizeEnteredGroup() const; + + // get active group's (the entered group) ViewContact + virtual const ViewContact* getActiveViewContact() const; + + // Invalidate given rectangle at the window/output which is represented by + // this ObjectContact. + virtual void InvalidatePartOfView(const basegfx::B2DRange& rRange) const; + + // Get info if given Rectangle is visible in this view + virtual bool IsAreaVisible(const basegfx::B2DRange& rRange) const; + + // Get info about the need to visualize GluePoints. The default + // is that it is not necessary. + virtual bool AreGluePointsVisible() const; + + // check if text animation is allowed. + virtual bool IsTextAnimationAllowed() const; + + // check if graphic animation is allowed. + virtual bool IsGraphicAnimationAllowed() const; + + // check if asynchronious graphis loading is allowed. Default is sal_False. + virtual bool IsAsynchronGraphicsLoadingAllowed() const; + + // check if buffering of MasterPages is allowed. Default is sal_False. + virtual bool IsMasterPageBufferingAllowed() const; + + // print? Default is false + virtual bool isOutputToPrinter() const; + + // window? Default is true + virtual bool isOutputToWindow() const; + + // VirtualDevice? Default is false + virtual bool isOutputToVirtualDevice() const; + + // recording MetaFile? Default is false + virtual bool isOutputToRecordingMetaFile() const; + + // pdf export? Default is false + virtual bool isOutputToPDFFile() const; + + // gray display mode + virtual bool isDrawModeGray() const; + + // gray display mode + virtual bool isDrawModeBlackWhite() const; + + // high contrast display mode + virtual bool isDrawModeHighContrast() const; + + // overloaded access to SdrPageView + virtual SdrPageView* TryToGetSdrPageView() const; + + // access to OutputDevice. May return 0L like the default implementations do. Needs to be overloaded as needed. + virtual OutputDevice* TryToGetOutputDevice() const; + + /** sets all UNO controls which are associated with this ObjectContact to + design or alive mode. + */ + void SetUNOControlsDesignMode( bool _bDesignMode ) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_OBJECTCONTACTOFPAGEVIEW_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontact.hxx b/include/svx/sdr/contact/viewcontact.hxx new file mode 100644 index 000000000000..8e136e03afba --- /dev/null +++ b/include/svx/sdr/contact/viewcontact.hxx @@ -0,0 +1,168 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACT_HXX +#define _SDR_CONTACT_VIEWCONTACT_HXX + +#include <sal/types.h> +#include "svx/svxdllapi.h" +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SetOfByte; +class SdrPage; +class SdrObject; + +namespace sdr +{ + namespace contact + { + class ObjectContact; + class ViewObjectContact; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewContact + { + private: + // make ViewObjectContact a friend to exclusively allow it to use + // AddViewObjectContact/RemoveViewObjectContact + friend class ViewObjectContact; + + // List of ViewObjectContacts. This contains all VOCs which were constructed + // with this VC. Since the VOCs remember a reference to this VC, this list needs + // to be kept and is used e.g. at destructor to destroy all VOCs. + // Registering and de-registering is done in the VOC constructors/destructors. + std::vector< ViewObjectContact* > maViewObjectContactVector; + + // Primitive2DSequence of the ViewContact. This contains all necessary information + // for the graphical visualisation and needs to be supported by all VCs which + // can be visualized. + drawinglayer::primitive2d::Primitive2DSequence mxViewIndependentPrimitive2DSequence; + + // A new ViewObjectContact was created and shall be remembered. + void AddViewObjectContact(ViewObjectContact& rVOContact); + + // A ViewObjectContact was deleted and shall be forgotten. + void RemoveViewObjectContact(ViewObjectContact& rVOContact); + + // internal tooling to delete VOCs + void deleteAllVOCs(); + + protected: + // Interface to allow derivates to travel over the registered VOC's + sal_uInt32 getViewObjectContactCount() const { return maViewObjectContactVector.size(); } + ViewObjectContact* getViewObjectContact(sal_uInt32 a) const { return maViewObjectContactVector[a]; } + + // Create a Object-Specific ViewObjectContact, set ViewContact and + // ObjectContact. Always needs to return something. Default is to create + // a standard ViewObjectContact containing the given ObjectContact and *this + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + + // This method is responsible for creating the graphical visualisation data derived ONLY from + // the model data. It will be stored/buffered in mxViewIndependentPrimitive2DSequence. The default implementation + // creates a yellow replacement rectangle (1000, 1000, 5000, 3000) to visualize missing + // implementations. All implementations have to provide basic geometry here, this is the central + // visualisation method and will also be used for BoundRect computations in the long run. + // This means it's always an error when the default implementation is called and thus gets + // asserted there + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + + // method for flushing View Independent Primitive2DSequence for VOC implementations + void flushViewIndependentPrimitive2DSequence() { mxViewIndependentPrimitive2DSequence.realloc(0); } + + // basic constructor. Since this is a base class only, it shall + // never be called directly + ViewContact(); + + // Methods to react on start getting viewed or stop getting + // viewed. This info is derived from the count of members of + // registered ViewObjectContacts. Default does nothing. + virtual void StartGettingViewed(); + virtual void StopGettingViewed(); + + public: + // basic destructor with needed cleanups + virtual ~ViewContact(); + + // get a Object-specific ViewObjectContact for a specific + // ObjectContact (->View). Always needs to return something. + ViewObjectContact& GetViewObjectContact(ObjectContact& rObjectContact); + + // Test if this ViewContact has ViewObjectContacts at all. This can + // be used to test if this ViewContact is visualized ATM or not + bool HasViewObjectContacts(bool bExcludePreviews = false) const; + + // Check if this primitive is animated in any OC (View) which means it has + // generated a PrimitiveAnimation in it's VOC + bool isAnimatedInAnyViewObjectContact() const; + + // Access to possible sub-hierarchy and parent. GetObjectCount() default is 0L + // and GetViewContact default pops up an assert since it's an error if + // GetObjectCount has a result != 0 and it's not overloaded. + virtual sal_uInt32 GetObjectCount() const; + virtual ViewContact& GetViewContact(sal_uInt32 nIndex) const; + virtual ViewContact* GetParentContact() const; + + // React on insertion of a child into DRawHierarchy starting + // from this object + void ActionChildInserted(ViewContact& rChild); + + // React on changes of the object of this ViewContact + virtual void ActionChanged(); + + // access to SdrObject and/or SdrPage. May return 0L like the default + // implementations do. Needs to be overloaded as needed. + virtual SdrObject* TryToGetSdrObject() const; + virtual SdrPage* TryToGetSdrPage() const; + + // access to the local primitive. This will ensure that the primitive is + // current in comparing the local one with a fresh created incarnation + drawinglayer::primitive2d::Primitive2DSequence getViewIndependentPrimitive2DSequence() const; + + // add Gluepoints (if available) + virtual drawinglayer::primitive2d::Primitive2DSequence createGluePointPrimitive2DSequence() const; + + // allow embedding if needed (e.g. for SdrObjects, evtl. Name, Title and description get added). This + // is a helper normally used from getViewIndependentPrimitive2DSequence(), but there is one exception + // for 3D scenes + virtual drawinglayer::primitive2d::Primitive2DSequence embedToObjectSpecificInformation(const drawinglayer::primitive2d::Primitive2DSequence& rSource) const; + + // delete all existing VOCs including DrawHierarchy which will invalidate all + // visualisations, too. Used mostly at object removal from DrawHierarchy to + // delete all existing VOCs by purpose, but can also be used for other purposes. + // It is always possible to delete the VOCs, these are re-created on demand + void flushViewObjectContacts(bool bWithHierarchy = true); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofe3d.hxx b/include/svx/sdr/contact/viewcontactofe3d.hxx new file mode 100644 index 000000000000..02bdb36e53c0 --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofe3d.hxx @@ -0,0 +1,109 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFE3D_HXX +#define _SDR_CONTACT_VIEWCONTACTOFE3D_HXX + +#include <svx/sdr/contact/viewcontactofsdrobj.hxx> +#include <drawinglayer/primitive3d/baseprimitive3d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +namespace sdr { namespace contact { + class ViewContactOfE3dScene; +}} + +namespace drawinglayer { namespace attribute { + class SdrLineAttribute; +}} + +namespace basegfx { + class BColor; + class B3DHomMatrix; +} + +class E3dObject; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfE3d : public ViewContactOfSdrObj + { + protected: + // Create a Object-Specific ViewObjectContact, set ViewContact and + // ObjectContact. Always needs to return something. + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + + public: + // basic constructor, used from E3dObject. + explicit ViewContactOfE3d(E3dObject& rObj); + virtual ~ViewContactOfE3d(); + + // access to E3dObject + E3dObject& GetE3dObject() const + { + return (E3dObject&)GetSdrObject(); + } + + // public helpers + drawinglayer::primitive2d::Primitive2DSequence impCreateWithGivenPrimitive3DSequence( + const drawinglayer::primitive3d::Primitive3DSequence& rxContent3D) const; + + ////////////////////////////////////////////////////////////////////////////// + // primitive stuff + + protected: + // Primitive3DSequence of the ViewContact. This contains all necessary information + // for the graphical visualisation and needs to be supported by all 3D VCs which + // can be visualized. It does NOT contain the object transformation to be able to + // buffer for all possible usages + drawinglayer::primitive3d::Primitive3DSequence mxViewIndependentPrimitive3DSequence; + + // This method is responsible for creating the graphical visualisation data which is + // stored in mxViewIndependentPrimitive3DSequence, but without object transformation + virtual drawinglayer::primitive3d::Primitive3DSequence createViewIndependentPrimitive3DSequence() const = 0; + + // This method is responsible for creating the graphical visualisation data derived ONLY from + // the model data. The default implementation will try to create a 3D to 2D embedding (will work + // when scene is known) which can then be used for 2D processing concerning ranges + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + + public: + // access to the local primitive without the object's local 3D transform. This is e.g. needed + // to get the not-yet transformed BoundVolume for e.g. interactions + drawinglayer::primitive3d::Primitive3DSequence getVIP3DSWithoutObjectTransform() const; + + // access to the local primitive. This will ensure that the list is + // current in comparing the local list content with a fresh created incarnation. It will + // use getVIP3DSWithoutObjectTransform and embed to 3d transform primitive when object's + // local 3d transform is used + drawinglayer::primitive3d::Primitive3DSequence getViewIndependentPrimitive3DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFE3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofe3dcube.hxx b/include/svx/sdr/contact/viewcontactofe3dcube.hxx new file mode 100644 index 000000000000..8207fa558db0 --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofe3dcube.hxx @@ -0,0 +1,61 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFE3DCUBE_HXX +#define _SDR_CONTACT_VIEWCONTACTOFE3DCUBE_HXX + +#include <svx/sdr/contact/viewcontactofe3d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class E3dCubeObj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfE3dCube : public ViewContactOfE3d + { + public: + // basic constructor, used from SdrObject. + ViewContactOfE3dCube(E3dCubeObj& rCubeObj); + virtual ~ViewContactOfE3dCube(); + + // access to SdrObject + E3dCubeObj& GetE3dCubeObj() const + { + return (E3dCubeObj&)GetE3dObject(); + } + + protected: + // This method is responsible for creating the graphical visualisation data which is + // stored in the local primitive list. Default creates a yellow replacement rectangle. + virtual drawinglayer::primitive3d::Primitive3DSequence createViewIndependentPrimitive3DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFE3DCUBE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofe3dextrude.hxx b/include/svx/sdr/contact/viewcontactofe3dextrude.hxx new file mode 100644 index 000000000000..53d6b17913d2 --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofe3dextrude.hxx @@ -0,0 +1,61 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFE3DEXTRUDE_HXX +#define _SDR_CONTACT_VIEWCONTACTOFE3DEXTRUDE_HXX + +#include <svx/sdr/contact/viewcontactofe3d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class E3dExtrudeObj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfE3dExtrude : public ViewContactOfE3d + { + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfE3dExtrude(E3dExtrudeObj& rExtrude); + virtual ~ViewContactOfE3dExtrude(); + + // access to SdrObject + E3dExtrudeObj& GetE3dExtrudeObj() const + { + return (E3dExtrudeObj&)GetE3dObject(); + } + + protected: + // This method is responsible for creating the graphical visualisation data which is + // stored in the local primitive list. Default creates a yellow replacement rectangle. + virtual drawinglayer::primitive3d::Primitive3DSequence createViewIndependentPrimitive3DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFE3DEXTRUDE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofe3dlathe.hxx b/include/svx/sdr/contact/viewcontactofe3dlathe.hxx new file mode 100644 index 000000000000..ad57b5588195 --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofe3dlathe.hxx @@ -0,0 +1,61 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFE3DLATHE_HXX +#define _SDR_CONTACT_VIEWCONTACTOFE3DLATHE_HXX + +#include <svx/sdr/contact/viewcontactofe3d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class E3dLatheObj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfE3dLathe : public ViewContactOfE3d + { + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfE3dLathe(E3dLatheObj& rLathe); + virtual ~ViewContactOfE3dLathe(); + + // access to SdrObject + E3dLatheObj& GetE3dLatheObj() const + { + return (E3dLatheObj&)GetE3dObject(); + } + + protected: + // This method is responsible for creating the graphical visualisation data which is + // stored in the local primitive list. Default creates a yellow replacement rectangle. + virtual drawinglayer::primitive3d::Primitive3DSequence createViewIndependentPrimitive3DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFE3DLATHE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofe3dpolygon.hxx b/include/svx/sdr/contact/viewcontactofe3dpolygon.hxx new file mode 100644 index 000000000000..295d1c308697 --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofe3dpolygon.hxx @@ -0,0 +1,61 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFE3DPOLYGON_HXX +#define _SDR_CONTACT_VIEWCONTACTOFE3DPOLYGON_HXX + +#include <svx/sdr/contact/viewcontactofe3d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class E3dPolygonObj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfE3dPolygon : public ViewContactOfE3d + { + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfE3dPolygon(E3dPolygonObj& rPolygon); + virtual ~ViewContactOfE3dPolygon(); + + // access to SdrObject + E3dPolygonObj& GetE3dPolygonObj() const + { + return (E3dPolygonObj&)GetE3dObject(); + } + + protected: + // This method is responsible for creating the graphical visualisation data which is + // stored in the local primitive list. Default creates a yellow replacement rectangle. + virtual drawinglayer::primitive3d::Primitive3DSequence createViewIndependentPrimitive3DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFE3DPOLYGON_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofe3dscene.hxx b/include/svx/sdr/contact/viewcontactofe3dscene.hxx new file mode 100644 index 000000000000..bd5879fc0b9d --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofe3dscene.hxx @@ -0,0 +1,114 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFE3DSCENE_HXX +#define _SDR_CONTACT_VIEWCONTACTOFE3DSCENE_HXX + +#include <svx/sdr/contact/viewcontactofsdrobj.hxx> +#include <drawinglayer/primitive3d/baseprimitive3d.hxx> +#include <drawinglayer/attribute/sdrsceneattribute3d.hxx> +#include <drawinglayer/attribute/sdrlightingattribute3d.hxx> +#include <drawinglayer/geometry/viewinformation3d.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class E3dScene; + +namespace basegfx { + class B3DRange; +} + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewContactOfE3dScene : public ViewContactOfSdrObj + { + protected: + // Create a Object-Specific ViewObjectContact, set ViewContact and + // ObjectContact. Always needs to return something. Default is to create + // a standard ViewObjectContact containing the given ObjectContact and *this + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfE3dScene(E3dScene& rScene); + + // access to SdrObject + E3dScene& GetE3dScene() const + { + return (E3dScene&)GetSdrObject(); + } + + // React on changes of the object of this ViewContact + virtual void ActionChanged(); + + // access to ViewInformation3D and ObjectTransformation + const drawinglayer::geometry::ViewInformation3D& getViewInformation3D(const ::basegfx::B3DRange& rContentRange) const; + const drawinglayer::geometry::ViewInformation3D& getViewInformation3D() const; + const basegfx::B2DHomMatrix& getObjectTransformation() const; + + // attribute providers + const drawinglayer::attribute::SdrSceneAttribute& getSdrSceneAttribute() const; + const drawinglayer::attribute::SdrLightingAttribute& getSdrLightingAttribute() const; + + // scene primitive creators. If pLayerVisibility is given, a visibility test with the LayerID and the + // given SetOfByte is done. + drawinglayer::primitive2d::Primitive2DSequence createScenePrimitive2DSequence(const SetOfByte* pLayerVisibility) const; + + // helpers to get the sequence of all contained 3D primitives and it's range, + // regardless of layer or visibility constraints and using a neutral ViewInformation3D + drawinglayer::primitive3d::Primitive3DSequence getAllPrimitive3DSequence() const; + basegfx::B3DRange getAllContentRange3D() const; + + protected: + // the 3d transformation stack + drawinglayer::geometry::ViewInformation3D maViewInformation3D; + + // the object transformation + basegfx::B2DHomMatrix maObjectTransformation; + + // attributes + drawinglayer::attribute::SdrSceneAttribute maSdrSceneAttribute; + drawinglayer::attribute::SdrLightingAttribute maSdrLightingAttribute; + + // create methods for ViewInformation3D and ObjectTransformation + void createViewInformation3D(const ::basegfx::B3DRange& rContentRange); + void createObjectTransformation(); + + // attribute creators + void createSdrSceneAttribute(); + void createSdrLightingAttribute(); + + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFE3DSCENE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofe3dsphere.hxx b/include/svx/sdr/contact/viewcontactofe3dsphere.hxx new file mode 100644 index 000000000000..dd245d7efa06 --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofe3dsphere.hxx @@ -0,0 +1,61 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFE3DSPHERE_HXX +#define _SDR_CONTACT_VIEWCONTACTOFE3DSPHERE_HXX + +#include <svx/sdr/contact/viewcontactofe3d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class E3dSphereObj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfE3dSphere : public ViewContactOfE3d + { + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfE3dSphere(E3dSphereObj& rSphere); + virtual ~ViewContactOfE3dSphere(); + + // access to SdrObject + E3dSphereObj& GetE3dSphereObj() const + { + return (E3dSphereObj&)GetE3dObject(); + } + + protected: + // This method is responsible for creating the graphical visualisation data which is + // stored in the local primitive list. Default creates a yellow replacement rectangle. + virtual drawinglayer::primitive3d::Primitive3DSequence createViewIndependentPrimitive3DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFE3DSPHERE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofgraphic.hxx b/include/svx/sdr/contact/viewcontactofgraphic.hxx new file mode 100644 index 000000000000..303ff79bd180 --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofgraphic.hxx @@ -0,0 +1,86 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFGRAPHIC_HXX +#define _SDR_CONTACT_VIEWCONTACTOFGRAPHIC_HXX + +#include <sal/types.h> +#include <svx/sdr/contact/viewcontactoftextobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrGrafObj; +namespace drawinglayer { namespace attribute { class SdrLineFillShadowTextAttribute; }} +class GraphicAttr; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfGraphic : public ViewContactOfTextObj + { + private: + // helpers for constructing various primitive visualisations in various states + drawinglayer::primitive2d::Primitive2DSequence createVIP2DSForPresObj( + const basegfx::B2DHomMatrix& rObjectMatrix, + const drawinglayer::attribute::SdrLineFillShadowTextAttribute& rAttribute, + const GraphicAttr& rLocalGrafInfo) const; + drawinglayer::primitive2d::Primitive2DSequence createVIP2DSForDraft( + const basegfx::B2DHomMatrix& rObjectMatrix, + const drawinglayer::attribute::SdrLineFillShadowTextAttribute& rAttribute) const; + + protected: + // Create a Object-Specific ViewObjectContact, set ViewContact and + // ObjectContact. Always needs to return something. + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + + public: + // access to SdrObject + SdrGrafObj& GetGrafObject() const + { + return ((SdrGrafObj&)GetSdrObject()); + } + + // basic constructor, destructor + explicit ViewContactOfGraphic(SdrGrafObj& rGrafObj); + virtual ~ViewContactOfGraphic(); + + // #i102380# + void flushGraphicObjects(); + + // helpers for viusualisation state + bool visualisationUsesPresObj() const; + bool visualisationUsesDraft() const; + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFGRAPHIC_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofgroup.hxx b/include/svx/sdr/contact/viewcontactofgroup.hxx new file mode 100644 index 000000000000..eb1c4a2517ce --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofgroup.hxx @@ -0,0 +1,67 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFGROUP_HXX +#define _SDR_CONTACT_VIEWCONTACTOFGROUP_HXX + +#include <svx/sdr/contact/viewcontactofsdrobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrObjGroup; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfGroup : public ViewContactOfSdrObj + { + protected: + // Create a Object-Specific ViewObjectContact, set ViewContact and + // ObjectContact. Always needs to return something. Default is to create + // a standard ViewObjectContact containing the given ObjectContact and *this + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + + // internal access to SdrObject + SdrObjGroup& GetSdrObjGroup() const + { + return (SdrObjGroup&)GetSdrObject(); + } + + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfGroup(SdrObjGroup& rGroup); + virtual ~ViewContactOfGroup(); + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFGROUP_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofmasterpagedescriptor.hxx b/include/svx/sdr/contact/viewcontactofmasterpagedescriptor.hxx new file mode 100644 index 000000000000..fc2df17d9e0a --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofmasterpagedescriptor.hxx @@ -0,0 +1,77 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFMASTERPAGEDESCRIPTOR_HXX +#define _SDR_CONTACT_VIEWCONTACTOFMASTERPAGEDESCRIPTOR_HXX + +#include <sal/types.h> +#include <svx/sdr/contact/viewcontact.hxx> +#include <svx/sdrmasterpagedescriptor.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations +class SfxItemSet; +class Bitmap; +class MapMode; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfMasterPageDescriptor : public ViewContact + { + protected: + // the owner of this ViewContact. Set from constructor and not + // to be changed in any way. + sdr::MasterPageDescriptor& mrMasterPageDescriptor; + + // Create a Object-Specific ViewObjectContact + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + + // This method is responsible for creating the graphical visualisation data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + + public: + // basic constructor + explicit ViewContactOfMasterPageDescriptor(sdr::MasterPageDescriptor& rDescriptor); + + // The destructor. + virtual ~ViewContactOfMasterPageDescriptor(); + + // access to MasterPageDescriptor + sdr::MasterPageDescriptor& GetMasterPageDescriptor() const + { + return mrMasterPageDescriptor; + } + + // Access to possible sub-hierarchy and parent + virtual sal_uInt32 GetObjectCount() const; + virtual ViewContact& GetViewContact(sal_uInt32 nIndex) const; + virtual ViewContact* GetParentContact() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFMASTERPAGEDESCRIPTOR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofpageobj.hxx b/include/svx/sdr/contact/viewcontactofpageobj.hxx new file mode 100644 index 000000000000..30a53e5eb9ac --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofpageobj.hxx @@ -0,0 +1,68 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFPAGEOBJ_HXX +#define _SDR_CONTACT_VIEWCONTACTOFPAGEOBJ_HXX + +#include <svx/sdr/contact/viewcontactofsdrobj.hxx> +#include "svx/svxdllapi.h" + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrPageObj; +class SdrPage; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewContactOfPageObj : public ViewContactOfSdrObj + { + protected: + // Create a Object-Specific ViewObjectContact, set ViewContact and + // ObjectContact. Always needs to return something. + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + + // create graphical visualisation data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfPageObj(SdrPageObj& rPageObj); + virtual ~ViewContactOfPageObj(); + + // #WIP# React on changes of the object of this ViewContact + virtual void ActionChanged(); + + // access to SdrObject + SdrPageObj& GetPageObj() const + { + return (SdrPageObj&)GetSdrObject(); + } + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFPAGEOBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofsdrcaptionobj.hxx b/include/svx/sdr/contact/viewcontactofsdrcaptionobj.hxx new file mode 100644 index 000000000000..19cc9976dbdf --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofsdrcaptionobj.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFSDRCAPTIONOBJ_HXX +#define _SDR_CONTACT_VIEWCONTACTOFSDRCAPTIONOBJ_HXX + +#include <svx/sdr/contact/viewcontactofsdrrectobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrCaptionObj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfSdrCaptionObj : public ViewContactOfSdrRectObj + { + protected: + // internal access to SdrCaptionObj + SdrCaptionObj& GetCaptionObj() const + { + return (SdrCaptionObj&)GetSdrObject(); + } + + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfSdrCaptionObj(SdrCaptionObj& rCaptionObj); + virtual ~ViewContactOfSdrCaptionObj(); + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFSDRCAPTIONOBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofsdrcircobj.hxx b/include/svx/sdr/contact/viewcontactofsdrcircobj.hxx new file mode 100644 index 000000000000..27059b275437 --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofsdrcircobj.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFSDRCIRCOBJ_HXX +#define _SDR_CONTACT_VIEWCONTACTOFSDRCIRCOBJ_HXX + +#include <svx/sdr/contact/viewcontactofsdrrectobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrCircObj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfSdrCircObj : public ViewContactOfSdrRectObj + { + protected: + // internal access to SdrCircObj + SdrCircObj& GetCircObj() const + { + return (SdrCircObj&)GetSdrObject(); + } + + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfSdrCircObj(SdrCircObj& rCircObj); + virtual ~ViewContactOfSdrCircObj(); + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFSDRCIRCOBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofsdredgeobj.hxx b/include/svx/sdr/contact/viewcontactofsdredgeobj.hxx new file mode 100644 index 000000000000..0ca7d4101b7b --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofsdredgeobj.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFSDREDGEOBJ_HXX +#define _SDR_CONTACT_VIEWCONTACTOFSDREDGEOBJ_HXX + +#include <svx/sdr/contact/viewcontactoftextobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrEdgeObj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfSdrEdgeObj : public ViewContactOfTextObj + { + protected: + // internal access to SdrEdgeObj + SdrEdgeObj& GetEdgeObj() const + { + return (SdrEdgeObj&)GetSdrObject(); + } + + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfSdrEdgeObj(SdrEdgeObj& rEdgeObj); + virtual ~ViewContactOfSdrEdgeObj(); + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFSDREDGEOBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofsdrmeasureobj.hxx b/include/svx/sdr/contact/viewcontactofsdrmeasureobj.hxx new file mode 100644 index 000000000000..83a32a17a9ec --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofsdrmeasureobj.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFSDRMEASUREOBJ_HXX +#define _SDR_CONTACT_VIEWCONTACTOFSDRMEASUREOBJ_HXX + +#include <svx/sdr/contact/viewcontactoftextobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrMeasureObj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfSdrMeasureObj : public ViewContactOfTextObj + { + protected: + // internal access to SdrMeasureObj + SdrMeasureObj& GetMeasureObj() const + { + return (SdrMeasureObj&)GetSdrObject(); + } + + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfSdrMeasureObj(SdrMeasureObj& rMeasureObj); + virtual ~ViewContactOfSdrMeasureObj(); + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFSDRMEASUREOBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofsdrmediaobj.hxx b/include/svx/sdr/contact/viewcontactofsdrmediaobj.hxx new file mode 100644 index 000000000000..3ad8580cf12e --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofsdrmediaobj.hxx @@ -0,0 +1,83 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFSDRMEDIAOBJ_HXX +#define _SDR_CONTACT_VIEWCONTACTOFSDRMEDIAOBJ_HXX + +#include <svx/sdr/contact/viewcontactofsdrobj.hxx> +#include "svx/svxdllapi.h" +#include <tools/gen.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrMediaObj; +namespace avmedia { class MediaItem; } + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewContactOfSdrMediaObj : public ViewContactOfSdrObj + { + friend class ViewObjectContactOfSdrMediaObj; + + public: + + // basic constructor, used from SdrObject. + explicit ViewContactOfSdrMediaObj( SdrMediaObj& rMediaObj ); + virtual ~ViewContactOfSdrMediaObj(); + + public: + + // access to SdrMediaObj + SdrMediaObj& GetSdrMediaObj() const + { + return (SdrMediaObj&)GetSdrObject(); + } + + Size getPreferredSize() const; + + void updateMediaItem( ::avmedia::MediaItem& rItem ) const; + void executeMediaItem( const ::avmedia::MediaItem& rItem ); + + protected: + + // Create a Object-Specific ViewObjectContact, set ViewContact and + // ObjectContact. Always needs to return something. + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + + // get notified if some properties have changed + virtual void mediaPropertiesChanged( const ::avmedia::MediaItem& rNewState ); + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFSDRMEDIAOBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofsdrobj.hxx b/include/svx/sdr/contact/viewcontactofsdrobj.hxx new file mode 100644 index 000000000000..b628637cb707 --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofsdrobj.hxx @@ -0,0 +1,96 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFSDROBJ_HXX +#define _SDR_CONTACT_VIEWCONTACTOFSDROBJ_HXX + +#include <sal/types.h> +#include <svx/sdr/contact/viewcontact.hxx> +#include <svx/sdtakitm.hxx> +#include "svx/svxdllapi.h" + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrObject; +class GeoStat; +class Bitmap; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewContactOfSdrObj : public ViewContact + { + protected: + // the owner of this ViewContact. Set from constructor and not + // to be changed in any way. + SdrObject& mrObject; + + // Remember AnimationKind of object. Used to find out if that kind + // has changed in ActionChanged() + SdrTextAniKind meRememberedAnimationKind; + + // Create a Object-Specific ViewObjectContact, set ViewContact and + // ObjectContact. Always needs to return something. + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + + public: + // access to SdrObject + SdrObject& GetSdrObject() const + { + return mrObject; + } + + // basic constructor, used from SdrObject. + explicit ViewContactOfSdrObj(SdrObject& rObj); + virtual ~ViewContactOfSdrObj(); + + // Access to possible sub-hierarchy + virtual sal_uInt32 GetObjectCount() const; + virtual ViewContact& GetViewContact(sal_uInt32 nIndex) const; + virtual ViewContact* GetParentContact() const; + + // React on changes of the object of this ViewContact + virtual void ActionChanged(); + + // overload for acessing the SdrObject + virtual SdrObject* TryToGetSdrObject() const; + + ////////////////////////////////////////////////////////////////////////////// + // primitive stuff + + // add Gluepoints (if available) + virtual drawinglayer::primitive2d::Primitive2DSequence createGluePointPrimitive2DSequence() const; + + // allow embedding if needed (e.g. for SdrObjects, evtl. Name, Title and description get added). This + // is a helper normally used from getViewIndependentPrimitive2DSequence(), but there is one exception + // for 3D scenes + virtual drawinglayer::primitive2d::Primitive2DSequence embedToObjectSpecificInformation(const drawinglayer::primitive2d::Primitive2DSequence& rSource) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFSDROBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofsdrobjcustomshape.hxx b/include/svx/sdr/contact/viewcontactofsdrobjcustomshape.hxx new file mode 100644 index 000000000000..8b4e06100a0c --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofsdrobjcustomshape.hxx @@ -0,0 +1,65 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFSDROBJCUSTOMSHAPE_HXX +#define _SDR_CONTACT_VIEWCONTACTOFSDROBJCUSTOMSHAPE_HXX + +#include <svx/sdr/contact/viewcontactoftextobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrObjCustomShape; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfSdrObjCustomShape : public ViewContactOfTextObj + { + protected: + // internal access to SdrObjCustomShape + SdrObjCustomShape& GetCustomShapeObj() const + { + return (SdrObjCustomShape&)GetSdrObject(); + } + + // #i101684# internal tooling + basegfx::B2DRange getCorrectedTextBoundRect() const; + + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfSdrObjCustomShape(SdrObjCustomShape& rCustomShape); + virtual ~ViewContactOfSdrObjCustomShape(); + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFSDROBJCUSTOMSHAPE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofsdrole2obj.hxx b/include/svx/sdr/contact/viewcontactofsdrole2obj.hxx new file mode 100644 index 000000000000..fb97f3e49884 --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofsdrole2obj.hxx @@ -0,0 +1,77 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFSDROLE2OBJ_HXX +#define _SDR_CONTACT_VIEWCONTACTOFSDROLE2OBJ_HXX + +#include <svx/sdr/contact/viewcontactofsdrrectobj.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrOle2Obj; +class Graphic; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfSdrOle2Obj : public ViewContactOfSdrRectObj + { + protected: + // Create a Object-Specific ViewObjectContact, set ViewContact and + // ObjectContact. Always needs to return something. + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + + public: + // access to SdrOle2Obj + SdrOle2Obj& GetOle2Obj() const + { + return (SdrOle2Obj&)GetSdrObject(); + } + + /// helper to create transformation from SdrObject + basegfx::B2DHomMatrix createObjectTransform() const; + + // basic constructor, used from SdrObject. + explicit ViewContactOfSdrOle2Obj(SdrOle2Obj& rOle2Obj); + virtual ~ViewContactOfSdrOle2Obj(); + + // helper for creating a OLE sequence for this object. It takes care od attributes, needed + // scaling (e.g. for EmptyPresObj's), the correct graphic and other stuff. It is used from + // createViewIndependentPrimitive2DSequence with false, and with evtl. HighContrast true + // from the VOC which knows that + drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequenceWithParameters() const; + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data, just wraps to call createPrimitive2DSequenceWithParameters(false) + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFSDROLE2OBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofsdrpage.hxx b/include/svx/sdr/contact/viewcontactofsdrpage.hxx new file mode 100644 index 000000000000..b194108541ac --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofsdrpage.hxx @@ -0,0 +1,303 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFSDRPAGE_HXX +#define _SDR_CONTACT_VIEWCONTACTOFSDRPAGE_HXX + +#include <sal/types.h> +#include <svx/sdr/contact/viewcontact.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations +class SdrPage; + +namespace sdr { namespace contact { + class ViewContactOfSdrPage; +}} + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfPageSubObject : public ViewContact + { + protected: + ViewContactOfSdrPage& mrParentViewContactOfSdrPage; + + public: + explicit ViewContactOfPageSubObject(ViewContactOfSdrPage& rParentViewContactOfSdrPage); + virtual ~ViewContactOfPageSubObject(); + + virtual ViewContact* GetParentContact() const; + const SdrPage& getPage() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfPageBackground : public ViewContactOfPageSubObject + { + protected: + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + + public: + explicit ViewContactOfPageBackground(ViewContactOfSdrPage& rParentViewContactOfSdrPage); + virtual ~ViewContactOfPageBackground(); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfPageShadow : public ViewContactOfPageSubObject + { + protected: + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + + public: + explicit ViewContactOfPageShadow(ViewContactOfSdrPage& rParentViewContactOfSdrPage); + virtual ~ViewContactOfPageShadow(); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfPageFill : public ViewContactOfPageSubObject + { + protected: + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + + public: + explicit ViewContactOfPageFill(ViewContactOfSdrPage& rParentViewContactOfSdrPage); + virtual ~ViewContactOfPageFill(); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfMasterPage : public ViewContactOfPageSubObject + { + protected: + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + + public: + explicit ViewContactOfMasterPage(ViewContactOfSdrPage& rParentViewContactOfSdrPage); + virtual ~ViewContactOfMasterPage(); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfOuterPageBorder : public ViewContactOfPageSubObject + { + protected: + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + + public: + explicit ViewContactOfOuterPageBorder(ViewContactOfSdrPage& rParentViewContactOfSdrPage); + virtual ~ViewContactOfOuterPageBorder(); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfInnerPageBorder : public ViewContactOfPageSubObject + { + protected: + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + + public: + explicit ViewContactOfInnerPageBorder(ViewContactOfSdrPage& rParentViewContactOfSdrPage); + virtual ~ViewContactOfInnerPageBorder(); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfPageHierarchy : public ViewContactOfPageSubObject + { + protected: + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + + public: + explicit ViewContactOfPageHierarchy(ViewContactOfSdrPage& rParentViewContactOfSdrPage); + virtual ~ViewContactOfPageHierarchy(); + + virtual sal_uInt32 GetObjectCount() const; + virtual ViewContact& GetViewContact(sal_uInt32 nIndex) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfGrid : public ViewContactOfPageSubObject + { + protected: + // bitfield + unsigned mbFront : 1; + + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + + public: + ViewContactOfGrid(ViewContactOfSdrPage& rParentViewContactOfSdrPage, bool bFront); + virtual ~ViewContactOfGrid(); + + bool getFront() const { return mbFront; } + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfHelplines : public ViewContactOfPageSubObject + { + protected: + // bitfield + unsigned mbFront : 1; + + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + + public: + ViewContactOfHelplines(ViewContactOfSdrPage& rParentViewContactOfSdrPage, bool bFront); + virtual ~ViewContactOfHelplines(); + + bool getFront() const { return mbFront; } + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfSdrPage : public ViewContact + { + protected: + // the owner of this ViewContact. Set from constructor and not + // to be changed in any way. + SdrPage& mrPage; + + // helper viewContacts to build a clear paint hierarchy + ViewContactOfPageBackground maViewContactOfPageBackground; + ViewContactOfPageShadow maViewContactOfPageShadow; + ViewContactOfPageFill maViewContactOfPageFill; + ViewContactOfMasterPage maViewContactOfMasterPage; + ViewContactOfOuterPageBorder maViewContactOfOuterPageBorder; + ViewContactOfInnerPageBorder maViewContactOfInnerPageBorder; + ViewContactOfGrid maViewContactOfGridBack; + ViewContactOfHelplines maViewContactOfHelplinesBack; + ViewContactOfPageHierarchy maViewContactOfPageHierarchy; + ViewContactOfGrid maViewContactOfGridFront; + ViewContactOfHelplines maViewContactOfHelplinesFront; + + // Create a Object-Specific ViewObjectContact, set ViewContact and + // ObjectContact. Always needs to return something. Default is to create + // a standard ViewObjectContact containing the given ObjectContact and *this + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact); + + public: + // access to SdrObject + SdrPage& GetSdrPage() const + { + return mrPage; + } + + // basic constructor, used from SdrPage. + explicit ViewContactOfSdrPage(SdrPage& rObj); + virtual ~ViewContactOfSdrPage(); + + // Access to possible sub-hierarchy + virtual sal_uInt32 GetObjectCount() const; + virtual ViewContact& GetViewContact(sal_uInt32 nIndex) const; + + // React on changes of the object of this ViewContact + virtual void ActionChanged(); + + // overload for acessing the SdrPage + virtual SdrPage* TryToGetSdrPage() const; + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFSDRPAGE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofsdrpathobj.hxx b/include/svx/sdr/contact/viewcontactofsdrpathobj.hxx new file mode 100644 index 000000000000..19ef798b8aaf --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofsdrpathobj.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFSDRPATHOBJ_HXX +#define _SDR_CONTACT_VIEWCONTACTOFSDRPATHOBJ_HXX + +#include <svx/sdr/contact/viewcontactoftextobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrPathObj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfSdrPathObj : public ViewContactOfTextObj + { + protected: + // internal access to SdrPathObj + SdrPathObj& GetPathObj() const + { + return (SdrPathObj&)GetSdrObject(); + } + + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfSdrPathObj(SdrPathObj& rTextObj); + virtual ~ViewContactOfSdrPathObj(); + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFSDRPATHOBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofsdrrectobj.hxx b/include/svx/sdr/contact/viewcontactofsdrrectobj.hxx new file mode 100644 index 000000000000..7d78befffe0e --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofsdrrectobj.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFSDRRECTOBJ_HXX +#define _SDR_CONTACT_VIEWCONTACTOFSDRRECTOBJ_HXX + +#include <svx/sdr/contact/viewcontactoftextobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrRectObj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfSdrRectObj : public ViewContactOfTextObj + { + protected: + // internal access to SdrRectObj + SdrRectObj& GetRectObj() const + { + return (SdrRectObj&)GetSdrObject(); + } + + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfSdrRectObj(SdrRectObj& rTextObj); + virtual ~ViewContactOfSdrRectObj(); + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFSDRRECTOBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactoftextobj.hxx b/include/svx/sdr/contact/viewcontactoftextobj.hxx new file mode 100644 index 000000000000..bb302ad8f9c0 --- /dev/null +++ b/include/svx/sdr/contact/viewcontactoftextobj.hxx @@ -0,0 +1,57 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFTEXTOBJ_HXX +#define _SDR_CONTACT_VIEWCONTACTOFTEXTOBJ_HXX + +#include <svx/sdr/contact/viewcontactofsdrobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrTextObj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewContactOfTextObj : public ViewContactOfSdrObj + { + protected: + // internal access to SdrTextObj + SdrTextObj& GetTextObj() const + { + return (SdrTextObj&)GetSdrObject(); + } + + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfTextObj(SdrTextObj& rTextObj); + virtual ~ViewContactOfTextObj(); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFTEXTOBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofunocontrol.hxx b/include/svx/sdr/contact/viewcontactofunocontrol.hxx new file mode 100644 index 000000000000..aeeb2d6183c0 --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofunocontrol.hxx @@ -0,0 +1,92 @@ +/* -*- 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 SVX_SDR_CONTACT_VIEWCONTACTOFUNOCONTROL_HXX +#define SVX_SDR_CONTACT_VIEWCONTACTOFUNOCONTROL_HXX + +#include <com/sun/star/uno/Reference.hxx> +#include <svx/sdr/contact/viewcontactofsdrmediaobj.hxx> +#include <svx/svxdllapi.h> + +#include <memory> + +class OutputDevice; +class Window; +class SdrUnoObj; +namespace com { namespace sun { namespace star { + namespace awt { + class XControl; + class XControlContainer; + } +} } } + +//........................................................................ +namespace sdr { namespace contact { +//........................................................................ + + //==================================================================== + //= ViewContactOfUnoControl + //==================================================================== + class ViewContactOfUnoControl_Impl; + class SVX_DLLPRIVATE ViewContactOfUnoControl : public ViewContactOfSdrObj + { + private: + ::std::auto_ptr< ViewContactOfUnoControl_Impl > m_pImpl; + + public: + // access to SdrObject + SdrUnoObj& GetSdrUnoObj() const + { + return ((SdrUnoObj&)GetSdrObject()); + } + + explicit ViewContactOfUnoControl( SdrUnoObj& _rUnoObject ); + virtual ~ViewContactOfUnoControl(); + + /** access control to selected members + */ + struct SdrUnoObjAccessControl { friend class ::SdrUnoObj; private: SdrUnoObjAccessControl() { } }; + + /** retrieves a temporary XControl instance, whose parent is the given window + @seealso SdrUnoObj::GetTemporaryControlForWindow + */ + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > + getTemporaryControlForWindow( const Window& _rWindow, ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer >& _inout_ControlContainer ) const; + + protected: + virtual ViewObjectContact& CreateObjectSpecificViewObjectContact( ObjectContact& _rObjectContact ); + + private: + ViewContactOfUnoControl(); // never implemented + ViewContactOfUnoControl( const ViewContactOfUnoControl& ); // never implemented + ViewContactOfUnoControl& operator=( const ViewContactOfUnoControl& ); // never implemented + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + +//........................................................................ +} } // namespace sdr::contact +//........................................................................ + +#endif // SVX_SDR_CONTACT_VIEWCONTACTOFUNOCONTROL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewcontactofvirtobj.hxx b/include/svx/sdr/contact/viewcontactofvirtobj.hxx new file mode 100644 index 000000000000..8e3719eae357 --- /dev/null +++ b/include/svx/sdr/contact/viewcontactofvirtobj.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SDR_CONTACT_VIEWCONTACTOFVIRTOBJ_HXX +#define _SDR_CONTACT_VIEWCONTACTOFVIRTOBJ_HXX + +#include <svx/sdr/contact/viewcontactofsdrobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations +class SdrVirtObj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewContactOfVirtObj : public ViewContactOfSdrObj + { + protected: + // internal access to SdrObject. Iplementation in *.cxx to avoid + // including SdrVirtObj here. + SdrVirtObj& GetVirtObj() const; + + public: + // basic constructor, used from SdrObject. + explicit ViewContactOfVirtObj(SdrVirtObj& rObj); + virtual ~ViewContactOfVirtObj(); + + // Access to possible sub-hierarchy + virtual sal_uInt32 GetObjectCount() const; + + protected: + // This method is responsible for creating the graphical visualisation data + // ONLY based on model data + virtual drawinglayer::primitive2d::Primitive2DSequence createViewIndependentPrimitive2DSequence() const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWCONTACTOFVIRTOBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewobjectcontact.hxx b/include/svx/sdr/contact/viewobjectcontact.hxx new file mode 100644 index 000000000000..96c3918a4c42 --- /dev/null +++ b/include/svx/sdr/contact/viewobjectcontact.hxx @@ -0,0 +1,147 @@ +/* -*- 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 _SDR_CONTACT_VIEWOBJECTCONTACT_HXX +#define _SDR_CONTACT_VIEWOBJECTCONTACT_HXX + +#include <sal/types.h> + +#include <vector> +#include "svx/svxdllapi.h" +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class Region; + +namespace sdr { namespace contact { + class DisplayInfo; + class ObjectContact; + class ViewContact; + class ViewObjectContactRedirector; +}} + +namespace sdr { namespace animation { + class PrimitiveAnimation; +}} + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContact + { + private: + // must-exist and constant contacts + ObjectContact& mrObjectContact; + ViewContact& mrViewContact; + + // This range defines the object's BoundRect + basegfx::B2DRange maObjectRange; + + // PrimitiveSequence of the ViewContact. This contains all necessary information + // for the graphical visualisation and needs to be supported by all VCs which + // can be visualized. + drawinglayer::primitive2d::Primitive2DSequence mxPrimitive2DSequence; + + // the PrimitiveAnimation if Primitive2DSequence contains animations + sdr::animation::PrimitiveAnimation* mpPrimitiveAnimation; + + // bitfield + // This bool gets set when the object gets invalidated by ActionChanged() and + // can be used from the OC to late-invalidates + unsigned mbLazyInvalidate : 1; + + protected: + // make redirector a protected friend, it needs to call createPrimitives as default action + friend class ViewObjectContactRedirector; + + // Called from getPrimitive2DSequence() when vector has changed. Evaluate object animation + // and setup accordingly + void checkForPrimitive2DAnimations(); + + // This method is responsible for creating the graphical visualisation data which is + // stored/cached in the local primitive. Default gets view-independent Primitive + // from the ViewContact using ViewContact::getViewIndependentPrimitive2DSequence(), takes care of + // visibility, handles glue and ghosted. + // This method will not handle included hierarchies and not check geometric visibility. + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const; + + // method for flushing Primitive2DSequence for VOC implementations + void flushPrimitive2DSequence() { mxPrimitive2DSequence.realloc(0); } + + public: + // basic constructor. + ViewObjectContact(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContact(); + + // access to ObjectContact + ObjectContact& GetObjectContact() const { return mrObjectContact; } + + // access to ViewContact + ViewContact& GetViewContact() const { return mrViewContact; } + + // get the oebject's size range + const basegfx::B2DRange& getObjectRange() const; + + // A ViewObjectContact was deleted and shall be forgotten. + void RemoveViewObjectContact(ViewObjectContact& rVOContact); + + // React on changes of the object of this ViewContact + virtual void ActionChanged(); + + // LazyInvalidate handling + void triggerLazyInvalidate(); + + // Check if this primitive is animated in any OC (View) which means it has + // generated a PrimitiveAnimation + bool isAnimated() const { return (0 != mpPrimitiveAnimation); } + + // Take some action when new objects are inserted + virtual void ActionChildInserted(ViewContact& rChild); + + // access to the local primitive. This will ensure that the local primitive is + // current in comparing the local one with a fresh created incarnation + // This method will not handle included hierarchies and not check visibility. + drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const; + + // test this VOC for visibility concerning model-view stuff like e.g. Layer + virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const; + + // test this VOC for ghosted mode + virtual bool isPrimitiveGhosted(const DisplayInfo& rDisplayInfo) const; + + // process this primitive: Eventually also recursively travel an existing hierarchy, + // e.g. for group objects, scenes or pages. This method will test geometrical visibility. + virtual drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo) const; + + // just process the sub-hierarchy, used as tooling from getPrimitive2DSequenceHierarchy + drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequenceSubHierarchy(DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWOBJECTCONTACT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewobjectcontactofe3d.hxx b/include/svx/sdr/contact/viewobjectcontactofe3d.hxx new file mode 100644 index 000000000000..f0fa2758b7f3 --- /dev/null +++ b/include/svx/sdr/contact/viewobjectcontactofe3d.hxx @@ -0,0 +1,74 @@ +/* -*- 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 _SDR_CONTACT_VIEWOBJECTCONTACTOFE3D_HXX +#define _SDR_CONTACT_VIEWOBJECTCONTACTOFE3D_HXX + +#include <svx/sdr/contact/viewobjectcontactofsdrobj.hxx> +#include <drawinglayer/primitive3d/baseprimitive3d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +namespace sdr { namespace contact { + class ViewObjectContactOfE3dScene; +}} + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewObjectContactOfE3d : public ViewObjectContactOfSdrObj + { + protected: + // Primitive3D sequence of the ViewContact. This contains all necessary information + // for the graphical visualisation and needs to be supported by all VCs which + // can be visualized. + drawinglayer::primitive3d::Primitive3DSequence mxPrimitive3DSequence; + + // This method is responsible for creating the graphical visualisation data which is + // stored/cached in the local primitive. Default gets view-independent Primitive3D + // from the ViewContact using ViewContact::getViewIndependentPrimitive3DSequence(), takes care of + // visibility and ghosted. + // This method will not handle included hierarchies and not check geometric visibility. + drawinglayer::primitive3d::Primitive3DSequence createPrimitive3DSequence(const DisplayInfo& rDisplayInfo) const; + + // also overload the 2d method to deliver a 2d object with embedd3d 3d and the 3d transformation which is able to + // answer the get2DRange question accordingly + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const; + + public: + ViewObjectContactOfE3d(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfE3d(); + + // access to the local primitive sequence. This will ensure that the list is + // current in comparing the local list content with a fresh created incarnation + // This method will not handle included hierarchies or visibility. + drawinglayer::primitive3d::Primitive3DSequence getPrimitive3DSequence(const DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWOBJECTCONTACTOFE3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewobjectcontactofe3dscene.hxx b/include/svx/sdr/contact/viewobjectcontactofe3dscene.hxx new file mode 100644 index 000000000000..d6d405f5ef95 --- /dev/null +++ b/include/svx/sdr/contact/viewobjectcontactofe3dscene.hxx @@ -0,0 +1,54 @@ +/* -*- 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 _SDR_CONTACT_VIEWOBJECTCONTACTOFE3DSCENE_HXX +#define _SDR_CONTACT_VIEWOBJECTCONTACTOFE3DSCENE_HXX + +#include <svx/sdr/contact/viewobjectcontactofsdrobj.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfE3dScene : public ViewObjectContactOfSdrObj + { + protected: + // 2d primitive creator + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const; + + public: + // basic constructor. + ViewObjectContactOfE3dScene(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfE3dScene(); + + // process this primitive: Eventually also recursively travel an existing hierarchy, + // e.g. for group objects, scenes or pages. This method will test geometrical visibility. + virtual drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWOBJECTCONTACTOFE3DSCENE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewobjectcontactofgraphic.hxx b/include/svx/sdr/contact/viewobjectcontactofgraphic.hxx new file mode 100644 index 000000000000..e8200d6a429a --- /dev/null +++ b/include/svx/sdr/contact/viewobjectcontactofgraphic.hxx @@ -0,0 +1,73 @@ +/* -*- 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 _SDR_CONTACT_VIEWOBJECTCONTACTOFGRAPHIC_HXX +#define _SDR_CONTACT_VIEWOBJECTCONTACTOFGRAPHIC_HXX + +#include <svx/sdr/contact/viewobjectcontactofsdrobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations +class SdrGrafObj; + +namespace sdr { namespace event { + class AsynchGraphicLoadingEvent; +}} + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewObjectContactOfGraphic : public ViewObjectContactOfSdrObj + { + private: + // allow async loading event helper to call tooling methods + friend class sdr::event::AsynchGraphicLoadingEvent; + + // Member which takes care for the asynch loading events which may be necessary + // for asynch graphics loading. + sdr::event::AsynchGraphicLoadingEvent* mpAsynchLoadEvent; + + // async graphics loading helpers. Only to be used internally or from the + // event helper class (in .cxx file) + bool impPrepareGraphicWithAsynchroniousLoading(); + bool impPrepareGraphicWithSynchroniousLoading(); + void doAsynchGraphicLoading(); + void forgetAsynchGraphicLoadingEvent(sdr::event::AsynchGraphicLoadingEvent* pEvent); + + protected: + SdrGrafObj& getSdrGrafObj(); + + // This method is responsible for creating the graphical visualisation data + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const; + + public: + ViewObjectContactOfGraphic(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfGraphic(); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWOBJECTCONTACTOFGRAPHIC_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewobjectcontactofgroup.hxx b/include/svx/sdr/contact/viewobjectcontactofgroup.hxx new file mode 100644 index 000000000000..fda5610e0568 --- /dev/null +++ b/include/svx/sdr/contact/viewobjectcontactofgroup.hxx @@ -0,0 +1,54 @@ +/* -*- 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 _SDR_CONTACT_VIEWOBJECTCONTACTOFGROUP_HXX +#define _SDR_CONTACT_VIEWOBJECTCONTACTOFGROUP_HXX + +#include <svx/sdr/contact/viewobjectcontactofsdrobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfGroup : public ViewObjectContactOfSdrObj + { + public: + // basic constructor. + ViewObjectContactOfGroup(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfGroup(); + + // This method recursively paints the draw hierarchy. + virtual drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo) const; + + private: + virtual bool isPrimitiveVisibleOnAnyLayer(const SetOfByte& aLayers) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWOBJECTCONTACTOFGROUP_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewobjectcontactofmasterpagedescriptor.hxx b/include/svx/sdr/contact/viewobjectcontactofmasterpagedescriptor.hxx new file mode 100644 index 000000000000..f09bd03d86a9 --- /dev/null +++ b/include/svx/sdr/contact/viewobjectcontactofmasterpagedescriptor.hxx @@ -0,0 +1,57 @@ +/* -*- 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 _SDR_CONTACT_VIEWOBJECTCONTACTOFMASTERPAGEDESCRIPTOR_HXX +#define _SDR_CONTACT_VIEWOBJECTCONTACTOFMASTERPAGEDESCRIPTOR_HXX + +#include <svx/sdr/contact/viewobjectcontact.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +namespace sdr { + class MasterPageDescriptor; +} + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewObjectContactOfMasterPageDescriptor : public ViewObjectContact + { + public: + ViewObjectContactOfMasterPageDescriptor(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfMasterPageDescriptor(); + + // access to MasterPageDescriptor + sdr::MasterPageDescriptor& GetMasterPageDescriptor() const; + + virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const; + virtual drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWOBJECTCONTACTOFSDRPAGE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewobjectcontactofpageobj.hxx b/include/svx/sdr/contact/viewobjectcontactofpageobj.hxx new file mode 100644 index 000000000000..420a464319d5 --- /dev/null +++ b/include/svx/sdr/contact/viewobjectcontactofpageobj.hxx @@ -0,0 +1,63 @@ +/* -*- 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 _SDR_CONTACT_VIEWOBJECTCONTACTOFPAGEOBJ_HXX +#define _SDR_CONTACT_VIEWOBJECTCONTACTOFPAGEOBJ_HXX + +#include <svx/sdr/contact/viewobjectcontactofsdrobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +namespace sdr { namespace contact { + class PagePrimitiveExtractor; +}} + +class SdrPage; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfPageObj : public ViewObjectContactOfSdrObj + { + private: + // the page painter helper + PagePrimitiveExtractor* mpExtractor; + + protected: + // This method is responsible for creating the graphical visualisation data which is + // stored/cached in the local primitive. + // This method will not handle included hierarchies and not check geometric visibility. + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const; + + public: + ViewObjectContactOfPageObj(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfPageObj(); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWOBJECTCONTACTOFPAGEOBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewobjectcontactofsdrmediaobj.hxx b/include/svx/sdr/contact/viewobjectcontactofsdrmediaobj.hxx new file mode 100644 index 000000000000..e1e24dab8442 --- /dev/null +++ b/include/svx/sdr/contact/viewobjectcontactofsdrmediaobj.hxx @@ -0,0 +1,66 @@ +/* -*- 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 _SDR_CONTACT_VIEWOBJECTCONTACTOFSDRMEDIAOBJ_HXX +#define _SDR_CONTACT_VIEWOBJECTCONTACTOFSDRMEDIAOBJ_HXX + +#include <svx/sdr/contact/viewobjectcontactofsdrobj.hxx> +#include <svx/sdr/contact/viewobjectcontact.hxx> +#include <tools/gen.hxx> + +namespace avmedia { class MediaItem; } +class Window; + +namespace sdr +{ + namespace contact + { + class SdrMediaWindow; + + class ViewObjectContactOfSdrMediaObj : public ViewObjectContactOfSdrObj + { + public: + + ViewObjectContactOfSdrMediaObj( ObjectContact& rObjectContact, + ViewContact& rViewContact, + const ::avmedia::MediaItem& rMediaItem ); + virtual ~ViewObjectContactOfSdrMediaObj(); + + public: + + Window* getWindow() const; + + Size getPreferredSize() const; + + void updateMediaItem( ::avmedia::MediaItem& rItem ) const; + void executeMediaItem( const ::avmedia::MediaItem& rItem ); + + private: + + ::sdr::contact::SdrMediaWindow* mpMediaWindow; + + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_CONTACT_VIEWOBJECTCONTACTOFSDRMEDIAOBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewobjectcontactofsdrobj.hxx b/include/svx/sdr/contact/viewobjectcontactofsdrobj.hxx new file mode 100644 index 000000000000..e0384426add3 --- /dev/null +++ b/include/svx/sdr/contact/viewobjectcontactofsdrobj.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SDR_CONTACT_VIEWOBJECTCONTACTOFSDROBJ_HXX +#define _SDR_CONTACT_VIEWOBJECTCONTACTOFSDROBJ_HXX + +#include <svx/sdr/contact/viewobjectcontact.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations +class SdrObject; +class SetOfByte; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfSdrObj : public ViewObjectContact + { + /** Test whether the primitive is visible on any layer from @c aLayers + + This should be overriden by ViewObjectContacts of SDR classes + that have subparts which can be on different layers (that is, + SdrObjGroup .-) + */ + virtual bool isPrimitiveVisibleOnAnyLayer(const SetOfByte& aLayers) const; + + protected: + const SdrObject& getSdrObject() const; + + public: + ViewObjectContactOfSdrObj(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfSdrObj(); + + virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWOBJECTCONTACTOFSDROBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewobjectcontactofsdrole2obj.hxx b/include/svx/sdr/contact/viewobjectcontactofsdrole2obj.hxx new file mode 100644 index 000000000000..6fe19c742481 --- /dev/null +++ b/include/svx/sdr/contact/viewobjectcontactofsdrole2obj.hxx @@ -0,0 +1,54 @@ +/* -*- 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 _SDR_CONTACT_VIEWOBJECTCONTACTOFSDROLE2OBJ_HXX +#define _SDR_CONTACT_VIEWOBJECTCONTACTOFSDROLE2OBJ_HXX + +#include <svx/sdr/contact/viewobjectcontactofsdrobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations +class SdrOle2Obj; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class ViewObjectContactOfSdrOle2Obj : public ViewObjectContactOfSdrObj + { + protected: + const SdrOle2Obj& getSdrOle2Object() const; + + // This method is responsible for creating the graphical visualisation data + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const; + + public: + ViewObjectContactOfSdrOle2Obj(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfSdrOle2Obj(); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWOBJECTCONTACTOFSDROLE2OBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewobjectcontactofsdrpage.hxx b/include/svx/sdr/contact/viewobjectcontactofsdrpage.hxx new file mode 100644 index 000000000000..588554b7dd92 --- /dev/null +++ b/include/svx/sdr/contact/viewobjectcontactofsdrpage.hxx @@ -0,0 +1,238 @@ +/* -*- 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 _SDR_CONTACT_VIEWOBJECTCONTACTOFSDRPAGE_HXX +#define _SDR_CONTACT_VIEWOBJECTCONTACTOFSDRPAGE_HXX + +#include <svx/sdr/contact/viewobjectcontact.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrPage; + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfPageSubObject : public ViewObjectContact + { + protected: + const SdrPage& getPage() const; + + public: + ViewObjectContactOfPageSubObject(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfPageSubObject(); + + virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const; + virtual bool isPrimitiveGhosted(const DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfPageBackground : public ViewObjectContactOfPageSubObject + { + protected: + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const; + + public: + ViewObjectContactOfPageBackground(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfPageBackground(); + + virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfMasterPage : public ViewObjectContactOfPageSubObject + { + protected: + public: + ViewObjectContactOfMasterPage(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfMasterPage(); + + virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfPageFill : public ViewObjectContactOfPageSubObject + { + protected: + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const; + + public: + ViewObjectContactOfPageFill(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfPageFill(); + + virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfPageShadow : public ViewObjectContactOfPageSubObject + { + public: + ViewObjectContactOfPageShadow(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfPageShadow(); + + virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfOuterPageBorder : public ViewObjectContactOfPageSubObject + { + public: + ViewObjectContactOfOuterPageBorder(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfOuterPageBorder(); + + virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfInnerPageBorder : public ViewObjectContactOfPageSubObject + { + public: + ViewObjectContactOfInnerPageBorder(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfInnerPageBorder(); + + virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfPageHierarchy : public ViewObjectContactOfPageSubObject + { + public: + ViewObjectContactOfPageHierarchy(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfPageHierarchy(); + + virtual drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfPageGrid : public ViewObjectContactOfPageSubObject + { + protected: + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const; + + public: + ViewObjectContactOfPageGrid(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfPageGrid(); + + virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfPageHelplines : public ViewObjectContactOfPageSubObject + { + protected: + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const; + + public: + ViewObjectContactOfPageHelplines(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfPageHelplines(); + + virtual bool isPrimitiveVisible(const DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + class SVX_DLLPUBLIC ViewObjectContactOfSdrPage : public ViewObjectContact + { + public: + ViewObjectContactOfSdrPage(ObjectContact& rObjectContact, ViewContact& rViewContact); + virtual ~ViewObjectContactOfSdrPage(); + + virtual drawinglayer::primitive2d::Primitive2DSequence getPrimitive2DSequenceHierarchy(DisplayInfo& rDisplayInfo) const; + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWOBJECTCONTACTOFSDRPAGE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewobjectcontactofunocontrol.hxx b/include/svx/sdr/contact/viewobjectcontactofunocontrol.hxx new file mode 100644 index 000000000000..a0077a3aa65e --- /dev/null +++ b/include/svx/sdr/contact/viewobjectcontactofunocontrol.hxx @@ -0,0 +1,131 @@ +/* -*- 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 SVX_SDR_CONTACT_VIEWOBJECTCONTACTOFUNOCONTROL_HXX +#define SVX_SDR_CONTACT_VIEWOBJECTCONTACTOFUNOCONTROL_HXX + +#include <svx/sdr/contact/viewobjectcontactofsdrobj.hxx> + +#include <com/sun/star/uno/Reference.hxx> +#include <rtl/ref.hxx> +#include <svx/svxdllapi.h> + +class OutputDevice; +class Window; +class SdrUnoObj; +namespace com { namespace sun { namespace star { + namespace awt { + class XControl; + class XControlContainer; + } +} } } + +//........................................................................ +namespace sdr { namespace contact { +//........................................................................ + + class ViewContactOfUnoControl; + class ObjectContactOfPageView; + //==================================================================== + //= ViewObjectContactOfUnoControl + //==================================================================== + class ViewObjectContactOfUnoControl_Impl; + class SVX_DLLPRIVATE ViewObjectContactOfUnoControl : public ViewObjectContactOfSdrObj + { + protected: + ::rtl::Reference< ViewObjectContactOfUnoControl_Impl > m_pImpl; + + public: + ViewObjectContactOfUnoControl( ObjectContact& _rObjectContact, ViewContactOfUnoControl& _rViewContact ); + + /// returns the ->XControl instance belonging to the instance, creates it if necessary + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > + getControl(); + + /** retrieves a temporary XControl instance, whose parent is the given device + @seealso SdrUnoObj::GetTemporaryControlForWindow + */ + static ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > + getTemporaryControlForWindow( + const Window& _rWindow, + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer >& _inout_ControlContainer, + const SdrUnoObj& _rUnoObject + ); + + /// ensures that the control belonging to this instances has a given visibility + void ensureControlVisibility( bool _bVisible ) const; + + /** sets the design/alive mode of the control + */ + void setControlDesignMode( bool _bDesignMode ) const; + + /** callback from impl class to react on changes of properties form the XControlModel + */ + void propertyChange(); + + /** React on changes of the object of this ViewContact + */ + virtual void ActionChanged(); + + /** to be called when any aspect of the control which requires view updates changed + */ + struct ImplAccess { friend class ViewObjectContactOfUnoControl_Impl; friend class ViewObjectContactOfUnoControl; private: ImplAccess() { } }; + void onControlChangedOrModified( ImplAccess ) { impl_onControlChangedOrModified(); } + + protected: + ~ViewObjectContactOfUnoControl(); + + // support for Primitive2D + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo) const; + + // visibility check + virtual bool isPrimitiveVisible( const DisplayInfo& _rDisplayInfo ) const; + /// to be called when any aspect of the control which requires view updates changed + void impl_onControlChangedOrModified(); + + private: + ViewObjectContactOfUnoControl(); // never implemented + ViewObjectContactOfUnoControl( const ViewObjectContactOfUnoControl& ); // never implemented + ViewObjectContactOfUnoControl& operator=( const ViewObjectContactOfUnoControl& ); // never implemented + }; + + //==================================================================== + //= UnoControlPrintOrPreviewContact + //==================================================================== + class SVX_DLLPRIVATE UnoControlPrintOrPreviewContact : public ViewObjectContactOfUnoControl + { + public: + UnoControlPrintOrPreviewContact( ObjectContactOfPageView& _rObjectContact, ViewContactOfUnoControl& _rViewContact ); + ~UnoControlPrintOrPreviewContact(); + + private: + UnoControlPrintOrPreviewContact(); // never implemented + UnoControlPrintOrPreviewContact( const UnoControlPrintOrPreviewContact& ); // never implemented + UnoControlPrintOrPreviewContact& operator=( const UnoControlPrintOrPreviewContact& ); // never implemented + + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequence(const DisplayInfo& rDisplayInfo ) const; + }; + +//........................................................................ +} } // namespace sdr::contact +//........................................................................ + +#endif // SVX_SDR_CONTACT_VIEWOBJECTCONTACTOFUNOCONTROL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/contact/viewobjectcontactredirector.hxx b/include/svx/sdr/contact/viewobjectcontactredirector.hxx new file mode 100644 index 000000000000..d7f16e1b60bd --- /dev/null +++ b/include/svx/sdr/contact/viewobjectcontactredirector.hxx @@ -0,0 +1,66 @@ +/* -*- 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 _SDR_CONTACT_VIEWOBJECTCONTACTREDIRECTOR_HXX +#define _SDR_CONTACT_VIEWOBJECTCONTACTREDIRECTOR_HXX + +#include "svx/svxdllapi.h" +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +namespace sdr { namespace contact { + class DisplayInfo; + class ViewObjectContact; +}} + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace contact + { + // This class provides a mechanism to redirect the paint mechanism for all or + // single ViewObjectContacts. An own derivation may be set at single ViewContacts + // or at the ObjectContact for redirecting all. If both is used, the one at single + // objects will have priority. + class SVX_DLLPUBLIC ViewObjectContactRedirector + { + public: + // basic constructor. + ViewObjectContactRedirector(); + + // The destructor. + virtual ~ViewObjectContactRedirector(); + + // all default implementations just call the same methods at the original. To do something + // different, overload the method and at least do what the method does. + virtual drawinglayer::primitive2d::Primitive2DSequence createRedirectedPrimitive2DSequence( + const sdr::contact::ViewObjectContact& rOriginal, + const sdr::contact::DisplayInfo& rDisplayInfo); + }; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_CONTACT_VIEWOBJECTCONTACTREDIRECTOR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/event/eventhandler.hxx b/include/svx/sdr/event/eventhandler.hxx new file mode 100644 index 000000000000..91ac5491e5c6 --- /dev/null +++ b/include/svx/sdr/event/eventhandler.hxx @@ -0,0 +1,132 @@ +/* -*- 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 _SDR_EVENT_EVENTHANDLER_HXX +#define _SDR_EVENT_EVENTHANDLER_HXX + +#include <sal/types.h> + +#include <vector> +#include <vcl/timer.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +namespace sdr +{ + namespace event + { + class BaseEvent; + class EventHandler; + + // typedefs for a list of BaseEvents + typedef ::std::vector< BaseEvent* > BaseEventVector; + } // end of namespace event +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace event + { + class BaseEvent + { + // the EventHandler this event is registered at + EventHandler& mrEventHandler; + + public: + // basic constructor. + BaseEvent(EventHandler& rEventHandler); + + // destructor + virtual ~BaseEvent(); + + // the called method if the event is triggered + virtual void ExecuteEvent() = 0; + }; + } // end of namespace event +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace event + { + class EventHandler + { + BaseEventVector maVector; + + // to allow BaseEvents to use the add/remove functionality + friend class BaseEvent; + + // methods to add/remove events. These are private since + // they are used from BaseEvent only. + void AddEvent(BaseEvent& rBaseEvent); + void RemoveEvent(BaseEvent& rBaseEvent); + + // access to a event, 0L when no more events + BaseEvent* GetEvent(); + + public: + // basic constructor. + EventHandler(); + + // destructor + virtual ~EventHandler(); + + // Trigger and consume the events + virtual void ExecuteEvents(); + + // for control + bool IsEmpty() const; + }; + } // end of namespace event +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace event + { + class TimerEventHandler : public EventHandler, public Timer + { + public: + // basic constructor. + TimerEventHandler(sal_uInt32 nTimeout = 1L); + + // destructor + virtual ~TimerEventHandler(); + + // The timer when it is triggered; from class Timer + virtual void Timeout(); + + // reset the timer + void Restart(); + }; + } // end of namespace event +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_EVENT_EVENTHANDLER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlayanimatedbitmapex.hxx b/include/svx/sdr/overlay/overlayanimatedbitmapex.hxx new file mode 100644 index 000000000000..756d2dac3731 --- /dev/null +++ b/include/svx/sdr/overlay/overlayanimatedbitmapex.hxx @@ -0,0 +1,92 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYANIMATEDBITMAPEX_HXX +#define _SDR_OVERLAY_OVERLAYANIMATEDBITMAPEX_HXX + +#include <svx/sdr/overlay/overlayobject.hxx> +#include <vcl/bitmapex.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + class SVX_DLLPUBLIC OverlayAnimatedBitmapEx : public OverlayObjectWithBasePosition + { + protected: + // the Bitmaps + BitmapEx maBitmapEx1; + BitmapEx maBitmapEx2; + + // position of the basePosition inside the Bitmaps, in pixels + sal_uInt16 mnCenterX1; + sal_uInt16 mnCenterY1; + sal_uInt16 mnCenterX2; + sal_uInt16 mnCenterY2; + + // #i53216# added CursorBlinkTime (in ms) + sal_uInt32 mnBlinkTime; + + // bitfield + // Flag to remember which state to draw. Inited with sal_False (0) + unsigned mbOverlayState : 1; + + // geometry creation for OverlayObject + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); + + // #i53216# check blink time value range (currently 25 < mnBlinkTime < 10000) + void impCheckBlinkTimeValueRange(); + + public: + OverlayAnimatedBitmapEx( + const basegfx::B2DPoint& rBasePos, + const BitmapEx& rBitmapEx1, + const BitmapEx& rBitmapEx2, + sal_uInt32 nBlinkTime = 500, + sal_uInt16 nCenX1 = 0, + sal_uInt16 nCenY1 = 0, + sal_uInt16 nCenX2 = 0, + sal_uInt16 nCenY2 = 0); + virtual ~OverlayAnimatedBitmapEx(); + + const BitmapEx& getBitmapEx1() const { return maBitmapEx1; } + const BitmapEx& getBitmapEx2() const { return maBitmapEx2; } + + sal_uInt16 getCenterX1() const { return mnCenterX1; } + sal_uInt16 getCenterY1() const { return mnCenterY1; } + sal_uInt16 getCenterX2() const { return mnCenterX2; } + sal_uInt16 getCenterY2() const { return mnCenterY2; } + + // #i53216# added CursorBlinkTime (in ms) + sal_uInt32 getBlinkTime() const { return mnBlinkTime; } + + // execute event from base class ::sdr::animation::Event. Default + // implementation does nothing and does not create a new event. + virtual void Trigger(sal_uInt32 nTime); + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYANIMATEDBITMAPEX_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlaybitmapex.hxx b/include/svx/sdr/overlay/overlaybitmapex.hxx new file mode 100644 index 000000000000..bd841c6b4255 --- /dev/null +++ b/include/svx/sdr/overlay/overlaybitmapex.hxx @@ -0,0 +1,66 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYBITMAPEX_HXX +#define _SDR_OVERLAY_OVERLAYBITMAPEX_HXX + +#include <svx/sdr/overlay/overlayobject.hxx> +#include <vcl/bitmapex.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + class SVX_DLLPUBLIC OverlayBitmapEx : public OverlayObjectWithBasePosition + { + protected: + // the Bitmap itself + BitmapEx maBitmapEx; + + // position of the basePosition inside the Bitmap, in pixels + sal_uInt16 mnCenterX; + sal_uInt16 mnCenterY; + + // optional transparency + double mfAlpha; + + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); + + public: + OverlayBitmapEx( + const basegfx::B2DPoint& rBasePos, + const BitmapEx& rBitmapEx, + sal_uInt16 nCenX = 0, sal_uInt16 nCenY = 0, double fAlpha = 0.0 ); + virtual ~OverlayBitmapEx(); + + const BitmapEx& getBitmapEx() const { return maBitmapEx; } + + sal_uInt16 getCenterX() const { return mnCenterX; } + sal_uInt16 getCenterY() const { return mnCenterY; } + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYBITMAPEX_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlaycrosshair.hxx b/include/svx/sdr/overlay/overlaycrosshair.hxx new file mode 100644 index 000000000000..436705536819 --- /dev/null +++ b/include/svx/sdr/overlay/overlaycrosshair.hxx @@ -0,0 +1,51 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYCROSSHAIR_HXX +#define _SDR_OVERLAY_OVERLAYCROSSHAIR_HXX + +#include <svx/sdr/overlay/overlayobject.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + class OverlayCrosshairStriped : public OverlayObjectWithBasePosition + { + protected: + // geometry creation for OverlayObject + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); + + public: + explicit OverlayCrosshairStriped(const basegfx::B2DPoint& rBasePos); + virtual ~OverlayCrosshairStriped(); + + // react on stripe definition change + virtual void stripeDefinitionHasChanged(); + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYCROSSHAIR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlayhatchrect.hxx b/include/svx/sdr/overlay/overlayhatchrect.hxx new file mode 100644 index 000000000000..7f01c3537e42 --- /dev/null +++ b/include/svx/sdr/overlay/overlayhatchrect.hxx @@ -0,0 +1,71 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYHATCHRECT_HXX +#define _SDR_OVERLAY_OVERLAYHATCHRECT_HXX + +#include <svx/sdr/overlay/overlayobject.hxx> +#include <vcl/hatch.hxx> + +////////////////////////////////////////////////////////////////////////////// + +class PolyPolygon; + +namespace sdr +{ + namespace overlay + { + class OverlayHatchRect : public OverlayObjectWithBasePosition + { + // geometric definitions + basegfx::B2DPoint maSecondPosition; + const double mfDiscreteGrow; + const double mfDiscreteShrink; + const double mfHatchRotation; + const double mfRotation; + + // geometry creation for OverlayObject + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); + + public: + OverlayHatchRect( + const basegfx::B2DPoint& rBasePosition, + const basegfx::B2DPoint& rSecondPosition, + const Color& rHatchColor, + double fDiscreteGrow, + double fDiscreteShrink, + double fHatchRotation, + double fRotation); + + const basegfx::B2DPoint& getSecondPosition() const { return maSecondPosition; } + + // data read access + double getDiscreteGrow() const { return mfDiscreteGrow; } + double getDiscreteShrink() const { return mfDiscreteShrink; } + double getHatchRotation() const { return mfHatchRotation; } + double getRotation() const { return mfRotation; } + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYHATCHRECT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlayhelpline.hxx b/include/svx/sdr/overlay/overlayhelpline.hxx new file mode 100644 index 000000000000..3ab10df10626 --- /dev/null +++ b/include/svx/sdr/overlay/overlayhelpline.hxx @@ -0,0 +1,60 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYHELPLINE_HXX +#define _SDR_OVERLAY_OVERLAYHELPLINE_HXX + +#include <svx/sdr/overlay/overlayobject.hxx> +#include <svx/svdhlpln.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + class OverlayHelplineStriped : public OverlayObjectWithBasePosition + { + protected: + // remember HelpLineKind + SdrHelpLineKind meKind; + + // geometry creation for OverlayObject + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); + + public: + explicit OverlayHelplineStriped( + const basegfx::B2DPoint& rBasePos, + SdrHelpLineKind eNewKind = SDRHELPLINE_POINT); + virtual ~OverlayHelplineStriped(); + + // dat read access + SdrHelpLineKind getKind() const { return meKind; } + + // react on stripe definition change + virtual void stripeDefinitionHasChanged(); + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYHELPLINE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlayline.hxx b/include/svx/sdr/overlay/overlayline.hxx new file mode 100644 index 000000000000..8b093fecbfb4 --- /dev/null +++ b/include/svx/sdr/overlay/overlayline.hxx @@ -0,0 +1,59 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYLINE_HXX +#define _SDR_OVERLAY_OVERLAYLINE_HXX + +#include <svx/sdr/overlay/overlayobject.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + class OverlayLineStriped : public OverlayObjectWithBasePosition + { + protected: + // second position in pixel + basegfx::B2DPoint maSecondPosition; + + // geometry creation for OverlayObject + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); + + public: + OverlayLineStriped( + const basegfx::B2DPoint& rBasePos, + const basegfx::B2DPoint& rSecondPos); + virtual ~OverlayLineStriped(); + + // change second position + const basegfx::B2DPoint& getSecondPosition() const { return maSecondPosition; } + + // react on stripe definition change + virtual void stripeDefinitionHasChanged(); + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYLINE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlaymanager.hxx b/include/svx/sdr/overlay/overlaymanager.hxx new file mode 100644 index 000000000000..e2c23b5dc6df --- /dev/null +++ b/include/svx/sdr/overlay/overlaymanager.hxx @@ -0,0 +1,151 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYMANAGER_HXX +#define _SDR_OVERLAY_OVERLAYMANAGER_HXX + +#include <boost/utility.hpp> +#include <rtl/ref.hxx> +#include <svx/sdr/animation/scheduler.hxx> +#include <svx/sdr/overlay/overlayobject.hxx> +#include <vcl/mapmod.hxx> +#include <tools/color.hxx> +#include "svx/svxdllapi.h" +#include <svtools/optionsdrawinglayer.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> +#include <drawinglayer/geometry/viewinformation2d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class OutputDevice; +class Region; + +namespace sdr { namespace overlay { + class OverlayObject; +}} + +namespace basegfx { + class B2DRange; +} + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + class SVX_DLLPUBLIC OverlayManager + : private boost::noncopyable + , protected ::sdr::animation::Scheduler + , public rtl::IReference + { + private: + oslInterlockedCount mnRefCount; + protected: + // the OutputDevice to work on, set on construction and not to be changed + OutputDevice& rmOutputDevice; + + // the vector of registered OverlayObjects + OverlayObjectVector maOverlayObjects; + + // Stripe support. All striped OverlayObjects use these stripe + // values. Changes change all those objects. + Color maStripeColorA; // defaults to Color(COL_BLACK) + Color maStripeColorB; // defaults to Color(COL_WHITE) + sal_uInt32 mnStripeLengthPixel; // defaults to 4L + + // hold an incarnation of Drawinglayer configuration options + SvtOptionsDrawinglayer maDrawinglayerOpt; + + // hold buffered the logic length of discrete vector (1.0, 0.0) and the + // view transformation belonging to it. Update happens in getDiscreteOne() + basegfx::B2DHomMatrix maViewTransformation; + drawinglayer::geometry::ViewInformation2D maViewInformation2D; + double mfDiscreteOne; + + // internal + void ImpDrawMembers(const basegfx::B2DRange& rRange, OutputDevice& rDestinationDevice) const; + void ImpStripeDefinitionChanged(); + void impApplyRemoveActions(OverlayObject& rTarget); + void impApplyAddActions(OverlayObject& rTarget); + + // return mfDiscreteOne to derivations, but also check for buffered local + // ViewTransformation and evtl. correct mfDiscreteOne + double getDiscreteOne() const; + + OverlayManager(OutputDevice& rOutputDevice); + virtual ~OverlayManager(); + + public: + static rtl::Reference<OverlayManager> create(OutputDevice& rOutputDevice); + + // access to current ViewInformation2D; this call checks and evtl. updates ViewInformation2D + const drawinglayer::geometry::ViewInformation2D getCurrentViewInformation2D() const; + + // complete redraw + virtual void completeRedraw(const Region& rRegion, OutputDevice* pPreRenderDevice = 0) const; + + // flush. Do buffered updates. + virtual void flush(); + + // #i68597# part of content gets copied, react on it + virtual void copyArea(const Point& rDestPt, const Point& rSrcPt, const Size& rSrcSize); + + // restore part of background. Implemented form buffered versions only. + virtual void restoreBackground(const Region& rRegion) const; + + // get the OutputDevice + OutputDevice& getOutputDevice() const { return rmOutputDevice; } + + // add and remove OverlayObjects + void add(OverlayObject& rOverlayObject); + void remove(OverlayObject& rOverlayObject); + + // invalidate the given range at local OutputDevice + virtual void invalidateRange(const basegfx::B2DRange& rRange); + + // stripe support ColA + Color getStripeColorA() const { return maStripeColorA; } + void setStripeColorA(Color aNew= Color(COL_BLACK)); + + // stripe support ColB + Color getStripeColorB() const { return maStripeColorB; } + void setStripeColorB(Color aNew = Color(COL_WHITE)); + + // stripe support StripeLengthPixel + sal_uInt32 getStripeLengthPixel() const { return mnStripeLengthPixel; } + void setStripeLengthPixel(sal_uInt32 nNew = 5L); + + // access to maDrawinglayerOpt + const SvtOptionsDrawinglayer& getDrawinglayerOpt() const { return maDrawinglayerOpt; } + + void InsertEvent(sdr::animation::Event* pNew) { Scheduler::InsertEvent(pNew); } + + virtual oslInterlockedCount SAL_CALL acquire(); + virtual oslInterlockedCount SAL_CALL release(); + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYMANAGER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlaymanagerbuffered.hxx b/include/svx/sdr/overlay/overlaymanagerbuffered.hxx new file mode 100644 index 000000000000..7f6dbe05d9e6 --- /dev/null +++ b/include/svx/sdr/overlay/overlaymanagerbuffered.hxx @@ -0,0 +1,98 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYMANAGERBUFFERED_HXX +#define _SDR_OVERLAY_OVERLAYMANAGERBUFFERED_HXX + +#include <svx/sdr/overlay/overlaymanager.hxx> +#include <basegfx/range/b2irange.hxx> +#include <vcl/virdev.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + class OverlayManagerBuffered : public OverlayManager + { + protected: + // The VirtualDevice for draw window content buffering, this + // is the view content without overlay + VirtualDevice maBufferDevice; + + // #i73602# The VirtualDevice for OverlayPaint buffering. This + // is an extra device to avoid flickering of overlay paints + VirtualDevice maOutputBufferDevice; + + // Timer for buffering + Timer maBufferTimer; + + // Range for buffering (in pixel to be independent from mapMode) + basegfx::B2IRange maBufferRememberedRangePixel; + + // bitfield + // Flag to decide if PreRendering shall be used for overlay refreshes. + // Default is false. + unsigned mbRefreshWithPreRendering : 1; + + // link for timer + DECL_LINK(ImpBufferTimerHandler, AutoTimer*); + + // Internal methods for buffering + void ImpPrepareBufferDevice(); + void ImpRestoreBackground() const ; + void ImpRestoreBackground(const Region& rRegionPixel) const; + void ImpSaveBackground(const Region& rRegion, OutputDevice* pPreRenderDevice = 0L); + + OverlayManagerBuffered( + OutputDevice& rOutputDevice, + bool bRefreshWithPreRendering = false); + virtual ~OverlayManagerBuffered(); + + public: + static rtl::Reference<OverlayManager> create(OutputDevice& rOutputDevice, + bool bRefreshWithPreRendering = false); + + // complete redraw + virtual void completeRedraw(const Region& rRegion, OutputDevice* pPreRenderDevice = 0L) const; + + // flush. Do buffered updates. + virtual void flush(); + + // #i68597# part of content gets copied, react on it + virtual void copyArea(const Point& rDestPt, const Point& rSrcPt, const Size& rSrcSize); + + // restore part of background. Implemented form buffered versions only. + virtual void restoreBackground(const Region& rRegion) const; + + // invalidate the given range at local OutputDevice + virtual void invalidateRange(const basegfx::B2DRange& rRange); + + // access to RefreshWithPreRendering Flag + bool DoRefreshWithPreRendering() const { return mbRefreshWithPreRendering; } + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYMANAGERBUFFERED_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlayobject.hxx b/include/svx/sdr/overlay/overlayobject.hxx new file mode 100644 index 000000000000..263e9a9ab57c --- /dev/null +++ b/include/svx/sdr/overlay/overlayobject.hxx @@ -0,0 +1,196 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYOBJECT_HXX +#define _SDR_OVERLAY_OVERLAYOBJECT_HXX + +#include <basegfx/point/b2dpoint.hxx> +#include <basegfx/range/b2drange.hxx> +#include <tools/color.hxx> +#include <rtl/ref.hxx> +#include <svx/sdr/animation/scheduler.hxx> +#include "svx/svxdllapi.h" +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> + +#include <vector> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class OutputDevice; + +namespace sdr +{ + namespace overlay + { + class OverlayManager; + } // end of namespace overlay +} // end of namespace sdr + +namespace basegfx +{ + class B2DPolygon; + class B2DPolyPolygon; + class B2DRange; +} // end of namespace basegfx + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + class SVX_DLLPUBLIC OverlayObject : private ::boost::noncopyable, public ::sdr::animation::Event + { + private: + // Manager is allowed access to private Member mpOverlayManager + friend class OverlayManager; + + // pointer to OverlayManager, if object is added. Changed by + // OverlayManager, do not chnge Yourself. + OverlayManager* mpOverlayManager; + + // Primitive2DSequence of the OverlayObject + drawinglayer::primitive2d::Primitive2DSequence maPrimitive2DSequence; + + protected: + // access methods to maPrimitive2DSequence. The usage of this methods may allow + // later thread-safe stuff to be added if needed. Only to be used by getPrimitive2DSequence() + // implementations for buffering the last decomposition. + const drawinglayer::primitive2d::Primitive2DSequence& getPrimitive2DSequence() const { return maPrimitive2DSequence; } + void setPrimitive2DSequence(const drawinglayer::primitive2d::Primitive2DSequence& rNew) { maPrimitive2DSequence = rNew; } + + // the creation method for Primitive2DSequence. Called when getPrimitive2DSequence() + // sees that maPrimitive2DSequence is empty. Needs to be supported by all + // OverlayObject implementations. Default implementation will assert + // a missing implementation + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); + + // region in logical coordinates + basegfx::B2DRange maBaseRange; + + // base color of this OverlayObject + Color maBaseColor; + + // bitfield + // Flag for visibility + unsigned mbIsVisible : 1; + + // Flag to control hittability + unsigned mbIsHittable : 1; + + // Flag to hold info if this objects supports animation. Default is + // false. If true, the Trigger() method should be overloaded + // to implement the animation effect and to re-initiate the event. + unsigned mbAllowsAnimation : 1; + + // Flag tocontrol if this OverlayObject allows AntiAliased visualisation. + // Default is true, but e.g. for selection visualisation in SC and SW, + // it is switched to false + unsigned mbAllowsAntiAliase : 1; + + // set changed flag. Call after change, since the old range is invalidated + // and then the new one is calculated and invalidated, too. This will only + // work after the change. + virtual void objectChange(); + + // write access to AntiAliase flag. This is protected since + // only implementations are allowed to change this, preferrably in their + // constructor + void allowAntiAliase(bool bNew); + + public: + explicit OverlayObject(Color aBaseColor); + virtual ~OverlayObject(); + + // get OverlayManager + OverlayManager* getOverlayManager() const { return mpOverlayManager; } + + // the access method for Primitive2DSequence. Will use createPrimitive2DSequence and + // setPrimitive2DSequence if needed. Overloading may be used to allow disposal of last + // created primitives to react on changed circumstances and to re-create primitives + virtual drawinglayer::primitive2d::Primitive2DSequence getOverlayObjectPrimitive2DSequence() const; + + // access to visibility state + bool isVisible() const { return mbIsVisible; } + void setVisible(bool bNew); + + // access to hittable flag + bool isHittable() const { return mbIsHittable; } + void setHittable(bool bNew); + + // read access to AntiAliase flag + bool allowsAntiAliase() const { return mbAllowsAntiAliase; } + + // read access to baseRange. This may trigger createBaseRange() if + // object is changed. + const basegfx::B2DRange& getBaseRange() const; + + // access to baseColor + Color getBaseColor() const { return maBaseColor; } + void setBaseColor(Color aNew); + + // execute event from base class ::sdr::animation::Event. Default + // implementation does nothing and does not create a new event. + virtual void Trigger(sal_uInt32 nTime); + + // acces to AllowsAnimation flag + bool allowsAnimation() const { return mbAllowsAnimation; } + + // stripe definition has changed. The OverlayManager does have + // support data to draw graphics in two colors striped. This + // method notifies the OverlayObject if that change takes place. + // Default implementation does nothing. + virtual void stripeDefinitionHasChanged(); + }; + + // typedefs for a vector of OverlayObjects + typedef ::std::vector< OverlayObject* > OverlayObjectVector; + + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + class SVX_DLLPUBLIC OverlayObjectWithBasePosition : public OverlayObject + { + protected: + // base position in logical coordinates + basegfx::B2DPoint maBasePosition; + + public: + OverlayObjectWithBasePosition(const basegfx::B2DPoint& rBasePos, Color aBaseColor); + virtual ~OverlayObjectWithBasePosition(); + + // access to basePosition + const basegfx::B2DPoint& getBasePosition() const { return maBasePosition; } + void setBasePosition(const basegfx::B2DPoint& rNew); + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYOBJECT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlayobjectcell.hxx b/include/svx/sdr/overlay/overlayobjectcell.hxx new file mode 100644 index 000000000000..6707c0fc61eb --- /dev/null +++ b/include/svx/sdr/overlay/overlayobjectcell.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYOBJECTCELL_HXX +#define _SDR_OVERLAY_OVERLAYOBJECTCELL_HXX + +#include <svx/sdr/overlay/overlayobject.hxx> + +#include <vector> + +////////////////////////////////////////////////////////////////////////////// + +// #114409# +namespace sdr +{ + namespace overlay + { + enum CellOverlayType { CELL_OVERLAY_INVERT, CELL_OVERLAY_TRANSPARENT }; + + // OverlayObjectCell - used for cell cursor, selection and AutoFill handle + + class SVX_DLLPUBLIC OverlayObjectCell : public OverlayObject + { + public: + typedef ::std::vector< basegfx::B2DRange > RangeVector; + + private: + CellOverlayType mePaintType; + RangeVector maRectangles; + + // geometry creation for OverlayObject + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); + + public: + OverlayObjectCell( CellOverlayType eType, const Color& rColor, const RangeVector& rRects); + virtual ~OverlayObjectCell(); + }; + + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYLINE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlayobjectlist.hxx b/include/svx/sdr/overlay/overlayobjectlist.hxx new file mode 100644 index 000000000000..ea75ace1e94a --- /dev/null +++ b/include/svx/sdr/overlay/overlayobjectlist.hxx @@ -0,0 +1,78 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYOBJECTLIST_HXX +#define _SDR_OVERLAY_OVERLAYOBJECTLIST_HXX + +#include <svx/sdr/overlay/overlayobject.hxx> +#include <sal/types.h> +#include "svx/svxdllapi.h" + +////////////////////////////////////////////////////////////////////////////// + +#define DEFAULT_VALUE_FOR_HITTEST_PIXEL (2L) + +////////////////////////////////////////////////////////////////////////////// + +class Point; + +namespace sdr +{ + namespace overlay + { + class SVX_DLLPUBLIC OverlayObjectList + { + protected: + // the vector of OverlayObjects + OverlayObjectVector maVector; + + // default value for HiTestPixel + sal_uInt32 getDefaultValueForHitTestPixel() const { return 4L; } + + public: + OverlayObjectList() {} + ~OverlayObjectList(); + + // clear list, this includes deletion of all contained objects + void clear(); + + // append objects + void append(OverlayObject& rOverlayObject) { maVector.push_back(&rOverlayObject); } + + // access to objects + sal_uInt32 count() const { return maVector.size(); } + OverlayObject& getOverlayObject(sal_uInt32 nIndex) const { return *(maVector[nIndex]); } + + // Hittest with logical coordinates + bool isHitLogic(const basegfx::B2DPoint& rLogicPosition, double fLogicTolerance = 0.0) const; + + // Hittest with pixel coordinates and pixel tolerance + bool isHitPixel(const Point& rDiscretePosition, sal_uInt32 fDiscreteTolerance = DEFAULT_VALUE_FOR_HITTEST_PIXEL) const; + + // calculate BaseRange of all included OverlayObjects and return + basegfx::B2DRange getBaseRange() const; + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYOBJECTLIST_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlaypolypolygon.hxx b/include/svx/sdr/overlay/overlaypolypolygon.hxx new file mode 100644 index 000000000000..d7dd82751f53 --- /dev/null +++ b/include/svx/sdr/overlay/overlaypolypolygon.hxx @@ -0,0 +1,58 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYPOLYPOLYGON_HXX +#define _SDR_OVERLAY_OVERLAYPOLYPOLYGON_HXX + +#include <svx/sdr/overlay/overlayobject.hxx> +#include <basegfx/polygon/b2dpolypolygon.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + class SVX_DLLPUBLIC OverlayPolyPolygonStriped : public OverlayObject + { + protected: + // geometry + basegfx::B2DPolyPolygon maPolyPolygon; + + // geometry creation for OverlayObject + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); + + public: + explicit OverlayPolyPolygonStriped(const basegfx::B2DPolyPolygon& rPolyPolygon); + virtual ~OverlayPolyPolygonStriped(); + + // change geometry + basegfx::B2DPolyPolygon getPolyPolygon() const { return maPolyPolygon; } + + // react on stripe definition change + virtual void stripeDefinitionHasChanged(); + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYPOLYPOLYGON_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlayprimitive2dsequenceobject.hxx b/include/svx/sdr/overlay/overlayprimitive2dsequenceobject.hxx new file mode 100644 index 000000000000..a2e981c2c1a8 --- /dev/null +++ b/include/svx/sdr/overlay/overlayprimitive2dsequenceobject.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYPRIMITIVE2DSEQUENCEOBJECT_HXX +#define _SDR_OVERLAY_OVERLAYPRIMITIVE2DSEQUENCEOBJECT_HXX + +#include <svx/sdr/overlay/overlayobject.hxx> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + class SVX_DLLPUBLIC OverlayPrimitive2DSequenceObject : public OverlayObjectWithBasePosition + { + protected: + // the sequence of primitives to show + const drawinglayer::primitive2d::Primitive2DSequence maSequence; + + // geometry creation for OverlayObject + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); + + private: + // internal helper to create a drawinglayer::geometry::ViewInformation2D + // using a OutputDevice and local knowledge + drawinglayer::geometry::ViewInformation2D impCreateViewInformation2D(OutputDevice& rOutputDevice) const; + + public: + explicit OverlayPrimitive2DSequenceObject(const drawinglayer::primitive2d::Primitive2DSequence& rSequence); + + virtual ~OverlayPrimitive2DSequenceObject(); + + // data read access + const drawinglayer::primitive2d::Primitive2DSequence& getSequence() const { return maSequence; } + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYPRIMITIVE2DSEQUENCEOBJECT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlayrollingrectangle.hxx b/include/svx/sdr/overlay/overlayrollingrectangle.hxx new file mode 100644 index 000000000000..3a896aa3cdd8 --- /dev/null +++ b/include/svx/sdr/overlay/overlayrollingrectangle.hxx @@ -0,0 +1,75 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYROOLINGRECTANGLE_HXX +#define _SDR_OVERLAY_OVERLAYROOLINGRECTANGLE_HXX + +#include <svx/sdr/overlay/overlayobject.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + class OverlayRollingRectangleStriped : public OverlayObjectWithBasePosition + { + protected: + // second position in pixel + basegfx::B2DPoint maSecondPosition; + + // bitfield + // Flag to switch on/off long lines to the OutputDevice bounds + unsigned mbExtendedLines : 1; + + // Flag to switch on/off the bounds itself + unsigned mbShowBounds : 1; + + // geometry creation for OverlayObject + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); + + public: + OverlayRollingRectangleStriped( + const basegfx::B2DPoint& rBasePos, + const basegfx::B2DPoint& rSecondPos, + bool bExtendedLines = false, + bool bShowBounds = true); + virtual ~OverlayRollingRectangleStriped(); + + // change second position + const basegfx::B2DPoint& getSecondPosition() const { return maSecondPosition; } + void setSecondPosition(const basegfx::B2DPoint& rNew); + + // change extended lines + bool getExtendedLines() const { return mbExtendedLines; } + + // change show bounds + bool getShowBounds() const { return mbShowBounds; } + + // react on stripe definition change + virtual void stripeDefinitionHasChanged(); + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYROOLINGRECTANGLE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlayselection.hxx b/include/svx/sdr/overlay/overlayselection.hxx new file mode 100644 index 000000000000..e96b8fa3281d --- /dev/null +++ b/include/svx/sdr/overlay/overlayselection.hxx @@ -0,0 +1,87 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYSELECTION_HXX +#define _SDR_OVERLAY_OVERLAYSELECTION_HXX + +#include <svx/sdr/overlay/overlayobject.hxx> +#include <vcl/region.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + // overlay type definition + enum OverlayType + { + OVERLAY_INVERT, + OVERLAY_SOLID, + OVERLAY_TRANSPARENT + }; + + class SVX_DLLPUBLIC OverlaySelection : public OverlayObject + { + protected: + // type of overlay + OverlayType meOverlayType; + + // geometry of overlay + std::vector< basegfx::B2DRange > maRanges; + + // Values of last primitive creation. These are checked in getOverlayObjectPrimitive2DSequence + // to evtl. get rid of last Primitive2DSequence. This ensures that these values are up-to-date + // and are usable when creating primitives + OverlayType maLastOverlayType; + sal_uInt16 mnLastTransparence; + + // bitfield + unsigned mbBorder : 1; + + // geometry creation for OverlayObject, can use local *Last* values + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); + + public: + OverlaySelection( + OverlayType eType, + const Color& rColor, + const std::vector< basegfx::B2DRange >& rRanges, + bool bBorder); + virtual ~OverlaySelection(); + + // data read access + OverlayType getOverlayType() const { return meOverlayType; } + const std::vector< basegfx::B2DRange >& getRanges() const { return maRanges; } + bool getBorder() const { return mbBorder; } + + // overloaded to check conditions for last createOverlayObjectPrimitive2DSequence + virtual drawinglayer::primitive2d::Primitive2DSequence getOverlayObjectPrimitive2DSequence() const; + + // data write access + void setRanges(const std::vector< basegfx::B2DRange >& rNew); + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYSELECTION_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlaytools.hxx b/include/svx/sdr/overlay/overlaytools.hxx new file mode 100644 index 000000000000..665d445e2d46 --- /dev/null +++ b/include/svx/sdr/overlay/overlaytools.hxx @@ -0,0 +1,270 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYTOOLS_HXX +#define _SDR_OVERLAY_OVERLAYTOOLS_HXX + +#include <drawinglayer/primitive2d/primitivetools2d.hxx> +#include <vcl/bitmapex.hxx> + +////////////////////////////////////////////////////////////////////////////// +// Overlay helper class which holds a BotmapEx which is to be visualized +// at the given logic position with the Bitmap's pixel size, unscaled and +// unrotated (like a marker). The discrete pixel on the bitmap assocciated +// with the target position is given in discrete X,Y coordinates +namespace drawinglayer +{ + namespace primitive2d + { + class OverlayBitmapExPrimitive : public DiscreteMetricDependentPrimitive2D + { + private: + // The BitmapEx to use, PixelSize is used + BitmapEx maBitmapEx; + + // The logic position + basegfx::B2DPoint maBasePosition; + + // The pixel inside the BitmapEx which is assocciated with + // the target position (offset in the bitmap) + sal_uInt16 mnCenterX; + sal_uInt16 mnCenterY; + + protected: + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; + + public: + OverlayBitmapExPrimitive( + const BitmapEx& rBitmapEx, + const basegfx::B2DPoint& rBasePosition, + sal_uInt16 nCenterX, + sal_uInt16 nCenterY); + + // data access + const BitmapEx& getBitmapEx() const { return maBitmapEx; } + const basegfx::B2DPoint& getBasePosition() const { return maBasePosition; } + sal_uInt16 getCenterX() const { return mnCenterX; } + sal_uInt16 getCenterY() const { return mnCenterY; } + + // compare operator + virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; + + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// +// Overlay helper class for a crosshair +namespace drawinglayer +{ + namespace primitive2d + { + class OverlayCrosshairPrimitive : public ViewportDependentPrimitive2D + { + private: + // The logic position + basegfx::B2DPoint maBasePosition; + + // The stripe colors and legth + basegfx::BColor maRGBColorA; + basegfx::BColor maRGBColorB; + double mfDiscreteDashLength; + + protected: + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; + + public: + OverlayCrosshairPrimitive( + const basegfx::B2DPoint& rBasePosition, + const basegfx::BColor& rRGBColorA, + const basegfx::BColor& rRGBColorB, + double fDiscreteDashLength); + + // data access + const basegfx::B2DPoint& getBasePosition() const { return maBasePosition; } + const basegfx::BColor& getRGBColorA() const { return maRGBColorA; } + const basegfx::BColor& getRGBColorB() const { return maRGBColorB; } + double getDiscreteDashLength() const { return mfDiscreteDashLength; } + + // compare operator + virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; + + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// +// Overlay helper class for a hatch rectangle as used e.g. for text object +// selection hilighting +namespace drawinglayer +{ + namespace primitive2d + { + class OverlayHatchRectanglePrimitive : public DiscreteMetricDependentPrimitive2D + { + private: + // the logic rectangle definition + basegfx::B2DRange maObjectRange; + + // the hatch definition + double mfDiscreteHatchDistance; + double mfHatchRotation; + basegfx::BColor maHatchColor; + + // the dscrete grow and shrink of the box + double mfDiscreteGrow; + double mfDiscreteShrink; + + // the rotation of the primitive itself + double mfRotation; + + protected: + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; + + public: + OverlayHatchRectanglePrimitive( + const basegfx::B2DRange& rObjectRange, + double fDiscreteHatchDistance, + double fHatchRotation, + const basegfx::BColor& rHatchColor, + double fDiscreteGrow, + double fDiscreteShrink, + double fRotation); + + // data access + const basegfx::B2DRange& getObjectRange() const { return maObjectRange; } + double getDiscreteHatchDistance() const { return mfDiscreteHatchDistance; } + double getHatchRotation() const { return mfHatchRotation; } + const basegfx::BColor& getHatchColor() const { return maHatchColor; } + double getDiscreteGrow() const { return mfDiscreteGrow; } + double getDiscreteShrink() const { return mfDiscreteShrink; } + double getRotation() const { return mfRotation; } + + // compare operator + virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; + + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// +// Overlay helper class for a striped helpline + +namespace drawinglayer +{ + namespace primitive2d + { + enum HelplineStyle + { + HELPLINESTYLE_POINT, + HELPLINESTYLE_VERTICAL, + HELPLINESTYLE_HORIZONTAL + }; + + class OverlayHelplineStripedPrimitive : public ViewportDependentPrimitive2D + { + private: + // The logic position + basegfx::B2DPoint maBasePosition; + + // the style + HelplineStyle meStyle; + + // The stripe colors and legth + basegfx::BColor maRGBColorA; + basegfx::BColor maRGBColorB; + double mfDiscreteDashLength; + + protected: + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; + + public: + OverlayHelplineStripedPrimitive( + const basegfx::B2DPoint& rBasePosition, + HelplineStyle eStyle, + const basegfx::BColor& rRGBColorA, + const basegfx::BColor& rRGBColorB, + double fDiscreteDashLength); + + // data access + const basegfx::B2DPoint& getBasePosition() const { return maBasePosition; } + HelplineStyle getStyle() const { return meStyle; } + const basegfx::BColor& getRGBColorA() const { return maRGBColorA; } + const basegfx::BColor& getRGBColorB() const { return maRGBColorB; } + double getDiscreteDashLength() const { return mfDiscreteDashLength; } + + // compare operator + virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; + + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// +// Overlay helper class for rolling rectangle helplines. This primitive is +// only for the extended lines to the ends of the view + +namespace drawinglayer +{ + namespace primitive2d + { + class OverlayRollingRectanglePrimitive : public ViewportDependentPrimitive2D + { + private: + // The logic range + basegfx::B2DRange maRollingRectangle; + + // The stripe colors and legth + basegfx::BColor maRGBColorA; + basegfx::BColor maRGBColorB; + double mfDiscreteDashLength; + + protected: + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; + + public: + OverlayRollingRectanglePrimitive( + const basegfx::B2DRange& aRollingRectangle, + const basegfx::BColor& rRGBColorA, + const basegfx::BColor& rRGBColorB, + double fDiscreteDashLength); + + // data access + const basegfx::B2DRange& getRollingRectangle() const { return maRollingRectangle; } + const basegfx::BColor& getRGBColorA() const { return maRGBColorA; } + const basegfx::BColor& getRGBColorB() const { return maRGBColorB; } + double getDiscreteDashLength() const { return mfDiscreteDashLength; } + + // compare operator + virtual bool operator==( const BasePrimitive2D& rPrimitive ) const; + + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYTOOLS_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/overlay/overlaytriangle.hxx b/include/svx/sdr/overlay/overlaytriangle.hxx new file mode 100644 index 000000000000..b17e6be8a8c6 --- /dev/null +++ b/include/svx/sdr/overlay/overlaytriangle.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SDR_OVERLAY_OVERLAYTRIANGLE_HXX +#define _SDR_OVERLAY_OVERLAYTRIANGLE_HXX + +#include <svx/sdr/overlay/overlayobject.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace overlay + { + class OverlayTriangle : public OverlayObjectWithBasePosition + { + protected: + // second and third position in pixel + basegfx::B2DPoint maSecondPosition; + basegfx::B2DPoint maThirdPosition; + + // geometry creation for OverlayObject + virtual drawinglayer::primitive2d::Primitive2DSequence createOverlayObjectPrimitive2DSequence(); + + public: + OverlayTriangle( + const basegfx::B2DPoint& rBasePos, + const basegfx::B2DPoint& rSecondPos, + const basegfx::B2DPoint& rThirdPos, + Color aTriangleColor); + virtual ~OverlayTriangle(); + + // change second position + const basegfx::B2DPoint& getSecondPosition() const { return maSecondPosition; } + + // change third position + const basegfx::B2DPoint& getThirdPosition() const { return maThirdPosition; } + }; + } // end of namespace overlay +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OVERLAY_OVERLAYTRIANGLE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/primitiveFactory2d.hxx b/include/svx/sdr/primitive2d/primitiveFactory2d.hxx new file mode 100644 index 000000000000..d602d28d4f5c --- /dev/null +++ b/include/svx/sdr/primitive2d/primitiveFactory2d.hxx @@ -0,0 +1,76 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_PRIMITIVEFACTORY2D_HXX +#define INCLUDED_SDR_PRIMITIVE2D_PRIMITIVEFACTORY2D_HXX + +#include <com/sun/star/graphic/XPrimitiveFactory2D.hpp> +#include <cppuhelper/compbase1.hxx> +#include <comphelper/broadcasthelper.hxx> + +#include <svx/svxdllapi.h> + +////////////////////////////////////////////////////////////////////////////// +// UNO API helper methods + +namespace drawinglayer +{ + namespace primitive2d + { + SVX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL XPrimitiveFactory2DProvider_createInstance(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & rSMgr) throw( ::com::sun::star::uno::Exception ); + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// +// PrimitiveFactory2D class + +namespace drawinglayer +{ + namespace primitive2d + { + // typedef for PrimitiveFactory2DImplBase + typedef cppu::WeakComponentImplHelper1< ::com::sun::star::graphic::XPrimitiveFactory2D > PrimitiveFactory2DImplBase; + + // base class for C++ implementation of com::sun::star::graphic::XPrimitiveFactory2D + class PrimitiveFactory2D + : protected comphelper::OBaseMutex, + public PrimitiveFactory2DImplBase + { + private: + protected: + public: + // constructor + PrimitiveFactory2D(); + + // Methods from XPrimitiveFactory2D + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XPrimitive2D > > SAL_CALL createPrimitivesFromXShape( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aParms ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XPrimitive2D > > SAL_CALL createPrimitivesFromXDrawPage( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& xDrawPage, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aParms ) throw (::com::sun::star::uno::RuntimeException); + + // UNO API helpers + SVX_DLLPUBLIC static OUString getImplementationName_Static(); + SVX_DLLPUBLIC static com::sun::star::uno::Sequence< OUString > getSupportedServiceNames_Static(); + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_PRIMITIVEFACTORY2D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrattributecreator.hxx b/include/svx/sdr/primitive2d/sdrattributecreator.hxx new file mode 100644 index 000000000000..e3e940993790 --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrattributecreator.hxx @@ -0,0 +1,133 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_SDRATTRIBUTECREATOR_HXX +#define INCLUDED_SDR_PRIMITIVE2D_SDRATTRIBUTECREATOR_HXX + +#include <sal/types.h> + +////////////////////////////////////////////////////////////////////////////// +// predefines +class SfxItemSet; +class SdrText; + +namespace drawinglayer { namespace attribute { + class SdrLineAttribute; + class SdrLineStartEndAttribute; + class SdrShadowAttribute; + class SdrFillAttribute; + class SdrTextAttribute; + class FillGradientAttribute; + class SdrFillBitmapAttribute; + class SdrShadowTextAttribute; + class SdrLineShadowTextAttribute; + class SdrLineFillShadowTextAttribute; + class SdrLineFillShadowAttribute3D; + class SdrSceneAttribute; + class SdrLightingAttribute; + class SdrFillTextAttribute; +}} + +namespace basegfx { + class B2DRange; +} + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + // SdrAttribute creators + attribute::SdrLineAttribute createNewSdrLineAttribute( + const SfxItemSet& rSet); + + attribute::SdrLineStartEndAttribute createNewSdrLineStartEndAttribute( + const SfxItemSet& rSet, + double fWidth); + + attribute::SdrShadowAttribute createNewSdrShadowAttribute( + const SfxItemSet& rSet); + + attribute::SdrFillAttribute createNewSdrFillAttribute( + const SfxItemSet& rSet); + + // #i101508# Support handing over given text-to-border distances + attribute::SdrTextAttribute createNewSdrTextAttribute( + const SfxItemSet& rSet, + const SdrText& rText, + const sal_Int32* pLeft = 0, + const sal_Int32* pUpper = 0, + const sal_Int32* pRight = 0, + const sal_Int32* pLower = 0); + + attribute::FillGradientAttribute createNewTransparenceGradientAttribute( + const SfxItemSet& rSet); + + attribute::SdrFillBitmapAttribute createNewSdrFillBitmapAttribute( + const SfxItemSet& rSet); + + attribute::SdrShadowTextAttribute createNewSdrShadowTextAttribute( + const SfxItemSet& rSet, + const SdrText* pText, + bool bSuppressText); // #i98072# added option to suppress text on demand + + attribute::SdrLineShadowTextAttribute createNewSdrLineShadowTextAttribute( + const SfxItemSet& rSet, + const SdrText* pText); + + attribute::SdrLineFillShadowTextAttribute createNewSdrLineFillShadowTextAttribute( + const SfxItemSet& rSet, + const SdrText* pText, + bool bHasContent); // used from OLE and graphic + + attribute::SdrLineFillShadowAttribute3D createNewSdrLineFillShadowAttribute( + const SfxItemSet& rSet, + bool bSuppressFill); + + attribute::SdrSceneAttribute createNewSdrSceneAttribute( + const SfxItemSet& rSet); + + attribute::SdrLightingAttribute createNewSdrLightingAttribute( + const SfxItemSet& rSet); + + // #i101508# Support handing over given text-to-border distances + attribute::SdrFillTextAttribute createNewSdrFillTextAttribute( + const SfxItemSet& rSet, + const SdrText* pSdrText, + const sal_Int32* pLeft = 0, + const sal_Int32* pUpper = 0, + const sal_Int32* pRight = 0, + const sal_Int32* pLower = 0); + + // helpers + void calculateRelativeCornerRadius( + sal_Int32 nRadius, + const ::basegfx::B2DRange& rObjectRange, + double& rfCornerRadiusX, + double& rfCornerRadiusY); + + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_SDRATTRIBUTECREATOR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrcaptionprimitive2d.hxx b/include/svx/sdr/primitive2d/sdrcaptionprimitive2d.hxx new file mode 100644 index 000000000000..472c08861412 --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrcaptionprimitive2d.hxx @@ -0,0 +1,79 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_SDRCAPTIONPRIMITIVE2D_HXX +#define INCLUDED_SDR_PRIMITIVE2D_SDRCAPTIONPRIMITIVE2D_HXX + +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> +#include <svx/sdr/attribute/sdrlinefillshadowtextattribute.hxx> +#include <basegfx/polygon/b2dpolygon.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrCaptionPrimitive2D : public BufferedDecompositionPrimitive2D + { + private: + ::basegfx::B2DHomMatrix maTransform; + attribute::SdrLineFillShadowTextAttribute maSdrLFSTAttribute; + ::basegfx::B2DPolygon maTail; + double mfCornerRadiusX; // [0.0..1.0] relative to 1/2 width + double mfCornerRadiusY; // [0.0..1.0] relative to 1/2 height + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrCaptionPrimitive2D( + const ::basegfx::B2DHomMatrix& rTransform, + const attribute::SdrLineFillShadowTextAttribute& rSdrLFSTAttribute, + const ::basegfx::B2DPolygon& rTail, + double fCornerRadiusX = 0.0, + double fCornerRadiusY = 0.0); + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // data access + const ::basegfx::B2DHomMatrix& getTransform() const { return maTransform; } + const attribute::SdrLineFillShadowTextAttribute& getSdrLFSTAttribute() const { return maSdrLFSTAttribute; } + const ::basegfx::B2DPolygon& getTail() const { return maTail; } + double getCornerRadiusX() const { return mfCornerRadiusX; } + double getCornerRadiusY() const { return mfCornerRadiusY; } + bool isCornerRadiusUsed() const { return (0.0 != mfCornerRadiusX || 0.0 != mfCornerRadiusY); } + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_SDRCAPTIONPRIMITIVE2D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrconnectorprimitive2d.hxx b/include/svx/sdr/primitive2d/sdrconnectorprimitive2d.hxx new file mode 100644 index 000000000000..882c2895e0b8 --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrconnectorprimitive2d.hxx @@ -0,0 +1,68 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_SDRCONNECTORPRIMITIVE2D_HXX +#define INCLUDED_SDR_PRIMITIVE2D_SDRCONNECTORPRIMITIVE2D_HXX + +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <svx/sdr/attribute/sdrlineshadowtextattribute.hxx> +#include <basegfx/polygon/b2dpolygon.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrConnectorPrimitive2D : public BufferedDecompositionPrimitive2D + { + private: + attribute::SdrLineShadowTextAttribute maSdrLSTAttribute; + ::basegfx::B2DPolygon maUnitPolygon; + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrConnectorPrimitive2D( + const attribute::SdrLineShadowTextAttribute& rSdrLSTAttribute, + const ::basegfx::B2DPolygon& rUnitPolygon); + + // data access + const attribute::SdrLineShadowTextAttribute& getSdrLSTAttribute() const { return maSdrLSTAttribute; } + const ::basegfx::B2DPolygon& getUnitPolygon() const { return maUnitPolygon; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_SDRCONNECTORPRIMITIVE2D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx b/include/svx/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx new file mode 100644 index 000000000000..a43bd2df72bd --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrcustomshapeprimitive2d.hxx @@ -0,0 +1,89 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_SDCUSTOMSHAPEPRIMITIVE2D_HXX +#define INCLUDED_SDR_PRIMITIVE2D_SDCUSTOMSHAPEPRIMITIVE2D_HXX + +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> +#include <svx/sdr/attribute/sdrshadowtextattribute.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrCustomShapePrimitive2D : public BufferedDecompositionPrimitive2D + { + private: + attribute::SdrShadowTextAttribute maSdrSTAttribute; + Primitive2DSequence maSubPrimitives; + basegfx::B2DHomMatrix maTextBox; + + // bitfield + // defines if SdrTextWordWrapItem was set at SdrObjCustomShape which means + // that the text needs to be block formatted + unsigned mbWordWrap : 1; + + // defines that the object contains/is a 3D AutoShape. Needed for + // making exceptions with shadow generation + unsigned mb3DShape : 1; + + // #SJ# Allow text clipping against TextBox in special cases (used for SC) + unsigned mbForceTextClipToTextRange : 1; + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrCustomShapePrimitive2D( + const attribute::SdrShadowTextAttribute& rSdrSTAttribute, + const Primitive2DSequence& rSubPrimitives, + const basegfx::B2DHomMatrix& rTextBox, + bool bWordWrap, + bool b3DShape, + bool bForceTextClipToTextRange); + + // data access + const attribute::SdrShadowTextAttribute& getSdrSTAttribute() const { return maSdrSTAttribute; } + const Primitive2DSequence& getSubPrimitives() const { return maSubPrimitives; } + const basegfx::B2DHomMatrix& getTextBox() const { return maTextBox; } + bool getWordWrap() const { return mbWordWrap; } + bool get3DShape() const { return mb3DShape; } + bool isForceTextClipToTextRange() const { return mbForceTextClipToTextRange; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_SDCUSTOMSHAPEPRIMITIVE2D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx b/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx new file mode 100644 index 000000000000..cac426980dee --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrdecompositiontools.hxx @@ -0,0 +1,80 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_SDRDECOMPOSITIONTOOLS_HXX +#define INCLUDED_SDR_PRIMITIVE2D_SDRDECOMPOSITIONTOOLS_HXX + +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines +namespace basegfx { + class B2DPolygon; + class B2DPolyPolygon; + class B2DHomMatrix; +} + +namespace drawinglayer { namespace attribute { + class SdrFillAttribute; + class SdrLineAttribute; + class FillGradientAttribute; + class SdrShadowAttribute; + class SdrLineStartEndAttribute; + class SdrTextAttribute; +}} + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + Primitive2DReference createPolyPolygonFillPrimitive( + const basegfx::B2DPolyPolygon& rUnitPolyPolygon, + const basegfx::B2DHomMatrix& rObjectTransform, + const attribute::SdrFillAttribute& rFill, + const attribute::FillGradientAttribute& rFillGradient); + + Primitive2DReference createPolygonLinePrimitive( + const basegfx::B2DPolygon& rUnitPolygon, + const basegfx::B2DHomMatrix& rObjectTransform, + const attribute::SdrLineAttribute& rLine, + const attribute::SdrLineStartEndAttribute& rStroke); + + Primitive2DReference createTextPrimitive( + const basegfx::B2DPolyPolygon& rUnitPolyPolygon, + const basegfx::B2DHomMatrix& rObjectTransform, + const attribute::SdrTextAttribute& rText, + const attribute::SdrLineAttribute& rStroke, + bool bCellText, + bool bWordWrap, + bool bClipOnBounds); + + Primitive2DSequence createEmbeddedShadowPrimitive( + const Primitive2DSequence& rContent, + const attribute::SdrShadowAttribute& rShadow); + + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_SDRDECOMPOSITIONTOOLS_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrellipseprimitive2d.hxx b/include/svx/sdr/primitive2d/sdrellipseprimitive2d.hxx new file mode 100644 index 000000000000..338fc52567c3 --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrellipseprimitive2d.hxx @@ -0,0 +1,112 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_SDRELLIPSEPRIMITIVE2D_HXX +#define INCLUDED_SDR_PRIMITIVE2D_SDRELLIPSEPRIMITIVE2D_HXX + +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> +#include <svx/sdr/attribute/sdrlinefillshadowtextattribute.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrEllipsePrimitive2D : public BufferedDecompositionPrimitive2D + { + private: + ::basegfx::B2DHomMatrix maTransform; + attribute::SdrLineFillShadowTextAttribute maSdrLFSTAttribute; + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrEllipsePrimitive2D( + const ::basegfx::B2DHomMatrix& rTransform, + const attribute::SdrLineFillShadowTextAttribute& rSdrLFSTAttribute); + + // data access + const ::basegfx::B2DHomMatrix& getTransform() const { return maTransform; } + const attribute::SdrLineFillShadowTextAttribute& getSdrLFSTAttribute() const { return maSdrLFSTAttribute; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrEllipseSegmentPrimitive2D : public SdrEllipsePrimitive2D + { + private: + double mfStartAngle; + double mfEndAngle; + + // bitfield + unsigned mbCloseSegment : 1; + unsigned mbCloseUsingCenter : 1; + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrEllipseSegmentPrimitive2D( + const ::basegfx::B2DHomMatrix& rTransform, + const attribute::SdrLineFillShadowTextAttribute& rSdrLFSTAttribute, + double fStartAngle, + double fEndAngle, + bool bCloseSegment, + bool bCloseUsingCenter); + + // data access + double getStartAngle() const { return mfStartAngle; } + double getEndAngle() const { return mfEndAngle; } + bool getCloseSegment() const { return mbCloseSegment; } + bool getCloseUsingCenter() const { return mbCloseUsingCenter; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_SDRELLIPSEPRIMITIVE2D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrgrafprimitive2d.hxx b/include/svx/sdr/primitive2d/sdrgrafprimitive2d.hxx new file mode 100644 index 000000000000..dfb098e9c010 --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrgrafprimitive2d.hxx @@ -0,0 +1,76 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_SDRGRAFPRIMITIVE2D_HXX +#define INCLUDED_SDR_PRIMITIVE2D_SDRGRAFPRIMITIVE2D_HXX + +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> +#include <svtools/grfmgr.hxx> +#include <svx/sdr/attribute/sdrlinefillshadowtextattribute.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrGrafPrimitive2D : public BufferedDecompositionPrimitive2D + { + private: + ::basegfx::B2DHomMatrix maTransform; + attribute::SdrLineFillShadowTextAttribute maSdrLFSTAttribute; + GraphicObject maGraphicObject; + GraphicAttr maGraphicAttr; + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrGrafPrimitive2D( + const ::basegfx::B2DHomMatrix& rTransform, + const attribute::SdrLineFillShadowTextAttribute& rSdrLFSTAttribute, + const GraphicObject& rGraphicObject, + const GraphicAttr& rGraphicAttr); + + // data access + const ::basegfx::B2DHomMatrix& getTransform() const { return maTransform; } + const attribute::SdrLineFillShadowTextAttribute& getSdrLFSTAttribute() const { return maSdrLFSTAttribute; } + const GraphicObject& getGraphicObject() const { return maGraphicObject; } + const GraphicAttr& getGraphicAttr() const { return maGraphicAttr; } + bool isTransparent() const; + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_SDRGRAFPRIMITIVE2D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrmeasureprimitive2d.hxx b/include/svx/sdr/primitive2d/sdrmeasureprimitive2d.hxx new file mode 100644 index 000000000000..592f14afe742 --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrmeasureprimitive2d.hxx @@ -0,0 +1,125 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_SDRMEASUREPRIMITIVE2D_HXX +#define INCLUDED_SDR_PRIMITIVE2D_SDRMEASUREPRIMITIVE2D_HXX + +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <svx/sdr/attribute/sdrlineshadowtextattribute.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +namespace drawinglayer { namespace primitive2d { + enum MeasureTextPosition + { + MEASURETEXTPOSITION_AUTOMATIC, + MEASURETEXTPOSITION_NEGATIVE, + MEASURETEXTPOSITION_CENTERED, + MEASURETEXTPOSITION_POSITIVE + }; +}} + +namespace drawinglayer { namespace attribute { + class SdrLineAttribute; +}} + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrMeasurePrimitive2D : public BufferedDecompositionPrimitive2D + { + private: + attribute::SdrLineShadowTextAttribute maSdrLSTAttribute; + basegfx::B2DPoint maStart; + basegfx::B2DPoint maEnd; + MeasureTextPosition meHorizontal; + MeasureTextPosition meVertical; + double mfDistance; + double mfUpper; + double mfLower; + double mfLeftDelta; + double mfRightDelta; + + // bitfield + unsigned mbBelow : 1; + unsigned mbTextRotation : 1; + unsigned mbTextAutoAngle : 1; + + // internal decomposition helper + Primitive2DReference impCreatePart( + const attribute::SdrLineAttribute& rLineAttribute, + const basegfx::B2DHomMatrix& rObjectMatrix, + const basegfx::B2DPoint& rStart, + const basegfx::B2DPoint& rEnd, + bool bLeftActive, + bool bRightActive) const; + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrMeasurePrimitive2D( + const attribute::SdrLineShadowTextAttribute& rSdrLSTAttribute, + const basegfx::B2DPoint& rStart, + const basegfx::B2DPoint& rEnd, + MeasureTextPosition eHorizontal, + MeasureTextPosition eVertical, + double fDistance, + double fUpper, + double fLower, + double fLeftDelta, + double fRightDelta, + bool bBelow, + bool bTextRotation, + bool bTextAutoAngle); + + // data access + const attribute::SdrLineShadowTextAttribute& getSdrLSTAttribute() const { return maSdrLSTAttribute; } + const basegfx::B2DPoint& getStart() const { return maStart; } + const basegfx::B2DPoint& getEnd() const { return maEnd; } + MeasureTextPosition getHorizontal() const { return meHorizontal; } + MeasureTextPosition getVertical() const { return meVertical; } + double getDistance() const { return mfDistance; } + double getUpper() const { return mfUpper; } + double getLower() const { return mfLower; } + double getLeftDelta() const { return mfLeftDelta; } + double getRightDelta() const { return mfRightDelta; } + bool getBelow() const { return mbBelow; } + bool getTextRotation() const { return mbTextRotation; } + bool getTextAutoAngle() const { return mbTextAutoAngle; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_SDRMEASUREPRIMITIVE2D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrole2primitive2d.hxx b/include/svx/sdr/primitive2d/sdrole2primitive2d.hxx new file mode 100644 index 000000000000..0ab554706493 --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrole2primitive2d.hxx @@ -0,0 +1,70 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_SDROLE2PRIMITIVE2D_HXX +#define INCLUDED_SDR_PRIMITIVE2D_SDROLE2PRIMITIVE2D_HXX + +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> +#include <svx/sdr/attribute/sdrlinefillshadowtextattribute.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrOle2Primitive2D : public BasePrimitive2D + { + private: + Primitive2DSequence maOLEContent; + basegfx::B2DHomMatrix maTransform; + attribute::SdrLineFillShadowTextAttribute maSdrLFSTAttribute; + + public: + SdrOle2Primitive2D( + const Primitive2DSequence& rOLEContent, + const basegfx::B2DHomMatrix& rTransform, + const attribute::SdrLineFillShadowTextAttribute& rSdrLFSTAttribute); + + // data access + const Primitive2DSequence& getOLEContent() const { return maOLEContent; } + const basegfx::B2DHomMatrix& getTransform() const { return maTransform; } + const attribute::SdrLineFillShadowTextAttribute& getSdrLFSTAttribute() const { return maSdrLFSTAttribute; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // local decomposition. + virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_SDROLE2PRIMITIVE2D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrolecontentprimitive2d.hxx b/include/svx/sdr/primitive2d/sdrolecontentprimitive2d.hxx new file mode 100644 index 000000000000..2dfe0243717a --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrolecontentprimitive2d.hxx @@ -0,0 +1,80 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_SdrOleContentPrimitive2D_HXX +#define INCLUDED_SDR_PRIMITIVE2D_SDROLECONTENTPRIMITIVE2D_HXX + +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> +#include <svx/svdobj.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefinitions + +class SdrOle2Obj; + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrOleContentPrimitive2D : public BufferedDecompositionPrimitive2D + { + private: + SdrObjectWeakRef mpSdrOle2Obj; + basegfx::B2DHomMatrix maObjectTransform; + + // #i104867# The GraphicVersion number to identify in operator== if + // the graphic has changed, but without fetching it (which may + // be expensive, e.g. triggering chart creation) + sal_uInt32 mnGraphicVersion; + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrOleContentPrimitive2D( + const SdrOle2Obj& rSdrOle2Obj, + const basegfx::B2DHomMatrix& rObjectTransform, + sal_uInt32 nGraphicVersion + ); + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // The default implementation will use getDecomposition results to create the range + virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const; + + // data access + const basegfx::B2DHomMatrix& getObjectTransform() const { return maObjectTransform; } + sal_uInt32 getGraphicVersion() const { return mnGraphicVersion; } + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_SDROLECONTENTPRIMITIVE2D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrpathprimitive2d.hxx b/include/svx/sdr/primitive2d/sdrpathprimitive2d.hxx new file mode 100644 index 000000000000..a4047bbe3d78 --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrpathprimitive2d.hxx @@ -0,0 +1,72 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_SDRPATHPRIMITIVE2D_HXX +#define INCLUDED_SDR_PRIMITIVE2D_SDRPATHPRIMITIVE2D_HXX + +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> +#include <svx/sdr/attribute/sdrlinefillshadowtextattribute.hxx> +#include <basegfx/polygon/b2dpolypolygon.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrPathPrimitive2D : public BufferedDecompositionPrimitive2D + { + private: + basegfx::B2DHomMatrix maTransform; + attribute::SdrLineFillShadowTextAttribute maSdrLFSTAttribute; + basegfx::B2DPolyPolygon maUnitPolyPolygon; + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrPathPrimitive2D( + const basegfx::B2DHomMatrix& rTransform, + const attribute::SdrLineFillShadowTextAttribute& rSdrLFSTAttribute, + const basegfx::B2DPolyPolygon& rUnitPolyPolygon); + + // data access + const basegfx::B2DHomMatrix& getTransform() const { return maTransform; } + const attribute::SdrLineFillShadowTextAttribute& getSdrLFSTAttribute() const { return maSdrLFSTAttribute; } + const basegfx::B2DPolyPolygon& getUnitPolyPolygon() const { return maUnitPolyPolygon; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_SDRPATHPRIMITIVE2D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrprimitivetools.hxx b/include/svx/sdr/primitive2d/sdrprimitivetools.hxx new file mode 100644 index 000000000000..885b9c945da5 --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrprimitivetools.hxx @@ -0,0 +1,49 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_PRIMITIVETOOLS_HXX +#define INCLUDED_SDR_PRIMITIVE2D_PRIMITIVETOOLS_HXX + +#include <vcl/bitmapex.hxx> +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +namespace basegfx { + class BColor; +} + +////////////////////////////////////////////////////////////////////////////// +// helper methods + +namespace drawinglayer +{ + namespace primitive2d + { + // create a 3x3 cross in given color as BitmapEx + BitmapEx createDefaultCross_3x3(const basegfx::BColor& rBColor); + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_PRIMITIVETOOLS_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrrectangleprimitive2d.hxx b/include/svx/sdr/primitive2d/sdrrectangleprimitive2d.hxx new file mode 100644 index 000000000000..4c685497b1bc --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrrectangleprimitive2d.hxx @@ -0,0 +1,81 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_SDRRECTANGLEPRIMITIVE2D_HXX +#define INCLUDED_SDR_PRIMITIVE2D_SDRRECTANGLEPRIMITIVE2D_HXX + +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> +#include <svx/sdr/attribute/sdrlinefillshadowtextattribute.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrRectanglePrimitive2D : public BufferedDecompositionPrimitive2D + { + private: + basegfx::B2DHomMatrix maTransform; + attribute::SdrLineFillShadowTextAttribute maSdrLFSTAttribute; + double mfCornerRadiusX; // [0.0..1.0] relative to 1/2 width + double mfCornerRadiusY; // [0.0..1.0] relative to 1/2 height + + // bitfield + // flag which decides if the HitArea should be the filled geometry + bool mbForceFillForHitTest : 1; + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrRectanglePrimitive2D( + const basegfx::B2DHomMatrix& rTransform, + const attribute::SdrLineFillShadowTextAttribute& rSdrLFSTAttribute, + double fCornerRadiusX, + double fCornerRadiusY, + bool bForceFillForHitTest); + + // data access + const basegfx::B2DHomMatrix& getTransform() const { return maTransform; } + const attribute::SdrLineFillShadowTextAttribute& getSdrLFSTAttribute() const { return maSdrLFSTAttribute; } + double getCornerRadiusX() const { return mfCornerRadiusX; } + double getCornerRadiusY() const { return mfCornerRadiusY; } + bool isCornerRadiusUsed() const { return (0.0 != mfCornerRadiusX || 0.0 != mfCornerRadiusY); } + bool getForceFillForHitTest() const { return mbForceFillForHitTest; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_SDRRECTANGLEPRIMITIVE2D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/sdrtextprimitive2d.hxx b/include/svx/sdr/primitive2d/sdrtextprimitive2d.hxx new file mode 100644 index 000000000000..37264692f2d8 --- /dev/null +++ b/include/svx/sdr/primitive2d/sdrtextprimitive2d.hxx @@ -0,0 +1,338 @@ +/* -*- 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 INCLUDED_SDR_PRIMITIVE2D_SDRTEXTPRIMITIVE2D_HXX +#define INCLUDED_SDR_PRIMITIVE2D_SDRTEXTPRIMITIVE2D_HXX + +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <basegfx/polygon/b2dpolypolygon.hxx> +#include <basegfx/matrix/b2dhommatrix.hxx> +#include <com/sun/star/drawing/XDrawPage.hpp> +#include <editeng/outlobj.hxx> +#include <tools/color.hxx> +#include <svx/sdr/attribute/sdrformtextattribute.hxx> +#include <tools/weakbase.hxx> +#include <svx/sdtaitm.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predefines +class SdrText; + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrTextPrimitive2D : public BufferedDecompositionPrimitive2D + { + private: + // The text model data; this sould later just be the OutlinerParaObject or + // something equal + ::tools::WeakReference< SdrText > mrSdrText; + + // #i97628# + // The text content; now as local OutlinerParaObject copy (internally RefCounted and + // COW) and in exclusive, local form as needed in a primitive + const OutlinerParaObject maOutlinerParaObject; + + // remember last VisualizingPage for which a decomposition was made. If the new target + // is not given or different, the decomposition needs to be potentially removed + // for supporting e.g. page number change on MasterPage objects or the different + // field renderings in SubGeometry and MasterPage mnode + com::sun::star::uno::Reference< com::sun::star::drawing::XDrawPage > mxLastVisualizingPage; + + // remember last PageNumber for which a decomposition was made. This is only used + // when mbContainsPageField is true, else it is 0 + sal_Int16 mnLastPageNumber; + + // remember last PageCount for which a decomposition was made. This is only used + // when mbContainsPageCountField is true, else it is 0 + sal_Int16 mnLastPageCount; + + // #i101443# remember last TextBackgroundColor to decide if a new decomposition is + // needed because of background color change + Color maLastTextBackgroundColor; + + // bitfield + // is there a PageNumber, Header, Footer or DateTimeField used? Evaluated at construction + unsigned mbContainsPageField : 1; + unsigned mbContainsPageCountField : 1; + unsigned mbContainsOtherFields : 1; + + protected: + // support for XTEXT_PAINTSHAPE_BEGIN/XTEXT_PAINTSHAPE_END Metafile comments + Primitive2DSequence encapsulateWithTextHierarchyBlockPrimitive2D(const Primitive2DSequence& rCandidate) const; + + public: + SdrTextPrimitive2D( + const SdrText* pSdrText, + const OutlinerParaObject& rOutlinerParaObjectPtr); + + // get data + const SdrText* getSdrText() const { return mrSdrText.get(); } + const OutlinerParaObject& getOutlinerParaObject() const { return maOutlinerParaObject; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // own get2DDecomposition to take aspect of decomposition with or without spell checker + // into account + virtual Primitive2DSequence get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const; + + // transformed clone operator + virtual SdrTextPrimitive2D* createTransformedClone(const basegfx::B2DHomMatrix& rTransform) const = 0; + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrContourTextPrimitive2D : public SdrTextPrimitive2D + { + private: + // unit contour polygon (scaled to [0.0 .. 1.0]) + basegfx::B2DPolyPolygon maUnitPolyPolygon; + + // complete contour polygon transform (scale, rotate, shear, translate) + basegfx::B2DHomMatrix maObjectTransform; + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrContourTextPrimitive2D( + const SdrText* pSdrText, + const OutlinerParaObject& rOutlinerParaObjectPtr, + const basegfx::B2DPolyPolygon& rUnitPolyPolygon, + const basegfx::B2DHomMatrix& rObjectTransform); + + // get data + const basegfx::B2DPolyPolygon& getUnitPolyPolygon() const { return maUnitPolyPolygon; } + const basegfx::B2DHomMatrix& getObjectTransform() const { return maObjectTransform; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // transformed clone operator + virtual SdrTextPrimitive2D* createTransformedClone(const basegfx::B2DHomMatrix& rTransform) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrPathTextPrimitive2D : public SdrTextPrimitive2D + { + private: + // the path to use. Each paragraph will use one Polygon. + basegfx::B2DPolyPolygon maPathPolyPolygon; + + // the Fontwork parameters + attribute::SdrFormTextAttribute maSdrFormTextAttribute; + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrPathTextPrimitive2D( + const SdrText* pSdrText, + const OutlinerParaObject& rOutlinerParaObjectPtr, + const basegfx::B2DPolyPolygon& rPathPolyPolygon, + const attribute::SdrFormTextAttribute& rSdrFormTextAttribute); + + // get data + const basegfx::B2DPolyPolygon& getPathPolyPolygon() const { return maPathPolyPolygon; } + const attribute::SdrFormTextAttribute& getSdrFormTextAttribute() const { return maSdrFormTextAttribute; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // transformed clone operator + virtual SdrTextPrimitive2D* createTransformedClone(const basegfx::B2DHomMatrix& rTransform) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrBlockTextPrimitive2D : public SdrTextPrimitive2D + { + private: + // text range transformation from unit range ([0.0 .. 1.0]) to text range + basegfx::B2DHomMatrix maTextRangeTransform; + + // text alignments + SdrTextHorzAdjust maSdrTextHorzAdjust; + SdrTextVertAdjust maSdrTextVertAdjust; + + // bitfield + unsigned mbFixedCellHeight : 1; + unsigned mbUnlimitedPage : 1; // force layout with no text break + unsigned mbCellText : 1; // this is a cell text as block text + unsigned mbWordWrap : 1; // for CustomShapes text layout + unsigned mbClipOnBounds : 1; // for CustomShapes text layout + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrBlockTextPrimitive2D( + const SdrText* pSdrText, + const OutlinerParaObject& rOutlinerParaObjectPtr, + const basegfx::B2DHomMatrix& rTextRangeTransform, + SdrTextHorzAdjust aSdrTextHorzAdjust, + SdrTextVertAdjust aSdrTextVertAdjust, + bool bFixedCellHeight, + bool bUnlimitedPage, + bool bCellText, + bool bWordWrap, + bool bClipOnBounds); + + // get data + const basegfx::B2DHomMatrix& getTextRangeTransform() const { return maTextRangeTransform; } + SdrTextHorzAdjust getSdrTextHorzAdjust() const { return maSdrTextHorzAdjust; } + SdrTextVertAdjust getSdrTextVertAdjust() const { return maSdrTextVertAdjust; } + bool isFixedCellHeight() const { return mbFixedCellHeight; } + bool getUnlimitedPage() const { return mbUnlimitedPage; } + bool getCellText() const { return mbCellText; } + bool getWordWrap() const { return mbWordWrap; } + bool getClipOnBounds() const { return mbClipOnBounds; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // transformed clone operator + virtual SdrTextPrimitive2D* createTransformedClone(const basegfx::B2DHomMatrix& rTransform) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrStretchTextPrimitive2D : public SdrTextPrimitive2D + { + private: + // text range transformation from unit range ([0.0 .. 1.0]) to text range + basegfx::B2DHomMatrix maTextRangeTransform; + + // bitfield + unsigned mbFixedCellHeight : 1; + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrStretchTextPrimitive2D( + const SdrText* pSdrText, + const OutlinerParaObject& rOutlinerParaObjectPtr, + const basegfx::B2DHomMatrix& rTextRangeTransform, + bool bFixedCellHeight); + + // get data + const basegfx::B2DHomMatrix& getTextRangeTransform() const { return maTextRangeTransform; } + bool isFixedCellHeight() const { return mbFixedCellHeight; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // transformed clone operator + virtual SdrTextPrimitive2D* createTransformedClone(const basegfx::B2DHomMatrix& rTransform) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + class SdrAutoFitTextPrimitive2D : public SdrTextPrimitive2D + { + private: + ::basegfx::B2DHomMatrix maTextRangeTransform; // text range transformation from unit range ([0.0 .. 1.0]) to text range + + // bitfield + unsigned mbWordWrap : 1; // for CustomShapes text layout + + protected: + // local decomposition. + virtual Primitive2DSequence create2DDecomposition(const geometry::ViewInformation2D& aViewInformation) const; + + public: + SdrAutoFitTextPrimitive2D( + const SdrText* pSdrText, + const OutlinerParaObject& rOutlinerParaObjectPtr, + const ::basegfx::B2DHomMatrix& rTextRangeTransform, + bool bWordWrap); + + // get data + const basegfx::B2DHomMatrix& getTextRangeTransform() const { return maTextRangeTransform; } + bool getWordWrap() const { return mbWordWrap; } + + // compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const; + + // transformed clone operator + virtual SdrTextPrimitive2D* createTransformedClone(const ::basegfx::B2DHomMatrix& rTransform) const; + + // provide unique ID + DeclPrimitrive2DIDBlock() + }; + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //INCLUDED_SDR_PRIMITIVE2D_SDRTEXTPRIMITIVE2D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive2d/svx_primitivetypes2d.hxx b/include/svx/sdr/primitive2d/svx_primitivetypes2d.hxx new file mode 100644 index 000000000000..6178695bf66d --- /dev/null +++ b/include/svx/sdr/primitive2d/svx_primitivetypes2d.hxx @@ -0,0 +1,56 @@ +/* -*- 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 INCLUDED_SVX_PRIMITIVE2D_PRIMITIVETYPES2D_HXX +#define INCLUDED_SVX_PRIMITIVE2D_PRIMITIVETYPES2D_HXX + +#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> + +////////////////////////////////////////////////////////////////////////////// + +#define PRIMITIVE2D_ID_SDRCAPTIONPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 0) +#define PRIMITIVE2D_ID_SDRCONNECTORPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 1) +#define PRIMITIVE2D_ID_SDRCUSTOMSHAPEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 2) +#define PRIMITIVE2D_ID_SDRELLIPSEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 3) +#define PRIMITIVE2D_ID_SDRELLIPSESEGMENTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 4) +#define PRIMITIVE2D_ID_SDRGRAFPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 5) +#define PRIMITIVE2D_ID_SDRMEASUREPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 6) +#define PRIMITIVE2D_ID_SDROLE2PRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 7) +#define PRIMITIVE2D_ID_SDRPATHPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 8) +#define PRIMITIVE2D_ID_SDRRECTANGLEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 9) +#define PRIMITIVE2D_ID_SDRCONTOURTEXTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 10) +#define PRIMITIVE2D_ID_SDRPATHTEXTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 11) +#define PRIMITIVE2D_ID_SDRBLOCKTEXTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 12) +#define PRIMITIVE2D_ID_SDRSTRETCHTEXTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 13) +#define PRIMITIVE2D_ID_SDRCELLPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 14) +#define PRIMITIVE2D_ID_SDRBORDERLINEPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 15) +#define PRIMITIVE2D_ID_OVERLAYBITMAPEXPRIMITIVE (PRIMITIVE2D_ID_RANGE_SVX| 16) +#define PRIMITIVE2D_ID_OVERLAYCROSSHAIRPRIMITIVE (PRIMITIVE2D_ID_RANGE_SVX| 17) +#define PRIMITIVE2D_ID_OVERLAYHATCHRECTANGLEPRIMITIVE (PRIMITIVE2D_ID_RANGE_SVX| 18) +#define PRIMITIVE2D_ID_OVERLAYHELPLINESTRIPEDPRIMITIVE (PRIMITIVE2D_ID_RANGE_SVX| 19) +#define PRIMITIVE2D_ID_OVERLAYROLLINGRECTANGLEPRIMITIVE (PRIMITIVE2D_ID_RANGE_SVX| 20) +#define PRIMITIVE2D_ID_SDRCONTROLPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 21) +#define PRIMITIVE2D_ID_SDROLECONTENTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 22) +#define PRIMITIVE2D_ID_SDRAUTOFITTEXTPRIMITIVE2D (PRIMITIVE2D_ID_RANGE_SVX| 23) + +////////////////////////////////////////////////////////////////////////////// + +#endif // INCLUDED_SVX_PRIMITIVE2D_PRIMITIVETYPES2D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/primitive3d/sdrattributecreator3d.hxx b/include/svx/sdr/primitive3d/sdrattributecreator3d.hxx new file mode 100644 index 000000000000..1d730c054651 --- /dev/null +++ b/include/svx/sdr/primitive3d/sdrattributecreator3d.hxx @@ -0,0 +1,55 @@ +/* -*- 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 _SDR_PRIMITIVE3D_SDRATTRIBUTECREATOR3D_HXX +#define _SDR_PRIMITIVE3D_SDRATTRIBUTECREATOR3D_HXX + +#include <sal/types.h> + +////////////////////////////////////////////////////////////////////////////// +// predefines +class SfxItemSet; + +namespace drawinglayer { namespace attribute { + class Sdr3DObjectAttribute; +}} + +namespace basegfx { + class B2DRange; +} + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + // SdrAttribute creators + attribute::Sdr3DObjectAttribute* createNewSdr3DObjectAttribute(const SfxItemSet& rSet); + + // helpers + + } // end of namespace primitive2d +} // end of namespace drawinglayer + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PRIMITIVE3D_SDRATTRIBUTECREATOR3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/attributeproperties.hxx b/include/svx/sdr/properties/attributeproperties.hxx new file mode 100644 index 000000000000..9f3e4d9f9ad3 --- /dev/null +++ b/include/svx/sdr/properties/attributeproperties.hxx @@ -0,0 +1,96 @@ +/* -*- 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 _SDR_PROPERTIES_ATTRIBUTEPROPERTIES_HXX +#define _SDR_PROPERTIES_ATTRIBUTEPROPERTIES_HXX + +#include <svl/lstner.hxx> +#include <svl/stylesheetuser.hxx> +#include <svx/sdr/properties/defaultproperties.hxx> +#include "svx/svxdllapi.h" + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class SVX_DLLPUBLIC AttributeProperties : public DefaultProperties, public SfxListener, public svl::StyleSheetUser + { + // add style sheet, do all the necessary handling + void ImpAddStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + + // remove StyleSheet, do all the necessary handling + void ImpRemoveStyleSheet(); + + protected: + // the SytleSheet of this object + SfxStyleSheet* mpStyleSheet; + + // create a new itemset + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& pPool); + + // Do the ItemChange, may do special handling + virtual void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = 0); + + // react on ItemSet changes + virtual void ItemSetChanged(const SfxItemSet& rSet); + + public: + // basic constructor + explicit AttributeProperties(SdrObject& rObj); + + // constructor for copying, but using new object + AttributeProperties(const AttributeProperties& rProps, SdrObject& rObj); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // destructor + virtual ~AttributeProperties(); + + // set a new StyleSheet and broadcast + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + + // get the installed StyleSheet + virtual SfxStyleSheet* GetStyleSheet() const; + + // Move properties to a new ItemPool. + virtual void MoveToItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel = 0L); + + // Set new model. + virtual void SetModel(SdrModel* pOldModel, SdrModel* pNewModel); + + // force all attributes which come from styles to hard attributes + // to be able to live without the style. + virtual void ForceStyleToHardAttributes(); + + // This is the Notify(...) from 2nd base class SfxListener + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + + virtual bool isUsedByModel() const; + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PROPERTIES_ATTRIBUTEPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/captionproperties.hxx b/include/svx/sdr/properties/captionproperties.hxx new file mode 100644 index 000000000000..484d3139817c --- /dev/null +++ b/include/svx/sdr/properties/captionproperties.hxx @@ -0,0 +1,67 @@ +/* -*- 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 _SDR_PROPERTIES_CAPTIONPROPERTIES_HXX +#define _SDR_PROPERTIES_CAPTIONPROPERTIES_HXX + +#include <svx/sdr/properties/rectangleproperties.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class CaptionProperties : public RectangleProperties + { + protected: + // create a new itemset + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& rPool); + + // react on ItemSet changes + virtual void ItemSetChanged(const SfxItemSet& rSet); + + public: + // basic constructor + explicit CaptionProperties(SdrObject& rObj); + + // constructor for copying, but using new object + CaptionProperties(const CaptionProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~CaptionProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // set a new StyleSheet and broadcast + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + + // force default attributes for a specific object type, called from + // DefaultProperties::GetObjectItemSet() if a new ItemSet is created + virtual void ForceDefaultAttributes(); + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_PROPERTIES_CAPTIONPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/circleproperties.hxx b/include/svx/sdr/properties/circleproperties.hxx new file mode 100644 index 000000000000..3a5ddb910d42 --- /dev/null +++ b/include/svx/sdr/properties/circleproperties.hxx @@ -0,0 +1,67 @@ +/* -*- 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 _SDR_PROPERTIES_CIRCLEPROPERTIES_HXX +#define _SDR_PROPERTIES_CIRCLEPROPERTIES_HXX + +#include <svx/sdr/properties/rectangleproperties.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class CircleProperties : public RectangleProperties + { + protected: + // create a new itemset + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& rPool); + + // react on ItemSet changes + virtual void ItemSetChanged(const SfxItemSet& rSet); + + public: + // basic constructor + explicit CircleProperties(SdrObject& rObj); + + // constructor for copying, but using new object + CircleProperties(const CircleProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~CircleProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // set a new StyleSheet and broadcast + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + + // force default attributes for a specific object type, called from + // DefaultProperties::GetObjectItemSet() if a new ItemSet is created + virtual void ForceDefaultAttributes(); + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PROPERTIES_CIRCLEPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/connectorproperties.hxx b/include/svx/sdr/properties/connectorproperties.hxx new file mode 100644 index 000000000000..ae70c1d8b3d6 --- /dev/null +++ b/include/svx/sdr/properties/connectorproperties.hxx @@ -0,0 +1,63 @@ +/* -*- 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 _SDR_PROPERTIES_CONNECTORPROPERTIES_HXX +#define _SDR_PROPERTIES_CONNECTORPROPERTIES_HXX + +#include <svx/sdr/properties/textproperties.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class ConnectorProperties : public TextProperties + { + protected: + // create a new itemset + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& rPool); + + // react on ItemSet changes + virtual void ItemSetChanged(const SfxItemSet& rSet); + + public: + // basic constructor + explicit ConnectorProperties(SdrObject& rObj); + + // constructor for copying, but using new object + ConnectorProperties(const ConnectorProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~ConnectorProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // set a new StyleSheet and broadcast + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PROPERTIES_CONNECTORPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/customshapeproperties.hxx b/include/svx/sdr/properties/customshapeproperties.hxx new file mode 100644 index 000000000000..ae1e7a70451f --- /dev/null +++ b/include/svx/sdr/properties/customshapeproperties.hxx @@ -0,0 +1,86 @@ +/* -*- 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 _SDR_PROPERTIES_CUSTOMSHAPEPROPERTIES_HXX +#define _SDR_PROPERTIES_CUSTOMSHAPEPROPERTIES_HXX + +#include <svx/sdr/properties/textproperties.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class CustomShapeProperties : public TextProperties + { + void UpdateTextFrameStatus(); + + protected: + // create a new itemset + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& rPool); + + // test changeability for a single item + virtual sal_Bool AllowItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = 0) const; + + // react on ItemSet changes + virtual void ItemSetChanged(const SfxItemSet& rSet); + + // react on Item change + virtual void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem); + + // clear single item + virtual void ClearObjectItem(const sal_uInt16 nWhich = 0); + + // clear single item direct, do not do any notifies or things like that. + // Also supports complete deleteion of items when default parameter 0 is used. + virtual void ClearObjectItemDirect(const sal_uInt16 nWhich = 0); + + public: + + // set a new StyleSheet and broadcast + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + + // force default attributes for a specific object type, called from + // DefaultProperties::GetObjectItemSet() if a new ItemSet is created + virtual void ForceDefaultAttributes(); + + // basic constructor + explicit CustomShapeProperties(SdrObject& rObj); + + // constructor for copying, but using new object + CustomShapeProperties(const CustomShapeProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~CustomShapeProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // This is the notifyer from SfxListener + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PROPERTIES_CUSTOMSHAPEPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/defaultproperties.hxx b/include/svx/sdr/properties/defaultproperties.hxx new file mode 100644 index 000000000000..5b8b9f4f1c0e --- /dev/null +++ b/include/svx/sdr/properties/defaultproperties.hxx @@ -0,0 +1,104 @@ +/* -*- 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 _SDR_PROPERTIES_DEFAULTPROPERTIES_HXX +#define _SDR_PROPERTIES_DEFAULTPROPERTIES_HXX + +#include <svx/sdr/properties/properties.hxx> +#include "svx/svxdllapi.h" + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class SVX_DLLPUBLIC DefaultProperties : public BaseProperties + { + protected: + // the to be used ItemSet + SfxItemSet* mpItemSet; + + // create a new itemset + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& rPool); + + // test changeability for a single item + virtual sal_Bool AllowItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = 0) const; + + // Do the ItemChange, may do special handling + virtual void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = 0); + + // Called after ItemChange() is done for all items. + virtual void PostItemChange(const sal_uInt16 nWhich); + + // react on ItemSet changes + virtual void ItemSetChanged(const SfxItemSet& rSet); + + public: + // basic constructor + explicit DefaultProperties(SdrObject& rObj); + + // constructor for copying, but using new object + DefaultProperties(const DefaultProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~DefaultProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // get itemset + virtual const SfxItemSet& GetObjectItemSet() const; + + // set single item + virtual void SetObjectItem(const SfxPoolItem& rItem); + + // set single item direct, do not do any notifies or things like that + virtual void SetObjectItemDirect(const SfxPoolItem& rItem); + + // clear single item + virtual void ClearObjectItem(const sal_uInt16 nWhich = 0); + + // clear single item direct, do not do any notifies or things like that. + // Also supports complete deleteion of items when default parameter 0 is used. + virtual void ClearObjectItemDirect(const sal_uInt16 nWhich = 0); + + // set complete item set + virtual void SetObjectItemSet(const SfxItemSet& rSet); + + // set a new StyleSheet and broadcast + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + + // get the installed StyleSheet + virtual SfxStyleSheet* GetStyleSheet() const; + + // force default attributes for a specific object type, called from + // DefaultProperties::GetObjectItemSet() if a new ItemSet is created. + // Default implementation does nothing. + virtual void ForceDefaultAttributes(); + + // Scale the included ItemSet. + virtual void Scale(const Fraction& rScale); + }; + } // end of namespace properties +} // end of namespace sdr + +#endif //_SDR_PROPERTIES_DEFAULTPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/e3dcompoundproperties.hxx b/include/svx/sdr/properties/e3dcompoundproperties.hxx new file mode 100644 index 000000000000..9175042084aa --- /dev/null +++ b/include/svx/sdr/properties/e3dcompoundproperties.hxx @@ -0,0 +1,71 @@ +/* -*- 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 _SDR_PROPERTIES_E3DCOMPOUNDPROPERTIES_HXX +#define _SDR_PROPERTIES_E3DCOMPOUNDPROPERTIES_HXX + +#include <svx/sdr/properties/e3dproperties.hxx> +#include "svx/svxdllapi.h" + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class SVX_DLLPUBLIC E3dCompoundProperties : public E3dProperties + { + protected: + // Called after ItemChange() is done for all items. + virtual void PostItemChange(const sal_uInt16 nWhich); + + public: + // basic constructor + explicit E3dCompoundProperties(SdrObject& rObj); + + // constructor for copying, but using new object + E3dCompoundProperties(const E3dCompoundProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~E3dCompoundProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // get itemset + virtual const SfxItemSet& GetObjectItemSet() const; + + // Get merged ItemSet. Normally, this maps directly to GetObjectItemSet(), but may + // be overloaded e.g for group objects to return a merged ItemSet of the object. + // When using this method the returned ItemSet may contain items in the state + // SFX_ITEM_DONTCARE which means there were several such items with different + // values. + virtual const SfxItemSet& GetMergedItemSet() const; + + // Set merged ItemSet. Normally, this maps to SetObjectItemSet(). + virtual void SetMergedItemSet(const SfxItemSet& rSet, sal_Bool bClearAllItems = sal_False); + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_PROPERTIES_E3DCOMPOUNDPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/e3dextrudeproperties.hxx b/include/svx/sdr/properties/e3dextrudeproperties.hxx new file mode 100644 index 000000000000..ad7aa529a36c --- /dev/null +++ b/include/svx/sdr/properties/e3dextrudeproperties.hxx @@ -0,0 +1,58 @@ +/* -*- 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 _SDR_PROPERTIES_E3DEXTRUDEPROPERTIES_HXX +#define _SDR_PROPERTIES_E3DEXTRUDEPROPERTIES_HXX + +#include <svx/sdr/properties/e3dcompoundproperties.hxx> +#include "svx/svxdllapi.h" + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class SVX_DLLPUBLIC E3dExtrudeProperties : public E3dCompoundProperties + { + protected: + // Called after ItemChange() is done for all items. + virtual void PostItemChange(const sal_uInt16 nWhich); + + public: + // basic constructor + explicit E3dExtrudeProperties(SdrObject& rObj); + + // constructor for copying, but using new object + E3dExtrudeProperties(const E3dExtrudeProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~E3dExtrudeProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_PROPERTIES_E3DEXTRUDEPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/e3dlatheproperties.hxx b/include/svx/sdr/properties/e3dlatheproperties.hxx new file mode 100644 index 000000000000..17855a6b0658 --- /dev/null +++ b/include/svx/sdr/properties/e3dlatheproperties.hxx @@ -0,0 +1,58 @@ +/* -*- 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 _SDR_PROPERTIES_E3DLATHEPROPERTIES_HXX +#define _SDR_PROPERTIES_E3DLATHEPROPERTIES_HXX + +#include <svx/sdr/properties/e3dcompoundproperties.hxx> +#include "svx/svxdllapi.h" + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class SVX_DLLPUBLIC E3dLatheProperties : public E3dCompoundProperties + { + protected: + // Called after ItemChange() is done for all items. + virtual void PostItemChange(const sal_uInt16 nWhich); + + public: + // basic constructor + explicit E3dLatheProperties(SdrObject& rObj); + + // constructor for copying, but using new object + E3dLatheProperties(const E3dLatheProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~E3dLatheProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_PROPERTIES_E3DLATHEPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/e3dproperties.hxx b/include/svx/sdr/properties/e3dproperties.hxx new file mode 100644 index 000000000000..4bebaab05c2a --- /dev/null +++ b/include/svx/sdr/properties/e3dproperties.hxx @@ -0,0 +1,64 @@ +/* -*- 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 _SDR_PROPERTIES_E3DPROPERTIES_HXX +#define _SDR_PROPERTIES_E3DPROPERTIES_HXX + +#include <svx/sdr/properties/attributeproperties.hxx> +#include "svx/svxdllapi.h" + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class SVX_DLLPUBLIC E3dProperties : public AttributeProperties + { + protected: + // create a new itemset + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& rPool); + + // react on ItemSet changes + virtual void ItemSetChanged(const SfxItemSet& rSet); + + public: + // basic constructor + explicit E3dProperties(SdrObject& rObj); + + // constructor for copying, but using new object + E3dProperties(const E3dProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~E3dProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // set a new StyleSheet and broadcast + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_PROPERTIES_E3DPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/e3dsceneproperties.hxx b/include/svx/sdr/properties/e3dsceneproperties.hxx new file mode 100644 index 000000000000..e52c483b14e6 --- /dev/null +++ b/include/svx/sdr/properties/e3dsceneproperties.hxx @@ -0,0 +1,88 @@ +/* -*- 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 _SDR_PROPERTIES_E3DSCENEPROPERTIES_HXX +#define _SDR_PROPERTIES_E3DSCENEPROPERTIES_HXX + +#include <svx/sdr/properties/e3dproperties.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class E3dSceneProperties : public E3dProperties + { + protected: + // Called after ItemChange() is done for all items. + virtual void PostItemChange(const sal_uInt16 nWhich); + + public: + // basic constructor + explicit E3dSceneProperties(SdrObject& rObj); + + // constructor for copying, but using new object + E3dSceneProperties(const E3dSceneProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~E3dSceneProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // get itemset + virtual const SfxItemSet& GetObjectItemSet() const; + + // get merged ItemSet. Normappl, this maps directly to GetObjectItemSet(), but may + // be overloaded e.g for group objects to return a merged ItemSet of the object. + // When using this method the returned ItemSet may contain items in the state + // SFX_ITEM_DONTCARE which means there were several such items with different + // values. + virtual const SfxItemSet& GetMergedItemSet() const; + + // Set merged ItemSet. Normally, this maps to SetObjectItemSet(). + virtual void SetMergedItemSet(const SfxItemSet& rSet, sal_Bool bClearAllItems = sal_False); + + // Set a single item, iterate over hierarchies if necessary. + virtual void SetMergedItem(const SfxPoolItem& rItem); + + // Clear a single item, iterate over hierarchies if necessary. + virtual void ClearMergedItem(const sal_uInt16 nWhich = 0); + + // set a new StyleSheet and broadcast + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + + // get the installed StyleSheet + virtual SfxStyleSheet* GetStyleSheet() const; + + // Move properties to a new ItemPool. Default implementation does nothing. + virtual void MoveToItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel = 0L); + + // Special for scene: + void SetSceneItemsFromCamera(); + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_PROPERTIES_E3DSCENEPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/e3dsphereproperties.hxx b/include/svx/sdr/properties/e3dsphereproperties.hxx new file mode 100644 index 000000000000..d99af2d38c85 --- /dev/null +++ b/include/svx/sdr/properties/e3dsphereproperties.hxx @@ -0,0 +1,57 @@ +/* -*- 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 _SDR_PROPERTIES_E3DSPHEREPROPERTIES_HXX +#define _SDR_PROPERTIES_E3DSPHEREPROPERTIES_HXX + +#include <svx/sdr/properties/e3dcompoundproperties.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class E3dSphereProperties : public E3dCompoundProperties + { + protected: + // Called after ItemChange() is done for all items. + virtual void PostItemChange(const sal_uInt16 nWhich); + + public: + // basic constructor + explicit E3dSphereProperties(SdrObject& rObj); + + // constructor for copying, but using new object + E3dSphereProperties(const E3dSphereProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~E3dSphereProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif // _SDR_PROPERTIES_E3DSPHEREPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/emptyproperties.hxx b/include/svx/sdr/properties/emptyproperties.hxx new file mode 100644 index 000000000000..102af739dcf6 --- /dev/null +++ b/include/svx/sdr/properties/emptyproperties.hxx @@ -0,0 +1,96 @@ +/* -*- 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 _SDR_PROPERTIES_EMPTYPROPERTIES_HXX +#define _SDR_PROPERTIES_EMPTYPROPERTIES_HXX + +#include <svx/sdr/properties/properties.hxx> +#include "svx/svxdllapi.h" + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class SVX_DLLPUBLIC EmptyProperties : public BaseProperties + { + protected: + // the to be used ItemSet + SfxItemSet* mpEmptyItemSet; + + // create a new itemset + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& rPool); + + // test changeability for a single item + virtual sal_Bool AllowItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = 0) const; + + // Do the ItemChange, may do special handling + virtual void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = 0); + + // Called after ItemChange() is done for all items. + virtual void PostItemChange(const sal_uInt16 nWhich); + + // react on ItemSet changes + virtual void ItemSetChanged(const SfxItemSet& rSet); + + public: + // basic constructor + explicit EmptyProperties(SdrObject& rObj); + + // constructor for copying, but using new object + EmptyProperties(const EmptyProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~EmptyProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // get itemset + virtual const SfxItemSet& GetObjectItemSet() const; + + // set single item + virtual void SetObjectItem(const SfxPoolItem& rItem); + + // set single item direct, do not do any notifies or things like that + virtual void SetObjectItemDirect(const SfxPoolItem& rItem); + + // clear single item + virtual void ClearObjectItem(const sal_uInt16 nWhich = 0); + + // clear single item direct, do not do any notifies or things like that. + // Also supports complete deleteion of items when default parameter 0 is used. + virtual void ClearObjectItemDirect(const sal_uInt16 nWhich = 0); + + // set complete item set + virtual void SetObjectItemSet(const SfxItemSet& rSet); + + // set a new StyleSheet and broadcast + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + + // get the installed StyleSheet + virtual SfxStyleSheet* GetStyleSheet() const; + }; + } // end of namespace properties +} // end of namespace sdr + +#endif //_SDR_PROPERTIES_EMPTYPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/graphicproperties.hxx b/include/svx/sdr/properties/graphicproperties.hxx new file mode 100644 index 000000000000..e2a3562440af --- /dev/null +++ b/include/svx/sdr/properties/graphicproperties.hxx @@ -0,0 +1,67 @@ +/* -*- 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 _SDR_PROPERTIES_GRAPHICPROPERTIES_HXX +#define _SDR_PROPERTIES_GRAPHICPROPERTIES_HXX + +#include <svx/sdr/properties/rectangleproperties.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class GraphicProperties : public RectangleProperties + { + protected: + // create a new itemset + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& rPool); + + // react on ItemSet changes + virtual void ItemSetChanged(const SfxItemSet& rSet); + + public: + // basic constructor + explicit GraphicProperties(SdrObject& rObj); + + // constructor for copying, but using new object + GraphicProperties(const GraphicProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~GraphicProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // set a new StyleSheet and broadcast + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + + // force default attributes for a specific object type, called from + // DefaultProperties::GetObjectItemSet() if a new ItemSet is created + virtual void ForceDefaultAttributes(); + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PROPERTIES_GRAPHICPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/groupproperties.hxx b/include/svx/sdr/properties/groupproperties.hxx new file mode 100644 index 000000000000..3de8abf71ea2 --- /dev/null +++ b/include/svx/sdr/properties/groupproperties.hxx @@ -0,0 +1,121 @@ +/* -*- 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 _SDR_PROPERTIES_GROUPPROPERTIES_HXX +#define _SDR_PROPERTIES_GROUPPROPERTIES_HXX + +#include <svx/sdr/properties/defaultproperties.hxx> + +///////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class GroupProperties : public DefaultProperties + { + protected: + // create a new itemset + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& rPool); + + // test changeability for a single item + virtual sal_Bool AllowItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = 0) const; + + // Do the ItemChange, may do special handling + virtual void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = 0); + + // Called after ItemChange() is done for all items. + virtual void PostItemChange(const sal_uInt16 nWhich); + + // react on ItemSet changes + virtual void ItemSetChanged(const SfxItemSet& rSet); + + public: + // basic constructor + explicit GroupProperties(SdrObject& rObj); + + // copy constructor + GroupProperties(const GroupProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~GroupProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // get itemset + virtual const SfxItemSet& GetObjectItemSet() const; + + // get merged ItemSet. Normally, this maps directly to GetObjectItemSet(), but may + // be overloaded e.g for group objects to return a merged ItemSet of the object. + // When using this method the returned ItemSet may contain items in the state + // SFX_ITEM_DONTCARE which means there were several such items with different + // values. + virtual const SfxItemSet& GetMergedItemSet() const; + + // Set merged ItemSet. Normally, this maps to SetObjectItemSet(). + virtual void SetMergedItemSet(const SfxItemSet& rSet, sal_Bool bClearAllItems = sal_False); + + // set single item + virtual void SetObjectItem(const SfxPoolItem& rItem); + + // set single item direct, do not do any notifies or things like that + virtual void SetObjectItemDirect(const SfxPoolItem& rItem); + + // clear single item + virtual void ClearObjectItem(const sal_uInt16 nWhich = 0); + + // clear single item direct, do not do any notifies or things like that. + // Also supports complete deleteion of items when default parameter 0 is used. + virtual void ClearObjectItemDirect(const sal_uInt16 nWhich = 0); + + // Set a single item, iterate over hierarchies if necessary. + virtual void SetMergedItem(const SfxPoolItem& rItem); + + // Clear a single item, iterate over hierarchies if necessary. + virtual void ClearMergedItem(const sal_uInt16 nWhich = 0); + + // set complete item set + virtual void SetObjectItemSet(const SfxItemSet& rSet); + + // set a new StyleSheet + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + + // get the local StyleSheet + virtual SfxStyleSheet* GetStyleSheet() const; + + // force default attributes for a specific object type, called from + // DefaultProperties::GetObjectItemSet() if a new ItemSet is created + virtual void ForceDefaultAttributes(); + + // Move properties to a new ItemPool. + virtual void MoveToItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel = 0L); + + // force all attributes which come from styles to hard attributes + // to be able to live without the style. + virtual void ForceStyleToHardAttributes(); + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PROPERTIES_GROUPPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/itemsettools.hxx b/include/svx/sdr/properties/itemsettools.hxx new file mode 100644 index 000000000000..8649ffb3c10d --- /dev/null +++ b/include/svx/sdr/properties/itemsettools.hxx @@ -0,0 +1,68 @@ +/* -*- 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 _SDR_PROPERTIES_ITEMSETTOOLS_HXX +#define _SDR_PROPERTIES_ITEMSETTOOLS_HXX + +#include <sal/types.h> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrObject; +class SfxItemSet; +class Rectangle; +class Fraction; + +////////////////////////////////////////////////////////////////////////////// +// class to remember broadcast start positions +namespace sdr +{ + namespace properties + { + class ItemChangeBroadcaster + { + sal_uInt32 mnCount; + void* mpData; + + public: + explicit ItemChangeBroadcaster(const SdrObject& rObj); + ~ItemChangeBroadcaster(); + + sal_uInt32 GetRectangleCount() const; + const Rectangle& GetRectangle(sal_uInt32 nIndex) const; + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + void ScaleItemSet(SfxItemSet& rSet, const Fraction& rScale); + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PROPERTIES_ITEMSETTOOLS_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/measureproperties.hxx b/include/svx/sdr/properties/measureproperties.hxx new file mode 100644 index 000000000000..22e42b80dac6 --- /dev/null +++ b/include/svx/sdr/properties/measureproperties.hxx @@ -0,0 +1,67 @@ +/* -*- 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 _SDR_PROPERTIES_MEASUREPROPERTIES_HXX +#define _SDR_PROPERTIES_MEASUREPROPERTIES_HXX + +#include <svx/sdr/properties/textproperties.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class MeasureProperties : public TextProperties + { + protected: + // create a new itemset + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& rPool); + + // react on ItemSet changes + virtual void ItemSetChanged(const SfxItemSet& rSet); + + public: + // basic constructor + explicit MeasureProperties(SdrObject& rObj); + + // constructor for copying, but using new object + MeasureProperties(const MeasureProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~MeasureProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // set a new StyleSheet and broadcast + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + + // force default attributes for a specific object type, called from + // DefaultProperties::GetObjectItemSet() if a new ItemSet is created + virtual void ForceDefaultAttributes(); + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PROPERTIES_MEASUREPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/oleproperties.hxx b/include/svx/sdr/properties/oleproperties.hxx new file mode 100644 index 000000000000..184f840af272 --- /dev/null +++ b/include/svx/sdr/properties/oleproperties.hxx @@ -0,0 +1,58 @@ +/* -*- 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 _SDR_PROPERTIES_OLEPROPERTIES_HXX +#define _SDR_PROPERTIES_OLEPROPERTIES_HXX + +#include <svx/sdr/properties/rectangleproperties.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class OleProperties : public RectangleProperties + { + protected: + public: + // basic constructor + explicit OleProperties(SdrObject& rObj); + + // constructor for copying, but using new object + OleProperties(const OleProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~OleProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // force default attributes for a specific object type, called from + // DefaultProperties::GetObjectItemSet() if a new ItemSet is created + virtual void ForceDefaultAttributes(); + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PROPERTIES_OLEPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/pageproperties.hxx b/include/svx/sdr/properties/pageproperties.hxx new file mode 100644 index 000000000000..fe7c333cec71 --- /dev/null +++ b/include/svx/sdr/properties/pageproperties.hxx @@ -0,0 +1,73 @@ +/* -*- 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 _SDR_PROPERTIES_PAGEPROPERTIES_HXX +#define _SDR_PROPERTIES_PAGEPROPERTIES_HXX + +#include <svx/sdr/properties/emptyproperties.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class PageProperties : public EmptyProperties + { + protected: + // create a new object specific itemset with object specific ranges. + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& pPool); + + // Do the ItemChange, may do special handling + virtual void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = 0); + + // Called after ItemChange() is done for all items. + virtual void PostItemChange(const sal_uInt16 nWhich); + + public: + // basic constructor + explicit PageProperties(SdrObject& rObj); + + // constructor for copying, but using new object + PageProperties(const PageProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~PageProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // get itemset. Overloaded here to allow creating the empty itemset + // without asserting + virtual const SfxItemSet& GetObjectItemSet() const; + + // get the installed StyleSheet + virtual SfxStyleSheet* GetStyleSheet() const; + + // clear single item + virtual void ClearObjectItem(const sal_uInt16 nWhich = 0); + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PROPERTIES_PAGEPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/properties.hxx b/include/svx/sdr/properties/properties.hxx new file mode 100644 index 000000000000..287cd5b93ef2 --- /dev/null +++ b/include/svx/sdr/properties/properties.hxx @@ -0,0 +1,193 @@ +/* -*- 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 _SDR_PROPERTIES_PROPERTIES_HXX +#define _SDR_PROPERTIES_PROPERTIES_HXX + +#include <sal/types.h> +#include "svx/svxdllapi.h" + +////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class SdrObject; +class SfxItemSet; +class SfxPoolItem; +class SfxStyleSheet; +class Fraction; +class SfxItemPool; +class SdrModel; + +namespace sdr +{ + namespace properties + { + class ItemChangeBroadcaster; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class SVX_DLLPUBLIC BaseProperties + { + protected: + // the owner of this Properties. Set from constructor and not + // to be changed in any way. + SdrObject& mrObject; + + // create a new object specific itemset with object specific ranges. + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& pPool) = 0; + + // internal access to SdrObject + SdrObject& GetSdrObject() const + { + return mrObject; + } + + // Test changeability for a single item. If a implementation wants to prevent + // changing an item this method may be overloaded. + virtual sal_Bool AllowItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = 0) const = 0; + + // Do the internal ItemChange. If only nWhich is given, the item needs to be cleared. + // Also needs to handle if nWhich and pNewItem is 0, which means to clear all items. + virtual void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = 0) = 0; + + // Called after ItemChange() is done for all items. Allows local reactions on + // specific item changes + virtual void PostItemChange(const sal_uInt16 nWhich) = 0; + + // Internally react on ItemSet changes. The given ItemSet contains all changed items, the new ones. + virtual void ItemSetChanged(const SfxItemSet& rSet) = 0; + + public: + // basic constructor, used from SdrObject. + explicit BaseProperties(SdrObject& rObj); + + // constructor for copying, but using new object. Used from the Clone() + // method. + BaseProperties(const BaseProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~BaseProperties(); + + // Clone() operator, normally just calls the local copy constructor, + // see above. + virtual BaseProperties& Clone(SdrObject& rObj) const = 0; + + // Get the local ItemSet. This directly returns the local ItemSet of the object. No + // merging of ItemSets is done for e.g. Group objects. + virtual const SfxItemSet& GetObjectItemSet() const = 0; + + // get merged ItemSet. Normappl, this maps directly to GetObjectItemSet(), but may + // be overloaded e.g for group objects to return a merged ItemSet of the object. + // When using this method the returned ItemSet may contain items in the state + // SFX_ITEM_DONTCARE which means there were several such items with different + // values. + virtual const SfxItemSet& GetMergedItemSet() const; + + // Sets all items which are on state SFX_ITEM_SET in rSet at the local ItemSet. + // Uses AllowItemChange(), ItemChange(), PostItemChange() and ItemSetChanged() calls. + virtual void SetObjectItemSet(const SfxItemSet& rSet) = 0; + + // Set merged ItemSet. Normally, this maps to SetObjectItemSet(). + virtual void SetMergedItemSet(const SfxItemSet& rSet, sal_Bool bClearAllItems = sal_False); + + // Set single item at the local ItemSet. Uses AllowItemChange(), + // ItemChange(), PostItemChange() and ItemSetChanged() calls. + virtual void SetObjectItem(const SfxPoolItem& rItem) = 0; + + // Set a single item direct. Only uses AllowItemChange() and ItemChange(), + // but not PostItemChange() and ItemSetChanged() calls. + virtual void SetObjectItemDirect(const SfxPoolItem& rItem) = 0; + + // Clear a single local item. Uses AllowItemChange(), + // ItemChange(), PostItemChange() and ItemSetChanged() calls. + virtual void ClearObjectItem(const sal_uInt16 nWhich = 0) = 0; + + // Set a single item, iterate over hierarchies if necessary. Default + // Implementation falls back to ClearObjectItem(). + virtual void SetMergedItem(const SfxPoolItem& rItem); + + // Clear a single item, iterate over hierarchies if necessary. Default + // Implementation falls back to ClearObjectItem(). + virtual void ClearMergedItem(const sal_uInt16 nWhich = 0); + + // Clear single item direct. Only uses AllowItemChange() and ItemChange(), + // but not PostItemChange() and ItemSetChanged() calls. + // Also supports complete deletion of items when default parameter 0 is used. + virtual void ClearObjectItemDirect(const sal_uInt16 nWhich = 0) = 0; + + // Set a new StyleSheet. Registers as listener at the StyleSheet to get knowledge + // of StyleSheet changes. + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr) = 0; + + // Get the installed StyleSheet. + virtual SfxStyleSheet* GetStyleSheet() const = 0; + + // Scale the local ItemSet as far as it contains metric items. This needs to be + // overloaded to do it for hierarchical objects like e.g. groups. + virtual void Scale(const Fraction& rScale); + + // Move local items to a new ItemPool. This needs to be + // overloaded to do it for hierarchical objects like e.g. groups. + virtual void MoveToItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel = 0L); + + // Set new model. + virtual void SetModel(SdrModel* pOldModel, SdrModel* pNewModel); + + // force all attributes which come from styles to hard attributes + // to be able to live without the style. + virtual void ForceStyleToHardAttributes(); + + // syntactical sugar for ItemSet accesses. Broadcasts before and after the changes + // to invalidate views in old and new BoundRects. As soon as the repaint mechanism + // will be changed these broadcasts will no longer be needed. + //void SetItemAndBroadcast(const SfxPoolItem& rItem); + //void ClearItemAndBroadcast(const sal_uInt16 nWhich = 0); + void SetMergedItemSetAndBroadcast(const SfxItemSet& rSet, sal_Bool bClearAllItems = sal_False); + + // Just a convenient shortcut for GetObjectItemSet().Get(nWhich). + const SfxPoolItem& GetItem(const sal_uInt16 nWhich) const; + + // support for convenient broadcasting. Used from SetMergedItemAndBroadcast(), + // ClearItemAndBroadcast() and SetItemSetAndBroadcast(), see above. + // But also from inside SdrObjects. + void BroadcastItemChange(const ItemChangeBroadcaster& rChange); + + // #i101556# add versioning mechanism; used from e.g. text attribute set to + // allow detection of e.g. style sheet or single text attribute changes. The + // default implementation returns 0 (zero) + virtual sal_uInt32 getVersion() const; + }; + + // checks the FillStyle item and removes unneeded Gradient, FillBitmap and Hatch items + void SVX_DLLPUBLIC CleanupFillProperties( SfxItemSet& rItemSet ); + + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PROPERTIES_PROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/rectangleproperties.hxx b/include/svx/sdr/properties/rectangleproperties.hxx new file mode 100644 index 000000000000..6314f1b136ca --- /dev/null +++ b/include/svx/sdr/properties/rectangleproperties.hxx @@ -0,0 +1,61 @@ +/* -*- 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 _SDR_PROPERTIES_RECTANGLEPROPERTIES_HXX +#define _SDR_PROPERTIES_RECTANGLEPROPERTIES_HXX + +#include <svx/sdr/properties/textproperties.hxx> +#include "svx/svxdllapi.h" + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class SVX_DLLPUBLIC RectangleProperties : public TextProperties + { + protected: + // react on ItemSet changes + virtual void ItemSetChanged(const SfxItemSet& rSet); + + public: + // basic constructor + explicit RectangleProperties(SdrObject& rObj); + + // constructor for copying, but using new object + RectangleProperties(const RectangleProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~RectangleProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // set a new StyleSheet and broadcast + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PROPERTIES_RECTANGLEPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/properties/textproperties.hxx b/include/svx/sdr/properties/textproperties.hxx new file mode 100644 index 000000000000..456b104e60ec --- /dev/null +++ b/include/svx/sdr/properties/textproperties.hxx @@ -0,0 +1,93 @@ +/* -*- 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 _SDR_PROPERTIES_TEXTPROPERTIES_HXX +#define _SDR_PROPERTIES_TEXTPROPERTIES_HXX + +#include <svx/itextprovider.hxx> +#include <svx/sdr/properties/attributeproperties.hxx> +#include "svx/svxdllapi.h" + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + namespace properties + { + class SVX_DLLPUBLIC TextProperties : public AttributeProperties + { + private: + // #i101556# versioning support + sal_uInt32 maVersion; + + protected: + // create a new itemset + virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& rPool); + + // Do the ItemChange, may do special handling + virtual void ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem = 0); + + // react on ItemSet changes + virtual void ItemSetChanged(const SfxItemSet& rSet); + + /// Get the TextProvider related to our SdrObject + virtual const svx::ITextProvider& getTextProvider() const; + + public: + // basic constructor + explicit TextProperties(SdrObject& rObj); + + // constructor for copying, but using new object + TextProperties(const TextProperties& rProps, SdrObject& rObj); + + // destructor + virtual ~TextProperties(); + + // Clone() operator, normally just calls the local copy constructor + virtual BaseProperties& Clone(SdrObject& rObj) const; + + // set a new StyleSheet and broadcast + virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + + // force default attributes for a specific object type, called from + // DefaultProperties::GetObjectItemSet() if a new ItemSet is created + virtual void ForceDefaultAttributes(); + + // force all attributes which come from styles to hard attributes + // to be able to live without the style. + virtual void ForceStyleToHardAttributes(); + + // This is the notifyer from SfxListener + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + + // Set single item at the local ItemSet. *Does not use* AllowItemChange(), + // ItemChange(), PostItemChange() and ItemSetChanged() calls. + void SetObjectItemNoBroadcast(const SfxPoolItem& rItem); + + // #i101556# versioning support + virtual sal_uInt32 getVersion() const; + }; + } // end of namespace properties +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PROPERTIES_TEXTPROPERTIES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdr/table/tabledesign.hxx b/include/svx/sdr/table/tabledesign.hxx new file mode 100644 index 000000000000..8de846375f5b --- /dev/null +++ b/include/svx/sdr/table/tabledesign.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SDR_TABLE_DESIGN_HXX +#define _SDR_TABLE_DESIGN_HXX + +#include "svx/svxdllapi.h" + +#include <com/sun/star/container/XNameAccess.hpp> + +namespace sdr { namespace table { + +const sal_Int32 first_row_style = 0; +const sal_Int32 last_row_style = 1; +const sal_Int32 first_column_style = 2; +const sal_Int32 last_column_style = 3; +const sal_Int32 even_rows_style = 4; +const sal_Int32 odd_rows_style = 5; +const sal_Int32 even_columns_style = 6; +const sal_Int32 odd_columns_style = 7; +const sal_Int32 body_style = 8; +const sal_Int32 background_style = 9; +const sal_Int32 style_count = 10; + +extern SVX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > CreateTableDesignFamily(); + +} } + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdrhittesthelper.hxx b/include/svx/sdrhittesthelper.hxx new file mode 100644 index 000000000000..ad867f867cfa --- /dev/null +++ b/include/svx/sdrhittesthelper.hxx @@ -0,0 +1,68 @@ +/* -*- 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 _SDRHITTESTHELPER_HXX +#define _SDRHITTESTHELPER_HXX + +#include "svx/svxdllapi.h" +#include <tools/gen.hxx> + +///////////////////////////////////////////////////////////////////// +// #i101872# new Object HitTest as View-tooling + +class SdrObject; +class SdrPageView; +class SetOfByte; +class SdrObjList; +namespace sdr { namespace contact { class ViewObjectContact; }} +namespace basegfx { class B2DPoint; } + +///////////////////////////////////////////////////////////////////// +// Wrappers for classic Sdr* Mode/View classes + +SVX_DLLPUBLIC SdrObject* SdrObjectPrimitiveHit( + const SdrObject& rObject, + const Point& rPnt, + sal_uInt16 nTol, + const SdrPageView& rSdrPageView, + const SetOfByte* pVisiLayer, + bool bTextOnly); + +SVX_DLLPUBLIC SdrObject* SdrObjListPrimitiveHit( + const SdrObjList& rList, + const Point& rPnt, + sal_uInt16 nTol, + const SdrPageView& rSdrPageView, + const SetOfByte* pVisiLayer, + bool bTextOnly); + +///////////////////////////////////////////////////////////////////// +// the pure HitTest based on a VOC + +SVX_DLLPUBLIC bool ViewObjectContactPrimitiveHit( + const sdr::contact::ViewObjectContact& rVOC, + const basegfx::B2DPoint& rHitPosition, + double fLogicHitTolerance, + bool bTextOnly); + +///////////////////////////////////////////////////////////////////// + +#endif //_SDRHITTESTHELPER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdrmasterpagedescriptor.hxx b/include/svx/sdrmasterpagedescriptor.hxx new file mode 100644 index 000000000000..1917a681bb69 --- /dev/null +++ b/include/svx/sdrmasterpagedescriptor.hxx @@ -0,0 +1,94 @@ +/* -*- 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 _SDR_MASTERPAGEDESCRIPTOR_HXX +#define _SDR_MASTERPAGEDESCRIPTOR_HXX + +#include <svx/sdrpageuser.hxx> +#include <svx/svdsob.hxx> + +////////////////////////////////////////////////////////////////////////////// +// predeclarations +class SdrObject; +class SfxItemSet; +class SdrPageProperties; + +namespace sdr +{ + namespace contact + { + class ViewContact; + } // end of namespace contact +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +namespace sdr +{ + class MasterPageDescriptor : public sdr::PageUser + { + private: + SdrPage& maOwnerPage; + SdrPage& maUsedPage; + SetOfByte maVisibleLayers; + + // ViewContact part + sdr::contact::ViewContact* mpViewContact; + + // assignment operator defined, but not implemented + void operator=(const MasterPageDescriptor& rCandidate); + + protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + + public: + MasterPageDescriptor(SdrPage& aOwnerPage, SdrPage& aUsedPage); + virtual ~MasterPageDescriptor(); + + // ViewContact part + sdr::contact::ViewContact& GetViewContact() const; + + // this method is called form the destructor of the referenced page. + // do all necessary action to forget the page. It is not necessary to call + // RemovePageUser(), that is done form the destructor. + virtual void PageInDestruction(const SdrPage& rPage); + + // member access to UsedPage + SdrPage& GetUsedPage() const { return maUsedPage; } + + // member access to OwnerPage + SdrPage& GetOwnerPage() const { return maOwnerPage; } + + // member access to VisibleLayers + const SetOfByte& GetVisibleLayers() const { return maVisibleLayers; } + void SetVisibleLayers(const SetOfByte& rNew); + + // operators + bool operator==(const MasterPageDescriptor& rCandidate) const; + bool operator!=(const MasterPageDescriptor& rCandidate) const; + + const SdrPageProperties* getCorrectSdrPageProperties() const; + }; +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_MASTERPAGEDESCRIPTOR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdrobjectfilter.hxx b/include/svx/sdrobjectfilter.hxx new file mode 100644 index 000000000000..9741afb6f4cf --- /dev/null +++ b/include/svx/sdrobjectfilter.hxx @@ -0,0 +1,51 @@ +/* -*- 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 SDROBJECTFILTER_HXX +#define SDROBJECTFILTER_HXX + +#include "svx/svxdllapi.h" + +class SdrObject; + +//........................................................................ +namespace svx +{ +//........................................................................ + + //==================================================================== + //= SdrObjectFilter + //==================================================================== + /** specifies a boolean predicate on the set of all SdrObjects - vulgo a filter. + */ + class SVX_DLLPUBLIC SAL_NO_VTABLE ISdrObjectFilter + { + public: + virtual bool includeObject( const SdrObject& i_rObject ) const = 0; + + virtual ~ISdrObjectFilter() = 0; + }; + +//........................................................................ +} // namespace svx +//........................................................................ + +#endif // SDROBJECTFILTER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdrobjectuser.hxx b/include/svx/sdrobjectuser.hxx new file mode 100644 index 000000000000..b1e0c7343066 --- /dev/null +++ b/include/svx/sdrobjectuser.hxx @@ -0,0 +1,56 @@ +/* -*- 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 _SDR_OBJECTUSER_HXX +#define _SDR_OBJECTUSER_HXX + +#include <vector> + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// predeclarations +class SdrObject; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// To make things more safe, allow users of an object to register at it. The users need to be derived +// from sdr::ObjectUser to get a call. The users do not need to call RemoveObjectUser() at the page +// when they get called from ObjectInDestruction(). + +namespace sdr +{ + class ObjectUser + { + public: + // this method is called form the destructor of the referenced page. + // do all necessary action to forget the page. It is not necessary to call + // RemovePageUser(), that is done form the destructor. + virtual void ObjectInDestruction(const SdrObject& rObject) = 0; + + protected: + ~ObjectUser() {} + }; + + // typedef for ObjectUserVector + typedef ::std::vector< ObjectUser* > ObjectUserVector; +} // end of namespace sdr + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_OBJECTUSER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdrpageuser.hxx b/include/svx/sdrpageuser.hxx new file mode 100644 index 000000000000..39390fcf6247 --- /dev/null +++ b/include/svx/sdrpageuser.hxx @@ -0,0 +1,56 @@ +/* -*- 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 _SDR_PAGEUSER_HXX +#define _SDR_PAGEUSER_HXX + +#include <vector> + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// predeclarations +class SdrPage; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// To make things more safe, allow users of the page to register at it. The users need to be derived +// from sdr::PageUser to get a call. The users do not need to call RemovePageUser() at the page +// when they get called from PageInDestruction(). + +namespace sdr +{ + class PageUser + { + public: + // this method is called form the destructor of the referenced page. + // do all necessary action to forget the page. It is not necessary to call + // RemovePageUser(), that is done form the destructor. + virtual void PageInDestruction(const SdrPage& rPage) = 0; + + protected: + ~PageUser() {} + }; + + // typedef for PageUserVector + typedef ::std::vector< PageUser* > PageUserVector; +} // end of namespace sdr + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SDR_PAGEUSER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdrpagewindow.hxx b/include/svx/sdrpagewindow.hxx new file mode 100644 index 000000000000..85584d724b67 --- /dev/null +++ b/include/svx/sdrpagewindow.hxx @@ -0,0 +1,131 @@ +/* -*- 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 _SDRPAGEWINDOW_HXX +#define _SDRPAGEWINDOW_HXX + +#include <com/sun/star/awt/XWindowListener.hpp> +#include <com/sun/star/beans/XPropertyChangeListener.hpp> +#include <com/sun/star/awt/XControlContainer.hpp> +#include <com/sun/star/util/XModeChangeListener.hpp> +#include <cppuhelper/implbase4.hxx> +#include <svx/sdr/overlay/overlaymanager.hxx> +#include <svx/svdtypes.hxx> // for SdrLayerID +#include <svx/sdrpagewindow.hxx> +#include "svx/svxdllapi.h" + +#include <vector> + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// predeclarations + +class Region; +class SdrUnoObj; +class SdrPageView; + +// #110094# +namespace sdr +{ + namespace contact + { + class ObjectContact; + class ViewObjectContactRedirector; + } // end of namespace contact + + namespace overlay + { + class OverlayManager; + } // end of namespace overlay +} // end of namespace sdr + +namespace basegfx +{ + class B2DRange; +} // end of namespace basegfx + +class SdrPaintWindow; +class Link; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrPageWindow +{ + // #110094# ObjectContact section + sdr::contact::ObjectContact* mpObjectContact; + + // the SdrPageView this window belongs to + SdrPageView& mrPageView; + + // the PaintWindow to paint on. Here is access to OutDev etc. + // #i72752# change to pointer to allow patcing it in DrawLayer() if necessary + SdrPaintWindow* mpPaintWindow; + SdrPaintWindow* mpOriginalPaintWindow; + + // UNO stuff for xControls + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > mxControlContainer; + + sdr::contact::ObjectContact* CreateViewSpecificObjectContact(); + +public: + SdrPageWindow(SdrPageView& rNewPageView, SdrPaintWindow& rPaintWindow); + ~SdrPageWindow(); + + // data read accesses + SdrPageView& GetPageView() const { return mrPageView; } + SdrPaintWindow& GetPaintWindow() const { return *mpPaintWindow; } + const SdrPaintWindow* GetOriginalPaintWindow() const { return mpOriginalPaintWindow; } + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > GetControlContainer( bool _bCreateIfNecessary = true ) const; + + // OVERLAYMANAGER + rtl::Reference< ::sdr::overlay::OverlayManager > GetOverlayManager() const; + + // #i72752# allow patcing SdrPaintWindow from SdrPageView::DrawLayer if needed + void patchPaintWindow(SdrPaintWindow& rPaintWindow); + void unpatchPaintWindow(); + + // the repaint method. For migration from pPaintProc, use one more parameter + void PrePaint(); + void PrepareRedraw(const Region& rReg); + void RedrawAll(sdr::contact::ViewObjectContactRedirector* pRedirector) const; + void RedrawLayer(const SdrLayerID* pId, sdr::contact::ViewObjectContactRedirector* pRedirector) const; + + // Invalidate call, used from ObjectContact(OfPageView) in InvalidatePartOfView(...) + void InvalidatePageWindow(const basegfx::B2DRange& rRange); + + // #110094# ObjectContact section + sdr::contact::ObjectContact& GetObjectContact() const; + /// determines whether there already exists an ObjectContact + bool HasObjectContact() const; + + // #i26631# + void ResetObjectContact(); + + /** sets all elements in the view which support a design and a alive mode into the given mode + */ + void SetDesignMode( bool _bDesignMode ) const; +}; + +// typedefs for a list of SdrPageWindow +typedef ::std::vector< SdrPageWindow* > SdrPageWindowVector; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SDRPAGEWINDOW_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdrpaintwindow.hxx b/include/svx/sdrpaintwindow.hxx new file mode 100644 index 000000000000..bf8620ca8655 --- /dev/null +++ b/include/svx/sdrpaintwindow.hxx @@ -0,0 +1,151 @@ +/* -*- 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 _SDRPAINTWINDOW_HXX +#define _SDRPAINTWINDOW_HXX + +#include <rtl/ref.hxx> +#include <vcl/virdev.hxx> +#include "svx/svxdllapi.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// predeclarations +class SdrPaintView; + +namespace sdr +{ + namespace overlay + { + class OverlayManager; + } // end of namespace overlay +} // end of namespace sdr + +#ifdef _MSC_VER // broken msvc template instantiation +#include <svx/sdr/overlay/overlaymanager.hxx> +#endif +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SdrPreRenderDevice +{ + // The original OutputDevice + OutputDevice& mrOutputDevice; + + // The VirtualDevice for PreRendering + VirtualDevice maPreRenderDevice; + +public: + explicit SdrPreRenderDevice(OutputDevice& rOriginal); + ~SdrPreRenderDevice(); + + void PreparePreRenderDevice(); + void OutputPreRenderDevice(const Region& rExpandedRegion); + + OutputDevice& GetOriginalOutputDevice() const { return mrOutputDevice; } + OutputDevice& GetPreRenderDevice() { return maPreRenderDevice; } +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrPaintWindow +{ +private: + // the OutputDevice this window represents + OutputDevice& mrOutputDevice; + + // the SdrPaintView this window belongs to + SdrPaintView& mrPaintView; + + // the new OverlayManager for the new OverlayObjects. Test add here, will + // replace the IAOManager as soon as it works. + rtl::Reference< ::sdr::overlay::OverlayManager > mxOverlayManager; + + // The PreRenderDevice for PreRendering + SdrPreRenderDevice* mpPreRenderDevice; + + // The RedrawRegion used for rendering + Region maRedrawRegion; + + // bitfield + // #i72889# flag if this is only a temporary target for repaint, default is false + unsigned mbTemporaryTarget : 1; + + /** Remember whether the mxOverlayManager supports buffering. Using + this flags expensive dynamic_casts on mxOverlayManager in order to + detect this. + */ + bool mbUseBuffer; + + // helpers + void impCreateOverlayManager(); + +public: + SdrPaintWindow(SdrPaintView& rNewPaintView, OutputDevice& rOut); + ~SdrPaintWindow(); + + // data read accesses + SdrPaintView& GetPaintView() const { return mrPaintView; } + OutputDevice& GetOutputDevice() const { return mrOutputDevice; } + + // OVERLAYMANAGER + rtl::Reference< ::sdr::overlay::OverlayManager > GetOverlayManager() const; + + // #i73602# add flag if buffer shall be used + void DrawOverlay(const Region& rRegion); + + // calculate visible area and return + Rectangle GetVisibleArea() const; + + // Is OutDev a printer? + bool OutputToPrinter() const { return (OUTDEV_PRINTER == mrOutputDevice.GetOutDevType()); } + + // Is OutDev a window? + sal_Bool OutputToWindow() const { return (OUTDEV_WINDOW == mrOutputDevice.GetOutDevType()); } + + // Is OutDev a VirtualDevice? + sal_Bool OutputToVirtualDevice() const { return (OUTDEV_VIRDEV == mrOutputDevice.GetOutDevType()); } + + // Is OutDev a recording MetaFile? + bool OutputToRecordingMetaFile() const; + + // prepare PreRendering (evtl.) + void PreparePreRenderDevice(); + void DestroyPreRenderDevice(); + void OutputPreRenderDevice(const Region& rExpandedRegion); + SdrPreRenderDevice* GetPreRenderDevice() const { return mpPreRenderDevice; } + + // RedrawRegion + const Region& GetRedrawRegion() const; + void SetRedrawRegion(const Region& rNew); + + // #i72889# read/write access to TempoparyTarget + bool getTemporaryTarget() const { return (bool)mbTemporaryTarget; } + void setTemporaryTarget(bool bNew) { if(bNew != (bool)mbTemporaryTarget) mbTemporaryTarget = bNew; } + + // #i72889# get target output device, take into account output buffering + OutputDevice& GetTargetOutputDevice() { if(mpPreRenderDevice) return mpPreRenderDevice->GetPreRenderDevice(); else return mrOutputDevice; } +}; + +// typedefs for a list of SdrPaintWindows +typedef ::std::vector< SdrPaintWindow* > SdrPaintWindowVector; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SDRPAINTWINDOW_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdshcitm.hxx b/include/svx/sdshcitm.hxx new file mode 100644 index 000000000000..f399a069ee61 --- /dev/null +++ b/include/svx/sdshcitm.hxx @@ -0,0 +1,36 @@ +/* -*- 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 _SDSHCITM_HXX +#define _SDSHCITM_HXX + +#include <svx/xcolit.hxx> +#include <svx/svddef.hxx> + +class SdrShadowColorItem: public XColorItem +{ +public: + SdrShadowColorItem(const Color& rTheColor) + : XColorItem(SDRATTR_SHADOWCOLOR, rTheColor) + { + } +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdshitm.hxx b/include/svx/sdshitm.hxx new file mode 100644 index 000000000000..831fe9a4da5c --- /dev/null +++ b/include/svx/sdshitm.hxx @@ -0,0 +1,36 @@ +/* -*- 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 _SDSHITM_HXX +#define _SDSHITM_HXX + +#include <svx/sdooitm.hxx> +#include <svx/svddef.hxx> + +//------------------------------ +// class SdrShadowItem +//------------------------------ +class SdrShadowItem: public SdrOnOffItem { +public: + SdrShadowItem(sal_Bool bShadow=sal_False): SdrOnOffItem(SDRATTR_SHADOW, bShadow) {} + SdrShadowItem(SvStream& rIn): SdrOnOffItem(SDRATTR_SHADOW, rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdshtitm.hxx b/include/svx/sdshtitm.hxx new file mode 100644 index 000000000000..39c038a68bda --- /dev/null +++ b/include/svx/sdshtitm.hxx @@ -0,0 +1,36 @@ +/* -*- 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 _SDSHTITM_HXX +#define _SDSHTITM_HXX + +#include <svx/sdprcitm.hxx> +#include <svx/svddef.hxx> + +//--------------------- +// class SdrShadowTransparenceItem +//--------------------- +class SdrShadowTransparenceItem: public SdrPercentItem { +public: + SdrShadowTransparenceItem(sal_uInt16 nTransp=0): SdrPercentItem(SDRATTR_SHADOWTRANSPARENCE,nTransp) {} + SdrShadowTransparenceItem(SvStream& rIn) : SdrPercentItem(SDRATTR_SHADOWTRANSPARENCE,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdsxyitm.hxx b/include/svx/sdsxyitm.hxx new file mode 100644 index 000000000000..84f614c36b97 --- /dev/null +++ b/include/svx/sdsxyitm.hxx @@ -0,0 +1,45 @@ +/* -*- 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 _SDSXYITM_HXX +#define _SDSXYITM_HXX + +#include <svx/sdmetitm.hxx> +#include <svx/svddef.hxx> + +//--------------------- +// class SdrShadowXDistItem +//--------------------- +class SdrShadowXDistItem: public SdrMetricItem { +public: + SdrShadowXDistItem(long nDist=0) : SdrMetricItem(SDRATTR_SHADOWXDIST,nDist) {} + SdrShadowXDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_SHADOWXDIST,rIn) {} +}; + +//--------------------- +// class SdrShadowYDistItem +//--------------------- +class SdrShadowYDistItem: public SdrMetricItem { +public: + SdrShadowYDistItem(long nDist=0) : SdrMetricItem(SDRATTR_SHADOWYDIST,nDist) {} + SdrShadowYDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_SHADOWYDIST,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdtaaitm.hxx b/include/svx/sdtaaitm.hxx new file mode 100644 index 000000000000..cf8b0d59f1ee --- /dev/null +++ b/include/svx/sdtaaitm.hxx @@ -0,0 +1,41 @@ +/* -*- 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 _SDTAAITM_HXX +#define _SDTAAITM_HXX + +#include <svl/intitem.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC SdrTextAniAmountItem: public SfxInt16Item { +public: + TYPEINFO(); + SdrTextAniAmountItem(sal_Int16 nVal=0): SfxInt16Item(SDRATTR_TEXT_ANIAMOUNT,nVal) {} + SdrTextAniAmountItem(SvStream& rIn): SfxInt16Item(SDRATTR_TEXT_ANIAMOUNT,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual bool HasMetrics() const; + virtual bool ScaleMetrics(long nMul, long nDiv); + + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdtacitm.hxx b/include/svx/sdtacitm.hxx new file mode 100644 index 000000000000..c80460b00700 --- /dev/null +++ b/include/svx/sdtacitm.hxx @@ -0,0 +1,34 @@ +/* -*- 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 sdtacitm_hxx +#define sdtacitm_hxx + +#include <svl/intitem.hxx> +#include <svx/svddef.hxx> + +// Number of loops. 0=infinite. +class SdrTextAniCountItem: public SfxUInt16Item { +public: + SdrTextAniCountItem(sal_uInt16 nVal=0): SfxUInt16Item(SDRATTR_TEXT_ANICOUNT,nVal) {} + SdrTextAniCountItem(SvStream& rIn): SfxUInt16Item(SDRATTR_TEXT_ANICOUNT,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdtaditm.hxx b/include/svx/sdtaditm.hxx new file mode 100644 index 000000000000..687e906bf2f0 --- /dev/null +++ b/include/svx/sdtaditm.hxx @@ -0,0 +1,55 @@ +/* -*- 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 _SDTADITM_HXX +#define _SDTADITM_HXX + +#include <svl/eitem.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +//------------------------------ +// class SdrTextAniDirectionItem +//------------------------------ + +enum SdrTextAniDirection {SDRTEXTANI_LEFT, + SDRTEXTANI_RIGHT, + SDRTEXTANI_UP, + SDRTEXTANI_DOWN}; + +class SVX_DLLPUBLIC SdrTextAniDirectionItem: public SfxEnumItem { +public: + TYPEINFO(); + SdrTextAniDirectionItem(SdrTextAniDirection eDir=SDRTEXTANI_LEFT): SfxEnumItem(SDRATTR_TEXT_ANIDIRECTION,(sal_uInt16)eDir) {} + SdrTextAniDirectionItem(SvStream& rIn) : SfxEnumItem(SDRATTR_TEXT_ANIDIRECTION,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; + SdrTextAniDirection GetValue() const { return (SdrTextAniDirection)SfxEnumItem::GetValue(); } + + 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 OUString GetValueTextByPos(sal_uInt16 nPos) const; + + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdtagitm.hxx b/include/svx/sdtagitm.hxx new file mode 100644 index 000000000000..eec63d750a7f --- /dev/null +++ b/include/svx/sdtagitm.hxx @@ -0,0 +1,45 @@ +/* -*- 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 _SDTAGITM_HXX +#define _SDTAGITM_HXX + +#include <svx/sdooitm.hxx> +#include <svx/svddef.hxx> + +//------------------------------------ +// class SdrTextAutoGrowHeightItem +//------------------------------------ +class SdrTextAutoGrowHeightItem: public SdrOnOffItem { +public: + SdrTextAutoGrowHeightItem(sal_Bool bAuto=sal_True): SdrOnOffItem(SDRATTR_TEXT_AUTOGROWHEIGHT,bAuto) {} + SdrTextAutoGrowHeightItem(SvStream& rIn) : SdrOnOffItem(SDRATTR_TEXT_AUTOGROWHEIGHT,rIn) {} +}; + +//------------------------------------ +// class SdrTextAutoGrowWidthItem +//------------------------------------ +class SdrTextAutoGrowWidthItem: public SdrOnOffItem { +public: + SdrTextAutoGrowWidthItem(sal_Bool bAuto=sal_False): SdrOnOffItem(SDRATTR_TEXT_AUTOGROWWIDTH,bAuto) {} + SdrTextAutoGrowWidthItem(SvStream& rIn) : SdrOnOffItem(SDRATTR_TEXT_AUTOGROWWIDTH,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdtaiitm.hxx b/include/svx/sdtaiitm.hxx new file mode 100644 index 000000000000..e9916e33baeb --- /dev/null +++ b/include/svx/sdtaiitm.hxx @@ -0,0 +1,39 @@ +/* -*- 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 _SDTAIITM_HXX +#define _SDTAIITM_HXX + +#include <svx/sdynitm.hxx> +#include <svx/svddef.hxx> + +class SdrTextAniStartInsideItem: public SdrYesNoItem { +public: + SdrTextAniStartInsideItem(sal_Bool bOn=sal_False): SdrYesNoItem(SDRATTR_TEXT_ANISTARTINSIDE,bOn) {} + SdrTextAniStartInsideItem(SvStream& rIn) : SdrYesNoItem(SDRATTR_TEXT_ANISTARTINSIDE,rIn) {} +}; + +class SdrTextAniStopInsideItem: public SdrYesNoItem { +public: + SdrTextAniStopInsideItem(sal_Bool bOn=sal_False): SdrYesNoItem(SDRATTR_TEXT_ANISTOPINSIDE,bOn) {} + SdrTextAniStopInsideItem(SvStream& rIn) : SdrYesNoItem(SDRATTR_TEXT_ANISTOPINSIDE,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdtaitm.hxx b/include/svx/sdtaitm.hxx new file mode 100644 index 000000000000..82e002a95df2 --- /dev/null +++ b/include/svx/sdtaitm.hxx @@ -0,0 +1,82 @@ +/* -*- 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 _SDTAITM_HXX +#define _SDTAITM_HXX + +#include <svl/eitem.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +//------------------------------ +// class SdrTextVertAdjustItem +//------------------------------ + +enum SdrTextVertAdjust {SDRTEXTVERTADJUST_TOP, // aligned to top (normally used) + SDRTEXTVERTADJUST_CENTER, // centered (for example for the title texts in Draw) + SDRTEXTVERTADJUST_BOTTOM, // aligned to bottom + SDRTEXTVERTADJUST_BLOCK // support vertical full with supported now + /*,SDRTEXTVERTADJUST_STRETCH*/}; // also stretch letters in their height (ni) + +class SVX_DLLPUBLIC SdrTextVertAdjustItem: public SfxEnumItem { +public: + TYPEINFO(); + SdrTextVertAdjustItem(SdrTextVertAdjust eAdj=SDRTEXTVERTADJUST_TOP): SfxEnumItem(SDRATTR_TEXT_VERTADJUST,(sal_uInt16)eAdj) {} + SdrTextVertAdjustItem(SvStream& rIn) : SfxEnumItem(SDRATTR_TEXT_VERTADJUST,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; // { return 5; } + SdrTextVertAdjust GetValue() const { return (SdrTextVertAdjust)SfxEnumItem::GetValue(); } + + 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 OUString GetValueTextByPos(sal_uInt16 nPos) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +//------------------------------ +// class SdrTextHorzAdjustItem +//------------------------------ + +enum SdrTextHorzAdjust {SDRTEXTHORZADJUST_LEFT, // left adjusted + SDRTEXTHORZADJUST_CENTER, // centered (for example for title texts in Draw) + SDRTEXTHORZADJUST_RIGHT, // right adjusted + SDRTEXTHORZADJUST_BLOCK // use the whole text frame width + /*,SDRTEXTHORZADJUST_STRETCH*/}; // FitToSize in X direction (ni). + +class SVX_DLLPUBLIC SdrTextHorzAdjustItem: public SfxEnumItem { +public: + TYPEINFO(); + SdrTextHorzAdjustItem(SdrTextHorzAdjust eAdj=SDRTEXTHORZADJUST_BLOCK): SfxEnumItem(SDRATTR_TEXT_HORZADJUST,(sal_uInt16)eAdj) {} + SdrTextHorzAdjustItem(SvStream& rIn) : SfxEnumItem(SDRATTR_TEXT_HORZADJUST,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; + SdrTextHorzAdjust GetValue() const { return (SdrTextHorzAdjust)SfxEnumItem::GetValue(); } + + 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 OUString GetValueTextByPos(sal_uInt16 nPos) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdtakitm.hxx b/include/svx/sdtakitm.hxx new file mode 100644 index 000000000000..057bfe522535 --- /dev/null +++ b/include/svx/sdtakitm.hxx @@ -0,0 +1,97 @@ +/* -*- 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 SDTAKITM_HXX +#define SDTAKITM_HXX + +#include <svl/eitem.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +//------------------------------ +// class SdrTextAniKindItem +//------------------------------ + +enum SdrTextAniKind {SDRTEXTANI_NONE, + SDRTEXTANI_BLINK, + SDRTEXTANI_SCROLL, + SDRTEXTANI_ALTERNATE, + SDRTEXTANI_SLIDE}; + +// - SDRTEXTANI_BLINK: +// Just blink. Direction and Amount don't effect things. +// Frequency delay: 0 = 0.5Hz (Delay = 250). +// Count = number of blinks. (0 = forever) +// start inside: sal_False = begin with the blinker off, sal_True = begin with the blinker on +// stop inside: sal_False = end with the blinker off, sal_True = end with the blinker on +// (Only if count! = 0) +// - SDRTEXTANI_SCROLL: +// Text just scrolls all the way through, and starts over when it is done. +// +// Delay in ms: (except delay = 0 means 50ms (20Hz) default) +// Count = number of passes (0 = go forever) +// Direction: the direction to scroll +// StartInside: sal_False = on the first pass, scroll the text in (not initially visible) +// sal_True = on the first pass, the left part of the text is already visible +// in the scroll area before starting. +// StopInside: sal_False = on the last pass, scroll the text all the way out. +// sal_True = on the last pass, keep the right part of the text visible. +// (Only if count! = 0) +// Amount: Step size in logical units. Negative values = use Pixels instead +// of logical units. If Amount = 0, then default to 1 Pixel. +// - SDRTEXTANI_ALTERNATE: +// Like SDRTEXTANI_SCROLL, except don't scroll until all of the text is out, +// but just until the last part is visible. Then, change direction and +// scroll the text the other way. +// Count = number of passes (number of direction changes minus 1) +// If count = 1, this is the same as SDRTEXTANI_SCROLL +// Direction = the starting direction. +// All Other Parameters: just like SDRTEXTANI_SCROLL +// - SDRTEXTANI_SLIDE: +// Text will slide in to the original position. +// -> same as SCROLL with StartInside = sal_False, StopInside = sal_True +// and Count = 1 (Count = 0 is interpreted as count = 1). +// For each count > 1, the text, will be slid out backwards +// (much like ALTERNATE) and then slid back in again. +// StopInside is not evaluated, because inside is always stopped. +// StartInside is not evaluated, because outside is always started. +// All other parameters are like SDRTEXTANI_SCROLL +// StartInside, StopInside: When sal_True, the starting / final position +// of the text depends on the anchor of the drawing object. This +// corresponds to the position of the text in normal Paint (without scrolling). + +class SVX_DLLPUBLIC SdrTextAniKindItem: public SfxEnumItem { +public: + TYPEINFO(); + SdrTextAniKindItem(SdrTextAniKind eKind=SDRTEXTANI_NONE): SfxEnumItem(SDRATTR_TEXT_ANIKIND,(sal_uInt16)eKind) {} + SdrTextAniKindItem(SvStream& rIn) : SfxEnumItem(SDRATTR_TEXT_ANIKIND,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; // { return 5; } + SdrTextAniKind GetValue() const { return (SdrTextAniKind)SfxEnumItem::GetValue(); } + + 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 OUString GetValueTextByPos(sal_uInt16 nPos) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdtayitm.hxx b/include/svx/sdtayitm.hxx new file mode 100644 index 000000000000..c852087b83a7 --- /dev/null +++ b/include/svx/sdtayitm.hxx @@ -0,0 +1,38 @@ +/* -*- 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 _SDTAYITM_HXX +#define _SDTAYITM_HXX + +#include <svl/intitem.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC SdrTextAniDelayItem: public SfxUInt16Item { +public: + TYPEINFO(); + SdrTextAniDelayItem(sal_uInt16 nVal=0): SfxUInt16Item(SDRATTR_TEXT_ANIDELAY,nVal) {} + SdrTextAniDelayItem(SvStream& rIn): SfxUInt16Item(SDRATTR_TEXT_ANIDELAY,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdtcfitm.hxx b/include/svx/sdtcfitm.hxx new file mode 100644 index 000000000000..b7f92f1d0e5a --- /dev/null +++ b/include/svx/sdtcfitm.hxx @@ -0,0 +1,36 @@ +/* -*- 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 _SDTCFITM_HXX +#define _SDTCFITM_HXX + +#include <svx/sdooitm.hxx> +#include <svx/svddef.hxx> + +//------------------------------------ +// class SdrTextContourFrameItem +//------------------------------------ +class SdrTextContourFrameItem: public SdrOnOffItem { +public: + SdrTextContourFrameItem(sal_Bool bOn=sal_False): SdrOnOffItem(SDRATTR_TEXT_CONTOURFRAME,bOn) {} + SdrTextContourFrameItem(SvStream& rIn) : SdrOnOffItem(SDRATTR_TEXT_CONTOURFRAME,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdtditm.hxx b/include/svx/sdtditm.hxx new file mode 100644 index 000000000000..c33da1f406f3 --- /dev/null +++ b/include/svx/sdtditm.hxx @@ -0,0 +1,54 @@ +/* -*- 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 SDTMITM_HXX +#define SDTMITM_HXX + +#include <svx/sdmetitm.hxx> +#include <svx/svddef.hxx> + +//---------------------------------------------- +// class SdrTextLeft/Right/Upper/LowerDistItem +//---------------------------------------------- +class SdrTextLeftDistItem: public SdrMetricItem { +public: + SdrTextLeftDistItem(long nHgt=0): SdrMetricItem(SDRATTR_TEXT_LEFTDIST,nHgt) {} + SdrTextLeftDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_TEXT_LEFTDIST,rIn) {} +}; + +class SdrTextRightDistItem: public SdrMetricItem { +public: + SdrTextRightDistItem(long nHgt=0): SdrMetricItem(SDRATTR_TEXT_RIGHTDIST,nHgt) {} + SdrTextRightDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_TEXT_RIGHTDIST,rIn) {} +}; + +class SdrTextUpperDistItem: public SdrMetricItem { +public: + SdrTextUpperDistItem(long nHgt=0): SdrMetricItem(SDRATTR_TEXT_UPPERDIST,nHgt) {} + SdrTextUpperDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_TEXT_UPPERDIST,rIn) {} +}; + +class SdrTextLowerDistItem: public SdrMetricItem { +public: + SdrTextLowerDistItem(long nHgt=0): SdrMetricItem(SDRATTR_TEXT_LOWERDIST,nHgt) {} + SdrTextLowerDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_TEXT_LOWERDIST,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdtfchim.hxx b/include/svx/sdtfchim.hxx new file mode 100644 index 000000000000..42874cbc6fb3 --- /dev/null +++ b/include/svx/sdtfchim.hxx @@ -0,0 +1,47 @@ +/* -*- 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 _SDTFCHIM_HXX +#define _SDTFCHIM_HXX + +#include <svx/svddef.hxx> + +class SVX_DLLPUBLIC SdrTextFixedCellHeightItem : public SfxBoolItem +{ +public: + + TYPEINFO(); + SdrTextFixedCellHeightItem( sal_Bool bUseFixedCellHeight = sal_False ); + SVX_DLLPRIVATE SdrTextFixedCellHeightItem( SvStream & rStream, sal_uInt16 nVersion ); + + SVX_DLLPRIVATE virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePresentation, + SfxMapUnit eCoreMetric, SfxMapUnit ePresentationMetric, + OUString &rText, const IntlWrapper * = 0) const; + + SVX_DLLPRIVATE virtual SfxPoolItem* Create( SvStream&, sal_uInt16 nItem ) const; + SVX_DLLPRIVATE virtual SvStream& Store( SvStream&, sal_uInt16 nVersion ) const; + SVX_DLLPRIVATE virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + SVX_DLLPRIVATE virtual sal_uInt16 GetVersion( sal_uInt16 nFileFormatVersion ) const; + + SVX_DLLPRIVATE virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; + SVX_DLLPRIVATE virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdtfsitm.hxx b/include/svx/sdtfsitm.hxx new file mode 100644 index 000000000000..6d15c560e575 --- /dev/null +++ b/include/svx/sdtfsitm.hxx @@ -0,0 +1,67 @@ +/* -*- 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 _SDTFSITM_HXX +#define _SDTFSITM_HXX + +#include <svl/eitem.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +enum SdrFitToSizeType { + SDRTEXTFIT_NONE, // - no fit-to-size + SDRTEXTFIT_PROPORTIONAL, // - resize all glyhs proportionally + // (might scale anisotrophically) + SDRTEXTFIT_ALLLINES, // - like SDRTEXTFIT_PROPORTIONAL, but + // scales each line separately + SDRTEXTFIT_AUTOFIT}; // - mimics PPT's automatic adaption of + // font size to text rect - comparable + // to SDRTEXTFIT_PROPORTIONAL, but + // scales isotrophically + +// No AutoGrow and no automatic line breaks for +// SDRTEXTFIT_PROPORTIONAL and SDRTEXTFIT_ALLLINES. +// No automatic line breaks for AutoGrowingWidth as well (only if +// TextMaxFrameWidth is reached). + +//-------------------------------- +// class SdrTextFitToSizeTypeItem +//-------------------------------- +class SVX_DLLPUBLIC SdrTextFitToSizeTypeItem: public SfxEnumItem { +public: + TYPEINFO(); + SdrTextFitToSizeTypeItem(SdrFitToSizeType eFit=SDRTEXTFIT_NONE): SfxEnumItem(SDRATTR_TEXT_FITTOSIZE,(sal_uInt16)eFit) {} + SdrTextFitToSizeTypeItem(SvStream& rIn) : SfxEnumItem(SDRATTR_TEXT_FITTOSIZE,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; // { return 4; } + SdrFitToSizeType GetValue() const { return (SdrFitToSizeType)SfxEnumItem::GetValue(); } + + 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 OUString GetValueTextByPos(sal_uInt16 nPos) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; + virtual int HasBoolValue() const; + virtual sal_Bool GetBoolValue() const; + virtual void SetBoolValue(sal_Bool bVal); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdtmfitm.hxx b/include/svx/sdtmfitm.hxx new file mode 100644 index 000000000000..6e6ddff28136 --- /dev/null +++ b/include/svx/sdtmfitm.hxx @@ -0,0 +1,63 @@ +/* -*- 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 _SDTMFITM_HXX +#define _SDTMFITM_HXX + +#include <svx/sdmetitm.hxx> +#include <svx/svddef.hxx> + +//------------------------------ +// class SdrTextMinFrameHeighItem +//------------------------------ +class SdrTextMinFrameHeightItem: public SdrMetricItem { +public: + SdrTextMinFrameHeightItem(long nHgt=0): SdrMetricItem(SDRATTR_TEXT_MINFRAMEHEIGHT,nHgt) {} + SdrTextMinFrameHeightItem(SvStream& rIn): SdrMetricItem(SDRATTR_TEXT_MINFRAMEHEIGHT,rIn) {} +}; + +//------------------------------ +// class SdrTextMaxFrameHeightItem +//------------------------------ +class SdrTextMaxFrameHeightItem: public SdrMetricItem { +public: + SdrTextMaxFrameHeightItem(long nHgt=0): SdrMetricItem(SDRATTR_TEXT_MAXFRAMEHEIGHT,nHgt) {} + SdrTextMaxFrameHeightItem(SvStream& rIn): SdrMetricItem(SDRATTR_TEXT_MAXFRAMEHEIGHT,rIn) {} +}; + +//------------------------------ +// class SdrTextMinFrameWidthItem +//------------------------------ +class SdrTextMinFrameWidthItem: public SdrMetricItem { +public: + SdrTextMinFrameWidthItem(long nWdt=0): SdrMetricItem(SDRATTR_TEXT_MINFRAMEWIDTH,nWdt) {} + SdrTextMinFrameWidthItem(SvStream& rIn): SdrMetricItem(SDRATTR_TEXT_MINFRAMEWIDTH,rIn) {} +}; + +//------------------------------ +// class SdrTextMaxFrameWidthItem +//------------------------------ +class SdrTextMaxFrameWidthItem: public SdrMetricItem { +public: + SdrTextMaxFrameWidthItem(long nWdt=0): SdrMetricItem(SDRATTR_TEXT_MAXFRAMEWIDTH,nWdt) {} + SdrTextMaxFrameWidthItem(SvStream& rIn): SdrMetricItem(SDRATTR_TEXT_MAXFRAMEWIDTH,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sdynitm.hxx b/include/svx/sdynitm.hxx new file mode 100644 index 000000000000..387c3c40f725 --- /dev/null +++ b/include/svx/sdynitm.hxx @@ -0,0 +1,46 @@ +/* -*- 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 _SDYNITM_HXX +#define _SDYNITM_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + + +//------------------------------------------------------------ +// class SdrYesNoItem +// GetValueTextByVal() returns "yes" or "no" +// instead of "TRUE" and "FALSE" +//-------------------------------------------------- ---------- +class SVX_DLLPUBLIC SdrYesNoItem: public SfxBoolItem { +public: + TYPEINFO(); + SdrYesNoItem(): SfxBoolItem() {} + SdrYesNoItem(sal_uInt16 nId, sal_Bool bOn=sal_False): SfxBoolItem(nId,bOn) {} + SdrYesNoItem(sal_uInt16 nId, SvStream& rIn): SfxBoolItem(nId,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual OUString GetValueTextByVal(sal_Bool bVal) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/selctrl.hxx b/include/svx/selctrl.hxx new file mode 100644 index 000000000000..eff2675eb5f1 --- /dev/null +++ b/include/svx/selctrl.hxx @@ -0,0 +1,46 @@ +/* -*- 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 _SVX_SELCTRL_HXX +#define _SVX_SELCTRL_HXX + +#include <vcl/image.hxx> +#include <sfx2/stbitem.hxx> +#include <svx/svxdllapi.h> + +/// Status bar control that indicates or changes the selection mode (standard / block / etc.) +class SVX_DLLPUBLIC SvxSelectionModeControl : public SfxStatusBarControl +{ +public: + SFX_DECL_STATUSBAR_CONTROL(); + + SvxSelectionModeControl( sal_uInt16 nSlotId, sal_uInt16 nId, StatusBar& rStb ); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual sal_Bool MouseButtonDown( const MouseEvent& rEvt ); + virtual void Paint( const UserDrawEvent& rEvt ); + +private: + sal_uInt16 mnState; + Image maImage; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/selectioncontroller.hxx b/include/svx/selectioncontroller.hxx new file mode 100644 index 000000000000..e65bbe4b5e74 --- /dev/null +++ b/include/svx/selectioncontroller.hxx @@ -0,0 +1,79 @@ +/* -*- 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 _SELECTIONCONTROLLER_HXX +#define _SELECTIONCONTROLLER_HXX + +#include "svx/svxdllapi.h" + +#include <boost/shared_ptr.hpp> + +#include <cppuhelper/weak.hxx> + +class KeyEvent; +class MouseEvent; +class Window; +class SfxItemSet; +class SfxRequest; +class SfxStyleSheet; +class SdrPage; +class SdrModel; + +namespace sdr +{ + +class SVX_DLLPUBLIC SelectionController: public cppu::OWeakObject +{ +public: + virtual bool onKeyInput(const KeyEvent& rKEvt, Window* pWin); + virtual bool onMouseButtonDown(const MouseEvent& rMEvt, Window* pWin); + virtual bool onMouseButtonUp(const MouseEvent& rMEvt, Window* pWin); + virtual bool onMouseMove(const MouseEvent& rMEvt, Window* pWin); + + virtual void onSelectionHasChanged(); + + virtual void GetState( SfxItemSet& rSet ); + virtual void Execute( SfxRequest& rReq ); + + virtual bool DeleteMarked(); + + virtual bool GetAttributes(SfxItemSet& rTargetSet, bool bOnlyHardAttr) const; + virtual bool SetAttributes(const SfxItemSet& rSet, bool bReplaceAll); + + virtual bool GetStyleSheet( SfxStyleSheet* &rpStyleSheet ) const; + virtual bool SetStyleSheet( SfxStyleSheet* pStyleSheet, bool bDontRemoveHardAttr ); + + virtual bool GetMarkedObjModel( SdrPage* pNewPage ); + virtual bool PasteObjModel( const SdrModel& rModel ); + + /** returns a format paint brush set from the current selection */ + virtual bool TakeFormatPaintBrush( boost::shared_ptr< SfxItemSet >& rFormatSet ); + + /** applies a format paint brush set from the current selection. + if bNoCharacterFormats is true, no character attributes are changed. + if bNoParagraphFormats is true, no paragraph attributes are changed. + */ + virtual bool ApplyFormatPaintBrush( SfxItemSet& rFormatSet, bool bNoCharacterFormats, bool bNoParagraphFormats ); +}; + +} + +#endif //_SELECTIONCONTROLLER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/shapeproperty.hxx b/include/svx/shapeproperty.hxx new file mode 100644 index 000000000000..d46b6278b749 --- /dev/null +++ b/include/svx/shapeproperty.hxx @@ -0,0 +1,51 @@ +/* -*- 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 SVX_SHAPEPROPERTY_HXX +#define SVX_SHAPEPROPERTY_HXX + +//........................................................................ +namespace svx +{ +//........................................................................ + + //==================================================================== + //= ShapeProperty + //==================================================================== + enum ShapeProperty + { + // generic (UNO) shape properties + eShapePosition, + eShapeSize, + // text doc shape properties + eTextShapeAnchorType, + // spreadsheet doc shape properties + eSpreadsheetAnchor, + + // invalid, not to be used + eInvalidShapeProperty + }; + +//........................................................................ +} // namespace svx +//........................................................................ + +#endif // SVX_SHAPEPROPERTY_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/shapepropertynotifier.hxx b/include/svx/shapepropertynotifier.hxx new file mode 100644 index 000000000000..e16c23089658 --- /dev/null +++ b/include/svx/shapepropertynotifier.hxx @@ -0,0 +1,141 @@ +/* -*- 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 SVX_PROPERTYCHANGENOTIFIER_HXX +#define SVX_PROPERTYCHANGENOTIFIER_HXX + +#include "svx/svxdllapi.h" +#include "svx/shapeproperty.hxx" + +#include <com/sun/star/beans/PropertyChangeEvent.hpp> +#include <com/sun/star/beans/XPropertyChangeListener.hpp> + +#include <boost/noncopyable.hpp> +#include <boost/shared_ptr.hpp> +#include <memory> + +namespace cppu +{ + class OWeakObject; +} + +//........................................................................ +namespace svx +{ +//........................................................................ + + //==================================================================== + //= IPropertyValueProvider + //==================================================================== + /** a provider for a property value + */ + class SVX_DLLPUBLIC IPropertyValueProvider + { + public: + /** returns the name of the property which this provider is responsible for + */ + virtual OUString getPropertyName() const = 0; + + /** returns the current value of the property which the provider is responsible for + */ + virtual void getCurrentValue( ::com::sun::star::uno::Any& _out_rValue ) const = 0; + + virtual ~IPropertyValueProvider(); + }; + typedef ::boost::shared_ptr< IPropertyValueProvider > PPropertyValueProvider; + + //==================================================================== + //= PropertyValueProvider + //==================================================================== + /** default implementation of a IPropertyValueProvider + + This default implementation queries the object which it is constructed with for the XPropertySet interface, + and calls the getPropertyValue method. + */ + class SVX_DLLPUBLIC PropertyValueProvider :public IPropertyValueProvider + ,public ::boost::noncopyable + { + public: + PropertyValueProvider( ::cppu::OWeakObject& _rContext, const sal_Char* _pAsciiPropertyName ) + :m_rContext( _rContext ) + ,m_sPropertyName( OUString::createFromAscii( _pAsciiPropertyName ) ) + { + } + + virtual OUString getPropertyName() const; + virtual void getCurrentValue( ::com::sun::star::uno::Any& _out_rValue ) const; + + protected: + ::cppu::OWeakObject& getContext() const { return m_rContext; } + private: + ::cppu::OWeakObject& m_rContext; + const OUString m_sPropertyName; + }; + + //==================================================================== + //= PropertyChangeNotifier + //==================================================================== + struct PropertyChangeNotifier_Data; + + /** helper class for notifying XPropertyChangeListeners + + The class is intended to be held as member of the class which does the property change broadcasting. + */ + class SVX_DLLPUBLIC PropertyChangeNotifier : public ::boost::noncopyable + { + public: + /** constructs a notifier instance + + @param _rOwner + the owner instance of the notifier. Will be used as css.lang.EventObject.Source when + notifying events. + */ + PropertyChangeNotifier( ::cppu::OWeakObject& _rOwner, ::osl::Mutex& _rMutex ); + ~PropertyChangeNotifier(); + + // listener maintanance + void addPropertyChangeListener( const OUString& _rPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& _rxListener ); + void removePropertyChangeListener( const OUString& _rPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& _rxListener ); + + /** registers a IPropertyValueProvider + */ + void registerProvider( const ShapeProperty _eProperty, const PPropertyValueProvider _pProvider ); + + /** notifies changes in the given property to all registered listeners + + If no property value provider for the given property ID is registered, this is worth an assertion in a + non-product build, and otherwise ignored. + */ + void notifyPropertyChange( const ShapeProperty _eProperty ) const; + + /** is called to dispose the instance + */ + void disposing(); + + private: + ::std::auto_ptr< PropertyChangeNotifier_Data > m_pData; + }; + +//........................................................................ +} // namespace svx +//........................................................................ + +#endif // SVX_PROPERTYCHANGENOTIFIER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/simptabl.hxx b/include/svx/simptabl.hxx new file mode 100644 index 000000000000..8e448bc8b2c0 --- /dev/null +++ b/include/svx/simptabl.hxx @@ -0,0 +1,157 @@ +/* -*- 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 _SVX_SIMPTABL_HXX +#define _SVX_SIMPTABL_HXX + +#include <vcl/morebtn.hxx> + +#include <vcl/combobox.hxx> + +#include <vcl/group.hxx> +#include <svtools/headbar.hxx> +#include <svtools/svtabbx.hxx> +#include <vcl/lstbox.hxx> +#include "svx/svxdllapi.h" + +class SvxSimpleTable; +class SVX_DLLPUBLIC SvxSimpleTableContainer : public Control +{ +private: + SvxSimpleTable* m_pTable; + +protected: + virtual long PreNotify( NotifyEvent& rNEvt ); + +public: + SvxSimpleTableContainer( Window* pParent, const ResId& rResId ); + SvxSimpleTableContainer( Window* pParent, WinBits nBits = WB_BORDER ); + + void SetTable(SvxSimpleTable* pTable); + + virtual void Resize(); + + virtual void GetFocus(); +}; + +class SVX_DLLPUBLIC SvxSimpleTable : public SvHeaderTabListBox +{ +private: + SvxSimpleTableContainer& m_rParentTableContainer; + + Link aHeaderBarClickLink; + Link aHeaderBarDblClickLink; + Link aCommandLink; + CommandEvent aCEvt; + HeaderBar aHeaderBar; + long nOldPos; + sal_uInt16 nHeaderItemId; + sal_Bool bResizeFlag; + sal_Bool bPaintFlag; + sal_Bool bSortDirection; + sal_uInt16 nSortCol; + + DECL_LINK( StartDragHdl, HeaderBar* ); + DECL_LINK( DragHdl, HeaderBar* ); + DECL_LINK( EndDragHdl, HeaderBar* ); + DECL_LINK( HeaderBarClick, HeaderBar* ); + DECL_LINK( HeaderBarDblClick, HeaderBar* ); + DECL_LINK( CompareHdl, SvSortData* ); + +protected: + + virtual void NotifyScrolled(); + + virtual void SetTabs(); + virtual void Paint( const Rectangle& rRect ); + + virtual void HBarClick(); + virtual void HBarDblClick(); + virtual void HBarStartDrag(); + virtual void HBarDrag(); + virtual void HBarEndDrag(); + + virtual void Command( const CommandEvent& rCEvt ); + + virtual StringCompare ColCompare(SvTreeListEntry*,SvTreeListEntry*); +public: + + SvxSimpleTable(SvxSimpleTableContainer& rParent, WinBits nBits = WB_BORDER); + ~SvxSimpleTable(); + + void UpdateViewSize(); + + void InsertHeaderEntry(const OUString& rText, + sal_uInt16 nCol=HEADERBAR_APPEND, + HeaderBarItemBits nBits = HIB_STDSTYLE); + + void SetTabs( long* pTabs, MapUnit = MAP_APPFONT ); + + void ClearHeader(); + + // to be removed all calls of the related methods are redirected to *Table() methods + using Window::Show; + using Window::Hide; + using Window::Enable; + using Window::Disable; + using Window::ToTop; + + void Show(); + void Hide(); + void Enable(); + void Disable(); + void ToTop(); + + // remove until this line + + void ShowTable(); + void HideTable(); + sal_Bool IsVisible() const; + + void EnableTable(); + void DisableTable(); + sal_Bool IsEnabled() const; + + sal_uInt16 GetSelectedCol(); + void SortByCol(sal_uInt16,sal_Bool bDir=sal_True); + sal_Bool GetSortDirection(){ return bSortDirection;} + sal_uInt16 GetSortedCol(){ return nSortCol;} + SvLBoxItem* GetEntryAtPos( SvTreeListEntry* pEntry, sal_uInt16 nPos ) const; + + CommandEvent GetCommandEvent()const; + inline sal_Bool IsFocusOnCellEnabled() const { return IsCellFocusEnabled(); } + + void SetCommandHdl( const Link& rLink ) { aCommandLink = rLink; } + const Link& GetCommandHdl() const { return aCommandLink; } + + void SetHeaderBarClickHdl( const Link& rLink ) { aHeaderBarClickLink = rLink; } + const Link& GetHeaderBarClickHdl() const { return aHeaderBarClickLink; } + + void SetHeaderBarDblClickHdl( const Link& rLink ) { aHeaderBarDblClickLink = rLink; } + const Link& GetHeaderBarDblClickHdl() const { return aHeaderBarDblClickLink; } + + void SetHeaderBarHelpId(const OString& rHelpId) {aHeaderBar.SetHelpId(rHelpId);} + + HeaderBar& GetTheHeaderBar() {return aHeaderBar;} +}; + + +#endif // _SVX_SIMPTABL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sphere3d.hxx b/include/svx/sphere3d.hxx new file mode 100644 index 000000000000..eb1bb7dfdb00 --- /dev/null +++ b/include/svx/sphere3d.hxx @@ -0,0 +1,80 @@ +/* -*- 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 _E3D_SPHERE3D_HXX +#define _E3D_SPHERE3D_HXX + +#include <svx/obj3d.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* Kugelobjekt mit Durchmesser r3DSize; Anzahl der Flaechen wird durch +|* die horizontale und vertikale Segmentanzahl vorgegeben +|* +\************************************************************************/ + +class SVX_DLLPUBLIC E3dSphereObj : public E3dCompoundObject +{ +private: + basegfx::B3DPoint aCenter; + basegfx::B3DVector aSize; + +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + void SetDefaultAttributes(E3dDefaultAttributes& rDefault); + +public: + TYPEINFO(); + E3dSphereObj(E3dDefaultAttributes& rDefault, const basegfx::B3DPoint& rCenter, const basegfx::B3DVector& r3DSize); + + // FG: This constructor is only called from MakeObject from the 3d-Objectfactory + // when a document with a sphere is loaded. This constructor does not call + // CreateSphere, or create any spheres. + E3dSphereObj(int dummy); + + // horizontal segments: + sal_uInt32 GetHorizontalSegments() const + { return ((const Svx3DHorizontalSegmentsItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_HORZ_SEGS)).GetValue(); } + + // VerticalSegments: + sal_uInt32 GetVerticalSegments() const + { return ((const Svx3DVerticalSegmentsItem&)GetObjectItemSet().Get(SDRATTR_3DOBJ_VERT_SEGS)).GetValue(); } + + virtual sal_uInt16 GetObjIdentifier() const; + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + + virtual E3dSphereObj* Clone() const; + + const basegfx::B3DPoint& Center() const { return aCenter; } + const basegfx::B3DVector& Size() const { return aSize; } + + // set local parameters when the geometry is recreated + void SetCenter(const basegfx::B3DPoint& rNew); + void SetSize(const basegfx::B3DVector& rNew); + + // TakeObjName...() is for displaying in the UI, eg "3 selected frames." + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; +}; + +#endif // _E3D_SPHERE3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/srchdlg.hxx b/include/svx/srchdlg.hxx new file mode 100644 index 000000000000..9282e3e8cc7e --- /dev/null +++ b/include/svx/srchdlg.hxx @@ -0,0 +1,282 @@ +/* -*- 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 _SVX_SRCHDLG_HXX +#define _SVX_SRCHDLG_HXX + +#include <svtools/stdctrl.hxx> +#include <vcl/combobox.hxx> +#include <vcl/edit.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/button.hxx> +#include <vcl/group.hxx> +#include <vcl/fixed.hxx> +#include <vcl/dialog.hxx> +#include <sfx2/childwin.hxx> +#include <sfx2/basedlgs.hxx> +#include <svtools/svmedit.hxx> +#include <svl/srchdefs.hxx> +#include "svx/svxdllapi.h" +#include <vector> + +class SvxSearchItem; +class MoreButton; +class SfxStyleSheetBasePool; +class SvxJSearchOptionsPage; +class SvxSearchController; + +struct SearchDlg_Impl; + +#ifndef NO_SVX_SEARCH + +// struct SearchAttrItem ------------------------------------------------- + +struct SearchAttrItem +{ + sal_uInt16 nSlot; + SfxPoolItem* pItem; +}; + +// class SearchAttrItemList ---------------------------------------------- + +typedef std::vector<SearchAttrItem> SrchAttrItemList; + +class SVX_DLLPUBLIC SearchAttrItemList : private SrchAttrItemList +{ +public: + SearchAttrItemList() {} + SearchAttrItemList( const SearchAttrItemList& rList ); + ~SearchAttrItemList(); + + void Put( const SfxItemSet& rSet ); + SfxItemSet& Get( SfxItemSet& rSet ); + void Clear(); + sal_uInt16 Count() const { return SrchAttrItemList::size(); } + SearchAttrItem& operator[](sal_uInt16 nPos) + { return SrchAttrItemList::operator[]( nPos ); } + SearchAttrItem& GetObject( sal_uInt16 nPos ) + { return SrchAttrItemList::operator[]( nPos ); } + + // the pointer to the item is not being copied, so don't delete + void Insert( const SearchAttrItem& rItem ) + { SrchAttrItemList::push_back( rItem ); } + // deletes the pointer to the items + void Remove(size_t nPos, size_t nLen = 1); +}; + +#ifndef SV_NODIALOG + +// class SvxSearchDialogWrapper ------------------------------------------ + +class SvxSearchDialog; +class SVX_DLLPUBLIC SvxSearchDialogWrapper : public SfxChildWindow +{ + SvxSearchDialog *dialog; +public: + SvxSearchDialogWrapper( Window*pParent, sal_uInt16 nId, + SfxBindings* pBindings, SfxChildWinInfo* pInfo ); + + ~SvxSearchDialogWrapper (); + SvxSearchDialog *getDialog (); + SFX_DECL_CHILDWINDOW_WITHID(SvxSearchDialogWrapper); +}; + +// class SvxSearchDialog ------------------------------------------------- + +/* + {k:\svx\prototyp\dialog\svx/srchdlg.hxx} + + [Description] + In this modeless dialog the attributes for a search are configured + and a search is started from it. Several search types + (search, search all, replace, replace all) are possible. + + [Items] + <SvxSearchItem><SID_ATTR_SEARCH> +*/ + +class SvxSearchDialog : public SfxModelessDialog +{ +friend class SvxSearchController; +friend class SvxSearchDialogWrapper; +friend class SvxJSearchOptionsDialog; + +public: + SvxSearchDialog( Window* pParent, SfxChildWindow* pChildWin, SfxBindings& rBind ); + ~SvxSearchDialog(); + + virtual sal_Bool Close(); + + // Window + virtual void Activate(); + + const SearchAttrItemList* GetSearchItemList() const + { return pSearchList; } + const SearchAttrItemList* GetReplaceItemList() const + { return pReplaceList; } + + inline sal_Bool HasSearchAttributes() const; + inline sal_Bool HasReplaceAttributes() const; + + PushButton& GetReplaceBtn() { return aReplaceBtn; } + + sal_Int32 GetTransliterationFlags() const; + + void SetSaveToModule(bool b); + +private: + FixedText aSearchText; + ComboBox aSearchLB; + ListBox aSearchTmplLB; + FixedInfo aSearchAttrText; + + FixedText aReplaceText; + ComboBox aReplaceLB; + ListBox aReplaceTmplLB; + FixedInfo aReplaceAttrText; + + PushButton aSearchBtn; + PushButton aSearchAllBtn; + FixedLine aSearchCmdLine; + PushButton aReplaceBtn; + PushButton aReplaceAllBtn; + + FixedLine aSearchComponentFL; + PushButton aSearchComponent1PB; + PushButton aSearchComponent2PB; + + CheckBox aMatchCaseCB; + CheckBox aWordBtn; + + FixedLine aButtonsFL; + MoreButton* pMoreBtn; + HelpButton aHelpBtn; + CancelButton aCloseBtn; + + FixedLine aOptionsFL; + CheckBox aSelectionBtn; + CheckBox aBackwardsBtn; + CheckBox aRegExpBtn; + CheckBox aSimilarityBox; + PushButton aSimilarityBtn; + CheckBox aLayoutBtn; + CheckBox aNotesBtn; + CheckBox aJapMatchFullHalfWidthCB; + CheckBox aJapOptionsCB; + PushButton aJapOptionsBtn; + + PushButton aAttributeBtn; + PushButton aFormatBtn; + PushButton aNoFormatBtn; + + FixedLine aCalcFL; + FixedText aCalcSearchInFT; + ListBox aCalcSearchInLB; + FixedText aCalcSearchDirFT; + RadioButton aRowsBtn; + RadioButton aColumnsBtn; + CheckBox aAllSheetsCB; + + SfxBindings& rBindings; + sal_Bool bWriter; + sal_Bool bSearch; + sal_Bool bFormat; + sal_uInt16 nOptions; + bool bSet; + bool bReadOnly; + bool bConstruct; + sal_uIntPtr nModifyFlag; + String aStylesStr; + String aLayoutStr; + String aLayoutWriterStr; + String aLayoutCalcStr; + String aCalcStr; + + std::vector<OUString> aSearchStrings; + std::vector<OUString> aReplaceStrings; + + SearchDlg_Impl* pImpl; + SearchAttrItemList* pSearchList; + SearchAttrItemList* pReplaceList; + SvxSearchItem* pSearchItem; + + SvxSearchController* pSearchController; + SvxSearchController* pOptionsController; + SvxSearchController* pFamilyController; + SvxSearchController* pSearchSetController; + SvxSearchController* pReplaceSetController; + + mutable sal_Int32 nTransliterationFlags; + +#ifdef _SVX_SRCHDLG_CXX + DECL_LINK( ModifyHdl_Impl, ComboBox* pEdit ); + DECL_LINK( FlagHdl_Impl, Control* pCtrl ); + DECL_LINK( CommandHdl_Impl, Button* pBtn ); + DECL_LINK(TemplateHdl_Impl, void *); + DECL_LINK( FocusHdl_Impl, Control* ); + DECL_LINK(LoseFocusHdl_Impl, void *); + DECL_LINK(FormatHdl_Impl, void *); + DECL_LINK(NoFormatHdl_Impl, void *); + DECL_LINK(AttributeHdl_Impl, void *); + DECL_LINK( TimeoutHdl_Impl, Timer* ); + + void Construct_Impl(); + void InitControls_Impl(); + void CalculateDelta_Impl(); + void Init_Impl( int bHasItemSet ); + void InitAttrList_Impl( const SfxItemSet* pSSet, + const SfxItemSet* pRSet ); + void Remember_Impl( const String &rStr,sal_Bool bSearch ); + void PaintAttrText_Impl(); + String& BuildAttrText_Impl( String& rStr, sal_Bool bSrchFlag ) const; + + void TemplatesChanged_Impl( SfxStyleSheetBasePool& rPool ); + void EnableControls_Impl( const sal_uInt16 nFlags ); + void EnableControl_Impl( Control* pCtrl ); + void SetItem_Impl( const SvxSearchItem* pItem ); + + void SetModifyFlag_Impl( const Control* pCtrl ); + void SaveToModule_Impl(); + + void ApplyTransliterationFlags_Impl( sal_Int32 nSettings ); +#endif +}; + +inline sal_Bool SvxSearchDialog::HasSearchAttributes() const +{ + sal_Bool bLen = !aSearchAttrText.GetText().isEmpty(); + return ( aSearchAttrText.IsEnabled() && bLen ); +} + +inline sal_Bool SvxSearchDialog::HasReplaceAttributes() const +{ + sal_Bool bLen = !aReplaceAttrText.GetText().isEmpty(); + return ( aReplaceAttrText.IsEnabled() && bLen ); +} + + +////////////////////////////////////////////////////////////////////// + + +#endif // SV_NODIALOG +#endif // NO_SVX_SEARCH + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/stddlg.hxx b/include/svx/stddlg.hxx new file mode 100644 index 000000000000..8f65c17a8781 --- /dev/null +++ b/include/svx/stddlg.hxx @@ -0,0 +1,43 @@ +/* -*- 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 _SVX_STDDLG_HXX +#define _SVX_STDDLG_HXX + +#include <sfx2/basedlgs.hxx> +#include "svx/svxdllapi.h" + +// class SvxStandardDialog ----------------------------------------------- + +class SVX_DLLPUBLIC SvxStandardDialog: public SfxModalDialog +{ +public: + SvxStandardDialog( Window* pParent, const ResId& rResId ); + SvxStandardDialog( Window* pParent, const OString& rID, const OUString& rUIXMLDescription ); + ~SvxStandardDialog(); + + short Execute(); + +protected: + virtual void Apply() = 0; // pure virtual!!! +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/strarray.hxx b/include/svx/strarray.hxx new file mode 100644 index 000000000000..9599ae3f3fc4 --- /dev/null +++ b/include/svx/strarray.hxx @@ -0,0 +1,40 @@ +/* -*- 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 _SVX_STRARRAY_HXX +#define _SVX_STRARRAY_HXX + +#include <tools/resary.hxx> +#include "svx/svxdllapi.h" + +// class SvxStringArray ------------------------------------------------- + +class SVX_DLLPUBLIC SvxStringArray : public ResStringArray +{ +public: + SvxStringArray( sal_uInt32 nResId ); + SvxStringArray( const ResId& rResId ); + ~SvxStringArray(); + + const OUString GetStringByPos( sal_uInt32 nPos ) const; +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/subtoolboxcontrol.hxx b/include/svx/subtoolboxcontrol.hxx new file mode 100644 index 000000000000..f3f1bb52cf04 --- /dev/null +++ b/include/svx/subtoolboxcontrol.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SVX_SUBTOOLBOXCONTROL_HXX +#define _SVX_SUBTOOLBOXCONTROL_HXX + +#include "svx/svxdllapi.h" +#include <sfx2/tbxctrl.hxx> + +//---------------------------------------------------------------------------- +// +//---------------------------------------------------------------------------- + +class SVX_DLLPUBLIC SvxSubToolBoxControl : public SfxToolBoxControl +{ + +public: + SFX_DECL_TOOLBOX_CONTROL(); + + SvxSubToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxSubToolBoxControl(); + + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); +}; + +// +//---------------------------------------------------------------------------- + +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdattr.hxx b/include/svx/svdattr.hxx new file mode 100644 index 000000000000..dbe29bb9a874 --- /dev/null +++ b/include/svx/svdattr.hxx @@ -0,0 +1,57 @@ +/* -*- 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 _SVDATTR_HXX +#define _SVDATTR_HXX + +#include <svl/solar.hrc> +#include <tools/solar.h> +#include <svx/sdangitm.hxx> +#include <svx/sderitm.hxx> +#include <svx/sdmetitm.hxx> +#include <svx/sdooitm.hxx> +#include <svx/sdprcitm.hxx> +#include <svx/sdshcitm.hxx> +#include <svx/sdshitm.hxx> +#include <svx/sdshtitm.hxx> +#include <svx/sdsxyitm.hxx> +#include <svx/sdtaaitm.hxx> +#include <svx/sdtacitm.hxx> +#include <svx/sdtaditm.hxx> +#include <svx/sdtagitm.hxx> +#include <svx/sdtaiitm.hxx> +#include <svx/sdtaitm.hxx> +#include <svx/sdtakitm.hxx> +#include <svx/sdtayitm.hxx> +#include <svx/sdtcfitm.hxx> +#include <svx/sdtditm.hxx> +#include <svx/sdtfsitm.hxx> +#include <svx/sdtmfitm.hxx> +#include <svx/sdynitm.hxx> +#include <svx/sdgluitm.hxx> +#include <svx/sdginitm.hxx> +#include <svx/sdgtritm.hxx> +#include <svx/sdgcoitm.hxx> +#include <svx/sdggaitm.hxx> +#include <svx/sdasitm.hxx> +#include <svx/sdgmoitm.hxx> +#include <svx/sdasaitm.hxx> +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdattrx.hxx b/include/svx/svdattrx.hxx new file mode 100644 index 000000000000..ca1aa00c4292 --- /dev/null +++ b/include/svx/svdattrx.hxx @@ -0,0 +1,71 @@ +/* -*- 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 _SVDATTRX_HXX +#define _SVDATTRX_HXX + +#include <svx/sxmlhitm.hxx> +#include <svx/sxallitm.hxx> +#include <svx/sxcaitm.hxx> +#include <svx/sxcecitm.hxx> + +#include <svx/sxcgitm.hxx> +#include <svx/sxciaitm.hxx> +#include <svx/sxcikitm.hxx> +#include <svx/sxcllitm.hxx> +#include <svx/sxctitm.hxx> +#include <svx/sxekitm.hxx> +#include <svx/sxelditm.hxx> +#include <svx/sxenditm.hxx> + +#include <svx/sxfiitm.hxx> + +#include <svx/sxlayitm.hxx> +#include <svx/sxlogitm.hxx> +#include <svx/sxmbritm.hxx> +#include <svx/sxmfsitm.hxx> +#include <svx/sxmkitm.hxx> +#include <svx/sxmoitm.hxx> +#include <svx/sxmovitm.hxx> + +#include <svx/sxmsitm.hxx> +#include <svx/sxmspitm.hxx> +#include <svx/sxmsuitm.hxx> +#include <svx/sxmtaitm.hxx> +#include <svx/sxmtfitm.hxx> +#include <svx/sxmtpitm.hxx> +#include <svx/sxmtritm.hxx> +#include <svx/sxmuitm.hxx> +#include <svx/sxoneitm.hxx> +#include <svx/sxonitm.hxx> +#include <svx/sxopitm.hxx> +#include <svx/sxraitm.hxx> +#include <svx/sxreaitm.hxx> +#include <svx/sxreoitm.hxx> +#include <svx/sxroaitm.hxx> +#include <svx/sxrooitm.hxx> +#include <svx/sxsaitm.hxx> +#include <svx/sxsalitm.hxx> +#include <svx/sxsiitm.hxx> +#include <svx/sxsoitm.hxx> +#include <svx/sxtraitm.hxx> + +#endif //_SVDATTRX_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdcrtv.hxx b/include/svx/svdcrtv.hxx new file mode 100644 index 000000000000..9a95ba1d377d --- /dev/null +++ b/include/svx/svdcrtv.hxx @@ -0,0 +1,200 @@ +/* -*- 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 _SVDCRTV_HXX +#define _SVDCRTV_HXX + +#include <svx/svddrgv.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class XLineAttrSetItem; +class XFillAttrSetItem; +class SdrEdgeObj; +class SdrObjConnection; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@@@ @@@@@ @@@@@ @@@@ @@@@@@ @@@@@ @@ @@ @@ @@@@@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @ @@ +// @@ @@@@@ @@@@ @@@@@@ @@ @@@@ @@@@@ @@ @@@@ @@@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@ @@@ +// @@@@ @@ @@ @@@@@ @@ @@ @@ @@@@@ @ @@ @@@@@ @@ @@ +// +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +class ImplConnectMarkerOverlay; +class ImpSdrCreateViewExtraData; + +class SVX_DLLPUBLIC SdrCreateView: public SdrDragView +{ + friend class SdrPageView; + +protected: + SdrObject* pAktCreate; // Currently in creation of the located object + SdrPageView* pCreatePV; // Here, the creation is started + ImplConnectMarkerOverlay* mpCoMaOverlay; + + // for migrating stuff from XOR, use ImpSdrCreateViewExtraData ATM to not need to + // compile the apps all the time + ImpSdrCreateViewExtraData* mpCreateViewExtraData; + + Pointer aAktCreatePointer; + + sal_Int32 nAutoCloseDistPix; + sal_Int32 nFreeHandMinDistPix; + sal_uInt32 nAktInvent; // set the current ones + sal_uInt16 nAktIdent; // Obj for re-creating + + unsigned bAutoTextEdit : 1; // Textedit after we start the creation of a text frame + unsigned b1stPointAsCenter : 1; + unsigned bUseIncompatiblePathCreateInterface : 1; + unsigned bAutoClosePolys : 1; + + void ImpClearConnectMarker(); + +private: + SVX_DLLPRIVATE void ImpClearVars(); + +protected: + sal_Bool ImpBegCreateObj(sal_uInt32 nInvent, sal_uInt16 nIdent, const Point& rPnt, OutputDevice* pOut, + sal_Int16 nMinMov, SdrPageView* pPV, const Rectangle& rLogRect, SdrObject* pPreparedFactoryObject); + + void ShowCreateObj(/*OutputDevice* pOut, sal_Bool bFull*/); + void HideCreateObj(/*OutputDevice* pOut, sal_Bool bFull*/); + sal_Bool CheckEdgeMode(); + +protected: + // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView + SdrCreateView(SdrModel* pModel1, OutputDevice* pOut = 0L); + virtual ~SdrCreateView(); + +public: + virtual sal_Bool IsAction() const; + virtual void MovAction(const Point& rPnt); + virtual void EndAction(); + virtual void BckAction(); + virtual void BrkAction(); + virtual void TakeActionRect(Rectangle& rRect) const; + + virtual sal_Bool MouseMove(const MouseEvent& rMEvt, Window* pWin); + + void SetActiveLayer(const String& rName) { aAktLayer=rName; } + const String& GetActiveLayer() const { return aAktLayer; } + void SetMeasureLayer(const String& rName) { aMeasureLayer=rName; } + const String& GetMeasureLayer() const { return aMeasureLayer; } + + // If the MeasureLayer is not set (empty string), then + // use the active layer for measuring. + void SetEditMode(SdrViewEditMode eMode) { SdrDragView::SetEditMode(eMode); CheckEdgeMode(); } + void SetEditMode(sal_Bool bOn=sal_True) { SdrDragView::SetEditMode(bOn); CheckEdgeMode(); } + void SetCreateMode(sal_Bool bOn=sal_True) { SdrDragView::SetCreateMode(bOn); CheckEdgeMode(); } + void SetGluePointEditMode(sal_Bool bOn=sal_True) { SdrDragView::SetGluePointEditMode(bOn); CheckEdgeMode(); } + + // Determine whether a text tool is activated + bool IsTextTool() const; + + // Determine whether an object connector tool activated + bool IsEdgeTool() const; + + // Determine whether a measurement tool activated + bool IsMeasureTool() const; + + void SetCurrentObj(sal_uInt16 nIdent, sal_uInt32 nInvent=SdrInventor); + void TakeCurrentObj(sal_uInt16& nIdent, sal_uInt32& nInvent) const { nInvent=nAktInvent; nIdent=nAktIdent; } + sal_uInt32 GetCurrentObjInventor() const { return nAktInvent; } + sal_uInt16 GetCurrentObjIdentifier() const { return nAktIdent; } + + // Starten des normalen Create + sal_Bool BegCreateObj(const Point& rPnt, OutputDevice* pOut=NULL, short nMinMov=-3, SdrPageView* pPV=NULL); + sal_Bool BegCreatePreparedObject(const Point& rPnt, sal_Int16 nMinMov, SdrObject* pPreparedFactoryObject); + void MovCreateObj(const Point& rPnt); + sal_Bool EndCreateObj(SdrCreateCmd eCmd); + void BckCreateObj(); // go back one polygon point + void BrkCreateObj(); + sal_Bool IsCreateObj() const { return pAktCreate!=NULL; } + SdrObject* GetCreateObj() const { return pAktCreate; } + + // BegCreateCaptionObj() creates a SdrCaptionObj (legend item). + // rObjSiz is the initial size of the legend text frame. + // only the length of the tip is dragged + sal_Bool BegCreateCaptionObj(const Point& rPnt, const Size& rObjSiz, OutputDevice* pOut=NULL, short nMinMov=-3, SdrPageView* pPV=NULL); + + // If TextEditAfterCreate is sal_True (the default), + // then after the creation of a TextFrame object (OBJ_TEXT, + // OBJ_TEXTEXT, OBJ_OUTLINERTEXT, OBJ_TITLETEXT, OBJ_CAPTION) + // automatically start a TextEdit (SdrObjEditView: SdrBeginTextEdit) + sal_Bool IsTextEditAfterCreate() const { return bAutoTextEdit; } + void SetTextEditAfterCreate(sal_Bool bOn) { bAutoTextEdit = bOn; } + + // Create a circle / rectangle / text frame with the first Point being + // the center of the object instead of the upper-left corner. + // Persistent flag. Default = FALSE. + sal_Bool IsCreate1stPointAsCenter() const { return b1stPointAsCenter; } + void SetCreate1stPointAsCenter(sal_Bool bOn) { b1stPointAsCenter = bOn; } + + // For polylines (OBJ_PLIN) and freehand lines (OBJ_FREELINE). If this + // Flag is sal_True, these two types of objects are implicitly closed, and + // converted to Polygon (OBJ_POLY) or freehand fill (OBJ_FREEFILL) if + // the distance between the start point and end point of the + // Object <= nAutoCloseDistPix pixels. + // Default is TRUE. + sal_Bool IsAutoClosePolys() const { return bAutoClosePolys; } + void SetAutoClosePolys(sal_Bool bOn) { bAutoClosePolys=bOn; } + + // Default=5 Pixel. + sal_uInt16 GetAutoCloseDistPix() const { return sal_uInt16(nAutoCloseDistPix); } + void SetAutoCloseDistPix(sal_uInt16 nVal) { nAutoCloseDistPix=nVal; } + + // Vorgabe des minimalen Pixelabstands zwischen 2 Bezierpunkten bei der + // Erzeugung einer Freihandlinie. + // Default=10 Pixel. + sal_uInt16 GetFreeHandMinDistPix() const { return sal_uInt16(nFreeHandMinDistPix); } + void SetFreeHandMinDistPix(sal_uInt16 nVal) { nFreeHandMinDistPix=nVal; } + + // Wer das (zur restlichen Create-Funktionalitaet von SvDraw) inkompatible + // Create-Interface am PathObj beibehalten moechte muss das nachfolgende + // Flag setzen. Dieses wirkt sich aus bei den Objekttypen: + // OBJ_POLY, OBJ_PLIN, OBJ_PATHLINE, OBJ_PATHFILL + // Dieses Flag hat nur voruebergehenden Character. Die betroffenen + // Applikationen sollten alsbald umgestellt werden. + // Default=sal_False; + sal_Bool IsUseIncompatiblePathCreateInterface() const { return bUseIncompatiblePathCreateInterface; } + void SetUseIncompatiblePathCreateInterface(sal_Bool bOn) { bUseIncompatiblePathCreateInterface = bOn; } + void SetConnectMarker(const SdrObjConnection& rCon, const SdrPageView& rPV); + void HideConnectMarker(); + + // Attribute des ggf. gerade in der Erzeugung befindlichen Objekts + /* new interface src537 */ + sal_Bool GetAttributes(SfxItemSet& rTargetSet, sal_Bool bOnlyHardAttr=sal_False) const; + + sal_Bool SetAttributes(const SfxItemSet& rSet, sal_Bool bReplaceAll); + SfxStyleSheet* GetStyleSheet() const; // SfxStyleSheet* GetStyleSheet(sal_Bool& rOk) const; + sal_Bool SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr); +}; + +#endif //_SVDCRTV_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svddef.hxx b/include/svx/svddef.hxx new file mode 100644 index 000000000000..af70697f5053 --- /dev/null +++ b/include/svx/svddef.hxx @@ -0,0 +1,306 @@ +/* -*- 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 _SVDDEF_HXX +#define _SVDDEF_HXX + +#include <svx/xdef.hxx> + +/*************************************************************************/ +// SdrItemPool V2, 09-11-1995: +// 7 neue Items fuer XLineAttrSetItem +// 7 neue Items fuer XFillAttrSetItem +// 8 neue Items fuer SdrShadowSetItem +// 5 neue Items fuer SdrCaptionSetItem +// 25 neue Items fuer SdrMiscSetItem +// 6 neue Items fuer SdrNotPersist +// SdrItemPool V3, 29-02-1996 +// 17 neue Items fuer XFillAttrSetItem (Bitmapfuellungen) (von KA) +// SdrItemPool V4, 10-08-1996 +// 45 neue Items fuer Edge und Measure (Verbinder und Bemassungsobjekt) (von Joe) +// SdrItemPool V4+, 18-10-1996 +// 8 neue Items fuer CircItems +// 18 neue Items fuer NotPersist+Umbau dort +// SdrItemPool V4++, 13-11-1996 +// 2 neue Items fuer NotPersist+(MoveX/Y) +// SdrItemPool V4+++, 07-06-1999 +// 15 neue Items fuer NotPersist (Reserve) +// 15 neue Items fuer GrafItems +// +// WhichMapping: +// V1 Range = 1000..1065 (66) +// V2 Range = 1000..1123 (124) (58 neue Whiches) +// V3 Range = 1000..1140 (141) (17 neue Whiches) +// V4 Range = 1000..1185 (186) (45 neue Whiches) +// Map V2: 10 6 20 4 11 6 9 +// V1: 1000..1009, 1010..1015, 1016..1035, 1036..1039, 1040..1050, 1051..1056 1057..1065 +// V2: 1000..1009, 1017..1022, 1030..1049, 1050..1053, 1062..1072, 1078..1083, 1109..1117, und hinten noch 6 neue dran +// |<------------ XOut ------------>| |<----------- SvDraw -----------> +// Map V3: +// V2: 1000..1029, 1030..1123 +// V3: 1000..1029, 1047..1140 +// Map V4: +// V3: 1000..1126, 1127..1140 +// V4: 1000..1126, 1172..1185 + +#define SDRATTR_START XATTR_START /* 1000 */ + /* Pool V4*/ /* Pool V3*/ /* Pool V2*/ +#define SDRATTR_SHADOW_FIRST (XATTR_END + 1) /* 1067 */ /* 1067 */ /* 1050 */ /* Pool V1: 1036 */ +#define SDRATTR_SHADOW (SDRATTR_SHADOW_FIRST+ 0) /* 1067 */ /* 1067 */ /* 1050 */ +#define SDRATTR_SHADOWCOLOR (SDRATTR_SHADOW_FIRST+ 1) /* 1068 */ /* 1068 */ /* 1051 */ +#define SDRATTR_SHADOWXDIST (SDRATTR_SHADOW_FIRST+ 2) /* 1069 */ /* 1069 */ /* 1052 */ +#define SDRATTR_SHADOWYDIST (SDRATTR_SHADOW_FIRST+ 3) /* 1070 */ /* 1070 */ /* 1053 */ +#define SDRATTR_SHADOWTRANSPARENCE (SDRATTR_SHADOW_FIRST+ 4) /* 1071 */ /* 1071 */ /* 1054 */ /* Pool V2 */ +#define SDRATTR_SHADOW3D (SDRATTR_SHADOW_FIRST+ 5) /* 1072 */ /* 1072 */ /* 1055 */ /* Pool V2 */ +#define SDRATTR_SHADOWPERSP (SDRATTR_SHADOW_FIRST+ 6) /* 1073 */ /* 1073 */ /* 1056 */ /* Pool V2 */ +#define SDRATTR_SHADOW_LAST (SDRATTR_SHADOWPERSP) /* 1078 */ /* 1078 */ /* 1061 */ /* Pool V1: 1039 */ + +#define SDRATTR_CAPTION_FIRST (SDRATTR_SHADOW_LAST + 1) /* 1080 */ /* 1080 */ /* 1063 */ /* Pool V1: 1041 */ +#define SDRATTR_CAPTIONTYPE (SDRATTR_CAPTION_FIRST+ 0) /* 1080 */ /* 1080 */ /* 1063 */ +#define SDRATTR_CAPTIONFIXEDANGLE (SDRATTR_CAPTION_FIRST+ 1) /* 1081 */ /* 1081 */ /* 1064 */ +#define SDRATTR_CAPTIONANGLE (SDRATTR_CAPTION_FIRST+ 2) /* 1082 */ /* 1082 */ /* 1065 */ +#define SDRATTR_CAPTIONGAP (SDRATTR_CAPTION_FIRST+ 3) /* 1083 */ /* 1083 */ /* 1066 */ +#define SDRATTR_CAPTIONESCDIR (SDRATTR_CAPTION_FIRST+ 4) /* 1084 */ /* 1084 */ /* 1067 */ +#define SDRATTR_CAPTIONESCISREL (SDRATTR_CAPTION_FIRST+ 5) /* 1085 */ /* 1085 */ /* 1068 */ +#define SDRATTR_CAPTIONESCREL (SDRATTR_CAPTION_FIRST+ 6) /* 1086 */ /* 1086 */ /* 1069 */ +#define SDRATTR_CAPTIONESCABS (SDRATTR_CAPTION_FIRST+ 7) /* 1087 */ /* 1087 */ /* 1070 */ +#define SDRATTR_CAPTIONLINELEN (SDRATTR_CAPTION_FIRST+ 8) /* 1088 */ /* 1088 */ /* 1071 */ +#define SDRATTR_CAPTIONFITLINELEN (SDRATTR_CAPTION_FIRST+ 9) /* 1089 */ /* 1089 */ /* 1072 */ +#define SDRATTR_CAPTION_LAST (SDRATTR_CAPTIONFITLINELEN) /* 1094 */ /* 1094 */ /* 1077 */ /* Pool V1: 1050 */ + +#define SDRATTR_MISC_FIRST (SDRATTR_CAPTION_LAST + 1) /* 1097 */ /* 1097 */ /* 1080 */ /* Pool V1: 1053 */ +#define SDRATTR_ECKENRADIUS (SDRATTR_MISC_FIRST + 0) /* 1097 */ /* 1097 */ /* 1080 long, def=0 */ +#define SDRATTR_TEXT_MINFRAMEHEIGHT (SDRATTR_MISC_FIRST + 1) /* 1098 */ /* 1098 */ /* 1081 long, def=0 */ +#define SDRATTR_TEXT_AUTOGROWHEIGHT (SDRATTR_MISC_FIRST + 2) /* 1099 */ /* 1099 */ /* 1082 sal_Bool, def=sal_True */ +#define SDRATTR_TEXT_FITTOSIZE (SDRATTR_MISC_FIRST + 3) /* 1100 */ /* 1100 */ /* 1083 enum, def=SDRTEXTFIT_NONE */ +#define SDRATTR_TEXT_LEFTDIST (SDRATTR_MISC_FIRST + 4) /* 1101 */ /* 1101 */ /* 1084 long, def=0 */ /* Pool V2 */ +#define SDRATTR_TEXT_RIGHTDIST (SDRATTR_MISC_FIRST + 5) /* 1102 */ /* 1102 */ /* 1085 long, def=0 */ /* Pool V2 */ +#define SDRATTR_TEXT_UPPERDIST (SDRATTR_MISC_FIRST + 6) /* 1103 */ /* 1103 */ /* 1086 long, def=0 */ /* Pool V2 */ +#define SDRATTR_TEXT_LOWERDIST (SDRATTR_MISC_FIRST + 7) /* 1104 */ /* 1104 */ /* 1087 long, def=0 */ /* Pool V2 */ +#define SDRATTR_TEXT_VERTADJUST (SDRATTR_MISC_FIRST + 8) /* 1105 */ /* 1105 */ /* 1088 enum, def=SDRTEXTVERTADJUST_TOP */ /* Pool V2 */ +#define SDRATTR_TEXT_MAXFRAMEHEIGHT (SDRATTR_MISC_FIRST + 9) /* 1106 */ /* 1106 */ /* 1089 long, def=0 - Pool V2 */ +#define SDRATTR_TEXT_MINFRAMEWIDTH (SDRATTR_MISC_FIRST +10) /* 1107 */ /* 1107 */ /* 1090 long, def=0 - Pool V2 */ +#define SDRATTR_TEXT_MAXFRAMEWIDTH (SDRATTR_MISC_FIRST +11) /* 1108 */ /* 1108 */ /* 1091 long, def=0 - Pool V2 */ +#define SDRATTR_TEXT_AUTOGROWWIDTH (SDRATTR_MISC_FIRST +12) /* 1109 */ /* 1109 */ /* 1092 sal_Bool, def=sal_False - Pool V2 */ +#define SDRATTR_TEXT_HORZADJUST (SDRATTR_MISC_FIRST +13) /* 1110 */ /* 1110 */ /* 1093 enum, def=SDRTEXTHORZADJUST_LEFT */ /* Pool V2+ (04-12-1995) */ +#define SDRATTR_TEXT_ANIKIND (SDRATTR_MISC_FIRST +14) /* 1111 */ /* 1111 */ /* 1094 enum, def=SDRTEXTANI_NONE - Pool V2/V4 */ +#define SDRATTR_TEXT_ANIDIRECTION (SDRATTR_MISC_FIRST +15) /* 1112 */ /* 1112 */ /* 1095 enum, def=SDRTEXTANI_LEFT - Pool V2/V4 */ +#define SDRATTR_TEXT_ANISTARTINSIDE (SDRATTR_MISC_FIRST +16) /* 1113 */ /* 1113 */ /* 1096 sal_Bool, def=sal_False - Pool V2/V4 */ +#define SDRATTR_TEXT_ANISTOPINSIDE (SDRATTR_MISC_FIRST +17) /* 1114 */ /* 1114 */ /* 1097 sal_Bool, def=sal_False - Pool V2/V4 */ +#define SDRATTR_TEXT_ANICOUNT (SDRATTR_MISC_FIRST +18) /* 1115 */ /* 1115 */ /* 1098 sal_uInt16, def=0 - Pool V2/V4 */ +#define SDRATTR_TEXT_ANIDELAY (SDRATTR_MISC_FIRST +19) /* 1116 */ /* 1116 */ /* 1099 sal_uInt16, def=0 - Pool V2/V4 */ +#define SDRATTR_TEXT_ANIAMOUNT (SDRATTR_MISC_FIRST +20) /* 1117 */ /* 1117 */ /* 1100 sal_uInt16, def=0 - Pool V2/V4 */ +#define SDRATTR_TEXT_CONTOURFRAME (SDRATTR_MISC_FIRST +21) /* 1118 */ /* 1118 */ /* 1101 */ /* Pool V2 */ +#define SDRATTR_CUSTOMSHAPE_ADJUSTMENT (SDRATTR_MISC_FIRST +22) /* 1119 */ /* 1119 */ /* 1102 */ /* Pool V2 */ +#define SDRATTR_XMLATTRIBUTES (SDRATTR_MISC_FIRST +23) /* 1120 */ /* 1120 */ /* 1103 */ /* Pool V2 */ +#define SDRATTR_TEXT_USEFIXEDCELLHEIGHT (SDRATTR_MISC_FIRST +24) /* 1121 */ /* 1121 */ /* 1104 */ /* Pool V2 */ +#define SDRATTR_TEXT_WORDWRAP (SDRATTR_MISC_FIRST +25) /* 1122 */ /* 1122 */ /* 1105 */ /* Pool V2 */ +#define SDRATTR_TEXT_AUTOGROWSIZE (SDRATTR_MISC_FIRST +26) /* 1123 */ /* 1123 */ /* 1106 */ /* Pool V2 */ +#define SDRATTR_MISC_LAST (SDRATTR_TEXT_AUTOGROWSIZE) /* 1125 */ /* 1125 */ /* 1108 */ /* Pool V1: 1056 */ + +#define SDRATTR_EDGE_FIRST (SDRATTR_MISC_LAST + 1) /* 1127 */ /* Pool V4 */ +#define SDRATTR_EDGEKIND (SDRATTR_EDGE_FIRST + 0) /* 1127 */ /* Pool V4 */ +#define SDRATTR_EDGENODE1HORZDIST (SDRATTR_EDGE_FIRST + 1) /* 1128 */ /* Pool V4 */ +#define SDRATTR_EDGENODE1VERTDIST (SDRATTR_EDGE_FIRST + 2) /* 1129 */ /* Pool V4 */ +#define SDRATTR_EDGENODE2HORZDIST (SDRATTR_EDGE_FIRST + 3) /* 1130 */ /* Pool V4 */ +#define SDRATTR_EDGENODE2VERTDIST (SDRATTR_EDGE_FIRST + 4) /* 1131 */ /* Pool V4 */ +#define SDRATTR_EDGENODE1GLUEDIST (SDRATTR_EDGE_FIRST + 5) /* 1132 */ /* Pool V4 */ +#define SDRATTR_EDGENODE2GLUEDIST (SDRATTR_EDGE_FIRST + 6) /* 1133 */ /* Pool V4 */ +#define SDRATTR_EDGELINEDELTAANZ (SDRATTR_EDGE_FIRST + 7) /* 1134 */ /* Pool V4 */ +#define SDRATTR_EDGELINE1DELTA (SDRATTR_EDGE_FIRST + 8) /* 1135 */ /* Pool V4 */ +#define SDRATTR_EDGELINE2DELTA (SDRATTR_EDGE_FIRST + 9) /* 1136 */ /* Pool V4 */ +#define SDRATTR_EDGELINE3DELTA (SDRATTR_EDGE_FIRST +10) /* 1137 */ /* Pool V4 */ +#define SDRATTR_EDGE_LAST (SDRATTR_EDGELINE3DELTA) /* 1145 */ /* Pool V4 */ + +#define SDRATTR_MEASURE_FIRST (SDRATTR_EDGE_LAST + 1) /* 1147 */ /* Pool V4 */ +#define SDRATTR_MEASUREKIND (SDRATTR_MEASURE_FIRST+ 0) /* 1147 */ /* Pool V4 */ +#define SDRATTR_MEASURETEXTHPOS (SDRATTR_MEASURE_FIRST+ 1) /* 1148 */ /* Pool V4 */ +#define SDRATTR_MEASURETEXTVPOS (SDRATTR_MEASURE_FIRST+ 2) /* 1149 */ /* Pool V4 */ +#define SDRATTR_MEASURELINEDIST (SDRATTR_MEASURE_FIRST+ 3) /* 1150 */ /* Pool V4 */ +#define SDRATTR_MEASUREHELPLINEOVERHANG (SDRATTR_MEASURE_FIRST+ 4) /* 1151 */ /* Pool V4 */ +#define SDRATTR_MEASUREHELPLINEDIST (SDRATTR_MEASURE_FIRST+ 5) /* 1152 */ /* Pool V4 */ +#define SDRATTR_MEASUREHELPLINE1LEN (SDRATTR_MEASURE_FIRST+ 6) /* 1153 */ /* Pool V4 */ +#define SDRATTR_MEASUREHELPLINE2LEN (SDRATTR_MEASURE_FIRST+ 7) /* 1154 */ /* Pool V4 */ +#define SDRATTR_MEASUREBELOWREFEDGE (SDRATTR_MEASURE_FIRST+ 8) /* 1155 */ /* Pool V4 */ +#define SDRATTR_MEASURETEXTROTA90 (SDRATTR_MEASURE_FIRST+ 9) /* 1156 */ /* Pool V4 */ +#define SDRATTR_MEASURETEXTUPSIDEDOWN (SDRATTR_MEASURE_FIRST+10) /* 1157 */ /* Pool V4 */ +#define SDRATTR_MEASUREOVERHANG (SDRATTR_MEASURE_FIRST+11) /* 1158 */ /* Pool V4 */ +#define SDRATTR_MEASUREUNIT (SDRATTR_MEASURE_FIRST+12) /* 1159 */ /* Pool V4 */ +#define SDRATTR_MEASURESCALE (SDRATTR_MEASURE_FIRST+13) /* 1160 */ /* Pool V4 */ +#define SDRATTR_MEASURESHOWUNIT (SDRATTR_MEASURE_FIRST+14) /* 1161 */ /* Pool V4 */ +#define SDRATTR_MEASUREFORMATSTRING (SDRATTR_MEASURE_FIRST+15) /* 1162 */ /* Pool V4 */ +#define SDRATTR_MEASURETEXTAUTOANGLE (SDRATTR_MEASURE_FIRST+16) /* 1163 */ /* Pool V4, Nachtrag 25-9-1996 */ +#define SDRATTR_MEASURETEXTAUTOANGLEVIEW (SDRATTR_MEASURE_FIRST+17) /* 1164 */ /* Pool V4, Nachtrag 25-9-1996 */ +#define SDRATTR_MEASURETEXTISFIXEDANGLE (SDRATTR_MEASURE_FIRST+18) /* 1165 */ /* Pool V4, Nachtrag 25-9-1996 */ +#define SDRATTR_MEASURETEXTFIXEDANGLE (SDRATTR_MEASURE_FIRST+19) /* 1166 */ /* Pool V4, Nachtrag 25-9-1996 */ +#define SDRATTR_MEASUREDECIMALPLACES (SDRATTR_MEASURE_FIRST+20) /* 1167 */ /* Pool V4 */ +#define SDRATTR_MEASURE_LAST (SDRATTR_MEASUREDECIMALPLACES) /* 1170 */ /* Pool V4 */ + +#define SDRATTR_CIRC_FIRST (SDRATTR_MEASURE_LAST+ 1) /* 1172 */ /* Pool V4+ */ +#define SDRATTR_CIRCKIND (SDRATTR_CIRC_FIRST+ 0) /* 1172 */ /* Pool V4+ */ +#define SDRATTR_CIRCSTARTANGLE (SDRATTR_CIRC_FIRST+ 1) /* 1173 */ /* Pool V4+ */ +#define SDRATTR_CIRCENDANGLE (SDRATTR_CIRC_FIRST+ 2) /* 1174 */ /* Pool V4+ */ +#define SDRATTR_CIRC_LAST (SDRATTR_CIRCENDANGLE) /* 1178 */ /* Pool V4+ */ + +// Only for Interfaceing, not yet implemented. / * + * V4 / +#define SDRATTR_NOTPERSIST_FIRST (SDRATTR_CIRC_LAST + 1) /* 1180 */ /* 1172 */ /* 1127 */ /* 1110 */ /* Pool V1: 1058 */ +#define SDRATTR_OBJMOVEPROTECT (SDRATTR_NOTPERSIST_FIRST+ 0) /* 1180 sal_Bool, def=sal_False */ +#define SDRATTR_OBJSIZEPROTECT (SDRATTR_NOTPERSIST_FIRST+ 1) /* 1181 sal_Bool, def=sal_False */ +#define SDRATTR_OBJPRINTABLE (SDRATTR_NOTPERSIST_FIRST+ 2) /* 1182 sal_Bool, def=sal_True */ +#define SDRATTR_LAYERID (SDRATTR_NOTPERSIST_FIRST+ 3) /* 1183 sal_uInt16, def=0 */ +#define SDRATTR_LAYERNAME (SDRATTR_NOTPERSIST_FIRST+ 4) /* 1184 String, def="" */ +#define SDRATTR_OBJECTNAME (SDRATTR_NOTPERSIST_FIRST+ 5) /* 1185 String, def="" */ +#define SDRATTR_ALLPOSITIONX (SDRATTR_NOTPERSIST_FIRST+ 6) /* 1186 long, def=0 */ +#define SDRATTR_ALLPOSITIONY (SDRATTR_NOTPERSIST_FIRST+ 7) /* 1187 long, def=0 */ +#define SDRATTR_ALLSIZEWIDTH (SDRATTR_NOTPERSIST_FIRST+ 8) /* 1188 long, def=0 */ +#define SDRATTR_ALLSIZEHEIGHT (SDRATTR_NOTPERSIST_FIRST+ 9) /* 1189 long, def=0 */ +#define SDRATTR_ONEPOSITIONX (SDRATTR_NOTPERSIST_FIRST+10) /* 1190 long, def=0 */ +#define SDRATTR_ONEPOSITIONY (SDRATTR_NOTPERSIST_FIRST+11) /* 1191 long, def=0 */ +#define SDRATTR_ONESIZEWIDTH (SDRATTR_NOTPERSIST_FIRST+12) /* 1192 long, def=0 */ +#define SDRATTR_ONESIZEHEIGHT (SDRATTR_NOTPERSIST_FIRST+13) /* 1193 long, def=0 */ +#define SDRATTR_LOGICSIZEWIDTH (SDRATTR_NOTPERSIST_FIRST+14) /* 1194 long, def=0 */ +#define SDRATTR_LOGICSIZEHEIGHT (SDRATTR_NOTPERSIST_FIRST+15) /* 1195 long, def=0 */ +#define SDRATTR_ROTATEANGLE (SDRATTR_NOTPERSIST_FIRST+16) /* 1196 long, def=0 */ +#define SDRATTR_SHEARANGLE (SDRATTR_NOTPERSIST_FIRST+17) /* 1197 long, def=0 */ +#define SDRATTR_MOVEX (SDRATTR_NOTPERSIST_FIRST+18) /* 1198 long, def=0 */ +#define SDRATTR_MOVEY (SDRATTR_NOTPERSIST_FIRST+19) /* 1199 long, def=0 */ +#define SDRATTR_RESIZEXONE (SDRATTR_NOTPERSIST_FIRST+20) /* 1200 long, def=0 */ +#define SDRATTR_RESIZEYONE (SDRATTR_NOTPERSIST_FIRST+21) /* 1201 long, def=0 */ +#define SDRATTR_ROTATEONE (SDRATTR_NOTPERSIST_FIRST+22) /* 1202 long, def=0 */ +#define SDRATTR_HORZSHEARONE (SDRATTR_NOTPERSIST_FIRST+23) /* 1203 long, def=0 */ +#define SDRATTR_VERTSHEARONE (SDRATTR_NOTPERSIST_FIRST+24) /* 1204 long, def=0 */ +#define SDRATTR_RESIZEXALL (SDRATTR_NOTPERSIST_FIRST+25) /* 1205 long, def=0 */ +#define SDRATTR_RESIZEYALL (SDRATTR_NOTPERSIST_FIRST+26) /* 1206 long, def=0 */ +#define SDRATTR_ROTATEALL (SDRATTR_NOTPERSIST_FIRST+27) /* 1207 long, def=0 */ +#define SDRATTR_HORZSHEARALL (SDRATTR_NOTPERSIST_FIRST+28) /* 1208 long, def=0 */ +#define SDRATTR_VERTSHEARALL (SDRATTR_NOTPERSIST_FIRST+29) /* 1209 long, def=0 */ +#define SDRATTR_TRANSFORMREF1X (SDRATTR_NOTPERSIST_FIRST+30) /* 1210 long, def=0 */ +#define SDRATTR_TRANSFORMREF1Y (SDRATTR_NOTPERSIST_FIRST+31) /* 1211 long, def=0 */ +#define SDRATTR_TRANSFORMREF2X (SDRATTR_NOTPERSIST_FIRST+32) /* 1212 long, def=0 */ +#define SDRATTR_TRANSFORMREF2Y (SDRATTR_NOTPERSIST_FIRST+33) /* 1213 long, def=0 */ +#define SDRATTR_TEXTDIRECTION (SDRATTR_NOTPERSIST_FIRST+34) /* 1214 V4+++ long, def=0 */ +#define SDRATTR_OBJVISIBLE (SDRATTR_NOTPERSIST_FIRST+35) +#define SDRATTR_NOTPERSIST_LAST (SDRATTR_OBJVISIBLE) /* 1228 V4+++*/ /* 1213*/ /* 1085 */ /* 1040 */ /* 1123 */ /* Pool V1: 1065 */ +// no SetItem for this + +#define SDRATTR_GRAF_FIRST (SDRATTR_NOTPERSIST_LAST+1) /* 1229 V4+++*/ +#define SDRATTR_GRAFRED (SDRATTR_GRAF_FIRST+0) /* 1229 V4+++*/ +#define SDRATTR_GRAFGREEN (SDRATTR_GRAF_FIRST+1) /* 1230 V4+++*/ +#define SDRATTR_GRAFBLUE (SDRATTR_GRAF_FIRST+2) /* 1231 V4+++*/ +#define SDRATTR_GRAFLUMINANCE (SDRATTR_GRAF_FIRST+3) /* 1232 V4+++*/ +#define SDRATTR_GRAFCONTRAST (SDRATTR_GRAF_FIRST+4) /* 1233 V4+++*/ +#define SDRATTR_GRAFGAMMA (SDRATTR_GRAF_FIRST+5) /* 1234 V4+++*/ +#define SDRATTR_GRAFTRANSPARENCE (SDRATTR_GRAF_FIRST+6) /* 1235 V4+++*/ +#define SDRATTR_GRAFINVERT (SDRATTR_GRAF_FIRST+7) /* 1236 V4+++*/ +#define SDRATTR_GRAFMODE (SDRATTR_GRAF_FIRST+8) /* 1237 V4+++*/ +#define SDRATTR_GRAFCROP (SDRATTR_GRAF_FIRST+9) /* 1238 V4+++*/ +#define SDRATTR_GRAF_LAST (SDRATTR_GRAFCROP) /* 1242 V4+++*/ + +#define SDRATTR_3D_FIRST (SDRATTR_GRAF_LAST + 1) /* 1244 V4+++*/ + +#define SDRATTR_3DOBJ_FIRST (SDRATTR_3D_FIRST) /* 1244 V4+++*/ +#define SDRATTR_3DOBJ_PERCENT_DIAGONAL (SDRATTR_3DOBJ_FIRST + 0) /* 1244 V4+++*/ +#define SDRATTR_3DOBJ_BACKSCALE (SDRATTR_3DOBJ_FIRST + 1) /* 1245 V4+++*/ +#define SDRATTR_3DOBJ_DEPTH (SDRATTR_3DOBJ_FIRST + 2) /* 1246 V4+++*/ +#define SDRATTR_3DOBJ_HORZ_SEGS (SDRATTR_3DOBJ_FIRST + 3) /* 1247 V4+++*/ +#define SDRATTR_3DOBJ_VERT_SEGS (SDRATTR_3DOBJ_FIRST + 4) /* 1248 V4+++*/ +#define SDRATTR_3DOBJ_END_ANGLE (SDRATTR_3DOBJ_FIRST + 5) /* 1249 V4+++*/ +#define SDRATTR_3DOBJ_DOUBLE_SIDED (SDRATTR_3DOBJ_FIRST + 6) /* 1250 V4+++*/ +#define SDRATTR_3DOBJ_NORMALS_KIND (SDRATTR_3DOBJ_FIRST + 7) /* 1251 V4+++*/ +#define SDRATTR_3DOBJ_NORMALS_INVERT (SDRATTR_3DOBJ_FIRST + 8) /* 1252 V4+++*/ +#define SDRATTR_3DOBJ_TEXTURE_PROJ_X (SDRATTR_3DOBJ_FIRST + 9) /* 1253 V4+++*/ +#define SDRATTR_3DOBJ_TEXTURE_PROJ_Y (SDRATTR_3DOBJ_FIRST + 10) /* 1254 V4+++*/ +#define SDRATTR_3DOBJ_SHADOW_3D (SDRATTR_3DOBJ_FIRST + 11) /* 1255 V4+++*/ +#define SDRATTR_3DOBJ_MAT_COLOR (SDRATTR_3DOBJ_FIRST + 12) /* 1256 V4+++*/ +#define SDRATTR_3DOBJ_MAT_EMISSION (SDRATTR_3DOBJ_FIRST + 13) /* 1257 V4+++*/ +#define SDRATTR_3DOBJ_MAT_SPECULAR (SDRATTR_3DOBJ_FIRST + 14) /* 1258 V4+++*/ +#define SDRATTR_3DOBJ_MAT_SPECULAR_INTENSITY (SDRATTR_3DOBJ_FIRST + 15) /* 1259 V4+++*/ +#define SDRATTR_3DOBJ_TEXTURE_KIND (SDRATTR_3DOBJ_FIRST + 16) /* 1260 V4+++*/ +#define SDRATTR_3DOBJ_TEXTURE_MODE (SDRATTR_3DOBJ_FIRST + 17) /* 1261 V4+++*/ +#define SDRATTR_3DOBJ_TEXTURE_FILTER (SDRATTR_3DOBJ_FIRST + 18) /* 1262 V4+++*/ + +// #107245# New items for 3d objects use former range SDRATTR_3DOBJ_RESERVED_01 +// up to SDRATTR_3DOBJ_RESERVED_05 +#define SDRATTR_3DOBJ_SMOOTH_NORMALS (SDRATTR_3DOBJ_FIRST + 19) /* 1263 V4+++*/ +#define SDRATTR_3DOBJ_SMOOTH_LIDS (SDRATTR_3DOBJ_FIRST + 20) /* 1264 V4+++*/ +#define SDRATTR_3DOBJ_CHARACTER_MODE (SDRATTR_3DOBJ_FIRST + 21) /* 1265 V4+++*/ +#define SDRATTR_3DOBJ_CLOSE_FRONT (SDRATTR_3DOBJ_FIRST + 22) /* 1266 V4+++*/ +#define SDRATTR_3DOBJ_CLOSE_BACK (SDRATTR_3DOBJ_FIRST + 23) /* 1267 V4+++*/ + +// #i28528# +// Added extra Item (Bool) for chart2 to be able to show reduced line geometry +#define SDRATTR_3DOBJ_REDUCED_LINE_GEOMETRY (SDRATTR_3DOBJ_FIRST + 24) /* 1268 V4+++*/ + +#define SDRATTR_3DOBJ_LAST (SDRATTR_3DOBJ_REDUCED_LINE_GEOMETRY) /* 1282 V4+++*/ + +#define SDRATTR_3DSCENE_FIRST (SDRATTR_3DOBJ_LAST + 1) /* 1283 V4+++*/ +#define SDRATTR_3DSCENE_PERSPECTIVE (SDRATTR_3DSCENE_FIRST + 0) /* 1283 V4+++*/ +#define SDRATTR_3DSCENE_DISTANCE (SDRATTR_3DSCENE_FIRST + 1) /* 1284 V4+++*/ +#define SDRATTR_3DSCENE_FOCAL_LENGTH (SDRATTR_3DSCENE_FIRST + 2) /* 1285 V4+++*/ +#define SDRATTR_3DSCENE_TWO_SIDED_LIGHTING (SDRATTR_3DSCENE_FIRST + 3) /* 1286 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTCOLOR_1 (SDRATTR_3DSCENE_FIRST + 4) /* 1287 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTCOLOR_2 (SDRATTR_3DSCENE_FIRST + 5) /* 1288 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTCOLOR_3 (SDRATTR_3DSCENE_FIRST + 6) /* 1289 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTCOLOR_4 (SDRATTR_3DSCENE_FIRST + 7) /* 1290 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTCOLOR_5 (SDRATTR_3DSCENE_FIRST + 8) /* 1291 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTCOLOR_6 (SDRATTR_3DSCENE_FIRST + 9) /* 1292 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTCOLOR_7 (SDRATTR_3DSCENE_FIRST + 10) /* 1293 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTCOLOR_8 (SDRATTR_3DSCENE_FIRST + 11) /* 1294 V4+++*/ +#define SDRATTR_3DSCENE_AMBIENTCOLOR (SDRATTR_3DSCENE_FIRST + 12) /* 1295 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTON_1 (SDRATTR_3DSCENE_FIRST + 13) /* 1296 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTON_2 (SDRATTR_3DSCENE_FIRST + 14) /* 1297 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTON_3 (SDRATTR_3DSCENE_FIRST + 15) /* 1298 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTON_4 (SDRATTR_3DSCENE_FIRST + 16) /* 1299 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTON_5 (SDRATTR_3DSCENE_FIRST + 17) /* 1300 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTON_6 (SDRATTR_3DSCENE_FIRST + 18) /* 1301 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTON_7 (SDRATTR_3DSCENE_FIRST + 19) /* 1302 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTON_8 (SDRATTR_3DSCENE_FIRST + 20) /* 1303 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTDIRECTION_1 (SDRATTR_3DSCENE_FIRST + 21) /* 1304 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTDIRECTION_2 (SDRATTR_3DSCENE_FIRST + 22) /* 1305 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTDIRECTION_3 (SDRATTR_3DSCENE_FIRST + 23) /* 1306 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTDIRECTION_4 (SDRATTR_3DSCENE_FIRST + 24) /* 1307 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTDIRECTION_5 (SDRATTR_3DSCENE_FIRST + 25) /* 1308 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTDIRECTION_6 (SDRATTR_3DSCENE_FIRST + 26) /* 1309 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTDIRECTION_7 (SDRATTR_3DSCENE_FIRST + 27) /* 1310 V4+++*/ +#define SDRATTR_3DSCENE_LIGHTDIRECTION_8 (SDRATTR_3DSCENE_FIRST + 28) /* 1311 V4+++*/ +#define SDRATTR_3DSCENE_SHADOW_SLANT (SDRATTR_3DSCENE_FIRST + 29) /* 1312 V4+++*/ +#define SDRATTR_3DSCENE_SHADE_MODE (SDRATTR_3DSCENE_FIRST + 30) /* 1313 V4+++*/ +#define SDRATTR_3DSCENE_LAST (SDRATTR_3DSCENE_SHADE_MODE) /* 1333 V4+++*/ +#define SDRATTR_3D_LAST (SDRATTR_3DSCENE_LAST) /* 1333 V4+++*/ + +#define SDRATTR_CUSTOMSHAPE_FIRST (SDRATTR_3D_LAST + 1) /* 1334 V4+++*/ +#define SDRATTR_CUSTOMSHAPE_ENGINE (SDRATTR_CUSTOMSHAPE_FIRST + 0) /* 1334 V4+++*/ +#define SDRATTR_CUSTOMSHAPE_DATA (SDRATTR_CUSTOMSHAPE_FIRST + 1) /* 1335 V4+++*/ +#define SDRATTR_CUSTOMSHAPE_GEOMETRY (SDRATTR_CUSTOMSHAPE_FIRST + 2) /* 1336 V4+++*/ +#define SDRATTR_CUSTOMSHAPE_REPLACEMENT_URL (SDRATTR_CUSTOMSHAPE_FIRST + 3) /* 1337 V4+++*/ +#define SDRATTR_CUSTOMSHAPE_LAST (SDRATTR_CUSTOMSHAPE_REPLACEMENT_URL) /* 1357 V4+++*/ + +#define SDRATTR_TABLE_FIRST (SDRATTR_CUSTOMSHAPE_LAST+1) +#define SDRATTR_TABLE_BORDER (SDRATTR_TABLE_FIRST+0) +#define SDRATTR_TABLE_BORDER_INNER (SDRATTR_TABLE_FIRST+1) +#define SDRATTR_TABLE_BORDER_TLBR (SDRATTR_TABLE_FIRST+2) +#define SDRATTR_TABLE_BORDER_BLTR (SDRATTR_TABLE_FIRST+3) + +#define SDRATTR_TABLE_LAST (SDRATTR_TABLE_BORDER_BLTR) + +#define SDRATTR_END SDRATTR_TABLE_LAST /* 1357 */ /* 1333 V4+++*/ /* 1243 V4+++*/ /*1213*/ /*1085*/ /*1040*/ /*Pool V2: 1123,V1: 1065 */ + +#endif // _SVDDEF_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svddrag.hxx b/include/svx/svddrag.hxx new file mode 100644 index 000000000000..a5236e1579c2 --- /dev/null +++ b/include/svx/svddrag.hxx @@ -0,0 +1,184 @@ +/* -*- 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 _SVDDRAG_HXX +#define _SVDDRAG_HXX + + +#include <tools/gen.hxx> +#include <tools/fract.hxx> +#include "svx/svxdllapi.h" + +// Status information for specialized object dragging. In order for the model +// to stay status free, the status data is kept on the View +// and handed over to the object at the appropriate time as a parameter. +// This also includes the status of the operation and Interactive +// Object creation. In this case, pHdl is null. +class SdrHdl; +class SdrView; +class SdrPageView; +class SdrDragMethod; + +struct SVX_DLLPUBLIC SdrDragStatUserData +{ +}; + +class SVX_DLLPUBLIC SdrDragStat { +protected: + SdrHdl* pHdl; // Der Handle an dem der User zottelt + SdrView* pView; + SdrPageView* pPageView; + std::vector<Point*> aPnts; // Alle bisherigen Punkte: [0]=Start, [Count()-2]=Prev + Point aRef1; // Referenzpunkt: Resize-Fixpunkt, (Drehachse, + Point aRef2; // Spiegelachse, ...) + Point aPos0; // Position beim letzten Event + Point aRealPos0; // Position beim letzten Event + Point aRealNow; // Aktuelle Dragposition ohne Snap, Ortho und Limit + Point aRealLast; // RealPos des letzten Punkts (fuer MinMoved) + Rectangle aActionRect; + + // Reserve fuer kompatible Erweiterungen, die sonst inkompatibel wuerden. + Point aReservePoint1; + Point aReservePoint2; + Point aReservePoint3; + Point aReservePoint4; + Rectangle aReserveRect1; + Rectangle aReserveRect2; + bool bEndDragChangesAttributes; + bool bEndDragChangesGeoAndAttributes; + bool bMouseIsUp; + bool aReserveBool3; + bool aReserveBool4; + long aReserveLong1; + long aReserveLong2; + long aReserveLong3; + long aReserveLong4; + void* aReservePtr1; + void* aReservePtr2; + void* aReservePtr3; + void* aReservePtr4; + + bool bShown; // Xor visible? + sal_uInt16 nMinMov; // So much has to be minimally moved first + bool bMinMoved; // MinMove surpassed? + + bool bHorFixed; // Dragging only vertical + bool bVerFixed; // Dragging only horizontal + bool bWantNoSnap; // To decide if pObj-> MovCreate () should use NoSnapPos or not. + // Therefore, NoSnapPos is written into the buffer. + bool bOrtho4; + bool bOrtho8; + + SdrDragMethod* pDragMethod; + +protected: + void Clear(bool bLeaveOne); + Point& Pnt(sal_uIntPtr nNum) { return *aPnts[nNum]; } +//public: + SdrDragStatUserData* pUser; // Userdata +public: + SdrDragStat(): aPnts() { pUser=NULL; Reset(); } + ~SdrDragStat() { Clear(sal_False); } + void Reset(); + SdrView* GetView() const { return pView; } + void SetView(SdrView* pV) { pView=pV; } + SdrPageView* GetPageView() const { return pPageView; } + void SetPageView(SdrPageView* pPV) { pPageView=pPV; } + const Point& GetPoint(sal_uIntPtr nNum) const { return *aPnts[nNum]; } + sal_uIntPtr GetPointAnz() const { return aPnts.size(); } + const Point& GetStart() const { return GetPoint(0); } + Point& Start() { return Pnt(0); } + const Point& GetPrev() const { return GetPoint(GetPointAnz()-(GetPointAnz()>=2 ? 2:1)); } + Point& Prev() { return Pnt(GetPointAnz()-(GetPointAnz()>=2 ? 2:1)); } + const Point& GetPos0() const { return aPos0; } + Point& Pos0() { return aPos0; } + const Point& GetNow() const { return GetPoint(GetPointAnz()-1); } + Point& Now() { return Pnt(GetPointAnz()-1); } + const Point& GetRealNow() const { return aRealNow; } + Point& RealNow() { return aRealNow; } + const Point& GetRef1() const { return aRef1; } + Point& Ref1() { return aRef1; } + const Point& GetRef2() const { return aRef2; } + Point& Ref2() { return aRef2; } + const SdrHdl* GetHdl() const { return pHdl; } + void SetHdl(SdrHdl* pH) { pHdl=pH; } + SdrDragStatUserData* GetUser() const { return pUser; } + void SetUser(SdrDragStatUserData* pU) { pUser=pU; } + bool IsShown() const { return bShown; } + void SetShown(bool bOn) { bShown=bOn; } + + bool IsMinMoved() const { return bMinMoved; } + void SetMinMoved() { bMinMoved=sal_True; } + void ResetMinMoved() { bMinMoved=sal_False; } + void SetMinMove(sal_uInt16 nDist) { nMinMov=nDist; if (nMinMov<1) nMinMov=1; } + sal_uInt16 GetMinMove() const { return nMinMov; } + + bool IsHorFixed() const { return bHorFixed; } + void SetHorFixed(bool bOn) { bHorFixed=bOn; } + bool IsVerFixed() const { return bVerFixed; } + void SetVerFixed(bool bOn) { bVerFixed=bOn; } + + // Here, the object can say: "I do not want to snap to coordinates!" + // for example, the angle of the arc ... + bool IsNoSnap() const { return bWantNoSnap; } + void SetNoSnap(bool bOn = true) { bWantNoSnap=bOn; } + + // And here the Obj say which Ortho (if there is one) + // can be usefully applied to him. + // Ortho4 means Ortho in four directions (for Rect and CIRT) + bool IsOrtho4Possible() const { return bOrtho4; } + void SetOrtho4Possible(bool bOn = true) { bOrtho4=bOn; } + // Ortho8 means Ortho in 8 directions (for lines) + bool IsOrtho8Possible() const { return bOrtho8; } + void SetOrtho8Possible(bool bOn = true) { bOrtho8=bOn; } + + // Is set by an object that was dragged. + bool IsEndDragChangesAttributes() const { return bEndDragChangesAttributes; } + void SetEndDragChangesAttributes(bool bOn) { bEndDragChangesAttributes=bOn; } + bool IsEndDragChangesGeoAndAttributes() const { return bEndDragChangesGeoAndAttributes; } + void SetEndDragChangesGeoAndAttributes(bool bOn) { bEndDragChangesGeoAndAttributes=bOn; } + + // Is set by the view and can be evaluated by Obj + bool IsMouseDown() const { return !bMouseIsUp; } + void SetMouseDown(bool bDown) { bMouseIsUp=!bDown; } + + Point KorregPos(const Point& rNow, const Point& rPrev) const; + void Reset(const Point& rPnt); + void NextMove(const Point& rPnt); + void NextPoint(bool bSaveReal=sal_False); + void PrevPoint(); + bool CheckMinMoved(const Point& rPnt); + long GetDX() const { return GetNow().X()-GetPrev().X(); } + long GetDY() const { return GetNow().Y()-GetPrev().Y(); } + Fraction GetXFact() const; + Fraction GetYFact() const; + + SdrDragMethod* GetDragMethod() const { return pDragMethod; } + void SetDragMethod(SdrDragMethod* pMth) { pDragMethod=pMth; } + + const Rectangle& GetActionRect() const { return aActionRect; } + void SetActionRect(const Rectangle& rR) { aActionRect=rR; } + + // also considering 1stPointAsCenter + void TakeCreateRect(Rectangle& rRect) const; +}; + +#endif //_SVDDRAG_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svddrgmt.hxx b/include/svx/svddrgmt.hxx new file mode 100644 index 000000000000..3fc7fbb38168 --- /dev/null +++ b/include/svx/svddrgmt.hxx @@ -0,0 +1,320 @@ +/* -*- 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 _SVDDRGMT_HXX +#define _SVDDRGMT_HXX + +#include <svx/svddrgv.hxx> +#include "svx/svxdllapi.h" +#include <svx/sdr/contact/objectcontact.hxx> + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@@@@ @@@@@ @@@@ @@@@ @@ @@ @@@@@ @@@@@@ @@ @@ @@@@ @@@@@ @@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@@@@@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@@@@ @@@@@@ @@ @@@ @@@@@@@ @@@@ @@ @@@@@@ @@ @@ @@ @@ @@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@@@@ @@ @@ @@ @@ @@@@@ @@ @@ @@@@@ @@ @@ @@ @@@@ @@@@@ @@@@ +// +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SdrDragView; +class SdrDragStat; + +////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrDragEntry +{ +private: + // bitfield + unsigned mbAddToTransparent : 1; + +protected: + // access for derived classes + void setAddToTransparent(bool bNew) { mbAddToTransparent = bNew; } + +public: + SdrDragEntry(); + virtual ~SdrDragEntry(); + + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequenceInCurrentState(SdrDragMethod& rDragMethod) = 0; + + // data read access + bool getAddToTransparent() const { return mbAddToTransparent; } +}; + +////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrDragEntryPolyPolygon : public SdrDragEntry +{ +private: + basegfx::B2DPolyPolygon maOriginalPolyPolygon; + +public: + SdrDragEntryPolyPolygon(const basegfx::B2DPolyPolygon& rOriginalPolyPolygon); + virtual ~SdrDragEntryPolyPolygon(); + + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequenceInCurrentState(SdrDragMethod& rDragMethod); +}; + +////////////////////////////////////////////////////////////////////////////// + +class SdrDragEntrySdrObject : public SdrDragEntry +{ +private: + const SdrObject& maOriginal; + SdrObject* mpClone; + sdr::contact::ObjectContact& mrObjectContact; + bool mbModify; + +public: + SdrDragEntrySdrObject(const SdrObject& rOriginal, sdr::contact::ObjectContact& rObjectContact, bool bModify); + virtual ~SdrDragEntrySdrObject(); + + // #i54102# Split createPrimitive2DSequenceInCurrentState in prepareCurrentState and processing, + // added accessors to original and clone + void prepareCurrentState(SdrDragMethod& rDragMethod); + const SdrObject& getOriginal() const { return maOriginal; } + SdrObject* getClone() { return mpClone; } + + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequenceInCurrentState(SdrDragMethod& rDragMethod); +}; + +////////////////////////////////////////////////////////////////////////////// + +class SdrDragEntryPrimitive2DSequence : public SdrDragEntry +{ +private: + drawinglayer::primitive2d::Primitive2DSequence maPrimitive2DSequence; + +public: + SdrDragEntryPrimitive2DSequence( + const drawinglayer::primitive2d::Primitive2DSequence& rSequence, + bool bAddToTransparent); + virtual ~SdrDragEntryPrimitive2DSequence(); + + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequenceInCurrentState(SdrDragMethod& rDragMethod); +}; + +////////////////////////////////////////////////////////////////////////////// + +class SdrDragEntryPointGlueDrag : public SdrDragEntry +{ +private: + std::vector< basegfx::B2DPoint > maPositions; + bool mbIsPointDrag; + +public: + SdrDragEntryPointGlueDrag(const std::vector< basegfx::B2DPoint >& rPositions, bool bIsPointDrag); + virtual ~SdrDragEntryPointGlueDrag(); + + virtual drawinglayer::primitive2d::Primitive2DSequence createPrimitive2DSequenceInCurrentState(SdrDragMethod& rDragMethod); +}; + +////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrDragMethod +{ +private: + std::vector< SdrDragEntry* > maSdrDragEntries; + sdr::overlay::OverlayObjectList maOverlayObjectList; + SdrDragView& mrSdrDragView; + + // bitfield + unsigned mbMoveOnly : 1; + unsigned mbSolidDraggingActive : 1; + +protected: + // access for derivated classes to maSdrDragEntries + void clearSdrDragEntries(); + void addSdrDragEntry(SdrDragEntry* pNew); + virtual void createSdrDragEntries(); + virtual void createSdrDragEntryForSdrObject(const SdrObject& rOriginal, sdr::contact::ObjectContact& rObjectContact, bool bModify); + + // access for derivated classes to maOverlayObjectList + void clearOverlayObjectList() { maOverlayObjectList.clear(); } + void addToOverlayObjectList(sdr::overlay::OverlayObject& rNew) { maOverlayObjectList.append(rNew); } + basegfx::B2DRange getB2DRangeFromOverlayObjectList() const { return maOverlayObjectList.getBaseRange(); } + + // access for derivated classes to mrSdrDragView + SdrDragView& getSdrDragView() { return mrSdrDragView; } + const SdrDragView& getSdrDragView() const { return mrSdrDragView; } + + // access for derivated classes for bools + void setMoveOnly(bool bNew) { mbMoveOnly = bNew; } + void setSolidDraggingActive(bool bNew) { mbSolidDraggingActive = bNew; } + + // internal helpers for creation of standard drag entries + void createSdrDragEntries_SolidDrag(); + void createSdrDragEntries_PolygonDrag(); + void createSdrDragEntries_PointDrag(); + void createSdrDragEntries_GlueDrag(); + + // old call forwarders to the SdrDragView + void ImpTakeDescriptionStr(sal_uInt16 nStrCacheID, String& rStr, sal_uInt16 nVal=0) const; + SdrHdl* GetDragHdl() const { return getSdrDragView().pDragHdl; } + SdrHdlKind GetDragHdlKind() const { return getSdrDragView().eDragHdl; } + SdrDragStat& DragStat() { return getSdrDragView().aDragStat; } + const SdrDragStat& DragStat() const { return getSdrDragView().aDragStat; } + Point& Ref1() const { return mrSdrDragView.aRef1; } + Point& Ref2() const { return mrSdrDragView.aRef2; } + const SdrHdlList& GetHdlList() const { return getSdrDragView().aHdl; } + void AddUndo(SdrUndoAction* pUndo) { getSdrDragView().AddUndo(pUndo); } + bool IsDragLimit() { return getSdrDragView().bDragLimit; } + const Rectangle& GetDragLimitRect() { return getSdrDragView().aDragLimit; } + const SdrMarkList& GetMarkedObjectList() { return getSdrDragView().GetMarkedObjectList(); } + Point GetSnapPos(const Point& rPt) const { return getSdrDragView().GetSnapPos(rPt,getSdrDragView().pMarkedPV); } + sal_uInt16 SnapPos(Point& rPt) const { return getSdrDragView().SnapPos(rPt,getSdrDragView().pMarkedPV); } + inline const Rectangle& GetMarkedRect() const; + SdrPageView* GetDragPV() const; + SdrObject* GetDragObj() const; + OutputDevice* GetDragWin() const { return getSdrDragView().pDragWin; } + bool IsDraggingPoints() const { return getSdrDragView().IsDraggingPoints(); } + bool IsDraggingGluePoints() const { return getSdrDragView().IsDraggingGluePoints(); } + + bool DoAddConnectorOverlays(); + drawinglayer::primitive2d::Primitive2DSequence AddConnectorOverlays(); + +public: + TYPEINFO(); + + void resetSdrDragEntries(); + basegfx::B2DRange getCurrentRange() const; + + // #i58950# also moved constructor implementation to cxx + SdrDragMethod(SdrDragView& rNewView); + + // #i58950# virtual destructor was missing + virtual ~SdrDragMethod(); + + void Show(); + void Hide(); + virtual void TakeSdrDragComment(String& rStr) const=0; + virtual bool BeginSdrDrag()=0; + virtual void MoveSdrDrag(const Point& rPnt)=0; + virtual bool EndSdrDrag(bool bCopy)=0; + virtual void CancelSdrDrag(); + virtual Pointer GetSdrDragPointer() const=0; + + virtual void CreateOverlayGeometry(sdr::overlay::OverlayManager& rOverlayManager); + void destroyOverlayGeometry(); + + virtual basegfx::B2DHomMatrix getCurrentTransformation(); + virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget); + virtual void applyCurrentTransformationToPolyPolygon(basegfx::B2DPolyPolygon& rTarget); + + // data read access + bool getMoveOnly() const { return mbMoveOnly; } + bool getSolidDraggingActive() const { return mbSolidDraggingActive; } +}; + +inline const Rectangle& SdrDragMethod::GetMarkedRect() const +{ + return getSdrDragView().eDragHdl==HDL_POLY ? getSdrDragView().GetMarkedPointsRect() : + getSdrDragView().eDragHdl==HDL_GLUE ? getSdrDragView().GetMarkedGluePointsRect() : + getSdrDragView().GetMarkedObjRect(); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// SdrDragMove + +class SVX_DLLPUBLIC SdrDragMove : public SdrDragMethod +{ +private: + long nBestXSnap; + long nBestYSnap; + bool bXSnapped; + bool bYSnapped; + + void ImpCheckSnap(const Point& rPt); + +protected: + virtual void createSdrDragEntryForSdrObject(const SdrObject& rOriginal, sdr::contact::ObjectContact& rObjectContact, bool bModify); + +public: + TYPEINFO(); + SdrDragMove(SdrDragView& rNewView); + + virtual void TakeSdrDragComment(String& rStr) const; + virtual bool BeginSdrDrag(); + virtual void MoveSdrDrag(const Point& rPnt); + virtual bool EndSdrDrag(bool bCopy); + virtual Pointer GetSdrDragPointer() const; + + virtual basegfx::B2DHomMatrix getCurrentTransformation(); + virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// SdrDragResize + +class SVX_DLLPUBLIC SdrDragResize : public SdrDragMethod +{ +protected: + Fraction aXFact; + Fraction aYFact; + +public: + TYPEINFO(); + SdrDragResize(SdrDragView& rNewView); + + virtual void TakeSdrDragComment(String& rStr) const; + virtual bool BeginSdrDrag(); + virtual void MoveSdrDrag(const Point& rPnt); + virtual bool EndSdrDrag(bool bCopy); + virtual Pointer GetSdrDragPointer() const; + + virtual basegfx::B2DHomMatrix getCurrentTransformation(); + virtual void applyCurrentTransformationToSdrObject(SdrObject& rTarget); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// SdrDragObjOwn + +class SVX_DLLPUBLIC SdrDragObjOwn : public SdrDragMethod +{ +private: + // SdrDragObjOwn always works on a clone since it has no transformation + // mechanism to modify wireframe visualisations, but uses the + // SdrObject::applySpecialDrag() method to change a clone of the + // SdrObject + SdrObject* mpClone; + +protected: + virtual void createSdrDragEntries(); + +public: + TYPEINFO(); + SdrDragObjOwn(SdrDragView& rNewView); + virtual ~SdrDragObjOwn(); + + virtual void TakeSdrDragComment(String& rStr) const; + virtual bool BeginSdrDrag(); + virtual void MoveSdrDrag(const Point& rPnt); + virtual bool EndSdrDrag(bool bCopy); + virtual Pointer GetSdrDragPointer() const; +}; + +#endif //_SVDDRGMT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svddrgv.hxx b/include/svx/svddrgv.hxx new file mode 100644 index 000000000000..3a5f09cdb6d8 --- /dev/null +++ b/include/svx/svddrgv.hxx @@ -0,0 +1,302 @@ +/* -*- 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 _SVDDRGV_HXX +#define _SVDDRGV_HXX + +#include "svx/svxdllapi.h" +#include <svx/svdxcgv.hxx> + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class SdrUndoGeoObj; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@@@@ @@@@@ @@@@ @@@@ @@ @@ @@ @@@@@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @ @@ +// @@ @@ @@@@@ @@@@@@ @@ @@@ @@@@@ @@ @@@@ @@@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@ @@@ +// @@@@@ @@ @@ @@ @@ @@@@@ @ @@ @@@@@ @@ @@ +// +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrDragView: public SdrExchangeView +{ + friend class SdrPageView; + friend class SdrDragMethod; + +protected: + SdrHdl* pDragHdl; + SdrDragMethod* mpCurrentSdrDragMethod; + SdrUndoGeoObj* pInsPointUndo; + Rectangle aDragLimit; + OUString aInsPointUndoStr; + SdrMarkList aFollowingEdges; // If nodes are dragged, all edges should follow as Xor + SdrHdlKind eDragHdl; + + sal_uIntPtr nDragXorPolyLimit; + sal_uIntPtr nDragXorPointLimit; + sal_uInt16 nDetailedEdgeDraggingLimit; + + unsigned bFramDrag : 1; // currently frame dragging + unsigned bDragSpecial : 1; // currently Special Obj-dragging + unsigned bMarkedHitMovesAlways : 1; // Persistent + unsigned bDragLimit : 1; // Limit on SnapRect instead of BoundRect + unsigned bDragHdl : 1; // TRUE: RefPt is slid + unsigned bDragStripes : 1; // Persistent + unsigned bMirrRefDragObj : 1; // Persistent - During the drag, show the mirror axis of the mirrored objects as Xor + unsigned mbSolidDragging : 1; // allow solid create/drag of objects + unsigned bMouseHideWhileDraggingPoints : 1; + unsigned bResizeAtCenter : 1; + unsigned bCrookAtCenter : 1; + unsigned bDragWithCopy : 1; + unsigned bInsGluePoint : 1; + unsigned bInsObjPointMode : 1; + unsigned bInsGluePointMode : 1; + unsigned bNoDragXorPolys : 1; + unsigned bAutoVertexCon : 1; // Automatische Konnektorgenerierung an den Scheitelpunkten + unsigned bAutoCornerCon : 1; // Automatische Konnektorgenerierung an den Eckpunkten + unsigned bRubberEdgeDragging : 1; + unsigned bDetailedEdgeDragging : 1; + +private: + SVX_DLLPRIVATE void ImpClearVars(); + +protected: + virtual void SetMarkHandles(); + void ShowDragObj(); + void HideDragObj(); + sal_Bool ImpBegInsObjPoint(sal_Bool bIdxZwang, sal_uInt32 nIdx, const Point& rPnt, sal_Bool bNewObj, OutputDevice* pOut); + +protected: + // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView + SdrDragView(SdrModel* pModel1, OutputDevice* pOut = 0L); + virtual ~SdrDragView(); + +public: + virtual sal_Bool IsAction() const; + virtual void MovAction(const Point& rPnt); + virtual void EndAction(); + virtual void BckAction(); + virtual void BrkAction(); + virtual void TakeActionRect(Rectangle& rRect) const; + + // Spezialimplementation fuer den Writer: + // TakeDragObjAnchorPos() liefert die Position an der ein Objekt + // beim Draggen einer Einfachselektion ungefaehr landet wenn es + // "losgelassen" wird (EndDrag). + // In der Regel ist das die linke obere Ecke des zu erwartenden neuen + // SnapRects. Ausnahme: CaptionObj. Dort ist es die Position des + // "Schwanzendes". + // Bei Returncode sal_False konnte ich die Position nicht bestimmen + // (z.B. Punktverschiebung, Mehrfachselektion, Schieben der + // Spiegelschse, ...) + sal_Bool TakeDragObjAnchorPos(Point& rPos, sal_Bool bTopRight = sal_False ) const; + + // Wird pForcedMeth uebergeben, so wird pHdl, ... nicht ausgewerten, sondern diese + // Drag-Methode verwendet. Die Instanz geht dabei ins Eigentum der View ueber und + // wird zum Ende des Draggings destruiert. + virtual sal_Bool BegDragObj(const Point& rPnt, OutputDevice* pOut=NULL, SdrHdl* pHdl=NULL, short nMinMov=-3, SdrDragMethod* pForcedMeth=NULL); + void MovDragObj(const Point& rPnt); + sal_Bool EndDragObj(sal_Bool bCopy=sal_False); + void BrkDragObj(); + sal_Bool IsDragObj() const { return mpCurrentSdrDragMethod && !bInsPolyPoint && !bInsGluePoint; } + SdrHdl* GetDragHdl() const { return pDragHdl; } + SdrDragMethod* GetDragMethod() const { return mpCurrentSdrDragMethod; } + sal_Bool IsDraggingPoints() const { return eDragHdl==HDL_POLY; } + sal_Bool IsDraggingGluePoints() const { return eDragHdl==HDL_GLUE; } + + // Wer das beim BegDrag oder mittendrin schon festlegen will. + // (Wird bei jedem BegDrag auf sal_False zurueckgesetzt, also nach + // BegDrag setzen.) + void SetDragWithCopy(sal_Bool bOn) { bDragWithCopy = bOn; } + sal_Bool IsDragWithCopy() const { return bDragWithCopy; } + + void SetInsertGluePoint(sal_Bool bOn) { bInsGluePoint = bOn; } + sal_Bool IsInsertGluePoint() const { return bInsGluePoint; } + + // Interaktives einfuegen eines neuen Punktes. nIdx=0 => vor dem ersten Punkt. + bool IsInsObjPointPossible() const; + sal_Bool BegInsObjPoint(const Point& rPnt, sal_Bool bNewObj) { return ImpBegInsObjPoint(sal_False, 0L, rPnt, bNewObj, 0L); } + void MovInsObjPoint(const Point& rPnt) { MovDragObj(rPnt); } + sal_Bool EndInsObjPoint(SdrCreateCmd eCmd); + void BrkInsObjPoint() { BrkDragObj(); } + sal_Bool IsInsObjPoint() const { return mpCurrentSdrDragMethod && bInsPolyPoint; } + + // Fuer die App zum Verwalten des Status. GetPreferedPointer() wird + // spaeter vielleicht einen passenden Pointer dafuer liefern + void SetInsObjPointMode(sal_Bool bOn) { bInsObjPointMode = bOn; } + sal_Bool IsInsObjPointMode() const { return bInsObjPointMode; } + + sal_Bool IsInsGluePointPossible() const; + sal_Bool BegInsGluePoint(const Point& rPnt); + void MovInsGluePoint(const Point& rPnt) { MovDragObj(rPnt); } + sal_Bool EndInsGluePoint() { return EndDragObj(); } + void BrkInsGluePoint() { BrkDragObj(); } + sal_Bool IsInsGluePoint() const { return mpCurrentSdrDragMethod && bInsGluePoint; } + + // Fuer die App zum Verwalten des Status. GetPreferedPointer() wird + // spaeter vielleicht einen passenden Pointer dafuer liefern + void SetInsGluePointMode(sal_Bool bOn) { bInsGluePointMode = bOn; } + sal_Bool IsInsGluePointMode() const { return bInsGluePointMode; } + + // Begrenzungslinien ueber's gesamte Win waehrend des Draggens + // Persistent. Default=FALSE. + void SetDragStripes(sal_Bool bOn); + sal_Bool IsDragStripes() const { return bDragStripes; } + + // Handles waehrend des Draggens verstecken + //HMHvoid SetDragHdlHide(sal_Bool bOn); + //HMHBOOL IsDragHdlHide() const { return bNoDragHdl; } + + // Beim Draggen von Polygonpunkten und Klebepunkten + // die Maus verstecken. Default=FALSE + void SetMouseHideWhileDraggingPoints(sal_Bool bOn) { bMouseHideWhileDraggingPoints = bOn; } + sal_Bool IsMouseHideWhileDraggingPoints() const { return bMouseHideWhileDraggingPoints; } + + // Beim Draggen werden i.d.R. die Konturen der markierten Objekte + // als Xor-Polygone dargestellt. Wird dieses Flag hier gesetzt, + // wird (z.B. bei Mehrfachselektion) nur ein Xor-Frame gezeichnet. + // Bei objektspeziefischem Dragging (Polygonpunkte,Eckenradius,... + // hat diese Einstellung keine Auswirkung. + // Auch waerend des Draggens umschaltbar. + // Default=Off + void SetNoDragXorPolys(sal_Bool bOn); + sal_Bool IsNoDragXorPolys() const { return bNoDragXorPolys; } + + // Uebersteigt die Anzahl der markierten Objekte den hier eingestellten + // Wert, wird implizit (temporaer) auf NoDragPolys geschaltet. + // PolyPolygone etc werden entsprechend als mehrere Objekte gewertet. + // Default=100 + void SetDragXorPolyLimit(sal_uIntPtr nObjAnz) { nDragXorPolyLimit=nObjAnz; } + sal_uIntPtr GetDragXorPolyLimit() const { return nDragXorPolyLimit; } + + // Wie DragXorPolyLimit, jedoch bezogen auf die Gesamtpunktanzahl + // aller Polygone. Default=500. + // Auf NoDragPolys wird (temporaer) geschaltet, wenn eins der Limits + // ueberstiegen wird. + void SetDragXorPointLimit(sal_uIntPtr nPntAnz) { nDragXorPointLimit=nPntAnz; } + sal_uIntPtr GetDragXorPointLimit() const { return nDragXorPointLimit; } + + void SetSolidDragging(bool bOn); + bool IsSolidDragging() const; + + // Dragging/Creating von Verbindern: + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Verbinder an Objektscheitelpunkte ankleben + // Default=sal_True=Ja + void SetAutoVertexConnectors(sal_Bool bOn) { bAutoVertexCon = bOn; } + sal_Bool IsAutoVertexConnectors() const { return bAutoVertexCon; } + + // Verbinder an Objektecken ankleben + // Default=sal_False=Nein + void SetAutoCornerConnectors(sal_Bool bOn) { bAutoCornerCon = bOn; } + sal_Bool IsAutoCornerConnectors() const { return bAutoCornerCon; } + + // Dragging von verbundenen Objekten (Nodes): + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // DetailedEdgeDraggingLimit: Wie RubberEdgeDraggingLimit, jedoch bezieht + // sich dieses Limit auf die detalierte Darstellung, d.h. nicht nur + // Gummibaender sondern komplette Neuberechnunen sind beim Draggen sichtbar. + // Diese detalierte Darstellung ist eh nur beim MoveDrag moeglich. + // Defaultwert ist 10 + sal_Bool IsDetailedEdgeDragging() const { return bDetailedEdgeDragging; } + + sal_uInt16 GetDetailedEdgeDraggingLimit() const { return nDetailedEdgeDraggingLimit; } + + // EdgeDraggingLimit: Sind mehr als nEdgeObjAnz Kanten betroffen, werden + // diese beim interaktiven Draggen nicht mit angezeigt. + // Gemeint sind hier die "Gummibaender", die weniger Rechenzeit benoetigen + // als die kompletten Neuberechnungen beim DetailedEdgeDragging. + // Defaultwert ist 100 + sal_Bool IsRubberEdgeDragging() const { return bRubberEdgeDragging; } + + // Verbinderhandling also zu deutsch wie folgt (bei Defaulteinstellungen): + // - Sind bis max 10 Verbinder betroffen werden diese bei jedem + // MouseMove neu berechnet + // - Sind zwischen 11 und 100 Verbinder betroffen werden die + // Verbindungen beim Draggen als gerade Linien dargestellt. + // - Bei mehr als 100 betroffenen Verbindern wird beim Draggen nichts + // mehr gezeichnet was auf Verbinder hinweist. + + // Ist ein spezieller Dragmode eingeschaltet, wie Rotate, Mirror oder Crook, + // dann leitet ein Hit auf das markierte Objekt genau dieses Dragging ein. + // Setzt man MarkedHitMovesAlways auf sal_True, so leitet ein Hit auf das + // markierte Objekt immer ein Moven ein, unabhaengig vom gesetzten DragMode. + // Dieses Flag ist persistent und sollte von der App fuer den Anwender + // konfigurierbar sein! + void SetMarkedHitMovesAlways(sal_Bool bOn) { bMarkedHitMovesAlways = bOn; } + sal_Bool IsMarkedHitMovesAlways() const { return bMarkedHitMovesAlways; } + + // Beim Draggen der Spiegelachse das Spiegelbild der markierten Objekte + // als Xor darstellen? Persistent. Noch nicht implementiert. Default TRUE. + void SetMirrRefDragObj(sal_Bool bOn) { bMirrRefDragObj = bOn; } + sal_Bool IsMirrRefDragObj() const { return bMirrRefDragObj; } + + sal_Bool IsOrthoDesired() const; + + // Beim Resize die Mitte als Referenz + // Default=FALSE. + sal_Bool IsResizeAtCenter() const { return bResizeAtCenter; } + void SetResizeAtCenter(sal_Bool bOn) { bResizeAtCenter = bOn; } + + // Symmetrisches Crook + // Default=FALSE. + sal_Bool IsCrookAtCenter() const { return bCrookAtCenter; } + void SetCrookAtCenter(sal_Bool bOn) { bCrookAtCenter = bOn; } + + // Begrenzung des Arbeitsbereichs. Die Begrenzung bezieht sich auf die + // View, nicht auf die einzelnen PageViews. Von der View wird diese + // Begrenzung nur bei Interaktionen wie Dragging und Create ausgewertet. + // Bei von der App algorithmisch oder UI-gesteuerte Aktionen (SetGeoAttr, + // MoveMarkedObj, ...) muss die App dieses Limit selbst beruecksichtigen. + // Ferner ist dieses Limit als Grob-Limit zu sehen. U.U. koennen Objekte + // (z.B. beim Drehen) nicht exakt bis an dieses Limit herangedraggt werden, + // koennen Objekte durch Rundungsfehler doch etwas ueberstehen, ... . + // Default=EmptyRect=keine Begrenzung. + // erst z.T. impl. + // (besser in die DragView?) + void SetWorkArea(const Rectangle& rRect) { aMaxWorkArea=rRect; } + const Rectangle& GetWorkArea() const { return aMaxWorkArea; } + + + // Das DragLimit ist bezogen auf die Page des Objekts. + // (Oder auf die View??? Muss ich mal^^^^recherchieren. Joe.) + // sal_False=Kein Limit. + // Das Rueckgabe-Rect muss absolute Koordinaten enthalten. Der Maximale + // Dragbereich wird von der View dann so gewaehlt, dass das SnapRect des + // Objekts bis Maximal auf die Kante des LimitRects gemoved bzw. gesized + // wird. Bei Objekten wie Bezierkurven, gedrehten Rechtecken ist zu beachten + // das durch anschliessende Neuberechnung des SnapRects (bei Resize) + // Rundungsfehler auftreten koennen, wodurch das LimitRect minnimal + // ueberschritten werden koennte... + // Implementiert fuer Move und Resize. + virtual sal_Bool TakeDragLimit(SdrDragMode eMode, Rectangle& rRect) const; +}; + +#endif //_SVDDRGV_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdedtv.hxx b/include/svx/svdedtv.hxx new file mode 100644 index 000000000000..39e75ad18738 --- /dev/null +++ b/include/svx/svdedtv.hxx @@ -0,0 +1,450 @@ +/* -*- 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 _SVDEDTV_HXX +#define _SVDEDTV_HXX + +#include <svx/svdmrkv.hxx> +#include <svx/xpoly.hxx> +#include <svx/svdmodel.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class SfxUndoAction; +class SdrUndoAction; +class SdrUndoGroup; +class SfxStyleSheet; +class SdrLayer; +class SvdProgressInfo; + +//************************************************************ +// Defines +//************************************************************ + +enum SdrHorAlign { + SDRHALIGN_NONE, + SDRHALIGN_LEFT, + SDRHALIGN_RIGHT, + SDRHALIGN_CENTER +}; + +enum SdrVertAlign { + SDRVALIGN_NONE, + SDRVALIGN_TOP, + SDRVALIGN_BOTTOM, + SDRVALIGN_CENTER +}; + +enum SdrMergeMode { + SDR_MERGE_MERGE, + SDR_MERGE_SUBSTRACT, + SDR_MERGE_INTERSECT +}; + +// Optionen fuer InsertObject() +#define SDRINSERT_DONTMARK 0x0001 /* Obj wird nicht markiert (aktuelle Markierung bleibt bestehen) */ +#define SDRINSERT_ADDMARK 0x0002 /* Das Obj wird zu einer ggf. bereits bestehenden Selektion hinzumarkiert */ +#define SDRINSERT_SETDEFATTR 0x0004 /* Die aktuellen Attribute (+StyleSheet) werden dem Obj zugewiesen */ +#define SDRINSERT_SETDEFLAYER 0x0008 /* Der aktuelle Layer wird dem Obj zugewiesen */ +#define SDRINSERT_NOBROADCAST 0x0010 /* Einfuegen mit NbcInsertObject() fuer SolidDragging */ + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@@@@ @@@@@ @@ @@@@@@ @@ @@ @@ @@@@@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @ @@ +// @@@@ @@ @@ @@ @@ @@@@@ @@ @@@@ @@@@@@@ +// @@ @@ @@ @@ @@ @@@ @@ @@ @@@@@@@ +// @@ @@ @@ @@ @@ @@@ @@ @@ @@@ @@@ +// @@@@@ @@@@@ @@ @@ @ @@ @@@@@ @@ @@ +// +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrEditView: public SdrMarkView +{ + friend class SdrPageView; + friend class SdrDragDistort; + friend class SdrDragCrook; + +protected: + + // Die Transformationsnachfragen, etc. etwas cachen + unsigned bPossibilitiesDirty : 1; + unsigned bReadOnly : 1; + unsigned bGroupPossible : 1; + unsigned bUnGroupPossible : 1; + unsigned bGrpEnterPossible : 1; + unsigned bDeletePossible : 1; + unsigned bToTopPossible : 1; + unsigned bToBtmPossible : 1; + unsigned bReverseOrderPossible : 1; + unsigned bImportMtfPossible : 1; + unsigned bCombinePossible : 1; + unsigned bDismantlePossible : 1; + unsigned bCombineNoPolyPolyPossible : 1; + unsigned bDismantleMakeLinesPossible : 1; + unsigned bOrthoDesiredOnMarked : 1; + unsigned bMoreThanOneNotMovable : 1; // Es ist mehr als ein Objekt nicht verschiebbar + unsigned bOneOrMoreMovable : 1; // Wenigstens 1 Obj verschiebbar + unsigned bMoreThanOneNoMovRot : 1; // Es ist mehr als ein Objekt nicht verschieb- und drehbar (Crook) + unsigned bContortionPossible : 1; // Alles Polygone (ggf. gruppiert) + unsigned bAllPolys : 1; // Alles Polygone (nicht gruppiert) + unsigned bOneOrMorePolys : 1; // Mindestens 1 Polygon (nicht gruppiert) + unsigned bMoveAllowed : 1; + unsigned bResizeFreeAllowed : 1; + unsigned bResizePropAllowed : 1; + unsigned bRotateFreeAllowed : 1; + unsigned bRotate90Allowed : 1; + unsigned bMirrorFreeAllowed : 1; + unsigned bMirror45Allowed : 1; + unsigned bMirror90Allowed : 1; + unsigned bShearAllowed : 1; + unsigned bEdgeRadiusAllowed : 1; + unsigned bTransparenceAllowed : 1; + unsigned bGradientAllowed : 1; + unsigned bCanConvToPath : 1; + unsigned bCanConvToPoly : 1; + unsigned bCanConvToContour : 1; + unsigned bCanConvToPathLineToArea : 1; + unsigned bCanConvToPolyLineToArea : 1; + unsigned bMoveProtect : 1; + unsigned bResizeProtect : 1; + // Z-Order von virtuellen Objekten zusammenhalten (Writer) + unsigned bBundleVirtObj : 1; + +private: + SVX_DLLPRIVATE void ImpClearVars(); + SVX_DLLPRIVATE void ImpResetPossibilityFlags(); + +protected: + void ImpBroadcastEdgesOfMarkedNodes(); + + // Konvertierung der markierten Objekte in Poly bzw. Bezier. + void ImpConvertTo(sal_Bool bPath, sal_Bool bLineToArea); + + // Konvertiert ein Obj, wirft bei Erfolg das alte as seiner Liste und + // fuegt das neue an dessen Position ein. Inkl Undo. Es wird weder ein + // MarkEntry noch ein ModelChgBroadcast generiert. + SdrObject* ImpConvertOneObj(SdrObject* pObj, sal_Bool bPath, sal_Bool bLineToArea); + + // Setzen der beiden Flags bToTopPossible und bToBtmPossible. + // bToTopPossibleDirty und bToBtmPossibleDirty werden dabei gleichzeitig + // zurueckgesetzt. + void ImpCheckToTopBtmPossible(); + + // fuer CombineMarkedObjects und DismantleMarkedObjects + void ImpCopyAttributes(const SdrObject* pSource, SdrObject* pDest) const; + + // fuer CombineMarkedObjects + sal_Bool ImpCanConvertForCombine1(const SdrObject* pObj) const; + sal_Bool ImpCanConvertForCombine(const SdrObject* pObj) const; + basegfx::B2DPolyPolygon ImpGetPolyPolygon1(const SdrObject* pObj, sal_Bool bCombine) const; + basegfx::B2DPolyPolygon ImpGetPolyPolygon(const SdrObject* pObj, sal_Bool bCombine) const; + basegfx::B2DPolygon ImpCombineToSinglePolygon(const basegfx::B2DPolyPolygon& rPolyPolygon) const; + + // fuer DismantleMarkedObjects + sal_Bool ImpCanDismantle(const basegfx::B2DPolyPolygon& rPpolyPpolygon, sal_Bool bMakeLines) const; + sal_Bool ImpCanDismantle(const SdrObject* pObj, sal_Bool bMakeLines) const; + void ImpDismantleOneObject(const SdrObject* pObj, SdrObjList& rOL, sal_uIntPtr& rPos, SdrPageView* pPV, sal_Bool bMakeLines); + void ImpCrookObj(SdrObject* pO, const Point& rRef, const Point& rRad, SdrCrookMode eMode, + sal_Bool bVertical, sal_Bool bNoContortion, sal_Bool bRotate, const Rectangle& rMarkRect); + void ImpDistortObj(SdrObject* pO, const Rectangle& rRef, const XPolygon& rDistortedRect, sal_Bool bNoContortion); + sal_Bool ImpDelLayerCheck(SdrObjList* pOL, SdrLayerID nDelID) const; + void ImpDelLayerDelObjs(SdrObjList* pOL, SdrLayerID nDelID); + + // Entfernt alle Obj der MarkList aus ihren ObjLists inkl Undo. + // Die Eintraege in rMark bleiben erhalten. + void DeleteMarkedList(const SdrMarkList& rMark); // DeleteMarked -> DeleteMarkedList + + // Die Transformationsnachfragen etwas cachen + //void ImpCheckMarkTransform() const; veraltet + // Checken, was man so mit den markierten Objekten alles machen kann + virtual void CheckPossibilities(); + void ForcePossibilities() const { if (bPossibilitiesDirty || bSomeObjChgdFlag) ((SdrEditView*)this)->CheckPossibilities(); } + +protected: + // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView + SdrEditView(SdrModel* pModel1, OutputDevice* pOut = 0L); + virtual ~SdrEditView(); + +public: + // Jeder Aufruf einer undofaehigen Methode an der View generiert eine + // UndoAction. Moechte man mehrere + // Methodenaufrufe zu einer UndoAction zusammenfassen, so kann man diese + // mit BegUndo() / EndUndo() klammern (beliebig tief). Als Kommentar der + // UndoAction wird der des ersten BegUndo(String) aller Klammerungen + // verwendet. NotifyNewUndoAction() wird in diesem Fall erst beim letzten + // EndUndo() gerufen. NotifyNewUndoAction() wird nicht gerufen bei einer + // leeren Klammerung. + void BegUndo() { pMod->BegUndo(); } // Undo-Klammerung auf + void BegUndo(const String& rComment) { pMod->BegUndo(rComment); } // Undo-Klammerung auf + void BegUndo(const String& rComment, const String& rObjDescr, SdrRepeatFunc eFunc=SDRREPFUNC_OBJ_NONE) { pMod->BegUndo(rComment,rObjDescr,eFunc); } // Undo-Klammerung auf + void EndUndo(); // Undo-Klammerung zu (inkl BroadcastEdges) + void AddUndo(SdrUndoAction* pUndo) { pMod->AddUndo(pUndo); } // Action hinzufuegen + // nur nach dem 1. BegUndo oder vor dem letzten EndUndo: + void SetUndoComment(const String& rComment) { pMod->SetUndoComment(rComment); } + void SetUndoComment(const String& rComment, const String& rObjDescr) { pMod->SetUndoComment(rComment,rObjDescr); } + bool IsUndoEnabled() const; + + std::vector< SdrUndoAction* > CreateConnectorUndo( SdrObject& rO ); + void AddUndoActions( std::vector< SdrUndoAction* >& ); + + // Layerverwaltung. Mit Undo. + SdrLayer* InsertNewLayer(const String& rName, sal_uInt16 nPos=0xFFFF); + // Loeschen eines Layer inkl. aller darauf befindlichen Objekte + void DeleteLayer(const String& rName); + // Verschieben eines Layer (Layerreihenfolge aendern) + void MoveLayer(const String& rName, sal_uInt16 nNewPos); + + // Markierte Objekte die ausserhalb ihrer Page liegen + // werden ggf. einer anderen Page zugewiesen + // z.Zt. noch ohne Undo!!! + void ForceMarkedObjToAnotherPage(); + void ForceMarkedToAnotherPage() { ForceMarkedObjToAnotherPage(); } + + sal_Bool IsReadOnly() const { ForcePossibilities(); return bReadOnly; } + + // Loeschen aller markierten Objekte + void DeleteMarkedObj(); + sal_Bool IsDeleteMarkedObjPossible() const { ForcePossibilities(); return bDeletePossible; } + + // Logisch- umschliessendes Rect aller markierten Objekte setzen. + // Das das wirklich geschieht ist nicht garantiert, denn eine + // waagerechte Linie hat z.B. immer eine Hoehe von 0. + void SetMarkedObjRect(const Rectangle& rRect, sal_Bool bCopy=sal_False); + void MoveMarkedObj(const Size& rSiz, bool bCopy=false); + void ResizeMarkedObj(const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bCopy=false); + long GetMarkedObjRotate() const; + void RotateMarkedObj(const Point& rRef, long nWink, bool bCopy=false); + void MirrorMarkedObj(const Point& rRef1, const Point& rRef2, bool bCopy=false); + void MirrorMarkedObjHorizontal(sal_Bool bCopy=sal_False); + void MirrorMarkedObjVertical(sal_Bool bCopy=sal_False); + long GetMarkedObjShear() const; + void ShearMarkedObj(const Point& rRef, long nWink, bool bVShear=false, bool bCopy=false); + void CrookMarkedObj(const Point& rRef, const Point& rRad, SdrCrookMode eMode, bool bVertical=false, bool bNoContortion=false, bool bCopy=false); + void DistortMarkedObj(const Rectangle& rRef, const XPolygon& rDistortedRect, bool bNoContortion=false, bool bCopy=false); + + // Markierte Objekte kopieren und anstelle der alten markieren + void CopyMarkedObj(); + void SetAllMarkedRect(const Rectangle& rRect, sal_Bool bCopy=sal_False) { SetMarkedObjRect(rRect,bCopy); } + void MoveAllMarked(const Size& rSiz, sal_Bool bCopy=sal_False) { MoveMarkedObj (rSiz,bCopy); } + void ResizeAllMarked(const Point& rRef, const Fraction& xFact, const Fraction& yFact, sal_Bool bCopy=sal_False) { ResizeMarkedObj (rRef,xFact,yFact,bCopy); } + long GetAllMarkedRotate() const { return GetMarkedObjRotate(); } + void RotateAllMarked(const Point& rRef, long nWink, sal_Bool bCopy=sal_False) { RotateMarkedObj(rRef,nWink,bCopy); } + void MirrorAllMarked(const Point& rRef1, const Point& rRef2, sal_Bool bCopy=sal_False) { MirrorMarkedObj(rRef1,rRef2,bCopy); } + void MirrorAllMarkedHorizontal(sal_Bool bCopy=sal_False) { MirrorMarkedObjHorizontal(bCopy); } + void MirrorAllMarkedVertical(sal_Bool bCopy=sal_False) { MirrorMarkedObjVertical(bCopy); } + long GetAllMarkedShear() const { return GetMarkedObjShear(); } + void ShearAllMarked(const Point& rRef, long nWink, sal_Bool bVShear=sal_False, sal_Bool bCopy=sal_False) { ShearMarkedObj(rRef,nWink,bVShear,bCopy); } + void CrookAllMarked(const Point& rRef, const Point& rRad, SdrCrookMode eMode, sal_Bool bVertical=sal_False, sal_Bool bNoContortion=sal_False, sal_Bool bCopy=sal_False) { CrookMarkedObj(rRef,rRad,eMode,bVertical,bNoContortion,bCopy); } + void CopyMarked() { CopyMarkedObj(); } + sal_Bool IsMoveAllowed() const { ForcePossibilities(); return bMoveAllowed && !bMoveProtect; } + sal_Bool IsResizeAllowed(sal_Bool bProp=sal_False) const; + sal_Bool IsRotateAllowed(sal_Bool b90Deg=sal_False) const; + sal_Bool IsMirrorAllowed(sal_Bool b45Deg=sal_False, sal_Bool b90Deg=sal_False) const; + sal_Bool IsTransparenceAllowed() const; + sal_Bool IsGradientAllowed() const; + sal_Bool IsShearAllowed() const; + sal_Bool IsEdgeRadiusAllowed() const; + sal_Bool IsCrookAllowed(sal_Bool bNoContortion=sal_False) const; + sal_Bool IsDistortAllowed(sal_Bool bNoContortion=sal_False) const; + + // Vereinigen mehrerer Objekte zu einem PolyPolygon: + // - Rechtecke/Kreise/Text... werden implizit gewandelt. + // - Polylines werden automatisch geschlossen. + // - Die Attribute und der Layer werden vom Ersten der markierten Objekte + // uebernommen (also vom untersten der Z-Order). + // - Gruppenobjekte werden miteinbezogen, wenn alle! Memberobjekte der + // Gruppe wandelbar sind. Beinhaltet eine Gruppe also beispielsweise + // eine Bitmap oder ein OLE-Objekt, wird die gesamte Gruppe nicht + // beruecksichtigt. + // bNoPolyPoly=TRUE: Alles wird zu einem einzigen Polygon zusammengefasst + void CombineMarkedObjects(sal_Bool bNoPolyPoly = sal_True); + + // for combining multiple polygons, with direct support of the modes + // SID_POLY_MERGE, SID_POLY_SUBSTRACT, SID_POLY_INTERSECT + void MergeMarkedObjects(SdrMergeMode eMode); + + // for distribution dialog function + void DistributeMarkedObjects(); + + // Markierte Polypolygonobjekte in Polygone zerlegen + // Gruppenobjekte werden durchsucht und zerlegt, wenn es sich bei allen + // Memberobjekten um PathObjs handelt. + // bMakeLines=TRUE: alle Polygone werden in einzelne Linien bzw. + // Beziersegmente zerlegt + void DismantleMarkedObjects(sal_Bool bMakeLines=sal_False); + sal_Bool IsCombinePossible(sal_Bool bNoPolyPoly=sal_False) const; + sal_Bool IsDismantlePossible(sal_Bool bMakeLines=sal_False) const; + + // Ein neues bereits fertig konstruiertes Obj einfuegen. Das Obj gehoert + // anschliessend dem Model. Nach dem Einfuegen wird das neue Objekt + // markiert (wenn dies nicht via nOptions unterbunden wird). + // U.U. wird das Obj jedoch nicht eingefuegt, sondern deleted, naemlich + // wenn der Ziel-Layer gesperrt oder nicht sichtbar ist. In diesem Fall + // returniert die Methode mit FALSE. + // Die Methode generiert u.a. auch eine Undo-Action. + sal_Bool InsertObjectAtView(SdrObject* pObj, SdrPageView& rPV, sal_uIntPtr nOptions=0); + + // Ein Zeichenobjekt durch ein neues ersetzen. *pNewObj gehoert + // anschliessend mir, *pOldObj wandert ins Undo. + // Sollte in jedem Fall mit einer Undo-Klammerung versehen werden, z.B.: + // aStr+=" ersetzen"; + // BegUndo(aStr); + // ReplaceObject(...); + // ... + // EndUndo(); + void ReplaceObjectAtView(SdrObject* pOldObj, SdrPageView& rPV, SdrObject* pNewObj, sal_Bool bMark=sal_True); + + void SetNotPersistAttrToMarked(const SfxItemSet& rAttr, sal_Bool bReplaceAll); + void MergeNotPersistAttrFromMarked(SfxItemSet& rAttr, sal_Bool bOnlyHardAttr) const; + void MergeAttrFromMarked(SfxItemSet& rAttr, sal_Bool bOnlyHardAttr) const; + SfxItemSet GetAttrFromMarked(sal_Bool bOnlyHardAttr) const; + void SetAttrToMarked(const SfxItemSet& rAttr, sal_Bool bReplaceAll); + + // Geometrische Attribute (Position, Groesse, Drehwinkel) + // Bei der Position wird ein evtl. gesetzter PageOrigin beruecksichtigt. + SfxItemSet GetGeoAttrFromMarked() const; + void SetGeoAttrToMarked(const SfxItemSet& rAttr); + + // Returnt NULL wenn: + // - Nix markiert, + // - kein StyleSheet an den markierten Objekten gesetzt + // - Bei Mehrfachselektion die markierten Objekte auf unterschiedliche + // StyleSheets verweisen. + SfxStyleSheet* GetStyleSheetFromMarked() const; + + // z.Zt. noch ohne Undo :( + void SetStyleSheetToMarked(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr); + + /* new interface src537 */ + sal_Bool GetAttributes(SfxItemSet& rTargetSet, sal_Bool bOnlyHardAttr) const; + + sal_Bool SetAttributes(const SfxItemSet& rSet, sal_Bool bReplaceAll); + SfxStyleSheet* GetStyleSheet() const; // SfxStyleSheet* GetStyleSheet(sal_Bool& rOk) const; + sal_Bool SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr); + + // Alle markierten Objekte zu einer Gruppe zusammenfassen. + // Anschliessend wird die neue Gruppe markiert. Bei einer + // seitenuebergreifenden Markierung wird eine Gruppe je Seite erzeugt. + // Alle erzeugten Gruppen sind anschliessend markiert. + // Ueber pUserGrp kann ein eigenes Gruppenobjekt vorgegeben werden. Dieses + // wird jedoch nicht direkt verwendet, sondern via Clone kopiert. + // Wird NULL uebergeben, macht sich die Methode SdrObjGroup-Instanzen. + void GroupMarked(const SdrObject* pUserGrp=NULL); + + // Alle markierten Objektgruppen werden aufgeloesst (1 Level). + // Anschliessend sind statt der Gruppenobjekte alle ehemaligen + // Memberobjekte der aufgeloesten Gruppen markiert. Waren zum auch Objekte + // markiert, die keine Gruppenobjekte sind, so bleiben diese weiterhin + // zusaetzlich markiert. + void UnGroupMarked(); + + sal_Bool IsGroupPossible() const { ForcePossibilities(); return bGroupPossible; } + sal_Bool IsUnGroupPossible() const { ForcePossibilities(); return bUnGroupPossible; } + sal_Bool IsGroupEnterPossible() const { ForcePossibilities(); return bGrpEnterPossible; } + + // Markierte Objekte in Polygone/Bezierkurven verwandeln. Die sal_Bool- + // Funktionen returnen sal_True, wenn wenigstens eins der markierten + // Objekte gewandelt werden kann. Memberobjekte von Gruppenobjekten + // werden ebenfalls gewandelt. Naehere Beschreibung siehe SdrObj.HXX. + sal_Bool IsConvertToPathObjPossible(sal_Bool bLineToArea) const { ForcePossibilities(); return sal_Bool(bLineToArea ? bCanConvToPathLineToArea : bCanConvToPath); } + sal_Bool IsConvertToPolyObjPossible(sal_Bool bLineToArea) const { ForcePossibilities(); return sal_Bool(bLineToArea ? bCanConvToPolyLineToArea : bCanConvToPoly); } + sal_Bool IsConvertToContourPossible() const { ForcePossibilities(); return bCanConvToContour; } + void ConvertMarkedToPathObj(sal_Bool bLineToArea); + void ConvertMarkedToPolyObj(sal_Bool bLineToArea); + + // Alle markierten Objekte untereinander ausrichten. Normalerweise werden + // das SnapRect der Obj verwendet. Ist bBoundRects=sal_True, werden stattdessen + // die BoundRects ausgerichtet. + void AlignMarkedObjects(SdrHorAlign eHor, SdrVertAlign eVert, sal_Bool bBoundRects=sal_False); + sal_Bool IsAlignPossible() const; + + // Markierte Objekte etwas nach "oben" holen + void MovMarkedToTop(); + + // Markierte Objekte etwas nach "unten" holen + void MovMarkedToBtm(); + + // Markierte Objekte ganz nach "oben" stellen + void PutMarkedToTop(); + + // Markierte Objekte ganz nach "unten" stellen + void PutMarkedToBtm(); + + // Markierte direkt vor das uebergebene Objekt stellen + // NULL -> wie PutMarkedToTop(); + void PutMarkedInFrontOfObj(const SdrObject* pRefObj); + + // Markierte direkt hinter das uebergebene Objekt stellen + // NULL -> wie PutMarkedToBtm(); + void PutMarkedBehindObj(const SdrObject* pRefObj); + + // Z-Order der markierten Objekte vertauschen + void ReverseOrderOfMarked(); + + // Feststellen, ob nach vorn/hinten stellen moeglich ist + // GetMaxToTop/BtmObj() wird von diesen Methoden nur begrenzt + // beruecksichtigt, d.h. es kann vorkommen dass IsToTopPossible() + // sal_True liefert, MovMarkedToTop() jedoch nichts aendert (z.B. bei + // Mehrfachselektion), weil eine von der abgeleiteten View ueber + // GetMaxToTopObj() auferlegte Restriktion dies verhindert. + sal_Bool IsToTopPossible() const { ForcePossibilities(); return bToTopPossible; } + sal_Bool IsToBtmPossible() const { ForcePossibilities(); return bToBtmPossible; } + sal_Bool IsReverseOrderPossible() const { ForcePossibilities(); return bReverseOrderPossible; } + + // Ueber diese Methoden stellt die View fest, wie weit ein Objekt + // nach vorn bzw. nach hinten gestellt werden darf (Z-Order). Das + // zurueckgegebene Objekt wird dann nicht "ueberholt". Bei Rueckgabe + // von NULL (Defaultverhalten) bestehen keine Restriktionen. + virtual SdrObject* GetMaxToTopObj(SdrObject* pObj) const; + virtual SdrObject* GetMaxToBtmObj(SdrObject* pObj) const; + + // Folgende Methode wird gerufen, wenn z.B. durch ToTop, ToBtm, ... die + // Reihenfolgen der Objekte geaendert wurde. Der Aufruf erfolgt dann nach + // jedem SdrObjList::SetObjectOrdNum(nOldPos,nNewPos); + virtual void ObjOrderChanged(SdrObject* pObj, sal_uIntPtr nOldPos, sal_uIntPtr nNewPos); + + // Falls ein oder mehrere Objekte des Types SdrGrafObj oder SdrOle2Obj + // markiert sind und diese in der Lage sind ein StarView-Metafile zu + // liefern, konvertiert diese Methode das Metafile in Drawingobjekte. + // Die SdrGrafObjs/SdrOle2Objs werden dann durch die neue Objekte ersetzt. + void DoImportMarkedMtf(SvdProgressInfo *pProgrInfo=NULL); + sal_Bool IsImportMtfPossible() const { ForcePossibilities(); return bImportMtfPossible; } + + // Wird der Modus VirtualObjectBundling eingeschaltet, werden beim + // ToTop/ToBtm virtuelle Objekte die dasselbe Objekt referenzieren + // in ihrer Z-Order buendig zusammengehalten (Writer). + // Defaulteinstellung ist sal_False=ausgeschaltet. + void SetVirtualObjectBundling(sal_Bool bOn) { bBundleVirtObj=bOn; } + sal_Bool IsVirtualObjectBundling() const { return bBundleVirtObj; } + + // von der SdrMarkView ueberladen fuer den internen gebrauch + virtual void MarkListHasChanged(); + virtual void ModelHasChanged(); +}; + +#endif //_SVDEDTV_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdedxv.hxx b/include/svx/svdedxv.hxx new file mode 100644 index 000000000000..13cf6f05b5ef --- /dev/null +++ b/include/svx/svdedxv.hxx @@ -0,0 +1,292 @@ +/* -*- 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 _SVDEDXV_HXX +#define _SVDEDXV_HXX + +#include <rtl/ref.hxx> +#include "svx/svxdllapi.h" +#include <svx/svdglev.hxx> + +#include <svx/selectioncontroller.hxx> + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +#include <boost/shared_ptr.hpp> + +class SdrOutliner; +class OutlinerView; +class EditStatus; +class EditFieldInfo; +class ImpSdrEditPara; +struct PasteOrDropInfos; + +namespace com { namespace sun { namespace star { namespace uno { + class Any; +} } } } + +namespace sdr { + class SelectionController; +} + +//************************************************************ +// Defines +//************************************************************ + +enum SdrEndTextEditKind {SDRENDTEXTEDIT_UNCHANGED, // Textobjekt unveraendert + SDRENDTEXTEDIT_CHANGED, // Textobjekt wurde geaendert + SDRENDTEXTEDIT_DELETED, // Textobjekt implizit geloescht + SDRENDTEXTEDIT_SHOULDBEDELETED}; // Fuer Writer: Textobjekt sollte geloescht werden + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@@@ @@@@@ @@@@@@ @@@@@ @@@@@ @@ @@@@@@ @@ @@ @@ @@@@@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @ @@ +// @@ @@ @@@@@ @@ @@@@ @@ @@ @@ @@ @@@@@ @@ @@@@ @@@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@ @@@ +// @@@@ @@@@@ @@@@ @@@@@ @@@@@ @@ @@ @ @@ @@@@@ @@ @@ +// +// - Allgemeines Edit fuer objektspeziefische Eigenschaften +// - Textedit fuer alle vom SdrTextObj abgeleiteten Zeichenobjekte +// - Macromodus +// +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrObjEditView: public SdrGlueEditView +{ + friend class SdrPageView; + friend class ImpSdrEditPara; + +protected: + // TextEdit + SdrObjectWeakRef mxTextEditObj; // Aktuell im TextEdit befindliches Obj + SdrPageView* pTextEditPV; + SdrOutliner* pTextEditOutliner; // Na eben der Outliner fuers TextEdit + OutlinerView* pTextEditOutlinerView; // die aktuelle View des Outliners + Window* pTextEditWin; // passendes Win zu pTextEditOutlinerView + Cursor* pTextEditCursorMerker; // Zum Restaurieren des Cursors am jeweiligen Win + ImpSdrEditPara* pEditPara; // Da hau' ich erstmal alles rein um kompatibel zu bleiben... + SdrObject* pMacroObj; + SdrPageView* pMacroPV; + Window* pMacroWin; + + Rectangle aTextEditArea; + Rectangle aMinTextEditArea; + Link aOldCalcFieldValueLink; // Zum rufen des alten Handlers + Point aMacroDownPos; + + sal_uInt16 nMacroTol; + + unsigned bTextEditDontDelete : 1; // Outliner und View bei SdrEndTextEdit nicht deleten (f. Rechtschreibpruefung) + unsigned bTextEditOnlyOneView : 1; // Nur eine OutlinerView (f. Rechtschreibpruefung) + unsigned bTextEditNewObj : 1; // Aktuell editiertes Objekt wurde gerade neu erzeugt + unsigned bQuickTextEditMode : 1; // persistent(->CrtV). Default=TRUE + unsigned bMacroMode : 1; // persistent(->CrtV). Default=TRUE + unsigned bMacroDown : 1; + + rtl::Reference< sdr::SelectionController > mxSelectionController; + rtl::Reference< sdr::SelectionController > mxLastSelectionController; + +private: + SVX_DLLPRIVATE void ImpClearVars(); + +protected: + OutlinerView* ImpFindOutlinerView(Window* pWin) const; + + // Eine neue OutlinerView auf dem Heap anlegen und alle erforderlichen Parameter setzen. + // pTextEditObj, pTextEditPV und pTextEditOutliner muessen initiallisiert sein. + OutlinerView* ImpMakeOutlinerView(Window* pWin, bool bNoPaint, OutlinerView* pGivenView) const; + void ImpPaintOutlinerView(OutlinerView& rOutlView, const Rectangle& rRect, OutputDevice& rTargetDevice) const; + void ImpInvalidateOutlinerView(OutlinerView& rOutlView) const; + + // Feststellen, ob der gesamte Text markiert ist. Liefert auch sal_True wenn + // kein Text vorhanden ist. + sal_Bool ImpIsTextEditAllSelected() const; + void ImpMakeTextCursorAreaVisible(); + + // Handler fuer AutoGrowing Text bei aktivem Outliner + DECL_LINK(ImpOutlinerStatusEventHdl,EditStatus*); + DECL_LINK(ImpOutlinerCalcFieldValueHdl,EditFieldInfo*); + + void ImpMacroUp(const Point& rUpPos); + void ImpMacroDown(const Point& rDownPos); + + DECL_LINK( BeginPasteOrDropHdl, PasteOrDropInfos* ); + DECL_LINK( EndPasteOrDropHdl, PasteOrDropInfos* ); + +protected: + // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView + SdrObjEditView(SdrModel* pModel1, OutputDevice* pOut = 0L); + virtual ~SdrObjEditView(); + +public: + //////////////////////////////////////////////////////////////////////////////////////////////////// + // used to call the old ImpPaintOutlinerView. Will be replaced when the + // outliner will be displayed on the overlay in edit mode. + void TextEditDrawing(SdrPaintWindow& rPaintWindow) const; + + // Actionhandling fuer Macromodus + virtual sal_Bool IsAction() const; + virtual void MovAction(const Point& rPnt); + virtual void EndAction(); + virtual void BrkAction(); + virtual void BckAction(); + virtual void TakeActionRect(Rectangle& rRect) const; + + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + virtual void ModelHasChanged(); + + //************************************************************************ + // TextEdit ueber einen Outliner + //************************************************************************ + // QuickTextEditMode bedeutet, dass Objekte mit Text sofort beim Anklicken + // editiert werden sollen. Default=TRUE. Persistent. + void SetQuickTextEditMode(sal_Bool bOn) { bQuickTextEditMode=bOn; } + sal_Bool IsQuickTextEditMode() const { return bQuickTextEditMode; } + + // Starten des TextEditMode. Ist pWin==NULL, wird das erste an der View + // angemeldete Win verwendet. + // Der Cursor des Fensters an dem Editiert wird wird bei + // SdrBeginTextEdit() gemerkt und bei SdrEndTextEdit() wieder restauriert. + // Die App muss sicherstellen, das die zum Zeitpunkt des BegEdit am + // Windows angemeldete Cursorinstanz beim SdrEndTextEdit noch gueltig ist. + // Ueber den Parameter pEditOutliner kann die Applikation einen eigenen + // Outliner vorgeben, der zum Editieren verwendet wird. Dieser gehoert + // nach Aufruf von SdrBeginTextEdit der SdrObjEditView und wird von dieser + // spaeter via delete zerstoert (falls bDontDeleteOutliner=sal_False). Die + // SdrObjEditView setzt dann das Modusflag (EditEngine/Outliner) an + // dieser Instanz und ausserdem auch den StatusEventHdl. + // Ebenso kann eine spezifische OutlinerView vorgegeben werden. + + virtual sal_Bool SdrBeginTextEdit(SdrObject* pObj, SdrPageView* pPV = 0L, ::Window* pWin = 0L, sal_Bool bIsNewObj = sal_False, + SdrOutliner* pGivenOutliner = 0L, OutlinerView* pGivenOutlinerView = 0L, + sal_Bool bDontDeleteOutliner = sal_False, sal_Bool bOnlyOneView = sal_False, sal_Bool bGrabFocus = sal_True); + // bDontDeleteReally ist ein Spezialparameter fuer den Writer. + // Ist dieses Flag gesetzt, dann wird ein evtl. leeres Textobjekt + // nicht geloescht. Stattdessen gibt es dann einen Returncode + // SDRENDTEXTEDIT_SHOULDBEDELETED (anstelle von SDRENDTEXTEDIT_BEDELETED) + // der besagt, dass das Objekt geloescht werden sollte. + virtual SdrEndTextEditKind SdrEndTextEdit(sal_Bool bDontDeleteReally = sal_False); + virtual bool IsTextEdit() const; + + // Diese Methode liefert sal_True, wenn der Punkt rHit innerhalb der + // des Objektbereichs oder der OutlinerView liegt. + sal_Bool IsTextEditHit(const Point& rHit, short nTol) const; + + // Diese Methode liefert sal_True, wenn der Punkt rHit innerhalb des + // Handle-dicken Rahmens liegt, der die OutlinerView bei TextFrames + // umschliesst. + sal_Bool IsTextEditFrameHit(const Point& rHit) const; + + // Bei aktiver Selektion, also zwischen MouseButtonDown und + // MouseButtonUp liefert diese Methode immer TRUE. + sal_Bool IsTextEditInSelectionMode() const; + + // Wer das z.Zt. im TextEdit befindliche Objekt braucht: + SdrObject* GetTextEditObject() const { return mxTextEditObj.get(); } + + // info about TextEditPageView. Default is 0L. + virtual SdrPageView* GetTextEditPageView() const; + + // Das aktuelle Win des Outliners + Window* GetTextEditWin() const { return pTextEditWin; } + void SetTextEditWin(Window* pWin); + + // An den hier abgeholten Outliner kann man schliesslich + // Events versenden, Attribute setzen, Cut/Copy/Paste rufen, + // Undo/Redo rufen, etc. + const SdrOutliner* GetTextEditOutliner() const { return pTextEditOutliner; } + SdrOutliner* GetTextEditOutliner() { return pTextEditOutliner; } + const OutlinerView* GetTextEditOutlinerView() const { return pTextEditOutlinerView; } + OutlinerView* GetTextEditOutlinerView() { return pTextEditOutlinerView; } + + virtual sal_Bool KeyInput(const KeyEvent& rKEvt, Window* pWin); + virtual sal_Bool MouseButtonDown(const MouseEvent& rMEvt, Window* pWin); + virtual sal_Bool MouseButtonUp(const MouseEvent& rMEvt, Window* pWin); + virtual sal_Bool MouseMove(const MouseEvent& rMEvt, Window* pWin); + virtual sal_Bool Command(const CommandEvent& rCEvt, Window* pWin); + + // #97766# make virtual to change implementation e.g. for SdOutlineView + virtual sal_uInt16 GetScriptType() const; + + /* new interface src537 */ + sal_Bool GetAttributes(SfxItemSet& rTargetSet, sal_Bool bOnlyHardAttr=sal_False) const; + + sal_Bool SetAttributes(const SfxItemSet& rSet, sal_Bool bReplaceAll); + SfxStyleSheet* GetStyleSheet() const; // SfxStyleSheet* GetStyleSheet(sal_Bool& rOk) const; + sal_Bool SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr); + + // Intern: Beim Splitteraufziehen neue OutlinerView... + virtual void AddWindowToPaintView(OutputDevice* pNewWin); + virtual void DeleteWindowFromPaintView(OutputDevice* pOldWin); + + //************************************************************************ + // Object-MacroModus (z.B. Rect als Button oder sowas): + //************************************************************************ + // Persistent. Default TRUE. SvDraw wertet das Flag u.a. bei + // SdrView::GetPreferedPointer() aus. Hat nur Wirkung, wenn das Dokument + // Draw-Objekte mit Macrofunktionalitaet hat (SdrObject::HasMacro()==sal_True). + void SetMacroMode(sal_Bool bOn) { bMacroMode=bOn; } + sal_Bool IsMacroMode() const { return bMacroMode; } + sal_Bool BegMacroObj(const Point& rPnt, short nTol, SdrObject* pObj, SdrPageView* pPV, Window* pWin); + sal_Bool BegMacroObj(const Point& rPnt, SdrObject* pObj, SdrPageView* pPV, Window* pWin) { return BegMacroObj(rPnt,-2,pObj,pPV,pWin); } + void MovMacroObj(const Point& rPnt); + void BrkMacroObj(); + sal_Bool EndMacroObj(); + sal_Bool IsMacroObj() const { return pMacroObj!=NULL; } + sal_Bool IsMacroObjDown() const { return bMacroDown; } + + /** fills the given any with a XTextCursor for the current text selection. + Leaves the any untouched if there currently is no text selected */ + void getTextSelection( ::com::sun::star::uno::Any& rSelection ); + + virtual void MarkListHasChanged(); + + rtl::Reference< sdr::SelectionController > getSelectionController() const { return mxSelectionController; } + + /** returns true if the shape identified by its inventor and identifier supports format paint brush operation */ + virtual bool SupportsFormatPaintbrush( sal_uInt32 nObjectInventor, sal_uInt16 nObjectIdentifier ) const; + + /** returns a format paint brush set from the current selection */ + virtual bool TakeFormatPaintBrush( boost::shared_ptr< SfxItemSet >& rFormatSet ); + + /** applies a format paint brush set from the current selection. + if bNoCharacterFormats is true, no character attributes are changed. + if bNoParagraphFormats is true, no paragraph attributes are changed. + */ + virtual void ApplyFormatPaintBrush( SfxItemSet& rFormatSet, bool bNoCharacterFormats, bool bNoParagraphFormats ); + + /** helper function for selections with multiple SdrText for one SdrTextObj (f.e. tables ) */ + void ApplyFormatPaintBrushToText( SfxItemSet& rFormatSet, SdrTextObj& rTextObj, SdrText* pText, bool bNoCharacterFormats, bool bNoParagraphFormats ); + +protected: + virtual void OnBeginPasteOrDrop( PasteOrDropInfos* pInfos ); + virtual void OnEndPasteOrDrop( PasteOrDropInfos* pInfos ); + +}; + +#endif //_SVDEDXV_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdetc.hxx b/include/svx/svdetc.hxx new file mode 100644 index 000000000000..22a91d3e55c1 --- /dev/null +++ b/include/svx/svdetc.hxx @@ -0,0 +1,266 @@ +/* -*- 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 _SVDETC_HXX +#define _SVDETC_HXX + +#include <tools/string.hxx> + +#include <vcl/outdev.hxx> +#include <tools/shl.hxx> +#include <editeng/outliner.hxx> +#include "svx/svxdllapi.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +// ExchangeFormat-Id der DrawingEngine holen. Daten koennen dann per +// static sal_Bool CopyData(pData,nLen,nFormat); +// bereitgestellt werden, wobei pData/nLen einen SvMemoryStream beschreiben in +// dem ein SdrModel gestreamt wird an dem fuer die Zeitdauer des Streamens das +// Flag SdrModel::SetStreamingSdrModel(sal_True) gesetzt wird. +// sal_uIntPtr SdrGetExchangeFormat(); -- JP 18.01.99 - dafuer gibt es ein define + +class SdrOutliner; +class SdrModel; +class SvtSysLocale; +class LocaleDataWrapper; + +namespace com { namespace sun { namespace star { namespace lang { + struct Locale; +}}}} + +// Einen Outliner mit den engineglobalen +// Defaulteinstellungen auf dem Heap erzeugen. +// Ist pMod<>NULL, dann wird der MapMode des uebergebenen +// Models verwendet. Die resultierende Default-Fonthoehe bleibt +// jedoch dieselbe (die logische Fonthoehe wird umgerechnet). +SVX_DLLPUBLIC SdrOutliner* SdrMakeOutliner( sal_uInt16 nOutlinerMode, SdrModel* pMod ); + +// Globale Defaulteinstellungen fuer die DrawingEngine. +// Diese Einstellungen sollte man direkt beim Applikationsstart +// vornehmen, noch bevor andere Methoden der Engine gerufen werden. +class SVX_DLLPUBLIC SdrEngineDefaults +{ +friend class SdrAttrObj; + String aFontName; + FontFamily eFontFamily; + Color aFontColor; + sal_uIntPtr nFontHeight; + MapUnit eMapUnit; + Fraction aMapFraction; + +private: + static SdrEngineDefaults& GetDefaults(); + +public: + SdrEngineDefaults(); + // Default Fontname ist "Times New Roman" + static void SetFontName(const String& rFontName) { GetDefaults().aFontName=rFontName; } + static String GetFontName() { return GetDefaults().aFontName; } + // Default FontFamily ist FAMILY_ROMAN + static void SetFontFamily(FontFamily eFam) { GetDefaults().eFontFamily=eFam; } + static FontFamily GetFontFamily() { return GetDefaults().eFontFamily; } + // Default FontColor ist COL_BLACK + static void SetFontColor(const Color& rColor) { GetDefaults().aFontColor=rColor; } + static Color GetFontColor() { return GetDefaults().aFontColor; } + // Default FontHeight ist 847. Die Fonthoehe wird in logischen Einheiten + // (MapUnit/MapFraction (siehe unten)) angegeben. Die Defaulteinstellung + // 847/100mm entspricht also ca. 24 Point. Verwendet man stattdessen + // beispielsweise Twips (SetMapUnit(MAP_TWIP)) (20 Twip = 1 Point) muss + // man als Fonthoehe 480 angeben um 24 Point als default zu erhalten. + static void SetFontHeight(sal_uIntPtr nHeight) { GetDefaults().nFontHeight=nHeight; } + static sal_uIntPtr GetFontHeight() { return GetDefaults().nFontHeight; } + // Der MapMode wird fuer den globalen Outliner benoetigt. + // Gleichzeitig bekommt auch jedes neu instanziierte SdrModel + // diesen MapMode default zugewiesen. + // Default MapUnit ist MAP_100TH_MM + static void SetMapUnit(MapUnit eMap) { GetDefaults().eMapUnit=eMap; } + static MapUnit GetMapUnit() { return GetDefaults().eMapUnit; } + // Default MapFraction ist 1/1. + static void SetMapFraction(const Fraction& rMap) { GetDefaults().aMapFraction=rMap; } + static Fraction GetMapFraction() { return GetDefaults().aMapFraction; } + + // Einen Outliner mit den engineglobalen + // Defaulteinstellungen auf dem Heap erzeugen. + // Ist pMod<>NULL, dann wird der MapMode des uebergebenen + // Models verwendet. Die resultierende Default-Fonthoehe bleibt + // jedoch dieselbe (die logische Fonthoehe wird umgerechnet). + friend SVX_DLLPUBLIC SdrOutliner* SdrMakeOutliner( sal_uInt16 nOutlinerMode, SdrModel* pMod ); +}; + +class SfxItemSet; +// Liefert eine Ersatzdarstellung fuer einen XFillStyle +// Bei XFILL_NONE gibt's sal_False und rCol bleibt unveraendert. +SVX_DLLPUBLIC bool GetDraftFillColor(const SfxItemSet& rSet, Color& rCol); + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +// Ein ItemSet auf Outliner- bzw. EditEngine-Items durchsuchen +// Liefert sal_True, wenn der Set solchen Items enthaelt. +sal_Bool SearchOutlinerItems(const SfxItemSet& rSet, sal_Bool bInklDefaults, sal_Bool* pbOnlyEE=NULL); + +// zurueck erhaelt man einen neuen WhichTable den +// man dann irgendwann mit delete platthauen muss. +sal_uInt16* RemoveWhichRange(const sal_uInt16* pOldWhichTable, sal_uInt16 nRangeBeg, sal_uInt16 nRangeEnd); + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class Link; + +// Hilfsklasse zur kommunikation zwischen dem Dialog +// zum aufbrechen von Metafiles (sd/source/ui/dlg/brkdlg.cxx), +// SdrEditView::DoImportMarkedMtf() und +// ImpSdrGDIMetaFileImport::DoImport() +class SVX_DLLPUBLIC SvdProgressInfo +{ +private: + sal_uIntPtr nSumActionCount; // Summe aller Actions + sal_uIntPtr nSumCurAction; // Summe aller bearbeiteten Actions + + sal_uIntPtr nActionCount; // Anzahl der Actions im akt. Obj. + sal_uIntPtr nCurAction; // Anzahl bearbeiteter Act. im akt. Obj. + + sal_uIntPtr nInsertCount; // Anzahl einzufuegender Act. im akt. Obj. + sal_uIntPtr nCurInsert; // Anzahl bereits eingefuegter Actions + + sal_uIntPtr nObjCount; // Anzahl der selektierten Objekte + sal_uIntPtr nCurObj; // Aktuelles Objekt + + Link *pLink; + +public: + SvdProgressInfo( Link *_pLink ); + + void Init( sal_uIntPtr _nSumActionCount, sal_uIntPtr _nObjCount ); + + sal_Bool SetNextObject(); + + void SetActionCount( sal_uIntPtr _nActionCount ); + void SetInsertCount( sal_uIntPtr _nInsertCount ); + + sal_Bool ReportActions( sal_uIntPtr nAnzActions ); + sal_Bool ReportInserts( sal_uIntPtr nAnzInserts ); + + sal_uIntPtr GetSumActionCount() const { return nSumActionCount; }; + sal_uIntPtr GetSumCurAction() const { return nSumCurAction; }; + sal_uIntPtr GetObjCount() const { return nObjCount; }; + sal_uIntPtr GetCurObj() const { return nCurObj; }; + + sal_uIntPtr GetActionCount() const { return nActionCount; }; + sal_uIntPtr GetCurAction() const { return nCurAction; }; + + sal_uIntPtr GetInsertCount() const { return nInsertCount; }; + sal_uIntPtr GetCurInsert() const { return nCurInsert; }; + + void ReportError(); + sal_Bool ReportRescales( sal_uIntPtr nAnzRescales ); +}; + + + +class SdrLinkList +{ + std::vector<Link*> aList; +protected: + unsigned FindEntry(const Link& rLink) const; +public: + SdrLinkList(): aList() {} + ~SdrLinkList() { Clear(); } + SVX_DLLPUBLIC void Clear(); + unsigned GetLinkCount() const { return (unsigned)aList.size(); } + Link& GetLink(unsigned nNum) { return *aList[nNum]; } + const Link& GetLink(unsigned nNum) const { return *aList[nNum]; } + void InsertLink(const Link& rLink, unsigned nPos=0xFFFF); + void RemoveLink(const Link& rLink); + bool HasLink(const Link& rLink) const { return FindEntry(rLink)!=0xFFFF; } +}; + +SdrLinkList& ImpGetUserMakeObjHdl(); +SdrLinkList& ImpGetUserMakeObjUserDataHdl(); + +class SdrOle2Obj; +class AutoTimer; + +class OLEObjCache : public std::vector<SdrOle2Obj*> +{ + sal_uIntPtr nSize; + AutoTimer* pTimer; + + void UnloadOnDemand(); + sal_Bool UnloadObj( SdrOle2Obj* pObj ); + DECL_LINK( UnloadCheckHdl, AutoTimer* ); + +public: + OLEObjCache(); + SVX_DLLPUBLIC ~OLEObjCache(); + + void InsertObj(SdrOle2Obj* pObj); + void RemoveObj(SdrOle2Obj* pObj); +}; + + +class SVX_DLLPUBLIC SdrGlobalData +{ + const SvtSysLocale* pSysLocale; // follows always locale settings + const LocaleDataWrapper* pLocaleData; // follows always SysLocale +public: + SdrLinkList aUserMakeObjHdl; + SdrLinkList aUserMakeObjUserDataHdl; + SdrOutliner* pOutliner; + SdrEngineDefaults* pDefaults; + ResMgr* pResMgr; + sal_uIntPtr nExchangeFormat; + OLEObjCache aOLEObjCache; + + + const SvtSysLocale* GetSysLocale(); // follows always locale settings + const LocaleDataWrapper* GetLocaleData(); // follows always SysLocale +public: + SdrGlobalData(); + + OLEObjCache& GetOLEObjCache() { return aOLEObjCache; } +}; + +inline SdrGlobalData& GetSdrGlobalData() +{ + void** ppAppData=GetAppData(SHL_SVD); + if (*ppAppData==NULL) { + *ppAppData=new SdrGlobalData; + } + return *((SdrGlobalData*)*ppAppData); +} + +namespace sdr +{ + +SVX_DLLPUBLIC String GetResourceString(sal_uInt16 nResID); + +} + +///////////////////////////////////////////////////////////////////// +// #i101872# isolated GetTextEditBackgroundColor for tooling +class SdrObjEditView; + +SVX_DLLPUBLIC Color GetTextEditBackgroundColor(const SdrObjEditView& rView); + +///////////////////////////////////////////////////////////////////// + +#endif //_SVDETC_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdfield.hxx b/include/svx/svdfield.hxx new file mode 100644 index 000000000000..9a4fbd8caf00 --- /dev/null +++ b/include/svx/svdfield.hxx @@ -0,0 +1,29 @@ +/* -*- 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 _SVDFIELD_HXX +#define _SVDFIELD_HXX + +#include "svx/svxdllapi.h" + +void SVX_DLLPUBLIC SdrRegisterFieldClasses(); + +#endif //_SVDFIELD_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdglev.hxx b/include/svx/svdglev.hxx new file mode 100644 index 000000000000..c0a460d021d6 --- /dev/null +++ b/include/svx/svdglev.hxx @@ -0,0 +1,111 @@ +/* -*- 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 _SVDGLEV_HXX +#define _SVDGLEV_HXX + +#include "svx/svxdllapi.h" +#include <svx/svdpoev.hxx> + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class SdrGluePoint; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@@@ @@ @@ @@ @@@@@ @@@@@ @@@@@ @@ @@@@@@ @@ @@ @@ @@@@@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @ @@ +// @@ @@@ @@ @@ @@ @@@@ @@@@ @@ @@ @@ @@ @@@@@ @@ @@@@ @@@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@ @@@ +// @@@@@ @@@@@ @@@@ @@@@@ @@@@@ @@@@@ @@ @@ @ @@ @@@@@ @@ @@ +// +// Editieren von Klebepunkten an den Objekten (Klebepunkte fuer Verbinder) +// +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrGlueEditView: public SdrPolyEditView +{ + void ImpClearVars(); + + // Markierte Klebepunkte kopieren und anstelle der alten markieren + void ImpCopyMarkedGluePoints(); + typedef void (*PGlueDoFunc)(SdrGluePoint&, const SdrObject* pObj, const void*, const void*, const void*, const void*, const void*); + typedef void (*PGlueTrFunc)(Point&, const void*, const void*, const void*, const void*, const void*); + void ImpDoMarkedGluePoints(PGlueDoFunc pDoFunc, sal_Bool bConst, const void* p1=NULL, const void* p2=NULL, const void* p3=NULL, const void* p4=NULL, const void* p5=NULL); + void ImpTransformMarkedGluePoints(PGlueTrFunc pTrFunc, const void* p1=NULL, const void* p2=NULL, const void* p3=NULL, const void* p4=NULL, const void* p5=NULL); + +protected: + // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView + SdrGlueEditView(SdrModel* pModel1, OutputDevice* pOut = 0L); + virtual ~SdrGlueEditView(); + +public: + // Durch den Parameter nThisEsc uebergibt man die Richtung, die man + // checken bzw. setzen/loeschen will. + // Moegliche Werte fuer nThisEsc sind z.Zt. + // SDRESC_LEFT, SDRESC_RIGHT, SDRESC_TOP und SDRESC_BOTTOM + TRISTATE IsMarkedGluePointsEscDir(sal_uInt16 nThisEsc) const; + void SetMarkedGluePointsEscDir(sal_uInt16 nThisEsc, sal_Bool bOn); + sal_Bool IsSetMarkedGluePointsEscDirPossible() const { return !IsReadOnly() && HasMarkedGluePoints(); } + + // Checken/setzen, ob die Klebepunktpositionen relativ zur + // Objektgroesse sind (Percent=sal_True) oder nicht (Percent=sal_False) + TRISTATE IsMarkedGluePointsPercent() const; + void SetMarkedGluePointsPercent(sal_Bool bOn); + sal_Bool IsSetMarkedGluePointsPercentPossible() const { return !IsReadOnly() && HasMarkedGluePoints(); } + + // bVert=FALSE: Horizontales Alignment checken/setzen + // SDRHORZALIGN_CENTER + // SDRHORZALIGN_LEFT + // SDRHORZALIGN_RIGHT + // SDRHORZALIGN_DONTCARE (nur bei Get()) + // bVert=TRUE: Vertikales Alignment checken/setzen + // SDRVERTALIGN_CENTER + // SDRVERTALIGN_TOP + // SDRVERTALIGN_BOTTOM + // SDRVERTALIGN_DONTCARE (nur bei Get()) + sal_uInt16 GetMarkedGluePointsAlign(sal_Bool bVert) const; + void SetMarkedGluePointsAlign(sal_Bool bVert, sal_uInt16 nAlign); + sal_Bool IsSetMarkedGluePointsAlignPossible() const { return !IsReadOnly() && HasMarkedGluePoints(); } + + // Alle merkierten Klebepunkte entfernen + void DeleteMarkedGluePoints(); + + void MoveMarkedGluePoints (const Size& rSiz, bool bCopy=false); + void ResizeMarkedGluePoints(const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bCopy=false); + void RotateMarkedGluePoints(const Point& rRef, long nWink, bool bCopy=false); + void MirrorMarkedGluePoints(const Point& rRef1, const Point& rRef2, sal_Bool bCopy=sal_False); + void MirrorMarkedGluePointsHorizontal(sal_Bool bCopy=sal_False); + void MirrorMarkedGluePointsVertical(sal_Bool bCopy=sal_False); + void ShearMarkedGluePoints(const Point& rRef, long nWink, sal_Bool bVShear=sal_False, sal_Bool bCopy=sal_False); + void CrookMarkedGluePoints(const Point& rRef, const Point& rRad, SdrCrookMode eMode, sal_Bool bVertical=sal_False, sal_Bool bNoContortion=sal_False, sal_Bool bCopy=sal_False); + void DistortMarkedGluePoints(const Rectangle& rRef, const XPolygon& rDistortedRect, sal_Bool bNoContortion=sal_False, sal_Bool bCopy=sal_False); + + void AlignMarkedGluePoints(SdrHorAlign eHor, SdrVertAlign eVert); +}; + +#endif //_SVDGLEV_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdglob.hxx b/include/svx/svdglob.hxx new file mode 100644 index 000000000000..dbec676cfbb5 --- /dev/null +++ b/include/svx/svdglob.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SVDGLOB_HXX +#define _SVDGLOB_HXX + +#include <sal/config.h> +#include <tools/string.hxx> + +#include <svx/svxdllapi.h> + +//************************************************************ +// forward declaration +//************************************************************ + +class ResMgr; + +// Get the resource manager for the app +ResMgr* ImpGetResMgr(); + +// ResourceCache for frequently used strings. +// Global string resources with the IDs from +// SDR_StringCacheBegin (256) to SDR_StringCacheEnd +// are cached. +// See also SvdStr.Hrc +SVX_DLLPUBLIC String ImpGetResStr(sal_uInt16 nResID); + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDGLOB_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdglue.hxx b/include/svx/svdglue.hxx new file mode 100644 index 000000000000..f667f4f0d743 --- /dev/null +++ b/include/svx/svdglue.hxx @@ -0,0 +1,147 @@ +/* -*- 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 _SVDGLUE_HXX +#define _SVDGLUE_HXX + +class Window; +class OutputDevice; +class SvStream; +class SdrObject; + +#include <tools/gen.hxx> +#include "svx/svxdllapi.h" +#include <vector> + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#define SDRESC_SMART 0x0000 +#define SDRESC_LEFT 0x0001 +#define SDRESC_RIGHT 0x0002 +#define SDRESC_TOP 0x0004 +#define SDRESC_BOTTOM 0x0008 +#define SDRESC_LO 0x0010 /* ni */ +#define SDRESC_LU 0x0020 /* ni */ +#define SDRESC_RO 0x0040 /* ni */ +#define SDRESC_RU 0x0080 /* ni */ +#define SDRESC_HORZ (SDRESC_LEFT|SDRESC_RIGHT) +#define SDRESC_VERT (SDRESC_TOP|SDRESC_BOTTOM) +#define SDRESC_ALL 0x00FF + +#define SDRHORZALIGN_CENTER 0x0000 +#define SDRHORZALIGN_LEFT 0x0001 +#define SDRHORZALIGN_RIGHT 0x0002 +#define SDRHORZALIGN_DONTCARE 0x0010 +#define SDRVERTALIGN_CENTER 0x0000 +#define SDRVERTALIGN_TOP 0x0100 +#define SDRVERTALIGN_BOTTOM 0x0200 +#define SDRVERTALIGN_DONTCARE 0x1000 + +class SVX_DLLPUBLIC SdrGluePoint { + // Bezugspunkt ist SdrObject::GetSnapRect().Center() + // bNoPercent=FALSE: Position ist -5000..5000 (1/100)% bzw. 0..10000 (je nach Align) + // bNoPercent=sal_True : Position ist in log Einh, rel zum Bezugspunkt + Point aPos; + sal_uInt16 nEscDir; + sal_uInt16 nId; + sal_uInt16 nAlign; + sal_uInt8 bNoPercent:1; + sal_uInt8 bReallyAbsolute:1; // Temporaer zu setzen fuer Transformationen am Bezugsobjekt + sal_uInt8 bUserDefined:1; // #i38892# +public: + SdrGluePoint(): nEscDir(SDRESC_SMART),nId(0),nAlign(0) { bNoPercent=sal_False; bReallyAbsolute=sal_False; bUserDefined=sal_True; } + SdrGluePoint(const Point& rNewPos, bool bNewPercent= sal_True, sal_uInt16 nNewAlign=0): aPos(rNewPos),nEscDir(SDRESC_SMART),nId(0),nAlign(nNewAlign) { bNoPercent=!bNewPercent; bReallyAbsolute = sal_False; bUserDefined = sal_True; } + bool operator==(const SdrGluePoint& rCmpGP) const { return aPos==rCmpGP.aPos && nEscDir==rCmpGP.nEscDir && nId==rCmpGP.nId && nAlign==rCmpGP.nAlign && bNoPercent==rCmpGP.bNoPercent && bReallyAbsolute==rCmpGP.bReallyAbsolute && bUserDefined==rCmpGP.bUserDefined; } + bool operator!=(const SdrGluePoint& rCmpGP) const { return !operator==(rCmpGP); } + const Point& GetPos() const { return aPos; } + void SetPos(const Point& rNewPos) { aPos=rNewPos; } + sal_uInt16 GetEscDir() const { return nEscDir; } + void SetEscDir(sal_uInt16 nNewEsc) { nEscDir=nNewEsc; } + sal_uInt16 GetId() const { return nId; } + void SetId(sal_uInt16 nNewId) { nId=nNewId; } + bool IsPercent() const { return bNoPercent ? false : true; } + void SetPercent(bool bOn) { bNoPercent = !bOn; } + // Temporaer zu setzen fuer Transformationen am Bezugsobjekt + bool IsReallyAbsolute() const { return bReallyAbsolute ? true : false; } + void SetReallyAbsolute(bool bOn, const SdrObject& rObj); + + // #i38892# + bool IsUserDefined() const { return bUserDefined ? true : false; } + void SetUserDefined(bool bNew) { bUserDefined = bNew ? true : false; } + + sal_uInt16 GetAlign() const { return nAlign; } + void SetAlign(sal_uInt16 nAlg) { nAlign=nAlg; } + sal_uInt16 GetHorzAlign() const { return nAlign&0x00FF; } + void SetHorzAlign(sal_uInt16 nAlg) { nAlign=(nAlign&0xFF00)|(nAlg&0x00FF); } + sal_uInt16 GetVertAlign() const { return nAlign&0xFF00; } + void SetVertAlign(sal_uInt16 nAlg) { nAlign=(nAlign&0x00FF)|(nAlg&0xFF00); } + bool IsHit(const Point& rPnt, const OutputDevice& rOut, const SdrObject* pObj) const; + void Invalidate(Window& rWin, const SdrObject* pObj) const; + Point GetAbsolutePos(const SdrObject& rObj) const; + void SetAbsolutePos(const Point& rNewPos, const SdrObject& rObj); + long GetAlignAngle() const; + void SetAlignAngle(long nWink); + long EscDirToAngle(sal_uInt16 nEsc) const; + sal_uInt16 EscAngleToDir(long nWink) const; + void Rotate(const Point& rRef, long nWink, double sn, double cs, const SdrObject* pObj); + void Mirror(const Point& rRef1, const Point& rRef2, long nWink, const SdrObject* pObj); + void Shear (const Point& rRef, long nWink, double tn, bool bVShear, const SdrObject* pObj); +}; + +#define SDRGLUEPOINT_NOTFOUND 0xFFFF + +class SVX_DLLPUBLIC SdrGluePointList { + std::vector<SdrGluePoint*> aList; +protected: + SdrGluePoint* GetObject(sal_uInt16 i) const { return aList[i]; } +public: + SdrGluePointList(): aList() {} + SdrGluePointList(const SdrGluePointList& rSrcList): aList() { *this=rSrcList; } + ~SdrGluePointList() { Clear(); } + void Clear(); + void operator=(const SdrGluePointList& rSrcList); + sal_uInt16 GetCount() const { return sal_uInt16(aList.size()); } + // Beim Insert wird dem Objekt (also dem GluePoint) automatisch eine Id zugewiesen. + // ReturnCode ist der Index des neuen GluePoints in der Liste + sal_uInt16 Insert(const SdrGluePoint& rGP); + void Delete(sal_uInt16 nPos) + { + SdrGluePoint* p = aList[nPos]; + aList.erase(aList.begin()+nPos); + delete p; + } + SdrGluePoint& operator[](sal_uInt16 nPos) { return *GetObject(nPos); } + const SdrGluePoint& operator[](sal_uInt16 nPos) const { return *GetObject(nPos); } + sal_uInt16 FindGluePoint(sal_uInt16 nId) const; + sal_uInt16 HitTest(const Point& rPnt, const OutputDevice& rOut, const SdrObject* pObj, bool bBack = false, bool bNext = false, sal_uInt16 nId0=0) const; + void Invalidate(Window& rWin, const SdrObject* pObj) const; + // Temporaer zu setzen fuer Transformationen am Bezugsobjekt + void SetReallyAbsolute(bool bOn, const SdrObject& rObj); + void Rotate(const Point& rRef, long nWink, double sn, double cs, const SdrObject* pObj); + void Mirror(const Point& rRef1, const Point& rRef2, const SdrObject* pObj); + void Mirror(const Point& rRef1, const Point& rRef2, long nWink, const SdrObject* pObj); + void Shear (const Point& rRef, long nWink, double tn, bool bVShear, const SdrObject* pObj); +}; + + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDGLUE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdhdl.hxx b/include/svx/svdhdl.hxx new file mode 100644 index 000000000000..2a58f612ec8c --- /dev/null +++ b/include/svx/svdhdl.hxx @@ -0,0 +1,515 @@ +/* -*- 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 _SVDHDL_HXX +#define _SVDHDL_HXX + +#include <tools/gen.hxx> + +#include <vcl/pointr.hxx> + +#include <svl/solar.hrc> + +#include <svx/xpoly.hxx> +#include <svx/svdoedge.hxx> +#include <svx/sdr/overlay/overlayobjectlist.hxx> +#include "svx/svxdllapi.h" + +class VirtualDevice; +class OutputDevice; +class Region; +class Window; +class SdrHdlList; +class SdrMarkView; +class SdrObject; +class SdrPageView; +class MouseEvent; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +// Jedes Objekt muss in der Lage seine Handles zu erzeugen. Diese werden dann +// bei einer Selektion abgeholt, bei der View angemeldet und sichtbar gemacht. +// Wird ein Handle von der Maus beruehrt (IsHit()), so wird von der View der +// entsprechende Mauszeiger vom Handle abgeholt und der App auf Anfrage zum +// reinschalten uebergeben. +// Handles wie z.B. der Rotationsmittelpunkt oder die Spiegelachse werden von +// der View generiert, wenn vom Controller der entsprechende Transformations- +// Modus selektiert wird. +// HDL_MOVE...HDL_LWRGT muessen im enum immer zusammen stehen bleiben! + +enum SdrHdlKind +{ + HDL_MOVE, // Handle zum Verschieben des Objekts + HDL_UPLFT, // Oben links + HDL_UPPER, // Oben + HDL_UPRGT, // Oben rechts + HDL_LEFT, // Links + HDL_RIGHT, // Rechts + HDL_LWLFT, // Unten links + HDL_LOWER, // Unten + HDL_LWRGT, // Unten rechts + HDL_POLY, // Punktselektion an Polygon oder Bezierkurve + HDL_BWGT, // Gewicht an einer Bezierkurve + HDL_CIRC, // Winkel an Kreissegmenten, Eckenradius am Rect + HDL_REF1, // Referenzpunkt 1, z.B. Rotationsmitte + HDL_REF2, // Referenzpunkt 2, z.B. Endpunkt der Spiegelachse + HDL_MIRX, // Die Spiegelachse selbst + HDL_GLUE, // GluePoint + HDL_GLUE_DESELECTED, // GluePoint + HDL_ANCHOR, // anchor symbol (SD, SW) + HDL_TRNS, // interactive transparence + HDL_GRAD, // interactive gradient + HDL_COLR, // interactive color + HDL_USER, + HDL_ANCHOR_TR, // #101688# Anchor handle with (0,0) at top right for SW + + // for SJ and the CustomShapeHandles: + HDL_CUSTOMSHAPE1, + + HDL_SMARTTAG +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +enum BitmapColorIndex +{ + LightGreen, + Cyan, + LightCyan, + Red, + LightRed, + Yellow +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +enum BitmapMarkerKind +{ + Rect_7x7, + Rect_9x9, + Rect_11x11, + Rect_13x13, + Circ_7x7, + Circ_9x9, + Circ_11x11, + Elli_7x9, + Elli_9x11, + Elli_9x7, + Elli_11x9, + RectPlus_7x7, + RectPlus_9x9, + RectPlus_11x11, + Crosshair, + Glue, + Glue_Deselected, + Anchor, + + // #98388# add AnchorPressed to be able to aninate anchor control, too. + AnchorPressed, + + // #101688# AnchorTR for SW + AnchorTR, + AnchorPressedTR, + + // for SJ and the CustomShapeHandles: + Customshape1 +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrHdl +{ + friend class SdrMarkView; // fuer den Zugriff auf nObjHdlNum + friend class SdrHdlList; + + static BitmapEx ImpGetBitmapEx(BitmapMarkerKind eKindOfMarker, sal_uInt16 nInd); + +protected: + SdrObject* pObj; // Gehoert das Handle zu einem Objekt? + SdrPageView* pPV; // Gehoert das Handle zu einem Objekt in einer bestimmten PageView? + SdrHdlList* pHdlList; // Zum Feststelen der Handlegroesse + + // OVERLAYMANAGER + ::sdr::overlay::OverlayObjectList maOverlayGroup; + + Point aPos; + + SdrHdlKind eKind; + + long nDrehWink; // Handles bzw. Mauszeiger drehen + sal_uInt32 nObjHdlNum; // wird von der MarkView benoetigt + sal_uInt32 nPolyNum; // Polygonpunktes + sal_uInt32 nPPntNum; // Punktnummer des Polygons + sal_uInt32 nSourceHdlNum; // ist noch vollstaendig zu implementieren + + unsigned bSelect : 1; // Ein selektierter Polygonpunkt? + unsigned b1PixMore : 1; // True=Handle wird 1 Pixel groesser dargestellt + unsigned bPlusHdl : 1; // u.a. fuer Hld-Paint Optimierung bei MarkPoint/UnmarkPoint, ... + + bool mbMoveOutside; // forces this handle to be moved outside of the selection rectangle + + // create marker for this kind + virtual void CreateB2dIAObject(); + + // cleanup marker if one exists + void GetRidOfIAObject(); + +private: + bool mbMouseOver; // is true if the mouse is over this handle + +protected: + ::sdr::overlay::OverlayObject* CreateOverlayObject( + const basegfx::B2DPoint& rPos, + BitmapColorIndex eColIndex, BitmapMarkerKind eKindOfMarker, Point aMoveOutsideOffset = Point()); + BitmapMarkerKind GetNextBigger(BitmapMarkerKind eKnd) const; + +public: + SdrHdl(); + explicit SdrHdl(const Point& rPnt, SdrHdlKind eNewKind=HDL_MOVE); + virtual ~SdrHdl(); + + const ::sdr::overlay::OverlayObjectList& getOverlayObjectList() const { return maOverlayGroup; } + + void SetHdlList(SdrHdlList* pList); + SdrHdlKind GetKind() const { return eKind; } + void Touch(); + + const Point& GetPos() const { return aPos; } + void SetPos(const Point& rPnt); + + SdrPageView* GetPageView() const { return pPV; } + void SetPageView(SdrPageView* pNewPV) { pPV=pNewPV; } + + SdrObject* GetObj() const { return pObj; } + void SetObj(SdrObject* pNewObj); + + sal_Bool IsSelected() const { return bSelect; } + void SetSelected(sal_Bool bJa=sal_True); + + void Set1PixMore(sal_Bool bJa=sal_True); + void SetDrehWink(long n); + + sal_Bool IsCornerHdl() const { return eKind==HDL_UPLFT || eKind==HDL_UPRGT || eKind==HDL_LWLFT || eKind==HDL_LWRGT; } + sal_Bool IsVertexHdl() const { return eKind==HDL_UPPER || eKind==HDL_LOWER || eKind==HDL_LEFT || eKind==HDL_RIGHT; } + + void SetObjHdlNum(sal_uInt32 nNum) { nObjHdlNum=nNum; } + sal_uInt32 GetObjHdlNum() const { return nObjHdlNum; } + + void SetPolyNum(sal_uInt32 nNum) { nPolyNum=nNum; } + sal_uInt32 GetPolyNum() const { return nPolyNum; } + + void SetPointNum(sal_uInt32 nNum) { nPPntNum=nNum; } + sal_uInt32 GetPointNum() const { return nPPntNum; } + + void SetPlusHdl(sal_Bool bOn) { bPlusHdl=bOn; } + sal_Bool IsPlusHdl() const { return bPlusHdl; } + + void SetSourceHdlNum(sal_uInt32 nNum) { nSourceHdlNum=nNum; } + sal_uInt32 GetSourceHdlNum() const { return nSourceHdlNum; } + + virtual Pointer GetPointer() const; + bool IsHdlHit(const Point& rPnt) const; + + // #97016# II + virtual sal_Bool IsFocusHdl() const; + + void SetMoveOutside( bool bMoveOutside ); + + /** is called when the mouse enters the area of this handle. If the handle changes his + visualisation during mouse over it must override this method and call Touch(). */ + virtual void onMouseEnter(const MouseEvent& rMEvt); + + /** is called when the mouse leaves the area of this handle. If the handle changes his + visualisation during mouse over it must override this method and call Touch(). */ + virtual void onMouseLeave(); + + static BitmapEx createGluePointBitmap() { return ImpGetBitmapEx(Glue_Deselected, 0); } +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#define SDR_HANDLE_COLOR_SIZE_NORMAL Size(13, 13) +#define SDR_HANDLE_COLOR_SIZE_SELECTED Size(17, 17) + +class SVX_DLLPUBLIC SdrHdlColor : public SdrHdl +{ +private: + // size of colr markers + Size aMarkerSize; + + // color + Color aMarkerColor; + + // callback link when value changed + Link aColorChangeHdl; + + // use luminance values only + unsigned bUseLuminance : 1; + + // create marker for this kind + SVX_DLLPRIVATE virtual void CreateB2dIAObject(); + + // help functions + SVX_DLLPRIVATE Bitmap CreateColorDropper(Color aCol); + SVX_DLLPRIVATE Color GetLuminance(const Color& rCol); + SVX_DLLPRIVATE void CallColorChangeLink(); + +public: + explicit SdrHdlColor(const Point& rRef, Color aCol = Color(COL_BLACK), const Size& rSize = Size(11, 11), sal_Bool bLum = sal_False); + virtual ~SdrHdlColor(); + + sal_Bool IsUseLuminance() const { return bUseLuminance; } + + Color GetColor() const { return aMarkerColor; } + void SetColor(Color aNew, sal_Bool bCallLink = sal_False); + + const Size& GetSize() const { return aMarkerSize; } + void SetSize(const Size& rNew); + + void SetColorChangeHdl(const Link& rLink) { aColorChangeHdl = rLink; } + const Link& GetColorChangeHdl() const { return aColorChangeHdl; } +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SdrHdlGradient : public SdrHdl +{ +private: + // pointer to used color handles + SdrHdlColor* pColHdl1; + SdrHdlColor* pColHdl2; + + // 2nd position + Point a2ndPos; + + // is this a gradient or a transparence + unsigned bGradient : 1; + + // select which handle to move + bool bMoveSingleHandle : 1; + bool bMoveFirstHandle : 1; + + // create marker for this kind + virtual void CreateB2dIAObject(); + +public: + SdrHdlGradient(const Point& rRef1, const Point& rRef2, sal_Bool bGrad = sal_True); + virtual ~SdrHdlGradient(); + + sal_Bool IsGradient() const { return bGradient; } + + // set the associated color handles + void SetColorHandles(SdrHdlColor* pL1, SdrHdlColor* pL2) { pColHdl1 = pL1; pColHdl2 = pL2; } + SdrHdlColor* GetColorHdl1() const { return pColHdl1; } + SdrHdlColor* GetColorHdl2() const { return pColHdl2; } + + const Point& Get2ndPos() const { return a2ndPos; } + void Set2ndPos(const Point& rPnt); + + // the link called by the color handles + DECL_LINK(ColorChangeHdl, SdrHdl*); + + // transformation call, create gradient from this handle + void FromIAOToItem(SdrObject* pObj, sal_Bool bSetItemOnObject, sal_Bool bUndo); + + // selection flags for interaction + bool IsMoveSingleHandle() const { return bMoveSingleHandle; } + void SetMoveSingleHandle(bool bNew) { bMoveSingleHandle = bNew; } + bool IsMoveFirstHandle() const { return bMoveFirstHandle; } + void SetMoveFirstHandle(bool bNew) { bMoveFirstHandle = bNew; } +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +// Spiegelachse +class SdrHdlLine: public SdrHdl +{ + // create marker for this kind + virtual void CreateB2dIAObject(); + +protected: + SdrHdl* pHdl1; + SdrHdl* pHdl2; + +public: + SdrHdlLine(SdrHdl& rHdl1, SdrHdl& rHdl2, SdrHdlKind eNewKind=HDL_MIRX) { eKind=eNewKind; pHdl1=&rHdl1; pHdl2=&rHdl2; } + virtual ~SdrHdlLine(); + + virtual Pointer GetPointer() const; +}; + +// Ein SdrHdlBezWgt hat Kenntnis von seinem "BasisHandle". Seine Draw-Methode +// zeichnet zusaetzlich eine Linie von seiner Position zur Position dieses +// BasisHandles. +class SdrHdlBezWgt: public SdrHdl +{ + // create marker for this kind + virtual void CreateB2dIAObject(); + +protected: + const SdrHdl* pHdl1; + +public: + // das ist kein Copy-Ctor!!! + SdrHdlBezWgt(const SdrHdl* pRefHdl1, SdrHdlKind eNewKind=HDL_BWGT) { eKind=eNewKind; pHdl1=pRefHdl1; } + virtual ~SdrHdlBezWgt(); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class E3dVolumeMarker : public SdrHdl +{ + basegfx::B2DPolyPolygon aWireframePoly; + + // create marker for this kind + virtual void CreateB2dIAObject(); + +public: + explicit E3dVolumeMarker(const basegfx::B2DPolyPolygon& rWireframePoly); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class ImpEdgeHdl: public SdrHdl +{ + SdrEdgeLineCode eLineCode; + + // create marker for this kind + virtual void CreateB2dIAObject(); + +public: + ImpEdgeHdl(const Point& rPnt, SdrHdlKind eNewKind): SdrHdl(rPnt,eNewKind),eLineCode(MIDDLELINE) {} + virtual ~ImpEdgeHdl(); + + void SetLineCode(SdrEdgeLineCode eCode); + SdrEdgeLineCode GetLineCode() const { return eLineCode; } + sal_Bool IsHorzDrag() const; + virtual Pointer GetPointer() const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class ImpMeasureHdl: public SdrHdl +{ + // create marker for this kind + virtual void CreateB2dIAObject(); + +public: + ImpMeasureHdl(const Point& rPnt, SdrHdlKind eNewKind): SdrHdl(rPnt,eNewKind) {} + virtual ~ImpMeasureHdl(); + + virtual Pointer GetPointer() const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class ImpTextframeHdl: public SdrHdl +{ + const Rectangle maRect; + + // create marker for this kind + virtual void CreateB2dIAObject(); + +public: + explicit ImpTextframeHdl(const Rectangle& rRect); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrHdlList +{ +protected: + sal_uIntPtr mnFocusIndex; + SdrMarkView* pView; + std::deque<SdrHdl*> aList; + sal_uInt16 nHdlSize; + + unsigned bRotateShear : 1; + unsigned bDistortShear : 1; + unsigned bMoveOutside : 1; // Handles nach aussen ruecken (fuer TextEdit) + +private: + SVX_DLLPRIVATE SdrHdlList(const SdrHdlList&): aList() {} + SVX_DLLPRIVATE void operator=(const SdrHdlList&) {} + SVX_DLLPRIVATE sal_Bool operator==(const SdrHdlList&) const { return sal_False; } + SVX_DLLPRIVATE sal_Bool operator!=(const SdrHdlList&) const { return sal_False; } + +public: + explicit SdrHdlList(SdrMarkView* pV); + ~SdrHdlList(); + void Clear(); + + // #97016# II + void TravelFocusHdl(sal_Bool bForward); + SdrHdl* GetFocusHdl() const; + void SetFocusHdl(SdrHdl* pNew); + void ResetFocusHdl(); + + // Access to View + SdrMarkView* GetView() const; + + // Sortierung: 1.Level Erst Refpunkt-Handles, dann normale Handles, dann Glue, dann User, dann Plushandles + // 2.Level PageView (Pointer) + // 3.Level Position (x+y) + void Sort(); + sal_uIntPtr GetHdlCount() const { return aList.size(); } + SdrHdl* GetHdl(sal_uIntPtr nNum) const { return nNum != CONTAINER_ENTRY_NOTFOUND ? aList[nNum] : NULL; } + sal_uIntPtr GetHdlNum(const SdrHdl* pHdl) const; + void SetHdlSize(sal_uInt16 nSiz); + sal_uInt16 GetHdlSize() const { return nHdlSize; } + void SetMoveOutside(sal_Bool bOn); + sal_Bool IsMoveOutside() const { return bMoveOutside; } + void SetRotateShear(sal_Bool bOn); + sal_Bool IsRotateShear() const { return bRotateShear; } + void SetDistortShear(sal_Bool bOn); + sal_Bool IsDistortShear() const { return bDistortShear; } + + // AddHdl uebernimmt das Handle in sein Eigentum. Es muss + // also auf dem Heap stehen, da Clear() ein delete macht. + void AddHdl(SdrHdl* pHdl, sal_Bool bAtBegin=sal_False); + SdrHdl* RemoveHdl(sal_uIntPtr nNum); + void RemoveAllByKind(SdrHdlKind eKind); + + // Zuletzt eingefuegte Handles werden am ehesten getroffen + // (wenn Handles uebereinander liegen). + SdrHdl* IsHdlListHit(const Point& rPnt, sal_Bool bBack=sal_False, sal_Bool bNext=sal_False, SdrHdl* pHdl0=NULL) const; + SdrHdl* GetHdl(SdrHdlKind eKind1) const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrCropHdl : public SdrHdl +{ +public: + SdrCropHdl(const Point& rPnt, SdrHdlKind eNewKind); + +protected: + // create marker for this kind + virtual void CreateB2dIAObject(); + + BitmapEx GetBitmapForHandle( const BitmapEx& rBitmap, int nSize ); + + static BitmapEx GetHandlesBitmap(); +}; + +#endif //_SVDHDL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdhlpln.hxx b/include/svx/svdhlpln.hxx new file mode 100644 index 000000000000..1c011808cb47 --- /dev/null +++ b/include/svx/svdhlpln.hxx @@ -0,0 +1,107 @@ +/* -*- 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 _SVDHLPLN_HXX +#define _SVDHLPLN_HXX + +#include <sal/types.h> +#include <tools/color.hxx> +#include <tools/gen.hxx> + +#include <vcl/pointr.hxx> +#include "svx/svxdllapi.h" + +class OutputDevice; +//////////////////////////////////////////////////////////////////////////////////////////////////// + +enum SdrHelpLineKind {SDRHELPLINE_POINT,SDRHELPLINE_VERTICAL,SDRHELPLINE_HORIZONTAL}; + +#define SDRHELPLINE_POINT_PIXELSIZE 15 /* Tatsaechliche Groesse= PIXELSIZE*2+1 */ + +class SdrHelpLine { + Point aPos; // je nach Wert von eKind ist X oder Y evtl. belanglos + SdrHelpLineKind eKind; + + // #i27493# + // Helper method to draw a hor or ver two-colored dashed line + void ImpDrawDashedTwoColorLine(OutputDevice& rOut, sal_Int32 nStart, sal_Int32 nEnd, sal_Int32 nFixPos, + sal_Int32 nStepWidth, Color aColA, Color aColB, sal_Bool bHorizontal) const; + +public: + explicit SdrHelpLine(SdrHelpLineKind eNewKind=SDRHELPLINE_POINT): eKind(eNewKind) {} + SdrHelpLine(SdrHelpLineKind eNewKind, const Point& rNewPos): aPos(rNewPos), eKind(eNewKind) {} + bool operator==(const SdrHelpLine& rCmp) const { return aPos==rCmp.aPos && eKind==rCmp.eKind; } + bool operator!=(const SdrHelpLine& rCmp) const { return !operator==(rCmp); } + + void SetKind(SdrHelpLineKind eNewKind) { eKind=eNewKind; } + SdrHelpLineKind GetKind() const { return eKind; } + void SetPos(const Point& rPnt) { aPos=rPnt; } + const Point& GetPos() const { return aPos; } + + Pointer GetPointer() const; + bool IsHit(const Point& rPnt, sal_uInt16 nTolLog, const OutputDevice& rOut) const; + // OutputDevice wird benoetigt, da Fangpunkte eine feste Pixelgroesse haben + Rectangle GetBoundRect(const OutputDevice& rOut) const; +}; + +#define SDRHELPLINE_NOTFOUND 0xFFFF + +class SVX_DLLPUBLIC SdrHelpLineList { + std::vector<SdrHelpLine*> aList; +protected: + SdrHelpLine* GetObject(sal_uInt16 i) const { return aList[i]; } +public: + SdrHelpLineList(): aList() {} + SdrHelpLineList(const SdrHelpLineList& rSrcList): aList() { *this=rSrcList; } + ~SdrHelpLineList() { Clear(); } + void Clear(); + void operator=(const SdrHelpLineList& rSrcList); + bool operator==(const SdrHelpLineList& rCmp) const; + bool operator!=(const SdrHelpLineList& rCmp) const { return !operator==(rCmp); } + sal_uInt16 GetCount() const { return sal_uInt16(aList.size()); } + void Insert(const SdrHelpLine& rHL) { aList.push_back(new SdrHelpLine(rHL)); } + void Insert(const SdrHelpLine& rHL, sal_uInt16 nPos) + { + if(nPos==0xFFFF) + aList.push_back(new SdrHelpLine(rHL)); + else + aList.insert(aList.begin() + nPos, new SdrHelpLine(rHL)); + } + void Delete(sal_uInt16 nPos) + { + SdrHelpLine* p = aList[nPos]; + delete p; + aList.erase(aList.begin() + nPos); + } + void Move(sal_uInt16 nPos, sal_uInt16 nNewPos) + { + SdrHelpLine* p = aList[nPos]; + aList.erase(aList.begin() + nPos); + aList.insert(aList.begin() + nNewPos, p); + } + SdrHelpLine& operator[](sal_uInt16 nPos) { return *GetObject(nPos); } + const SdrHelpLine& operator[](sal_uInt16 nPos) const { return *GetObject(nPos); } + sal_uInt16 HitTest(const Point& rPnt, sal_uInt16 nTolLog, const OutputDevice& rOut) const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDHLPLN_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svditer.hxx b/include/svx/svditer.hxx new file mode 100644 index 000000000000..d58512138b79 --- /dev/null +++ b/include/svx/svditer.hxx @@ -0,0 +1,79 @@ +/* -*- 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 _SVDITER_HXX +#define _SVDITER_HXX + +#include <vector> + +#include <sal/types.h> +#include "svx/svxdllapi.h" + +class SdrObjList; +class SdrObject; +class SdrMarkList; + +// SdrObjListIter methods: +// IM_FLAT : Flat over the list +// IM_DEEPWITHGROUPS : With recursive descent parser, Next() also returns group objects +// IM_DEEPNOGROUPS : With recursive descent parser, Next() returns no group objects +enum SdrIterMode { IM_FLAT, IM_DEEPWITHGROUPS, IM_DEEPNOGROUPS}; + +class SVX_DLLPUBLIC SdrObjListIter +{ + std::vector<SdrObject*> maObjList; + sal_uInt32 mnIndex; + bool mbReverse; + + void ImpProcessObjectList(const SdrObjList& rObjList, SdrIterMode eMode, bool bUseZOrder); + void ImpProcessMarkList(const SdrMarkList& rMarkList, SdrIterMode eMode); + void ImpProcessObj(SdrObject* pObj, SdrIterMode eMode, bool bUseZOrder); + +public: + explicit SdrObjListIter(const SdrObjList& rObjList, SdrIterMode eMode = IM_DEEPNOGROUPS, bool bReverse = false); + /** This variant lets the user choose the order in which to travel over + the objects. + @param bUseZOrder + When <TRUE/> then the z-order defines the order of iteration. + Otherwise the navigation position as returned by + SdrObject::GetNavigationPosition() is used. + */ + SdrObjListIter(const SdrObjList& rObjList, bool bUseZOrder, SdrIterMode eMode = IM_DEEPNOGROUPS, bool bReverse = false); + + /* SJ: the following function can now be used with every + SdrObject and is no longer limited to group objects */ + explicit SdrObjListIter(const SdrObject& rObj, SdrIterMode eMode = IM_DEEPNOGROUPS, bool bReverse = false); + + /** Iterates over a list of marked objects received from the SdrMarkView. */ + explicit SdrObjListIter(const SdrMarkList& rMarkList, SdrIterMode eMode = IM_DEEPNOGROUPS, bool bReverse = false); + + void Reset() { mnIndex = (mbReverse ? maObjList.size() : 0L); } + bool IsMore() const { return (mbReverse ? mnIndex != 0 : ( mnIndex < maObjList.size())); } + SdrObject* Next() + { + sal_uInt32 idx = (mbReverse ? --mnIndex : mnIndex++); + return idx < maObjList.size() ? maObjList[idx] : NULL; + } + + sal_uInt32 Count() { return maObjList.size(); } +}; + +#endif //_SVDITER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdlayer.hxx b/include/svx/svdlayer.hxx new file mode 100644 index 000000000000..c405cdb8f32f --- /dev/null +++ b/include/svx/svdlayer.hxx @@ -0,0 +1,171 @@ +/* -*- 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 _SVDLAYER_HXX +#define _SVDLAYER_HXX + +#include <tools/stream.hxx> +#include <svx/svdsob.hxx> +#include <svx/svdtypes.hxx> // fuer typedef SdrLayerID +#include "svx/svxdllapi.h" +#include <algorithm> + +class SdrModel; + +class SVX_DLLPUBLIC SdrLayer +{ + friend class SdrLayerAdmin; + + OUString maName; + OUString maTitle; + OUString maDescription; + SdrModel* pModel; // zum Broadcasten + sal_uInt16 nType; // 0=Userdefined,1=Standardlayer + SdrLayerID nID; + + SdrLayer(SdrLayerID nNewID, const OUString& rNewName); + +public: + bool operator==(const SdrLayer& rCmpLayer) const; + bool operator!=(const SdrLayer& rCmpLayer) const { return !operator==(rCmpLayer); } + + void SetName(const OUString& rNewName); + const OUString& GetName() const { return maName; } + + void SetTitle(const OUString& rTitle) { maTitle = rTitle; } + const OUString& GetTitle() const { return maTitle; } + + void SetDescription(const OUString& rDesc) { maDescription = rDesc; } + const OUString& GetDescription() const { return maDescription; } + + SdrLayerID GetID() const { return nID; } + void SetModel(SdrModel* pNewModel) { pModel=pNewModel; } + SdrModel* GetModel() const { return pModel; } + // Einem SdrLayer kann man sagen dass er ein (der) Standardlayer sein soll. + // Es wird dann laenderspeziefisch der passende Name gesetzt. SetName() + // setzt das Flag "StandardLayer" ggf. zurueck auf "Userdefined". + void SetStandardLayer(bool bStd = true); + bool IsStandardLayer() const { return nType==1; } +}; + +// Beim Aendern von Layerdaten muss man derzeit +// noch selbst das Modify-Flag am Model setzen. +#define SDRLAYER_MAXCOUNT 255 +class SVX_DLLPUBLIC SdrLayerAdmin { +friend class SdrView; +friend class SdrModel; +friend class SdrPage; + +protected: + std::vector<SdrLayer*> aLayer; + SdrLayerAdmin* pParent; // Der Admin der Seite kennt den Admin des Docs + SdrModel* pModel; // zum Broadcasten + OUString maControlLayerName; +protected: + // Eine noch nicht verwendete LayerID raussuchen. Sind bereits alle + // verbraucht, so gibt's 'ne 0. Wer sicher gehen will, muss vorher + // GetLayerCount()<SDRLAYER_MAXCOUNT abfragen, denn sonst sind alle + // vergeben. + SdrLayerID GetUniqueLayerID() const; + void Broadcast() const; +public: + explicit SdrLayerAdmin(SdrLayerAdmin* pNewParent=NULL); + SdrLayerAdmin(const SdrLayerAdmin& rSrcLayerAdmin); + ~SdrLayerAdmin(); + const SdrLayerAdmin& operator=(const SdrLayerAdmin& rSrcLayerAdmin); + bool operator==(const SdrLayerAdmin& rCmpLayerAdmin) const; + bool operator!=(const SdrLayerAdmin& rCmpLayerAdmin) const { return !operator==(rCmpLayerAdmin); } + SdrLayerAdmin* GetParent() const { return pParent; } + void SetParent(SdrLayerAdmin* pNewParent) { pParent=pNewParent; } + void SetModel(SdrModel* pNewModel); + SdrModel* GetModel() const { return pModel; } + void InsertLayer(SdrLayer* pLayer) + { + aLayer.push_back(pLayer); + pLayer->SetModel(pModel); + Broadcast(); + } + void InsertLayer(SdrLayer* pLayer, sal_uInt16 nPos) + { + if(nPos==0xFFFF) + aLayer.push_back(pLayer); + else + aLayer.insert(aLayer.begin() + nPos, pLayer); + pLayer->SetModel(pModel); + Broadcast(); + } + SdrLayer* RemoveLayer(sal_uInt16 nPos); + // Alle Layer loeschen + void ClearLayer(); + // Neuer Layer wird angelegt und eingefuegt + SdrLayer* NewLayer(const OUString& rName, sal_uInt16 nPos=0xFFFF); + void DeleteLayer(SdrLayer* pLayer) + { + std::vector<SdrLayer*>::iterator it = std::find(aLayer.begin(), aLayer.end(), pLayer); + if( it == aLayer.end() ) + return; + aLayer.erase(it); + delete pLayer; + Broadcast(); + } + // Neuer Layer, Name wird aus der Resource geholt + SdrLayer* NewStandardLayer(sal_uInt16 nPos=0xFFFF); + + // Iterieren ueber alle Layer + sal_uInt16 GetLayerCount() const { return sal_uInt16(aLayer.size()); } + SdrLayer* GetLayer(sal_uInt16 i) { return aLayer[i]; } + const SdrLayer* GetLayer(sal_uInt16 i) const { return aLayer[i]; } + + sal_uInt16 GetLayerPos(SdrLayer* pLayer) const; + + SdrLayer* GetLayer(const OUString& rName, bool bInherited); + const SdrLayer* GetLayer(const OUString& rName, bool bInherited) const; + SdrLayerID GetLayerID(const OUString& rName, bool bInherited) const; + SdrLayer* GetLayerPerID(sal_uInt16 nID) { return (SdrLayer*)(((const SdrLayerAdmin*)this)->GetLayerPerID(nID)); } + const SdrLayer* GetLayerPerID(sal_uInt16 nID) const; + + void SetControlLayerName(const OUString& rNewName); + const OUString& GetControlLayerName() const { return maControlLayerName; } +}; + +/* +Anmerkung zu den Layer - Gemischt symbolisch/ID-basierendes Interface + Einen neuen Layer macht man sich mit: + pLayerAdmin->NewLayer("Der neue Layer"); + Der Layer wird dann automatisch an das Ende der Liste angehaengt. + Entsprechdes gilt fuer Layersets gleichermassen. + Das Interface am SdrLayerSet basiert auf LayerID's. Die App muss sich + dafuer am SdrLayerAdmin eine ID abholen: + SdrLayerID nLayerID=pLayerAdmin->GetLayerID("Der neue Layer"); + Wird der Layer nicht gefunden, so liefert die Methode SDRLAYER_NOTFOUND + zurueck. Die Methoden mit ID-Interface fangen diesen Wert jedoch i.d.R + sinnvoll ab. + Hat man nicht nur den Namen, sondern gar einen SdrLayer*, so kann man + sich die ID natuerlich wesentlich schneller direkt vom Layer abholen. +bInherited: + TRUE: Wird der Layer/LayerSet nicht gefunden, so wird im Parent-LayerAdmin + nachgesehen, ob es dort einen entsprechende Definition gibt. + FALSE: Es wird nur dieser LayerAdmin durchsucht. + Jeder LayerAdmin einer Seite hat einen Parent-LayerAdmin, n�mlich den des + Model. Das Model selbst hat keinen Parent. +*/ + +#endif //_SVDLAYER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdmark.hxx b/include/svx/svdmark.hxx new file mode 100644 index 000000000000..d8058fb41357 --- /dev/null +++ b/include/svx/svdmark.hxx @@ -0,0 +1,298 @@ +/* -*- 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 _SVDMARK_HXX +#define _SVDMARK_HXX + +#include <vector> + +#include <tools/string.hxx> +#include "svx/svxdllapi.h" +#include <svx/sdrobjectuser.hxx> + +#include <set> + +class Rectangle; +class SdrPage; +class SdrObjList; +class SdrObject; +class SdrPageView; + +typedef std::set<sal_uInt16> SdrUShortCont; + + +// Alles was eine View ueber ein markiertes Objekt wissen muss +class SVX_DLLPUBLIC SdrMark : public sdr::ObjectUser +{ +protected: + SdrObject* mpSelectedSdrObject; // the seleceted object + SdrPageView* mpPageView; + SdrUShortCont* mpPoints; // Markierte Punkte + SdrUShortCont* mpLines; // Markierte Linienabschnitte + SdrUShortCont* mpGluePoints; // Markierte Klebepunkte (deren Id's) + sal_Bool mbCon1; // fuer Connectoren + sal_Bool mbCon2; // fuer Connectoren + sal_uInt16 mnUser; // z.B. fuer CopyObjects, mitkopieren von Edges + +public: + explicit SdrMark(SdrObject* pNewObj = 0L, SdrPageView* pNewPageView = 0L); + SdrMark(const SdrMark& rMark); + virtual ~SdrMark(); + + // derived from ObjectUser + virtual void ObjectInDestruction(const SdrObject& rObject); + + SdrMark& operator=(const SdrMark& rMark); + sal_Bool operator==(const SdrMark& rMark) const; + sal_Bool operator!=(const SdrMark& rMark) const + { + return !(operator==(rMark)); + } + + void SetMarkedSdrObj(SdrObject* pNewObj); + SdrObject* GetMarkedSdrObj() const; + + SdrPageView* GetPageView() const + { + return mpPageView; + } + + void SetPageView(SdrPageView* pNewPageView) + { + mpPageView = pNewPageView; + } + + void SetCon1(sal_Bool bOn) + { + mbCon1 = bOn; + } + + sal_Bool IsCon1() const + { + return mbCon1; + } + + void SetCon2(sal_Bool bOn) + { + mbCon2 = bOn; + } + + sal_Bool IsCon2() const + { + return mbCon2; + } + + void SetUser(sal_uInt16 nVal) + { + mnUser = nVal; + } + + sal_uInt16 GetUser() const + { + return mnUser; + } + + const SdrUShortCont* GetMarkedPoints() const + { + return mpPoints; + } + + const SdrUShortCont* GetMarkedLines() const + { + return mpLines; + } + + const SdrUShortCont* GetMarkedGluePoints() const + { + return mpGluePoints; + } + + SdrUShortCont* GetMarkedPoints() + { + return mpPoints; + } + + SdrUShortCont* GetMarkedLines() + { + return mpLines; + } + + SdrUShortCont* GetMarkedGluePoints() + { + return mpGluePoints; + } + + SdrUShortCont* ForceMarkedPoints() + { + if(!mpPoints) + mpPoints = new SdrUShortCont; + + return mpPoints; + } + + SdrUShortCont* ForceMarkedLines() + { + if(!mpLines) + mpLines = new SdrUShortCont; + + return mpLines; + } + + SdrUShortCont* ForceMarkedGluePoints() + { + if(!mpGluePoints) + mpGluePoints = new SdrUShortCont; + + return mpGluePoints; + } +}; + +class SVX_DLLPUBLIC SdrMarkList +{ +protected: + std::vector<SdrMark*> maList; + + String maMarkName; + String maPointName; + String maGluePointName; + + sal_Bool mbPointNameOk; + sal_Bool mbGluePointNameOk; + sal_Bool mbNameOk; + sal_Bool mbSorted; + +private: + SVX_DLLPRIVATE sal_Bool operator==(const SdrMarkList& rCmpMarkList) const; + SVX_DLLPRIVATE void ImpForceSort(); + +private: + SVX_DLLPRIVATE const XubString& GetPointMarkDescription(sal_Bool bGlue) const; + +public: + SdrMarkList() + : maList(), + mbPointNameOk(sal_False), + mbGluePointNameOk(sal_False), + mbNameOk(sal_False), + mbSorted(sal_True) + { + } + + SdrMarkList(const SdrMarkList& rLst) + : maList() + { + *this = rLst; + } + + ~SdrMarkList() + { + Clear(); + } + + void Clear(); + void ForceSort() const; + void SetUnsorted() + { + mbSorted = sal_False; + } + + sal_uLong GetMarkCount() const + { + return maList.size(); + } + + SdrMark* GetMark(sal_uLong nNum) const; + sal_uLong FindObject(const SdrObject* pObj) const; + void InsertEntry(const SdrMark& rMark, sal_Bool bChkSort = sal_True); + void DeleteMark(sal_uLong nNum); + void ReplaceMark(const SdrMark& rNewMark, sal_uLong nNum); + void Merge(const SdrMarkList& rSrcList, sal_Bool bReverse = sal_False); + sal_Bool DeletePageView(const SdrPageView& rPV); + sal_Bool InsertPageView(const SdrPageView& rPV); + + void SetNameDirty() + { + mbNameOk = sal_False; + mbPointNameOk = sal_False; + mbGluePointNameOk = sal_False; + } + + // Eine verbale Beschreibung der markierten Objekte z.B.: + // "27 Linien", "12 Objekte", "Polygon" oder auch "Kein Objekt" + const String& GetMarkDescription() const; + const String& GetPointMarkDescription() const + { + return GetPointMarkDescription(sal_False); + } + + const String& GetGluePointMarkDescription() const + { + return GetPointMarkDescription(sal_True); + } + + // pPage=0L: Die Markierungen aller! Seiten beruecksichtigen + sal_Bool TakeBoundRect(SdrPageView* pPageView, Rectangle& rRect) const; + sal_Bool TakeSnapRect(SdrPageView* pPageView, Rectangle& rRect) const; + + // Es werden saemtliche Entries kopiert! + void operator=(const SdrMarkList& rLst); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// migrate selections + +namespace sdr +{ + class SVX_DLLPUBLIC ViewSelection + { + SdrMarkList maMarkedObjectList; + SdrMarkList maEdgesOfMarkedNodes; + SdrMarkList maMarkedEdgesOfMarkedNodes; + std::vector<SdrObject*> maAllMarkedObjects; + + // bitfield + unsigned mbEdgesOfMarkedNodesDirty : 1; + + SVX_DLLPRIVATE void ImpForceEdgesOfMarkedNodes(); + SVX_DLLPRIVATE void ImplCollectCompleteSelection(SdrObject* pObj); + + public: + ViewSelection(); + + void SetEdgesOfMarkedNodesDirty(); + + const SdrMarkList& GetMarkedObjectList() const + { + return maMarkedObjectList; + } + + const SdrMarkList& GetEdgesOfMarkedNodes() const; + const SdrMarkList& GetMarkedEdgesOfMarkedNodes() const; + const std::vector<SdrObject*>& GetAllMarkedObjects() const; + + SdrMarkList& GetMarkedObjectListWriteAccess() + { + return maMarkedObjectList; + } + }; +} // end of namespace sdr + +#endif //_SVDMARK_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdmodel.hxx b/include/svx/svdmodel.hxx new file mode 100644 index 000000000000..d57c992f3ace --- /dev/null +++ b/include/svx/svdmodel.hxx @@ -0,0 +1,712 @@ +/* -*- 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 _SVDMODEL_HXX +#define _SVDMODEL_HXX + +#include <com/sun/star/uno/Sequence.hxx> +#include <cppuhelper/weakref.hxx> +#include <sot/storage.hxx> +#include <tools/link.hxx> +#include <tools/weakbase.hxx> +#include <vcl/mapmod.hxx> +#include <svl/brdcst.hxx> +#include <tools/string.hxx> +#include <tools/datetime.hxx> +#include <svl/hint.hxx> + +#include <svl/style.hxx> +#include <svx/xtable.hxx> +#include <svx/pageitem.hxx> +#include <vcl/field.hxx> + +#include <boost/shared_ptr.hpp> + +class OutputDevice; +#include <svx/svdtypes.hxx> // fuer enum RepeatFuncts +#include "svx/svxdllapi.h" + +#include <rtl/ref.hxx> +#include <deque> + +#if defined(UNX) || defined(WNT) +#define DEGREE_CHAR ((sal_Unicode)176) /* 0xB0 = Ansi */ +#endif + +#ifndef DEGREE_CHAR +#error unbekannte Plattrorm +#endif + +class SdrOutliner; +class SdrLayerAdmin; +class SdrObjList; +class SdrObject; +class SdrPage; +class SdrPageView; +class SdrTextObj; +class SdrUndoAction; +class SdrUndoGroup; +class AutoTimer; +class SfxItemPool; +class SfxItemSet; +class SfxRepeatTarget; +class SfxStyleSheet; +class SfxUndoAction; +class SfxUndoManager; +class XBitmapList; +class XColorList; +class XDashList; +class XGradientList; +class XHatchList; +class XLineEndList; +class SvxForbiddenCharactersTable; +class SvNumberFormatter; +class SotStorage; +class SdrOutlinerCache; +class SotStorageRef; +class SdrUndoFactory; +namespace comphelper +{ + class IEmbeddedHelper; + class LifecycleProxy; +} +namespace sfx2 +{ + class LinkManager; +} +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#define SDR_SWAPGRAPHICSMODE_NONE 0x00000000 +#define SDR_SWAPGRAPHICSMODE_TEMP 0x00000001 +#define SDR_SWAPGRAPHICSMODE_DOC 0x00000002 +#define SDR_SWAPGRAPHICSMODE_PURGE 0x00000100 +#define SDR_SWAPGRAPHICSMODE_DEFAULT (SDR_SWAPGRAPHICSMODE_TEMP|SDR_SWAPGRAPHICSMODE_DOC|SDR_SWAPGRAPHICSMODE_PURGE) + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +enum SdrHintKind +{ + HINT_UNKNOWN, // Unbekannt + HINT_LAYERCHG, // Layerdefinition geaendert + HINT_LAYERORDERCHG, // Layerreihenfolge geaendert (Insert/Remove/ChangePos) + HINT_PAGEORDERCHG, // Reihenfolge der Seiten (Zeichenseiten oder Masterpages) geaendert (Insert/Remove/ChangePos) + HINT_OBJCHG, // Objekt geaendert + HINT_OBJINSERTED, // Neues Zeichenobjekt eingefuegt + HINT_OBJREMOVED, // Zeichenobjekt aus Liste entfernt + HINT_MODELCLEARED, // gesamtes Model geloescht (keine Pages mehr da). not impl. + HINT_REFDEVICECHG, // RefDevice geaendert + HINT_DEFAULTTABCHG, // Default Tabulatorweite geaendert + HINT_DEFFONTHGTCHG, // Default FontHeight geaendert + HINT_MODELSAVED, // Dokument wurde gesichert + HINT_SWITCHTOPAGE, // #94278# UNDO/REDO at an object evtl. on another page + HINT_BEGEDIT, // Is called after the object has entered text edit mode + HINT_ENDEDIT // Is called after the object has left text edit mode +}; + +class SVX_DLLPUBLIC SdrHint: public SfxHint +{ +public: + Rectangle maRectangle; + const SdrPage* mpPage; + const SdrObject* mpObj; + const SdrObjList* mpObjList; + SdrHintKind meHint; + +public: + TYPEINFO(); + + explicit SdrHint(SdrHintKind eNewHint); + explicit SdrHint(const SdrObject& rNewObj); + + void SetPage(const SdrPage* pNewPage); + void SetObject(const SdrObject* pNewObj); + void SetKind(SdrHintKind eNewKind); + + const SdrPage* GetPage() const; + const SdrObject* GetObject() const; + SdrHintKind GetKind() const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +// Flag um nach dem Laden des Pools Aufzuraeumen (d.h. die RefCounts +// neu zu bestimmen und unbenutztes wegzuwerfen). sal_False == aktiv +#define LOADREFCOUNTS (false) + +struct SdrModelImpl; + +class SVX_DLLPUBLIC SdrModel : public SfxBroadcaster, public tools::WeakBase< SdrModel > +{ +protected: + DateTime aReadDate; // Datum des Einstreamens + std::vector<SdrPage*> maMaPag; // StammSeiten (Masterpages) + std::vector<SdrPage*> maPages; + Link aUndoLink; // Link fuer einen NotifyUndo-Handler + Link aIOProgressLink; + String aTablePath; + Size aMaxObjSize; // z.B. fuer Autogrowing Text + Fraction aObjUnit; // Beschreibung der Koordinateneinheiten fuer ClipBoard, Drag&Drop, ... + MapUnit eObjUnit; // see above + FieldUnit eUIUnit; // Masseinheit, Masstab (z.B. 1/1000) fuer die UI (Statuszeile) wird von ImpSetUIUnit() gesetzt + Fraction aUIScale; // see above + String aUIUnitStr; // see above + Fraction aUIUnitFact; // see above + int nUIUnitKomma; // see above + + SdrLayerAdmin* pLayerAdmin; + SfxItemPool* pItemPool; + comphelper::IEmbeddedHelper* + m_pEmbeddedHelper; // helper for embedded objects to get rid of the SfxObjectShell + SdrOutliner* pDrawOutliner; // ein Outliner zur Textausgabe + SdrOutliner* pHitTestOutliner;// ein Outliner fuer den HitTest + sal_uIntPtr nDefTextHgt; // Default Texthoehe in logischen Einheiten + OutputDevice* pRefOutDev; // ReferenzDevice fuer die EditEngine + sal_uIntPtr nProgressAkt; // fuer den + sal_uIntPtr nProgressMax; // ProgressBar- + sal_uIntPtr nProgressOfs; // -Handler + rtl::Reference< SfxStyleSheetBasePool > mxStyleSheetPool; + SfxStyleSheet* pDefaultStyleSheet; + SfxStyleSheet* mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj; // #i119287# + sfx2::LinkManager* pLinkManager; // LinkManager + std::deque<SfxUndoAction*>* pUndoStack; + std::deque<SfxUndoAction*>* pRedoStack; + SdrUndoGroup* pAktUndoGroup; // Fuer mehrstufige + sal_uInt16 nUndoLevel; // Undo-Klammerung + sal_uInt16 nProgressPercent; // fuer den ProgressBar-Handler + sal_uInt16 nLoadVersion; // Versionsnummer der geladenen Datei + bool bMyPool:1; // zum Aufraeumen von pMyPool ab 303a + bool bUIOnlyKomma:1; // see eUIUnit + bool mbUndoEnabled:1; // If false no undo is recorded or we are during the execution of an undo action + bool bExtColorTable:1; // Keinen eigenen ColorTable + bool mbChanged:1; + bool bInfoChanged:1; + bool bPagNumsDirty:1; + bool bMPgNumsDirty:1; + bool bPageNotValid:1; // TRUE=Doc ist nur ObjektTraeger. Page ist nicht gueltig. + bool bSavePortable:1; // Metafiles portabel speichern + bool bNoBitmapCaching:1; // Bitmaps fuer Screenoutput cachen + bool bReadOnly:1; + bool bTransparentTextFrames:1; + bool bSaveCompressed:1; + bool bSwapGraphics:1; + bool bPasteResize:1; // Objekte werden gerade resized wegen Paste mit anderem MapMode + bool bSaveOLEPreview:1; // save preview metafile of OLE objects + bool bSaveNative:1; + bool bStarDrawPreviewMode:1; + sal_uInt16 nStreamCompressMode; // Komprimiert schreiben? + sal_uInt16 nStreamNumberFormat; + sal_uInt16 nDefaultTabulator; + sal_uInt32 nMaxUndoCount; + + +////////////////////////////////////////////////////////////////////////////// +// sdr::Comment interface +private: + // the next unique comment ID, used for counting added comments. Initialized + // to 0. UI shows one more due to the fact that 0 is a no-no for users. + sal_uInt32 mnUniqueCommentID; + +public: + // create a new, unique comment ID + sal_uInt32 GetNextUniqueCommentID(); + + // get the author name + OUString GetDocumentAuthorName() const; + + // for export + sal_uInt32 GetUniqueCommentID() const { return mnUniqueCommentID; } + + // for import + void SetUniqueCommentID(sal_uInt32 nNewID) { if(nNewID != mnUniqueCommentID) { mnUniqueCommentID = nNewID; } } + + sal_uInt16 nStarDrawPreviewMasterPageNum; + SvxForbiddenCharactersTable* mpForbiddenCharactersTable; + sal_uIntPtr nSwapGraphicsMode; + + SdrOutlinerCache* mpOutlinerCache; + SdrModelImpl* mpImpl; + sal_uInt16 mnCharCompressType; + sal_uInt16 mnHandoutPageCount; + sal_uInt16 nReserveUInt6; + sal_uInt16 nReserveUInt7; + bool mbModelLocked; + bool mbKernAsianPunctuation; + bool mbAddExtLeading; + bool mbInDestruction; + + // Color, Dash, Line-End, Hatch, Gradient, Bitmap property lists ... + XPropertyListRef maProperties[XPROPERTY_LIST_COUNT]; + + // New src638: NumberFormatter for drawing layer and + // method for getting it. It is constructed on demand + // and destroyed when destroying the SdrModel. + SvNumberFormatter* mpNumberFormatter; +public: + sal_uInt16 getHandoutPageCount() const { return mnHandoutPageCount; } + void setHandoutPageCount( sal_uInt16 nHandoutPageCount ) { mnHandoutPageCount = nHandoutPageCount; } + +protected: + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > createUnoModel(); + +private: + // Nicht implementiert: + SVX_DLLPRIVATE SdrModel(const SdrModel& rSrcModel); + SVX_DLLPRIVATE void operator=(const SdrModel& rSrcModel); + SVX_DLLPRIVATE bool operator==(const SdrModel& rCmpModel) const; + SVX_DLLPRIVATE void ImpPostUndoAction(SdrUndoAction* pUndo); + SVX_DLLPRIVATE void ImpSetUIUnit(); + SVX_DLLPRIVATE void ImpSetOutlinerDefaults( SdrOutliner* pOutliner, sal_Bool bInit = sal_False ); + SVX_DLLPRIVATE void ImpReformatAllTextObjects(); + SVX_DLLPRIVATE void ImpReformatAllEdgeObjects(); // #103122# + SVX_DLLPRIVATE void ImpCreateTables(); + SVX_DLLPRIVATE void ImpCtor(SfxItemPool* pPool, ::comphelper::IEmbeddedHelper* pPers, bool bUseExtColorTable, + bool bLoadRefCounts = true); + + + // this is a weak reference to a possible living api wrapper for this model + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxUnoModel; + +public: + bool IsPasteResize() const { return bPasteResize; } + void SetPasteResize(bool bOn) { bPasteResize=bOn; } + TYPEINFO(); + // Steckt man hier seinen eigenen Pool rein, so wird die Klasse auch + // Aktionen an ihm vornehmen (Put(),Remove()). Bei Zerstoerung von + // SdrModel wird dieser Pool ver delete geloescht! + // Gibt man den Konstruktor stattdessen eine NULL mit, so macht sich + // die Klasse einen eigenen Pool (SdrItemPool), den sie dann auch im + // Destruktor zerstoert. + // Bei Verwendung eines eigenen Pools ist darauf zu achten, dass dieser + // von SdrItemPool abgeleitet ist, falls man von SdrAttrObj abgeleitete + // Zeichenobjekte verwenden moechte. Setzt man degegen nur vom abstrakten + // Basisobjekt SdrObject abgeleitete Objekte ein, so ist man frei in der + // Wahl des Pools. + explicit SdrModel(SfxItemPool* pPool=NULL, ::comphelper::IEmbeddedHelper* pPers=NULL, sal_Bool bLoadRefCounts = LOADREFCOUNTS); + explicit SdrModel(const String& rPath, SfxItemPool* pPool=NULL, ::comphelper::IEmbeddedHelper* pPers=NULL, sal_Bool bLoadRefCounts = LOADREFCOUNTS); + SdrModel(SfxItemPool* pPool, ::comphelper::IEmbeddedHelper* pPers, bool bUseExtColorTable, sal_Bool bLoadRefCounts = LOADREFCOUNTS); + SdrModel(const String& rPath, SfxItemPool* pPool, ::comphelper::IEmbeddedHelper* pPers, bool bUseExtColorTable, sal_Bool bLoadRefCounts = LOADREFCOUNTS); + virtual ~SdrModel(); + void ClearModel(sal_Bool bCalledFromDestructor); + + // Hier kann man erfragen, ob das Model gerade eingrstreamt wird + bool IsLoading() const { return sal_False /*BFS01 bLoading */; } + // Muss z.B. ueberladen werden, um das Swappen/LoadOnDemand von Grafiken + // zu ermoeglichen. Wird rbDeleteAfterUse auf sal_True gesetzt, so wird + // die SvStream-Instanz vom Aufrufer nach Gebrauch destruiert. + // Wenn diese Methode NULL liefert, wird zum Swappen eine temporaere + // Datei angelegt. + // Geliefert werden muss der Stream, aus dem das Model geladen wurde + // bzw. in den es zuletzt gespeichert wurde. + virtual ::com::sun::star::uno::Reference< + ::com::sun::star::embed::XStorage> GetDocumentStorage() const; + ::com::sun::star::uno::Reference< + ::com::sun::star::io::XInputStream > + GetDocumentStream(OUString const& rURL, + ::comphelper::LifecycleProxy & rProxy) const; + // Die Vorlagenattribute der Zeichenobjekte in harte Attribute verwandeln. + void BurnInStyleSheetAttributes(); + // Wer sich von SdrPage ableitet muss sich auch von SdrModel ableiten + // und diese beiden VM AllocPage() und AllocModel() ueberladen... + virtual SdrPage* AllocPage(bool bMasterPage); + virtual SdrModel* AllocModel() const; + + // Aenderungen an den Layern setzen das Modified-Flag und broadcasten am Model! + const SdrLayerAdmin& GetLayerAdmin() const { return *pLayerAdmin; } + SdrLayerAdmin& GetLayerAdmin() { return *pLayerAdmin; } + + const SfxItemPool& GetItemPool() const { return *pItemPool; } + SfxItemPool& GetItemPool() { return *pItemPool; } + + SdrOutliner& GetDrawOutliner(const SdrTextObj* pObj=NULL) const; + + SdrOutliner& GetHitTestOutliner() const { return *pHitTestOutliner; } + const SdrTextObj* GetFormattingTextObj() const; + // Die TextDefaults (Font,Hoehe,Farbe) in ein Set putten + void SetTextDefaults() const; + static void SetTextDefaults( SfxItemPool* pItemPool, sal_uIntPtr nDefTextHgt ); + + // ReferenzDevice fuer die EditEngine + void SetRefDevice(OutputDevice* pDev); + OutputDevice* GetRefDevice() const { return pRefOutDev; } + // Wenn ein neuer MapMode am RefDevice gesetzt wird o.ae. + void RefDeviceChanged(); // noch nicht implementiert + // Default-Schrifthoehe in logischen Einheiten + void SetDefaultFontHeight(sal_uIntPtr nVal); + sal_uIntPtr GetDefaultFontHeight() const { return nDefTextHgt; } + // Default-Tabulatorweite fuer die EditEngine + void SetDefaultTabulator(sal_uInt16 nVal); + sal_uInt16 GetDefaultTabulator() const { return nDefaultTabulator; } + + // Der DefaultStyleSheet wird jedem Zeichenobjekt verbraten das in diesem + // Model eingefuegt wird und kein StyleSheet gesetzt hat. + SfxStyleSheet* GetDefaultStyleSheet() const { return pDefaultStyleSheet; } + void SetDefaultStyleSheet(SfxStyleSheet* pDefSS) { pDefaultStyleSheet = pDefSS; } + + // #i119287# default StyleSheet for SdrGrafObj and SdrOle2Obj + SfxStyleSheet* GetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj() const { return mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj; } + void SetDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj(SfxStyleSheet* pDefSS) { mpDefaultStyleSheetForSdrGrafObjAndSdrOle2Obj = pDefSS; } + + sfx2::LinkManager* GetLinkManager() { return pLinkManager; } + void SetLinkManager( sfx2::LinkManager* pLinkMgr ) { pLinkManager = pLinkMgr; } + + ::comphelper::IEmbeddedHelper* GetPersist() const { return m_pEmbeddedHelper; } + void ClearPersist() { m_pEmbeddedHelper = 0; } + void SetPersist( ::comphelper::IEmbeddedHelper *p ) { m_pEmbeddedHelper = p; } + + // Masseinheit fuer die Zeichenkoordinaten. + // Default ist 1 logische Einheit = 1/100mm (Unit=MAP_100TH_MM, Fract=(1,1)). + // Beispiele: + // MAP_POINT, Fraction(72,1) : 1 log Einh = 72 Point = 1 Inch + // MAP_POINT, Fraction(1,20) : 1 log Einh = 1/20 Point = 1 Twip + // MAP_TWIP, Fraction(1,1) : 1 log Einh = 1 Twip + // MAP_100TH_MM, Fraction(1,10) : 1 log Einh = 1/1000mm + // MAP_MM, Fraction(1000,1) : 1 log Einh = 1000mm = 1m + // MAP_CM, Fraction(100,1) : 1 log Einh = 100cm = 1m + // MAP_CM, Fraction(100000,1): 1 log Einh = 100000cm = 1km + // (PS: Lichtjahre sind somit also nicht darstellbar). + // Die Skalierungseinheit wird benoetigt, damit die Engine das Clipboard + // mit den richtigen Groessen beliefern kann. + MapUnit GetScaleUnit() const { return eObjUnit; } + void SetScaleUnit(MapUnit eMap); + const Fraction& GetScaleFraction() const { return aObjUnit; } + void SetScaleFraction(const Fraction& rFrac); + // Beides gleichzeitig setzen ist etwas performanter + void SetScaleUnit(MapUnit eMap, const Fraction& rFrac); + + // Maximale Groesse z.B. fuer Autogrowing-Texte + const Size& GetMaxObjSize() const { return aMaxObjSize; } + void SetMaxObjSize(const Size& rSiz) { aMaxObjSize=rSiz; } + + // Damit die View! in der Statuszeile vernuenftige Zahlen anzeigen kann: + // Default ist mm. + void SetUIUnit(FieldUnit eUnit); + FieldUnit GetUIUnit() const { return eUIUnit; } + // Der Masstab der Zeichnung. Default 1/1. + void SetUIScale(const Fraction& rScale); + const Fraction& GetUIScale() const { return aUIScale; } + // Beides gleichzeitig setzen ist etwas performanter + void SetUIUnit(FieldUnit eUnit, const Fraction& rScale); + + const Fraction& GetUIUnitFact() const { return aUIUnitFact; } + const String& GetUIUnitStr() const { return aUIUnitStr; } + int GetUIUnitKomma() const { return nUIUnitKomma; } + bool IsUIOnlyKomma() const { return bUIOnlyKomma; } + + static void TakeUnitStr(FieldUnit eUnit, String& rStr); + void TakeMetricStr(long nVal, OUString& rStr, bool bNoUnitChars = false, sal_Int32 nNumDigits = -1) const; + void TakeWinkStr(long nWink, OUString& rStr, bool bNoDegChar = false) const; + void TakePercentStr(const Fraction& rVal, String& rStr, bool bNoPercentChar = false) const; + + // RecalcPageNums wird idR. nur von der Page gerufen. + bool IsPagNumsDirty() const { return bPagNumsDirty; }; + bool IsMPgNumsDirty() const { return bMPgNumsDirty; }; + void RecalcPageNums(bool bMaster); + // Nach dem Insert gehoert die Page dem SdrModel. + virtual void InsertPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF); + virtual void DeletePage(sal_uInt16 nPgNum); + // Remove bedeutet Eigentumsuebereignung an den Aufrufer (Gegenteil von Insert) + virtual SdrPage* RemovePage(sal_uInt16 nPgNum); + virtual void MovePage(sal_uInt16 nPgNum, sal_uInt16 nNewPos); + const SdrPage* GetPage(sal_uInt16 nPgNum) const; + SdrPage* GetPage(sal_uInt16 nPgNum); + sal_uInt16 GetPageCount() const; + // #109538# + virtual void PageListChanged(); + + // Masterpages + virtual void InsertMasterPage(SdrPage* pPage, sal_uInt16 nPos=0xFFFF); + virtual void DeleteMasterPage(sal_uInt16 nPgNum); + // Remove bedeutet Eigentumsuebereignung an den Aufrufer (Gegenteil von Insert) + virtual SdrPage* RemoveMasterPage(sal_uInt16 nPgNum); + virtual void MoveMasterPage(sal_uInt16 nPgNum, sal_uInt16 nNewPos); + const SdrPage* GetMasterPage(sal_uInt16 nPgNum) const; + SdrPage* GetMasterPage(sal_uInt16 nPgNum); + sal_uInt16 GetMasterPageCount() const; + // #109538# + virtual void MasterPageListChanged(); + + // Modified-Flag. Wird automatisch gesetzt, wenn an den Pages oder + // Zeichenobjekten was geaendert wird. Zuruecksetzen muss man es + // jedoch selbst (z.B. bei Save() ...). + sal_Bool IsChanged() const { return mbChanged; } + virtual void SetChanged(sal_Bool bFlg = sal_True); + + // PageNotValid bedeutet, dass das Model lediglich Objekte traegt die zwar + // auf einer Page verankert sind, die Page aber nicht gueltig ist. Diese + // Kennzeichnung wird fuers Clipboard/Drag&Drop benoetigt. + bool IsPageNotValid() const { return bPageNotValid; } + void SetPageNotValid(bool bJa = true) { bPageNotValid=bJa; } + + // Schaltet man dieses Flag auf sal_True, so werden Grafikobjekte + // portabel gespeichert. Es findet dann beim Speichern ggf. + // eine implizite Wandlung von Metafiles statt. + // Default=FALSE. Flag ist nicht persistent. + bool IsSavePortable() const { return bSavePortable; } + void SetSavePortable(bool bJa = true) { bSavePortable=bJa; } + + // Schaltet man dieses Flag auf sal_True, so werden + // Pixelobjekte (stark) komprimiert gespeichert. + // Default=FALSE. Flag ist nicht persistent. + bool IsSaveCompressed() const { return bSaveCompressed; } + void SetSaveCompressed(bool bJa = true) { bSaveCompressed=bJa; } + + // Schaltet man dieses Flag auf sal_True, so werden + // Grafikobjekte mit gesetztem Native-Link + // native gespeichert. + // Default=FALSE. Flag ist nicht persistent. + bool IsSaveNative() const { return bSaveNative; } + void SetSaveNative(bool bJa = true) { bSaveNative=bJa; } + + // Schaltet man dieses Flag auf sal_True, so werden die Grafiken + // von Grafikobjekten: + // - beim Laden eines Dokuments nicht sofort mitgeladen, + // sondern erst wenn sie gebraucht (z.B. angezeigt) werden. + // - ggf. wieder aus dem Speicher geworfen, falls Sie gerade + // nicht benoetigt werden. + // Damit das funktioniert, muss die virtuelle Methode + // GetDocumentStream() ueberladen werden. + // Default=FALSE. Flag ist nicht persistent. + bool IsSwapGraphics() const { return bSwapGraphics; } + void SetSwapGraphics(bool bJa = true); + void SetSwapGraphicsMode(sal_uIntPtr nMode) { nSwapGraphicsMode = nMode; } + sal_uIntPtr GetSwapGraphicsMode() const { return nSwapGraphicsMode; } + + bool IsSaveOLEPreview() const { return bSaveOLEPreview; } + void SetSaveOLEPreview( bool bSet) { bSaveOLEPreview = bSet; } + + // Damit die Bildschirmausgabe von Bitmaps (insbesondere bei gedrehten) + // etwas schneller wird, werden sie gecachet. Diesen Cache kann man mit + // diesem Flag ein-/ausschalten. Beim naechsten Paint wird an den Objekten + // dann ggf. ein Image gemerkt bzw. freigegeben. Wandert ein Bitmapobjekt + // in's Undo, so wird der Cache fuer dieses Objekt sofort ausgeschaltet + // (Speicher sparen). + // Default=Cache eingeschaltet. Flag ist nicht persistent. + bool IsBitmapCaching() const { return !bNoBitmapCaching; } + void SetBitmapCaching(bool bJa = true) { bNoBitmapCaching=!bJa; } + + // Defaultmaessig (sal_False) kann man Textrahmen ohne Fuellung durch + // Mausklick selektieren. Nach Aktivierung dieses Flags trifft man sie + // nur noch in dem Bereich, wo sich auch tatsaechlich Text befindet. + bool IsPickThroughTransparentTextFrames() const { return bTransparentTextFrames; } + void SetPickThroughTransparentTextFrames(bool bOn) { bTransparentTextFrames=bOn; } + + // Darf denn das Model ueberhaupt veraendert werden? + // Wird nur von den Possibility-Methoden der View ausgewerdet. + // Direkte Manipulationen am Model, ... berueksichtigen dieses Flag nicht. + // Sollte ueberladen werden und entsprechend des ReadOnly-Status des Files + // sal_True oder sal_False liefern (Methode wird oeffters gerufen, also ein Flag + // verwenden!). + virtual bool IsReadOnly() const; + virtual void SetReadOnly(bool bYes); + + // Vermischen zweier SdrModel. Zu beachten sei, dass rSourceModel nicht + // const ist. Die Pages werden beim einfuegen nicht kopiert, sondern gemoved. + // rSourceModel ist anschliessend u.U. weitgehend leer. + // nFirstPageNum,nLastPageNum: Die aus rSourceModel zu uebernehmenden Seiten + // nDestPos..................: Einfuegeposition + // bMergeMasterPages.........: sal_True =benoetigte MasterPages werden aus + // rSourceModel ebenfalls uebernommen + // sal_False=Die MasterPageDescriptoren der Seiten + // aus rSourceModel werden auf die + // vorhandenen MasterPages gemappt. + // bUndo.....................: Fuer das Merging wird eine UndoAction generiert. + // Undo ist nur fuer das ZielModel, nicht fuer + // rSourceModel. + // bTreadSourceAsConst.......: sal_True=Das SourceModel wird nicht veraendert,. + // d.h die Seiten werden kopiert. + virtual void Merge(SdrModel& rSourceModel, + sal_uInt16 nFirstPageNum=0, sal_uInt16 nLastPageNum=0xFFFF, + sal_uInt16 nDestPos=0xFFFF, + bool bMergeMasterPages = false, bool bAllMasterPages = false, + bool bUndo = true, bool bTreadSourceAsConst = false); + + // Ist wie Merge(SourceModel=DestModel,nFirst,nLast,nDest,sal_False,sal_False,bUndo,!bMoveNoCopy); + void CopyPages(sal_uInt16 nFirstPageNum, sal_uInt16 nLastPageNum, + sal_uInt16 nDestPos, + bool bUndo = true, bool bMoveNoCopy = false); + + // Mit BegUndo() / EndUndo() ist es moeglich beliebig viele UndoActions + // beliebig tief zu klammern. Als Kommentar der + // UndoAction wird der des ersten BegUndo(String) aller Klammerungen + // verwendet. Der NotifyUndoActionHdl wird in diesem Fall erst beim letzten + // EndUndo() gerufen. Bei einer leeren Klammerung wird keine UndoAction + // generiert. + // Alle direkten Aktionen am SdrModel erzeugen keine UndoActions, die + // Aktionen an der SdrView dagegen generieren solche. + void BegUndo(); // Undo-Klammerung auf + void BegUndo(const String& rComment); // Undo-Klammerung auf + void BegUndo(const String& rComment, const String& rObjDescr, SdrRepeatFunc eFunc=SDRREPFUNC_OBJ_NONE); // Undo-Klammerung auf + void EndUndo(); // Undo-Klammerung zu + void AddUndo(SdrUndoAction* pUndo); + sal_uInt16 GetUndoBracketLevel() const { return nUndoLevel; } + const SdrUndoGroup* GetAktUndoGroup() const { return pAktUndoGroup; } + // nur nach dem 1. BegUndo oder vor dem letzten EndUndo: + void SetUndoComment(const String& rComment); + void SetUndoComment(const String& rComment, const String& rObjDescr); + + // Das Undo-Management findet nur statt, wenn kein NotifyUndoAction-Handler + // gesetzt ist. + // Default ist 16. Minimaler MaxUndoActionCount ist 1! + void SetMaxUndoActionCount(sal_uIntPtr nAnz); + sal_uIntPtr GetMaxUndoActionCount() const { return nMaxUndoCount; } + void ClearUndoBuffer(); + + bool HasUndoActions() const; + bool HasRedoActions() const; + bool Undo(); + bool Redo(); + bool Repeat(SfxRepeatTarget&); + + // Hier kann die Applikation einen Handler setzen, der die auflaufenden + // UndoActions einsammelt. Der Handler hat folgendes Aussehen: + // void NotifyUndoActionHdl(SfxUndoAction* pUndoAction); + // Beim Aufruf des Handlers findet eine Eigentumsuebereignung statt; die + // UndoAction gehoert somit dem Handler, nicht mehr dem SdrModel. + void SetNotifyUndoActionHdl(const Link& rLink) { aUndoLink=rLink; } + const Link& GetNotifyUndoActionHdl() const { return aUndoLink; } + + /** application can set it's own undo manager, BegUndo, EndUndo and AddUndoAction + calls are routet to this interface if given */ + void SetSdrUndoManager( SfxUndoManager* pUndoManager ); + SfxUndoManager* GetSdrUndoManager() const; + + /** applications can set their own undo factory to overide creation of + undo actions. The SdrModel will become owner of the given SdrUndoFactory + and delete it upon its destruction. */ + void SetSdrUndoFactory( SdrUndoFactory* pUndoFactory ); + + /** returns the models undo factory. This must be used to create + undo actions for this model. */ + SdrUndoFactory& GetSdrUndoFactory() const; + + // Hier kann man einen Handler setzen der beim Streamen mehrfach gerufen + // wird und ungefaehre Auskunft ueber den Fortschreitungszustand der + // Funktion gibt. Der Handler muss folgendes Aussehen haben: + // void class::IOProgressHdl(const USHORT& nPercent); + // Der erste Aufruf des Handlers erfolgt grundsaetzlich mit 0, der letzte + // mit 100. Dazwischen erfolgen maximal 99 Aufrufe mit Werten 1...99. + // Man kann also durchaus bei 0 den Progressbar Initiallisieren und bei + // 100 wieder schliessen. Zu beachten sei, dass der Handler auch gerufen + // wird, wenn die App Draw-Daten im officeweiten Draw-Exchange-Format + // bereitstellt, denn dies geschieht durch streamen in einen MemoryStream. + void SetIOProgressHdl(const Link& rLink) { aIOProgressLink=rLink; } + const Link& GetIOProgressHdl() const { return aIOProgressLink; } + + // Accessor methods for Palettes, Lists and Tabeles + // FIXME: this badly needs re-factoring ... + XPropertyListRef GetPropertyList( XPropertyListType t ) const { return maProperties[ t ]; } + void SetPropertyList( XPropertyListRef p ) { maProperties[ p->Type() ] = p; } + + // friendlier helpers + XDashListRef GetDashList() const { return GetPropertyList( XDASH_LIST )->AsDashList(); } + XHatchListRef GetHatchList() const { return GetPropertyList( XHATCH_LIST )->AsHatchList(); } + XColorListRef GetColorList() const { return GetPropertyList( XCOLOR_LIST )->AsColorList(); } + XBitmapListRef GetBitmapList() const { return GetPropertyList( XBITMAP_LIST )->AsBitmapList(); } + XLineEndListRef GetLineEndList() const { return GetPropertyList( XLINE_END_LIST )->AsLineEndList(); } + XGradientListRef GetGradientList() const { return GetPropertyList( XGRADIENT_LIST )->AsGradientList(); } + + // Der StyleSheetPool wird der DrawingEngine nur bekanntgemacht. + // Zu loeschen hat ihn schliesslich der, der ihn auch konstruiert hat. + SfxStyleSheetBasePool* GetStyleSheetPool() const { return mxStyleSheetPool.get(); } + void SetStyleSheetPool(SfxStyleSheetBasePool* pPool) { mxStyleSheetPool=pPool; } + + void SetStarDrawPreviewMode(sal_Bool bPreview); + sal_Bool IsStarDrawPreviewMode() { return bStarDrawPreviewMode; } + + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoModel(); + void setUnoModel( ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xModel ); + + // these functions are used by the api to disable repaints during a + // set of api calls. + bool isLocked() const { return mbModelLocked; } + void setLock( bool bLock ); + + void SetForbiddenCharsTable( rtl::Reference<SvxForbiddenCharactersTable> xForbiddenChars ); + rtl::Reference<SvxForbiddenCharactersTable> GetForbiddenCharsTable() const; + + void SetCharCompressType( sal_uInt16 nType ); + sal_uInt16 GetCharCompressType() const { return mnCharCompressType; } + + void SetKernAsianPunctuation( sal_Bool bEnabled ); + sal_Bool IsKernAsianPunctuation() const { return (sal_Bool)mbKernAsianPunctuation; } + + void SetAddExtLeading( sal_Bool bEnabled ); + sal_Bool IsAddExtLeading() const { return (sal_Bool)mbAddExtLeading; } + + void ReformatAllTextObjects(); + + SdrOutliner* createOutliner( sal_uInt16 nOutlinerMode ); + void disposeOutliner( SdrOutliner* pOutliner ); + + sal_Bool IsWriter() const { return !bMyPool; } + + /** returns the numbering type that is used to format page fields in drawing shapes */ + virtual SvxNumType GetPageNumType() const; + + /** copies the items from the source set to the destination set. Both sets must have + same ranges but can have different pools. If pNewModel is optional. If it is null, + this model is used. */ + + void MigrateItemSet( const SfxItemSet* pSourceSet, SfxItemSet* pDestSet, SdrModel* pNewModel ); + + bool IsInDestruction() const; + + static const ::com::sun::star::uno::Sequence< sal_Int8 >& getUnoTunnelImplementationId(); + + /** enables (true) or disables (false) recording of undo actions + If undo actions are added while undo is disabled, they are deleted. + Disabling undo does not clear the current undo buffer! */ + void EnableUndo( bool bEnable ); + + /** returns true if undo is currently enabled + This returns false if undo was disabled using EnableUndo( false ) and + also during the runtime of the Undo() and Redo() methods. */ + bool IsUndoEnabled() const; + + void SetDrawingLayerPoolDefaults(); +}; + +typedef tools::WeakReference< SdrModel > SdrModelWeakRef; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDMODEL_HXX + +/* ///////////////////////////////////////////////////////////////////////////////////////////////// + +-----------+ + | SdrModel | + +--+------+-+ + | +-----------+ + +----+-----+ | + | ... | | + +----+---+ +----+---+ +-----+--------+ + |SdrPage | |SdrPage | |SdrLayerAdmin | + +---+----+ +-+--+--++ +---+-------+--+ + | | | | | +-------------------+ + +----+----+ +-----+-----+ +-------+-------+ + | ... | | ... | | ... | ++---+---+ +---+---+ +----+----+ +----+----+ +-----+------+ +------+-----+ +|SdrObj | |SdrObj | |SdrLayer | |SdrLayer | |SdrLayerSet | |SdrLayerSet | ++-------+ +-------+ +---------+ +---------+ +------------+ +------------+ +This class: SdrModel is the head of the data modells for the StarView Drawing Engine. + +///////////////////////////////////////////////////////////////////////////////////////////////// */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdmrkv.hxx b/include/svx/svdmrkv.hxx new file mode 100644 index 000000000000..133a438bd58f --- /dev/null +++ b/include/svx/svdmrkv.hxx @@ -0,0 +1,500 @@ +/* -*- 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 _SVDMRKV_HXX +#define _SVDMRKV_HXX + +#include <svx/svdmark.hxx> +#include <svx/svdhdl.hxx> +#include <svx/svdsnpv.hxx> +#include <svx/svdtypes.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// Defines +//************************************************************ + +// folgendes ist noch nicht bzw. erst zum Teil implementiert: +#define SDRSEARCH_DEEP 0x0001 /* rekursiv in Gruppenobjekte hinein */ +#define SDRSEARCH_ALSOONMASTER 0x0002 /* MasterPages werden auch durchsucht */ +#define SDRSEARCH_WHOLEPAGE 0x0004 /* Nicht nur die ObjList der PageView */ +#define SDRSEARCH_TESTMARKABLE 0x0008 /* nur markierbare Objekte/Punkte/Handles/... */ +#define SDRSEARCH_TESTMACRO 0x0010 /* Nur Objekte mit Macro */ +#define SDRSEARCH_TESTTEXTEDIT 0x0020 /* Nur TextEdit-faehige Objekte */ +#define SDRSEARCH_WITHTEXT 0x0040 /* Nur Objekte mit Text */ +#define SDRSEARCH_TESTTEXTAREA 0x0080 /* Den Textbereich von Objekten mit Text (TextEditHit) */ +#define SDRSEARCH_BACKWARD 0x0100 /* Rueckwaertssuche */ +#define SDRSEARCH_NEXT 0x0200 /* Suche startet hinter dem uebergebenen Objekt/Punkt/... */ +#define SDRSEARCH_MARKED 0x0400 /* Nur markierte Objekte/Punkte/... */ +#define SDRSEARCH_PASS2BOUND 0x0800 /* Wenn nix gefunden, dann neuer 2. Versuch mit BoundRectHit */ +#define SDRSEARCH_PASS3NEAREST 0x1000 /* Wenn nix gefunden, dann neuer 3. Versuch mit NearestBoundRectHit */ +#define SDRSEARCH_BEFOREMARK 0x2000 /* if one marked one found, ignore all behind that */ + +#define SDRSEARCH_PICKMARKABLE (SDRSEARCH_TESTMARKABLE) +#define SDRSEARCH_PICKTEXTEDIT (SDRSEARCH_DEEP|SDRSEARCH_TESTMARKABLE|SDRSEARCH_TESTTEXTEDIT) +#define SDRSEARCH_PICKMACRO (SDRSEARCH_DEEP|SDRSEARCH_ALSOONMASTER|SDRSEARCH_WHOLEPAGE|SDRSEARCH_TESTMACRO) + +// SDRSEARCHPASS_... ist Rueckgabeparameterwert bei PickObj(). +#define SDRSEARCHPASS_DIRECT 0x0000 /* Objekt durch direkten Hit getroffen */ +#define SDRSEARCHPASS_INACTIVELIST 0x0001 /* Obj auf der Page, nicht jedoch in der AktGroup (bei WHOLEPAGE) */ +#define SDRSEARCHPASS_MASTERPAGE 0x0002 /* Objekt auf der MasterPage gefunden */ +#define SDRSEARCHPASS_BOUND 0x0010 /* Objekt erst beim Bound-Check gefunden */ +#define SDRSEARCHPASS_NEAREST 0x0020 /* Objekt erst beim Nearest-Check gefunden */ + +enum SdrHitKind {SDRHIT_NONE, // Nicht getroffen, Schnaps gesoffen + SDRHIT_OBJECT, // Treffer versenkt + SDRHIT_BOUNDRECT, // Treffer am BoundRect + SDRHIT_BOUNDTL, // Treffer am BoundRect TopLeft + SDRHIT_BOUNDTC, // Treffer am BoundRect TopCenter + SDRHIT_BOUNDTR, // Treffer am BoundRect TopRight + SDRHIT_BOUNDCL, // Treffer am BoundRect CenterLeft + SDRHIT_BOUNDCR, // Treffer am BoundRect CenterRight + SDRHIT_BOUNDBL, // Treffer am BoundRect BottomLeft + SDRHIT_BOUNDBC, // Treffer am BoundRect BottomCenter + SDRHIT_BOUNDBR,/*,*/ // Treffer am BoundRect BottomRight + /*SDRHIT_REFPOINT*/ // Referenzpunkt (Rotationsachse,Spiegelachse) getroffen + // ab hier neu am 01-07-1996: + SDRHIT_HANDLE, // Markierungshandle + SDRHIT_HELPLINE, // Hilfslinie + SDRHIT_GLUEPOINT, // Klebepunkt + SDRHIT_TEXTEDIT, // Offene OutlinerView getroffen + SDRHIT_TEXTEDITOBJ, // Objekt fuer SdrBeginTextEdit (Textbereich) + SDRHIT_URLFIELD, // Feld im TextObj getroffen (wird gerade nicht editiert) + SDRHIT_MACRO, // Objekt fuer BegMacroObj + SDRHIT_MARKEDOBJECT, // Markiertes Objekt (z.B. zum Draggen) + SDRHIT_UNMARKEDOBJECT, // nichtmarkiertes Objekt (z.B. zum markieren) + SDRHIT_CELL}; // hit on a cell inside a table shape (outside of the cells text area) + +enum SdrViewEditMode {SDREDITMODE_EDIT, // Auch bekannt aus Pfeil- oder Zeigermodus + SDREDITMODE_CREATE, // Objekterzeugungswerkzeug + SDREDITMODE_GLUEPOINTEDIT}; // Klebepunkteditiermodus + +#define IMPSDR_MARKOBJDESCRIPTION 0x0000 +#define IMPSDR_POINTSDESCRIPTION 0x0001 +#define IMPSDR_GLUEPOINTSDESCRIPTION 0x0002 + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@ @@ @@@@ @@@@@ @@ @@ @@ @@ @@ @@@@@ @@ @@ +// @@@ @@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@@@@@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @ @@ +// @@@@@@@ @@@@@@ @@@@@ @@@@ @@@@@ @@ @@@@ @@@@@@@ +// @@ @ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@ @@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @ @@ @@@@@ @@ @@ +// +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +class ImplMarkingOverlay; + +class SVX_DLLPUBLIC SdrMarkView : public SdrSnapView +{ + friend class SdrPageView; + + // #114409#-3 Migrate selections + ImplMarkingOverlay* mpMarkObjOverlay; + ImplMarkingOverlay* mpMarkPointsOverlay; + ImplMarkingOverlay* mpMarkGluePointsOverlay; + +protected: + SdrObject* pMarkedObj; // Wenn nur ein Objekt markiert ist. + SdrPageView* pMarkedPV; // Wenn alle markierten Objekt auf derselben PageView liegen. + + Point aRef1; // Persistent - Drehmittelpunkt/Spiegelachse + Point aRef2; // Persistent + Point aLastCrookCenter; // Persistent + SdrHdlList aHdl; + sdr::ViewSelection* mpSdrViewSelection; + + Rectangle aMarkedObjRect; + Rectangle aMarkedObjRectNoOffset; + Rectangle aMarkedPointsRect; + Rectangle aMarkedGluePointsRect; + + sal_uInt16 nFrameHandlesLimit; + sal_uIntPtr mnInsPointNum; // Nummer des InsPoint + sal_uIntPtr nMarkableObjCount; + + SdrDragMode eDragMode; // Persistent + SdrViewEditMode eEditMode; // Persistent + SdrViewEditMode eEditMode0; // Persistent + + //HMHunsigned bHdlShown : 1; + unsigned bRefHdlShownOnly : 1; // Spiegelachse waerend Dragging (ni) + unsigned bDesignMode : 1; // DesignMode fuer SdrUnoObj + unsigned bForceFrameHandles : 1; // Persistent - FrameDrag auch bei Einzelobjekten + unsigned bPlusHdlAlways : 1; // Persistent + unsigned bMarkHdlWhenTextEdit : 1; // Persistent, default=FALSE + unsigned bInsPolyPoint : 1; // z.Zt InsPolyPointDragging + unsigned bMarkedObjRectDirty : 1; + unsigned bMrkPntDirty : 1; + unsigned bMarkedPointsRectsDirty : 1; + unsigned bMarkableObjCountDirty : 1; + + // flag to completely disable handles at the view + unsigned mbMarkHandlesHidden : 1; + +private: + SVX_DLLPRIVATE void ImpClearVars(); + SVX_DLLPRIVATE void ImpSetPointsRects() const; + void UndirtyMrkPnt() const; + +protected: + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + virtual void ModelHasChanged(); // Wird von der PaintView gerufen + virtual void SetMarkHandles(); // aHdl (Liste der Handles) fuellen + virtual void SetMarkRects(); // Rects an den PageViews + virtual void CheckMarked(); // MarkList nach Del und Lock Layer durchsuchen... + virtual void AddDragModeHdl(SdrDragMode eMode); + virtual sal_Bool MouseMove(const MouseEvent& rMEvt, Window* pWin); + + // add custom handles (used by other apps, e.g. AnchorPos) + virtual void AddCustomHdl(); + + void ForceRefToMarked(); + void ForceUndirtyMrkPnt() const { if (bMrkPntDirty) UndirtyMrkPnt(); } + + //HMHvoid ImpShowMarkHdl(bool bNoRefHdl); + virtual SdrObject* CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nTol, SdrObject* pObj, SdrPageView* pPV, sal_uIntPtr nOptions, const SetOfByte* pMVisLay) const; + virtual SdrObject* CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nTol, SdrObjList* pOL, SdrPageView* pPV, sal_uIntPtr nOptions, const SetOfByte* pMVisLay, SdrObject*& rpRootObj) const; + virtual SdrObject* CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nTol, SdrObjList* pOL, SdrPageView* pPV, sal_uIntPtr nOptions, const SetOfByte* pMVisLay, SdrObject*& rpRootObj,const SdrMarkList * pMarkList) const; + sal_Bool ImpIsFrameHandles() const; + void ImpTakeDescriptionStr(sal_uInt16 nStrCacheID, String& rStr, sal_uInt16 nVal=0, sal_uInt16 nOpt=0) const; + + // Macht aus einer Winkelangabe in 1/100deg einen String inkl. Grad-Zeichen + sal_Bool ImpMarkPoint(SdrHdl* pHdl, SdrMark* pMark, sal_Bool bUnmark); + virtual sal_Bool MarkPoints(const Rectangle* pRect, sal_Bool bUnmark); + sal_Bool MarkGluePoints(const Rectangle* pRect, sal_Bool bUnmark); + + void SetMoveOutside(sal_Bool bOn); + +protected: + // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView + SdrMarkView(SdrModel* pModel1, OutputDevice* pOut = 0L); + virtual ~SdrMarkView(); + +public: + virtual sal_Bool IsAction() const; + virtual void MovAction(const Point& rPnt); + virtual void EndAction(); + virtual void BckAction(); + virtual void BrkAction(); + virtual void TakeActionRect(Rectangle& rRect) const; + + virtual void ClearPageView(); + virtual void HideSdrPage(); + virtual sal_Bool IsObjMarkable(SdrObject* pObj, SdrPageView* pPV) const; + + // Liefert sal_True wenn Objekte, Punkte oder Klebepunkte durch Rahmenaufziehen + // selektiert werden (solange wie der Rahmen aufgezogen wird). + sal_Bool IsMarking() const { return IsMarkObj() || IsMarkPoints() || IsMarkGluePoints(); } + + // Objekte durch Aufziehen eines Selektionsrahmens markieren + sal_Bool BegMarkObj(const Point& rPnt, sal_Bool bUnmark = sal_False); + void MovMarkObj(const Point& rPnt); + sal_Bool EndMarkObj(); + void BrkMarkObj(); + sal_Bool IsMarkObj() const { return (0L != mpMarkObjOverlay); } + + // DragModes: SDRDRAG_CREATE,SDRDRAG_MOVE,SDRDRAG_RESIZE,SDRDRAG_ROTATE,SDRDRAG_MIRROR,SDRDRAG_SHEAR,SDRDRAG_CROOK + // Move==Resize + // Das Interface wird hier evtl noch geaendert wg. Ortho-Drag + void SetDragMode(SdrDragMode eMode); + SdrDragMode GetDragMode() const { return eDragMode; } + sal_Bool ChkDragMode(SdrDragMode eMode) const; + void SetFrameHandles(sal_Bool bOn); + sal_Bool IsFrameHandles() const { return bForceFrameHandles; } + + // Limit, ab wann implizit auf FrameHandles umgeschaltet wird. default=50. + void SetFrameHandlesLimit(sal_uInt16 nAnz) { nFrameHandlesLimit=nAnz; } + sal_uInt16 GetFrameHandlesLimit() const { return nFrameHandlesLimit; } + + void SetEditMode(SdrViewEditMode eMode); + SdrViewEditMode GetEditMode() const { return eEditMode; } + + void SetEditMode(sal_Bool bOn=sal_True) { SetEditMode(bOn?SDREDITMODE_EDIT:SDREDITMODE_CREATE); } + sal_Bool IsEditMode() const { return eEditMode==SDREDITMODE_EDIT; } + void SetCreateMode(sal_Bool bOn=sal_True) { SetEditMode(bOn?SDREDITMODE_CREATE:SDREDITMODE_EDIT); } + sal_Bool IsCreateMode() const { return eEditMode==SDREDITMODE_CREATE; } + void SetGluePointEditMode(sal_Bool bOn=sal_True) { SetEditMode(bOn?SDREDITMODE_GLUEPOINTEDIT:eEditMode0); } + sal_Bool IsGluePointEditMode() const { return eEditMode==SDREDITMODE_GLUEPOINTEDIT; } + + void SetDesignMode(sal_Bool bOn=sal_True); + sal_Bool IsDesignMode() const { return bDesignMode; } + + void SetFrameDragSingles(sal_Bool bOn=sal_True) { SetFrameHandles(bOn); } + sal_Bool IsFrameDragSingles() const { return IsFrameHandles(); } + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// migrate selections + +protected: + // all available changing methods + SdrMarkList& GetMarkedObjectListWriteAccess() { return mpSdrViewSelection->GetMarkedObjectListWriteAccess(); } + void SetEdgesOfMarkedNodesDirty() { mpSdrViewSelection->SetEdgesOfMarkedNodesDirty(); } + +public: + // all available const methods for read access to selection + const SdrMarkList& GetMarkedObjectList() const { return mpSdrViewSelection->GetMarkedObjectList(); } + sal_uIntPtr TryToFindMarkedObject(const SdrObject* pObj) const { return GetMarkedObjectList().FindObject(pObj); } + SdrPageView* GetSdrPageViewOfMarkedByIndex(sal_uIntPtr nNum) const { return GetMarkedObjectList().GetMark(nNum)->GetPageView(); } + SdrMark* GetSdrMarkByIndex(sal_uIntPtr nNum) const { return GetMarkedObjectList().GetMark(nNum); } + SdrObject* GetMarkedObjectByIndex(sal_uIntPtr nNum) const { return (GetMarkedObjectList().GetMark(nNum))->GetMarkedSdrObj(); } + sal_uIntPtr GetMarkedObjectCount() const { return GetMarkedObjectList().GetMarkCount(); } + void SortMarkedObjects() const { GetMarkedObjectList().ForceSort(); } + sal_Bool AreObjectsMarked() const { return (0L != GetMarkedObjectList().GetMarkCount()); } + String GetDescriptionOfMarkedObjects() const { return GetMarkedObjectList().GetMarkDescription(); } + String GetDescriptionOfMarkedPoints() const { return GetMarkedObjectList().GetPointMarkDescription(); } + String GetDescriptionOfMarkedGluePoints() const { return GetMarkedObjectList().GetGluePointMarkDescription(); } + sal_Bool GetBoundRectFromMarkedObjects(SdrPageView* pPageView, Rectangle& rRect) const { return GetMarkedObjectList().TakeBoundRect(pPageView, rRect); } + sal_Bool GetSnapRectFromMarkedObjects(SdrPageView* pPageView, Rectangle& rRect) const { return GetMarkedObjectList().TakeSnapRect(pPageView, rRect); } + + // Eine Liste aller an markierten Knoten gebundenen Kanten holen, + // die selbst jedoch nicht markiert sind. + const SdrMarkList& GetEdgesOfMarkedNodes() const { return mpSdrViewSelection->GetEdgesOfMarkedNodes(); } + const SdrMarkList& GetMarkedEdgesOfMarkedNodes() const { return mpSdrViewSelection->GetMarkedEdgesOfMarkedNodes(); } + const std::vector<SdrObject*>& GetTransitiveHullOfMarkedObjects() const { return mpSdrViewSelection->GetAllMarkedObjects(); } + +//////////////////////////////////////////////////////////////////////////////////////////////////// + + // mechanism to complete disable handles at the view. Handles will be hidden and deleted + // when set, no new ones created, no interaction allowed. Handles will be recreated and shown + // when reset. Default is false. + void hideMarkHandles(); + void showMarkHandles(); + bool areMarkHandlesHidden() const { return mbMarkHandlesHidden; } + + sal_Bool IsMarkedHit(const Point& rPnt, short nTol=-2) const { return IsMarkedObjHit(rPnt,nTol); } + sal_Bool IsMarkedObjHit(const Point& rPnt, short nTol=-2) const; + + // Pick: Unterstuetzte Optionen fuer nOptions sind SEARCH_NEXT, SEARCH_BACKWARD (ni) + SdrHdl* PickHandle(const Point& rPnt, sal_uIntPtr nOptions=0, SdrHdl* pHdl0=NULL) const; + + // Pick: Unterstuetzte Optionen fuer nOptions sind: + // SDRSEARCH_DEEP SDRSEARCH_ALSOONMASTER SDRSEARCH_TESTMARKABLE SDRSEARCH_TESTTEXTEDIT + // SDRSEARCH_WITHTEXT SDRSEARCH_TESTTEXTAREA SDRSEARCH_BACKWARD SDRSEARCH_MARKED + // SDRSEARCH_WHOLEPAGE + virtual sal_Bool PickObj(const Point& rPnt, short nTol, SdrObject*& rpObj, SdrPageView*& rpPV, sal_uIntPtr nOptions, SdrObject** ppRootObj, sal_uIntPtr* pnMarkNum=NULL, sal_uInt16* pnPassNum=NULL) const; + virtual sal_Bool PickObj(const Point& rPnt, short nTol, SdrObject*& rpObj, SdrPageView*& rpPV, sal_uIntPtr nOptions=0) const; + // sal_Bool PickObj(const Point& rPnt, SdrObject*& rpObj, SdrPageView*& rpPV, sal_uIntPtr nOptions=0) const { return PickObj(rPnt,nHitTolLog,rpObj,rpPV,nOptions); } + sal_Bool MarkObj(const Point& rPnt, short nTol=-2, sal_Bool bToggle=sal_False, sal_Bool bDeep=sal_False); + + // Pick: Unterstuetzte Optionen fuer nOptions sind SDRSEARCH_PASS2BOUND und SDRSEARCH_PASS3NEAREST + sal_Bool PickMarkedObj(const Point& rPnt, SdrObject*& rpObj, SdrPageView*& rpPV, sal_uIntPtr* pnMarkNum=NULL, sal_uIntPtr nOptions=0) const; + + // Sucht sich das Oberste der markierten Objekte (O1) und sucht von dort + // aus in Richtung nach Unten dann das erste nichtmarkierte Objekt (O2). + // Bei Erfolg wird die Markierung von O1 entfernt, an O2 gesetzt und TRUE + // returniert. Mit dem Parameter bPrev=sal_True geht die Suche genau in die + // andere Richtung. + sal_Bool MarkNextObj(sal_Bool bPrev=sal_False); + + // Sucht sich das Oberste der markierten Objekte (O1) das von rPnt/nTol + // getroffen wird und sucht von dort aus in Richtung nach Unten dann das + // erste nichtmarkierte Objekt (O2). Bei Erfolg wird die Markierung von + // O1 entfernt, an O2 gesetzt und sal_True returniert. + // Mit dem Parameter bPrev=sal_True geht die Suche genau in die andere Richtung. + sal_Bool MarkNextObj(const Point& rPnt, short nTol=-2, sal_Bool bPrev=sal_False); + + // Alle Objekte innerhalb eines rechteckigen Bereichs markieren + // Markiert werden nur Objekte, die vollstaendig eingeschlossen sind. + sal_Bool MarkObj(const Rectangle& rRect, sal_Bool bUnmark=sal_False); + void MarkObj(SdrObject* pObj, SdrPageView* pPV, sal_Bool bUnmark=sal_False, sal_Bool bImpNoSetMarkHdl=sal_False); + void MarkAllObj(SdrPageView* pPV=NULL); // pPage=NULL => alle angezeigten Seiten + void UnmarkAllObj(SdrPageView* pPV=NULL); // pPage=NULL => alle angezeigten Seiten + + // Diese Funktion kostet etwas Zeit, da die MarkList durchsucht werden muss. + sal_Bool IsObjMarked(SdrObject* pObj) const; + // void MarkAll(SdrPageView* pPV=NULL) { MarkAllObj(pPV); } -> replace with inline + void UnMarkAll(SdrPageView* pPV=NULL) { UnmarkAllObj(pPV); } + + // Groesse der Markierungs-Handles abfragen/setzen. Angabe in Pixel. + // Der Wert ist als Kantenlaenge zu betrachten. Gerade Werte werden + // auf Ungerade aufgerundet: 3->3, 4->5, 5->5, 6->7, 7->7, ... + // Defaultwert ist 7, Mindestwert 3 Pixel. + sal_uInt16 GetMarkHdlSizePixel() const; + void SetMarkHdlSizePixel(sal_uInt16 nSiz); + + virtual sal_Bool HasMarkablePoints() const; + virtual sal_uIntPtr GetMarkablePointCount() const; + virtual sal_Bool HasMarkedPoints() const; + virtual sal_uIntPtr GetMarkedPointCount() const; + + // Nicht alle Punkte lassen sich markieren: + virtual sal_Bool IsPointMarkable(const SdrHdl& rHdl) const; + virtual sal_Bool MarkPoint(SdrHdl& rHdl, sal_Bool bUnmark=sal_False); + + /** should only be used from outside svx for special ui elements */ + sal_Bool MarkPointHelper(SdrHdl* pHdl, SdrMark* pMark, sal_Bool bUnmark); + + // alle Punkte innerhalb dieses Rechtecks markieren (Viewkoordinaten) + sal_Bool MarkPoints(const Rectangle& rRect, sal_Bool bUnmark=sal_False) { return MarkPoints(&rRect,bUnmark); } + sal_Bool UnmarkPoint(SdrHdl& rHdl) { return MarkPoint(rHdl,sal_True); } + sal_Bool UnMarkPoint(SdrHdl& rHdl) { return MarkPoint(rHdl,sal_True); } + sal_Bool IsPointMarked(const SdrHdl& rHdl) const { ForceUndirtyMrkPnt(); return &rHdl!=NULL && rHdl.IsSelected(); } + sal_Bool MarkAllPoints() { return MarkPoints(NULL,sal_False); } + sal_Bool UnmarkAllPoints() { return MarkPoints(NULL,sal_True); } + sal_Bool UnMarkAllPoints() { return MarkPoints(NULL,sal_True); } + + // Sucht sich den ersten markierten Punkt (P1) das von rPnt + // getroffen wird und sucht von dort aus den + // ersten nichtmarkierten Punkt (P2). Bei Erfolg wird die Markierung von + // P1 entfernt, an P2 gesetzt und sal_True returniert. + // Mit dem Parameter bPrev=sal_True geht die Suche genau in die andere Richtung. + sal_Bool MarkNextPoint(const Point& rPnt, sal_Bool bPrev=sal_False); + + // Die Nummer des passenden Handles raussuchen. Nicht gefunden + // liefert CONTAINER_ENTRY_NOTFOUND. + sal_uIntPtr GetHdlNum(SdrHdl* pHdl) const { return aHdl.GetHdlNum(pHdl); } + SdrHdl* GetHdl(sal_uIntPtr nHdlNum) const { return aHdl.GetHdl(nHdlNum); } + const SdrHdlList& GetHdlList() const { return aHdl; } + + // Selektionsrahmen fuer Punktmarkierung aufziehen. + // Wird nur gestartet, wenn HasMarkablePoints() sal_True liefert. + // sal_Bool BegMarkPoints(const Point& rPnt, OutputDevice* pOut); + sal_Bool BegMarkPoints(const Point& rPnt, sal_Bool bUnmark = sal_False); + void MovMarkPoints(const Point& rPnt); + sal_Bool EndMarkPoints(); + void BrkMarkPoints(); + sal_Bool IsMarkPoints() const { return (0L != mpMarkPointsOverlay); } + + // Zusatzhandles dauerhaft sichtbar schalten + void SetPlusHandlesAlwaysVisible(sal_Bool bOn); + sal_Bool IsPlusHandlesAlwaysVisible() const { return bPlusHdlAlways; } + + // Handles sichrbar waerend TextEdit (in doppelter Groesse)? + // Persistent, default=FALSE + void SetMarkHdlWhenTextEdit(sal_Bool bOn) { bMarkHdlWhenTextEdit=bOn; } + sal_Bool IsMarkHdlWhenTextEdit() const { return bMarkHdlWhenTextEdit; } + + sal_Bool HasMarkableGluePoints() const; + sal_Bool HasMarkedGluePoints() const; + + // Ein Klebepunkt wird eindeutig identifiziert durch das SdrObject + // (dem er zugehoert) sowie einem sal_uInt16 nId (da jedes SdrObject je + // mehrere Klebepunkte haben kann. Hier an der View kommt zudem noch + // eine SdrPageView, die stets korrekt gesetzt sein sollte. + // Alternativ kann ein Klebepunkt durch ein SdrHdl bezeichnet werden. + // Die SdrHdl-Instanz beinhaltet dann aller erforderlichen Informationen. + // Der Klebepunkt ist in diesem Fall dann zwangslaeufig markiert (nur auf + // markierten Klebepunkten sitzen Anfasser). + // Achtung: Bei jeder Aenderung des Klebepunktmarkierungsstatus wird die + // Handleliste erneut berechnet. Alle vorher gemerkten SdrHdl* sind + // damit ungueltig, ebenso die Punkt-Id's! + // Pick: Unterstuetzte Optionen fuer nOptions sind SEARCH_NEXT, SEARCH_BACKWARD + sal_Bool PickGluePoint(const Point& rPnt, SdrObject*& rpObj, sal_uInt16& rnId, SdrPageView*& rpPV, sal_uIntPtr nOptions=0) const; + sal_Bool MarkGluePoint(const SdrObject* pObj, sal_uInt16 nId, const SdrPageView* pPV, sal_Bool bUnmark=sal_False); + sal_Bool UnmarkGluePoint(const SdrObject* pObj, sal_uInt16 nId, const SdrPageView* pPV) { return MarkGluePoint(pObj,nId,pPV,sal_True); } + sal_Bool IsGluePointMarked(const SdrObject* pObj, sal_uInt16 nId) const; + + // Hdl eines markierten GluePoints holen. Nicht markierte + // GluePoints haben keine Handles + SdrHdl* GetGluePointHdl(const SdrObject* pObj, sal_uInt16 nId) const; + sal_Bool IsGluePoint(const SdrHdl& rHdl) const { return &rHdl!=NULL && rHdl.GetKind()==HDL_GLUE; } + + // alle Punkte innerhalb dieses Rechtecks markieren (Viewkoordinaten) + sal_Bool MarkGluePoints(const Rectangle& rRect) { return MarkGluePoints(&rRect,sal_False); } + sal_Bool UnmarkGluePoints(const Rectangle& rRect) { return MarkGluePoints(&rRect,sal_True); } + sal_Bool MarkAllGluePoints() { return MarkGluePoints(NULL,sal_False); } + sal_Bool UnmarkAllGluePoints() { return MarkGluePoints(NULL,sal_True); } + + // Sucht sich den ersten markierten Klebepunkt (P1) das von rPnt + // getroffen wird und sucht von dort aus den + // ersten nichtmarkierten Klebepunkt (P2). Bei Erfolg wird die Markierung + // von P1 entfernt, an P2 gesetzt und sal_True returniert. + // Mit dem Parameter bPrev=sal_True geht die Suche genau in die andere Richtung. + sal_Bool MarkNextGluePoint(const Point& rPnt, sal_Bool bPrev=sal_False); + + // Selektionsrahmen fuer Klebepunktmarkierung aufziehen. + // Wird nur gestartet, wenn HasMarkableGluePoints() sal_True liefert. + // Der GlueEditMode sal_True wird nicht abgefragt. + // sal_Bool BegMarkGluePoints(const Point& rPnt, OutputDevice* pOut); + sal_Bool BegMarkGluePoints(const Point& rPnt, sal_Bool bUnmark = sal_False); + void MovMarkGluePoints(const Point& rPnt); + sal_Bool EndMarkGluePoints(); + void BrkMarkGluePoints(); + sal_Bool IsMarkGluePoints() const { return (0L != mpMarkGluePointsOverlay); } + + // bRestraintPaint=sal_False bewirkt, dass die Handles nicht sofort wieder gemalt werden. + // AdjustMarkHdl wird eh' nur gerufen, wenn was geaendert wurde; was idR ein Invalidate + // zur Folge hat. Am Ende von des Redraw werden die Handles automatisch gezeichnet. + // Der Zweck ist, unnoetiges Flackern zu vermeiden. -> Funkt noch nich, deshalb sal_True! + void AdjustMarkHdl(); //HMHBOOL bRestraintPaint=sal_True); + + const Rectangle& GetMarkedObjRect() const; // SnapRects der Objekte, ohne Strichstaerke + Rectangle GetMarkedObjBoundRect() const; // inkl. Strichstaerke, ueberstehende Fetzen, ... + const Rectangle& GetMarkedPointsRect() const; // Umschliessendes Rechteck aller markierten Punkte + const Rectangle& GetMarkedGluePointsRect() const; // Umschliessendes Rechteck aller markierten Klebepunkte + const Rectangle& GetAllMarkedRect() const { return GetMarkedObjRect(); } + Rectangle GetAllMarkedBoundRect() const { return GetMarkedObjBoundRect(); } + const Rectangle& GetAllMarkedPointsRect() const { return GetMarkedPointsRect(); } + Point GetGridOffset() const; + + // Wird immer dann gerufen, wenn sich die Liste der markierten Objekte + // moeglicherweise geaendert hat. Wer ueberlaed muss unbedingt auch die + // Methode der Basisklasse rufen! + virtual void MarkListHasChanged(); + + // Betreten (Editieren) einer evtl markierten Objektgruppe. Sind mehrere + // Objektgruppen markiert, so wird die Oberste genommen. Anschliessend + // liegen alle Memberobjekte der Gruppe im direkten Zugriff. Alle anderen + // Objekte koennen waerendessen nicht bearbeitet werden (bis zum naechsten + // LeaveGroup()). Bei einer seitenuebergreifenden Markierung wird jede Page + // separat abgearbeitet. Die Methode liefert sal_True, wenn wenigstens eine + // Gruppe betreten wurde. + sal_Bool EnterMarkedGroup(); + + // Den Mittelpunkt des letzten Crook-Dragging abholen. Den kann man + // bei einem anschliessenden Rotate sinnvoll als Drehmittelpunkt setzen. + const Point& GetLastCrookCenter() const { return aLastCrookCenter; } + + // Wird automatisch von der DragView beim beenden eines Crook-Drag gesetzt. + void SetLastCrookCenter(const Point& rPt) { aLastCrookCenter=rPt; } + + // Rotationsmittelpunkt bzw. Startpunkt der Spiegelachse + const Point& GetRef1() const { return aRef1; } + void SetRef1(const Point& rPt); + + // Endpunkt der Spiegelachse + const Point& GetRef2() const { return aRef1; } + void SetRef2(const Point& rPt); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// - Hit-Toleranzen: +// Die muessen natuerlich immer in logischen Koordinaten angegeben werden. Also +// immer brav den gewuenschten Pixelwert mit PixelToLogic in Logischen umrechnen. +// Angenommen ein Wert 100 (logisch) +// - Bei einer waagerechten Haarlinie (Objekt mit Hoehe 0) waere dann +/-100, +// also ein vertikaler Bereich von 200 logischen Einheiten sensitiv. +// - Bei Polygonen wird ein Rect mit der Groesse (200,200) generiert und ein +// Touch-Test zwischen Poly und diesem Rect durchgefuehrt. +// - Eine Sonderbehandlung erfahren Objekte, die bei SdrObject::HasEdit()==TRUE +// liefern (z.B. Textrahmen). Hierbei wird ein weiterer sensitiver Bereich mit +// einer Breite von 2*Tol (in diesem Beispiel also 200 Einheiten) um das Objekt +// herumgelegt. Waerend ein Hit direkt ins Objekt die Edit-Methode ruft, +// ermoeglicht ein Hit in den umliegenden sensitiven Bereich ein Dragging. +// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDMRKV_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdoashp.hxx b/include/svx/svdoashp.hxx new file mode 100644 index 000000000000..ee7e11ba194a --- /dev/null +++ b/include/svx/svdoashp.hxx @@ -0,0 +1,263 @@ +/* -*- 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 _SVDOASHP_HXX +#define _SVDOASHP_HXX + +#include <svx/svdobj.hxx> +#include <svx/svdotext.hxx> +#include <svx/svdhdl.hxx> +#include <vector> +#include <com/sun/star/uno/Reference.h> +#include <com/sun/star/drawing/XCustomShapeEngine.hpp> +#include <com/sun/star/drawing/EnhancedCustomShapeAdjustmentValue.hpp> +#include "svx/svxdllapi.h" + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class SdrObjList; +class SdrObjListIter; +class SfxItemSet; + +namespace sdr +{ + namespace properties + { + class CustomShapeProperties; + } // end of namespace properties +} // end of namespace sdr + +class SdrAShapeObjGeoData : public SdrTextObjGeoData +{ + public: + + sal_Bool bMirroredX; + sal_Bool bMirroredY; + double fObjectRotation; + + com::sun::star::uno::Sequence< com::sun::star::drawing::EnhancedCustomShapeAdjustmentValue > + aAdjustmentSeq; +}; + +#define CUSTOMSHAPE_HANDLE_RESIZE_FIXED 1 +#define CUSTOMSHAPE_HANDLE_CREATE_FIXED 2 +#define CUSTOMSHAPE_HANDLE_RESIZE_ABSOLUTE_X 4 +#define CUSTOMSHAPE_HANDLE_RESIZE_ABSOLUTE_Y 8 +#define CUSTOMSHAPE_HANDLE_MOVE_SHAPE 16 +#define CUSTOMSHAPE_HANDLE_ORTHO4 32 + +struct SdrCustomShapeInteraction +{ + com::sun::star::uno::Reference< com::sun::star::drawing::XCustomShapeHandle > xInteraction; + com::sun::star::awt::Point aPosition; + sal_Int32 nMode; +}; + +//************************************************************ +// SdrObjCustomShape +//************************************************************ + +class SVX_DLLPUBLIC SdrObjCustomShape : public SdrTextObj +{ +private: + // fObjectRotation is containing the object rotation in degrees. + double fObjectRotation; + +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + virtual void impl_setUnoShape(const com::sun::star::uno::Reference<com::sun::star::uno::XInterface>& rxUnoShape); + +public: + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + + // to allow sdr::properties::CustomShapeProperties access + friend class sdr::properties::CustomShapeProperties; + + com::sun::star::uno::Reference< com::sun::star::drawing::XShape > mXRenderedCustomShape; + + mutable com::sun::star::uno::Reference< com::sun::star::drawing::XCustomShapeEngine > mxCustomShapeEngine; + + // #i37011# render geometry shadow + SdrObject* mpLastShadowGeometry; + + com::sun::star::uno::Reference< com::sun::star::drawing::XCustomShapeEngine > GetCustomShapeEngine() const; + +// SVX_DLLPRIVATE com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::drawing::XCustomShapeHandle > > +// SdrObjCustomShape::GetInteraction( const SdrObjCustomShape* pCustomShape ) const; +// #i47293# +// SVX_DLLPRIVATE std::vector< com::sun::star::uno::Reference< com::sun::star::drawing::XCustomShapeHandle > > GetFixedInteractionHandle() const; + + SVX_DLLPRIVATE std::vector< SdrCustomShapeInteraction > GetInteractionHandles( const SdrObjCustomShape* pCustomShape ) const; + + SVX_DLLPRIVATE void DragCreateObject( SdrDragStat& rDrag ); + + SVX_DLLPRIVATE void DragResizeCustomShape( const Rectangle& rNewRect, SdrObjCustomShape* pObj ) const; + SVX_DLLPRIVATE void DragMoveCustomShapeHdl( const Point aDestination, const sal_uInt16 nCustomShapeHdlNum, SdrObjCustomShape* pObj ) const; + + // #i37011# centralize throw-away of render geometry + void InvalidateRenderGeometry(); + + // #i38892# + void ImpCheckCustomGluePointsAreAdded(); + + // returns the new text rect that corresponds to the current logic rect, the return value can be empty if nothing changed. + Rectangle ImpCalculateTextFrame( const bool bHgt, const bool bWdt ); + +public: + // #i37011# + const SdrObject* GetSdrObjectFromCustomShape() const; + const SdrObject* GetSdrObjectShadowFromCustomShape() const; + sal_Bool GetTextBounds( Rectangle& rTextBound ) const; + sal_Bool IsTextPath() const; + static basegfx::B2DPolyPolygon GetLineGeometry( const SdrObjCustomShape* pCustomShape, const sal_Bool bBezierAllowed ); + +protected: + + String aName; + +public: + + sal_Bool UseNoFillStyle() const; + + sal_Bool IsMirroredX() const; + sal_Bool IsMirroredY() const; + bool IsPostRotate() const; + void SetMirroredX( const sal_Bool bMirroredX ); + void SetMirroredY( const sal_Bool bMirroredY ); + + double GetObjectRotation() const; + double GetExtraTextRotation( const bool bPreRotation = false ) const; + + TYPEINFO(); + SdrObjCustomShape(); + virtual ~SdrObjCustomShape(); + + /* is merging default attributes from type-shype into the SdrCustomShapeGeometryItem. If pType + is NULL then the type is being taken from the "Type" property of the SdrCustomShapeGeometryItem. + MergeDefaultAttributes is called when creating CustomShapes via UI and after importing */ + void MergeDefaultAttributes( const OUString* pType = NULL ); + + /* the method is checking if the geometry data is unchanged/default, in this case the data might not be stored */ + enum DefaultType + { + DEFAULT_PATH, + DEFAULT_VIEWBOX, + DEFAULT_SEGMENTS, + DEFAULT_GLUEPOINTS, + DEFAULT_STRETCHX, + DEFAULT_STRETCHY, + DEFAULT_EQUATIONS, + DEFAULT_HANDLES, + DEFAULT_TEXTFRAMES + }; + sal_Bool IsDefaultGeometry( const DefaultType eDefaultType ) const; + + virtual sal_uInt16 GetObjIdentifier() const; + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + + virtual void SetModel(SdrModel* pNewModel); + + virtual void RecalcSnapRect(); + + virtual const Rectangle& GetSnapRect() const; + virtual const Rectangle& GetCurrentBoundRect() const; + virtual const Rectangle& GetLogicRect() const; + + virtual void Move(const Size& rSiz); + virtual void Resize(const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bUnsetRelative = true); + virtual void Shear(const Point& rRef, long nWink, double tn, bool bVShear); + virtual void SetSnapRect(const Rectangle& rRect); + virtual void SetLogicRect(const Rectangle& rRect); + + virtual void NbcMove(const Size& rSiz); + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs); + virtual void NbcMirror(const Point& rRef1, const Point& rRef2); + virtual void NbcShear(const Point& rRef, long nWink, double tn, bool bVShear); + virtual void NbcSetSnapRect(const Rectangle& rRect); + virtual void NbcSetLogicRect(const Rectangle& rRect); + + virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const; + + virtual void NbcSetStyleSheet( SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr ); + + // special drag methods + virtual bool hasSpecialDrag() const; + virtual bool beginSpecialDrag(SdrDragStat& rDrag) const; + virtual bool applySpecialDrag(SdrDragStat& rDrag); + + virtual bool BegCreate( SdrDragStat& rStat ); + virtual bool MovCreate(SdrDragStat& rStat); // #i37448# + virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); + + virtual bool AdjustTextFrameWidthAndHeight(Rectangle& rR, bool bHgt = true, bool bWdt = true) const; + virtual bool NbcAdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true); + virtual bool AdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true); + virtual bool IsAutoGrowHeight() const; + virtual bool IsAutoGrowWidth() const; + virtual void SetVerticalWriting( sal_Bool bVertical ); + virtual sal_Bool BegTextEdit( SdrOutliner& rOutl ); + virtual void TakeTextEditArea(Size* pPaperMin, Size* pPaperMax, Rectangle* pViewInit, Rectangle* pViewMin) const; + virtual void EndTextEdit( SdrOutliner& rOutl ); + virtual void TakeTextAnchorRect( Rectangle& rAnchorRect ) const; + virtual void TakeTextRect( SdrOutliner& rOutliner, Rectangle& rTextRect, bool bNoEditText = false, + Rectangle* pAnchorRect=NULL, bool bLineWidth = true ) const; + virtual SdrObjCustomShape* Clone() const; + SdrObjCustomShape& operator=(const SdrObjCustomShape& rObj); + + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + virtual basegfx::B2DPolyPolygon TakeCreatePoly( const SdrDragStat& rDrag) const; + + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + virtual basegfx::B2DPolyPolygon TakeContour() const; + + virtual void NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject); + + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + + virtual void SetPage( SdrPage* pNewPage ); + + virtual SdrObjGeoData *NewGeoData() const; + virtual void SaveGeoData(SdrObjGeoData &rGeo) const; + virtual void RestGeoData(const SdrObjGeoData &rGeo); + + // need to take fObjectRotation instead of aGeo.nWink, replace it temporary + virtual sal_Bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const; + virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon); + + virtual const SdrGluePointList* GetGluePointList() const; + //virtual SdrGluePointList* GetGluePointList(); + virtual SdrGluePointList* ForceGluePointList(); + + virtual sal_uInt32 GetHdlCount() const; + virtual SdrHdl* GetHdl( sal_uInt32 nHdlNum ) const; + + // #i33136# + static bool doConstructOrthogonal(const OUString& rName); + + using SdrTextObj::NbcSetOutlinerParaObject; +}; + +#endif //_SVDOASHP_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdoattr.hxx b/include/svx/svdoattr.hxx new file mode 100644 index 000000000000..46f1da0da01f --- /dev/null +++ b/include/svx/svdoattr.hxx @@ -0,0 +1,83 @@ +/* -*- 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 _SVDOATTR_HXX +#define _SVDOATTR_HXX + +#include <svx/xfillit0.hxx> +#include <svx/xflasit.hxx> +#include <svx/xlineit0.hxx> +#include <svx/xlnasit.hxx> +#include <svx/svdobj.hxx> +#include <svx/svdattr.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class SfxPoolItem; +class SfxSetItem; +class SdrOutliner; +class SfxItemSet; +class SfxItemPool; + +//************************************************************ +// SdrAttrObj +//************************************************************ + +class SVX_DLLPUBLIC SdrAttrObj : public SdrObject +{ +private: + friend class SdrOutliner; + +protected: + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + + Rectangle maSnapRect; + +protected: + // Strichstaerke ermitteln. Keine Linie -> 0. + sal_Int32 ImpGetLineWdt() const; + + // Zuhoeren, ob sich ein StyleSheet aendert + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + + SdrAttrObj(); + virtual ~SdrAttrObj(); + +public: + TYPEINFO(); + + // Feststellen, ob bFilledObj && Fuellung!=FillNone + sal_Bool HasFill() const; + + // Feststellen, ob Linie!=LineNone + sal_Bool HasLine() const; + + virtual const Rectangle& GetSnapRect() const; + + virtual void SetModel(SdrModel* pNewModel); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDOATTR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx new file mode 100644 index 000000000000..5d4f76d0b804 --- /dev/null +++ b/include/svx/svdobj.hxx @@ -0,0 +1,1135 @@ +/* -*- 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 _SVDOBJ_HXX +#define _SVDOBJ_HXX + +#include <memory> +#include <typeinfo> +#include <cppuhelper/weakref.hxx> +#include <vcl/mapmod.hxx> +#include <tools/weakbase.hxx> +#include <svl/lstner.hxx> +#include <vcl/timer.hxx> +#include <svx/svdsob.hxx> +#include <svx/svdtypes.hxx> // fuer SdrLayerID +#include <svx/svdglue.hxx> // Klebepunkte +#include <svx/xdash.hxx> +#include <svx/xpoly.hxx> +#include <svx/xenum.hxx> +#include <vcl/bitmapex.hxx> +#include <svx/sdrobjectuser.hxx> +#include "svx/svxdllapi.h" +#include "svx/shapeproperty.hxx" + +#include <boost/optional.hpp> +#include <boost/ptr_container/ptr_vector.hpp> + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class SfxBroadcaster; +class Pointer; +class AutoTimer; +class OutlinerParaObject; +class SdrOutliner; +class SdrDragStat; +class SdrHdl; +class SdrHdlList; +class SdrItemPool; +class SdrModel; +class SdrObjList; +class SdrObject; +class SdrPage; +class SdrPageView; +class SdrView; +class SfxItemSet; +class SfxSetItem; +class SfxStyleSheet; +class SfxUndoAction; +class XFillAttrSetItem; +class XLineAttrSetItem; +class SfxItemPool; +class PolyPolygon; +class SfxPoolItem; +class SdrVirtObj; +class SdrDragView; + +namespace sdr +{ + namespace properties + { + class BaseProperties; + } // end of namespace properties +} // end of namespace sdr + +// #110094# +namespace sdr +{ + namespace contact + { + class ViewContact; + } // end of namespace contact +} // end of namespace sdr + +namespace svx +{ + class PropertyChangeNotifier; +} + +//************************************************************ +// Defines +//************************************************************ + +enum SdrObjKind {OBJ_NONE = 0, // Abstraktes Objekt (SdrObject) + OBJ_GRUP = 1, // Objektgruppe + OBJ_LINE = 2, // Strecke + OBJ_RECT = 3, // Rechteck ww. mit runden Ecken + OBJ_CIRC = 4, // Kreis, Ellipse + OBJ_SECT = 5, // Kreissektor + OBJ_CARC = 6, // Kreisbogen + OBJ_CCUT = 7, // Kreisabschnitt + OBJ_POLY = 8, // Polygon, PolyPolygon + OBJ_PLIN = 9, // PolyLine + OBJ_PATHLINE =10, // Offene Bezierkurve + OBJ_PATHFILL =11, // Geschlossene Bezierkurve + OBJ_FREELINE =12, // Offene Freihandlinie + OBJ_FREEFILL =13, // Geschlossene Freihandlinie + OBJ_SPLNLINE =14, // Natuerlicher kubischer Spline (ni) + OBJ_SPLNFILL =15, // Periodischer kubischer Spline (ni) + OBJ_TEXT =16, // Textobjekt + OBJ_TEXTEXT =17, // Texterweiterungsrahmen (ni) + OBJ_wegFITTEXT, // FitToSize-Text (alle Zeilen gleich) + OBJ_wegFITALLTEXT, // FitToSize-Text (Zeilenweise) (ni) + OBJ_TITLETEXT =20, // Titeltext. Spezial-Textobjekt fuer StarDraw + OBJ_OUTLINETEXT=21, // OutlineText. Spezial-Textobjekt fuer StarDraw + OBJ_GRAF =22, // Fremdgrafik - (StarView Graphic) + OBJ_OLE2 =23, // OLE-Objekt + OBJ_EDGE =24, // Verbindungsobjekt fuer Konnektoren + OBJ_CAPTION =25, // Legendenobjekt + OBJ_PATHPOLY =26, // Polygon/PolyPolygon dargestellt durch SdrPathObj + OBJ_PATHPLIN =27, // Polyline dargestellt durch SdrPathObj + OBJ_PAGE =28, // Objekt, das eine SdrPage darstellt + OBJ_MEASURE =29, // Bemassungsobjekt + OBJ_DUMMY =30, // Dummyobjekt zum speichern von Luecken (zur anschliessenden Wiederherstellung der Surrogate) + OBJ_FRAME =31, // staendig aktives OLE (PlugIn-Frame oder sowas) + OBJ_UNO =32, // Universal Network Object im SvDraw-Obj eingepackt + OBJ_CUSTOMSHAPE=33, // CustomShape + OBJ_MEDIA =34, // Media shape + OBJ_TABLE =35, // Table + OBJ_MAXI}; + +enum SdrUserCallType {SDRUSERCALL_MOVEONLY, // Nur verschoben, Groesse unveraendert + SDRUSERCALL_RESIZE, // Groesse und evtl. auch Pos veraendert + SDRUSERCALL_CHGATTR, // Attribute veraendert. Moeglicherweise neue Groesse wg. Linienbreite + SDRUSERCALL_DELETE, // Obj gibt es gleich nicht mehr. Schon keine Attr mehr. + SDRUSERCALL_COPY, // Zuweisungsoperator gerufen. Kann alles geaendert sein + SDRUSERCALL_INSERTED, // In eine Objektliste (z.B. Page) eingefuegt + SDRUSERCALL_REMOVED, // Aus der Objektliste entfernt + SDRUSERCALL_CHILD_MOVEONLY, // Ein Child einer Gruppe hat sich veraendert + SDRUSERCALL_CHILD_RESIZE, // Ein Child einer Gruppe hat sich veraendert + SDRUSERCALL_CHILD_CHGATTR, // Ein Child einer Gruppe hat sich veraendert + SDRUSERCALL_CHILD_DELETE, // Ein Child einer Gruppe hat sich veraendert + SDRUSERCALL_CHILD_COPY, // Ein Child einer Gruppe hat sich veraendert + SDRUSERCALL_CHILD_INSERTED, // Ein Child einer Gruppe hat sich veraendert + SDRUSERCALL_CHILD_REMOVED}; // Ein Child einer Gruppe hat sich veraendert + +//************************************************************ +// Hilfsklasse SdrObjUserCall +//************************************************************ + +class SVX_DLLPUBLIC SdrObjUserCall +{ +public: + TYPEINFO(); + virtual ~SdrObjUserCall(); + virtual void Changed(const SdrObject& rObj, SdrUserCallType eType, const Rectangle& rOldBoundRect); +}; + +//************************************************************ +// Hilfsklasse SdrObjMacroHitRec +//************************************************************ + +class SVX_DLLPUBLIC SdrObjMacroHitRec +{ +public: + Point aPos; + Point aDownPos; + OutputDevice* pOut; + const SetOfByte* pVisiLayer; + const SdrPageView* pPageView; + sal_uInt16 nTol; + bool bDown; + + SdrObjMacroHitRec(); +}; + +//************************************************************ +// Hilfsklasse SdrObjUserData +// +// Anwenderdaten an einem Zeichenobjekt, z.B. applikationsspezifische Daten. +// Jedes Zeichenobjekt kann beliebig viele dieser Records haben (SV-Liste). +// Wer hier Daten halten will, muss sich ableiten und auch an der Factory +// einen entsprechenden Link setzen. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrObjUserData +{ +protected: + sal_uInt32 nInventor; + sal_uInt16 nIdentifier; + sal_uInt16 nVersion; + +private: + SVX_DLLPRIVATE void operator=(const SdrObjUserData& rData); // not implemented + SVX_DLLPRIVATE bool operator==(const SdrObjUserData& rData) const; // not implemented + SVX_DLLPRIVATE bool operator!=(const SdrObjUserData& rData) const; // not implemented + +public: + TYPEINFO(); + + SdrObjUserData(sal_uInt32 nInv, sal_uInt16 nId, sal_uInt16 nVer); + SdrObjUserData(const SdrObjUserData& rData); + virtual ~SdrObjUserData(); + + virtual SdrObjUserData* Clone(SdrObject* pObj1) const = 0; // #i71039# NULL -> 0 + sal_uInt32 GetInventor() const; + sal_uInt16 GetId() const; + + virtual bool HasMacro (const SdrObject* pObj) const; + virtual SdrObject* CheckMacroHit (const SdrObjMacroHitRec& rRec, const SdrObject* pObj) const; + virtual Pointer GetMacroPointer (const SdrObjMacroHitRec& rRec, const SdrObject* pObj) const; + virtual void PaintMacro (OutputDevice& rOut, const Rectangle& rDirtyRect, const SdrObjMacroHitRec& rRec, const SdrObject* pObj) const; + virtual bool DoMacro (const SdrObjMacroHitRec& rRec, SdrObject* pObj); + virtual OUString GetMacroPopupComment(const SdrObjMacroHitRec& rRec, const SdrObject* pObj) const; +}; + +//************************************************************ +// Hilfsklasse SdrObjUserDataList +//************************************************************ + +class SdrObjUserDataList +{ + typedef boost::ptr_vector<SdrObjUserData> ListType; + ListType maList; + +public: + SdrObjUserDataList(); + ~SdrObjUserDataList(); + + size_t GetUserDataCount() const; + const SdrObjUserData* GetUserData(size_t nNum) const; + SdrObjUserData* GetUserData(size_t nNum); + void AppendUserData(SdrObjUserData* pData); + void DeleteUserData(size_t nNum); +}; + +//************************************************************ +// Hilfsklasse SdrObjGeoData +// +// Alle geometrischen Daten eines beliebigen Objektes zur �bergabe an's Undo/Redo +// +//************************************************************ + +class SVX_DLLPUBLIC SdrObjGeoData +{ +public: + Rectangle aBoundRect; + Point aAnchor; + SdrGluePointList* pGPL; + bool bMovProt; + bool bSizProt; + bool bNoPrint; + bool bClosedObj; + bool mbVisible; + SdrLayerID mnLayerID; + +public: + SdrObjGeoData(); + virtual ~SdrObjGeoData(); +}; + +//************************************************************ +// Hilfsklasse SdrObjPlusData +// +// Bitsack fuer DrawObjekte +// +//************************************************************ + +class SdrObjPlusData +{ + friend class SdrObject; + + SfxBroadcaster* pBroadcast; // Broadcaster, falls dieses Obj referenziert wird (bVirtObj=true). Auch fuer Konnektoren etc. + SdrObjUserDataList* pUserDataList; // applikationsspeziefische Daten + SdrGluePointList* pGluePoints; // Klebepunkte zum Ankleben von Objektverbindern + + // #i68101# + // object name, title and description + OUString aObjName; + OUString aObjTitle; + OUString aObjDescription; + +public: + TYPEINFO(); + SdrObjPlusData(); + virtual ~SdrObjPlusData(); + virtual SdrObjPlusData* Clone(SdrObject* pObj1) const; + + void SetGluePoints(const SdrGluePointList& rPts); +}; + +//************************************************************ +// Hilfsklasse SdrObjTransformInfoRec +// +// gibt Auskunft ueber verschiedene Eigenschaften eines ZObjects +// +//************************************************************ + +class SVX_DLLPUBLIC SdrObjTransformInfoRec +{ +public: + bool bSelectAllowed : 1; // false=Obj kann nicht selektiert werden + bool bMoveAllowed : 1; // false=Obj kann nicht verschoben werden + bool bResizeFreeAllowed : 1; // false=Obj kann nicht frei resized werden + bool bResizePropAllowed : 1; // false=Obj kann nichtmal proportional resized werden + bool bRotateFreeAllowed : 1; // false=Obj kann nicht frei gedreht werden + bool bRotate90Allowed : 1; // false=Obj kann nichtmal im 90deg Raster gedreht werden + bool bMirrorFreeAllowed : 1; // false=Obj kann nicht frei gespiegelt werden + bool bMirror45Allowed : 1; // false=Obj kann nichtmal ueber Achse im 45deg Raster gespiegelt werden + bool bMirror90Allowed : 1; // false=Obj kann ebenfalls nicht ueber Achse im 90deg Raster gespiegelt werden + bool bTransparenceAllowed : 1; // false=Obj does not have an interactive transparence control + bool bGradientAllowed : 1; // false=Obj dooes not have an interactive gradient control + bool bShearAllowed : 1; // false=Obj kann nicht verzerrt werden + bool bEdgeRadiusAllowed : 1; + bool bNoOrthoDesired : 1; // true bei Rect; ... false bei BMP,MTF; + bool bNoContortion : 1; // false=Kein verzerren (bei Crook) moeglich (nur true bei PathObj und Gruppierten PathObjs) + bool bCanConvToPath : 1; // false=Keine Konvertierung in PathObj moeglich + bool bCanConvToPoly : 1; // false=Keine Konvertierung in PolyObj moeglich + bool bCanConvToContour : 1; // false=no conversion down to whole contour possible + bool bCanConvToPathLineToArea : 1; // false=Keine Konvertierung in PathObj moeglich mit Wandlung von LineToArea + bool bCanConvToPolyLineToArea : 1; // false=Keine Konvertierung in PolyObj moeglich mit Wandlung von LineToArea + + SdrObjTransformInfoRec(); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@@@ @@@@@ @@@@@@ @@@@@ @@@@ @@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@@@@ @@ @@@@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@@@ @@@@@ @@@@ @@@@@ @@@@ @@ +// +// Abstraktes DrawObject +// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SvxShape; +class SVX_DLLPUBLIC SdrObject: public SfxListener, public tools::WeakBase< SdrObject > +{ +private: + // ObjectUser section + sdr::ObjectUserVector maObjectUsers; + +public: + void AddObjectUser(sdr::ObjectUser& rNewUser); + void RemoveObjectUser(sdr::ObjectUser& rOldUser); + + // BaseProperties section +private: + sdr::properties::BaseProperties* mpProperties; +protected: + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); +public: + virtual sdr::properties::BaseProperties& GetProperties() const; + + /////////////////////////////////////////////////////////////////////////////// + // #110094# DrawContact section +private: + sdr::contact::ViewContact* mpViewContact; +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); +public: + sdr::contact::ViewContact& GetViewContact() const; + + // DrawContact support: Methods for handling Object changes + void ActionChanged() const; + +private: + friend class SdrObjListIter; + friend class SdrVirtObj; + friend class SdrRectObj; + +protected: + Rectangle aOutRect; // umschliessendes Rechteck fuer Paint (inkl. LineWdt, ...) + Point aAnchor; // Ankerposition (Writer) + Point aGridOffset; // hack (Calc) + SdrObjList* pObjList; // Liste, in dem das Obj eingefuegt ist. + SdrPage* pPage; + SdrModel* pModel; + SdrObjUserCall* pUserCall; + SdrObjPlusData* pPlusData; // Broadcaster, UserData, Konnektoren, ... (Das ist der Bitsack) + + sal_uInt32 nOrdNum; // Rangnummer des Obj in der Liste + + /** Position in the navigation order. SAL_MAX_UINT32 when not used. + */ + sal_uInt32 mnNavigationPosition; + SdrLayerID mnLayerID; + + // Objekt zeigt nur auf ein Anderes + bool bVirtObj : 1; + bool bSnapRectDirty : 1; + bool bNetLock : 1; // ni + bool bInserted : 1; // nur wenn true gibt's RepaintBroadcast & SetModify + bool bGrouped : 1; // Member eines GroupObjektes? + + // Die folgende Flags werden gestreamt + bool bMovProt : 1; // If true, the position is protected + bool bSizProt : 1; // If true, the size is protected + bool bNoPrint : 1; // If true, the object is not printed. + bool mbVisible : 1; // If false, the object is not visible on screen (but maybe on printer, depending on bNoprint + // Wenn bEmptyPresObj true ist, handelt es sich um ein + // Praesentationsobjekt, dem noch kein Inhalt zugewiesen + // wurde. Default ist das Flag auf FALSE. Die Verwaltung + // uebernimmt die Applikation. Im Zuweisungsoperator sowie + // beim Clone wird das Flag nicht mitkopiert! + // Das Flag ist persistent. + bool bEmptyPresObj : 1; // Leeres Praesentationsobjekt (Draw) + + // true=Objekt ist als Objekt der MasterPage nicht sichtbar + bool bNotVisibleAsMaster : 1; + + // true=Es handelt sich hierbei um ein geschlossenes Objekt, also nicht Linie oder Kreisbogen ... + bool bClosedObj : 1; + + bool bIsEdge : 1; + bool bIs3DObj : 1; + bool bMarkProt : 1; // Markieren verboten. Persistent + bool bIsUnoObj : 1; + bool bNotMasterCachable : 1; + + // #i25616# + bool mbLineIsOutsideGeometry : 1; + + // #i25616# + bool mbSupportTextIndentingOnLineWidthChange : 1; + + // on import of OLE object from MS documents the BLIP size might be retrieved, + // in this case the following member is initialized as nonempty rectangle + Rectangle maBLIPSizeRectangle; + + // global static ItemPool for not-yet-insetred items +private: + static SdrItemPool* mpGlobalItemPool; + boost::optional<double> mnRelativeWidth; + boost::optional<double> mnRelativeHeight; +public: + static SdrItemPool& GetGlobalDrawObjectItemPool(); + void SetRelativeWidth( double nValue ) { mnRelativeWidth.reset( nValue ); } + void SetRelativeHeight( double nValue ) { mnRelativeHeight.reset( nValue ); } + boost::optional<double> GetRelativeWidth( ) const { return mnRelativeWidth; } + boost::optional<double> GetRelativeHeight( ) const { return mnRelativeHeight; } + // evil calc grid/shape drawlayer syncing + Point GetGridOffset() const { return aGridOffset; } + void SetGridOffset( const Point& rGridOffset ){ aGridOffset = rGridOffset; } +protected: + void ImpDeleteUserData(); + SdrObjUserData* ImpGetMacroUserData() const; + Rectangle ImpDragCalcRect(const SdrDragStat& rDrag) const; + + // Fuer GetDragComment + void ImpTakeDescriptionStr(sal_uInt16 nStrCacheID, OUString& rStr, sal_uInt16 nVal=0) const; + + void ImpForcePlusData(); + + OUString GetWinkStr(long nWink, bool bNoDegChar = false) const; + OUString GetMetrStr(long nVal, MapUnit eWantMap=MAP_MM, bool bNoUnitChars = false) const; + + // bNotMyself=true bedeutet: Nur die ObjList auf Dirty setzen, nicht mich. + // Wird z.B. benoetigt fuer NbcMove, denn da movt man SnapRect und aOutRect + // i.d.R. gleich mit um die Neuberechnung zu sparen. +public: + virtual void SetRectsDirty(sal_Bool bNotMyself = false); +protected: + + // ueberladen, wenn man sich von SdrObjPlusData abgeleitet hat: + virtual SdrObjPlusData* NewPlusData() const; + +protected: + // Diese 3 Methoden muss ein abgeleitetes Objekt ueberladen, wenn es eigene + // geometrische Daten besitzt, die fuer den Undo-Fall gesichert werden + // sollen. NewGeoData() erzeugt lediglich eine leere Instanz auf eine von + // SdrObjGeoData abgeleitete Klasse. + virtual SdrObjGeoData* NewGeoData() const; + virtual void SaveGeoData(SdrObjGeoData& rGeo) const; + virtual void RestGeoData(const SdrObjGeoData& rGeo); + +protected: + virtual ~SdrObject(); + +public: + TYPEINFO(); + SdrObject(); + + /** frees the SdrObject pointed to by the argument + + In case the object has an SvxShape, which has the ownership of the object, it + is actually *not* deleted. + */ + static void Free( SdrObject*& _rpObject ); + + // This method is only for access from Property objects + virtual void SetBoundRectDirty(); + + virtual void SetObjList(SdrObjList* pNewObjList); + SdrObjList* GetObjList() const; + + virtual void SetPage(SdrPage* pNewPage); + SdrPage* GetPage() const; + + virtual void SetModel(SdrModel* pNewModel); + SdrModel* GetModel() const; + SdrItemPool* GetObjectItemPool() const; + + void AddListener(SfxListener& rListener); + void RemoveListener(SfxListener& rListener); + const SfxBroadcaster* GetBroadcaster() const; + + virtual void AddReference(SdrVirtObj& rVrtObj); + virtual void DelReference(SdrVirtObj& rVrtObj); + virtual sal_uInt32 GetObjInventor() const; + virtual sal_uInt16 GetObjIdentifier() const; + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + + // Layer interface + virtual SdrLayerID GetLayer() const; + virtual void NbcSetLayer(SdrLayerID nLayer); + virtual void SetLayer(SdrLayerID nLayer); + // renaming GetLayerSet -> getMergedHierarchyLayerSet to make clear what happens here. rSet needs to be empty. + virtual void getMergedHierarchyLayerSet(SetOfByte& rSet) const; + + // UserCall interface + void SetUserCall(SdrObjUserCall* pUser); + SdrObjUserCall* GetUserCall() const; + void SendUserCall(SdrUserCallType eUserCall, const Rectangle& rBoundRect) const; + + // Ein solcher Referenzpunkt ist z.B. der Punkt eines Symbols, der + // der beim Einfuegen des Symbols auf das Raster gefangen werden soll + // oder der Fixpunkt eines Bildes innerhalb eines Animationsobjektes. + virtual bool HasRefPoint() const; + virtual Point GetRefPoint() const; + virtual void SetRefPoint(const Point& rPnt); + + // #i68101# + // An object may have a user-set Name (Get/SetName()), e.g SdrGrafObj, SdrObjGroup + // or SdrOle2Obj. + // It may also have a Title and a Description for accessibility purposes. + void SetName(const OUString& rStr); + OUString GetName() const; + void SetTitle(const OUString& rStr); + OUString GetTitle() const; + void SetDescription(const OUString& rStr); + OUString GetDescription() const; + + // Fuer Gruppenobjekte + bool IsGroupObject() const; + virtual SdrObjList* GetSubList() const; + SdrObject* GetUpGroup() const; + + // Ueber die Objekt-Ordnungsnummer kann man feststellen, ob ein Objekt vor + // oder hinter einem anderen liegt. Objekte mit kleinen Ordnungsnummern werden + // zuerst gezeichnet, Objekte mit grossen Ordnungsnummern zuletzt. + // Wird die Reihenfolge der Objekte in der Liste veraendert, so wird ein + // Dirty-Flag gesetzt (an der Page). Beim naechsten SdrObject::GetOrdNum() + // werden die Ordnungsnummer aller Objekte der Liste neu bestimmt. + sal_uInt32 GetOrdNum() const; + + // Diese Methode sollte nur verwendet werden, wenn man ganz genau weiss, + // was man macht: + sal_uInt32 GetOrdNumDirect() const; + + // Das Setzen der Ordnungsnummer sollte nur vom Model bzw. von der Page + // geschehen. + void SetOrdNum(sal_uInt32 nNum); + + /** Return the position in the navigation order for the called object. + Note that this method may update the navigation position of the + called and of other SdrObjects. Therefore this method can not be + const. + @return + If no navigation position has been explicitly defined then the + result of GetOrdNum() is returned. + */ + sal_uInt32 GetNavigationPosition (void); + + /** Set the position in the navigation position to the given value. + This method is typically used only by the model after a change to + the navigation order. + This method does not change the navigation position of other + objects. + Use SdrObjList::SetObjectNavigationPosition() instead. + */ + void SetNavigationPosition (const sal_uInt32 nPosition); + + // #111111# + // To make clearer that this method may trigger RecalcBoundRect and thus may be + // expensive and sometimes problematic (inside a bigger object change You will get + // non-useful BoundRects sometimes) i rename that method from GetBoundRect() to + // GetCurrentBoundRect(). + virtual const Rectangle& GetCurrentBoundRect() const; + + // #111111# + // To have a possibility to get the last calculated BoundRect e.g for producing + // the first rectangle for repaints (old and new need to be used) without forcing + // a RecalcBoundRect (which may be problematical and expensive sometimes) i add here + // a new method for accessing the last BoundRect. + virtual const Rectangle& GetLastBoundRect() const; + + virtual void RecalcBoundRect(); + + void BroadcastObjectChange() const; + + // Modified-Flag am Model setzen + virtual void SetChanged(); + + // Tooling for painting a single object to a OutputDevice. This will be needed as long + // as not all painting is changed to use DrawContact objects. + bool SingleObjectPainter(OutputDevice& rOut) const; + bool LineGeometryUsageIsNecessary() const; + + /** + Returns a copy of the object. Every inherited class must reimplement this (in class Foo + it should be sufficient to do "virtual Foo* Clone() const { return CloneHelper< Foo >(); }". + Note that this function uses operator= internally. + */ + virtual SdrObject* Clone() const; + /** + Implemented mainly for the purposes of Clone(). + */ + SdrObject& operator=(const SdrObject& rObj); + + // TakeObjName...() ist fuer die Anzeige in der UI, z.B. "3 Rahmen selektiert". + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + // Das Xor-Polygon wird von der View zu Draggen des Objektes benoetigt. + // Alle Polygone innerhalb des PolyPolygon werden als PolyLine interpretiert. + // Moechte man ein geschlossenes Polygon, so muss man es explizit schliessen. + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + + // Die Kontur fuer TextToContour + virtual basegfx::B2DPolyPolygon TakeContour() const; + + // Ueber GetHdlCount gibt ein Objekt die Anzahl seiner Handles preis. + // Im Normalfall werden dies 8 sein, bei einer Strecke 2. Bei Polygonobjekten + // (Polygon,Spline,Bezier) kann die Handleanzahl wesentlich groesser werden. + // Polygonobjekten wird ausserdem die Moeglichkeit eingeraeumt einen Punkt + // eines selektierten Objekts zu selektieren. Das Handle dieses Punktes wird + // dann durch einen Satz neuer Handles ausgetauscht (PlusHdl). Bei einem + // Polygon wird das wohl ein einfacher Selektionshandle sein, bei einer + // Bezierkurve dagegen koennen das schon bis zu 3 Handles werden (inkl Gewichte). + // GetHdl() und GetPlusHdl() muessen Handleinstanzen mit new erzeugen! + // Ein Objekt, das bei HasSpacialDrag() true liefert muss diese Methoden + // zur Verfuegung stellen (inkl. FillHdlList). + virtual sal_uInt32 GetHdlCount() const; + virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const; + virtual sal_uInt32 GetPlusHdlCount(const SdrHdl& rHdl) const; + virtual SdrHdl* GetPlusHdl(const SdrHdl& rHdl, sal_uInt32 nPlNum) const; + virtual void AddToHdlList(SdrHdlList& rHdlList) const; + + // Die Standardtransformationen (Move,Resize,Rotate,Mirror,Shear) werden von der + // View uebernommen (TakeXorPoly(),...). + // Objektspeziefisches draggen wie z.B. Eckenradius bei Rechtecken, + // Stuetzstellen bei Splines, Gewichte bei Bezierkurven und Pointer von + // Labelobjekten muss vom Objekt selbst gehandled werden. Um das Model + // Statusfrei zu halten werden die Statusdaten an der View gehalten und dem + // Objekt dann uebergeben. EndDrag liefrt im Normalfall true fuer Erfolg. + // false kann zurueckgegeben werden, wenn das Dragging das Objekt nicht + // veraendert hat, wobei dir evtl. Tatsache das die Maus nicht bewegt wurde + // bereits von der View abgefangen wird. + virtual bool hasSpecialDrag() const; + virtual bool beginSpecialDrag(SdrDragStat& rDrag) const; + virtual bool applySpecialDrag(SdrDragStat& rDrag); + virtual String getSpecialDragComment(const SdrDragStat& rDrag) const; + virtual basegfx::B2DPolyPolygon getSpecialDragPoly(const SdrDragStat& rDrag) const; + + // FullDrag support. This is for standard interactions and for SdrObjOwn + // support. If supportsFullDrag() returns true, getFullDragClone has to + // return a cloned SdrObject (who's ownership it loses) at which modifications + // like Move(), Scale(), etc or applySpecialDrag() will be executed. That + // object will be visualized on overlay for full drag, but should not be + // part of the model, thus not changing anything since it's only a temporary + // helper object for interaction + virtual bool supportsFullDrag() const; + virtual SdrObject* getFullDragClone() const; + + // Jedes Objekt muss in der Lage sein sich selbst interaktiv zu erzeugen. + // Beim MausDown wird zunaechst ein neues Objekt erzeugt und dann seine + // BegCreate()-Methode gerufen. Bei jedem MausMode wird dann MovCreate + // gerufen. BrkCreate() bedeutet, dass der User die interaktive Objekt- + // erzeugung abgebrochen hat. EndCreate() wird gerufen beim MouseUp-Event. + // Liefert EndCreate() ein true, so ist die Objekterzeugung abgeschlossen; + // das Objekt wird in die entsprechende Liste eingefuegt. Andernfalls + // (EndCreate()==false) gehe ich davon aus, dass weitere Punkte zur + // Objekterzeugung notwendig sind (Polygon,...). Der Parameter eCmd + // enthaelt die Anzahl der Mausklicks (so die App diese durchreicht). + // BckCreate() -> Letztes EndCreate() rueckgaengig machen (z.B. letzten + // Polygonpunkt wieder loeschen). + // RetrunCode: true=Weiter gehts, false=Create dadurch abgebrochen. + virtual bool BegCreate(SdrDragStat& rStat); + virtual bool MovCreate(SdrDragStat& rStat); // TRUE=Xor muss repainted werden + virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); + virtual bool BckCreate(SdrDragStat& rStat); + virtual void BrkCreate(SdrDragStat& rStat); + + // damit holt man sich den Pointer, der das Createn dieses Objekts symbolisiert + virtual Pointer GetCreatePointer() const; + + // Polygon das waehrend des Erzeugens aufgezogen wird + virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const; + + // Die Methoden Move, Resize, Rotate, Mirror, Shear, SetSnapRect und + // SetLogicRect rufen jeweils die entsprechenden Nbc-Methoden, versenden einen + // Repaint-Broadcast und setzen den Modified-Status am Model. Abgeleitete + // Objekte sollten i.d.R. nur die Nbc-Methoden ueberladen. + // Nbc bedeutet: 'NoBroadcast'. + virtual void NbcMove (const Size& rSiz); + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs); + virtual void NbcMirror(const Point& rRef1, const Point& rRef2); + virtual void NbcShear (const Point& rRef, long nWink, double tn, bool bVShear); + + virtual void Move (const Size& rSiz); + virtual void Resize(const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bUnsetRelative = true); + virtual void Rotate(const Point& rRef, long nWink, double sn, double cs); + virtual void Mirror(const Point& rRef1, const Point& rRef2); + virtual void Shear (const Point& rRef, long nWink, double tn, bool bVShear); + + // Die relative Position eines Zeichenobjektes ist die Entfernung der + // linken oberen Eche des logisch umschliessenden Rechtecks (SnapRect) + // zum Anker. + virtual void NbcSetRelativePos(const Point& rPnt); + virtual void SetRelativePos(const Point& rPnt); + virtual Point GetRelativePos() const; + void ImpSetAnchorPos(const Point& rPnt); + virtual void NbcSetAnchorPos(const Point& rPnt); + virtual void SetAnchorPos(const Point& rPnt); + virtual const Point& GetAnchorPos() const; + + // Snap wird nicht auf dem BoundRect ausgefuehrt, sondern nach Moeglichkeit auf + // logischen Koordinaten (also ohne Beruecksichtigung von Strichstaerke, ... ). + // SetSnapRect() versucht das Objekt so hinzusizen, dass es in das uebergebene + // Rect passt (ohne Strichstaerke, ...) + virtual void RecalcSnapRect(); + virtual const Rectangle& GetSnapRect() const; + virtual void SetSnapRect(const Rectangle& rRect); + virtual void NbcSetSnapRect(const Rectangle& rRect); + + // Logic Rect: Beim Rect z.B. ohne Beruecksichtigung des Drehwinkels, Shear, ... + virtual const Rectangle& GetLogicRect() const; + virtual void SetLogicRect(const Rectangle& rRect); + virtual void NbcSetLogicRect(const Rectangle& rRect); + + /** the defaul is to set the logic rect to the given rectangle rMaxRect. If the shape + has an intrinsic aspect ratio it may set the logic rect so the aspect + ratio is kept but still inside the rectangle rMaxRect. + + If bShrinkOnly is set to true, the size of the current logic rect will not + be changed if it is smaller than the given rectangle rMaxRect. */ + virtual void AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly = false ); + + // Drehwinkel und Shear + virtual long GetRotateAngle() const; + virtual long GetShearAngle(bool bVertical = false) const; + + // Zum Fangen von/auf ausgezeichneten Punkten eines Obj (Polygonpunkte, + // Kreismittelpunkt, ...) + virtual sal_uInt32 GetSnapPointCount() const; + virtual Point GetSnapPoint(sal_uInt32 i) const; + + // Fuer Objekte, bei denen jeder einzelne Punkt verschoben werden kann, + // z.B. Polygone, Polylines, Linien, ... . Bei diesen Objekten werden + // Punkte selektiert (ggf. Mehrfachselektion), geloescht, eingefuegt, + // als Mehrfachselektion verschoben und gedreht, ... + // Nur solche Objekte koennen PlusHandles haben (z.B. die Gewichte an den + // Bezierkurven. + virtual sal_Bool IsPolyObj() const; + virtual sal_uInt32 GetPointCount() const; + virtual Point GetPoint(sal_uInt32 i) const; + void SetPoint(const Point& rPnt, sal_uInt32 i); + virtual void NbcSetPoint(const Point& rPnt, sal_uInt32 i); + + // Alle geometrischen Daten holen fuer's Undo/Redo + virtual SdrObjGeoData* GetGeoData() const; + virtual void SetGeoData(const SdrObjGeoData& rGeo); + + // ItemSet access + const SfxItemSet& GetMergedItemSet() const; + void SetMergedItem(const SfxPoolItem& rItem); + void ClearMergedItem(const sal_uInt16 nWhich = 0); + void SetMergedItemSet(const SfxItemSet& rSet, bool bClearAllItems = false); + const SfxPoolItem& GetMergedItem(const sal_uInt16 nWhich) const; + + // internal versions +protected: + const SfxItemSet& GetObjectItemSet() const; + void SetObjectItem(const SfxPoolItem& rItem); + void SetObjectItemSet(const SfxItemSet& rSet); + const SfxPoolItem& GetObjectItem(const sal_uInt16 nWhich) const; + +public: + // syntactical sugar for ItemSet accesses + void SetMergedItemSetAndBroadcast(const SfxItemSet& rSet, bool bClearAllItems = false); + + // NotPersistAttr fuer Layer, ObjName, geometrische Transformationen, ... + void TakeNotPersistAttr(SfxItemSet& rAttr, bool bMerge) const; + void ApplyNotPersistAttr(const SfxItemSet& rAttr); + void NbcApplyNotPersistAttr(const SfxItemSet& rAttr); + + // bDontRemoveHardAttr=FALSE: alle in der Vorlage gesetzten Attribute werden am + // Zeichenobjekt auf Default gesetzt; TRUE: alle harten Attribute bleiben erhalten. + void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr); + virtual void NbcSetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr); + SfxStyleSheet* GetStyleSheet() const; + + // TextEdit + virtual bool HasTextEdit() const; + + // Return==TRUE: TextEditMode gestartet + virtual sal_Bool BegTextEdit(SdrOutliner& rOutl); + virtual void EndTextEdit(SdrOutliner& rOutl); + + // Text wird im Format des Outliners gehalten + // SetOutlinerParaObject: Eigentumsuebereignung von *pTextObject! + virtual void SetOutlinerParaObject(OutlinerParaObject* pTextObject); + virtual void NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject); + virtual OutlinerParaObject* GetOutlinerParaObject() const; + virtual void NbcReformatText(); + virtual void ReformatText(); + + void BurnInStyleSheetAttributes(); + + // Macrofaehigkeit, z.B. ein Rechteck als PushButton. + virtual bool HasMacro() const; + virtual SdrObject* CheckMacroHit (const SdrObjMacroHitRec& rRec) const; + virtual Pointer GetMacroPointer (const SdrObjMacroHitRec& rRec) const; + virtual void PaintMacro (OutputDevice& rOut, const Rectangle& rDirtyRect, const SdrObjMacroHitRec& rRec) const; + virtual bool DoMacro (const SdrObjMacroHitRec& rRec); + virtual OUString GetMacroPopupComment(const SdrObjMacroHitRec& rRec) const; + bool IsMacroHit(const SdrObjMacroHitRec& rRec) const; + + // Konnektoren. (siehe auch Dokumentation in SvdoEdge.HXX, SdrEdgeObj + // sowie SvdGlue.HXX und SvdGlEV.HXX) + // Es gibt Knoten und Kanten. Eine Kante kann theoretisch auch Knoten + // sein, das ist jedoch in dieser Version noch nicht implementiert. + // Ein Knoten hat eine Anzahl von Klebepunkten, wo Kanten angeklebt + // werden koennen. + // Eine Kante kann + // - ohne Verbindungen sein + // - an einem Ende auf der Wiese stehen und am anderen Ende an + // genau einem Knoten gebunden sein + // - an beiden Enden mit jeweils genau einem Knoten verbunden sein. + // Die Kante ist Listener bei seinen bis zu 2 Knoten. + // Wird der Knoten verschoben oder Resized, folgen alle angebundenen + // Kanten. Ebenso bei SetGluePoint()... am Knoten. + // Beim Verschieben/Resizen der Kante wird dagegen die Verbindung + // geloesst. + // Objekt ist ein Knoten? + virtual bool IsNode() const; + + // Automatische Klebepunkte: + // je 4 Scheitelpunkt- und Eckpositionen muss ein Knotenobjekt liefern + // i.d.R. 0=oben, 1=rechts, 2=unten, 3=links + virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const; + + // i.d.R. 0=linksoben, 1=rechtsoben, 2=rechtsunten, 3=linksunten + virtual SdrGluePoint GetCornerGluePoint(sal_uInt16 nNum) const; + + // Liste aller Klebepunkte. Kann NULL sein. + virtual const SdrGluePointList* GetGluePointList() const; + //virtual SdrGluePointList* GetGluePointList(); + + // Nach veraendern der GluePointList muss man am Obj SendRepaintBroadcast rufen! + virtual SdrGluePointList* ForceGluePointList(); + + // Temporaer zu setzen fuer Transformationen am Bezugsobjekt + void SetGlueReallyAbsolute(bool bOn); + void NbcRotateGluePoints(const Point& rRef, long nWink, double sn, double cs); + void NbcMirrorGluePoints(const Point& rRef1, const Point& rRef2); + void NbcShearGluePoints (const Point& rRef, long nWink, double tn, bool bVShear); + + // Objekt ist eine Kante? + virtual bool IsEdge() const; + + // bTail1=TRUE: Linienanfang, sonst LinienEnde + // pObj=NULL: Disconnect + virtual void ConnectToNode(bool bTail1, SdrObject* pObj); + virtual void DisconnectFromNode(bool bTail1); + virtual SdrObject* GetConnectedNode(bool bTail1) const; + + /** sets the writing mode of the object's context + + Objects which itself do not support different writing modes will ignore this call. + + Objects which support different writing modes, but have an own, explicit writing mode set, + will also ignore this call. + + Objects which support different writing modes, and whose own mode is set to css.text.WritingMode2.CONTEXT, + will use the given writing mode to calculate their "effective writing mode". + + The behaviour of this method is undefined if you pass css.text.WritingMode2.CONTEXT. + + @param _nContextWritingMode + the effective writing mode of the context of the object + */ + virtual void SetContextWritingMode( const sal_Int16 _nContextWritingMode ); + + // Wenn ein Objekt in der Lage ist, sich in ein Polygon oder in eine + // Bezierkurve (oder beides) zu verwandeln, dann sollten die folgenden + // Methoden ueberladen werden. + // Z.B. Ein RectObj mit Strichstaerke 10, SOLID_PEN in Polygon wandeln: + // Im Modus bLineToArea=false soll ein PolyObj mit 4 Stuetzstellen, + // Strichstaerke 10 und SOLiD_PEN erzeugt werden. + // Im Modus bLineToArea=true dagegen soll das generierte Obj immer ein + // LinienAttribut NULL_PEN haben, und die Linie (auch Linienmuster) selbst + // durch Polygonflaechen emuliert werden, die dadurch anschliessend vom + // Anwender manipuliert werden koennen. Das RectObj kann sich somit also + // nur korrekt konvertieren, wenn es als Flaechenattribut NULL_BRUSH + // besitzt. Es muesste in diesem Fall dann: + // - SOLID_BRUSH mit der Farbe des gesetzten Pen setzen + // - NULL_PEN setzen + // - PolyPolygon mit 2 Polygonen zu je 4 Stuetzstellen generieren. + // Der Returnwert ist jeweils ein SdrObject*, da als Rueckgabe zur Not + // auch Gruppenobjekte erlaubt sind (z.B. fuer SdrTextObj). + // Bei der Konvertierung von TextObj nach PathObj wird es wohl so sein, + // dass beide Modi (bLineToArea=true/false) identisch sind. + // Defaulted sind diese Methoden auf "Ich kann das nicht" (FALSE/NULL). + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + SdrObject* ConvertToPolyObj(bool bBezier, bool bLineToArea) const; + + // convert this path object to contour object; bForceLineDash converts even + // when there is no filled new polygon created from line-to-polygon conversion, + // specially used for XLINE_DASH and 3D conversion + SdrObject* ConvertToContourObj(SdrObject* pRet, bool bForceLineDash = false) const; + SdrObject* ImpConvertToContourObj(SdrObject* pRet, bool bForceLineDash = false) const; + + // TRUE: Referenz auf ein Obj + bool IsVirtualObj() const; + + // true=Obj kann warsch. gefuellt werden; false=Obj kann warsch. Linienenden haben. + // ungueltig, wenn es sich um ein GroupObj handelt. + bool IsClosedObj() const; + + bool IsEdgeObj() const; + bool Is3DObj() const; + bool IsUnoObj() const; + void SetMarkProtect(bool bProt); + bool IsMarkProtect() const; + void SetInserted(bool bIns); + bool IsInserted() const; + void SetMoveProtect(bool bProt); + bool IsMoveProtect() const; + void SetResizeProtect(bool bProt); + bool IsResizeProtect() const; + void SetPrintable(bool bPrn); + bool IsPrintable() const; + void SetVisible(bool bVisible); + bool IsVisible() const; + void SetEmptyPresObj(bool bEpt); + bool IsEmptyPresObj() const; + void SetNotVisibleAsMaster(bool bFlg); + bool IsNotVisibleAsMaster() const; + + // #i25616# + bool LineIsOutsideGeometry() const; + + // #i25616# + bool DoesSupportTextIndentingOnLineWidthChange() const; + + // applikationsspeziefische Daten + sal_uInt16 GetUserDataCount() const; + SdrObjUserData* GetUserData(sal_uInt16 nNum) const; + + void AppendUserData(SdrObjUserData* pData); + + // Delete entfernt den Record aus der Liste und ruft + // ein delete (FreeMem+Dtor). + void DeleteUserData(sal_uInt16 nNum); + + // ItemPool fuer dieses Objekt wechseln + void MigrateItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel = 0L); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // access to the UNO representation of the shape + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoShape(); + ::com::sun::star::uno::WeakReference< ::com::sun::star::uno::XInterface > getWeakUnoShape() const { return maWeakUnoShape; } + + static SdrObject* getSdrObjectFromXShape( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xInt ); + + /** Sets a new UNO representation of the shape + * + * This is only a public interface function. The actual work is + * done by impl_setUnoShape(). + * + * Calling this function is only allowed for the UNO representation + * itself! + */ + void setUnoShape( + const com::sun::star::uno::Reference< + com::sun::star::uno::XInterface>& _rxUnoShape); + + /** retrieves the instance responsible for notifying changes in the properties of the shape associated with + the SdrObject + + @precond + There already exists an SvxShape instance associated with the SdrObject + @throws ::com::sun::star::uno::RuntimeException + if there does nt yet exists an SvxShape instance associated with the SdrObject. + */ + ::svx::PropertyChangeNotifier& + getShapePropertyChangeNotifier(); + + /** notifies a change in the given property, to all applicable listeners registered at the associated SvxShape + + This method is equivalent to calling getShapePropertyChangeNotifier().notifyPropertyChange( _eProperty ), + exception that it is allowed to be called when there does not yet exist an associated SvxShape - in which + case the method will silently return without doing anything. + */ + void notifyShapePropertyChange( const ::svx::ShapeProperty _eProperty ) const; + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // + // transformation interface for StarOfficeAPI. This implements support for + // homogen 3x3 matrices containing the transformation of the SdrObject. At the + // moment it contains a shearX, rotation and translation, but for setting all linear + // transforms like Scale, ShearX, ShearY, Rotate and Translate are supported. + // + // gets base transformation and rectangle of object. If it's an SdrPathObj it fills the PolyPolygon + // with the base geometry and returns TRUE. Otherwise it returns FALSE. + virtual sal_Bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const; + + // sets the base geometry of the object using infos contained in the homogen 3x3 matrix. + // If it's an SdrPathObj it will use the provided geometry information. The Polygon has + // to use (0,0) as upper left and will be scaled to the given size in the matrix. + virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon); + + // #116168# + // Give info if object is in destruction + bool IsInDestruction() const; + + // return if fill is != XFILL_NONE + bool HasFillStyle() const; + bool HasLineStyle() const; + + // on import of OLE object from MS documents the BLIP size might be retrieved, + // the following methods are used to control it; + // usually this data makes no sence after the import is finished, since the object + // might be resized + Rectangle GetBLIPSizeRectangle() const; + void SetBLIPSizeRectangle( const Rectangle& aRect ); + +protected: + /** Sets a new UNO shape + * + * The default implementation of this function sets the new UNO + * shape. Derived classes should override the function to handle + * any other actions that are needed when the shape is being + * changed. + * + * The implementation _must_ call the same method of its parent + * class (preferably as the first step)! + */ + virtual void impl_setUnoShape( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxUnoShape ); + + /** + Helper function for reimplementing Clone(). + */ + template< typename T > T* CloneHelper() const; + +private: + /** only for internal use! + */ + SvxShape* getSvxShape(); + + /** do not use directly, always use getSvxShape() if you have to! */ + SvxShape* mpSvxShape; + ::com::sun::star::uno::WeakReference< ::com::sun::star::uno::XInterface > + maWeakUnoShape; +}; + +//************************************************************ +// SdrDummyObj +// +// Wer sich eigene Objekte schafft muss einen Link in der Klasse +// SdrObjFactory setzen. Der Handler hat folgendes aussehen: +// void Hdl(SdrObjFactory*) +// Er muss sich aus der uebergebenen Instanz die Werte nInventor und +// nIdentifier ansehen und entsprechend mit new eine Zeichenobjektinstanz +// erzeugen. Einen Zeiger auf diese Instanz hat er in der Membervariablen +// pNewObj zu hinterlassen. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrObjFactory +{ +public: + sal_uInt32 nInventor; + sal_uInt16 nIdentifier; + + // fuer MakeNewObj(): + SdrPage* pPage; + SdrModel* pModel; + SdrObject* pNewObj; + + // fuer MakeNewObjUserData(): + SdrObject* pObj; + SdrObjUserData* pNewData; + +private: + SVX_DLLPRIVATE SdrObjFactory(sal_uInt32 nInvent, sal_uInt16 nIdent, SdrPage* pNewPage, SdrModel* pNewModel); + +public: + static SdrObject* MakeNewObject(sal_uInt32 nInvent, sal_uInt16 nIdent, SdrPage* pPage, SdrModel* pModel=NULL); + static void InsertMakeObjectHdl(const Link& rLink); + static void RemoveMakeObjectHdl(const Link& rLink); + static void InsertMakeUserDataHdl(const Link& rLink); + static void RemoveMakeUserDataHdl(const Link& rLink); +}; + +typedef tools::WeakReference< SdrObject > SdrObjectWeakRef; + +template< typename T > T* SdrObject::CloneHelper() const +{ + OSL_ASSERT( typeid( T ) == typeid( *this )); + T* pObj = dynamic_cast< T* >( SdrObjFactory::MakeNewObject(GetObjInventor(),GetObjIdentifier(),NULL)); + if (pObj!=NULL) + *pObj=*static_cast< const T* >( this ); + return pObj; +} + +#endif //_SVDOBJ_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdocapt.hxx b/include/svx/svdocapt.hxx new file mode 100644 index 000000000000..54c67fb849f3 --- /dev/null +++ b/include/svx/svdocapt.hxx @@ -0,0 +1,161 @@ +/* -*- 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 _SVDCAPT_HXX +#define _SVDCAPT_HXX + +#include <svx/svdorect.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class ImpCaptParams; + +namespace sdr { namespace properties { + class CaptionProperties; +}} + +//************************************************************ +// Hilfsklasse SdrCaptObjGeoData +//************************************************************ + +// #109872# +class SdrCaptObjGeoData : public SdrTextObjGeoData +{ +public: + Polygon aTailPoly; +}; + +//************************************************************ +// SdrCaptionObj +//************************************************************ + +class SVX_DLLPUBLIC SdrCaptionObj : public SdrRectObj +{ +private: + // to allow sdr::properties::CaptionProperties access to ImpRecalcTail() + friend class sdr::properties::CaptionProperties; + friend class SdrTextObj; // fuer ImpRecalcTail() bei AutoGrow + +protected: + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + +private: + Polygon aTailPoly; // das ganze Polygon des Schwanzes + sal_Bool mbSpecialTextBoxShadow; // for calc special shadow, default FALSE + sal_Bool mbFixedTail; // for calc note box fixed tail, default FALSE + Point maFixedTailPos; // for calc note box fixed tail position. + +private: + SVX_DLLPRIVATE void ImpGetCaptParams(ImpCaptParams& rPara) const; + SVX_DLLPRIVATE void ImpCalcTail1(const ImpCaptParams& rPara, Polygon& rPoly, Rectangle& rRect) const; + SVX_DLLPRIVATE void ImpCalcTail2(const ImpCaptParams& rPara, Polygon& rPoly, Rectangle& rRect) const; + SVX_DLLPRIVATE void ImpCalcTail3(const ImpCaptParams& rPara, Polygon& rPoly, Rectangle& rRect) const; + SVX_DLLPRIVATE void ImpCalcTail4(const ImpCaptParams& rPara, Polygon& rPoly, Rectangle& rRect) const; + SVX_DLLPRIVATE void ImpCalcTail (const ImpCaptParams& rPara, Polygon& rPoly, Rectangle& rRect) const; + SVX_DLLPRIVATE void ImpRecalcTail(); + +public: + TYPEINFO(); + SdrCaptionObj(); + SdrCaptionObj(const Rectangle& rRect, const Point& rTail); + virtual ~SdrCaptionObj(); + + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual sal_uInt16 GetObjIdentifier() const; + virtual SdrCaptionObj* Clone() const; + + // for calc: special shadow only for text box + void SetSpecialTextBoxShadow() { mbSpecialTextBoxShadow = sal_True; } + sal_Bool GetSpecialTextBoxShadow() const { return mbSpecialTextBoxShadow; } + + // for calc: fixed note tail position. + void SetFixedTail() { mbFixedTail = sal_True; } + + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + virtual void SetModel(SdrModel* pNewModel); + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + + virtual sal_uInt32 GetHdlCount() const; + virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const; + + // special drag methods + virtual bool hasSpecialDrag() const; + virtual bool beginSpecialDrag(SdrDragStat& rDrag) const; + virtual bool applySpecialDrag(SdrDragStat& rDrag); + virtual String getSpecialDragComment(const SdrDragStat& rDrag) const; + + virtual bool BegCreate(SdrDragStat& rStat); + virtual bool MovCreate(SdrDragStat& rStat); + virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); + virtual bool BckCreate(SdrDragStat& rStat); + virtual void BrkCreate(SdrDragStat& rStat); + virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const; + virtual Pointer GetCreatePointer() const; + + virtual void NbcMove(const Size& rSiz); + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + + virtual void NbcSetRelativePos(const Point& rPnt); + virtual Point GetRelativePos() const; + virtual void NbcSetAnchorPos(const Point& rPnt); + virtual const Point& GetAnchorPos() const; + + virtual void RecalcSnapRect(); + virtual const Rectangle& GetSnapRect() const; + virtual void NbcSetSnapRect(const Rectangle& rRect); + virtual const Rectangle& GetLogicRect() const; + virtual void NbcSetLogicRect(const Rectangle& rRect); + + virtual sal_uInt32 GetSnapPointCount() const; + virtual Point GetSnapPoint(sal_uInt32 i) const; + +protected: + virtual SdrObjGeoData* NewGeoData() const; + virtual void SaveGeoData(SdrObjGeoData& rGeo) const; + virtual void RestGeoData(const SdrObjGeoData& rGeo); + +public: + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + + const Point& GetTailPos() const; + void SetTailPos(const Point& rPos); + void NbcSetTailPos(const Point& rPos); + + // #i32599# + // Add own implementation for TRSetBaseGeometry to handle TailPos over changes + virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon); + + inline const Point& GetFixedTailPos() const {return maFixedTailPos;} + + // geometry access + ::basegfx::B2DPolygon getTailPolygon() const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDOCAPT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdocirc.hxx b/include/svx/svdocirc.hxx new file mode 100644 index 000000000000..d613327b309b --- /dev/null +++ b/include/svx/svdocirc.hxx @@ -0,0 +1,146 @@ +/* -*- 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 _SVDOCIRC_HXX +#define _SVDOCIRC_HXX + +#include <svx/svdorect.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +namespace sdr { namespace properties { + class CircleProperties; +}} + +//************************************************************ +// Hilfsklasse SdrCircObjGeoData +//************************************************************ + +// #109872# +class SdrCircObjGeoData : public SdrTextObjGeoData +{ +public: + long nStartWink; + long nEndWink; +}; + +//************************************************************ +// SdrCircObj +//************************************************************ + +class SVX_DLLPUBLIC SdrCircObj : public SdrRectObj +{ +private: + // to allow sdr::properties::CircleProperties access to ImpSetAttrToCircInfo() + friend class sdr::properties::CircleProperties; + + // only for SdrCircleAttributes + SdrObjKind GetCircleKind() const { return meCircleKind; } + +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + + SdrObjKind meCircleKind; + long nStartWink; + long nEndWink; + + // bitfield + unsigned mbPolygonIsLine : 1; + +private: + SVX_DLLPRIVATE basegfx::B2DPolygon ImpCalcXPolyCirc(const SdrObjKind eKind, const Rectangle& rRect1, long nStart, long nEnd) const; + SVX_DLLPRIVATE void ImpSetCreateParams(SdrDragStat& rStat) const; + SVX_DLLPRIVATE void ImpSetAttrToCircInfo(); // Werte vom Pool kopieren + SVX_DLLPRIVATE void ImpSetCircInfoToAttr(); // Werte in den Pool kopieren + + // Liefert sal_True, wenn das Painten ein XPolygon erfordert. + SVX_DLLPRIVATE bool PaintNeedsXPolyCirc() const; // PaintNeedsXPoly-> PaintNeedsXPolyCirc + SVX_DLLPRIVATE virtual void RecalcXPoly(); + +protected: + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + +public: + TYPEINFO(); + SdrCircObj(SdrObjKind eNewKind); // Circ, CArc, Sect oder CCut + SdrCircObj(SdrObjKind eNewKind, const Rectangle& rRect); + + // 0=0.00Deg=3h 9000=90.00Deg=12h 18000=180.00Deg=9h 27000=270.00Deg=6h + // Der Verlauf des Kreises von StartWink nach EndWink ist immer entgegen + // dem Uhrzeigersinn. + // Wenn nNewStartWink==nNewEndWink hat der Kreisbogen einen Verlaufswinkel + // von 0 Grad. Bei nNewStartWink+36000==nNewEndWink ist der Verlaufswinkel + // 360.00 Grad. + SdrCircObj(SdrObjKind eNewKind, const Rectangle& rRect, long nNewStartWink, long nNewEndWink); + virtual ~SdrCircObj(); + + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual sal_uInt16 GetObjIdentifier() const; + virtual void TakeUnrotatedSnapRect(Rectangle& rRect) const; + + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + virtual SdrCircObj* Clone() const; + virtual void RecalcSnapRect(); + virtual void NbcSetSnapRect(const Rectangle& rRect); + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + + virtual sal_uInt32 GetSnapPointCount() const; + virtual Point GetSnapPoint(sal_uInt32 i) const; + + virtual sal_uInt32 GetHdlCount() const; + virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const; + + // special drag methods + virtual bool hasSpecialDrag() const; + virtual bool beginSpecialDrag(SdrDragStat& rDrag) const; + virtual bool applySpecialDrag(SdrDragStat& rDrag); + virtual String getSpecialDragComment(const SdrDragStat& rDrag) const; + + virtual bool BegCreate(SdrDragStat& rStat); + virtual bool MovCreate(SdrDragStat& rStat); + virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); + virtual bool BckCreate(SdrDragStat& rStat); + virtual void BrkCreate(SdrDragStat& rStat); + virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const; + virtual Pointer GetCreatePointer() const; + virtual void NbcMove(const Size& aSiz); + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + virtual void NbcMirror(const Point& rRef1, const Point& rRef2); + virtual void NbcShear (const Point& rRef, long nWink, double tn, bool bVShear); + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + +protected: + virtual SdrObjGeoData* NewGeoData() const; + virtual void SaveGeoData(SdrObjGeoData& rGeo) const; + virtual void RestGeoData(const SdrObjGeoData& rGeo); +public: + long GetStartWink() const { return nStartWink; } + long GetEndWink() const { return nEndWink; } + +}; + +#endif //_SVDOCIRC_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdoedge.hxx b/include/svx/svdoedge.hxx new file mode 100644 index 000000000000..ea0968cd9487 --- /dev/null +++ b/include/svx/svdoedge.hxx @@ -0,0 +1,434 @@ +/* -*- 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 _SVDOEDGE_HXX +#define _SVDOEDGE_HXX + +#include <svx/svdotext.hxx> +#include <svx/svdglue.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class SdrDragMethod; +class SdrPageView; + +namespace sdr { namespace properties { + class ConnectorProperties; +}} + +//************************************************************ +// Hilfsklasse SdrObjConnection +//************************************************************ + +class SdrObjConnection +{ + friend class SdrEdgeObj; + friend class ImpEdgeHdl; + friend class SdrCreateView; + +protected: + Point aObjOfs; // Wird beim Draggen eines Knotens gesetzt + SdrObject* pObj; // Referenziertes Objekt + long nXDist; // Hor. Objektabstand wenn bXDistOvr=TRUE + long nYDist; // Vert. Objektabstand wenn bYDistOvr=TRUE + sal_uInt16 nConId; // Konnektornummer + + // bitfield + unsigned bBestConn : 1; // sal_True= es wird der guenstigste Konnektor gesucht + unsigned bBestVertex : 1; // sal_True= es wird der guenstigste Scheitelpunkt zum konnekten gesucht + unsigned bXDistOvr : 1; // sal_True= Hor. Objektabstand wurde gedragt (Overwrite) + unsigned bYDistOvr : 1; // sal_True= Vert. Objektabstand wurde gedragt (Overwrite) + unsigned bAutoVertex : 1; // AutoConnector am Scheitelpunkt nCon + unsigned bAutoCorner : 1; // AutoConnector am Eckpunkt nCon + +public: + SdrObjConnection() { ResetVars(); } + SVX_DLLPUBLIC ~SdrObjConnection(); + + void ResetVars(); + bool TakeGluePoint(SdrGluePoint& rGP, bool bSetAbsolutePos) const; + + inline void SetBestConnection( sal_Bool rB ) { bBestConn = rB; }; + inline void SetBestVertex( sal_Bool rB ) { bBestVertex = rB; }; + inline void SetAutoVertex( sal_Bool rB ) { bAutoVertex = rB; }; + inline void SetConnectorId( sal_uInt16 nId ) { nConId = nId; }; + + inline sal_Bool IsBestConnection() const { return bBestConn; }; + inline sal_Bool IsBestVertex() const { return bBestVertex; }; + inline sal_Bool IsAutoVertex() const { return bAutoVertex; }; + inline sal_uInt16 GetConnectorId() const { return nConId; }; + inline SdrObject* GetObject() const { return pObj; } +}; + +//************************************************************ +// Hilfsklasse SdrEdgeInfoRec +//************************************************************ + +enum SdrEdgeLineCode {OBJ1LINE2,OBJ1LINE3,OBJ2LINE2,OBJ2LINE3,MIDDLELINE}; + +class SdrEdgeInfoRec +{ +public: + // Die 5 Distanzen werden beim draggen bzw. per SetAttr gesetzt und von + // ImpCalcEdgeTrack ausgewertet. Per Get/SetAttr/Get/SetStyleSh werden + // jedoch nur 0-3 longs transportiert. + Point aObj1Line2; + Point aObj1Line3; + Point aObj2Line2; + Point aObj2Line3; + Point aMiddleLine; + + // Nachfolgende Werte werden von ImpCalcEdgeTrack gesetzt + long nAngle1; // Austrittswinkel am Obj1 + long nAngle2; // Austrittswinkel am Obj2 + sal_uInt16 nObj1Lines; // 1..3 + sal_uInt16 nObj2Lines; // 1..3 + sal_uInt16 nMiddleLine; // 0xFFFF=keine, sonst Punktnummer des Linienbeginns + char cOrthoForm; // Form des Ortho-Verbindes, z.B. 'Z','U',I','L','S',... + +public: + SdrEdgeInfoRec() + : nAngle1(0), + nAngle2(0), + nObj1Lines(0), + nObj2Lines(0), + nMiddleLine(0xFFFF), + cOrthoForm(0) + {} + + Point& ImpGetLineVersatzPoint(SdrEdgeLineCode eLineCode); + const Point& ImpGetLineVersatzPoint(SdrEdgeLineCode eLineCode) const { return ((SdrEdgeInfoRec*)this)->ImpGetLineVersatzPoint(eLineCode); } + sal_uInt16 ImpGetPolyIdx(SdrEdgeLineCode eLineCode, const XPolygon& rXP) const; + bool ImpIsHorzLine(SdrEdgeLineCode eLineCode, const XPolygon& rXP) const; + void ImpSetLineVersatz(SdrEdgeLineCode eLineCode, const XPolygon& rXP, long nVal); + long ImpGetLineVersatz(SdrEdgeLineCode eLineCode, const XPolygon& rXP) const; +}; + +//************************************************************ +// Hilfsklasse SdrEdgeObjGeoData +//************************************************************ + +class SdrEdgeObjGeoData : public SdrTextObjGeoData +{ +public: + SdrObjConnection aCon1; // Verbindungszustand des Linienanfangs + SdrObjConnection aCon2; // Verbindungszustand des Linienendes + XPolygon* pEdgeTrack; + sal_Bool bEdgeTrackDirty;// sal_True=Verbindungsverlauf muss neu berechnet werden. + sal_Bool bEdgeTrackUserDefined; + SdrEdgeInfoRec aEdgeInfo; + +public: + SdrEdgeObjGeoData(); + virtual ~SdrEdgeObjGeoData(); +}; + +//************************************************************ +// Hilfsklasse SdrEdgeObj +//************************************************************ + +class SVX_DLLPUBLIC SdrEdgeObj : public SdrTextObj +{ +private: + // to allow sdr::properties::ConnectorProperties access to ImpSetAttrToEdgeInfo() + friend class sdr::properties::ConnectorProperties; + + friend class SdrCreateView; + friend class ImpEdgeHdl; + +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + + SdrObjConnection aCon1; // Verbindungszustand des Linienanfangs + SdrObjConnection aCon2; // Verbindungszustand des Linienendes + + XPolygon* pEdgeTrack; + sal_uInt16 nNotifyingCount; // Verrieglung + SdrEdgeInfoRec aEdgeInfo; + + // bitfield + unsigned bEdgeTrackDirty : 1; // sal_True=Verbindungsverlauf muss neu berechnet werden. + unsigned bEdgeTrackUserDefined : 1; + + // #109007# + // Bool to allow supporession of default connects at object + // inside test (HitTest) and object center test (see ImpFindConnector()) + unsigned mbSuppressDefaultConnect : 1; + + // #110649# + // Flag value for avoiding death loops when calculating BoundRects + // from circularly connected connectors. A coloring algorythm is used + // here. When the GetCurrentBoundRect() calculation of a SdrEdgeObj + // is running, the flag is set, else it is always sal_False. + unsigned mbBoundRectCalculationRunning : 1; + +public: + // #109007# + // Interface to default connect suppression + void SetSuppressDefaultConnect(sal_Bool bNew) { mbSuppressDefaultConnect = bNew; } + sal_Bool GetSuppressDefaultConnect() const { return mbSuppressDefaultConnect; } + + // #110649# + sal_Bool IsBoundRectCalculationRunning() const { return mbBoundRectCalculationRunning; } + +protected: + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + + XPolygon ImpCalcObjToCenter(const Point& rStPt, long nEscAngle, const Rectangle& rRect, const Point& rCenter) const; + void ImpRecalcEdgeTrack(); // Neuberechnung des Verbindungsverlaufs + XPolygon ImpCalcEdgeTrack(const XPolygon& rTrack0, SdrObjConnection& rCon1, SdrObjConnection& rCon2, SdrEdgeInfoRec* pInfo) const; + XPolygon ImpCalcEdgeTrack(const Point& rPt1, long nAngle1, const Rectangle& rBoundRect1, const Rectangle& rBewareRect1, + const Point& rPt2, long nAngle2, const Rectangle& rBoundRect2, const Rectangle& rBewareRect2, + sal_uIntPtr* pnQuality, SdrEdgeInfoRec* pInfo) const; + static bool ImpFindConnector(const Point& rPt, const SdrPageView& rPV, SdrObjConnection& rCon, const SdrEdgeObj* pThis, OutputDevice* pOut=NULL); + sal_uInt16 ImpCalcEscAngle(SdrObject* pObj, const Point& aPt2) const; + void ImpSetTailPoint(bool bTail1, const Point& rPt); + void ImpUndirtyEdgeTrack(); // eventuelle Neuberechnung des Verbindungsverlaufs + void ImpDirtyEdgeTrack(); // invalidate connector path, so it will be recalculated next time + void ImpSetAttrToEdgeInfo(); // Werte vom Pool nach aEdgeInfo kopieren + void ImpSetEdgeInfoToAttr(); // Werte vom aEdgeInfo in den Pool kopieren + +public: + TYPEINFO(); + + SdrEdgeObj(); + virtual ~SdrEdgeObj(); + + SdrObjConnection& GetConnection(bool bTail1) { return *(bTail1 ? &aCon1 : &aCon2); } + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual sal_uInt16 GetObjIdentifier() const; + virtual const Rectangle& GetCurrentBoundRect() const; + virtual const Rectangle& GetSnapRect() const; + virtual bool IsNode() const; + virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const; + virtual SdrGluePoint GetCornerGluePoint(sal_uInt16 nNum) const; + virtual const SdrGluePointList* GetGluePointList() const; + virtual SdrGluePointList* ForceGluePointList(); + virtual bool IsEdge() const; + + // bTail1=TRUE: Linienanfang, sonst LinienEnde + // pObj=NULL: Disconnect + void SetEdgeTrackDirty() { bEdgeTrackDirty=sal_True; } + void ConnectToNode(bool bTail1, SdrObject* pObj); + void DisconnectFromNode(bool bTail1); + SdrObject* GetConnectedNode(bool bTail1) const; + const SdrObjConnection& GetConnection(bool bTail1) const { return *(bTail1 ? &aCon1 : &aCon2); } + bool CheckNodeConnection(bool bTail1) const; + + virtual void RecalcSnapRect(); + virtual void TakeUnrotatedSnapRect(Rectangle& rRect) const; + virtual SdrEdgeObj* Clone() const; + SdrEdgeObj& operator=(const SdrEdgeObj& rObj); + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + void SetEdgeTrackPath( const basegfx::B2DPolyPolygon& rPoly ); + basegfx::B2DPolyPolygon GetEdgeTrackPath() const; + + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + virtual sal_uInt32 GetHdlCount() const; + virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const; + + // special drag methods + virtual bool hasSpecialDrag() const; + virtual bool beginSpecialDrag(SdrDragStat& rDrag) const; + virtual bool applySpecialDrag(SdrDragStat& rDrag); + virtual String getSpecialDragComment(const SdrDragStat& rDrag) const; + + // FullDrag support + virtual SdrObject* getFullDragClone() const; + + virtual void NbcSetSnapRect(const Rectangle& rRect); + virtual void NbcMove(const Size& aSize); + virtual void NbcResize(const Point& rRefPnt, const Fraction& aXFact, const Fraction& aYFact); + + // #i54102# added rotate, mirrorn and shear support + virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs); + virtual void NbcMirror(const Point& rRef1, const Point& rRef2); + virtual void NbcShear(const Point& rRef, long nWink, double tn, bool bVShear); + + // #102344# Added missing implementation + virtual void NbcSetAnchorPos(const Point& rPnt); + + virtual bool BegCreate(SdrDragStat& rStat); + virtual bool MovCreate(SdrDragStat& rStat); + virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); + virtual bool BckCreate(SdrDragStat& rStat); + virtual void BrkCreate(SdrDragStat& rStat); + virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const; + virtual Pointer GetCreatePointer() const; + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + + virtual sal_uInt32 GetSnapPointCount() const; + virtual Point GetSnapPoint(sal_uInt32 i) const; + virtual sal_Bool IsPolyObj() const; + virtual sal_uInt32 GetPointCount() const; + virtual Point GetPoint(sal_uInt32 i) const; + virtual void NbcSetPoint(const Point& rPnt, sal_uInt32 i); + + virtual SdrObjGeoData* NewGeoData() const; + virtual void SaveGeoData(SdrObjGeoData& rGeo) const; + virtual void RestGeoData(const SdrObjGeoData& rGeo); + + /** updates edges that are connected to the edges of this object + as if the connected objects send a repaint broadcast + #103122# + */ + void Reformat(); + + // helper methods for the StarOffice api + Point GetTailPoint( sal_Bool bTail ) const; + void SetTailPoint( sal_Bool bTail, const Point& rPt ); + void setGluePointIndex( sal_Bool bTail, sal_Int32 nId = -1 ); + sal_Int32 getGluePointIndex( sal_Bool bTail ); + + virtual sal_Bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const; + virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon); + + // for geometry access + ::basegfx::B2DPolygon getEdgeTrack() const; + + // helper method for SdrDragMethod::AddConnectorOverlays. Adds a overlay polygon for + // this connector to rResult. + basegfx::B2DPolygon ImplAddConnectorOverlay(SdrDragMethod& rDragMethod, bool bTail1, bool bTail2, bool bDetail) const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Zur Bestimmung der Verlaufslinie werden folgende Item-Parameter des SdrItemPool verwendet: +// +// sal_uInt16 EdgeFlowAngle Default 9000 (=90.00 Deg), min 0, max 9000 +// Verlauffreiheitswinkel. +// Der Winkel, in dem die Verbindungslinie verlaufen darf. +// +// sal_uInt16 EdgeEscAngle Default 9000 (=90.00 Deg), min 0, max 9000 +// Objektaustrittswinkel. +// Der Winkel, in dem die Verbindungslinie aus dem Objekt austreten darf. +// +// sal_Bool EdgeEscAsRay Default FALSE +// sal_True= die Verbindungslinie tritt aus dem Obj Strahlenfoermig aus. +// Also Winkelvorgabe durch die Strecke ObjMitte/Konnektor. +// +// sal_Bool EdgeEscUseObjAngle Default FALSE +// Objektdrehwinkelberuecksichtigung. +// sal_True= Bei der Bestimmung des Objektaustrittswinkels wird der +// Drehwinkel des Objekts als Offset beruecksichtigt. +// +// sal_uIntPtr EdgeFlowDefDist Default 0, min 0, max ? +// Das ist der Default-Mindestabstand der bei der Berechnung der +// Verbindungslinie zu den angedockten Objekten in logischen Einheiten. +// Dieser Abstand wird innerhalb des Objektes "ueberschrieben", sobald +// der User an den Linien draggd. Beim Andocken an ein neues Objekt wird +// dann jedoch wieder dieser Default verwendet. +// +// +// Allgemeines zu Konnektoren: +// +// Es gibt Knoten und Kantenobjekte. Zwei Knoten koennen durch eine Kante +// miteinander verbunden werden. Ist eine Kante nur an einem Ende an einen +// Knoten geklebt, ist das andere Ende auf einer absoluten Position im Doc +// fixiert. Ebenso ist es natuerlich auch moeglich, dass eine Kante an beiden +// Enden "frei", also nicht mit einem Knotenobjekt verbunden ist. +// +// Ein Kantenobjekt kann theoretisch auch gleichzeitig Knotenobjekt sein. In +// der ersten Version wird das jedoch noch nicht realisiert werden. +// +// Eine Verbindung zwischen Knoten und Kante kann hergestellt werden durch: +// - Interaktives erzeugen eines neuen Kantenobjekts an der SdrView wobei +// Anfangs- bzw. Endpunkt der Kante auf ein Konnektor (Klebestelle) eines +// bereits vorhandenen Knotenobjekts gelegt wird. +// - Interaktives draggen des Anfangs- bzw. Endpunkts eines bestehenden +// Kantenobjekts an der SdrView auf ein Konnektor (Klebestelle) eines +// bereits vorhandenen Knotenobjekts. +// - Undo/Redo +// Verschieben von Knotenobjekten stellt keine Verbindungen her. Ebenso auch +// nicht das direkte Verschieben von Kantenendpunkten am SdrModel... +// Verbindungen koennen auch hergestellt werden, wenn die Konnektoren an der +// View nicht sichtbar geschaltet sind. +// +// Eine vorhandene Verbindung zwischen Knoten und Kante bleibt erhalten bei: +// - Draggen (Move/Resize/Rotate/...) des Knotenobjekts +// - Verschieben einer Konnektorposition im Knotemobjekt +// - gleichzeitiges Draggen (Move/Resize/Rotate/...) von Knoten und Kante +// +// Eine Verbindung zwischen Knoten und Kante kann geloesst werden durch: +// - Loeschen eines der Objekte +// - Draggen des Kantenobjekts ohne gleichzeitiges Draggen des Knotens +// - Loeschen des Konnektors am Knotenobjekt +// - Undo/Redo/Repeat +// Beim Draggen muss die Aufforderung zum loesen der Verbindung von ausserhalb +// des Models befohlen werden (z.B. von der SdrView). SdrEdgeObj::Move() loesst +// die Verbindung nicht selbsttaetig. +// +// Jedes Knotenobjekt kann Konnektoren, sog. Klebestellen besitzen. Das sind die +// geometrischen Punkte, an denen das verbindende Kantenobjekt bei hergestellter +// Verbindung endet. Defaultmaessig hat jedes Objekt keine Konnektoren. Trotzdem +// kann man bei bestimmten View-Einstellungen eine Kante andocken, da dann z.B. +// an den 4 Scheitelpunkten des Knotenobjekts bei Bedarf automatisch Konnektoren +// generiert werden. Jedes Objekt liefert dafuer 2x4 sog. Default-Konnektorposi- +// tionen, 4 an den Scheitelpunkten und 4 an den Eckpositionen. Im Normalfall +// liegen diese an den 8 Handlepositionen; Ausnahmen bilden hier Ellipsen, +// Parallelogramme, ... . Darueberhinaus koennen auch an jedem Knotenobjekt +// anwenderspeziefische Konnektoren gesetzt werden. +// +// Dann gibt es noch die Moeglichkeit, ein Kante an einem Objekt mit dem +// Attribut "bUseBestConnector" anzudocken. Es wird dann aus dem Angebot der +// Konnektoren des Objekts oder/und der Scheitelpunkte, jeweils die fuer den +// Verlauf der Verbindungslinie guenstigste Konnektorposition verwendet. Der +// Anwender vergibt dieses Attribut, indem er den Knoten in seiner Mitte +// andockt (siehe z.B. Visio). +// 09-06-1996: bUseBestConnector verwendet nur Scheitelpunktklebepunkte. +// +// Und hier noch etwas Begriffsdefinition: +// Verbinder : Eben das Verbinderobjekt (Kantenobjekt) +// Knoten : Ein beliebiges Objekt, an dem ein Verbinder drangeklebt +// werden kann, z.B. ein Rechteck, ... +// Klebepunkt: Der Punkt, an dem der Verbinder an das Knotenobjekt +// geklebt wird. Hierbei gibt es: +// Scheitelpunktklebepunkte: Jedes Knotenobjekt hat diese +// Klebepunkte von Natur aus. Moeglicherweise gibt es +// im Draw bereits die Option "Automatisch ankleben an +// Objektscheitelpunkte" (default an) +// Eckpunktklebepunkte: Auch diese Klebepunkte sind den +// Objekten von mir bereits mitgegeben. Wie die oben +// erwaehnten gibt es fuer diese moeglicherweise +// bereits auch eine Option im Draw. (default aus) +// Scheitelpunktklebepunkte und Eckpunktklebepunkte sind +// im Gegensatz zu Visio nicht optisch sichtbar; sie +// sind eben einfach da (wenn Option eingeschaltet). +// Benutzerdefinierte Klebepunkte: Gibt es an jedem +// Knotenobjekt beliebig viele. Per Option koennen sie +// sichtbar geschaltet werden (beim editieren immer +// sichtbar). Zur Zeit sind die jedoch noch nicht ganz +// fertigimplementiert. +// Automatische Klebepunktwahl: Wird der Verbinder so an +// das Knotenobjekt gedockt, dass der schwarke Rahmen +// das gesamte Objekt umfasst, so versucht der +// Verbinder von den 4 Scheitelpunktklebepunkten (und +// zwar nur von denen) den guenstigsten herauszufinden. +// +////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDOEDGE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdograf.hxx b/include/svx/svdograf.hxx new file mode 100644 index 000000000000..036a83e6144a --- /dev/null +++ b/include/svx/svdograf.hxx @@ -0,0 +1,203 @@ +/* -*- 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 _SVDOGRAF_HXX +#define _SVDOGRAF_HXX + +#include <com/sun/star/io/XInputStream.hpp> +#include <vcl/graph.hxx> +#include <svx/svdorect.hxx> +#include <svtools/grfmgr.hxx> +#include "svx/svxdllapi.h" + +namespace sdr +{ + namespace properties + { + class GraphicProperties; + } // end of namespace properties + namespace contact + { + class ViewObjectContactOfGraphic; + } // end of namespace contact +} // end of namespace sdr + +#define SDRGRAFOBJ_TRANSFORMATTR_NONE 0x00000000UL +#define SDRGRAFOBJ_TRANSFORMATTR_COLOR 0x00000001UL +#define SDRGRAFOBJ_TRANSFORMATTR_MIRROR 0x00000002UL +#define SDRGRAFOBJ_TRANSFORMATTR_ROTATE 0x00000004UL +#define SDRGRAFOBJ_TRANSFORMATTR_ALL 0xffffffffUL + +class SdrGrafObjGeoData : public SdrTextObjGeoData +{ +public: + sal_Bool bMirrored; + + SdrGrafObjGeoData() + : bMirrored(false) + { + } +}; + +class GraphicObject; +class SdrGraphicLink; + +/** + * This class represents an embedded or linked bitmap graphic object. + */ +class SVX_DLLPUBLIC SdrGrafObj : public SdrRectObj +{ +private: + // to allow sdr::properties::GraphicProperties access to SetXPolyDirty() + friend class sdr::properties::GraphicProperties; + + // to allow sdr::contact::ViewObjectContactOfGraphic access to ImpUpdateGraphicLink() + friend class sdr::contact::ViewObjectContactOfGraphic; + friend class SdrGraphicLink; + +private: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + + void ImpSetAttrToGrafInfo(); // Werte vom Pool kopieren + GraphicAttr aGrafInfo; + + OUString aFileName; // Wenn es sich um einen Link handelt, steht hier der Dateiname drin. + OUString aFilterName; + GraphicObject* pGraphic; // Zur Beschleunigung von Bitmapausgaben, besonders von gedrehten. + GraphicObject* mpReplacementGraphic; + SdrGraphicLink* pGraphicLink; // Und hier noch ein Pointer fuer gelinkte Grafiken + bool bMirrored:1; // True bedeutet, die Grafik ist horizontal, d.h. ueber die Y-Achse gespiegelt auszugeben. + + // #111096# + // Flag for allowing text animation. Default is sal_true. + bool mbGrafAnimationAllowed:1; + + // #i25616# + bool mbInsidePaint:1; + bool mbIsPreview:1; + +private: + + void ImpLinkAnmeldung(); + void ImpLinkAbmeldung(); + bool ImpUpdateGraphicLink( bool bAsynchron = true ) const; + void ImpSetLinkedGraphic( const Graphic& rGraphic ); + DECL_LINK( ImpSwapHdl, GraphicObject* ); + void onGraphicChanged(); + +public: + TYPEINFO(); + + SdrGrafObj(); + SdrGrafObj(const Graphic& rGrf); + SdrGrafObj(const Graphic& rGrf, const Rectangle& rRect); + virtual ~SdrGrafObj(); + + void SetGraphicObject( const GraphicObject& rGrfObj ); + const GraphicObject& GetGraphicObject(bool bForceSwapIn = false) const; + const GraphicObject* GetReplacementGraphicObject() const; + + void NbcSetGraphic(const Graphic& rGrf); + void SetGraphic(const Graphic& rGrf); + const Graphic& GetGraphic() const; + + Graphic GetTransformedGraphic( sal_uIntPtr nTransformFlags = SDRGRAFOBJ_TRANSFORMATTR_ALL ) const; + + GraphicType GetGraphicType() const; + + // #111096# + // Keep ATM for SD. + bool IsAnimated() const; + bool IsEPS() const; + bool IsSwappedOut() const; + + const MapMode& GetGrafPrefMapMode() const; + const Size& GetGrafPrefSize() const; + + void SetGrafStreamURL( const String& rGraphicStreamURL ); + String GetGrafStreamURL() const; + + void ForceSwapIn() const; + void ForceSwapOut() const; + + void SetGraphicLink(const OUString& rFileName, const String& rFilterName); + void ReleaseGraphicLink(); + bool IsLinkedGraphic() const; + + const OUString& GetFileName() const; + const OUString& GetFilterName() const; + + void StartAnimation(OutputDevice* pOutDev, const Point& rPoint, const Size& rSize, long nExtraData=0L); + + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual sal_uInt16 GetObjIdentifier() const; + + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + // #i25616# + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + + virtual SdrGrafObj* Clone() const; + SdrGrafObj& operator=(const SdrGrafObj& rObj); + + virtual sal_uInt32 GetHdlCount() const; + virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const; + + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs); + virtual void NbcMirror(const Point& rRef1, const Point& rRef2); + virtual void NbcShear (const Point& rRef, long nWink, double tn, bool bVShear); + virtual void NbcSetSnapRect(const Rectangle& rRect); + virtual void NbcSetLogicRect(const Rectangle& rRect); + virtual SdrObjGeoData* NewGeoData() const; + virtual void SaveGeoData(SdrObjGeoData& rGeo) const; + virtual void RestGeoData(const SdrObjGeoData& rGeo); + + bool HasGDIMetaFile() const; + + virtual void SetPage(SdrPage* pNewPage); + virtual void SetModel(SdrModel* pNewModel); + + bool isEmbeddedSvg() const; + GDIMetaFile getMetafileFromEmbeddedSvg() const; + + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + + virtual void AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly = false ); + + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + bool IsMirrored() const; + void SetMirrored( bool _bMirrored ); + + // #111096# + // Access to GrafAnimationAllowed flag + void SetGrafAnimationAllowed(bool bNew); + + ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > getInputStream(); + + // #i103116# FullDrag support + virtual SdrObject* getFullDragClone() const; +}; + +#endif //_SVDOGRAF_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdogrp.hxx b/include/svx/svdogrp.hxx new file mode 100644 index 000000000000..57842579b54e --- /dev/null +++ b/include/svx/svdogrp.hxx @@ -0,0 +1,118 @@ +/* -*- 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 _SVDOGRP_HXX +#define _SVDOGRP_HXX + +#include <svx/svdobj.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class SdrObjList; +class SdrObjListIter; +class SfxItemSet; + +//************************************************************ +// SdrObjGroup +//************************************************************ + +class SVX_DLLPUBLIC SdrObjGroup : public SdrObject +{ +private: +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + + SdrObjList* pSub; // Subliste (Kinder) + long nDrehWink; + long nShearWink; + + Point aRefPoint; // Referenzpunkt innerhalb der Objektgruppe + bool bRefPoint; // Ist ein RefPoint gesetzt? + +public: + TYPEINFO(); + SdrObjGroup(); + virtual ~SdrObjGroup(); + + virtual void SetBoundRectDirty(); + virtual sal_uInt16 GetObjIdentifier() const; + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual SdrLayerID GetLayer() const; + virtual void NbcSetLayer(SdrLayerID nLayer); + virtual void SetObjList(SdrObjList* pNewObjList); + virtual void SetPage(SdrPage* pNewPage); + virtual void SetModel(SdrModel* pNewModel); + virtual bool HasRefPoint() const; + virtual Point GetRefPoint() const; + virtual void SetRefPoint(const Point& rPnt); + virtual SdrObjList* GetSubList() const; + + virtual const Rectangle& GetCurrentBoundRect() const; + virtual const Rectangle& GetSnapRect() const; + + virtual SdrObjGroup* Clone() const; + SdrObjGroup& operator=(const SdrObjGroup& rObj); + + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + virtual void RecalcSnapRect(); + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + + // special drag methods + virtual bool beginSpecialDrag(SdrDragStat& rDrag) const; + + virtual bool BegCreate(SdrDragStat& rStat); + + virtual long GetRotateAngle() const; + virtual long GetShearAngle(bool bVertical = false) const; + + virtual void Move(const Size& rSiz); + virtual void Resize(const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bUnsetRelative = true); + virtual void Rotate(const Point& rRef, long nWink, double sn, double cs); + virtual void Mirror(const Point& rRef1, const Point& rRef2); + virtual void Shear(const Point& rRef, long nWink, double tn, bool bVShear); + virtual void SetAnchorPos(const Point& rPnt); + virtual void SetRelativePos(const Point& rPnt); + virtual void SetSnapRect(const Rectangle& rRect); + virtual void SetLogicRect(const Rectangle& rRect); + + virtual void NbcMove(const Size& rSiz); + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs); + virtual void NbcMirror(const Point& rRef1, const Point& rRef2); + virtual void NbcShear(const Point& rRef, long nWink, double tn, bool bVShear); + virtual void NbcSetAnchorPos(const Point& rPnt); + virtual void NbcSetRelativePos(const Point& rPnt); + virtual void NbcSetSnapRect(const Rectangle& rRect); + virtual void NbcSetLogicRect(const Rectangle& rRect); + + virtual void NbcReformatText(); + virtual void ReformatText(); + + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; +}; + +#endif //_SVDOGRP_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdomeas.hxx b/include/svx/svdomeas.hxx new file mode 100644 index 000000000000..439ceb25682d --- /dev/null +++ b/include/svx/svdomeas.hxx @@ -0,0 +1,210 @@ +/* -*- 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 _SVDOMEAS_HXX +#define _SVDOMEAS_HXX + +#include <svx/svdotext.hxx> +#include "svx/svxdllapi.h" +#include <editeng/measfld.hxx> + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class SdrOutliner; +struct ImpMeasureRec; +struct ImpMeasurePoly; + +namespace sdr { namespace properties { + class MeasureProperties; +}} + +//************************************************************ +// Hilfsklasse SdrMeasureObjGeoData +//************************************************************ + +class SdrMeasureObjGeoData : public SdrTextObjGeoData +{ +public: + Point aPt1; + Point aPt2; + +public: + SdrMeasureObjGeoData(); + virtual ~SdrMeasureObjGeoData(); +}; + +//************************************************************ +// SdrMeasureObj +//************************************************************ + +class SVX_DLLPUBLIC SdrMeasureObj : public SdrTextObj +{ +private: + // to allow sdr::properties::MeasureProperties access to SetTextDirty() + friend class sdr::properties::MeasureProperties; + + friend class SdrMeasureField; + +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + + Point aPt1; + Point aPt2; + bool bTextDirty; + +protected: + void ImpTakeAttr(ImpMeasureRec& rRec) const; + void TakeRepresentation( XubString& rStr, SdrMeasureFieldKind eMeasureFieldKind ) const; + void ImpCalcGeometrics(const ImpMeasureRec& rRec, ImpMeasurePoly& rPol) const; + basegfx::B2DPolyPolygon ImpCalcXPoly(const ImpMeasurePoly& rPol) const; + void ImpEvalDrag(ImpMeasureRec& rRec, const SdrDragStat& rDrag) const; + void SetTextDirty() { bTextDirty=sal_True; SetTextSizeDirty(); if (!aOutRect.IsEmpty()) { SetBoundRectDirty(); SetRectsDirty(sal_True); } } + void UndirtyText() const; + + virtual SdrObjGeoData* NewGeoData() const; + virtual void SaveGeoData(SdrObjGeoData& rGeo) const; + virtual void RestGeoData(const SdrObjGeoData& rGeo); + +public: + TYPEINFO(); + SdrMeasureObj(); + SdrMeasureObj(const Point& rPt1, const Point& rPt2); + virtual ~SdrMeasureObj(); + + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual sal_uInt16 GetObjIdentifier() const; + virtual void TakeUnrotatedSnapRect(Rectangle& rRect) const; + virtual SdrMeasureObj* Clone() const; + + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + virtual sal_uInt32 GetHdlCount() const; + virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const; + + // special drag methods + virtual bool hasSpecialDrag() const; + virtual bool beginSpecialDrag(SdrDragStat& rDrag) const; + virtual bool applySpecialDrag(SdrDragStat& rDrag); + virtual String getSpecialDragComment(const SdrDragStat& rDrag) const; + + virtual bool BegCreate(SdrDragStat& rStat); + virtual bool MovCreate(SdrDragStat& rStat); + virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); + virtual bool BckCreate(SdrDragStat& rStat); + virtual void BrkCreate(SdrDragStat& rStat); + virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const; + virtual Pointer GetCreatePointer() const; + + virtual void NbcMove(const Size& rSiz); + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs); + virtual void NbcMirror(const Point& rRef1, const Point& rRef2); + virtual void NbcShear(const Point& rRef, long nWink, double tn, bool bVShear); + virtual long GetRotateAngle() const; + virtual void RecalcSnapRect(); + + virtual sal_uInt32 GetSnapPointCount() const; + virtual Point GetSnapPoint(sal_uInt32 i) const; + + virtual sal_Bool IsPolyObj() const; + virtual sal_uInt32 GetPointCount() const; + virtual Point GetPoint(sal_uInt32 i) const; + virtual void NbcSetPoint(const Point& rPnt, sal_uInt32 i); + + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + + virtual sal_Bool BegTextEdit(SdrOutliner& rOutl); + virtual const Size& GetTextSize() const; + virtual void TakeTextRect( SdrOutliner& rOutliner, Rectangle& rTextRect, bool bNoEditText = false, + Rectangle* pAnchorRect=NULL, bool bLineWidth = true ) const; + virtual void TakeTextAnchorRect(Rectangle& rAnchorRect) const; + virtual void TakeTextEditArea(Size* pPaperMin, Size* pPaperMax, Rectangle* pViewInit, Rectangle* pViewMin) const; + virtual sal_uInt16 GetOutlinerViewAnchorMode() const; + virtual void NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject); + virtual OutlinerParaObject* GetOutlinerParaObject() const; + + virtual bool CalcFieldValue(const SvxFieldItem& rField, sal_uInt16 nPara, sal_uInt16 nPos, + bool bEdit, Color*& rpTxtColor, Color*& rpFldColor, String& rRet) const; + + // #i97878# + virtual sal_Bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const; + virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon); +}; + +///////////////////////////////////////////////////////////////////////////////////////////////// +// +// Creating: +// ~~~~~~~~~ +// Dragging von Bezugspunkt 1 zu Bezugspunkt 2 -> Bezugskante +// +// Die Defaults: +// ~~~~~~~~~~~~~ +// Masslinie und Masshilfslinien: Haarlinien solid schwarz +// Pfeile: 2mm x 4mm +// Textgroesse +// ___ +// | Masszahl | 2mm +// |<--------------------->|--- +// | | 8mm +// | | +// Pt1============# Pt2-- <----Bezugskante (von Pt1 nach Pt2) +// # # |___ <- Ueberstand der Masshilfslinie(n) +// # #=========# +// # Zu bemassendes Objekt # +// #=======================# +// +// Attribute: +// ~~~~~~~~~~ +// 1. Wo steht der Text: mitte, rechts oder links (def=automatik) +// 2. Text oberhalb der Linie oder unterhalb oder Linie unterbrochen durch Text (def=automatik) +// 3. Den Abstand der Masslinie zur Bezugskante (=zum bemassten Objekt). +// Default=8mm +// 4. Masslinie unterhalb der Bezugskante (default=nein) +// 5. Die Ueberlaenge(n) der Masshilfslinien ueber die Bezugskante (2x, default=0) +// 6. Den Ueberhang der Masshilfslinien ueber die Masslinie (default=2mm) +// 7. Den Abstand der Masshilfslinien zur Bezugskante +// +// Dragging: Handle Shift +// ~~~~~~~~~ +// - Die Bezugspunkte SolidQuadHdl nur die Laenge +// 1.+2. Anpacken des Textes +// 3.+4. Hdl am Pfeil (2x) SolidQuadHdl nur den Bool +// 5. Hdl am Endpunkt CircHdl beide Laengen? +// 6.+7. Kein Dragging +// +// Offen: +// ~~~~~~ +// - Radien (gleich als Typ verankern +// +// Special: +// ~~~~~~~~ +// Connecting an max. 2 Objekte +// -> Bei Copy, etc. den entspr. Code der Verbinder verwenden?!? +// wird wohl recht kompliziert werden ... +// +///////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDOMEAS_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdomedia.hxx b/include/svx/svdomedia.hxx new file mode 100644 index 000000000000..48a29cb029f7 --- /dev/null +++ b/include/svx/svdomedia.hxx @@ -0,0 +1,88 @@ +/* -*- 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 SVDOMEDIA_HXX +#define SVDOMEDIA_HXX + +#include <svx/svdorect.hxx> +#include <avmedia/mediaitem.hxx> +#include "svx/svxdllapi.h" + +class Graphic; + +namespace sdr { namespace contact { class ViewContactOfSdrMediaObj; } } + +// --------------- +// - SdrMediaObj - +// --------------- + +class SVX_DLLPUBLIC SdrMediaObj : public SdrRectObj +{ + friend class ::sdr::contact::ViewContactOfSdrMediaObj; + +public: + + TYPEINFO(); + + SdrMediaObj(); + SdrMediaObj( const Rectangle& rRect ); + + virtual ~SdrMediaObj(); + + virtual bool HasTextEdit() const; + + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual sal_uInt16 GetObjIdentifier() const; + + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + virtual SdrMediaObj* Clone() const; + SdrMediaObj& operator=(const SdrMediaObj& rObj); + + virtual void AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly = false ); + +public: + + void setURL( const OUString& rURL ); + const OUString& getURL() const; + + void setMediaProperties( const ::avmedia::MediaItem& rState ); + const ::avmedia::MediaItem& getMediaProperties() const; + + Size getPreferredSize() const; + + ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic > + getSnapshot(); + ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream> + GetInputStream(); + +protected: + + virtual void mediaPropertiesChanged( const ::avmedia::MediaItem& rNewState ); + virtual ::sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + +private: + struct Impl; + ::boost::scoped_ptr<Impl> m_pImpl; +}; + +#endif // SVDOMEDIA_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdoole2.hxx b/include/svx/svdoole2.hxx new file mode 100644 index 000000000000..ee5542c90def --- /dev/null +++ b/include/svx/svdoole2.hxx @@ -0,0 +1,195 @@ +/* -*- 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 _SVDOOLE2_HXX +#define _SVDOOLE2_HXX + +#include <svtools/embedhlp.hxx> +#include <com/sun/star/uno/Reference.h> +#include <com/sun/star/frame/XModel.hpp> +#include <com/sun/star/datatransfer/XTransferable.hpp> +#include "com/sun/star/awt/XWindow.hpp" +#include <svx/svdorect.hxx> +#include <vcl/graph.hxx> +#include <vcl/gdimtf.hxx> +#include <sot/storage.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// SdrOle2Obj +//************************************************************ + +class SvxUnoShapeModifyListener; +class SdrOle2ObjImpl; + +class SVX_DLLPUBLIC SdrOle2Obj : public SdrRectObj +{ +private: + + SVX_DLLPRIVATE void Connect_Impl(); + SVX_DLLPRIVATE void Disconnect_Impl(); + SVX_DLLPRIVATE void Reconnect_Impl(); + SVX_DLLPRIVATE void AddListeners_Impl(); + SVX_DLLPRIVATE void RemoveListeners_Impl(); + SVX_DLLPRIVATE ::com::sun::star::uno::Reference < ::com::sun::star::datatransfer::XTransferable > GetTransferable_Impl() const; + SVX_DLLPRIVATE void GetObjRef_Impl(); + SVX_DLLPRIVATE void SetGraphic_Impl(const Graphic* pGrf); + + // #i118485# helper added + SdrObject* createSdrGrafObjReplacement(bool bAddText, bool bUseHCGraphic) const; + +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + + svt::EmbeddedObjectRef xObjRef; + Graphic* pGraphic; + String aProgName; + + // wg. Kompatibilitaet erstmal am SdrTextObj + bool bFrame:1; + bool bInDestruction:1; + // #i118524# + bool mbSuppressSetVisAreaSize:1; + mutable bool m_bTypeAsked:1; + mutable bool m_bChart:1; + + SdrOle2ObjImpl* mpImpl; + + SvxUnoShapeModifyListener* pModifyListener; + +protected: + + void ImpSetVisAreaSize(); + void Init(); + +public: + TYPEINFO(); + + SdrOle2Obj(bool bFrame_ = false); + SdrOle2Obj(const svt::EmbeddedObjectRef& rNewObjRef, const String& rNewObjName, const Rectangle& rNewRect, bool bFrame_ = false); + virtual ~SdrOle2Obj(); + + // access to svt::EmbeddedObjectRef + const svt::EmbeddedObjectRef& getEmbeddedObjectRef() const { return xObjRef; } + + sal_Int64 GetAspect() const { return xObjRef.GetViewAspect(); } + bool isInplaceActive() const; + bool isUiActive() const; + void SetAspect( sal_Int64 nAspect ); + + // Ein OLE-Zeichenobjekt kann eine StarView-Grafik beinhalten. + // Diese wird angezeigt, wenn das OLE-Objekt leer ist. + void SetGraphic(const Graphic* pGrf); + const Graphic* GetGraphic() const; + void GetNewReplacement(); + + // the original size of the object ( size of the icon for iconified object ) + // no conversion is done if no target mode is provided + Size GetOrigObjSize( MapMode* pTargetMapMode = NULL ) const; + + // #i118524# Allow suppress SetVisAreaSize in changing methods when call + // comes from OLE client + void setSuppressSetVisAreaSize(bool bNew) { mbSuppressSetVisAreaSize = bNew; } + + // OLE object has got a separate PersistName member now; + // !!! use ::SetPersistName( ... ) only, if you know what you do !!! + String GetPersistName() const; + void SetPersistName( const String& rPersistName ); + + // Einem SdrOle2Obj kann man ein Applikationsnamen verpassen, den man + // spaeter wieder abfragen kann (SD braucht das fuer Praesentationsobjekte). + void SetProgName(const String& rNam) { aProgName=rNam; } + const String& GetProgName() const { return aProgName; } + bool IsEmpty() const; + + void SetObjRef(const com::sun::star::uno::Reference < com::sun::star::embed::XEmbeddedObject >& rNewObjRef); + com::sun::star::uno::Reference < com::sun::star::embed::XEmbeddedObject > GetObjRef() const; + + SVX_DLLPRIVATE com::sun::star::uno::Reference < com::sun::star::embed::XEmbeddedObject > GetObjRef_NoInit() const; + + void AbandonObject(); + + virtual void SetPage(SdrPage* pNewPage); + virtual void SetModel(SdrModel* pModel); + + /** Change the IsClosedObj attribute + + @param bIsClosed + Whether the OLE object is closed, i.e. has opaque background + */ + void SetClosedObj( bool bIsClosed ); + + // FullDrag support + virtual SdrObject* getFullDragClone() const; + + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual sal_uInt16 GetObjIdentifier() const; + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + SdrOle2Obj* Clone() const; + SdrOle2Obj& operator=(const SdrOle2Obj& rObj); + + virtual void NbcMove(const Size& rSize); + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + virtual void NbcSetSnapRect(const Rectangle& rRect); + virtual void NbcSetLogicRect(const Rectangle& rRect); + virtual void SetGeoData(const SdrObjGeoData& rGeo); + + static sal_Bool CanUnloadRunningObj( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XEmbeddedObject >& xObj, + sal_Int64 nAspect ); + static sal_Bool Unload( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XEmbeddedObject >& xObj, sal_Int64 nAspect ); + sal_Bool Unload(); + void Connect(); + void Disconnect(); + void ObjectLoaded(); + + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > getXModel() const; + + // #109985# + sal_Bool IsChart() const; + sal_Bool IsCalc() const; + + sal_Bool UpdateLinkURL_Impl(); + void BreakFileLink_Impl(); + void DisconnectFileLink_Impl(); + void CheckFileLink_Impl(); + + // allows to transfer the graphics to the object helper + void SetGraphicToObj( const Graphic& aGraphic, const OUString& aMediaType ); + void SetGraphicToObj( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xGrStream, + const OUString& aMediaType ); + + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > GetParentXModel() const; + sal_Bool CalculateNewScaling( Fraction& aScaleWidth, Fraction& aScaleHeight, Size& aObjAreaSize ); + sal_Bool AddOwnLightClient(); + + // handy to get the empty replacement bitmap without accessing all the old stuff + static Bitmap GetEmtyOLEReplacementBitmap(); + + void SetWindow(const com::sun::star::uno::Reference < com::sun::star::awt::XWindow >& _xWindow); + + // #i118485# missing converter added + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; +}; + +#endif //_SVDOOLE2_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdopage.hxx b/include/svx/svdopage.hxx new file mode 100644 index 000000000000..2109dfbf9e54 --- /dev/null +++ b/include/svx/svdopage.hxx @@ -0,0 +1,70 @@ +/* -*- 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 _SVDOPAGE_HXX +#define _SVDOPAGE_HXX + +#include <svx/svdobj.hxx> +#include <svx/sdrpageuser.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC SdrPageObj : public SdrObject, public sdr::PageUser +{ +public: + // this method is called form the destructor of the referenced page. + // do all necessary action to forget the page. It is not necessary to call + // RemovePageUser(), that is done form the destructor. + virtual void PageInDestruction(const SdrPage& rPage); + +private: + // #111111# + // To make things more safe, remember the page, not a number + SdrPage* mpShownPage; + +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + +public: + TYPEINFO(); + SdrPageObj(SdrPage* pNewPage = 0L); + SdrPageObj(const Rectangle& rRect, SdrPage* pNewPage = 0L); + ~SdrPageObj(); + + // #111111# + SdrPage* GetReferencedPage() const; + void SetReferencedPage(SdrPage* pNewPage); + + // #i96598# + virtual void SetBoundRectDirty(); + + virtual sal_uInt16 GetObjIdentifier() const; + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual SdrPageObj* Clone() const; + SdrPageObj& operator=(const SdrPageObj& rObj); + + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDOPAGE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdopath.hxx b/include/svx/svdopath.hxx new file mode 100644 index 000000000000..61f3c90720a8 --- /dev/null +++ b/include/svx/svdopath.hxx @@ -0,0 +1,193 @@ +/* -*- 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 _SVDOPATH_HXX +#define _SVDOPATH_HXX + +#include <svx/svdotext.hxx> +#include <svx/xpoly.hxx> +#include "svx/svxdllapi.h" +#include <basegfx/vector/b2enums.hxx> + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class ImpPathForDragAndCreate; + +//************************************************************ +// Hilfsklasse SdrPathObjGeoData +// +// fuer Undo/Redo +// +//************************************************************ + +class SdrPathObjGeoData : public SdrTextObjGeoData +{ +public: + basegfx::B2DPolyPolygon maPathPolygon; + SdrObjKind meKind; + + SdrPathObjGeoData(); + virtual ~SdrPathObjGeoData(); +}; + +//************************************************************ +// SdrPathObj +//************************************************************ + +class SVX_DLLPUBLIC SdrPathObj : public SdrTextObj +{ +private: + friend class ImpPathForDragAndCreate; + +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + + basegfx::B2DPolyPolygon maPathPolygon; + SdrObjKind meKind; + + // for isolation of old Drag/Create code + ImpPathForDragAndCreate* mpDAC; + + // brightness - used in EnhancedCustomShapes2d.cxx for DARKEN[LESS] and LIGHTEN[LESS] segments implementation + double mdBrightness; + +protected: + // Hilfsfunktion fuer GET/SET/INS/etc. PNT + void ImpSetClosed(sal_Bool bClose); + void ImpForceKind(); + void ImpForceLineWink(); + ImpPathForDragAndCreate& impGetDAC() const; + void impDeleteDAC() const; + +public: + static sal_Bool ImpFindPolyPnt(const basegfx::B2DPolyPolygon& rPoly, sal_uInt32 nAbsPnt, sal_uInt32& rPolyNum, sal_uInt32& rPointNum); + virtual void SetRectsDirty(sal_Bool bNotMyself = sal_False); + double GetBrightness() { return mdBrightness; } + +public: + TYPEINFO(); + SdrPathObj(SdrObjKind eNewKind); + SdrPathObj(SdrObjKind eNewKind, const basegfx::B2DPolyPolygon& rPathPoly, double dBrightness = 1.0); + virtual ~SdrPathObj(); + + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual sal_uInt16 GetObjIdentifier() const; + virtual void TakeUnrotatedSnapRect(Rectangle& rRect) const; + virtual SdrPathObj* Clone() const; + SdrPathObj& operator=(const SdrPathObj& rObj); + + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + virtual void RecalcSnapRect(); + virtual void NbcSetSnapRect(const Rectangle& rRect); + virtual sal_uInt32 GetHdlCount() const; + virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const; + virtual sal_uInt32 GetPlusHdlCount(const SdrHdl& rHdl) const; + virtual SdrHdl* GetPlusHdl(const SdrHdl& rHdl, sal_uInt32 nPlNum) const; + virtual void AddToHdlList(SdrHdlList& rHdlList) const; + + // special drag methods + virtual bool hasSpecialDrag() const; + virtual bool beginSpecialDrag(SdrDragStat& rDrag) const; + virtual bool applySpecialDrag(SdrDragStat& rDrag); + virtual String getSpecialDragComment(const SdrDragStat& rDrag) const; + virtual basegfx::B2DPolyPolygon getSpecialDragPoly(const SdrDragStat& rDrag) const; + + virtual bool BegCreate(SdrDragStat& rStat); + virtual bool MovCreate(SdrDragStat& rStat); + virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); + virtual bool BckCreate(SdrDragStat& rStat); + virtual void BrkCreate(SdrDragStat& rStat); + virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const; + Pointer GetCreatePointer() const; + + // during drag or create, allow accessing the so-far created/modified polyPolygon + basegfx::B2DPolyPolygon getObjectPolyPolygon(const SdrDragStat& rDrag) const; + basegfx::B2DPolyPolygon getDragPolyPolygon(const SdrDragStat& rDrag) const; + + virtual void NbcMove(const Size& aSize); + virtual void NbcResize(const Point& rRefPnt, const Fraction& aXFact, const Fraction& aYFact); + virtual void NbcRotate(const Point& rRefPnt, long nAngle, double fSin, double fCos); + virtual void NbcMirror(const Point& rRefPnt1, const Point& rRefPnt2); + virtual void NbcShear(const Point& rRefPnt, long nAngle, double fTan, bool bVShear); + + virtual sal_uInt32 GetSnapPointCount() const; + virtual Point GetSnapPoint(sal_uInt32 i) const; + + virtual sal_Bool IsPolyObj() const; + virtual sal_uInt32 GetPointCount() const; + virtual Point GetPoint(sal_uInt32 nHdlNum) const; + virtual void NbcSetPoint(const Point& rPnt, sal_uInt32 nHdlNum); + + // Punkt einfuegen + sal_uInt32 NbcInsPointOld(const Point& rPos, sal_Bool bNewObj, sal_Bool bHideHim); + sal_uInt32 NbcInsPoint(sal_uInt32 i, const Point& rPos, sal_Bool bNewObj, sal_Bool bHideHim); + + // An diesem Punkt auftrennen + SdrObject* RipPoint(sal_uInt32 nHdlNum, sal_uInt32& rNewPt0Index); + +protected: + virtual SdrObjGeoData* NewGeoData() const; + virtual void SaveGeoData(SdrObjGeoData& rGeo) const; + virtual void RestGeoData(const SdrObjGeoData& rGeo); + +public: + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + + // Bezierpolygon holen/setzen + const basegfx::B2DPolyPolygon& GetPathPoly() const { return maPathPolygon; } + void SetPathPoly(const basegfx::B2DPolyPolygon& rPathPoly); + void NbcSetPathPoly(const basegfx::B2DPolyPolygon& rPathPoly); + + // Spezialfunktionen fuer Bezierpolygon-Bearbeitung + sal_Bool IsClosed() const { return meKind==OBJ_POLY || meKind==OBJ_PATHPOLY || meKind==OBJ_PATHFILL || meKind==OBJ_FREEFILL || meKind==OBJ_SPLNFILL; } + sal_Bool IsLine() const { return meKind==OBJ_PLIN || meKind==OBJ_PATHPLIN || meKind==OBJ_PATHLINE || meKind==OBJ_FREELINE || meKind==OBJ_SPLNLINE || meKind==OBJ_LINE; } + sal_Bool IsFreeHand() const { return meKind==OBJ_FREELINE || meKind==OBJ_FREEFILL; } + sal_Bool IsBezier() const { return meKind==OBJ_PATHLINE || meKind==OBJ_PATHFILL; } + sal_Bool IsSpline() const { return meKind==OBJ_SPLNLINE || meKind==OBJ_SPLNFILL; } + + // Pfad schliessen bzw. oeffnen; im letzteren Fall den Endpunkt um + // "nOpenDistance" verschieben + void ToggleClosed(); // long nOpenDistance); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // + // transformation interface for StarOfficeAPI. This implements support for + // homogen 3x3 matrices containing the transformation of the SdrObject. At the + // moment it contains a shearX, rotation and translation, but for setting all linear + // transforms like Scale, ShearX, ShearY, Rotate and Translate are supported. + // + //////////////////////////////////////////////////////////////////////////////////////////////////// + // gets base transformation and rectangle of object. If it's an SdrPathObj it fills the PolyPolygon + // with the base geometry and returns TRUE. Otherwise it returns FALSE. + virtual sal_Bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const; + // sets the base geometry of the object using infos contained in the homogen 3x3 matrix. + // If it's an SdrPathObj it will use the provided geometry information. The Polygon has + // to use (0,0) as upper left and will be scaled to the given size in the matrix. + virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDOPATH_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdorect.hxx b/include/svx/svdorect.hxx new file mode 100644 index 000000000000..f984bb2c68ad --- /dev/null +++ b/include/svx/svdorect.hxx @@ -0,0 +1,126 @@ +/* -*- 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 _SVDORECT_HXX +#define _SVDORECT_HXX + +#include <svx/svdotext.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class XPolygon; + +namespace sdr { namespace properties { + class RectangleProperties; +}} + +//************************************************************ +// SdrRectObj +// +// Rechteck-Objekte (Rechteck,Kreis,...) +// +//************************************************************ + +class SVX_DLLPUBLIC SdrRectObj : public SdrTextObj +{ +private: + // to allow sdr::properties::RectangleProperties access to SetXPolyDirty() + friend class sdr::properties::RectangleProperties; + friend class SdrTextObj; // wg SetXPolyDirty bei GrowAdjust + +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + + XPolygon* mpXPoly; + +protected: + XPolygon ImpCalcXPoly(const Rectangle& rRect1, long nRad1) const; + void SetXPolyDirty(); + + // RecalcXPoly sollte ueberladen werden. Dabei muss dann eine XPolygon + // Instanz generiert (new) und an mpXPoly zugewiesen werden. + virtual void RecalcXPoly(); + const XPolygon& GetXPoly() const; + virtual void RestGeoData(const SdrObjGeoData& rGeo); + +public: + TYPEINFO(); + // Der Eckenradius-Parameter fliegt irgendwann raus. Der Eckenradius + // ist dann (spaeter) ueber SfxItems einzustellen (SetAttributes()). + // Konstruktion eines Rechteck-Zeichenobjekts + + SdrRectObj(); + SdrRectObj(const Rectangle& rRect); + + SdrRectObj& operator=(const SdrRectObj& rCopy); + + // Konstruktion eines Textrahmens + SdrRectObj(SdrObjKind eNewTextKind); + SdrRectObj(SdrObjKind eNewTextKind, const Rectangle& rRect); + virtual ~SdrRectObj(); + + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual sal_uInt16 GetObjIdentifier() const; + virtual void TakeUnrotatedSnapRect(Rectangle& rRect) const; + + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + virtual SdrRectObj* Clone() const; + virtual void RecalcSnapRect(); + virtual void NbcSetSnapRect(const Rectangle& rRect); + virtual void NbcSetLogicRect(const Rectangle& rRect); + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + + virtual sal_uInt32 GetHdlCount() const; + virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const; + + // special drag methods + virtual bool hasSpecialDrag() const; + virtual bool beginSpecialDrag(SdrDragStat& rDrag) const; + virtual bool applySpecialDrag(SdrDragStat& rDrag); + virtual String getSpecialDragComment(const SdrDragStat& rDrag) const; + + virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const; + virtual Pointer GetCreatePointer() const; + + virtual void NbcMove(const Size& rSiz); + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs); + virtual void NbcMirror(const Point& rRef1, const Point& rRef2); + virtual void NbcShear(const Point& rRef, long nWink, double tn, bool bVShear); + + virtual bool DoMacro(const SdrObjMacroHitRec& rRec); + virtual OUString GetMacroPopupComment(const SdrObjMacroHitRec& rRec) const; + + virtual SdrGluePoint GetVertexGluePoint(sal_uInt16 nNum) const; + virtual SdrGluePoint GetCornerGluePoint(sal_uInt16 nNum) const; + + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); +}; + +#endif //_SVDORECT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdotable.hxx b/include/svx/svdotable.hxx new file mode 100644 index 000000000000..6ec0334c2d21 --- /dev/null +++ b/include/svx/svdotable.hxx @@ -0,0 +1,326 @@ +/* -*- 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 _SVX_SVDOTABLE_HXX +#define _SVX_SVDOTABLE_HXX + +#include <com/sun/star/text/WritingMode.hpp> +#include <com/sun/star/container/XIndexAccess.hpp> +#include <com/sun/star/table/XTable.hpp> +#include <rtl/ref.hxx> +#include "svdotext.hxx" +#include "svx/svxdllapi.h" + +//------------------------------------------------------------------------ + +class SvStream; +class SfxStyleSheet; + +namespace sdr { namespace contact { + class ViewContactOfTableObj; +}} + +namespace sdr { namespace table { + +class TableLayouter; +struct ImplTableShadowPaintInfo; + +#ifndef CellRef + class Cell; + typedef rtl::Reference< Cell > CellRef; +#endif + +//------------------------------------------------------------------------ +// SdrTableHitKind +//------------------------------------------------------------------------ + +enum TableHitKind +{ + SDRTABLEHIT_NONE, + SDRTABLEHIT_CELL, + SDRTABLEHIT_CELLTEXTAREA, + SDRTABLEHIT_HORIZONTAL_BORDER, + SDRTABLEHIT_VERTICAL_BORDER +}; + +//------------------------------------------------------------------------ + +struct CellPos +{ + sal_Int32 mnCol; + sal_Int32 mnRow; + + CellPos() : mnCol( 0 ), mnRow( 0 ) {} + CellPos( sal_Int32 nCol, sal_Int32 nRow ) { mnCol = nCol; mnRow = nRow; } + + bool operator==( const CellPos& r ) const { return (r.mnCol == mnCol) && (r.mnRow == mnRow); } + bool operator!=( const CellPos& r ) const { return (r.mnCol != mnCol) || (r.mnRow != mnRow); } +}; + +//------------------------------------------------------------------------ +// TableStyleSettings +//------------------------------------------------------------------------ + +struct SVX_DLLPUBLIC TableStyleSettings +{ + bool mbUseFirstRow; + bool mbUseLastRow; + bool mbUseFirstColumn; + bool mbUseLastColumn; + bool mbUseRowBanding; + bool mbUseColumnBanding; + + TableStyleSettings(); + TableStyleSettings( const TableStyleSettings& rStyle ); + TableStyleSettings& operator=(const TableStyleSettings& rStyle); + + bool operator==( const TableStyleSettings& r ) const; +}; + +//------------------------------------------------------------------------ +// SdrTableObj +//------------------------------------------------------------------------ + +class SdrTableObjImpl; + +class SVX_DLLPUBLIC SdrTableObj : public ::SdrTextObj +{ + friend class Cell; + friend class SdrTableObjImpl; + +public: + SdrTableObj(SdrModel* _pModel); + SdrTableObj(SdrModel* _pModel, const ::Rectangle& rNewRect, sal_Int32 nColumns, sal_Int32 nRows); + virtual ~SdrTableObj(); + + TYPEINFO(); + + // table stuff + + SdrTableObj* CloneRange( const CellPos& rStartPos, const CellPos& rEndPos ); + void DistributeColumns( sal_Int32 nFirstColumn, sal_Int32 nLastColumn ); + void DistributeRows( sal_Int32 nFirstRow, sal_Int32 nLastRow ); + + com::sun::star::uno::Reference< com::sun::star::table::XTable > getTable() const; + + bool isValid( const sdr::table::CellPos& rPos ) const; + CellPos getFirstCell() const; + CellPos getLastCell() const; + CellPos getLeftCell( const CellPos& rPos, bool bEdgeTravel ) const; + CellPos getRightCell( const CellPos& rPos, bool bEdgeTravel ) const; + CellPos getUpCell( const CellPos& rPos, bool bEdgeTravel ) const; + CellPos getDownCell( const CellPos& rPos, bool bEdgeTravel ) const; + CellPos getPreviousCell( const CellPos& rPos, bool bEdgeTravel ) const; + CellPos getNextCell( const CellPos& rPos, bool bEdgeTravel ) const; + CellPos getPreviousRow( const CellPos& rPos, bool bEdgeTravel ) const; + CellPos getNextRow( const CellPos& rPos, bool bEdgeTravel ) const; + + void createCell( ::sdr::table::CellRef& xCell ); + + const ::sdr::table::TableStyleSettings& getTableStyleSettings() const; + void setTableStyleSettings( const ::sdr::table::TableStyleSettings& rStyle ); + + TableHitKind CheckTableHit( const Point& rPos, sal_Int32& rnX, sal_Int32& rnY, int nTol ) const; + + void uno_lock(); + void uno_unlock(); + + /** the active table has the focus or is currently edited */ + const ::sdr::table::CellRef& getActiveCell() const; + + void setActiveCell( const sdr::table::CellPos& rPos ); + void getActiveCellPos( sdr::table::CellPos& rPos ) const; + sal_Int32 getRowCount() const; + sal_Int32 getColumnCount() const; + void getCellBounds( const sdr::table::CellPos& rPos, ::Rectangle& rCellRect ); + + const SfxItemSet& GetActiveCellItemSet() const; + + void setTableStyle( const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& xAutoFormatStyle ); + const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexAccess >& getTableStyle() const; + + // text stuff + + /** returns the currently active text. */ + virtual SdrText* getActiveText() const; + + /** returns the nth available text. */ + virtual SdrText* getText( sal_Int32 nIndex ) const; + + /** returns the number of texts available for this object. */ + virtual sal_Int32 getTextCount() const; + + /** changes the current active text */ + virtual void setActiveText( sal_Int32 nIndex ); + + /** returns the index of the text that contains the given point or -1 */ + virtual sal_Int32 CheckTextHit(const Point& rPnt) const; + + virtual bool HasText() const; + sal_Bool IsTextEditActive() const { return (pEdtOutl != 0L); } + bool IsTextEditActive( const sdr::table::CellPos& rPos ); + + /** returns true only if we are in edit mode and the user actually changed anything */ + virtual bool IsRealyEdited() const; + + // Gleichzeitig wird der Text in den Outliner gesetzt (ggf. + // der des EditOutliners) und die PaperSize gesetzt. + virtual void TakeTextRect( const sdr::table::CellPos& rPos, SdrOutliner& rOutliner, ::Rectangle& rTextRect, bool bNoEditText = false, ::Rectangle* pAnchorRect=NULL, bool bLineWidth = true ) const; + virtual void TakeTextRect( SdrOutliner& rOutliner, Rectangle& rTextRect, bool bNoEditText = false, Rectangle* pAnchorRect=NULL, bool bLineWidth = true ) const; + virtual void TakeTextAnchorRect(const sdr::table::CellPos& rPos, ::Rectangle& rAnchorRect ) const; + virtual void TakeTextAnchorRect(::Rectangle& rAnchorRect) const; + + virtual bool IsAutoGrowHeight() const; + long GetMinTextFrameHeight() const; + long GetMaxTextFrameHeight() const; + virtual bool IsAutoGrowWidth() const; + long GetMinTextFrameWidth() const; + long GetMaxTextFrameWidth() const; + + virtual bool IsFontwork() const; + + virtual void SetPage(SdrPage* pNewPage); + virtual void SetModel(SdrModel* pNewModel); + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual sal_uInt16 GetObjIdentifier() const; + virtual void SetChanged(); + + virtual bool AdjustTextFrameWidthAndHeight(Rectangle& rR, bool bHgt = true, bool bWdt = true) const; + virtual bool AdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true); + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + virtual SdrTableObj* Clone() const; + SdrTableObj& operator=(const SdrTableObj& rObj); + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + virtual basegfx::B2DPolyPolygon TakeContour() const; + virtual void RecalcSnapRect(); + virtual const Rectangle& GetSnapRect() const; + virtual void NbcSetSnapRect(const Rectangle& rRect); + + virtual const Rectangle& GetLogicRect() const; + virtual void NbcSetLogicRect(const Rectangle& rRect); + virtual void AdjustToMaxRect( const Rectangle& rMaxRect, bool bShrinkOnly = false ); + + virtual sal_uInt32 GetSnapPointCount() const; + virtual Point GetSnapPoint(sal_uInt32 i) const; + + virtual sal_uInt32 GetHdlCount() const; + virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const; + virtual void AddToHdlList(SdrHdlList& rHdlList) const; + + // special drag methods + virtual bool hasSpecialDrag() const; + virtual bool beginSpecialDrag(SdrDragStat& rDrag) const; + virtual bool applySpecialDrag(SdrDragStat& rDrag); + virtual String getSpecialDragComment(const SdrDragStat& rDrag) const; + virtual basegfx::B2DPolyPolygon getSpecialDragPoly(const SdrDragStat& rDrag) const; + + virtual bool BegCreate(SdrDragStat& rStat); + virtual bool MovCreate(SdrDragStat& rStat); + virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); + virtual bool BckCreate(SdrDragStat& rStat); + virtual void BrkCreate(SdrDragStat& rStat); + virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const; + virtual Pointer GetCreatePointer() const; + + virtual void NbcMove(const Size& rSiz); + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + + virtual sal_Bool BegTextEdit(SdrOutliner& rOutl); + virtual void EndTextEdit(SdrOutliner& rOutl); + virtual void TakeTextEditArea(Size* pPaperMin, Size* pPaperMax, Rectangle* pViewInit, Rectangle* pViewMin) const; + virtual void TakeTextEditArea(const sdr::table::CellPos& rPos, Size* pPaperMin, Size* pPaperMax, Rectangle* pViewInit, Rectangle* pViewMin) const; + virtual sal_uInt16 GetOutlinerViewAnchorMode() const; + + virtual void NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject); + + virtual OutlinerParaObject* GetOutlinerParaObject() const; + virtual OutlinerParaObject* GetEditOutlinerParaObject() const; + + virtual void NbcReformatText(); + virtual void ReformatText(); + + void SetTextEditOutliner(SdrOutliner* pOutl) { pEdtOutl=pOutl; } + + virtual sal_Bool IsVerticalWriting() const; + virtual void SetVerticalWriting(sal_Bool bVertical); + + com::sun::star::text::WritingMode GetWritingMode() const; + + virtual void onEditOutlinerStatusEvent( EditStatus* pEditStatus ); + + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // + // transformation interface for StarOfficeAPI. This implements support for + // homogen 3x3 matrices containing the transformation of the SdrObject. At the + // moment it contains a shearX, rotation and translation, but for setting all linear + // transforms like Scale, ShearX, ShearY, Rotate and Translate are supported. + // + //////////////////////////////////////////////////////////////////////////////////////////////////// + // gets base transformation and rectangle of object. If it's an SdrPathObj it fills the PolyPolygon + // with the base geometry and returns TRUE. Otherwise it returns FALSE. + virtual sal_Bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const; + + // sets the base geometry of the object using infos contained in the homogen 3x3 matrix. + // If it's an SdrPathObj it will use the provided geometry information. The Polygon has + // to use (0,0) as upper left and will be scaled to the given size in the matrix. + virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon); + + // #103836# iterates over the paragraphs of a given SdrObject and removes all + // hard set character attributes with the which ids contained in the + // given vector +// virtual void RemoveOutlinerCharacterAttribs( const std::vector<sal_uInt16>& rCharWhichIds ); + + /** hack for clipboard with calc and writer, export and import table content as rtf table */ + static void ExportAsRTF( SvStream& rStrm, SdrTableObj& rObj ); + static void ImportAsRTF( SvStream& rStrm, SdrTableObj& rObj ); + +private: + void init( sal_Int32 nColumns, sal_Int32 nRows ); + +protected: + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + + virtual SdrObjGeoData* NewGeoData() const; + virtual void SaveGeoData(SdrObjGeoData& rGeo) const; + virtual void RestGeoData(const SdrObjGeoData& rGeo); + +private: + SdrOutliner* GetCellTextEditOutliner( const ::sdr::table::Cell& rCell ) const; + +private: + // for the ViewContactOfTableObj to build the primitive representation, it is necessary to access the + // TableLayouter for position and attribute information + friend class sdr::contact::ViewContactOfTableObj; + const TableLayouter& getTableLayouter() const; + + Rectangle maLogicRect; +private: + SdrTableObjImpl* mpImpl; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +} } + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdotext.hxx b/include/svx/svdotext.hxx new file mode 100644 index 000000000000..a5df49bdd24f --- /dev/null +++ b/include/svx/svdotext.hxx @@ -0,0 +1,595 @@ +/* -*- 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 _SVDOTEXT_HXX +#define _SVDOTEXT_HXX + +#include <vcl/field.hxx> +#include <svx/itextprovider.hxx> +#include <svx/svdoattr.hxx> +#include <svx/svdtrans.hxx> // GeoStat +#include <tools/datetime.hxx> +#include <svx/xtextit0.hxx> +#include "svdtext.hxx" +#include <vector> +#include <boost/shared_ptr.hpp> +#include "svx/svxdllapi.h" +#include <drawinglayer/primitive2d/baseprimitive2d.hxx> +#include <svx/svdpagv.hxx> + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class OutlinerParaObject; +class SdrOutliner; +class SdrTextObj; +class SvxFieldItem; +class ImpSdrObjTextLink; +class EditStatus; + +namespace sdr { namespace properties { + class TextProperties; +}} + +namespace drawinglayer { namespace primitive2d { + class SdrContourTextPrimitive2D; + class SdrPathTextPrimitive2D; + class SdrBlockTextPrimitive2D; + class SdrAutoFitTextPrimitive2D; + class SdrStretchTextPrimitive2D; +}} + +namespace drawinglayer { namespace animation { + class AnimationEntryList; +}} + +namespace drawinglayer { namespace geometry { + class ViewInformation2D; +}} + +namespace sdr { namespace table { + class Cell; + class SdrTableRtfExporter; + class SdrTableRTFParser; +}} + +//************************************************************ +// Defines +//************************************************************ + +#define SDRUSERDATA_OBJTEXTLINK (1) + +//************************************************************ +// Hilfsklasse SdrTextObjGeoData +//************************************************************ + +class SdrTextObjGeoData : public SdrObjGeoData +{ +public: + Rectangle aRect; + GeoStat aGeo; +}; + +//************************************************************ +// Hilfsklasse ImpSdrObjTextLinkUserData +//************************************************************ + +class ImpSdrObjTextLinkUserData : public SdrObjUserData +{ + friend class SdrTextObj; + friend class ImpSdrObjTextLink; + + SdrTextObj* pObj; + String aFileName; // Name des referenzierten Dokuments + String aFilterName; // ggf. ein Filter + DateTime aFileDate0; // Unnoetiges neuladen vermeiden + ImpSdrObjTextLink* pLink; + rtl_TextEncoding eCharSet; + +public: + TYPEINFO(); + ImpSdrObjTextLinkUserData(SdrTextObj* pObj1); + virtual ~ImpSdrObjTextLinkUserData(); + + virtual SdrObjUserData* Clone(SdrObject* pObj1) const; +}; + +namespace sdr +{ + namespace properties + { + class CustomShapeProperties; + class CellProperties; + } // end of namespace properties +} // end of namespace sdr + +//************************************************************ +// SdrTextObj +//************************************************************ + +class SVX_DLLPUBLIC SdrTextObj : public SdrAttrObj, public svx::ITextProvider +{ +private: + // Cell needs access to ImpGetDrawOutliner(); + + friend class sdr::table::Cell; + friend class sdr::table::SdrTableRtfExporter; + friend class sdr::table::SdrTableRTFParser; + + // CustomShapeproperties need to access the "bTextFrame" member: + friend class sdr::properties::CustomShapeProperties; + +protected: + virtual sdr::properties::BaseProperties* CreateObjectSpecificProperties(); + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + +private: + // This method is only allowed for sdr::properties::TextProperties + SVX_DLLPRIVATE SdrOutliner* GetTextEditOutliner() const + { + return pEdtOutl; + } + + // This method is only allowed for sdr::properties::TextProperties + SVX_DLLPRIVATE void SetPortionInfoChecked(sal_Bool bNew) + { + bPortionInfoChecked = bNew; + } + + // to allow sdr::properties::TextProperties access to SetPortionInfoChecked() + // and GetTextEditOutliner() + friend class sdr::properties::TextProperties; + friend class sdr::properties::CellProperties; + + friend class ImpSdrObjTextLink; + friend class ImpSdrObjTextLinkUserData; + friend class SdrPowerPointImport; // fuer PowerPointImport + friend class SdrExchangeView; // fuer ImpGetDrawOutliner + friend class SdrView; // fuer ImpGetDrawOutliner + friend class SdrObjEditView; // fuer TextEdit + friend class SdrMeasureObj; // fuer ImpGetDrawOutliner + friend class SvxMSDffManager; // fuer ImpGetDrawOutliner + friend class SdrObjCustomShape;// fuer ImpGetDrawOutliner + friend class SdrText; // fuer ImpGetDrawOutliner + +protected: + // Das aRect ist gleichzeig auch das Rect vom RectObj und CircObj. + // Bei bTextFrame=sal_True wird der Text in dieses Rect hineinformatiert. + // Bei bTextFrame=sal_False wird der Text am Mittelpunkt des Rect zentriert. + Rectangle aRect; + + // Der GeoStat enthaelt den Drehwinkel und einen Shearwinkel + GeoStat aGeo; + + // this is the active text + SdrText* mpText; + + // Hier merke ich mir die Ausmasse des Textes (n.i.) + Size aTextSize; + + // Ein Outliner*, damit + // 1. das TextObj nicht von mehreren Views gleichzeitig editiert und + // 2. beim Streamen waerend des Editierens ein Flush() ausgefuehrt + // werden kann + SdrOutliner* pEdtOutl; + + // Bei Fontwork muss soviel auf's BoundRect draufgerechnet werden + // damit es ausreichend gross ist. + Rectangle* pFormTextBoundRect; + + // Moegliche Werte fuer eTextKind sind: + // OBJ_TEXT normaler Textrahmen + // OBJ_TEXTEXT Textfortsetzungsrahmen + // OBJ_TITLETEXT TitleText fuer StarDraw-Praesentation + // OBJ_OUTLINETEXT OutlineText fuer StarDraw-Praesentation + // eTextKind hat nur Bedeutung, wenn bTextFrame=sal_True, da es sich sonst + // um ein beschriftetes Grafikobjekt handelt. + SdrObjKind eTextKind; + + // #108784# + // For text editing in SW Haeder/Footer it is necessary to be + // able to set an offset for the text edit to allow text editing at the + // position of the virtual object. This offset is used when setting up + // and maintaining the OutlinerView. + Point maTextEditOffset; +public: + const Point& GetTextEditOffset() const { return maTextEditOffset; } + void SetTextEditOffset(const Point& rNew) { maTextEditOffset = rNew; } + +protected: + // Fuer beschriftete Zeichenobjekte ist bTextFrame=FALSE. Der Textblock + // wird dann hoizontal und vertikal an aRect zentriert. Bei bTextFrame= + // sal_True wird der Text in aRect hineinformatiert. Der eigentliche Textrahmen + // ist durch ein SdrRectObj mit bTextFrame=sal_True realisiert. + sal_Bool bTextFrame : 1; + sal_Bool bPortionInfoChecked : 1; // Fuer Optimierung von Textobjekten + sal_Bool bNoShear : 1; // Obj darf nicht gesheart werden (->Graf+Ole+TextFrame) + sal_Bool bNoRotate : 1; // Obj darf nicht gedreht werden (->Ole) + sal_Bool bNoMirror : 1; // Obj darf nicht gespiegelt werden (->Ole,TextFrame) + sal_Bool bTextSizeDirty : 1; + + // #101684# + sal_Bool mbInEditMode : 1; // Is this text obejct in edit mode? + + // Fuer Objekt mit freier Groesse im Draw (Mengentext). Das Flag wird vom + // der App beim Create gesetzt. + // Wenn das Objekt dann spaeter in der Breite resized wird, wird + // AutoGrowWidth abgeschaltet (Hart auf sal_False attributiert). Das Flag wird + // dann ebenfalls auf sal_False gesetzt, sodass sich das Objekt anschliessend + // wie ein normales Textobjekt verhaelt. + // Resize in der Breite kann sein: + // - Interaktives Resize in Einfach- oder Mehrfachselektion + // - Positions+Groesse Dialog + sal_Bool bDisableAutoWidthOnDragging : 1; + + // #111096# + // Allow text suppression + sal_Bool mbTextHidden : 1; + + // #111096# + // Flag for allowing text animation. Default is sal_true. + sal_Bool mbTextAnimationAllowed : 1; + + // flag for preventing recursive onEditOutlinerStatusEvent calls + sal_Bool mbInDownScale : 1; + + SdrOutliner& ImpGetDrawOutliner() const; + +private: + SVX_DLLPRIVATE void ImpCheckMasterCachable(); + // #101029#: Extracted from ImpGetDrawOutliner() + SVX_DLLPRIVATE void ImpInitDrawOutliner( SdrOutliner& rOutl ) const; + // #101029#: Extracted from Paint() + SVX_DLLPRIVATE void ImpSetupDrawOutlinerForPaint( bool bContourFrame, + SdrOutliner& rOutliner, + Rectangle& rTextRect, + Rectangle& rAnchorRect, + Rectangle& rPaintRect, + Fraction& aFitXKorreg ) const; + void ImpAutoFitText( SdrOutliner& rOutliner ) const; + static void ImpAutoFitText( SdrOutliner& rOutliner, const Size& rShapeSize, bool bIsVerticalWriting ); + SVX_DLLPRIVATE SdrObject* ImpConvertContainedTextToSdrPathObjs(bool bToPoly) const; + SVX_DLLPRIVATE void ImpLinkAnmeldung(); + SVX_DLLPRIVATE void ImpLinkAbmeldung(); + SVX_DLLPRIVATE ImpSdrObjTextLinkUserData* GetLinkUserData() const; +// void ImpCheckItemSetChanges(const SfxItemSet& rAttr); + +protected: + bool ImpCanConvTextToCurve() const; + SdrObject* ImpConvertMakeObj(const basegfx::B2DPolyPolygon& rPolyPolygon, sal_Bool bClosed, sal_Bool bBezier, sal_Bool bNoSetAttr = sal_False) const; + SdrObject* ImpConvertAddText(SdrObject* pObj, bool bBezier) const; + void ImpSetTextStyleSheetListeners(); + void ImpSetCharStretching(SdrOutliner& rOutliner, const Size& rTextSize, const Size& rShapeSize, Fraction& rFitXKorreg) const; + void ImpJustifyRect(Rectangle& rRect) const; + void ImpCheckShear(); + Rectangle ImpDragCalcRect(const SdrDragStat& rDrag) const; + void ImpSetTextEditParams() const; + void SetTextSizeDirty() { bTextSizeDirty=sal_True; } + + // rAnchorRect ist InOut-Parameter! + void ImpSetContourPolygon( SdrOutliner& rOutliner, Rectangle& rAnchorRect, sal_Bool bLineWidth ) const; + + virtual SdrObjGeoData* NewGeoData() const; + virtual void SaveGeoData(SdrObjGeoData& rGeo) const; + virtual void RestGeoData(const SdrObjGeoData& rGeo); + bool NbcSetEckenradius(long nRad); + bool NbcSetMinTextFrameHeight(long nHgt); + bool NbcSetMinTextFrameWidth(long nWdt); + + // Konstruktoren fuer beschriftete Zeichenobjekte + SdrTextObj(); + SdrTextObj(const Rectangle& rNewRect); + + // Konstruktoren fuer Textrahmen + SdrTextObj(SdrObjKind eNewTextKind); + SdrTextObj(SdrObjKind eNewTextKind, const Rectangle& rNewRect); + + virtual ~SdrTextObj(); + +public: + TYPEINFO(); + + // #101684# + sal_Bool IsInEditMode() const { return mbInEditMode; } + + // via eCharSet kann der CharSet der vorliegenden Datei uebergeben werden. + // Bei RTL_TEXTENCODING_DONTKNOW wird der CharSet der aktuellen Plattform verwendet. + // Derzeit unterstuetzt wird ASCII und RTF wobei ich die Unterscheidung + // selbst treffe. rFilterName ist noch ohne Bedeutung und muss leer gelassen + // werden. + // I.d.R. muss die App nur SetTextLink() rufen - der Rest geschieht von + // selbst (SfxLinkManager). Die Methode LoadText() kann ausserdem verwendet + // werden, um eine Datei in ein Textobjekt zu laden (ohne Verknuepfung). + // TextLinks koennen nicht editiert werden (allenfalls spaeter mal ReadOnly). + // Eine Attributierung kann nur am Textrahmen vollzogen werden. + void SetTextLink(const String& rFileName, const String& rFilterName, rtl_TextEncoding eCharSet); + void ReleaseTextLink(); + bool IsLinkedText() const { return pPlusData!=NULL && GetLinkUserData()!=NULL; } + bool ReloadLinkedText(bool bForceLoad = false); + bool LoadText(const String& rFileName, const String& rFilterName, rtl_TextEncoding eCharSet); + + virtual bool AdjustTextFrameWidthAndHeight(Rectangle& rR, bool bHgt = true, bool bWdt = true) const; + virtual bool NbcAdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true); + virtual bool AdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true); + bool IsTextFrame() const { return bTextFrame; } + bool IsOutlText() const { return bTextFrame && (eTextKind==OBJ_OUTLINETEXT || eTextKind==OBJ_TITLETEXT); } + /// returns true if the PPT autofit of text into shape bounds is enabled. implies IsFitToSize()==false! + bool IsAutoFit() const; + /// returns true if the old feature for fitting shape content should into shape is enabled. implies IsAutoFit()==false! + bool IsFitToSize() const; + SdrObjKind GetTextKind() const { return eTextKind; } + + virtual bool HasText() const; + bool HasEditText() const; + sal_Bool IsTextEditActive() const { return (pEdtOutl != 0L); } + + /** returns the currently active text. */ + virtual SdrText* getActiveText() const; + + /** returns the nth available text. */ + virtual SdrText* getText( sal_Int32 nIndex ) const; + + /** returns the number of texts available for this object. */ + virtual sal_Int32 getTextCount() const; + + /** returns true only if we are in edit mode and the user actually changed anything */ + virtual bool IsRealyEdited() const; + + /** changes the current active text */ + virtual void setActiveText( sal_Int32 nIndex ); + + /** returns the index of the text that contains the given point or -1 */ + virtual sal_Int32 CheckTextHit(const Point& rPnt) const; + + void SetDisableAutoWidthOnDragging(bool bOn) { bDisableAutoWidthOnDragging=bOn; } + bool IsDisableAutoWidthOnDragging() { return bDisableAutoWidthOnDragging; } + void NbcSetText(const String& rStr); + void SetText(const String& rStr); + void NbcSetText(SvStream& rInput, const String& rBaseURL, sal_uInt16 eFormat); + void SetText(SvStream& rInput, const String& rBaseURL, sal_uInt16 eFormat); + + // FitToSize und Fontwork wird bei GetTextSize() nicht berueksichtigt! + virtual const Size& GetTextSize() const; + void FitFrameToTextSize(); + + // Gleichzeitig wird der Text in den Outliner gesetzt (ggf. + // der des EditOutliners) und die PaperSize gesetzt. + virtual void TakeTextRect( SdrOutliner& rOutliner, Rectangle& rTextRect, bool bNoEditText = false, + Rectangle* pAnchorRect=NULL, bool bLineWidth = true ) const; + virtual void TakeTextAnchorRect(::Rectangle& rAnchorRect) const; + const GeoStat& GetGeoStat() const { return aGeo; } + + long GetEckenradius() const; + virtual bool IsAutoGrowHeight() const; + long GetMinTextFrameHeight() const; + long GetMaxTextFrameHeight() const; + virtual bool IsAutoGrowWidth() const; + long GetMinTextFrameWidth() const; + long GetMaxTextFrameWidth() const; + + SdrFitToSizeType GetFitToSize() const; + const Rectangle &GetGeoRect() const { return aRect; } + + // Feststellen, ob TextFontwork + virtual bool IsFontwork() const; + + // Soll die Fontwork-Kontour versteckt werden? + bool IsHideContour() const; + + // Textfluss innerhalb Kontur + bool IsContourTextFrame() const; + + // Horizontale Textausrichtung + SdrTextHorzAdjust GetTextHorizontalAdjust(const SfxItemSet& rSet) const; + SdrTextHorzAdjust GetTextHorizontalAdjust() const; + + // Vertikale Textausrichtung + SdrTextVertAdjust GetTextVerticalAdjust(const SfxItemSet& rSet) const; + SdrTextVertAdjust GetTextVerticalAdjust() const; + + // Textrahmenabstaende + long GetTextLeftDistance() const; + long GetTextRightDistance() const; + long GetTextUpperDistance() const; + long GetTextLowerDistance() const; + SdrTextAniKind GetTextAniKind() const; + SdrTextAniDirection GetTextAniDirection() const; + + virtual void SetPage(SdrPage* pNewPage); + virtual void SetModel(SdrModel* pNewModel); + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual sal_uInt16 GetObjIdentifier() const; + + // Wird zur Bestimmung des Textankerbereichs benoetigt + virtual void TakeUnrotatedSnapRect(Rectangle& rRect) const; + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + virtual SdrTextObj* Clone() const; + SdrTextObj& operator=(const SdrTextObj& rObj); + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + virtual basegfx::B2DPolyPolygon TakeContour() const; + virtual void RecalcSnapRect(); + virtual void NbcSetSnapRect(const Rectangle& rRect); + virtual void NbcSetLogicRect(const Rectangle& rRect); + virtual const Rectangle& GetLogicRect() const; + virtual long GetRotateAngle() const; + virtual long GetShearAngle(bool bVertical = false) const; + + virtual sal_uInt32 GetSnapPointCount() const; + virtual Point GetSnapPoint(sal_uInt32 i) const; + + virtual sal_uInt32 GetHdlCount() const; + virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const; + + // special drag methods + virtual bool hasSpecialDrag() const; + virtual bool applySpecialDrag(SdrDragStat& rDrag); + virtual String getSpecialDragComment(const SdrDragStat& rDrag) const; + + virtual bool BegCreate(SdrDragStat& rStat); + virtual bool MovCreate(SdrDragStat& rStat); + virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); + virtual bool BckCreate(SdrDragStat& rStat); + virtual void BrkCreate(SdrDragStat& rStat); + virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const; + virtual Pointer GetCreatePointer() const; + + virtual void NbcMove(const Size& rSiz); + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs); + virtual void NbcMirror(const Point& rRef1, const Point& rRef2); + virtual void NbcShear(const Point& rRef, long nWink, double tn, bool bVShear); + + virtual bool HasTextEdit() const; + virtual sal_Bool BegTextEdit(SdrOutliner& rOutl); + virtual void TakeTextEditArea(Size* pPaperMin, Size* pPaperMax, Rectangle* pViewInit, Rectangle* pViewMin) const; + virtual void EndTextEdit(SdrOutliner& rOutl); + virtual sal_uInt16 GetOutlinerViewAnchorMode() const; + + virtual void NbcSetOutlinerParaObject(OutlinerParaObject* pTextObject); + void NbcSetOutlinerParaObjectForText( OutlinerParaObject* pTextObject, SdrText* pText ); + virtual OutlinerParaObject* GetOutlinerParaObject() const; + virtual OutlinerParaObject* GetEditOutlinerParaObject() const; + + virtual void NbcReformatText(); + virtual void ReformatText(); + + virtual bool CalcFieldValue(const SvxFieldItem& rField, sal_uInt16 nPara, sal_uInt16 nPos, + bool bEdit, Color*& rpTxtColor, Color*& rpFldColor, String& rRet) const; + + virtual SdrObject* DoConvertToPolyObj(sal_Bool bBezier, bool bAddText) const; + + void SetTextEditOutliner(SdrOutliner* pOutl) { pEdtOutl=pOutl; } + + /** Setup given Outliner equivalently to SdrTextObj::Paint() + + To setup an arbitrary Outliner in the same way as the draw + outliner on SdrTextObj::Paint(). Among others, the paper size, + control word and character stretching are initialized, such + that the formatting should match the screen representation. + The textual content of the outliner is not touched, i.e. no + Init() or Clear() is called on the Outliner. + + @param rOutl + The Outliner to setup. + + @param rPaintRect + The region to paint the outliner content into. This is useful + to e.g. determine the top, left position of text in shapes. + */ + void SetupOutlinerFormatting( SdrOutliner& rOutl, Rectangle& rPaintRect ) const; + + /** Update given Outliner equivalently to SdrTextObj::Paint() + + Same functionality as in SetupOutlinerFormatting(), except + that the outliner content is not cleared. + + @param rOutl + The Outliner to update. + + @param rPaintRect + The region to paint the outliner content into. This is useful + to e.g. determine the top, left position of text in shapes. + */ + void UpdateOutlinerFormatting( SdrOutliner& rOutl, Rectangle& rPaintRect ) const; + void ForceOutlinerParaObject(); + virtual sal_Bool IsVerticalWriting() const; + virtual void SetVerticalWriting(sal_Bool bVertical); + + /** called from the SdrObjEditView during text edit when the status of the edit outliner changes */ + virtual void onEditOutlinerStatusEvent( EditStatus* pEditStatus ); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // + // transformation interface for StarOfficeAPI. This implements support for + // homogen 3x3 matrices containing the transformation of the SdrObject. At the + // moment it contains a shearX, rotation and translation, but for setting all linear + // transforms like Scale, ShearX, ShearY, Rotate and Translate are supported. + // + //////////////////////////////////////////////////////////////////////////////////////////////////// + // gets base transformation and rectangle of object. If it's an SdrPathObj it fills the PolyPolygon + // with the base geometry and returns TRUE. Otherwise it returns FALSE. + virtual sal_Bool TRGetBaseGeometry(basegfx::B2DHomMatrix& rMatrix, basegfx::B2DPolyPolygon& rPolyPolygon) const; + + // sets the base geometry of the object using infos contained in the homogen 3x3 matrix. + // If it's an SdrPathObj it will use the provided geometry information. The Polygon has + // to use (0,0) as upper left and will be scaled to the given size in the matrix. + virtual void TRSetBaseGeometry(const basegfx::B2DHomMatrix& rMatrix, const basegfx::B2DPolyPolygon& rPolyPolygon); + + // #103836# iterates over the paragraphs of a given SdrObject and removes all + // hard set character attributes with the which ids contained in the + // given vector + virtual void RemoveOutlinerCharacterAttribs( const std::vector<sal_uInt16>& rCharWhichIds ); + + // #111096# + // Get necessary data for text scroll animation. ATM base it on a Text-Metafile and a + // painting rectangle. Rotation is taken from the object. + GDIMetaFile* GetTextScrollMetaFileAndRectangle(Rectangle& rScrollRectangle, Rectangle& rPaintRectangle); + + // #111096# + // Access to TextAnimationAllowed flag + void SetTextAnimationAllowed(sal_Bool bNew); + + // #i8824# + // Set single item at the local ItemSet. *Does not use* AllowItemChange(), + // ItemChange(), PostItemChange() and ItemSetChanged() calls. + void SetObjectItemNoBroadcast(const SfxPoolItem& rItem); + +public: + ////////////////////////////////////////////////////////////////////////////// + // text primitive decomposition helpers + void impDecomposeContourTextPrimitive( + drawinglayer::primitive2d::Primitive2DSequence& rTarget, + const drawinglayer::primitive2d::SdrContourTextPrimitive2D& rSdrContourTextPrimitive, + const drawinglayer::geometry::ViewInformation2D& aViewInformation) const; + void impDecomposePathTextPrimitive( + drawinglayer::primitive2d::Primitive2DSequence& rTarget, + const drawinglayer::primitive2d::SdrPathTextPrimitive2D& rSdrPathTextPrimitive, + const drawinglayer::geometry::ViewInformation2D& aViewInformation) const; + void impDecomposeBlockTextPrimitive( + drawinglayer::primitive2d::Primitive2DSequence& rTarget, + const drawinglayer::primitive2d::SdrBlockTextPrimitive2D& rSdrBlockTextPrimitive, + const drawinglayer::geometry::ViewInformation2D& aViewInformation) const; + void impDecomposeAutoFitTextPrimitive( + drawinglayer::primitive2d::Primitive2DSequence& rTarget, + const drawinglayer::primitive2d::SdrAutoFitTextPrimitive2D& rSdrAutofitTextPrimitive, + const drawinglayer::geometry::ViewInformation2D& aViewInformation) const; + void impDecomposeStretchTextPrimitive( + drawinglayer::primitive2d::Primitive2DSequence& rTarget, + const drawinglayer::primitive2d::SdrStretchTextPrimitive2D& rSdrStretchTextPrimitive, + const drawinglayer::geometry::ViewInformation2D& aViewInformation) const; + + ////////////////////////////////////////////////////////////////////////////// + // timing generators + void impGetBlinkTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList) const; + void impGetScrollTextTiming(drawinglayer::animation::AnimationEntryList& rAnimList, double fFrameLength, double fTextLength) const; + + /** returns false if the given pointer is NULL + or if the given SdrOutliner contains no text. + Also checks for one empty paragraph. + */ + static bool HasTextImpl( SdrOutliner* pOutliner ); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDOTEXT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdouno.hxx b/include/svx/svdouno.hxx new file mode 100644 index 000000000000..243bcce4f61d --- /dev/null +++ b/include/svx/svdouno.hxx @@ -0,0 +1,155 @@ +/* -*- 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 _SVDOUNO_HXX +#define _SVDOUNO_HXX + +#include <com/sun/star/awt/XControlModel.hpp> +#include <com/sun/star/awt/XControl.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/awt/XControlContainer.hpp> +#include "svx/svxdllapi.h" +#include <svx/svdorect.hxx> + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class SdrView; +class SdrPageWindow; +class SdrControlEventListenerImpl; + +namespace sdr { namespace contact { + class ViewContactOfUnoControl; +}} + +//************************************************************ +// SdrUnoObj +//************************************************************ + +struct SdrUnoObjDataHolder; +class SVX_DLLPUBLIC SdrUnoObj : public SdrRectObj +{ + friend class SdrPageView; + friend class SdrControlEventListenerImpl; + + SdrUnoObjDataHolder* m_pImpl; + + String aUnoControlModelTypeName; + String aUnoControlTypeName; + sal_Bool bOwnUnoControlModel; + +protected: + ::com::sun::star::uno::Reference< com::sun::star::awt::XControlModel > xUnoControlModel; // kann auch von aussen gesetzt werden + +private: + SVX_DLLPRIVATE void CreateUnoControlModel(const String& rModelName); + SVX_DLLPRIVATE void CreateUnoControlModel(const String& rModelName, + const ::com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rxSFac ); + +public: + TYPEINFO(); + + explicit SdrUnoObj(const String& rModelName, sal_Bool bOwnsModel = sal_True); + SdrUnoObj(const String& rModelName, + const ::com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rxSFac, + sal_Bool bOwnsModel = sal_True); + virtual ~SdrUnoObj(); + + virtual void SetPage(SdrPage* pNewPage); + virtual void SetModel(SdrModel* pModel); + + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual sal_uInt16 GetObjIdentifier() const; + + virtual SdrUnoObj* Clone() const; + SdrUnoObj& operator= (const SdrUnoObj& rObj); + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + virtual void NbcSetLayer(SdrLayerID nLayer); + + // SpecialDrag support + virtual bool hasSpecialDrag() const; + + // FullDrag support + virtual bool supportsFullDrag() const; + virtual SdrObject* getFullDragClone() const; + + virtual void TakeObjNameSingul(XubString& rName) const; + virtual void TakeObjNamePlural(XubString& rName) const; + + virtual void SetContextWritingMode( const sal_Int16 _nContextWritingMode ); + + ::com::sun::star::uno::Reference< com::sun::star::awt::XControlModel > GetUnoControlModel() const {return xUnoControlModel;} + ::com::sun::star::uno::Reference< com::sun::star::awt::XControl > GetUnoControl(const SdrView& _rView, const OutputDevice& _rOut) const; + + /** retrieves a temporary XControl instance for a given output device + + The method GetUnoControl, used to retrieve the XControl whose parent is a given device, only works + if the SdrUnoObj has already been painted at least once onto this device. However, there are valid + scenarios where you need certain information on how a control is painted onto a window, without + actually painting it. For example, you might be interested in the DeviceInfo of an UNO control. + + For those cases, you can ontain an XControl which behaves as the control which *would* be used to + paint onto a window. + + @param _rWindow + the window for which should act as parent for the temporary control + @param _inout_ControlContainer + the control container belonging to the window, necessary as context + for the newly created control. A control container is usually created by calling + VCLUnoHelper::CreateControlContainer. + If _inout_ControlContainer is <NULL/>, it will be created internally, and passed to the caller. + In this case, the caller also takes ownership of the control container, and is responsible for + disposing it when not needed anymore. + @return + The requested control. This control is temporary only, and the caller is responsible for it. + In particular, the caller is required to dispose it when it's not needed anymore. + + */ + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > + GetTemporaryControlForWindow( + const Window& _rWindow, + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer >& _inout_ControlContainer + ) const; + + const String& GetUnoControlModelTypeName() const { return aUnoControlTypeName; } + const String& GetUnoControlTypeName() const { return aUnoControlTypeName; } + + virtual void SetUnoControlModel( const ::com::sun::star::uno::Reference< com::sun::star::awt::XControlModel >& xModel ); + +protected: + // SdrObject overridables + virtual ::sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + +private: + /** retrieves the typed ViewContact for the object + @param _out_rpContact + Upon successful return, ->_out_rpContact contains the ViewContact. + @return + <TRUE/> if and only if the contact was successfully retrieved. In this case, + ->_out_rpContact contains a pointer to this contact. + A failure to retrieve the contact object fires an assertion in non-product builds. + */ + SVX_DLLPRIVATE bool impl_getViewContact( ::sdr::contact::ViewContactOfUnoControl*& _out_rpContact ) const; +}; + + +#endif // _SVDOUNO_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdoutl.hxx b/include/svx/svdoutl.hxx new file mode 100644 index 000000000000..43d5468c259a --- /dev/null +++ b/include/svx/svdoutl.hxx @@ -0,0 +1,52 @@ +/* -*- 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 _SVDOUTL_HXX +#define _SVDOUTL_HXX + +#include <editeng/outliner.hxx> +#include "svx/svxdllapi.h" +#include <svx/svdobj.hxx> + +class SdrTextObj; +class SdrPage; + +class SVX_DLLPUBLIC SdrOutliner : public Outliner +{ +protected: + SdrObjectWeakRef mpTextObj; + const SdrPage* mpVisualizedPage; + +public: + SdrOutliner( SfxItemPool* pItemPool, sal_uInt16 nMode ); + virtual ~SdrOutliner() ; + + void SetTextObj( const SdrTextObj* pObj ); + void SetTextObjNoInit( const SdrTextObj* pObj ); + const SdrTextObj* GetTextObj() const; + + void setVisualizedPage(const SdrPage* pPage) { if(pPage != mpVisualizedPage) mpVisualizedPage = pPage; } + const SdrPage* getVisualizedPage() const { return mpVisualizedPage; } + + virtual String CalcFieldValue(const SvxFieldItem& rField, sal_uInt16 nPara, sal_uInt16 nPos, Color*& rpTxtColor, Color*& rpFldColor); +}; + +#endif //_SVDOUTL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdovirt.hxx b/include/svx/svdovirt.hxx new file mode 100644 index 000000000000..e7493f55ac90 --- /dev/null +++ b/include/svx/svdovirt.hxx @@ -0,0 +1,157 @@ +/* -*- 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 _SVDOVIRT_HXX +#define _SVDOVIRT_HXX + +#include <svx/svdobj.hxx> +#include "svx/svxdllapi.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// SdrVirtObj +// +// Achtung! Das virtuelle Objekt ist noch nicht bis in alle Feinheiten +// durchprogrammiert und getestet. Z.Zt. kommt es nur in abgeleiteter +// beim Writer zum Einsatz. +// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrVirtObj : public SdrObject +{ +public: + virtual sdr::properties::BaseProperties& GetProperties() const; + +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); + + SdrObject& rRefObj; // Referenziertes Zeichenobjekt + Rectangle aSnapRect; + +protected: + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + + virtual SdrObjGeoData* NewGeoData() const; + virtual void SaveGeoData(SdrObjGeoData& rGeo) const; + virtual void RestGeoData(const SdrObjGeoData& rGeo); + +public: + TYPEINFO(); + SdrVirtObj(SdrObject& rNewObj); + virtual ~SdrVirtObj(); + virtual SdrObject& ReferencedObj(); + virtual const SdrObject& GetReferencedObj() const; + virtual void NbcSetAnchorPos(const Point& rAnchorPos); + virtual void SetModel(SdrModel* pNewModel); + + virtual void TakeObjInfo(SdrObjTransformInfoRec& rInfo) const; + virtual sal_uInt32 GetObjInventor() const; + virtual sal_uInt16 GetObjIdentifier() const; + virtual SdrObjList* GetSubList() const; + + virtual const Rectangle& GetCurrentBoundRect() const; + virtual const Rectangle& GetLastBoundRect() const; + virtual void RecalcBoundRect(); + virtual void SetChanged(); + virtual SdrVirtObj* Clone() const; + SdrVirtObj& operator=(const SdrVirtObj& rObj); + + virtual void TakeObjNameSingul(String& rName) const; + virtual void TakeObjNamePlural(String& rName) const; + + virtual basegfx::B2DPolyPolygon TakeXorPoly() const; + virtual sal_uInt32 GetHdlCount() const; + virtual SdrHdl* GetHdl(sal_uInt32 nHdlNum) const; + virtual sal_uInt32 GetPlusHdlCount(const SdrHdl& rHdl) const; + virtual SdrHdl* GetPlusHdl(const SdrHdl& rHdl, sal_uInt32 nPlNum) const; + virtual void AddToHdlList(SdrHdlList& rHdlList) const; + + // special drag methods + virtual bool hasSpecialDrag() const; + virtual bool beginSpecialDrag(SdrDragStat& rDrag) const; + virtual bool applySpecialDrag(SdrDragStat& rDrag); + virtual String getSpecialDragComment(const SdrDragStat& rDrag) const; + virtual basegfx::B2DPolyPolygon getSpecialDragPoly(const SdrDragStat& rDrag) const; + + // FullDrag support + virtual bool supportsFullDrag() const; + virtual SdrObject* getFullDragClone() const; + + virtual bool BegCreate(SdrDragStat& rStat); + virtual bool MovCreate(SdrDragStat& rStat); + virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); + virtual bool BckCreate(SdrDragStat& rStat); + virtual void BrkCreate(SdrDragStat& rStat); + virtual basegfx::B2DPolyPolygon TakeCreatePoly(const SdrDragStat& rDrag) const; + + virtual void NbcMove(const Size& rSiz); + virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); + virtual void NbcRotate(const Point& rRef, long nWink, double sn, double cs); + virtual void NbcMirror(const Point& rRef1, const Point& rRef2); + virtual void NbcShear(const Point& rRef, long nWink, double tn, bool bVShear); + + virtual void Move(const Size& rSiz); + virtual void Resize(const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bUnsetRelative = true); + virtual void Rotate(const Point& rRef, long nWink, double sn, double cs); + virtual void Mirror(const Point& rRef1, const Point& rRef2); + virtual void Shear(const Point& rRef, long nWink, double tn, bool bVShear); + + virtual void RecalcSnapRect(); + virtual const Rectangle& GetSnapRect() const; + virtual void SetSnapRect(const Rectangle& rRect); + virtual void NbcSetSnapRect(const Rectangle& rRect); + + virtual const Rectangle& GetLogicRect() const; + virtual void SetLogicRect(const Rectangle& rRect); + virtual void NbcSetLogicRect(const Rectangle& rRect); + + virtual long GetRotateAngle() const; + virtual long GetShearAngle(bool bVertical = false) const; + + virtual sal_uInt32 GetSnapPointCount() const; + virtual Point GetSnapPoint(sal_uInt32 i) const; + + virtual sal_Bool IsPolyObj() const; + virtual sal_uInt32 GetPointCount() const; + virtual Point GetPoint(sal_uInt32 i) const; + virtual void NbcSetPoint(const Point& rPnt, sal_uInt32 i); + + virtual SdrObjGeoData* GetGeoData() const; + virtual void SetGeoData(const SdrObjGeoData& rGeo); + + virtual void NbcReformatText(); + virtual void ReformatText(); + + virtual bool HasMacro() const; + virtual SdrObject* CheckMacroHit (const SdrObjMacroHitRec& rRec) const; + virtual Pointer GetMacroPointer (const SdrObjMacroHitRec& rRec) const; + virtual void PaintMacro (OutputDevice& rOut, const Rectangle& rDirtyRect, const SdrObjMacroHitRec& rRec) const; + virtual bool DoMacro (const SdrObjMacroHitRec& rRec); + virtual OUString GetMacroPopupComment(const SdrObjMacroHitRec& rRec) const; + + // OD 30.06.2003 #108784# - virtual <GetOffset()> returns Point(0,0) + // #i73248# for default SdrVirtObj, offset is aAnchor, not (0,0) + virtual const Point GetOffset() const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDOVIRT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdpage.hxx b/include/svx/svdpage.hxx new file mode 100644 index 000000000000..c8dd083019a4 --- /dev/null +++ b/include/svx/svdpage.hxx @@ -0,0 +1,605 @@ +/* -*- 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 _SVDPAGE_HXX +#define _SVDPAGE_HXX + +#include <svl/stylesheetuser.hxx> +#include <vcl/bitmap.hxx> +#include <vcl/print.hxx> +#include <vcl/gdimtf.hxx> +#include <tools/weakbase.hxx> +#include <cppuhelper/weakref.hxx> +#include <svx/svdtypes.hxx> +#include <svx/svdlayer.hxx> +#include <vector> +#include <svx/sdrpageuser.hxx> +#include <svx/sdr/contact/viewobjectcontactredirector.hxx> +#include <svx/sdrmasterpagedescriptor.hxx> +#include "svx/svxdllapi.h" +#include <com/sun/star/container/XIndexAccess.hpp> +#include <com/sun/star/drawing/XDrawPage.hpp> +#include <svx/svdobj.hxx> +#include <boost/scoped_ptr.hpp> + +////////////////////////////////////////////////////////////////////////////// +// predefines + +namespace reportdesign { class OSection; } +namespace sdr { namespace contact { class ViewContact; }} +class SdrPage; +class SdrModel; +class SfxItemPool; +class SdrPageView; +class SdrLayerAdmin; +class SetOfByte; +class Color; +class SfxStyleSheet; +class SvxUnoDrawPagesAccess; + +enum SdrInsertReasonKind {SDRREASON_UNKNOWN, // unbekannt + SDRREASON_STREAMING, // einlesen eines Doks + SDRREASON_UNDO, // kommt aus dem Undo + SDRREASON_COPY, // irgendjemand kopiert... + SDRREASON_VIEWCREATE, // vom Anwender interaktiv erzeugt + SDRREASON_VIEWCALL}; // Durch SdrView::Group(), ... + +class SdrInsertReason { + const SdrObject* pRefObj; + SdrInsertReasonKind eReason; +public: + SdrInsertReason(): pRefObj(NULL),eReason(SDRREASON_UNKNOWN) {} + SdrInsertReason(SdrInsertReasonKind eR,const SdrObject* pO=NULL): pRefObj(pO),eReason(eR) {} + void SetReferenceObject(const SdrObject* pO) { pRefObj=pO; } + const SdrObject* GetReferenceObject() const { return pRefObj; } + void SetReason(SdrInsertReasonKind eR) { eReason=eR; } + SdrInsertReasonKind GetReason() const { return eReason; } +}; + +////////////////////////////////////////////////////////////////////////////// +// class SdrObjList + +class SVX_DLLPUBLIC SdrObjList +{ +private: + typedef ::std::vector<SdrObject*> SdrObjectContainerType; + SdrObjectContainerType maList; + +protected: +friend class SdrObjListIter; +friend class SdrEditView; + SdrObjList* pUpList; // Vaterliste + SdrModel* pModel; // Diese Liste gehoert zu diesem Model (Layer,ItemPool,Storage). + SdrPage* pPage; // Page, in die Liste haengt. Kann auch this sein. + SdrObject* pOwnerObj; // OwnerObject, falls Liste eines GruppenObjekts. + Rectangle aOutRect; + Rectangle aSnapRect; + SdrObjListKind eListKind; + bool bObjOrdNumsDirty; + bool bRectsDirty; +protected: + virtual void RecalcRects(); + +private: + /// simple ActionChildInserted forwarder to have it on a central place + void impChildInserted(SdrObject& rChild) const; +public: + TYPEINFO(); + SdrObjList(SdrModel* pNewModel, SdrPage* pNewPage, SdrObjList* pNewUpList=NULL); + SdrObjList(const SdrObjList& rSrcList); + virtual ~SdrObjList(); + // !!! Diese Methode nur fuer Leute, die ganz genau wissen was sie tun !!! + + // #110094# This should not be needed (!) + void SetObjOrdNumsDirty() { bObjOrdNumsDirty=sal_True; } + // pModel, pPage, pUpList und pOwnerObj werden Zuweisungeoperator nicht veraendert! + void operator=(const SdrObjList& rSrcList); + void CopyObjects(const SdrObjList& rSrcList); + // alles Aufraeumen (ohne Undo) + void Clear(); + SdrObjListKind GetListKind() const { return eListKind; } + void SetListKind(SdrObjListKind eNewKind) { eListKind=eNewKind; } + SdrObjList* GetUpList() const { return pUpList; } + void SetUpList(SdrObjList* pNewUpList) { pUpList=pNewUpList; } + SdrObject* GetOwnerObj() const { return pOwnerObj; } + void SetOwnerObj(SdrObject* pNewOwner) { pOwnerObj=pNewOwner; } + virtual SdrPage* GetPage() const; + virtual void SetPage(SdrPage* pNewPage); + virtual SdrModel* GetModel() const; + virtual void SetModel(SdrModel* pNewModel); + // Neuberechnung der Objekt-Ordnungsnummern + void RecalcObjOrdNums(); + bool IsObjOrdNumsDirty() const { return bObjOrdNumsDirty; } + virtual void NbcInsertObject(SdrObject* pObj, sal_uIntPtr nPos=0xFFFF + , const SdrInsertReason* pReason=NULL + ); + virtual void InsertObject(SdrObject* pObj, sal_uIntPtr nPos=0xFFFF + , const SdrInsertReason* pReason=NULL + ); + // aus Liste entfernen ohne delete + virtual SdrObject* NbcRemoveObject(sal_uIntPtr nObjNum); + virtual SdrObject* RemoveObject(sal_uIntPtr nObjNum); + // Vorhandenes Objekt durch ein anderes ersetzen. + // Wie Remove&Insert jedoch performanter, da die Ordnungsnummern + // nicht Dirty gesetzt werden muessen. + virtual SdrObject* NbcReplaceObject(SdrObject* pNewObj, sal_uIntPtr nObjNum); + virtual SdrObject* ReplaceObject(SdrObject* pNewObj, sal_uIntPtr nObjNum); + // Die Z-Order eines Objekts veraendern + virtual SdrObject* NbcSetObjectOrdNum(sal_uIntPtr nOldObjNum, sal_uIntPtr nNewObjNum); + virtual SdrObject* SetObjectOrdNum(sal_uIntPtr nOldObjNum, sal_uIntPtr nNewObjNum); + + virtual void SetRectsDirty(); + + const Rectangle& GetAllObjSnapRect() const; + const Rectangle& GetAllObjBoundRect() const; + + // Alle Textobjekte neu formatieren, z.B. bei Druckerwechsel + void NbcReformatAllTextObjects(); + void ReformatAllTextObjects(); + + /** #103122# reformats all edge objects that are connected to other objects */ + void ReformatAllEdgeObjects(); + + // Die Vorlagenattribute der Zeichenobjekte in harte Attribute verwandeln. + void BurnInStyleSheetAttributes(); + + sal_uIntPtr GetObjCount() const; + SdrObject* GetObj(sal_uIntPtr nNum) const; + + // Gelinkte Seite oder gelinktes Gruppenobjekt + virtual bool IsReadOnly() const; + + // Zaehlt alle Objekte inkl. Objekte in Objektgruppen, ... + sal_uIntPtr CountAllObjects() const; + + // Alle aufgelagerten Teile (z.B. Grafiken) der Liste in den + // Speicher laden. + void ForceSwapInObjects() const; + void ForceSwapOutObjects() const; + + void SwapInAll() const { ForceSwapInObjects(); } + void SwapOutAll() const { ForceSwapOutObjects(); } + + /** Makes the object list flat, i.e. the object list content are + then tree leaves + + This method travels recursively over all group objects in this + list, extracts the content, inserts it flat to the list and + removes the group object afterwards. + */ + virtual void FlattenGroups(); + /** Ungroup the object at the given index + + This method ungroups the content of the group object at the + given index, i.e. the content is put flat into the object list + (if the object at the given index is no group, this method is + a no-op). If the group itself contains group objects, the + operation is performed recursively, such that the content of + the given object contains no groups afterwards. + */ + virtual void UnGroupObj( sal_uIntPtr nObjNum ); + + /** Return whether there is an explicit, user defined, object navigation + order. When there is one this method returns <TRUE/> and the + GetObjectForNavigationPosition() and + SdrObject::GetNavigationPosition() methods will return values + different from those returne by SdrObject::GetOrdNum() and + GetObj(). + */ + bool HasObjectNavigationOrder (void) const; + + /** Set the navigation position of the given object to the specified + value. Note that this changes the navigation position for all + objects on or following the old or new position. + */ + void SetObjectNavigationPosition ( + SdrObject& rObject, + const sal_uInt32 nNewNavigationPosition); + + /** Return the object for the given navigation position. When there is + a user defined navigation order, i.e. mpNavigationOrder is not NULL, + then that is used to look up the object. Otherwise the z-order is + used by looking up the object in maList. + @param nNavigationPosition + Valid values include 0 and are smaller than the number of + objects as returned by GetObjCount(). + @return + The returned pointer is NULL for invalid positions. + */ + SdrObject* GetObjectForNavigationPosition (const sal_uInt32 nNavigationPosition) const; + + /** Restore the navigation order to that defined by the z-order. + */ + void ClearObjectNavigationOrder (void); + + /** Set the navigation position of all SdrObjects to their position in + the mpNavigationOrder list. This method returns immediately when no + update is necessary. + @return + This method returns <TRUE/> when the navigation positions stored + in SdrObjects are up to date. + It returns <FALSE/> when the navigation positions are not valid, + for example because no explicit navigation order has been + defined, i.e. HasObjectNavigationOrder() would return <FALSE/>. + */ + bool RecalcNavigationPositions (void); + + /** Set the navigation order to the one defined by the given list of + XShape objects. + @param rxOrder + When this is an empty reference then the navigation order is + reset to the z-order. The preferred way to do this, however, is + to call ClearObjectNavigationOrder(). + Otherwise this list is expected to contain all the shapes in the + called SdrObjList. + */ + void SetNavigationOrder (const ::com::sun::star::uno::Reference< + ::com::sun::star::container::XIndexAccess>& rxOrder); + +private: + class WeakSdrObjectContainerType; + /// This list, if it exists, defines the navigation order. It it does + /// not exist then maList defines the navigation order. + ::boost::scoped_ptr<WeakSdrObjectContainerType> mpNavigationOrder; + + /// This flag is <TRUE/> when the mpNavigation list has been changed but + /// the indices of the referenced SdrObjects still have their old values. + bool mbIsNavigationOrderDirty; + + /** Insert an SdrObject into maList. Do not modify the maList member + directly. + @param rObject + The object to insert into the object list. + @param nInsertPosition + The given object is inserted before the object at this + position. Valid values include 0 (the object is inserted at the + head of the list) and the number of objects in the list as + returned by GetObjCount() (the object is inserted at the end of + the list.) + */ + void InsertObjectIntoContainer ( + SdrObject& rObject, + const sal_uInt32 nInsertPosition); + + /** Replace an object in the object list. + @param rObject + The new object that replaces the one in the list at the + specified position. + @param nObjectPosition + The object at this position in the object list is replaced by + the given object. Valid values include 0 and are smaller than + the number of objects in the list. + */ + void ReplaceObjectInContainer ( + SdrObject& rObject, + const sal_uInt32 nObjectPosition); + + /** Remove an object from the object list. + The object list has to contain at least one element. + @param nObjectPosition + The object at this position is removed from the object list. + Valid values include 0 and are smaller than the number of + objects in the list. + */ + void RemoveObjectFromContainer ( + const sal_uInt32 nObjectPosition); +}; + +/* +Eine Sdraw-Seite enthaelt genau eine Objektliste sowie eine Beschreibung +der physikalischen Seitendimensionen (Groesse/Raender). Letzteres wird +lediglich zum Fangen von Objekten beim Draggen benoetigt. +An der Seite lassen sich (ueber SdrObjList) Objekte einfuegen und loeschen, +nach vorn und nach hinten stellen. Ausserdem kann die Ordnungszahl eines +Objektes abgefragt sowie direkt gesetzt werden. +*/ + +// Used for all methods which return a page number +#define SDRPAGE_NOTFOUND 0xFFFF + +////////////////////////////////////////////////////////////////////////////// +// class SdrPageGridFrame + +// Fuer das Fangraster/Punkgitter im Writer +class SdrPageGridFrame +{ + Rectangle aPaper; + Rectangle aUserArea; +public: + SdrPageGridFrame(const Rectangle& rPaper): aPaper(rPaper), aUserArea(rPaper) {} + SdrPageGridFrame(const Rectangle& rPaper, const Rectangle& rUser): aPaper(rPaper), aUserArea(rUser) {} + void SetPaperRect(const Rectangle& rPaper) { aPaper=rPaper; } + void SetUserArea(const Rectangle& rUser) { aUserArea=rUser; } + const Rectangle& GetPaperRect() const { return aPaper; } + const Rectangle& GetUserArea() const { return aUserArea; } +}; + +class SVX_DLLPUBLIC SdrPageGridFrameList { + std::vector<SdrPageGridFrame*> aList; +private: + SVX_DLLPRIVATE SdrPageGridFrameList(const SdrPageGridFrameList& rSrcList); // never implemented + SVX_DLLPRIVATE void operator=(const SdrPageGridFrameList& rSrcList); // never implemented +protected: + SdrPageGridFrame* GetObject(sal_uInt16 i) const { return aList[i]; } +public: + SdrPageGridFrameList(): aList() {} + ~SdrPageGridFrameList() { Clear(); } + void Clear(); + sal_uInt16 GetCount() const { return sal_uInt16(aList.size()); } + void Insert(const SdrPageGridFrame& rGF) { aList.push_back(new SdrPageGridFrame(rGF)); } + void Insert(const SdrPageGridFrame& rGF, sal_uInt16 nPos) + { + if(nPos==0xFFFF) + aList.push_back(new SdrPageGridFrame(rGF)); + else + aList.insert(aList.begin()+nPos,new SdrPageGridFrame(rGF)); + } + void Delete(sal_uInt16 nPos) + { + SdrPageGridFrame* p = aList[nPos]; + aList.erase(aList.begin()+nPos); + delete p; + } + void Move(sal_uInt16 nPos, sal_uInt16 nNewPos) + { + SdrPageGridFrame* p = aList[nPos]; + aList.erase(aList.begin()+nPos); + aList.insert(aList.begin()+nNewPos,p); + } + SdrPageGridFrame& operator[](sal_uInt16 nPos) { return *GetObject(nPos); } + const SdrPageGridFrame& operator[](sal_uInt16 nPos) const { return *GetObject(nPos); } +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// class SdrPageProperties + +class SVX_DLLPUBLIC SdrPageProperties : public SfxListener, public svl::StyleSheetUser +{ +private: + // data + SdrPage* mpSdrPage; + SfxStyleSheet* mpStyleSheet; + SfxItemSet* mpProperties; + + // internal helpers + void ImpRemoveStyleSheet(); + void ImpAddStyleSheet(SfxStyleSheet& rNewStyleSheet); + + // not implemented + SdrPageProperties& operator=(const SdrPageProperties& rCandidate); + +public: + // construct/destruct + SdrPageProperties(SdrPage& rSdrPage); + virtual ~SdrPageProperties(); + + // Notify(...) from baseclass SfxListener + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + + virtual bool isUsedByModel() const; + + // data read/write + const SfxItemSet& GetItemSet() const; + void PutItemSet(const SfxItemSet& rSet); + void PutItem(const SfxPoolItem& rItem); + void ClearItem(const sal_uInt16 nWhich = 0); + + // StyleSheet access + void SetStyleSheet(SfxStyleSheet* pStyleSheet); + SfxStyleSheet* GetStyleSheet() const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// class SdrPage + +class SVX_DLLPUBLIC SdrPage : public SdrObjList, public tools::WeakBase< SdrPage > +{ + /////////////////////////////////////////////////////////////////////////////// + // start PageUser section +private: + // #111111# PageUser section + sdr::PageUserVector maPageUsers; + +public: + void AddPageUser(sdr::PageUser& rNewUser); + void RemovePageUser(sdr::PageUser& rOldUser); + + /////////////////////////////////////////////////////////////////////////////// + // end PageUser section + + /////////////////////////////////////////////////////////////////////////////// + // #110094# DrawContact section +private: + sdr::contact::ViewContact* mpViewContact; +protected: + virtual sdr::contact::ViewContact* CreateObjectSpecificViewContact(); +public: + sdr::contact::ViewContact& GetViewContact() const; + + // #110094# DrawContact support: Methods for handling Page changes + void ActionChanged() const; + + // #i9076# + friend class SdrModel; + friend class SvxUnoDrawPagesAccess; + +// this class uses its own UNO wrapper +// and thus has to set mxUnoPage (it also relies on mxUnoPage not being WeakRef) +friend class reportdesign::OSection; + + sal_Int32 nWdt; // Seitengroesse + sal_Int32 nHgt; // Seitengroesse + sal_Int32 nBordLft; // Seitenrand links + sal_Int32 nBordUpp; // Seitenrand oben + sal_Int32 nBordRgt; // Seitenrand rechts + sal_Int32 nBordLwr; // Seitenrand unten + +protected: + SdrLayerAdmin* pLayerAdmin; +private: + SdrPageProperties* mpSdrPageProperties; + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxUnoPage; + +public: + SdrPageProperties& getSdrPageProperties() { return *mpSdrPageProperties; } + const SdrPageProperties& getSdrPageProperties() const { return *mpSdrPageProperties; } + const SdrPageProperties* getCorrectSdrPageProperties() const; + +protected: + // new MasterPageDescriptorVector + ::sdr::MasterPageDescriptor* mpMasterPageDescriptor; + + SetOfByte aPrefVisiLayers; + sal_uInt16 nPageNum; + + // bitfield + unsigned mbMaster : 1; // flag if this is a MasterPage + unsigned mbInserted : 1; + unsigned mbObjectsNotPersistent : 1; + unsigned mbSwappingLocked : 1; + + // #i93597# + unsigned mbPageBorderOnlyLeftRight : 1; + + void SetUnoPage(::com::sun::star::uno::Reference< + ::com::sun::star::drawing::XDrawPage> const&); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > createUnoPage(); + +public: + TYPEINFO(); + SdrPage(SdrModel& rNewModel, bool bMasterPage=false); + // Copy-Ctor und Zuweisungeoperator sind nicht getestet! + SdrPage(const SdrPage& rSrcPage); + virtual ~SdrPage(); + // pModel, pPage, pUpList, pOwnerObj und mbInserted werden Zuweisungeoperator nicht veraendert! + SdrPage& operator=(const SdrPage& rSrcPage); + virtual SdrPage* Clone() const; + virtual SdrPage* Clone(SdrModel* pNewModel) const; + bool IsMasterPage() const { return mbMaster; } + void SetInserted(bool bNew = true); + bool IsInserted() const { return mbInserted; } + virtual void SetChanged(); + + // #i68775# React on PageNum changes (from Model in most cases) + void SetPageNum(sal_uInt16 nNew); + sal_uInt16 GetPageNum() const; + + // #i93597# Allow page border definition to not be the full rectangle but to + // use only the left and right vertical edges (reportdesigner) + void setPageBorderOnlyLeftRight(bool bNew) { mbPageBorderOnlyLeftRight = bNew; } + bool getPageBorderOnlyLeftRight() const { return mbPageBorderOnlyLeftRight; } + + virtual void SetSize(const Size& aSiz); + virtual Size GetSize() const; + virtual void SetOrientation(Orientation eOri); + virtual Orientation GetOrientation() const; + virtual sal_Int32 GetWdt() const; + virtual sal_Int32 GetHgt() const; + virtual void SetBorder(sal_Int32 nLft, sal_Int32 nUpp, sal_Int32 nRgt, sal_Int32 Lwr); + virtual void SetLftBorder(sal_Int32 nBorder); + virtual void SetUppBorder(sal_Int32 nBorder); + virtual void SetRgtBorder(sal_Int32 nBorder); + virtual void SetLwrBorder(sal_Int32 nBorder); + virtual sal_Int32 GetLftBorder() const; + virtual sal_Int32 GetUppBorder() const; + virtual sal_Int32 GetRgtBorder() const; + virtual sal_Int32 GetLwrBorder() const; + + virtual void SetModel(SdrModel* pNewModel); + + // New MasterPage interface + sal_Bool TRG_HasMasterPage() const { return (0L != mpMasterPageDescriptor); } + void TRG_SetMasterPage(SdrPage& rNew); + void TRG_ClearMasterPage(); + SdrPage& TRG_GetMasterPage() const; + const SetOfByte& TRG_GetMasterPageVisibleLayers() const; + void TRG_SetMasterPageVisibleLayers(const SetOfByte& rNew); + sdr::contact::ViewContact& TRG_GetMasterPageDescriptorViewContact() const; + +protected: + void TRG_ImpMasterPageRemoved(const SdrPage& rRemovedPage); +public: + + // Aenderungen an den Layern setzen nicht das Modified-Flag ! + const SdrLayerAdmin& GetLayerAdmin() const { return *pLayerAdmin; } + SdrLayerAdmin& GetLayerAdmin() { return *pLayerAdmin; } + + virtual OUString GetLayoutName() const; + + // fuer's Raster im Writer, auch fuer AlignObjects wenn 1 Objekt markiert ist + // wenn pRect!=NULL, dann die Seiten, die von diesem Rect intersected werden + // ansonsten die sichtbaren Seiten. + virtual const SdrPageGridFrameList* GetGridFrameList(const SdrPageView* pPV, const Rectangle* pRect) const; + bool IsObjectsNotPersistent() const { return mbObjectsNotPersistent; } + void SetObjectsNotPersistent(bool b) { mbObjectsNotPersistent = b; } + // Durch Setzen dieses Flags, kann das Auslagern (Swappen) von + // Teilen der Page (z.B. Grafiken) unterbunden werden. + // Es werden hierdurch jedoch nicht automatisch alle ausgelagerten + // Teile nachgeladen, dies geschieht erst bei konkretem Bedarf oder + // durch Aufruf von SwapInAll(). + // Fuer die MasterPage(s) der Page muss dies ggf. separat gemacht werden. + bool IsSwappingLocked() const { return mbSwappingLocked; } + void SetSwappingLocked(bool bLock) { mbSwappingLocked = bLock; } + + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoPage(); + + virtual SfxStyleSheet* GetTextStyleSheetForObject( SdrObject* pObj ) const; + + /** *deprecated* returns an averaged background color of this page */ + // #i75566# GetBackgroundColor -> GetPageBackgroundColor + Color GetPageBackgroundColor() const; + + /** *deprecated* returns an averaged background color of this page */ + // #i75566# GetBackgroundColor -> GetPageBackgroundColor and bScreenDisplay hint value + Color GetPageBackgroundColor( SdrPageView* pView, bool bScreenDisplay = true) const; + + /** this method returns true if the object from the ViewObjectContact should + be visible on this page while rendering. + bEdit selects if visibility test is for an editing view or a final render, + like printing. + */ + virtual bool checkVisibility( + const sdr::contact::ViewObjectContact& rOriginal, + const sdr::contact::DisplayInfo& rDisplayInfo, + bool bEdit ); +}; + +typedef tools::WeakReference< SdrPage > SdrPageWeakRef; + +////////////////////////////////////////////////////////////////////////////// +// use new redirector instead of pPaintProc + +class SVX_DLLPUBLIC StandardCheckVisisbilityRedirector : public ::sdr::contact::ViewObjectContactRedirector +{ +public: + StandardCheckVisisbilityRedirector(); + virtual ~StandardCheckVisisbilityRedirector(); + + // all default implementations just call the same methods at the original. To do something + // different, overload the method and at least do what the method does. + virtual drawinglayer::primitive2d::Primitive2DSequence createRedirectedPrimitive2DSequence( + const sdr::contact::ViewObjectContact& rOriginal, + const sdr::contact::DisplayInfo& rDisplayInfo); +}; + +////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDPAGE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdpagv.hxx b/include/svx/svdpagv.hxx new file mode 100644 index 000000000000..b43db7da37ed --- /dev/null +++ b/include/svx/svdpagv.hxx @@ -0,0 +1,268 @@ +/* -*- 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 _SVDPAGV_HXX +#define _SVDPAGV_HXX + +#include <com/sun/star/awt/XControlContainer.hpp> +#include <svl/lstner.hxx> +#include <svx/svdhlpln.hxx> +#include <cppuhelper/implbase4.hxx> +#include <svx/svdsob.hxx> +#include <svx/svdtypes.hxx> +#include "svx/svxdllapi.h" + +#include <cppuhelper/implbase3.hxx> +#include <vector> +#include <basegfx/polygon/b2dpolypolygon.hxx> + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class Region; +class SdrObjList; +class SdrObject; +class SdrPage; +class SdrUnoObj; +class SdrPaintWindow; +class SdrView; +class SdrPageObj; +class SdrPageView; + +// #110094# +namespace sdr +{ + namespace contact + { + class ViewObjectContactRedirector; + class DisplayInfo; + class ViewObjectContactRedirector; + } // end of namespace contact +} // end of namespace sdr + +// typedefs for a list of SdrPageWindow +class SdrPageWindow; +typedef ::std::vector< SdrPageWindow* > SdrPageWindowVector; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrPageView +{ +private: + SdrView& mrView; + SdrPage* mpPage; + Point aPgOrg; // Nullpunkt der Page + + Rectangle aMarkBound; // wird + Rectangle aMarkSnap; // von + sal_Bool mbHasMarked; + sal_Bool mbVisible; + + SetOfByte aLayerVisi; // Menge der sichtbaren Layer + SetOfByte aLayerLock; // Menge der nicht editierbaren Layer + SetOfByte aLayerPrn; // Menge der druckbaren Layer + + SdrObjList* pAktList; // Aktuelle Liste, in der Regel die Page. + SdrObject* pAktGroup; // Aktuelle Gruppe. NULL=Keine. + + SdrHelpLineList aHelpLines; // Hilfslinien und -punkte + + // #103911# Use one reserved slot (bReserveBool2) for the document color + Color maDocumentColor; + + // #103834# Use one reserved slot (bReserveBool1) for the background color + Color maBackgroundColor; + + SdrPageWindowVector maPageWindows; + + // #i72752# member to remember with which SdrPageWindow the BeginDrawLayer + // was done + SdrPageWindow* mpPreparedPageWindow; + + // interface to SdrPageWindow +private: + void ClearPageWindows(); + void AppendPageWindow(SdrPageWindow& rNew); + SdrPageWindow* RemovePageWindow(SdrPageWindow& rOld); +public: + sal_uInt32 PageWindowCount() const { return maPageWindows.size(); } + SdrPageWindow* FindPageWindow( SdrPaintWindow& rPaintWindow ) const; + SdrPageWindow* FindPageWindow( const OutputDevice& rOutDev ) const; + SdrPageWindow* GetPageWindow(sal_uInt32 nIndex) const; + + /** finds the page window whose PaintWindow belongs to the given output device + + In opposite to FindPageWindow, this method also cares possibly patched PaintWindow instances. + That is, a SdrPageWindow might have an original, and a patched SdrPaintWindow instance - if + this is the case, then the original SdrPaintWindow is examined before the patched one. + */ + const SdrPageWindow* FindPatchedPageWindow( const OutputDevice& rOutDev ) const; + +private: + SVX_DLLPRIVATE SdrPageWindow& CreateNewPageWindowEntry(SdrPaintWindow& rPaintWindow); + + void ImpInvalidateHelpLineArea(sal_uInt16 nNum) const; + + void SetLayer(const String& rName, SetOfByte& rBS, sal_Bool bJa); + sal_Bool IsLayer(const String& rName, const SetOfByte& rBS) const; + + // Nachsehen, ob AktGroup noch Inserted ist. + void CheckAktGroup(); + + void AdjHdl(); + +public: + SdrPageView(SdrPage* pPage1, SdrView& rNewView); + ~SdrPageView(); + + // Wird von der PaintView gerufen, wenn Modelaenderungen abgeschlossen sind + void ModelHasChanged(); + + void Show(); + void Hide(); + + void AddPaintWindowToPageView(SdrPaintWindow& rPaintWindow); + void RemovePaintWindowFromPageView(SdrPaintWindow& rPaintWindow); + + SdrView& GetView() { return mrView; } + const SdrView& GetView() const { return mrView; } + + /** looks up the control container belonging to given output device + + @return + If the given output device belongs to one of the SdrPageViewWinRecs associated with this + SdrPageView instance, the XControlContainer for this output device is returned, <NULL/> + otherwise. + */ + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > + GetControlContainer( const OutputDevice& _rDevice ) const; + + /** sets all elements in the view which support a design and a alive mode into the given mode + */ + void SetDesignMode( bool _bDesignMode ) const; + + sal_Bool IsVisible() const { return mbVisible; } + + // Invalidiert den gesamten Bereich der Page + void InvalidateAllWin(); + + // PrePaint call forwarded from app windows + void PrePaint(); + + // rReg bezieht sich auf's OutDev, nicht auf die Page + void CompleteRedraw(SdrPaintWindow& rPaintWindow, const Region& rReg, sdr::contact::ViewObjectContactRedirector* pRedirector = 0L) const; + + // write access to mpPreparedPageWindow + void setPreparedPageWindow(SdrPageWindow* pKnownTarget); + + void DrawLayer(SdrLayerID nID, OutputDevice* pGivenTarget = 0, sdr::contact::ViewObjectContactRedirector* pRedirector = 0L, + const Rectangle& rRect = Rectangle()) const; + void DrawPageViewGrid(OutputDevice& rOut, const Rectangle& rRect, Color aColor = Color( COL_BLACK ) ); + + Rectangle GetPageRect() const; + SdrPage* GetPage() const { return mpPage; } + + // Betretene Liste rausreichen + SdrObjList* GetObjList() const { return pAktList; } + + // Betretene Gruppe rausreichen + SdrObject* GetAktGroup() const { return pAktGroup; } + + // Betretene Gruppe und Liste setzen + void SetAktGroupAndList(SdrObject* pNewGroup, SdrObjList* pNewList); + + sal_Bool HasMarkedObjPageView() const { return mbHasMarked; } + void SetHasMarkedObj(sal_Bool bOn) { mbHasMarked = bOn; } + + const Rectangle& MarkBound() const { return aMarkBound; } + const Rectangle& MarkSnap() const { return aMarkSnap; } + Rectangle& MarkBound() { return aMarkBound; } + Rectangle& MarkSnap() { return aMarkSnap; } + + void SetLayerVisible(const String& rName, sal_Bool bShow = sal_True) { SetLayer(rName, aLayerVisi, bShow); if(!bShow) AdjHdl(); InvalidateAllWin(); } + sal_Bool IsLayerVisible(const String& rName) const { return IsLayer(rName, aLayerVisi); } + + void SetLayerLocked(const String& rName, sal_Bool bLock = sal_True) { SetLayer(rName, aLayerLock, bLock); if(bLock) AdjHdl(); } + sal_Bool IsLayerLocked(const String& rName) const { return IsLayer(rName,aLayerLock); } + + void SetLayerPrintable(const String& rName, sal_Bool bPrn = sal_True) { SetLayer(rName, aLayerPrn, bPrn); } + sal_Bool IsLayerPrintable(const String& rName) const { return IsLayer(rName, aLayerPrn); } + + // PV stellt eine RefPage oder eine SubList eines RefObj dar oder Model ist ReadOnly + sal_Bool IsReadOnly() const; + + // der Origin bezieht sich immer auf die obere linke Ecke der Page + const Point& GetPageOrigin() const { return aPgOrg; } + void SetPageOrigin(const Point& rOrg); + + void LogicToPagePos(Point& rPnt) const { rPnt-=aPgOrg; } + void LogicToPagePos(Rectangle& rRect) const { rRect.Move(-aPgOrg.X(),-aPgOrg.Y()); } + void PagePosToLogic(Point& rPnt) const { rPnt+=aPgOrg; } + void PagePosToLogic(Rectangle& rRect) const { rRect.Move(aPgOrg.X(),aPgOrg.Y()); } + + void SetVisibleLayers(const SetOfByte& rSet) { aLayerVisi=rSet; InvalidateAllWin(); } + const SetOfByte& GetVisibleLayers() const { return aLayerVisi; } + void SetPrintableLayers(const SetOfByte& rSet) { aLayerPrn=rSet; } + const SetOfByte& GetPrintableLayers() const { return aLayerPrn; } + void SetLockedLayers(const SetOfByte& rSet) { aLayerLock=rSet; } + const SetOfByte& GetLockedLayers() const { return aLayerLock; } + + const SdrHelpLineList& GetHelpLines() const { return aHelpLines; } + void SetHelpLines(const SdrHelpLineList& rHLL); + //void SetHelpLinePos(sal_uInt16 nNum, const Point& rNewPos); + void SetHelpLine(sal_uInt16 nNum, const SdrHelpLine& rNewHelpLine); + void DeleteHelpLine(sal_uInt16 nNum); + void InsertHelpLine(const SdrHelpLine& rHL, sal_uInt16 nNum=0xFFFF); + void MoveHelpLine(sal_uInt16 nNum, sal_uInt16 nNewNum) { aHelpLines.Move(nNum,nNewNum); } + + // Liefert sal_True, wenn Layer des Obj sichtbar und nicht gesperrt. + // Beim Gruppenobjekt muss wenigstens ein Member sichtbar sein, + // gesperrt sein darf keiner. + sal_Bool IsObjMarkable(SdrObject* pObj) const; + + // Betreten (Editieren) einer Objektgruppe. Anschliessend liegen alle + // Memberobjekte der Gruppe im direkten Zugriff. Alle anderen Objekte + // koennen waerendessen nicht bearbeitet werden (bis zum naechsten + // LeaveGroup()). (wie MsDos chdir bla). + sal_Bool EnterGroup(SdrObject* pObj); + + // Verlassen einer betretenen Objektgruppe. (wie MsDos chdir ..) + void LeaveOneGroup(); + + // Verlassen aller betretenen Objektgruppen. (wie MsDos chdir \) + void LeaveAllGroup(); + + // Feststellen, wie weit hinabgestiegen wurde (0=Root(Page)) + sal_uInt16 GetEnteredLevel() const; + + // #103834# Set background color for svx at SdrPageViews + void SetApplicationBackgroundColor(Color aBackgroundColor); + + // #109585# + Color GetApplicationBackgroundColor() const; + + // #103911# Set/Get document color for svx at SdrPageViews + void SetApplicationDocumentColor(Color aDocumentColor); + Color GetApplicationDocumentColor() const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDPAGV_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdpntv.hxx b/include/svx/svdpntv.hxx new file mode 100644 index 000000000000..2e9bc2534adb --- /dev/null +++ b/include/svx/svdpntv.hxx @@ -0,0 +1,554 @@ +/* -*- 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 _SVDPNTV_HXX +#define _SVDPNTV_HXX + +#include <svl/brdcst.hxx> +#include <svl/lstner.hxx> +#include <svl/smplhint.hxx> +#include <svl/undo.hxx> +#include <svx/svddrag.hxx> +#include <svx/svdlayer.hxx> // fuer SetOfByte +#include <vcl/window.hxx> +#include <svtools/colorcfg.hxx> +#include <com/sun/star/awt/XControlContainer.hpp> +#include <svl/itemset.hxx> +#include <vcl/timer.hxx> +#include "svx/svxdllapi.h" +#include <svtools/optionsdrawinglayer.hxx> +#include <unotools/options.hxx> + +//************************************************************ +// Pre-Defines +//************************************************************ + +class SdrPageWindow; + +namespace com { namespace sun { namespace star { namespace awt { + class XControlContainer; +}}}} + +class SdrPage; +class SdrView; +class SfxItemSet; +class SfxStyleSheet; +class SdrOle2Obj; +class SdrModel; +class SdrObject; + +#ifdef DBG_UTIL +class SdrItemBrowser; +#endif + +namespace sdr { namespace contact { + class ViewObjectContactRedirector; +}} + +//************************************************************ +// Defines for AnimationMode +//************************************************************ + +enum SdrAnimationMode +{ + SDR_ANIMATION_ANIMATE, + SDR_ANIMATION_DONT_ANIMATE, + SDR_ANIMATION_DISABLE +}; + +//************************************************************ +// Typedef's und defines +//************************************************************ + +typedef unsigned char TRISTATE; +#define FUZZY (2) +#define SDR_ANYFORMAT (0xFFFFFFFF) +#define SDR_ANYITEM (0xFFFF) +#define SDRVIEWWIN_NOTFOUND (0xFFFF) + + +//////////////////////////////////////////////////////////////////////////////////////////////////// +class SdrPaintView; + +namespace sdr +{ + namespace contact + { + class ViewObjectContactRedirector; + } // end of namespace contact +} // end of namespace sdr + +//////////////////////////////////////////////////////////////////////////////////////////////////// + + +class SVX_DLLPUBLIC SvxViewHint : public SfxHint +{ +public: + enum HintType { SVX_HINT_VIEWCHANGED }; + TYPEINFO(); + explicit SvxViewHint (HintType eType); + HintType GetHintType (void) const; + +private: + HintType meHintType; +}; + +// typedefs for a list of SdrPaintWindows +class SdrPaintWindow; +typedef ::std::vector< SdrPaintWindow* > SdrPaintWindowVector; + +////////////////////////////////////////////////////////////////////////////// +// helper to convert any GDIMetaFile to a good quality BitmapEx, +// using default parameters and graphic::XPrimitive2DRenderer + +BitmapEx SVX_DLLPUBLIC convertMetafileToBitmapEx( + const GDIMetaFile& rMtf, + const basegfx::B2DRange& rTargetRange, + const sal_uInt32 nMaximumQuadraticPixels = 500000); + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrPaintView : public SfxListener, public SfxRepeatTarget, public SfxBroadcaster, public ::utl::ConfigurationListener +{ + friend class SdrPageView; + friend class SdrGrafObj; + + SdrPageView* mpPageView; +protected: + SdrModel* pMod; +#ifdef DBG_UTIL + SdrItemBrowser* pItemBrowser; +#endif + const OutputDevice* pActualOutDev; // Nur zum vergleichen + OutputDevice* pDragWin; + SfxStyleSheet* pDefaultStyleSheet; + + String aAktLayer; // Aktueller Zeichenlayer + String aMeasureLayer; // Aktueller Layer fuer Bemassung + +// Container aPagV; // Liste von SdrPageViews + + // All windows this view is displayed on + SdrPaintWindowVector maPaintWindows; + + MapMode aActualMapMode; + Size aGridBig; // muss dann mal raus + Size aGridFin; // muss dann mal raus + SdrDragStat aDragStat; + Rectangle aMaxWorkArea; + SfxItemSet aDefaultAttr; + Timer aComeBackTimer; + + SdrAnimationMode eAnimationMode; + + sal_uInt16 nHitTolPix; + sal_uInt16 nMinMovPix; + sal_uInt16 nHitTolLog; + sal_uInt16 nMinMovLog; + sal_uIntPtr nMasterCacheMode; + sal_uIntPtr nGraphicManagerDrawMode; + + // hold an incarnation of Drawinglayer configuration options + SvtOptionsDrawinglayer maDrawinglayerOpt; + + unsigned bPageVisible : 1; + unsigned bPageBorderVisible : 1; + unsigned bBordVisible : 1; + unsigned bGridVisible : 1; + unsigned bGridFront : 1; + unsigned bHlplVisible : 1; + unsigned bHlplFront : 1; + unsigned bGlueVisible : 1; // Persistent. Klebepunkte anzeigen + unsigned bGlueVisible2 : 1; // Klebepunkte auch bei GluePointEdit anzeigen + unsigned bGlueVisible3 : 1; // Klebepunkte auch bei EdgeTool anzeigen + unsigned bGlueVisible4 : 1; // Klebepunkte anzeigen, wenn 1 Edge markiert + unsigned bRestoreColors : 1; // Pens und Brushes werden zurueckgesetzt. + unsigned bSomeObjChgdFlag : 1; + unsigned bSwapAsynchron : 1; + unsigned bPrintPreview : 1; + + // sal_Bool fuer die Verwaltung des anzuzeigenden Status + // Gruppe Betreten/Verlassen. Default ist sal_True, wird aber + // beispielsweise beim Chart auf sal_False gesetzt, da dort + // die Ghosted-Effekte zur Darstellug unerwuenscht sind. + unsigned bVisualizeEnteredGroup : 1; + unsigned bAnimationPause : 1; + + // #114898# + // Flag which decides if buffered output for this view is allowed. When + // set, PreRendering for PageView rendering will be used. Default is sal_False + unsigned mbBufferedOutputAllowed : 1; + + // #114898# + // Flag which decides if buffered overlay for this view is allowed. When + // set, the output will be buffered in an overlay vdev. When not, overlay is + // directly painted to OutDev. Default is sal_False. + unsigned mbBufferedOverlayAllowed : 1; + + // allow page painting at all? + unsigned mbPagePaintingAllowed : 1; + + // is this a preview renderer? + unsigned mbPreviewRenderer : 1; + + // flags for calc and sw for suppressing OLE, CHART or DRAW objects + unsigned mbHideOle : 1; + unsigned mbHideChart : 1; + unsigned mbHideDraw : 1; // hide draw objects other than form controls + unsigned mbHideFormControl : 1; // hide form controls only + +public: + // #114898# + // interface for PagePaintingAllowed flag + bool IsBufferedOutputAllowed() const; + void SetBufferedOutputAllowed(bool bNew); + + // interface for BufferedOverlayAllowed flag + bool IsBufferedOverlayAllowed() const; + void SetBufferedOverlayAllowed(bool bNew); + + // allow page painting at all? + sal_Bool IsPagePaintingAllowed() const; + void SetPagePaintingAllowed(bool bNew); + +protected: + svtools::ColorConfig maColorConfig; + Color maGridColor; + + // interface to SdrPaintWindow +protected: + void AppendPaintWindow(SdrPaintWindow& rNew); + SdrPaintWindow* RemovePaintWindow(SdrPaintWindow& rOld); + void ConfigurationChanged( ::utl::ConfigurationBroadcaster*, sal_uInt32 ); + +public: + sal_uInt32 PaintWindowCount() const { return maPaintWindows.size(); } + SdrPaintWindow* FindPaintWindow(const OutputDevice& rOut) const; + SdrPaintWindow* GetPaintWindow(sal_uInt32 nIndex) const; + // replacement for GetWin(0), may return 0L (!) + OutputDevice* GetFirstOutputDevice() const; + +private: + SVX_DLLPRIVATE void ImpClearVars(); + DECL_LINK(ImpComeBackHdl,void*); + +protected: + sal_uInt16 ImpGetMinMovLogic(short nMinMov, const OutputDevice* pOut) const; + sal_uInt16 ImpGetHitTolLogic(short nHitTol, const OutputDevice* pOut) const; + + // Wenn man den IdleStatus des Systems nicht abwarten will (auf const geschummelt): + void FlushComeBackTimer() const; + void TheresNewMapMode(); + void ImpSetGlueVisible2(bool bOn) { if (bGlueVisible2!=(unsigned)bOn) { bGlueVisible2=bOn; if (!bGlueVisible && !bGlueVisible3 && !bGlueVisible4) GlueInvalidate(); } } + void ImpSetGlueVisible3(bool bOn) { if (bGlueVisible3!=(unsigned)bOn) { bGlueVisible3=bOn; if (!bGlueVisible && !bGlueVisible2 && !bGlueVisible4) GlueInvalidate(); } } + void ImpSetGlueVisible4(bool bOn) { if (bGlueVisible4!=(unsigned)bOn) { bGlueVisible4=bOn; if (!bGlueVisible && !bGlueVisible2 && !bGlueVisible3) GlueInvalidate(); } } + sal_Bool ImpIsGlueVisible2() const { return bGlueVisible2; } + sal_Bool ImpIsGlueVisible3() const { return bGlueVisible3; } + sal_Bool ImpIsGlueVisible4() const { return bGlueVisible4; } + +public: + sal_Bool ImpIsGlueVisible() { return bGlueVisible || bGlueVisible2 || bGlueVisible3 || bGlueVisible4; } +protected: + + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + void GlueInvalidate() const; + + void ShowEncirclement(OutputDevice* pOut); + void HideEncirclement(OutputDevice* pOut); + void DrawEncirclement(OutputDevice* pOut) const; + + // ModelHasChanged wird gerufen, sobald nach beliebig vielen HINT_OBJCHG + // das System wieder idle ist (StarView-Timer). Wer diese Methode ueberlaed, + // muss unbedingt ModelHasChanged() der Basisklasse rufen. + virtual void ModelHasChanged(); + +protected: + // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView + SdrPaintView(SdrModel* pModel1, OutputDevice* pOut = 0L); + virtual ~SdrPaintView(); + +public: + TYPEINFO(); + + virtual void ClearPageView(); + SdrModel* GetModel() const { return pMod; } + + virtual sal_Bool IsAction() const; + virtual void MovAction(const Point& rPnt); + virtual void EndAction(); + virtual void BckAction(); + virtual void BrkAction(); // Alle Actions z.B. Draggen abbrechen. + virtual void TakeActionRect(Rectangle& rRect) const; + + // info about TextEdit. Default is sal_False. + virtual bool IsTextEdit() const; + + // info about TextEditPageView. Default is 0L. + virtual SdrPageView* GetTextEditPageView() const; + + // Muss dann bei jedem Fensterwechsel (wenn die SdrView in mehreren + // Fenstern gleichzeitig dargestellt wird (->z.B. Splitter)) und bei + // jedem MapMode(Scaling)-wechsel gerufen werden, damit ich aus meinen + // Pixelwerten logische Werte berechnen kann. + void SetActualWin(const OutputDevice* pWin); + void SetMinMoveDistancePixel(sal_uInt16 nVal) { nMinMovPix=nVal; TheresNewMapMode(); } + sal_uInt16 GetMinMoveDistancePixel() const { return (sal_uInt16)nMinMovPix; } + void SetHitTolerancePixel(sal_uInt16 nVal) { nHitTolPix=nVal; TheresNewMapMode(); } + sal_uInt16 GetHitTolerancePixel() const { return (sal_uInt16)nHitTolPix; } + + // data read access on logic HitTolerance and MinMoveTolerance + sal_uInt16 getHitTolLog() const { return nHitTolLog; } + sal_uInt16 getMinMovLog() const { return nMinMovLog; } + + // Flag zur Visualisierung von Gruppen abfragen/testen + sal_Bool DoVisualizeEnteredGroup() const { return bVisualizeEnteredGroup; } + void SetVisualizeEnteredGroup(sal_Bool bNew) { bVisualizeEnteredGroup = bNew; } + + // Am DragStatus laesst sich beispielsweise erfragen, welche + // entfernung bereits gedraggd wurde, etc. + const SdrDragStat& GetDragStat() const { return aDragStat; } + + // Anmelden/Abmelden einer PageView an der View. + // Dieselbe // Seite kann nicht mehrfach angemeldet werden. + // Methoden mit dem Suffix PgNum erwarten als numerischen Parameter + // eine Seitennummer (0...). Methoden mit dem Suffix PvNum erwarten + // degagen als numerischen Parameter die Nummer der PageView an der + // SdrView (Iterieren ueber alle angemeldeten Pages). + virtual SdrPageView* ShowSdrPage(SdrPage* pPage); + virtual void HideSdrPage(); + + // Iterieren ueber alle angemeldeten PageViews +// sal_uInt16 GetPageViewCount() const { return sal_uInt16(aPagV.Count()); } +// SdrPageView* GetPageViewByIndex(sal_uInt16 nPvNum) const { return ((SdrPageView*)aPagV.GetObject(nPvNum)); } + SdrPageView* GetSdrPageView() const { return mpPageView; } + + // Pageview einer bestimmten Seite ermitteln +// SdrPageView* GetPageViewByPage(const SdrPage* pPage) const; +// sal_uInt16 GetIndexByPageView(const SdrPageView* pPV) const; + + // Test, ob eine Seite getroffen +// SdrPageView* HitPage(const Point& rPnt) const; + + // Die Seite, die dem Punkt am naechsten ist. Liefert nur NULL, + // wenn absolut keine Seite angemeldet ist. +// SdrPageView* GetPageViewByPosition(const Point& rPnt) const; + + // Eine SdrView kann auf mehreren Fenstern gleichzeitig abgebiltet sein: + virtual void AddWindowToPaintView(OutputDevice* pNewWin); + virtual void DeleteWindowFromPaintView(OutputDevice* pOldWin); + + void SetLayerVisible(const String& rName, sal_Bool bShow=sal_True); + bool IsLayerVisible(const String& rName) const; + + void SetLayerLocked(const String& rName, sal_Bool bLock=sal_True); + bool IsLayerLocked(const String& rName) const; + + void SetLayerPrintable(const String& rName, sal_Bool bPrn=sal_True); + bool IsLayerPrintable(const String& rName) const; + + // PrePaint call forwarded from app windows + void PrePaint(); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // used internally for Draw/Impress/sch/chart2 + virtual void CompleteRedraw(OutputDevice* pOut, const Region& rReg, sdr::contact::ViewObjectContactRedirector* pRedirector = 0); + + // #i72889# used from CompleteRedraw() implementation internally, added to be able to do a complete redraw in single steps + // + // BeginCompleteRedraw returns (or even creates) a SdrPaintWindow which shall then be used as + // target for paints. Since paints may be buffered, use it's GetTargetOutputDevice() method which will + // return the buffer in case of bufered. + // DoCompleteRedraw draws the DrawingLayer hierarchy then. + // EndCompleteRedraw does the necessary refreshes, evtl. paints text edit and overlay and evtl destroys the + // SdrPaintWindow again. This means: the SdrPaintWindow is no longer safe after this closing call. + virtual SdrPaintWindow* BeginCompleteRedraw(OutputDevice* pOut); + virtual void DoCompleteRedraw(SdrPaintWindow& rPaintWindow, const Region& rReg, sdr::contact::ViewObjectContactRedirector* pRedirector = 0); + virtual void EndCompleteRedraw(SdrPaintWindow& rPaintWindow, bool bPaintFormLayer); + + //////////////////////////////////////////////////////////////////////////////////////////////////// + // used for the other applications basctl/sc/sw which call DrawLayer at PageViews + // #i74769# Interface change to use common BeginCompleteRedraw/EndCompleteRedraw + // #i76114# bDisableIntersect disables intersecting rReg with the Window's paint region + SdrPaintWindow* BeginDrawLayers(OutputDevice* pOut, const Region& rReg, bool bDisableIntersect = false); + // used when the region passed to BeginDrawLayers needs to be changed + void UpdateDrawLayersRegion(OutputDevice* pOut, const Region& rReg, bool bDisableIntersect = false); + void EndDrawLayers(SdrPaintWindow& rPaintWindow, bool bPaintFormLayer); + +protected: + //////////////////////////////////////////////////////////////////////////////////////////////////// + // used to paint the form layer after the PreRender device is flushed (painted) to the window. + void ImpFormLayerDrawing(SdrPaintWindow& rPaintWindow) const; + + Region OptimizeDrawLayersRegion(OutputDevice* pOut, const Region& rReg, bool bDisableIntersect); + +public: + sal_Bool IsPageVisible() const { return bPageVisible; } // Seite (weisse Flaeche) malen oder nicht + sal_Bool IsPageBorderVisible() const { return bPageBorderVisible; } // Seite (weisse Flaeche) malen oder nicht + sal_Bool IsBordVisible() const { return bBordVisible; } // Seitenrandlinie malen oder nicht + sal_Bool IsGridVisible() const { return bGridVisible; } // Rastergitter malen oder nicht + sal_Bool IsGridFront() const { return bGridFront ; } // Rastergitter ueber die Objekte druebermalen oder dahinter + sal_Bool IsHlplVisible() const { return bHlplVisible; } // Hilfslinien der Seiten malen oder nicht + sal_Bool IsHlplFront() const { return bHlplFront ; } // Hilfslinie ueber die Objekte druebermalen oder dahinter + sal_Bool IsGlueVisible() const { return bGlueVisible; } // Konnektoren der objekte sichtbar oder nicht + Color GetGridColor() const; + void SetPageVisible(bool bOn = true) { bPageVisible=bOn; InvalidateAllWin(); } + void SetPageBorderVisible(bool bOn = true) { bPageBorderVisible=bOn; InvalidateAllWin(); } + void SetBordVisible(bool bOn = true) { bBordVisible=bOn; InvalidateAllWin(); } + void SetGridVisible(bool bOn = true) { bGridVisible=bOn; InvalidateAllWin(); } + void SetGridFront(bool bOn = true) { bGridFront =bOn; InvalidateAllWin(); } + void SetHlplVisible(bool bOn = true) { bHlplVisible=bOn; InvalidateAllWin(); } + void SetHlplFront(bool bOn = true) { bHlplFront =bOn; InvalidateAllWin(); } + void SetGlueVisible(bool bOn = true) { if (bGlueVisible!=(unsigned)bOn) { bGlueVisible=bOn; if (!bGlueVisible2 && !bGlueVisible3 && !bGlueVisible4) GlueInvalidate(); } } + void SetGridColor( Color aColor ); + + sal_Bool IsPreviewRenderer() const { return (sal_Bool )mbPreviewRenderer; } + void SetPreviewRenderer(bool bOn) { if((unsigned)bOn != mbPreviewRenderer) { mbPreviewRenderer=bOn; }} + + // access methods for calc and sw hide object modes + bool getHideOle() const { return mbHideOle; } + bool getHideChart() const { return mbHideChart; } + bool getHideDraw() const { return mbHideDraw; } + bool getHideFormControl() const { return mbHideFormControl; } + void setHideOle(bool bNew) { if(bNew != (bool)mbHideOle) mbHideOle = bNew; } + void setHideChart(bool bNew) { if(bNew != (bool)mbHideChart) mbHideChart = bNew; } + void setHideDraw(bool bNew) { if(bNew != (bool)mbHideDraw) mbHideDraw = bNew; } + void setHideFormControl(bool bNew) { if(bNew != (bool)mbHideFormControl) mbHideFormControl = bNew; } + + void SetGridCoarse(const Size& rSiz) { aGridBig=rSiz; } + void SetGridFine(const Size& rSiz) { aGridFin=rSiz; if (aGridFin.Height()==0) aGridFin.Height()=aGridFin.Width(); if (bGridVisible) InvalidateAllWin(); } // #40479# + const Size& GetGridCoarse() const { return aGridBig; } + const Size& GetGridFine() const { return aGridFin; } + + void InvalidateAllWin(); + void InvalidateAllWin(const Rectangle& rRect, sal_Bool bPlus1Pix=sal_False); + + // Wenn die View kein Invalidate() an den Fenstern durchfuehren soll, muss + // man diese beiden folgenden Methoden ueberladen und entsprechend anders + // reagieren. + virtual void InvalidateOneWin(Window& rWin); + virtual void InvalidateOneWin(Window& rWin, const Rectangle& rRect); + + void SetActiveLayer(const String& rName) { aAktLayer=rName; } + const String& GetActiveLayer() const { return aAktLayer; } + + // Verlassen einer betretenen Objektgruppe aller sichtbaren Seiten. + // (wie MsDos chdir ..) + void LeaveOneGroup(); + + // Verlassen aller betretenen Objektgruppen aller sichtbaren Seiten. + // (wie MsDos chdir \) + void LeaveAllGroup(); + + // Feststellen, ob Leave sinnvoll ist. + bool IsGroupEntered() const; + + // DefaultAttribute an der View: Neu erzeugte Objekte bekommen diese + // Attribute direkt nach dem Erzeugen erstmal zugewiesen. + void SetDefaultAttr(const SfxItemSet& rAttr, sal_Bool bReplaceAll); + const SfxItemSet& GetDefaultAttr() const { return aDefaultAttr; } + void SetDefaultStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr); + SfxStyleSheet* GetDefaultStyleSheet() const { return pDefaultStyleSheet; } + + void SetNotPersistDefaultAttr(const SfxItemSet& rAttr, sal_Bool bReplaceAll); + void MergeNotPersistDefaultAttr(SfxItemSet& rAttr, sal_Bool bOnlyHardAttr) const; + + // use this mode as mode to draw all internal GraphicManager objects with + sal_uIntPtr GetGraphicManagerDrawMode() const { return nGraphicManagerDrawMode; } + void SetGraphicManagerDrawMode( sal_uIntPtr nMode ) { nGraphicManagerDrawMode = nMode; } + + // SwapIn (z.B. von Grafiken) asynchron durchfuehren. Also nicht + // beim Paint sofort nachladen, sondern dort das Nachladen anstossen. + // Nach Abschluss des Nachladens wird das Objekt dann angezeigt. + // Hat nur z.Zt. Wirkung, wenn SwapGraphics am Model eingeschaltet ist. + // Default=FALSE. Flag ist nicht persistent. + sal_Bool IsSwapAsynchron() const { return bSwapAsynchron; } + void SetSwapAsynchron(sal_Bool bJa=sal_True) { bSwapAsynchron=bJa; } + virtual sal_Bool KeyInput(const KeyEvent& rKEvt, Window* pWin); + + virtual sal_Bool MouseButtonDown(const MouseEvent& /*rMEvt*/, Window* /*pWin*/) { return sal_False; } + virtual sal_Bool MouseButtonUp(const MouseEvent& /*rMEvt*/, Window* /*pWin*/) { return sal_False; } + virtual sal_Bool MouseMove(const MouseEvent& /*rMEvt*/, Window* /*pWin*/) { return sal_False; } + virtual sal_Bool Command(const CommandEvent& /*rCEvt*/, Window* /*pWin*/) { return sal_False; } + sal_Bool Cut(sal_uIntPtr /*nFormat*/=SDR_ANYFORMAT) { return sal_False; } + sal_Bool Yank(sal_uIntPtr /*nFormat*/=SDR_ANYFORMAT) { return sal_False; } + sal_Bool Paste(Window* /*pWin*/=NULL, sal_uIntPtr /*nFormat*/=SDR_ANYFORMAT) { return sal_False; } + + /* new interface src537 */ + sal_Bool GetAttributes(SfxItemSet& rTargetSet, sal_Bool bOnlyHardAttr=sal_False) const; + + sal_Bool SetAttributes(const SfxItemSet& rSet, sal_Bool bReplaceAll); + SfxStyleSheet* GetStyleSheet() const; // SfxStyleSheet* GetStyleSheet(sal_Bool& rOk) const; + sal_Bool SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr); + + virtual void MakeVisible(const Rectangle& rRect, Window& rWin); + + // Fuer PlugIn. Wird vom Paint des OLE-Obj gerufen. + virtual void DoConnect(SdrOle2Obj* pOleObj); + + // Animation aktivieren/deaktivieren fuer ::Paint + // wird z.Zt. ausgewertet von SdrGrafObj, wenn in dem eine Animation steckt + // Das Unterbinden der automatischen Animation wird z.B. fuer die Dia-Show benoetigt + sal_Bool IsAnimationEnabled() const { return ( SDR_ANIMATION_ANIMATE == eAnimationMode ); } + void SetAnimationEnabled( sal_Bool bEnable=sal_True ); + + // set/unset pause state for animations + bool IsAnimationPause() const { return bAnimationPause; } + void SetAnimationPause( bool bSet ); + + // Verhalten beim Starten von Animation im Paint-Handler: + // 1. Animation normal starten( SDR_ANIMATION_ANIMATE ) => DEFAULT + // 2. Nur die Ersatzdarstellung der Animation zeichnen ( SDR_ANIMATION_DONT_ANIMATE ) + // 3. Nicht starten und nichts ersatzweise ausgeben ( SDR_ANIMATION_DISABLE ) + void SetAnimationMode( const SdrAnimationMode eMode ); + SdrAnimationMode GetAnimationMode() const { return eAnimationMode; } + + // bei bShow=sal_False wird der Browser destruiert +#ifdef DBG_UTIL + void ShowItemBrowser(sal_Bool bShow=sal_True); + sal_Bool IsItemBrowserVisible() const { return pItemBrowser!=NULL && ((Window*)pItemBrowser)->IsVisible(); } + Window* GetItemBrowser() const { return (Window*)pItemBrowser; } +#endif + + // Muss von App beim Scrollen usw. gerufen werden, damit ein u.U. + // aktives FormularControl mitverschoben werden kann + void VisAreaChanged(const OutputDevice* pOut=NULL); + void VisAreaChanged(const SdrPageWindow& rWindow); + + sal_Bool IsPrintPreview() const { return bPrintPreview; } + void SetPrintPreview(bool bOn = true) { bPrintPreview=bOn; } + + virtual void onChangeColorConfig(); + + // #103834# Set background color for svx at SdrPageViews + void SetApplicationBackgroundColor(Color aBackgroundColor); + + // #103911# Set document color for svx at SdrPageViews + void SetApplicationDocumentColor(Color aDocumentColor); + + // #i38135# + // Sets the timer for Object animations and restarts. + void SetAnimationTimer(sal_uInt32 nTime); + + // access to Drawinglayer configuration options + const SvtOptionsDrawinglayer& getOptionsDrawinglayer() const { return maDrawinglayerOpt; } +}; + +#endif //_SVDPNTV_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdpoev.hxx b/include/svx/svdpoev.hxx new file mode 100644 index 000000000000..d89fdc1ac51d --- /dev/null +++ b/include/svx/svdpoev.hxx @@ -0,0 +1,99 @@ +/* -*- 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 _SVDPOEV_HXX +#define _SVDPOEV_HXX + +#include "svx/svxdllapi.h" +#include <svx/svdedtv.hxx> + +#include "svx/ipolypolygoneditorcontroller.hxx" + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@@@@ @@@@ @@ @@ @@ @@@@@ @@@@@ @@ @@@@@@ @@ @@ @@ @@@@@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @ @@ +// @@@@@ @@ @@ @@ @@@@ @@@@ @@ @@ @@ @@ @@@@@ @@ @@@@ @@@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@ @@@ +// @@ @@@@ @@@@@ @@ @@@@@ @@@@@ @@ @@ @ @@ @@@@@ @@ @@ +// +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrPolyEditView: public SdrEditView, public IPolyPolygonEditorController +{ + friend class SdrEditView; + +protected: + sal_Bool bSetMarkedPointsSmoothPossible : 1; + sal_Bool bSetMarkedSegmentsKindPossible : 1; + + SdrPathSmoothKind eMarkedPointsSmooth; + SdrPathSegmentKind eMarkedSegmentsKind; + +private: + SVX_DLLPRIVATE void ImpClearVars(); + SVX_DLLPRIVATE void ImpResetPolyPossibilityFlags(); + SVX_DLLPRIVATE void ImpCheckPolyPossibilities(); + + typedef void (*PPolyTrFunc)(Point&, Point*, Point*, const void*, const void*, const void*, const void*, const void*); + SVX_DLLPRIVATE void ImpTransformMarkedPoints(PPolyTrFunc pTrFunc, const void* p1=NULL, const void* p2=NULL, const void* p3=NULL, const void* p4=NULL, const void* p5=NULL); + +protected: + // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView + SdrPolyEditView(SdrModel* pModel1, OutputDevice* pOut = 0L); + virtual ~SdrPolyEditView(); + +public: + sal_Bool IsSetMarkedPointsSmoothPossible() const; + SdrPathSmoothKind GetMarkedPointsSmooth() const; + void SetMarkedPointsSmooth(SdrPathSmoothKind eKind); + + // Ein PolySegment kann eine Strecke oder eine Bezierkurve sein. + sal_Bool IsSetMarkedSegmentsKindPossible() const; + SdrPathSegmentKind GetMarkedSegmentsKind() const; + void SetMarkedSegmentsKind(SdrPathSegmentKind eKind); + + // Moeglicherweise ist das Obj hinterher geloescht: + void DeleteMarkedPoints(); + sal_Bool IsDeleteMarkedPointsPossible() const; + + void MoveMarkedPoints(const Size& rSiz, bool bCopy=false); + void ResizeMarkedPoints(const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bCopy=false); + void RotateMarkedPoints(const Point& rRef, long nWink, bool bCopy=false); + + // Hierbei entstehen eventuell beliebig viele neue Objekte: + void RipUpAtMarkedPoints(); + bool IsRipUpAtMarkedPointsPossible() const; + + // Alle markierten Polylines werden zu Polygonen, alle offenen + // Bezierkurven zu geschlossenen. + void CloseMarkedObjects(sal_Bool bToggle=sal_False, sal_Bool bOpen=sal_False); // , long nOpenDistance=0); + bool IsOpenCloseMarkedObjectsPossible() const; + SdrObjClosedKind GetMarkedObjectsClosedState() const; + + void CheckPolyPossibilitiesHelper( SdrMark* pM, bool& b1stSmooth, bool& b1stSegm, bool& bCurve, bool& bSmoothFuz, bool& bSegmFuz, basegfx::B2VectorContinuity& eSmooth ); +}; + +#endif //_SVDPOEV_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdpool.hxx b/include/svx/svdpool.hxx new file mode 100644 index 000000000000..e90e6d89c5f9 --- /dev/null +++ b/include/svx/svdpool.hxx @@ -0,0 +1,54 @@ +/* -*- 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 _SVDPOOL_HXX +#define _SVDPOOL_HXX + +#include <svx/xpool.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +class XLineAttrSetItem; +class XFillAttrSetItem; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrItemPool : public XOutdevItemPool +{ +public: + SdrItemPool(SfxItemPool* pMaster = 0L, sal_Bool bLoadRefCounts = sal_True); + SdrItemPool(const SdrItemPool& rPool); +protected: + virtual ~SdrItemPool(); +public: + + virtual SfxItemPool* Clone() const; + virtual SfxItemPresentation GetPresentation(const SfxPoolItem& rItem, + SfxItemPresentation ePresentation, + SfxMapUnit ePresentationMetric, + OUString& rText, + const IntlWrapper * pIntlWrapper + = 0) const; + + static void TakeItemName(sal_uInt16 nWhich, OUString& rItemName); +}; + +#endif // _SVDPOOL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdsnpv.hxx b/include/svx/svdsnpv.hxx new file mode 100644 index 000000000000..95e93858467e --- /dev/null +++ b/include/svx/svdsnpv.hxx @@ -0,0 +1,330 @@ +/* -*- 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 _SVDSNPV_HXX +#define _SVDSNPV_HXX + +#include <svx/svdpntv.hxx> +#include <svx/svdhlpln.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// Defines +//************************************************************ + +#define SDRSNAP_NOTSNAPPED 0x0000 +#define SDRSNAP_XSNAPPED 0x0001 +#define SDRSNAP_YSNAPPED 0x0002 +#define SDRSNAP_XYSNAPPED 0x0003 + +// SDRCROOK_STRETCH ist noch nicht implementiert! +enum SdrCrookMode { + SDRCROOK_ROTATE, + SDRCROOK_SLANT, + SDRCROOK_STRETCH +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@@@ @@ @@ @@@@ @@@@@ @@ @@ @@ @@@@@ @@ @@ +// @@ @@ @@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@@@@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @ @@ +// @@@@ @@@@@@ @@@@@@ @@@@@ @@@@@ @@ @@@@ @@@@@@@ +// @@ @@ @@@ @@ @@ @@ @@@ @@ @@ @@@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@ @@@ +// @@@@ @@ @@ @@ @@ @@ @ @@ @@@@@ @@ @@ +// +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +// #114409#-1 Migrate PageOrigin +class ImplPageOriginOverlay; + +class SVX_DLLPUBLIC SdrSnapView: public SdrPaintView +{ +protected: + // #114409#-1 Migrate PageOrigin + class ImplPageOriginOverlay* mpPageOriginOverlay; + + // #114409#-2 Migrate HelpLine + class ImplHelpLineOverlay* mpHelpLineOverlay; + + Size aMagnSiz; + Fraction aSnapWdtX; + Fraction aSnapWdtY; + + sal_uInt16 nMagnSizPix; + long nSnapAngle; + long nEliminatePolyPointLimitAngle; + + SdrCrookMode eCrookMode; + + unsigned bSnapEnab : 1; + unsigned bGridSnap : 1; + unsigned bSnapTo1Pix : 1; // Wenn GridSnap aus, auf ein Pixel fangen um Werte wie 10.01 zu vermeiden + unsigned bBordSnap : 1; + unsigned bHlplSnap : 1; + unsigned bOFrmSnap : 1; + unsigned bOPntSnap : 1; + unsigned bOConSnap : 1; + unsigned bMoveMFrmSnap : 1; + unsigned bMoveOFrmSnap : 1; + unsigned bMoveOPntSnap : 1; + unsigned bMoveOConSnap : 1; + unsigned bMoveSnapOnlyTopLeft : 1; // Speacial fuer den Dialogeditor + unsigned bOrtho : 1; + unsigned bBigOrtho : 1; + unsigned bAngleSnapEnab : 1; + unsigned bMoveOnlyDragging : 1; // Objekte nur verschieben bei Resize/Rotate/... + unsigned bSlantButShear : 1; // Slant anstelle von Shear anwenden + unsigned bCrookNoContortion : 1; // Objekte bei Crook nicht verzerren + unsigned bHlplFixed : 1; // sal_True=Hilfslinien fixiert, also nicht verschiebbar + unsigned bEliminatePolyPoints : 1; + +private: + SVX_DLLPRIVATE void ClearVars(); + +protected: + // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView + SdrSnapView(SdrModel* pModel1, OutputDevice* pOut = 0L); + virtual ~SdrSnapView(); + +public: + virtual sal_Bool IsAction() const; + virtual void MovAction(const Point& rPnt); + virtual void EndAction(); + virtual void BckAction(); + virtual void BrkAction(); // f.abg.Klassen Actions z,B, Draggen abbrechen. + virtual void TakeActionRect(Rectangle& rRect) const; + + void SetSnapGridWidth(const Fraction& rX, const Fraction& rY) { aSnapWdtX=rX; aSnapWdtY=rY; } + const Fraction& GetSnapGridWidthX() const { return aSnapWdtX; } + const Fraction& GetSnapGridWidthY() const { return aSnapWdtY; } + + void SetSnapMagnetic(const Size& rSiz) { if (rSiz!=aMagnSiz) { aMagnSiz=rSiz; } } + const Size& GetSnapMagnetic() const { return aMagnSiz; } + void SetSnapMagneticPixel(sal_uInt16 nPix) { nMagnSizPix=nPix; } + sal_uInt16 GetSnapMagneticPixel() const { return nMagnSizPix; } + + // RecalcLogicSnapMagnetic muss bei jedem Wechsel des OutputDevices + // sowie bei jedem Wechsel des MapModes gerufen werden! + void RecalcLogicSnapMagnetic(const OutputDevice& rOut) { SetSnapMagnetic(rOut.PixelToLogic(Size(nMagnSizPix,nMagnSizPix))); } + void SetActualWin(const OutputDevice* pWin) { SdrPaintView::SetActualWin(pWin); if (pWin!=NULL) RecalcLogicSnapMagnetic(*pWin); } + + // Auf die View bezogene Koordinaten! + // Rueckgabewerte sind SDRSNAP_NOTSNAPPED,SDRSNAP_XSNAPPED, + // SDRSNAP_YSNAPPED oder SDRSNAP_XYSNAPPED + sal_uInt16 SnapPos(Point& rPnt, const SdrPageView* pPV) const; + Point GetSnapPos(const Point& rPnt, const SdrPageView* pPV) const; + void CheckSnap(const Point& rPt, const SdrPageView* pPV, long& nBestXSnap, long& nBestYSnap, bool& bXSnapped, bool& bYSnapped) const; + + // Alle Fangeinstellungen sind Persistent. + sal_Bool IsSnapEnabled() const { return bSnapEnab; } + sal_Bool IsGridSnap() const { return bGridSnap; } // Fang auf Rastergitter + sal_Bool IsBordSnap() const { return bBordSnap; } // Fang auf Seitenraender + sal_Bool IsHlplSnap() const { return bHlplSnap; } // Fang auf Hilfslinien + sal_Bool IsOFrmSnap() const { return bOFrmSnap; } // Fang auf LogFram von umgebenden Zeichenobjekten + sal_Bool IsOPntSnap() const { return bOPntSnap; } // Fang auf ausgepraegte Punkte von umgebenden Zeichenobjekten + sal_Bool IsOConSnap() const { return bOConSnap; } // Fang auf Konnektoren der Zeichenobjekte + void SetSnapEnabled(sal_Bool bOn) { bSnapEnab=bOn; } + void SetGridSnap(sal_Bool bOn) { bGridSnap=bOn; } + void SetBordSnap(sal_Bool bOn) { bBordSnap=bOn; } + void SetHlplSnap(sal_Bool bOn) { bHlplSnap=bOn; } + void SetOFrmSnap(sal_Bool bOn) { bOFrmSnap=bOn; } + void SetOPntSnap(sal_Bool bOn) { bOPntSnap=bOn; } + void SetOConSnap(sal_Bool bOn) { bOConSnap=bOn; } + + // Normalerweise werden beim Move-Dragging von Zeichenobjekten alle + // 4 Ecken des Object-SnapRects gefangen. Folgende Einstellmoeglichkeit, + // wenn man nur auf die linke obere Ecke fangen will (z.B. DialogEditor): + // Persistent, Default=FALSE. + void SetMoveSnapOnlyTopLeft(sal_Bool bOn) { bMoveSnapOnlyTopLeft=bOn; } + sal_Bool IsMoveSnapOnlyTopLeft() const { return bMoveSnapOnlyTopLeft; } + + // Hilfslinien fixiert (nicht verschiebbar) + // Persistent, Default=FALSE. + sal_Bool IsHlplFixed() const { return bHlplFixed; } + void SetHlplFixed(sal_Bool bOn) { bHlplFixed=bOn; } + + sal_Bool IsMoveMFrmSnap() const { return bMoveMFrmSnap; } // Fang des LogFram aller markierten Objekte + sal_Bool IsMoveOFrmSnap() const { return bMoveOFrmSnap; } // Fang aller LogFram der markierten Objekte + sal_Bool IsMoveOPntSnap() const { return bMoveOPntSnap; } // Fang ausgepraegter Punkte der markierten Objekte + sal_Bool IsMoveOConSnap() const { return bMoveOConSnap; } // Fang der Konnektoren der markierten Objekte + + void SetMoveMFrmSnap(sal_Bool bOn) { bMoveMFrmSnap=bOn; } + void SetMoveOFrmSnap(sal_Bool bOn) { bMoveOFrmSnap=bOn; } + void SetMoveOPntSnap(sal_Bool bOn) { bMoveOPntSnap=bOn; } + void SetMoveOConSnap(sal_Bool bOn) { bMoveOConSnap=bOn; } + + // #114409#-1 Migrate PageOrigin + sal_Bool BegSetPageOrg(const Point& rPnt); + void MovSetPageOrg(const Point& rPnt); + sal_Bool EndSetPageOrg(); + void BrkSetPageOrg(); + sal_Bool IsSetPageOrg() const { return (0L != mpPageOriginOverlay); } + + // HitTest. Bei sal_True steht in rnHelpLineNum die Nummer der Hilfslinie und in rpPV + // die zugehoerige PageView. + sal_Bool PickHelpLine(const Point& rPnt, short nTol, const OutputDevice& rOut, sal_uInt16& rnHelpLineNum, SdrPageView*& rpPV) const; + + // Verschieben einer vorhandenen Hilfslinie. nHelpLineNum und pPV von PickHelpLine verwenden. + sal_Bool BegDragHelpLine(sal_uInt16 nHelpLineNum, SdrPageView* pPV); + // Interaktives einfuegen einer neuen Hilfslinie + sal_Bool BegDragHelpLine(const Point& rPnt, SdrHelpLineKind eNewKind); + Pointer GetDraggedHelpLinePointer() const; + + // Aendern des Hilfslinientyps waerend des draggens + // void SetDraggedHelpLineKind(SdrHelpLineKind eNewKind); + void MovDragHelpLine(const Point& rPnt); + sal_Bool EndDragHelpLine(); + void BrkDragHelpLine(); + sal_Bool IsDragHelpLine() const { return (0L != mpHelpLineOverlay); } + + // SnapAngle ist fuer Winkel im Kreis, RotateDragging, ... + // Der Winkelfang wird unterdrueckt, wenn er mit + // durch SetAngleSnapEnabled(sal_False) ausgeschaltet ist. + // Der Winkelfang ist unabhaengig vom Koordinatenfang + // und somit von der Einstellung IsSnapEnabled() + // Es sollten nur Werte angegeben werden fuer die gilt: + // 36000 modulu nWink = 0 + // Implementiert fuer: + // - Rotate (Dragging) + // - Shear (Dragging) + // - Kreisbogen/-sektor/-abschnitt Winkel (Create und Dragging) + // Persistent. + void SetAngleSnapEnabled(sal_Bool bOn) { bAngleSnapEnab=bOn; } + sal_Bool IsAngleSnapEnabled() const { return bAngleSnapEnab; } + void SetSnapAngle(long nWink) { nSnapAngle=nWink; } + long GetSnapAngle() const { return nSnapAngle; } + + // Ortho hat je nach Kontext verschiedene Effekte: + // - Create + // - Linien werden nur im 45deg Raster zugelassen + // - Statt Rechtecke werden Quadrate erzeugt + // - Statt Ellipsen werden Kreise erzeugt + // - Dragging + // - allgemeines Dragging + // - Move nur Hor, Vert oder 45deg + // - Resize proportional + // - Mirror: nichts + // - Shear ohne Resize + // - Crook ohne Resize + // - verschieben der Handles + // - Spiegelachse nur 45deg Raster + // - Objekteigenes Dragging + // - Rechteck Eckenradius: nichts + // - Kreisobjekt Winkel: nichts + // - Linie behaelt beim Draggen ihren Winkel bei und wird nur (ni) + // verlaengert bzw. verkuerzt. + // Defaultmaessig ist Ortho ausgeschaltet. Persistent. + void SetOrtho(bool bOn) { bOrtho=bOn; } // unvollstaendig + bool IsOrtho() const { return bOrtho; } + + // BigOrtho hat nur Relevanz wenn Ortho eingeschaltet ist. + // Beispiel: Ein Rechteck wird mit eingeschaltetem Ortho (also ein Quadrat) + // erzeugt und die Maus wurde dabei vom Nullpunkt zu den Koordinaten + // (80,30) gedraggt. Dann stuenden nun 2 Alternativen zur Bestimmung der + // Kantenlaenge des Quadrats zur Wahl: 30 und 80. + // Die normale Ortho-Funktuionalitaet brachte hierbei ein Quadrat mit + // Kantenlaenge 30 (also immer die kleinere Groesse). Bei hinzugeschal- + // tetem BigOrtho bekaeme man dagegen ein Quadrat der Kantenlaenge 80. + // Gleiches gilt auch fuer Resize. + // Defaultmaessig ist BigOrtho eingeschaltet. Persistent. + void SetBigOrtho(bool bOn) { bBigOrtho=bOn; } + bool IsBigOrtho() const { return bBigOrtho; } + + // bei MoveOnlyDragging=sal_True wird bei Resize/Rotate/Shear/Mirror/Crook + // nur das Zentrum der markierten Objekte transformiert. Groesse, Form + // und Drehwinkel der Objekte bleiben erhalten, nur ihre Positionen + // aendern sich. Persistent. Default=FALSE. (ni) + void SetMoveOnlyDragging(sal_Bool bOn) { bMoveOnlyDragging=bOn; } + sal_Bool IsMoveOnlyDragging() const { return bMoveOnlyDragging; } + + // Slant anstelle von Shear anwenden. Persistent. Default=FALSE. + void SetSlantButShear(sal_Bool bOn) { bSlantButShear=bOn; } + sal_Bool IsSlantButShear() const { return bSlantButShear; } + + // Objekte bei Crook nicht verzerren. Persistent. Default=FALSE. (ni) + void SetCrookNoContortion(sal_Bool bOn) { bCrookNoContortion=bOn; } + sal_Bool IsCrookNoContortion() const { return bCrookNoContortion; } + + // Crook-Modus. Persistent. Default=SDRCROOK_ROTATE. (ni) + void SetCrookMode(SdrCrookMode eMode) { eCrookMode=eMode; } + SdrCrookMode GetCrookMode() const { return eCrookMode; } + + // Special fuer IBM: Beim Draggen eines Polygonpunkts wird dieser + // geloescht, wenn seine beiden angrenzenden Linien eh' fast eine + // durchgehende Linie sind. + void SetEliminatePolyPoints(sal_Bool bOn) { bEliminatePolyPoints=bOn; } + sal_Bool IsEliminatePolyPoints() const { return bEliminatePolyPoints; } + void SetEliminatePolyPointLimitAngle(long nAngle) { nEliminatePolyPointLimitAngle=nAngle; } + long GetEliminatePolyPointLimitAngle() const { return nEliminatePolyPointLimitAngle; } +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Begriffsdefinition: +// - Etwas fangen=Gefangen werden kann z.B. der Mauszeiger oder die z.Zt. im +// Drag befindlichen markierten Objekte. +// - Auf etwas fangen=Man kann z.B. auf das Grid oder auf Hilfslinien fangen. +// +// Grundsaetzlich wird nur gefangen auf sichtbare Elemente (-> Border, +// Hilfslinien, Konnektoren; Ausnahme: Grid). Ebenso koennen nur sichtbare +// Elemente gefangen werden (->Konnektoren). +// +// Auf's Grid wird immer erst dann gefangen, wenn nix Anderes in der Naehe +// (->Magnetic) ist. +// +// Der "Cursor" (also der Mauszeiger) beim Erzeugen von Objekten, beim Draggen +// von Polygonpunkten, ... wird immer auf allen eingeschalteten Fangalternativen +// gefangen (max 6). +// +// Beim Verschieben markierter Objekte ist das etwas anders. Statt des einen +// Mauscursors gibt es hier 4 Alternativen an den markierten Objekten, die +// gefangen werden koennen: +// 1. die logisch-umschliessenden Rahmen der einzelnen Objekte +// 2. der logisch-umschliessende Rahmen aller markierten Objekte +// 3. ausgezeichnete Punkte der markierten Objekte (Polygonpunkte, ...) +// 4. die Konnektoren der markierten Objekte +// Da 1. und 2. einander ausschliessen (2. ist eine Verfeinerung von 1.) +// bleiben 3 voneinander unabhaengige Alternativen. Bei 6. Moeglichkeiten auf +// die gefangen werden kann kaeme man auf max. 18 Kombinationsmoeglichkeiten! +// Deshalb werden folgende Vereinfachungen festgelegt: +// 1. Konnektoren fangen sich nur auf Konnektoren. +// Verbleiben also nun noch max. 2x5+1=11 Fangkombinationen beim MoveDrag: +// 1-3. umschliessende(r) Rahmen auf Grid/Border/Hilfslinien +// 4. umschliessende(r) Rahmen auf ausgezeichnete Objektpunkte +// 5. umschliessende(r) Rahmen auf umschliessenden Rahmen +// 6-8. ausgezeichnete Punkte auf Grid/Border/Hilfslinien +// 7. ausgezeichnete Punkte auf ausgezeichnete Objektpunkte +// 8-10. ausgezeichnete Punkte auf umschliessenden Rahmen +// 11. Konnektoren auf Konnektoren +// Beim MouseMove-Event im DragMove werden also diese bis zu max. 11 moeglichen +// Alternativen durchgetestet und die mit dem gerigsten Korrekturaufwand +// vollzogen. +// +// Beim Resize, ... wird immer nur der logisch-umschliessende Rahmen der +// markierten Objekte gefangen. +// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDSNPV_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdsob.hxx b/include/svx/svdsob.hxx new file mode 100644 index 000000000000..146731c996e8 --- /dev/null +++ b/include/svx/svdsob.hxx @@ -0,0 +1,117 @@ +/* -*- 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 _SVDSOB_HXX +#define _SVDSOB_HXX + +#include <com/sun/star/uno/Any.hxx> +#include <tools/stream.hxx> + +#include "svx/svxdllapi.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////// +/* + Deklaration eines statischen Mengentyps. Die Menge kann die Elemente + 0..255 aufnehmen und verbraucht stets 32 Bytes. +*/ + +class SVX_DLLPUBLIC SetOfByte +{ +protected: + sal_uInt8 aData[32]; + +public: + explicit SetOfByte(sal_Bool bInitVal = sal_False) + { + memset(aData, bInitVal ? 0xFF : 0x00, sizeof(aData)); + } + + sal_Bool operator==(const SetOfByte& rCmpSet) const + { + return (memcmp(aData, rCmpSet.aData, sizeof(aData)) == 0); + } + + sal_Bool operator!=(const SetOfByte& rCmpSet) const + { + return (memcmp(aData, rCmpSet.aData, sizeof(aData))!=0); + } + + void Set(sal_uInt8 a) + { + aData[a/8] |= 1<<a%8; + } + + void Clear(sal_uInt8 a) + { + aData[a/8] &= ~(1<<a%8); + } + + void Set(sal_uInt8 a, sal_Bool b) + { + if(b) + Set(a); + else + Clear(a); + } + + sal_Bool IsSet(sal_uInt8 a) const + { + return (aData[a/8] & 1<<a%8) != 0; + } + + void SetAll() + { + memset(aData, 0xFF, sizeof(aData)); + } + + void ClearAll() + { + memset(aData, 0x00, sizeof(aData)); + } + + sal_Bool IsEmpty() const; + + void operator&=(const SetOfByte& r2ndSet); + void operator|=(const SetOfByte& r2ndSet); + + friend inline SvStream& operator<<(SvStream& rOut, const SetOfByte& rSet); + friend inline SvStream& operator>>(SvStream& rIn, SetOfByte& rSet); + + // initialize this set with a uno sequence of sal_Int8 + void PutValue(const com::sun::star::uno::Any & rAny); + + // returns a uno sequence of sal_Int8 + void QueryValue(com::sun::star::uno::Any & rAny) const; +}; + +inline SvStream& operator<<(SvStream& rOut, const SetOfByte& rSet) +{ + rOut.Write((char*)rSet.aData,32); + return rOut; +} + +inline SvStream& operator>>(SvStream& rIn, SetOfByte& rSet) +{ + rIn.Read((char*)rSet.aData,32); + return rIn; +} + +#endif // _SVDSOB_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdstr.hrc b/include/svx/svdstr.hrc new file mode 100644 index 000000000000..a78d88dfdb2d --- /dev/null +++ b/include/svx/svdstr.hrc @@ -0,0 +1,718 @@ +/* -*- 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 . + */ + +#define SDR_ResourceBegin 2560 + +// Attention: All strings between SDR_StringCacheBegin and +// SDR_StringCacheEnd must be aligned next to each other. + +#define STR_ObjNameBegin (SDR_ResourceBegin) +#define STR_ObjNameSingulNONE (STR_ObjNameBegin + 0) +#define STR_ObjNamePluralNONE (STR_ObjNameBegin + 1) +#define STR_ObjNameSingulGRUP (STR_ObjNameBegin + 2) +#define STR_ObjNamePluralGRUP (STR_ObjNameBegin + 3) +#define STR_ObjNameSingulGRUPEMPTY (STR_ObjNameBegin + 4) +#define STR_ObjNamePluralGRUPEMPTY (STR_ObjNameBegin + 5) +#define STR_ObjNameSingulTable (STR_ObjNameBegin + 6) +#define STR_ObjNamePluralTable (STR_ObjNameBegin + 7) +#define STR_ObjNameSingulLINE (STR_ObjNameBegin + 8) +#define STR_ObjNameSingulLINE_Hori (STR_ObjNameBegin + 9) +#define STR_ObjNameSingulLINE_Vert (STR_ObjNameBegin + 10) +#define STR_ObjNameSingulLINE_Diag (STR_ObjNameBegin + 11) +#define STR_ObjNamePluralLINE (STR_ObjNameBegin + 12) +#define STR_ObjNameSingulRECT (STR_ObjNameBegin + 13) +#define STR_ObjNamePluralRECT (STR_ObjNameBegin + 14) +#define STR_ObjNameSingulQUAD (STR_ObjNameBegin + 15) +#define STR_ObjNamePluralQUAD (STR_ObjNameBegin + 16) +#define STR_ObjNameSingulPARAL (STR_ObjNameBegin + 17) +#define STR_ObjNamePluralPARAL (STR_ObjNameBegin + 18) +#define STR_ObjNameSingulRAUTE (STR_ObjNameBegin + 19) +#define STR_ObjNamePluralRAUTE (STR_ObjNameBegin + 20) +#define STR_ObjNameSingulRECTRND (STR_ObjNameBegin + 21) +#define STR_ObjNamePluralRECTRND (STR_ObjNameBegin + 22) +#define STR_ObjNameSingulQUADRND (STR_ObjNameBegin + 23) +#define STR_ObjNamePluralQUADRND (STR_ObjNameBegin + 24) +#define STR_ObjNameSingulPARALRND (STR_ObjNameBegin + 25) +#define STR_ObjNamePluralPARALRND (STR_ObjNameBegin + 26) +#define STR_ObjNameSingulRAUTERND (STR_ObjNameBegin + 27) +#define STR_ObjNamePluralRAUTERND (STR_ObjNameBegin + 28) +#define STR_ObjNameSingulCIRC (STR_ObjNameBegin + 29) +#define STR_ObjNamePluralCIRC (STR_ObjNameBegin + 30) +#define STR_ObjNameSingulSECT (STR_ObjNameBegin + 31) +#define STR_ObjNamePluralSECT (STR_ObjNameBegin + 32) +#define STR_ObjNameSingulCARC (STR_ObjNameBegin + 33) +#define STR_ObjNamePluralCARC (STR_ObjNameBegin + 34) +#define STR_ObjNameSingulCCUT (STR_ObjNameBegin + 35) +#define STR_ObjNamePluralCCUT (STR_ObjNameBegin + 36) +#define STR_ObjNameSingulCIRCE (STR_ObjNameBegin + 37) +#define STR_ObjNamePluralCIRCE (STR_ObjNameBegin + 38) +#define STR_ObjNameSingulSECTE (STR_ObjNameBegin + 39) +#define STR_ObjNamePluralSECTE (STR_ObjNameBegin + 40) +#define STR_ObjNameSingulCARCE (STR_ObjNameBegin + 41) +#define STR_ObjNamePluralCARCE (STR_ObjNameBegin + 42) +#define STR_ObjNameSingulCCUTE (STR_ObjNameBegin + 43) +#define STR_ObjNamePluralCCUTE (STR_ObjNameBegin + 44) +#define STR_ObjNameSingulPOLY (STR_ObjNameBegin + 45) +#define STR_ObjNameSingulPOLY_PntAnz (STR_ObjNameBegin + 46) +#define STR_ObjNamePluralPOLY (STR_ObjNameBegin + 47) +#define STR_ObjNameSingulPLIN (STR_ObjNameBegin + 48) +#define STR_ObjNameSingulPLIN_PntAnz (STR_ObjNameBegin + 49) +#define STR_ObjNamePluralPLIN (STR_ObjNameBegin + 50) +#define STR_ObjNameSingulPATHLINE (STR_ObjNameBegin + 51) +#define STR_ObjNamePluralPATHLINE (STR_ObjNameBegin + 52) +#define STR_ObjNameSingulPATHFILL (STR_ObjNameBegin + 53) +#define STR_ObjNamePluralPATHFILL (STR_ObjNameBegin + 54) +#define STR_ObjNameSingulFREELINE (STR_ObjNameBegin + 55) +#define STR_ObjNamePluralFREELINE (STR_ObjNameBegin + 56) +#define STR_ObjNameSingulFREEFILL (STR_ObjNameBegin + 57) +#define STR_ObjNamePluralFREEFILL (STR_ObjNameBegin + 58) +#define STR_ObjNameSingulCOMBLINE (STR_ObjNameBegin + 59) +#define STR_ObjNamePluralCOMBLINE (STR_ObjNameBegin + 60) +#define STR_ObjNameSingulCOMBFILL (STR_ObjNameBegin + 61) +#define STR_ObjNamePluralCOMBFILL (STR_ObjNameBegin + 62) +#define STR_ObjNameSingulNATSPLN (STR_ObjNameBegin + 63) +#define STR_ObjNamePluralNATSPLN (STR_ObjNameBegin + 64) +#define STR_ObjNameSingulPERSPLN (STR_ObjNameBegin + 65) +#define STR_ObjNamePluralPERSPLN (STR_ObjNameBegin + 66) +#define STR_ObjNameSingulTEXT (STR_ObjNameBegin + 67) +#define STR_ObjNamePluralTEXT (STR_ObjNameBegin + 68) +#define STR_ObjNameSingulTEXTLNK (STR_ObjNameBegin + 69) +#define STR_ObjNamePluralTEXTLNK (STR_ObjNameBegin + 70) +#define STR_ObjNameSingulFITTEXT (STR_ObjNameBegin + 71) +#define STR_ObjNamePluralFITTEXT (STR_ObjNameBegin + 72) +#define STR_ObjNameSingulFITALLTEXT (STR_ObjNameBegin + 73) +#define STR_ObjNamePluralFITALLTEXT (STR_ObjNameBegin + 74) +#define STR_ObjNameSingulTITLETEXT (STR_ObjNameBegin + 75) +#define STR_ObjNamePluralTITLETEXT (STR_ObjNameBegin + 76) +#define STR_ObjNameSingulOUTLINETEXT (STR_ObjNameBegin + 77) +#define STR_ObjNamePluralOUTLINETEXT (STR_ObjNameBegin + 78) +#define STR_ObjNameSingulGRAF (STR_ObjNameBegin + 79) +#define STR_ObjNamePluralGRAF (STR_ObjNameBegin + 80) +#define STR_ObjNameSingulGRAFLNK (STR_ObjNameBegin + 81) +#define STR_ObjNamePluralGRAFLNK (STR_ObjNameBegin + 82) +#define STR_ObjNameSingulGRAFNONE (STR_ObjNameBegin + 83) +#define STR_ObjNamePluralGRAFNONE (STR_ObjNameBegin + 84) +#define STR_ObjNameSingulGRAFNONELNK (STR_ObjNameBegin + 85) +#define STR_ObjNamePluralGRAFNONELNK (STR_ObjNameBegin + 86) +#define STR_ObjNameSingulGRAFMTF (STR_ObjNameBegin + 87) +#define STR_ObjNamePluralGRAFMTF (STR_ObjNameBegin + 88) +#define STR_ObjNameSingulGRAFMTFLNK (STR_ObjNameBegin + 89) +#define STR_ObjNamePluralGRAFMTFLNK (STR_ObjNameBegin + 90) +#define STR_ObjNameSingulGRAFBMP (STR_ObjNameBegin + 91) +#define STR_ObjNamePluralGRAFBMP (STR_ObjNameBegin + 92) +#define STR_ObjNameSingulGRAFBMPLNK (STR_ObjNameBegin + 93) +#define STR_ObjNamePluralGRAFBMPLNK (STR_ObjNameBegin + 94) +#define STR_ObjNameSingulGRAFMAC (STR_ObjNameBegin + 95) +#define STR_ObjNamePluralGRAFMAC (STR_ObjNameBegin + 96) +#define STR_ObjNameSingulGRAFMACLNK (STR_ObjNameBegin + 97) +#define STR_ObjNamePluralGRAFMACLNK (STR_ObjNameBegin + 98) +#define STR_ObjNameSingulOLE2 (STR_ObjNameBegin + 99) +#define STR_ObjNamePluralOLE2 (STR_ObjNameBegin +100) +#define STR_ObjNameSingulOLE2LNK (STR_ObjNameBegin +101) +#define STR_ObjNamePluralOLE2LNK (STR_ObjNameBegin +102) +#define STR_ObjOLE2NamePrefix (STR_ObjNameBegin +103) +#define STR_ObjNameSingulFrame (STR_ObjNameBegin +104) +#define STR_ObjNamePluralFrame (STR_ObjNameBegin +105) +#define STR_ObjFrameNamePrefix (STR_ObjNameBegin +106) +#define STR_ObjNameSingulEDGE (STR_ObjNameBegin +107) +#define STR_ObjNamePluralEDGE (STR_ObjNameBegin +108) +#define STR_ObjNameSingulCAPTION (STR_ObjNameBegin +109) +#define STR_ObjNamePluralCAPTION (STR_ObjNameBegin +110) +#define STR_ObjNameSingulPAGE (STR_ObjNameBegin +111) +#define STR_ObjNamePluralPAGE (STR_ObjNameBegin +112) +#define STR_ObjNameSingulMEASURE (STR_ObjNameBegin +113) +#define STR_ObjNamePluralMEASURE (STR_ObjNameBegin +114) +#define STR_ObjNamePlural (STR_ObjNameBegin +115) +#define STR_ObjNameNoObj (STR_ObjNameBegin +116) +#define STR_ObjNameAnd (STR_ObjNameBegin +117) +#define STR_ObjNameSingulPlural (STR_ObjNameBegin +118) +#define STR_ObjNameSingulUno (STR_ObjNameBegin +119) +#define STR_ObjNamePluralUno (STR_ObjNameBegin +120) + +#define STR_ObjNameSingulCube3d (STR_ObjNameBegin + 121) +#define STR_ObjNamePluralCube3d (STR_ObjNameBegin + 122) +#define STR_ObjNameSingulExtrude3d (STR_ObjNameBegin + 123) +#define STR_ObjNamePluralExtrude3d (STR_ObjNameBegin + 124) +#define STR_ObjNameSingulLabel3d (STR_ObjNameBegin + 125) +#define STR_ObjNamePluralLabel3d (STR_ObjNameBegin + 126) +#define STR_ObjNameSingulLathe3d (STR_ObjNameBegin + 127) +#define STR_ObjNamePluralLathe3d (STR_ObjNameBegin + 128) +#define STR_ObjNameSingulObj3d (STR_ObjNameBegin + 129) +#define STR_ObjNamePluralObj3d (STR_ObjNameBegin + 130) +#define STR_ObjNamePluralPoly3d (STR_ObjNameBegin + 132) +#define STR_ObjNameSingulScene3d (STR_ObjNameBegin + 133) +#define STR_ObjNamePluralScene3d (STR_ObjNameBegin + 134) +#define STR_ObjNameSingulSphere3d (STR_ObjNameBegin + 135) +#define STR_ObjNamePluralSphere3d (STR_ObjNameBegin + 136) + +#define STR_ObjNameSingulGRAFBMPTRANS (STR_ObjNameBegin + 137) +#define STR_ObjNameSingulGRAFBMPTRANSLNK (STR_ObjNameBegin + 138) + +#define STR_ObjNamePluralGRAFBMPTRANS (STR_ObjNameBegin + 139) +#define STR_ObjNamePluralGRAFBMPTRANSLNK (STR_ObjNameBegin + 140) + +#define STR_ObjNameSingulCUSTOMSHAPE (STR_ObjNameBegin + 141) +#define STR_ObjNamePluralCUSTOMSHAPE (STR_ObjNameBegin + 142) + +#define STR_ObjNameSingulMEDIA (STR_ObjNameBegin + 143) +#define STR_ObjNamePluralMEDIA (STR_ObjNameBegin + 144) + +#define STR_ObjNameSingulFONTWORK (STR_ObjNameBegin+145) +#define STR_ObjNamePluralFONTWORK (STR_ObjNameBegin+146) + +// Svg support +#define STR_ObjNameSingulGRAFSVG (STR_ObjNameBegin + 147) +#define STR_ObjNamePluralGRAFSVG (STR_ObjNameBegin + 148) + +#define STR_ObjNameEnd (STR_ObjNamePluralGRAFSVG) + +#define STR_EditBegin (STR_ObjNameEnd+1) +#define STR_EditWithCopy (STR_EditBegin + 0) +#define STR_EditPosSize (STR_EditBegin + 1) +#define STR_EditDelete (STR_EditBegin + 2) +#define STR_EditMovToTop (STR_EditBegin + 3) +#define STR_EditMovToBtm (STR_EditBegin + 4) +#define STR_EditPutToTop (STR_EditBegin + 5) +#define STR_EditPutToBtm (STR_EditBegin + 6) +#define STR_EditRevOrder (STR_EditBegin + 7) +#define STR_EditMove (STR_EditBegin + 8) +#define STR_EditResize (STR_EditBegin + 9) +#define STR_EditRotate (STR_EditBegin + 10) +#define STR_EditMirrorHori (STR_EditBegin + 11) +#define STR_EditMirrorVert (STR_EditBegin + 12) +#define STR_EditMirrorDiag (STR_EditBegin + 13) +#define STR_EditMirrorFree (STR_EditBegin + 14) +#define STR_EditShear (STR_EditBegin + 15) +#define STR_EditCrook (STR_EditBegin + 16) +#define STR_EditCrookContortion (STR_EditBegin + 17) +#define STR_EditDistort (STR_EditBegin + 18) +#define STR_EditRipUp (STR_EditBegin + 19) +#define STR_EditSetPointsSmooth (STR_EditBegin + 20) +#define STR_EditSetSegmentsKind (STR_EditBegin + 21) +#define STR_EditShut (STR_EditBegin + 22) +#define STR_EditSetGlueEscDir (STR_EditBegin + 23) +#define STR_EditSetGluePercent (STR_EditBegin + 24) +#define STR_EditSetGlueAlign (STR_EditBegin + 25) +#define STR_EditGroup (STR_EditBegin + 26) +#define STR_EditUngroup (STR_EditBegin + 27) +#define STR_EditSetAttributes (STR_EditBegin + 28) +#define STR_EditSetStylesheet (STR_EditBegin + 29) +#define STR_EditDelStylesheet (STR_EditBegin + 30) +#define STR_EditConvToPoly (STR_EditBegin + 31) +#define STR_EditConvToPolys (STR_EditBegin + 32) +#define STR_EditConvToCurve (STR_EditBegin + 33) +#define STR_EditConvToCurves (STR_EditBegin + 34) +#define STR_EditAlign (STR_EditBegin + 35) +#define STR_EditAlignVTop (STR_EditBegin + 36) +#define STR_EditAlignVBottom (STR_EditBegin + 37) +#define STR_EditAlignVCenter (STR_EditBegin + 38) +#define STR_EditAlignHLeft (STR_EditBegin + 39) +#define STR_EditAlignHRight (STR_EditBegin + 40) +#define STR_EditAlignHCenter (STR_EditBegin + 41) +#define STR_EditAlignCenter (STR_EditBegin + 42) +#define STR_EditTransform (STR_EditBegin + 43) +#define STR_EditCombine_PolyPoly (STR_EditBegin + 44) +#define STR_EditCombine_OnePoly (STR_EditBegin + 45) +#define STR_EditDismantle_Polys (STR_EditBegin + 46) +#define STR_EditDismantle_Lines (STR_EditBegin + 47) +#define STR_EditImportMtf (STR_EditBegin + 48) +#define STR_EditImportSGV (STR_EditBegin + 49) +#define STR_EditImportHPGL (STR_EditBegin + 50) +#define STR_EditImportDXF (STR_EditBegin + 51) +#define STR_EditConvToContour (STR_EditBegin + 52) +#define STR_EditConvToContours (STR_EditBegin + 53) +#define STR_EditMergeMergePoly (STR_EditBegin + 54) +#define STR_EditMergeSubstractPoly (STR_EditBegin + 55) +#define STR_EditMergeIntersectPoly (STR_EditBegin + 56) +#define STR_DistributeMarkedObjects (STR_EditBegin + 57) +#define STR_EditEnd (STR_DistributeMarkedObjects) + +#define STR_ExchangeBegin (STR_EditEnd+1) +#define STR_ExchangePaste (STR_ExchangeBegin +0) +#define STR_ExchangeClpCut (STR_ExchangeBegin +1) +#define STR_ExchangeClpPaste (STR_ExchangeBegin +2) +#define STR_ExchangeDD (STR_ExchangeBegin +3) +#define STR_ExchangeDDPaste (STR_ExchangeBegin +4) +#define STR_ExchangeEnd (STR_ExchangeDDPaste) + +#define STR_DragBegin (STR_ExchangeEnd+1) +#define STR_DragInsertPoint (STR_DragBegin + 0) +#define STR_DragInsertGluePoint (STR_DragBegin + 1) +#define STR_DragMethMovHdl (STR_DragBegin + 2) +#define STR_DragMethObjOwn (STR_DragBegin + 3) +#define STR_DragMethMove (STR_DragBegin + 4) +#define STR_DragMethResize (STR_DragBegin + 5) +#define STR_DragMethRotate (STR_DragBegin + 6) +#define STR_DragMethMirrorHori (STR_DragBegin + 7) +#define STR_DragMethMirrorVert (STR_DragBegin + 8) +#define STR_DragMethMirrorDiag (STR_DragBegin + 9) +#define STR_DragMethMirrorFree (STR_DragBegin +10) +#define STR_DragMethShear (STR_DragBegin +11) +#define STR_DragMethCrook (STR_DragBegin +12) +#define STR_DragMethCrookContortion (STR_DragBegin +13) +#define STR_DragMethDistort (STR_DragBegin +14) +#define STR_DragRectEckRad (STR_DragBegin +15) +#define STR_DragPathObj (STR_DragBegin +16) +#define STR_DragRectResize (STR_DragBegin +17) +#define STR_DragCaptFram (STR_DragBegin +18) +#define STR_DragCaptTail (STR_DragBegin +19) +#define STR_DragCircAngle (STR_DragBegin +20) +#define STR_DragEdgeTail (STR_DragBegin +21) +#define STR_DragMethGradient (STR_DragBegin +22) +#define STR_DragMethTransparence (STR_DragBegin +23) +#define STR_DragMethCrop (STR_DragBegin +24) +#define STR_DragEnd (STR_DragMethCrop) + +#define STR_ViewBegin (STR_DragEnd+1) +#define STR_ViewTextEdit (STR_ViewBegin + 0) +#define STR_ViewMarked (STR_ViewBegin + 1) +#define STR_ViewMarkedPoint (STR_ViewBegin + 2) +#define STR_ViewMarkedPoints (STR_ViewBegin + 3) +#define STR_ViewMarkedGluePoint (STR_ViewBegin + 4) +#define STR_ViewMarkedGluePoints (STR_ViewBegin + 5) +#define STR_ViewMarkObjs (STR_ViewBegin + 6) +#define STR_ViewMarkMoreObjs (STR_ViewBegin + 7) +#define STR_ViewMarkPoints (STR_ViewBegin + 8) +#define STR_ViewMarkMorePoints (STR_ViewBegin + 9) +#define STR_ViewMarkGluePoints (STR_ViewBegin +10) +#define STR_ViewMarkMoreGluePoints (STR_ViewBegin +11) +#define STR_ViewCreateObj (STR_ViewBegin +12) +#define STR_ViewEnd (STR_ViewCreateObj) + +#define STR_UndoBegin (STR_ViewEnd+1) +#define STR_UndoInsertObj (STR_UndoBegin + 0) +#define STR_UndoCopyObj (STR_UndoBegin + 1) +#define STR_UndoObjOrdNum (STR_UndoBegin + 2) +#define STR_UndoObjSetText (STR_UndoBegin + 3) + +#define STR_UndoNewPage (STR_UndoBegin + 4) +#define STR_UndoDelPage (STR_UndoBegin + 5) +#define STR_UndoCopPage (STR_UndoBegin + 6) +#define STR_UndoMovPage (STR_UndoBegin + 7) + +#define STR_UndoNewPageMasterDscr (STR_UndoBegin + 8) +#define STR_UndoDelPageMasterDscr (STR_UndoBegin + 9) +#define STR_UndoMovPageMasterDscr (STR_UndoBegin +10) +#define STR_UndoChgPageMasterDscr (STR_UndoBegin +11) + +#define STR_UndoMergeModel (STR_UndoBegin +12) + +#define STR_UndoNewLayer (STR_UndoBegin +13) +#define STR_UndoDelLayer (STR_UndoBegin +14) +#define STR_UndoMovLayer (STR_UndoBegin +15) + +// #i73249# +#define STR_UndoObjName (STR_UndoBegin +16) +#define STR_UndoObjTitle (STR_UndoBegin +17) +#define STR_UndoObjDescription (STR_UndoBegin +18) +#define STR_UndoEnd (STR_UndoObjDescription) + + +#define STR_LayerBegin (STR_UndoEnd+1) +#define STR_StandardLayerName (STR_LayerBegin +0) +#define STR_LayerEnd (STR_StandardLayerName) + + +#define STR_ItemBegin (STR_LayerEnd+1) +#define STR_ItemValBegin (STR_ItemBegin) +#define STR_ItemValON (STR_ItemValBegin + 0) +#define STR_ItemValOFF (STR_ItemValBegin + 1) +#define STR_ItemValYES (STR_ItemValBegin + 2) +#define STR_ItemValNO (STR_ItemValBegin + 3) +#define STR_ItemValCAPTIONTYPE1 (STR_ItemValBegin + 4) +#define STR_ItemValCAPTIONTYPE2 (STR_ItemValBegin + 5) +#define STR_ItemValCAPTIONTYPE3 (STR_ItemValBegin + 6) +#define STR_ItemValCAPTIONTYPE4 (STR_ItemValBegin + 7) +#define STR_ItemValCAPTIONESCHORI (STR_ItemValBegin + 8) +#define STR_ItemValCAPTIONESCVERT (STR_ItemValBegin + 9) +#define STR_ItemValCAPTIONESCBESTFIT (STR_ItemValBegin + 10) +#define STR_ItemValFITTOSIZENONE (STR_ItemValBegin + 11) +#define STR_ItemValFITTOSIZEPROP (STR_ItemValBegin + 12) +#define STR_ItemValFITTOSIZEALLLINES (STR_ItemValBegin + 13) +#define STR_ItemValFITTOSIZERESIZEAT (STR_ItemValBegin + 14) +#define STR_ItemValTEXTVADJTOP (STR_ItemValBegin + 15) +#define STR_ItemValTEXTVADJCENTER (STR_ItemValBegin + 16) +#define STR_ItemValTEXTVADJBOTTOM (STR_ItemValBegin + 17) +#define STR_ItemValTEXTVADJBLOCK (STR_ItemValBegin + 18) +#define STR_ItemValTEXTVADJSTRETCH (STR_ItemValBegin + 19) +#define STR_ItemValTEXTHADJLEFT (STR_ItemValBegin + 20) +#define STR_ItemValTEXTHADJCENTER (STR_ItemValBegin + 21) +#define STR_ItemValTEXTHADJRIGHT (STR_ItemValBegin + 22) +#define STR_ItemValTEXTHADJBLOCK (STR_ItemValBegin + 23) +#define STR_ItemValTEXTHADJSTRETCH (STR_ItemValBegin + 24) +#define STR_ItemValTEXTANI_NONE (STR_ItemValBegin + 25) +#define STR_ItemValTEXTANI_BLINK (STR_ItemValBegin + 26) +#define STR_ItemValTEXTANI_SCROLL (STR_ItemValBegin + 27) +#define STR_ItemValTEXTANI_ALTERNATE (STR_ItemValBegin + 28) +#define STR_ItemValTEXTANI_SLIDE (STR_ItemValBegin + 29) +#define STR_ItemValTEXTANI_LEFT (STR_ItemValBegin + 30) +#define STR_ItemValTEXTANI_RIGHT (STR_ItemValBegin + 31) +#define STR_ItemValTEXTANI_UP (STR_ItemValBegin + 32) +#define STR_ItemValTEXTANI_DOWN (STR_ItemValBegin + 33) +#define STR_ItemValEDGE_ORTHOLINES (STR_ItemValBegin + 34) +#define STR_ItemValEDGE_THREELINES (STR_ItemValBegin + 35) +#define STR_ItemValEDGE_ONELINE (STR_ItemValBegin + 36) +#define STR_ItemValEDGE_BEZIER (STR_ItemValBegin + 37) +#define STR_ItemValMEASURE_STD (STR_ItemValBegin + 38) +#define STR_ItemValMEASURE_RADIUS (STR_ItemValBegin + 39) +#define STR_ItemValMEASURE_TEXTHAUTO (STR_ItemValBegin + 40) +#define STR_ItemValMEASURE_TEXTLEFTOUTSIDE (STR_ItemValBegin + 41) +#define STR_ItemValMEASURE_TEXTINSIDE (STR_ItemValBegin + 42) +#define STR_ItemValMEASURE_TEXTRIGHTOUTSID (STR_ItemValBegin + 43) +#define STR_ItemValMEASURE_TEXTVAUTO (STR_ItemValBegin + 44) +#define STR_ItemValMEASURE_ABOVE (STR_ItemValBegin + 45) +#define STR_ItemValMEASURETEXT_BREAKEDLINE (STR_ItemValBegin + 46) +#define STR_ItemValMEASURE_BELOW (STR_ItemValBegin + 47) +#define STR_ItemValMEASURETEXT_VERTICALCEN (STR_ItemValBegin + 48) +#define STR_ItemValCIRC_FULL (STR_ItemValBegin + 49) +#define STR_ItemValCIRC_SECT (STR_ItemValBegin + 50) +#define STR_ItemValCIRC_CUT (STR_ItemValBegin + 51) +#define STR_ItemValCIRC_ARC (STR_ItemValBegin + 52) +#define STR_ItemValEnd (STR_ItemValCIRC_ARC) + +#define STR_ItemNamBegin (STR_ItemValEnd+1) +#define STR_ItemNam_SHADOW (STR_ItemNamBegin + 0) +#define STR_ItemNam_SHADOWCOLOR (STR_ItemNamBegin + 1) +#define STR_ItemNam_SHADOWXDIST (STR_ItemNamBegin + 2) +#define STR_ItemNam_SHADOWYDIST (STR_ItemNamBegin + 3) +#define STR_ItemNam_SHADOWTRANSPARENCE (STR_ItemNamBegin + 4) +#define STR_ItemNam_SHADOW3D (STR_ItemNamBegin + 5) +#define STR_ItemNam_SHADOWPERSP (STR_ItemNamBegin + 6) +#define STR_ItemNam_CAPTIONTYPE (STR_ItemNamBegin + 13) +#define STR_ItemNam_CAPTIONFIXEDANGLE (STR_ItemNamBegin + 14) +#define STR_ItemNam_CAPTIONANGLE (STR_ItemNamBegin + 15) +#define STR_ItemNam_CAPTIONGAP (STR_ItemNamBegin + 16) +#define STR_ItemNam_CAPTIONESCDIR (STR_ItemNamBegin + 17) +#define STR_ItemNam_CAPTIONESCISREL (STR_ItemNamBegin + 18) +#define STR_ItemNam_CAPTIONESCREL (STR_ItemNamBegin + 19) +#define STR_ItemNam_CAPTIONESCABS (STR_ItemNamBegin + 20) +#define STR_ItemNam_CAPTIONLINELEN (STR_ItemNamBegin + 21) +#define STR_ItemNam_CAPTIONFITLINELEN (STR_ItemNamBegin + 22) + +#define STR_ItemNam_ECKENRADIUS (STR_ItemNamBegin + 30) +#define STR_ItemNam_TEXT_LEFTDIST (STR_ItemNamBegin + 31) +#define STR_ItemNam_TEXT_RIGHTDIST (STR_ItemNamBegin + 32) +#define STR_ItemNam_TEXT_UPPERDIST (STR_ItemNamBegin + 33) +#define STR_ItemNam_TEXT_LOWERDIST (STR_ItemNamBegin + 34) +#define STR_ItemNam_TEXT_AUTOGROWHEIGHT (STR_ItemNamBegin + 35) +#define STR_ItemNam_TEXT_MINFRAMEHEIGHT (STR_ItemNamBegin + 36) +#define STR_ItemNam_TEXT_MAXFRAMEHEIGHT (STR_ItemNamBegin + 37) +#define STR_ItemNam_TEXT_AUTOGROWWIDTH (STR_ItemNamBegin + 38) +#define STR_ItemNam_TEXT_MINFRAMEWIDTH (STR_ItemNamBegin + 39) +#define STR_ItemNam_TEXT_MAXFRAMEWIDTH (STR_ItemNamBegin + 40) +#define STR_ItemNam_TEXT_VERTADJUST (STR_ItemNamBegin + 41) +#define STR_ItemNam_TEXT_HORZADJUST (STR_ItemNamBegin + 42) +#define STR_ItemNam_TEXT_FITTOSIZE (STR_ItemNamBegin + 43) +#define STR_ItemNam_GRAFRED (STR_ItemNamBegin + 44) +#define STR_ItemNam_GRAFGREEN (STR_ItemNamBegin + 45) +#define STR_ItemNam_GRAFBLUE (STR_ItemNamBegin + 46) +#define STR_ItemNam_GRAFLUMINANCE (STR_ItemNamBegin + 47) +#define STR_ItemNam_GRAFCONTRAST (STR_ItemNamBegin + 48) +#define STR_ItemNam_GRAFGAMMA (STR_ItemNamBegin + 49) +#define STR_ItemNam_GRAFTRANSPARENCE (STR_ItemNamBegin + 50) +#define STR_ItemNam_GRAFINVERT (STR_ItemNamBegin + 51) +#define STR_ItemNam_GRAFMODE (STR_ItemNamBegin + 52) +#define STR_ItemNam_GRAFRESERVE2 (STR_ItemNamBegin + 53) +#define STR_ItemNam_GRAFRESERVE3 (STR_ItemNamBegin + 54) +#define STR_ItemNam_GRAFRESERVE4 (STR_ItemNamBegin + 55) +#define STR_ItemNam_GRAFRESERVE5 (STR_ItemNamBegin + 56) +#define STR_ItemNam_GRAFRESERVE6 (STR_ItemNamBegin + 57) +#define STR_ItemNam_RESERVE19 (STR_ItemNamBegin + 58) +#define STR_ItemNamSET_MISC (STR_ItemNamBegin + 59) +#define STR_ItemNam_OBJMOVEPROTECT (STR_ItemNamBegin + 60) +#define STR_ItemNam_OBJSIZEPROTECT (STR_ItemNamBegin + 61) +#define STR_ItemNam_OBJPRINTABLE (STR_ItemNamBegin + 62) +#define STR_ItemNam_LAYERID (STR_ItemNamBegin + 63) +#define STR_ItemNam_LAYERNAME (STR_ItemNamBegin + 64) +#define STR_ItemNam_OBJECTNAME (STR_ItemNamBegin + 65) +#define STR_ItemNam_STARTANGLE (STR_ItemNamBegin + 66) +#define STR_ItemNam_ENDANGLE (STR_ItemNamBegin + 67) +#define STR_ItemNam_POSITIONX (STR_ItemNamBegin + 68) +#define STR_ItemNam_POSITIONY (STR_ItemNamBegin + 69) +#define STR_ItemNam_SIZEWIDTH (STR_ItemNamBegin + 70) +#define STR_ItemNam_SIZEHEIGHT (STR_ItemNamBegin + 71) +#define STR_ItemNam_ROTATEANGLE (STR_ItemNamBegin + 72) +#define STR_ItemNam_SHEARANGLE (STR_ItemNamBegin + 73) +#define STR_ItemNamEnd (STR_ItemNam_SHEARANGLE) +#define STR_ItemEnd STR_ItemNamEnd + +#define BMAP_Begin (STR_ItemEnd+1) +#define BMAP_GrafikEi (BMAP_Begin +0) +#define BMAP_GrafikDe (BMAP_Begin +1) +#define BMAP_End (BMAP_GrafikDe) + +// Strings for the template dialog +#define SIP_Begin (BMAP_End) + +#define SIP_UNKNOWN_ATTR (SIP_Begin + 0) +#define SIP_XA_LINESTYLE (SIP_Begin + 1) +#define SIP_XA_LINEDASH (SIP_Begin + 2) +#define SIP_XA_LINEWIDTH (SIP_Begin + 3) +#define SIP_XA_LINECOLOR (SIP_Begin + 4) +#define SIP_XA_LINESTART (SIP_Begin + 5) +#define SIP_XA_LINEEND (SIP_Begin + 6) +#define SIP_XA_LINESTARTWIDTH (SIP_Begin + 7) +#define SIP_XA_LINEENDWIDTH (SIP_Begin + 8) +#define SIP_XA_LINESTARTCENTER (SIP_Begin + 9) +#define SIP_XA_LINEENDCENTER (SIP_Begin + 10) +#define SIP_XA_LINETRANSPARENCE (SIP_Begin + 11) +#define SIP_XA_LINEJOINT (SIP_Begin + 12) +#define SIP_XA_LINERESERVED2 (SIP_Begin + 13) +#define SIP_XA_LINERESERVED3 (SIP_Begin + 14) +#define SIP_XA_LINERESERVED4 (SIP_Begin + 15) +#define SIP_XA_LINERESERVED5 (SIP_Begin + 16) +#define SIP_XA_LINERESERVED_LAST (SIP_Begin + 17) +#define SIP_XATTRSET_LINE (SIP_Begin + 18) +#define SIP_XA_FILLSTYLE (SIP_Begin + 19) +#define SIP_XA_FILLCOLOR (SIP_Begin + 20) +#define SIP_XA_FILLGRADIENT (SIP_Begin + 21) +#define SIP_XA_FILLHATCH (SIP_Begin + 22) +#define SIP_XA_FILLBITMAP (SIP_Begin + 23) +#define SIP_XA_FILLTRANSPARENCE (SIP_Begin + 24) +#define SIP_XA_GRADIENTSTEPCOUNT (SIP_Begin + 25) +#define SIP_XA_FILLBMP_TILE (SIP_Begin + 26) +#define SIP_XA_FILLBMP_POS (SIP_Begin + 27) +#define SIP_XA_FILLBMP_SIZEX (SIP_Begin + 28) +#define SIP_XA_FILLBMP_SIZEY (SIP_Begin + 29) +#define SIP_XA_FILLFLOATTRANSPARENCE (SIP_Begin + 30) +#define SIP_XA_SECONDARYFILLCOLOR (SIP_Begin + 31) +#define SIP_XA_FILLBMP_SIZELOG (SIP_Begin + 32) +#define SIP_XA_FILLBMP_TILEOFFSETX (SIP_Begin + 33) +#define SIP_XA_FILLBMP_TILEOFFSETY (SIP_Begin + 34) +#define SIP_XA_FILLBMP_STRETCH (SIP_Begin + 35) +#define SIP_XA_FILLRESERVED3 (SIP_Begin + 36) +#define SIP_XA_FILLRESERVED4 (SIP_Begin + 37) +#define SIP_XA_FILLRESERVED5 (SIP_Begin + 38) +#define SIP_XA_FILLRESERVED6 (SIP_Begin + 39) +#define SIP_XA_FILLRESERVED7 (SIP_Begin + 40) +#define SIP_XA_FILLRESERVED8 (SIP_Begin + 41) +#define SIP_XA_FILLBMP_POSOFFSETX (SIP_Begin + 42) +#define SIP_XA_FILLBMP_POSOFFSETY (SIP_Begin + 43) +#define SIP_XA_FILLBACKGROUND (SIP_Begin + 44) +#define SIP_XA_FILLRESERVED10 (SIP_Begin + 45) +#define SIP_XA_FILLRESERVED11 (SIP_Begin + 46) +#define SIP_XA_FILLRESERVED_LAST (SIP_Begin + 47) +#define SIP_XATTRSET_FILL (SIP_Begin + 48) +#define SIP_XA_FORMTXTSTYLE (SIP_Begin + 49) +#define SIP_XA_FORMTXTADJUST (SIP_Begin + 50) +#define SIP_XA_FORMTXTDISTANCE (SIP_Begin + 51) +#define SIP_XA_FORMTXTSTART (SIP_Begin + 52) +#define SIP_XA_FORMTXTMIRROR (SIP_Begin + 53) +#define SIP_XA_FORMTXTOUTLINE (SIP_Begin + 54) +#define SIP_XA_FORMTXTSHADOW (SIP_Begin + 55) +#define SIP_XA_FORMTXTSHDWCOLOR (SIP_Begin + 56) +#define SIP_XA_FORMTXTSHDWXVAL (SIP_Begin + 57) +#define SIP_XA_FORMTXTSHDWYVAL (SIP_Begin + 58) +#define SIP_XA_FORMTXTSTDFORM (SIP_Begin + 59) +#define SIP_XA_FORMTXTHIDEFORM (SIP_Begin + 60) +#define SIP_XA_FORMTXTSHDWTRANSP (SIP_Begin + 61) +#define SIP_XA_FTRESERVED2 (SIP_Begin + 62) +#define SIP_XA_FTRESERVED3 (SIP_Begin + 63) +#define SIP_XA_FTRESERVED4 (SIP_Begin + 64) +#define SIP_XA_FTRESERVED5 (SIP_Begin + 65) +#define SIP_XA_FTRESERVED_LAST (SIP_Begin + 66) +#define SIP_SA_SHADOW (SIP_Begin + 68) +#define SIP_SA_SHADOWCOLOR (SIP_Begin + 69) +#define SIP_SA_SHADOWXDIST (SIP_Begin + 70) +#define SIP_SA_SHADOWYDIST (SIP_Begin + 71) +#define SIP_SA_SHADOWTRANSPARENCE (SIP_Begin + 72) +#define SIP_SA_SHADOW3D (SIP_Begin + 73) +#define SIP_SA_SHADOWPERSP (SIP_Begin + 74) +#define SIP_SA_CAPTIONTYPE (SIP_Begin + 81) +#define SIP_SA_CAPTIONFIXEDANGLE (SIP_Begin + 82) +#define SIP_SA_CAPTIONANGLE (SIP_Begin + 83) +#define SIP_SA_CAPTIONGAP (SIP_Begin + 84) +#define SIP_SA_CAPTIONESCDIR (SIP_Begin + 85) +#define SIP_SA_CAPTIONESCISREL (SIP_Begin + 86) +#define SIP_SA_CAPTIONESCREL (SIP_Begin + 87) +#define SIP_SA_CAPTIONESCABS (SIP_Begin + 88) +#define SIP_SA_CAPTIONLINELEN (SIP_Begin + 89) +#define SIP_SA_CAPTIONFITLINELEN (SIP_Begin + 90) +#define SIP_SA_ECKENRADIUS (SIP_Begin + 98) +#define SIP_SA_TEXT_MINFRAMEHEIGHT (SIP_Begin + 99) +#define SIP_SA_TEXT_AUTOGROWHEIGHT (SIP_Begin + 100) +#define SIP_SA_TEXT_FITTOSIZE (SIP_Begin + 101) +#define SIP_SA_TEXT_LEFTDIST (SIP_Begin + 102) +#define SIP_SA_TEXT_RIGHTDIST (SIP_Begin + 103) +#define SIP_SA_TEXT_UPPERDIST (SIP_Begin + 104) +#define SIP_SA_TEXT_LOWERDIST (SIP_Begin + 105) +#define SIP_SA_TEXT_VERTADJUST (SIP_Begin + 106) +#define SIP_SA_TEXT_MAXFRAMEHEIGHT (SIP_Begin + 107) +#define SIP_SA_TEXT_MINFRAMEWIDTH (SIP_Begin + 108) +#define SIP_SA_TEXT_MAXFRAMEWIDTH (SIP_Begin + 109) +#define SIP_SA_TEXT_AUTOGROWWIDTH (SIP_Begin + 110) +#define SIP_SA_TEXT_HORZADJUST (SIP_Begin + 111) +#define SIP_SA_TEXT_ANIKIND (SIP_Begin + 112) +#define SIP_SA_TEXT_ANIDIRECTION (SIP_Begin + 113) +#define SIP_SA_TEXT_ANISTARTINSIDE (SIP_Begin + 114) +#define SIP_SA_TEXT_ANISTOPINSIDE (SIP_Begin + 115) +#define SIP_SA_TEXT_ANICOUNT (SIP_Begin + 116) +#define SIP_SA_TEXT_ANIDELAY (SIP_Begin + 117) +#define SIP_SA_TEXT_ANIAMOUNT (SIP_Begin + 118) +#define SIP_SA_TEXT_CONTOURFRAME (SIP_Begin + 119) +#define SIP_SA_CUSTOMSHAPE_ADJUSTMENT (SIP_Begin + 120) +#define SIP_SA_XMLATTRIBUTES (SIP_Begin + 121) +#define SIP_SA_TEXT_USEFIXEDCELLHEIGHT (SIP_Begin + 122) +#define SIP_SA_WORDWRAP (SIP_Begin + 123) +#define SIP_SA_AUTOGROWSIZE (SIP_Begin + 124) +#define SIP_SA_RESERVE18 (SIP_Begin + 125) +#define SIP_SA_RESERVE19 (SIP_Begin + 126) +#define SIP_SA_EDGEKIND (SIP_Begin + 128) +#define SIP_SA_EDGENODE1HORZDIST (SIP_Begin + 129) +#define SIP_SA_EDGENODE1VERTDIST (SIP_Begin + 130) +#define SIP_SA_EDGENODE2HORZDIST (SIP_Begin + 131) +#define SIP_SA_EDGENODE2VERTDIST (SIP_Begin + 132) +#define SIP_SA_EDGENODE1GLUEDIST (SIP_Begin + 133) +#define SIP_SA_EDGENODE2GLUEDIST (SIP_Begin + 134) +#define SIP_SA_EDGELINEDELTAANZ (SIP_Begin + 135) +#define SIP_SA_EDGELINE1DELTA (SIP_Begin + 136) +#define SIP_SA_EDGELINE2DELTA (SIP_Begin + 137) +#define SIP_SA_EDGELINE3DELTA (SIP_Begin + 138) +#define SIP_SA_MEASUREKIND (SIP_Begin + 148) +#define SIP_SA_MEASURETEXTHPOS (SIP_Begin + 149) +#define SIP_SA_MEASURETEXTVPOS (SIP_Begin + 150) +#define SIP_SA_MEASURELINEDIST (SIP_Begin + 151) +#define SIP_SA_MEASUREHELPLINEOVERHANG (SIP_Begin + 152) +#define SIP_SA_MEASUREHELPLINEDIST (SIP_Begin + 153) +#define SIP_SA_MEASUREHELPLINE1LEN (SIP_Begin + 154) +#define SIP_SA_MEASUREHELPLINE2LEN (SIP_Begin + 155) +#define SIP_SA_MEASUREBELOWREFEDGE (SIP_Begin + 156) +#define SIP_SA_MEASURETEXTROTA90 (SIP_Begin + 157) +#define SIP_SA_MEASURETEXTUPSIDEDOWN (SIP_Begin + 158) +#define SIP_SA_MEASUREOVERHANG (SIP_Begin + 159) +#define SIP_SA_MEASUREUNIT (SIP_Begin + 160) +#define SIP_SA_MEASURESCALE (SIP_Begin + 161) +#define SIP_SA_MEASURESHOWUNIT (SIP_Begin + 162) +#define SIP_SA_MEASUREFORMATSTRING (SIP_Begin + 163) +#define SIP_SA_MEASURETEXTAUTOANGLE (SIP_Begin + 164) +#define SIP_SA_MEASURETEXTAUTOANGLEVIEW (SIP_Begin + 165) +#define SIP_SA_MEASURETEXTISFIXEDANGLE (SIP_Begin + 166) +#define SIP_SA_MEASURETEXTFIXEDANGLE (SIP_Begin + 167) +#define SIP_SA_MEASUREDECIMALPLACES (SIP_Begin + 168) +#define SIP_SA_MEASURERESERVE05 (SIP_Begin + 169) +#define SIP_SA_MEASURERESERVE06 (SIP_Begin + 170) +#define SIP_SA_MEASURERESERVE07 (SIP_Begin + 171) +#define SIP_SA_CIRCKIND (SIP_Begin + 173) +#define SIP_SA_CIRCSTARTANGLE (SIP_Begin + 174) +#define SIP_SA_CIRCENDANGLE (SIP_Begin + 175) +#define SIP_SA_CIRCRESERVE0 (SIP_Begin + 176) +#define SIP_SA_CIRCRESERVE1 (SIP_Begin + 177) +#define SIP_SA_CIRCRESERVE2 (SIP_Begin + 178) +#define SIP_SA_CIRCRESERVE3 (SIP_Begin + 179) +#define SIP_SA_OBJVISIBLE (SIP_Begin + 180) +#define SIP_SA_OBJMOVEPROTECT (SIP_Begin + 181) +#define SIP_SA_OBJSIZEPROTECT (SIP_Begin + 182) +#define SIP_SA_OBJPRINTABLE (SIP_Begin + 183) +#define SIP_SA_LAYERID (SIP_Begin + 184) +#define SIP_SA_LAYERNAME (SIP_Begin + 185) +#define SIP_SA_OBJECTNAME (SIP_Begin + 186) +#define SIP_SA_ALLPOSITIONX (SIP_Begin + 187) +#define SIP_SA_ALLPOSITIONY (SIP_Begin + 188) +#define SIP_SA_ALLSIZEWIDTH (SIP_Begin + 189) +#define SIP_SA_ALLSIZEHEIGHT (SIP_Begin + 190) +#define SIP_SA_ONEPOSITIONX (SIP_Begin + 191) +#define SIP_SA_ONEPOSITIONY (SIP_Begin + 192) +#define SIP_SA_ONESIZEWIDTH (SIP_Begin + 193) +#define SIP_SA_ONESIZEHEIGHT (SIP_Begin + 194) +#define SIP_SA_LOGICSIZEWIDTH (SIP_Begin + 195) +#define SIP_SA_LOGICSIZEHEIGHT (SIP_Begin + 196) +#define SIP_SA_ROTATEANGLE (SIP_Begin + 197) +#define SIP_SA_SHEARANGLE (SIP_Begin + 198) +#define SIP_SA_MOVEX (SIP_Begin + 199) +#define SIP_SA_MOVEY (SIP_Begin + 200) +#define SIP_SA_RESIZEXONE (SIP_Begin + 201) +#define SIP_SA_RESIZEYONE (SIP_Begin + 202) +#define SIP_SA_ROTATEONE (SIP_Begin + 203) +#define SIP_SA_HORZSHEARONE (SIP_Begin + 204) +#define SIP_SA_VERTSHEARONE (SIP_Begin + 205) +#define SIP_SA_RESIZEXALL (SIP_Begin + 206) +#define SIP_SA_RESIZEYALL (SIP_Begin + 207) +#define SIP_SA_ROTATEALL (SIP_Begin + 208) +#define SIP_SA_HORZSHEARALL (SIP_Begin + 209) +#define SIP_SA_VERTSHEARALL (SIP_Begin + 210) +#define SIP_SA_TRANSFORMREF1X (SIP_Begin + 211) +#define SIP_SA_TRANSFORMREF1Y (SIP_Begin + 212) +#define SIP_SA_TRANSFORMREF2X (SIP_Begin + 213) +#define SIP_SA_TRANSFORMREF2Y (SIP_Begin + 214) +#define SIP_EE_PARA_HYPHENATE (SIP_Begin + 215) +#define SIP_EE_PARA_BULLETSTATE (SIP_Begin + 216) +#define SIP_EE_PARA_OUTLLRSPACE (SIP_Begin + 217) +#define SIP_EE_PARA_OUTLLEVEL (SIP_Begin + 218) +#define SIP_EE_PARA_BULLET (SIP_Begin + 219) +#define SIP_EE_PARA_LRSPACE (SIP_Begin + 220) +#define SIP_EE_PARA_ULSPACE (SIP_Begin + 221) +#define SIP_EE_PARA_SBL (SIP_Begin + 222) +#define SIP_EE_PARA_JUST (SIP_Begin + 223) +#define SIP_EE_PARA_TABS (SIP_Begin + 224) +#define SIP_EE_CHAR_COLOR (SIP_Begin + 225) +#define SIP_EE_CHAR_FONTINFO (SIP_Begin + 226) +#define SIP_EE_CHAR_FONTHEIGHT (SIP_Begin + 227) +#define SIP_EE_CHAR_FONTWIDTH (SIP_Begin + 228) +#define SIP_EE_CHAR_WEIGHT (SIP_Begin + 229) +#define SIP_EE_CHAR_UNDERLINE (SIP_Begin + 230) +#define SIP_EE_CHAR_OVERLINE (SIP_Begin + 231) +#define SIP_EE_CHAR_STRIKEOUT (SIP_Begin + 232) +#define SIP_EE_CHAR_ITALIC (SIP_Begin + 233) +#define SIP_EE_CHAR_OUTLINE (SIP_Begin + 234) +#define SIP_EE_CHAR_SHADOW (SIP_Begin + 235) +#define SIP_EE_CHAR_ESCAPEMENT (SIP_Begin + 236) +#define SIP_EE_CHAR_PAIRKERNING (SIP_Begin + 237) +#define SIP_EE_CHAR_KERNING (SIP_Begin + 238) +#define SIP_EE_CHAR_WLM (SIP_Begin + 239) +#define SIP_EE_FEATURE_TAB (SIP_Begin + 240) +#define SIP_EE_FEATURE_LINEBR (SIP_Begin + 241) +#define SIP_EE_FEATURE_NOTCONV (SIP_Begin + 242) +#define SIP_EE_FEATURE_FIELD (SIP_Begin + 243) + +#define SIP_SA_GRAFRED (SIP_Begin + 244) +#define SIP_SA_GRAFGREEN (SIP_Begin + 245) +#define SIP_SA_GRAFBLUE (SIP_Begin + 246) +#define SIP_SA_GRAFLUMINANCE (SIP_Begin + 247) +#define SIP_SA_GRAFCONTRAST (SIP_Begin + 248) +#define SIP_SA_GRAFGAMMA (SIP_Begin + 249) +#define SIP_SA_GRAFTRANSPARENCE (SIP_Begin + 250) +#define SIP_SA_GRAFINVERT (SIP_Begin + 251) +#define SIP_SA_GRAFMODE (SIP_Begin + 252) +#define SIP_SA_GRAFCROP (SIP_Begin + 253) +#define SIP_SA_GRAFRESERVE3 (SIP_Begin + 254) +#define SIP_SA_GRAFRESERVE4 (SIP_Begin + 255) +#define SIP_SA_GRAFRESERVE5 (SIP_Begin + 256) +#define SIP_SA_GRAFRESERVE6 (SIP_Begin + 257) + +#define SIP_SA_MARKERS (SIP_Begin + 258) +#define SIP_SA_PAGESHADOW35X35 (SIP_Begin + 259) + +#define BMP_SVXOLEOBJ (SIP_Begin + 261) + +#define STR_TABLE_ATTR (SIP_Begin + 263) +#define STR_TABLE_AUTOFMT (SIP_Begin + 264) +#define STR_TABLE_INSCOL (SIP_Begin + 265) +#define STR_TABLE_INSROW (SIP_Begin + 266) +#define STR_UNDO_COL_DELETE (SIP_Begin + 267) +#define STR_UNDO_ROW_DELETE (SIP_Begin + 268) +#define STR_TABLE_SPLIT (SIP_Begin + 269) +#define STR_TABLE_MERGE (SIP_Begin + 270) +#define STR_TABLE_NUMFORMAT (SIP_Begin + 271) +#define STR_TABLE_DISTRIBUTE_ROWS (SIP_Begin + 272) +#define STR_TABLE_DISTRIBUTE_COLUMNS (SIP_Begin + 273) +#define STR_TABLE_STYLE (SIP_Begin + 274) +#define STR_TABLE_STYLE_SETTINGS (SIP_Begin + 275) +#define SIP_SA_CROP_MARKERS (SIP_Begin + 276) + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdtext.hxx b/include/svx/svdtext.hxx new file mode 100644 index 000000000000..810f701d55fc --- /dev/null +++ b/include/svx/svdtext.hxx @@ -0,0 +1,82 @@ +/* -*- 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 _SVDTEXT_HXX +#define _SVDTEXT_HXX + +#include <sal/types.h> +#include "svx/svxdllapi.h" +#include <tools/weakbase.hxx> + +// -------------------------------------------------------------------- + +class OutlinerParaObject; +class SdrOutliner; +class SdrTextObj; +class SdrModel; +class SfxItemSet; + +namespace sdr { namespace properties { + class TextProperties; +}} + +/** This class stores information about one text inside a shape. +*/ + +class SfxStyleSheet; +class SVX_DLLPUBLIC SdrText : public tools::WeakBase< SdrText > +{ +public: + SdrText( SdrTextObj& rObject, OutlinerParaObject* pOutlinerParaObject = 0 ); + virtual ~SdrText(); + + virtual void SetModel(SdrModel* pNewModel); + virtual void ForceOutlinerParaObject( sal_uInt16 nOutlMode ); + + virtual void SetOutlinerParaObject( OutlinerParaObject* pTextObject ); + virtual OutlinerParaObject* GetOutlinerParaObject() const; + + virtual void CheckPortionInfo( SdrOutliner& rOutliner ); + virtual void ReformatText(); + + // default uses GetObjectItemSet, but may be overloaded to + // return a text-specific ItemSet + virtual const SfxItemSet& GetItemSet() const; + + SdrModel* GetModel() const { return mpModel; } + SdrTextObj& GetObject() const { return mrObject; } + + /** returns the current OutlinerParaObject and removes it from this instance */ + OutlinerParaObject* RemoveOutlinerParaObject(); + +protected: + virtual const SfxItemSet& GetObjectItemSet(); + virtual void SetObjectItem(const SfxPoolItem& rItem); + virtual SfxStyleSheet* GetStyleSheet() const; + +private: + OutlinerParaObject* mpOutlinerParaObject; + SdrTextObj& mrObject; + SdrModel* mpModel; + bool mbPortionInfoChecked; +}; + +#endif //_SVDTEXT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdtrans.hxx b/include/svx/svdtrans.hxx new file mode 100644 index 000000000000..c86fd0d35582 --- /dev/null +++ b/include/svx/svdtrans.hxx @@ -0,0 +1,304 @@ +/* -*- 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 _SVDTRANS_HXX +#define _SVDTRANS_HXX + +#include <tools/gen.hxx> +#include <tools/poly.hxx> +#include <tools/fract.hxx> + +#include <vcl/mapmod.hxx> +#include <tools/string.hxx> +#include "svx/svxdllapi.h" + +#include <vcl/field.hxx> + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +// Winkelangaben der DrawingEngine sind 1/100 Degree +// #i19054# nowhere used, removed // const int nWinkDiv=100; +// Um Winkel der DrawingEngine mit den Trigonometrischen Funktionen +// verarbeiten zu koennen, muessen sie zunaest ins Bogenmass umgerechnet +// werden. Dies gestaltet sich recht einfach mit der folgenden Konstanten +// nPi180. Sei nWink ein Winkel in 1/100 Deg so schreibt man z.B.: +// double nSin=sin(nWink*nPi180); +// Rueckwandlung entsprechend durch Teilen. +const double nPi=3.14159265358979323846; +const double nPi180=0.000174532925199432957692222; // Bei zuweing Stellen ist tan(4500*nPi180)!=1.0 + +// Der maximale Shearwinkel +#define SDRMAXSHEAR 8900 + +class XPolygon; +class XPolyPolygon; + +inline long Round(double a) { return a>0.0 ? (long)(a+0.5) : -(long)((-a)+0.5); } + +inline void MoveRect(Rectangle& rRect, const Size& S) { rRect.Move(S.Width(),S.Height()); } +inline void MovePoint(Point& rPnt, const Size& S) { rPnt.X()+=S.Width(); rPnt.Y()+=S.Height(); } +inline void MovePoly(Polygon& rPoly, const Size& S) { rPoly.Move(S.Width(),S.Height()); } +inline void MovePoly(PolyPolygon& rPoly, const Size& S) { rPoly.Move(S.Width(),S.Height()); } +void MoveXPoly(XPolygon& rPoly, const Size& S); + +SVX_DLLPUBLIC void ResizeRect(Rectangle& rRect, const Point& rRef, const Fraction& xFact, const Fraction& yFact, bool bNoJustify = false); +inline void ResizePoint(Point& rPnt, const Point& rRef, Fraction xFact, Fraction yFact); +void ResizePoly(Polygon& rPoly, const Point& rRef, const Fraction& xFact, const Fraction& yFact); +void ResizeXPoly(XPolygon& rPoly, const Point& rRef, const Fraction& xFact, const Fraction& yFact); + +inline void RotatePoint(Point& rPnt, const Point& rRef, double sn, double cs); +SVX_DLLPUBLIC void RotatePoly(Polygon& rPoly, const Point& rRef, double sn, double cs); +void RotateXPoly(XPolygon& rPoly, const Point& rRef, double sn, double cs); +void RotateXPoly(XPolyPolygon& rPoly, const Point& rRef, double sn, double cs); + +void MirrorPoint(Point& rPnt, const Point& rRef1, const Point& rRef2); +void MirrorPoly(Polygon& rPoly, const Point& rRef1, const Point& rRef2); +void MirrorXPoly(XPolygon& rPoly, const Point& rRef1, const Point& rRef2); + +inline void ShearPoint(Point& rPnt, const Point& rRef, double tn, bool bVShear = false); +SVX_DLLPUBLIC void ShearPoly(Polygon& rPoly, const Point& rRef, double tn, bool bVShear = false); +void ShearXPoly(XPolygon& rPoly, const Point& rRef, double tn, bool bVShear = false); + +// rPnt.X bzw rPnt.Y wird auf rCenter.X bzw. rCenter.Y gesetzt! +// anschliessend muss rPnt nur noch um rCenter gedreht werden. +// Der Rueckgabewinkel ist ausnahmsweise in Rad. +inline double GetCrookAngle(Point& rPnt, const Point& rCenter, const Point& rRad, bool bVertical); +// Die folgenden Methoden behandeln einen Punkt eines XPolygons, wobei die +// benachbarten Kontrollpunkte des eigentlichen Punktes ggf. in pC1/pC2 +// uebergeben werden. Ueber rSin/rCos wird gleichzeitig sin(nWink) und cos(nWink) +// zurueckgegeben. +// Der Rueckgabewinkel ist hier ebenfalls in Rad. +double CrookRotateXPoint(Point& rPnt, Point* pC1, Point* pC2, const Point& rCenter, + const Point& rRad, double& rSin, double& rCos, bool bVert); +double CrookSlantXPoint(Point& rPnt, Point* pC1, Point* pC2, const Point& rCenter, + const Point& rRad, double& rSin, double& rCos, bool bVert); +double CrookStretchXPoint(Point& rPnt, Point* pC1, Point* pC2, const Point& rCenter, + const Point& rRad, double& rSin, double& rCos, bool bVert, + const Rectangle rRefRect); + +void CrookRotatePoly(XPolygon& rPoly, const Point& rCenter, const Point& rRad, bool bVert); +void CrookSlantPoly(XPolygon& rPoly, const Point& rCenter, const Point& rRad, bool bVert); +void CrookStretchPoly(XPolygon& rPoly, const Point& rCenter, const Point& rRad, bool bVert, const Rectangle rRefRect); + +void CrookRotatePoly(XPolyPolygon& rPoly, const Point& rCenter, const Point& rRad, bool bVert); +void CrookSlantPoly(XPolyPolygon& rPoly, const Point& rCenter, const Point& rRad, bool bVert); +void CrookStretchPoly(XPolyPolygon& rPoly, const Point& rCenter, const Point& rRad, bool bVert, const Rectangle rRefRect); + +/**************************************************************************************************/ +/* Inline */ +/**************************************************************************************************/ + +inline void ResizePoint(Point& rPnt, const Point& rRef, Fraction xFact, Fraction yFact) +{ + if (xFact.GetDenominator()==0) xFact=Fraction(xFact.GetNumerator(),1); // DivZero abfangen + if (yFact.GetDenominator()==0) yFact=Fraction(yFact.GetNumerator(),1); // DivZero abfangen + rPnt.X()=rRef.X()+ Round(((double)(rPnt.X()-rRef.X())*xFact.GetNumerator())/xFact.GetDenominator()); + rPnt.Y()=rRef.Y()+ Round(((double)(rPnt.Y()-rRef.Y())*yFact.GetNumerator())/yFact.GetDenominator()); +} + +inline void RotatePoint(Point& rPnt, const Point& rRef, double sn, double cs) +{ + long dx=rPnt.X()-rRef.X(); + long dy=rPnt.Y()-rRef.Y(); + rPnt.X()=Round(rRef.X()+dx*cs+dy*sn); + rPnt.Y()=Round(rRef.Y()+dy*cs-dx*sn); +} + +inline void ShearPoint(Point& rPnt, const Point& rRef, double tn, bool bVShear) +{ + if (!bVShear) { // Horizontal + if (rPnt.Y()!=rRef.Y()) { // sonst nicht noetig + rPnt.X()-=Round((rPnt.Y()-rRef.Y())*tn); + } + } else { // ansonsten vertikal + if (rPnt.X()!=rRef.X()) { // sonst nicht noetig + rPnt.Y()-=Round((rPnt.X()-rRef.X())*tn); + } + } +} + +inline double GetCrookAngle(Point& rPnt, const Point& rCenter, const Point& rRad, bool bVertical) +{ + double nWink; + if (bVertical) { + long dy=rPnt.Y()-rCenter.Y(); + nWink=(double)dy/(double)rRad.Y(); + rPnt.Y()=rCenter.Y(); + } else { + long dx=rCenter.X()-rPnt.X(); + nWink=(double)dx/(double)rRad.X(); + rPnt.X()=rCenter.X(); + } + return nWink; +} + +/**************************************************************************************************/ +/**************************************************************************************************/ + +// Y-Achse zeigt nach unten! Die Funktion negiert bei der +// Winkelberechnung die Y-Achse, sodass GetAngle(Point(0,-1))=90.00deg. +// GetAngle(Point(0,0)) liefert 0. +// Der Rueckgabewert liegt im Bereich -180.00..179.99 Degree und +// ist in 1/100 Degree angegeben. +SVX_DLLPUBLIC long GetAngle(const Point& rPnt); +long NormAngle180(long a); // Winkel normalisieren auf -180.00..179.99 +SVX_DLLPUBLIC long NormAngle360(long a); // Winkel normalisieren auf 0.00..359.99 +sal_uInt16 GetAngleSector(long nWink); // Sektor im kartesischen Koordinatensystem bestimmen +// Berechnet die Laenge von (0,0) via a^2 + b^2 = c^2 +// Zur Vermeidung von Ueberlaeufen werden ggf. einige Stellen ignoriert. +long GetLen(const Point& rPnt); + +/* + Transformation eines Rechtecks in ein Polygon unter ------------ + Anwendung der Winkelparameter aus GeoStat. /1 2/ + Referenzpunkt ist stets der Punkt 0, also die linke / / + obere Ecke des Ausgangsrects. / / + Bei der Berechnung des Polygons ist die Reihenfolge / / + (erst Shear, dann Rotation vorgegeben). / / \ + / / | + A) Ausgangsrechteck aRect B) Nach Anwendung von Shear /0 3/ Rot| + +------------------+ -------------------- ------------ ------ + |0 1| \0 1\ C) Nach Anwendung + | | \ \ von Rotate + | | | \ \ + |3 2| | \3 2\ + +------------------+ | -------------------- + |Shr | + Bei Rueckkonvertierung des Polygons in ein Rect ist die Reihenfolge + zwangslaeufig umgekehrt: + - Berechnung des Drehwinkels: Winkel der Strecke 0-1 aus Abb. C) zum Horizont + - Rueckdrehung des geshearten Rects (man erhaelt Abb B)) + - Bestimmung der Breite des Rects=Laenge der Strecke 0-1 aus Abb. B) + - Bestimmung der Hoehe des Rects=vertikaler Abstand zwischen den Punkten + 0 und 3 aus Abb. B) + - Bestimmung des Shear-Winkels aus der Strecke 0-3 zur Senkrechten. + Es ist darauf zu achten, dass das Polygon bei einer zwischenzeitlichen + Transformation evtl. gespiegelt wurde (Mirror oder Resize mit neg. Faktor). + In diesem Fall muss zunaecht eine Normalisierung durch Vertauschung der + Punkte (z.B. 0 mit 3 und 1 mit 2) durchgefuehrt werden, damit der + Richtungssinn im Polygon wieder stimmig ist. + Hinweis: Positiver Shear-Winkel bedeutet Shear mit auf dem Bildschirm + sichtbarer positiver Kursivierung. Mathematisch waere dass eine negative + Kursivierung, da die Y-Achse auf dem Bildschirm von oben nach unten verlaeuft. + Drehwinkel: Positiv bedeutet auf dem Bildschirm sichtbare Linksdrehung. +*/ + +class GeoStat { // Geometrischer Status fuer ein Rect +public: + long nDrehWink; + long nShearWink; + double nTan; // tan(nShearWink) + double nSin; // sin(nDrehWink) + double nCos; // cos(nDrehWink) + bool bMirrored; // Horizontal gespiegelt? (ni) +public: + GeoStat(): nDrehWink(0),nShearWink(0),nTan(0.0),nSin(0.0),nCos(1.0),bMirrored(false) {} + void RecalcSinCos(); + void RecalcTan(); +}; + +Polygon Rect2Poly(const Rectangle& rRect, const GeoStat& rGeo); +void Poly2Rect(const Polygon& rPol, Rectangle& rRect, GeoStat& rGeo); + +SVX_DLLPUBLIC void OrthoDistance8(const Point& rPt0, Point& rPt, bool bBigOrtho); +SVX_DLLPUBLIC void OrthoDistance4(const Point& rPt0, Point& rPt, bool bBigOrtho); + +// Multiplikation und anschliessende Division. +// Rechnung und Zwischenergebnis sind BigInt. +SVX_DLLPUBLIC long BigMulDiv(long nVal, long nMul, long nDiv); + +// Fehlerbehaftetes Kuerzen einer Fraction. +// nDigits gibt an, wieviele signifikante Stellen in +// Zaehler/Nenner mindestens erhalten bleiben sollen. +void Kuerzen(Fraction& rF, unsigned nDigits); + + +class FrPair { + Fraction aX; + Fraction aY; +public: + FrPair() : aX(0,1),aY(0,1) {} + FrPair(const Fraction& rBoth) : aX(rBoth),aY(rBoth) {} + FrPair(const Fraction& rX, const Fraction& rY) : aX(rX),aY(rY) {} + FrPair(long nMul, long nDiv) : aX(nMul,nDiv),aY(nMul,nDiv) {} + FrPair(long xMul, long xDiv, long yMul, long yDiv): aX(xMul,xDiv),aY(yMul,yDiv) {} + const Fraction& X() const { return aX; } + const Fraction& Y() const { return aY; } + Fraction& X() { return aX; } + Fraction& Y() { return aY; } +}; + +// Fuer die Umrechnung von Masseinheiten +SVX_DLLPUBLIC FrPair GetMapFactor(MapUnit eS, MapUnit eD); +FrPair GetMapFactor(FieldUnit eS, FieldUnit eD); + +inline bool IsMetric(MapUnit eU) { + return (eU==MAP_100TH_MM || eU==MAP_10TH_MM || eU==MAP_MM || eU==MAP_CM); +} + +inline bool IsInch(MapUnit eU) { + return (eU==MAP_1000TH_INCH || eU==MAP_100TH_INCH || eU==MAP_10TH_INCH || eU==MAP_INCH || + eU==MAP_POINT || eU==MAP_TWIP); +} + +inline bool IsMetric(FieldUnit eU) { + return (eU==FUNIT_MM || eU==FUNIT_CM || eU==FUNIT_M || eU==FUNIT_KM || eU==FUNIT_100TH_MM); +} + +inline bool IsInch(FieldUnit eU) { + return (eU==FUNIT_TWIP || eU==FUNIT_POINT || eU==FUNIT_PICA || + eU==FUNIT_INCH || eU==FUNIT_FOOT || eU==FUNIT_MILE); +} + +class SVX_DLLPUBLIC SdrFormatter { + Fraction aScale; + long nMul_; + long nDiv_; + short nKomma_; + bool bSrcFU; + bool bDstFU; + bool bDirty; + MapUnit eSrcMU; + MapUnit eDstMU; + FieldUnit eSrcFU; + FieldUnit eDstFU; +private: + SVX_DLLPRIVATE void Undirty(); + SVX_DLLPRIVATE void ForceUndirty() const { if (bDirty) ((SdrFormatter*)this)->Undirty(); } +public: + SdrFormatter(MapUnit eSrc, MapUnit eDst) { eSrcMU=eSrc; bSrcFU=sal_False; eDstMU=eDst; bDstFU=sal_False; bDirty=sal_True; } + SdrFormatter(MapUnit eSrc, FieldUnit eDst) { eSrcMU=eSrc; bSrcFU=sal_False; eDstFU=eDst; bDstFU=sal_True; bDirty=sal_True; } + SdrFormatter(FieldUnit eSrc, MapUnit eDst) { eSrcFU=eSrc; bSrcFU=sal_True; eDstMU=eDst; bDstFU=sal_False; bDirty=sal_True; } + SdrFormatter(FieldUnit eSrc, FieldUnit eDst) { eSrcFU=eSrc; bSrcFU=sal_True; eDstFU=eDst; bDstFU=sal_True; bDirty=sal_True; } + void SetSourceUnit(MapUnit eSrc) { eSrcMU=eSrc; bSrcFU=sal_False; bDirty=sal_True; } + void SetSourceUnit(FieldUnit eSrc) { eSrcFU=eSrc; bSrcFU=sal_True; bDirty=sal_True; } + void SetDestinationUnit(MapUnit eDst) { eDstMU=eDst; bDstFU=sal_False; bDirty=sal_True; } + void SetDestinationUnit(FieldUnit eDst) { eDstFU=eDst; bDstFU=sal_True; bDirty=sal_True; } + void TakeStr(long nVal, OUString& rStr) const; + static void TakeUnitStr(MapUnit eUnit, OUString& rStr); + static void TakeUnitStr(FieldUnit eUnit, OUString& rStr); + static OUString GetUnitStr(MapUnit eUnit) { OUString aStr; TakeUnitStr(eUnit,aStr); return aStr; } + static OUString GetUnitStr(FieldUnit eUnit) { OUString aStr; TakeUnitStr(eUnit,aStr); return aStr; } +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDTRANS_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdtypes.hxx b/include/svx/svdtypes.hxx new file mode 100644 index 000000000000..ff5f36281244 --- /dev/null +++ b/include/svx/svdtypes.hxx @@ -0,0 +1,162 @@ +/* -*- 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 _SVDTYPES_HXX +#define _SVDTYPES_HXX + +#include <tools/solar.h> + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// @@@@ @@@@@ @@@@@ @@@@ @@@@@ @@@@@@ @@@@@ @@@@ @@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@@@ @@ @@ @@@@@ @@ @@ @@@@@ @@ @@@@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@@@ @@@@@ @@ @@ @@@@ @@@@@ @@@@ @@@@@ @@@@ @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// + +const sal_uInt32 SdrInventor=sal_uInt32('S')*0x00000001+ + sal_uInt32('V')*0x00000100+ + sal_uInt32('D')*0x00010000+ + sal_uInt32('r')*0x01000000; + +// Kommandos fuer EndCreate() +enum SdrCreateCmd {SDRCREATE_NEXTPOINT, // Naechster Polygonpunkt, Kreissegment: Naechste Koordinate + SDRCREATE_NEXTOBJECT, // Naechstes Polygon im PolyPolygon + SDRCREATE_FORCEEND}; // Ende erzwungen + +enum SdrDragMode +{ + SDRDRAG_MOVE, // Verschieben + SDRDRAG_RESIZE, // Groesse aendern + SDRDRAG_ROTATE, // Drehen + SDRDRAG_MIRROR, // Spiegeln + SDRDRAG_SHEAR, // Schraegstellen + SDRDRAG_CROOK, // Kreisfoermig verbiegen + SDRDRAG_DISTORT, // Freies verzerren (Rect in beliebiges Viereck transformieren) + + // new modes for interactive transparence and gradient tools + SDRDRAG_TRANSPARENCE, + SDRDRAG_GRADIENT, + + // new mode for interactive cropping of graphics + SDRDRAG_CROP +}; + + +// fuer SdrObject::ConvertToPoly() +enum SdrConvertType {SDRCONVERT_POLY, // reines Polygon erzeugen + SDRCONVERT_BEZIER, // alles Beziersegmente + SDRCONVERT_MIXED}; // Gemischtes Objekt (optimal) + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// @@ @@@@ @@ @@ @@@@@ @@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@@@@@ @@@@ @@@@ @@@@@ +// @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ +// @@@@@ @@ @@ @@ @@@@@ @@ @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// Bei der Identifikation eines Layer kann es vorkommen, das dieser nicht +// vorhanden ist. SdrLayerAdmin::GetLayerID(const String&) liefert +// dann diesen Wert: +#define SDRLAYER_NOTFOUND 0xFF +// Man kann diesen Wert jodoch ohne Bedenken den Methoden des SdrLayerSet +// zuwerfen, bekommt dann jedoch immer sal_False, bzw. tut die Methode nix. +//////////////////////////////////////////////////////////////////////////////////////////////////// +// Typdeklaration fuer Layer-IDs +typedef sal_uInt8 SdrLayerID; +//////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// @@@@@ @@@@ @@@@ @@@@@ @@@@ @@@@@ @@@@@@ @@ @@ @@@@ @@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@@@@ @@@@@@ @@ @@@ @@@@ @@@@ @@ @@ @@@@@ @@ @@ @@ @@@@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@@@@ @@@@@ @@@@ @@@@@ @@@@ @@@@@ @@ @@@@ @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// +enum SdrObjListKind {SDROBJLIST_UNKNOWN =0x00, // Unbekannt + // reine Objektlisten: + SDROBJLIST_GROUPOBJ =0x01, // Objektliste eines Gruppenobjekts + SDROBJLIST_VIRTOBJECTS=0x02, // Liste ist die Liste der virtuellen Objekte + SDROBJLIST_SYMBOLTABLE=0x03, // Liste ist die Symboltabelle + // Hier haben zur Not noch 12 weitere Listentypen Platz + // Pages: + SDROBJLIST_DRAWPAGE =0x10, // Liste ist eine Zeichenseite + SDROBJLIST_MASTERPAGE =0x11 // Liste ist eine Masterpage + // Hier haben zur Not noch 8 weitere Pagetypen Platz +}; // fuer die Surrogate reserviert + +inline bool SdrIsPageKind(SdrObjListKind eK) { return eK>=SDROBJLIST_DRAWPAGE && eK<=0x1A; } +//////////////////////////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// @@@@@ @@@@@ @@@@@ @@@@@ @@@@ @@@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@@@@ @@@@ @@@@@ @@@@ @@@@@@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@@@@ @@ @@@@@ @@ @@ @@ +//////////////////////////////////////////////////////////////////////////////////////////////////// + +enum SdrRepeatFunc {SDRREPFUNC_OBJ_NONE, + // Mit Parameter + SDRREPFUNC_OBJ_MOVE, // Distanz + SDRREPFUNC_OBJ_RESIZE, // Faktor, Referenz(%) bezogen auf MarkRect + SDRREPFUNC_OBJ_SETSNAPRECT, // Rectangle + SDRREPFUNC_OBJ_SETLOGICRECT, // Rectangle + SDRREPFUNC_OBJ_ROTATE, // Drehwinkel, Referenz(%) bezogen auf MarkRect + SDRREPFUNC_OBJ_SHEAR, // Winkel,Faktor, Referenz(%) bezogen auf MarkRect + SDRREPFUNC_OBJ_CROOKROTATE, + SDRREPFUNC_OBJ_CROOKSLANT, + SDRREPFUNC_OBJ_CROOKSTRETCH, + SDRREPFUNC_OBJ_ALIGN, // Hor/Vert/bBound + SDRREPFUNC_OBJ_SETATTRIBUTES,// ItemSet + SDRREPFUNC_OBJ_SETSTYLESHEET,// StyleSheet* + // Ohne Parameter + SDRREPFUNC_OBJ_DELETE, + SDRREPFUNC_OBJ_COMBINE_POLYPOLY, + SDRREPFUNC_OBJ_COMBINE_ONEPOLY, + SDRREPFUNC_OBJ_DISMANTLE_POLYS, + SDRREPFUNC_OBJ_DISMANTLE_LINES, + SDRREPFUNC_OBJ_CONVERTTOPOLY, + SDRREPFUNC_OBJ_CONVERTTOPATH, + SDRREPFUNC_OBJ_GROUP, + SDRREPFUNC_OBJ_UNGROUP, + SDRREPFUNC_OBJ_PUTTOTOP, + SDRREPFUNC_OBJ_PUTTOBTM, + SDRREPFUNC_OBJ_MOVTOTOP, + SDRREPFUNC_OBJ_MOVTOBTM, + SDRREPFUNC_OBJ_REVORDER, + SDRREPFUNC_OBJ_IMPORTMTF, + SDRREPFUNC_PAGE_DELETE, + SDRREPFUNC_LAST}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDTYPES_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdundo.hxx b/include/svx/svdundo.hxx new file mode 100644 index 000000000000..22211640e148 --- /dev/null +++ b/include/svx/svdundo.hxx @@ -0,0 +1,879 @@ +/* -*- 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 _SVDUNDO_HXX +#define _SVDUNDO_HXX + +#include <svl/solar.hrc> +#include <svl/undo.hxx> +#include <tools/gen.hxx> +#include <svx/svdtypes.hxx> // fuer enum RepeatFuncts +#include <svx/svdsob.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class SfxItemSet; +class SfxStyleSheet; +class SdrView; +class SdrPageView; +class SdrModel; +class SdrObject; +class SdrPage; +class SdrObjList; +class SdrLayer; +class SdrLayerAdmin; +class SdrObjGeoData; +class OutlinerParaObject; + +//************************************************************ +// SdrUndoAction +// +// Abstrakte Basisklasse fuer alle UndoActions der DrawingEngine +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoAction : public SfxUndoAction +{ +protected: + SdrModel& rMod; + +protected: + SdrUndoAction(SdrModel& rNewMod) + : rMod(rNewMod) + {} + +public: + TYPEINFO(); + virtual ~SdrUndoAction(); + + virtual sal_Bool CanRepeat(SfxRepeatTarget& rView) const; + virtual void Repeat(SfxRepeatTarget& rView); + + virtual OUString GetRepeatComment(SfxRepeatTarget& rView) const; + virtual OUString GetSdrRepeatComment(SdrView& rView) const; + + virtual bool CanSdrRepeat(SdrView& rView) const; + virtual void SdrRepeat(SdrView& rView); +}; + +//************************************************************ +// SdrUndoGroup +// +// Zusammenfassung beliebig vieler einzelner UndoActions zu einer einzigen +// UndoAction. Beim Undo() werden die Einzelactions rueckwaets aufgerufen +// (die zuletzt angehaengte zuerst...), beim Redo() dagegen entspricht die +// Aufrufreihenfolge der Einfuegereihenfolge. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoGroup : public SdrUndoAction +{ +protected: + std::vector<SdrUndoAction*> aBuf; + + // Beschreibung der Action, nicht expandiert (beinhaltet %O) + OUString aComment; + OUString aObjDescription; + + SdrRepeatFunc eFunction; + +public: + SdrUndoGroup(SdrModel& rNewMod); + virtual ~SdrUndoGroup(); + + void Clear(); + sal_uIntPtr GetActionCount() const { return aBuf.size(); } + SdrUndoAction* GetAction(sal_uIntPtr nNum) const { return aBuf[nNum]; } + void AddAction(SdrUndoAction* pAct); + + void SetComment(const OUString& rStr) { aComment=rStr; } + void SetObjDescription(const OUString& rStr) { aObjDescription=rStr; } + virtual OUString GetComment() const; + virtual OUString GetSdrRepeatComment(SdrView& rView) const; + + virtual void Undo(); + virtual void Redo(); + + virtual bool CanSdrRepeat(SdrView& rView) const; + virtual void SdrRepeat(SdrView& rView); + void SetRepeatFunction(SdrRepeatFunc eFunc) { eFunction=eFunc; } + SdrRepeatFunc GetRepeatFunction() const { return eFunction; } +}; + +//************************************************************ +// SdrUndoObj +// +// Abstrakte Basisklasse fuer alle UndoActions die mit Objekten zu tun haben. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoObj : public SdrUndoAction +{ +protected: + SdrObject* pObj; + +protected: + SdrUndoObj(SdrObject& rNewObj); + + void ImpTakeDescriptionStr(sal_uInt16 nStrCacheID, String& rStr, bool bRepeat = false) const; + + static void GetDescriptionStringForObject( const SdrObject& _rForObject, sal_uInt16 nStrCacheID, String& rStr, bool bRepeat = false ); + + // #94278# new method for evtl. PageChange at UNDO/REDO + void ImpShowPageOfThisObject(); +}; + +//************************************************************ +// SdrUndoAttrObj +// +// Aenderung der Objektattribute. +// Action direkt vor dem Setzen der neuen Attribute konstruieren. +// Auch fuer StyleSheets +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoAttrObj : public SdrUndoObj +{ +protected: + SfxItemSet* pUndoSet; + SfxItemSet* pRedoSet; + SfxItemSet* pRepeatSet; + + // oder besser den StyleSheetNamen merken? + SfxStyleSheet* pUndoStyleSheet; + SfxStyleSheet* pRedoStyleSheet; + SfxStyleSheet* pRepeatStyleSheet; + bool bStyleSheet; + bool bHaveToTakeRedoSet; + + // Bei Zuweisung von TextItems auf ein Zeichenobjekt mit Text: + OutlinerParaObject* pTextUndo; + // #i8508# + // The text rescue mechanism needs also to be implemented for redo actions. + OutlinerParaObject* pTextRedo; + + // Wenn sich um ein Gruppenobjekt handelt: + SdrUndoGroup* pUndoGroup; + +public: + SdrUndoAttrObj(SdrObject& rNewObj, bool bStyleSheet1 = false, bool bSaveText = false); + virtual ~SdrUndoAttrObj(); + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; + virtual OUString GetSdrRepeatComment(SdrView& rView) const; + + virtual void SdrRepeat(SdrView& rView); + virtual bool CanSdrRepeat(SdrView& rView) const; +}; + +//************************************************************ +// SdrUndoMoveObj +// +// Blosses verschieben eines Objektes. +// Action direkt vor dem Verschieben konstruieren. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoMoveObj : public SdrUndoObj +{ +protected: + Size aDistance; // Entfernung, um die verschoben wird + +public: + SdrUndoMoveObj(SdrObject& rNewObj): SdrUndoObj(rNewObj) {} + SdrUndoMoveObj(SdrObject& rNewObj, const Size& rDist): SdrUndoObj(rNewObj),aDistance(rDist) {} + virtual ~SdrUndoMoveObj(); + + void SetDistance(const Size& rDist) { aDistance=rDist; } + const Size& GetDistance() const { return aDistance; } + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; + virtual OUString GetSdrRepeatComment(SdrView& rView) const; + + virtual void SdrRepeat(SdrView& rView); + virtual bool CanSdrRepeat(SdrView& rView) const; +}; + +//************************************************************ +// SdrUndoGeoObj +// +// Aenderung der Geometrie eines Objektes. +// Action direkt vor der geometrischen Transformation konstruieren. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoGeoObj : public SdrUndoObj +{ +protected: + SdrObjGeoData* pUndoGeo; + SdrObjGeoData* pRedoGeo; + // Wenn sich um ein Gruppenobjekt handelt: + SdrUndoGroup* pUndoGroup; + +public: + SdrUndoGeoObj(SdrObject& rNewObj); + virtual ~SdrUndoGeoObj(); + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; +}; + +//************************************************************ +// SdrUndoObjList +// +// Manipulationen an einer ObjList: Neues Obj, DeleteObj, SetObjZLevel, Grouping, ... +// Abstrakte Basisklasse. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoObjList : public SdrUndoObj { + class ObjListListener; + friend class ObjListListener; + +private: + bool bOwner; + +protected: + SdrObjList* pObjList; + SdrView* pView; // um bei ObjDel, Undo die + SdrPageView* pPageView; // Selektion widerherstellen zu koennen + sal_uInt32 nOrdNum; + // Bei einem Undo/Redo findet moeglicherweise Uebereignung des Objektes + // statt. Im Dtor wird das Obj deleted, wenn bOwner==TRUE + ObjListListener* m_pListener; + +protected: + SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect = false); + virtual ~SdrUndoObjList(); + + void SetView(SdrView* pView1, SdrPageView* pPageView1) { pView=pView1; pPageView=pPageView1; } + bool IsOwner() { return bOwner; } + void SetOwner(bool bNew); + +private: + sal_uInt32 GetOrdNum() const; + void SetOrdNum(sal_uInt32 nOrdNum_); +}; + +//************************************************************ +// SdrUndoRemoveObj +// +// Entfernen Objekts aus einer Objektliste. Innerhalb einer UndoGroup +// mit korrospondierenden Inserts zu verwenden. +// Action vor dem entfernen aus der ObjList konstruieren. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoRemoveObj : public SdrUndoObjList +{ +public: + SdrUndoRemoveObj(SdrObject& rNewObj, bool bOrdNumDirect = false) + : SdrUndoObjList(rNewObj,bOrdNumDirect) {} + + virtual void Undo(); + virtual void Redo(); +}; + +//************************************************************ +// SdrUndoInsertObj +// +// Einfuegen Objekts in eine Objektliste. Innerhalb einer UndoGroup +// mit korrospondierenden Removes zu verwenden. +// Action vor dem entfernen aus der ObjList konstruieren. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoInsertObj : public SdrUndoObjList +{ +public: + SdrUndoInsertObj(SdrObject& rNewObj, bool bOrdNumDirect = false) + : SdrUndoObjList(rNewObj,bOrdNumDirect) {} + + virtual void Undo(); + virtual void Redo(); +}; + +//************************************************************ +// SdrUndoDelObj +// +// Loeschen eines Objekts. +// Action vor dem entfernen aus der ObjList konstruieren. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoDelObj : public SdrUndoRemoveObj +{ +public: + SdrUndoDelObj(SdrObject& rNewObj, bool bOrdNumDirect = false) + : SdrUndoRemoveObj(rNewObj,bOrdNumDirect) { SetOwner(sal_True); } + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; + virtual OUString GetSdrRepeatComment(SdrView& rView) const; + + virtual void SdrRepeat(SdrView& rView); + virtual bool CanSdrRepeat(SdrView& rView) const; +}; + +//************************************************************ +// SdrUndoNewObj +// +// Einfuegen eines neuen Objektes. +// Action nach dem einfuegen in die ObjList konstruieren. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoNewObj : public SdrUndoInsertObj +{ +public: + SdrUndoNewObj(SdrObject& rNewObj, bool bOrdNumDirect = false) + : SdrUndoInsertObj(rNewObj,bOrdNumDirect) {} + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; + + static OUString GetComment(const SdrObject& _rForObject); +}; + +//************************************************************ +// SdrUndoReplaceObj +// +// Austausch eines Objektes. +// Action vor dem Replace an der ObjList konstruieren. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoReplaceObj : public SdrUndoObj +{ + bool bOldOwner; + bool bNewOwner; + +protected: + SdrObjList* pObjList; + sal_uInt32 nOrdNum; + SdrObject* pNewObj; + +public: + SdrUndoReplaceObj(SdrObject& rOldObj1, SdrObject& rNewObj1, bool bOrdNumDirect = false); + virtual ~SdrUndoReplaceObj(); + + virtual void Undo(); + virtual void Redo(); + + bool IsNewOwner() { return bNewOwner; } + void SetNewOwner(bool bNew); + + bool IsOldOwner() { return bOldOwner; } + void SetOldOwner(bool bNew); +}; + +//************************************************************ +// SdrUndoCopyObj +// +// Kopieren eines Objekts +// Action nach dem einfuegen in die ObjList konstruieren. +// +//************************************************************ + +class SdrUndoCopyObj : public SdrUndoNewObj +{ +public: + SdrUndoCopyObj(SdrObject& rNewObj, bool bOrdNumDirect = false) + : SdrUndoNewObj(rNewObj,bOrdNumDirect) {} + + virtual OUString GetComment() const; +}; + +//************************************************************ +// SdrUndoObjOrdNum +//************************************************************ + +class SdrUndoObjOrdNum : public SdrUndoObj +{ +protected: + sal_uInt32 nOldOrdNum; + sal_uInt32 nNewOrdNum; + +public: + SdrUndoObjOrdNum(SdrObject& rNewObj, sal_uInt32 nOldOrdNum1, sal_uInt32 nNewOrdNum1); + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; +}; + +////////////////////////////////////////////////////////////////////////////// +// #i11702# + +class SVX_DLLPUBLIC SdrUndoObjectLayerChange : public SdrUndoObj +{ +protected: + SdrLayerID maOldLayer; + SdrLayerID maNewLayer; + +public: + SdrUndoObjectLayerChange(SdrObject& rObj, SdrLayerID aOldLayer, SdrLayerID aNewLayer); + + virtual void Undo(); + virtual void Redo(); +}; + +//************************************************************ +// SdrUndoObjSetText +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoObjSetText : public SdrUndoObj +{ +protected: + OutlinerParaObject* pOldText; + OutlinerParaObject* pNewText; + bool bNewTextAvailable; + sal_Bool bEmptyPresObj; + sal_Int32 mnText; + +public: + SdrUndoObjSetText(SdrObject& rNewObj, sal_Int32 nText ); + virtual ~SdrUndoObjSetText(); + + bool IsDifferent() const { return pOldText!=pNewText; } + void AfterSetText(); + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; + virtual OUString GetSdrRepeatComment(SdrView& rView) const; + + virtual void SdrRepeat(SdrView& rView); + virtual bool CanSdrRepeat(SdrView& rView) const; +}; + +// Implement Title/Description Elements UI for Writer text frames, graphics and embedded objects (#i73249#) +class SdrUndoObjStrAttr : public SdrUndoObj +{ +public: + enum ObjStrAttrType + { + OBJ_NAME, + OBJ_TITLE, + OBJ_DESCRIPTION + }; + +protected: + const ObjStrAttrType meObjStrAttr; + const String msOldStr; + const String msNewStr; + +public: + SdrUndoObjStrAttr( SdrObject& rNewObj, + const ObjStrAttrType eObjStrAttr, + const String& sOldStr, + const String& sNewStr); + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@ @@@@ @@ @@ @@@@@ @@@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@@@@@ @@@@ @@@@ @@@@@ +// @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ +// @@@@@ @@ @@ @@ @@@@@ @@ @@ +// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +//************************************************************ +// SdrUndoLayer +// +// Abstrakte Basisklasse fuer alle UndoActions die mit SdrLayer zu tun haben. +// +//************************************************************ + +class SdrUndoLayer : public SdrUndoAction +{ +protected: + SdrLayer* pLayer; + SdrLayerAdmin* pLayerAdmin; + sal_uInt16 nNum; + bool bItsMine; + +protected: + SdrUndoLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel); + virtual ~SdrUndoLayer(); +}; + +//************************************************************ +// SdrUndoNewLayer +// +// Einfuegen eines neuen Layer. Action nach dem Einfuegen konstruieren. +// +//************************************************************ + +class SdrUndoNewLayer : public SdrUndoLayer +{ +public: + SdrUndoNewLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel) + : SdrUndoLayer(nLayerNum,rNewLayerAdmin,rNewModel) {} + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; +}; + +//************************************************************ +// SdrUndoDelLayer +// +// Loeschen eines Layer. Action vor dem Remove konstruieren +// +//************************************************************ + +class SdrUndoDelLayer : public SdrUndoLayer +{ +public: + SdrUndoDelLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel) + : SdrUndoLayer(nLayerNum,rNewLayerAdmin,rNewModel) { bItsMine=sal_True; } + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; +}; + +//************************************************************ +// SdrUndoMoveLayer +// +// Verschieben eines Layer. Action vor dem Verschieben konstruieren. +// +//************************************************************ + +class SdrUndoMoveLayer : public SdrUndoLayer +{ + sal_uInt16 nNeuPos; + +public: + SdrUndoMoveLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel, sal_uInt16 nNeuPos1) + : SdrUndoLayer(nLayerNum,rNewLayerAdmin,rNewModel), nNeuPos(nNeuPos1) {} + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@@@@ @@@@ @@@@ @@@@@ @@@@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ +// @@@@@ @@@@@@ @@ @@@ @@@@ @@@@ +// @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@@@@ @@@@@ @@@@ +// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +//************************************************************ +// SdrUndoPage +// +// Abstrakte Basisklasse fuer alle UndoActions die mit SdrPages zu tun haben. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoPage : public SdrUndoAction +{ +protected: + SdrPage& mrPage; + +protected: + void ImpInsertPage(sal_uInt16 nNum); + void ImpRemovePage(sal_uInt16 nNum); + void ImpMovePage(sal_uInt16 nOldNum, sal_uInt16 nNewNum); + +protected: + SdrUndoPage(SdrPage& rNewPg); + + void ImpTakeDescriptionStr(sal_uInt16 nStrCacheID, String& rStr, sal_uInt16 n=0, bool bRepeat = false) const; +}; + +//************************************************************ +// SdrUndoPageList +// +// Manipulationen an einer PageList: Neue Page, DeletePage, MovePage(ChangePageNum) +// Abstrakte Basisklasse. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoPageList : public SdrUndoPage +{ +protected: + sal_uInt16 nPageNum; + + // Bei einem Undo/Redo findet moeglicherweise Uebereignung der Page + // statt. Im Dtor wird die Page deleted, wenn bItsMine==TRUE + bool bItsMine; + +protected: + SdrUndoPageList(SdrPage& rNewPg); + virtual ~SdrUndoPageList(); +}; + +//************************************************************ +// SdrUndoDelPage +// +// Loeschen einer Page. +// Action vor dem entfernen aus der List konstruieren. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoDelPage : public SdrUndoPageList +{ + // Beim loeschen einer MasterPage merke ich mir in dieser UndoGroup + // alle Beziehungen der Zeichenseiten zu der geloeschten MasterPage + SdrUndoGroup* pUndoGroup; + +public: + SdrUndoDelPage(SdrPage& rNewPg); + virtual ~SdrUndoDelPage(); + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; + virtual OUString GetSdrRepeatComment(SdrView& rView) const; + + virtual void SdrRepeat(SdrView& rView); + virtual bool CanSdrRepeat(SdrView& rView) const; +}; + +//************************************************************ +// SdrUndoNewPage +// +// Einfuegen einer neuen Page. +// Action nach dem einfuegen in die Liste konstruieren. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoNewPage : public SdrUndoPageList +{ +public: + SdrUndoNewPage(SdrPage& rNewPg): SdrUndoPageList(rNewPg) {} + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; +}; + +//************************************************************ +// SdrUndoCopyPage +// +// Kopieren einer Page +// Action nach dem einfuegen in die Liste konstruieren. +// +//************************************************************ + +class SdrUndoCopyPage : public SdrUndoNewPage +{ +public: + SdrUndoCopyPage(SdrPage& rNewPg): SdrUndoNewPage(rNewPg) {} + + virtual OUString GetComment() const; + virtual OUString GetSdrRepeatComment(SdrView& rView) const; + + virtual void SdrRepeat(SdrView& rView); + virtual bool CanSdrRepeat(SdrView& rView) const; +}; + +//************************************************************ +// SdrUndoSetPageNum +// +// Verschieben der Page innerhalb der Liste +// Action vor dem Verschieben der Page konstruieren. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoSetPageNum : public SdrUndoPage +{ +protected: + sal_uInt16 nOldPageNum; + sal_uInt16 nNewPageNum; + +public: + SdrUndoSetPageNum(SdrPage& rNewPg, sal_uInt16 nOldPageNum1, sal_uInt16 nNewPageNum1) + : SdrUndoPage(rNewPg),nOldPageNum(nOldPageNum1),nNewPageNum(nNewPageNum1) {} + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@ @@ @@@@ @@@@ @@@@@@ @@@@@ @@@@@ @@@@@ @@@@ @@@@ @@@@@ @@@@ +// @@@ @@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@@@@@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@@@@@@ @@@@@@ @@@@ @@ @@@@ @@@@@ @@@@@ @@@@@@ @@ @@@ @@@@ @@@@ +// @@ @ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@@@ @@ @@@@@ @@ @@ @@ @@ @@ @@@@@ @@@@@ @@@@ +// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +//************************************************************ +// SdrUndoPageMasterPage +// +// Abstrakte Basisklasse fuer alle UndoActions die mit +// MasterPage-Beziehungen zu tun haben. +// +//************************************************************ + +class SdrUndoPageMasterPage : public SdrUndoPage +{ +protected: + sal_Bool mbOldHadMasterPage; + SetOfByte maOldSet; + sal_uInt16 maOldMasterPageNumber; + +protected: + SdrUndoPageMasterPage(SdrPage& rChangedPage); + +public: + SVX_DLLPUBLIC virtual ~SdrUndoPageMasterPage(); +}; + +//************************************************************ +// SdrUndoPageRemoveMasterPage +// +// Entfernen einer MasterPage von einer Zeichenseite. +// Action vor dem Entfernen des MasterPageDescriptors erzeugen. +// +//************************************************************ + +class SdrUndoPageRemoveMasterPage : public SdrUndoPageMasterPage +{ +public: + SdrUndoPageRemoveMasterPage(SdrPage& rChangedPage); + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; +}; + +//************************************************************ +// SdrUndoPageChangeMasterPage +// +// Aenderung des MasterPageDescriptors (z.B. Aendern der VisibleLayer). +// Action vor der Aenderung am MasterPageDescriptor erzeugen. +// +//************************************************************ + +class SVX_DLLPUBLIC SdrUndoPageChangeMasterPage : public SdrUndoPageMasterPage +{ +protected: + sal_Bool mbNewHadMasterPage; + SetOfByte maNewSet; + sal_uInt16 maNewMasterPageNumber; + +public: + SdrUndoPageChangeMasterPage(SdrPage& rChangedPage); + + virtual void Undo(); + virtual void Redo(); + + virtual OUString GetComment() const; +}; + +/////////////////////////////////////////////////////////////////////// + +/** the SdrUndoFactory can be set and retrieved from the SdrModel. + It is used by the drawing layer implementations to create undo actions. + It can be used by applications to create application specific undo actions. +*/ +class SVX_DLLPUBLIC SdrUndoFactory +{ +public: + // shapes + virtual ~SdrUndoFactory(); + virtual SdrUndoAction* CreateUndoMoveObject( SdrObject& rObject ); + virtual SdrUndoAction* CreateUndoMoveObject( SdrObject& rObject, const Size& rDist ); + virtual SdrUndoAction* CreateUndoGeoObject( SdrObject& rObject ); + virtual SdrUndoAction* CreateUndoAttrObject( SdrObject& rObject, bool bStyleSheet1 = false, bool bSaveText = false ); + virtual SdrUndoAction* CreateUndoRemoveObject( SdrObject& rObject, bool bOrdNumDirect = false); + virtual SdrUndoAction* CreateUndoInsertObject( SdrObject& rObject, bool bOrdNumDirect = false); + virtual SdrUndoAction* CreateUndoDeleteObject( SdrObject& rObject, bool bOrdNumDirect = false); + virtual SdrUndoAction* CreateUndoNewObject( SdrObject& rObject, bool bOrdNumDirect = false); + virtual SdrUndoAction* CreateUndoCopyObject( SdrObject& rObject, bool bOrdNumDirect = false); + + virtual SdrUndoAction* CreateUndoObjectOrdNum( SdrObject& rObject, sal_uInt32 nOldOrdNum1, sal_uInt32 nNewOrdNum1); + + virtual SdrUndoAction* CreateUndoReplaceObject( SdrObject& rOldObject, SdrObject& rNewObject, bool bOrdNumDirect = false ); + virtual SdrUndoAction* CreateUndoObjectLayerChange( SdrObject& rObject, SdrLayerID aOldLayer, SdrLayerID aNewLayer ); + virtual SdrUndoAction* CreateUndoObjectSetText( SdrObject& rNewObj, sal_Int32 nText ); + + // Implement Title/Description Elements UI for Writer text frames, graphics and embedded objects (#i73249#) + virtual SdrUndoAction* CreateUndoObjectStrAttr( SdrObject& rObject, + SdrUndoObjStrAttr::ObjStrAttrType eObjStrAttrType, + String sOldStr, + String sNewStr ); + + // layer + virtual SdrUndoAction* CreateUndoNewLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel); + virtual SdrUndoAction* CreateUndoDeleteLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel); + virtual SdrUndoAction* CreateUndoMoveLayer(sal_uInt16 nLayerNum, SdrLayerAdmin& rNewLayerAdmin, SdrModel& rNewModel, sal_uInt16 nNeuPos1); + + // page + virtual SdrUndoAction* CreateUndoDeletePage(SdrPage& rPage); + virtual SdrUndoAction* CreateUndoNewPage(SdrPage& rPage); + virtual SdrUndoAction* CreateUndoCopyPage(SdrPage& rPage); + virtual SdrUndoAction* CreateUndoSetPageNum(SdrPage& rNewPg, sal_uInt16 nOldPageNum1, sal_uInt16 nNewPageNum1); + + // master page + virtual SdrUndoAction* CreateUndoPageRemoveMasterPage(SdrPage& rChangedPage); + virtual SdrUndoAction* CreateUndoPageChangeMasterPage(SdrPage& rChangedPage); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif //_SVDUNDO_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdview.hxx b/include/svx/svdview.hxx new file mode 100644 index 000000000000..ef28a17f4513 --- /dev/null +++ b/include/svx/svdview.hxx @@ -0,0 +1,324 @@ +/* -*- 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 _SVDVIEW_HXX +#define _SVDVIEW_HXX + +// HACK to avoid too deep includes and to have some +// levels free in svdmark itself (MS compiler include depth limit) +#include <svx/svdhdl.hxx> +#include <tools/weakbase.hxx> +#include <svtools/accessibilityoptions.hxx> +#include "svx/svxdllapi.h" +#include <svx/svdcrtv.hxx> +#include <unotools/options.hxx> + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Klassenhierarchie der View: +// SfxListener +// SdrPaintView PntV Action ModChg Attr Notify +// SdrSnapView SnpV Action +// +// SdrMarkView MrkV Action MrkChg ModChg Notify +// +// SdrEditView EdtV MrkChg ModChg Attr +// SdrPolyEditView PoEV +// SdrGlueEditView GlEV +// SdrObjEditView EdxV Action ModChg Attr Notify +// +// SdrExchangeView XcgV +// SdrDragView DrgV Action +// +// SdrCreateView CrtV Action +// SdrView View +// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class SvxURLField; + +//************************************************************ +// Defines +//************************************************************ + +enum SdrViewContext {SDRCONTEXT_STANDARD, + SDRCONTEXT_POINTEDIT, + SDRCONTEXT_GLUEPOINTEDIT, + SDRCONTEXT_GRAPHIC, + SDRCONTEXT_MEDIA, + SDRCONTEXT_TABLE}; + +enum SdrEventKind {SDREVENT_NONE, + SDREVENT_TEXTEDIT, + SDREVENT_MOVACTION, + SDREVENT_ENDACTION, + SDREVENT_BCKACTION, + SDREVENT_BRKACTION, + SDREVENT_ENDCREATE, + SDREVENT_ENDDRAG, + SDREVENT_MARKOBJ, + SDREVENT_MARKPOINT, + SDREVENT_MARKGLUEPOINT, + SDREVENT_BEGMARK, + SDREVENT_BEGINSOBJPOINT, + SDREVENT_ENDINSOBJPOINT, + SDREVENT_BEGINSGLUEPOINT, + SDREVENT_BEGDRAGHELPLINE, + SDREVENT_BEGDRAGOBJ, + SDREVENT_BEGCREATEOBJ, + SDREVENT_BEGMACROOBJ, + SDREVENT_BEGTEXTEDIT, + SDREVENT_ENDMARK, + SDREVENT_BRKMARK, + SDREVENT_EXECUTEURL}; + +#define SDRMOUSEBUTTONDOWN 1 +#define SDRMOUSEMOVE 2 +#define SDRMOUSEBUTTONUP 3 + +//************************************************************ +// Hilfsklasse SdrViewEvent +//************************************************************ + +struct SVX_DLLPUBLIC SdrViewEvent +{ + SdrHdl* pHdl; + SdrObject* pObj; + SdrObject* pRootObj; // Dieses Markieren bei SdrBeginTextEdit + SdrPageView* pPV; + const SvxURLField* pURLField; + + Point aLogicPos; + SdrHitKind eHit; + SdrEventKind eEvent; + SdrHdlKind eHdlKind; + SdrCreateCmd eEndCreateCmd; // auch fuer EndInsPoint + + sal_uInt16 nMouseClicks; + sal_uInt16 nMouseMode; + sal_uInt16 nMouseCode; + sal_uInt16 nHlplIdx; + sal_uInt16 nGlueId; + + unsigned bMouseDown : 1; + unsigned bMouseUp : 1; + unsigned bDoubleHdlSize : 1; // Doppelte Handlegroesse wg. TextEdit + unsigned bIsAction : 1; // Action ist aktiv + unsigned bIsTextEdit : 1; // TextEdit laeuft zur Zeit + unsigned bTextEditHit : 1; // offene OutlinerView getroffen + unsigned bAddMark : 1; + unsigned bUnmark : 1; + unsigned bPrevNextMark : 1; + unsigned bMarkPrev : 1; + unsigned bInsPointNewObj : 1; + unsigned bDragWithCopy : 1; + unsigned bCaptureMouse : 1; + unsigned bReleaseMouse : 1; + +public: + SdrViewEvent(); + ~SdrViewEvent(); + + // nEventKind ist SDRMOUSEBUTTONDOWN, SDRMOUSEMOVE oder SDRMOUSEBUTTONUP + void SetMouseEvent(const MouseEvent& rMEvt, sal_uInt16 nEventKind); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// helper class for all D&D overlays + +class SVX_DLLPUBLIC SdrDropMarkerOverlay +{ + // The OverlayObjects + ::sdr::overlay::OverlayObjectList maObjects; + + void ImplCreateOverlays(const SdrView& rView, const basegfx::B2DPolyPolygon& rPolyPolygon); + +public: + SdrDropMarkerOverlay(const SdrView& rView, const SdrObject& rObject); + SdrDropMarkerOverlay(const SdrView& rView, const Rectangle& rRectangle); + SdrDropMarkerOverlay(const SdrView& rView, const Point& rStart, const Point& rEnd); + ~SdrDropMarkerOverlay(); +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@ @@ @@ @@@@@ @@ @@ +// @@ @@ @@ @@ @@ @@ +// @@ @@ @@ @@ @@ @ @@ +// @@@@@ @@ @@@@ @@@@@@@ +// @@@ @@ @@ @@@@@@@ +// @@@ @@ @@ @@@ @@@ +// @ @@ @@@@@ @@ @@ +// +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrView: public SdrCreateView, public tools::WeakBase< SdrView > +{ + friend class SdrPageView; + + unsigned bNoExtendedMouseDispatcher : 1; + unsigned bNoExtendedKeyDispatcher : 1; + unsigned bNoExtendedCommandDispatcher : 1; + unsigned bTextEditOnObjectsWithoutTextIfTextTool : 1; + unsigned mbMasterPagePaintCaching : 1; + +protected: + SvtAccessibilityOptions maAccessibilityOptions; + +public: + TYPEINFO(); + explicit SdrView(SdrModel* pModel1, OutputDevice* pOut = 0L); + virtual ~SdrView(); + + // Default sind alle Dispatcher aktiviert. Will die App z.B. fuer + // Sonderbehandlungen im MouseDispatcher eingreifen, so muss sie + // den erweiterten MouseDispather mit unten stehender Methode deaktivieren + // und selbst nachimplementieren. Beispiel fuer MouseButtonDown: + // SdrViewEvent aVEvt; + // SdrHitKind eHit=pSdrView->PickAnything(rMEvt,SDRMOUSEBUTTONDOWN,aVEvt); + // ... hier Applikationsspezifischer Eingriff ... + // pSdrView->DoMouseEvent(aVEvt); + // SetPointer(GetPreferedPointer(...)) + // CaptureMouse(...) + void EnableExtendedMouseEventDispatcher(sal_Bool bOn) { bNoExtendedMouseDispatcher = !bOn; } + sal_Bool IsExtendedMouseEventDispatcherEnabled() const { return bNoExtendedMouseDispatcher; } + + void EnableExtendedKeyInputDispatcher(sal_Bool bOn) { bNoExtendedKeyDispatcher=!bOn; } + sal_Bool IsExtendedKeyInputDispatcherEnabled() const { return bNoExtendedKeyDispatcher; } + + void EnableExtendedCommandEventDispatcher(sal_Bool bOn) { bNoExtendedCommandDispatcher=!bOn; } + sal_Bool IsExtendedCommandEventDispatcherEnabled() const { return bNoExtendedCommandDispatcher; } + + void EnableTextEditOnObjectsWithoutTextIfTextTool(sal_Bool bOn) { bTextEditOnObjectsWithoutTextIfTextTool=bOn; } + sal_Bool IsEnableTextEditOnObjectsWithoutTextIfTextToolEnabled() const { return bTextEditOnObjectsWithoutTextIfTextTool; } + + void SetMasterPagePaintCaching(sal_Bool bOn); + sal_Bool IsMasterPagePaintCaching() const { return mbMasterPagePaintCaching; } + + sal_Bool KeyInput(const KeyEvent& rKEvt, Window* pWin); + virtual sal_Bool MouseButtonDown(const MouseEvent& rMEvt, Window* pWin); + virtual sal_Bool MouseButtonUp(const MouseEvent& rMEvt, Window* pWin); + virtual sal_Bool MouseMove(const MouseEvent& rMEvt, Window* pWin); + virtual sal_Bool Command(const CommandEvent& rCEvt, Window* pWin); + + virtual void ConfigurationChanged( utl::ConfigurationBroadcaster*, sal_uInt32 ); + + sal_Bool SetAttributes(const SfxItemSet& rSet, sal_Bool bReplaceAll=sal_False) { return SdrCreateView::SetAttributes(rSet,bReplaceAll); } + sal_Bool SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr=sal_False) { return SdrCreateView::SetStyleSheet(pStyleSheet,bDontRemoveHardAttr); } + + /* new interface src537 */ + sal_Bool GetAttributes(SfxItemSet& rTargetSet, sal_Bool bOnlyHardAttr=sal_False) const; + + SfxStyleSheet* GetStyleSheet() const; + + // unvollstaendige Implementation: + // Das OutputDevice ist notwendig, damit ich die HandleSize ermitteln kann. + // Bei NULL wird das 1. angemeldete Win verwendet. + Pointer GetPreferedPointer(const Point& rMousePos, const OutputDevice* pOut, sal_uInt16 nModifier=0, sal_Bool bLeftDown=sal_False) const; + SdrHitKind PickAnything(const MouseEvent& rMEvt, sal_uInt16 nMouseDownOrMoveOrUp, SdrViewEvent& rVEvt) const; + SdrHitKind PickAnything(const Point& rLogicPos, SdrViewEvent& rVEvt) const; + sal_Bool DoMouseEvent(const SdrViewEvent& rVEvt); + virtual SdrViewContext GetContext() const; + + // Die Methoden beruecksichtigen den jeweiligen Kontex: + // - Einfaches Zeichnen + // - Punktbearbeitungs-Mode + // - Klebepunkt-Editmode + // - TextEdit + // - ... to be continued + void MarkAll(); + void UnmarkAll(); + + const Rectangle& GetMarkedRect() const; + + virtual void DeleteMarked(); + + // Markieren von Objekten, Polygonpunkten oder Klebepunkten (je nach View- + // Kontext) durch Aufziehen eines Selektionsrahmens. + // bAddMark=TRUE: zur bestehenden Selektion hinzumarkieren (->Shift) + // bUnmark=TRUE: Bereits selektierte Objekte/Punkte/Klebepunkte die innerhalb + // des aufgezogenen Rahmens liegen werden deselektiert. + sal_Bool BegMark(const Point& rPnt, sal_Bool bAddMark=sal_False, sal_Bool bUnmark=sal_False); + + // Folgende Actions sind moeglich: + // - ObjectCreating + // - ObjectMarking + // - Object-specific dragging + // - General dragging + // und mehr... + String GetStatusText(); + + SvtAccessibilityOptions& getAccessibilityOptions(); + + virtual void onAccessibilityOptionsChanged(); +}; + +#endif //_SVDVIEW_HXX + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Die App macht sich zunaechst ein SdrModel. +// Anschliessend oeffnet sie ein Win und erzeugt dann eine SdrView. +// An der SdrView meldet sie dann mit der Methode ShowSdrPage() eine Seite an. +// Eine SdrView kann in beliebig vielen Fenstern gleichzeitig angezeigt werden. +// Intern: +// Eine SdrView kann beliebig viele Seiten gleichzeitig anzeigen. Seiten +// werden an- und abgemeldet mit ShowSdrPage()/HideSdrPage(). Fuer jede angemeldete +// Seite wird eine SdrPageView-Instanz im Container aPages angelegt. Bei +// gleichzeitiger Anzeige mehrerer Seiten ist darauf zu achten, dass der Offset- +// Parameter von ShowSdrPage() der Seitengroesse angepasst ist, da sich sonst die +// Seiten ueberlappen koennten. +// +// Elementare Methoden: +// ~~~~~~~~~~~~~~~~~~~~ +// Einfache Events: +// ~~~~~~~~~~~~~~~~ +// sal_Bool KeyInput(const KeyEvent& rKEvt, Window* pWin); +// sal_Bool MouseButtonDown(const MouseEvent& rMEvt, Window* pWin); +// sal_Bool MouseButtonUp(const MouseEvent& rMEvt, Window* pWin); +// sal_Bool MouseMove(const MouseEvent& rMEvt, Window* pWin); +// sal_Bool Command(const CommandEvent& rCEvt, Window* pWin); +// +// Exchange (Clipboard derzeit noch ohne SdrPrivateData): +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// sal_Bool Cut(sal_uIntPtr nFormat=SDR_ANYFORMAT); +// sal_Bool Yank(sal_uIntPtr nFormat=SDR_ANYFORMAT); +// sal_Bool Paste(Window* pWin=NULL, sal_uIntPtr nFormat=SDR_ANYFORMAT); +// +// SfxItems: +// ~~~~~~~~~ +// sal_Bool GetAttributes(SfxItemSet& rTargetSet, sal_Bool bOnlyHardAttr=sal_False) const; +// sal_Bool SetAttributes(const SfxItemSet& rSet, sal_Bool bReplaceAll); +// SfxStyleSheet* GetStyleSheet() const; +// sal_Bool SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr); +// +// Sonstiges: +// ~~~~~~~~~~ +// Pointer GetPreferedPointer(const Point& rMousePos, const OutputDevice* pOut, sal_uInt16 nTol=0) const; +// String GetStatusText(); +// +///////////////////////////////////////////////////////////////////////////////////////////////// */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdviter.hxx b/include/svx/svdviter.hxx new file mode 100644 index 000000000000..1ad9f9c773e6 --- /dev/null +++ b/include/svx/svdviter.hxx @@ -0,0 +1,98 @@ +/* -*- 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 _SVDVITER_HXX +#define _SVDVITER_HXX + +#include <tools/solar.h> +#include <sal/types.h> +#include "svx/svxdllapi.h" + +/* + +Using this class, you can find out: +- SdrView* First/NextView() + - All Views in which a model is displayed + - All Views in which a certain page is visible (also as MasterPage) + - All Views in which a certain object is visible (also as MasterPage) +- SdrPageView* First/NextPageView() + - All PageViews in which a model is displayed + - All PageViews in which a certain page is visible (also as MasterPage) + - All PageViews in which a certain object is visible (also as MasterPage) +- Window* First/NextWindow() + - All Windows in which a model is displayed + - All Windows in which a certain page is visible (also as MasterPage) + - All Windows in which a certain object is visible (also as MasterPage) +You can specify if the selection is restricted to a certain page/object by +choosing the corresponding constructor. + +Among others, the following are considered: +- Visibility state of the layer +- Visible Layer of MasterPages +- Multiple layer for group objects + +Not considered are: +- Whether the pages/objects were already painted or if an Invalidate is still pending +- Whether the pages/objects in a Window are in a visible region + +*/ + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class OutputDevice; +class Window; +class SdrView; +class SdrPageView; +class SdrModel; +class SdrPage; +class SdrObject; +class SetOfByte; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrViewIter +{ + const SdrModel* mpModel; + const SdrPage* mpPage; + const SdrObject* mpObject; + SdrView* mpAktView; + + sal_uInt32 mnListenerNum; + sal_uInt32 mnPageViewNum; + sal_uInt32 mnOutDevNum; + + // bitfield + unsigned mbNoMasterPage : 1; + +private: + SVX_DLLPRIVATE void ImpInitVars(); + SVX_DLLPRIVATE SdrView* ImpFindView(); + SVX_DLLPRIVATE sal_Bool ImpCheckPageView(SdrPageView* pPV) const; + +public: + SdrViewIter(const SdrPage* pPage, sal_Bool bNoMasterPage = sal_False); + SdrViewIter(const SdrObject* pObject, sal_Bool bNoMasterPage = sal_False); + + SdrView* FirstView(); + SdrView* NextView(); +}; + +#endif //_SVDVITER_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svdxcgv.hxx b/include/svx/svdxcgv.hxx new file mode 100644 index 000000000000..1d7a16102164 --- /dev/null +++ b/include/svx/svdxcgv.hxx @@ -0,0 +1,133 @@ +/* -*- 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 _SVDXCGV_HXX +#define _SVDXCGV_HXX + +#include <svx/svdedxv.hxx> + +#include <vcl/gdimtf.hxx> +#include "svx/svxdllapi.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// +// +// @@@@@ @@ @@ @@@@ @@ @@ @@@@ @@ @@ @@@@ @@@@@ @@ @@ @@ @@@@@ @@ @@ +// @@ @@@ @@@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ +// @@ @@@@@ @@ @@ @@ @@ @@ @@@@@@ @@ @@ @@ @@ @@ @@ @@ @ @@ +// @@@@ @@@ @@ @@@@@@ @@@@@@ @@@@@@ @@ @@@ @@@@ @@@@@ @@ @@@@ @@@@@@@ +// @@ @@@@@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@ @@@ @@ @@ @@@@@@@ +// @@ @@@ @@@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@ @@@ @@ @@ @@@ @@@ +// @@@@@ @@ @@ @@@@ @@ @@ @@ @@ @@ @@ @@@@@ @@@@@ @ @@ @@@@@ @@ @@ +// +//////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +class SVX_DLLPUBLIC SdrExchangeView: public SdrObjEditView +{ + friend class SdrPageView; + +protected: + + void ImpGetPasteObjList(Point& rPos, SdrObjList*& rpLst); + void ImpPasteObject(SdrObject* pObj, SdrObjList& rLst, const Point& rCenter, const Size& rSiz, const MapMode& rMap, sal_uInt32 nOptions); + sal_Bool ImpGetPasteLayer(const SdrObjList* pObjList, SdrLayerID& rLayer) const; + + // liefert True, wenn rPt geaendert wurde + sal_Bool ImpLimitToWorkArea(Point& rPt) const; + +protected: + // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView + SdrExchangeView(SdrModel* pModel1, OutputDevice* pOut = 0L); + +public: + // Alle markierten Objekte auf dem angegebenen OutputDevice ausgeben. + virtual void DrawMarkedObj(OutputDevice& rOut) const; + + // Z.B. fuer's Clipboard, Drag&Drop, ... + // Alle markierten Objekte in ein Metafile stecken. Z.Zt. noch etwas + // buggee (Offset..., Fremdgrafikobjekte (SdrGrafObj), Virtuelle + // Objektkopien (SdrVirtObj) mit Ankerpos<>(0,0)). + GDIMetaFile GetMarkedObjMetaFile(bool bNoVDevIfOneMtfMarked = false) const; + + // Alle markierten Objekte auf eine Bitmap malen. Diese hat die Farbtiefe + // und Aufloesung des Bildschirms. + BitmapEx GetMarkedObjBitmapEx(bool bNoVDevIfOneBmpMarked = false) const; + + // Alle markierten Objekte in ein neues Model kopieren. Dieses neue Model + // hat dann genau eine Page. Das Flag PageNotValid an diesem Model ist + // gesetzt. Daran ist zu erkennen, dass nur die Objekte der Page Gueltikeit + // haben, die Page sebst jedoch nicht (Seitengroesse, Raender). Das neue + // Model wird auf dem Heap erzeugt und wird an den Aufrufer dieser Methode + // uebergeben. Dieser hat es dann spaeter zu entsorgen. + // Beim einfuegen der markierten Objekte in die eine Page des neuen Model + // findet ein Merging der seitenlokalen Layer statt. Sollte kein Platz mehr + // fuer weitere seitenlokale Layer sein, wird den entsprechenden Objekten + // der Default-Layer zugewiesen (Layer 0, (dokumentglobaler Standardlayer). + virtual SdrModel* GetMarkedObjModel() const; + + Graphic GetAllMarkedGraphic() const; + + /** Generate a Graphic for the given draw object in the given model + + @param pModel + Must not be NULL. Denotes the draw model the object is a part + of. + + @param pObj + The object (can also be a group object) to retrieve a Graphic + for. Must not be NULL. + + @return a graphical representation of the given object, as it + appears on screen (e.g. with rotation, if any, applied). + */ + static Graphic GetObjGraphic( const SdrModel* pModel, const SdrObject* pObj ); + + // Bei allen Paste-Methoden werden die neuen Draw-Objekte markiert. + // Wird der Parameter bAddMark auf sal_True gesetzt, so werden die neuen + // DrawObjekte zu einer bereits bestehenden Selektion "hinzumarkiert". + // Dieser Fall ist fuer Drag&Drop mit mehreren Items gedacht. + // Die Methoden mit Point-Parameter fuegen neue Objekte zentriert an + // dieser Position ein, die anderen zentriert am 1.OutputDevice der View. + // Ist der Parameter pPg gesetzt, werden die Objekte and dieser Seite + // eingefuegt. Die Positionierung (rPos bzw. Zentrierung) bezieht sich + // dann nichtmehr auf die View sondern auf die Page. + // Hinweis: SdrObjList ist Basisklasse von SdrPage. + // Die Methoden liefern sal_True, wenn die Objekte erfolgreich erzeugt und + // eingefuegt wurden. Bei pLst=sal_False und kein TextEdit aktiv kann man + // sich dann auch darauf verlassen, dass diese an der View markiert sind. + // Andernfalls erfolgt die Markierung nur, wenn pLst z.Zt. auch an der + // View angezeigt wird. + // Gueltige Werte fuer nOptions sind SDRINSERT_DONTMARK und + // SDRINSERT_ADDMARK (siehe svdedtv.hxx). + virtual sal_Bool Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst=NULL, sal_uInt32 nOptions=0); + sal_Bool Paste(const String& rStr, const Point& rPos, SdrObjList* pLst=NULL, sal_uInt32 nOptions=0); + sal_Bool Paste(SvStream& rInput, const String& rBaseURL, sal_uInt16 eFormat, const Point& rPos, SdrObjList* pLst=NULL, sal_uInt32 nOptions=0); + + sal_Bool Cut( sal_uIntPtr nFormat = SDR_ANYFORMAT ); + + sal_Bool Yank( sal_uIntPtr nFormat = SDR_ANYFORMAT ); + + sal_Bool Paste( Window* pWin = NULL, sal_uIntPtr nFormat = SDR_ANYFORMAT ); + sal_Bool PasteClipboard( OutputDevice* pOut = NULL, sal_uIntPtr nFormat = SDR_ANYFORMAT, sal_uInt32 nOptions = 0 ); +}; + +#endif //_SVDXCGV_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svx3ditems.hxx b/include/svx/svx3ditems.hxx new file mode 100644 index 000000000000..bb8c4c26a19d --- /dev/null +++ b/include/svx/svx3ditems.hxx @@ -0,0 +1,371 @@ +/* -*- 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 _SVX3DITEMS_HXX +#define _SVX3DITEMS_HXX + +#include <svl/intitem.hxx> +#include <svl/eitem.hxx> + + +#include <editeng/colritem.hxx> +#include <svx/e3ditem.hxx> +#include <svx/viewpt3d.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +// Svx3D _3DOBJ_ Items +class SVX_DLLPUBLIC Svx3DPercentDiagonalItem : public SfxUInt16Item { +public: + Svx3DPercentDiagonalItem(sal_uInt16 nVal = 10); +}; + +class Svx3DBackscaleItem : public SfxUInt16Item { +public: + SVX_DLLPUBLIC Svx3DBackscaleItem(sal_uInt16 nVal = 100); +}; + +class Svx3DDepthItem : public SfxUInt32Item { +public: + SVX_DLLPUBLIC Svx3DDepthItem(sal_uInt32 nVal = 1000); +}; + +class SVX_DLLPUBLIC Svx3DHorizontalSegmentsItem : public SfxUInt32Item { +public: + Svx3DHorizontalSegmentsItem(sal_uInt32 nVal = 24); +}; + +class Svx3DVerticalSegmentsItem : public SfxUInt32Item { +public: + SVX_DLLPUBLIC Svx3DVerticalSegmentsItem(sal_uInt32 nVal = 24); +}; + +class Svx3DEndAngleItem : public SfxUInt32Item { +public: + SVX_DLLPUBLIC Svx3DEndAngleItem(sal_uInt32 nVal = 3600); +}; + +class SVX_DLLPUBLIC Svx3DDoubleSidedItem : public SfxBoolItem { +public: + Svx3DDoubleSidedItem(sal_Bool bVal = 0); +}; + +// #i28528# +// Added extra Item (Bool) for chart2 to be able to show reduced line geometry +class Svx3DReducedLineGeometryItem : public SfxBoolItem { +public: + Svx3DReducedLineGeometryItem(sal_Bool bVal = 0); + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nItemVersion) const; + virtual sal_uInt16 GetVersion(sal_uInt16 nFileFormatVersion) const; +}; + +class SVX_DLLPUBLIC Svx3DNormalsKindItem : public SfxUInt16Item { +public: + Svx3DNormalsKindItem(sal_uInt16 nVal = 0); + + // use drawing::NormalsKind + SVX_DLLPRIVATE virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; + SVX_DLLPRIVATE virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ); + SVX_DLLPRIVATE virtual SfxPoolItem* Clone(SfxItemPool* pPool = NULL) const; +}; + +class Svx3DNormalsInvertItem : public SfxBoolItem { +public: + SVX_DLLPUBLIC Svx3DNormalsInvertItem(sal_Bool bVal = 0); +}; + +class SVX_DLLPUBLIC Svx3DTextureProjectionXItem : public SfxUInt16Item { +public: + Svx3DTextureProjectionXItem(sal_uInt16 nVal = 0); + + // use drawing::TextureProjectionMode + SVX_DLLPRIVATE virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; + SVX_DLLPRIVATE virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ); + SVX_DLLPRIVATE virtual SfxPoolItem* Clone(SfxItemPool* pPool = NULL) const; +}; + +class SVX_DLLPUBLIC Svx3DTextureProjectionYItem : public SfxUInt16Item { +public: + Svx3DTextureProjectionYItem(sal_uInt16 nVal = 0); + + // use drawing::TextureProjectionMode + 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* Clone(SfxItemPool* pPool = NULL) const; +}; + +class Svx3DShadow3DItem : public SfxBoolItem { +public: + SVX_DLLPUBLIC Svx3DShadow3DItem(sal_Bool bVal = 0); +}; + +class Svx3DMaterialColorItem : public SvxColorItem { +public: + Svx3DMaterialColorItem(const Color& rCol = Color(0x0000b8ff)); +}; + +class Svx3DMaterialEmissionItem : public SvxColorItem { +public: + SVX_DLLPUBLIC Svx3DMaterialEmissionItem(const Color& rCol = Color(0x00000000)); +}; + +class Svx3DMaterialSpecularItem : public SvxColorItem { +public: + SVX_DLLPUBLIC Svx3DMaterialSpecularItem(const Color& rCol = Color(0x00ffffff)); +}; + +class Svx3DMaterialSpecularIntensityItem : public SfxUInt16Item { +public: + SVX_DLLPUBLIC Svx3DMaterialSpecularIntensityItem(sal_uInt16 nVal = 15); +}; + +class SVX_DLLPUBLIC Svx3DTextureKindItem : public SfxUInt16Item { +public: + Svx3DTextureKindItem(sal_uInt16 nVal = 3); + + // use drawing::TextureKind + SVX_DLLPRIVATE virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; + SVX_DLLPRIVATE virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ); + SVX_DLLPRIVATE virtual SfxPoolItem* Clone(SfxItemPool* pPool = NULL) const; +}; + +class SVX_DLLPUBLIC Svx3DTextureModeItem : public SfxUInt16Item { +public: + Svx3DTextureModeItem(sal_uInt16 nVal = 2); + + // use drawing:TextureMode + SVX_DLLPRIVATE virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; + SVX_DLLPRIVATE virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ); + SVX_DLLPRIVATE virtual SfxPoolItem* Clone(SfxItemPool* pPool = NULL) const; +}; + +class Svx3DTextureFilterItem : public SfxBoolItem { +public: + SVX_DLLPUBLIC Svx3DTextureFilterItem(sal_Bool bVal = 0); +}; + +// Svx3D _3DSCENE_ Items +class SVX_DLLPUBLIC Svx3DPerspectiveItem : public SfxUInt16Item { +public: + Svx3DPerspectiveItem(sal_uInt16 nVal = (sal_uInt16)PR_PERSPECTIVE); + + // use drawing::ProjectionMode + SVX_DLLPRIVATE virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; + SVX_DLLPRIVATE virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ); + SVX_DLLPRIVATE virtual SfxPoolItem* Clone(SfxItemPool* pPool = NULL) const; +}; + +class Svx3DDistanceItem : public SfxUInt32Item { +public: + SVX_DLLPUBLIC Svx3DDistanceItem(sal_uInt32 nVal = 100); +}; + +class Svx3DFocalLengthItem : public SfxUInt32Item { +public: + SVX_DLLPUBLIC Svx3DFocalLengthItem(sal_uInt32 nVal = 100); +}; + +class Svx3DTwoSidedLightingItem : public SfxBoolItem { +public: + SVX_DLLPUBLIC Svx3DTwoSidedLightingItem(sal_Bool bVal = 0); +}; + +class SVX_DLLPUBLIC Svx3DLightcolor1Item : public SvxColorItem { +public: + Svx3DLightcolor1Item(const Color& rCol = Color(0xffcccccc)); +}; + +class SVX_DLLPUBLIC Svx3DLightcolor2Item : public SvxColorItem { +public: + Svx3DLightcolor2Item(const Color& rCol = Color(0x00000000)); +}; + +class SVX_DLLPUBLIC Svx3DLightcolor3Item : public SvxColorItem { +public: + Svx3DLightcolor3Item(const Color& rCol = Color(0x00000000)); +}; + +class SVX_DLLPUBLIC Svx3DLightcolor4Item : public SvxColorItem { +public: + Svx3DLightcolor4Item(const Color& rCol = Color(0x00000000)); +}; + +class SVX_DLLPUBLIC Svx3DLightcolor5Item : public SvxColorItem { +public: + Svx3DLightcolor5Item(const Color& rCol = Color(0x00000000)); +}; + +class SVX_DLLPUBLIC Svx3DLightcolor6Item : public SvxColorItem { +public: + Svx3DLightcolor6Item(const Color& rCol = Color(0x00000000)); +}; + +class SVX_DLLPUBLIC Svx3DLightcolor7Item : public SvxColorItem { +public: + Svx3DLightcolor7Item(const Color& rCol = Color(0x00000000)); +}; + +class SVX_DLLPUBLIC Svx3DLightcolor8Item : public SvxColorItem { +public: + Svx3DLightcolor8Item(const Color& rCol = Color(0x00000000)); +}; + +class SVX_DLLPUBLIC Svx3DAmbientcolorItem : public SvxColorItem { +public: + Svx3DAmbientcolorItem(const Color& rCol = Color(0x00666666)); +}; + +class SVX_DLLPUBLIC Svx3DLightOnOff1Item : public SfxBoolItem { +public: + Svx3DLightOnOff1Item(sal_Bool bVal = 1); +}; + +class SVX_DLLPUBLIC Svx3DLightOnOff2Item : public SfxBoolItem { +public: + Svx3DLightOnOff2Item(sal_Bool bVal = 0); +}; + +class SVX_DLLPUBLIC Svx3DLightOnOff3Item : public SfxBoolItem { +public: + Svx3DLightOnOff3Item(sal_Bool bVal = 0); +}; + +class SVX_DLLPUBLIC Svx3DLightOnOff4Item : public SfxBoolItem { +public: + Svx3DLightOnOff4Item(sal_Bool bVal = 0); +}; + +class SVX_DLLPUBLIC Svx3DLightOnOff5Item : public SfxBoolItem { +public: + Svx3DLightOnOff5Item(sal_Bool bVal = 0); +}; + +class SVX_DLLPUBLIC Svx3DLightOnOff6Item : public SfxBoolItem { +public: + Svx3DLightOnOff6Item(sal_Bool bVal = 0); +}; + +class SVX_DLLPUBLIC Svx3DLightOnOff7Item : public SfxBoolItem { +public: + Svx3DLightOnOff7Item(sal_Bool bVal = 0); +}; + +class SVX_DLLPUBLIC Svx3DLightOnOff8Item : public SfxBoolItem { +public: + Svx3DLightOnOff8Item(sal_Bool bVal = 0); +}; + +class SVX_DLLPUBLIC Svx3DLightDirection1Item : public SvxB3DVectorItem { +public: + Svx3DLightDirection1Item(const basegfx::B3DVector& rVec = basegfx::B3DVector(0.57735026918963, 0.57735026918963, 0.57735026918963)); +}; + +class SVX_DLLPUBLIC Svx3DLightDirection2Item : public SvxB3DVectorItem { +public: + Svx3DLightDirection2Item(const basegfx::B3DVector& rVec = basegfx::B3DVector(0.0,0.0,1.0)); +}; + +class SVX_DLLPUBLIC Svx3DLightDirection3Item : public SvxB3DVectorItem { +public: + Svx3DLightDirection3Item(const basegfx::B3DVector& rVec = basegfx::B3DVector(0.0,0.0,1.0)); +}; + +class SVX_DLLPUBLIC Svx3DLightDirection4Item : public SvxB3DVectorItem { +public: + Svx3DLightDirection4Item(const basegfx::B3DVector& rVec = basegfx::B3DVector(0.0,0.0,1.0)); +}; + +class SVX_DLLPUBLIC Svx3DLightDirection5Item : public SvxB3DVectorItem { +public: + Svx3DLightDirection5Item(const basegfx::B3DVector& rVec = basegfx::B3DVector(0.0,0.0,1.0)); +}; + +class SVX_DLLPUBLIC Svx3DLightDirection6Item : public SvxB3DVectorItem { +public: + Svx3DLightDirection6Item(const basegfx::B3DVector& rVec = basegfx::B3DVector(0.0,0.0,1.0)); +}; + +class SVX_DLLPUBLIC Svx3DLightDirection7Item : public SvxB3DVectorItem { +public: + Svx3DLightDirection7Item(const basegfx::B3DVector& rVec = basegfx::B3DVector(0.0,0.0,1.0)); +}; + +class SVX_DLLPUBLIC Svx3DLightDirection8Item : public SvxB3DVectorItem { +public: + Svx3DLightDirection8Item(const basegfx::B3DVector& rVec = basegfx::B3DVector(0.0,0.0,1.0)); +}; + +class Svx3DShadowSlantItem : public SfxUInt16Item { +public: + SVX_DLLPUBLIC Svx3DShadowSlantItem(sal_uInt16 nVal = 0); +}; + +class SVX_DLLPUBLIC Svx3DShadeModeItem : public SfxUInt16Item { +public: + Svx3DShadeModeItem(sal_uInt16 nVal = 2); + + // use drawing::ShadeMode + SVX_DLLPRIVATE virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; + SVX_DLLPRIVATE virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ); + SVX_DLLPRIVATE virtual SfxPoolItem* Clone(SfxItemPool* pPool = NULL) const; +}; + +////////////////////////////////////////////////////////////////////////////// +// #107245# Item to replace bExtrudeSmoothed and bLatheSmoothed +class Svx3DSmoothNormalsItem : public SfxBoolItem { +public: + Svx3DSmoothNormalsItem(sal_Bool bVal = 1); + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nItemVersion) const; + virtual sal_uInt16 GetVersion(sal_uInt16 nFileFormatVersion) const; +}; + +// #107245# Item to replace bExtrudeSmoothFrontBack and bLatheSmoothFrontBack +class Svx3DSmoothLidsItem : public SfxBoolItem { +public: + Svx3DSmoothLidsItem(sal_Bool bVal = 0); + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nItemVersion) const; + virtual sal_uInt16 GetVersion(sal_uInt16 nFileFormatVersion) const; +}; + +// #107245# Item to replace bExtrudeCharacterMode and bLatheCharacterMode +class Svx3DCharacterModeItem : public SfxBoolItem { +public: + Svx3DCharacterModeItem(sal_Bool bVal = 0); + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nItemVersion) const; + virtual sal_uInt16 GetVersion(sal_uInt16 nFileFormatVersion) const; +}; + +// #107245# Item to replace bExtrudeCloseFront and bLatheCloseFront +class SVX_DLLPUBLIC Svx3DCloseFrontItem : public SfxBoolItem { +public: + Svx3DCloseFrontItem(sal_Bool bVal = 1); + SVX_DLLPRIVATE virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nItemVersion) const; + SVX_DLLPRIVATE virtual sal_uInt16 GetVersion(sal_uInt16 nFileFormatVersion) const; +}; + +// #107245# Item to replace bExtrudeCloseBack and bLatheCloseBack +class SVX_DLLPUBLIC Svx3DCloseBackItem : public SfxBoolItem { +public: + Svx3DCloseBackItem(sal_Bool bVal = 1); + SVX_DLLPRIVATE virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nItemVersion) const; + SVX_DLLPRIVATE virtual sal_uInt16 GetVersion(sal_uInt16 nFileFormatVersion) const; +}; + +#endif // _SVX3DITEMS_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svxcommands.h b/include/svx/svxcommands.h new file mode 100644 index 000000000000..266d3d691df7 --- /dev/null +++ b/include/svx/svxcommands.h @@ -0,0 +1,154 @@ +/* -*- 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 SVX_SVXCOMMANDS_HRC +#define SVX_SVXCOMMANDS_HRC + +#define CMD_SID_INET_DLG ".uno:InternetDialog" +#define CMD_SID_OBJECT_ALIGN_CENTER ".uno:AlignCenter" +#define CMD_SID_OBJECT_ALIGN_DOWN ".uno:AlignDown" +#define CMD_SID_OBJECT_ALIGN_LEFT ".uno:ObjectAlignLeft" +#define CMD_SID_OBJECT_ALIGN_MIDDLE ".uno:AlignMiddle" +#define CMD_SID_OBJECT_ALIGN_RIGHT ".uno:ObjectAlignRight" +#define CMD_SID_OBJECT_ALIGN_UP ".uno:AlignUp" +#define CMD_SID_FM_AUTOCONTROLFOCUS ".uno:AutoControlFocus" +#define CMD_SID_AUTOFORMAT ".uno:AutoFormat" +#define CMD_SID_BEZIER_CLOSE ".uno:BezierClose" +#define CMD_SID_BEZIER_CONVERT ".uno:BezierConvert" +#define CMD_SID_BEZIER_CUTLINE ".uno:BezierCutLine" +#define CMD_SID_BEZIER_DELETE ".uno:BezierDelete" +#define CMD_SID_BEZIER_EDGE ".uno:BezierEdge" +#define CMD_SID_BEZIER_ELIMINATE_POINTS ".uno:BezierEliminatePoints" +#define CMD_SID_BEZIER_INSERT ".uno:BezierInsert" +#define CMD_SID_BEZIER_MOVE ".uno:BezierMove" +#define CMD_SID_BEZIER_SMOOTH ".uno:BezierSmooth" +#define CMD_SID_BEZIER_SYMMTR ".uno:BezierSymmetric" +#define CMD_SID_BMPMASK ".uno:BmpMask" +#define CMD_SID_ATTR_CHAR_WEIGHT ".uno:Bold" +#define CMD_SID_FRAME_TO_TOP ".uno:BringToFront" +#define CMD_SID_ATTR_PARA_ADJUST_CENTER ".uno:CenterPara" +#define CMD_SID_FM_CHANGECONTROLTYPE ".uno:ChangeControlType" +#define CMD_SID_ATTR_CHAR_FONT ".uno:CharFontName" +#define CMD_SID_FM_CHECKBOX ".uno:CheckBox" +#define CMD_SID_FM_COMBOBOX ".uno:ComboBox" +#define CMD_SID_CONTOUR_DLG ".uno:ContourDialog" +#define CMD_SID_FM_CONVERTTO_BUTTON ".uno:ConvertToButton" +#define CMD_SID_FM_CONVERTTO_CHECKBOX ".uno:ConvertToCheckBox" +#define CMD_SID_FM_CONVERTTO_COMBOBOX ".uno:ConvertToCombo" +#define CMD_SID_FM_CONVERTTO_CURRENCY ".uno:ConvertToCurrency" +#define CMD_SID_FM_CONVERTTO_DATE ".uno:ConvertToDate" +#define CMD_SID_FM_CONVERTTO_EDIT ".uno:ConvertToEdit" +#define CMD_SID_FM_CONVERTTO_FILECONTROL ".uno:ConvertToFileControl" +#define CMD_SID_FM_CONVERTTO_FIXEDTEXT ".uno:ConvertToFixed" +#define CMD_SID_FM_CONVERTTO_FORMATTED ".uno:ConvertToFormatted" +#define CMD_SID_FM_CONVERTTO_SCROLLBAR ".uno:ConvertToScrollBar" +#define CMD_SID_FM_CONVERTTO_SPINBUTTON ".uno:ConvertToSpinButton" +#define CMD_SID_FM_CONVERTTO_GROUPBOX ".uno:ConvertToGroup" +#define CMD_SID_FM_CONVERTTO_IMAGEBUTTON ".uno:ConvertToImageBtn" +#define CMD_SID_FM_CONVERTTO_IMAGECONTROL ".uno:ConvertToImageControl" +#define CMD_SID_FM_CONVERTTO_LISTBOX ".uno:ConvertToList" +#define CMD_SID_FM_CONVERTTO_NUMERIC ".uno:ConvertToNumeric" +#define CMD_SID_FM_CONVERTTO_PATTERN ".uno:ConvertToPattern" +#define CMD_SID_FM_CONVERTTO_RADIOBUTTON ".uno:ConvertToRadio" +#define CMD_SID_FM_CONVERTTO_TIME ".uno:ConvertToTime" +#define CMD_SID_FM_CONVERTTO_NAVIGATIONBAR ".uno:ConvertToNavigationBar" +#define CMD_SID_FM_CURRENCYFIELD ".uno:CurrencyField" +#define CMD_SID_FM_DATEFIELD ".uno:DateField" +#define CMD_SID_DISTRIBUTE_DLG ".uno:DistributeSelection" +#define CMD_SID_FM_EDIT ".uno:Edit" +#define CMD_SID_ENTER_GROUP ".uno:EnterGroup" +#define CMD_SID_CHAR_DLG ".uno:FontDialog" +#define CMD_SID_ATTR_CHAR_FONTHEIGHT ".uno:FontHeight" +#define CMD_SID_FONTWORK ".uno:FontWork" +#define CMD_SID_ATTRIBUTES_AREA ".uno:FormatArea" +#define CMD_SID_GROUP ".uno:FormatGroup" +#define CMD_SID_ATTRIBUTES_LINE ".uno:FormatLine" +#define CMD_SID_FM_FORMATTEDFIELD ".uno:FormattedField" +#define CMD_SID_UNGROUP ".uno:FormatUngroup" +#define CMD_SID_ATTR_GRAF_CROP ".uno:GrafAttrCrop" +#define CMD_SID_GRFFILTER_MOSAIC ".uno:GraphicFilterMosaic" +#define CMD_SID_GRFFILTER_POSTER ".uno:GraphicFilterPoster" +#define CMD_SID_GRFFILTER_EMBOSS ".uno:GraphicFilterRelief" +#define CMD_SID_GRFFILTER_SEPIA ".uno:GraphicFilterSepia" +#define CMD_SID_GRFFILTER_SMOOTH ".uno:GraphicFilterSmooth" +#define CMD_SID_GRFFILTER_SOLARIZE ".uno:GraphicFilterSolarize" +#define CMD_SID_GRID_USE ".uno:GridUse" +#define CMD_SID_GRID_VISIBLE ".uno:GridVisible" +#define CMD_SID_OUTLINE_MAKE ".uno:Group" +#define CMD_SID_INSERT_POSTIT ".uno:InsertAnnotation" +#define CMD_SID_REPLYTO_POSTIT ".uno:ReplyToAnnotation" +#define CMD_SID_DELETE_POSTIT ".uno:DeleteAnnotation" +#define CMD_SID_DELETEALL_POSTIT ".uno:DeleteAllAnnotation" +#define CMD_SID_DELETEALLBYAUTHOR_POSTIT ".uno:DeleteAllAnnotationByAuthor" +#define CMD_SID_CHARMAP ".uno:InsertSymbol" +#define CMD_SID_ATTR_CHAR_POSTURE ".uno:Italic" +#define CMD_SID_ATTR_PARA_ADJUST_BLOCK ".uno:JustifyPara" +#define CMD_SID_LEAVE_GROUP ".uno:LeaveGroup" +#define CMD_SID_ATTR_PARA_ADJUST_LEFT ".uno:LeftPara" +#define CMD_SID_FM_LISTBOX ".uno:ListBox" +#define CMD_SID_FM_NUMERICFIELD ".uno:NumericField" +#define CMD_SID_OBJECT_ALIGN ".uno:ObjectAlign" +#define CMD_SID_FRAME_DOWN ".uno:ObjectBackOne" +#define CMD_SID_FRAME_UP ".uno:ObjectForwardOne" +#define CMD_SID_FM_OPEN_READONLY ".uno:OpenReadOnly" +#define CMD_SID_ATTR_CHAR_CONTOUR ".uno:OutlineFont" +#define CMD_SID_PARA_DLG ".uno:ParagraphDialog" +#define CMD_SID_FM_PATTERNFIELD ".uno:PatternField" +#define CMD_SID_FM_RECORD_SAVE ".uno:RecSave" +#define CMD_SID_FM_RECORD_UNDO ".uno:RecUndo" +#define CMD_SID_ATTR_PARA_ADJUST_RIGHT ".uno:RightPara" +#define CMD_SID_FRAME_TO_BOTTOM ".uno:SendToBack" +#define CMD_SID_SET_DEFAULT ".uno:SetDefault" +#define CMD_SID_ATTR_CHAR_SHADOWED ".uno:Shadowed" +#define CMD_SID_SHOW_PROPERTYBROWSER ".uno:ShowPropBrowser" +#define CMD_SID_FM_SHOW_PROPERTY_BROWSER ".uno:ShowPropertyBrowser" +#define CMD_SID_ATTR_PARA_LINESPACE_10 ".uno:SpacePara1" +#define CMD_SID_ATTR_PARA_LINESPACE_15 ".uno:SpacePara15" +#define CMD_SID_ATTR_PARA_LINESPACE_20 ".uno:SpacePara2" +#define CMD_SID_ATTR_CHAR_STRIKEOUT ".uno:Strikeout" +#define CMD_SID_SET_SUB_SCRIPT ".uno:SubScript" +#define CMD_SID_SET_SUPER_SCRIPT ".uno:SuperScript" +#define CMD_SID_FM_TAB_DIALOG ".uno:TabDialog" +#define CMD_SID_THESAURUS ".uno:ThesaurusDialog" +#define CMD_SID_FM_TIMEFIELD ".uno:TimeField" +#define CMD_SID_BEZIER_EDIT ".uno:ToggleObjectBezierMode" +#define CMD_SID_OBJECT_ROTATE ".uno:ToggleObjectRotateMode" +#define CMD_SID_ATTR_TRANSFORM ".uno:TransformDialog" +#define CMD_SID_ATTR_CHAR_UNDERLINE ".uno:Underline" +#define CMD_SID_ATTR_CHAR_OVERLINE ".uno:Overline" +#define CMD_SID_OUTLINE_REMOVE ".uno:Ungroup" +#define CMD_SID_3D_WIN ".uno:Window3D" +#define CMD_SID_ATTR_ZOOM ".uno:Zoom" +#define CMD_SID_OPEN_HYPERLINK ".uno:OpenHyperlinkOnCursor" +#define CMD_SID_TABLE_MERGE_CELLS ".uno:MergeCells" +#define CMD_SID_TABLE_SPLIT_CELLS ".uno:SplitCell" +#define CMD_SID_TABLE_VERT_BOTTOM ".uno:CellVertBottom" +#define CMD_SID_TABLE_VERT_CENTER ".uno:CellVertCenter" +#define CMD_SID_TABLE_VERT_NONE ".uno:CellVertTop" +#define CMD_SID_TABLE_DELETE_ROW ".uno:DeleteRows" +#define CMD_SID_TABLE_DELETE_COL ".uno:DeleteColumns" +#define CMD_SID_TABLE_SELECT_COL ".uno:EntireColumn" +#define CMD_SID_TABLE_SELECT_ROW ".uno:EntireRow" +#define CMD_SID_FORMAT_TABLE_DLG ".uno:TableDialog" +#define CMD_SID_OPEN_SMARTTAGMENU ".uno:OpenSmartTagMenuOnCursor" +#define CMD_SID_TABLE_INSERT_COL_DLG ".uno:InsertColumnDialog" +#define CMD_SID_TABLE_INSERT_ROW_DLG ".uno:InsertRowDialog" + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svxdlg.hxx b/include/svx/svxdlg.hxx new file mode 100644 index 000000000000..fd8ced079923 --- /dev/null +++ b/include/svx/svxdlg.hxx @@ -0,0 +1,499 @@ +/* -*- 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 _SVX_DIALOG_HXX +#define _SVX_DIALOG_HXX + +#include <sfx2/sfxdlg.hxx> +#include <editeng/edtdlg.hxx> + +class SdrModel; +class SdrView; + +#include <svx/dstribut_enum.hxx> +#include <svx/rectenum.hxx> //add for enum RECT_POINT +#include <com/sun/star/container/XIndexContainer.hpp> //add for FmShowColsDialog +#include <com/sun/star/container/XNameReplace.hpp> //add for SvxMacroAssignDlg +#include "svx/svxdllapi.h" +#include <vector> + +namespace com{namespace sun{namespace star{ +namespace linguistic2{ + class XDictionary; + class XSpellChecker1; + class XSpellChecker; + class XThesaurus; + class XHyphenator; +}}}} +class SvxSpellWrapper; //add for SvxSpellCheckDialog +typedef SfxTabPage* (*CreateSvxDistributePage)(Window *pParent, const SfxItemSet &rAttrSet, SvxDistributeHorizontal eHor, SvxDistributeVertical eVer); +typedef sal_uInt16* (*DialogGetRanges)(); + +struct ExchangeData; +class INetURLObject; +class GalleryTheme; +class SvxHyperlinkTabPageBase; +class SearchAttrItemList; +class FmFormShell; +class Graphic; +class SdrObject; +class SvxSpellWrapper; + +typedef ::std::vector< String* > TargetList; + +namespace svx{ class SpellDialogChildWindow;} + +class AbstractSvxDistributeDialog :public VclAbstractDialog //add for SvxDistributeDialog +{ +public: + virtual SvxDistributeHorizontal GetDistributeHor() const = 0; + virtual SvxDistributeVertical GetDistributeVer() const = 0; +}; + +class AbstractFmShowColsDialog : public VclAbstractDialog //add for FmShowColsDialog +{ + public: + virtual void SetColumns(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer>& xCols)= 0; +}; + +class AbstractSvxZoomDialog : public VclAbstractDialog //add for SvxZoomDialog +{ + public: + virtual void SetLimits( sal_uInt16 nMin, sal_uInt16 nMax ) = 0; + virtual void HideButton( sal_uInt16 nBtnId )= 0; + virtual const SfxItemSet* GetOutputItemSet() const = 0 ; +}; + +class AbstractSpellDialog : public VclAbstractDialog // +{ + public: + virtual void SetLanguage( sal_uInt16 nLang ) = 0; + virtual sal_Bool Close() = 0; + virtual void Invalidate() = 0; + virtual Window* GetWindow() = 0; + virtual SfxBindings& GetBindings() = 0; +}; + +typedef long (*PLinkStub)( void*, void* ); + +class AbstractSearchProgress :public VclAbstractRefreshableDialog //add for SearchProgress +{ +public: + virtual void SetFileType( const String& rType ) = 0; + virtual void SetDirectory( const INetURLObject& rURL ) = 0; + virtual PLinkStub GetLinkStubCleanUpHdl() = 0; +}; + +class AbstractTakeProgress :public VclAbstractRefreshableDialog //add for TakeProgress +{ +public: + virtual void SetFile( const INetURLObject& rURL ) = 0; + virtual PLinkStub GetLinkStubCleanUpHdl() = 0; +}; + +class AbstractTitleDialog :public VclAbstractDialog //add for TitleDialog +{ +public: + virtual String GetTitle() const =0; +}; + +class AbstractGalleryIdDialog :public VclAbstractDialog //add for GalleryIdDialog +{ +public: + virtual sal_uIntPtr GetId() const =0; +}; + +class AbstractURLDlg :public VclAbstractDialog //add for URLDlg +{ +public: + virtual String GetURL() const = 0; + virtual String GetAltText() const = 0; + virtual String GetDesc() const = 0; + virtual String GetTarget() const = 0; + virtual String GetName() const = 0; +}; + +class AbstractSvxHlinkDlgMarkWnd :public VclAbstractDialog //add for SvxHlinkDlgMarkWnd +{ +public: + virtual sal_Bool MoveTo ( Point aNewPos )const = 0; + virtual sal_Bool ConnectToDialog( sal_Bool bDoit = sal_True )const = 0; + virtual void RefreshTree ( String aStrURL ) = 0; + virtual void SelectEntry ( String aStrMark ) = 0; + virtual sal_uInt16 SetError( sal_uInt16 nError) = 0; + // in class Window + virtual void SetSizePixel( const Size& rNewSize ) = 0; + virtual Size GetSizePixel() const = 0; + virtual void Hide( sal_uInt16 nFlags = 0 ) = 0; + virtual sal_Bool IsVisible() const = 0; + virtual void Invalidate( sal_uInt16 nFlags = 0 ) = 0; +}; + +class AbstractSvxSearchFormatDialog : public SfxAbstractTabDialog //for SvxSearchFormatDialog +{ +public: + //From class Window. + virtual void SetText( const OUString& rStr ) =0 ; + virtual OUString GetText() const =0 ; +}; + +class AbstractSvxSearchSimilarityDialog :public VclAbstractDialog //add for SvxSearchSimilarityDialog +{ +public: + virtual sal_uInt16 GetOther() =0 ; + virtual sal_uInt16 GetShorter() =0 ; + virtual sal_uInt16 GetLonger() =0 ; + virtual sal_Bool IsRelaxed() =0 ; +}; + +class AbstractSvxJSearchOptionsDialog :public VclAbstractDialog //add for SvxJSearchOptionsDialog +{ +public: + virtual sal_Int32 GetTransliterationFlags() const = 0; +}; + +class AbstractFmInputRecordNoDialog :public VclAbstractDialog //add for FmInputRecordNoDialog +{ +public: + virtual void SetValue(long dNew) = 0; + virtual long GetValue() const = 0; +}; + +class AbstractSvxNewDictionaryDialog :public VclAbstractDialog //add for SvxNewDictionaryDialog +{ +public: + virtual ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XDictionary > GetNewDictionary() = 0; +}; + +class AbstractSvxNameDialog :public VclAbstractDialog //add for SvxNameDialog +{ +public: + virtual void GetName( String& rName ) = 0; + virtual void SetCheckNameHdl( const Link& rLink, bool bCheckImmediately = false ) = 0; + virtual void SetEditHelpId(const OString&) = 0; + //from class Window + virtual void SetHelpId( const OString& ) = 0; + virtual void SetText( const OUString& rStr ) = 0; +}; + +/////////////////////////////////////////////////////////////////////////////////////////////// +// #i68101# + +class AbstractSvxObjectNameDialog :public VclAbstractDialog +{ +public: + virtual void GetName(String& rName) = 0; + virtual void SetCheckNameHdl(const Link& rLink, bool bCheckImmediately = false) = 0; +}; + +class AbstractSvxObjectTitleDescDialog :public VclAbstractDialog +{ +public: + virtual void GetTitle(String& rTitle) = 0; + virtual void GetDescription(String& rDescription) = 0; +}; + +/////////////////////////////////////////////////////////////////////////////////////////////// + +class AbstractSvxMessDialog :public VclAbstractDialog //add for SvxMessDialog +{ +public: + virtual void SetButtonText( sal_uInt16 nBtnId, const String& rNewTxt ) = 0; +}; + +class AbstractSvxMultiPathDialog :public VclAbstractDialog //add for SvxMultiPathDialog +{ +public: + virtual String GetPath() const = 0; + virtual void SetPath( const String& rPath ) = 0; + virtual void EnableRadioButtonMode() = 0; + virtual void SetTitle( const String& rNewTitle ) = 0; +}; + +class AbstractSvxMultiFileDialog :public AbstractSvxMultiPathDialog //add for SvxMultiFileDialog +{ +public: + virtual String GetFiles() const = 0; + virtual void SetFiles( const String& rPath ) = 0; + //from SvxMultiPathDialog + virtual void SetClassPathMode() = 0; + //From Class Window + virtual void SetHelpId( const OString& ) = 0; +}; + +class AbstractSvxHpLinkDlg : public VclAbstractDialog //add for SvxHpLinkDlg +{ +public: + virtual Window* GetWindow() = 0; + virtual sal_Bool QueryClose() = 0; +}; + +class AbstractFmSearchDialog :public VclAbstractDialog //add for FmSearchDialog +{ +public: + virtual void SetFoundHandler(const Link& lnk) = 0; + virtual void SetCanceledNotFoundHdl(const Link& lnk)=0; + virtual void SetActiveField(const String& strField)=0; +}; +class AbstractGraphicFilterDialog :public VclAbstractDialog //add for GraphicFilterDialog +{ +public: + virtual Graphic GetFilteredGraphic( const Graphic& rGraphic, double fScaleX, double fScaleY ) = 0; +}; + +class AbstractSvxAreaTabDialog :public SfxAbstractTabDialog //add for SvxAreaTabDialog +{ +}; + +class AbstractSvxTransformTabDialog : public SfxAbstractTabDialog +{ +public: + virtual void SetValidateFramePosLink( const Link& rLink ) = 0; +}; +class AbstractSvxCaptionDialog : public SfxAbstractTabDialog +{ +public: + virtual void SetValidateFramePosLink( const Link& rLink ) = 0; +}; + +//------------------------------------------------------------- + +class AbstractSvxPostItDialog :public VclAbstractDialog //add for SvxPostItDialog +{ +public: + virtual void SetText( const OUString& rStr ) = 0; //From class Window + virtual const SfxItemSet* GetOutputItemSet() const = 0; + virtual void SetPrevHdl( const Link& rLink ) = 0; + virtual void SetNextHdl( const Link& rLink ) = 0; + virtual void EnableTravel(sal_Bool bNext, sal_Bool bPrev) = 0; + virtual String GetNote() = 0; + virtual void SetNote(const String& rTxt) = 0; + virtual void ShowLastAuthor(const String& rAuthor, const String& rDate) = 0; + virtual void DontChangeAuthor() = 0; + virtual void HideAuthor() = 0; + virtual void SetReadonlyPostIt(sal_Bool bDisable) = 0; + virtual sal_Bool IsOkEnabled() const = 0; + virtual Window * GetWindow() = 0; +}; + +//------------------------------------------------------------- + +class SvxAbstractSplittTableDialog : public VclAbstractDialog +{ +public: + virtual bool IsHorizontal() const = 0; + virtual bool IsProportional() const = 0; + virtual long GetCount() const = 0; +}; + +//------------------------------------------------------------- + +class SvxAbstractNewTableDialog : public VclAbstractDialog +{ +public: + virtual sal_Int32 getRows() const = 0; + virtual sal_Int32 getColumns() const = 0; +}; + +class SvxAbstractInsRowColDlg : public VclAbstractDialog +{ +public: + virtual bool isInsertBefore() const = 0; + virtual sal_uInt16 getInsertCount() const = 0; +}; + +//------------------------------------------------------------- + +class SVX_DLLPUBLIC SvxAbstractDialogFactory : public SfxAbstractDialogFactory, public EditAbstractDialogFactory +{ +public: + static SvxAbstractDialogFactory* Create(); + + // define dtor as this will create typeinfo and in svx library and export vtable + virtual ~SvxAbstractDialogFactory(); + + virtual SfxAbstractTabDialog* CreateTextTabDialog( Window* pParent, + const SfxItemSet* pAttrSet, + SdrView* pView, + SdrModel* pModel=0 ) = 0 ; //add for SvxTextTabDialog + + virtual AbstractSvxCaptionDialog* CreateCaptionDialog( Window* pParent, + const SdrView* pView, + sal_uInt16 nAnchorTypes = 0 ) = 0; //add for SvxCaptionTabDialog + + virtual AbstractSvxDistributeDialog* CreateSvxDistributeDialog(Window* pParent, + const SfxItemSet& rAttr, + SvxDistributeHorizontal eHor = SvxDistributeHorizontalNone, + SvxDistributeVertical eVer = SvxDistributeVerticalNone)= 0; + + virtual AbstractFmShowColsDialog * CreateFmShowColsDialog( Window* pParent ) = 0; + + virtual AbstractSvxZoomDialog * CreateSvxZoomDialog( Window* pParent, //add for SvxZoomDialog + const SfxItemSet& rCoreSet )=0; + + virtual AbstractSpellDialog * CreateSvxSpellDialog(Window* pParent, + SfxBindings* pBindings, + svx::SpellDialogChildWindow* pSpellChildWindow )=0; + + virtual VclAbstractRefreshableDialog * CreateActualizeProgressDialog( Window* pParent, //add for ActualizeProgress + GalleryTheme* pThm ) = 0; + virtual AbstractSearchProgress * CreateSearchProgressDialog( Window* pParent, //add for SearchProgress + const INetURLObject& rStartURL ) = 0; + virtual AbstractTakeProgress * CreateTakeProgressDialog( Window* pParent ) = 0; + virtual AbstractTitleDialog * CreateTitleDialog( Window* pParent, //add for TitleDialog + const String& rOldText ) = 0; + virtual AbstractGalleryIdDialog * CreateGalleryIdDialog( Window* pParent, //add for SvxZoomDialog + GalleryTheme* pThm ) = 0; + virtual VclAbstractDialog2 * CreateGalleryThemePropertiesDialog( Window* pParent, //add for GalleryThemeProperties + ExchangeData* pData, + SfxItemSet* pItemSet ) = 0; + virtual AbstractURLDlg * CreateURLDialog( Window* pParent, + const String& rURL, const String& rAltText, const String& rDescription, + const String& rTarget, const String& rName, + TargetList& rTargetList ) = 0; + virtual AbstractSvxHlinkDlgMarkWnd* CreateSvxHlinkDlgMarkWndDialog( SvxHyperlinkTabPageBase* pParent, sal_uInt32 nResId ) =0; //add for SvxHlinkDlgMarkWnd + + virtual SfxAbstractTabDialog* CreateTabItemDialog( Window* pParent, //add for SvxSearchFormatDialog + const SfxItemSet& rSet, + sal_uInt32 nResId) = 0; + virtual VclAbstractDialog* CreateSvxSearchAttributeDialog( Window* pParent, //add for SvxSearchAttributeDialog + SearchAttrItemList& rLst, + const sal_uInt16* pWhRanges)=0; + virtual AbstractSvxSearchSimilarityDialog * CreateSvxSearchSimilarityDialog( Window* pParent, //add for SvxSearchSimilarityDialog + sal_Bool bRelax, + sal_uInt16 nOther, + sal_uInt16 nShorter, + sal_uInt16 nLonger ) = 0; + virtual SfxAbstractTabDialog* CreateSvxBorderBackgroundDlg( Window* pParent, //add for SvxBorderBackgroundDlg + const SfxItemSet& rCoreSet, + sal_Bool bEnableSelector = sal_False) = 0; + virtual AbstractSvxTransformTabDialog* CreateSvxTransformTabDialog( Window* pParent, //add for SvxTransformTabDialog + const SfxItemSet* pAttr, + const SdrView* pView, + sal_uInt16 nAnchorTypes = 0) = 0; + virtual SfxAbstractTabDialog* CreateSchTransformTabDialog( Window* pParent, //add for SchTransformTabDialog + const SfxItemSet* pAttr, + const SdrView* pSdrView, + sal_uInt32 nResId, + bool bSizeTabPage = false + )=0; + virtual AbstractSvxJSearchOptionsDialog * CreateSvxJSearchOptionsDialog( Window* pParent, + const SfxItemSet& rOptionsSet, + sal_Int32 nInitialFlags )=0; + virtual AbstractFmInputRecordNoDialog * CreateFmInputRecordNoDialog( Window* pParent ) = 0; + virtual AbstractSvxNewDictionaryDialog* CreateSvxNewDictionaryDialog( Window* pParent, + ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XSpellChecker1 > &xSpl, + sal_uInt32 nResId ) = 0; //add for SvxNewDictionaryDialog + virtual VclAbstractDialog * CreateSvxEditDictionaryDialog( Window* pParent, + const String& rName, + ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XSpellChecker1> &xSpl, + sal_uInt32 nResId) = 0;//add for SvxEditDictionaryDialog + virtual AbstractSvxNameDialog * CreateSvxNameDialog( Window* pParent, + const String& rName, const String& rDesc ) = 0; //add for SvxNameDialog + + // #i68101# + virtual AbstractSvxObjectNameDialog* CreateSvxObjectNameDialog(Window* pParent, const String& rName ) = 0; + virtual AbstractSvxObjectTitleDescDialog* CreateSvxObjectTitleDescDialog(Window* pParent, const String& rTitle, const String& rDescription) = 0; + + virtual AbstractSvxMessDialog * CreateSvxMessDialog( Window* pParent, sal_uInt32 nResId, + const String& rText, const String& rDesc, + Image* pImg = NULL ) = 0; //add for SvxMessDialog + + virtual AbstractSvxMultiPathDialog * CreateSvxMultiPathDialog( Window* pParent, sal_Bool bEmptyAllowed = sal_False ) = 0 ; //add for SvxMultiPathDialog + virtual AbstractSvxMultiFileDialog * CreateSvxMultiFileDialog( Window* pParent, sal_Bool bEmptyAllowed = sal_False ) = 0 ; //add for SvxMultiFileDialog + virtual AbstractSvxHpLinkDlg * CreateSvxHpLinkDlg (Window* pParent, //add for SvxMultiFileDialog + SfxBindings* pBindings, + sal_uInt32 nResId)=0; + virtual AbstractFmSearchDialog* CreateFmSearchDialog(Window* pParent, //add for FmSearchDialog + const OUString& strInitialText, + const ::std::vector< OUString >& _rContexts, + sal_Int16 nInitialContext, + const Link& lnkContextSupplier)=0; + virtual AbstractGraphicFilterDialog * CreateGraphicFilterEmboss (Window* pParent, //add for GraphicFilterEmboss + const Graphic& rGraphic, + RECT_POINT eLightSource, sal_uInt32 nResId )=0; + virtual AbstractGraphicFilterDialog * CreateGraphicFilterPosterSepia (Window* pParent, //add for GraphicFilterPoster & GraphicFilterSepia + const Graphic& rGraphic, + sal_uInt16 nCount, + sal_uInt32 nResId)=0; + virtual AbstractGraphicFilterDialog * CreateGraphicFilterSmooth (Window* pParent, //add for GraphicFilterSmooth + const Graphic& rGraphic, + double nRadius, sal_uInt32 nResId)=0; + virtual AbstractGraphicFilterDialog * CreateGraphicFilterSolarize (Window* pParent, //add for GraphicFilterSolarize + const Graphic& rGraphic, + sal_uInt8 nGreyThreshold, sal_Bool bInvert, sal_uInt32 nResId)=0; + virtual AbstractGraphicFilterDialog * CreateGraphicFilterMosaic (Window* pParent, //add for GraphicFilterMosaic + const Graphic& rGraphic, + sal_uInt16 nTileWidth, sal_uInt16 nTileHeight, sal_Bool bEnhanceEdges, sal_uInt32 nResId)=0; + virtual AbstractSvxAreaTabDialog* CreateSvxAreaTabDialog( Window* pParent,//add for SvxAreaTabDialog + const SfxItemSet* pAttr, + SdrModel* pModel, + const SdrView* pSdrView = NULL ) = 0 ; + virtual SfxAbstractTabDialog* CreateSvxLineTabDialog( Window* pParent, const SfxItemSet* pAttr, //add forSvxLineTabDialog + SdrModel* pModel, + const SdrObject* pObj = NULL, + sal_Bool bHasObj = sal_True )=0; + virtual VclAbstractDialog* CreateSfxDialog( Window* pParent, const SfxBindings& rBindings, sal_uInt32 nResId ) = 0; + virtual SfxAbstractDialog* CreateSfxDialog( Window* pParent, //add for SvxMeasureDialog & SvxConnectionDialog + const SfxItemSet& rAttr, + const SdrView* pView, + sal_uInt32 nResId + )=0; + virtual SfxAbstractDialog* CreateSfxDialog( Window* pParent, //add for SvxMeasureDialog & SvxConnectionDialog + const SfxItemSet& rAttr, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& _rxFrame, + sal_uInt32 nResId + )=0; + virtual AbstractSvxPostItDialog* CreateSvxPostItDialog( Window* pParent, //add for SvxPostItDialog + const SfxItemSet& rCoreSet, + sal_Bool bPrevNext = sal_False) = 0; + virtual VclAbstractDialog* CreateSvxScriptOrgDialog( Window* pParent, const String& rLanguage ) = 0; + + virtual CreateSvxDistributePage GetSvxDistributePageCreatorFunc() = 0; // add for SvxDistributePage + virtual DialogGetRanges GetDialogGetRangesFunc() = 0; //add for SvxPostItDialog + + virtual AbstractScriptSelectorDialog* + CreateScriptSelectorDialog( + Window* pParent, + sal_Bool bShowSlots, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& _rxFrame + ) = 0; + + virtual VclAbstractDialog* CreateScriptErrorDialog( + Window* pParent, com::sun::star::uno::Any aException) = 0; + + virtual VclAbstractDialog* CreateSvxMacroAssignDlg( + Window* _pParent, + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& _rxDocumentFrame, + const bool _bUnoDialogMode, + const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameReplace >& _rxEvents, + const sal_uInt16 _nInitiallySelectedEvent + ) = 0; + + virtual SfxAbstractTabDialog* CreateSvxFormatCellsDialog( Window* pParent, const SfxItemSet* pAttr, SdrModel* pModel, const SdrObject* pObj = NULL )=0; + + virtual SvxAbstractSplittTableDialog* CreateSvxSplittTableDialog( Window* pParent, bool bIsTableVertical, long nMaxVertical, long nMaxHorizontal )=0; + + virtual SvxAbstractNewTableDialog* CreateSvxNewTableDialog( Window* pParent ) = 0; + + virtual SvxAbstractInsRowColDlg* CreateSvxInsRowColDlg( Window* pParent, bool bCol, const OString& sHelpId ) = 0; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svxdllapi.h b/include/svx/svxdllapi.h new file mode 100644 index 000000000000..0d6bf0a8fecb --- /dev/null +++ b/include/svx/svxdllapi.h @@ -0,0 +1,34 @@ +/* -*- 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 INCLUDED_SVXDLLAPI_H +#define INCLUDED_SVXDLLAPI_H + +#include "sal/types.h" + +#if defined(SVX_DLLIMPLEMENTATION) +#define SVX_DLLPUBLIC SAL_DLLPUBLIC_EXPORT +#else +#define SVX_DLLPUBLIC SAL_DLLPUBLIC_IMPORT +#endif +#define SVX_DLLPRIVATE SAL_DLLPRIVATE + +#endif /* INCLUDED_SVXDLLAPI_H */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svxerr.hxx b/include/svx/svxerr.hxx new file mode 100644 index 000000000000..939bfecb71d4 --- /dev/null +++ b/include/svx/svxerr.hxx @@ -0,0 +1,96 @@ +/* -*- 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 _SVXERR_HXX +#define _SVXERR_HXX + +#include <tools/errcode.hxx> + +// define ---------------------------------------------------------------- + +#define ERRCODE_SVX_LINGU_THESAURUSNOTEXISTS (1UL | ERRCODE_AREA_SVX | \ + ERRCODE_CLASS_NOTEXISTS) + +#define ERRCODE_SVX_LINGU_LINGUNOTEXISTS (3UL | ERRCODE_AREA_SVX | \ + ERRCODE_CLASS_NOTEXISTS ) +#define ERRCODE_SVX_LINGU_HYPHENNOTEXISTS (4UL | ERRCODE_AREA_SVX | \ + ERRCODE_CLASS_NOTEXISTS ) +#define ERRCODE_SVX_LINGU_DICT_NOTREADABLE (5UL | ERRCODE_AREA_SVX | \ + ERRCODE_CLASS_READ ) +#define ERRCODE_SVX_LINGU_DICT_NOTWRITEABLE (6UL | ERRCODE_AREA_SVX | \ + ERRCODE_CLASS_WRITE ) + +#define ERRCODE_SVX_GRAPHIC_NOTREADABLE (7UL | ERRCODE_AREA_SVX | \ + ERRCODE_CLASS_READ ) + +#define ERRCODE_SVX_LINGU_NOLANGUAGE (9UL | ERRCODE_AREA_SVX | \ + ERRCODE_CLASS_NOTEXISTS ) +#define ERRCODE_SVX_FORMS_NOIOSERVICES (10UL | ERRCODE_AREA_SVX ) +#define ERRCODE_SVX_FORMS_READWRITEFAILED (11UL | ERRCODE_AREA_SVX ) + +#define ERRCODE_SVX_BULLETITEM_NOBULLET (12UL | ERRCODE_AREA_SVX ) + +#define ERRCODE_SVX_MODIFIED_VBASIC_STORAGE (13UL | ERRCODE_AREA_SVX \ + | ERRCODE_WARNING_MASK \ + | ERRCODE_CLASS_WRITE ) + +#define ERRCODE_SVX_VBASIC_STORAGE_EXIST (14UL | ERRCODE_AREA_SVX \ + | ERRCODE_WARNING_MASK \ + | ERRCODE_CLASS_WRITE ) + +/** Error message: "Wrong password." */ +#define ERRCODE_SVX_WRONGPASS (15UL | ERRCODE_AREA_SVX | ERRCODE_CLASS_NONE) + +/** Error message: "Read error. Unsupported encryption method." */ +#define ERRCODE_SVX_READ_FILTER_CRYPT (16UL | ERRCODE_AREA_SVX | ERRCODE_CLASS_READ) + +/** Error message: "Read error. Passwort encrypted Powerpoint documents..." */ +#define ERRCODE_SVX_READ_FILTER_PPOINT (17UL | ERRCODE_AREA_SVX | ERRCODE_CLASS_READ) + +/** Error message: "Warning. Passwort protection is not suppported when ..." */ +#define ERRCODE_SVX_EXPORT_FILTER_CRYPT (18UL | ERRCODE_AREA_SVX | ERRCODE_CLASS_EXPORT | ERRCODE_WARNING_MASK) + + +// both codes will be used twice : with ERRCODE_CLASS_READ- and ERRCODE_CLASS_WRITE-bits +#define ERRCTX_SVX_LINGU_THESAURUS 1 +#define ERRCTX_SVX_LINGU_SPELLING 2 +#define ERRCTX_SVX_LINGU_HYPHENATION 3 +#define ERRCTX_SVX_LINGU_DICTIONARY 4 +#define ERRCTX_SVX_BACKGROUND 5 +#define ERRCTX_SVX_IMPORT_GRAPHIC 6 + +// class SvxErrorHandler ------------------------------------------------- + +#ifndef __RSC + +#include <svtools/ehdl.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC SvxErrorHandler : private SfxErrorHandler +{ +public: + SvxErrorHandler(); + static void ensure(); +}; + +#endif + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svxgrahicitem.hxx b/include/svx/svxgrahicitem.hxx new file mode 100644 index 000000000000..d18c8f3b6af2 --- /dev/null +++ b/include/svx/svxgrahicitem.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SVX_GRAPHICITEM_HXX +#define _SVX_GRAPHICITEM_HXX + + +#include <svl/poolitem.hxx> +#include "svx/svxdllapi.h" + +#include <vcl/graph.hxx> + +class SVX_DLLPUBLIC SvxGraphicItem: public SfxPoolItem +{ + Graphic aGraphic; + +public: + TYPEINFO(); + SvxGraphicItem(); + SvxGraphicItem( sal_uInt16 nWhich ,const Graphic& rGraphic); + SvxGraphicItem( const SvxGraphicItem& ); + + + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + + Graphic GetGraphic() const { return aGraphic; } + +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svxids.hrc b/include/svx/svxids.hrc new file mode 100644 index 000000000000..3c11c3686efe --- /dev/null +++ b/include/svx/svxids.hrc @@ -0,0 +1,950 @@ +/* -*- 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 _SVX_SVXIDS_HRC +#define _SVX_SVXIDS_HRC + +#include <svl/memberid.hrc> +#include <svl/solar.hrc> +#include <sfx2/sfx.hrc> +#include <sfx2/sfxsids.hrc> +#include <editeng/editids.hrc> +#include <svx/unomid.hxx> + +// solange noch im sfxids.hrc definiert ------------------------------------- + +#ifdef SID_INSERT_FRAME +#undef SID_INSERT_FRAME +#endif + +// -------------------------------------------------------------------------- +// Member-Id's +// -------------------------------------------------------------------------- + +#define MID_APPFLAG 0x20 +#define MID_AUTOBREAK 0x21 +#define MID_BREAKxxx 0x22 +#define MID_BRUSHSTYLE 0x23 +#define MID_CELLTYPE 0x24 +#define MID_CHARSET 0x25 +#define MID_COMMAND 0x26 +#define MID_CONTENT 0x27 +#define MID_DESCNAMExxx 0x28 + +#define MID_ESCAPEMENT 0x2a +#define MID_FAMILY 0x2b +#define MID_FIRSTLINE_OFFSET 0x2d +#define MID_FONTFAMILY 0x2f +#define MID_FONTFAMILYNAME 0x30 +#define MID_FONTSTYLE 0x32 +#define MID_HYPHEN 0x34 +#define MID_INTER_LINESPACE 0x36 +#define MID_INTER_SPACE 0x37 +#define MID_LANDSCAPE 0x38 + +#define MID_LEFT_MARGIN 0x3a +#define MID_LOWER 0x3d +#define MID_MAXHYPHENS 0x3e +#define MID_MINLEAD 0x3f +#define MID_MINTRAIL 0x40 +#define MID_NUMTYPExxx 0x41 +#define MID_PAGEEND 0x42 +#define MID_POS 0x43 +#define MID_PROPORTIONAL 0x44 +#define MID_REPLACE_STRING 0x45 +#define MID_RIGHT 0x46 +#define MID_RIGHT_MARGIN 0x47 +#define MID_ROW_DIRECTION 0x48 +#define MID_SIZE 0x4a +#define MID_UPPER 0x4b +#define MID_USExxx 0x4c + +#define MID_HLINK_NAME 0x6f +#define MID_HLINK_URL 0x70 +#define MID_HLINK_TARGET 0x71 +#define MID_HLINK_TYPE 0x72 +#define MID_HLINK_TEXT 0x73 + +#define MID_VIEWLAYOUT_COLUMNS 0x77 +#define MID_VIEWLAYOUT_BOOKMODE 0x78 + +#define MID_ZOOMSLIDER_CURRENTZOOM 0x79 +#define MID_ZOOMSLIDER_SNAPPINGPOINTS 0x7a +#define MID_ZOOMSLIDER_MINZOOM 0x7b +#define MID_ZOOMSLIDER_MAXZOOM 0x7c + +// -------------------------------------------------------------------------- +// Event-Id's Block 1 +// -------------------------------------------------------------------------- + +#define SVX_EVENT_COLUM_WINDOW_EXECUTE (EVENT_SVX_START) + +// -------------------------------------------------------------------------- +// Event-Id's Block 2 +// -------------------------------------------------------------------------- + +#define SVX_EVENT_IMAGE_LOAD (SID_LIB_START) +#define SVX_EVENT_IMAGE_ABORT (SID_LIB_START + 1) +#define SVX_EVENT_IMAGE_ERROR (SID_LIB_START + 2) + +// -------------------------------------------------------------------------- +// Function-Id's +// -------------------------------------------------------------------------- + +// Function-Id's +#define FID_SVX_START (SID_LIB_START + 500) + +#define FID_SEARCH_ON (FID_SVX_START + 0) +#define FID_SEARCH_OFF (FID_SVX_START + 1) +#define FID_SEARCH_NOW (FID_SVX_START + 2) + +#define SID_CHARMAP (FID_SVX_START + 3) + +#define FID_SEARCH_SEARCHSET (FID_SVX_START + 4) +#define FID_SEARCH_REPLACESET (FID_SVX_START + 5) + +// -------------------------------------------------------------------------- +// SFX-Id's +// -------------------------------------------------------------------------- + +#define SID_POLY_MERGE (SID_SFX_START + 679) +#define SID_POLY_SUBSTRACT (SID_SFX_START + 680) +#define SID_POLY_INTERSECT (SID_SFX_START + 681) +#define SID_POLY_FORMEN (SID_SFX_START + 682) +#define SID_DISTRIBUTE_DLG (SID_SFX_START + 683) + +// -------------------------------------------------------------------------- +// Basic IDE-Id's +// -------------------------------------------------------------------------- + +#define SID_BASICIDE_TOGGLEBRKPNT ( SID_BASICIDE_START + 0 ) +#define SID_BASICIDE_ADDWATCH ( SID_BASICIDE_START + 1 ) +#define SID_BASICIDE_CHOOSEMACRO ( SID_BASICIDE_START + 2 ) +#define SID_BASICIDE_EDITMACRO ( SID_BASICIDE_START + 3 ) +#define SID_BASICIDE_CREATEMACRO ( SID_BASICIDE_START + 4 ) +#define SID_BASICIDE_MODULEDLG ( SID_BASICIDE_START + 5 ) +#define SID_BASICIDE_OBJCAT ( SID_BASICIDE_START + 6 ) +#define SID_BASICIDE_REMOVEWATCH ( SID_BASICIDE_START + 7 ) +#define SID_BASICIDE_SHOWSBX ( SID_BASICIDE_START + 9 ) +#define SID_BASICIDE_HIDECURPAGE ( SID_BASICIDE_START + 10 ) +#define SID_BASICIDE_NAMECHANGEDONTAB ( SID_BASICIDE_START + 11 ) +#define SID_BASICIDE_UPDATEMODULESOURCE ( SID_BASICIDE_START + 12 ) +#define SID_BASICIDE_STOREMODULESOURCE ( SID_BASICIDE_START + 13 ) +#define SID_BASICIDE_MATCHGROUP ( SID_BASICIDE_START + 14 ) +#define SID_BASICIDE_APPEAR ( SID_BASICIDE_START + 15 ) +#define SID_BASICIDE_STOREALLMODULESOURCES ( SID_BASICIDE_START + 16 ) +#define SID_BASICIDE_UPDATEALLMODULESOURCES ( SID_BASICIDE_START + 17 ) +#define SID_BASICIDE_LIBSELECTED ( SID_BASICIDE_START + 18 ) +#define SID_BASICIDE_LIBSELECTOR ( SID_BASICIDE_START + 19 ) +#define SID_BASICIDE_NEWDIALOG ( SID_BASICIDE_START + 20 ) +#define SID_BASICIDE_NEWMODULE ( SID_BASICIDE_START + 21 ) +#define SID_BASICIDE_DELETECURRENT ( SID_BASICIDE_START + 22 ) +#define SID_BASICIDE_RENAMECURRENT ( SID_BASICIDE_START + 23 ) +#define SID_BASICIDE_SBXDELETED ( SID_BASICIDE_START + 24 ) +#define SID_BASICIDE_SBXINSERTED ( SID_BASICIDE_START + 25 ) +#define SID_BASICIDE_SBXRENAMED ( SID_BASICIDE_START + 26 ) +#define SID_BASICIDE_LIBLOADED ( SID_BASICIDE_START + 27 ) +#define SID_BASICIDE_LIBREMOVED ( SID_BASICIDE_START + 28 ) +#define SID_BASICIDE_ARG_TABID ( SID_BASICIDE_START + 30 ) +#define SID_BASICIDE_ARG_SBX ( SID_BASICIDE_START + 31 ) +#define SID_BASICIDE_ARG_MACROINFO ( SID_BASICIDE_START + 32 ) +#define SID_BASICIDE_ARG_LIBNAME ( SID_BASICIDE_START + 34 ) +#define SID_BASICIDE_ARG_MODULENAME ( SID_BASICIDE_START + 35 ) +#define SID_BASICIDE_BRKPNTSCHANGED ( SID_BASICIDE_START + 36 ) +#define SID_BASICIDE_STATUSBAR ( SID_BASICIDE_START + 37 ) +#define SID_BASICIDE_STAT_POS ( SID_BASICIDE_START + 38 ) +#define SID_BASICIDE_STAT_DATE ( SID_BASICIDE_START + 39 ) +#define SID_BASICIDE_STAT_TITLE ( SID_BASICIDE_START + 40 ) +#define SID_BASICIDE_NEWJAVAMODULE ( SID_BASICIDE_START + 41 ) +#define SID_BASICIDE_IMAGESTART ( SID_BASICIDE_START + 50 ) +#define SID_OPTIONS_TREEDIALOG ( SID_BASICIDE_START + 862) + +// -------------------------------------------------------------------------- +// StarBase-Id's +// -------------------------------------------------------------------------- + +#define SID_SBA_BRW_UPDATE (SID_SBA_START+100) // Daten in Felder +#define SID_SBA_BRW_INSERT (SID_SBA_START+101) // Daten in Text +#define SID_SBA_BRW_MERGE (SID_SBA_START+102) // Serienbrief + +// -------------------------------------------------------------------------- +// SD-Id's +// -------------------------------------------------------------------------- + +#define SID_RULER (SID_SD_START+40) +#define SID_BEZIER_CONVERT (SID_SD_START+65) +#define SID_BEZIER_ELIMINATE_POINTS (SID_SD_START+30) +#define SID_BEZIER_EDGE (SID_SD_START+66) +#define SID_BEZIER_SYMMTR (SID_SD_START+67) +#define SID_TEXTEDIT (SID_SD_START+76) +#define SID_ENTER_GROUP (SID_SD_START+96) +#define SID_LEAVE_GROUP (SID_SD_START+97) +#define SID_SIZE_PAGE_WIDTH (SID_SD_START+98) +#define SID_INSERT_IMAGE (SID_SD_START+105) +#define SID_INSERT_MATH (SID_SD_START+106) +#define SID_SIZE_VISAREA (SID_SD_START+114) +#define SID_ATTR_SYMBOLTYPE (SID_SD_START+115) //wird vom Chart und von SvxLineTabPage genutzt +#define SID_ATTR_SYMBOLSIZE (SID_SD_START+116) +#define SID_HELPLINES_MOVE (SID_SD_START+153) +#define SID_GRID_USE (SID_SD_START+154) +#define ID_VAL_MOUSESTART_X (SID_SD_START+200) +#define ID_VAL_MOUSESTART_Y (SID_SD_START+201) +#define ID_VAL_LENGTH_X (SID_SD_START+202) +#define ID_VAL_LENGTH_Y (SID_SD_START+203) +#define ID_VAL_MOUSEEND_X (SID_SD_START+204) +#define ID_VAL_MOUSEEND_Y (SID_SD_START+205) +#define ID_VAL_AXIS_X (SID_SD_START+206) +#define ID_VAL_AXIS_Y (SID_SD_START+207) +#define ID_VAL_ANGLESTART (SID_SD_START+208) +#define ID_VAL_ANGLEEND (SID_SD_START+209) +#define ID_VAL_CENTER_X (SID_SD_START+210) +#define ID_VAL_CENTER_Y (SID_SD_START+211) +#define ID_VAL_STYLE (SID_SD_START+240) +#define ID_VAL_DOTS (SID_SD_START+241) +#define ID_VAL_DOTLEN (SID_SD_START+242) +#define ID_VAL_DASHES (SID_SD_START+243) +#define ID_VAL_DASHLEN (SID_SD_START+244) +#define ID_VAL_DISTANCE (SID_SD_START+245) +#define ID_VAL_INDEX (SID_SD_START+246) +#define SID_BEZIERTO (SID_SD_START+252) +#define SID_DASH (SID_SD_START+267) +#define SID_TEXT_FITTOSIZE_VERTICAL (SID_SD_START+286) +#define SID_GRID_VISIBLE (SID_SD_START+322) +#define ID_VAL_USEFIRSTROWSTYLE (SID_SD_START+323) +#define ID_VAL_USELASTROWSTYLE (SID_SD_START+324) +#define ID_VAL_USEBANDINGROWSTYLE (SID_SD_START+325) +#define ID_VAL_USEFIRSTCOLUMNSTYLE (SID_SD_START+326) +#define ID_VAL_USELASTCOLUMNSTYLE (SID_SD_START+327) +#define ID_VAL_USEBANDINGCOLUMNSTYLE (SID_SD_START+328) + +// -------------------------------------------------------------------------- +// Writer-Id's +// -------------------------------------------------------------------------- +#define FN_EDIT (SID_SW_START + 100) +#define FN_NUM_BULLET_OFF (FN_EDIT + 37) /* Numerierung aus */ +#define FN_NUM_BULLET_ON (FN_EDIT + 38) /* Numerierung mit Bullets an */ +#define FN_NUM_NUMBERING_ON (FN_EDIT + 44) /* Numerierung an */ + +#define FN_INSERT (SID_SW_START + 300) +#define FN_DELETE_BOOKMARK (FN_INSERT + 1) +#define FN_INSERT_BREAK (FN_INSERT + 3) +#define FN_INSERT_SOFT_HYPHEN (FN_INSERT + 43) /* optional hyphen */ +#define FN_INSERT_HARD_SPACE (FN_INSERT + 44) /* hard space */ +#define FN_INSERT_HARDHYPHEN (FN_INSERT + 85) /* hyphen withou break*/ + +//!! be aware to not overwrite something that is used in sw/inc/cmdid.h already !! +#define FN_FORMAT (SID_SW_START + 400) +#define FN_FORMAT_RESET (FN_FORMAT + 69) + +#define FN_EXTRA (SID_SW_START + 600) + +#define FN_SELECTION (SID_SW_START + 900) +#define FN_END_OF_DOCUMENT (FN_SELECTION + 8) +#define FN_START_DOC_DIRECT (FN_SELECTION + 78) +#define FN_END_DOC_DIRECT (FN_SELECTION + 79) + +#define FN_PARAM (SID_SW_START + 1100) +#define FN_PARAM_FILTER (FN_PARAM + 30) +#define FN_PARAM_FIELD_CONTENT (FN_PARAM + 55) + +#define FN_PGPREVIEW (SID_SW_START + 1250) +#define FN_SHOW_MULTIPLE_PAGES (FN_PGPREVIEW + 2) + +// -------------------------------------------------------------------------- +// Svx-Id's +// -------------------------------------------------------------------------- + +#define SID_ATTR_BORDER_INNER ( SID_SVX_START + 23 ) + +#define SID_ATTR_POSTIT_AUTHOR ( SID_SVX_START + 44 ) +#define SID_ATTR_POSTIT_DATE ( SID_SVX_START + 45 ) +#define SID_ATTR_POSTIT_TEXT ( SID_SVX_START + 46 ) +#define SID_ATTR_SEARCH ( SID_SVX_START + 47 ) +#define SID_ATTR_PAGE ( SID_SVX_START + 50 ) +#define SID_ATTR_PAGE_SIZE ( SID_SVX_START + 51 ) +#define SID_ATTR_PAGE_MAXSIZE ( SID_SVX_START + 52 ) +#define SID_ATTR_PAGE_PAPERBIN ( SID_SVX_START + 54 ) +#define SID_ATTR_PAGE_APP ( SID_SVX_START + 55 ) +#define SID_ATTR_PAGE_EXT1 ( SID_SVX_START + 56 ) +#define SID_ATTR_PAGE_EXT2 ( SID_SVX_START + 57 ) +#define SID_ATTR_PAGE_HEADERSET ( SID_SVX_START + 58 ) +#define SID_ATTR_PAGE_FOOTERSET ( SID_SVX_START + 59 ) +#define SID_ATTR_PAGE_ON ( SID_SVX_START + 60 ) +#define SID_ATTR_PAGE_DYNAMIC ( SID_SVX_START + 61 ) +#define SID_ATTR_PAGE_SHARED ( SID_SVX_START + 62 ) +#define SID_ATTR_PAGE_BSP ( SID_SVX_START + 63 ) +#define SID_ATTR_NUMBERFORMAT_VALUE ( SID_SVX_START + 85 ) +#define SID_ATTR_NUMBERFORMAT_INFO ( SID_SVX_START + 86 ) +#define SID_ATTR_TRANSFORM ( SID_SVX_START + 87 ) +#define SID_ATTR_TRANSFORM_POS_X ( SID_SVX_START + 88 ) +#define SID_ATTR_TRANSFORM_POS_Y ( SID_SVX_START + 89 ) +#define SID_ATTR_TRANSFORM_WIDTH ( SID_SVX_START + 90 ) +#define SID_ATTR_TRANSFORM_HEIGHT ( SID_SVX_START + 91 ) +#define SID_ATTR_TRANSFORM_SIZE_POINT ( SID_SVX_START + 92 ) +#define SID_ATTR_TRANSFORM_ROT_X ( SID_SVX_START + 93 ) +#define SID_ATTR_TRANSFORM_ROT_Y ( SID_SVX_START + 94 ) +#define SID_ATTR_TRANSFORM_ANGLE ( SID_SVX_START + 95 ) +#define SID_RULER_NULL_OFFSET ( SID_SVX_START + 79 ) +#define SID_RULER_BORDERS ( SID_SVX_START + 80 ) +#define SID_RULER_OBJECT ( SID_SVX_START + 81 ) +#define SID_RULER_PAGE_POS ( SID_SVX_START + 82 ) +#define SID_RULER_ACT_LINE_ONLY ( SID_SVX_START + 83 ) +#define SID_RULER_LR_MIN_MAX ( SID_SVX_START + 84 ) +#define SID_SIZE_ALL ( SID_SVX_START + 101 ) +#define SID_DRAW_LINE ( SID_SVX_START + 102 ) +#define SID_DRAW_XLINE ( SID_SVX_START + 103 ) +#define SID_DRAW_RECT ( SID_SVX_START + 104 ) +#define SID_DRAW_RECT_ROUND ( SID_SVX_START + 105 ) +#define SID_DRAW_ELLIPSE ( SID_SVX_START + 110 ) +#define SID_DRAW_PIE ( SID_SVX_START + 112 ) +#define SID_DRAW_ARC ( SID_SVX_START + 114 ) +#define SID_DRAW_CIRCLECUT ( SID_SVX_START + 115 ) +#define SID_DRAW_POLYGON ( SID_SVX_START + 117 ) +#define SID_DRAW_BEZIER_FILL ( SID_SVX_START + 118 ) +#define SID_BEZIER_INSERT ( SID_SVX_START + 119 ) +#define SID_BEZIER_DELETE ( SID_SVX_START + 120 ) +#define SID_BEZIER_MOVE ( SID_SVX_START + 121 ) +#define SID_BEZIER_CLOSE ( SID_SVX_START + 122 ) +#define SID_BEZIER_SMOOTH ( SID_SVX_START + 123 ) +#define SID_BEZIER_APPEND ( SID_SVX_START + 124 ) +#define SID_BEZIER_EDIT ( SID_SVX_START + 126 ) +#define SID_BEZIER_CUTLINE ( SID_SVX_START + 127 ) +#define SID_OBJECT_SELECT ( SID_SVX_START + 128 ) +#define SID_OBJECT_ROTATE ( SID_SVX_START + 129 ) +#define SID_OBJECT_ALIGN ( SID_SVX_START + 130 ) +#define SID_OBJECT_ALIGN_LEFT ( SID_SVX_START + 131 ) +#define SID_OBJECT_ALIGN_CENTER ( SID_SVX_START + 132 ) +#define SID_OBJECT_ALIGN_RIGHT ( SID_SVX_START + 133 ) +#define SID_OBJECT_ALIGN_UP ( SID_SVX_START + 134 ) +#define SID_OBJECT_ALIGN_MIDDLE ( SID_SVX_START + 135 ) +#define SID_OBJECT_ALIGN_DOWN ( SID_SVX_START + 136 ) +#define SID_INSERT_DIAGRAM_FROM_FILE ( SID_SVX_START + 139 ) +#define SID_INSERT_DIAGRAM ( SID_SVX_START + 140 ) +#define SID_DRAW_CHART SID_INSERT_DIAGRAM +#define SID_INSERT_TABLE ( SID_SVX_START + 141 ) +#define SID_ATTRIBUTES_AREA ( SID_SVX_START + 142 ) +#define SID_ATTRIBUTES_LINE ( SID_SVX_START + 143 ) +#define SID_CHOOSE_CONTROLS ( SID_SVX_START + 144 ) +#define SID_INSERT_PUSHBUTTON ( SID_SVX_START + 146 ) +#define SID_INSERT_RADIOBUTTON ( SID_SVX_START + 147 ) +#define SID_INSERT_CHECKBOX ( SID_SVX_START + 148 ) +#define SID_OUTLINE_UP ( SID_SVX_START + 150 ) +#define SID_OUTLINE_DOWN ( SID_SVX_START + 151 ) +#define SID_OUTLINE_LEFT ( SID_SVX_START + 152 ) +#define SID_OUTLINE_RIGHT ( SID_SVX_START + 153 ) +#define SID_OUTLINE_FORMAT ( SID_SVX_START + 154 ) +#define SID_OUTLINE_COLLAPSE_ALL ( SID_SVX_START + 155 ) +#define SID_OUTLINE_BULLET ( SID_SVX_START + 156 ) +#define SID_PRESENTATION ( SID_SVX_START + 157 ) +#define SID_PRESENTATION_THIS_SLIDE ( SID_SVX_START + 158 ) +#define SID_REHEARSE_TIMINGS ( SID_SVX_START + 159 ) +#define SID_HIDE_SLIDE ( SID_SVX_START + 161 ) +#define SID_CHOOSE_POLYGON ( SID_SVX_START + 162 ) +#define SID_ATTR_FILL_STYLE ( SID_SVX_START + 164 ) +#define SID_ATTR_FILL_COLOR ( SID_SVX_START + 165 ) +#define SID_ATTR_FILL_GRADIENT ( SID_SVX_START + 166 ) +#define SID_ATTR_FILL_HATCH ( SID_SVX_START + 167 ) +#define SID_ATTR_FILL_BITMAP ( SID_SVX_START + 168 ) +#define SID_ATTR_LINE_STYLE ( SID_SVX_START + 169 ) +#define SID_ATTR_LINE_DASH ( SID_SVX_START + 170 ) +#define SID_ATTR_LINE_WIDTH ( SID_SVX_START + 171 ) +#define SID_ATTR_LINE_COLOR ( SID_SVX_START + 172 ) +#define SID_ATTR_LINE_START ( SID_SVX_START + 173 ) +#define SID_ATTR_LINE_END ( SID_SVX_START + 174 ) +#define SID_ATTR_LINE_STARTWIDTH ( SID_SVX_START + 175 ) +#define SID_ATTR_LINE_ENDWIDTH ( SID_SVX_START + 176 ) +#define SID_ATTR_LINE_STARTCENTER ( SID_SVX_START + 177 ) +#define SID_ATTR_LINE_ENDCENTER ( SID_SVX_START + 178 ) +#define SID_COLOR_TABLE ( SID_SVX_START + 179 ) +#define SID_GRADIENT_LIST ( SID_SVX_START + 180 ) +#define SID_HATCH_LIST ( SID_SVX_START + 181 ) +#define SID_BITMAP_LIST ( SID_SVX_START + 182 ) +#define SID_DASH_LIST ( SID_SVX_START + 183 ) +#define SID_LINEEND_LIST ( SID_SVX_START + 184 ) +#define SID_BACKGROUND_COLOR ( SID_SVX_START + 185 ) +#define SID_BACKGROUND_PATTERN ( SID_SVX_START + 186 ) +#define SID_ATTR_BORDER ( SID_SVX_START + 187 ) +#define SID_INSERT_FIXEDTEXT ( SID_SVX_START + 188 ) +#define SID_INSERT_GROUPBOX ( SID_SVX_START + 189 ) +#define SID_INSERT_EDIT ( SID_SVX_START + 190 ) +#define SID_INSERT_LISTBOX ( SID_SVX_START + 191 ) +#define SID_INSERT_COMBOBOX ( SID_SVX_START + 192 ) +#define SID_INSERT_SPINBUTTON ( SID_SVX_START + 193 ) +#define SID_INSERT_HSCROLLBAR ( SID_SVX_START + 194 ) +#define SID_INSERT_VSCROLLBAR ( SID_SVX_START + 195 ) +#define SID_INSERT_PREVIEW ( SID_SVX_START + 196 ) +#define SID_INSERT_URLBUTTON ( SID_SVX_START + 197 ) +#define SID_INSERT_SELECT ( SID_SVX_START + 198 ) +#define SID_DIALOG_TESTMODE ( SID_SVX_START + 199 ) +#define SID_FRAME_LINESTYLE ( SID_SVX_START + 200 ) +#define SID_FRAME_LINECOLOR ( SID_SVX_START + 201 ) +#define SID_SEARCHDLG_SEARCHSTRINGS ( SID_SVX_START + 215 ) +#define SID_SEARCHDLG_REPLACESTRINGS ( SID_SVX_START + 216 ) +#define SID_ATTR_TABLE ( SID_SVX_START + 217 ) +#define SID_ATTR_TABLE_COLUMN ( SID_SVX_START + 218 ) +#define SID_ATTR_TABLE_ROW ( SID_SVX_START + 219 ) +#define SID_ATTR_COLUMNS ( SID_SVX_START + 220 ) +#define SID_ATTR_INSERT ( SID_SVX_START + 221 ) +#define SID_ATTR_ZOOM_USER ( SID_SVX_START + 222 ) +#define SID_ATTR_POSITION ( SID_SVX_START + 223 ) +#define SID_ATTR_SIZE ( SID_SVX_START + 224 ) +#define SID_TABLE_CELL ( SID_SVX_START + 225 ) +#define SID_ATTR_ALIGN_MARGIN ( SID_SVX_START + 228 ) +#define SID_ATTR_ALIGN_STACKED ( SID_SVX_START + 229 ) +#define SID_ATTR_ALIGN_LINEBREAK ( SID_SVX_START + 230 ) +#define SID_OUTLINE_COLLAPSE ( SID_SVX_START + 231 ) +#define SID_OUTLINE_EXPAND_ALL ( SID_SVX_START + 232 ) +#define SID_OUTLINE_EXPAND ( SID_SVX_START + 233 ) +#define SID_OUTLINE_DELETEALL ( SID_SVX_START + 234 ) +#define SID_ATTR_TRANSFORM_PROTECT_POS ( SID_SVX_START + 236 ) +#define SID_ATTR_TRANSFORM_PROTECT_SIZE ( SID_SVX_START + 237 ) +#define SID_ATTR_TRANSFORM_AUTOSIZE ( SID_SVX_START + 238 ) // !!! +#define SID_ATTR_TRANSFORM_INTERN ( SID_SVX_START + 239 ) +#define SID_INSERT_FRAME ( SID_SVX_START + 240 ) +#define SID_INSERT_GRAPHIC ( SID_SVX_START + 241 ) +#define SID_AUTOFORMAT ( SID_SVX_START + 242 ) +#define SID_SPELL_DIALOG ( SID_SVX_START + 243 ) +#define SID_INSERT_DRAW ( SID_SVX_START + 244 ) +#define SID_THESAURUS ( SID_SVX_START + 245 ) +#define SID_DRAW_TEXT ( SID_SVX_START + 253 ) +#define SID_DRAW_CAPTION ( SID_SVX_START + 254 ) +#define SID_DRAW_SELECT ( SID_SVX_START + 255 ) +#define SID_FONTWORK ( SID_SVX_START + 256 ) +#define SID_FORMTEXT_STYLE ( SID_SVX_START + 257 ) +#define SID_FORMTEXT_ADJUST ( SID_SVX_START + 258 ) +#define SID_FORMTEXT_DISTANCE ( SID_SVX_START + 259 ) +#define SID_FORMTEXT_START ( SID_SVX_START + 260 ) +#define SID_FORMTEXT_MIRROR ( SID_SVX_START + 261 ) +#define SID_FORMTEXT_OUTLINE ( SID_SVX_START + 262 ) +#define SID_FORMTEXT_SHADOW ( SID_SVX_START + 263 ) +#define SID_FORMTEXT_SHDWCOLOR ( SID_SVX_START + 264 ) +#define SID_FORMTEXT_SHDWXVAL ( SID_SVX_START + 265 ) +#define SID_FORMTEXT_SHDWYVAL ( SID_SVX_START + 266 ) +#define SID_FORMTEXT_STDFORM ( SID_SVX_START + 267 ) +#define SID_FORMTEXT_HIDEFORM ( SID_SVX_START + 268 ) +#define SID_GALLERY_ENABLE_ADDCOPY ( SID_SVX_START + 276 ) +#define SID_GALLERY_BG_POS ( SID_SVX_START + 278 ) +#define SID_GALLERY_FORMATS ( SID_SVX_START + 280 ) +#define SID_OBJECT_HELL ( SID_SVX_START + 282 ) +#define SID_OBJECT_HEAVEN ( SID_SVX_START + 283 ) +#define SID_ATTR_LONG_ULSPACE ( SID_SVX_START + 284 ) +#define SID_ATTR_LONG_LRSPACE ( SID_SVX_START + 285 ) +#define SID_FRAME_TO_TOP ( SID_SVX_START + 286 ) +#define SID_FRAME_TO_BOTTOM ( SID_SVX_START + 287 ) +#define SID_SEARCH_SEARCHSET ( SID_SVX_START + 292 ) +#define SID_SEARCH_REPLACESET ( SID_SVX_START + 293 ) +#define SID_SET_SUPER_SCRIPT ( SID_SVX_START + 294 ) +#define SID_SET_SUB_SCRIPT ( SID_SVX_START + 295 ) +#define SID_CHAR_DLG ( SID_SVX_START + 296 ) +#define SID_PARA_DLG ( SID_SVX_START + 297 ) +#define SID_ATTR_GRID_OPTIONS ( SID_SVX_START + 298 ) +#define SID_ATTR_FILL_SHADOW ( SID_SVX_START + 299 ) +#define SID_ATTR_LINEEND_STYLE ( SID_SVX_START + 301 ) +#define SID_ATTR_TRANSFORM_SHEAR ( SID_SVX_START + 304 ) +#define SID_ATTR_TRANSFORM_SHEAR_X ( SID_SVX_START + 305 ) +#define SID_ATTR_TRANSFORM_SHEAR_Y ( SID_SVX_START + 306 ) +#define SID_ATTR_TRANSFORM_SHEAR_VERTICAL ( SID_SVX_START + 307 ) +#define SID_ATTR_TRANSFORM_RESIZE_REF_X ( SID_SVX_START + 308 ) +#define SID_ATTR_TRANSFORM_RESIZE_REF_Y ( SID_SVX_START + 309 ) +#define SID_ATTR_TRANSFORM_AUTOWIDTH ( SID_SVX_START + 310 ) +#define SID_ATTR_TRANSFORM_AUTOHEIGHT ( SID_SVX_START + 311 ) +#define SID_ATTR_TRANSFORM_HORI_RELATION ( SID_SVX_START + 312 ) +#define SID_ATTR_TRANSFORM_VERT_RELATION ( SID_SVX_START + 313 ) +#define SID_ATTR_TRANSFORM_HORI_ORIENT ( SID_SVX_START + 314 ) +#define SID_ATTR_TRANSFORM_IN_VERTICAL_TEXT ( SID_SVX_START + 315 ) +#define SID_ATTR_TRANSFORM_IN_RTL_TEXT ( SID_SVX_START + 316 ) +#define SID_ATTR_TRANSFORM_HORI_MIRROR ( SID_SVX_START + 317 ) +#define SID_ATTR_TRANSFORM_ANCHOR ( SID_SVX_START + 318 ) +#define SID_ATTR_TRANSFORM_VERT_ORIENT ( SID_SVX_START + 319 ) +#define SID_SCAN ( SID_SVX_START + 330 ) +#define SID_TWAIN_SELECT ( SID_SVX_START + 331 ) +#define SID_TWAIN_TRANSFER ( SID_SVX_START + 332 ) +#define SID_CONTOUR_DLG ( SID_SVX_START + 334 ) +#define SID_CONTOUR_EXEC ( SID_SVX_START + 335 ) +#define SID_BORDER_OBJECT ( SID_SVX_START + 340 ) +#define SID_SB_CONNECTIONPOOLING ( SID_SVX_START + 348 ) +#define SID_SB_DBREGISTEROPTIONS ( SID_SVX_START + 349 ) +#define SID_BMPMASK ( SID_SVX_START + 350 ) +#define SID_BMPMASK_PIPETTE ( SID_SVX_START + 351 ) +#define SID_BMPMASK_EXEC ( SID_SVX_START + 353 ) +#define SID_ATTR_TEXT_FITTOSIZE ( SID_SVX_START + 367 ) +#define SID_ATTR_BRUSH_ROW ( SID_SVX_START + 368 ) +#define SID_OPTFILTER_MSOFFICE ( SID_SVX_START + 369 ) +#define SID_IMAP ( SID_SVX_START + 371 ) +#define SID_IMAP_EXEC ( SID_SVX_START + 374 ) +#define SID_SHOW_HIDDEN ( SID_SVX_START + 375 ) +#define SID_SHOW_FORMS ( SID_SVX_START + 376 ) +#define SID_DRAW_RECT_NOFILL ( SID_SVX_START + 378 ) +#define SID_DRAW_RECT_ROUND_NOFILL ( SID_SVX_START + 379 ) +#define SID_DRAW_SQUARE ( SID_SVX_START + 380 ) +#define SID_DRAW_SQUARE_ROUND ( SID_SVX_START + 381 ) +#define SID_DRAW_SQUARE_NOFILL ( SID_SVX_START + 382 ) +#define SID_DRAW_SQUARE_ROUND_NOFILL ( SID_SVX_START + 383 ) +#define SID_DRAW_ELLIPSE_NOFILL ( SID_SVX_START + 384 ) +#define SID_DRAW_CIRCLE ( SID_SVX_START + 385 ) +#define SID_DRAW_CIRCLE_NOFILL ( SID_SVX_START + 386 ) +#define SID_DRAW_PIE_NOFILL ( SID_SVX_START + 387 ) +#define SID_DRAW_CIRCLEPIE ( SID_SVX_START + 388 ) +#define SID_DRAW_CIRCLEPIE_NOFILL ( SID_SVX_START + 389 ) +#define SID_DRAW_CIRCLEARC ( SID_SVX_START + 390 ) +#define SID_DRAW_CIRCLECUT_NOFILL ( SID_SVX_START + 391 ) +#define SID_DRAW_ELLIPSECUT ( SID_SVX_START + 392 ) +#define SID_DRAW_ELLIPSECUT_NOFILL ( SID_SVX_START + 393 ) +#define SID_DRAW_XPOLYGON ( SID_SVX_START + 394 ) +#define SID_DRAW_POLYGON_NOFILL ( SID_SVX_START + 395 ) +#define SID_DRAW_XPOLYGON_NOFILL ( SID_SVX_START + 396 ) +#define SID_DRAW_BEZIER_NOFILL ( SID_SVX_START + 397 ) +#define SID_DRAWTBX_TEXT ( SID_SVX_START + 398 ) +#define SID_DRAWTBX_RECTANGLES ( SID_SVX_START + 399 ) +#define SID_DRAWTBX_ELLIPSES ( SID_SVX_START + 400 ) +#define SID_DRAWTBX_LINES ( SID_SVX_START + 401 ) +#define SID_BACKGRND_DESTINATION ( SID_SVX_START + 404 ) +#define SID_ATTR_FLASH ( SID_SVX_START + 406 ) +#define SID_ATTR_3D_LIGHT ( SID_SVX_START + 407 ) /* Slots mit --> koennen demnaechst entfallen */ +#define SID_ATTR_3D_START SID_ATTR_3D_LIGHT + +#define SID_RULER_PROTECT ( SID_SVX_START + 415 ) +#define SID_COLOR_CONTROL ( SID_SVX_START + 417 ) +#define SID_ATTR_3D_INTERN ( SID_SVX_START + 422 ) +#define SID_PSZ_FUNCTION ( SID_SVX_START + 423 ) + +#define SID_TABLE_INSERT_COL_DLG ( SID_SVX_START + 426 ) +#define SID_TABLE_INSERT_ROW_DLG ( SID_SVX_START + 427 ) +#define SID_TABLE_PARAM_INSERT_AFTER ( SID_SVX_START + 428 ) + +#define SID_TABLEDESIGN ( SID_SVX_START + 429 ) +#define SID_GENERAL_OPTIONS ( SID_SVX_START + 432 ) +#define SID_SW_EDITOPTIONS ( SID_SVX_START + 433 ) +#define SID_SD_EDITOPTIONS ( SID_SVX_START + 434 ) +#define SID_SC_EDITOPTIONS ( SID_SVX_START + 435 ) +#define SID_SM_EDITOPTIONS ( SID_SVX_START + 436 ) +#define SID_SCH_EDITOPTIONS ( SID_SVX_START + 437 ) +#define SID_SIM_EDITOPTIONS ( SID_SVX_START + 438 ) +#define SID_SW_ONLINEOPTIONS ( SID_SVX_START + 439 ) +#define SID_GET_COLORLIST ( SID_SVX_START + 441 ) +#define SID_OUTLINE_TO_IMPRESS ( SID_SVX_START + 443 ) +#define SID_SPELLCHECKER_CHANGED ( SID_SVX_START + 446 ) +#define SID_SD_GRAPHIC_OPTIONS ( SID_SVX_START + 447 ) +#define SID_SM_TP_PRINTOPTIONS ( SID_SVX_START + 448 ) +#define SID_SB_STARBASEOPTIONS ( SID_SVX_START + 450 ) +#define SID_SWREGISTER_COLLECTION ( SID_SVX_START + 451 ) +#define SID_FILTER_DLG ( SID_SVX_START + 452 ) +#define SID_ATTR_BRUSH_TABLE ( SID_SVX_START + 453 ) +#define SID_GROUP ( SID_SVX_START + 454 ) +#define SID_UNGROUP ( SID_SVX_START + 455 ) +#define SID_SET_DEFAULT ( SID_SVX_START + 456 ) +#define SID_ATTR_ALIGN_INDENT ( SID_SVX_START + 460 ) +#define SID_DEC_INDENT ( SID_SVX_START + 461 ) +#define SID_INC_INDENT ( SID_SVX_START + 462 ) +#define SID_DRAW_FREELINE ( SID_SVX_START + 463 ) +#define SID_DRAW_FREELINE_NOFILL ( SID_SVX_START + 464 ) +#define SID_DRAW_TEXT_MARQUEE ( SID_SVX_START + 465 ) +#define SID_SWREGISTER_MODE ( SID_SVX_START + 467 ) +#define SID_GRFFILTER ( SID_SVX_START + 469 ) +#define SID_GRFFILTER_INVERT ( SID_SVX_START + 470 ) +#define SID_GRFFILTER_SMOOTH ( SID_SVX_START + 471 ) +#define SID_GRFFILTER_SHARPEN ( SID_SVX_START + 472 ) +#define SID_GRFFILTER_REMOVENOISE ( SID_SVX_START + 473 ) +#define SID_GRFFILTER_SOBEL ( SID_SVX_START + 474 ) +#define SID_GRFFILTER_MOSAIC ( SID_SVX_START + 475 ) +#define SID_GRFFILTER_EMBOSS ( SID_SVX_START + 476 ) +#define SID_GRFFILTER_POSTER ( SID_SVX_START + 477 ) +#define SID_GRFFILTER_POPART ( SID_SVX_START + 478 ) +#define SID_GRFFILTER_SEPIA ( SID_SVX_START + 479 ) +#define SID_GRFFILTER_SOLARIZE ( SID_SVX_START + 480 ) +#define SID_FIELD_GRABFOCUS ( SID_SVX_START + 567 ) +#define SID_ATTR_ALIGN_DEGREES ( SID_SVX_START + 577 ) +#define SID_ATTR_ALIGN_LOCKPOS ( SID_SVX_START + 578 ) +#define SID_ATTR_LINEEND_WIDTH_DEFAULT ( SID_SVX_START + 579 ) +#define SID_ATTR_NUMBERFORMAT_ONE_AREA ( SID_SVX_START + 580 ) +#define SID_PARA_BACKGRND_DESTINATION ( SID_SVX_START + 590 ) + +#define SID_FMSLOTS_START ( SID_SVX_START + 592 ) +#define SID_FM_CONFIG ( SID_SVX_START + 593 ) +#define SID_FM_PUSHBUTTON ( SID_SVX_START + 594 ) +#define SID_FM_RADIOBUTTON ( SID_SVX_START + 595 ) +#define SID_FM_CHECKBOX ( SID_SVX_START + 596 ) +#define SID_FM_FIXEDTEXT ( SID_SVX_START + 597 ) +#define SID_FM_GROUPBOX ( SID_SVX_START + 598 ) +#define SID_FM_EDIT ( SID_SVX_START + 599 ) +#define SID_FM_LISTBOX ( SID_SVX_START + 600 ) +#define SID_FM_COMBOBOX ( SID_SVX_START + 601 ) +#define SID_FM_DBGRID ( SID_SVX_START + 603 ) +#define SID_FM_IMAGEBUTTON ( SID_SVX_START + 604 ) +#define SID_FM_FILECONTROL ( SID_SVX_START + 605 ) +#define SID_FM_CHANGECOL ( SID_SVX_START + 606 ) +#define SID_FM_NAVIGATIONBAR ( SID_SVX_START + 607 ) +#define SID_FM_NEW_HIDDEN ( SID_SVX_START + 608 ) +#define SID_FM_RENAME_OBJECT ( SID_SVX_START + 609 ) +#define SID_FM_DELETEROWS ( SID_SVX_START + 610 ) +#define SID_FM_INSERTCOL ( SID_SVX_START + 611 ) +#define SID_FM_DELETECOL ( SID_SVX_START + 612 ) +#define SID_FM_CTL_PROPERTIES ( SID_SVX_START + 613 ) +#define SID_FM_PROPERTIES ( SID_SVX_START + 614 ) +#define SID_FM_TAB_DIALOG ( SID_SVX_START + 615 ) +#define SID_FM_RECORD_FIRST ( SID_SVX_START + 616 ) +#define SID_FM_RECORD_NEXT ( SID_SVX_START + 617 ) +#define SID_FM_RECORD_PREV ( SID_SVX_START + 618 ) +#define SID_FM_RECORD_LAST ( SID_SVX_START + 619 ) +#define SID_FM_RECORD_NEW ( SID_SVX_START + 620 ) +#define SID_FM_RECORD_DELETE ( SID_SVX_START + 621 ) +#define SID_FM_RECORD_ABSOLUTE ( SID_SVX_START + 622 ) +#define SID_FM_ADD_FIELD ( SID_SVX_START + 623 ) +#define SID_FM_RECORD_TEXT ( SID_SVX_START + 624 ) +#define SID_FM_RECORD_FROM_TEXT ( SID_SVX_START + 625 ) +#define SID_FM_RECORD_TOTAL ( SID_SVX_START + 626 ) +#define SID_FM_RECORD_SAVE ( SID_SVX_START + 627 ) +#define SID_FM_CREATE_CONTROL ( SID_SVX_START + 628 ) +#define SID_FM_DESIGN_MODE ( SID_SVX_START + 629 ) +#define SID_FM_RECORD_UNDO ( SID_SVX_START + 630 ) +#define SID_FM_CONTROL_IDENTIFIER ( SID_SVX_START + 631 ) +#define SID_FM_CONTROL_INVENTOR ( SID_SVX_START + 632 ) +#define SID_FM_SHOW_FMEXPLORER ( SID_SVX_START + 633 ) +#define SID_FM_FIELDS_CONTROL ( SID_SVX_START + 634 ) +#define SID_FM_SHOW_PROPERTIES ( SID_SVX_START + 635 ) +#define SID_FM_PROPERTY_CONTROL ( SID_SVX_START + 636 ) +#define SID_FM_FMEXPLORER_CONTROL ( SID_SVX_START + 637 ) +#define SID_FM_NEW ( SID_SVX_START + 638 ) +#define SID_FM_DELETE ( SID_SVX_START + 639 ) +#define SID_FM_NEW_FORM ( SID_SVX_START + 640 ) +#define SID_3D_WIN ( SID_SVX_START + 644 ) +#define SID_3D_STATE ( SID_SVX_START + 645 ) +#define SID_3D_INIT ( SID_SVX_START + 646 ) +#define SID_3D_ASSIGN ( SID_SVX_START + 647 ) +#define SID_CONVERT_TO_3D ( SID_SVX_START + 648 ) +#define SID_CONVERT_TO_3D_LATHE_FAST ( SID_SVX_START + 649 ) +#define SID_ATTR_3D_LIGHTDIRECTION_8 ( SID_SVX_START + 691 ) +#define SID_ATTR_3D_END SID_ATTR_3D_LIGHTDIRECTION_8 +#define SID_ATTR_NUMBERFORMAT_NOLANGUAGE ( SID_SVX_START + 700 ) +#define SID_MN_GROUP ( SID_SVX_START + 701 ) + +#define SID_MORE_FMSLOTS_START ( SID_SVX_START + 702 ) +#define SID_FM_SHOW_PROPERTY_BROWSER ( SID_SVX_START + 703 ) +#define SID_FM_DATEFIELD ( SID_SVX_START + 704 ) +#define SID_FM_TIMEFIELD ( SID_SVX_START + 705 ) +#define SID_FM_NUMERICFIELD ( SID_SVX_START + 706 ) +#define SID_FM_CURRENCYFIELD ( SID_SVX_START + 707 ) +#define SID_FM_PATTERNFIELD ( SID_SVX_START + 708 ) +#define SID_FM_OPEN_READONLY ( SID_SVX_START + 709 ) +#define SID_FM_IMAGECONTROL ( SID_SVX_START + 710 ) +#define SID_FM_REMOVE_FILTER_SORT ( SID_SVX_START + 711 ) +#define SID_FM_SORTUP ( SID_SVX_START + 712 ) +#define SID_FM_SORTDOWN ( SID_SVX_START + 713 ) +#define SID_FM_ORDERCRIT ( SID_SVX_START + 714 ) +#define SID_FM_FILTERCRIT ( SID_SVX_START + 715 ) +#define SID_FM_AUTOFILTER ( SID_SVX_START + 716 ) +#define SID_FM_COUNTALL ( SID_SVX_START + 717 ) +#define SID_FM_NATIVESQL ( SID_SVX_START + 720 ) +#define SID_FM_EXECUTE ( SID_SVX_START + 721 ) +#define SID_SBA_QRY_EXECUTE SID_FM_EXECUTE +#define SID_FM_ADDTABLE ( SID_SVX_START + 722 ) +#define SID_FM_FORM_FILTERED ( SID_SVX_START + 723 ) +#define SID_FM_REFRESH ( SID_SVX_START + 724 ) +#define SID_FM_SEARCH ( SID_SVX_START + 725 ) +#define SID_FM_LEAVE_CREATE ( SID_SVX_START + 726 ) // Formcontroller-Button rauspoppen +#define SID_FM_USE_WIZARDS ( SID_SVX_START + 727 ) +#define SID_FM_FORMATTEDFIELD ( SID_SVX_START + 728 ) +#define SID_FM_FILTER_START ( SID_SVX_START + 729 ) +#define SID_FM_FILTER_EXIT ( SID_SVX_START + 730 ) +#define SID_FM_FILTER_EXECUTE ( SID_SVX_START + 731 ) +#define SID_FM_FILTER_NAVIGATOR ( SID_SVX_START + 732 ) +#define SID_FM_CHANGECONTROLTYPE ( SID_SVX_START + 733 ) +#define SID_FM_CONVERTTO_EDIT ( SID_SVX_START + 734 ) +#define SID_FM_CONVERTTO_BUTTON ( SID_SVX_START + 735 ) +#define SID_FM_CONVERTTO_FIXEDTEXT ( SID_SVX_START + 736 ) +#define SID_FM_CONVERTTO_LISTBOX ( SID_SVX_START + 737 ) +#define SID_FM_CONVERTTO_CHECKBOX ( SID_SVX_START + 738 ) +#define SID_FM_CONVERTTO_RADIOBUTTON ( SID_SVX_START + 739 ) +#define SID_FM_CONVERTTO_GROUPBOX ( SID_SVX_START + 740 ) +#define SID_FM_CONVERTTO_COMBOBOX ( SID_SVX_START + 741 ) +#define SID_FM_CONVERTTO_IMAGEBUTTON ( SID_SVX_START + 743 ) +#define SID_FM_CONVERTTO_FILECONTROL ( SID_SVX_START + 744 ) +#define SID_FM_CONVERTTO_DATE ( SID_SVX_START + 745 ) +#define SID_FM_CONVERTTO_TIME ( SID_SVX_START + 746 ) +#define SID_FM_CONVERTTO_NUMERIC ( SID_SVX_START + 747 ) +#define SID_FM_CONVERTTO_CURRENCY ( SID_SVX_START + 748 ) +#define SID_FM_CONVERTTO_PATTERN ( SID_SVX_START + 749 ) +#define SID_FM_CONVERTTO_IMAGECONTROL ( SID_SVX_START + 750 ) +#define SID_FM_CONVERTTO_FORMATTED ( SID_SVX_START + 751 ) +#define SID_FM_FILTER_NAVIGATOR_CONTROL ( SID_SVX_START + 752 ) +#define SID_FM_HIDECOL ( SID_SVX_START + 753 ) +#define SID_FM_SHOWCOLS ( SID_SVX_START + 754 ) +#define SID_FM_SHOWCOLS_MORE ( SID_SVX_START + 755 ) +#define SID_FM_SHOWALLCOLS ( SID_SVX_START + 756 ) +#define SID_FM_TWOFIELDS_DATE_N_TIME ( SID_SVX_START + 757 ) +#define SID_FM_FILTER_EDIT ( SID_SVX_START + 758 ) +#define SID_FM_FILTER_IS_NULL ( SID_SVX_START + 759 ) +#define SID_FM_FILTER_IS_NOT_NULL ( SID_SVX_START + 760 ) +#define SID_FM_VIEW_AS_GRID ( SID_SVX_START + 761 ) +#define SID_FM_FILTER_REMOVE ( SID_SVX_START + 762 ) +#define SID_FM_AUTOCONTROLFOCUS ( SID_SVX_START + 763 ) +#define SID_DSBROWSER_EXPLORER ( SID_SVX_START + 764 ) +#define SID_FM_CREATE_FIELDCONTROL ( SID_SVX_START + 765 ) +#define SID_FM_DATACCESS_DESCRIPTOR ( SID_SVX_START + 766 ) +#define SID_FM_TOGGLECONTROLFOCUS ( SID_SVX_START + 767 ) +#define SID_FM_SCROLLBAR ( SID_SVX_START + 768 ) +#define SID_FM_SPINBUTTON ( SID_SVX_START + 769 ) +#define SID_FM_CONVERTTO_SCROLLBAR ( SID_SVX_START + 770 ) +#define SID_FM_CONVERTTO_SPINBUTTON ( SID_SVX_START + 771 ) +#define SID_FM_CONVERTTO_NAVIGATIONBAR ( SID_SVX_START + 772 ) +#define SID_FM_SHOW_DATANAVIGATOR ( SID_SVX_START + 773 ) +#define SID_FM_DATANAVIGATOR_CONTROL ( SID_SVX_START + 774 ) +#define SID_FM_REFRESH_FORM_CONTROL ( SID_SVX_START + 775 ) + +#define SID_HLINKBAR_LINK ( SID_SVX_START + 851 ) +#define SID_HLINKBAR_SEARCH ( SID_SVX_START + 853 ) +#define SID_HLINKBAR_TARGET ( SID_SVX_START + 854 ) +#define SID_PARAM_NUM_PRESET ( SID_SVX_START + 856 ) +#define SID_PARAM_CUR_NUM_LEVEL ( SID_SVX_START + 859 ) +#define SID_CREATE_SW_DRAWVIEW ( SID_SVX_START + 860 ) +#define SID_ATTR_GRAF_LUMINANCE ( SID_SVX_START + 863 ) +#define SID_ATTR_GRAF_CONTRAST ( SID_SVX_START + 864 ) +#define SID_ATTR_GRAF_RED ( SID_SVX_START + 865 ) +#define SID_ATTR_GRAF_GREEN ( SID_SVX_START + 866 ) +#define SID_ATTR_GRAF_BLUE ( SID_SVX_START + 867 ) +#define SID_ATTR_GRAF_GAMMA ( SID_SVX_START + 868 ) +#define SID_ATTR_GRAF_TRANSPARENCE ( SID_SVX_START + 869 ) +#define SID_ATTR_GRAF_INVERT ( SID_SVX_START + 870 ) +#define SID_ATTR_GRAF_MODE ( SID_SVX_START + 871 ) +#define SID_ATTR_GRAF_KEEP_ZOOM ( SID_SVX_START + 882 ) +#define SID_ATTR_GRAF_CROP ( SID_SVX_START + 883 ) +#define SID_ATTR_GRAF_FRMSIZE ( SID_SVX_START + 884 ) +#define SID_ATTR_GRAF_FRMSIZE_PERCENT ( SID_SVX_START + 885 ) +#define SID_ATTR_GRAF_GRAPHIC ( SID_SVX_START + 886 ) +#define SID_DRAW_TEXT_VERTICAL SID_ATTR_CHAR_VERTICAL +#define SID_DRAW_CAPTION_VERTICAL ( SID_SVX_START + 906 ) +#define SID_TEXTDIRECTION_LEFT_TO_RIGHT ( SID_SVX_START + 907 ) +#define SID_TEXTDIRECTION_TOP_TO_BOTTOM ( SID_SVX_START + 908 ) +#define SID_TRANSLITERATE_UPPER ( SID_SVX_START + 912 ) +#define SID_TRANSLITERATE_LOWER ( SID_SVX_START + 913 ) +#define SID_TRANSLITERATE_HALFWIDTH ( SID_SVX_START + 914 ) +#define SID_TRANSLITERATE_FULLWIDTH ( SID_SVX_START + 915 ) +#define SID_TRANSLITERATE_HIRAGANA ( SID_SVX_START + 916 ) +#define SID_TRANSLITERATE_KATAGANA ( SID_SVX_START + 917 ) +#define SID_MN_SUB_TRANSLITERATE ( SID_SVX_START + 918 ) +#define SID_LANGUAGE_OPTIONS ( SID_SVX_START + 921 ) +#define SID_GETUNDOSTRINGS ( SID_SVX_START + 923 ) +#define SID_GETREDOSTRINGS ( SID_SVX_START + 924 ) + +#define SID_INSERT_IMAGECONTROL ( SID_SVX_START + 926 ) +#define SID_INSERT_PROGRESSBAR ( SID_SVX_START + 927 ) +#define SID_INSERT_HFIXEDLINE ( SID_SVX_START + 928 ) +#define SID_INSERT_VFIXEDLINE ( SID_SVX_START + 929 ) +#define SID_READONLY_MODE ( SID_SVX_START + 930 ) +#define SID_ATTR_ALIGN_HYPHENATION ( SID_SVX_START + 931 ) +#define SID_ATTR_NUMBERFORMAT_SOURCE ( SID_SVX_START + 932 ) +#define SID_ATTR_AUTO_COLOR_INVALID ( SID_SVX_START + 933 ) +#define SID_RULER_BORDER_DISTANCE ( SID_SVX_START + 935 ) +#define SID_INSERT_DATEFIELD ( SID_SVX_START + 936 ) +#define SID_INSERT_TIMEFIELD ( SID_SVX_START + 937 ) +#define SID_INSERT_NUMERICFIELD ( SID_SVX_START + 938 ) +#define SID_INSERT_CURRENCYFIELD ( SID_SVX_START + 939 ) +#define SID_INSERT_FORMATTEDFIELD ( SID_SVX_START + 940 ) +#define SID_INSERT_PATTERNFIELD ( SID_SVX_START + 941 ) +#define SID_INSERT_FILECONTROL ( SID_SVX_START + 942 ) +#define SID_SHOW_PROPERTYBROWSER ( SID_SVX_START + 943 ) +#define SID_ATTR_TABSTOP_VERTICAL ( SID_SVX_START + 946 ) +#define SID_RULER_BORDERS_VERTICAL ( SID_SVX_START + 948 ) +#define SID_ATTR_ALIGN_ASIANVERTICAL ( SID_SVX_START + 949 ) +#define SID_RULER_TEXT_RIGHT_TO_LEFT ( SID_SVX_START + 952 ) +#define SID_ATTR_HDFT_DYNAMIC_SPACING ( SID_SVX_START + 953 ) +#define SID_ATTR_NUMBERFORMAT_ADD_AUTO ( SID_SVX_START + 954 ) +#define SID_OPEN_HYPERLINK ( SID_SVX_START + 955 ) +#define SID_CTLFONT_STATE ( SID_SVX_START + 956 ) +#define SID_VERTICALTEXT_STATE ( SID_SVX_START + 957 ) +#define SID_OPEN_XML_FILTERSETTINGS ( SID_SVX_START + 958 ) +#define SID_HANGUL_HANJA_CONVERSION ( SID_SVX_START + 959 ) +#define SID_EXTRUSION_TOOGLE ( SID_SVX_START + 960 ) +#define SID_EXTRUSION_TILT_DOWN ( SID_SVX_START + 961 ) +#define SID_EXTRUSION_TILT_UP ( SID_SVX_START + 962 ) +#define SID_EXTRUSION_TILT_LEFT ( SID_SVX_START + 963 ) +#define SID_EXTRUSION_TILT_RIGHT ( SID_SVX_START + 964 ) +#define SID_EXTRUSION_DEPTH_FLOATER ( SID_SVX_START + 965 ) +#define SID_EXTRUSION_DIRECTION_FLOATER ( SID_SVX_START + 966 ) +#define SID_EXTRUSION_LIGHTING_FLOATER ( SID_SVX_START + 967 ) +#define SID_EXTRUSION_SURFACE_FLOATER ( SID_SVX_START + 968 ) +#define SID_EXTRUSION_3D_COLOR ( SID_SVX_START + 969 ) +#define SID_EXTRUSION_DEPTH ( SID_SVX_START + 970 ) +#define SID_EXTRUSION_DIRECTION ( SID_SVX_START + 971 ) +#define SID_EXTRUSION_PROJECTION ( SID_SVX_START + 972 ) +#define SID_EXTRUSION_LIGHTING_DIRECTION ( SID_SVX_START + 973 ) +#define SID_EXTRUSION_LIGHTING_INTENSITY ( SID_SVX_START + 974 ) +#define SID_EXTRUSION_SURFACE ( SID_SVX_START + 975 ) +#define SID_EXTRUSION_DEPTH_DIALOG ( SID_SVX_START + 976 ) +#define SID_FONTWORK_GALLERY_FLOATER ( SID_SVX_START + 977 ) +// free ( SID_SVX_START + 978 ) +#define SID_FONTWORK_SHAPE_TYPE ( SID_SVX_START + 979 ) +#define SID_FONTWORK_SAME_LETTER_HEIGHTS ( SID_SVX_START + 980 ) +#define SID_FONTWORK_ALIGNMENT_FLOATER ( SID_SVX_START + 981 ) +#define SID_FONTWORK_CHARACTER_SPACING_FLOATER ( SID_SVX_START + 982 ) +#define SID_FONTWORK_SHAPE ( SID_SVX_START + 983 ) +#define SID_FONTWORK_ALIGNMENT ( SID_SVX_START + 984 ) +#define SID_FONTWORK_CHARACTER_SPACING ( SID_SVX_START + 985 ) +#define SID_FONTWORK_KERN_CHARACTER_PAIRS ( SID_SVX_START + 986 ) +#define SID_DRAW_FONTWORK ( SID_SVX_START + 987 ) +#define SID_DRAW_FONTWORK_VERTICAL ( SID_SVX_START + 988 ) +#define SID_ATTR_BORDER_CONNECT ( SID_SVX_START + 990 ) +#define SID_SW_FOLLOW_TEXT_FLOW ( SID_SVX_START + 991 ) /* #i18732# - slot-id for new option IsFollowingTextFlow' */ +#define SID_RULER_ROWS ( SID_SVX_START + 992 ) +#define SID_RULER_ROWS_VERTICAL ( SID_SVX_START + 993 ) +#define SID_ATTR_TRANSFORM_HORI_POSITION ( SID_SVX_START + 999 ) +#define SID_ATTR_TRANSFORM_VERT_POSITION ( SID_SVX_START + 1000 ) +#define SID_SHOW_ITEMBROWSER ( SID_SVX_START + 1001 ) +#define SID_ALIGN_ANY_LEFT ( SID_SVX_START + 1002 ) +#define SID_ALIGN_ANY_HCENTER ( SID_SVX_START + 1003 ) +#define SID_ALIGN_ANY_RIGHT ( SID_SVX_START + 1004 ) +#define SID_ALIGN_ANY_JUSTIFIED ( SID_SVX_START + 1005 ) +#define SID_ALIGN_ANY_TOP ( SID_SVX_START + 1006 ) +#define SID_ALIGN_ANY_VCENTER ( SID_SVX_START + 1007 ) +#define SID_ALIGN_ANY_BOTTOM ( SID_SVX_START + 1008 ) +#define SID_ALIGN_ANY_HDEFAULT ( SID_SVX_START + 1009 ) +#define SID_ALIGN_ANY_VDEFAULT ( SID_SVX_START + 1010 ) +#define SID_SW_COLLAPSING_BORDERS ( SID_SVX_START + 1011 ) +#define SID_SW_WRAP_INFLUENCE_ON_OBJPOS ( SID_SVX_START + 1012 ) /* #i28701# - slot-id for new attribute WrapInfluenceOnObjPos' */ +#define SID_ATTR_BORDER_DIAG_TLBR ( SID_SVX_START + 1013 ) +#define SID_ATTR_BORDER_DIAG_BLTR ( SID_SVX_START + 1014 ) +#define SID_ATTR_ALIGN_SHRINKTOFIT ( SID_SVX_START + 1015 ) +#define SID_CHINESE_CONVERSION ( SID_SVX_START + 1016 ) +#define SID_PAGE_TYPE ( SID_SVX_START + 1017 ) +#define SID_DLG_TYPE ( SID_SVX_START + 1018 ) +#define SID_TABPAGE_POS ( SID_SVX_START + 1019 ) +#define SID_GRAPHIC ( SID_SVX_START + 1020 ) +#define SID_OBJECT_LIST ( SID_SVX_START + 1021 ) +#define SID_ATTR_SET ( SID_SVX_START + 1022 ) +#define SID_CHAR_FMT_LIST_BOX ( SID_SVX_START + 1023 ) +#define SID_METRIC_ITEM ( SID_SVX_START + 1024 ) +#define SID_NUM_CHAR_FMT ( SID_SVX_START + 1025 ) +#define SID_BULLET_CHAR_FMT ( SID_SVX_START + 1026 ) +#define SID_DISABLE_SVXEXTPARAGRAPHTABPAGE_PAGEBREAK ( SID_SVX_START + 1027 ) +#define SID_SVXPARAALIGNTABPAGE_ENABLEJUSTIFYEXT ( SID_SVX_START + 1028 ) +#define SID_SVXSTDPARAGRAPHTABPAGE_PAGEWIDTH ( SID_SVX_START + 1029 ) +#define SID_SVXSTDPARAGRAPHTABPAGE_FLAGSET ( SID_SVX_START + 1030 ) +#define SID_SVXSTDPARAGRAPHTABPAGE_ABSLINEDIST ( SID_SVX_START + 1031 ) +#define SID_SVXTABULATORTABPAGE_CONTROLFLAGS ( SID_SVX_START + 1032 ) +#define SID_SVXTEXTATTRPAGE_VIEW ( SID_SVX_START + 1033 ) +#define SID_FLAG_TYPE ( SID_SVX_START + 1034 ) +#define SID_SWMODE_TYPE ( SID_SVX_START + 1035 ) +#define SID_DISABLE_CTL ( SID_SVX_START + 1036 ) +#define SID_LINK_TYPE ( SID_SVX_START + 1037 ) +#define SID_ENUM_PAGE_MODE ( SID_SVX_START + 1038 ) +#define SID_PAPER_START ( SID_SVX_START + 1039 ) +#define SID_PAPER_END ( SID_SVX_START + 1040 ) +#define SID_COLLECT_LIST ( SID_SVX_START + 1041 ) +#define SID_GROW_FONT_SIZE ( SID_SVX_START + 1042 ) +#define SID_SHRINK_FONT_SIZE ( SID_SVX_START + 1043 ) +// color subtoolbar on graphictoolbar +#define SID_COLOR_SETTINGS ( SID_SVX_START + 1044 ) +#define SID_FM_MORE_CONTROLS ( SID_SVX_START + 1045 ) +#define SID_FM_FORM_DESIGN_TOOLS ( SID_SVX_START + 1046 ) +#define SID_DRAWTBX_CS_BASIC ( SID_SVX_START + 1047 ) +#define SID_DRAWTBX_CS_SYMBOL ( SID_SVX_START + 1048 ) +#define SID_DRAWTBX_CS_ARROW ( SID_SVX_START + 1049 ) +#define SID_DRAWTBX_CS_FLOWCHART ( SID_SVX_START + 1050 ) +#define SID_DRAWTBX_CS_CALLOUT ( SID_SVX_START + 1051 ) +#define SID_DRAWTBX_CS_STAR ( SID_SVX_START + 1052 ) +#define SID_DRAW_CS_ID ( SID_SVX_START + 1053 ) +#define SID_FONTWORK_CHARACTER_SPACING_DIALOG ( SID_SVX_START + 1054 ) +#define SID_BORDER_REDUCED_MODE ( SID_SVX_START + 1055 ) +#define SID_INSERT_RLM ( SID_SVX_START + 1056 ) /* insert RLM - right to left mark */ +#define SID_INSERT_LRM ( SID_SVX_START + 1057 ) /* insert LRM - left to right mark */ +#define SID_INSERT_ZWSP ( SID_SVX_START + 1058 ) /* insert ZWJ - invisible space, keep words together*/ +#define SID_INSERT_ZWNBSP ( SID_SVX_START + 1059 ) /* insert ZWNJ - invisible space, forces linebreak*/ +#define SID_OPTIONS_DATABASES ( SID_SVX_START + 1060 ) +#define SID_OPEN_SMARTTAGMENU ( SID_SVX_START + 1061 ) +#define SID_OPEN_SMARTTAGOPTIONS ( SID_SVX_START + 1062 ) +#define SID_INSERT_TREECONTROL ( SID_SVX_START + 1063 ) +#define SID_ATTR_VIEWLAYOUT ( SID_SVX_START + 1064 ) +#define SID_ATTR_ZOOMSLIDER ( SID_SVX_START + 1065 ) +#define SID_FONTNAMELIST ( SID_SVX_START + 1066 ) +#define SID_LANGUAGE_STATUS ( SID_SVX_START + 1067 ) +#define SID_CHAR_DLG_FOR_PARAGRAPH ( SID_SVX_START + 1068 ) +#define SID_SET_DOCUMENT_LANGUAGE ( SID_SVX_START + 1069 ) + +#define SID_TABLE_MERGE_CELLS (SID_SVX_START+1070) +#define SID_TABLE_SPLIT_CELLS (SID_SVX_START+1071) +#define SID_OPTIMIZE_TABLE (SID_SVX_START+1072) +#define SID_TABLE_VERT_BOTTOM (SID_SVX_START+1073) +#define SID_TABLE_VERT_CENTER (SID_SVX_START+1074) +#define SID_TABLE_VERT_NONE (SID_SVX_START+1075) +#define SID_TABLE_INSERT_ROW (SID_SVX_START+1076) +#define SID_TABLE_INSERT_COL (SID_SVX_START+1077) +#define SID_TABLE_DELETE_ROW (SID_SVX_START+1078) +#define SID_TABLE_DELETE_COL (SID_SVX_START+1079) +#define SID_TABLE_SELECT_ALL (SID_SVX_START+1080) +#define SID_TABLE_SELECT_COL (SID_SVX_START+1081) +#define SID_TABLE_SELECT_ROW (SID_SVX_START+1082) +#define SID_FORMAT_TABLE_DLG (SID_SVX_START+1083) +#define SID_TABLE_SORT_DIALOG (SID_SVX_START+1084) +#define SID_TABLE_AUTOSUM (SID_SVX_START+1085) +#define SID_TABLE_DISTRIBUTE_COLUMNS (SID_SVX_START+1086) +#define SID_TABLE_DISTRIBUTE_ROWS (SID_SVX_START+1087) +#define SID_TABLE_STYLE (SID_SVX_START+1088) +#define SID_TABLE_STYLE_SETTINGS (SID_SVX_START+1089) +#define SID_CHAR_DLG_PREVIEW_STRING (SID_SVX_START+1090) +#define SID_RECHECK_DOCUMENT (SID_SVX_START+1091) + +#define SID_OBJECT_MIRROR (SID_SVX_START+1093) + +#define SID_DELETE_POSTIT (SID_SVX_START+1094) +#define SID_NEXT_POSTIT (SID_SVX_START+1095) +#define SID_PREVIOUS_POSTIT (SID_SVX_START+1096) +#define SID_DELETEALL_POSTIT (SID_SVX_START+1097) +#define SID_SHOW_POSTIT (SID_SVX_START+1098) +#define SID_REPLYTO_POSTIT (SID_SVX_START+1099) +#define SID_DELETEALLBYAUTHOR_POSTIT (SID_SVX_START+1100) +#define SID_INSERT_POSTIT (SID_SVX_START+1101) + +#define SID_TRANSLITERATE_SENTENCE_CASE (SID_SVX_START+1102) +#define SID_TRANSLITERATE_TITLE_CASE (SID_SVX_START+1103) +#define SID_TRANSLITERATE_TOGGLE_CASE (SID_SVX_START+1104) +#define SID_TRANSLITERATE_ROTATE_CASE (SID_SVX_START+1105) +#define SID_INSERT_FORM_RADIO (SID_SVX_START+1106) +#define SID_INSERT_FORM_CHECK (SID_SVX_START+1107) +#define SID_INSERT_FORM_LIST (SID_SVX_START+1108) +#define SID_INSERT_FORM_COMBO (SID_SVX_START+1109) +#define SID_INSERT_FORM_SPIN (SID_SVX_START+1110) +#define SID_INSERT_FORM_VSCROLL (SID_SVX_START+1111) +#define SID_INSERT_FORM_HSCROLL (SID_SVX_START+1112) +#define SID_EXTERNAL_EDIT (SID_SVX_START+1113) +#define SID_ATTR_PAGE_SHARED_FIRST (SID_SVX_START+1114) +#define SID_SAVE_GRAPHIC (SID_SVX_START+1116) +#define SID_COMPRESS_GRAPHIC (SID_SVX_START+1117) +#define SID_FRAME_UP (SID_SVX_START+1118) +#define SID_FRAME_DOWN (SID_SVX_START+1119) +#define SID_ATTR_SPECIALCHAR (SID_SVX_START+1120) +#define SID_CHANGE_PICTURE (SID_SVX_START+1125) +#define SID_ROTATE_GRAPHIC_LEFT (SID_SVX_START+1126) +#define SID_ROTATE_GRAPHIC_RIGHT (SID_SVX_START+1127) +#define SID_MENU_MANAGE_GRAPHIC (SID_SVX_START+1128) + +// IMPORTANT NOTE: adjust SID_SVX_FIRSTFREE, when adding new slot id +#define SID_SVX_FIRSTFREE (SID_MENU_MANAGE_GRAPHIC + 1) + +// -------------------------------------------------------------------------- +// Overflow check for slot IDs +// -------------------------------------------------------------------------- + +#if SID_SVX_FIRSTFREE > SID_SVX_END +#error Resource-Ueberlauf in #line, #file +#endif + +#endif // #ifndef _SVX_SVXIDS_HRC + +// ******************************************************************* EOF + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/svxitems.hrc b/include/svx/svxitems.hrc new file mode 100644 index 000000000000..44a68ebdbd9f --- /dev/null +++ b/include/svx/svxitems.hrc @@ -0,0 +1,117 @@ +/* -*- 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 _SVXITEMS_HRC +#define _SVXITEMS_HRC + +#include <svl/solar.hrc> + +// Extras ------------------------------------------------------------------- +#define RID_SVXITEMS_EXTRAS_CHARCOLOR (RID_SVXITEMS_START + 2) + +// SvxSearchItem ------------------------------------------------------------ +// Kommando +#define RID_SVXITEMS_SEARCHCMD_FIND (RID_SVXITEMS_START + 10) +#define RID_SVXITEMS_SEARCHCMD_FIND_ALL (RID_SVXITEMS_START + 11) +#define RID_SVXITEMS_SEARCHCMD_REPLACE (RID_SVXITEMS_START + 12) +#define RID_SVXITEMS_SEARCHCMD_REPLACE_ALL (RID_SVXITEMS_START + 13) +// Vorlagen +#define RID_SVXITEMS_SEARCHSTYL_CHAR (RID_SVXITEMS_START + 14) +#define RID_SVXITEMS_SEARCHSTYL_PARA (RID_SVXITEMS_START + 15) +#define RID_SVXITEMS_SEARCHSTYL_FRAME (RID_SVXITEMS_START + 16) +#define RID_SVXITEMS_SEARCHSTYL_PAGE (RID_SVXITEMS_START + 17) +// Zellen-Typ +#define RID_SVXITEMS_SEARCHIN_FORMULA (RID_SVXITEMS_START + 20) +#define RID_SVXITEMS_SEARCHIN_VALUE (RID_SVXITEMS_START + 21) +#define RID_SVXITEMS_SEARCHIN_NOTE (RID_SVXITEMS_START + 22) +// Applikation +#define RID_SVXITEMS_SEARCHAPP_WRITER (RID_SVXITEMS_START + 25) +#define RID_SVXITEMS_SEARCHAPP_CALC (RID_SVXITEMS_START + 26) +#define RID_SVXITEMS_SEARCHAPP_DRAW (RID_SVXITEMS_START + 27) +#define RID_SVXITEMS_SEARCHAPP_BASE (RID_SVXITEMS_START + 28) + +// enum BrushStyle ---------------------------------------------------------- +#define RID_SVXITEMS_BRUSHSTYLE_NULL (RID_SVXITEMS_START + 45) +#define RID_SVXITEMS_BRUSHSTYLE_SOLID (RID_SVXITEMS_START + 46) +#define RID_SVXITEMS_BRUSHSTYLE_HORZ (RID_SVXITEMS_START + 47) +#define RID_SVXITEMS_BRUSHSTYLE_VERT (RID_SVXITEMS_START + 48) +#define RID_SVXITEMS_BRUSHSTYLE_CROSS (RID_SVXITEMS_START + 49) +#define RID_SVXITEMS_BRUSHSTYLE_DIAGCROSS (RID_SVXITEMS_START + 50) +#define RID_SVXITEMS_BRUSHSTYLE_UPDIAG (RID_SVXITEMS_START + 51) +#define RID_SVXITEMS_BRUSHSTYLE_DOWNDIAG (RID_SVXITEMS_START + 52) +#define RID_SVXITEMS_BRUSHSTYLE_25 (RID_SVXITEMS_START + 53) +#define RID_SVXITEMS_BRUSHSTYLE_50 (RID_SVXITEMS_START + 54) +#define RID_SVXITEMS_BRUSHSTYLE_75 (RID_SVXITEMS_START + 55) +#define RID_SVXITEMS_BRUSHSTYLE_BITMAP (RID_SVXITEMS_START + 56) + +// enum SvxCellOrientation +#define RID_SVXITEMS_ORI_STANDARD (RID_SVXITEMS_START + 410) +#define RID_SVXITEMS_ORI_TOPBOTTOM (RID_SVXITEMS_START + 411) +#define RID_SVXITEMS_ORI_BOTTOMTOP (RID_SVXITEMS_START + 412) +#define RID_SVXITEMS_ORI_STACKED (RID_SVXITEMS_START + 413) + +// Id's fuer BoolItems +#define RID_SVXITEMS_BOXINF_TABLE_TRUE (RID_SVXITEMS_START + 443) +#define RID_SVXITEMS_BOXINF_TABLE_FALSE (RID_SVXITEMS_START + 444) +#define RID_SVXITEMS_BOXINF_DIST_TRUE (RID_SVXITEMS_START + 445) +#define RID_SVXITEMS_BOXINF_DIST_FALSE (RID_SVXITEMS_START + 446) +#define RID_SVXITEMS_BOXINF_MDIST_TRUE (RID_SVXITEMS_START + 447) +#define RID_SVXITEMS_BOXINF_MDIST_FALSE (RID_SVXITEMS_START + 448) + +// Complete-Texte ----------------------------------------------------------- + +#define RID_SVXITEMS_MARGIN_LEFT (RID_SVXITEMS_START + 480) +#define RID_SVXITEMS_MARGIN_TOP (RID_SVXITEMS_START + 481) +#define RID_SVXITEMS_MARGIN_RIGHT (RID_SVXITEMS_START + 482) +#define RID_SVXITEMS_MARGIN_BOTTOM (RID_SVXITEMS_START + 483) +#define RID_SVXITEMS_PAGE_COMPLETE (RID_SVXITEMS_START + 498) +#define RID_SVXITEMS_PAGE_NUM_BEGIN (RID_SVXITEMS_START + 499) +#define RID_SVXITEMS_PAGE_NUM_CHR_UPPER (RID_SVXITEMS_START + 499) +#define RID_SVXITEMS_PAGE_NUM_CHR_LOWER (RID_SVXITEMS_START + 500) +#define RID_SVXITEMS_PAGE_NUM_ROM_UPPER (RID_SVXITEMS_START + 501) +#define RID_SVXITEMS_PAGE_NUM_ROM_LOWER (RID_SVXITEMS_START + 502) +#define RID_SVXITEMS_PAGE_NUM_ARABIC (RID_SVXITEMS_START + 503) +#define RID_SVXITEMS_PAGE_NUM_NONE (RID_SVXITEMS_START + 504) +#define RID_SVXITEMS_PAGE_LAND_TRUE (RID_SVXITEMS_START + 505) +#define RID_SVXITEMS_PAGE_LAND_FALSE (RID_SVXITEMS_START + 506) +#define RID_SVXITEMS_PAGE_USAGE_LEFT (RID_SVXITEMS_START + 507) +#define RID_SVXITEMS_PAGE_USAGE_RIGHT (RID_SVXITEMS_START + 508) +#define RID_SVXITEMS_PAGE_USAGE_ALL (RID_SVXITEMS_START + 509) +#define RID_SVXITEMS_PAGE_USAGE_MIRROR (RID_SVXITEMS_START + 510) +#define RID_SVXITEMS_AUTHOR_COMPLETE (RID_SVXITEMS_START + 521) +#define RID_SVXITEMS_DATE_COMPLETE (RID_SVXITEMS_START + 522) +#define RID_SVXITEMS_TEXT_COMPLETE (RID_SVXITEMS_START + 523) +#define RID_SVXITEMS_BACKGROUND_COLOR (RID_SVXITEMS_START + 524) +#define RID_SVXITEMS_PATTERN_COLOR (RID_SVXITEMS_START + 525) + +#define RID_SVXITEMS_BRUSH_CHAR (RID_SVXITEMS_START + 527) +#define RID_ATTR_NAMES (RID_SVXITEMS_START + 528) + +// Ueberlaufpruefung -------------------------------------------------------- + +// Resource-Id's +#define ACT_RID_SVXITEMS_END RID_ATTR_NAMES +#if ACT_RID_SVXITEMS_END > RID_SVXITEMS_END +#error Resource-Ueberlauf in #line, #file +#endif + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/swframeexample.hxx b/include/svx/swframeexample.hxx new file mode 100644 index 000000000000..0f08f1506943 --- /dev/null +++ b/include/svx/swframeexample.hxx @@ -0,0 +1,95 @@ +/* -*- 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 _SVXSWFRAMEEXAMPLE_HXX +#define _SVXSWFRAMEEXAMPLE_HXX + +#include <vcl/window.hxx> +#include <tools/color.hxx> +#include <tools/gen.hxx> +#include "svx/svxdllapi.h" + +// class SwFrmPagePreview ------------------------------------------------------- + +class SVX_DLLPUBLIC SvxSwFrameExample : public Window +{ + Color m_aTransColor; // transparency + Color m_aBgCol; // background + Color m_aFrameColor; // graphic frame + Color m_aAlignColor; // align anchor + Color m_aBorderCol; // frame of doc + Color m_aPrintAreaCol; // frame of printable area of doc + Color m_aTxtCol; // symbolised text + Color m_aBlankCol; // area of symbol for blank + Color m_aBlankFrameCol; // frame of symbol for blank + + Rectangle aPage; + Rectangle aPagePrtArea; + Rectangle aTextLine; + Rectangle aPara; + Rectangle aParaPrtArea; + Rectangle aFrameAtFrame; + Rectangle aDrawObj; + Rectangle aAutoCharFrame; + Size aFrmSize; + + short nHAlign; + short nHRel; + + short nVAlign; + short nVRel; + + short nWrap; + short nAnchor; + sal_Bool bTrans; + + Point aRelPos; + + void InitColors_Impl( void ); + void InitAllRects_Impl(); + void CalcBoundRect_Impl(Rectangle &rRect); + Rectangle DrawInnerFrame_Impl(const Rectangle &rRect, const Color &rFillColor, const Color &rBorderColor); + + void DrawRect_Impl(const Rectangle &rRect, const Color &rFillColor, const Color &rLineColor); + virtual void Paint(const Rectangle&); +protected: + virtual void DataChanged( const DataChangedEvent& rDCEvt ); +public: + + SvxSwFrameExample(Window* pParent, const ResId& rResID); + ~SvxSwFrameExample(); + + inline void SetWrap(sal_uInt16 nW) { nWrap = nW; } + + inline void SetHAlign(short nH) { nHAlign = nH; } + inline void SetHoriRel(short nR) { nHRel = nR; } + + inline void SetVAlign(short nV) { nVAlign = nV; } + inline void SetVertRel(short nR) { nVRel = nR; } + + inline void SetTransparent(sal_Bool bT) { bTrans = bT; } + inline void SetAnchor(short nA) { nAnchor = nA; } + + void SetRelPos(const Point& rP); +}; + + +#endif // _SVXSWFRAMEEXAMPLE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/swframeposstrings.hxx b/include/svx/swframeposstrings.hxx new file mode 100644 index 000000000000..a6ecc3a7605e --- /dev/null +++ b/include/svx/swframeposstrings.hxx @@ -0,0 +1,87 @@ +/* -*- 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 _SVXSWFRAMEPOSSTRINGS_HXX +#define _SVXSWFRAMEPOSSTRINGS_HXX + +#include <tools/string.hxx> +#include "svx/svxdllapi.h" + +/* + contains strings needed for positioning dialogs + of frames and drawing in Writer + */ +class SvxSwFramePosString_Impl; +class SVX_DLLPUBLIC SvxSwFramePosString +{ + SvxSwFramePosString_Impl* pImpl; +public: + SvxSwFramePosString(); + ~SvxSwFramePosString(); + enum StringId + { + LEFT , + RIGHT , + FROMLEFT , + MIR_LEFT , + MIR_RIGHT , + MIR_FROMLEFT , + FRAME , + PRTAREA , + REL_PG_LEFT , + REL_PG_RIGHT , + REL_FRM_LEFT , + REL_FRM_RIGHT , + MIR_REL_PG_LEFT , + MIR_REL_PG_RIGHT , + MIR_REL_FRM_LEFT , + MIR_REL_FRM_RIGHT , + REL_PG_FRAME , + REL_PG_PRTAREA , + REL_BASE , + REL_CHAR , + REL_ROW , + REL_BORDER , + REL_PRTAREA , + FLY_REL_PG_LEFT , + FLY_REL_PG_RIGHT , + FLY_REL_PG_FRAME , + FLY_REL_PG_PRTAREA , + FLY_MIR_REL_PG_LEFT , + FLY_MIR_REL_PG_RIGHT , + TOP, + BOTTOM, + CENTER_HORI, + CENTER_VERT, + FROMTOP, + FROMBOTTOM, + BELOW, + FROMRIGHT, + REL_PG_TOP, + REL_PG_BOTTOM, + REL_FRM_TOP, + REL_FRM_BOTTOM, + REL_LINE, + + STR_MAX + }; + const String& GetString(StringId eId); +}; +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/swframevalidation.hxx b/include/svx/swframevalidation.hxx new file mode 100644 index 000000000000..a42906eb28c7 --- /dev/null +++ b/include/svx/swframevalidation.hxx @@ -0,0 +1,80 @@ +/* -*- 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 _SVXSWFRAMEVALIDATION_HXX +#define _SVXSWFRAMEVALIDATION_HXX +#include <sal/types.h> +#include <tools/gen.hxx> +#include <limits.h> + +/* + struct to determine min/max values for fly frame positioning in Writer + */ +struct SvxSwFrameValidation +{ + sal_Int16 nAnchorType; //com::sun::star::text::TextContentAnchorType + sal_Int16 nHoriOrient; //com::sun::star::text::HoriOrientation + sal_Int16 nVertOrient; //com::sun::star::text::VertOrientation + sal_Int16 nHRelOrient; //com::sun::star::text::RelOrientation + sal_Int16 nVRelOrient; //com::sun::star::text::RelOrientation + bool bAutoHeight; + bool bAutoWidth; + bool bMirror; + bool bFollowTextFlow; + + sal_Int32 nHPos; + sal_Int32 nMaxHPos; + sal_Int32 nMinHPos; + + sal_Int32 nVPos; + sal_Int32 nMaxVPos; + sal_Int32 nMinVPos; + + sal_Int32 nWidth; + sal_Int32 nMinWidth; + sal_Int32 nMaxWidth; + + sal_Int32 nHeight; + sal_Int32 nMinHeight; + sal_Int32 nMaxHeight; + + Size aPercentSize; // Size for 100% value + + SvxSwFrameValidation() : + bAutoHeight(false), + bAutoWidth(false), + bMirror(false), + bFollowTextFlow( false ), + nHPos(0), + nMaxHPos(SAL_MAX_INT32), + nMinHPos(0), + nVPos(0), + nMaxVPos(SAL_MAX_INT32), + nMinVPos(0), + nWidth( 283 * 4 ), //2.0 cm + nMinWidth(0), + nMaxWidth(SAL_MAX_INT32), + nHeight( 283 ), //0.5 cm + nMaxHeight(SAL_MAX_INT32) + { + } +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxallitm.hxx b/include/svx/sxallitm.hxx new file mode 100644 index 000000000000..7d6c66a870cd --- /dev/null +++ b/include/svx/sxallitm.hxx @@ -0,0 +1,63 @@ +/* -*- 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 _SXALLITM_HXX +#define _SXALLITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdmetitm.hxx> + +//------------------------------ +// class SdrAllPositionXItem +//------------------------------ +class SdrAllPositionXItem: public SdrMetricItem { +public: + SdrAllPositionXItem(long nPosX=0): SdrMetricItem(SDRATTR_ALLPOSITIONX,nPosX) {} + SdrAllPositionXItem(SvStream& rIn): SdrMetricItem(SDRATTR_ALLPOSITIONX,rIn) {} +}; + +//------------------------------ +// class SdrAllPositionYItem +//------------------------------ +class SdrAllPositionYItem: public SdrMetricItem { +public: + SdrAllPositionYItem(long nPosY=0): SdrMetricItem(SDRATTR_ALLPOSITIONY,nPosY) {} + SdrAllPositionYItem(SvStream& rIn): SdrMetricItem(SDRATTR_ALLPOSITIONY,rIn) {} +}; + +//------------------------------ +// class SdrAllSizeWidthItem +//------------------------------ +class SdrAllSizeWidthItem: public SdrMetricItem { +public: + SdrAllSizeWidthItem(long nWdt=0): SdrMetricItem(SDRATTR_ALLSIZEWIDTH,nWdt) {} + SdrAllSizeWidthItem(SvStream& rIn): SdrMetricItem(SDRATTR_ALLSIZEWIDTH,rIn) {} +}; + +//------------------------------ +// class SdrAllSizeWidthItem +//------------------------------ +class SdrAllSizeHeightItem: public SdrMetricItem { +public: + SdrAllSizeHeightItem(long nHgt=0): SdrMetricItem(SDRATTR_ALLSIZEHEIGHT,nHgt) {} + SdrAllSizeHeightItem(SvStream& rIn): SdrMetricItem(SDRATTR_ALLSIZEHEIGHT,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxcaitm.hxx b/include/svx/sxcaitm.hxx new file mode 100644 index 000000000000..66856eb33fb0 --- /dev/null +++ b/include/svx/sxcaitm.hxx @@ -0,0 +1,52 @@ +/* -*- 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 _SXCAITM_HXX +#define _SXCAITM_HXX + +#include <svx/svddef.hxx> + +#include <svx/sdangitm.hxx> +#include <svx/sdooitm.hxx> + +//------------------------------------ +// class SdrCaptionFixedAngleItem +// sal_True=Winkel durch SdrCaptionAngleItem vorgegeben +// sal_False=Freier Winkel +//------------------------------------ +class SdrCaptionFixedAngleItem: public SdrOnOffItem { +public: + SdrCaptionFixedAngleItem(sal_Bool bFix=sal_True): SdrOnOffItem(SDRATTR_CAPTIONFIXEDANGLE,bFix) {} + SdrCaptionFixedAngleItem(SvStream& rIn) : SdrOnOffItem(SDRATTR_CAPTIONFIXEDANGLE,rIn) {} +}; + +//------------------------------ +// class SdrCaptionAngleItem +// Winkelangabe in 1/100 Degree +// Nur bei Type2, Type3 und Type4 +// und nur wenn SdrCaptionIsFixedAngleItem=TRUE +//------------------------------ +class SdrCaptionAngleItem: public SdrAngleItem { +public: + SdrCaptionAngleItem(long nAngle=0): SdrAngleItem(SDRATTR_CAPTIONANGLE,nAngle) {} + SdrCaptionAngleItem(SvStream& rIn): SdrAngleItem(SDRATTR_CAPTIONANGLE,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxcecitm.hxx b/include/svx/sxcecitm.hxx new file mode 100644 index 000000000000..eabbaeed1d9b --- /dev/null +++ b/include/svx/sxcecitm.hxx @@ -0,0 +1,87 @@ +/* -*- 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 _SXCECITM_HXX +#define _SXCECITM_HXX + +#include <svl/eitem.hxx> +#include <svx/svddef.hxx> +#include <svx/sdynitm.hxx> +#include <svx/sdmetitm.hxx> +#include "svx/svxdllapi.h" + +enum SdrCaptionEscDir {SDRCAPT_ESCHORIZONTAL,SDRCAPT_ESCVERTICAL,SDRCAPT_ESCBESTFIT}; + +//------------------------------ +// class SdrCaptionEscDirItem +//------------------------------ +class SVX_DLLPUBLIC SdrCaptionEscDirItem: public SfxEnumItem { +public: + TYPEINFO(); + SdrCaptionEscDirItem(SdrCaptionEscDir eDir=SDRCAPT_ESCHORIZONTAL): SfxEnumItem(SDRATTR_CAPTIONESCDIR,sal::static_int_cast< sal_uInt16 >(eDir)) {} + SdrCaptionEscDirItem(SvStream& rIn) : SfxEnumItem(SDRATTR_CAPTIONESCDIR,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; // { return 3; } + SdrCaptionEscDir GetValue() const { return (SdrCaptionEscDir)SfxEnumItem::GetValue(); } + + virtual OUString GetValueTextByPos(sal_uInt16 nPos) const; + + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +//------------------------------------ +// class SdrCaptionEscIsRelItem +// sal_True=Linienaustrittsposition relativ +// sal_False=Linienaustrittsposition absolut +//------------------------------------ +class SdrCaptionEscIsRelItem: public SdrYesNoItem { +public: + SdrCaptionEscIsRelItem(sal_Bool bRel=sal_True): SdrYesNoItem(SDRATTR_CAPTIONESCISREL,bRel) {} + SdrCaptionEscIsRelItem(SvStream& rIn) : SdrYesNoItem(SDRATTR_CAPTIONESCISREL,rIn) {} +}; + +//------------------------------------ +// class SdrCaptionEscRelItem +// Relativer Linienaustritt +// 0 = 0.00% = oben bzw. links, +// 10000 = 100.00% = rechts bzw. unten +// nur wenn SdrCaptionEscIsRelItem=TRUE +//------------------------------------ +class SdrCaptionEscRelItem: public SfxInt32Item { +public: + SdrCaptionEscRelItem(long nEscRel=5000): SfxInt32Item(SDRATTR_CAPTIONESCREL,nEscRel) {} + SdrCaptionEscRelItem(SvStream& rIn) : SfxInt32Item(SDRATTR_CAPTIONESCREL,rIn) {} +}; + +//------------------------------------ +// class SdrCaptionEscAbsItem +// Absoluter Linienaustritt +// 0 = oben bzw. links, +// >0 = in Richtung rechts bzw. unten +// nur wenn SdrCaptionEscIsRelItem=FALSE +//------------------------------------ +class SdrCaptionEscAbsItem: public SdrMetricItem { +public: + SdrCaptionEscAbsItem(long nEscAbs=0): SdrMetricItem(SDRATTR_CAPTIONESCABS,nEscAbs) {} + SdrCaptionEscAbsItem(SvStream& rIn) : SdrMetricItem(SDRATTR_CAPTIONESCABS,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxcgitm.hxx b/include/svx/sxcgitm.hxx new file mode 100644 index 000000000000..56301de03c27 --- /dev/null +++ b/include/svx/sxcgitm.hxx @@ -0,0 +1,37 @@ +/* -*- 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 _SXCGITM_HXX +#define _SXCGITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdmetitm.hxx> + +//------------------------------------ +// class SdrCaptionGapItem +// Abstand des Linienanfangs vom Rect +//------------------------------------ +class SdrCaptionGapItem: public SdrMetricItem { +public: + SdrCaptionGapItem(long nGap=0) : SdrMetricItem(SDRATTR_CAPTIONGAP,nGap) {} + SdrCaptionGapItem(SvStream& rIn): SdrMetricItem(SDRATTR_CAPTIONGAP,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxciaitm.hxx b/include/svx/sxciaitm.hxx new file mode 100644 index 000000000000..16bb59d1c2eb --- /dev/null +++ b/include/svx/sxciaitm.hxx @@ -0,0 +1,45 @@ +/* -*- 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 _SXCIAITM_HXX +#define _SXCIAITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdangitm.hxx> + +//------------------------------ +// class SdrCircStartAngleItem +//------------------------------ +class SdrCircStartAngleItem: public SdrAngleItem { +public: + SdrCircStartAngleItem(long nAngle=0): SdrAngleItem(SDRATTR_CIRCSTARTANGLE,nAngle) {} + SdrCircStartAngleItem(SvStream& rIn): SdrAngleItem(SDRATTR_CIRCSTARTANGLE,rIn) {} +}; + +//------------------------------ +// class SdrCircEndAngleItem +//------------------------------ +class SdrCircEndAngleItem: public SdrAngleItem { +public: + SdrCircEndAngleItem(long nAngle=36000): SdrAngleItem(SDRATTR_CIRCENDANGLE,nAngle) {} + SdrCircEndAngleItem(SvStream& rIn): SdrAngleItem(SDRATTR_CIRCENDANGLE,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxcikitm.hxx b/include/svx/sxcikitm.hxx new file mode 100644 index 000000000000..436370e588b1 --- /dev/null +++ b/include/svx/sxcikitm.hxx @@ -0,0 +1,49 @@ +/* -*- 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 _SXCIKITM_HXX +#define _SXCIKITM_HXX + +#include <svx/svddef.hxx> +#include <svl/eitem.hxx> + +enum SdrCircKind {SDRCIRC_FULL, + SDRCIRC_SECT, + SDRCIRC_CUT, + SDRCIRC_ARC}; + +class SdrCircKindItem: public SfxEnumItem { +public: + TYPEINFO(); + SdrCircKindItem(SdrCircKind eKind=SDRCIRC_FULL): SfxEnumItem(SDRATTR_CIRCKIND,sal::static_int_cast< sal_uInt16 >(eKind)) {} + SdrCircKindItem(SvStream& rIn) : SfxEnumItem(SDRATTR_CIRCKIND,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; // { return 4; } + SdrCircKind GetValue() const { return (SdrCircKind)SfxEnumItem::GetValue(); } + + 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 OUString GetValueTextByPos(sal_uInt16 nPos) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxcllitm.hxx b/include/svx/sxcllitm.hxx new file mode 100644 index 000000000000..04b9a5d75c03 --- /dev/null +++ b/include/svx/sxcllitm.hxx @@ -0,0 +1,52 @@ +/* -*- 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 _SXCLLITM_HXX +#define _SXCLLITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdynitm.hxx> +#include <svx/sdmetitm.hxx> + +//------------------------------------ +// class SdrCaptionLineLenItem +// Laenge der ersten Austrittslinie +// Nur bei Type3 und Type4 +// Nur relevant, wenn SdrCaptionFitLineLenItem=FALSE +//------------------------------------ +class SdrCaptionLineLenItem: public SdrMetricItem { +public: + SdrCaptionLineLenItem(long nLineLen=0): SdrMetricItem(SDRATTR_CAPTIONLINELEN,nLineLen) {} + SdrCaptionLineLenItem(SvStream& rIn) : SdrMetricItem(SDRATTR_CAPTIONLINELEN,rIn) {} +}; + +//------------------------------------ +// class SdrCaptionFitLineLenItem +// Laenge der ersten Austrittslinie automatisch berechnen oder +// Vorgabe (SdrCaptionLineLenItem) verwenden. +// Nur bei Type3 und Type4 +//------------------------------------ +class SdrCaptionFitLineLenItem: public SdrYesNoItem { +public: + SdrCaptionFitLineLenItem(sal_Bool bBestFit=sal_True): SdrYesNoItem(SDRATTR_CAPTIONFITLINELEN,bBestFit) {} + SdrCaptionFitLineLenItem(SvStream& rIn) : SdrYesNoItem(SDRATTR_CAPTIONFITLINELEN,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxctitm.hxx b/include/svx/sxctitm.hxx new file mode 100644 index 000000000000..ba8d01190b47 --- /dev/null +++ b/include/svx/sxctitm.hxx @@ -0,0 +1,46 @@ +/* -*- 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 _SXCTITM_HXX +#define _SXCTITM_HXX + +#include <svl/eitem.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +enum SdrCaptionType {SDRCAPT_TYPE1,SDRCAPT_TYPE2,SDRCAPT_TYPE3,SDRCAPT_TYPE4}; + +//------------------------------ +// class SdrCaptionTypeItem +//------------------------------ +class SVX_DLLPUBLIC SdrCaptionTypeItem: public SfxEnumItem { +public: + TYPEINFO(); + SdrCaptionTypeItem(SdrCaptionType eStyle=SDRCAPT_TYPE3): SfxEnumItem(SDRATTR_CAPTIONTYPE,sal::static_int_cast< sal_uInt16 >(eStyle)) {} + SdrCaptionTypeItem(SvStream& rIn) : SfxEnumItem(SDRATTR_CAPTIONTYPE,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; // { return 4; } + SdrCaptionType GetValue() const { return (SdrCaptionType)SfxEnumItem::GetValue(); } + virtual OUString GetValueTextByPos(sal_uInt16 nPos) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxekitm.hxx b/include/svx/sxekitm.hxx new file mode 100644 index 000000000000..73bb20959fd9 --- /dev/null +++ b/include/svx/sxekitm.hxx @@ -0,0 +1,52 @@ +/* -*- 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 _SXEKITM_HXX +#define _SXEKITM_HXX + +#include <svl/eitem.hxx> +#include <svx/svddef.hxx> +#include "svx/svxdllapi.h" + +enum SdrEdgeKind {SDREDGE_ORTHOLINES, + SDREDGE_THREELINES, + SDREDGE_ONELINE, + SDREDGE_BEZIER, + SDREDGE_ARC}; + +//------------------------------ +// class SdrEdgeKindItem +//------------------------------ +class SVX_DLLPUBLIC SdrEdgeKindItem: public SfxEnumItem { +public: + TYPEINFO(); + SdrEdgeKindItem(SdrEdgeKind eStyle=SDREDGE_ORTHOLINES): SfxEnumItem(SDRATTR_EDGEKIND,sal::static_int_cast< sal_uInt16 >(eStyle)) {} + SdrEdgeKindItem(SvStream& rIn) : SfxEnumItem(SDRATTR_EDGEKIND,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; // { return 5; } + SdrEdgeKind GetValue() const { return (SdrEdgeKind)SfxEnumItem::GetValue(); } + 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 OUString GetValueTextByPos(sal_uInt16 nPos) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxelditm.hxx b/include/svx/sxelditm.hxx new file mode 100644 index 000000000000..6a97f4f4df42 --- /dev/null +++ b/include/svx/sxelditm.hxx @@ -0,0 +1,58 @@ +/* -*- 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 _SXELDITM_HXX +#define _SXELDITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdmetitm.hxx> +#include "svx/svxdllapi.h" + +class SdrEdgeLineDeltaAnzItem: public SfxUInt16Item { +public: + SdrEdgeLineDeltaAnzItem(sal_uInt16 nVal=0): SfxUInt16Item(SDRATTR_EDGELINEDELTAANZ,nVal) {} + SdrEdgeLineDeltaAnzItem(SvStream& rIn): SfxUInt16Item(SDRATTR_EDGELINEDELTAANZ,rIn) {} +}; + +class SVX_DLLPUBLIC SdrEdgeLine1DeltaItem: public SdrMetricItem { +public: + SdrEdgeLine1DeltaItem(long nVal=0): SdrMetricItem(SDRATTR_EDGELINE1DELTA,nVal) {} + SdrEdgeLine1DeltaItem(SvStream& rIn): SdrMetricItem(SDRATTR_EDGELINE1DELTA,rIn) {} + 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 ); +}; + +class SVX_DLLPUBLIC SdrEdgeLine2DeltaItem: public SdrMetricItem { +public: + SdrEdgeLine2DeltaItem(long nVal=0): SdrMetricItem(SDRATTR_EDGELINE2DELTA,nVal) {} + SdrEdgeLine2DeltaItem(SvStream& rIn): SdrMetricItem(SDRATTR_EDGELINE2DELTA,rIn) {} + 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 ); +}; + +class SVX_DLLPUBLIC SdrEdgeLine3DeltaItem: public SdrMetricItem { +public: + SdrEdgeLine3DeltaItem(long nVal=0): SdrMetricItem(SDRATTR_EDGELINE3DELTA,nVal) {} + SdrEdgeLine3DeltaItem(SvStream& rIn): SdrMetricItem(SDRATTR_EDGELINE3DELTA,rIn) {} + 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 ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxenditm.hxx b/include/svx/sxenditm.hxx new file mode 100644 index 000000000000..cd9d09b89632 --- /dev/null +++ b/include/svx/sxenditm.hxx @@ -0,0 +1,72 @@ +/* -*- 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 _SXENDITM_HXX +#define _SXENDITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdmetitm.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC SdrEdgeNode1HorzDistItem: public SdrMetricItem { +public: + SdrEdgeNode1HorzDistItem(long nVal=0): SdrMetricItem(SDRATTR_EDGENODE1HORZDIST,nVal) {} + SdrEdgeNode1HorzDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_EDGENODE1HORZDIST,rIn) {} + 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 ); +}; + +class SVX_DLLPUBLIC SdrEdgeNode1VertDistItem: public SdrMetricItem { +public: + SdrEdgeNode1VertDistItem(long nVal=0): SdrMetricItem(SDRATTR_EDGENODE1VERTDIST,nVal) {} + SdrEdgeNode1VertDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_EDGENODE1VERTDIST,rIn) {} + 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 ); +}; + +class SVX_DLLPUBLIC SdrEdgeNode2HorzDistItem: public SdrMetricItem { +public: + SdrEdgeNode2HorzDistItem(long nVal=0): SdrMetricItem(SDRATTR_EDGENODE2HORZDIST,nVal) {} + SdrEdgeNode2HorzDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_EDGENODE2HORZDIST,rIn) {} + 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 ); +}; + +class SVX_DLLPUBLIC SdrEdgeNode2VertDistItem: public SdrMetricItem { +public: + SdrEdgeNode2VertDistItem(long nVal=0): SdrMetricItem(SDRATTR_EDGENODE2VERTDIST,nVal) {} + SdrEdgeNode2VertDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_EDGENODE2VERTDIST,rIn) {} + 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 ); +}; + +class SdrEdgeNode1GlueDistItem: public SdrMetricItem { +public: + SdrEdgeNode1GlueDistItem(long nVal=0): SdrMetricItem(SDRATTR_EDGENODE1GLUEDIST,nVal) {} + SdrEdgeNode1GlueDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_EDGENODE1GLUEDIST,rIn) {} +}; + +class SdrEdgeNode2GlueDistItem: public SdrMetricItem { +public: + SdrEdgeNode2GlueDistItem(long nVal=0): SdrMetricItem(SDRATTR_EDGENODE2GLUEDIST,nVal) {} + SdrEdgeNode2GlueDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_EDGENODE2GLUEDIST,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxfiitm.hxx b/include/svx/sxfiitm.hxx new file mode 100644 index 000000000000..688f54bb65d5 --- /dev/null +++ b/include/svx/sxfiitm.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SFXIITM_HXX +#define _SFXIITM_HXX + +#include <svl/poolitem.hxx> +#include <tools/fract.hxx> + +/*************************************************************************/ +/* FractionItem */ +/*************************************************************************/ + +class SdrFractionItem: public SfxPoolItem { + Fraction nValue; +public: + TYPEINFO_VISIBILITY( SVX_DLLPUBLIC ); + SdrFractionItem(sal_uInt16 nId=0): SfxPoolItem(nId) {} + SdrFractionItem(sal_uInt16 nId, const Fraction& rVal): SfxPoolItem(nId), nValue(rVal) {} + SdrFractionItem(sal_uInt16 nId, SvStream& rIn); + virtual int operator==(const SfxPoolItem&) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePresentation, SfxMapUnit eCoreMetric, SfxMapUnit ePresentationMetric, OUString &rText, const IntlWrapper * = 0) const; + virtual SfxPoolItem* Create(SvStream&, sal_uInt16 nVer) const; + virtual SvStream& Store(SvStream&, sal_uInt16 nItemVers) const; + virtual SfxPoolItem* Clone(SfxItemPool *pPool=NULL) const; + const Fraction& GetValue() const { return nValue; } + void SetValue(const Fraction& rVal) { nValue = rVal; } +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxlayitm.hxx b/include/svx/sxlayitm.hxx new file mode 100644 index 000000000000..205e755660bb --- /dev/null +++ b/include/svx/sxlayitm.hxx @@ -0,0 +1,50 @@ +/* -*- 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 _SYLAYITM_HXX +#define _SYLAYITM_HXX + +#include <svx/svddef.hxx> +#include <svl/stritem.hxx> +#include <svl/intitem.hxx> +#include <svx/svdtypes.hxx> + +//------------------------------ +// class SdrLayerIdItem +//------------------------------ +class SdrLayerIdItem: public SfxUInt16Item { +public: + SdrLayerIdItem(sal_uInt16 nId=0): SfxUInt16Item(SDRATTR_LAYERID,nId) {} + SdrLayerIdItem(SvStream& rIn): SfxUInt16Item(SDRATTR_LAYERID,rIn) {} + SdrLayerID GetValue() const { return (SdrLayerID)SfxUInt16Item::GetValue(); } +}; + +//------------------------------ +// class SdrLayerNameItem +//------------------------------ + +class SdrLayerNameItem: public SfxStringItem { +public: + SdrLayerNameItem() : SfxStringItem() { SetWhich(SDRATTR_LAYERNAME); } + SdrLayerNameItem(const String& rStr) : SfxStringItem(SDRATTR_LAYERNAME,rStr) {} + SdrLayerNameItem(SvStream& rIn) : SfxStringItem(SDRATTR_LAYERNAME,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxlogitm.hxx b/include/svx/sxlogitm.hxx new file mode 100644 index 000000000000..c295522fe8de --- /dev/null +++ b/include/svx/sxlogitm.hxx @@ -0,0 +1,45 @@ +/* -*- 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 _SXLOGITM_HXX +#define _SXLOGITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdmetitm.hxx> + +//------------------------------ +// class SdrLogicSizeWidthItem +//------------------------------ +class SdrLogicSizeWidthItem: public SdrMetricItem { +public: + SdrLogicSizeWidthItem(long nWdt=0): SdrMetricItem(SDRATTR_LOGICSIZEWIDTH,nWdt) {} + SdrLogicSizeWidthItem(SvStream& rIn): SdrMetricItem(SDRATTR_LOGICSIZEWIDTH,rIn) {} +}; + +//------------------------------ +// class SdrLogicSizeWidthItem +//------------------------------ +class SdrLogicSizeHeightItem: public SdrMetricItem { +public: + SdrLogicSizeHeightItem(long nHgt=0): SdrMetricItem(SDRATTR_LOGICSIZEHEIGHT,nHgt) {} + SdrLogicSizeHeightItem(SvStream& rIn): SdrMetricItem(SDRATTR_LOGICSIZEHEIGHT,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmbritm.hxx b/include/svx/sxmbritm.hxx new file mode 100644 index 000000000000..fd32430c58c6 --- /dev/null +++ b/include/svx/sxmbritm.hxx @@ -0,0 +1,40 @@ +/* -*- 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 _SXMBRITM_HXX +#define _SXMBRITM_HXX + +#include <svx/svddef.hxx> + +#include <svx/sdynitm.hxx> + +// Die Masslinie unterhalb der Bezugskante +// Zur Bemassung einer Objektunterkante +// (Redundant zum drehen der Bezugskante um 180deg + +// TextUpsideDown, jedoch besser bedienbar) +// laesst sich auch draggen, indem man den Masslinienabstand +// (SdrMeasureLineDistItem) ueber die Bezugskante hinwegdraggt +class SdrMeasureBelowRefEdgeItem: public SdrYesNoItem { +public: + SdrMeasureBelowRefEdgeItem(bool bOn=false): SdrYesNoItem(SDRATTR_MEASUREBELOWREFEDGE,bOn) {} + SdrMeasureBelowRefEdgeItem(SvStream& rIn): SdrYesNoItem(SDRATTR_MEASUREBELOWREFEDGE,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmfsitm.hxx b/include/svx/sxmfsitm.hxx new file mode 100644 index 000000000000..e24bc150c9c1 --- /dev/null +++ b/include/svx/sxmfsitm.hxx @@ -0,0 +1,36 @@ +/* -*- 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 _SXMFSITM_HXX +#define _SXMFSITM_HXX + +#include <svx/svddef.hxx> +#include <svl/stritem.hxx> + +// Formatstring (aehnl. Calc), z.B. "#.###,00km" +// ueberschreibt SdrMeasureUnitItem und SdrMeasureShowUnitItem (n.i.) +class SdrMeasureFormatStringItem: public SfxStringItem { +public: + SdrMeasureFormatStringItem() : SfxStringItem() { SetWhich(SDRATTR_MEASUREFORMATSTRING); } + SdrMeasureFormatStringItem(const String& rStr) : SfxStringItem(SDRATTR_MEASUREFORMATSTRING,rStr) {} + SdrMeasureFormatStringItem(SvStream& rIn) : SfxStringItem(SDRATTR_MEASUREFORMATSTRING,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmkitm.hxx b/include/svx/sxmkitm.hxx new file mode 100644 index 000000000000..56fe21d7478a --- /dev/null +++ b/include/svx/sxmkitm.hxx @@ -0,0 +1,49 @@ +/* -*- 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 _SXMKITM_HXX +#define _SXMKITM_HXX + +#include <svx/svddef.hxx> +#include <svl/eitem.hxx> + +enum SdrMeasureKind {SDRMEASURE_STD,SDRMEASURE_RADIUS}; // n.i. + +//------------------------------ +// class SdrMeasureKindItem (n.i.) +//------------------------------ +class SdrMeasureKindItem: public SfxEnumItem { +public: + TYPEINFO(); + SdrMeasureKindItem(SdrMeasureKind eKind=SDRMEASURE_STD): SfxEnumItem(SDRATTR_MEASUREKIND,sal::static_int_cast< sal_uInt16 >(eKind)) {} + SdrMeasureKindItem(SvStream& rIn) : SfxEnumItem(SDRATTR_MEASUREKIND,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; // { return 2; } + SdrMeasureKind GetValue() const { return (SdrMeasureKind)SfxEnumItem::GetValue(); } + + 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 OUString GetValueTextByPos(sal_uInt16 nPos) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmlhitm.hxx b/include/svx/sxmlhitm.hxx new file mode 100644 index 000000000000..29e46cd616c3 --- /dev/null +++ b/include/svx/sxmlhitm.hxx @@ -0,0 +1,79 @@ +/* -*- 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 _SXMLHITM_HXX +#define _SXMLHITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdmetitm.hxx> + +/*************************************************************************/ +/* Measure */ +/*************************************************************************/ +// ___ +// | 100,00km | 2mm = SdrMeasureHelplineOverhangItem +// |<--------------------->|--- +// | | 8mm = SdrMeasureLineDistItem +// | | +// #=============# |--- +// # # | SdrMeasureHelpline1/2LenItem +// # #=========#--- +// # Zu bemassendes Objekt # +// #=======================# + +// Abstand der Masslinie zur Bezugskante (Norm=8mm) +// laesst sich auch draggen an den beiden Handles +// die auf den Pfeilspitzen liegen +class SdrMeasureLineDistItem: public SdrMetricItem { +public: + SdrMeasureLineDistItem(long nVal=0): SdrMetricItem(SDRATTR_MEASURELINEDIST,nVal) {} + SdrMeasureLineDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_MEASURELINEDIST,rIn) {} +}; + +// Ueberhang der Masshilfslinien an der Masslinie (Norm=2mm) +class SdrMeasureHelplineOverhangItem: public SdrMetricItem { +public: + SdrMeasureHelplineOverhangItem(long nVal=0): SdrMetricItem(SDRATTR_MEASUREHELPLINEOVERHANG,nVal) {} + SdrMeasureHelplineOverhangItem(SvStream& rIn): SdrMetricItem(SDRATTR_MEASUREHELPLINEOVERHANG,rIn) {} +}; + +// Abstand der der Masshilfslinienenden zur Bezugskante +// Damit die Masshilfslinien nicht das Objekt beruehren +class SdrMeasureHelplineDistItem: public SdrMetricItem { +public: + SdrMeasureHelplineDistItem(long nVal=0): SdrMetricItem(SDRATTR_MEASUREHELPLINEDIST,nVal) {} + SdrMeasureHelplineDistItem(SvStream& rIn): SdrMetricItem(SDRATTR_MEASUREHELPLINEDIST,rIn) {} +}; + +// Ueberlaenge der Hilfslinien ueber die Bezugskante +// laesst sich auch draggen an den beiden runden Handles, +// die sich default unter den beiden Referenzpunkten befinden +class SdrMeasureHelpline1LenItem: public SdrMetricItem { +public: + SdrMeasureHelpline1LenItem(long nVal=0): SdrMetricItem(SDRATTR_MEASUREHELPLINE1LEN,nVal) {} + SdrMeasureHelpline1LenItem(SvStream& rIn): SdrMetricItem(SDRATTR_MEASUREHELPLINE1LEN,rIn) {} +}; +class SdrMeasureHelpline2LenItem: public SdrMetricItem { +public: + SdrMeasureHelpline2LenItem(long nVal=0): SdrMetricItem(SDRATTR_MEASUREHELPLINE2LEN,nVal) {} + SdrMeasureHelpline2LenItem(SvStream& rIn): SdrMetricItem(SDRATTR_MEASUREHELPLINE2LEN,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmoitm.hxx b/include/svx/sxmoitm.hxx new file mode 100644 index 000000000000..8b5cfc2a9cb4 --- /dev/null +++ b/include/svx/sxmoitm.hxx @@ -0,0 +1,35 @@ +/* -*- 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 _SXMOITM_HXX +#define _SXMOITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdmetitm.hxx> + +// Ueberstand der Masslinie ueber die Masshilfslinien +// Nur wenn die Masspfeile aussen sind (n.i.) +class SdrMeasureOverhangItem: public SdrMetricItem { +public: + SdrMeasureOverhangItem(long nVal=0): SdrMetricItem(SDRATTR_MEASUREOVERHANG,nVal) {} + SdrMeasureOverhangItem(SvStream& rIn): SdrMetricItem(SDRATTR_MEASUREOVERHANG,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmovitm.hxx b/include/svx/sxmovitm.hxx new file mode 100644 index 000000000000..97fa1e1f71d4 --- /dev/null +++ b/include/svx/sxmovitm.hxx @@ -0,0 +1,45 @@ +/* -*- 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 _SXMOVITM_HXX +#define _SXMOVITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdmetitm.hxx> + +//------------------------------ +// class SdrMoveXItem +//------------------------------ +class SdrMoveXItem: public SdrMetricItem { +public: + SdrMoveXItem(long n=0): SdrMetricItem(SDRATTR_MOVEX,n) {} + SdrMoveXItem(SvStream& rIn): SdrMetricItem(SDRATTR_MOVEX,rIn) {} +}; + +//------------------------------ +// class SdrMoveYItem +//------------------------------ +class SdrMoveYItem: public SdrMetricItem { +public: + SdrMoveYItem(long n=0): SdrMetricItem(SDRATTR_MOVEY,n) {} + SdrMoveYItem(SvStream& rIn): SdrMetricItem(SDRATTR_MOVEY,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmsitm.hxx b/include/svx/sxmsitm.hxx new file mode 100644 index 000000000000..52beec424cd6 --- /dev/null +++ b/include/svx/sxmsitm.hxx @@ -0,0 +1,37 @@ +/* -*- 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 _SXMSITM_HXX +#define _SXMSITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sxsiitm.hxx> + +// Massstabsvorgabe. Wenn bereits am Model ein Massstab (UIScale) gesetzt +// ist wird dieser nicht ueberschrieben. Stattdessen werden beide Massstaebe +// miteinander multipliziert. +class SdrMeasureScaleItem: public SdrScaleItem { +public: + SdrMeasureScaleItem() : SdrScaleItem(SDRATTR_MEASURESCALE,Fraction(1,1)) {} + SdrMeasureScaleItem(const Fraction& rFr): SdrScaleItem(SDRATTR_MEASURESCALE,rFr) {} + SdrMeasureScaleItem(SvStream& rIn) : SdrScaleItem(SDRATTR_MEASURESCALE,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmspitm.hxx b/include/svx/sxmspitm.hxx new file mode 100644 index 000000000000..9f4116567b05 --- /dev/null +++ b/include/svx/sxmspitm.hxx @@ -0,0 +1,45 @@ +/* -*- 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 _SXMSPITM_HXX +#define _SXMSPITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdynitm.hxx> + +//------------------------------ +// class SdrMoveProtectItem +//------------------------------ +class SdrObjMoveProtectItem: public SdrYesNoItem { +public: + SdrObjMoveProtectItem(bool bOn=false): SdrYesNoItem(SDRATTR_OBJMOVEPROTECT,bOn) {} + SdrObjMoveProtectItem(SvStream& rIn): SdrYesNoItem(SDRATTR_OBJMOVEPROTECT,rIn) {} +}; + +//------------------------------ +// class SdrSizeProtectItem +//------------------------------ +class SdrObjSizeProtectItem: public SdrYesNoItem { +public: + SdrObjSizeProtectItem(bool bOn=false): SdrYesNoItem(SDRATTR_OBJSIZEPROTECT,bOn) {} + SdrObjSizeProtectItem(SvStream& rIn): SdrYesNoItem(SDRATTR_OBJSIZEPROTECT,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmsuitm.hxx b/include/svx/sxmsuitm.hxx new file mode 100644 index 000000000000..679435c66656 --- /dev/null +++ b/include/svx/sxmsuitm.hxx @@ -0,0 +1,34 @@ +/* -*- 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 _SXMSUITM_HXX +#define _SXMSUITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdynitm.hxx> + +// Die Masseinheit mit anzeigen +class SdrMeasureShowUnitItem: public SdrYesNoItem { +public: + SdrMeasureShowUnitItem(bool bOn=false): SdrYesNoItem(SDRATTR_MEASURESHOWUNIT,bOn) {} + SdrMeasureShowUnitItem(SvStream& rIn): SdrYesNoItem(SDRATTR_MEASURESHOWUNIT,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmtaitm.hxx b/include/svx/sxmtaitm.hxx new file mode 100644 index 000000000000..583c0b18c7a6 --- /dev/null +++ b/include/svx/sxmtaitm.hxx @@ -0,0 +1,45 @@ +/* -*- 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 _SXMTAITM_HXX +#define _SXMTAITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdynitm.hxx> +#include <svx/sdangitm.hxx> + +// Den Text automatisch zurechtdrehen (Automatisches UpsideDown). +// TextUpsideDown bleibt trotzdem weiterhin wirksam und dreht +// den Text bei sal_True nochmal. +class SdrMeasureTextAutoAngleItem: public SdrYesNoItem { +public: + SdrMeasureTextAutoAngleItem(bool bOn=true): SdrYesNoItem(SDRATTR_MEASURETEXTAUTOANGLE,bOn) {} + SdrMeasureTextAutoAngleItem(SvStream& rIn): SdrYesNoItem(SDRATTR_MEASURETEXTAUTOANGLE,rIn) {} +}; + +// Der bevorzugte Blickwinkel zum lesen des Textes. Wird nur ausgewertet, wenn +// TextAutoAngle=TRUE. Winkel in 1/100deg aus der Zeichnung zum Betrachter. +class SdrMeasureTextAutoAngleViewItem: public SdrAngleItem { +public: + SdrMeasureTextAutoAngleViewItem(long nVal=31500): SdrAngleItem(SDRATTR_MEASURETEXTAUTOANGLEVIEW,nVal) {} + SdrMeasureTextAutoAngleViewItem(SvStream& rIn): SdrAngleItem(SDRATTR_MEASURETEXTAUTOANGLEVIEW,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmtfitm.hxx b/include/svx/sxmtfitm.hxx new file mode 100644 index 000000000000..4be65b5d72ae --- /dev/null +++ b/include/svx/sxmtfitm.hxx @@ -0,0 +1,52 @@ +/* -*- 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 _SXMTFITM_HXX +#define _SXMTFITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdynitm.hxx> +#include <svx/sdangitm.hxx> + +// die 2 folgenden sind noch nicht implementiert! +// Text auf einen wirklich fixen Winkel festnageln. +// Der Textwinkel ist dann auch unabhaengig vom Winkel der Masslinie. +// Setzt TextUpsideDown, TextRota90 sowie TextAutoAngle ausser Kraft. (n.i.) +class SdrMeasureTextIsFixedAngleItem: public SdrYesNoItem { +public: + SdrMeasureTextIsFixedAngleItem(bool bOn=false): SdrYesNoItem(SDRATTR_MEASURETEXTISFIXEDANGLE,bOn) {} + SdrMeasureTextIsFixedAngleItem(SvStream& rIn): SdrYesNoItem(SDRATTR_MEASURETEXTISFIXEDANGLE,rIn) {} +}; + +// Der Winkel des Textes in 1/100deg. 0=Horizontal von links nach rechts zu lesen. (n.i.) +class SdrMeasureTextFixedAngleItem: public SdrAngleItem { +public: + SdrMeasureTextFixedAngleItem(long nVal=0): SdrAngleItem(SDRATTR_MEASURETEXTFIXEDANGLE,nVal) {} + SdrMeasureTextFixedAngleItem(SvStream& rIn): SdrAngleItem(SDRATTR_MEASURETEXTFIXEDANGLE,rIn) {} +}; + +// The decimal places used for the measure value +class SdrMeasureDecimalPlacesItem: public SfxInt16Item { +public: + SdrMeasureDecimalPlacesItem(sal_Int16 nVal=2): SfxInt16Item(SDRATTR_MEASUREDECIMALPLACES,nVal) {} + SdrMeasureDecimalPlacesItem(SvStream& rIn): SfxInt16Item(SDRATTR_MEASUREDECIMALPLACES,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmtpitm.hxx b/include/svx/sxmtpitm.hxx new file mode 100644 index 000000000000..bc4966228c8c --- /dev/null +++ b/include/svx/sxmtpitm.hxx @@ -0,0 +1,71 @@ +/* -*- 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 _SXMTPITM_HXX +#define _SXMTPITM_HXX + +#include <svx/svddef.hxx> +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +enum SdrMeasureTextHPos {SDRMEASURE_TEXTHAUTO,SDRMEASURE_TEXTLEFTOUTSIDE,SDRMEASURE_TEXTINSIDE,SDRMEASURE_TEXTRIGHTOUTSIDE}; +enum SdrMeasureTextVPos {SDRMEASURE_TEXTVAUTO,SDRMEASURE_ABOVE,SDRMEASURETEXT_BREAKEDLINE,SDRMEASURE_BELOW,SDRMEASURETEXT_VERTICALCENTERED}; + +//------------------------------ +// class SdrMeasureTextHPosItem +//------------------------------ +class SVX_DLLPUBLIC SdrMeasureTextHPosItem: public SfxEnumItem { +public: + TYPEINFO(); + SdrMeasureTextHPosItem(SdrMeasureTextHPos ePos=SDRMEASURE_TEXTHAUTO): SfxEnumItem(SDRATTR_MEASURETEXTHPOS,sal::static_int_cast< sal_uInt16 >(ePos)) {} + SdrMeasureTextHPosItem(SvStream& rIn) : SfxEnumItem(SDRATTR_MEASURETEXTHPOS,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; // { return 4; } + SdrMeasureTextHPos GetValue() const { return (SdrMeasureTextHPos)SfxEnumItem::GetValue(); } + + 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 OUString GetValueTextByPos(sal_uInt16 nPos) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +//------------------------------ +// class SdrMeasureTextVPosItem +//------------------------------ +class SVX_DLLPUBLIC SdrMeasureTextVPosItem: public SfxEnumItem { +public: + TYPEINFO(); + SdrMeasureTextVPosItem(SdrMeasureTextVPos ePos=SDRMEASURE_TEXTVAUTO): SfxEnumItem(SDRATTR_MEASURETEXTVPOS,sal::static_int_cast< sal_uInt16 >(ePos)) {} + SdrMeasureTextVPosItem(SvStream& rIn) : SfxEnumItem(SDRATTR_MEASURETEXTVPOS,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; // { return 5; } + SdrMeasureTextVPos GetValue() const { return (SdrMeasureTextVPos)SfxEnumItem::GetValue(); } + + 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 OUString GetValueTextByPos(sal_uInt16 nPos) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmtritm.hxx b/include/svx/sxmtritm.hxx new file mode 100644 index 000000000000..3ad063eba082 --- /dev/null +++ b/include/svx/sxmtritm.hxx @@ -0,0 +1,43 @@ +/* -*- 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 _SXMTRITM_HXX +#define _SXMTRITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdynitm.hxx> + +// Den Text quer zur Masslinie (90deg Drehung nach links) +class SdrMeasureTextRota90Item: public SdrYesNoItem { +public: + SdrMeasureTextRota90Item(bool bOn=false): SdrYesNoItem(SDRATTR_MEASURETEXTROTA90,bOn) {} + SdrMeasureTextRota90Item(SvStream& rIn): SdrYesNoItem(SDRATTR_MEASURETEXTROTA90,rIn) {} +}; + +// Das von mir berechnete TextRect um 180 deg drehen +// Der Text wird dann aber auch auf die andere Seite der +// Masslinie gebracht (wenn nicht Rota90) +class SdrMeasureTextUpsideDownItem: public SdrYesNoItem { +public: + SdrMeasureTextUpsideDownItem(bool bOn=false): SdrYesNoItem(SDRATTR_MEASURETEXTUPSIDEDOWN,bOn) {} + SdrMeasureTextUpsideDownItem(SvStream& rIn): SdrYesNoItem(SDRATTR_MEASURETEXTUPSIDEDOWN,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxmuitm.hxx b/include/svx/sxmuitm.hxx new file mode 100644 index 000000000000..24a07a252e7f --- /dev/null +++ b/include/svx/sxmuitm.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SXMUITM_HXX +#define _SXMUITM_HXX + +#include <vcl/field.hxx> +#include <svx/svddef.hxx> +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +// Vorgabe einer Masseinheit. Der Zahlenwert wird in diese Einheit umgerechnet +// (ausgehend von der MapUnit des Models). Diese Einheit wird dann ggf. auch angezeigt. +class SVX_DLLPUBLIC SdrMeasureUnitItem: public SfxEnumItem { +public: + TYPEINFO(); + SdrMeasureUnitItem(FieldUnit eUnit=FUNIT_NONE): SfxEnumItem(SDRATTR_MEASUREUNIT,sal::static_int_cast< sal_uInt16 >(eUnit)) {} + SdrMeasureUnitItem(SvStream& rIn) : SfxEnumItem(SDRATTR_MEASUREUNIT,rIn) {} + virtual SfxPoolItem* Clone(SfxItemPool* pPool=NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; // { return 14; } + FieldUnit GetValue() const { return (FieldUnit)SfxEnumItem::GetValue(); } + + 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 OUString GetValueTextByPos(sal_uInt16 nPos) const; + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePres, SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, OUString& rText, const IntlWrapper * = 0) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxoneitm.hxx b/include/svx/sxoneitm.hxx new file mode 100644 index 000000000000..cf85d629f508 --- /dev/null +++ b/include/svx/sxoneitm.hxx @@ -0,0 +1,63 @@ +/* -*- 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 _SXONEITM_HXX +#define _SXONEITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdmetitm.hxx> + +//------------------------------ +// class SdrOnePositionXItem +//------------------------------ +class SdrOnePositionXItem: public SdrMetricItem { +public: + SdrOnePositionXItem(long nPosX=0): SdrMetricItem(SDRATTR_ONEPOSITIONX,nPosX) {} + SdrOnePositionXItem(SvStream& rIn): SdrMetricItem(SDRATTR_ONEPOSITIONX,rIn) {} +}; + +//------------------------------ +// class SdrOnePositionYItem +//------------------------------ +class SdrOnePositionYItem: public SdrMetricItem { +public: + SdrOnePositionYItem(long nPosY=0): SdrMetricItem(SDRATTR_ONEPOSITIONY,nPosY) {} + SdrOnePositionYItem(SvStream& rIn): SdrMetricItem(SDRATTR_ONEPOSITIONY,rIn) {} +}; + +//------------------------------ +// class SdrOneSizeWidthItem +//------------------------------ +class SdrOneSizeWidthItem: public SdrMetricItem { +public: + SdrOneSizeWidthItem(long nWdt=0): SdrMetricItem(SDRATTR_ONESIZEWIDTH,nWdt) {} + SdrOneSizeWidthItem(SvStream& rIn): SdrMetricItem(SDRATTR_ONESIZEWIDTH,rIn) {} +}; + +//------------------------------ +// class SdrOneSizeWidthItem +//------------------------------ +class SdrOneSizeHeightItem: public SdrMetricItem { +public: + SdrOneSizeHeightItem(long nHgt=0): SdrMetricItem(SDRATTR_ONESIZEHEIGHT,nHgt) {} + SdrOneSizeHeightItem(SvStream& rIn): SdrMetricItem(SDRATTR_ONESIZEHEIGHT,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxonitm.hxx b/include/svx/sxonitm.hxx new file mode 100644 index 000000000000..047146b4fd8b --- /dev/null +++ b/include/svx/sxonitm.hxx @@ -0,0 +1,38 @@ +/* -*- 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 _SXONITM_HXX +#define _SXONITM_HXX + +#include <svx/svddef.hxx> +#include <svl/stritem.hxx> + +//------------------------------ +// class SdrObjectNameItem +//------------------------------ + +class SdrObjectNameItem: public SfxStringItem { +public: + SdrObjectNameItem() : SfxStringItem() { SetWhich(SDRATTR_OBJECTNAME); } + SdrObjectNameItem(const String& rStr) : SfxStringItem(SDRATTR_OBJECTNAME,rStr) {} + SdrObjectNameItem(SvStream& rIn) : SfxStringItem(SDRATTR_OBJECTNAME,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxopitm.hxx b/include/svx/sxopitm.hxx new file mode 100644 index 000000000000..4b2a3c02b7af --- /dev/null +++ b/include/svx/sxopitm.hxx @@ -0,0 +1,42 @@ +/* -*- 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 _SXOPITM_HXX +#define _SXOPITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdynitm.hxx> + +//------------------------------ +// class SdrObjPrintableItem +//------------------------------ +class SdrObjPrintableItem: public SdrYesNoItem { +public: + SdrObjPrintableItem(bool bOn=false): SdrYesNoItem(SDRATTR_OBJPRINTABLE,bOn) {} + SdrObjPrintableItem(SvStream& rIn): SdrYesNoItem(SDRATTR_OBJPRINTABLE,rIn) {} +}; + +class SdrObjVisibleItem: public SdrYesNoItem { +public: + SdrObjVisibleItem(bool bOn=true): SdrYesNoItem(SDRATTR_OBJVISIBLE,bOn) {} + SdrObjVisibleItem(SvStream& rIn): SdrYesNoItem(SDRATTR_OBJVISIBLE,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxraitm.hxx b/include/svx/sxraitm.hxx new file mode 100644 index 000000000000..f108e720bd1b --- /dev/null +++ b/include/svx/sxraitm.hxx @@ -0,0 +1,36 @@ +/* -*- 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 _SXRAITM_HXX +#define _SXRAITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdangitm.hxx> + +//------------------------------ +// class SdrRotateAngleItem +//------------------------------ +class SdrRotateAngleItem: public SdrAngleItem { +public: + SdrRotateAngleItem(long nAngle=0): SdrAngleItem(SDRATTR_ROTATEANGLE,nAngle) {} + SdrRotateAngleItem(SvStream& rIn): SdrAngleItem(SDRATTR_ROTATEANGLE,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxreaitm.hxx b/include/svx/sxreaitm.hxx new file mode 100644 index 000000000000..62ff9f979289 --- /dev/null +++ b/include/svx/sxreaitm.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SXREAITM_HXX +#define _SXREAITM_HXX + +#include <svx/svddef.hxx> + +#include <svx/sxfiitm.hxx> + +//------------------------------ +// class SdrResizeXAllItem +//------------------------------ +class SdrResizeXAllItem: public SdrFractionItem { +public: + SdrResizeXAllItem(): SdrFractionItem(SDRATTR_RESIZEXALL,Fraction(1,1)) {} + SdrResizeXAllItem(const Fraction& rFact): SdrFractionItem(SDRATTR_RESIZEXALL,rFact) {} + SdrResizeXAllItem(SvStream& rIn): SdrFractionItem(SDRATTR_RESIZEXALL,rIn) {} +}; + +//------------------------------ +// class SdrResizeYAllItem +//------------------------------ +class SdrResizeYAllItem: public SdrFractionItem { +public: + SdrResizeYAllItem(): SdrFractionItem(SDRATTR_RESIZEYALL,Fraction(1,1)) {} + SdrResizeYAllItem(const Fraction& rFact): SdrFractionItem(SDRATTR_RESIZEYALL,rFact) {} + SdrResizeYAllItem(SvStream& rIn): SdrFractionItem(SDRATTR_RESIZEYALL,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxreoitm.hxx b/include/svx/sxreoitm.hxx new file mode 100644 index 000000000000..8b5ce5ea2748 --- /dev/null +++ b/include/svx/sxreoitm.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SXREOITM_HXX +#define _SXREOITM_HXX + +#include <svx/svddef.hxx> + +#include <svx/sxfiitm.hxx> + +//------------------------------ +// class SdrResizeXOneItem +//------------------------------ +class SdrResizeXOneItem: public SdrFractionItem { +public: + SdrResizeXOneItem(): SdrFractionItem(SDRATTR_RESIZEXONE,Fraction(1,1)) {} + SdrResizeXOneItem(const Fraction& rFact): SdrFractionItem(SDRATTR_RESIZEXONE,rFact) {} + SdrResizeXOneItem(SvStream& rIn): SdrFractionItem(SDRATTR_RESIZEXONE,rIn) {} +}; + +//------------------------------ +// class SdrResizeYOneItem +//------------------------------ +class SdrResizeYOneItem: public SdrFractionItem { +public: + SdrResizeYOneItem(): SdrFractionItem(SDRATTR_RESIZEYONE,Fraction(1,1)) {} + SdrResizeYOneItem(const Fraction& rFact): SdrFractionItem(SDRATTR_RESIZEYONE,rFact) {} + SdrResizeYOneItem(SvStream& rIn): SdrFractionItem(SDRATTR_RESIZEYONE,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxroaitm.hxx b/include/svx/sxroaitm.hxx new file mode 100644 index 000000000000..bf9b2b6ef247 --- /dev/null +++ b/include/svx/sxroaitm.hxx @@ -0,0 +1,36 @@ +/* -*- 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 _SXROAITM_HXX +#define _SXROAITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdangitm.hxx> + +//------------------------------ +// class SdrRotateAllItem +//------------------------------ +class SdrRotateAllItem: public SdrAngleItem { +public: + SdrRotateAllItem(long nAngle=0): SdrAngleItem(SDRATTR_ROTATEALL,nAngle) {} + SdrRotateAllItem(SvStream& rIn): SdrAngleItem(SDRATTR_ROTATEALL,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxrooitm.hxx b/include/svx/sxrooitm.hxx new file mode 100644 index 000000000000..ec171996ebb1 --- /dev/null +++ b/include/svx/sxrooitm.hxx @@ -0,0 +1,36 @@ +/* -*- 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 _SXROOITM_HXX +#define _SXROOITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdangitm.hxx> + +//------------------------------ +// class SdrRotateOneItem +//------------------------------ +class SdrRotateOneItem: public SdrAngleItem { +public: + SdrRotateOneItem(long nAngle=0): SdrAngleItem(SDRATTR_ROTATEONE,nAngle) {} + SdrRotateOneItem(SvStream& rIn): SdrAngleItem(SDRATTR_ROTATEONE,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxsaitm.hxx b/include/svx/sxsaitm.hxx new file mode 100644 index 000000000000..1085b0d21fe3 --- /dev/null +++ b/include/svx/sxsaitm.hxx @@ -0,0 +1,36 @@ +/* -*- 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 _SXSAITM_HXX +#define _SXSAITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdangitm.hxx> + +//------------------------------ +// class SdrShearAngleItem +//------------------------------ +class SdrShearAngleItem: public SdrAngleItem { +public: + SdrShearAngleItem(long nAngle=0): SdrAngleItem(SDRATTR_SHEARANGLE,nAngle) {} + SdrShearAngleItem(SvStream& rIn): SdrAngleItem(SDRATTR_SHEARANGLE,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxsalitm.hxx b/include/svx/sxsalitm.hxx new file mode 100644 index 000000000000..2d70e2ba480f --- /dev/null +++ b/include/svx/sxsalitm.hxx @@ -0,0 +1,45 @@ +/* -*- 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 _SXSALITM_HXX +#define _SXSALITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdangitm.hxx> + +//------------------------------ +// class SdrHorzShearAllItem +//------------------------------ +class SdrHorzShearAllItem: public SdrAngleItem { +public: + SdrHorzShearAllItem(long nAngle=0): SdrAngleItem(SDRATTR_HORZSHEARALL,nAngle) {} + SdrHorzShearAllItem(SvStream& rIn): SdrAngleItem(SDRATTR_HORZSHEARALL,rIn) {} +}; + +//------------------------------ +// class SdrVertShearAllItem +//------------------------------ +class SdrVertShearAllItem: public SdrAngleItem { +public: + SdrVertShearAllItem(long nAngle=0): SdrAngleItem(SDRATTR_VERTSHEARALL,nAngle) {} + SdrVertShearAllItem(SvStream& rIn): SdrAngleItem(SDRATTR_VERTSHEARALL,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxsiitm.hxx b/include/svx/sxsiitm.hxx new file mode 100644 index 000000000000..e2a0052eff67 --- /dev/null +++ b/include/svx/sxsiitm.hxx @@ -0,0 +1,37 @@ +/* -*- 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 _SXSIITM_HXX +#define _SXSIITM_HXX + +#include <svx/sxfiitm.hxx> + +class SdrScaleItem: public SdrFractionItem { +public: + TYPEINFO(); + SdrScaleItem(sal_uInt16 nId=0): SdrFractionItem(nId,Fraction(1,1)) {} + SdrScaleItem(sal_uInt16 nId, const Fraction& rVal): SdrFractionItem(nId,rVal) {} + SdrScaleItem(sal_uInt16 nId, SvStream& rIn): SdrFractionItem(nId,rIn) {} + virtual SfxItemPresentation GetPresentation(SfxItemPresentation ePresentation, SfxMapUnit eCoreMetric, SfxMapUnit ePresentationMetric, OUString &rText, const IntlWrapper * = 0) const; + virtual SfxPoolItem* Create(SvStream&, sal_uInt16 nVer) const; + virtual SfxPoolItem* Clone(SfxItemPool *pPool=NULL) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxsoitm.hxx b/include/svx/sxsoitm.hxx new file mode 100644 index 000000000000..cf7b1ae84c57 --- /dev/null +++ b/include/svx/sxsoitm.hxx @@ -0,0 +1,45 @@ +/* -*- 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 _SXSOITM_HXX +#define _SXSOITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdangitm.hxx> + +//------------------------------ +// class SdrHorzShearOneItem +//------------------------------ +class SdrHorzShearOneItem: public SdrAngleItem { +public: + SdrHorzShearOneItem(long nAngle=0): SdrAngleItem(SDRATTR_HORZSHEARONE,nAngle) {} + SdrHorzShearOneItem(SvStream& rIn): SdrAngleItem(SDRATTR_HORZSHEARONE,rIn) {} +}; + +//------------------------------ +// class SdrVertShearOneItem +//------------------------------ +class SdrVertShearOneItem: public SdrAngleItem { +public: + SdrVertShearOneItem(long nAngle=0): SdrAngleItem(SDRATTR_VERTSHEARONE,nAngle) {} + SdrVertShearOneItem(SvStream& rIn): SdrAngleItem(SDRATTR_VERTSHEARONE,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/sxtraitm.hxx b/include/svx/sxtraitm.hxx new file mode 100644 index 000000000000..fb60bc54f53e --- /dev/null +++ b/include/svx/sxtraitm.hxx @@ -0,0 +1,63 @@ +/* -*- 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 _SXTRAITM_HXX +#define _SXTRAITM_HXX + +#include <svx/svddef.hxx> +#include <svx/sdmetitm.hxx> + +//------------------------------ +// class SdrTransformRef1XItem +//------------------------------ +class SdrTransformRef1XItem: public SdrMetricItem { +public: + SdrTransformRef1XItem(long nHgt=0): SdrMetricItem(SDRATTR_TRANSFORMREF1X,nHgt) {} + SdrTransformRef1XItem(SvStream& rIn): SdrMetricItem(SDRATTR_TRANSFORMREF1X,rIn) {} +}; + +//------------------------------ +// class SdrTransformRef1YItem +//------------------------------ +class SdrTransformRef1YItem: public SdrMetricItem { +public: + SdrTransformRef1YItem(long nHgt=0): SdrMetricItem(SDRATTR_TRANSFORMREF1Y,nHgt) {} + SdrTransformRef1YItem(SvStream& rIn): SdrMetricItem(SDRATTR_TRANSFORMREF1Y,rIn) {} +}; + +//------------------------------ +// class SdrTransformRef2XItem +//------------------------------ +class SdrTransformRef2XItem: public SdrMetricItem { +public: + SdrTransformRef2XItem(long nHgt=0): SdrMetricItem(SDRATTR_TRANSFORMREF2X,nHgt) {} + SdrTransformRef2XItem(SvStream& rIn): SdrMetricItem(SDRATTR_TRANSFORMREF2X,rIn) {} +}; + +//------------------------------ +// class SdrTransformRef2YItem +//------------------------------ +class SdrTransformRef2YItem: public SdrMetricItem { +public: + SdrTransformRef2YItem(long nHgt=0): SdrMetricItem(SDRATTR_TRANSFORMREF2Y,nHgt) {} + SdrTransformRef2YItem(SvStream& rIn): SdrMetricItem(SDRATTR_TRANSFORMREF2Y,rIn) {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/tabarea.hxx b/include/svx/tabarea.hxx new file mode 100644 index 000000000000..aa49d2a5fe94 --- /dev/null +++ b/include/svx/tabarea.hxx @@ -0,0 +1,52 @@ +/* -*- 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 _SVX_TAB_AREA_HXX +#define _SVX_TAB_AREA_HXX + +// enum ------------------------------------------------------------------ + +enum ColorModel +{ + CM_RGB, + CM_CMYK // kann um weitere Modelle, z.B. HSV erweitert werden +}; + +enum PageType +{ + PT_AREA, + PT_GRADIENT, + PT_HATCH, + PT_BITMAP, + PT_COLOR, + PT_SHADOW, + PT_TRANSPARENCE +}; + +// define ---------------------------------------------------------------- + +typedef sal_uInt16 ChangeType; // auch in tab_line.hxx (mitpflegen !!!) + +#define CT_NONE ( (ChangeType) 0x0000 ) +#define CT_MODIFIED ( (ChangeType) 0x0001 ) +#define CT_CHANGED ( (ChangeType) 0x0002 ) +#define CT_SAVED ( (ChangeType) 0x0004 ) + +#endif // _SVX_TAB_AREA_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/tabline.hxx b/include/svx/tabline.hxx new file mode 100644 index 000000000000..aa415988e197 --- /dev/null +++ b/include/svx/tabline.hxx @@ -0,0 +1,53 @@ +/* -*- 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 _SVX_TAB_LINE_HXX +#define _SVX_TAB_LINE_HXX + +#include <vcl/button.hxx> +#include <vcl/group.hxx> +#include <svtools/stdctrl.hxx> +#include <svx/svdpage.hxx> +#include <svx/xlineit0.hxx> +#include <svx/xlineit.hxx> +#include <svx/xsetit.hxx> +#include <svx/dlgctrl.hxx> +#include <vcl/menubtn.hxx> +class SvxBrushItem; +// define ---------------------------------------------------------------- + +typedef sal_uInt16 ChangeType; // auch in tab_area.hxx (mitpflegen !!!) + +#define CT_NONE ( (ChangeType) 0x0000 ) +#define CT_MODIFIED ( (ChangeType) 0x0001 ) +#define CT_CHANGED ( (ChangeType) 0x0002 ) +#define CT_SAVED ( (ChangeType) 0x0004 ) + +class SdrModel; +class SdrObject; + +//defines fuer die Symbolauswahl auf der Page +//Positive Werte (0,...n) gibt den Indes in pSymbollist an, sonst : +#define SVX_SYMBOLTYPE_NONE (-3) //Symbol unsichtbar +#define SVX_SYMBOLTYPE_AUTO (-2) //Symbol automatisch erzeugen +#define SVX_SYMBOLTYPE_BRUSHITEM (-1) //Symbol ist als Graphic im Item enthalten: +#define SVX_SYMBOLTYPE_UNKNOWN (-100) //unbekannt/nicht initialisiert + +#endif // _SVX_TAB_LINE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/tbcontrl.hxx b/include/svx/tbcontrl.hxx new file mode 100644 index 000000000000..b4bffeee4831 --- /dev/null +++ b/include/svx/tbcontrl.hxx @@ -0,0 +1,389 @@ +/* -*- 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 _SVX_TBCONTRL_HXX +#define _SVX_TBCONTRL_HXX + +/*--------------------------------------------------------------*\ + + Description: + ------------- + ToolBox-Controller for: + Font-Name, Font-Height, Font-Color + Fore-/Background color /-patterns + Frames, Lines + (indentation-)templates + + Use: + ---------- + SvxFontNameToolBoxControl + ------------------------- + Item type: SvxFontItem + Execute-Id: SID_ATTR_CHAR_FONT + -> SvxFontItem + Additional information + from DocShell: SvxFontListItem (SID_ATTR_CHAR_FONTLIST) + + SvxFontColorToolBoxControl + -------------------------- + Item type: SvxFontColorItem + Execute-Id: SID_ATTR_CHAR_COLOR + -> SvxFontColorItem + Additional information + from DocShell: presently none + in future: color palette + + class SvxColorExtToolBoxControl + ----------------------------------- + Item type: SvxColorItem + and SfxBoolItem + + for font color (writer, ...) + Execute-Id SID_ATTR_CHAR_COLOR2 + and SID_ATTR_CHAR_COLOR_EXT + + for cell color (calc) + Execute-Id SID_ATTR_CHAR_COLOR + + for character background color (writer) + Execute-Id SID_ATTR_CHAR_COLOR_BACKGROUND + and SID_ATTR_CHAR_COLOR_BACKGROUND_EXT + + for paragraph background color (writer) + Execute-Id SID_BACKGROUND_COLOR + + for cell background color (calc) + Execute-Id SID_ATTR_CHAR_COLOR_BACKGROUND + + for table/cell border color (writer, calc) + Execute-Id SID_FRAME_LINECOLOR + + SvxColorToolBoxControl + -------------------------------- + Item type: SvxBrushItem + Execute-Id: SID_BACKGROUND_COLOR + -> SvxColorItem + + SvxPatternToolBoxControl + ------------------------ + Item type: SvxBrushItem + Execute-Id: SID_BACKGROUND_PATTERN + -> SvxBrushItem + Additional information + from DocShell: presently none + in future: color palette + Note: Analysis of BrushItem: + Brush-FillColor() is misused as switch, + to distinguish whether a new style + or a new color has been set + + GetFillColor() == COL_BLACK -> GetStyle() , + GetFillColor() == COL_WHITE -> GetColor() + + SvxFrameToolBoxControl + ---------------------- + Item type: SvxBoxItem + Execute-Id: SID_ATTR_BORDER + -> SvxBoxItem & SvxBoxInfoItem + Additional information + from DocShell: none + Bemerkung: provides dependant of chosen ValueSet-Item + only SvxBoxItem or additionally SvxBoxInfoItem + If the Controller ein SfxUInt16Item receives a + value != 0, paragraph mode will be switched on, + i.e. the last line will be hidden. + A value == 0 switches again to Tabel mode. + + SvxFrameLineStyleToolBoxControl + ------------------------------- + Item type: SvxLineItem + Execute-Id: SID_FRAME_LINESTYLE + -> SvxLineItem + Additional information + from DocShell: none + Bemerkung: provides a SvxLineItem, which provides a SvxBorderLine + without color information. + + SvxFrameLineColorToolBoxControl + ------------------------------- + Item type: SvxColorItem + Execute-Id: SID_FRAME_LINECOLOR + -> SvxColorItem + Additional information + from DocShell: none + + SvxStyleToolBoxControl + ---------------------- + Item type: SfxTemplateItem + Execute-Id: SID_TEMPLATE_APPLY + -> StyleName (SfxStringItem) + -> eStyleFamily (SfxUInt16Item) + Additional information + from DocShell: none + Bemerkung: Switch family by Invalidate + at the Bindings (->SfxStyleControllerItem) + +\*--------------------------------------------------------------*/ + +// ITEMID_...-Defines i *.cxx + +#include <rsc/rscsfx.hxx> +#include <svl/lstner.hxx> +#include <sfx2/tbxctrl.hxx> +#include <svx/strarray.hxx> +#include "svx/svxdllapi.h" + +#include <com/sun/star/awt/FontDescriptor.hpp> + +// important im tbxctrls.hxx created HeDaBu !!! +class SvxLineItem; +class SvxBoxInfoItem; +class SvxFontItem; +class SfxStyleControllerItem_Impl; +class SfxStyleSheetBasePool; +class SfxTemplateItem; + +namespace svx +{ + class ToolboxButtonColorUpdater; +} +//######################################################################## + +//======================================================================== +// class SvxStyleToolBoxControl ------------------------------------------ +//======================================================================== +class SVX_DLLPUBLIC SvxStyleToolBoxControl : public SfxToolBoxControl +{ + struct Impl; +public: + SFX_DECL_TOOLBOX_CONTROL(); + + SvxStyleToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxStyleToolBoxControl(); + + virtual Window* CreateItemWindow( Window *pParent ); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + + DECL_LINK( VisibilityNotification, void* ); +protected: + // XInitialization + virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); + + // XUpdatable + virtual void SAL_CALL update() throw (::com::sun::star::uno::RuntimeException); + + // XComponent + virtual void SAL_CALL dispose() throw (::com::sun::star::uno::RuntimeException); + +private: + +#define MAX_FAMILIES 5 + + SfxStyleSheetBasePool* pStyleSheetPool; + SfxStyleControllerItem_Impl* pBoundItems [MAX_FAMILIES]; + ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > m_xBoundItems[MAX_FAMILIES]; + SfxTemplateItem* pFamilyState[MAX_FAMILIES]; + sal_uInt16 nActFamily; // Id in the ToolBox = Position - 1 + String aCurSel; + Impl* pImpl; + + SVX_DLLPRIVATE void Update(); + SVX_DLLPRIVATE void FillStyleBox(); + SVX_DLLPRIVATE void SelectStyle( const String& rStyleName ); + +friend class SfxStyleControllerItem_Impl; + + SVX_DLLPRIVATE void SetFamilyState ( sal_uInt16 nIdx, const SfxTemplateItem* pItem ); + SVX_DLLPRIVATE SfxStyleFamily GetActFamily (); +}; + +//======================================================================== +// class SvxFontNameToolBoxControl --------------------------------------- +//======================================================================== + + +class SVX_DLLPUBLIC SvxFontNameToolBoxControl : public SfxToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxFontNameToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + + virtual void StateChanged ( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual Window* CreateItemWindow ( Window *pParent ); +}; + + + +//======================================================================== +// class SvxFontColorToolBoxControl -------------------------------------- +//======================================================================== + + + +class SVX_DLLPUBLIC SvxFontColorToolBoxControl : public SfxToolBoxControl +{ + ::svx::ToolboxButtonColorUpdater* pBtnUpdater; + Color mLastColor; + +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxFontColorToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxFontColorToolBoxControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); +}; + + + +//======================================================================== +// class SvxColorExtToolBoxControl -------------------------------------- +//======================================================================== + + + +class SVX_DLLPUBLIC SvxColorExtToolBoxControl : public SfxToolBoxControl +{ + using SfxToolBoxControl::StateChanged; + using SfxToolBoxControl::Select; + + // SfxStatusForwarder aForward; + ::svx::ToolboxButtonColorUpdater* pBtnUpdater; + Color mLastColor; + sal_Bool bChoiceFromPalette; + +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxColorExtToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxColorExtToolBoxControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); + virtual void Select( sal_Bool bMod1 = sal_False ); +}; + + + +//======================================================================== +// class SvxColorToolBoxControl ------------------------------------------ +//======================================================================== + + +class SVX_DLLPUBLIC SvxColorToolBoxControl : public SfxToolBoxControl +{ + ::svx::ToolboxButtonColorUpdater* pBtnUpdater; + Color mLastColor; + +public: + SvxColorToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxColorToolBoxControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); +}; + + + +//======================================================================== +// class SvxFrameToolBoxControl ------------------------------------------ +//======================================================================== + + +class SVX_DLLPUBLIC SvxFrameToolBoxControl : public SfxToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxFrameToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + +}; + + + +//======================================================================== +// class SvxLineStyleToolBoxControl -------------------------------------- +//======================================================================== + + +class SVX_DLLPUBLIC SvxFrameLineStyleToolBoxControl : public SfxToolBoxControl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxFrameLineStyleToolBoxControl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); +}; + + + +//======================================================================== +// class SvxFrameLineColorToolBoxControl --------------------------------- +//======================================================================== + + +class SVX_DLLPUBLIC SvxFrameLineColorToolBoxControl : public SfxToolBoxControl +{ + ::svx::ToolboxButtonColorUpdater* pBtnUpdater; + Color mLastColor; + +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxFrameLineColorToolBoxControl( sal_uInt16 nSlotId, + sal_uInt16 nId, + ToolBox& rTbx ); + ~SvxFrameLineColorToolBoxControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); +}; + +class SVX_DLLPUBLIC SvxSimpleUndoRedoController : public SfxToolBoxControl +{ +private: + OUString aDefaultText; + +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxSimpleUndoRedoController( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxSimpleUndoRedoController(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); +}; + +#endif // #ifndef _SVX_TBCONTRL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/tbxalign.hxx b/include/svx/tbxalign.hxx new file mode 100644 index 000000000000..e41a07813404 --- /dev/null +++ b/include/svx/tbxalign.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _TBXALIGN_HXX +#define _TBXALIGN_HXX + +#include <sfx2/tbxctrl.hxx> +#include "svx/svxdllapi.h" + + +class SVX_DLLPUBLIC SvxTbxCtlAlign: public SfxToolBoxControl +{ +public: + virtual ::sal_Bool SAL_CALL opensSubToolbar() throw (::com::sun::star::uno::RuntimeException); + virtual OUString SAL_CALL getSubToolbarName() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL functionSelected( const OUString& aCommand ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL updateImage() throw (::com::sun::star::uno::RuntimeException); + + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); + + SFX_DECL_TOOLBOX_CONTROL(); + + SvxTbxCtlAlign( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxTbxCtlAlign() {} +private: + OUString m_aSubTbName; + OUString m_aSubTbResName; + OUString m_aCommand; +}; +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/tbxcolor.hxx b/include/svx/tbxcolor.hxx new file mode 100644 index 000000000000..e0a1d27f1aec --- /dev/null +++ b/include/svx/tbxcolor.hxx @@ -0,0 +1,64 @@ +/* -*- 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 _SVX_TBXCOLOR_HXX +#define _SVX_TBXCOLOR_HXX + +#include <com/sun/star/frame/XLayoutManager.hpp> +#include "svx/svxdllapi.h" + +//........................................................................ +namespace svx +{ +//........................................................................ + + //==================================================================== + //= ToolboxAccess + //==================================================================== + class SVX_DLLPUBLIC ToolboxAccess + { + private: + bool m_bDocking; + OUString m_sToolboxResName; + ::com::sun::star::uno::Reference< + ::com::sun::star::frame::XLayoutManager > m_xLayouter; + + public: + ToolboxAccess( const OUString& rToolboxName ); + + public: + /** toggles the toolbox + */ + void toggleToolbox() const; + + /** determines whether the toolbox is currently visible + */ + bool isToolboxVisible() const; + + /** forces that the toolbox is docked + */ + inline void forceDocking() { m_bDocking = true; } + }; + +//........................................................................ +} // namespace svx +//........................................................................ + +#endif // #ifndef _SVX_TBXCOLOR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/tbxcolorupdate.hxx b/include/svx/tbxcolorupdate.hxx new file mode 100644 index 000000000000..0df0efde4090 --- /dev/null +++ b/include/svx/tbxcolorupdate.hxx @@ -0,0 +1,76 @@ +/* -*- 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 SVX_TBXCOLORUPDATE_HXX +#define SVX_TBXCOLORUPDATE_HXX + +#include <svx/svxdllapi.h> + +#include <tools/gen.hxx> +#include <tools/color.hxx> + +class ToolBox; +class VirtualDevice; + +//........................................................................ +namespace svx +{ +//........................................................................ + +#define TBX_UPDATER_MODE_NONE 0x00 +#define TBX_UPDATER_MODE_CHAR_COLOR 0x01 +#define TBX_UPDATER_MODE_CHAR_BACKGROUND 0x02 +#define TBX_UPDATER_MODE_CHAR_COLOR_NEW 0x03 + + //==================================================================== + //= ToolboxButtonColorUpdater + //==================================================================== + /** helper class to update a color in a toolbox button image + + formerly known as SvxTbxButtonColorUpdater_Impl, residing in svx/source/tbxctrls/colorwindow.hxx. + */ + class SVX_DLLPUBLIC ToolboxButtonColorUpdater + { + public: + ToolboxButtonColorUpdater( sal_uInt16 nSlotId, + sal_uInt16 nTbxBtnId, + ToolBox* ptrTbx, + sal_uInt16 nMode = 0 ); + ~ToolboxButtonColorUpdater(); + + void Update( const Color& rColor ); + + private: + sal_uInt16 mnDrawMode; + sal_uInt16 mnBtnId; + sal_uInt16 mnSlotId; + ToolBox* mpTbx; + Color maCurColor; + Rectangle maUpdRect; + Size maBmpSize; + sal_Bool mbWasHiContrastMode; + }; + +//........................................................................ +} // namespace svx +//........................................................................ + +#endif // SVX_TBXCOLORUPDATE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/tbxctl.hxx b/include/svx/tbxctl.hxx new file mode 100644 index 000000000000..07cf3a57c5ae --- /dev/null +++ b/include/svx/tbxctl.hxx @@ -0,0 +1,55 @@ +/* -*- 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 _TBXCTL_HXX +#define _TBXCTL_HXX + +#include <sfx2/tbxctrl.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* Class for SwToolbox +|* +\************************************************************************/ + +class SVX_DLLPUBLIC SvxTbxCtlDraw : public SfxToolBoxControl +{ +private: + OUString m_sToolboxName; + + void toggleToolbox(); + +protected: + using SfxToolBoxControl::Select; + +public: + SvxTbxCtlDraw( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxTbxCtlDraw() {} + + SFX_DECL_TOOLBOX_CONTROL(); + + virtual void Select( sal_Bool bMod1 = sal_False ); + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual SfxPopupWindowType GetPopupWindowType() const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/tbxcustomshapes.hxx b/include/svx/tbxcustomshapes.hxx new file mode 100644 index 000000000000..66fde8a2cb79 --- /dev/null +++ b/include/svx/tbxcustomshapes.hxx @@ -0,0 +1,61 @@ +/* -*- 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 _SVX_TBXCUSTOMSHAPES_HXX +#define _SVX_TBXCUSTOMSHAPES_HXX + +#include <sfx2/tbxctrl.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* SvxTbxCtlCustomShapes +|* +\************************************************************************/ + +class SVX_DLLPUBLIC SvxTbxCtlCustomShapes : public SfxToolBoxControl +{ +public: + using SfxToolBoxControl::Select; + virtual void Select( sal_Bool bMod1 = sal_False ); + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual SfxPopupWindowType GetPopupWindowType() const; + virtual SfxPopupWindow* CreatePopupWindow(); + + SFX_DECL_TOOLBOX_CONTROL(); + + SvxTbxCtlCustomShapes( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxTbxCtlCustomShapes() {} + + //interface XSubToolbarController: + virtual ::sal_Bool SAL_CALL opensSubToolbar() throw (::com::sun::star::uno::RuntimeException); + virtual OUString SAL_CALL getSubToolbarName() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL functionSelected( const OUString& aCommand ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL updateImage() throw (::com::sun::star::uno::RuntimeException); + +private: + OUString m_aSubTbName; + OUString m_aSubTbxResName; + OUString m_aCommand; +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/tbxdraw.hxx b/include/svx/tbxdraw.hxx new file mode 100644 index 000000000000..f905cc657406 --- /dev/null +++ b/include/svx/tbxdraw.hxx @@ -0,0 +1,66 @@ +/* -*- 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 _TBXDRAW_HXX +#define _TBXDRAW_HXX + +#include <sfx2/tbxctrl.hxx> + +// class SvxPopupWindowTbxMgr -------------------------------------------- + +class SvxPopupWindowTbxMgr : public SfxPopupWindow +{ + void* pNiemalsDenPointerAufDieErzeugendeToolBoxMerken; // MI! + ResId aRIdWinTemp; + ResId aRIdTbxTemp; + + Link aTbxClickHdl; + + + DECL_LINK( TbxSelectHdl, ToolBox*); + DECL_LINK( TbxClickHdl, ToolBox*); + +protected: + using SfxPopupWindow::StateChanged; + +public: + SvxPopupWindowTbxMgr( sal_uInt16 nId, + SfxToolBoxControl* pTbxCtl, + ResId aRIdWin, + ResId aRIdTbx ); + SvxPopupWindowTbxMgr( sal_uInt16 nId, + WindowAlign eAlign, + ResId aRIdWin, + ResId aRIdTbx ); + ~SvxPopupWindowTbxMgr(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState); + virtual SfxPopupWindow* Clone() const; + virtual void PopupModeEnd(); + + void StartSelection(); + + // toolbox click or execute may chage the default selection in the tools toolbox + virtual void UserEvent( sal_uIntPtr nEvent, void* pEventData ); +}; + + +#endif // _TBX_DRAW_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/txencbox.hxx b/include/svx/txencbox.hxx new file mode 100644 index 000000000000..b8b470116019 --- /dev/null +++ b/include/svx/txencbox.hxx @@ -0,0 +1,107 @@ +/* -*- 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 _SVX_TXENCBOX_HXX +#define _SVX_TXENCBOX_HXX + +#include <vcl/lstbox.hxx> +#include <rtl/textenc.h> +#include "svx/svxdllapi.h" + +class SvxTextEncodingTable; + +class SVX_DLLPUBLIC SvxTextEncodingBox : public ListBox +{ +private: + const SvxTextEncodingTable* m_pEncTable; + + SVX_DLLPRIVATE sal_uInt16 EncodingToPos_Impl( rtl_TextEncoding nEnc ) const; + +public: + SvxTextEncodingBox( Window* pParent, const ResId& rResId ); + SvxTextEncodingBox( Window* pParent, WinBits nBits ); + ~SvxTextEncodingBox(); + + /** Fill with all known encodings but exclude those matching one or more + given flags as defined in rtl/tencinfo.h + + <p> If nButIncludeInfoFlags is given, encodings are included even if they + match nExcludeInfoFlags. Thus it is possible to exclude 16/32-bit + Unicode with RTL_TEXTENCODING_INFO_UNICODE but to include UTF7 and UTF8 + with RTL_TEXTENCODING_INFO_MIME </p> + + @param bExcludeImportSubsets + If <TRUE/>, some specific encodings are not listed, as they are a + subset of another encoding. This is the case for + RTL_TEXTENCODING_GB_2312, RTL_TEXTENCODING_GBK, + RTL_TEXTENCODING_MS_936, which are covered by + RTL_TEXTENCODING_GB_18030. Normally, this flag should be set to + <TRUE/> whenever the box is used in import dialogs. */ + void FillFromTextEncodingTable( + sal_Bool bExcludeImportSubsets = sal_False, + sal_uInt32 nExcludeInfoFlags = 0, + sal_uInt32 nButIncludeInfoFlags = 0 + ); + + /** Fill with all encodings known to the dbtools::OCharsetMap but exclude + those matching one or more given flags as defined in rtl/tencinfo.h + + <p> If nButIncludeInfoFlags is given, encodings are included even if they + match nExcludeInfoFlags. Thus it is possible to exclude 16/32-bit + Unicode with RTL_TEXTENCODING_INFO_UNICODE but to include UTF7 and UTF8 + with RTL_TEXTENCODING_INFO_MIME </p> + + @param bExcludeImportSubsets + If <TRUE/>, some specific encodings are not listed, as they are a + subset of another encoding. This is the case for + RTL_TEXTENCODING_GB_2312, RTL_TEXTENCODING_GBK, + RTL_TEXTENCODING_MS_936, which are covered by + RTL_TEXTENCODING_GB_18030. Normally, this flag should be set to + <TRUE/> whenever the box is used in import dialogs. */ + void FillFromDbTextEncodingMap( + sal_Bool bExcludeImportSubsets = sal_False, + sal_uInt32 nExcludeInfoFlags = 0, + sal_uInt32 nButIncludeInfoFlags = 0 + ); + + /** Fill with all known MIME encodings and select the best according to + <method>GetBestMimeEncoding</method> + */ + void FillWithMimeAndSelectBest(); + + const SvxTextEncodingTable* GetTextEncodingTable() const + { return m_pEncTable; } + + void InsertTextEncoding( const rtl_TextEncoding nEnc, + sal_uInt16 nPos = LISTBOX_APPEND ); + + void InsertTextEncoding( const rtl_TextEncoding nEnc, + const String& rEntry, + sal_uInt16 nPos = LISTBOX_APPEND ); + + void SelectTextEncoding( const rtl_TextEncoding nEnc, + sal_Bool bSelect = sal_True ); + + rtl_TextEncoding GetSelectTextEncoding() const; + + const String& GetSelectTextString() const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/txenctab.hxx b/include/svx/txenctab.hxx new file mode 100644 index 000000000000..0b8d14e89b74 --- /dev/null +++ b/include/svx/txenctab.hxx @@ -0,0 +1,44 @@ +/* -*- 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 _SVX_TXENCTAB_HXX +#define _SVX_TXENCTAB_HXX + +#include <tools/resary.hxx> +#include <rtl/textenc.h> +#include "svx/svxdllapi.h" + + +//======================================================================== +// class SvxTextEncodingTable +//======================================================================== + +class SVX_DLLPUBLIC SvxTextEncodingTable : public ResStringArray +{ +public: + SvxTextEncodingTable(); + ~SvxTextEncodingTable(); + + const OUString GetTextString( const rtl_TextEncoding nEnc ) const; + rtl_TextEncoding GetTextEncoding( const String& rStr ) const; +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/ucsubset.hrc b/include/svx/ucsubset.hrc new file mode 100644 index 000000000000..f41d223fa13e --- /dev/null +++ b/include/svx/ucsubset.hrc @@ -0,0 +1,255 @@ +/* -*- 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 . + */ + +#include <svx/dialogs.hrc> + +// strings for unicode range descriptions (used e.g. by Charmap dialog) +// (see the Unicode spec and TrueType::OS2.ulUnicodeRange description) +#define RID_SUBSETMAP 1243 +#define RID_SUBSET_START (RID_SVX_START + 901) + +#define RID_SUBSETSTR_BASIC_LATIN (RID_SUBSET_START + 0) +#define RID_SUBSETSTR_LATIN_1 (RID_SUBSET_START + 1) +#define RID_SUBSETSTR_LATIN_EXTENDED_A (RID_SUBSET_START + 2) +#define RID_SUBSETSTR_LATIN_EXTENDED_B (RID_SUBSET_START + 3) +#define RID_SUBSETSTR_IPA_EXTENSIONS (RID_SUBSET_START + 4) +#define RID_SUBSETSTR_SPACING_MODIFIERS (RID_SUBSET_START + 5) +#define RID_SUBSETSTR_COMB_DIACRITICAL (RID_SUBSET_START + 6) +#define RID_SUBSETSTR_BASIC_GREEK (RID_SUBSET_START + 7) +#define RID_SUBSETSTR_GREEK_SYMS_COPTIC (RID_SUBSET_START + 8) +#define RID_SUBSETSTR_CYRILLIC (RID_SUBSET_START + 9) +#define RID_SUBSETSTR_ARMENIAN (RID_SUBSET_START + 10) +#define RID_SUBSETSTR_HEBREW_EXTENDED (RID_SUBSET_START + 11) +#define RID_SUBSETSTR_BASIC_HEBREW (RID_SUBSET_START + 12) +#define RID_SUBSETSTR_BASIC_ARABIC (RID_SUBSET_START + 13) +#define RID_SUBSETSTR_ARABIC_EXTENDED (RID_SUBSET_START + 14) +#define RID_SUBSETSTR_DEVANAGARI (RID_SUBSET_START + 15) +#define RID_SUBSETSTR_BENGALI (RID_SUBSET_START + 16) +#define RID_SUBSETSTR_GURMUKHI (RID_SUBSET_START + 17) +#define RID_SUBSETSTR_GUJARATI (RID_SUBSET_START + 18) +#define RID_SUBSETSTR_ORIYA (RID_SUBSET_START + 19) +#define RID_SUBSETSTR_TAMIL (RID_SUBSET_START + 20) +#define RID_SUBSETSTR_TELUGU (RID_SUBSET_START + 21) +#define RID_SUBSETSTR_KANNADA (RID_SUBSET_START + 22) +#define RID_SUBSETSTR_MALAYALAM (RID_SUBSET_START + 23) +#define RID_SUBSETSTR_THAI (RID_SUBSET_START + 24) +#define RID_SUBSETSTR_LAO (RID_SUBSET_START + 25) +#define RID_SUBSETSTR_BASIC_GEORGIAN (RID_SUBSET_START + 26) +#define RID_SUBSETSTR_GEORGIAN_EXTENDED (RID_SUBSET_START + 27) +#define RID_SUBSETSTR_HANGUL_JAMO (RID_SUBSET_START + 28) +#define RID_SUBSETSTR_LATIN_EXTENDED_ADDS (RID_SUBSET_START + 29) +#define RID_SUBSETSTR_GREEK_EXTENDED (RID_SUBSET_START + 30) +#define RID_SUBSETSTR_GENERAL_PUNCTUATION (RID_SUBSET_START + 31) +#define RID_SUBSETSTR_SUB_SUPER_SCRIPTS (RID_SUBSET_START + 32) +#define RID_SUBSETSTR_CURRENCY_SYMBOLS (RID_SUBSET_START + 33) +#define RID_SUBSETSTR_COMB_DIACRITIC_SYMS (RID_SUBSET_START + 34) +#define RID_SUBSETSTR_LETTERLIKE_SYMBOLS (RID_SUBSET_START + 35) +#define RID_SUBSETSTR_NUMBER_FORMS (RID_SUBSET_START + 36) +#define RID_SUBSETSTR_ARROWS (RID_SUBSET_START + 37) +#define RID_SUBSETSTR_MATH_OPERATORS (RID_SUBSET_START + 38) +#define RID_SUBSETSTR_MISC_TECHNICAL (RID_SUBSET_START + 39) +#define RID_SUBSETSTR_CONTROL_PICTURES (RID_SUBSET_START + 40) +#define RID_SUBSETSTR_OPTICAL_CHAR_REC (RID_SUBSET_START + 41) +#define RID_SUBSETSTR_ENCLOSED_ALPHANUM (RID_SUBSET_START + 42) +#define RID_SUBSETSTR_BOX_DRAWING (RID_SUBSET_START + 43) +#define RID_SUBSETSTR_BLOCK_ELEMENTS (RID_SUBSET_START + 44) +#define RID_SUBSETSTR_GEOMETRIC_SHAPES (RID_SUBSET_START + 45) +#define RID_SUBSETSTR_MISC_DINGBATS (RID_SUBSET_START + 46) +#define RID_SUBSETSTR_DINGBATS (RID_SUBSET_START + 47) +#define RID_SUBSETSTR_CJK_SYMS_PUNCTUATION (RID_SUBSET_START + 48) +#define RID_SUBSETSTR_HIRAGANA (RID_SUBSET_START + 49) +#define RID_SUBSETSTR_KATAKANA (RID_SUBSET_START + 50) +#define RID_SUBSETSTR_BOPOMOFO (RID_SUBSET_START + 51) +#define RID_SUBSETSTR_HANGUL_COMPAT_JAMO (RID_SUBSET_START + 52) +#define RID_SUBSETSTR_CJK_MISC (RID_SUBSET_START + 53) +#define RID_SUBSETSTR_ENCLOSED_CJK_LETTERS (RID_SUBSET_START + 54) +#define RID_SUBSETSTR_CJK_COMPATIBILITY (RID_SUBSET_START + 55) +#define RID_SUBSETSTR_HANGUL (RID_SUBSET_START + 56) + +#define RID_SUBSETSTR_CJK_UNIFIED_IDGRAPH (RID_SUBSET_START + 59) +#define RID_SUBSETSTR_PRIVATE_USE_AREA (RID_SUBSET_START + 60) +#define RID_SUBSETSTR_CJK_COMPAT_IDGRAPHS (RID_SUBSET_START + 61) +#define RID_SUBSETSTR_ALPHA_PRESENTATION (RID_SUBSET_START + 62) +#define RID_SUBSETSTR_ARABIC_PRESENT_A (RID_SUBSET_START + 63) +#define RID_SUBSETSTR_COMBINING_HALF_MARKS (RID_SUBSET_START + 64) +#define RID_SUBSETSTR_CJK_COMPAT_FORMS (RID_SUBSET_START + 65) +#define RID_SUBSETSTR_SMALL_FORM_VARIANTS (RID_SUBSET_START + 66) +#define RID_SUBSETSTR_ARABIC_PRESENT_B (RID_SUBSET_START + 67) +#define RID_SUBSETSTR_HALFW_FULLW_FORMS (RID_SUBSET_START + 68) +#define RID_SUBSETSTR_SPECIALS (RID_SUBSET_START + 69) + +#define RID_SUBSETSTR_YI_SYLLABLES (RID_SUBSET_START + 70) +#define RID_SUBSETSTR_YI_RADICALS (RID_SUBSET_START + 71) +#define RID_SUBSETSTR_OLD_ITALIC (RID_SUBSET_START + 72) +#define RID_SUBSETSTR_GOTHIC (RID_SUBSET_START + 73) +#define RID_SUBSETSTR_DESERET (RID_SUBSET_START + 74) +#define RID_SUBSETSTR_BYZANTINE_MUSICAL_SYMBOLS (RID_SUBSET_START + 75) +#define RID_SUBSETSTR_MUSICAL_SYMBOLS (RID_SUBSET_START + 76) +#define RID_SUBSETSTR_MATHEMATICAL_ALPHANUMERIC_SYMBOLS (RID_SUBSET_START + 77) +#define RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B (RID_SUBSET_START + 78) +#define RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C (RID_SUBSET_START + 79) +#define RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D (RID_SUBSET_START + 80) +#define RID_SUBSETSTR_CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT (RID_SUBSET_START + 81) +#define RID_SUBSETSTR_TAGS (RID_SUBSET_START + 82) +#define RID_SUBSETSTR_CYRILLIC_SUPPLEMENTARY (RID_SUBSET_START + 83) +#define RID_SUBSETSTR_VARIATION_SELECTORS (RID_SUBSET_START + 84) +#define RID_SUBSETSTR_SUPPLEMENTARY_PRIVATE_USE_AREA_A (RID_SUBSET_START + 85) +#define RID_SUBSETSTR_SUPPLEMENTARY_PRIVATE_USE_AREA_B (RID_SUBSET_START + 86) +#define RID_SUBSETSTR_LIMBU (RID_SUBSET_START + 87) +#define RID_SUBSETSTR_TAI_LE (RID_SUBSET_START + 88) +#define RID_SUBSETSTR_KHMER_SYMBOLS (RID_SUBSET_START + 89) +#define RID_SUBSETSTR_PHONETIC_EXTENSIONS (RID_SUBSET_START + 90) +#define RID_SUBSETSTR_MISCELLANEOUS_SYMBOLS_AND_ARROWS (RID_SUBSET_START + 91) +#define RID_SUBSETSTR_YIJING_HEXAGRAM_SYMBOLS (RID_SUBSET_START + 92) +#define RID_SUBSETSTR_LINEAR_B_SYLLABARY (RID_SUBSET_START + 93) +#define RID_SUBSETSTR_LINEAR_B_IDEOGRAMS (RID_SUBSET_START + 94) +#define RID_SUBSETSTR_AEGEAN_NUMBERS (RID_SUBSET_START + 95) +#define RID_SUBSETSTR_UGARITIC (RID_SUBSET_START + 96) +#define RID_SUBSETSTR_SHAVIAN (RID_SUBSET_START + 97) +#define RID_SUBSETSTR_OSMANYA (RID_SUBSET_START + 98) +#define RID_SUBSETSTR_CYPRIOT_SYLLABARY (RID_SUBSET_START + 99) +#define RID_SUBSETSTR_TAI_XUAN_JING_SYMBOLS (RID_SUBSET_START + 100) +#define RID_SUBSETSTR_VARIATION_SELECTORS_SUPPLEMENT (RID_SUBSET_START + 101) +#define RID_SUBSETSTR_ANCIENT_GREEK_MUSICAL_NOTATION (RID_SUBSET_START + 102) +#define RID_SUBSETSTR_ANCIENT_GREEK_NUMBERS (RID_SUBSET_START + 103) +#define RID_SUBSETSTR_ARABIC_SUPPLEMENT (RID_SUBSET_START + 104) +#define RID_SUBSETSTR_BUGINESE (RID_SUBSET_START + 105) +#define RID_SUBSETSTR_CJK_STROKES (RID_SUBSET_START + 106) +#define RID_SUBSETSTR_COMBINING_DIACRITICAL_MARKS_SUPPLEMENT (RID_SUBSET_START + 107) +#define RID_SUBSETSTR_COPTIC (RID_SUBSET_START + 108) +#define RID_SUBSETSTR_ETHIOPIC_EXTENDED (RID_SUBSET_START + 109) +#define RID_SUBSETSTR_ETHIOPIC_SUPPLEMENT (RID_SUBSET_START + 110) +#define RID_SUBSETSTR_GEORGIAN_SUPPLEMENT (RID_SUBSET_START + 111) +#define RID_SUBSETSTR_GLAGOLITIC (RID_SUBSET_START + 112) +#define RID_SUBSETSTR_KHAROSHTHI (RID_SUBSET_START + 113) +#define RID_SUBSETSTR_MODIFIER_TONE_LETTERS (RID_SUBSET_START + 114) +#define RID_SUBSETSTR_NEW_TAI_LUE (RID_SUBSET_START + 115) +#define RID_SUBSETSTR_OLD_PERSIAN (RID_SUBSET_START + 116) +#define RID_SUBSETSTR_PHONETIC_EXTENSIONS_SUPPLEMENT (RID_SUBSET_START + 117) +#define RID_SUBSETSTR_SUPPLEMENTAL_PUNCTUATION (RID_SUBSET_START + 118) +#define RID_SUBSETSTR_SYLOTI_NAGRI (RID_SUBSET_START + 119) +#define RID_SUBSETSTR_TIFINAGH (RID_SUBSET_START + 120) +#define RID_SUBSETSTR_VERTICAL_FORMS (RID_SUBSET_START + 121) +#define RID_SUBSETSTR_NKO (RID_SUBSET_START + 122) +#define RID_SUBSETSTR_BALINESE (RID_SUBSET_START + 123) +#define RID_SUBSETSTR_LATIN_EXTENDED_C (RID_SUBSET_START + 124) +#define RID_SUBSETSTR_LATIN_EXTENDED_D (RID_SUBSET_START + 125) +#define RID_SUBSETSTR_PHAGS_PA (RID_SUBSET_START + 126) +#define RID_SUBSETSTR_PHOENICIAN (RID_SUBSET_START + 127) +#define RID_SUBSETSTR_CUNEIFORM (RID_SUBSET_START + 128) +#define RID_SUBSETSTR_CUNEIFORM_NUMBERS_AND_PUNCTUATION (RID_SUBSET_START + 129) +#define RID_SUBSETSTR_COUNTING_ROD_NUMERALS (RID_SUBSET_START + 130) +#define RID_SUBSETSTR_SUNDANESE (RID_SUBSET_START + 131) +#define RID_SUBSETSTR_LEPCHA (RID_SUBSET_START + 132) +#define RID_SUBSETSTR_OL_CHIKI (RID_SUBSET_START + 133) +#define RID_SUBSETSTR_CYRILLIC_EXTENDED_A (RID_SUBSET_START + 134) +#define RID_SUBSETSTR_VAI (RID_SUBSET_START + 135) +#define RID_SUBSETSTR_CYRILLIC_EXTENDED_B (RID_SUBSET_START + 136) +#define RID_SUBSETSTR_SAURASHTRA (RID_SUBSET_START + 137) +#define RID_SUBSETSTR_KAYAH_LI (RID_SUBSET_START + 138) +#define RID_SUBSETSTR_REJANG (RID_SUBSET_START + 139) +#define RID_SUBSETSTR_CHAM (RID_SUBSET_START + 140) +#define RID_SUBSETSTR_ANCIENT_SYMBOLS (RID_SUBSET_START + 141) +#define RID_SUBSETSTR_PHAISTOS_DISC (RID_SUBSET_START + 142) +#define RID_SUBSETSTR_LYCIAN (RID_SUBSET_START + 143) +#define RID_SUBSETSTR_CARIAN (RID_SUBSET_START + 144) +#define RID_SUBSETSTR_LYDIAN (RID_SUBSET_START + 145) +#define RID_SUBSETSTR_MAHJONG_TILES (RID_SUBSET_START + 146) +#define RID_SUBSETSTR_DOMINO_TILES (RID_SUBSET_START + 147) +#define RID_SUBSETSTR_SAMARITAN (RID_SUBSET_START + 148) +#define RID_SUBSETSTR_UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED (RID_SUBSET_START + 149) +#define RID_SUBSETSTR_TAI_THAM (RID_SUBSET_START + 150) +#define RID_SUBSETSTR_VEDIC_EXTENSIONS (RID_SUBSET_START + 151) +#define RID_SUBSETSTR_LISU (RID_SUBSET_START + 152) +#define RID_SUBSETSTR_BAMUM (RID_SUBSET_START + 153) +#define RID_SUBSETSTR_COMMON_INDIC_NUMBER_FORMS (RID_SUBSET_START + 154) +#define RID_SUBSETSTR_DEVANAGARI_EXTENDED (RID_SUBSET_START + 155) +#define RID_SUBSETSTR_HANGUL_JAMO_EXTENDED_A (RID_SUBSET_START + 156) +#define RID_SUBSETSTR_JAVANESE (RID_SUBSET_START + 157) +#define RID_SUBSETSTR_MYANMAR_EXTENDED_A (RID_SUBSET_START + 158) +#define RID_SUBSETSTR_TAI_VIET (RID_SUBSET_START + 159) +#define RID_SUBSETSTR_MEETEI_MAYEK (RID_SUBSET_START + 160) +#define RID_SUBSETSTR_HANGUL_JAMO_EXTENDED_B (RID_SUBSET_START + 161) +#define RID_SUBSETSTR_IMPERIAL_ARAMAIC (RID_SUBSET_START + 162) +#define RID_SUBSETSTR_OLD_SOUTH_ARABIAN (RID_SUBSET_START + 163) +#define RID_SUBSETSTR_AVESTAN (RID_SUBSET_START + 164) +#define RID_SUBSETSTR_INSCRIPTIONAL_PARTHIAN (RID_SUBSET_START + 165) +#define RID_SUBSETSTR_INSCRIPTIONAL_PAHLAVI (RID_SUBSET_START + 166) +#define RID_SUBSETSTR_OLD_TURKIC (RID_SUBSET_START + 167) +#define RID_SUBSETSTR_RUMI_NUMERAL_SYMBOLS (RID_SUBSET_START + 168) +#define RID_SUBSETSTR_KAITHI (RID_SUBSET_START + 169) +#define RID_SUBSETSTR_EGYPTIAN_HIEROGLYPHS (RID_SUBSET_START + 170) +#define RID_SUBSETSTR_ENCLOSED_ALPHANUMERIC_SUPPLEMENT (RID_SUBSET_START + 171) +#define RID_SUBSETSTR_ENCLOSED_IDEOGRAPHIC_SUPPLEMENT (RID_SUBSET_START + 172) +#define RID_SUBSETSTR_MANDAIC (RID_SUBSET_START + 174) +#define RID_SUBSETSTR_BATAK (RID_SUBSET_START + 175) +#define RID_SUBSETSTR_ETHIOPIC_EXTENDED_A (RID_SUBSET_START + 176) +#define RID_SUBSETSTR_BRAHMI (RID_SUBSET_START + 177) +#define RID_SUBSETSTR_BAMUM_SUPPLEMENT (RID_SUBSET_START + 178) +#define RID_SUBSETSTR_KANA_SUPPLEMENT (RID_SUBSET_START + 179) +#define RID_SUBSETSTR_PLAYING_CARDS (RID_SUBSET_START + 180) +#define RID_SUBSETSTR_MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS (RID_SUBSET_START + 181) +#define RID_SUBSETSTR_EMOTICONS (RID_SUBSET_START + 182) +#define RID_SUBSETSTR_TRANSPORT_AND_MAP_SYMBOLS (RID_SUBSET_START + 183) +#define RID_SUBSETSTR_ALCHEMICAL_SYMBOLS (RID_SUBSET_START + 184) +#define RID_SUBSETSTR_CJK_EXT_A_UNIFIED_IDGRAPH (RID_SUBSET_START + 185) +#define RID_SUBSETSTR_ARABIC_EXTENDED_A (RID_SUBSET_START + 186) +#define RID_SUBSETSTR_ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS (RID_SUBSET_START + 187) +#define RID_SUBSETSTR_CHAKMA (RID_SUBSET_START + 188) +#define RID_SUBSETSTR_MEETEI_MAYEK_EXTENSIONS (RID_SUBSET_START + 189) +#define RID_SUBSETSTR_MEROITIC_CURSIVE (RID_SUBSET_START + 190) +#define RID_SUBSETSTR_MEROITIC_HIEROGLYPHS (RID_SUBSET_START + 191) +#define RID_SUBSETSTR_MIAO (RID_SUBSET_START + 192) +#define RID_SUBSETSTR_SHARADA (RID_SUBSET_START + 193) +#define RID_SUBSETSTR_SORA_SOMPENG (RID_SUBSET_START + 194) +#define RID_SUBSETSTR_SUNDANESE_SUPPLEMENT (RID_SUBSET_START + 195) +#define RID_SUBSETSTR_TAKRI (RID_SUBSET_START + 196) +#define RID_SUBSETSTR_SINHALA (RID_SUBSET_START + 197) +#define RID_SUBSETSTR_TIBETAN (RID_SUBSET_START + 198) +#define RID_SUBSETSTR_MYANMAR (RID_SUBSET_START + 199) +#define RID_SUBSETSTR_KHMER (RID_SUBSET_START + 200) +#define RID_SUBSETSTR_OGHAM (RID_SUBSET_START + 201) +#define RID_SUBSETSTR_THAANA (RID_SUBSET_START + 202) +#define RID_SUBSETSTR_CANADIAN_ABORIGINAL (RID_SUBSET_START + 203) + +#define RID_SUBSETSTR_BRAILLE_PATTERNS (RID_SUBSET_START + 204) +#define RID_SUBSETSTR_CJK_RADICAL_SUPPL (RID_SUBSET_START + 205) + +#define RID_SUBSETSTR_TAGBANWA (RID_SUBSET_START + 206) +#define RID_SUBSETSTR_BOPOMOFO_EXTENDED (RID_SUBSET_START + 207) +#define RID_SUBSETSTR_KATAKANA_PHONETIC (RID_SUBSET_START + 208) +#define RID_SUBSETSTR_RUNIC (RID_SUBSET_START + 209) +#define RID_SUBSETSTR_SYRIAC (RID_SUBSET_START + 210) +#define RID_SUBSETSTR_ETHIOPIC (RID_SUBSET_START + 211) +#define RID_SUBSETSTR_CHEROKEE (RID_SUBSET_START + 212) +#define RID_SUBSETSTR_MONGOLIAN (RID_SUBSET_START + 213) +#define RID_SUBSETSTR_MISC_MATH_SYMS_A (RID_SUBSET_START + 214) +#define RID_SUBSETSTR_SUPPL_ARROWS_A (RID_SUBSET_START + 215) +#define RID_SUBSETSTR_SUPPL_ARROWS_B (RID_SUBSET_START + 216) +#define RID_SUBSETSTR_MISC_MATH_SYMS_B (RID_SUBSET_START + 217) +#define RID_SUBSETSTR_KANGXI_RADICALS (RID_SUBSET_START + 218) +#define RID_SUBSETSTR_IDEO_DESC_CHARS (RID_SUBSET_START + 219) +#define RID_SUBSETSTR_TAGALOG (RID_SUBSET_START + 220) +#define RID_SUBSETSTR_HANUNOO (RID_SUBSET_START + 221) +#define RID_SUBSETSTR_KANBUN (RID_SUBSET_START + 222) +#define RID_SUBSETSTR_BUHID (RID_SUBSET_START + 223) + +// RID_SUBSET_END (RID_SUBSET_START + 299) + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/ucsubset.hxx b/include/svx/ucsubset.hxx new file mode 100644 index 000000000000..54dfbbdd5250 --- /dev/null +++ b/include/svx/ucsubset.hxx @@ -0,0 +1,80 @@ +/* -*- 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 _SVX_SUBSETMAP_HXX +#define _SVX_SUBSETMAP_HXX + +#include "svx/svxdllapi.h" + +#include <svx/ucsubset.hrc> +#include <vcl/metric.hxx> + +#include <list> + +class FontCharMap; + +// classes Subset & SubsetMap -------------------------------------------- +// TODO: should be moved into Font Attributes territory, +// we let them mature here though because this is currently the only use + +class Subset +{ +public: + Subset( sal_UCS4 nMin, sal_UCS4 nMax, const String& aName ) + : mnRangeMin(nMin), mnRangeMax(nMax), maRangeName(aName) + {} + + Subset( sal_UCS4 nMin, sal_UCS4 nMax, int resId ); + + sal_UCS4 GetRangeMin() const { return mnRangeMin;} + sal_UCS4 GetRangeMax() const { return mnRangeMax;} + const String GetName() const { return maRangeName;} + +private: + sal_UCS4 mnRangeMin; + sal_UCS4 mnRangeMax; + String maRangeName; +}; + +inline bool operator<(const Subset &rLHS, const Subset &rRHS) +{ + return rLHS.GetRangeMin() < rRHS.GetRangeMin(); +} + +typedef ::std::list<Subset> SubsetList; + +class SVX_DLLPUBLIC SubsetMap : private Resource +{ +public: + SubsetMap( const FontCharMap* ); + + const Subset* GetSubsetByUnicode( sal_UCS4 ) const; + const Subset* GetNextSubset( bool bFirst ) const; + +private: + SubsetList maSubsets; + mutable SubsetList::const_iterator maSubsetIterator; + + SVX_DLLPRIVATE void InitList(); + SVX_DLLPRIVATE void ApplyCharMap( const FontCharMap* ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/unoapi.hxx b/include/svx/unoapi.hxx new file mode 100644 index 000000000000..2ceca3ec895d --- /dev/null +++ b/include/svx/unoapi.hxx @@ -0,0 +1,97 @@ +/* -*- 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 _SVX_UNOAPI_HXX_ +#define _SVX_UNOAPI_HXX_ + +#include <com/sun/star/uno/Any.hxx> +#include <com/sun/star/drawing/XShape.hpp> +#include <com/sun/star/drawing/XDrawPage.hpp> +#include <sal/types.h> +#include <svtools/grfmgr.hxx> +#include <svl/poolitem.hxx> +#include "svx/svxdllapi.h" + +class SvxShape; +class SdrObject; +class SdrPage; +class SvxNumBulletItem; +class SfxItemPool; +class String; + +/** creates a StarOffice API wrapper with the given type and inventor + Deprecated: This will be replaced with a function returning XShape. +*/ +SVX_DLLPUBLIC SvxShape* CreateSvxShapeByTypeAndInventor( sal_uInt16 nType, sal_uInt32 nInventor ) throw(); + +/** returns a StarOffice API wrapper for the given SdrObject */ +SVX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > GetXShapeForSdrObject( SdrObject* pObj ) throw (); + +/** returns the SdrObject from the given StarOffice API wrapper */ +SVX_DLLPUBLIC SdrObject* GetSdrObjectFromXShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape ) throw() ; + +/** returns a StarOffice API wrapper for the given SdrPage */ +SVX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > GetXDrawPageForSdrPage( SdrPage* pPage ) throw (); + +/** returns the SdrPage from the given StarOffice API wrapper */ +SVX_DLLPUBLIC SdrPage* GetSdrPageFromXDrawPage( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > xDrawPage ) throw() ; + +/** returns the SvxNumBulletItem with the given name from the pool or a null if there is no item + with that name +*/ +SvxNumBulletItem* SvxGetNumBulletItemByName( SfxItemPool* pPool, const OUString& aName ) throw(); + +/** maps the API constant MeasureUnit to a vcl MapUnit enum. + Returns false if conversion is not supported. + + @cl: for warnings01 I found out that this method never worked so I thin + it is not used at all +sal_Bool SvxMeasureUnitToMapUnit( const short eApi, short& nVcl ) throw(); +*/ + +/** maps the vcl MapUnit enum to a API constant MeasureUnit. + Returns false if conversion is not supported. +*/ +SVX_DLLPUBLIC sal_Bool SvxMapUnitToMeasureUnit( const short nVcl, short& eApi ) throw(); + +/** maps the API constant MeasureUnit to a vcl MapUnit enum. + Returns false if conversion is not supported. +*/ +SVX_DLLPUBLIC sal_Bool SvxMeasureUnitToFieldUnit( const short eApi, short& nVcl ) throw(); + +/** maps the vcl MapUnit enum to a API constant MeasureUnit. + Returns false if conversion is not supported. +*/ +SVX_DLLPUBLIC sal_Bool SvxFieldUnitToMeasureUnit( const short nVcl, short& eApi ) throw(); + +/** if the given name is a predefined name for the current language it is replaced by + the corresponding api name. +*/ +SVX_DLLPUBLIC SAL_WARN_UNUSED_RESULT OUString + SvxUnogetApiNameForItem(const sal_Int16 nWhich, const OUString& rInternalName) throw(); + +/** if the given name is a predefined api name it is replaced by the predefined name + for the current language. +*/ +SVX_DLLPUBLIC SAL_WARN_UNUSED_RESULT OUString + SvxUnogetInternalNameForItem(const sal_Int16 nWhich, const OUString& rApiName) throw(); + +#endif // _SVX_UNOAPI_HXX_ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/unofill.hxx b/include/svx/unofill.hxx new file mode 100644 index 000000000000..523905a1d97a --- /dev/null +++ b/include/svx/unofill.hxx @@ -0,0 +1,37 @@ +/* -*- 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 _SVX_UNOFILL_HXX_ +#define _SVX_UNOFILL_HXX_ + +#include <com/sun/star/uno/XInterface.hpp> +#include "svx/svxdllapi.h" + +class SdrModel; + +SVX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL SvxUnoGradientTable_createInstance( SdrModel* pModel ); +SVX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL SvxUnoHatchTable_createInstance( SdrModel* pModel ); +SVX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL SvxUnoBitmapTable_createInstance( SdrModel* pModel ); +SVX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL SvxUnoTransGradientTable_createInstance( SdrModel* pModel ); +SVX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL SvxUnoMarkerTable_createInstance( SdrModel* pModel ); +SVX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL SvxUnoDashTable_createInstance( SdrModel* pModel ); + +#endif // _SVX_UNOFILL_HXX_ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/unomaster.hxx b/include/svx/unomaster.hxx new file mode 100644 index 000000000000..c0f32d0f1346 --- /dev/null +++ b/include/svx/unomaster.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SVX_UNOMASTER_HXX +#define _SVX_UNOMASTER_HXX + +#include <com/sun/star/uno/Type.h> +#include <com/sun/star/uno/Any.h> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/beans/XPropertyState.hpp> + +/** this abstract class is the interface for an instance that likes to enhance + the functionality of components implemented with derivations from SvxShape + + @see SvxShape::setMaster +*/ +class SvxShapeMaster +{ +public: + virtual sal_Bool queryAggregation( const com::sun::star::uno::Type & rType, com::sun::star::uno::Any& aAny ) = 0; + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException) = 0; + virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException) = 0; + virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException) = 0; + + virtual ::com::sun::star::beans::PropertyState SAL_CALL getPropertyState( const OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException) = 0; + virtual void SAL_CALL setPropertyToDefault( const OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException) = 0; + virtual ::com::sun::star::uno::Any SAL_CALL getPropertyDefault( const OUString& aPropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException) = 0; + + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException) = 0; + + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException) = 0; + + virtual void dispose() = 0; + + virtual void modelChanged( SdrModel* pNewModel ) = 0; + virtual void pageChanged( SdrPage* pNewPage ) = 0; + virtual void objectChanged( SdrObject* pNewObj ) = 0; + +protected: + ~SvxShapeMaster() {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/unomid.hxx b/include/svx/unomid.hxx new file mode 100644 index 000000000000..cf4c4f4e02c1 --- /dev/null +++ b/include/svx/unomid.hxx @@ -0,0 +1,108 @@ +/* -*- 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 _SVX_UNOMID_HXX +#define _SVX_UNOMID_HXX + +//AdjustItem +#define MID_PARA_ADJUST 0 +#define MID_LAST_LINE_ADJUST 1 +#define MID_EXPAND_SINGLE 2 + +//SvxPageItem +#define MID_PAGE_NUMTYPE 0 +#define MID_PAGE_ORIENTATION 1 +#define MID_PAGE_LAYOUT 2 + +//SvxMarginItem +#define MID_MARGIN_LR_MARGIN 0 +#define MID_MARGIN_UL_MARGIN 1 +#define MID_MARGIN_L_MARGIN 2 +#define MID_MARGIN_R_MARGIN 3 +#define MID_MARGIN_UP_MARGIN 4 +#define MID_MARGIN_LO_MARGIN 5 + +#define ALL_BORDER 10 +#define ALL_BORDER_PADDING 11 +#define LEFT_BORDER_PADDING 12 +#define RIGHT_BORDER_PADDING 13 +#define TOP_BORDER_PADDING 14 +#define BOTTOM_BORDER_PADDING 15 +#define ALL_BORDER_LINE_WIDTH 16 +#define LEFT_BORDER_LINE_WIDTH 17 +#define RIGHT_BORDER_LINE_WIDTH 18 +#define TOP_BORDER_LINE_WIDTH 19 +#define BOTTOM_BORDER_LINE_WIDTH 20 + +// XFillBitmapItem (is also a NameOrIndex) +#define MID_BITMAP 8 + +// SvxHorJustifyItem +#define MID_HORJUST_HORJUST 0 +#define MID_HORJUST_ADJUST 1 + +// SvxObjectItem +#define MID_START_X 1 +#define MID_START_Y 2 +#define MID_END_X 3 +#define MID_END_Y 4 +#define MID_LIMIT 5 + +// SvxColumnItem +#define MID_COLUMNARRAY 7 +#define MID_ACTUAL 4 +#define MID_TABLE 5 +#define MID_ORTHO 6 + +// XFillGradientItem +// Don't use 0 as it used for the whole struct +#define MID_FILLGRADIENT 1 +#define MID_GRADIENT_STYLE 2 +#define MID_GRADIENT_STARTCOLOR 3 +#define MID_GRADIENT_ENDCOLOR 4 +#define MID_GRADIENT_ANGLE 5 +#define MID_GRADIENT_BORDER 6 +#define MID_GRADIENT_XOFFSET 7 +#define MID_GRADIENT_YOFFSET 8 +#define MID_GRADIENT_STARTINTENSITY 9 +#define MID_GRADIENT_ENDINTENSITY 10 +#define MID_GRADIENT_STEPCOUNT 11 + +// XFillHatchItem +// Don't use 0 as it used for the whole struct +#define MID_FILLHATCH 1 +#define MID_HATCH_STYLE 2 +#define MID_HATCH_COLOR 3 +#define MID_HATCH_DISTANCE 4 +#define MID_HATCH_ANGLE 5 + +// XLineDashItem +// Don't use 0 as it used for the whole struct +#define MID_LINEDASH 1 +#define MID_LINEDASH_STYLE 2 +#define MID_LINEDASH_DOTS 3 +#define MID_LINEDASH_DOTLEN 4 +#define MID_LINEDASH_DASHES 5 +#define MID_LINEDASH_DASHLEN 6 +#define MID_LINEDASH_DISTANCE 7 + +#define MID_LEFT 3 + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/unomod.hxx b/include/svx/unomod.hxx new file mode 100644 index 000000000000..fe648ea4419f --- /dev/null +++ b/include/svx/unomod.hxx @@ -0,0 +1,62 @@ +/* -*- 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 SVX_UNOMOD_HXX +#define SVX_UNOMOD_HXX + +#include <com/sun/star/document/EventObject.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/container/XIndexReplace.hpp> +#include "svx/svxdllapi.h" + +class SdrHint; +class SdrModel; +class SdrModel; + +SVX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexReplace > SvxCreateNumRule( SdrModel* pModel ) throw(); + +class SVX_DLLPUBLIC SvxUnoDrawMSFactory : public ::com::sun::star::lang::XMultiServiceFactory +{ +public: + SvxUnoDrawMSFactory() throw() {}; + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL createInstance( const OUString& aServiceSpecifier ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL createInstanceWithArguments( const OUString& ServiceSpecifier, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& Arguments ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getAvailableServiceNames( ) throw(::com::sun::star::uno::RuntimeException); + + static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL createTextField( const OUString& aServiceSpecifier ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); + // internal + ::com::sun::star::uno::Sequence< OUString > + concatServiceNames( ::com::sun::star::uno::Sequence< OUString >& rServices1, + ::com::sun::star::uno::Sequence< OUString >& rServices2 ) throw(); + + /** fills the given EventObject from the given SdrHint. + @returns + true if the SdrHint could be translated to an EventObject<br> + false if not + */ + static sal_Bool createEvent( const SdrModel* pDoc, const SdrHint* pSdrHint, ::com::sun::star::document::EventObject& aEvent ); + +protected: + ~SvxUnoDrawMSFactory() {} +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/unomodel.hxx b/include/svx/unomodel.hxx new file mode 100644 index 000000000000..fcf203fa47e8 --- /dev/null +++ b/include/svx/unomodel.hxx @@ -0,0 +1,101 @@ +/* -*- 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 SVX_UNOMODEL_HXX +#define SVX_UNOMODEL_HXX + +#include <com/sun/star/drawing/XDrawPagesSupplier.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/ucb/XAnyCompareFactory.hpp> +#include <com/sun/star/io/XOutputStream.hpp> +#include <com/sun/star/io/XInputStream.hpp> +#include <sfx2/sfxbasemodel.hxx> +#include <svx/fmdmod.hxx> +#include "svx/svxdllapi.h" + +class SdrModel; + +class SVX_DLLPUBLIC SvxUnoDrawingModel : public SfxBaseModel, // implements SfxListener, OWEAKOBJECT & other + public SvxFmMSFactory, + public ::com::sun::star::drawing::XDrawPagesSupplier, + public ::com::sun::star::lang::XServiceInfo, + public ::com::sun::star::ucb::XAnyCompareFactory +{ + friend class SvxUnoDrawPagesAccess; + +private: + SdrModel* mpDoc; + + ::com::sun::star::uno::WeakReference< ::com::sun::star::drawing::XDrawPages > mxDrawPagesAccess; + + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxDashTable; + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxGradientTable; + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxHatchTable; + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxBitmapTable; + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxTransGradientTable; + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxMarkerTable; + + ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > maTypeSequence; + +public: + SvxUnoDrawingModel( SdrModel* pDoc ) throw(); + virtual ~SvxUnoDrawingModel() throw(); + + SdrModel* GetDoc() const { return mpDoc; } + + // XInterface + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + // XModel + virtual void SAL_CALL lockControllers( ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL unlockControllers( ) throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasControllersLocked( ) throw(::com::sun::star::uno::RuntimeException); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); + + // XDrawPagesSupplier + virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPages > SAL_CALL getDrawPages( ) throw(::com::sun::star::uno::RuntimeException); + + // XMultiServiceFactory ( SvxFmMSFactory ) + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL createInstance( const OUString& aServiceSpecifier ) throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getAvailableServiceNames( ) throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); + + // XAnyCompareFactory + virtual ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XAnyCompare > SAL_CALL createAnyCompareByName( const OUString& PropertyName ) throw(::com::sun::star::uno::RuntimeException); +}; + +SVX_DLLPUBLIC extern sal_Bool SvxDrawingLayerExport( SdrModel* pModel, const com::sun::star::uno::Reference<com::sun::star::io::XOutputStream>& xOut ); +SVX_DLLPUBLIC extern sal_Bool SvxDrawingLayerExport( SdrModel* pModel, const com::sun::star::uno::Reference<com::sun::star::io::XOutputStream>& xOut, const com::sun::star::uno::Reference< com::sun::star::lang::XComponent >& xComponent ); +SVX_DLLPUBLIC extern sal_Bool SvxDrawingLayerExport( SdrModel* pModel, const com::sun::star::uno::Reference<com::sun::star::io::XOutputStream>& xOut, const com::sun::star::uno::Reference< com::sun::star::lang::XComponent >& xComponent, const char* pExportService ); +SVX_DLLPUBLIC extern sal_Bool SvxDrawingLayerImport( SdrModel* pModel, const com::sun::star::uno::Reference<com::sun::star::io::XInputStream>& xInputStream ); +SVX_DLLPUBLIC extern sal_Bool SvxDrawingLayerImport( SdrModel* pModel, const com::sun::star::uno::Reference<com::sun::star::io::XInputStream>& xInputStream, const com::sun::star::uno::Reference< com::sun::star::lang::XComponent >& xComponent ); +SVX_DLLPUBLIC extern sal_Bool SvxDrawingLayerImport( SdrModel* pModel, const com::sun::star::uno::Reference<com::sun::star::io::XInputStream>& xInputStream, const com::sun::star::uno::Reference< com::sun::star::lang::XComponent >& xComponent, const char* pImportService ); + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/unopage.hxx b/include/svx/unopage.hxx new file mode 100644 index 000000000000..68150aff0312 --- /dev/null +++ b/include/svx/unopage.hxx @@ -0,0 +1,144 @@ +/* -*- 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 _SVX_UNOWPAGE_HXX +#define _SVX_UNOWPAGE_HXX + +#include <com/sun/star/lang/XComponent.hpp> +#include <cppuhelper/interfacecontainer.hxx> +#include <com/sun/star/lang/XTypeProvider.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/drawing/XDrawPage.hpp> +#include <com/sun/star/drawing/XShapeGrouper.hpp> +#include <com/sun/star/drawing/XShapeCombiner.hpp> +#include <com/sun/star/drawing/XShapeBinder.hpp> +#include <com/sun/star/lang/XUnoTunnel.hpp> +#include <cppuhelper/weak.hxx> +#include <cppuhelper/weakagg.hxx> +#include <svl/lstner.hxx> +#include <editeng/mutxhelp.hxx> +#include "svx/svxdllapi.h" + +#include <cppuhelper/implbase5.hxx> +#include <comphelper/servicehelper.hxx> + +#include <svx/unoprov.hxx> + +class SdrPage; +class SdrModel; +class SdrView; +class SdrPageView; +class SdrObject; +class SvxShape; +class SvxShapeGroup; +class SvxShapeConnector; + +/*********************************************************************** +* Macros fuer Umrechnung Twips<->100tel mm * +***********************************************************************/ +#define TWIPS_TO_MM(val) ((val * 127 + 36) / 72) +#define MM_TO_TWIPS(val) ((val * 72 + 63) / 127) + +/*********************************************************************** +* * +***********************************************************************/ +class SVX_DLLPUBLIC SvxDrawPage : public ::cppu::WeakAggImplHelper5< ::com::sun::star::drawing::XDrawPage, + ::com::sun::star::drawing::XShapeGrouper, + ::com::sun::star::lang::XServiceInfo, + ::com::sun::star::lang::XUnoTunnel, + ::com::sun::star::lang::XComponent>, + public SfxListener, + protected SvxMutexHelper +{ + protected: + cppu::OBroadcastHelper mrBHelper; + + SdrPage* mpPage; + SdrModel* mpModel; + SdrView* mpView; + + void _SelectObjectsInView( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& aShapes, SdrPageView* pPageView ) throw (); + void _SelectObjectInView( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape, SdrPageView* pPageView ) throw(); + + virtual void disposing() throw(); + + public: + SvxDrawPage( SdrPage* pPage ) throw(); + virtual ~SvxDrawPage() throw(); + + // Internals + SdrPage* GetSdrPage() const { return mpPage; } + void ChangeModel( SdrModel* pNewModel ); + + // Erzeugen eines SdrObjects und Einfugen in die SdrPage + SdrObject *CreateSdrObject( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(); + + // Typ und Inventor bestimmen + void GetTypeAndInventor( sal_uInt16& rType, sal_uInt32& rInventor, const OUString& aName ) const throw(); + + // Erzeugen eines SdrObjects anhand einer Description. Kann von + // abgeleiteten Klassen dazu benutzt werden, eigene Shapes zu + // unterstuetzen (z.B. Controls) + virtual SdrObject *_CreateSdrObject( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(); + + static SvxShape* CreateShapeByTypeAndInventor( sal_uInt16 nType, sal_uInt32 nInventor, SdrObject *pObj = NULL, SvxDrawPage *pPage = NULL ) throw(); + + // Die folgende Methode wird gerufen, wenn ein SvxShape-Objekt angelegt + // werden soll. abgeleitete Klassen koennen hier eine Ableitung oder + // ein ein SvxShape aggregierenden Objekt anlegen. + virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > _CreateShape( SdrObject *pObj ) const throw(); + + UNO3_GETIMPLEMENTATION_DECL( SvxDrawPage ) + + // SfxListener + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ); + + // XInterface + virtual void SAL_CALL release() throw(); + + // XShapes + virtual void SAL_CALL add( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL remove( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); + + // XElementAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType() throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException); + + // XIndexAccess + virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException) ; + virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + // XShapeGrouper + virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapeGroup > SAL_CALL group( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& xShapes ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL ungroup( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapeGroup >& aGroup ) throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); + + // XComponent + virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw(::com::sun::star::uno::RuntimeException); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/unopool.hxx b/include/svx/unopool.hxx new file mode 100644 index 000000000000..7db02b2a85dd --- /dev/null +++ b/include/svx/unopool.hxx @@ -0,0 +1,90 @@ +/* -*- 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 _SVX_UNOPOOL_HXX_ +#define _SVX_UNOPOOL_HXX_ + +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <comphelper/propertysethelper.hxx> +#include <cppuhelper/implbase4.hxx> +#include "svx/svxdllapi.h" + +class SdrModel; +class SfxItemPool; + +/** This class implements the service com.sun.star.drawing.Defaults. + It works on the SfxItemPool from the given model and the global + draw object item pool. + The class can work in a read only mode without a model. Derivated + classes can set a model on demand by overiding getModelPool(). +*/ +class SVX_DLLPUBLIC SvxUnoDrawPool : public ::cppu::OWeakAggObject, + public ::com::sun::star::lang::XServiceInfo, + public ::com::sun::star::lang::XTypeProvider, + public comphelper::PropertySetHelper +{ +public: + SvxUnoDrawPool( SdrModel* pModel, sal_Int32 nServiceId ) throw(); + + /** deprecated */ + SvxUnoDrawPool( SdrModel* pModel ) throw(); + virtual ~SvxUnoDrawPool() throw(); + + /** This returns the item pool from the given model, or the default pool if there is no model and bReadOnly is true. + If bReadOnly is false and there is no model the default implementation returns NULL. + */ + virtual SfxItemPool* getModelPool( sal_Bool bReadOnly ) throw(); + + // overiden helpers from comphelper::PropertySetHelper + virtual void _setPropertyValues( const comphelper::PropertyMapEntry** ppEntries, const ::com::sun::star::uno::Any* pValues ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException ); + virtual void _getPropertyValues( const comphelper::PropertyMapEntry** ppEntries, ::com::sun::star::uno::Any* pValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException ); + + virtual void _getPropertyStates( const comphelper::PropertyMapEntry** ppEntries, ::com::sun::star::beans::PropertyState* pStates ) throw(::com::sun::star::beans::UnknownPropertyException ); + virtual void _setPropertyToDefault( const comphelper::PropertyMapEntry* pEntry ) throw(::com::sun::star::beans::UnknownPropertyException ); + virtual ::com::sun::star::uno::Any _getPropertyDefault( const comphelper::PropertyMapEntry* pEntry ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException ); + + // XInterface + virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException ); + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw( ::com::sun::star::uno::RuntimeException ); + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException ); + +protected: + void init(); + + virtual void getAny( SfxItemPool* pPool, const comphelper::PropertyMapEntry* pEntry, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException); + virtual void putAny( SfxItemPool* pPool, const comphelper::PropertyMapEntry* pEntry, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::IllegalArgumentException); + +protected: + SdrModel* mpModel; + SfxItemPool* mpDefaultsPool; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/unoprov.hxx b/include/svx/unoprov.hxx new file mode 100644 index 000000000000..0414e1228211 --- /dev/null +++ b/include/svx/unoprov.hxx @@ -0,0 +1,122 @@ +/* -*- 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 SVX_UNOPROV_HXX +#define SVX_UNOPROV_HXX + +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/uno/Sequence.hxx> +#include <svl/itemprop.hxx> +#include "svx/svxdllapi.h" + +class SvxItemPropertySet; +class SfxItemPool; + +/*********************************************************************** +* class UHashMap * +***********************************************************************/ + +#define UHASHMAP_NOTFOUND sal::static_int_cast< sal_uInt32 >(~0) +class UHashMap +{ + UHashMap() {} +public: + static sal_uInt32 getId( const OUString& rCompareString ); + static OUString getNameFromId (sal_uInt32 nId); + static ::com::sun::star::uno::Sequence< OUString > getServiceNames(); +}; + +/*********************************************************************** +* Soriterer * +***********************************************************************/ + +#define SVXMAP_SHAPE 0 +#define SVXMAP_CONNECTOR 1 +#define SVXMAP_DIMENSIONING 2 +#define SVXMAP_CIRCLE 3 +#define SVXMAP_POLYPOLYGON 4 +#define SVXMAP_POLYPOLYGONBEZIER 5 +#define SVXMAP_GRAPHICOBJECT 6 +#define SVXMAP_3DSCENEOBJECT 7 +#define SVXMAP_3DCUBEOBJEKT 8 +#define SVXMAP_3DSPHEREOBJECT 9 +#define SVXMAP_3DLATHEOBJECT 10 +#define SVXMAP_3DEXTRUDEOBJECT 11 +#define SVXMAP_3DPOLYGONOBJECT 12 +#define SVXMAP_ALL 13 +#define SVXMAP_GROUP 14 +#define SVXMAP_CAPTION 15 +#define SVXMAP_OLE2 16 +#define SVXMAP_PLUGIN 17 +#define SVXMAP_FRAME 18 +#define SVXMAP_APPLET 19 +#define SVXMAP_CONTROL 20 +#define SVXMAP_TEXT 21 +#define SVXMAP_CUSTOMSHAPE 22 +#define SVXMAP_MEDIA 23 +#define SVXMAP_TABLE 24 +#define SVXMAP_PAGE 25 +#define SVXMAP_END 26 // last+1 ! +/*********************************************************************** +* SvxUnoPropertyMapProvider * +***********************************************************************/ +class SVX_DLLPUBLIC SvxUnoPropertyMapProvider +{ + SfxItemPropertyMapEntry* aMapArr[SVXMAP_END]; + SvxItemPropertySet* aSetArr[SVXMAP_END]; +public: + SvxUnoPropertyMapProvider(); + ~SvxUnoPropertyMapProvider(); + const SfxItemPropertyMapEntry* GetMap(sal_uInt16 nPropertyId); + const SvxItemPropertySet* GetPropertySet(sal_uInt16 nPropertyId, SfxItemPool& rPool); +}; + +/*********************************************************************** +* Globals * +***********************************************************************/ + +const sal_Int16 OBJ_OLE2_APPLET = 100; +const sal_Int16 OBJ_OLE2_PLUGIN = 101; + +#define E3D_INVENTOR_FLAG (0x80000000) + +#include <editeng/unoipset.hxx> + +/*********************************************************************** +* class SvxPropertySetInfoPool * +***********************************************************************/ + +const sal_Int32 SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS = 0; +const sal_Int32 SVXUNO_SERVICEID_COM_SUN_STAR_DRAWING_DEFAULTS_WRITER = 1; +const sal_Int32 SVXUNO_SERVICEID_LASTID = 1; + +namespace comphelper { class PropertySetInfo; } + +class SvxPropertySetInfoPool +{ +public: + SVX_DLLPUBLIC static comphelper::PropertySetInfo* getOrCreate( sal_Int32 nServiceId ) throw(); + +private: + static comphelper::PropertySetInfo* mpInfos[SVXUNO_SERVICEID_LASTID+1]; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/unoshape.hxx b/include/svx/unoshape.hxx new file mode 100644 index 000000000000..23cbf8811a3a --- /dev/null +++ b/include/svx/unoshape.hxx @@ -0,0 +1,868 @@ +/* -*- 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 _SVX_UNOSHAPE_HXX +#define _SVX_UNOSHAPE_HXX + +#include <com/sun/star/document/XActionLockable.hpp> +#include <com/sun/star/drawing/XEnhancedCustomShapeDefaulter.hpp> +#include <com/sun/star/drawing/XGluePointsSupplier.hpp> +#include <com/sun/star/drawing/XShape.hpp> +#include <com/sun/star/lang/XComponent.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/beans/XPropertyState.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/uno/XAggregation.hpp> +#include <com/sun/star/lang/XTypeProvider.hpp> +#include <com/sun/star/lang/XUnoTunnel.hpp> +#include <com/sun/star/awt/Point.hpp> +#include <com/sun/star/drawing/PolygonKind.hpp> +#include <com/sun/star/container/XNamed.hpp> +#include <com/sun/star/container/XChild.hpp> +#include <com/sun/star/beans/XMultiPropertySet.hpp> +#include <com/sun/star/beans/XMultiPropertyStates.hpp> +#include <sal/types.h> +#include <tools/weakbase.hxx> +#include <svl/lstner.hxx> +#include <editeng/unoipset.hxx> +#include <cppuhelper/weak.hxx> +#include <cppuhelper/weakagg.hxx> +#include <cppuhelper/interfacecontainer.h> +#include <osl/mutex.hxx> +#include "svx/svxdllapi.h" +#include <rtl/ref.hxx> +#include <com/sun/star/uno/Any.hxx> + +#include <svx/svdouno.hxx> + +#include <comphelper/servicehelper.hxx> + +#include <cppuhelper/implbase1.hxx> +#include <cppuhelper/implbase12.hxx> + +#include <svx/unoprov.hxx> + +class SfxItemSet; +class SdrModel; +class SvxDrawPage; +class SvGlobalName; +class Pair; + +// Dimension arrows change size/position on save/reload (#i59051#) +namespace basegfx + { + class B2DPolyPolygon; + } // end of namespace basegfx + +class SvxShapeMutex +{ +protected: + ::osl::Mutex maMutex; +}; + +struct SvxShapeImpl; +class SvxShapeMaster; +class SvxItemPropertySet; +class SfxItemSet; + +void SVX_DLLPUBLIC SvxItemPropertySet_setPropertyValue( const SvxItemPropertySet& rPropSet, const SfxItemPropertySimpleEntry* pMap, + const com::sun::star::uno::Any& rVal, SfxItemSet& rSet ); + +com::sun::star::uno::Any SVX_DLLPUBLIC SvxItemPropertySet_getPropertyValue( const SvxItemPropertySet& rPropSet, const SfxItemPropertySimpleEntry* pMap, const SfxItemSet& rSet ); + + +// WARNING: if you update the supported interfaces, +// also update SvxShape::_getTypes() +typedef ::cppu::WeakAggImplHelper12< + ::com::sun::star::drawing::XShape, + ::com::sun::star::lang::XComponent, + ::com::sun::star::beans::XPropertySet, + ::com::sun::star::beans::XMultiPropertySet, + ::com::sun::star::beans::XPropertyState, + ::com::sun::star::lang::XUnoTunnel, + ::com::sun::star::container::XNamed, + ::com::sun::star::drawing::XGluePointsSupplier, + ::com::sun::star::container::XChild, + ::com::sun::star::lang::XServiceInfo, + ::com::sun::star::document::XActionLockable, + ::com::sun::star::beans::XMultiPropertyStates> SvxShape_UnoImplHelper; + +class SVX_DLLPUBLIC SvxShape : public SvxShape_UnoImplHelper, + public SfxListener, + public SvxShapeMutex +{ +private: + ::com::sun::star::awt::Size maSize; + ::com::sun::star::awt::Point maPosition; + OUString maShapeType; + OUString maShapeName; + + /** these members are used to optimize XMultiProperty calls */ + SvxShapeImpl* mpImpl; + bool mbIsMultiPropertyCall; + + ::com::sun::star::uno::WeakReference< ::com::sun::star::container::XIndexContainer > mxGluePoints; + +protected: + friend class SvxDrawPage; + friend class SvxShapeConnector; + friend class SdXShape; + + const SvxItemPropertySet* mpPropSet; + const SfxItemPropertyMapEntry* maPropMapEntries; + + ::tools::WeakReference< SdrObject > mpObj; + SdrModel* mpModel; + // Umrechnungen fuer den Writer, der in TWIPS arbeitet + void ForceMetricToItemPoolMetric(Pair& rPoint) const throw(); + void ForceMetricTo100th_mm(Pair& rPoint) const throw(); + // Dimension arrows change size/position on save/reload (#i59051#) + void ForceMetricToItemPoolMetric(basegfx::B2DPolyPolygon& rPolyPolygon) const throw(); + void ForceMetricTo100th_mm(basegfx::B2DPolyPolygon& rPolyPolygon) const throw(); + + ::com::sun::star::uno::Any GetAnyForItem( SfxItemSet& aSet, const SfxItemPropertySimpleEntry* pMap ) const; + + sal_Bool SAL_CALL SetFillAttribute( sal_Int32 nWID, const OUString& rName ); + + /** called from the XActionLockable interface methods on initial locking */ + virtual void lock(); + + /** called from the XActionLockable interface methods on final unlock */ + virtual void unlock(); + + /** used from the XActionLockable interface */ + sal_uInt16 mnLockCount; + + const SfxItemPropertyMapEntry* getPropertyMapEntries() const { return maPropMapEntries; } + + void updateShapeKind(); + void endSetPropertyValues(); + + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyStateImpl( const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::beans::PropertyState& rState ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); + virtual bool setPropertyToDefaultImpl( const SfxItemPropertySimpleEntry* pProperty ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); + +public: + SvxShape( SdrObject* pObj ) throw (); + SvxShape( SdrObject* pObject, const SfxItemPropertyMapEntry* pEntries, const SvxItemPropertySet* pPropertySet ) throw (); + SvxShape() throw (); + virtual ~SvxShape() throw (); + + // Internals + void ObtainSettingsFromPropertySet(const SvxItemPropertySet& rPropSet); + virtual void Create( SdrObject* pNewOpj, SvxDrawPage* pNewPage = NULL ); + /** takes the ownership of the SdrObject. + + When the shape is disposed, and it has the ownership of its associated SdrObject, then + it will delete this object. + */ + void TakeSdrObjectOwnership(); + bool HasSdrObjectOwnership() const; + + void ChangeModel( SdrModel* pNewModel ); + + void InvalidateSdrObject() { mpObj.reset( NULL ); }; + const SvxItemPropertySet& GetPropertySet() { return *mpPropSet; } + SdrObject* GetSdrObject() const {return mpObj.get();} + void SetShapeType( const OUString& ShapeType ) { maShapeType = ShapeType; } + ::com::sun::star::uno::Any GetBitmap( sal_Bool bMetaFile = sal_False ) const throw (); + + ::svx::PropertyChangeNotifier& getShapePropertyChangeNotifier(); + + void setShapeKind( sal_uInt32 nKind ); + sal_uInt32 getShapeKind() const; + + // styles need this + static sal_Bool SAL_CALL SetFillAttribute( sal_Int32 nWID, const OUString& rName, SfxItemSet& rSet, SdrModel* pModel ); + static sal_Bool SAL_CALL SetFillAttribute( sal_Int32 nWID, const OUString& rName, SfxItemSet& rSet ); + + /** same as SetFillAttribute but for property names instead of which ids, + and the property found is returned instead of set at the object + directly. + */ + + UNO3_GETIMPLEMENTATION_DECL( SvxShape ) + + // access methods for master objects + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL _getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); + void SAL_CALL _setPropertyValue( const OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + ::com::sun::star::uno::Any SAL_CALL _getPropertyValue( const OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + ::com::sun::star::beans::PropertyState SAL_CALL _getPropertyState( const OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); + void SAL_CALL _setPropertyToDefault( const OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); + ::com::sun::star::uno::Any SAL_CALL _getPropertyDefault( const OUString& aPropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + ::com::sun::star::uno::Sequence< OUString > SAL_CALL _getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); + + ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL _getTypes( ) throw(::com::sun::star::uno::RuntimeException); + + void setMaster( SvxShapeMaster* pMaster ); + + // SfxListener + virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) throw (); + + // XAggregation + virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type& aType ) throw (::com::sun::star::uno::RuntimeException); + + // XNamed + virtual OUString SAL_CALL getName( ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setName( const OUString& aName ) throw(::com::sun::star::uno::RuntimeException); + + // XShapeDescriptor + virtual OUString SAL_CALL getShapeType() throw(::com::sun::star::uno::RuntimeException); + + // XShape + virtual ::com::sun::star::awt::Point SAL_CALL getPosition() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPosition( const ::com::sun::star::awt::Point& aPosition ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::awt::Size SAL_CALL getSize() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setSize( const ::com::sun::star::awt::Size& aSize ) throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::uno::RuntimeException); + + // XComponent + virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw(::com::sun::star::uno::RuntimeException); + + // XPropertySet + virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addPropertyChangeListener( const OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removePropertyChangeListener( const OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addVetoableChangeListener( const OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeVetoableChangeListener( const OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + // XMultiPropertySet + virtual void SAL_CALL setPropertyValues( const ::com::sun::star::uno::Sequence< OUString >& aPropertyNames, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aValues ) throw (::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL getPropertyValues( const ::com::sun::star::uno::Sequence< OUString >& aPropertyNames ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addPropertiesChangeListener( const ::com::sun::star::uno::Sequence< OUString >& aPropertyNames, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removePropertiesChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL firePropertiesChangeEvent( const ::com::sun::star::uno::Sequence< OUString >& aPropertyNames, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener ) throw (::com::sun::star::uno::RuntimeException); + + // XPropertyState + virtual ::com::sun::star::beans::PropertyState SAL_CALL getPropertyState( const OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyState > SAL_CALL getPropertyStates( const ::com::sun::star::uno::Sequence< OUString >& aPropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPropertyToDefault( const OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getPropertyDefault( const OUString& aPropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + // XMultiPropertyStates + virtual void SAL_CALL setAllPropertiesToDefault() + throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPropertiesToDefault( + const ::com::sun::star::uno::Sequence< + OUString >& aPropertyNames ) + throw (::com::sun::star::beans::UnknownPropertyException, + ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > + SAL_CALL getPropertyDefaults( + const ::com::sun::star::uno::Sequence< + OUString >& aPropertyNames ) + throw (::com::sun::star::beans::UnknownPropertyException, + ::com::sun::star::lang::WrappedTargetException, + ::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException); + + // XGluePointsSupplier + virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > SAL_CALL getGluePoints( ) throw(::com::sun::star::uno::RuntimeException); + + // XChild + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getParent( ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setParent( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& Parent ) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); + + // XActionLockable + virtual sal_Bool SAL_CALL isActionLocked( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addActionLock( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeActionLock( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setActionLocks( sal_Int16 nLock ) throw (::com::sun::star::uno::RuntimeException); + virtual sal_Int16 SAL_CALL resetActionLocks( ) throw (::com::sun::star::uno::RuntimeException); + +private: + /** initializes SdrObj-dependent members. Only to be called when GetSdrObject() != NULL + */ + SVX_DLLPRIVATE void impl_initFromSdrObject(); + /// CTOR-Impl + SVX_DLLPRIVATE void impl_construct(); +}; + +#include <editeng/unotext.hxx> + +class SVX_DLLPUBLIC SvxShapeText : public SvxShape, public SvxUnoTextBase +{ +protected: + /** called from the XActionLockable interface methods on initial locking */ + virtual void lock(); + + /** called from the XActionLockable interface methods on final unlock */ + virtual void unlock(); + +protected: + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyStateImpl( const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::beans::PropertyState& rState ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); + virtual bool setPropertyToDefaultImpl( const SfxItemPropertySimpleEntry* pProperty ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); + +public: + SvxShapeText( SdrObject* pObj ) throw (); + SvxShapeText( SdrObject* pObject, const SfxItemPropertyMapEntry* pPropertyMap, const SvxItemPropertySet* pPropertySet ) throw (); + virtual ~SvxShapeText() throw (); + + virtual void Create( SdrObject* pNewOpj, SvxDrawPage* pNewPage = NULL ); + + // XInterface + virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException); + + // ::com::sun::star::text::XTextRange + virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > SAL_CALL getStart() throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > SAL_CALL getEnd() throw(::com::sun::star::uno::RuntimeException); + virtual OUString SAL_CALL getString() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setString( const OUString& aString ) throw(::com::sun::star::uno::RuntimeException); + + // XUnoTunnel + virtual sal_Int64 SAL_CALL getSomething( const ::com::sun::star::uno::Sequence< sal_Int8 >& aIdentifier ) throw (::com::sun::star::uno::RuntimeException); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); +}; + +class SvxShapeRect : public SvxShapeText +{ +public: + SvxShapeRect( SdrObject* pObj ) throw (); + virtual ~SvxShapeRect() throw (); + + // XInterface + virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); +}; +#include <com/sun/star/drawing/XShapes.hpp> +#include <com/sun/star/drawing/XShapeGroup.hpp> +#include <com/sun/star/container/XIndexAccess.hpp> + +/*********************************************************************** +* * +***********************************************************************/ +class SvxShapeGroup : public SvxShape, + public ::com::sun::star::drawing::XShapeGroup, + public ::com::sun::star::drawing::XShapes +{ +private: + rtl::Reference< SvxDrawPage> mxPage; + +public: + SvxShapeGroup( SdrObject* pObj,SvxDrawPage* pDrawPage ) throw (); + virtual ~SvxShapeGroup() throw (); + + virtual void Create( SdrObject* pNewOpj, SvxDrawPage* pNewPage = NULL ); + + // XInterface + virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + // XShapes + virtual void SAL_CALL add( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL remove( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); + + // XElementAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType() throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException); + + // XIndexAccess + virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException) ; + virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + // XShapeDescriptor + virtual OUString SAL_CALL getShapeType() throw(::com::sun::star::uno::RuntimeException); + + // XShape + virtual ::com::sun::star::awt::Point SAL_CALL getPosition() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPosition( const ::com::sun::star::awt::Point& aPosition ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::awt::Size SAL_CALL getSize() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setSize( const ::com::sun::star::awt::Size& aSize ) throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::uno::RuntimeException); + + // XShapeGroup + virtual void SAL_CALL enterGroup( ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL leaveGroup( ) throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); +}; +#include <com/sun/star/drawing/XConnectorShape.hpp> + +/*********************************************************************** +* * +***********************************************************************/ +class SvxShapeConnector : public ::com::sun::star::drawing::XConnectorShape, + public SvxShapeText +{ +public: + SvxShapeConnector( SdrObject* pObj ) throw(); + virtual ~SvxShapeConnector() throw(); + + // XInterface + virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + // XShapeDescriptor + virtual OUString SAL_CALL getShapeType() throw(::com::sun::star::uno::RuntimeException); + + // XShape + virtual ::com::sun::star::awt::Point SAL_CALL getPosition() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPosition( const ::com::sun::star::awt::Point& aPosition ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::awt::Size SAL_CALL getSize() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setSize( const ::com::sun::star::awt::Size& aSize ) throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::uno::RuntimeException); + + // XConnectorShape + virtual void SAL_CALL connectStart( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XConnectableShape >& xShape, ::com::sun::star::drawing::ConnectionType nPos ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL connectEnd( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XConnectableShape >& xShape, ::com::sun::star::drawing::ConnectionType nPos ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL disconnectBegin( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XConnectableShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL disconnectEnd( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XConnectableShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); +}; +#include <com/sun/star/drawing/XControlShape.hpp> + +/*********************************************************************** +* * +***********************************************************************/ +class SVX_DLLPUBLIC SvxShapeControl : public ::com::sun::star::drawing::XControlShape, public SvxShapeText +{ +protected: + using SvxUnoTextRangeBase::setPropertyValue; + using SvxUnoTextRangeBase::getPropertyValue; + +public: + SvxShapeControl( SdrObject* pObj ) throw(); + virtual ~SvxShapeControl() throw(); + + // XInterface + virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + // XPropertySet + virtual void SAL_CALL setPropertyValue( const OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getPropertyValue( const OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + // XPropertyState + virtual ::com::sun::star::beans::PropertyState SAL_CALL getPropertyState( const OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPropertyToDefault( const OUString& PropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getPropertyDefault( const OUString& aPropertyName ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + // XShapeDescriptor + virtual OUString SAL_CALL getShapeType() throw(::com::sun::star::uno::RuntimeException); + + // XShape + virtual ::com::sun::star::awt::Point SAL_CALL getPosition() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPosition( const ::com::sun::star::awt::Point& aPosition ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::awt::Size SAL_CALL getSize() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setSize( const ::com::sun::star::awt::Size& aSize ) throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::uno::RuntimeException); + + // XControlShape + virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > SAL_CALL getControl() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& xControl ) throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); +}; + +/*********************************************************************** +* * +***********************************************************************/ +class SvxShapeDimensioning : public SvxShapeText +{ +public: + SvxShapeDimensioning( SdrObject* pObj ) throw(); + virtual ~SvxShapeDimensioning() throw(); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); +}; + +/*********************************************************************** +* * +***********************************************************************/ +class SvxShapeCircle : public SvxShapeText +{ +public: + SvxShapeCircle( SdrObject* pObj ) throw (); + virtual ~SvxShapeCircle() throw (); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); +}; + +/*********************************************************************** +* * +***********************************************************************/ + +// #i118485# changed parent to SvxShapeText to allow Text handling over UNO API +class SVX_DLLPUBLIC SvxOle2Shape : public SvxShapeText +{ +protected: + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + void resetModifiedState(); + + const SvGlobalName GetClassName_Impl(OUString& rHexCLSID); +public: + SvxOle2Shape( SdrObject* pObj ) throw(); + SvxOle2Shape( SdrObject* pObject, const SfxItemPropertyMapEntry* pPropertyMap, const SvxItemPropertySet* pPropertySet ) throw (); + virtual ~SvxOle2Shape() throw(); + + sal_Bool createObject( const SvGlobalName &aClassName ); + + sal_Bool createLink( const OUString& aLinkURL ); + + // XInterface + virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); +}; + + +#include <basegfx/polygon/b2dpolypolygon.hxx> + +/*********************************************************************** +* * +***********************************************************************/ +class SvxShapePolyPolygon : public SvxShapeText +{ +private: + ::com::sun::star::drawing::PolygonKind mePolygonKind; + +protected: + using SvxUnoTextRangeBase::setPropertyValue; + using SvxUnoTextRangeBase::getPropertyValue; + + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + +public: + SvxShapePolyPolygon( SdrObject* pObj , ::com::sun::star::drawing::PolygonKind eNew = com::sun::star::drawing::PolygonKind_LINE ) throw(com::sun::star::lang::IllegalArgumentException, com::sun::star::beans::PropertyVetoException); + virtual ~SvxShapePolyPolygon() throw(); + + // Local support functions + ::com::sun::star::drawing::PolygonKind GetPolygonKind() const throw(); + void SetPolygon(const basegfx::B2DPolyPolygon& rNew) throw(); + basegfx::B2DPolyPolygon GetPolygon() const throw(); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); +}; + +/*********************************************************************** +* * +***********************************************************************/ + +class SvxShapePolyPolygonBezier : public SvxShapeText +{ +private: + ::com::sun::star::drawing::PolygonKind mePolygonKind; + +protected: + using SvxUnoTextRangeBase::setPropertyValue; + using SvxUnoTextRangeBase::getPropertyValue; + +public: + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + SvxShapePolyPolygonBezier( SdrObject* pObj , ::com::sun::star::drawing::PolygonKind eNew = com::sun::star::drawing::PolygonKind_PATHLINE) throw(); + virtual ~SvxShapePolyPolygonBezier() throw(); + + // Local support functions + ::com::sun::star::drawing::PolygonKind GetPolygonKind() const throw(); + void SetPolygon(const basegfx::B2DPolyPolygon & rNew) throw(); + basegfx::B2DPolyPolygon GetPolygon() const throw(); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); +}; + +/*********************************************************************** +* * +***********************************************************************/ +class SvxGraphicObject : public SvxShapeText +{ +protected: + using SvxUnoTextRangeBase::setPropertyValue; + using SvxUnoTextRangeBase::getPropertyValue; + + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + +public: + SvxGraphicObject( SdrObject* pObj ) throw(); + virtual ~SvxGraphicObject() throw(); +}; + +/*********************************************************************** +* * +***********************************************************************/ +class Svx3DSceneObject : public ::com::sun::star::drawing::XShapes, public SvxShape +{ +private: + rtl::Reference< SvxDrawPage > mxPage; + +protected: + using SvxShape::setPropertyValue; + using SvxShape::getPropertyValue; + +public: + Svx3DSceneObject( SdrObject* pObj, SvxDrawPage* pDrawPage ) throw(); + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + virtual ~Svx3DSceneObject() throw(); + + virtual void Create( SdrObject* pNewOpj, SvxDrawPage* pNewPage = NULL ); + + // XInterface + virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + // XShapes + virtual void SAL_CALL add( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL remove( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); + + // XElementAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType( ) throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasElements( ) throw(::com::sun::star::uno::RuntimeException); + + // XIndexAccess + virtual sal_Int32 SAL_CALL getCount( ) throw(::com::sun::star::uno::RuntimeException) ; + virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); +}; + +/*********************************************************************** +* * +***********************************************************************/ +class Svx3DCubeObject : public SvxShape +{ +protected: + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + +public: + Svx3DCubeObject( SdrObject* pObj ) throw(); + virtual ~Svx3DCubeObject() throw(); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); +}; + +/*********************************************************************** +* * +***********************************************************************/ +class Svx3DSphereObject : public SvxShape +{ +public: + Svx3DSphereObject( SdrObject* pObj ) throw(); +protected: + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + virtual ~Svx3DSphereObject() throw(); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); +}; + +/*********************************************************************** +* * +***********************************************************************/ +class Svx3DLatheObject : public SvxShape +{ +protected: + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + +public: + Svx3DLatheObject( SdrObject* pObj ) throw(); + virtual ~Svx3DLatheObject() throw(); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); +}; + +/*********************************************************************** +* * +***********************************************************************/ +class Svx3DExtrudeObject : public SvxShape +{ +public: + Svx3DExtrudeObject( SdrObject* pObj ) throw(); +protected: + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + virtual ~Svx3DExtrudeObject() throw(); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); +}; + +/*********************************************************************** +* * +***********************************************************************/ +class Svx3DPolygonObject : public SvxShape +{ +protected: + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + +public: + Svx3DPolygonObject( SdrObject* pObj ) throw(); + virtual ~Svx3DPolygonObject() throw(); + + // XServiceInfo + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException); +}; + +/*********************************************************************** +* * +***********************************************************************/ +typedef ::cppu::WeakAggImplHelper1< + ::com::sun::star::drawing::XEnhancedCustomShapeDefaulter + > SvxShape_UnoImplHelper1; + +class SVX_DLLPUBLIC SvxCustomShape : public SvxShapeText, public SvxShape_UnoImplHelper1 +{ +private: + rtl::Reference< SvxDrawPage > mxPage; + +protected: + using SvxUnoTextRangeBase::setPropertyValue; + using SvxUnoTextRangeBase::getPropertyValue; + +public: + SvxCustomShape( SdrObject* pObj ) throw (); + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + + virtual ~SvxCustomShape() throw (); + + virtual void Create( SdrObject* pNewOpj, SvxDrawPage* pNewPage = NULL ); + + // XInterface + virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL acquire() throw(); + virtual void SAL_CALL release() throw(); + + // XShapeDescriptor + virtual OUString SAL_CALL getShapeType() throw(::com::sun::star::uno::RuntimeException); + + // XShape + virtual ::com::sun::star::awt::Point SAL_CALL getPosition() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setPosition( const ::com::sun::star::awt::Point& aPosition ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::awt::Size SAL_CALL getSize() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setSize( const ::com::sun::star::awt::Size& aSize ) throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::uno::RuntimeException); + + // XPropertySet + void SAL_CALL setPropertyValue( const OUString& aPropertyName, const ::com::sun::star::uno::Any& aValue ) throw( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException, com::sun::star::beans::PropertyVetoException, com::sun::star::lang::IllegalArgumentException); + + // XTypeProvider + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId( ) throw(::com::sun::star::uno::RuntimeException); + + //XEnhancedCustomShapeDefaulter + virtual void SAL_CALL createCustomShapeDefaults( const OUString& rShapeType ) throw (::com::sun::star::uno::RuntimeException); +}; + +/*********************************************************************** +* * +***********************************************************************/ + +class SvxMediaShape : public SvxShape +{ +public: + SvxMediaShape( SdrObject* pObj ) throw(); + virtual ~SvxMediaShape() throw(); + +protected: + // overide these for special property handling in subcasses. Return true if property is handled + virtual bool setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual bool getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/unoshcol.hxx b/include/svx/unoshcol.hxx new file mode 100644 index 000000000000..7db908c88a92 --- /dev/null +++ b/include/svx/unoshcol.hxx @@ -0,0 +1,92 @@ +/* -*- 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 _SVX_UNOSHGRP_HXX +#define _SVX_UNOSHGRP_HXX + +#include <com/sun/star/lang/XComponent.hpp> +#include <com/sun/star/drawing/XShapes.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <osl/mutex.hxx> +#include <cppuhelper/interfacecontainer.hxx> + +#include <cppuhelper/implbase3.hxx> +#include "svx/svxdllapi.h" + +class SvxShapeCollectionMutex +{ +public: + ::osl::Mutex maMutex; +}; + +SVX_DLLPUBLIC com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SvxShapeCollection_NewInstance() throw(); + +/*********************************************************************** +* * +***********************************************************************/ +class SVX_DLLPUBLIC SvxShapeCollection : public ::cppu::WeakAggImplHelper3< + ::com::sun::star::drawing::XShapes, + ::com::sun::star::lang::XServiceInfo, + ::com::sun::star::lang::XComponent + >, + public SvxShapeCollectionMutex +{ +private: + cppu::OInterfaceContainerHelper maShapeContainer; + + cppu::OBroadcastHelper mrBHelper; + + SVX_DLLPRIVATE virtual void disposing() throw(); + +public: + SvxShapeCollection() throw(); + virtual ~SvxShapeCollection() throw(); + + // XInterface + virtual void SAL_CALL release() throw(); + + // XComponent + virtual void SAL_CALL dispose() throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw(::com::sun::star::uno::RuntimeException); + + // XIndexAccess + virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException) ; + virtual ::com::sun::star::uno::Any SAL_CALL getByIndex( sal_Int32 Index ) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + + // XElementAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType() throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException); + + // XShapes + virtual void SAL_CALL add( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL remove( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& xShape ) throw(::com::sun::star::uno::RuntimeException); + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException); + static com::sun::star::uno::Sequence< OUString > getSupportedServiceNames_Static(); + static OUString getImplementationName_Static(); +}; + +::com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL SvxShapeCollection_createInstance( const com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rSMgr ); +#endif + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/unoshprp.hxx b/include/svx/unoshprp.hxx new file mode 100644 index 000000000000..c39854f76b97 --- /dev/null +++ b/include/svx/unoshprp.hxx @@ -0,0 +1,537 @@ +/* -*- 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 _SVX_UNOSHPRP_HXX +#define _SVX_UNOSHPRP_HXX + +#include <com/sun/star/container/XNameContainer.hpp> +#include <com/sun/star/drawing/PointSequence.hpp> +#include <com/sun/star/drawing/PointSequenceSequence.hpp> +#include <com/sun/star/uno/Sequence.hxx> +#include <com/sun/star/drawing/RectanglePoint.hpp> +#include <com/sun/star/awt/XBitmap.hpp> +#include <com/sun/star/awt/Gradient.hpp> +#include <com/sun/star/drawing/Hatch.hpp> +#include <com/sun/star/drawing/FillStyle.hpp> +#include <com/sun/star/drawing/LineCap.hpp> +#include <com/sun/star/drawing/LineDash.hpp> +#include <com/sun/star/drawing/LineJoint.hpp> +#include <com/sun/star/drawing/LineStyle.hpp> +#include <com/sun/star/beans/PropertyAttribute.hpp> +#include <com/sun/star/awt/Rectangle.hpp> +#include <com/sun/star/drawing/TextAnimationDirection.hpp> +#include <com/sun/star/drawing/TextAnimationKind.hpp> +#include <com/sun/star/drawing/TextFitToSizeType.hpp> +#include <com/sun/star/drawing/TextVerticalAdjust.hpp> +#include <com/sun/star/drawing/TextHorizontalAdjust.hpp> +#include <com/sun/star/drawing/ConnectorType.hpp> +#include <com/sun/star/drawing/XShape.hpp> +#include <com/sun/star/drawing/MeasureKind.hpp> +#include <com/sun/star/drawing/MeasureTextHorzPos.hpp> +#include <com/sun/star/drawing/MeasureTextVertPos.hpp> +#include <com/sun/star/drawing/HomogenMatrix3.hpp> +#include <com/sun/star/drawing/CircleKind.hpp> +#include <com/sun/star/drawing/PolygonKind.hpp> +#include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp> +#include <com/sun/star/drawing/ColorMode.hpp> +#include <com/sun/star/drawing/HomogenMatrix.hpp> +#include <com/sun/star/drawing/Direction3D.hpp> +#include <com/sun/star/drawing/ProjectionMode.hpp> +#include <com/sun/star/drawing/ShadeMode.hpp> +#include <com/sun/star/drawing/Position3D.hpp> +#include <com/sun/star/drawing/NormalsKind.hpp> +#include <com/sun/star/drawing/TextureKind.hpp> +#include <com/sun/star/drawing/TextureMode.hpp> +#include <com/sun/star/drawing/TextureProjectionMode.hpp> +#include <com/sun/star/drawing/PolyPolygonShape3D.hpp> +#include <com/sun/star/text/GraphicCrop.hpp> +#include <com/sun/star/drawing/BitmapMode.hpp> +#include <com/sun/star/drawing/CameraGeometry.hpp> +#include <com/sun/star/text/WritingMode.hpp> +#include <com/sun/star/graphic/XGraphic.hpp> + +#include <svx/unoprov.hxx> +#include <editeng/unoprnms.hxx> +#include <svx/unomid.hxx> +#include <editeng/unotext.hxx> +#include <svl/itemprop.hxx> + +#include <svx/svxids.hrc> + +#ifndef SEQTYPE + #if defined(__SUNPRO_CC) && (__SUNPRO_CC == 0x500) + #define SEQTYPE(x) (new ::com::sun::star::uno::Type( x )) + #else + #define SEQTYPE(x) &(x) + #endif +#endif + +#define OWN_ATTR_VALUE_START_TEXT (OWN_ATTR_VALUE_START+0) // the next 10 entries are reserved for text +#define OWN_ATTR_VALUE_POLYGONKIND (OWN_ATTR_VALUE_START+10) +#define OWN_ATTR_VALUE_POLYPOLYGON (OWN_ATTR_VALUE_START+11) +#define OWN_ATTR_VALUE_POLYPOLYGONBEZIER (OWN_ATTR_VALUE_START+12) +#define OWN_ATTR_VALUE_FILLBITMAP (OWN_ATTR_VALUE_START+13) +#define OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX (OWN_ATTR_VALUE_START+14) +#define OWN_ATTR_3D_VALUE_POSITION (OWN_ATTR_VALUE_START+15) +#define OWN_ATTR_3D_VALUE_SIZE (OWN_ATTR_VALUE_START+16) +#define OWN_ATTR_3D_VALUE_POS_IS_CENTER (OWN_ATTR_VALUE_START+17) +#define OWN_ATTR_3D_VALUE_POLYPOLYGON3D (OWN_ATTR_VALUE_START+18) +#define OWN_ATTR_3D_VALUE_LINEONLY (OWN_ATTR_VALUE_START+19) +#define OWN_ATTR_BITMAP (OWN_ATTR_VALUE_START+20) +#define OWN_ATTR_EDGE_START_OBJ (OWN_ATTR_VALUE_START+21) +#define OWN_ATTR_EDGE_START_POS (OWN_ATTR_VALUE_START+22) +#define OWN_ATTR_EDGE_END_OBJ (OWN_ATTR_VALUE_START+23) +#define OWN_ATTR_EDGE_END_POS (OWN_ATTR_VALUE_START+24) +#define OWN_ATTR_FRAMERECT (OWN_ATTR_VALUE_START+25) +#define OWN_ATTR_VALUE_POLYGON (OWN_ATTR_VALUE_START+26) +#define OWN_ATTR_METAFILE (OWN_ATTR_VALUE_START+27) +#define OWN_ATTR_ISFONTWORK (OWN_ATTR_VALUE_START+28) +#define OWN_ATTR_BOUNDRECT (OWN_ATTR_VALUE_START+29) +#define OWN_ATTR_LDNAME (OWN_ATTR_VALUE_START+30) +#define OWN_ATTR_LDBITMAP (OWN_ATTR_VALUE_START+31) +#define OWN_ATTR_OLESIZE (OWN_ATTR_VALUE_START+32) +#define OWN_ATTR_GRAFURL (OWN_ATTR_VALUE_START+33) +#define OWN_ATTR_OLEMODEL (OWN_ATTR_VALUE_START+34) +#define OWN_ATTR_MIRRORED (OWN_ATTR_VALUE_START+35) +#define OWN_ATTR_CLSID (OWN_ATTR_VALUE_START+36) +#define OWN_ATTR_GLUEID_TAIL (OWN_ATTR_VALUE_START+37) +#define OWN_ATTR_GLUEID_HEAD (OWN_ATTR_VALUE_START+38) +#define OWN_ATTR_ZORDER (OWN_ATTR_VALUE_START+39) +#define OWN_ATTR_MEASURE_START_POS (OWN_ATTR_VALUE_START+40) +#define OWN_ATTR_MEASURE_END_POS (OWN_ATTR_VALUE_START+41) +#define OWN_ATTR_3D_VALUE_CAMERA_GEOMETRY (OWN_ATTR_VALUE_START+42) +#define OWN_ATTR_WRITINGMODE (OWN_ATTR_VALUE_START+43) +#define OWN_ATTR_GRAFSTREAMURL (OWN_ATTR_VALUE_START+44) +#define OWN_ATTR_FILLBMP_MODE (OWN_ATTR_VALUE_START+45) +#define OWN_ATTR_TRANSFORMATION (OWN_ATTR_VALUE_START+46) +#define OWN_ATTR_BASE_GEOMETRY (OWN_ATTR_VALUE_START+47) + +/// reuse attr slots for GraphicObject which will never be used together with graphic object +#define OWN_ATTR_REPLACEMENTGRAFURL (OWN_ATTR_VALUE_START+14) + +#define OWN_ATTR_APPLET_DOCBASE (OWN_ATTR_VALUE_START+48) +#define OWN_ATTR_APPLET_CODEBASE (OWN_ATTR_VALUE_START+49) +#define OWN_ATTR_APPLET_NAME (OWN_ATTR_VALUE_START+50) +#define OWN_ATTR_APPLET_CODE (OWN_ATTR_VALUE_START+51) +#define OWN_ATTR_APPLET_COMMANDS (OWN_ATTR_VALUE_START+52) +#define OWN_ATTR_APPLET_ISSCRIPT (OWN_ATTR_VALUE_START+53) +#define OWN_ATTR_PLUGIN_MIMETYPE (OWN_ATTR_VALUE_START+54) +#define OWN_ATTR_PLUGIN_URL (OWN_ATTR_VALUE_START+55) +#define OWN_ATTR_PLUGIN_COMMANDS (OWN_ATTR_VALUE_START+56) +#define OWN_ATTR_FRAME_URL (OWN_ATTR_VALUE_START+57) +#define OWN_ATTR_FRAME_NAME (OWN_ATTR_VALUE_START+58) +#define OWN_ATTR_FRAME_ISAUTOSCROLL (OWN_ATTR_VALUE_START+59) +#define OWN_ATTR_FRAME_ISBORDER (OWN_ATTR_VALUE_START+60) +#define OWN_ATTR_FRAME_MARGIN_WIDTH (OWN_ATTR_VALUE_START+61) +#define OWN_ATTR_FRAME_MARGIN_HEIGHT (OWN_ATTR_VALUE_START+62) + +// reuse own attr from ole shapes for tables +#define OWN_ATTR_TABLETEMPLATE (OWN_ATTR_VALUE_START+48) +#define OWN_ATTR_TABLETEMPLATE_FIRSTROW (OWN_ATTR_VALUE_START+49) +#define OWN_ATTR_TABLETEMPLATE_LASTROW (OWN_ATTR_VALUE_START+50) +#define OWN_ATTR_TABLETEMPLATE_FIRSTCOLUMN (OWN_ATTR_VALUE_START+51) +#define OWN_ATTR_TABLETEMPLATE_LASTCOLUMN (OWN_ATTR_VALUE_START+52) +#define OWN_ATTR_TABLETEMPLATE_BANDINGROWS (OWN_ATTR_VALUE_START+53) +#define OWN_ATTR_TABLETEMPLATE_BANDINGCOULUMNS (OWN_ATTR_VALUE_START+54) +#define OWN_ATTR_TABLEBORDER (OWN_ATTR_VALUE_START+55) + +#define OWN_ATTR_OLE_VISAREA (OWN_ATTR_VALUE_START+63) +#define OWN_ATTR_CAPTION_POINT (OWN_ATTR_VALUE_START+64) +#define OWN_ATTR_PAGE_NUMBER (OWN_ATTR_VALUE_START+65) +#define OWN_ATTR_THUMBNAIL (OWN_ATTR_VALUE_START+66) +#define OWN_ATTR_PERSISTNAME (OWN_ATTR_VALUE_START+67) +#define OWN_ATTR_OLE_EMBEDDED_OBJECT_NONEWCLIENT (OWN_ATTR_VALUE_START+68) +#define OWN_ATTR_MEDIA_URL (OWN_ATTR_VALUE_START+69) +#define OWN_ATTR_MEDIA_PREFERREDSIZE (OWN_ATTR_VALUE_START+70) +#define OWN_ATTR_MEDIA_LOOP (OWN_ATTR_VALUE_START+71) +#define OWN_ATTR_MEDIA_MUTE (OWN_ATTR_VALUE_START+72) +#define OWN_ATTR_MEDIA_VOLUMEDB (OWN_ATTR_VALUE_START+73) +#define OWN_ATTR_MEDIA_ZOOM (OWN_ATTR_VALUE_START+74) +#define OWN_ATTR_UINAME_SINGULAR (OWN_ATTR_VALUE_START+75) +#define OWN_ATTR_UINAME_PLURAL (OWN_ATTR_VALUE_START+76) +#define OWN_ATTR_VALUE_GRAPHIC (OWN_ATTR_VALUE_START+77) +#define OWN_ATTR_INTERNAL_OLE (OWN_ATTR_VALUE_START+78) +#define OWN_ATTR_OLE_EMBEDDED_OBJECT (OWN_ATTR_VALUE_START+79) +#define OWN_ATTR_OLE_ASPECT (OWN_ATTR_VALUE_START+80) + +// #i68101# +#define OWN_ATTR_MISC_OBJ_TITLE (OWN_ATTR_VALUE_START+81) +#define OWN_ATTR_MISC_OBJ_DESCRIPTION (OWN_ATTR_VALUE_START+82) + +#define OWN_ATTR_GRAPHIC_STREAM (OWN_ATTR_VALUE_START+83) +#define OWN_ATTR_3D_VALUE_NORMALSPOLYGON3D (OWN_ATTR_VALUE_START+84) +#define OWN_ATTR_3D_VALUE_TEXTUREPOLYGON3D (OWN_ATTR_VALUE_START+85) + +#define OWN_ATTR_OLE_LINKURL (OWN_ATTR_VALUE_START+86) + +#define OWN_ATTR_STYLE (OWN_ATTR_VALUE_START+87) + +#define OWN_ATTR_EDGE_POLYPOLYGONBEZIER (OWN_ATTR_VALUE_START+88) + +#define OWN_ATTR_MEDIA_STREAM (OWN_ATTR_VALUE_START+89) +#define OWN_ATTR_MEDIA_TEMPFILEURL (OWN_ATTR_VALUE_START+90) +// ATTENTION: maximum is OWN_ATTR_VALUE_START+90, see svl/inc/svl/solar.hrc + +// #FontWork# +#define FONTWORK_PROPERTIES \ + { MAP_CHAR_LEN("FontWorkStyle"), XATTR_FORMTXTSTYLE, /*ENUM*/&::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN("FontWorkAdjust"), XATTR_FORMTXTADJUST, /*ENUM*/&::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN("FontWorkDistance"), XATTR_FORMTXTDISTANCE, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN("FontWorkStart"), XATTR_FORMTXTSTART, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN("FontWorkMirror"), XATTR_FORMTXTMIRROR, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN("FontWorkOutline"), XATTR_FORMTXTOUTLINE, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN("FontWorkShadow"), XATTR_FORMTXTSHADOW, /*ENUM*/&::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN("FontWorkShadowColor"), XATTR_FORMTXTSHDWCOLOR, &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN("FontWorkShadowOffsetX"), XATTR_FORMTXTSHDWXVAL, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN("FontWorkShadowOffsetY"), XATTR_FORMTXTSHDWYVAL, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN("FontWorkForm"), XATTR_FORMTXTSTDFORM, /*ENUM*/&::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN("FontWorkHideForm"), XATTR_FORMTXTHIDEFORM, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN("FontWorkShadowTransparence"),XATTR_FORMTXTSHDWTRANSP, &::getCppuType((const sal_Int16*)0), 0, 0}, + +#define SHADOW_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_SHADOW), SDRATTR_SHADOW, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_SHADOWCOLOR), SDRATTR_SHADOWCOLOR, &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_SHADOWTRANSPARENCE),SDRATTR_SHADOWTRANSPARENCE, &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_SHADOWXDIST), SDRATTR_SHADOWXDIST, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_SHADOWYDIST), SDRATTR_SHADOWYDIST, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, + +#define LINE_PROPERTIES_DEFAULTS\ + { MAP_CHAR_LEN(UNO_NAME_LINECAP), XATTR_LINECAP, &::getCppuType((const ::com::sun::star::drawing::LineCap*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_LINECOLOR), XATTR_LINECOLOR, &::getCppuType((const sal_Int32*)0) , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_LINEENDCENTER), XATTR_LINEENDCENTER, &::getBooleanCppuType() , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_LINEENDWIDTH), XATTR_LINEENDWIDTH, &::getCppuType((const sal_Int32*)0) , 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_LINEJOINT), XATTR_LINEJOINT, &::getCppuType((const ::com::sun::star::drawing::LineJoint*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_LINESTARTCENTER), XATTR_LINESTARTCENTER, &::getBooleanCppuType() , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_LINESTARTWIDTH), XATTR_LINESTARTWIDTH, &::getCppuType((const sal_Int32*)0) , 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_LINESTYLE), XATTR_LINESTYLE, &::getCppuType((const ::com::sun::star::drawing::LineStyle*)0) , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_LINETRANSPARENCE), XATTR_LINETRANSPARENCE, &::getCppuType((const sal_Int16*)0) , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_LINEWIDTH), XATTR_LINEWIDTH, &::getCppuType((const sal_Int32*)0) , 0, SFX_METRIC_ITEM}, + +#define LINE_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_LINEDASH), XATTR_LINEDASH, &::getCppuType((const ::com::sun::star::drawing::LineDash*)0) , 0, MID_LINEDASH}, \ + { MAP_CHAR_LEN("LineDashName"), XATTR_LINEDASH, &::getCppuType((const OUString*)0) , 0, MID_NAME}, \ + LINE_PROPERTIES_DEFAULTS + +#define LINE_PROPERTIES_START_END \ + { MAP_CHAR_LEN(UNO_NAME_LINEEND), XATTR_LINEEND, SEQTYPE(::getCppuType((const ::com::sun::star::drawing::PolyPolygonBezierCoords*)0)), ::com::sun::star::beans::PropertyAttribute::MAYBEVOID, 0}, \ + { MAP_CHAR_LEN("LineEndName"), XATTR_LINEEND, &::getCppuType((const OUString*)0), 0, MID_NAME }, \ + { MAP_CHAR_LEN(UNO_NAME_LINESTART), XATTR_LINESTART, SEQTYPE(::getCppuType((const ::com::sun::star::drawing::PolyPolygonBezierCoords*)0)), ::com::sun::star::beans::PropertyAttribute::MAYBEVOID, 0}, \ + { MAP_CHAR_LEN("LineStartName"), XATTR_LINESTART, &::getCppuType((const OUString*)0), 0, MID_NAME }, + +#define FILL_PROPERTIES_BMP \ + { MAP_CHAR_LEN(UNO_NAME_FILLBMP_LOGICAL_SIZE), XATTR_FILLBMP_SIZELOG, &::getBooleanCppuType() , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_FILLBMP_OFFSET_X), XATTR_FILLBMP_TILEOFFSETX, &::getCppuType((const sal_Int32*)0) , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_FILLBMP_OFFSET_Y), XATTR_FILLBMP_TILEOFFSETY, &::getCppuType((const sal_Int32*)0) , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_FILLBMP_POSITION_OFFSET_X), XATTR_FILLBMP_POSOFFSETX, &::getCppuType((const sal_Int32*)0) , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_FILLBMP_POSITION_OFFSET_Y), XATTR_FILLBMP_POSOFFSETY, &::getCppuType((const sal_Int32*)0) , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_FILLBMP_RECTANGLE_POINT), XATTR_FILLBMP_POS, &::getCppuType((const ::com::sun::star::drawing::RectanglePoint*)0) , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_FILLBMP_SIZE_X), XATTR_FILLBMP_SIZEX, &::getCppuType((const sal_Int32*)0) , 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_FILLBMP_SIZE_Y), XATTR_FILLBMP_SIZEY, &::getCppuType((const sal_Int32*)0) , 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_FILLBMP_STRETCH), XATTR_FILLBMP_STRETCH, &::getBooleanCppuType() , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_FILLBMP_TILE), XATTR_FILLBMP_TILE, &::getBooleanCppuType() , 0, 0},\ + { MAP_CHAR_LEN(UNO_NAME_FILLBMP_MODE), OWN_ATTR_FILLBMP_MODE, &::getCppuType((const ::com::sun::star::drawing::BitmapMode*)0), 0, 0}, + +#define FILL_PROPERTIES_DEFAULTS \ + { MAP_CHAR_LEN(UNO_NAME_FILLCOLOR), XATTR_FILLCOLOR , &::getCppuType((const sal_Int32*)0), 0, 0}, \ + +#define FILL_PROPERTIES \ + FILL_PROPERTIES_BMP \ + FILL_PROPERTIES_DEFAULTS \ + { MAP_CHAR_LEN(UNO_NAME_FILLBACKGROUND), XATTR_FILLBACKGROUND , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_FILLBITMAP), XATTR_FILLBITMAP , &::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XBitmap >*)0) , 0, MID_BITMAP}, \ + { MAP_CHAR_LEN("FillBitmapName"), XATTR_FILLBITMAP , &::getCppuType((const OUString*)0), 0, MID_NAME }, \ + { MAP_CHAR_LEN("FillBitmapURL"), XATTR_FILLBITMAP , &::getCppuType((const OUString*)0), 0, MID_GRAFURL }, \ + { MAP_CHAR_LEN("FillGradientStepCount"), XATTR_GRADIENTSTEPCOUNT , &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_FILLGRADIENT), XATTR_FILLGRADIENT , &::getCppuType((const ::com::sun::star::awt::Gradient*)0), 0, MID_FILLGRADIENT}, \ + { MAP_CHAR_LEN("FillGradientName"), XATTR_FILLGRADIENT , &::getCppuType((const OUString*)0), 0, MID_NAME }, \ + { MAP_CHAR_LEN(UNO_NAME_FILLHATCH), XATTR_FILLHATCH , &::getCppuType((const ::com::sun::star::drawing::Hatch*)0), 0, MID_FILLHATCH}, \ + { MAP_CHAR_LEN("FillHatchName"), XATTR_FILLHATCH , &::getCppuType((const OUString*)0), 0, MID_NAME }, \ + { MAP_CHAR_LEN(UNO_NAME_FILLSTYLE), XATTR_FILLSTYLE , &::getCppuType((const ::com::sun::star::drawing::FillStyle*)0) , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_FILL_TRANSPARENCE), XATTR_FILLTRANSPARENCE, &::getCppuType((const sal_Int16*)0) , 0, 0}, \ + { MAP_CHAR_LEN("FillTransparenceGradient"), XATTR_FILLFLOATTRANSPARENCE, &::getCppuType((const ::com::sun::star::awt::Gradient*)0), 0, MID_FILLGRADIENT}, \ + { MAP_CHAR_LEN("FillTransparenceGradientName"), XATTR_FILLFLOATTRANSPARENCE, &::getCppuType((const OUString*)0), 0, MID_NAME }, \ + { MAP_CHAR_LEN(UNO_NAME_FILLCOLOR_2), XATTR_SECONDARYFILLCOLOR, &::getCppuType((const sal_Int32*)0), 0, 0}, + +#define EDGERADIUS_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_EDGERADIUS), SDRATTR_ECKENRADIUS , &::getCppuType((const sal_Int32*)0) , 0, SFX_METRIC_ITEM}, + +#define TEXT_PROPERTIES_DEFAULTS\ + { MAP_CHAR_LEN(UNO_NAME_TEXT_WRITINGMODE), SDRATTR_TEXTDIRECTION, &::getCppuType((const ::com::sun::star::text::WritingMode*)0), 0, 0},\ + { MAP_CHAR_LEN(UNO_NAME_TEXT_ANIAMOUNT), SDRATTR_TEXT_ANIAMOUNT, &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_ANICOUNT), SDRATTR_TEXT_ANICOUNT, &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_ANIDELAY), SDRATTR_TEXT_ANIDELAY, &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_ANIDIRECTION), SDRATTR_TEXT_ANIDIRECTION, &::getCppuType((const ::com::sun::star::drawing::TextAnimationDirection*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_ANIKIND), SDRATTR_TEXT_ANIKIND, &::getCppuType((const ::com::sun::star::drawing::TextAnimationKind*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_ANISTARTINSIDE), SDRATTR_TEXT_ANISTARTINSIDE, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_ANISTOPINSIDE), SDRATTR_TEXT_ANISTOPINSIDE, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_AUTOGROWHEIGHT), SDRATTR_TEXT_AUTOGROWHEIGHT, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_AUTOGROWWIDTH), SDRATTR_TEXT_AUTOGROWWIDTH, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_CONTOURFRAME), SDRATTR_TEXT_CONTOURFRAME, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_FITTOSIZE), SDRATTR_TEXT_FITTOSIZE, &::getCppuType((const ::com::sun::star::drawing::TextFitToSizeType*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_HORZADJUST), SDRATTR_TEXT_HORZADJUST, &::getCppuType((const ::com::sun::star::drawing::TextHorizontalAdjust*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_LEFTDIST), SDRATTR_TEXT_LEFTDIST, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_LOWERDIST), SDRATTR_TEXT_LOWERDIST, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_MAXFRAMEHEIGHT), SDRATTR_TEXT_MAXFRAMEHEIGHT, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_MAXFRAMEWIDTH), SDRATTR_TEXT_MAXFRAMEWIDTH, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_MINFRAMEHEIGHT), SDRATTR_TEXT_MINFRAMEHEIGHT, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_MINFRAMEWIDTH), SDRATTR_TEXT_MINFRAMEWIDTH, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_RIGHTDIST), SDRATTR_TEXT_RIGHTDIST, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_UPPERDIST), SDRATTR_TEXT_UPPERDIST, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_FONTINDEPENDENTLINESPACING),SDRATTR_TEXT_USEFIXEDCELLHEIGHT,&::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_TEXT_VERTADJUST), SDRATTR_TEXT_VERTADJUST, &::getCppuType((const ::com::sun::star::drawing::TextVerticalAdjust*)0), 0, 0},\ + { MAP_CHAR_LEN(UNO_NAME_TEXT_WORDWRAP), SDRATTR_TEXT_WORDWRAP, &::getBooleanCppuType(), 0, 0}, \ + SVX_UNOEDIT_CHAR_PROPERTIES, \ + SVX_UNOEDIT_PARA_PROPERTIES, + +#define TEXT_PROPERTIES \ + SVX_UNOEDIT_NUMBERING_PROPERTIE, \ + TEXT_PROPERTIES_DEFAULTS + +// { MAP_CHAR_LEN("HasLevels"), OWN_ATTR_HASLEVELS, &::getBooleanCppuType(), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, + +#define MISC_OBJ_PROPERTIES_NO_SHEAR \ + { MAP_CHAR_LEN("Transformation"), OWN_ATTR_TRANSFORMATION, &::getCppuType((const struct com::sun::star::drawing::HomogenMatrix3*)0), 0, 0 }, \ + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_ZORDER), OWN_ATTR_ZORDER, &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_FRAMERECT), OWN_ATTR_FRAMERECT, &::getCppuType((const ::com::sun::star::awt::Rectangle*)0), 0, 0 }, \ + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_ROTATEANGLE), SDRATTR_ROTATEANGLE, &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_BITMAP), OWN_ATTR_BITMAP, &::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XBitmap >*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_OLE2_METAFILE), OWN_ATTR_METAFILE, SEQTYPE(::getCppuType((::com::sun::star::uno::Sequence<sal_Int8>*)0)), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, \ + { MAP_CHAR_LEN("IsFontwork"), OWN_ATTR_ISFONTWORK, &::getBooleanCppuType(), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_BOUNDRECT), OWN_ATTR_BOUNDRECT, &::getCppuType((const ::com::sun::star::awt::Rectangle*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, + +#define MISC_OBJ_PROPERTIES \ + MISC_OBJ_PROPERTIES_NO_SHEAR \ + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_SHEARANGLE), SDRATTR_SHEARANGLE, &::getCppuType((const sal_Int32*)0), 0, 0}, + + +#define SHAPE_DESCRIPTOR_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_LAYERID), SDRATTR_LAYERID , &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_LAYERNAME), SDRATTR_LAYERNAME , &::getCppuType((const OUString*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_MOVEPROTECT), SDRATTR_OBJMOVEPROTECT , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_NAME), SDRATTR_OBJECTNAME , &::getCppuType((const OUString*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_PRINTABLE), SDRATTR_OBJPRINTABLE , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN("Visible"), SDRATTR_OBJVISIBLE , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_SIZEPROTECT), SDRATTR_OBJSIZEPROTECT , &::getBooleanCppuType(), 0, 0},\ + { MAP_CHAR_LEN("UINameSingular"), OWN_ATTR_UINAME_SINGULAR , &::getCppuType((const OUString*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, \ + { MAP_CHAR_LEN("UINamePlural"), OWN_ATTR_UINAME_PLURAL , &::getCppuType((const OUString*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, \ + /* #i68101# */ \ + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_TITLE), OWN_ATTR_MISC_OBJ_TITLE , &::getCppuType((const OUString*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MISC_OBJ_DESCRIPTION), OWN_ATTR_MISC_OBJ_DESCRIPTION , &::getCppuType((const OUString*)0), 0, 0}, + +#define LINKTARGET_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_LINKDISPLAYNAME), OWN_ATTR_LDNAME , &::getCppuType((const OUString*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_LINKDISPLAYBITMAP), OWN_ATTR_LDBITMAP , &::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XBitmap >*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, + + +#define CONNECTOR_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_EDGEKIND), SDRATTR_EDGEKIND, &::getCppuType((const ::com::sun::star::drawing::ConnectorType*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_EDGENODE1HORZDIST), SDRATTR_EDGENODE1HORZDIST, &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_EDGENODE1VERTDIST), SDRATTR_EDGENODE1VERTDIST, &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_EDGENODE2HORZDIST), SDRATTR_EDGENODE2HORZDIST, &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_EDGENODE2VERTDIST), SDRATTR_EDGENODE2VERTDIST, &::getCppuType((const sal_Int32*)0), 0, 0}, + +#define SPECIAL_CONNECTOR_PROPERTIES \ + CONNECTOR_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_EDGELINE1DELTA), SDRATTR_EDGELINE1DELTA, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_EDGELINE2DELTA), SDRATTR_EDGELINE2DELTA, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_EDGELINE3DELTA), SDRATTR_EDGELINE3DELTA, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN("StartShape"), OWN_ATTR_EDGE_START_OBJ, &::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >*)0), ::com::sun::star::beans::PropertyAttribute::MAYBEVOID, 0}, \ + { MAP_CHAR_LEN("StartGluePointIndex"), OWN_ATTR_GLUEID_HEAD, &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN("StartPosition"), OWN_ATTR_EDGE_START_POS, &::getCppuType((const ::com::sun::star::awt::Point*)0), 0, 0}, \ + { MAP_CHAR_LEN("EndShape"), OWN_ATTR_EDGE_END_OBJ, &::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape>*)0), ::com::sun::star::beans::PropertyAttribute::MAYBEVOID, 0}, \ + { MAP_CHAR_LEN("EndPosition"), OWN_ATTR_EDGE_END_POS, &::getCppuType((const ::com::sun::star::awt::Point*)0), 0, 0},\ + { MAP_CHAR_LEN("EndGluePointIndex"), OWN_ATTR_GLUEID_TAIL, &::getCppuType((const sal_Int32*)0), 0, 0}, \ +\ + { MAP_CHAR_LEN("EdgeStartConnection"), OWN_ATTR_EDGE_START_OBJ, &::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >*)0), ::com::sun::star::beans::PropertyAttribute::MAYBEVOID, 0}, \ + { MAP_CHAR_LEN("EdgeStartPoint"), OWN_ATTR_EDGE_START_POS, &::getCppuType((const ::com::sun::star::awt::Point*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, \ + { MAP_CHAR_LEN("EdgeEndConnection"), OWN_ATTR_EDGE_END_OBJ, &::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape>*)0), ::com::sun::star::beans::PropertyAttribute::MAYBEVOID, 0}, \ + { MAP_CHAR_LEN("EdgeEndPoint"), OWN_ATTR_EDGE_END_POS, &::getCppuType((const ::com::sun::star::awt::Point*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, \ +\ + { MAP_CHAR_LEN(UNO_NAME_POLYPOLYGONBEZIER), OWN_ATTR_EDGE_POLYPOLYGONBEZIER, &::getCppuType((const ::com::sun::star::drawing::PolyPolygonBezierCoords*)0), 0, 0}, + +#define SPECIAL_DIMENSIONING_PROPERTIES_DEFAULTS \ + { MAP_CHAR_LEN(UNO_NAME_MEASUREBELOWREFEDGE), SDRATTR_MEASUREBELOWREFEDGE, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASUREFORMATSTRING), SDRATTR_MEASUREFORMATSTRING, &::getCppuType((const OUString*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASUREHELPLINE1LEN), SDRATTR_MEASUREHELPLINE1LEN, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASUREHELPLINE2LEN), SDRATTR_MEASUREHELPLINE2LEN, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASUREHELPLINEDIST), SDRATTR_MEASUREHELPLINEDIST, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASUREHELPLINEOVERHANG), SDRATTR_MEASUREHELPLINEOVERHANG, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASUREKIND), SDRATTR_MEASUREKIND, &::getCppuType((const ::com::sun::star::drawing::MeasureKind*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASURELINEDIST), SDRATTR_MEASURELINEDIST, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASUREOVERHANG), SDRATTR_MEASUREOVERHANG, &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASUREUNIT), SDRATTR_MEASUREUNIT, &::getCppuType((const sal_Int32*)0), 0, 0},\ + { MAP_CHAR_LEN(UNO_NAME_MEASURESHOWUNIT), SDRATTR_MEASURESHOWUNIT, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASURETEXTAUTOANGLE), SDRATTR_MEASURETEXTAUTOANGLE, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASURETEXTAUTOANGLEVIEW), SDRATTR_MEASURETEXTAUTOANGLEVIEW, &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASURETEXTFIXEDANGLE), SDRATTR_MEASURETEXTFIXEDANGLE, &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASURETEXTHPOS), SDRATTR_MEASURETEXTHPOS, &::getCppuType((const ::com::sun::star::drawing::MeasureTextHorzPos*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASURETEXTISFIXEDANGLE), SDRATTR_MEASURETEXTISFIXEDANGLE, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASURETEXTROTA90), SDRATTR_MEASURETEXTROTA90, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASURETEXTUPSIDEDOWN), SDRATTR_MEASURETEXTUPSIDEDOWN, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_MEASURETEXTVPOS), SDRATTR_MEASURETEXTVPOS, &::getCppuType((const ::com::sun::star::drawing::MeasureTextVertPos*)0), 0, 0}, \ + { MAP_CHAR_LEN("MeasureDecimalPlaces"), SDRATTR_MEASUREDECIMALPLACES, &::getCppuType((const sal_Int16*)0), 0, 0}, + + +#define SPECIAL_DIMENSIONING_PROPERTIES \ + SPECIAL_DIMENSIONING_PROPERTIES_DEFAULTS \ + { MAP_CHAR_LEN("StartPosition"), OWN_ATTR_MEASURE_START_POS, &::getCppuType((const ::com::sun::star::awt::Point*)0), 0, 0},\ + { MAP_CHAR_LEN("EndPosition"), OWN_ATTR_MEASURE_END_POS, &::getCppuType((const ::com::sun::star::awt::Point*)0), 0, 0}, + +#define SPECIAL_CIRCLE_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_CIRCENDANGLE), SDRATTR_CIRCENDANGLE, &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_CIRCKIND), SDRATTR_CIRCKIND, &::getCppuType((const ::com::sun::star::drawing::CircleKind*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_CIRCSTARTANGLE),SDRATTR_CIRCSTARTANGLE, &::getCppuType((const sal_Int32*)0), 0, 0}, + +#define SPECIAL_POLYGON_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_POLYGONKIND), OWN_ATTR_VALUE_POLYGONKIND, &::getCppuType((const ::com::sun::star::drawing::PolygonKind*)0), ::com::sun::star::beans::PropertyAttribute::READONLY, 0}, + +#define SPECIAL_POLYPOLYGON_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_POLYPOLYGON), OWN_ATTR_VALUE_POLYPOLYGON, SEQTYPE(::getCppuType((const ::com::sun::star::drawing::PointSequenceSequence*)0)), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_POLYGON), OWN_ATTR_VALUE_POLYGON, SEQTYPE(::getCppuType((const ::com::sun::star::drawing::PointSequence*)0)), 0, 0}, + +#define SPECIAL_POLYPOLYGONBEZIER_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_POLYPOLYGONBEZIER), OWN_ATTR_VALUE_POLYPOLYGONBEZIER, &::getCppuType((const ::com::sun::star::drawing::PolyPolygonBezierCoords*)0), 0, 0}, + +#define SPECIAL_GRAPHOBJ_PROPERTIES_DEFAULTS \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHIC_LUMINANCE), SDRATTR_GRAFLUMINANCE , &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHIC_CONTRAST), SDRATTR_GRAFCONTRAST , &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHIC_RED), SDRATTR_GRAFRED , &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHIC_GREEN), SDRATTR_GRAFGREEN , &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHIC_BLUE), SDRATTR_GRAFBLUE , &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHIC_GAMMA), SDRATTR_GRAFGAMMA , &::getCppuType((const double*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHIC_TRANSPARENCY), SDRATTR_GRAFTRANSPARENCE , &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHIC_COLOR_MODE), SDRATTR_GRAFMODE , &::getCppuType((const ::com::sun::star::drawing::ColorMode*)0), 0, 0}, + +#define SPECIAL_GRAPHOBJ_PROPERTIES \ + SPECIAL_GRAPHOBJ_PROPERTIES_DEFAULTS \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHIC_GRAPHICCROP), SDRATTR_GRAFCROP , &::getCppuType((const ::com::sun::star::text::GraphicCrop*)0), 0, 0 }, \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHOBJ_GRAFURL), OWN_ATTR_GRAFURL , &::getCppuType((const OUString*)0), 0, 0 }, \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHOBJ_REPLACEMENTGRAFURL), OWN_ATTR_REPLACEMENTGRAFURL , &::getCppuType((const OUString*)0), 0, 0 }, \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHOBJ_GRAFSTREAMURL), OWN_ATTR_GRAFSTREAMURL , &::getCppuType((const OUString*)0), ::com::sun::star::beans::PropertyAttribute::MAYBEVOID, 0 }, \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHOBJ_FILLBITMAP), OWN_ATTR_VALUE_FILLBITMAP , &::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XBitmap>*)0) , 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_GRAPHOBJ_GRAPHIC), OWN_ATTR_VALUE_GRAPHIC , &::getCppuType((const ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic>*)0) , 0, 0}, + + +#define SPECIAL_3DSCENEOBJECT_PROPERTIES_DEFAULTS \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_AMBIENTCOLOR), SDRATTR_3DSCENE_AMBIENTCOLOR , &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_DISTANCE), SDRATTR_3DSCENE_DISTANCE , &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_FOCAL_LENGTH), SDRATTR_3DSCENE_FOCAL_LENGTH , &::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTCOLOR_1), SDRATTR_3DSCENE_LIGHTCOLOR_1 , &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTCOLOR_2), SDRATTR_3DSCENE_LIGHTCOLOR_2 , &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTCOLOR_3), SDRATTR_3DSCENE_LIGHTCOLOR_3 , &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTCOLOR_4), SDRATTR_3DSCENE_LIGHTCOLOR_4 , &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTCOLOR_5), SDRATTR_3DSCENE_LIGHTCOLOR_5 , &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTCOLOR_6), SDRATTR_3DSCENE_LIGHTCOLOR_6 , &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTCOLOR_7), SDRATTR_3DSCENE_LIGHTCOLOR_7 , &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTCOLOR_8), SDRATTR_3DSCENE_LIGHTCOLOR_8 , &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTDIRECTION_1), SDRATTR_3DSCENE_LIGHTDIRECTION_1 , &::getCppuType((const ::com::sun::star::drawing::Direction3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTDIRECTION_2), SDRATTR_3DSCENE_LIGHTDIRECTION_2 , &::getCppuType((const ::com::sun::star::drawing::Direction3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTDIRECTION_3), SDRATTR_3DSCENE_LIGHTDIRECTION_3 , &::getCppuType((const ::com::sun::star::drawing::Direction3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTDIRECTION_4), SDRATTR_3DSCENE_LIGHTDIRECTION_4 , &::getCppuType((const ::com::sun::star::drawing::Direction3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTDIRECTION_5), SDRATTR_3DSCENE_LIGHTDIRECTION_5 , &::getCppuType((const ::com::sun::star::drawing::Direction3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTDIRECTION_6), SDRATTR_3DSCENE_LIGHTDIRECTION_6 , &::getCppuType((const ::com::sun::star::drawing::Direction3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTDIRECTION_7), SDRATTR_3DSCENE_LIGHTDIRECTION_7 , &::getCppuType((const ::com::sun::star::drawing::Direction3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTDIRECTION_8), SDRATTR_3DSCENE_LIGHTDIRECTION_8 , &::getCppuType((const ::com::sun::star::drawing::Direction3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTON_1), SDRATTR_3DSCENE_LIGHTON_1 , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTON_2), SDRATTR_3DSCENE_LIGHTON_2 , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTON_3), SDRATTR_3DSCENE_LIGHTON_3 , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTON_4), SDRATTR_3DSCENE_LIGHTON_4 , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTON_5), SDRATTR_3DSCENE_LIGHTON_5 , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTON_6), SDRATTR_3DSCENE_LIGHTON_6 , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTON_7), SDRATTR_3DSCENE_LIGHTON_7 , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_LIGHTON_8), SDRATTR_3DSCENE_LIGHTON_8 , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_PERSPECTIVE), SDRATTR_3DSCENE_PERSPECTIVE , &::getCppuType((const ::com::sun::star::drawing::ProjectionMode*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_SHADOW_SLANT), SDRATTR_3DSCENE_SHADOW_SLANT , &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_SHADE_MODE), SDRATTR_3DSCENE_SHADE_MODE , &::getCppuType((const ::com::sun::star::drawing::ShadeMode*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SCENE_TWO_SIDED_LIGHTING),SDRATTR_3DSCENE_TWO_SIDED_LIGHTING, &::getBooleanCppuType(), 0, 0}, + +#define SPECIAL_3DSCENEOBJECT_PROPERTIES \ + SPECIAL_3DSCENEOBJECT_PROPERTIES_DEFAULTS \ + { MAP_CHAR_LEN(UNO_NAME_3D_TRANSFORM_MATRIX), OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX , &::getCppuType((const ::com::sun::star::drawing::HomogenMatrix*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_CAMERA_GEOMETRY), OWN_ATTR_3D_VALUE_CAMERA_GEOMETRY , &::getCppuType((const ::com::sun::star::drawing::CameraGeometry*)0), 0, 0}, + +// #i28528# +// Added extra Item (Bool) for chart2 to be able to show reduced line geometry (SDRATTR_3DOBJ_REDUCED_LINE_GEOMETRY) +#define MISC_3D_OBJ_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_3D_DOUBLE_SIDED ),SDRATTR_3DOBJ_DOUBLE_SIDED , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_MAT_COLOR ),SDRATTR_3DOBJ_MAT_COLOR , &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_MAT_EMISSION ),SDRATTR_3DOBJ_MAT_EMISSION , &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_MAT_SPECULAR ),SDRATTR_3DOBJ_MAT_SPECULAR , &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_MAT_SPECULAR_INTENSITY ),SDRATTR_3DOBJ_MAT_SPECULAR_INTENSITY , &::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_NORMALS_INVERT ),SDRATTR_3DOBJ_NORMALS_INVERT , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_NORMALS_KIND ),SDRATTR_3DOBJ_NORMALS_KIND , &::getCppuType((const ::com::sun::star::drawing::NormalsKind*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SHADOW_3D ),SDRATTR_3DOBJ_SHADOW_3D , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_TEXTURE_FILTER ),SDRATTR_3DOBJ_TEXTURE_FILTER , &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_TEXTURE_KIND ),SDRATTR_3DOBJ_TEXTURE_KIND , &::getCppuType((const ::com::sun::star::drawing::TextureKind*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_TEXTURE_MODE ),SDRATTR_3DOBJ_TEXTURE_MODE , &::getCppuType((const ::com::sun::star::drawing::TextureMode*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_TEXTURE_PROJ_X ),SDRATTR_3DOBJ_TEXTURE_PROJ_X , &::getCppuType((const ::com::sun::star::drawing::TextureProjectionMode*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_TEXTURE_PROJ_Y ),SDRATTR_3DOBJ_TEXTURE_PROJ_Y , &::getCppuType((const ::com::sun::star::drawing::TextureProjectionMode*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_REDUCED_LINE_GEOMETRY ),SDRATTR_3DOBJ_REDUCED_LINE_GEOMETRY , &::getBooleanCppuType(), 0, 0}, + +#define SPECIAL_3DCUBEOBJECT_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_3D_TRANSFORM_MATRIX ),OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX , &::getCppuType((const ::com::sun::star::drawing::HomogenMatrix*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_POS ),OWN_ATTR_3D_VALUE_POSITION , &::getCppuType((const ::com::sun::star::drawing::Position3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SIZE ),OWN_ATTR_3D_VALUE_SIZE , &::getCppuType((const ::com::sun::star::drawing::Direction3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_POS_IS_CENTER ),OWN_ATTR_3D_VALUE_POS_IS_CENTER , &::getBooleanCppuType(), 0, 0}, + +#define SPECIAL_3DSPHEREOBJECT_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_3D_TRANSFORM_MATRIX ),OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX , &::getCppuType((const ::com::sun::star::drawing::HomogenMatrix*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_POS ),OWN_ATTR_3D_VALUE_POSITION , &::getCppuType((const ::com::sun::star::drawing::Position3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SIZE ),OWN_ATTR_3D_VALUE_SIZE , &::getCppuType((const ::com::sun::star::drawing::Direction3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_HORZ_SEGS ),SDRATTR_3DOBJ_HORZ_SEGS, &::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_VERT_SEGS ),SDRATTR_3DOBJ_VERT_SEGS, &::getCppuType((const sal_Int32*)0), 0, 0}, + +// #107245# New 3D properties which are possible for lathe and extrude 3d objects +#define SPECIAL_3DLATHEANDEXTRUDEOBJ_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_3D_SMOOTH_NORMALS ), SDRATTR_3DOBJ_SMOOTH_NORMALS, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_SMOOTH_LIDS ), SDRATTR_3DOBJ_SMOOTH_LIDS, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_CHARACTER_MODE ), SDRATTR_3DOBJ_CHARACTER_MODE, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_CLOSE_FRONT ), SDRATTR_3DOBJ_CLOSE_FRONT, &::getBooleanCppuType(), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_CLOSE_BACK ), SDRATTR_3DOBJ_CLOSE_BACK, &::getBooleanCppuType(), 0, 0}, + +#define SPECIAL_3DLATHEOBJECT_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_3D_TRANSFORM_MATRIX ),OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX ,&::getCppuType((const ::com::sun::star::drawing::HomogenMatrix*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_POLYPOLYGON3D ),OWN_ATTR_3D_VALUE_POLYPOLYGON3D ,&::getCppuType((const ::com::sun::star::drawing::PolyPolygonShape3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_LATHE_END_ANGLE ),SDRATTR_3DOBJ_END_ANGLE ,&::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_HORZ_SEGS ),SDRATTR_3DOBJ_HORZ_SEGS ,&::getCppuType((const sal_Int32*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_PERCENT_DIAGONAL ),SDRATTR_3DOBJ_PERCENT_DIAGONAL ,&::getCppuType((const sal_Int16*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_VERT_SEGS ),SDRATTR_3DOBJ_VERT_SEGS ,&::getCppuType((const sal_Int32*)0), 0, 0}, + +#define SPECIAL_3DEXTRUDEOBJECT_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_3D_TRANSFORM_MATRIX ),OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX ,&::getCppuType((const ::com::sun::star::drawing::HomogenMatrix*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_POLYPOLYGON3D ),OWN_ATTR_3D_VALUE_POLYPOLYGON3D ,&::getCppuType((const ::com::sun::star::drawing::PolyPolygonShape3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_EXTRUDE_DEPTH ),SDRATTR_3DOBJ_DEPTH ,&::getCppuType((const sal_Int32*)0), 0, SFX_METRIC_ITEM}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_PERCENT_DIAGONAL ),SDRATTR_3DOBJ_PERCENT_DIAGONAL ,&::getCppuType((const sal_Int16*)0), 0, 0}, + +#define SPECIAL_3DPOLYGONOBJECT_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_3D_TRANSFORM_MATRIX ),OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX , &::getCppuType((const ::com::sun::star::drawing::HomogenMatrix*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_POLYPOLYGON3D ),OWN_ATTR_3D_VALUE_POLYPOLYGON3D , &::getCppuType((const ::com::sun::star::drawing::PolyPolygonShape3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_NORMALSPOLYGON3D ),OWN_ATTR_3D_VALUE_NORMALSPOLYGON3D, &::getCppuType((const ::com::sun::star::drawing::PolyPolygonShape3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_TEXTUREPOLYGON3D ),OWN_ATTR_3D_VALUE_TEXTUREPOLYGON3D, &::getCppuType((const ::com::sun::star::drawing::PolyPolygonShape3D*)0), 0, 0}, \ + { MAP_CHAR_LEN(UNO_NAME_3D_LINEONLY ),OWN_ATTR_3D_VALUE_LINEONLY , &::getBooleanCppuType(), 0, 0}, + +#define SPECIAL_3DBACKSCALE_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_3D_BACKSCALE ),SDRATTR_3DOBJ_BACKSCALE ,&::getCppuType((const sal_Int16*)0), 0, 0}, \ + +#define CUSTOMSHAPE_PROPERTIES \ + { MAP_CHAR_LEN(UNO_NAME_CUSTOMSHAPE_ADJUSTMENT),SDRATTR_CUSTOMSHAPE_ADJUSTMENT, SEQTYPE(::getCppuType((::com::sun::star::uno::Sequence<sal_Int32>*)0)), 0, 0}, \ + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/unoshtxt.hxx b/include/svx/unoshtxt.hxx new file mode 100644 index 000000000000..cefc7012a0fd --- /dev/null +++ b/include/svx/unoshtxt.hxx @@ -0,0 +1,91 @@ +/* -*- 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 SVX_UNOSHTXT_HXX +#define SVX_UNOSHTXT_HXX + +#include <memory> +#include <editeng/unoedsrc.hxx> +#include "svx/svxdllapi.h" + +namespace com { namespace sun { namespace star { + namespace uno { + class XInterface; + } + namespace accessibility { + struct TextSegment; + } +} } } + +class SvxTextForwarder; +class SdrObject; +class SdrModel; +class SdrView; +class Window; +class SvxTextEditSourceImpl; +class SdrText; + +class SVX_DLLPUBLIC SvxTextEditSource : public SvxEditSource, public SvxViewForwarder +{ +public: + SvxTextEditSource( SdrObject* pObj, SdrText* pText, ::com::sun::star::uno::XInterface* pOwner); + + /** Since the views don't broadcast their dying, make sure that + this object gets destroyed if the view becomes invalid + + The window is necessary, since our views can display on multiple windows + */ + SvxTextEditSource( SdrObject& rObj, SdrText* pText, SdrView& rView, const Window& rViewWindow ); + + virtual ~SvxTextEditSource(); + + virtual SvxEditSource* Clone() const; + virtual SvxTextForwarder* GetTextForwarder(); + virtual SvxViewForwarder* GetViewForwarder(); + virtual SvxEditViewForwarder* GetEditViewForwarder( sal_Bool bCreate = sal_False ); + virtual void UpdateData(); + + virtual void addRange( SvxUnoTextRangeBase* pNewRange ); + virtual void removeRange( SvxUnoTextRangeBase* pOldRange ); + virtual const SvxUnoTextRangeBaseList& getRanges() const; + + virtual SfxBroadcaster& GetBroadcaster() const; + + void lock(); + void unlock(); + + // the SvxViewForwarder interface + virtual sal_Bool IsValid() const; + virtual Rectangle GetVisArea() const; + virtual Point LogicToPixel( const Point&, const MapMode& ) const; + virtual Point PixelToLogic( const Point&, const MapMode& ) const; + + void ChangeModel( SdrModel* pNewModel ); + + void UpdateOutliner(); + +private: + SVX_DLLPRIVATE SvxTextEditSource( SvxTextEditSourceImpl* pImpl ); + + SvxTextEditSourceImpl* mpImpl; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/verttexttbxctrl.hxx b/include/svx/verttexttbxctrl.hxx new file mode 100644 index 000000000000..f705be2ff882 --- /dev/null +++ b/include/svx/verttexttbxctrl.hxx @@ -0,0 +1,57 @@ +/* -*- 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 _SVX_VERT_TEXT_TBXCTRL_HXX +#define _SVX_VERT_TEXT_TBXCTRL_HXX + +#include <sfx2/tbxctrl.hxx> +#include "svx/svxdllapi.h" + +/* + control to remove/insert cjk settings dependent vertical text toolbox item + */ +class SvxVertCTLTextTbxCtrl : public SfxToolBoxControl +{ + sal_Bool bCheckVertical; //determines whether vertical mode or CTL mode has to be checked +public: + SvxVertCTLTextTbxCtrl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); + ~SvxVertCTLTextTbxCtrl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + void SetVert(sal_Bool bSet) {bCheckVertical = bSet;} + +}; + +class SVX_DLLPUBLIC SvxCTLTextTbxCtrl : public SvxVertCTLTextTbxCtrl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxCTLTextTbxCtrl(sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); +}; + +class SVX_DLLPUBLIC SvxVertTextTbxCtrl : public SvxVertCTLTextTbxCtrl +{ +public: + SFX_DECL_TOOLBOX_CONTROL(); + SvxVertTextTbxCtrl( sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/view3d.hxx b/include/svx/view3d.hxx new file mode 100644 index 000000000000..7f4d52307450 --- /dev/null +++ b/include/svx/view3d.hxx @@ -0,0 +1,266 @@ +/* -*- 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 _E3D_VIEW3D_HXX +#define _E3D_VIEW3D_HXX + +#include <svx/svdview.hxx> +#include <svx/def3d.hxx> +#include <svx/deflt3d.hxx> +#include <basegfx/point/b2dpoint.hxx> +#include "svx/svxdllapi.h" + +//************************************************************ +// Vorausdeklarationen +//************************************************************ + +class E3dObject; +class E3dScene; +class Impl3DMirrorConstructOverlay; + +/************************************************************************* +|* +|* Ableitung von SdrView zur Bearbeitung von 3D-Objekten +|* +\************************************************************************/ + +class SVX_DLLPUBLIC E3dView : public SdrView +{ +protected: + E3dDefaultAttributes a3DDefaultAttr; + MouseEvent aMouseEvent; // Die Parameter der letzten Events (Mouse, Keyboard) + Color aDefaultLightColor; // dito mit den Farben + Color aDefaultAmbientColor; + + double fDefaultScaleX; // Verzerrungen + double fDefaultScaleY; + double fDefaultScaleZ; + double fDefaultRotateX; // und Drehungen + double fDefaultRotateY; + double fDefaultRotateZ; + double fDefaultExtrusionDeepth; // Extrusionstiefe + double fDefaultLightIntensity; // Intensitaeten der beiden (notwendigen) Licht- + double fDefaultAmbientIntensity; // quellen + long nHDefaultSegments; // wieviele HSegmente braucht mein Lathe-Ojekt + long nVDefaultSegments; // wieviele VSegmente braucht mein Lathe-Ojekt + + E3dDragConstraint eDragConstraint; + + // Migrate selections + Impl3DMirrorConstructOverlay* mpMirrorOverlay; + + sal_Bool bDoubleSided; + + void InitView(); + + void ImpCreate3DObject(E3dScene* pScene, SdrObject* pObj, bool bExtrude, double fDepth, basegfx::B2DHomMatrix& rLatheMat); + void ImpCreateSingle3DObjectFlat(E3dScene* pScene, SdrObject* pObj, bool bExtrude, double fDepth, basegfx::B2DHomMatrix& rLatheMat); + void ImpChangeSomeAttributesFor3DConversion(SdrObject* pObj); + void ImpChangeSomeAttributesFor3DConversion2(SdrObject* pObj); + + void InitScene(E3dScene* pScene, double fW, double fH, double fCamZ); + void ImpIsConvertTo3DPossible(SdrObject* pObj, bool& rAny3D, bool& rGroupSelected) const; + void BreakSingle3DObj(E3dObject* pObj); + +public: + TYPEINFO(); + E3dView(SdrModel* pModel, OutputDevice* pOut = 0L); + virtual ~E3dView(); + + // Alle markierten Objekte auf dem angegebenen OutputDevice ausgeben. + virtual void DrawMarkedObj(OutputDevice& rOut) const; + + // Zugriff auf die Default-Attribute + E3dDefaultAttributes& Get3DDefaultAttributes() { return a3DDefaultAttr; } + virtual sal_Bool BegDragObj(const Point& rPnt, OutputDevice* pOut = NULL, SdrHdl* pHdl = NULL, short nMinMov = -3, SdrDragMethod* pForcedMeth = NULL); + virtual void CheckPossibilities(); + + // Event setzen/rausruecken + void SetMouseEvent(const MouseEvent& rNew) { aMouseEvent = rNew; } + const MouseEvent& GetMouseEvent() { return aMouseEvent; } + + // Model holen ueberladen, da bei einzelnen 3D Objekten noch eine Szene + // untergeschoben werden muss + virtual SdrModel* GetMarkedObjModel() const; + + // Bei Paste muss - falls in eine Scene eingefuegt wird - die + // Objekte der Szene eingefuegt werden, die Szene selbst aber nicht + using SdrView::Paste; + virtual sal_Bool Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst=NULL, sal_uInt32 nOptions=0); + + // #83403# Service routine used from local Clone() and from SdrCreateView::EndCreateObj(...) + bool ImpCloneAll3DObjectsToDestScene(E3dScene* pSrcScene, E3dScene* pDstScene, Point aOffset); + + bool IsConvertTo3DObjPossible() const; + void ConvertMarkedObjTo3D(bool bExtrude=true, basegfx::B2DPoint aPnt1 = basegfx::B2DPoint(0.0, 0.0), basegfx::B2DPoint aPnt2 = basegfx::B2DPoint(0.0, 1.0)); + + // Nachtraeglichhe Korrekturmoeglichkeit um alle Extrudes in einer + // bestimmten Tiefensortierung anzulegen + void DoDepthArrange(E3dScene* pScene, double fDepth); + void ConvertMarkedToPolyObj(sal_Bool bLineToArea); + E3dScene* SetCurrent3DObj(E3dObject* p3DObj); + void Start3DCreation(); + + // migration of overlay + bool Is3DRotationCreationActive() const { return (0L != mpMirrorOverlay); } + + virtual void MovAction(const Point& rPnt); + void End3DCreation(bool bUseDefaultValuesForMirrorAxes=false); + void ResetCreationActive(); + + double GetDefaultCamPosZ(); + + double &DefaultScaleX () + { + return fDefaultScaleX; + } + + double DefaultScaleX () const + { + return fDefaultScaleX; + } + + double &DefaultScaleY () + { + return fDefaultScaleY; + } + + double DefaultScaleY () const + { + return fDefaultScaleY; + } + + double &DefaultScaleZ () + { + return fDefaultScaleZ; + } + + double DefaultScaleZ () const + { + return fDefaultScaleZ; + } + + double &DefaultRotateX () + { + return fDefaultRotateX; + } + + double DefaultRotateX () const + { + return fDefaultRotateX; + } + + double &DefaultRotateY () + { + return fDefaultRotateY; + } + + double DefaultRotateY () const + { + return fDefaultRotateY; + } + + double &DefaultRotateZ () + { + return fDefaultRotateZ; + } + + double DefaultRotateZ () const + { + return fDefaultRotateZ; + } + + double &DefaultExtrusionDeepth () + { + return fDefaultExtrusionDeepth; + } + + double DefaultExtrusionDeepth () const + { + return fDefaultExtrusionDeepth; + } + + double GetDefaultCamFocal(); + + double &DefaultLightIntensity () + { + return fDefaultLightIntensity; + } + + double DefaultLightIntensity () const + { + return fDefaultLightIntensity; + } + + double &DefaultAmbientIntensity () + { + return fDefaultAmbientIntensity; + } + + double DefaultAmbientIntensity () const + { + return fDefaultAmbientIntensity; + } + + const Color &DefaultLightColor () const + { + return aDefaultLightColor; + } + + Color DefaultLightColor () + { + return aDefaultLightColor; + } + + const Color &DefaultAmbientColor () const + { + return aDefaultAmbientColor; + } + + Color DefaultAmbientColor () + { + return aDefaultAmbientColor; + } + + long GetHDefaultSegments() const { return nHDefaultSegments; } + void SetHDefaultSegments(long nSegs) { nHDefaultSegments = nSegs; } + + long GetVDefaultSegments() const { return nVDefaultSegments; } + void SetVDefaultSegments(long nSegs) { nVDefaultSegments = nSegs; } + + bool IsBreak3DObjPossible() const; + void Break3DObj(); + + sal_Bool DoubleSided () const + { + return bDoubleSided; + } + + sal_Bool &DoubleSided () + { + return bDoubleSided; + } + + SfxItemSet Get3DAttributes(E3dScene* pInScene = NULL, sal_Bool bOnly3DAttr=sal_False) const; + void Set3DAttributes(const SfxItemSet& rAttr, E3dScene* pInScene = NULL, sal_Bool bOnly3DAttr=sal_False); +}; + +#endif // _E3D_VIEW3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/viewlayoutitem.hxx b/include/svx/viewlayoutitem.hxx new file mode 100644 index 000000000000..c7509ea7c1d1 --- /dev/null +++ b/include/svx/viewlayoutitem.hxx @@ -0,0 +1,55 @@ +/* -*- 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 _SVX_VIEWLAYOUTITEM_HXX +#define _SVX_VIEWLAYOUTITEM_HXX + +#include <svl/intitem.hxx> +#include <svx/svxids.hrc> +#include "svx/svxdllapi.h" + +//------------------------------------------------------------------------- + +class SVX_DLLPUBLIC SvxViewLayoutItem: public SfxUInt16Item +{ + bool mbBookMode; + +public: + TYPEINFO(); + + SvxViewLayoutItem( sal_uInt16 nColumns = 0, bool bBookMode = false, sal_uInt16 nWhich = SID_ATTR_VIEWLAYOUT ); + SvxViewLayoutItem( const SvxViewLayoutItem& ); + ~SvxViewLayoutItem(); + + void SetBookMode( bool bNew ) {mbBookMode = bNew; } + bool IsBookMode() const {return mbBookMode; } + + // "pure virtual Methoden" vom SfxPoolItem + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + virtual SfxPoolItem* Create( SvStream& rStrm, sal_uInt16 nVersion ) const; // leer + virtual SvStream& Store( SvStream& rStrm , sal_uInt16 nItemVersion ) const; // leer + virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; // leer + virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ); // leer +}; + +//------------------------------------------------------------------------ + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/viewpt3d.hxx b/include/svx/viewpt3d.hxx new file mode 100644 index 000000000000..6b00ae2fa186 --- /dev/null +++ b/include/svx/viewpt3d.hxx @@ -0,0 +1,116 @@ +/* -*- 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 _VIEWPT3D_HXX +#define _VIEWPT3D_HXX + +#include "svx/svxdllapi.h" +#include <basegfx/matrix/b3dhommatrix.hxx> +#include <basegfx/point/b3dpoint.hxx> +#include <basegfx/vector/b3dvector.hxx> +#include <tools/gen.hxx> + +// predefines +namespace basegfx { class B3DRange; } // end of namespace basegfx + +/************************************************************************* +|* +|* enums fuer Projektion und Seitenverhaeltnis +|* +\************************************************************************/ + +enum ProjectionType { PR_PARALLEL, PR_PERSPECTIVE }; +enum AspectMapType { AS_NO_MAPPING, AS_HOLD_SIZE, AS_HOLD_X, AS_HOLD_Y }; + + +/************************************************************************* +|* +|* 3D-Viewport nach PHIGS +|* +\************************************************************************/ + +class SVX_DLLPUBLIC Viewport3D +{ + protected: + basegfx::B3DHomMatrix aViewTf; // die eigentliche Transformationsmatrix + basegfx::B3DPoint aVRP; // View Reference Point + basegfx::B3DVector aVPN; // View Plane Normal + basegfx::B3DVector aVUV; // View Up Vector + basegfx::B3DPoint aPRP; // Projection Reference Point(View-Koordinaten) + // bisher wird nur die Z-Koordinate beachtet + double fVPD; // View Plane Distance + double fNearClipDist; // Abstand der vorderen Clippingebene + double fFarClipDist; // Abstand der hinteren Clippingebene + + ProjectionType eProjection; // Art der Projektion + AspectMapType eAspectMapping; // Flag fuer Seitenverhaeltnis-Anpassung + // bei Ausgabe auf das Geraet + Rectangle aDeviceRect; // Position und Groesse des Ausgabebereichs + + struct + { + double X, Y, W, H; // Position und Groesse des View-Windows + } aViewWin; // in View-Koordinaten + + basegfx::B3DPoint aViewPoint; // Beobachterstandpunkt in Weltkoordinaten; + // wird mit der Transformation berechnet + sal_Bool bTfValid; // Flag, ob Transformation gueltig ist + + double fWRatio; // Device/View-Seitenverhaeltnisse + double fHRatio; + + void MakeTransform(void); + + public: + Viewport3D(); + + void SetVRP(const basegfx::B3DPoint& rNewVRP); + void SetVPN(const basegfx::B3DVector& rNewVPN); + void SetVUV(const basegfx::B3DVector& rNewVUV); + void SetPRP(const basegfx::B3DPoint& rNewPRP); + void SetVPD(double fNewVPD); + + const basegfx::B3DPoint& GetVRP() const { return aVRP; } + const basegfx::B3DVector& GetVPN() const { return aVPN; } + const basegfx::B3DVector& GetVUV() const { return aVUV; } + const basegfx::B3DPoint& GetPRP() const { return aPRP; } + double GetVPD() const { return fVPD; } + double GetNearClipDist() const { return fNearClipDist; } + double GetFarClipDist() const { return fFarClipDist; } + + void SetProjection(ProjectionType ePrj) + { eProjection = ePrj; bTfValid = sal_False; } + ProjectionType GetProjection() const { return(eProjection); } + + void SetAspectMapping(AspectMapType eAsp) + { eAspectMapping = eAsp; bTfValid = sal_False; } + AspectMapType GetAspectMapping() { return eAspectMapping; } + + void SetViewWindow(double fX, double fY, double fW, double fH); + + void SetDeviceWindow(const Rectangle& rRect); + const Rectangle& GetDeviceWindow() const { return aDeviceRect; } + + // Beobachterstandpunkt in Weltkoordinaten zurueckgeben + const basegfx::B3DPoint& GetViewPoint(); +}; + +#endif // _VIEWPT3D_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/wrapfield.hxx b/include/svx/wrapfield.hxx new file mode 100644 index 000000000000..c8fa94ece3ce --- /dev/null +++ b/include/svx/wrapfield.hxx @@ -0,0 +1,51 @@ +/* -*- 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 SVX_WRAPFIELD_HXX +#define SVX_WRAPFIELD_HXX + +#include <vcl/field.hxx> +#include "svx/svxdllapi.h" + +namespace svx { + +// ============================================================================ + +/** A numeric spin field that wraps around the value on limits. + @descr Note: Use type "NumericField" in resources. */ +class SVX_DLLPUBLIC WrapField : public NumericField +{ +public: + explicit WrapField( Window* pParent, const ResId& rResId ); + explicit WrapField( Window* pParent, WinBits nBits ); + +protected: + /** Up event with wrap-around functionality. */ + virtual void Up(); + /** Down event with wrap-around functionality. */ + virtual void Down(); +}; + +// ============================================================================ + +} // namespace svx + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xattr.hxx b/include/svx/xattr.hxx new file mode 100644 index 000000000000..d3d1a1b6e057 --- /dev/null +++ b/include/svx/xattr.hxx @@ -0,0 +1,38 @@ +/* -*- 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 _XATTR_HXX +#define _XATTR_HXX + +#include <svx/xit.hxx> +#include <svx/xcolit.hxx> +#include <svx/xgrad.hxx> +#include <svx/xhatch.hxx> +#include <svx/xlineit.hxx> +#include <svx/xfillit.hxx> +#include <svx/xtextit.hxx> +#include <svx/xlineit0.hxx> +#include <svx/xfillit0.hxx> +#include <svx/xtextit0.hxx> +#include <svx/xsetit.hxx> +#include <svx/xlinjoit.hxx> +#include <svx/xlncapit.hxx> + +#endif // _XATTR_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xbitmap.hxx b/include/svx/xbitmap.hxx new file mode 100644 index 000000000000..959ceafdbd72 --- /dev/null +++ b/include/svx/xbitmap.hxx @@ -0,0 +1,66 @@ +/* -*- 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 _SVX_XBITMAP_HXX +#define _SVX_XBITMAP_HXX + +#include <tools/color.hxx> +#include <vcl/bitmap.hxx> +#include <svtools/grfmgr.hxx> +#include <svx/xenum.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC XOBitmap +{ +private: + XBitmapType eType; + GraphicObject aGraphicObject; + sal_uInt16* pPixelArray; + Size aArraySize; + Color aPixelColor; + Color aBckgrColor; + sal_Bool bGraphicDirty; + + const GraphicObject& GetGraphicObject() const; + +public: + XOBitmap( const Bitmap& rBitmap ); + XOBitmap( const XOBitmap& rXBmp ); + ~XOBitmap(); + + XOBitmap& operator=( const XOBitmap& rXOBitmap ); + int operator==( const XOBitmap& rXOBitmap ) const; + + void Bitmap2Array(); + void Array2Bitmap(); + + void SetBitmapType( XBitmapType eNewType ) { eType = eNewType; } + void SetPixelColor( const Color& rColor ) { aPixelColor = rColor; bGraphicDirty = sal_True; } + void SetPixelSize( const Size& rSize ) { aArraySize = rSize; bGraphicDirty = sal_True; } + void SetBackgroundColor( const Color& rColor ) { aBckgrColor = rColor; bGraphicDirty = sal_True; } + + XBitmapType GetBitmapType() const { return eType; } + Bitmap GetBitmap() const; + Color GetPixelColor() const { return aPixelColor; } + Color GetBackgroundColor() const { return aBckgrColor; } +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xbtmpit.hxx b/include/svx/xbtmpit.hxx new file mode 100644 index 000000000000..d30e2fd5001f --- /dev/null +++ b/include/svx/xbtmpit.hxx @@ -0,0 +1,75 @@ +/* -*- 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 _SVX_XBTMPIT_HXX +#define _SVX_XBTMPIT_HXX + +#include <svx/svxdllapi.h> +#include <svx/xit.hxx> +#include <svtools/grfmgr.hxx> + +class SdrModel; +class BitmapColor; + +////////////////////////////////////////////////////////////////////////////// +// helper to construct historical 8x8 bitmaps with two colors + +Bitmap SVX_DLLPUBLIC createHistorical8x8FromArray(const sal_uInt16* pArray, Color aColorPix, Color aColorBack); +bool SVX_DLLPUBLIC isHistorical8x8(const BitmapEx& rBitmapEx, BitmapColor& o_rBack, BitmapColor& o_rFront); + +////////////////////////////////////////////////////////////////////////////// +// class XFillBitmapItem + +class SVX_DLLPUBLIC XFillBitmapItem : public NameOrIndex +{ +private: + GraphicObject maGraphicObject; + +public: + TYPEINFO(); + XFillBitmapItem() : NameOrIndex(XATTR_FILLBITMAP, -1 ) {} + XFillBitmapItem(const String& rName, const GraphicObject& rGraphicObject); + XFillBitmapItem(SfxItemPool* pPool, const GraphicObject& rGraphicObject); + XFillBitmapItem( const XFillBitmapItem& rItem ); + XFillBitmapItem( SvStream& rIn, sal_uInt16 nVer = 0 ); + + virtual int operator==( const SfxPoolItem& rItem ) const; + virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + virtual SvStream& Store( SvStream& rOut, sal_uInt16 nItemVersion ) const; + virtual sal_uInt16 GetVersion( sal_uInt16 nFileFormatVersion ) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + const GraphicObject& GetGraphicObject() const; + void SetGraphicObject(const GraphicObject& rGraphicObject); + + static sal_Bool CompareValueFunc( const NameOrIndex* p1, const NameOrIndex* p2 ); + XFillBitmapItem* checkForUniqueItem( SdrModel* pModel ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xcolit.hxx b/include/svx/xcolit.hxx new file mode 100644 index 000000000000..461c2b38af7e --- /dev/null +++ b/include/svx/xcolit.hxx @@ -0,0 +1,61 @@ +/* -*- 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 _SVX_XCOLORITEM_HXX +#define _SVX_XCOLORITEM_HXX + +#include <tools/color.hxx> +#include "svx/svxdllapi.h" + +#include <svx/xit.hxx> + +class XColorList; + +//----------------- +// class XColorItem +//----------------- +class SVX_DLLPUBLIC XColorItem : public NameOrIndex +{ + Color aColor; + +public: + TYPEINFO(); + XColorItem() {} + XColorItem(sal_uInt16 nWhich, sal_Int32 nIndex, const Color& rTheColor); + + 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 ); + + XColorItem(sal_uInt16 nWhich, const Color& rTheColor); + XColorItem(sal_uInt16 nWhich, const String& rName, const Color& rTheColor); + XColorItem(sal_uInt16 nWhich, SvStream& rIn); + XColorItem(const XColorItem& rItem); + + virtual int operator==(const SfxPoolItem& rItem) const; + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual SvStream& Store(SvStream& rOut, sal_uInt16 nItemVersion ) const; + + const Color& GetColorValue(const XColorList* pTable = 0) const; + void SetColorValue(const Color& rNew) { aColor = rNew; Detach(); } +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xdash.hxx b/include/svx/xdash.hxx new file mode 100644 index 000000000000..a55d3b83fa67 --- /dev/null +++ b/include/svx/xdash.hxx @@ -0,0 +1,71 @@ +/* -*- 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 _SVX_XDASH_HXX +#define _SVX_XDASH_HXX + +//------------- +// class XDash +//------------- + +#include <svx/xenum.hxx> +#include "svx/svxdllapi.h" + +#include <vector> + +class SVX_DLLPUBLIC XDash +{ +protected: + XDashStyle eDash; + sal_uInt16 nDots; + sal_uIntPtr nDotLen; + sal_uInt16 nDashes; + sal_uIntPtr nDashLen; + sal_uIntPtr nDistance; + +public: + XDash(XDashStyle eDash = XDASH_RECT, + sal_uInt16 nDots = 1, sal_uIntPtr nDotLen = 20, + sal_uInt16 nDashes = 1, sal_uIntPtr nDashLen = 20, sal_uIntPtr nDistance = 20); + + bool operator==(const XDash& rDash) const; + + void SetDashStyle(XDashStyle eNewStyle) { eDash = eNewStyle; } + void SetDots(sal_uInt16 nNewDots) { nDots = nNewDots; } + void SetDotLen(sal_uIntPtr nNewDotLen) { nDotLen = nNewDotLen; } + void SetDashes(sal_uInt16 nNewDashes) { nDashes = nNewDashes; } + void SetDashLen(sal_uIntPtr nNewDashLen) { nDashLen = nNewDashLen; } + void SetDistance(sal_uIntPtr nNewDistance) { nDistance = nNewDistance; } + + XDashStyle GetDashStyle() const { return eDash; } + sal_uInt16 GetDots() const { return nDots; } + sal_uIntPtr GetDotLen() const { return nDotLen; } + sal_uInt16 GetDashes() const { return nDashes; } + sal_uIntPtr GetDashLen() const { return nDashLen; } + sal_uIntPtr GetDistance() const { return nDistance; } + + // XDash is translated into an array of doubles which describe the lengths of the + // dashes, dots and empty passages. It returns the complete length of the full DashDot + // sequence and fills the given vetor of doubles accordingly (also resizing, so deleting it). + double CreateDotDashArray(::std::vector< double >& rDotDashArray, double fLineWidth) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xdef.hxx b/include/svx/xdef.hxx new file mode 100644 index 000000000000..ea38bbbbf644 --- /dev/null +++ b/include/svx/xdef.hxx @@ -0,0 +1,97 @@ +/* -*- 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 _XDEF_HXX +#define _XDEF_HXX + + +/************************************************************************* +|* +|* Adding an attribute: Copy line, above which you want to add something, +|* change the label and add it at the end of the following line, too +|* +\************************************************************************/ + +#define COL_DEFAULT_SHAPE_FILLING RGB_COLORDATA( 0x72, 0x9F, 0xCF ) +#define COL_DEFAULT_SHAPE_STROKE RGB_COLORDATA( 52, 101, 175 ) + +#define XATTR_START 1000 + +#define XATTR_LINE_FIRST XATTR_START /* V3: 1000 V2: 1000 */ +#define XATTR_LINESTYLE XATTR_LINE_FIRST +#define XATTR_LINEDASH (XATTR_LINE_FIRST + 1) /* V3: 1001 V2: 1001 */ +#define XATTR_LINEWIDTH (XATTR_LINE_FIRST + 2) /* V3: 1002 V2: 1002 */ +#define XATTR_LINECOLOR (XATTR_LINE_FIRST + 3) /* V3: 1003 V2: 1003 */ +#define XATTR_LINESTART (XATTR_LINE_FIRST + 4) /* V3: 1004 V2: 1004 */ +#define XATTR_LINEEND (XATTR_LINE_FIRST + 5) /* V3: 1005 V2: 1005 */ +#define XATTR_LINESTARTWIDTH (XATTR_LINE_FIRST + 6) /* V3: 1006 V2: 1006 */ +#define XATTR_LINEENDWIDTH (XATTR_LINE_FIRST + 7) /* V3: 1007 V2: 1007 */ +#define XATTR_LINESTARTCENTER (XATTR_LINE_FIRST + 8) /* V3: 1008 V2: 1008 */ +#define XATTR_LINEENDCENTER (XATTR_LINE_FIRST + 9) /* V3: 1009 V2: 1009 */ +#define XATTR_LINETRANSPARENCE (XATTR_LINE_FIRST + 10) /* V3: 1010 V2: 1010 */ +#define XATTR_LINEJOINT (XATTR_LINE_FIRST + 11) /* V3: 1011 V2: 1011 */ +#define XATTR_LINECAP (XATTR_LINE_FIRST + 12) /* V3: 1012 */ +#define XATTR_LINE_LAST XATTR_LINECAP +#define XATTRSET_LINE (XATTR_LINE_LAST + 1) /* V3: 1017 V2: 1017 */ + +#define XATTR_FILL_FIRST (XATTRSET_LINE + 1) /* V3: 1018 V2: 1018 */ +#define XATTR_FILLSTYLE XATTR_FILL_FIRST +#define XATTR_FILLCOLOR (XATTR_FILL_FIRST + 1) /* V3: 1019 V2: 1019 */ +#define XATTR_FILLGRADIENT (XATTR_FILL_FIRST + 2) /* V3: 1020 V2: 1020 */ +#define XATTR_FILLHATCH (XATTR_FILL_FIRST + 3) /* V3: 1021 V2: 1021 */ +#define XATTR_FILLBITMAP (XATTR_FILL_FIRST + 4) /* V3: 1022 V2: 1022 */ +#define XATTR_FILLTRANSPARENCE (XATTR_FILL_FIRST + 5) /* V3: 1023 V2: 1023 */ +#define XATTR_GRADIENTSTEPCOUNT (XATTR_FILL_FIRST + 6) /* V3: 1024 V2: 1024 */ +#define XATTR_FILLBMP_TILE (XATTR_FILL_FIRST + 7) /* V3: 1025 V2: 1025 */ +#define XATTR_FILLBMP_POS (XATTR_FILL_FIRST + 8) /* V3: 1026 V2: 1026 */ +#define XATTR_FILLBMP_SIZEX (XATTR_FILL_FIRST + 9) /* V3: 1027 V2: 1027 */ +#define XATTR_FILLBMP_SIZEY (XATTR_FILL_FIRST + 10) /* V3: 1028 V2: 1028 */ +#define XATTR_FILLFLOATTRANSPARENCE (XATTR_FILL_FIRST + 11) /* V3: 1029 V2: 1029 */ +#define XATTR_SECONDARYFILLCOLOR (XATTR_FILL_FIRST + 12) /* V3: 1030 */ +#define XATTR_FILLBMP_SIZELOG (XATTR_FILL_FIRST + 13) /* V3: 1031 */ +#define XATTR_FILLBMP_TILEOFFSETX (XATTR_FILL_FIRST + 14) /* V3: 1032 */ +#define XATTR_FILLBMP_TILEOFFSETY (XATTR_FILL_FIRST + 15) /* V3: 1033 */ +#define XATTR_FILLBMP_STRETCH (XATTR_FILL_FIRST + 16) /* V3: 1034 */ +#define XATTR_FILLBMP_POSOFFSETX (XATTR_FILL_FIRST + 17) /* V3: 1041 */ +#define XATTR_FILLBMP_POSOFFSETY (XATTR_FILL_FIRST + 18) /* V3: 1042 */ +#define XATTR_FILLBACKGROUND (XATTR_FILL_FIRST + 19) /* V3: 1043 */ +#define XATTR_FILL_LAST XATTR_FILLBACKGROUND +#define XATTRSET_FILL (XATTR_FILL_LAST + 1) /* V3: 1047 V2: 1030 */ + +#define XATTR_TEXT_FIRST (XATTRSET_FILL + 1) +#define XATTR_FORMTXTSTYLE XATTR_TEXT_FIRST /* V3: 1048 V2: 1031 */ +#define XATTR_FORMTXTADJUST (XATTR_TEXT_FIRST + 1) /* V3: 1049 V2: 1032 */ +#define XATTR_FORMTXTDISTANCE (XATTR_TEXT_FIRST + 2) /* V3: 1050 V2: 1033 */ +#define XATTR_FORMTXTSTART (XATTR_TEXT_FIRST + 3) /* V3: 1051 V2: 1034 */ +#define XATTR_FORMTXTMIRROR (XATTR_TEXT_FIRST + 4) /* V3: 1052 V2: 1035 */ +#define XATTR_FORMTXTOUTLINE (XATTR_TEXT_FIRST + 5) /* V3: 1053 V2: 1036 */ +#define XATTR_FORMTXTSHADOW (XATTR_TEXT_FIRST + 6) /* V3: 1054 V2: 1037 */ +#define XATTR_FORMTXTSHDWCOLOR (XATTR_TEXT_FIRST + 7) /* V3: 1055 V2: 1038 */ +#define XATTR_FORMTXTSHDWXVAL (XATTR_TEXT_FIRST + 8) /* V3: 1056 V2: 1039 */ +#define XATTR_FORMTXTSHDWYVAL (XATTR_TEXT_FIRST + 9) /* V3: 1057 V2: 1040 */ +#define XATTR_FORMTXTSTDFORM (XATTR_TEXT_FIRST + 10) /* V3: 1058 V2: 1041 */ +#define XATTR_FORMTXTHIDEFORM (XATTR_TEXT_FIRST + 11) /* V3: 1059 V2: 1042 */ +#define XATTR_FORMTXTSHDWTRANSP (XATTR_TEXT_FIRST + 12) /* V3: 1060 V2: 1043 */ +#define XATTR_TEXT_LAST XATTR_FORMTXTSHDWTRANSP + +#define XATTR_END XATTR_TEXT_LAST + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xenum.hxx b/include/svx/xenum.hxx new file mode 100644 index 000000000000..df0b629d5980 --- /dev/null +++ b/include/svx/xenum.hxx @@ -0,0 +1,53 @@ +/* -*- 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 _XENUM_HXX +#define _XENUM_HXX + +enum XLineStyle { XLINE_NONE, XLINE_SOLID, XLINE_DASH }; +enum XLineJoint +{ + XLINEJOINT_NONE, // no rounding + XLINEJOINT_MIDDLE, // calc middle value between joints + XLINEJOINT_BEVEL, // join edges with line + XLINEJOINT_MITER, // extend till cut + XLINEJOINT_ROUND // create arc +}; +enum XDashStyle { XDASH_RECT, XDASH_ROUND, XDASH_RECTRELATIVE, + XDASH_ROUNDRELATIVE }; +enum XFillStyle { XFILL_NONE, XFILL_SOLID, XFILL_GRADIENT, XFILL_HATCH, + XFILL_BITMAP }; +enum XGradientStyle { XGRAD_LINEAR, XGRAD_AXIAL, XGRAD_RADIAL, + XGRAD_ELLIPTICAL, XGRAD_SQUARE, XGRAD_RECT }; +enum XHatchStyle { XHATCH_SINGLE, XHATCH_DOUBLE, XHATCH_TRIPLE }; +enum XFormTextStyle { XFT_ROTATE, XFT_UPRIGHT, XFT_SLANTX, XFT_SLANTY, + XFT_NONE }; +enum XFormTextAdjust { XFT_LEFT, XFT_RIGHT, XFT_AUTOSIZE, XFT_CENTER }; +enum XFormTextShadow { XFTSHADOW_NONE, XFTSHADOW_NORMAL, XFTSHADOW_SLANT}; +enum XFormTextStdForm { XFTFORM_NONE = 0, XFTFORM_TOPCIRC, XFTFORM_BOTCIRC, + XFTFORM_LFTCIRC, XFTFORM_RGTCIRC, XFTFORM_TOPARC, + XFTFORM_BOTARC, XFTFORM_LFTARC, XFTFORM_RGTARC, + XFTFORM_BUTTON1, XFTFORM_BUTTON2, + XFTFORM_BUTTON3, XFTFORM_BUTTON4}; +enum XBitmapType { XBITMAP_IMPORT, XBITMAP_8X8 }; + + +#endif // _XENUM_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xexch.hxx b/include/svx/xexch.hxx new file mode 100644 index 000000000000..bd0034d972a2 --- /dev/null +++ b/include/svx/xexch.hxx @@ -0,0 +1,59 @@ +/* -*- 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 _SVX_XEXCH_HXX +#define _SVX_XEXCH_HXX + + +#include <tools/stream.hxx> +#include "svx/svxdllapi.h" + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// Clipboard format for XOutDev filling attributes +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +class XFillAttrSetItem; +class SfxItemPool; + + + +class SVX_DLLPUBLIC XFillExchangeData +{ +private: + XFillAttrSetItem* pXFillAttrSetItem; + SfxItemPool* pPool; + +public: + TYPEINFO(); + + XFillExchangeData(); + XFillExchangeData(const XFillAttrSetItem rXFillAttrSetItem); + virtual ~XFillExchangeData(); + + XFillExchangeData& operator=( const XFillExchangeData& rXFillExchangeData ); + + SVX_DLLPUBLIC friend SvStream& operator<<( SvStream& rOStm, const XFillExchangeData& rXFillExchangeData ); + SVX_DLLPUBLIC friend SvStream& operator>>( SvStream& rIStm, XFillExchangeData& rXFillExchangeData ); + + XFillAttrSetItem* GetXFillAttrSetItem() { return pXFillAttrSetItem; } +}; + +#endif // _SVX_XEXCH_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xfillit.hxx b/include/svx/xfillit.hxx new file mode 100644 index 000000000000..b0270a9d3aa9 --- /dev/null +++ b/include/svx/xfillit.hxx @@ -0,0 +1,42 @@ +/* -*- 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 _SVX_FILLITEM_HXX +#define _SVX_FILLITEM_HXX + +#include <vcl/bitmap.hxx> +#include <svx/xcolit.hxx> +#include <svx/xgrad.hxx> +#include <svx/xhatch.hxx> +#include <svx/xenum.hxx> +#include <svl/eitem.hxx> + +#include <svx/xflclit.hxx> +#include <svx/xsflclit.hxx> +#include <svx/xflgrit.hxx> +#include <svx/xflhtit.hxx> +#include <svx/xbtmpit.hxx> +#include <svx/xflftrit.hxx> + +class XGradient; +class XOBitmap; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xfillit0.hxx b/include/svx/xfillit0.hxx new file mode 100644 index 000000000000..596d9c9ae8b4 --- /dev/null +++ b/include/svx/xfillit0.hxx @@ -0,0 +1,57 @@ +/* -*- 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 SVX_XFILLIT0_HXX +#define SVX_XFILLIT0_HXX + +#include <svl/eitem.hxx> + +#include <svx/xdef.hxx> +#include <svx/xenum.hxx> +#include "svx/svxdllapi.h" + +//--------------------- +// class XFillStyleItem +//--------------------- + +class SVX_DLLPUBLIC XFillStyleItem : public SfxEnumItem +{ +public: + TYPEINFO(); + XFillStyleItem(XFillStyle = XFILL_SOLID); + XFillStyleItem(XFillStyle, sal_uInt16 nWhich); + XFillStyleItem(SvStream& rIn); + + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + virtual sal_uInt16 GetValueCount() const; + XFillStyle GetValue() const { return (XFillStyle) SfxEnumItem::GetValue(); } +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xflasit.hxx b/include/svx/xflasit.hxx new file mode 100644 index 000000000000..44c95e08eabf --- /dev/null +++ b/include/svx/xflasit.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SVX_XFLASIT_HXX +#define _SVX_XFLASIT_HXX + +#include <svl/poolitem.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* SetItem mit dem ItemSet aller Fuellattribute +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFillAttrSetItem : public SfxSetItem +{ +public: + TYPEINFO(); + XFillAttrSetItem(SfxItemSet* pItemSet ); + XFillAttrSetItem(SfxItemPool* pItemPool); + XFillAttrSetItem(const XFillAttrSetItem& rAttr); + XFillAttrSetItem(const XFillAttrSetItem& rAttr, + SfxItemPool* pItemPool); + virtual SfxPoolItem* Clone( SfxItemPool* pToPool ) const; + virtual SfxPoolItem* Create( SvStream& rStream, sal_uInt16 nVersion ) const; + virtual SvStream& Store( SvStream& rStream, sal_uInt16 nItemVersion ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xflbckit.hxx b/include/svx/xflbckit.hxx new file mode 100644 index 000000000000..85bd4dabad17 --- /dev/null +++ b/include/svx/xflbckit.hxx @@ -0,0 +1,52 @@ +/* -*- 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 _SVX_XFLBCKIT_HXX +#define _SVX_XFLBCKIT_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* Item to enable background for filled objects +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFillBackgroundItem : public SfxBoolItem +{ +public: + TYPEINFO(); + + XFillBackgroundItem( sal_Bool bFill = sal_False ); + SVX_DLLPRIVATE XFillBackgroundItem( SvStream& rIn ); + + + SVX_DLLPRIVATE virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + SVX_DLLPRIVATE virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + + SVX_DLLPRIVATE virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xflbmpit.hxx b/include/svx/xflbmpit.hxx new file mode 100644 index 000000000000..3c9ea1ce5654 --- /dev/null +++ b/include/svx/xflbmpit.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SVX_XFLBMPIT_HXX +#define _SVX_XFLBMPIT_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC XFillBmpPosItem : public SfxEnumItem +{ +public: + TYPEINFO(); + XFillBmpPosItem( RECT_POINT eRP = RP_MM ); + SVX_DLLPRIVATE XFillBmpPosItem( SvStream& rIn ); + + SVX_DLLPRIVATE virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const; + SVX_DLLPRIVATE virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + + SVX_DLLPRIVATE virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + SVX_DLLPRIVATE virtual sal_uInt16 GetValueCount() const; + SVX_DLLPRIVATE RECT_POINT GetValue() const { return (RECT_POINT) SfxEnumItem::GetValue(); } +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xflbmsli.hxx b/include/svx/xflbmsli.hxx new file mode 100644 index 000000000000..5ed01b015d99 --- /dev/null +++ b/include/svx/xflbmsli.hxx @@ -0,0 +1,44 @@ +/* -*- 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 _SVX_XFLBMSLI_HXX +#define _SVX_XFLBMSLI_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC XFillBmpSizeLogItem : public SfxBoolItem +{ +public: + TYPEINFO(); + XFillBmpSizeLogItem( sal_Bool bLog = sal_True ); + SVX_DLLPRIVATE XFillBmpSizeLogItem( SvStream& rIn ); + + SVX_DLLPRIVATE virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const; + SVX_DLLPRIVATE virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + + SVX_DLLPRIVATE virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xflbmsxy.hxx b/include/svx/xflbmsxy.hxx new file mode 100644 index 000000000000..0042e5ad57cd --- /dev/null +++ b/include/svx/xflbmsxy.hxx @@ -0,0 +1,70 @@ +/* -*- 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 _SVX_XFLBMSXY_HXX +#define _SVX_XFLBMSXY_HXX + +#include <svl/metitem.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC XFillBmpSizeXItem : public SfxMetricItem +{ +public: + TYPEINFO(); + XFillBmpSizeXItem( long nSizeX = 0 ); + SVX_DLLPRIVATE XFillBmpSizeXItem( SvStream& rIn ); + + SVX_DLLPRIVATE virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const; + SVX_DLLPRIVATE virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + + SVX_DLLPRIVATE virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + // Dieses Item nimmt sowohl metrische als auch + // Prozentwerte ( sind negativ ) auf; das muessen + // wir hier beruecksichtigen + SVX_DLLPRIVATE virtual bool HasMetrics() const; +}; + +class SVX_DLLPUBLIC XFillBmpSizeYItem : public SfxMetricItem +{ +public: + TYPEINFO(); + XFillBmpSizeYItem( long nSizeY = 0 ); + SVX_DLLPRIVATE XFillBmpSizeYItem( SvStream& rIn ); + + SVX_DLLPRIVATE virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const; + SVX_DLLPRIVATE virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + + SVX_DLLPRIVATE virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + // Dieses Item nimmt sowohl metrische als auch + // Prozentwerte ( sind negativ ) auf; das muessen + // wir hier beruecksichtigen + SVX_DLLPRIVATE virtual bool HasMetrics() const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xflbmtit.hxx b/include/svx/xflbmtit.hxx new file mode 100644 index 000000000000..c5517d0c6759 --- /dev/null +++ b/include/svx/xflbmtit.hxx @@ -0,0 +1,44 @@ +/* -*- 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 _SVX_XFLBMTIT_HXX +#define _SVX_XFLBMTIT_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC XFillBmpTileItem : public SfxBoolItem +{ +public: + TYPEINFO(); + XFillBmpTileItem( sal_Bool bTile = sal_True ); + XFillBmpTileItem( SvStream& rIn ); + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xflboxy.hxx b/include/svx/xflboxy.hxx new file mode 100644 index 000000000000..5304484d3892 --- /dev/null +++ b/include/svx/xflboxy.hxx @@ -0,0 +1,60 @@ +/* -*- 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 _SVX_XFLBOXY_HXX +#define _SVX_XFLBOXY_HXX + +#include <svl/intitem.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC XFillBmpPosOffsetXItem : public SfxUInt16Item +{ +public: + TYPEINFO(); + XFillBmpPosOffsetXItem( sal_uInt16 nOffPosX = 0 ); + SVX_DLLPRIVATE XFillBmpPosOffsetXItem( SvStream& rIn ); + + SVX_DLLPRIVATE virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const; + SVX_DLLPRIVATE virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + + SVX_DLLPRIVATE virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +class SVX_DLLPUBLIC XFillBmpPosOffsetYItem : public SfxUInt16Item +{ +public: + TYPEINFO(); + XFillBmpPosOffsetYItem( sal_uInt16 nOffPosY = 0 ); + SVX_DLLPRIVATE XFillBmpPosOffsetYItem( SvStream& rIn ); + + SVX_DLLPRIVATE virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const; + SVX_DLLPRIVATE virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + + SVX_DLLPRIVATE virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xflbstit.hxx b/include/svx/xflbstit.hxx new file mode 100644 index 000000000000..ca14d6a341d8 --- /dev/null +++ b/include/svx/xflbstit.hxx @@ -0,0 +1,44 @@ +/* -*- 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 _SVX_XFLBSTIT_HXX +#define _SVX_XFLBSTIT_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC XFillBmpStretchItem : public SfxBoolItem +{ +public: + TYPEINFO(); + XFillBmpStretchItem( sal_Bool bStretch = sal_True ); + XFillBmpStretchItem( SvStream& rIn ); + + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xflbtoxy.hxx b/include/svx/xflbtoxy.hxx new file mode 100644 index 000000000000..e02345abdd37 --- /dev/null +++ b/include/svx/xflbtoxy.hxx @@ -0,0 +1,60 @@ +/* -*- 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 _SVX_XFLBTOXY_HXX +#define _SVX_XFLBTOXY_HXX + +#include <svl/intitem.hxx> +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC XFillBmpTileOffsetXItem : public SfxUInt16Item +{ +public: + TYPEINFO(); + XFillBmpTileOffsetXItem( sal_uInt16 nOffX = 0 ); + SVX_DLLPRIVATE XFillBmpTileOffsetXItem( SvStream& rIn ); + + SVX_DLLPRIVATE virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const; + SVX_DLLPRIVATE virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + + SVX_DLLPRIVATE virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +class SVX_DLLPUBLIC XFillBmpTileOffsetYItem : public SfxUInt16Item +{ +public: + TYPEINFO(); + XFillBmpTileOffsetYItem( sal_uInt16 nOffX = 0 ); + SVX_DLLPRIVATE XFillBmpTileOffsetYItem( SvStream& rIn ); + + SVX_DLLPRIVATE virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const; + SVX_DLLPRIVATE virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + + SVX_DLLPRIVATE virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xflclit.hxx b/include/svx/xflclit.hxx new file mode 100644 index 000000000000..7c0320ffe2f7 --- /dev/null +++ b/include/svx/xflclit.hxx @@ -0,0 +1,56 @@ +/* -*- 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 _SVX_XFLCLIT_HXX +#define _SVX_XFLCLIT_HXX + +#include <svx/xcolit.hxx> +#include "svx/svxdllapi.h" + +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +// Fuellattribute +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +//--------------------- +// class XFillColorItem +//--------------------- +class SVX_DLLPUBLIC XFillColorItem : public XColorItem +{ +public: + TYPEINFO(); + XFillColorItem() {} + XFillColorItem(sal_Int32 nIndex, const Color& rTheColor); + XFillColorItem(const String& rName, const Color& rTheColor); + XFillColorItem(SvStream& rIn); + + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xflftrit.hxx b/include/svx/xflftrit.hxx new file mode 100644 index 000000000000..494cc99f21fe --- /dev/null +++ b/include/svx/xflftrit.hxx @@ -0,0 +1,62 @@ +/* -*- 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 _SVX_XFLFTRIT_HXX +#define _SVX_XFLFTRIT_HXX + +#include <svx/xflgrit.hxx> +#include "svx/svxdllapi.h" + +//----------------------------------- +// class XFillFloatTransparenceItem - +//----------------------------------- + +class SVX_DLLPUBLIC XFillFloatTransparenceItem : public XFillGradientItem +{ +private: + + sal_Bool bEnabled; + +public: + TYPEINFO(); + + XFillFloatTransparenceItem(); + XFillFloatTransparenceItem(const String& rName, const XGradient& rGradient, sal_Bool bEnable = sal_True ); + XFillFloatTransparenceItem(SfxItemPool* pPool, const XGradient& rTheGradient, sal_Bool bEnable = sal_True ); + XFillFloatTransparenceItem( const XFillFloatTransparenceItem& rItem ); + + virtual int operator==( const SfxPoolItem& rItem ) const; + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual sal_uInt16 GetVersion( sal_uInt16 nFileFormatVersion ) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, OUString &rText, const IntlWrapper * pIntlWrapper = 0 ) const; + + sal_Bool IsEnabled() const { return bEnabled; } + void SetEnabled( sal_Bool bEnable ) { bEnabled = bEnable; } + + static sal_Bool CompareValueFunc( const NameOrIndex* p1, const NameOrIndex* p2 ); + XFillFloatTransparenceItem* checkForUniqueItem( SdrModel* pModel ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xflgrit.hxx b/include/svx/xflgrit.hxx new file mode 100644 index 000000000000..1c2401f03dda --- /dev/null +++ b/include/svx/xflgrit.hxx @@ -0,0 +1,67 @@ +/* -*- 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 _SVX_XFLGRIT_HXX +#define _SVX_XFLGRIT_HXX + +#include <svx/xit.hxx> +#include <svx/xgrad.hxx> +#include "svx/svxdllapi.h" + +class SdrModel; + +//------------------------ +// class XFillGradientItem +//------------------------ +class SVX_DLLPUBLIC XFillGradientItem : public NameOrIndex +{ + XGradient aGradient; + +public: + TYPEINFO(); + XFillGradientItem() : NameOrIndex(XATTR_FILLGRADIENT, -1) {} + XFillGradientItem(sal_uInt16 nWhich_) : NameOrIndex(nWhich_, -1) {} + XFillGradientItem(sal_Int32 nIndex, const XGradient& rTheGradient); + XFillGradientItem(const OUString& rName, const XGradient& rTheGradient, sal_uInt16 nWhich = XATTR_FILLGRADIENT); + XFillGradientItem(const XGradient& rTheGradient); + XFillGradientItem(const XFillGradientItem& rItem); + XFillGradientItem(SvStream& rIn, sal_uInt16 nVer = 0); + + virtual int operator==(const SfxPoolItem& rItem) const; + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual SvStream& Store(SvStream& rOut, sal_uInt16 nItemVersion ) const; + virtual sal_uInt16 GetVersion( sal_uInt16 nFileFormatVersion ) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + const XGradient& GetGradientValue() const; // GetValue -> GetGradientValue + void SetGradientValue(const XGradient& rNew) { aGradient = rNew; Detach(); } // SetValue -> SetGradientValue + + static sal_Bool CompareValueFunc( const NameOrIndex* p1, const NameOrIndex* p2 ); + XFillGradientItem* checkForUniqueItem( SdrModel* pModel ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xflhtit.hxx b/include/svx/xflhtit.hxx new file mode 100644 index 000000000000..3b95e97c6a3c --- /dev/null +++ b/include/svx/xflhtit.hxx @@ -0,0 +1,67 @@ +/* -*- 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 _SVX_XFLHTIT_HXX +#define _SVX_XFLHTIT_HXX + +#include <svx/xit.hxx> +#include <svx/xhatch.hxx> +#include "svx/svxdllapi.h" + +class SdrModel; + +//--------------------- +// class XFillHatchItem +//--------------------- +class SVX_DLLPUBLIC XFillHatchItem : public NameOrIndex +{ + XHatch aHatch; + +public: + TYPEINFO(); + XFillHatchItem() : NameOrIndex(XATTR_FILLHATCH, -1) {} + XFillHatchItem(const String& rName, const XHatch& rTheHatch); + XFillHatchItem(SfxItemPool* pPool, const XHatch& rTheHatch); + XFillHatchItem(const XFillHatchItem& rItem); + XFillHatchItem(SvStream& rIn); + + virtual int operator==(const SfxPoolItem& rItem) const; + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual SvStream& Store(SvStream& rOut, sal_uInt16 nItemVersion ) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + virtual bool HasMetrics() const; + virtual bool ScaleMetrics(long nMul, long nDiv); + + const XHatch& GetHatchValue() const; // GetValue -> GetHatchValue + void SetHatchValue(const XHatch& rNew) { aHatch = rNew; Detach(); } // SetValue -> SetHatchValue + + static sal_Bool CompareValueFunc( const NameOrIndex* p1, const NameOrIndex* p2 ); + XFillHatchItem* checkForUniqueItem( SdrModel* pModel ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xfltrit.hxx b/include/svx/xfltrit.hxx new file mode 100644 index 000000000000..52f475c31845 --- /dev/null +++ b/include/svx/xfltrit.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SVX_XFLTRIT_HXX +#define _SVX_XFLTRIT_HXX + +#include <svl/intitem.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* Transparenz-Item fuer Fuellungen (Solid) +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFillTransparenceItem: public SfxUInt16Item +{ +public: + TYPEINFO(); + XFillTransparenceItem(sal_uInt16 nFillTransparence = 0); + XFillTransparenceItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xftadit.hxx b/include/svx/xftadit.hxx new file mode 100644 index 000000000000..0f52f64d3c05 --- /dev/null +++ b/include/svx/xftadit.hxx @@ -0,0 +1,49 @@ +/* -*- 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 _SVX_XFTADIT_HXX +#define _SVX_XFTADIT_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* FormText-AdjustItem +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFormTextAdjustItem : public SfxEnumItem +{ +public: + TYPEINFO(); + XFormTextAdjustItem(XFormTextAdjust = XFT_CENTER); + XFormTextAdjustItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; + XFormTextAdjust GetValue() const { return (XFormTextAdjust) SfxEnumItem::GetValue(); } + // #FontWork# + 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 ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xftdiit.hxx b/include/svx/xftdiit.hxx new file mode 100644 index 000000000000..0260e29687f9 --- /dev/null +++ b/include/svx/xftdiit.hxx @@ -0,0 +1,44 @@ +/* -*- 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 _SVX_XFTDIIT_HXX +#define _SVX_XFTDIIT_HXX + +#include <svl/metitem.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* FormText-DistanceItem +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFormTextDistanceItem : public SfxMetricItem +{ +public: + TYPEINFO(); + XFormTextDistanceItem(long nDist = 0); + XFormTextDistanceItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xftmrit.hxx b/include/svx/xftmrit.hxx new file mode 100644 index 000000000000..815049e3bb7c --- /dev/null +++ b/include/svx/xftmrit.hxx @@ -0,0 +1,44 @@ +/* -*- 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 _SVX_XFTMRIT_HXX +#define _SVX_XFTMRIT_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* FormText-MirrorItem +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFormTextMirrorItem : public SfxBoolItem +{ +public: + TYPEINFO(); + XFormTextMirrorItem(sal_Bool bMirror = sal_False); + XFormTextMirrorItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xftouit.hxx b/include/svx/xftouit.hxx new file mode 100644 index 000000000000..457247fa6cd2 --- /dev/null +++ b/include/svx/xftouit.hxx @@ -0,0 +1,43 @@ +/* -*- 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 _SVX_XFTOUIT_HXX +#define _SVX_XFTOUIT_HXX + +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* FormText-OutlineItem +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFormTextOutlineItem : public SfxBoolItem +{ +public: + TYPEINFO(); + XFormTextOutlineItem(sal_Bool bOutline = sal_False); + XFormTextOutlineItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xftsfit.hxx b/include/svx/xftsfit.hxx new file mode 100644 index 000000000000..ca4bd2b3f7fb --- /dev/null +++ b/include/svx/xftsfit.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SVX_XFTSFIT_HXX +#define _SVX_XFTSFIT_HXX + +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* FormText-StdFormItem +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFormTextStdFormItem : public SfxEnumItem +{ +public: + TYPEINFO(); + XFormTextStdFormItem(XFormTextStdForm = XFTFORM_NONE); + XFormTextStdFormItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; + XFormTextStdForm GetValue() const { return (XFormTextStdForm) SfxEnumItem::GetValue(); } + // #FontWork# + 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 ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xftshcit.hxx b/include/svx/xftshcit.hxx new file mode 100644 index 000000000000..8a84b2c1c84b --- /dev/null +++ b/include/svx/xftshcit.hxx @@ -0,0 +1,46 @@ +/* -*- 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 _SVX_XFTSHCLIT_HXX +#define _SVX_XFTSHCLIT_HXX + +#include <svx/xcolit.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* FormText-ShadowColorItem +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFormTextShadowColorItem : public XColorItem +{ +public: + TYPEINFO(); + XFormTextShadowColorItem() {} + XFormTextShadowColorItem(const String& rName, const Color& rTheColor); + XFormTextShadowColorItem(SvStream& rIn); + + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xftshit.hxx b/include/svx/xftshit.hxx new file mode 100644 index 000000000000..5ae8fc76078f --- /dev/null +++ b/include/svx/xftshit.hxx @@ -0,0 +1,49 @@ +/* -*- 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 _SVX_XFTSHIT_HXX +#define _SVX_XFTSHIT_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* FormText-ShadowItem +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFormTextShadowItem : public SfxEnumItem +{ +public: + TYPEINFO(); + XFormTextShadowItem(XFormTextShadow = XFTSHADOW_NONE); + XFormTextShadowItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; + XFormTextShadow GetValue() const { return (XFormTextShadow) SfxEnumItem::GetValue(); } + // #FontWork# + 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 ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xftshtit.hxx b/include/svx/xftshtit.hxx new file mode 100644 index 000000000000..e87e4a4f3cc5 --- /dev/null +++ b/include/svx/xftshtit.hxx @@ -0,0 +1,43 @@ +/* -*- 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 _SVX_XFTSHTIT_HXX +#define _SVX_XFTSHTIT_HXX + +#include <svl/intitem.hxx> + +/************************************************************************* +|* +|* FormText-Item fuer transparents Schatten +|* +\************************************************************************/ + +class XFormTextShadowTranspItem: public SfxUInt16Item +{ +public: + TYPEINFO(); + XFormTextShadowTranspItem(sal_uInt16 nShdwTransparence = 0); + XFormTextShadowTranspItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xftshxy.hxx b/include/svx/xftshxy.hxx new file mode 100644 index 000000000000..eb6ffb6020cc --- /dev/null +++ b/include/svx/xftshxy.hxx @@ -0,0 +1,60 @@ +/* -*- 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 _SVX_XFTSHXY_HXX +#define _SVX_XFTSHXY_HXX + +#include <svl/metitem.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* FormText-ShadowXValItem +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFormTextShadowXValItem : public SfxMetricItem +{ +public: + TYPEINFO(); + XFormTextShadowXValItem(long nVal = 0); + XFormTextShadowXValItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; +}; + +/************************************************************************* +|* +|* FormText-ShadowYValItem +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFormTextShadowYValItem : public SfxMetricItem +{ +public: + TYPEINFO(); + XFormTextShadowYValItem(long nVal = 0); + XFormTextShadowYValItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xftstit.hxx b/include/svx/xftstit.hxx new file mode 100644 index 000000000000..2a53b26b41c1 --- /dev/null +++ b/include/svx/xftstit.hxx @@ -0,0 +1,44 @@ +/* -*- 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 _SVX_XFTSTIT_HXX +#define _SVX_XFTSTIT_HXX + +#include <svl/metitem.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* FormText-StartPositionItem +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFormTextStartItem : public SfxMetricItem +{ +public: + TYPEINFO(); + XFormTextStartItem(long nStart = 0); + XFormTextStartItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xgrad.hxx b/include/svx/xgrad.hxx new file mode 100644 index 000000000000..ba97db142e7d --- /dev/null +++ b/include/svx/xgrad.hxx @@ -0,0 +1,83 @@ +/* -*- 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 _SVX__XGRADIENT_HXX +#define _SVX__XGRADIENT_HXX + +#include <svx/xenum.hxx> +#include <tools/color.hxx> +#include "svx/svxdllapi.h" + +class Gradient; + +//----------------- +// class XGradient +//----------------- + +class SVX_DLLPUBLIC XGradient +{ +protected: + XGradientStyle eStyle; + Color aStartColor; + Color aEndColor; + long nAngle; + sal_uInt16 nBorder; + sal_uInt16 nOfsX; + sal_uInt16 nOfsY; + sal_uInt16 nIntensStart; + sal_uInt16 nIntensEnd; + sal_uInt16 nStepCount; + +public: + XGradient(); + XGradient( const Color& rStart, const Color& rEnd, + XGradientStyle eStyle = XGRAD_LINEAR, long nAngle = 0, + sal_uInt16 nXOfs = 50, sal_uInt16 nYOfs = 50, sal_uInt16 nBorder = 0, + sal_uInt16 nStartIntens = 100, sal_uInt16 nEndIntens = 100, + sal_uInt16 nSteps = 0 ); + + bool operator==(const XGradient& rGradient) const; + + void SetGradientStyle(XGradientStyle eNewStyle) { eStyle = eNewStyle; } + void SetStartColor(const Color& rColor) { aStartColor = rColor; } + void SetEndColor(const Color& rColor) { aEndColor = rColor; } + void SetAngle(long nNewAngle) { nAngle = nNewAngle; } + void SetBorder(sal_uInt16 nNewBorder) { nBorder = nNewBorder; } + void SetXOffset(sal_uInt16 nNewOffset) { nOfsX = nNewOffset; } + void SetYOffset(sal_uInt16 nNewOffset) { nOfsY = nNewOffset; } + void SetStartIntens(sal_uInt16 nNewIntens) { nIntensStart = nNewIntens; } + void SetEndIntens(sal_uInt16 nNewIntens) { nIntensEnd = nNewIntens; } + void SetSteps(sal_uInt16 nSteps) { nStepCount = nSteps; } + + XGradientStyle GetGradientStyle() const { return eStyle; } + Color GetStartColor() const { return aStartColor; } + Color GetEndColor() const { return aEndColor; } + long GetAngle() const { return nAngle; } + sal_uInt16 GetBorder() const { return nBorder; } + sal_uInt16 GetXOffset() const { return nOfsX; } + sal_uInt16 GetYOffset() const { return nOfsY; } + sal_uInt16 GetStartIntens() const { return nIntensStart; } + sal_uInt16 GetEndIntens() const { return nIntensEnd; } + sal_uInt16 GetSteps() const { return nStepCount; } + Gradient VclGradient() const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xgrscit.hxx b/include/svx/xgrscit.hxx new file mode 100644 index 000000000000..491a7d41d502 --- /dev/null +++ b/include/svx/xgrscit.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SVX_XGRSCIT_HXX +#define _SVX_XGRSCIT_HXX + +#include <svl/intitem.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* GradientenSchritte-Item fuer Gradienten-Fuellungen +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XGradientStepCountItem: public SfxUInt16Item +{ +public: + TYPEINFO(); + XGradientStepCountItem( sal_uInt16 nStepCount = 0 ); + XGradientStepCountItem( SvStream& rIn ); + virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) const; + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xhatch.hxx b/include/svx/xhatch.hxx new file mode 100644 index 000000000000..9db4a6a0364b --- /dev/null +++ b/include/svx/xhatch.hxx @@ -0,0 +1,59 @@ +/* -*- 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 _SVX_XHATCH_HXX +#define _SVX_XHATCH_HXX + +#include <svx/xenum.hxx> +#include <tools/color.hxx> +#include "svx/svxdllapi.h" + +//-------------- +// class XHatch +//-------------- + +class SVX_DLLPUBLIC XHatch +{ +protected: + XHatchStyle eStyle; + Color aColor; + long nDistance; + long nAngle; + +public: + XHatch() : eStyle(XHATCH_SINGLE), nDistance(0), nAngle(0) {} + XHatch(const Color& rCol, XHatchStyle eStyle = XHATCH_SINGLE, + long nDistance = 20, long nAngle = 0); + + bool operator==(const XHatch& rHatch) const; + + void SetHatchStyle(XHatchStyle eNewStyle) { eStyle = eNewStyle; } + void SetColor(const Color& rColor) { aColor = rColor; } + void SetDistance(long nNewDistance) { nDistance = nNewDistance; } + void SetAngle(long nNewAngle) { nAngle = nNewAngle; } + + XHatchStyle GetHatchStyle() const { return eStyle; } + Color GetColor() const { return aColor; } + long GetDistance() const { return nDistance; } + long GetAngle() const { return nAngle; } +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xit.hxx b/include/svx/xit.hxx new file mode 100644 index 000000000000..ee1dc376f122 --- /dev/null +++ b/include/svx/xit.hxx @@ -0,0 +1,76 @@ +/* -*- 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 _SVX_XIT_HXX +#define _SVX_XIT_HXX + +#include <svl/stritem.hxx> +#include <svx/xtable.hxx> +#include <svx/xdef.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************/ + +class SfxItemPool; +class NameOrIndex; + +typedef sal_Bool (*SvxCompareValueFunc)( const NameOrIndex* p1, const NameOrIndex* p2 ); + +//------------------- +// class NameOrIndex +//------------------- +class SVX_DLLPUBLIC NameOrIndex : public SfxStringItem +{ + sal_Int32 nPalIndex; + +protected: + void Detach() { nPalIndex = -1; } + +public: + TYPEINFO(); + NameOrIndex() { nPalIndex = -1; } + NameOrIndex(sal_uInt16 nWhich, sal_Int32 nIndex); + NameOrIndex(sal_uInt16 nWhich, + const String& rName= String()); + NameOrIndex(sal_uInt16 nWhich, SvStream& rIn); + NameOrIndex(const NameOrIndex& rNameOrIndex); + ~NameOrIndex() {}; + + virtual int operator==(const SfxPoolItem& rItem) const; + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual SvStream& Store(SvStream& rOut, sal_uInt16 nItemVersion ) const; + + String GetName() const { return GetValue(); } + void SetName(const String& rName) { SetValue(rName); } + sal_Int32 GetIndex() const { return nPalIndex; } + void SetIndex(sal_Int32 nIndex) { nPalIndex = nIndex; } + sal_Bool IsIndex() const { return (nPalIndex >= 0); } + + /** this static checks if the given NameOrIndex item has a unique name for its value. + The returned String is a unique name for an item with this value in both given pools. + Argument pPool2 can be null. + If returned string equals NameOrIndex->GetName(), the name was already unique. + */ + static String CheckNamedItem( const NameOrIndex* pCheckItem, const sal_uInt16 nWhich, const SfxItemPool* pPool1, const SfxItemPool* pPool2, SvxCompareValueFunc pCompareValueFunc, sal_uInt16 nPrefixResId, const XPropertyListRef &pDefaults ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlineit.hxx b/include/svx/xlineit.hxx new file mode 100644 index 000000000000..f32193330b90 --- /dev/null +++ b/include/svx/xlineit.hxx @@ -0,0 +1,46 @@ +/* -*- 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 _SVX_XLINIIT_HXX +#define _SVX_XLINIIT_HXX + +#include <svx/xit.hxx> +#include <svx/xcolit.hxx> +#include <svx/xpoly.hxx> +#include <svx/xenum.hxx> +#include <svl/metitem.hxx> +#include <svl/eitem.hxx> + +class XDash; +class SvStream; + +#include <svx/xdash.hxx> +#include <svx/xlndsit.hxx> +#include <svx/xlnwtit.hxx> +#include <svx/xlnclit.hxx> +#include <svx/xlnstit.hxx> +#include <svx/xlnedit.hxx> +#include <svx/xlnstwit.hxx> +#include <svx/xlnedwit.hxx> +#include <svx/xlnstcit.hxx> +#include <svx/xlnedcit.hxx> + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlineit0.hxx b/include/svx/xlineit0.hxx new file mode 100644 index 000000000000..18fef85b45c7 --- /dev/null +++ b/include/svx/xlineit0.hxx @@ -0,0 +1,52 @@ +/* -*- 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 _SVX_XLINEIT0_HXX +#define _SVX_XLINEIT0_HXX + +#include <svx/xenum.hxx> +#include <svl/eitem.hxx> +//--------------------- +// class LineStyleItem +//--------------------- +#include "svx/svxdllapi.h" + +class SVX_DLLPUBLIC XLineStyleItem : public SfxEnumItem +{ +public: + TYPEINFO(); + XLineStyleItem(XLineStyle = XLINE_SOLID); + XLineStyleItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + virtual sal_uInt16 GetValueCount() const; + XLineStyle GetValue() const { return (XLineStyle) SfxEnumItem::GetValue(); } +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlinjoit.hxx b/include/svx/xlinjoit.hxx new file mode 100644 index 000000000000..321656d9ed72 --- /dev/null +++ b/include/svx/xlinjoit.hxx @@ -0,0 +1,54 @@ +/* -*- 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 _SVX_XLINJOIT_HXX +#define _SVX_XLINJOIT_HXX + +#include <svl/eitem.hxx> +#include <svx/xenum.hxx> +#include "svx/svxdllapi.h" + +//--------------------- +// class LineStyleItem +//--------------------- + +class SVX_DLLPUBLIC XLineJointItem : public SfxEnumItem +{ +public: + TYPEINFO(); + XLineJointItem( XLineJoint eLineJoint = XLINEJOINT_ROUND ); + XLineJointItem( SvStream& rIn ); + + virtual sal_uInt16 GetVersion( sal_uInt16 nFileFormatVersion ) const; + virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual sal_uInt16 GetValueCount() const; + XLineJoint GetValue() const { return (XLineJoint) SfxEnumItem::GetValue(); } +}; + +#endif // _SVX_XLINJOIT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlnasit.hxx b/include/svx/xlnasit.hxx new file mode 100644 index 000000000000..3eea09f6ba02 --- /dev/null +++ b/include/svx/xlnasit.hxx @@ -0,0 +1,49 @@ +/* -*- 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 _SVX_XLNASIT_HXX +#define _SVX_XLNASIT_HXX + + +#include <svl/poolitem.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* SetItem mit dem ItemSet aller Linienattribute +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XLineAttrSetItem : public SfxSetItem +{ +public: + TYPEINFO(); + XLineAttrSetItem(SfxItemSet* pItemSet ); + XLineAttrSetItem(SfxItemPool* pItemPool); + XLineAttrSetItem(const XLineAttrSetItem& rAttr); + XLineAttrSetItem(const XLineAttrSetItem& rAttr, + SfxItemPool* pItemPool); + virtual SfxPoolItem* Clone( SfxItemPool* pToPool ) const; + virtual SfxPoolItem* Create( SvStream& rStream, sal_uInt16 nVersion ) const; + virtual SvStream& Store( SvStream& rStream, sal_uInt16 nItemVersion ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlncapit.hxx b/include/svx/xlncapit.hxx new file mode 100644 index 000000000000..620a7adfc4b3 --- /dev/null +++ b/include/svx/xlncapit.hxx @@ -0,0 +1,55 @@ +/* -*- 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 _SVX_XLNCAPIT_HXX +#define _SVX_XLNCAPIT_HXX + +#include <svx/svxdllapi.h> +#include <svl/eitem.hxx> +#include <svx/xenum.hxx> +#include <com/sun/star/drawing/LineCap.hpp> + +//--------------------- +// class LineStyleItem +//--------------------- + +class SVX_DLLPUBLIC XLineCapItem : public SfxEnumItem +{ +public: + TYPEINFO(); + XLineCapItem(com::sun::star::drawing::LineCap eLineCap = com::sun::star::drawing::LineCap_BUTT); + XLineCapItem(SvStream& rIn); + + virtual sal_uInt16 GetVersion( sal_uInt16 nFileFormatVersion ) const; + virtual SfxPoolItem* Clone( SfxItemPool* pPool = 0 ) const; + virtual SfxPoolItem* Create( SvStream& rIn, sal_uInt16 nVer ) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + virtual sal_uInt16 GetValueCount() const; + com::sun::star::drawing::LineCap GetValue() const; +}; + +#endif // _SVX_XLNCAPIT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlnclit.hxx b/include/svx/xlnclit.hxx new file mode 100644 index 000000000000..609efaec9e65 --- /dev/null +++ b/include/svx/xlnclit.hxx @@ -0,0 +1,52 @@ +/* -*- 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 _SVX_XLNCLIT_HXX +#define _SVX_XLNCLIT_HXX + +#include <svx/xcolit.hxx> +#include "svx/svxdllapi.h" + +//--------------------- +// class XLineColorItem +//--------------------- +class SVX_DLLPUBLIC XLineColorItem : public XColorItem +{ +public: + TYPEINFO(); + XLineColorItem() {} + XLineColorItem(sal_Int32 nIndex, const Color& rTheColor); + XLineColorItem(const String& rName, const Color& rTheColor); + XLineColorItem(SvStream& rIn); + + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlndsit.hxx b/include/svx/xlndsit.hxx new file mode 100644 index 000000000000..a4d7a6ca7122 --- /dev/null +++ b/include/svx/xlndsit.hxx @@ -0,0 +1,69 @@ +/* -*- 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 _SVX_XLNDSIT_HXX +#define _SVX_XLNDSIT_HXX + +#include <svx/xit.hxx> + +#include <svx/xdash.hxx> +#include "svx/svxdllapi.h" + +class SdrModel; + +//-------------------- +// class XLineDashItem +//-------------------- +class SVX_DLLPUBLIC XLineDashItem : public NameOrIndex +{ + XDash aDash; + +public: + TYPEINFO(); + XLineDashItem() : NameOrIndex(XATTR_LINEDASH, -1) {} + XLineDashItem(const String& rName, const XDash& rTheDash); + XLineDashItem(SfxItemPool* pPool, const XDash& rTheDash); + XLineDashItem(const XLineDashItem& rItem); + XLineDashItem(SvStream& rIn); + + virtual int operator==(const SfxPoolItem& rItem) const; + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual SvStream& Store(SvStream& rOut, sal_uInt16 nItemVersion ) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + virtual bool HasMetrics() const; + virtual bool ScaleMetrics(long nMul, long nDiv); + + const XDash& GetDashValue() const; + void SetDashValue(const XDash& rNew) { aDash = rNew; Detach(); } // SetValue -> SetDashValue + + static sal_Bool CompareValueFunc( const NameOrIndex* p1, const NameOrIndex* p2 ); + XLineDashItem* checkForUniqueItem( SdrModel* pModel ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlnedcit.hxx b/include/svx/xlnedcit.hxx new file mode 100644 index 000000000000..d06deb80a219 --- /dev/null +++ b/include/svx/xlnedcit.hxx @@ -0,0 +1,49 @@ +/* -*- 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 _SVX_XLNEDCIT_HXX +#define _SVX_XLNEDCIT_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +//---------------------------- +// class XLineEndCenterItem +//---------------------------- +class SVX_DLLPUBLIC XLineEndCenterItem : public SfxBoolItem +{ +public: + TYPEINFO(); + XLineEndCenterItem(sal_Bool bEndCenter = sal_False); + XLineEndCenterItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlnedit.hxx b/include/svx/xlnedit.hxx new file mode 100644 index 000000000000..fdf9abdda894 --- /dev/null +++ b/include/svx/xlnedit.hxx @@ -0,0 +1,65 @@ +/* -*- 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 _SVX_XLNEDIT_HXX +#define _SVX_XLNEDIT_HXX + +#include <svx/xit.hxx> +#include "svx/svxdllapi.h" +#include <basegfx/polygon/b2dpolypolygon.hxx> + +class SdrModel; + +//---------------------- +// class XLineEndItem +//---------------------- +class SVX_DLLPUBLIC XLineEndItem : public NameOrIndex +{ + basegfx::B2DPolyPolygon maPolyPolygon; + +public: + TYPEINFO(); + XLineEndItem(sal_Int32 nIndex = -1); + XLineEndItem(const String& rName, const basegfx::B2DPolyPolygon& rPolyPolygon); + XLineEndItem(SfxItemPool* pPool, const basegfx::B2DPolyPolygon& rPolyPolygon); + XLineEndItem(const XLineEndItem& rItem); + XLineEndItem(SvStream& rIn); + + virtual int operator==(const SfxPoolItem& rItem) const; + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual SvStream& Store(SvStream& rOut, sal_uInt16 nItemVersion ) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + basegfx::B2DPolyPolygon GetLineEndValue() const; + void SetLineEndValue(const basegfx::B2DPolyPolygon& rPolyPolygon) { maPolyPolygon = rPolyPolygon; Detach(); } + + XLineEndItem* checkForUniqueItem( SdrModel* pModel ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlnedwit.hxx b/include/svx/xlnedwit.hxx new file mode 100644 index 000000000000..e960ea24f8c5 --- /dev/null +++ b/include/svx/xlnedwit.hxx @@ -0,0 +1,52 @@ +/* -*- 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 _SVX_XLNEDWIT_HXX +#define _SVX_XLNEDWIT_HXX + +#include <svl/metitem.hxx> +#include "svx/svxdllapi.h" + +#define LINE_END_WIDTH_DEFAULT (200) + +//--------------------------- +// class XLineEndWidthItem +//--------------------------- + +class SVX_DLLPUBLIC XLineEndWidthItem : public SfxMetricItem +{ +public: + TYPEINFO(); + XLineEndWidthItem(long nWidth = LINE_END_WIDTH_DEFAULT); + XLineEndWidthItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlnstcit.hxx b/include/svx/xlnstcit.hxx new file mode 100644 index 000000000000..241eb668a05e --- /dev/null +++ b/include/svx/xlnstcit.hxx @@ -0,0 +1,49 @@ +/* -*- 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 _SVX_XLNSTCIT_HXX +#define _SVX_XLNSTCIT_HXX + +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +//------------------------------ +// class XLineStartCenterItem +//------------------------------ +class SVX_DLLPUBLIC XLineStartCenterItem : public SfxBoolItem +{ +public: + TYPEINFO(); + XLineStartCenterItem(sal_Bool bStartCenter = sal_False); + XLineStartCenterItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlnstit.hxx b/include/svx/xlnstit.hxx new file mode 100644 index 000000000000..1d57bf009b7c --- /dev/null +++ b/include/svx/xlnstit.hxx @@ -0,0 +1,65 @@ +/* -*- 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 _SVX_XLNSTIT_HXX +#define _SVX_XLNSTIT_HXX + +#include <svx/xit.hxx> +#include "svx/svxdllapi.h" +#include <basegfx/polygon/b2dpolypolygon.hxx> + +class SdrModel; + +//------------------------ +// class XLineStartItem +//------------------------ +class SVX_DLLPUBLIC XLineStartItem : public NameOrIndex +{ + basegfx::B2DPolyPolygon maPolyPolygon; + +public: + TYPEINFO(); + XLineStartItem(sal_Int32 nIndex = -1); + XLineStartItem(const String& rName, const basegfx::B2DPolyPolygon& rPolyPolygon); + XLineStartItem(SfxItemPool* pPool, const basegfx::B2DPolyPolygon& rPolyPolygon); + XLineStartItem(const XLineStartItem& rItem); + XLineStartItem(SvStream& rIn); + + virtual int operator==(const SfxPoolItem& rItem) const; + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual SvStream& Store(SvStream& rOut, sal_uInt16 nItemVersion ) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + basegfx::B2DPolyPolygon GetLineStartValue() const; + void SetLineStartValue(const basegfx::B2DPolyPolygon& rPolyPolygon) { maPolyPolygon = rPolyPolygon; Detach(); } + + XLineStartItem* checkForUniqueItem( SdrModel* pModel ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlnstwit.hxx b/include/svx/xlnstwit.hxx new file mode 100644 index 000000000000..776b97519fcd --- /dev/null +++ b/include/svx/xlnstwit.hxx @@ -0,0 +1,52 @@ +/* -*- 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 _SVX_XLNSTWIT_HXX +#define _SVX_XLNSTWIT_HXX + +#include <svl/metitem.hxx> +#include "svx/svxdllapi.h" + +#define LINE_START_WIDTH_DEFAULT (200) + +//----------------------------- +// class XLineStartWidthItem +//----------------------------- +class SVX_DLLPUBLIC XLineStartWidthItem : public SfxMetricItem +{ +public: + TYPEINFO(); + XLineStartWidthItem(long nWidth = LINE_START_WIDTH_DEFAULT); + XLineStartWidthItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlntrit.hxx b/include/svx/xlntrit.hxx new file mode 100644 index 000000000000..8cb0e705ba87 --- /dev/null +++ b/include/svx/xlntrit.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SVX_XLNTRIT_HXX +#define _SVX_XLNTRIT_HXX + +#include <svl/intitem.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* Transparenz-Item fuer Linien +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XLineTransparenceItem: public SfxUInt16Item +{ +public: + TYPEINFO(); + XLineTransparenceItem(sal_uInt16 nLineTransparence = 0); + XLineTransparenceItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = NULL) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xlnwtit.hxx b/include/svx/xlnwtit.hxx new file mode 100644 index 000000000000..d8d60ad9022b --- /dev/null +++ b/include/svx/xlnwtit.hxx @@ -0,0 +1,49 @@ +/* -*- 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 _SVX_XLNWTIT_HXX +#define _SVX_XLNWTIT_HXX + +#include <svl/metitem.hxx> +#include "svx/svxdllapi.h" + +//--------------------- +// class XLineWidthItem +//--------------------- +class SVX_DLLPUBLIC XLineWidthItem : public SfxMetricItem +{ +public: + TYPEINFO(); + XLineWidthItem(long nWidth = 0); + XLineWidthItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) 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 SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xmleohlp.hxx b/include/svx/xmleohlp.hxx new file mode 100644 index 000000000000..934606fe8917 --- /dev/null +++ b/include/svx/xmleohlp.hxx @@ -0,0 +1,148 @@ +/* -*- 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 _XMLEOHLP_HXX +#define _XMLEOHLP_HXX + +#include <cppuhelper/compbase2.hxx> +#include <osl/mutex.hxx> +#include <sot/storage.hxx> +#include <map> +#include <com/sun/star/container/XNameContainer.hpp> +#include <com/sun/star/document/XEmbeddedObjectResolver.hpp> +#include <com/sun/star/container/XNameAccess.hpp> +#include <com/sun/star/embed/XEmbeddedObject.hpp> +#include "svx/svxdllapi.h" + +// ----------------------------- +// - SvXMLEmbeddedObjectHelper - +// ----------------------------- + +enum SvXMLEmbeddedObjectHelperMode +{ + EMBEDDEDOBJECTHELPER_MODE_READ = 0, + EMBEDDEDOBJECTHELPER_MODE_WRITE = 1 +}; + +// ----------------------------- +// - SvXMLEmbeddedObjectHelper - +// ----------------------------- + +namespace comphelper { +class IEmbeddedHelper; +} +class SvGlobalName; +struct OUStringLess; +class OutputStorageWrapper_Impl; + +class SVX_DLLPUBLIC SvXMLEmbeddedObjectHelper : public ::cppu::WeakComponentImplHelper2< + ::com::sun::star::document::XEmbeddedObjectResolver, + ::com::sun::star::container::XNameAccess > +{ + typedef ::std::map< OUString, OutputStorageWrapper_Impl*, + OUStringLess > SvXMLEmbeddedObjectHelper_Impl; +private: + + ::osl::Mutex maMutex; + + const OUString maReplacementGraphicsContainerStorageName; + const OUString maReplacementGraphicsContainerStorageName60; + OUString maCurContainerStorageName; + + + com::sun::star::uno::Reference < com::sun::star::embed::XStorage > mxRootStorage; // package + ::comphelper::IEmbeddedHelper* mpDocPersist; + com::sun::star::uno::Reference < com::sun::star::embed::XStorage > mxContainerStorage; // container sub package for + com::sun::star::uno::Reference < com::sun::star::embed::XStorage > mxTempStorage; // package + // objects + SvXMLEmbeddedObjectHelperMode meCreateMode; + SvXMLEmbeddedObjectHelper_Impl *mpStreamMap; + + SVX_DLLPRIVATE sal_Bool ImplGetStorageNames( + const OUString& rURLStr, + OUString& rContainerStorageName, + OUString& rObjectStorageName, + sal_Bool bInternalToExternal, + sal_Bool *pGraphicRepl=0, + sal_Bool *pOasisFormat=0 ) const; + + SVX_DLLPRIVATE com::sun::star::uno::Reference < com::sun::star::embed::XStorage > ImplGetContainerStorage( + const OUString& rStorageName ); + + SVX_DLLPRIVATE String ImplGetUniqueName( ::comphelper::IEmbeddedHelper*, const sal_Char* p ) const; + SVX_DLLPRIVATE sal_Bool ImplReadObject( + const OUString& rContainerStorageName, + OUString& rObjName, + const SvGlobalName *pClassId, + SvStream* pTemp ); + + SVX_DLLPRIVATE OUString ImplInsertEmbeddedObjectURL( + const OUString& rURLStr ); + + SVX_DLLPRIVATE ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > ImplGetReplacementImage( + const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XEmbeddedObject >& xObj ); + +protected: + + SvXMLEmbeddedObjectHelper(); + ~SvXMLEmbeddedObjectHelper(); + void Init( const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&, + ::comphelper::IEmbeddedHelper& rDocPersist, + SvXMLEmbeddedObjectHelperMode eCreateMode ); + + virtual void SAL_CALL disposing(); + +public: + SvXMLEmbeddedObjectHelper( + ::comphelper::IEmbeddedHelper& rDocPersist, + SvXMLEmbeddedObjectHelperMode eCreateMode ); + + static SvXMLEmbeddedObjectHelper* Create( + const com::sun::star::uno::Reference < com::sun::star::embed::XStorage >&, + ::comphelper::IEmbeddedHelper& rDocPersist, + SvXMLEmbeddedObjectHelperMode eCreateMode, + sal_Bool bDirect = sal_True ); + static SvXMLEmbeddedObjectHelper* Create( + ::comphelper::IEmbeddedHelper& rDocPersist, + SvXMLEmbeddedObjectHelperMode eCreateMode ); + static void Destroy( SvXMLEmbeddedObjectHelper* pSvXMLEmbeddedObjectHelper ); + + void Flush(); + + // XEmbeddedObjectResolver + virtual OUString SAL_CALL resolveEmbeddedObjectURL( const OUString& aURL ) throw(::com::sun::star::uno::RuntimeException); + + // XNameAccess + virtual ::com::sun::star::uno::Any SAL_CALL getByName( const OUString& aName ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getElementNames( ) throw (::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasByName( const OUString& aName ) throw (::com::sun::star::uno::RuntimeException); + + // XNameAccess + virtual ::com::sun::star::uno::Type SAL_CALL getElementType( ) throw (::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL hasElements( ) throw (::com::sun::star::uno::RuntimeException); + + + static void splitObjectURL(OUString aURLNoPar, + OUString& rContainerStorageName, + OUString& rObjectStorageName); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xmlexchg.hxx b/include/svx/xmlexchg.hxx new file mode 100644 index 000000000000..8019779b3748 --- /dev/null +++ b/include/svx/xmlexchg.hxx @@ -0,0 +1,95 @@ +/* -*- 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 _SVX_XMLEXCHG_HXX_ +#define _SVX_XMLEXCHG_HXX_ + +#include <svtools/transfer.hxx> +#include "svx/svxdllapi.h" + +namespace com { + namespace sun { + namespace star { + namespace beans { + class SAL_NO_VTABLE XPropertySet; + } + } + } +} + +//........................................................................ +namespace svx +{ +//........................................................................ + + + //==================================================================== + //= OXFormsDescriptor + //==================================================================== + + struct SVX_DLLPUBLIC OXFormsDescriptor { + + String szName; + String szServiceName; + ::com::sun::star::uno::Reference + < ::com::sun::star::beans::XPropertySet > + xPropSet; + + inline OXFormsDescriptor( void ) {} + inline OXFormsDescriptor( const OXFormsDescriptor &rhs ) { *this=rhs; } + inline OXFormsDescriptor &operator = ( const OXFormsDescriptor &rhs ) { + szName = rhs.szName; + szServiceName = rhs.szServiceName; + xPropSet = rhs.xPropSet; + return (*this); + } + }; + + //==================================================================== + //= OXFormsTransferable + //==================================================================== + class SVX_DLLPUBLIC OXFormsTransferable : public TransferableHelper { + + protected: + + // TransferableHelper overridables + virtual void AddSupportedFormats(); + virtual sal_Bool GetData( const ::com::sun::star::datatransfer::DataFlavor& rFlavor ); + + OXFormsDescriptor m_aDescriptor; + + public: + + /** construct the transferable + */ + OXFormsTransferable( const OXFormsDescriptor &rhs ); + + /** extracts an xform descriptor from the transferable given + */ + static const OXFormsDescriptor &extractDescriptor( const TransferableDataHelper& _rData ); + }; + + +//........................................................................ +} // namespace svx +//........................................................................ + +#endif // _SVX_XMLEXCHG_HXX_ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xmlgrhlp.hxx b/include/svx/xmlgrhlp.hxx new file mode 100644 index 000000000000..d14c9dc5cd23 --- /dev/null +++ b/include/svx/xmlgrhlp.hxx @@ -0,0 +1,158 @@ +/* -*- 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 _XMLGRHLP_HXX +#define _XMLGRHLP_HXX + +#include <cppuhelper/compbase2.hxx> +#include <osl/mutex.hxx> +#include <svtools/grfmgr.hxx> +#include <vector> +#include <set> +#include <utility> +#include <com/sun/star/document/XGraphicObjectResolver.hpp> +#include <com/sun/star/document/XBinaryStreamResolver.hpp> +#include <com/sun/star/embed/XStorage.hpp> +#include "svx/svxdllapi.h" + +// ---------------------- +// - SvXMLGraphicHelper - +// ---------------------- + +enum SvXMLGraphicHelperMode +{ + GRAPHICHELPER_MODE_READ = 0, + GRAPHICHELPER_MODE_WRITE = 1 +}; + +// ---------------------- +// - SvXMLGraphicHelper - +// ---------------------- +struct SvxGraphicHelperStream_Impl +{ + ::com::sun::star::uno::Reference < ::com::sun::star::embed::XStorage > xStorage; + ::com::sun::star::uno::Reference < ::com::sun::star::io::XStream > xStream; +}; + +class SVX_DLLPUBLIC SvXMLGraphicHelper : public ::cppu::WeakComponentImplHelper2< ::com::sun::star::document::XGraphicObjectResolver, + ::com::sun::star::document::XBinaryStreamResolver > +{ +private: + + typedef ::std::pair< OUString, OUString > URLPair; + typedef ::std::vector< URLPair > URLPairVector; + typedef ::std::vector< GraphicObject > GraphicObjectVector; + typedef ::std::set< OUString > URLSet; + typedef ::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > > GraphicOutputStreamVector; + + ::osl::Mutex maMutex; + ::com::sun::star::uno::Reference < ::com::sun::star::embed::XStorage > mxRootStorage; + OUString maCurStorageName; + URLPairVector maGrfURLs; + GraphicObjectVector maGrfObjs; + GraphicOutputStreamVector maGrfStms; + URLSet maURLSet; + SvXMLGraphicHelperMode meCreateMode; + sal_Bool mbDirect; + + SVX_DLLPRIVATE sal_Bool ImplGetStreamNames( const OUString& rURLStr, + OUString& rPictureStorageName, + OUString& rPictureStreamName ); + SVX_DLLPRIVATE ::com::sun::star::uno::Reference < ::com::sun::star::embed::XStorage > ImplGetGraphicStorage( const OUString& rPictureStorageName ); + SVX_DLLPRIVATE SvxGraphicHelperStream_Impl ImplGetGraphicStream( const OUString& rPictureStorageName, + const OUString& rPictureStreamName, + sal_Bool bTruncate ); + SVX_DLLPRIVATE String ImplGetGraphicMimeType( const String& rFileName ) const; + SVX_DLLPRIVATE Graphic ImplReadGraphic( const OUString& rPictureStorageName, + const OUString& rPictureStreamName ); + SVX_DLLPRIVATE sal_Bool ImplWriteGraphic( const OUString& rPictureStorageName, + const OUString& rPictureStreamName, + const OUString& rGraphicId, + bool bUseGfxLink ); + SVX_DLLPRIVATE void ImplInsertGraphicURL( const OUString& rURLStr, sal_uInt32 nInsertPos, OUString& rRequestedFileName ); + +protected: + SvXMLGraphicHelper(); + ~SvXMLGraphicHelper(); + void Init( const ::com::sun::star::uno::Reference < ::com::sun::star::embed::XStorage >& xXMLStorage, + SvXMLGraphicHelperMode eCreateMode, + sal_Bool bDirect ); + + virtual void SAL_CALL disposing(); + +public: + SvXMLGraphicHelper( SvXMLGraphicHelperMode eCreateMode ); + + static SvXMLGraphicHelper* Create( const ::com::sun::star::uno::Reference < ::com::sun::star::embed::XStorage >& rXMLStorage, + SvXMLGraphicHelperMode eCreateMode, + sal_Bool bDirect = sal_True ); + static SvXMLGraphicHelper* Create( SvXMLGraphicHelperMode eCreateMode ); + + static void Destroy( SvXMLGraphicHelper* pSvXMLGraphicHelper ); + +public: + + // XGraphicObjectResolver + virtual OUString SAL_CALL resolveGraphicObjectURL( const OUString& aURL ) throw(::com::sun::star::uno::RuntimeException); + + // XBinaryStreamResolver + virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > SAL_CALL getInputStream( const OUString& rURL ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > SAL_CALL createOutputStream( ) throw (::com::sun::star::uno::RuntimeException); + virtual OUString SAL_CALL resolveOutputStream( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& rxBinaryStream ) throw (::com::sun::star::uno::RuntimeException); +}; + + +// for instantiation via service manager +namespace svx +{ +/** Create this with createInstanceWithArguments. service name + "com.sun.star.comp.Svx.GraphicImportHelper", one argument which is the + XStorage. Without arguments no helper class is created. With an empty + argument the helper class is created and initialized like in the CTOR to + SvXMLGraphicHelper that only gets the create mode. + + You should call dispose after you no longer need this component. + + uses eCreateMode == GRAPHICHELPER_MODE_READ, bDirect == sal_True in + SvXMLGraphicHelper + */ +SVX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL SvXMLGraphicImportHelper_createInstance(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & rSMgr) throw( ::com::sun::star::uno::Exception ); +SVX_DLLPUBLIC ::com::sun::star::uno::Sequence< OUString > SAL_CALL SvXMLGraphicImportHelper_getSupportedServiceNames() throw(); +SVX_DLLPUBLIC OUString SAL_CALL SvXMLGraphicImportHelper_getImplementationName() throw(); + +/** Create this with createInstanceWithArguments. service name + "com.sun.star.comp.Svx.GraphicExportHelper", one argument which is the + XStorage. Without arguments no helper class is created. With an empty + argument the helper class is created and initialized like in the CTOR to + SvXMLGraphicHelper that only gets the create mode + + To write the Pictures stream, you have to call dispose at this component. + Make sure you call dipose before you commit the parent storage. + + uses eCreateMode == GRAPHICHELPER_MODE_WRITE, bDirect == sal_True in + SvXMLGraphicHelper + */ +SVX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL SvXMLGraphicExportHelper_createInstance(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > & rSMgr) throw( ::com::sun::star::uno::Exception ); +SVX_DLLPUBLIC ::com::sun::star::uno::Sequence< OUString > SAL_CALL SvXMLGraphicExportHelper_getSupportedServiceNames() throw(); +SVX_DLLPUBLIC OUString SAL_CALL SvXMLGraphicExportHelper_getImplementationName() throw(); +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xmlsecctrl.hxx b/include/svx/xmlsecctrl.hxx new file mode 100644 index 000000000000..8fd46b07c22f --- /dev/null +++ b/include/svx/xmlsecctrl.hxx @@ -0,0 +1,51 @@ +/* -*- 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 _XMLSECURITY_STBCONTRL_HXX +#define _XMLSECURITY_STBCONTRL_HXX + +#include <sfx2/stbitem.hxx> +#include "svx/svxdllapi.h" + + +class SvxSizeItem; + +// class SvxPosSizeToolBoxControl ---------------------------------------- + +class SVX_DLLPUBLIC XmlSecStatusBarControl : public SfxStatusBarControl +{ +private: + struct XmlSecStatusBarControl_Impl; + + XmlSecStatusBarControl_Impl* mpImpl; + +public: + SFX_DECL_STATUSBAR_CONTROL(); + + XmlSecStatusBarControl( sal_uInt16 _nSlotId, sal_uInt16 _nId, StatusBar& _rStb ); + ~XmlSecStatusBarControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + virtual void Paint( const UserDrawEvent& rEvt ); + virtual void Command( const CommandEvent& rCEvt ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xoutbmp.hxx b/include/svx/xoutbmp.hxx new file mode 100644 index 000000000000..0c614b93c356 --- /dev/null +++ b/include/svx/xoutbmp.hxx @@ -0,0 +1,73 @@ +/* -*- 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 _XOUTBMP_HXX +#define _XOUTBMP_HXX + +#include <vcl/graph.hxx> +#include <com/sun/star/uno/Sequence.h> +#include <com/sun/star/beans/PropertyValue.hpp> +#include "svx/svxdllapi.h" + +#define XOUTBMP_MIRROR_HORZ 0x00000001L +#define XOUTBMP_MIRROR_VERT 0x00000010L + +#define XOUTBMP_CONTOUR_HORZ 0x00000001L +#define XOUTBMP_CONTOUR_VERT 0x00000002L +#define XOUTBMP_CONTOUR_EDGEDETECT 0x00000004L +#define XOUTBMP_DONT_ADD_EXTENSION 0x00000008L + +#define XOUTBMP_DONT_EXPAND_FILENAME 0x10000000L +#define XOUTBMP_USE_GIF_IF_POSSIBLE 0x20000000L +#define XOUTBMP_USE_GIF_IF_SENSIBLE 0x40000000L +#define XOUTBMP_USE_NATIVE_IF_POSSIBLE 0x80000000L + +class GraphicFilter; +class VirtualDevice; +class INetURLObject; +class Polygon; + +class SVX_DLLPUBLIC XOutBitmap +{ +public: + + static GraphicFilter* pGrfFilter; + + static Graphic MirrorGraphic( const Graphic& rGraphic, const sal_uIntPtr nMirrorFlags ); + static Animation MirrorAnimation( const Animation& rAnimation, sal_Bool bHMirr, sal_Bool bVMirr ); + static sal_uInt16 WriteGraphic( const Graphic& rGraphic, String& rFileName, + const String& rFilterName, const sal_uIntPtr nFlags = 0L, + const Size* pMtfSize_100TH_MM = NULL ); + + static sal_uInt16 ExportGraphic( const Graphic& rGraphic, const INetURLObject& rURL, + GraphicFilter& rFilter, const sal_uInt16 nFormat, + const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >* pFilterData = NULL ); + + static Bitmap DetectEdges( const Bitmap& rBmp, const sal_uInt8 cThreshold ); + + static Polygon GetCountour( const Bitmap& rBmp, const sal_uIntPtr nContourFlags, + const sal_uInt8 cEdgeDetectThreshold = 50, + const Rectangle* pWorkRect = NULL ); +}; + +SVX_DLLPUBLIC sal_Bool DitherBitmap( Bitmap& rBitmap ); + +#endif // _XOUTBMP_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xpoly.hxx b/include/svx/xpoly.hxx new file mode 100644 index 000000000000..f6a846f6b470 --- /dev/null +++ b/include/svx/xpoly.hxx @@ -0,0 +1,181 @@ +/* -*- 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 _XPOLY_HXX +#define _XPOLY_HXX + +#include <tools/solar.h> +#include <basegfx/polygon/b2dpolypolygon.hxx> +#include "svx/svxdllapi.h" + +class Point; +class Rectangle; +class SvStream; +class Polygon; +class PolyPolygon; +class OutputDevice; + +/************************************************************************/ + +#define XPOLYPOLY_APPEND 0xFFFF +#define XPOLY_APPEND 0xFFFF + +#define XPOLY_MAXPOINTS 0xFFF0 /* Auch fuer die 32-Bitter etwas Luft lassen */ + +/************************************************************************/ +// Punktstile im XPolygon: +// NORMAL : Anfangs- oder Endpunkt einer Kurve oder Linie +// SMOOTH : Glatter Uebergang zwischen Kurven +// SYMMTR : glatter und symmetrischer Uebergang zwischen Kurven +// CONTROL: Kontrollpunkt einer Bezierkurve + +enum XPolyFlags { XPOLY_NORMAL, XPOLY_SMOOTH, XPOLY_CONTROL, XPOLY_SYMMTR }; + + +/************************************************************************* +|* +|* Klasse XPolygon; hat neben dem Point-Array noch ein Array mit Flags, +|* die Informationen ueber den jeweiligen Punkt enthalten +|* +\************************************************************************/ + +class ImpXPolygon; + +class SVX_DLLPUBLIC XPolygon +{ +protected: + ImpXPolygon* pImpXPolygon; + + // ImpXPolygon-ReferenceCount pruefen und ggf. abkoppeln + void CheckReference(); + + // Hilfsfunktionen fuer Bezierkonvertierung + void SubdivideBezier(sal_uInt16 nPos, sal_Bool bCalcFirst, double fT); + void GenBezArc(const Point& rCenter, long nRx, long nRy, + long nXHdl, long nYHdl, sal_uInt16 nStart, sal_uInt16 nEnd, + sal_uInt16 nQuad, sal_uInt16 nFirst); + sal_Bool CheckAngles(sal_uInt16& nStart, sal_uInt16 nEnd, sal_uInt16& nA1, sal_uInt16& nA2); + +public: + XPolygon( sal_uInt16 nSize=16, sal_uInt16 nResize=16 ); + XPolygon( const XPolygon& rXPoly ); + XPolygon( const Rectangle& rRect, long nRx = 0, long nRy = 0 ); + XPolygon( const Point& rCenter, long nRx, long nRy, + sal_uInt16 nStartAngle = 0, sal_uInt16 nEndAngle = 3600, + sal_Bool bClose = sal_True ); + + ~XPolygon(); + + void SetPointCount( sal_uInt16 nPoints ); + sal_uInt16 GetPointCount() const; + + void Insert( sal_uInt16 nPos, const Point& rPt, XPolyFlags eFlags ); + void Insert( sal_uInt16 nPos, const XPolygon& rXPoly ); + void Remove( sal_uInt16 nPos, sal_uInt16 nCount ); + void Move( long nHorzMove, long nVertMove ); + Rectangle GetBoundRect() const; + + const Point& operator[]( sal_uInt16 nPos ) const; + Point& operator[]( sal_uInt16 nPos ); + XPolygon& operator=( const XPolygon& rXPoly ); + sal_Bool operator==( const XPolygon& rXPoly ) const; + sal_Bool operator!=( const XPolygon& rXPoly ) const; + + XPolyFlags GetFlags( sal_uInt16 nPos ) const; + void SetFlags( sal_uInt16 nPos, XPolyFlags eFlags ); + sal_Bool IsControl(sal_uInt16 nPos) const; + sal_Bool IsSmooth(sal_uInt16 nPos) const; + + // Abstand zwischen zwei Punkten + double CalcDistance(sal_uInt16 nP1, sal_uInt16 nP2); + + // Bezierkonvertierungen + void CalcSmoothJoin(sal_uInt16 nCenter, sal_uInt16 nDrag, sal_uInt16 nPnt); + void CalcTangent(sal_uInt16 nCenter, sal_uInt16 nPrev, sal_uInt16 nNext); + void PointsToBezier(sal_uInt16 nFirst); + + // Transformationen + void Translate(const Point& rTrans); + void Scale(double fSx, double fSy); + void Distort(const Rectangle& rRefRect, const XPolygon& rDistortedRect); + + // #116512# convert to basegfx::B2DPolygon and return + basegfx::B2DPolygon getB2DPolygon() const; + + // #116512# constructor to convert from basegfx::B2DPolygon + // #i76339# made explicit + explicit XPolygon(const basegfx::B2DPolygon& rPolygon); +}; + +/************************************************************************* +|* +|* Klasse XPolyPolygon; wie PolyPolygon, nur statt aus Polygonen aus +|* XPolygonen bestehend +|* +\************************************************************************/ + +class ImpXPolyPolygon; + +class SVX_DLLPUBLIC XPolyPolygon +{ +protected: + ImpXPolyPolygon* pImpXPolyPolygon; + + // ImpXPolyPolygon-ReferenceCount pruefen und ggf. abkoppeln + void CheckReference(); + +public: + XPolyPolygon( sal_uInt16 nInitSize = 16, sal_uInt16 nResize = 16 ); + XPolyPolygon( const XPolyPolygon& rXPolyPoly ); + + ~XPolyPolygon(); + + void Insert( const XPolygon& rXPoly, + sal_uInt16 nPos = XPOLYPOLY_APPEND ); + void Insert( const XPolyPolygon& rXPoly, + sal_uInt16 nPos=XPOLYPOLY_APPEND ); + XPolygon Remove( sal_uInt16 nPos ); + const XPolygon& GetObject( sal_uInt16 nPos ) const; + + void Clear(); + sal_uInt16 Count() const; + + Rectangle GetBoundRect() const; + + const XPolygon& operator[]( sal_uInt16 nPos ) const + { return GetObject( nPos ); } + XPolygon& operator[]( sal_uInt16 nPos ); + + XPolyPolygon& operator=( const XPolyPolygon& rXPolyPoly ); + sal_Bool operator==( const XPolyPolygon& rXPolyPoly ) const; + sal_Bool operator!=( const XPolyPolygon& rXPolyPoly ) const; + + // Transformationen + void Distort(const Rectangle& rRefRect, const XPolygon& rDistortedRect); + + // #116512# convert to basegfx::B2DPolyPolygon and return + basegfx::B2DPolyPolygon getB2DPolyPolygon() const; + + // #116512# constructor to convert from basegfx::B2DPolyPolygon + // #i76339# made explicit + explicit XPolyPolygon(const basegfx::B2DPolyPolygon& rPolyPolygon); +}; + +#endif // _XPOLY_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xpool.hxx b/include/svx/xpool.hxx new file mode 100644 index 000000000000..e7838d6e8faa --- /dev/null +++ b/include/svx/xpool.hxx @@ -0,0 +1,54 @@ +/* -*- 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 _XPOOL_HXX +#define _XPOOL_HXX + +#include <svl/itempool.hxx> +#include <svx/xdef.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* Klassendeklaration +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XOutdevItemPool : public SfxItemPool +{ +protected: + SfxPoolItem** mppLocalPoolDefaults; + SfxItemInfo* mpLocalItemInfos; + +public: + XOutdevItemPool( + SfxItemPool* pMaster = 0L, + sal_uInt16 nAttrStart = XATTR_START, + sal_uInt16 nAttrEnd = XATTR_END, + sal_Bool bLoadRefCounts = sal_True); + XOutdevItemPool(const XOutdevItemPool& rPool); + + virtual SfxItemPool* Clone() const; +protected: + virtual ~XOutdevItemPool(); +}; + +#endif // _XPOOL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xsetit.hxx b/include/svx/xsetit.hxx new file mode 100644 index 000000000000..c5f59d2fb1ae --- /dev/null +++ b/include/svx/xsetit.hxx @@ -0,0 +1,45 @@ +/* -*- 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 _SVX_XSETITEM_HXX +#define _SVX_XSETITEM_HXX + +#include <svx/xit.hxx> +#include <svl/metitem.hxx> +#include <svl/eitem.hxx> +#include <svx/rectenum.hxx> + +#include <svx/xlnasit.hxx> +#include <svx/xflasit.hxx> +#include <svx/xlntrit.hxx> +#include <svx/xfltrit.hxx> +#include <svx/xftshtit.hxx> +#include <svx/xgrscit.hxx> +#include <svx/xflbmtit.hxx> +#include <svx/xflbmpit.hxx> +#include <svx/xflbmsxy.hxx> +#include <svx/xflbmsli.hxx> +#include <svx/xflbtoxy.hxx> +#include <svx/xflbstit.hxx> +#include <svx/xflboxy.hxx> +#include <svx/xflbckit.hxx> + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xsflclit.hxx b/include/svx/xsflclit.hxx new file mode 100644 index 000000000000..1634eb053543 --- /dev/null +++ b/include/svx/xsflclit.hxx @@ -0,0 +1,50 @@ +/* -*- 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 _SVX_XSFLCLIT_HXX +#define _SVX_XSFLCLIT_HXX + +#include <svx/xcolit.hxx> + +//------------------------------ +// class XSecondaryFillColorItem +//------------------------------ +class SVX_DLLPUBLIC XSecondaryFillColorItem : public XColorItem +{ +public: + TYPEINFO(); + SVX_DLLPRIVATE XSecondaryFillColorItem() {} + XSecondaryFillColorItem(const String& rName, const Color& rTheColor); + SVX_DLLPRIVATE XSecondaryFillColorItem(SvStream& rIn); + + SVX_DLLPRIVATE virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + SVX_DLLPRIVATE virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + + SVX_DLLPRIVATE virtual SfxItemPresentation GetPresentation( SfxItemPresentation ePres, + SfxMapUnit eCoreMetric, + SfxMapUnit ePresMetric, + OUString &rText, const IntlWrapper * = 0 ) const; + + SVX_DLLPRIVATE virtual sal_uInt16 GetVersion( sal_uInt16 nFileFormatVersion ) const; + +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xtable.hxx b/include/svx/xtable.hxx new file mode 100644 index 000000000000..93ad230ea75f --- /dev/null +++ b/include/svx/xtable.hxx @@ -0,0 +1,501 @@ +/* -*- 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 <rtl/ref.hxx> +#include <svx/xpoly.hxx> +#include <svx/xdash.hxx> +#include <svx/xhatch.hxx> +#include <svx/xgrad.hxx> +#include <svx/xflasit.hxx> +#include <svx/xlnasit.hxx> + +#include <tools/color.hxx> +#include <tools/string.hxx> +#include <tools/contnr.hxx> + +#include <cppuhelper/weak.hxx> + +#include "svx/svxdllapi.h" +#include <com/sun/star/embed/XStorage.hpp> +#include <basegfx/polygon/b2dpolypolygon.hxx> +#include <com/sun/star/container/XNameContainer.hpp> +#include <svtools/grfmgr.hxx> + +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<XDashList *> (this) ); } +inline XHatchListRef XPropertyList::AsHatchList() { return XHatchListRef( static_cast<XHatchList *> (this) ); } +inline XColorListRef XPropertyList::AsColorList() { return XColorListRef( static_cast<XColorList *> (this) ); } +inline XBitmapListRef XPropertyList::AsBitmapList() { return XBitmapListRef( static_cast<XBitmapList *> (this) ); } +inline XLineEndListRef XPropertyList::AsLineEndList() { return XLineEndListRef( static_cast<XLineEndList *> (this) ); } +inline XGradientListRef XPropertyList::AsGradientList() { return XGradientListRef( static_cast<XGradientList *> (this) ); } + +#endif // _XTABLE_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xtextit.hxx b/include/svx/xtextit.hxx new file mode 100644 index 000000000000..40a33b2afa32 --- /dev/null +++ b/include/svx/xtextit.hxx @@ -0,0 +1,41 @@ +/* -*- 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 _SVX_XTEXTITEM_HXX +#define _SVX_XTEXTITEM_HXX + +#include <svx/xenum.hxx> +#include <svl/metitem.hxx> +#include <svl/eitem.hxx> +#include <svx/xit.hxx> +#include <svx/xcolit.hxx> + +#include <svx/xftadit.hxx> +#include <svx/xftdiit.hxx> +#include <svx/xftstit.hxx> +#include <svx/xftmrit.hxx> +#include <svx/xftouit.hxx> +#include <svx/xftshit.hxx> +#include <svx/xftshcit.hxx> +#include <svx/xftshxy.hxx> +#include <svx/xftsfit.hxx> + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/xtextit0.hxx b/include/svx/xtextit0.hxx new file mode 100644 index 000000000000..9e4478f2eec6 --- /dev/null +++ b/include/svx/xtextit0.hxx @@ -0,0 +1,66 @@ +/* -*- 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 _SVX_TEXTIT0_HXX +#define _SVX_TEXTIT0_HXX + +#include <svx/xenum.hxx> +#include <svl/eitem.hxx> +#include "svx/svxdllapi.h" + +/************************************************************************* +|* +|* FormText-StyleItem +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFormTextStyleItem : public SfxEnumItem +{ +public: + TYPEINFO(); + XFormTextStyleItem(XFormTextStyle = XFT_NONE); + XFormTextStyleItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; + virtual sal_uInt16 GetValueCount() const; + XFormTextStyle GetValue() const { return (XFormTextStyle) SfxEnumItem::GetValue(); } + // #FontWork# + 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 ); +}; + +/************************************************************************* +|* +|* FormText-HideFormItem +|* +\************************************************************************/ + +class SVX_DLLPUBLIC XFormTextHideFormItem : public SfxBoolItem +{ +public: + TYPEINFO(); + XFormTextHideFormItem(sal_Bool bHide = sal_False); + XFormTextHideFormItem(SvStream& rIn); + virtual SfxPoolItem* Clone(SfxItemPool* pPool = 0) const; + virtual SfxPoolItem* Create(SvStream& rIn, sal_uInt16 nVer) const; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/zoom_def.hxx b/include/svx/zoom_def.hxx new file mode 100644 index 000000000000..e71f12f36995 --- /dev/null +++ b/include/svx/zoom_def.hxx @@ -0,0 +1,29 @@ +/* -*- 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 _SVX_ZOOM_DEF_HXX +#define _SVX_ZOOM_DEF_HXX + +#define ZOOMBTN_OPTIMAL ((sal_uInt16)0x0001) +#define ZOOMBTN_PAGEWIDTH ((sal_uInt16)0x0002) +#define ZOOMBTN_WHOLEPAGE ((sal_uInt16)0x0004) + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/zoomctrl.hxx b/include/svx/zoomctrl.hxx new file mode 100644 index 000000000000..c09acf1d5901 --- /dev/null +++ b/include/svx/zoomctrl.hxx @@ -0,0 +1,48 @@ +/* -*- 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 _SVX_ZOOMCTRL_HXX +#define _SVX_ZOOMCTRL_HXX + +#include <sfx2/stbitem.hxx> +#include "svx/svxdllapi.h" + +// class SvxZoomToolBoxControl ------------------------------------------- + +class SVX_DLLPUBLIC SvxZoomStatusBarControl : public SfxStatusBarControl +{ +private: + sal_uInt16 nZoom; + sal_uInt16 nValueSet; + +public: + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, + const SfxPoolItem* pState ); + virtual void Paint( const UserDrawEvent& rEvt ); + virtual void Command( const CommandEvent& rCEvt ); + + SFX_DECL_STATUSBAR_CONTROL(); + + SvxZoomStatusBarControl( sal_uInt16 nSlotId, sal_uInt16 nId, StatusBar& rStb ); + +}; + + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/zoomsliderctrl.hxx b/include/svx/zoomsliderctrl.hxx new file mode 100644 index 000000000000..f6be6ed760d5 --- /dev/null +++ b/include/svx/zoomsliderctrl.hxx @@ -0,0 +1,53 @@ +/* -*- 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 _ZOOMSLIDER_STBCONTRL_HXX +#define _ZOOMSLIDER_STBCONTRL_HXX + +#include <sfx2/stbitem.hxx> +#include "svx/svxdllapi.h" + +// class SvxZoomSliderControl ---------------------------------------- + +class SVX_DLLPUBLIC SvxZoomSliderControl : public SfxStatusBarControl +{ +private: + + struct SvxZoomSliderControl_Impl; + SvxZoomSliderControl_Impl* mpImpl; + + sal_uInt16 Offset2Zoom( long nOffset ) const; + long Zoom2Offset( sal_uInt16 nZoom ) const; + +public: + + SFX_DECL_STATUSBAR_CONTROL(); + + SvxZoomSliderControl( sal_uInt16 _nSlotId, sal_uInt16 _nId, StatusBar& _rStb ); + ~SvxZoomSliderControl(); + + virtual void StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState ); + virtual void Paint( const UserDrawEvent& rEvt ); + virtual sal_Bool MouseButtonDown( const MouseEvent & ); + virtual sal_Bool MouseMove( const MouseEvent & rEvt ); +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/svx/zoomslideritem.hxx b/include/svx/zoomslideritem.hxx new file mode 100644 index 000000000000..d3b726cba6b8 --- /dev/null +++ b/include/svx/zoomslideritem.hxx @@ -0,0 +1,60 @@ +/* -*- 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 _SVX_ZOOMSLIDERITEM_HXX +#define _SVX_ZOOMSLIDERITEM_HXX + +#include <svl/intitem.hxx> +#include <svx/svxids.hrc> +#include <com/sun/star/uno/Sequence.hxx> +#include "svx/svxdllapi.h" + +//------------------------------------------------------------------------- + +class SVX_DLLPUBLIC SvxZoomSliderItem: public SfxUInt16Item +{ + com::sun::star::uno::Sequence < sal_Int32 > maValues; + sal_uInt16 mnMinZoom; + sal_uInt16 mnMaxZoom; + +public: + TYPEINFO(); + + SvxZoomSliderItem( sal_uInt16 nCurrentZoom = 100, sal_uInt16 nMinZoom = 20, sal_uInt16 nMaxZoom = 600, sal_uInt16 nWhich = SID_ATTR_ZOOMSLIDER ); + SvxZoomSliderItem( const SvxZoomSliderItem& ); + ~SvxZoomSliderItem(); + + void AddSnappingPoint( sal_Int32 nNew ); + const com::sun::star::uno::Sequence < sal_Int32 >& GetSnappingPoints() const; + sal_uInt16 GetMinZoom() const {return mnMinZoom;} + sal_uInt16 GetMaxZoom() const {return mnMaxZoom;} + + // "pure virtual Methoden" vom SfxPoolItem + virtual int operator==( const SfxPoolItem& ) const; + virtual SfxPoolItem* Clone( SfxItemPool *pPool = 0 ) const; + virtual SfxPoolItem* Create( SvStream& rStrm, sal_uInt16 nVersion ) const; // leer + virtual SvStream& Store( SvStream& rStrm , sal_uInt16 nItemVersion ) const; // leer + 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 ); +}; + +//------------------------------------------------------------------------ + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |