99 public StateEdit(StateEditable anObject) {
100 super();
101 init (anObject,null);
102 }
103
104 /**
105 * Create and return a new StateEdit with a presentation name.
106 *
107 * @param anObject The object to watch for changing state
108 * @param name The presentation name to be used for this edit
109 *
110 * @see StateEdit
111 */
112 public StateEdit(StateEditable anObject, String name) {
113 super();
114 init (anObject,name);
115 }
116
117 protected void init (StateEditable anObject, String name) {
118 this.object = anObject;
119 this.preState = new Hashtable(11);
120 this.object.storeState(this.preState);
121 this.postState = null;
122 this.undoRedoName = name;
123 }
124
125
126 //
127 // Operation
128 //
129
130
131 /**
132 * Gets the post-edit state of the StateEditable object and
133 * ends the edit.
134 */
135 public void end() {
136 this.postState = new Hashtable(11);
137 this.object.storeState(this.postState);
138 this.removeRedundantState();
139 }
140
141 /**
142 * Tells the edited object to apply the state prior to the edit
143 */
144 public void undo() {
145 super.undo();
146 this.object.restoreState(preState);
147 }
148
149 /**
150 * Tells the edited object to apply the state after the edit
151 */
152 public void redo() {
153 super.redo();
154 this.object.restoreState(postState);
155 }
156
157 /**
158 * Gets the presentation name for this edit
159 */
160 public String getPresentationName() {
161 return this.undoRedoName;
162 }
163
164
165 //
166 // Internal support
167 //
168
169 /**
170 * Remove redundant key/values in state hashtables.
171 */
172 protected void removeRedundantState() {
173 Vector uselessKeys = new Vector();
174 Enumeration myKeys = preState.keys();
175
176 // Locate redundant state
177 while (myKeys.hasMoreElements()) {
178 Object myKey = myKeys.nextElement();
179 if (postState.containsKey(myKey) &&
180 postState.get(myKey).equals(preState.get(myKey))) {
181 uselessKeys.addElement(myKey);
182 }
183 }
184
185 // Remove redundant state
186 for (int i = uselessKeys.size()-1; i >= 0; i--) {
187 Object myKey = uselessKeys.elementAt(i);
188 preState.remove(myKey);
189 postState.remove(myKey);
190 }
191 }
192
193 } // End of class StateEdit
|
99 public StateEdit(StateEditable anObject) {
100 super();
101 init (anObject,null);
102 }
103
104 /**
105 * Create and return a new StateEdit with a presentation name.
106 *
107 * @param anObject The object to watch for changing state
108 * @param name The presentation name to be used for this edit
109 *
110 * @see StateEdit
111 */
112 public StateEdit(StateEditable anObject, String name) {
113 super();
114 init (anObject,name);
115 }
116
117 protected void init (StateEditable anObject, String name) {
118 this.object = anObject;
119 this.preState = new Hashtable<Object, Object>(11);
120 this.object.storeState(this.preState);
121 this.postState = null;
122 this.undoRedoName = name;
123 }
124
125
126 //
127 // Operation
128 //
129
130
131 /**
132 * Gets the post-edit state of the StateEditable object and
133 * ends the edit.
134 */
135 public void end() {
136 this.postState = new Hashtable<Object, Object>(11);
137 this.object.storeState(this.postState);
138 this.removeRedundantState();
139 }
140
141 /**
142 * Tells the edited object to apply the state prior to the edit
143 */
144 public void undo() {
145 super.undo();
146 this.object.restoreState(preState);
147 }
148
149 /**
150 * Tells the edited object to apply the state after the edit
151 */
152 public void redo() {
153 super.redo();
154 this.object.restoreState(postState);
155 }
156
157 /**
158 * Gets the presentation name for this edit
159 */
160 public String getPresentationName() {
161 return this.undoRedoName;
162 }
163
164
165 //
166 // Internal support
167 //
168
169 /**
170 * Remove redundant key/values in state hashtables.
171 */
172 protected void removeRedundantState() {
173 Vector<Object> uselessKeys = new Vector<Object>();
174 Enumeration myKeys = preState.keys();
175
176 // Locate redundant state
177 while (myKeys.hasMoreElements()) {
178 Object myKey = myKeys.nextElement();
179 if (postState.containsKey(myKey) &&
180 postState.get(myKey).equals(preState.get(myKey))) {
181 uselessKeys.addElement(myKey);
182 }
183 }
184
185 // Remove redundant state
186 for (int i = uselessKeys.size()-1; i >= 0; i--) {
187 Object myKey = uselessKeys.elementAt(i);
188 preState.remove(myKey);
189 postState.remove(myKey);
190 }
191 }
192
193 } // End of class StateEdit
|