ParaView
pqUndoStack.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: ParaView
4  Module: pqUndoStack.h
5 
6  Copyright (c) 2005-2008 Sandia Corporation, Kitware Inc.
7  All rights reserved.
8 
9  ParaView is a free software; you can redistribute it and/or modify it
10  under the terms of the ParaView license version 1.2.
11 
12  See License_v1.2.txt for the full ParaView license.
13  A copy of this license can be obtained by contacting
14  Kitware Inc.
15  28 Corporate Drive
16  Clifton Park, NY 12065
17  USA
18 
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR
23 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 ========================================================================*/
32 #ifndef pqUndoStack_h
33 #define pqUndoStack_h
34 
35 #include "pqCoreModule.h"
36 #include <QObject>
37 
38 class pqServer;
39 class vtkSMUndoElement;
40 class vtkSMUndoStack;
41 class vtkSMUndoStackBuilder;
42 class vtkUndoElement;
43 class vtkUndoSet; //vistrails
44 class vtkPVXMLElement; //vistrails
45 
54 class PQCORE_EXPORT pqUndoStack : public QObject
55 {
56  Q_OBJECT
57 public:
60  pqUndoStack(vtkSMUndoStackBuilder* builder=0, QObject* parent=NULL);
61  virtual ~pqUndoStack();
62 
64  bool canUndo();
65 
67  bool canRedo();
68 
70  const QString undoLabel();
71 
73  const QString redoLabel();
74 
75 
78  bool ignoreAllChanges() const;
79 
81  void registerElementForLoader(vtkSMUndoElement*);
82 
84  bool getInUndo() const;
85  bool getInRedo() const;
86 
88  void Push(const char *label, vtkUndoSet *set);
89  vtkUndoSet* getLastUndoSet(); //vistrails
90  vtkUndoSet* getUndoSetFromXML(vtkPVXMLElement *root); //vistrails
91 
93  vtkSMUndoStackBuilder* GetUndoStackBuilder();
94 
96  void updateAllModifiedProxies();
97 
98 public slots:
99  void beginUndoSet(QString label);
100  void endUndoSet();
101 
103  void undo();
104 
106  void redo();
107 
109  void clear();
110 
116  void beginNonUndoableChanges();
117  void endNonUndoableChanges();
118 
121  void addToActiveUndoSet(vtkUndoElement* element);
122 
123 signals:
126  void stackChanged(bool canUndo, QString undoLabel,
127  bool canRedo, QString redoLabel);
128 
129  void canUndoChanged(bool);
130  void canRedoChanged(bool);
131  void undoLabelChanged(const QString&);
132  void redoLabelChanged(const QString&);
133 
134  // Fired after undo.
135  void undone();
136  // Fired after redo.
137  void redone();
138 
139 private slots:
140  void onStackChanged();
141 
142 private:
143  class pqImplementation;
144  pqImplementation* Implementation;
145 
146 };
147 
148 
149 #include "pqApplicationCore.h"
150 
151 inline void BEGIN_UNDO_SET(const QString& name)
152 {
154  if (usStack)
155  {
156  usStack->beginUndoSet(name);
157  }
158 }
159 
160 inline void END_UNDO_SET()
161 {
163  if (usStack)
164  {
165  usStack->endUndoSet();
166  }
167 }
168 
169 inline void CLEAR_UNDO_STACK()
170 {
172  if (usStack)
173  {
174  usStack->clear();
175  }
176 }
177 
178 inline void ADD_UNDO_ELEM(vtkUndoElement* elem)
179 {
181  if (usStack)
182  {
183  usStack->addToActiveUndoSet(elem);
184  }
185 }
186 
187 inline void BEGIN_UNDO_EXCLUDE()
188 {
190  if (usStack)
191  {
192  usStack->beginNonUndoableChanges();
193  }
194 }
195 
196 inline void END_UNDO_EXCLUDE()
197 {
199  if (usStack)
200  {
201  usStack->endNonUndoableChanges();
202  }
203 }
204 #endif
205 
void CLEAR_UNDO_STACK()
Definition: pqUndoStack.h:169
void BEGIN_UNDO_SET(const QString &name)
Definition: pqUndoStack.h:151
void endUndoSet()
void ADD_UNDO_ELEM(vtkUndoElement *elem)
Definition: pqUndoStack.h:178
void beginUndoSet(QString label)
void BEGIN_UNDO_EXCLUDE()
Definition: pqUndoStack.h:187
void clear()
Clears undo stack.
void addToActiveUndoSet(vtkUndoElement *element)
One can add arbritary elements to the undo set currently being built.
void endNonUndoableChanges()
pqUndoStack * getUndoStack() const
pqUndoStack represents a vtkSMUndoStack along with a a vtkSMUndoStackBuilder.
Definition: pqUndoStack.h:54
void END_UNDO_SET()
Definition: pqUndoStack.h:160
void END_UNDO_EXCLUDE()
Definition: pqUndoStack.h:196
static pqApplicationCore * instance()
pqServer (should be renamed to pqSession) is a pqServerManagerModelItem subclass that represents a vt...
Definition: pqServer.h:62
void beginNonUndoableChanges()
when the GUI is performing some changes that should not go on the UndoStack at all, it should call beginNonUndoableChanges().