summaryrefslogtreecommitdiffstats
path: root/ksysv/ActionList.h
blob: 5f5a0471d2517e69295b7135dec87e2194c997c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/***************************************************************************
    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