1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: fmundo.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _SVX_FMUNDO_HXX
32 #define _SVX_FMUNDO_HXX
34 #include <svx/svdundo.hxx>
35 #include <svx/svdouno.hxx>
36 #include "fmscriptingenv.hxx"
39 /** === begin UNO includes === **/
40 #include <com/sun/star/util/XModifyListener.hpp>
41 #include <com/sun/star/beans/XPropertySet.hpp>
42 #include <com/sun/star/beans/XPropertyChangeListener.hpp>
43 #include <com/sun/star/beans/PropertyChangeEvent.hpp>
44 #include <com/sun/star/script/ScriptEvent.hpp>
45 #include <com/sun/star/script/ScriptEventDescriptor.hpp>
46 #include <com/sun/star/container/XIndexContainer.hpp>
47 #include <com/sun/star/container/XContainerListener.hpp>
48 #include <com/sun/star/container/ContainerEvent.hpp>
49 #include <com/sun/star/container/XNameContainer.hpp>
50 /** === end UNO includes === **/
51 #include <cppuhelper/implbase3.hxx>
54 #include <svtools/lstner.hxx>
55 #include <comphelper/uno3.hxx>
62 FORWARD_DECLARE_INTERFACE(awt
,XControl
)
63 FORWARD_DECLARE_INTERFACE(awt
,XControlContainer
)
64 //FORWARD_DECLARE_INTERFACE(uno,Reference)
66 //==================================================================
67 // FmUndoPropertyAction
68 //==================================================================
69 class FmUndoPropertyAction
: public SdrUndoAction
71 ::com::sun::star::uno::Reference
< ::com::sun::star::beans::XPropertySet
> xObj
;
72 ::rtl::OUString aPropertyName
;
73 ::com::sun::star::uno::Any aNewValue
;
74 ::com::sun::star::uno::Any aOldValue
;
77 FmUndoPropertyAction(FmFormModel
& rMod
, const ::com::sun::star::beans::PropertyChangeEvent
& evt
);
82 virtual String
GetComment() const;
86 //==================================================================
87 // FmUndoContainerAction
88 //==================================================================
89 class FmUndoContainerAction
: public SdrUndoAction
91 ::com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexContainer
>
92 m_xContainer
; // container which the action applies to
93 ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>
94 m_xElement
; // object not owned by the action
95 ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>
96 m_xOwnElement
; // object owned by the action
97 sal_Int32 m_nIndex
; // index of the object within it's container
98 ::com::sun::star::uno::Sequence
< ::com::sun::star::script::ScriptEventDescriptor
>
99 m_aEvents
; // events of the object
112 FmUndoContainerAction(FmFormModel
& rMod
,
114 const ::com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexContainer
>& xCont
,
115 const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& xElem
,
116 sal_Int32 nIdx
= -1);
117 ~FmUndoContainerAction();
122 static void DisposeElement( const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& xElem
);
125 void implReInsert( ) SAL_THROW( ( ::com::sun::star::uno::Exception
) );
126 void implReRemove( ) SAL_THROW( ( ::com::sun::star::uno::Exception
) );
129 //==================================================================
130 // FmUndoModelReplaceAction
131 //==================================================================
132 class FmUndoModelReplaceAction
: public SdrUndoAction
134 ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControlModel
> m_xReplaced
;
135 SdrUnoObj
* m_pObject
;
138 FmUndoModelReplaceAction(FmFormModel
& rMod
, SdrUnoObj
* pObject
, const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControlModel
>& xReplaced
);
139 ~FmUndoModelReplaceAction();
142 virtual void Redo() { Undo(); }
144 virtual String
GetComment() const;
146 static void DisposeElement( const ::com::sun::star::uno::Reference
< ::com::sun::star::awt::XControlModel
>& xReplaced
);
149 //========================================================================
150 class SVX_DLLPRIVATE FmXUndoEnvironment
151 : public ::cppu::WeakImplHelper3
< ::com::sun::star::beans::XPropertyChangeListener
152 , ::com::sun::star::container::XContainerListener
153 , ::com::sun::star::util::XModifyListener
156 // public ::cppu::OWeakObject
160 void* m_pPropertySetCache
;
161 ::svxform::PFormScriptingEnvironment m_pScriptingEnv
;
162 oslInterlockedCount m_Locks
;
163 ::osl::Mutex m_aMutex
;
168 FmXUndoEnvironment(FmFormModel
& _rModel
);
169 ~FmXUndoEnvironment();
172 // SMART_UNO_DECLARATION(FmXUndoEnvironment, ::cppu::OWeakObject);
173 // virtual sal_Bool queryInterface(UsrUik, ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>&);
174 // virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XIdlClass>> getIdlClasses(void);
176 void Lock() { osl_incrementInterlockedCount( &m_Locks
); }
177 void UnLock() { osl_decrementInterlockedCount( &m_Locks
); }
178 sal_Bool
IsLocked() const { return m_Locks
!= 0; }
181 struct Accessor
{ friend class FmFormModel
; private: Accessor() { } };
183 // addition and removal of form collections
184 void AddForms( const ::com::sun::star::uno::Reference
< ::com::sun::star::container::XNameContainer
>& rForms
);
185 void RemoveForms( const ::com::sun::star::uno::Reference
< ::com::sun::star::container::XNameContainer
>& rForms
);
188 void SetReadOnly( sal_Bool bRead
, const Accessor
& ) { bReadOnly
= bRead
; }
189 sal_Bool
IsReadOnly() const {return bReadOnly
;}
193 virtual void SAL_CALL
disposing(const ::com::sun::star::lang::EventObject
& Source
) throw( ::com::sun::star::uno::RuntimeException
);
195 // XPropertyChangeListener
196 virtual void SAL_CALL
propertyChange(const ::com::sun::star::beans::PropertyChangeEvent
& evt
) throw(::com::sun::star::uno::RuntimeException
);
198 // XContainerListener
199 virtual void SAL_CALL
elementInserted(const ::com::sun::star::container::ContainerEvent
& rEvent
) throw(::com::sun::star::uno::RuntimeException
);
200 virtual void SAL_CALL
elementReplaced(const ::com::sun::star::container::ContainerEvent
& rEvent
) throw(::com::sun::star::uno::RuntimeException
);
201 virtual void SAL_CALL
elementRemoved(const ::com::sun::star::container::ContainerEvent
& rEvent
) throw(::com::sun::star::uno::RuntimeException
);
204 virtual void SAL_CALL
modified( const ::com::sun::star::lang::EventObject
& aEvent
) throw (::com::sun::star::uno::RuntimeException
);
209 virtual void Notify( SfxBroadcaster
& rBC
, const SfxHint
& rHint
);
212 void AddElement(const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& Element
);
213 void RemoveElement(const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& Element
);
214 void TogglePropertyListening(const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& Element
);
216 void implSetModified();
218 void switchListening( const ::com::sun::star::uno::Reference
< ::com::sun::star::container::XIndexContainer
>& _rxContainer
, bool _bStartListening
) SAL_THROW(());
219 void switchListening( const ::com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>& _rxObject
, bool _bStartListening
) SAL_THROW(());
220 ::com::sun::star::uno::Reference
< com::sun::star::script::XScriptListener
> m_vbaListener
;
222 // Methoden zur Zuordnung von Controls zu Forms,
223 // werden von der Seite und der UndoUmgebung genutzt
224 void Inserted(SdrObject
* pObj
);
225 void Removed(SdrObject
* pObj
);
227 void Inserted(FmFormObj
* pObj
);
228 void Removed(FmFormObj
* pObj
);
232 #endif //_SVX_FMUNDO_HXX