Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Hutchinson <mhutch@xamarin.com>2011-09-27 03:22:18 +0400
committerMichael Hutchinson <mhutch@xamarin.com>2011-09-27 03:25:38 +0400
commitfa68831c453fcaef2ebc7770cbf9279e80a30932 (patch)
tree19058171f5c2bd26f8c7f24dedd1b63c480cf773 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui
parent5632d46e154bfa865c646336bf703176bc4ddd2f (diff)
[Ide] Improve the uppercase/lowercase commands
* Don't access SelectedText multiple times, it's expensive * When running without a selection, move the caret even if the char wasn't changed * Use atomic undo for the remove-insert * Simplify control flow using early return
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/ViewCommandHandlers.cs84
1 files changed, 51 insertions, 33 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/ViewCommandHandlers.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/ViewCommandHandlers.cs
index 438d7d0136..d9b07dc8ce 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/ViewCommandHandlers.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui/ViewCommandHandlers.cs
@@ -232,24 +232,33 @@ namespace MonoDevelop.Ide.Gui
public void OnUppercaseSelection ()
{
IEditableTextBuffer buffer = GetContent <IEditableTextBuffer> ();
- if (buffer != null)
- {
- if (buffer.SelectedText == String.Empty)
- {
- int pos = buffer.CursorPosition;
- string ch = buffer.GetText (pos, pos + 1);
- if (!char.IsLower (ch[0]))
- return;
- buffer.DeleteText (pos, 1);
- buffer.InsertText (pos, ch.ToUpper ());
+ if (buffer == null)
+ return;
+
+ string selectedText = buffer.SelectedText;
+ if (string.IsNullOrEmpty (selectedText)) {
+ int pos = buffer.CursorPosition;
+ string ch = buffer.GetText (pos, pos + 1);
+ string upper = ch.ToUpper ();
+ if (upper == ch) {
buffer.CursorPosition = pos + 1;
- } else
- {
- string newText = buffer.SelectedText.ToUpper ();
- int startPos = buffer.SelectionStartPosition;
- buffer.DeleteText (startPos, buffer.SelectedText.Length);
- buffer.InsertText (startPos, newText);
+ return;
}
+ buffer.BeginAtomicUndo ();
+ buffer.DeleteText (pos, 1);
+ buffer.InsertText (pos, upper);
+ buffer.CursorPosition = pos + 1;
+ buffer.EndAtomicUndo ();
+ } else {
+ string newText = selectedText.ToUpper ();
+ if (newText == selectedText)
+ return;
+ int startPos = buffer.SelectionStartPosition;
+ buffer.BeginAtomicUndo ();
+ buffer.DeleteText (startPos, selectedText.Length);
+ buffer.InsertText (startPos, newText);
+ buffer.Select (startPos, startPos + newText.Length);
+ buffer.EndAtomicUndo ();
}
}
@@ -264,24 +273,33 @@ namespace MonoDevelop.Ide.Gui
public void OnLowercaseSelection ()
{
IEditableTextBuffer buffer = GetContent <IEditableTextBuffer> ();
- if (buffer != null)
- {
- if (buffer.SelectedText == String.Empty)
- {
- int pos = buffer.CursorPosition;
- string ch = buffer.GetText (pos, pos + 1);
- if (!char.IsUpper (ch[0]))
- return;
- buffer.DeleteText (pos, 1);
- buffer.InsertText (pos, ch.ToLower ());
+ if (buffer == null)
+ return;
+
+ string selectedText = buffer.SelectedText;
+ if (string.IsNullOrEmpty (selectedText)) {
+ int pos = buffer.CursorPosition;
+ string ch = buffer.GetText (pos, pos + 1);
+ string lower = ch.ToLower ();
+ if (lower == ch) {
buffer.CursorPosition = pos + 1;
- } else
- {
- string newText = buffer.SelectedText.ToLower ();
- int startPos = buffer.SelectionStartPosition;
- buffer.DeleteText (startPos, buffer.SelectedText.Length);
- buffer.InsertText (startPos, newText);
- }
+ return;
+ };
+ buffer.BeginAtomicUndo ();
+ buffer.DeleteText (pos, 1);
+ buffer.InsertText (pos, lower);
+ buffer.CursorPosition = pos + 1;
+ buffer.EndAtomicUndo ();
+ } else {
+ string newText = selectedText.ToLower ();
+ if (newText == selectedText)
+ return;
+ int startPos = buffer.SelectionStartPosition;
+ buffer.BeginAtomicUndo ();
+ buffer.DeleteText (startPos, selectedText.Length);
+ buffer.InsertText (startPos, newText);
+ buffer.Select (startPos, startPos + newText.Length);
+ buffer.EndAtomicUndo ();
}
}