1 21 22 package org.armedbear.j; 23 24 import java.awt.Dimension ; 25 import java.awt.Point ; 26 import java.awt.Rectangle ; 27 import java.awt.event.ActionEvent ; 28 import java.awt.event.KeyEvent ; 29 import javax.swing.JPanel ; 30 31 public final class ConfirmReplacementDialog extends AbstractDialog 32 { 33 private static Rectangle 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 textPanel = new JPanel (); 46 textPanel.setAlignmentX(LEFT_ALIGNMENT); 47 textPanel.add(new Label("Replace this occurrence?")); 48 mainPanel.add(textPanel); 49 JPanel buttonBox = new JPanel (); 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 Dimension dimParent = editor.getFrame().getSize(); 65 Dimension dimDialog = getSize(); 66 Point p = editor.getFrame().getLocation(); 67 p.translate((dimParent.width - dimDialog.width) / 2, 0); 68 setLocation(p); 69 } 70 } 71 72 private StandardButton createButton(String 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 replacement.replaceOccurrence(); 149 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 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 e) 202 { 203 if (e.isConsumed()) 204 return; 205 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 |