annotate dwtx/jface/text/TextViewerUndoManager.d @ 129:eb30df5ca28b

Added JFace Text sources
author Frank Benoit <benoit@tionex.de>
date Sat, 23 Aug 2008 19:10:48 +0200
parents
children c4fb132a086c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
129
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2006, 2008 IBM Corporation and others.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * Port to the D programming language:
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * Frank Benoit <benoit@tionex.de>
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14 module dwtx.jface.text.TextViewerUndoManager;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwt.dwthelper.utils;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.DWT;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.custom.StyledText;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.events.KeyEvent;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.events.KeyListener;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.events.MouseEvent;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.events.MouseListener;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwt.widgets.Display;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwt.widgets.Shell;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 import dwtx.core.commands.ExecutionException;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwtx.core.commands.operations.IUndoContext;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwtx.jface.dialogs.MessageDialog;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 import dwtx.text.undo.DocumentUndoEvent;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 import dwtx.text.undo.DocumentUndoManager;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 import dwtx.text.undo.DocumentUndoManagerRegistry;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 import dwtx.text.undo.IDocumentUndoListener;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 import dwtx.text.undo.IDocumentUndoManager;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 /**
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * Implementation of {@link dwtx.jface.text.IUndoManager} using the shared
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 * document undo manager.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 * <p>
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * It registers with the connected text viewer as text input listener, and obtains
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 * its undo manager from the current document. It also monitors mouse and keyboard
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 * activities in order to partition the stream of text changes into undo-able
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 * edit commands.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 * <p>
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 * This class is not intended to be subclassed.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 * </p>
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 *
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 * @see ITextViewer
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 * @see ITextInputListener
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 * @see IDocumentUndoManager
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 * @see MouseListener
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 * @see KeyListener
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 * @see DocumentUndoManager
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 *
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 * @since 3.2
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 * @noextend This class is not intended to be subclassed by clients.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 public class TextViewerUndoManager : IUndoManager, IUndoManagerExtension {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 /**
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 * Internal listener to mouse and key events.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 private class KeyAndMouseListener : MouseListener, KeyListener {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 * @see MouseListener#mouseDoubleClick
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 public void mouseDoubleClick(MouseEvent e) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 * If the right mouse button is pressed, the current editing command is closed
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 * @see MouseListener#mouseDown
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 public void mouseDown(MouseEvent e) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 if (e.button is 1)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 if (isConnected())
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 fDocumentUndoManager.commit();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 * @see MouseListener#mouseUp
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 public void mouseUp(MouseEvent e) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 * @see KeyListener#keyPressed
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 public void keyReleased(KeyEvent e) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 * On cursor keys, the current editing command is closed
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 * @see KeyListener#keyPressed
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 public void keyPressed(KeyEvent e) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 switch (e.keyCode) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 case DWT.ARROW_UP:
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 case DWT.ARROW_DOWN:
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 case DWT.ARROW_LEFT:
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 case DWT.ARROW_RIGHT:
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 if (isConnected()) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 fDocumentUndoManager.commit();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 break;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117 /**
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 * Internal text input listener.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 private class TextInputListener : ITextInputListener {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 * @see dwtx.jface.text.ITextInputListener#inputDocumentAboutToBeChanged(dwtx.jface.text.IDocument, dwtx.jface.text.IDocument)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125 public void inputDocumentAboutToBeChanged(IDocument oldInput, IDocument newInput) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 disconnectDocumentUndoManager();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 * @see dwtx.jface.text.ITextInputListener#inputDocumentChanged(dwtx.jface.text.IDocument, dwtx.jface.text.IDocument)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132 public void inputDocumentChanged(IDocument oldInput, IDocument newInput) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 connectDocumentUndoManager(newInput);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 /**
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139 * Internal document undo listener.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
140 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141 private class DocumentUndoListener : IDocumentUndoListener {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
142
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
144 * @see dwtx.jface.text.IDocumentUndoListener#documentUndoNotification(DocumentUndoEvent)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
146 public void documentUndoNotification(DocumentUndoEvent event ){
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147 if (!isConnected()) return;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
148
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
149 int eventType= event.getEventType();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
150 if (((eventType & DocumentUndoEvent.ABOUT_TO_UNDO) !is 0) || ((eventType & DocumentUndoEvent.ABOUT_TO_REDO) !is 0)) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151 if (event.isCompound()) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
152 ITextViewerExtension extension= null;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153 if (fTextViewer instanceof ITextViewerExtension)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
154 extension= (ITextViewerExtension) fTextViewer;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 if (extension !is null)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157 extension.setRedraw(false);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159 fTextViewer.getTextWidget().getDisplay().syncExec(new Runnable() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
160 public void run() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161 if (fTextViewer instanceof TextViewer)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
162 ((TextViewer)fTextViewer).ignoreAutoEditStrategies(true);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
164 });
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
166 } else if (((eventType & DocumentUndoEvent.UNDONE) !is 0) || ((eventType & DocumentUndoEvent.REDONE) !is 0)) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167 fTextViewer.getTextWidget().getDisplay().syncExec(new Runnable() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
168 public void run() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169 if (fTextViewer instanceof TextViewer)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
170 ((TextViewer)fTextViewer).ignoreAutoEditStrategies(false);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
172 });
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173 if (event.isCompound()) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
174 ITextViewerExtension extension= null;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
175 if (fTextViewer instanceof ITextViewerExtension)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176 extension= (ITextViewerExtension) fTextViewer;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
177
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178 if (extension !is null)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
179 extension.setRedraw(true);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
181
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182 // Reveal the change if this manager's viewer has the focus.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
183 if (fTextViewer !is null) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184 StyledText widget= fTextViewer.getTextWidget();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
185 if (widget !is null && !widget.isDisposed() && (widget.isFocusControl()))// || fTextViewer.getTextWidget() is control))
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186 selectAndReveal(event.getOffset(), event.getText() is null ? 0 : event.getText().length());
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
187 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
189 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
191 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
193 /** The internal key and mouse event listener */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
194 private KeyAndMouseListener fKeyAndMouseListener;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
195 /** The internal text input listener */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
196 private TextInputListener fTextInputListener;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
197
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
198
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199 /** The text viewer the undo manager is connected to */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
200 private ITextViewer fTextViewer;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
201
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
202 /** The undo level */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
203 private int fUndoLevel;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
204
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
205 /** The document undo manager that is active. */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206 private IDocumentUndoManager fDocumentUndoManager;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
207
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
208 /** The document that is active. */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
209 private IDocument fDocument;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
211 /** The document undo listener */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212 private IDocumentUndoListener fDocumentUndoListener;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
213
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214 /**
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
215 * Creates a new undo manager who remembers the specified number of edit commands.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216 *
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
217 * @param undoLevel the length of this manager's history
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
219 public TextViewerUndoManager(int undoLevel) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220 fUndoLevel= undoLevel;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
221 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
223 /**
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224 * Returns whether this undo manager is connected to a text viewer.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
225 *
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226 * @return <code>true</code> if connected, <code>false</code> otherwise
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
227 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228 private bool isConnected() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
229 return fTextViewer !is null && fDocumentUndoManager !is null;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
230 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
232 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233 * @see IUndoManager#beginCompoundChange
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
234 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235 public void beginCompoundChange() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 if (isConnected()) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237 fDocumentUndoManager.beginCompoundChange();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
240
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
241
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
242 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243 * @see IUndoManager#endCompoundChange
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
244 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245 public void endCompoundChange() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
246 if (isConnected()) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247 fDocumentUndoManager.endCompoundChange();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
248 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
250
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
251 /**
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252 * Registers all necessary listeners with the text viewer.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
253 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254 private void addListeners() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
255 StyledText text= fTextViewer.getTextWidget();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256 if (text !is null) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
257 fKeyAndMouseListener= new KeyAndMouseListener();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258 text.addMouseListener(fKeyAndMouseListener);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
259 text.addKeyListener(fKeyAndMouseListener);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260 fTextInputListener= new TextInputListener();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
261 fTextViewer.addTextInputListener(fTextInputListener);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
263 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
265 /**
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266 * Unregister all previously installed listeners from the text viewer.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
267 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
268 private void removeListeners() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
269 StyledText text= fTextViewer.getTextWidget();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
270 if (text !is null) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
271 if (fKeyAndMouseListener !is null) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272 text.removeMouseListener(fKeyAndMouseListener);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
273 text.removeKeyListener(fKeyAndMouseListener);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
274 fKeyAndMouseListener= null;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
275 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
276 if (fTextInputListener !is null) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
277 fTextViewer.removeTextInputListener(fTextInputListener);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
278 fTextInputListener= null;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
280 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
282
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
283 /**
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284 * Shows the given exception in an error dialog.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
285 *
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286 * @param title the dialog title
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
287 * @param ex the exception
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
288 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
289 private void openErrorDialog(final String title, final Exception ex) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290 Shell shell= null;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
291 if (isConnected()) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292 StyledText st= fTextViewer.getTextWidget();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
293 if (st !is null && !st.isDisposed())
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294 shell= st.getShell();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
295 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
296 if (Display.getCurrent() !is null)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
297 MessageDialog.openError(shell, title, ex.getLocalizedMessage());
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
298 else {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
299 Display display;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
300 final Shell finalShell= shell;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301 if (finalShell !is null)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
302 display= finalShell.getDisplay();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
303 else
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
304 display= Display.getDefault();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305 display.syncExec(new Runnable() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
306 public void run() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
307 MessageDialog.openError(finalShell, title, ex.getLocalizedMessage());
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
308 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309 });
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
310 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
312
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
314 * @see dwtx.jface.text.IUndoManager#setMaximalUndoLevel(int)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
316 public void setMaximalUndoLevel(int undoLevel) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
317 fUndoLevel= Math.max(0, undoLevel);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
318 if (isConnected()) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
319 fDocumentUndoManager.setMaximalUndoLevel(fUndoLevel);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
320 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
321 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
322
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
323 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324 * @see dwtx.jface.text.IUndoManager#connect(dwtx.jface.text.ITextViewer)
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
325 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326 public void connect(ITextViewer textViewer) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 if (fTextViewer is null && textViewer !is null) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328 fTextViewer= textViewer;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 addListeners();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
331 IDocument doc= fTextViewer.getDocument();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332 connectDocumentUndoManager(doc);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336 * @see dwtx.jface.text.IUndoManager#disconnect()
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
337 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338 public void disconnect() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
339 if (fTextViewer !is null) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
340 removeListeners();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341 fTextViewer= null;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
342 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
343 disconnectDocumentUndoManager();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
344 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
346 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
347 * @see dwtx.jface.text.IUndoManager#reset()
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
348 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
349 public void reset() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350 if (isConnected())
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
351 fDocumentUndoManager.reset();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
352
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
353 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
355 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
356 * @see dwtx.jface.text.IUndoManager#redoable()
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
358 public bool redoable() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359 if (isConnected())
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
360 return fDocumentUndoManager.redoable();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361 return false;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
362 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
364 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365 * @see dwtx.jface.text.IUndoManager#undoable()
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
366 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367 public bool undoable() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 if (isConnected())
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369 return fDocumentUndoManager.undoable();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 return false;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
371 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
372
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
373 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
374 * @see dwtx.jface.text.IUndoManager#redo()
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
375 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
376 public void redo() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
377 if (isConnected()) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
378 try {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
379 fDocumentUndoManager.redo();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
380 } catch (ExecutionException ex) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
381 openErrorDialog(JFaceTextMessages.getString("DefaultUndoManager.error.redoFailed.title"), ex); //$NON-NLS-1$
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
382 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
383 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
384 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
385
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
386 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
387 * @see dwtx.jface.text.IUndoManager#undo()
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
388 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
389 public void undo() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
390 if (isConnected()) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
391 try {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
392 fDocumentUndoManager.undo();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
393 } catch (ExecutionException ex) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
394 openErrorDialog(JFaceTextMessages.getString("DefaultUndoManager.error.undoFailed.title"), ex); //$NON-NLS-1$
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
395 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
396 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
397 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
398
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
399 /**
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
400 * Selects and reveals the specified range.
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
401 *
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
402 * @param offset the offset of the range
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
403 * @param length the length of the range
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
404 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
405 private void selectAndReveal(int offset, int length) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
406 if (fTextViewer instanceof ITextViewerExtension5) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
407 ITextViewerExtension5 extension= (ITextViewerExtension5) fTextViewer;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
408 extension.exposeModelRange(new Region(offset, length));
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
409 } else if (!fTextViewer.overlapsWithVisibleRegion(offset, length))
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
410 fTextViewer.resetVisibleRegion();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
411
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
412 fTextViewer.setSelectedRange(offset, length);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
413 fTextViewer.revealRange(offset, length);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
414 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
415
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
416 /*
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
417 * @see dwtx.jface.text.IUndoManagerExtension#getUndoContext()
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
418 */
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
419 public IUndoContext getUndoContext() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
420 if (isConnected()) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
421 return fDocumentUndoManager.getUndoContext();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
422 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
423 return null;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
424 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
425
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
426 private void connectDocumentUndoManager(IDocument document) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
427 disconnectDocumentUndoManager();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
428 if (document !is null) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
429 fDocument= document;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
430 DocumentUndoManagerRegistry.connect(fDocument);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
431 fDocumentUndoManager= DocumentUndoManagerRegistry.getDocumentUndoManager(fDocument);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
432 fDocumentUndoManager.connect(this);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
433 setMaximalUndoLevel(fUndoLevel);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
434 fDocumentUndoListener= new DocumentUndoListener();
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
435 fDocumentUndoManager.addDocumentUndoListener(fDocumentUndoListener);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
436 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
437 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
438
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
439 private void disconnectDocumentUndoManager() {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
440 if (fDocumentUndoManager !is null) {
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
441 fDocumentUndoManager.disconnect(this);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
442 DocumentUndoManagerRegistry.disconnect(fDocument);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
443 fDocumentUndoManager.removeDocumentUndoListener(fDocumentUndoListener);
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
444 fDocumentUndoListener= null;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
445 fDocumentUndoManager= null;
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
446 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
447 }
eb30df5ca28b Added JFace Text sources
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
448 }