blob: f297827f7386774d21a9c08ced76e725bd0bdb54 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef SC_UNDOBASE_HXX
#define SC_UNDOBASE_HXX
#include <svl/undo.hxx>
#include "global.hxx"
#include "address.hxx"
#include "docsh.hxx"
class ScDocument;
class ScDocShell;
class SdrUndoAction;
class ScRefUndoData;
class ScDBData;
//----------------------------------------------------------------------------
class ScSimpleUndo: public SfxUndoAction
{
public:
TYPEINFO();
ScSimpleUndo( ScDocShell* pDocSh );
virtual ~ScSimpleUndo();
virtual sal_Bool Merge( SfxUndoAction *pNextAction );
protected:
ScDocShell* pDocShell;
SfxUndoAction* pDetectiveUndo;
bool IsPaintLocked() const { return pDocShell->IsPaintLocked(); }
bool SetViewMarkData( const ScMarkData& rMarkData );
void BeginUndo();
void EndUndo();
void BeginRedo();
void EndRedo();
static void ShowTable( SCTAB nTab );
static void ShowTable( const ScRange& rRange );
};
//----------------------------------------------------------------------------
enum ScBlockUndoMode { SC_UNDO_SIMPLE, SC_UNDO_MANUALHEIGHT, SC_UNDO_AUTOHEIGHT };
class ScBlockUndo: public ScSimpleUndo
{
public:
TYPEINFO();
ScBlockUndo( ScDocShell* pDocSh, const ScRange& rRange,
ScBlockUndoMode eBlockMode );
virtual ~ScBlockUndo();
protected:
ScRange aBlockRange;
SdrUndoAction* pDrawUndo;
ScBlockUndoMode eMode;
void BeginUndo();
void EndUndo();
// void BeginRedo();
void EndRedo();
sal_Bool AdjustHeight();
void ShowBlock();
};
//----------------------------------------------------------------------------
// for functions that act on a database range - takes care of the unnamed database range
// (collected separately, before the undo action, for showing dialogs etc.)
class ScDBFuncUndo: public ScSimpleUndo
{
ScDBData* pAutoDBRange;
ScRange aOriginalRange;
SdrUndoAction* mpDrawUndo;
public:
TYPEINFO();
ScDBFuncUndo( ScDocShell* pDocSh, const ScRange& rOriginal, SdrUndoAction* pDrawUndo = 0 );
virtual ~ScDBFuncUndo();
void SetDrawUndoAction( SdrUndoAction* pDrawUndo );
void BeginUndo();
void EndUndo();
void BeginRedo();
void EndRedo();
};
//----------------------------------------------------------------------------
enum ScMoveUndoMode { SC_UNDO_REFFIRST, SC_UNDO_REFLAST };
class ScMoveUndo: public ScSimpleUndo // mit Referenzen
{
public:
TYPEINFO();
ScMoveUndo( ScDocShell* pDocSh,
ScDocument* pRefDoc, ScRefUndoData* pRefData,
ScMoveUndoMode eRefMode );
virtual ~ScMoveUndo();
protected:
SdrUndoAction* pDrawUndo;
ScDocument* pRefUndoDoc;
ScRefUndoData* pRefUndoData;
ScMoveUndoMode eMode;
void BeginUndo();
void EndUndo();
// void BeginRedo();
// void EndRedo();
private:
void UndoRef();
};
//----------------------------------------------------------------------------
class ScUndoWrapper: public SfxUndoAction // for manual merging of actions
{
SfxUndoAction* pWrappedUndo;
public:
TYPEINFO();
ScUndoWrapper( SfxUndoAction* pUndo );
virtual ~ScUndoWrapper();
SfxUndoAction* GetWrappedUndo() { return pWrappedUndo; }
void ForgetWrappedUndo();
virtual void SetLinkToSfxLinkUndoAction(SfxLinkUndoAction* pSfxLinkUndoAction);
virtual void Undo();
virtual void Redo();
virtual void Repeat(SfxRepeatTarget& rTarget);
virtual sal_Bool CanRepeat(SfxRepeatTarget& rTarget) const;
virtual sal_Bool Merge( SfxUndoAction *pNextAction );
virtual String GetComment() const;
virtual String GetRepeatComment(SfxRepeatTarget&) const;
virtual sal_uInt16 GetId() const;
};
#endif