#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

182 lines
5.5 KiB

/*
* Created by SharpDevelop.
* User: itai
* Date: 12/13/2006
* Time: 2:12 PM
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Windows.Forms;
using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.Refactoring;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Refactoring;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.TextEditor;
using ICSharpCode.NRefactory.Ast;
using ClassDiagram;
namespace ClassDiagramAddin
{
/// <summary>
/// Description of the pad content
/// </summary>
public class ClassEditorPad : AbstractPadContent
{
ClassEditor editor = new ClassEditor();
/// <summary>
/// Creates a new ClassEditorPad object
/// </summary>
public ClassEditorPad()
{
editor.MemberActivated += EditorMemberActivated;
editor.MemberModified += EditorMemberModified;
editor.ParameterActivated += EditorParameterActivated;
editor.ParameterModified += EditorParameterModified;
editor.ClassMemberAdded += EditorClassMemberAdded;
}
private void EditorMemberActivated (object sender, IMemberEventArgs e)
{
ICompilationUnit compUnit = e.Member.DeclaringType.CompilationUnit;
FileService.JumpToFilePosition(compUnit.FileName,
e.Member.Region.BeginLine - 1,
e.Member.Region.BeginColumn - 1);
}
private void EditorParameterActivated (object sender, IParameterEventArgs e)
{
ICompilationUnit compUnit = e.Method.DeclaringType.CompilationUnit;
FileService.JumpToFilePosition(compUnit.FileName,
e.Parameter.Region.BeginLine - 1,
e.Parameter.Region.BeginColumn);
}
private void EditorClassMemberAdded (object sender, IMemberEventArgs e)
{
AbstractNode memberDom = null;
DomRegion cRegion = e.Member.DeclaringType.BodyRegion;
if (cRegion.IsEmpty) cRegion = e.Member.DeclaringType.Region;
memberDom = CodeGenerator.ConvertMember(e.Member, new ClassFinder(e.Member.DeclaringType, cRegion.BeginLine + 1, 1));
IProject proj = ProjectService.CurrentProject;
IViewContent vc = FileService.OpenFile(e.Member.DeclaringType.CompilationUnit.FileName);
if (vc == null) return;
IDocument doc = GetDocument(vc);
if (e.Member.DeclaringType is CompoundClass)
{
foreach (IClass c in ((CompoundClass)e.Member.DeclaringType).Parts)
{
System.Diagnostics.Debug.WriteLine(c.Name+": " +c.Modifiers.ToString());
}
}
proj.LanguageProperties.CodeGenerator.InsertCodeAtEnd(cRegion, doc, memberDom);
}
private static IDocument GetDocument(IViewContent viewContent)
{
ITextEditorControlProvider provider1 = viewContent as ITextEditorControlProvider;
if (provider1 == null)
{
return null;
}
return new TextEditorDocument (provider1.TextEditorControl.Document);
}
private void EditorMemberModified (object sender, IMemberModificationEventArgs e)
{
switch (e.Modification)
{
case Modification.Name:
DialogResult dr = MessageBox.Show("Rename all occurances?", "Rename Member", MessageBoxButtons.YesNoCancel);
if (dr == DialogResult.Cancel) e.Cancel = true;
else if (dr == DialogResult.Yes)
{
FindReferencesAndRenameHelper.RenameMember(e.Member, e.NewValue);
}
else
{
// TODO - place local renameing code here.
}
break;
case Modification.Type:
// TODO - place type replacment code here.
break;
case Modification.Modifier:
// TODO - place visibility replacment code here.
break;
case Modification.Summary:
// TODO - place summary replacment code here.
break;
}
}
private void EditorParameterModified (object sender, IParameterModificationEventArgs e)
{
switch (e.Modification)
{
case Modification.Name:
DialogResult dr = MessageBox.Show("Rename all occurances?", "Rename Parameter", MessageBoxButtons.YesNoCancel);
if (dr == DialogResult.Cancel) e.Cancel = true;
else if (dr == DialogResult.Yes)
{
ResolveResult local = new LocalResolveResult(e.Method, new DefaultField.ParameterField(e.Parameter.ReturnType, e.Parameter.Name, e.Parameter.Region, e.Method.DeclaringType));
List<Reference> list = RefactoringService.FindReferences(local, null);
if (list == null) return;
FindReferencesAndRenameHelper.RenameReferences(list, e.NewValue);
}
else
{
// TODO - place local renameing code here.
}
break;
case Modification.Type:
// TODO - place type replacment code here.
break;
case Modification.Modifier:
// TODO - place visibility replacment code here.
break;
case Modification.Summary:
// TODO - place summary replacment code here.
break;
}
}
/// <summary>
/// The <see cref="System.Windows.Forms.Control"/> representing the pad
/// </summary>
public override object Content
{
get { return editor; }
}
/// <summary>
/// Cleans up all used resources
/// </summary>
public override void Dispose()
{
editor.Dispose();
}
private static TextEditorControl GetTextEditorControl()
{
ITextEditorControlProvider provider = WorkbenchSingleton.Workbench.ActiveViewContent as ITextEditorControlProvider;
if (provider != null)
return provider.TextEditorControl;
else
return null;
}
}
}