KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > armedbear > j > ConfirmReplacementDialog


1 /*
2  * ConfirmReplacementDialog.java
3  *
4  * Copyright (C) 1998-2003 Peter Graves
5  * $Id: ConfirmReplacementDialog.java,v 1.4 2003/10/13 23:53:47 piso Exp $
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  */

21
22 package org.armedbear.j;
23
24 import java.awt.Dimension JavaDoc;
25 import java.awt.Point JavaDoc;
26 import java.awt.Rectangle JavaDoc;
27 import java.awt.event.ActionEvent JavaDoc;
28 import java.awt.event.KeyEvent JavaDoc;
29 import javax.swing.JPanel JavaDoc;
30
31 public final class ConfirmReplacementDialog extends AbstractDialog
32 {
33     private static Rectangle JavaDoc rect;
34
35     private Editor editor;
36     private Replacement replacement;
37     private boolean inFiles;
38
39     public ConfirmReplacementDialog(Replacement replacement, boolean inFiles)
40     {
41         super(Editor.currentEditor(), "Confirm Replacement", true);
42         this.replacement = replacement;
43         editor = replacement.getEditor();
44         this.inFiles = inFiles;
45         JPanel JavaDoc textPanel = new JPanel JavaDoc();
46         textPanel.setAlignmentX(LEFT_ALIGNMENT);
47         textPanel.add(new Label("Replace this occurrence?"));
48         mainPanel.add(textPanel);
49         JPanel JavaDoc buttonBox = new JPanel JavaDoc();
50         buttonBox.setAlignmentX(LEFT_ALIGNMENT);
51         buttonBox.add(createButton("Yes", 'Y'));
52         buttonBox.add(createButton("No", 'N'));
53         buttonBox.add(createButton("Cancel", 'C'));
54         if (inFiles)
55             buttonBox.add(createButton("Skip File", 'S'));
56         buttonBox.add(createButton("Replace All", 'R'));
57         mainPanel.add(buttonBox);
58         getContentPane().add(mainPanel);
59         pack();
60         if (rect != null)
61             setBounds(rect);
62         else {
63             // Center dialog at top of editor window.
64
Dimension JavaDoc dimParent = editor.getFrame().getSize();
65             Dimension JavaDoc dimDialog = getSize();
66             Point JavaDoc p = editor.getFrame().getLocation();
67             p.translate((dimParent.width - dimDialog.width) / 2, 0);
68             setLocation(p);
69         }
70     }
71
72     private StandardButton createButton(String JavaDoc text, char mnemonic)
73     {
74         StandardButton button = new StandardButton(text);
75         button.setMnemonic(mnemonic);
76         button.addActionListener(this);
77         button.addKeyListener(this);
78         return button;
79     }
80
81     protected void enter()
82     {
83         yes();
84     }
85
86     private void yes()
87     {
88         replacement.replaceOccurrence();
89         replacement.getEditor().updateDisplay();
90         Position pos = replacement.find(editor.getBuffer(), editor.getDot());
91         if (pos == null) {
92             dispose();
93             return;
94         }
95         if (replacement.restrictToSelection()) {
96             final Region region = replacement.getRegion();
97             if (region != null) {
98                 if (pos.lineNumber() > region.getEndLineNumber() ||
99                     (pos.getLine() == region.getEndLine() &&
100                         pos.getOffset() + replacement.getPatternLength() > region.getEndOffset())) {
101                     dispose();
102                     return;
103                 }
104             }
105         }
106         editor.moveDotTo(pos);
107         editor.markFoundPattern(replacement);
108         editor.updateDisplay();
109     }
110
111     private void no()
112     {
113         Position start = new Position(editor.getDot());
114         if (!start.next()) {
115             dispose();
116             return;
117         }
118         Position pos = replacement.find(editor.getBuffer(), start);
119         if (pos == null) {
120             dispose();
121             return;
122         }
123         if (replacement.restrictToSelection()) {
124             final Region region = replacement.getRegion();
125             if (region != null) {
126                 if (pos.lineNumber() > region.getEndLineNumber() ||
127                     (pos.getLine() == region.getEndLine() &&
128                         pos.getOffset() + replacement.getPatternLength() > region.getEndOffset())) {
129                     dispose();
130                     return;
131                 }
132             }
133         }
134         editor.moveDotTo(pos);
135         editor.markFoundPattern(replacement);
136         editor.updateDisplay();
137     }
138
139     private void skipFile()
140     {
141         dispose();
142     }
143
144     private void replaceAll()
145     {
146         Position saved = new Position(editor.getDot());
147         // Replace current occurrence.
148
replacement.replaceOccurrence();
149         // Replace all the rest.
150
Position pos;
151         while ((pos = replacement.find(editor.getBuffer(), editor.getDot())) != null) {
152             editor.addUndo(SimpleEdit.MOVE);
153             editor.getDot().moveTo(pos);
154             if (replacement.restrictToSelection()) {
155                 final Region region = replacement.getRegion();
156                 if (region != null) {
157                     if (editor.getDotLineNumber() > region.getEndLineNumber() ||
158                         (editor.getDotLine() == region.getEndLine() &&
159                             editor.getDotOffset() + replacement.getPatternLength() > region.getEndOffset())) {
160                         break;
161                     }
162                 }
163             }
164             if (replacement.isMultilinePattern())
165                 editor.markFoundPattern(replacement);
166             replacement.replaceOccurrence();
167         }
168         editor.addUndo(SimpleEdit.MOVE);
169         editor.getDot().moveTo(saved);
170         editor.moveCaretToDotCol();
171         editor.updateDisplay();
172         dispose();
173         if (inFiles)
174             replacement.setConfirmChanges(false);
175     }
176
177     public void actionPerformed(ActionEvent JavaDoc e)
178     {
179         if (e.getActionCommand().equals("Yes")) {
180             yes();
181             return;
182         }
183         if (e.getActionCommand().equals("No")) {
184             no();
185             return;
186         }
187         if (e.getActionCommand().equals("Cancel")) {
188             cancel();
189             return;
190         }
191         if (e.getActionCommand().equals("Skip File")) {
192             skipFile();
193             return;
194         }
195         if (e.getActionCommand().equals("Replace All")) {
196             replaceAll();
197             return;
198         }
199     }
200
201     public void keyPressed(KeyEvent JavaDoc e)
202     {
203         if (e.isConsumed())
204             return;
205         // Mask off the bits we don't care about (Java 1.4).
206
final int modifiers = e.getModifiers() & 0x0f;
207         if (modifiers == 0) {
208             int keyCode = e.getKeyCode();
209             switch (keyCode) {
210                 case KeyEvent.VK_Y:
211                     e.consume();
212                     yes();
213                     return;
214                 case KeyEvent.VK_N:
215                     e.consume();
216                     no();
217                     return;
218                 case KeyEvent.VK_C:
219                     e.consume();
220                     cancel();
221                     return;
222                 case KeyEvent.VK_S:
223                     e.consume();
224                     if (inFiles) {
225                         skipFile();
226                         return;
227                     }
228                     break;
229                 case KeyEvent.VK_R:
230                     e.consume();
231                     replaceAll();
232                     return;
233             }
234         }
235         super.keyPressed(e);
236     }
237
238     public void dispose()
239     {
240         rect = getBounds();
241         super.dispose();
242     }
243 }
244
Popular Tags