5
// Michael Hutchinson <mhutchinson@novell.com>
7
// Copyright (C) 2008 Novell, Inc (http://www.novell.com)
9
// Permission is hereby granted, free of charge, to any person obtaining
10
// a copy of this software and associated documentation files (the
11
// "Software"), to deal in the Software without restriction, including
12
// without limitation the rights to use, copy, modify, merge, publish,
13
// distribute, sublicense, and/or sell copies of the Software, and to
14
// permit persons to whom the Software is furnished to do so, subject to
15
// the following conditions:
17
// The above copyright notice and this permission notice shall be
18
// included in all copies or substantial portions of the Software.
20
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30
using System.Collections.Generic;
32
namespace Mono.TextEditor
36
public class SimpleEditMode : EditMode
38
Dictionary<int, Action<TextEditorData>> keyBindings = new Dictionary<int, Action<TextEditorData>> ();
39
public Dictionary<int, Action<TextEditorData>> KeyBindings { get { return keyBindings; } }
41
public SimpleEditMode ()
43
Action<TextEditorData> action;
47
action = CaretMoveActions.Left;
48
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Left), action);
49
keyBindings.Add (GetKeyCode (Gdk.Key.Left), action);
51
action = SelectionActions.MoveLeft;
52
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Left, Gdk.ModifierType.ShiftMask), action);
53
keyBindings.Add (GetKeyCode (Gdk.Key.Left, Gdk.ModifierType.ShiftMask), action);
55
action = CaretMoveActions.PreviousWord;
56
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Left, Gdk.ModifierType.ControlMask), action);
57
keyBindings.Add (GetKeyCode (Gdk.Key.Left, Gdk.ModifierType.ControlMask), action);
59
action = SelectionActions.MovePreviousWord;
60
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Left, Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask), action);
61
keyBindings.Add (GetKeyCode (Gdk.Key.Left, Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask), action);
65
action = CaretMoveActions.Right;
66
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Right), action);
67
keyBindings.Add (GetKeyCode (Gdk.Key.Right), action);
69
action = SelectionActions.MoveRight;
70
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Right, Gdk.ModifierType.ShiftMask), action);
71
keyBindings.Add (GetKeyCode (Gdk.Key.Right, Gdk.ModifierType.ShiftMask), action);
73
action = CaretMoveActions.NextWord;
74
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Right, Gdk.ModifierType.ControlMask), action);
75
keyBindings.Add (GetKeyCode (Gdk.Key.Right, Gdk.ModifierType.ControlMask), action);
77
action = SelectionActions.MoveNextWord;
78
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Right, Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask), action);
79
keyBindings.Add (GetKeyCode (Gdk.Key.Right, Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask), action);
83
action = CaretMoveActions.Up;
84
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Up), action);
85
keyBindings.Add (GetKeyCode (Gdk.Key.Up), action);
87
action = ScrollActions.Up;
88
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Up, Gdk.ModifierType.ControlMask), action);
89
keyBindings.Add (GetKeyCode (Gdk.Key.Up, Gdk.ModifierType.ControlMask), action);
91
action = SelectionActions.MoveUp;
92
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Up, Gdk.ModifierType.ShiftMask), action);
93
keyBindings.Add (GetKeyCode (Gdk.Key.Up, Gdk.ModifierType.ShiftMask), action);
94
keyBindings.Add (GetKeyCode (Gdk.Key.Up, Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask), action);
98
action = CaretMoveActions.Down;
99
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Down), action);
100
keyBindings.Add (GetKeyCode (Gdk.Key.Down), action);
102
action = ScrollActions.Down;
103
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Down, Gdk.ModifierType.ControlMask), action);
104
keyBindings.Add (GetKeyCode (Gdk.Key.Down, Gdk.ModifierType.ControlMask), action);
106
action = SelectionActions.MoveDown;
107
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Down, Gdk.ModifierType.ShiftMask), action);
108
keyBindings.Add (GetKeyCode (Gdk.Key.Down, Gdk.ModifierType.ShiftMask), action);
109
keyBindings.Add (GetKeyCode (Gdk.Key.Down, Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask), action);
113
action = CaretMoveActions.LineHome;
114
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Home), action);
115
keyBindings.Add (GetKeyCode (Gdk.Key.Home), action);
117
action = SelectionActions.MoveLineHome;
118
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Home, Gdk.ModifierType.ShiftMask), action);
119
keyBindings.Add (GetKeyCode (Gdk.Key.Home, Gdk.ModifierType.ShiftMask), action);
121
action = CaretMoveActions.ToDocumentStart;
122
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Home, Gdk.ModifierType.ControlMask), action);
123
keyBindings.Add (GetKeyCode (Gdk.Key.Home, Gdk.ModifierType.ControlMask), action);
125
action = SelectionActions.MoveToDocumentStart;
126
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Home, Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask), action);
127
keyBindings.Add (GetKeyCode (Gdk.Key.Home, Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask), action);
131
action = CaretMoveActions.LineEnd;
132
keyBindings.Add (GetKeyCode (Gdk.Key.KP_End), action);
133
keyBindings.Add (GetKeyCode (Gdk.Key.End), action);
135
action = SelectionActions.MoveLineEnd;
136
keyBindings.Add (GetKeyCode (Gdk.Key.KP_End, Gdk.ModifierType.ShiftMask), action);
137
keyBindings.Add (GetKeyCode (Gdk.Key.End, Gdk.ModifierType.ShiftMask), action);
139
action = CaretMoveActions.ToDocumentEnd;
140
keyBindings.Add (GetKeyCode (Gdk.Key.KP_End, Gdk.ModifierType.ControlMask), action);
141
keyBindings.Add (GetKeyCode (Gdk.Key.End, Gdk.ModifierType.ControlMask), action);
143
action = SelectionActions.MoveToDocumentEnd;
144
keyBindings.Add (GetKeyCode (Gdk.Key.KP_End, Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask), action);
145
keyBindings.Add (GetKeyCode (Gdk.Key.End, Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask), action);
147
// ==== Deletion, insertion ====
149
action = MiscActions.SwitchCaretMode;
150
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Insert), action);
151
keyBindings.Add (GetKeyCode (Gdk.Key.Insert), action);
153
keyBindings.Add (GetKeyCode (Gdk.Key.Tab), MiscActions.InsertTab);
154
keyBindings.Add (GetKeyCode (Gdk.Key.ISO_Left_Tab, Gdk.ModifierType.ShiftMask), MiscActions.RemoveTab);
156
action = MiscActions.InsertNewLine;
157
keyBindings.Add (GetKeyCode (Gdk.Key.Return), action);
158
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Enter), action);
160
action = DeleteActions.Backspace;
161
keyBindings.Add (GetKeyCode (Gdk.Key.BackSpace), action);
162
keyBindings.Add (GetKeyCode (Gdk.Key.BackSpace, Gdk.ModifierType.ShiftMask), action);
164
keyBindings.Add (GetKeyCode (Gdk.Key.BackSpace, Gdk.ModifierType.ControlMask), DeleteActions.PreviousWord);
166
action = DeleteActions.Delete;
167
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Delete), action);
168
keyBindings.Add (GetKeyCode (Gdk.Key.Delete), action);
170
action = DeleteActions.NextWord;
171
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Delete, Gdk.ModifierType.ControlMask), action);
172
keyBindings.Add (GetKeyCode (Gdk.Key.Delete, Gdk.ModifierType.ControlMask), action);
174
// ==== Cut, copy, paste ===
176
action = ClipboardActions.Cut;
177
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Delete, Gdk.ModifierType.ShiftMask), action);
178
keyBindings.Add (GetKeyCode (Gdk.Key.Delete, Gdk.ModifierType.ShiftMask), action);
179
keyBindings.Add (GetKeyCode (Gdk.Key.x, Gdk.ModifierType.ControlMask), action);
181
action = ClipboardActions.Copy;
182
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Insert, Gdk.ModifierType.ControlMask), action);
183
keyBindings.Add (GetKeyCode (Gdk.Key.Insert, Gdk.ModifierType.ControlMask), action);
184
keyBindings.Add (GetKeyCode (Gdk.Key.c, Gdk.ModifierType.ControlMask), action);
186
action = ClipboardActions.Paste;
187
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Insert, Gdk.ModifierType.ShiftMask), action);
188
keyBindings.Add (GetKeyCode (Gdk.Key.Insert, Gdk.ModifierType.ShiftMask), action);
189
keyBindings.Add (GetKeyCode (Gdk.Key.v, Gdk.ModifierType.ControlMask), action);
191
// ==== Page up/down ====
193
action = CaretMoveActions.PageUp;
194
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Page_Up), action);
195
keyBindings.Add (GetKeyCode (Gdk.Key.Page_Up), action);
197
action = SelectionActions.MovePageUp;
198
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Page_Up, Gdk.ModifierType.ShiftMask), action);
199
keyBindings.Add (GetKeyCode (Gdk.Key.Page_Up, Gdk.ModifierType.ShiftMask), action);
201
action = CaretMoveActions.PageDown;
202
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Page_Down), action);
203
keyBindings.Add (GetKeyCode (Gdk.Key.Page_Down), action);
205
action = SelectionActions.MovePageDown;
206
keyBindings.Add (GetKeyCode (Gdk.Key.KP_Page_Down, Gdk.ModifierType.ShiftMask), action);
207
keyBindings.Add (GetKeyCode (Gdk.Key.Page_Down, Gdk.ModifierType.ShiftMask), action);
211
keyBindings.Add (GetKeyCode (Gdk.Key.a, Gdk.ModifierType.ControlMask), SelectionActions.SelectAll);
213
keyBindings.Add (GetKeyCode (Gdk.Key.d, Gdk.ModifierType.ControlMask), DeleteActions.CaretLine);
214
keyBindings.Add (GetKeyCode (Gdk.Key.D, Gdk.ModifierType.ShiftMask | Gdk.ModifierType.ControlMask), DeleteActions.CaretLineToEnd);
216
keyBindings.Add (GetKeyCode (Gdk.Key.z, Gdk.ModifierType.ControlMask), MiscActions.Undo);
217
keyBindings.Add (GetKeyCode (Gdk.Key.z, Gdk.ModifierType.ControlMask | Gdk.ModifierType.ShiftMask), MiscActions.Redo);
219
keyBindings.Add (GetKeyCode (Gdk.Key.F2), BookmarkActions.GotoNext);
220
keyBindings.Add (GetKeyCode (Gdk.Key.F2, Gdk.ModifierType.ShiftMask), BookmarkActions.GotoPrevious);
222
keyBindings.Add (GetKeyCode (Gdk.Key.b, Gdk.ModifierType.ControlMask), MiscActions.GotoMatchingBracket);
225
protected override void HandleKeypress (Gdk.Key key, uint unicodeKey, Gdk.ModifierType modifier)
227
int keyCode = GetKeyCode (key, modifier);
228
if (keyBindings.ContainsKey (keyCode)) {
229
RunAction (keyBindings [keyCode]);
230
} else if (unicodeKey != 0) {
231
InsertCharacter (unicodeKey);