]> Shamusworld >> Repos - architektonas/blob - src/base/rs_undocycle.cpp
Initial import
[architektonas] / src / base / rs_undocycle.cpp
1 // undocycle.h
2 //
3 // Originally part of QCad Community Edition by Andrew Mustun
4 // Extensively rewritten and refactored by James L. Hammons
5 // (C) 2010 Underground Software
6 //
7 // JLH = James L. Hammons <jlhamm@acm.org>
8 //
9 // Who  When        What
10 // ---  ----------  -----------------------------------------------------------
11 // JLH  05/05/2010  Moved implementation from header to this file. :-)
12 //
13
14 #include "rs_undocycle.h"
15
16 #include "rs_entity.h"
17 #include "rs_undoable.h"
18
19 /**
20  * @param type Type of undo item.
21  */
22 RS_UndoCycle::RS_UndoCycle(/*RS2::UndoType type*/): undoableIterator(undoables)
23 {
24         //this->type = type;
25 // Good, we don't have to worry about this...
26 //      undoables.setAutoDelete(false);
27 }
28
29 /**
30  * Adds an Undoable to this Undo Cycle. Every Cycle can contain one or
31  * more Undoables.
32  */
33 void RS_UndoCycle::addUndoable(RS_Undoable * u)
34 {
35         undoables.append(u);
36 }
37
38 /**
39  * Removes an undoable from the list.
40  */
41 void RS_UndoCycle::removeUndoable(RS_Undoable * u)
42 {
43 //      undoables.remove(u);
44         int i = undoables.indexOf(u);
45         undoables.takeAt(i);
46 }
47
48 /**
49  * Iteration through undoable elements in this item.
50  */
51 RS_Undoable * RS_UndoCycle::getFirstUndoable()
52 {
53 //      return undoables.first();
54         undoableIterator.toFront();
55         return undoableIterator.next();
56 }
57
58 /**
59  * Iteration through undoable elements in this item.
60  */
61 RS_Undoable * RS_UndoCycle::getNextUndoable()
62 {
63 //      return undoables.next();
64         return undoableIterator.next();
65 }
66
67 /*friend*/ std::ostream & operator<<(std::ostream & os, RS_UndoCycle & i)
68 {
69         os << " Undo item: " << "\n";
70         //os << "   Type: ";
71         /*switch (i.type) {
72         case RS2::UndoAdd:
73                 os << "RS2::UndoAdd";
74                 break;
75         case RS2::UndoDel:
76                 os << "RS2::UndoDel";
77                 break;
78 }*/
79         os << "   Undoable ids: ";
80
81         for(RS_Undoable * u=i.getFirstUndoable(); u!=NULL; u=i.getNextUndoable())
82         {
83                 if (u->undoRtti() == RS2::UndoableEntity)
84                 {
85                         RS_Entity * e = (RS_Entity *)u;
86                         os << e->getId() << (u->isUndone() ? "*" : "") << " ";
87                 }
88                 else
89                 {
90                         os << "|";
91                 }
92         }
93
94         return os;
95 }