You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
2.8 KiB
133 lines
2.8 KiB
/***************************************************************************
|
|
begin : Sun Oct 3 1999
|
|
copyright : (C) 1997-99 by Peter Putzer
|
|
email : putzer@kde.org
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; version 2. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#ifndef KSV_ACTIONLIST_H
|
|
#define KSV_ACTIONLIST_H
|
|
|
|
#include <tqptrstack.h>
|
|
#include <tqobject.h>
|
|
|
|
class KSVData;
|
|
class KSVDragList;
|
|
|
|
class KSVAction
|
|
{
|
|
public:
|
|
KSVAction ();
|
|
virtual ~KSVAction () = 0;
|
|
|
|
virtual void undo () = 0;
|
|
virtual void redo() = 0;
|
|
|
|
private:
|
|
const KSVAction& operator= (const KSVAction&); // undefined
|
|
KSVAction (const KSVAction&); // undefined
|
|
};
|
|
|
|
class SimpleAction : public KSVAction
|
|
{
|
|
public:
|
|
SimpleAction (KSVDragList* source, const KSVData* item);
|
|
virtual ~SimpleAction();
|
|
|
|
inline KSVDragList* source() { return mSource; }
|
|
inline KSVData* item() { return mItem; }
|
|
|
|
virtual void undo() = 0;
|
|
virtual void redo() = 0;
|
|
|
|
private:
|
|
KSVDragList* mSource;
|
|
KSVData* mItem;
|
|
};
|
|
|
|
class RemoveAction : public SimpleAction
|
|
{
|
|
public:
|
|
RemoveAction (KSVDragList* s, const KSVData* i);
|
|
virtual ~RemoveAction();
|
|
|
|
virtual void undo();
|
|
virtual void redo();
|
|
};
|
|
|
|
class AddAction : public SimpleAction
|
|
{
|
|
public:
|
|
AddAction (KSVDragList* s, const KSVData* i);
|
|
virtual ~AddAction();
|
|
|
|
virtual void undo();
|
|
virtual void redo();
|
|
};
|
|
|
|
class ChangeAction : public SimpleAction
|
|
{
|
|
public:
|
|
ChangeAction (KSVDragList* s, const KSVData* oldState, const KSVData* newState);
|
|
virtual ~ChangeAction();
|
|
|
|
virtual void undo();
|
|
virtual void redo();
|
|
|
|
inline KSVData* newState() { return mNew; }
|
|
inline KSVData* oldState() { return item(); }
|
|
private:
|
|
KSVData* mNew;
|
|
};
|
|
|
|
class CompoundAction : public KSVAction
|
|
{
|
|
public:
|
|
CompoundAction (KSVAction*[], int nr);
|
|
virtual ~CompoundAction();
|
|
|
|
virtual void undo();
|
|
virtual void redo();
|
|
|
|
private:
|
|
KSVAction** mActions;
|
|
int mCount;
|
|
};
|
|
|
|
|
|
|
|
class ActionList : public TQObject, private TQPtrStack<KSVAction>
|
|
{
|
|
Q_OBJECT
|
|
|
|
|
|
public:
|
|
ActionList (TQObject* parent, const char* name);
|
|
virtual ~ActionList ();
|
|
|
|
KSVAction* top () const { return TQPtrStack<KSVAction>::top(); }
|
|
|
|
public slots:
|
|
void undoLast ();
|
|
void undoAll ();
|
|
void redoLast ();
|
|
void redoAll ();
|
|
void push (KSVAction*);
|
|
void clear ();
|
|
|
|
signals:
|
|
void undone ();
|
|
void empty ();
|
|
void filled ();
|
|
};
|
|
|
|
#endif
|
|
|