private
bool _HandlingEditorForegroundPaint;
private
DevExpress.CodeRush.UserControls.CodePreviewWindow _PreviewWindow;
private
SourceRange _PreviewRange;
private
void RefactoringProvider_PreparePreview(object sender,
DevExpress.Refactor.Core.PrepareRefactoringPreviewEventArgs ea)
{
Variable
variable = ea.Element
as Variable;
if
(variable == null)
return;
_PreviewRange
= variable.Range.Clone();
if
(!_HandlingEditorForegroundPaint)
{
_HandlingEditorForegroundPaint
= true;
EventNexus.EditorPaintForeground += new EditorPaintEventHandler(EventNexus_EditorPaintForeground);
}
InvalidatePreviews(ea);
CreatePreviewWindow(ea, variable);
}
private
void RefactoringProvider_HidePreview(object sender,
DevExpress.Refactor.Core.HideRefactoringPreviewEventArgs ea)
{
if
(_PreviewWindow != null)
{
_PreviewWindow.HidePreview();
_PreviewWindow
= null;
}
if
(_HandlingEditorForegroundPaint)
{
_HandlingEditorForegroundPaint
= false;
EventNexus.EditorPaintForeground -= new EditorPaintEventHandler(EventNexus_EditorPaintForeground);
}
InvalidatePreviews(ea);
_PreviewRange
= SourceRange.Empty;
}
private
void CreatePreviewWindow(PrepareRefactoringPreviewEventArgs ea, Variable
variable)
{
string
varCode = GenerateElement(variable);
_PreviewWindow = new CodePreviewWindow(ea.TextView,
_PreviewRange.Top);
_PreviewWindow.AddCode(varCode);
_PreviewWindow.ShowPreview();
}
private
void InvalidatePreviews(RefactoringPreviewEventArgs ea)
{
if
(_PreviewRange.IsEmpty)
return;
int
doubleSpaceWidth = ea.TextView.SpaceWidth * 2;
int
textViewLineHeight = ea.TextView.LineHeight;
Rectangle
previewRect = ea.TextView.GetRectangleFromRange(_PreviewRange);
previewRect.Inflate(doubleSpaceWidth, textViewLineHeight);
ea.TextView.Invalidate(previewRect);
}
private
void EventNexus_EditorPaintForeground(EditorPaintEventArgs ea)
{
if
(_PreviewRange.IsEmpty)
return;
using
(StrikeThrough strikeThrough = new StrikeThrough())
{
strikeThrough.TextView = ea.TextView;
strikeThrough.FillColor = RefactorColors.StrikeThrough;
strikeThrough.Range = _PreviewRange;
strikeThrough.Paint(ea.Graphics);
}
}
R&D, IDE Team Developer Express Inc.