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.
185 lines
4.3 KiB
185 lines
4.3 KiB
/* |
|
* Created by SharpDevelop. |
|
* User: itai |
|
* Date: 12/23/2006 |
|
* Time: 8:27 PM |
|
* |
|
* To change this template use Tools | Options | Coding | Edit Standard Headers. |
|
*/ |
|
|
|
using ICSharpCode.SharpDevelop.Gui; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Windows.Forms; |
|
using ICSharpCode.SharpDevelop; |
|
using ICSharpCode.SharpDevelop.Dom; |
|
using ICSharpCode.SharpDevelop.Gui.XmlForms; |
|
using ICSharpCode.SharpDevelop.Project; |
|
|
|
namespace ClassWizard |
|
{ |
|
public class ClassesListDialog |
|
{ |
|
private class ClassesList : BaseSharpDevelopForm |
|
{ |
|
IClass baseClass; |
|
public ClassesList() : this (null) {} |
|
|
|
public ClassesList(IClass baseClass) |
|
{ |
|
this.baseClass = baseClass; |
|
SetupFromXmlStream(this.GetType().Assembly.GetManifestResourceStream("ClassWizard.Resources.ClassesList.xfrm")); |
|
treeView = Get<TreeView>("classes"); |
|
treeView.BeforeCheck += ClassesTreeViewBeforeCheck; |
|
treeView.AfterCheck += ClassesTreeViewAfterCheck; |
|
treeView.AfterSelect += ClassesTreeViewAfterCheck; |
|
} |
|
|
|
private TreeView treeView; |
|
|
|
public void InitializeClasses(IProject project, ClassType ct) |
|
{ |
|
IProjectContent pc = ParserService.GetProjectContent(project); |
|
|
|
treeView.Nodes.Clear(); |
|
|
|
AddClasses (pc, ct, false); |
|
|
|
foreach (IProjectContent rpc in pc.ReferencedContents) |
|
AddClasses (rpc, ct, false); |
|
} |
|
|
|
void AddClasses (IProjectContent pc, ClassType ct, bool allowSealed) |
|
{ |
|
if (pc.Classes == null) return; |
|
foreach (IClass c in pc.Classes) |
|
{ |
|
if (c.ClassType == ct && (!c.IsSealed || (c.IsSealed && allowSealed))) |
|
{ |
|
if (baseClass == null || (baseClass != null && c.IsTypeInInheritanceTree(baseClass))) |
|
{ |
|
TreeNode node = AddItemToTreeView(c.FullyQualifiedName); |
|
if (node != null) |
|
node.Tag = c; |
|
} |
|
} |
|
} |
|
} |
|
|
|
TreeNode AddItemToTreeView (string item) |
|
{ |
|
string[] path = item.Split(treeView.PathSeparator[0]); |
|
TreeNodeCollection tnc = treeView.Nodes; |
|
TreeNode ret = null; |
|
foreach (string pathitem in path) |
|
{ |
|
if (tnc != null) |
|
{ |
|
TreeNode tn; |
|
if (!tnc.ContainsKey(pathitem)) |
|
{ |
|
tn = tnc.Add(pathitem, pathitem); |
|
ret = tn; |
|
} |
|
else |
|
tn = tnc[pathitem]; |
|
if (tn == null) |
|
{ |
|
MessageBox.Show("Treenode is null: " + pathitem + "\n" + item); |
|
} |
|
tnc = tn.Nodes; |
|
} |
|
} |
|
return ret; |
|
} |
|
|
|
void ClassesTreeViewBeforeCheck (object sender, TreeViewCancelEventArgs e) |
|
{ |
|
e.Cancel = (e.Node.Nodes != null && e.Node.Nodes.Count > 0); |
|
} |
|
|
|
void ClassesTreeViewAfterCheck (object sender, TreeViewEventArgs e) |
|
{ |
|
IClass c = (IClass) e.Node.Tag; |
|
if (SelectMultiple) |
|
{ |
|
if (e.Node.Checked && !selectedItems.Contains(c)) |
|
selectedItems.Add(c); |
|
else if (!e.Node.Checked && selectedItems.Contains(c)) |
|
selectedItems.Remove(c); |
|
} |
|
else |
|
{ |
|
selectedItems.Clear(); |
|
if (treeView.SelectedNode.Nodes == null || treeView.SelectedNode.Nodes.Count == 0) |
|
selectedItems.Add((IClass)treeView.SelectedNode.Tag); |
|
} |
|
Get<Button>("ok").Enabled = (selectedItems.Count > 0); |
|
} |
|
|
|
public bool SelectMultiple |
|
{ |
|
get { return treeView.CheckBoxes; } |
|
set { treeView.CheckBoxes = value; } |
|
} |
|
|
|
List<IClass> selectedItems = new List<IClass>(); |
|
|
|
public IList<IClass> SelectedClasses |
|
{ |
|
get { return selectedItems; } |
|
} |
|
} |
|
|
|
ClassesList classesList = new ClassesList(); |
|
ClassType classType; |
|
IProject project; |
|
|
|
bool initialized = false; |
|
|
|
public ClassesListDialog() {} |
|
|
|
public bool ShowDialog() |
|
{ |
|
if (!initialized) |
|
{ |
|
classesList.InitializeClasses(project, classType); |
|
initialized = true; |
|
} |
|
|
|
classesList.ShowDialog(WorkbenchSingleton.MainWin32Window); |
|
return classesList.DialogResult == DialogResult.OK; |
|
} |
|
|
|
public ClassType ClassType |
|
{ |
|
get { return classType; } |
|
set |
|
{ |
|
initialized &= classType == value; |
|
classType = value; |
|
} |
|
} |
|
|
|
public IProject Project |
|
{ |
|
get { return project; } |
|
set |
|
{ |
|
initialized &= project == value; |
|
project = value; |
|
} |
|
} |
|
|
|
public bool SelectMultiple |
|
{ |
|
get { return classesList.SelectMultiple; } |
|
set { classesList.SelectMultiple = value; } |
|
} |
|
|
|
public IList<IClass> SelectedClasses |
|
{ |
|
get { return classesList.SelectedClasses; } |
|
} |
|
} |
|
}
|
|
|