Revision 3513 branches/FMap_CAD/libraries/libFMap/src/com/iver/cit/gvsig/fmap/edition/MemoryCommandRecord.java
MemoryCommandRecord.java | ||
---|---|---|
40 | 40 |
*/ |
41 | 41 |
package com.iver.cit.gvsig.fmap.edition; |
42 | 42 |
|
43 |
import java.util.ArrayList;
|
|
43 |
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
|
|
44 | 44 |
|
45 |
import java.io.IOException; |
|
45 | 46 |
|
47 |
import java.util.Stack; |
|
48 |
|
|
49 |
|
|
46 | 50 |
/** |
47 |
* DOCUMENT ME! |
|
51 |
* Clase en memoria para registrar y gestionar los comandos que vamos |
|
52 |
* realizando. La forma en que ha sido implementada esta clase, en vez de una |
|
53 |
* ?nica lista para albergar los comandos de deshacer(undos) y los de |
|
54 |
* rehacer(redos), se ha optado por dos pilas una para deshacer(undos) y otra |
|
55 |
* para rehacer(redos), de esta forma : Cuando se a?ade un nuevo comando, se |
|
56 |
* inserta este a la pila de deshacer(undos) y se borra de la de |
|
57 |
* rehacer(redos). Si se realiza un deshacer se desapila este comando de la |
|
58 |
* pila deshacer(undos) y se apila en la de rehacer(redos). Y de la misma |
|
59 |
* forma cuando se realiza un rehacer se desapila este comando de la pila de |
|
60 |
* rehacer(redos) y pasa a la de deshacer(undos). |
|
48 | 61 |
* |
49 |
* @author Fernando Gonz?lez Cort?s
|
|
62 |
* @author Vicente Caballero Navarro
|
|
50 | 63 |
*/ |
51 | 64 |
public class MemoryCommandRecord implements CommandRecord { |
52 |
ArrayList commands = new ArrayList(); |
|
65 |
Stack undos = new Stack(); |
|
66 |
Stack redos = new Stack(); |
|
53 | 67 |
|
54 | 68 |
/** |
69 |
* A?ade el comando a la pila de deshacer y borra todo el contenido de la |
|
70 |
* pila rehacer. |
|
71 |
* |
|
72 |
* @param command Comando a a?adir. |
|
73 |
* |
|
74 |
* @throws IOException |
|
75 |
* @throws DriverIOException |
|
76 |
* |
|
55 | 77 |
* @see com.iver.cit.gvsig.fmap.edition.CommandRecord#addCommand(com.iver.cit.gvsig.fmap.edition.Command) |
56 | 78 |
*/ |
57 |
public boolean addCommand(Command command) {
|
|
58 |
commands.add(command);
|
|
59 |
|
|
60 |
return true;
|
|
79 |
public void pushCommand(Command command)
|
|
80 |
throws IOException, DriverIOException {
|
|
81 |
undos.add(command); |
|
82 |
redos.clear();
|
|
61 | 83 |
} |
62 | 84 |
|
63 | 85 |
/** |
86 |
* Realiza la operaci?n del ?ltimo comando de deshacer y lo apila en los de |
|
87 |
* rehacer. |
|
88 |
* |
|
89 |
* @throws DriverIOException |
|
90 |
* @throws IOException |
|
91 |
* |
|
64 | 92 |
* @see com.iver.cit.gvsig.fmap.edition.CommandRecord#delCommand(com.iver.cit.gvsig.fmap.edition.Command) |
65 | 93 |
*/ |
66 |
public boolean delCommand(Command command) {
|
|
67 |
commands.remove(command);
|
|
68 |
|
|
69 |
return true;
|
|
94 |
public void undoCommand() throws DriverIOException, IOException {
|
|
95 |
Command command = (Command) undos.pop();
|
|
96 |
command.undo(); |
|
97 |
redos.add(command);
|
|
70 | 98 |
} |
71 | 99 |
|
72 | 100 |
/** |
73 |
* @see com.iver.cit.gvsig.fmap.edition.CommandRecord#clear() |
|
101 |
* Realiza la operaci?n de rehacer el ?ltimo comando apilado y lo a?ade a |
|
102 |
* la pila deshacer. |
|
103 |
* |
|
104 |
* @throws DriverIOException |
|
105 |
* @throws IOException |
|
106 |
* |
|
107 |
* @see com.iver.cit.gvsig.fmap.edition.CommandRecord#redoCommand() |
|
74 | 108 |
*/ |
75 |
public boolean clear() {
|
|
76 |
commands.clear();
|
|
77 |
|
|
78 |
return true;
|
|
109 |
public void redoCommand() throws DriverIOException, IOException {
|
|
110 |
Command command = (Command) redos.pop();
|
|
111 |
command.redo(); |
|
112 |
undos.add(command);
|
|
79 | 113 |
} |
80 | 114 |
|
81 | 115 |
/** |
82 |
* @see com.iver.cit.gvsig.fmap.edition.CommandRecord#execute()
|
|
116 |
* @see com.iver.cit.gvsig.fmap.edition.CommandRecord#moreUndoCommands()
|
|
83 | 117 |
*/ |
84 |
public boolean execute() { |
|
85 |
for (int i = 0; i < commands.size(); i++) { |
|
86 |
((Command) commands.get(i)).execute(); |
|
87 |
} |
|
88 |
|
|
89 |
return true; |
|
118 |
public boolean moreUndoCommands() { |
|
119 |
return (!undos.isEmpty()); |
|
90 | 120 |
} |
91 | 121 |
|
92 | 122 |
/** |
93 |
* @see com.iver.cit.gvsig.fmap.edition.CommandRecord#start()
|
|
123 |
* @see com.iver.cit.gvsig.fmap.edition.CommandRecord#moreRedoCommands()
|
|
94 | 124 |
*/ |
95 |
public boolean start() {
|
|
96 |
return true;
|
|
125 |
public boolean moreRedoCommands() {
|
|
126 |
return (!redos.isEmpty());
|
|
97 | 127 |
} |
98 |
|
|
99 |
/** |
|
100 |
* @see com.iver.cit.gvsig.fmap.edition.CommandRecord#stop() |
|
101 |
*/ |
|
102 |
public boolean stop() { |
|
103 |
return true; |
|
104 |
} |
|
105 | 128 |
} |
Also available in: Unified diff