office-gobmx/sfx2/inc/macro.hxx
2011-08-23 10:35:44 +01:00

180 lines
6.2 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
#ifndef _SFXMACRO_HXX
#define _SFXMACRO_HXX
//====================================================================
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/uno/Sequence.hxx>
#include <tools/string.hxx>
class SfxSlot;
class SfxShell;
struct SfxMacro_Impl;
class SfxMacro;
//====================================================================
class SfxMacroStatement
{
sal_uInt16 nSlotId; // performed Slot-Id or 0, if manually
::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue > aArgs; // current Parameter, in case nSlotId != 0
String aStatement; // Statement in BASIC-Syntax (if necessary with CR/LF)
sal_Bool bDone; // comment out if no Done() is called
void* pDummy; // for all cases, to remain compatible
#ifdef _SFXMACRO_HXX
private:
void GenerateNameAndArgs_Impl( SfxMacro *pMacro,
const SfxSlot &rSlot,
sal_Bool bRequestDone,
::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& aArgs );
#endif
public:
SfxMacroStatement( const SfxMacroStatement &rOrig );
SfxMacroStatement( const String &rTarget,
const SfxSlot &rSlot,
sal_Bool bRequestDone,
::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& aArgs );
SfxMacroStatement( const SfxShell &rShell,
const String &rTarget,
sal_Bool bAbsolute,
const SfxSlot &rSlot,
sal_Bool bRequestDone,
::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& aArgs );
SfxMacroStatement( const String &rStatment );
~SfxMacroStatement();
sal_uInt16 GetSlotId() const;
const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& GetArgs() const;
sal_Bool IsDone() const;
const String& GetStatement() const;
};
//--------------------------------------------------------------------
inline sal_uInt16 SfxMacroStatement::GetSlotId() const
/* [Description]
Returns the Slot-Id which the Statement should redo when called or 0
if the Statement (<SFX_SLOT_RECORDMANUAL>) was recorded manually.
*/
{
return nSlotId;
}
//--------------------------------------------------------------------
inline const ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >& SfxMacroStatement::GetArgs() const
/* [Description]
Returns the Parameter which was used in the call of the Statement or 0
if the Statement (<SFX_SLOT_RECORDMANUAL>) was recorded manually
The returned value belongs to the SfxMacroStatement and is only valid
to the Stackframe.
*/
{
return aArgs;
}
//--------------------------------------------------------------------
inline sal_Bool SfxMacroStatement::IsDone() const
/* [Description]
Returns TRUE only if the Statement really was excecuted, so for instance
not if it was canceled by the user. If it was not excecuted the
BASIC-Source would be commented out.
*/
{
return bDone;
}
//--------------------------------------------------------------------
/* [Description]
Returns the Statement in BASIC-Syntax. If the Macro was created manually,
the string will be returned exactly as given in the constructor, else the
generated Source-Code is returned.
It is possible in both of the above cases that several BASIC-Statements,
each contains CR / LF separators in the string, since a SFx statement
is translated if necessary into several BASIC statements.
Statements for which <SfxRequest::Done()> was not called are marked
with a preceding 'rem'.
*/
inline const String& SfxMacroStatement::GetStatement() const
{
return aStatement;
}
//====================================================================
enum SfxMacroMode
/* [Description]
By using this enum it is determined, if a <SfxMacro>-Instance was created
by absolute or relative recording, or to create a reference to a existing
macro.
*/
{
SFX_MACRO_EXISTING, /* Indicates that it is a existing
macro, which will only referenced */
SFX_MACRO_RECORDINGABSOLUTE, /* This macro shall be recorded so that the
affected objects are to be addressed as
directly as possible (example: "[doc.sdc]") */
SFX_MACRO_RECORDINGRELATIVE /* This macro is recorded and the affected
objects are addressed in such a way so
that when running the macro it refers to
a vaild selection
(example:" active document () ") */
};
//====================================================================
class SfxMacro
/* [Description]
Through using this class (and in fact its subclasses) the location of a
BASIC function will be discribed (also in which Library, in which module
and the Function name) as well as temporary storing a macro during the
recording.
*/
{
SfxMacro_Impl* pImp;
public:
SfxMacro( SfxMacroMode eMode = SFX_MACRO_RECORDINGRELATIVE );
virtual ~SfxMacro();
SfxMacroMode GetMode() const;
void Record( SfxMacroStatement *pStatement );
void Replace( SfxMacroStatement *pStatement );
void Remove();
String GenerateSource() const;
};
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */