public override void Run (RefactoringOptions options) { if (options.SelectedItem is IVariable) { var field = options.SelectedItem as IField; if (field != null && field.Accessibility != Accessibility.Private) { MessageService.ShowCustomDialog (new RenameItemDialog (options, this)); return; } var col = ReferenceFinder.FindReferences (options.SelectedItem, true); if (col == null) return; var data = options.Document != null ? options.GetTextEditorData () : IdeApp.Workbench.ActiveDocument.Editor; var editor = data.Parent; if (editor == null) { MessageService.ShowCustomDialog (new RenameItemDialog (options, this)); return; } var links = new List<TextLink> (); var link = new TextLink ("name"); int baseOffset = Int32.MaxValue; foreach (var r in col) { baseOffset = Math.Min (baseOffset, r.Offset); } foreach (MemberReference r in col) { var segment = new TextSegment (r.Offset - baseOffset, r.Length); if (segment.Offset <= data.Caret.Offset - baseOffset && data.Caret.Offset - baseOffset <= segment.EndOffset) { link.Links.Insert (0, segment); } else { link.AddLink (segment); } } links.Add (link); if (editor.CurrentMode is TextLinkEditMode) ((TextLinkEditMode)editor.CurrentMode).ExitTextLinkMode (); TextLinkEditMode tle = new TextLinkEditMode (editor, baseOffset, links); tle.SetCaretPosition = false; tle.SelectPrimaryLink = true; if (tle.ShouldStartTextLinkMode) { var helpWindow = new TableLayoutModeHelpWindow (); helpWindow.TransientFor = IdeApp.Workbench.RootWindow; helpWindow.TitleText = options.SelectedItem is IVariable ? GettextCatalog.GetString ("<b>Local Variable -- Renaming</b>") : GettextCatalog.GetString ("<b>Parameter -- Renaming</b>"); helpWindow.Items.Add (new KeyValuePair<string, string> (GettextCatalog.GetString ("<b>Key</b>"), GettextCatalog.GetString ("<b>Behavior</b>"))); helpWindow.Items.Add (new KeyValuePair<string, string> (GettextCatalog.GetString ("<b>Return</b>"), GettextCatalog.GetString ("<b>Accept</b> this refactoring."))); helpWindow.Items.Add (new KeyValuePair<string, string> (GettextCatalog.GetString ("<b>Esc</b>"), GettextCatalog.GetString ("<b>Cancel</b> this refactoring."))); tle.HelpWindow = helpWindow; tle.Cancel += delegate { if (tle.HasChangedText) editor.Document.Undo (); }; tle.OldMode = data.CurrentMode; tle.StartMode (); data.CurrentMode = tle; } } else { MessageService.ShowCustomDialog (new RenameItemDialog (options, this)); } }
static TableLayoutModeHelpWindow getHelpWindowFor(DefinitionType symbolType) { var helpWindow = new TableLayoutModeHelpWindow (); helpWindow.TitleText = "<b>Rename " + getDescriptionOfSymbol(symbolType)+"</b>"; helpWindow.Items.Add (new KeyValuePair<string, string> ("<b>Key</b>", "<b>Behavior</b>")); helpWindow.Items.Add (new KeyValuePair<string, string> ("<b>Enter</b>", "<b>Accept</b> this refactoring")); helpWindow.Items.Add (new KeyValuePair<string, string> ("<b>ESC</b>", "<b>Cancel</b> this refactoring")); return helpWindow; }