Lines 15-21
import java.io.InputStream;
Link Here
|
15 |
import java.util.HashMap; |
15 |
import java.util.HashMap; |
16 |
import java.util.Iterator; |
16 |
import java.util.Iterator; |
17 |
import java.util.Map; |
17 |
import java.util.Map; |
|
|
18 |
import java.util.StringTokenizer; |
18 |
|
19 |
|
|
|
20 |
import org.eclipse.compare.CompareConfiguration; |
21 |
import org.eclipse.compare.IEncodedStreamContentAccessor; |
22 |
import org.eclipse.compare.ITypedElement; |
23 |
import org.eclipse.compare.contentmergeviewer.TextMergeViewer; |
24 |
import org.eclipse.compare.internal.core.ComparePlugin; |
25 |
import org.eclipse.compare.structuremergeviewer.DiffNode; |
26 |
import org.eclipse.compare.structuremergeviewer.Differencer; |
27 |
import org.eclipse.jface.dialogs.Dialog; |
28 |
import org.eclipse.jface.dialogs.InputDialog; |
29 |
import org.eclipse.jface.dialogs.MessageDialog; |
30 |
import org.eclipse.jface.preference.IPreferenceStore; |
31 |
import org.eclipse.jface.preference.PreferencePage; |
32 |
import org.eclipse.jface.preference.RadioGroupFieldEditor; |
33 |
import org.eclipse.jface.util.IPropertyChangeListener; |
34 |
import org.eclipse.jface.util.PropertyChangeEvent; |
35 |
import org.eclipse.jface.window.Window; |
19 |
import org.eclipse.swt.SWT; |
36 |
import org.eclipse.swt.SWT; |
20 |
import org.eclipse.swt.events.DisposeEvent; |
37 |
import org.eclipse.swt.events.DisposeEvent; |
21 |
import org.eclipse.swt.events.DisposeListener; |
38 |
import org.eclipse.swt.events.DisposeListener; |
Lines 30-61
import org.eclipse.swt.layout.GridLayout;
Link Here
|
30 |
import org.eclipse.swt.widgets.Button; |
47 |
import org.eclipse.swt.widgets.Button; |
31 |
import org.eclipse.swt.widgets.Composite; |
48 |
import org.eclipse.swt.widgets.Composite; |
32 |
import org.eclipse.swt.widgets.Control; |
49 |
import org.eclipse.swt.widgets.Control; |
|
|
50 |
import org.eclipse.swt.widgets.Event; |
33 |
import org.eclipse.swt.widgets.Label; |
51 |
import org.eclipse.swt.widgets.Label; |
|
|
52 |
import org.eclipse.swt.widgets.Listener; |
34 |
import org.eclipse.swt.widgets.TabFolder; |
53 |
import org.eclipse.swt.widgets.TabFolder; |
35 |
import org.eclipse.swt.widgets.TabItem; |
54 |
import org.eclipse.swt.widgets.TabItem; |
|
|
55 |
import org.eclipse.swt.widgets.Table; |
56 |
import org.eclipse.swt.widgets.TableItem; |
36 |
import org.eclipse.swt.widgets.Text; |
57 |
import org.eclipse.swt.widgets.Text; |
37 |
|
|
|
38 |
import org.eclipse.jface.dialogs.Dialog; |
39 |
import org.eclipse.jface.preference.IPreferenceStore; |
40 |
import org.eclipse.jface.preference.PreferencePage; |
41 |
import org.eclipse.jface.preference.RadioGroupFieldEditor; |
42 |
import org.eclipse.jface.util.IPropertyChangeListener; |
43 |
import org.eclipse.jface.util.PropertyChangeEvent; |
44 |
|
45 |
import org.eclipse.ui.IWorkbench; |
58 |
import org.eclipse.ui.IWorkbench; |
46 |
import org.eclipse.ui.IWorkbenchPreferencePage; |
59 |
import org.eclipse.ui.IWorkbenchPreferencePage; |
47 |
import org.eclipse.ui.PlatformUI; |
60 |
import org.eclipse.ui.PlatformUI; |
48 |
import org.eclipse.ui.dialogs.PreferenceLinkArea; |
61 |
import org.eclipse.ui.dialogs.PreferenceLinkArea; |
49 |
import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; |
62 |
import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; |
50 |
|
63 |
|
51 |
import org.eclipse.compare.CompareConfiguration; |
|
|
52 |
import org.eclipse.compare.IEncodedStreamContentAccessor; |
53 |
import org.eclipse.compare.ITypedElement; |
54 |
import org.eclipse.compare.contentmergeviewer.TextMergeViewer; |
55 |
import org.eclipse.compare.internal.core.ComparePlugin; |
56 |
import org.eclipse.compare.structuremergeviewer.DiffNode; |
57 |
import org.eclipse.compare.structuremergeviewer.Differencer; |
58 |
|
59 |
|
64 |
|
60 |
public class ComparePreferencePage extends PreferencePage implements IWorkbenchPreferencePage { |
65 |
public class ComparePreferencePage extends PreferencePage implements IWorkbenchPreferencePage { |
61 |
|
66 |
|
Lines 101-106
public class ComparePreferencePage extends PreferencePage implements IWorkbenchP
Link Here
|
101 |
public static final String ADDED_LINES_REGEX= PREFIX + "AddedLinesRegex"; //$NON-NLS-1$ |
106 |
public static final String ADDED_LINES_REGEX= PREFIX + "AddedLinesRegex"; //$NON-NLS-1$ |
102 |
public static final String REMOVED_LINES_REGEX= PREFIX + "RemovedLinesRegex"; //$NON-NLS-1$ |
107 |
public static final String REMOVED_LINES_REGEX= PREFIX + "RemovedLinesRegex"; //$NON-NLS-1$ |
103 |
|
108 |
|
|
|
109 |
public static final String IGNORES_REGEXP= PREFIX + "IgnorePatterns"; |
110 |
private static final String IGNORES_REGEXP_DELIMITER = ">#<"; |
104 |
|
111 |
|
105 |
private TextMergeViewer fPreviewViewer; |
112 |
private TextMergeViewer fPreviewViewer; |
106 |
private IPropertyChangeListener fPreferenceChangeListener; |
113 |
private IPropertyChangeListener fPreferenceChangeListener; |
Lines 131-138
public class ComparePreferencePage extends PreferencePage implements IWorkbenchP
Link Here
|
131 |
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, PATH_FILTER), |
138 |
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, PATH_FILTER), |
132 |
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICompareUIConstants.PREF_NAVIGATION_END_ACTION), |
139 |
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICompareUIConstants.PREF_NAVIGATION_END_ACTION), |
133 |
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICompareUIConstants.PREF_NAVIGATION_END_ACTION_LOCAL), |
140 |
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, ICompareUIConstants.PREF_NAVIGATION_END_ACTION_LOCAL), |
|
|
141 |
new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, IGNORES_REGEXP), |
134 |
}; |
142 |
}; |
135 |
private RadioGroupFieldEditor editor; |
143 |
private RadioGroupFieldEditor editor; |
|
|
144 |
private Table ignoreTable; |
136 |
|
145 |
|
137 |
|
146 |
|
138 |
public static void initDefaults(IPreferenceStore store) { |
147 |
public static void initDefaults(IPreferenceStore store) { |
Lines 153-158
public class ComparePreferencePage extends PreferencePage implements IWorkbenchP
Link Here
|
153 |
store.setDefault(PATH_FILTER, ""); //$NON-NLS-1$ |
162 |
store.setDefault(PATH_FILTER, ""); //$NON-NLS-1$ |
154 |
store.setDefault(ICompareUIConstants.PREF_NAVIGATION_END_ACTION, ICompareUIConstants.PREF_VALUE_PROMPT); |
163 |
store.setDefault(ICompareUIConstants.PREF_NAVIGATION_END_ACTION, ICompareUIConstants.PREF_VALUE_PROMPT); |
155 |
store.setDefault(ICompareUIConstants.PREF_NAVIGATION_END_ACTION_LOCAL, ICompareUIConstants.PREF_VALUE_LOOP); |
164 |
store.setDefault(ICompareUIConstants.PREF_NAVIGATION_END_ACTION_LOCAL, ICompareUIConstants.PREF_VALUE_LOOP); |
|
|
165 |
|
166 |
store.setDefault( |
167 |
IGNORES_REGEXP, |
168 |
".*\\$Id:.*" + IGNORES_REGEXP_DELIMITER |
169 |
+ "^import.*" + IGNORES_REGEXP_DELIMITER |
170 |
+ "^\\s*$"); |
156 |
} |
171 |
} |
157 |
|
172 |
|
158 |
public ComparePreferencePage() { |
173 |
public ComparePreferencePage() { |
Lines 189-194
public class ComparePreferencePage extends PreferencePage implements IWorkbenchP
Link Here
|
189 |
public boolean performOk() { |
204 |
public boolean performOk() { |
190 |
fOverlayStore.setValue(ADDED_LINES_REGEX, addedLinesRegex.getText()); |
205 |
fOverlayStore.setValue(ADDED_LINES_REGEX, addedLinesRegex.getText()); |
191 |
fOverlayStore.setValue(REMOVED_LINES_REGEX, removedLinesRegex.getText()); |
206 |
fOverlayStore.setValue(REMOVED_LINES_REGEX, removedLinesRegex.getText()); |
|
|
207 |
|
208 |
// store ignore list |
209 |
TableItem[] items = ignoreTable.getItems(); |
210 |
String[] elements = new String[items.length]; |
211 |
for (int ti = 0; ti < items.length; ti++) { |
212 |
elements[ti] = items[ti].getText(); |
213 |
} |
214 |
storeIgnoreRegexpPreferences(elements); |
192 |
|
215 |
|
193 |
editor.store(); |
216 |
editor.store(); |
194 |
fOverlayStore.propagate(); |
217 |
fOverlayStore.propagate(); |
Lines 261-266
public class ComparePreferencePage extends PreferencePage implements IWorkbenchP
Link Here
|
261 |
//item.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_CFILE)); |
284 |
//item.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_CFILE)); |
262 |
item.setControl(createTextComparePage(folder)); |
285 |
item.setControl(createTextComparePage(folder)); |
263 |
|
286 |
|
|
|
287 |
item= new TabItem(folder, SWT.NONE); |
288 |
item.setText(Utilities.getString("ComparePreferencePage.filteredCompareTab.label")); //$NON-NLS-1$ |
289 |
//item.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_CFILE)); |
290 |
item.setControl(createFilteredComparePage(folder)); |
291 |
|
264 |
initializeFields(); |
292 |
initializeFields(); |
265 |
Dialog.applyDialogFont(folder); |
293 |
Dialog.applyDialogFont(folder); |
266 |
return folder; |
294 |
return folder; |
Lines 423-428
public class ComparePreferencePage extends PreferencePage implements IWorkbenchP
Link Here
|
423 |
|
451 |
|
424 |
return c; |
452 |
return c; |
425 |
} |
453 |
} |
|
|
454 |
|
455 |
private Control createFilteredComparePage(TabFolder folder) { |
456 |
Composite pageComponent= new Composite(folder, SWT.NULL); |
457 |
GridLayout layout= new GridLayout(); |
458 |
layout.numColumns = 2; |
459 |
pageComponent.setLayout(layout); |
460 |
GridData data = new GridData(); |
461 |
data.verticalAlignment = GridData.FILL; |
462 |
data.horizontalAlignment = GridData.FILL; |
463 |
pageComponent.setLayoutData(data); |
464 |
|
465 |
// layout the ignore table & its buttons |
466 |
Label ignoreLabel = new Label(pageComponent, SWT.LEFT); |
467 |
ignoreLabel.setText(Utilities.getString("ComparePreferencePage.filteredCompareTab.text")); |
468 |
data = new GridData(); |
469 |
data.horizontalAlignment = GridData.FILL; |
470 |
data.horizontalSpan = 2; |
471 |
ignoreLabel.setLayoutData(data); |
472 |
|
473 |
ignoreTable = new Table(pageComponent, SWT.MULTI | SWT.BORDER); |
474 |
data = new GridData(GridData.FILL_BOTH); |
475 |
data.heightHint = ignoreTable.getItemHeight() * 7; |
476 |
ignoreTable.setLayoutData(data); |
477 |
|
478 |
Composite groupComponent = new Composite(pageComponent, SWT.NULL); |
479 |
GridLayout groupLayout = new GridLayout(); |
480 |
groupLayout.marginWidth = 0; |
481 |
groupLayout.marginHeight = 0; |
482 |
groupComponent.setLayout(groupLayout); |
483 |
data = new GridData(); |
484 |
data.verticalAlignment = GridData.FILL; |
485 |
data.horizontalAlignment = GridData.FILL; |
486 |
groupComponent.setLayoutData(data); |
487 |
|
488 |
Button addIgnoreButton = new Button(groupComponent, SWT.PUSH); |
489 |
addIgnoreButton.setText(Utilities.getString("ComparePreferencePage.filteredCompareTab.addExpression")); |
490 |
addIgnoreButton.setLayoutData(data); |
491 |
setButtonLayoutData(addIgnoreButton); |
492 |
|
493 |
final Button removeIgnoreButton = new Button(groupComponent, SWT.PUSH); |
494 |
removeIgnoreButton.setText(Utilities.getString("ComparePreferencePage.filteredCompareTab.removeExpression")); |
495 |
setButtonLayoutData(removeIgnoreButton); |
496 |
|
497 |
// the listeners |
498 |
ignoreTable.addListener(SWT.Selection, new Listener() { |
499 |
public void handleEvent(Event event) { |
500 |
if (ignoreTable.getSelectionCount() > 0) { |
501 |
removeIgnoreButton.setEnabled(true); |
502 |
} else { |
503 |
removeIgnoreButton.setEnabled(false); |
504 |
} |
505 |
} |
506 |
}); |
507 |
addIgnoreButton.addListener(SWT.Selection, new Listener() { |
508 |
public void handleEvent(Event event) { |
509 |
InputDialog dialog = new InputDialog( |
510 |
getShell(), |
511 |
Utilities.getString("ComparePreferencePage.filteredCompareTab.addExpression.dialog.title"), |
512 |
Utilities.getString("ComparePreferencePage.filteredCompareTab.addExpression.dialog.message"), |
513 |
Utilities.getString("ComparePreferencePage.filteredCompareTab.addExpression.dialog.initialValue"), |
514 |
new RegexpInputValidator()); |
515 |
if (dialog.open() == Window.OK) { |
516 |
String value = dialog.getValue(); |
517 |
addIgnoreRegexp(value); |
518 |
} |
519 |
} |
520 |
}); |
521 |
removeIgnoreButton.addListener(SWT.Selection, new Listener() { |
522 |
public void handleEvent(Event event) { |
523 |
int[] selection = ignoreTable.getSelectionIndices(); |
524 |
ignoreTable.remove(selection); |
525 |
} |
526 |
}); |
527 |
|
528 |
removeIgnoreButton.setEnabled(false); |
529 |
return pageComponent; |
530 |
} |
531 |
|
532 |
private void addIgnoreRegexp(String value) { |
533 |
// Check if the item already exists |
534 |
TableItem[] items = ignoreTable.getItems(); |
535 |
for (int i = 0; i < items.length; i++) { |
536 |
if (items[i].getText().equals(value)) { |
537 |
MessageDialog.openWarning( |
538 |
getShell(), |
539 |
Utilities.getString("ComparePreferencePage.filteredCompareTab.addExpression.dialog.valueAlreadyExists.title"), |
540 |
Utilities.getString("ComparePreferencePage.filteredCompareTab.addExpression.dialog.valueAlreadyExists.message")); |
541 |
return; |
542 |
} |
543 |
} |
544 |
TableItem item = new TableItem(ignoreTable, SWT.NONE); |
545 |
item.setText(value); |
546 |
} |
426 |
|
547 |
|
427 |
private void initializeFields() { |
548 |
private void initializeFields() { |
428 |
|
549 |
|
Lines 441-447
public class ComparePreferencePage extends PreferencePage implements IWorkbenchP
Link Here
|
441 |
removedLinesRegex.setText(fOverlayStore.getString(REMOVED_LINES_REGEX)); |
562 |
removedLinesRegex.setText(fOverlayStore.getString(REMOVED_LINES_REGEX)); |
442 |
|
563 |
|
443 |
editor.load(); |
564 |
editor.load(); |
|
|
565 |
|
566 |
fillIgnoreTable(); |
444 |
} |
567 |
} |
|
|
568 |
|
569 |
private void fillIgnoreTable() { |
570 |
ignoreTable.removeAll(); |
571 |
String[] ignoresPreference = getIgnoreRegexpPreference(); |
572 |
for (int i = 0; i < ignoresPreference.length; i++) { |
573 |
TableItem item = new TableItem(ignoreTable, SWT.NULL); |
574 |
item.setText(ignoresPreference[i]); |
575 |
} |
576 |
} |
445 |
|
577 |
|
446 |
// overlay stuff |
578 |
// overlay stuff |
447 |
|
579 |
|
Lines 486-489
public class ComparePreferencePage extends PreferencePage implements IWorkbenchP
Link Here
|
486 |
} |
618 |
} |
487 |
return buffer.toString(); |
619 |
return buffer.toString(); |
488 |
} |
620 |
} |
|
|
621 |
|
622 |
/* |
623 |
* stores a list of ignore patterns. |
624 |
*/ |
625 |
public void storeIgnoreRegexpPreferences(String[] elements) { |
626 |
StringBuffer buffer = new StringBuffer(); |
627 |
for (int i = 0; i < elements.length; i++) { |
628 |
buffer.append(elements[i]); |
629 |
buffer.append(IGNORES_REGEXP_DELIMITER); |
630 |
} |
631 |
fOverlayStore.setValue(IGNORES_REGEXP, buffer.toString()); |
632 |
} |
633 |
|
634 |
/* |
635 |
* loads the list of ignore patterns. |
636 |
*/ |
637 |
private String[] getIgnoreRegexpPreference() { |
638 |
return convertListOfIgnoreRegexp(fOverlayStore.getString(IGNORES_REGEXP)); |
639 |
} |
640 |
|
641 |
/* |
642 |
* converts the list of ignore regexp to and from values in preference store. |
643 |
*/ |
644 |
public static String[] convertListOfIgnoreRegexp(String preferenceValue) { |
645 |
StringTokenizer tokenizer = new StringTokenizer(preferenceValue, IGNORES_REGEXP_DELIMITER); |
646 |
int tokenCount = tokenizer.countTokens(); |
647 |
String[] elements = new String[tokenCount]; |
648 |
for (int i = 0; i < tokenCount; i++) { |
649 |
elements[i] = tokenizer.nextToken(); |
650 |
} |
651 |
return elements; |
652 |
} |
489 |
} |
653 |
} |