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;
42 class vtkUndoElement;
43 class vtkUndoSet; // vistrails
44 class vtkPVXMLElement; // vistrails
45 
56 class PQCORE_EXPORT pqUndoStack : public QObject
57 {
58  Q_OBJECT
59 public:
64  pqUndoStack(vtkSMUndoStackBuilder* builder = 0, QObject* parent = NULL);
65  ~pqUndoStack() override;
66 
70  bool canUndo();
71 
75  bool canRedo();
76 
80  const QString undoLabel();
81 
85  const QString redoLabel();
86 
91  bool ignoreAllChanges() const;
92 
96  void registerElementForLoader(vtkSMUndoElement*);
97 
101  bool getInUndo() const;
102  bool getInRedo() const;
103 
108  void Push(const char* label, vtkUndoSet* set);
109  vtkUndoSet* getLastUndoSet(); // vistrails
110  vtkUndoSet* getUndoSetFromXML(vtkPVXMLElement* root); // vistrails
111 
115  vtkSMUndoStackBuilder* GetUndoStackBuilder();
116 
120  void updateAllModifiedProxies();
121 
122 public Q_SLOTS:
123  void beginUndoSet(QString label);
124  void endUndoSet();
125 
129  void undo();
130 
134  void redo();
135 
139  void clear();
140 
148  void beginNonUndoableChanges();
149  void endNonUndoableChanges();
150 
155  void addToActiveUndoSet(vtkUndoElement* element);
156 
157 Q_SIGNALS:
162  void stackChanged(bool canUndo, QString undoLabel, bool canRedo, QString redoLabel);
163 
164  void canUndoChanged(bool);
165  void canRedoChanged(bool);
166  void undoLabelChanged(const QString&);
167  void redoLabelChanged(const QString&);
168 
169  // Fired after undo.
170  void undone();
171  // Fired after redo.
172  void redone();
173 
174 private Q_SLOTS:
175  void onStackChanged();
176 
177 private:
178  class pqImplementation;
179  pqImplementation* Implementation;
180 };
181 
182 #include "pqApplicationCore.h"
183 
184 inline void BEGIN_UNDO_SET(const QString& name)
185 {
187  if (usStack)
188  {
189  usStack->beginUndoSet(name);
190  }
191 }
192 
193 inline void END_UNDO_SET()
194 {
196  if (usStack)
197  {
198  usStack->endUndoSet();
199  }
200 }
201 
202 inline void CLEAR_UNDO_STACK()
203 {
205  if (usStack)
206  {
207  usStack->clear();
208  }
209 }
210 
211 inline void ADD_UNDO_ELEM(vtkUndoElement* elem)
212 {
214  if (usStack)
215  {
216  usStack->addToActiveUndoSet(elem);
217  }
218 }
219 
220 inline void BEGIN_UNDO_EXCLUDE()
221 {
223  if (usStack)
224  {
225  usStack->beginNonUndoableChanges();
226  }
227 }
228 
229 inline void END_UNDO_EXCLUDE()
230 {
232  if (usStack)
233  {
234  usStack->endNonUndoableChanges();
235  }
236 }
237 
239 {
240 public:
243 private:
244  Q_DISABLE_COPY(pqScopedUndoExclude);
245 };
246 
248 {
249 public:
250  pqScopedUndoSet(const QString& label) { BEGIN_UNDO_SET(label); }
252 private:
253  Q_DISABLE_COPY(pqScopedUndoSet);
254 };
255 
256 #define SCOPED_UNDO_EXCLUDE() SCOPED_UNDO_EXCLUDE__0(__LINE__)
257 #define SCOPED_UNDO_EXCLUDE__0(line) pqScopedUndoExclude val##line
258 
259 #define SCOPED_UNDO_SET(txt) SCOPED_UNDO_SET__0(__LINE__, txt)
260 #define SCOPED_UNDO_SET__0(line, txt) pqScopedUndoSet val##line(txt)
261 
262 #endif
unit undo-redo-able operation.
void CLEAR_UNDO_STACK()
Definition: pqUndoStack.h:202
builds server manager undo sets and pushes them on the undo stack.
void BEGIN_UNDO_SET(const QString &name)
Definition: pqUndoStack.h:184
void endUndoSet()
void ADD_UNDO_ELEM(vtkUndoElement *elem)
Definition: pqUndoStack.h:211
This is the undo/redo stack for the Server Manager.
void beginUndoSet(QString label)
void BEGIN_UNDO_EXCLUDE()
Definition: pqUndoStack.h:220
#define PQCORE_EXPORT
Definition: pqCoreModule.h:15
void clear()
Clears undo stack.
Maintains a collection of vtkUndoElement that can be undone/redone in a single step.
Definition: vtkUndoSet.h:42
void addToActiveUndoSet(vtkUndoElement *element)
One can add arbitrary elements to the undo set currently being built.
void endNonUndoableChanges()
This is used by vtkPVXMLParser to represent an XML document starting at the root element.
pqUndoStack * getUndoStack() const
pqUndoStack represents a vtkSMUndoStack along with a a vtkSMUndoStackBuilder.
Definition: pqUndoStack.h:56
abstract superclass for Server Manager undo elements.
void END_UNDO_SET()
Definition: pqUndoStack.h:193
void END_UNDO_EXCLUDE()
Definition: pqUndoStack.h:229
static pqApplicationCore * instance()
pqServer (should be renamed to pqSession) is a pqServerManagerModelItem subclass that represents a vt...
Definition: pqServer.h:64
pqScopedUndoSet(const QString &label)
Definition: pqUndoStack.h:250
void beginNonUndoableChanges()
when the GUI is performing some changes that should not go on the UndoStack at all, it should call beginNonUndoableChanges().