298 lines
11 KiB
C#
298 lines
11 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
namespace UniversalEditor.UserInterface.WindowsForms.Dialogs
|
|
{
|
|
public partial class AboutDialog : Glue.GlueWindow
|
|
{
|
|
public AboutDialog()
|
|
{
|
|
InitializeComponent();
|
|
InitializeImageLists();
|
|
InitializeInstalledComponentsTab();
|
|
|
|
Font = SystemFonts.MenuFont;
|
|
lblApplicationTitle.Font = new Font(Font, FontStyle.Bold);
|
|
|
|
lblVersion.Text = "Version " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
|
}
|
|
|
|
private void InitializeImageLists()
|
|
{
|
|
IconMethods.PopulateSystemIcons(ref imlSmallIcons);
|
|
}
|
|
private void InitializeInstalledComponentsTab()
|
|
{
|
|
tvComponents.Nodes.Clear();
|
|
|
|
#region Object Models
|
|
{
|
|
TreeNode tnParent = null;
|
|
ObjectModelReference[] omrs = UniversalEditor.Common.Reflection.GetAvailableObjectModels();
|
|
foreach (ObjectModelReference omr in omrs)
|
|
{
|
|
string title = omr.ObjectModelType.Assembly.GetName().Name;
|
|
object[] atts = omr.ObjectModelType.Assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyTitleAttribute), false);
|
|
if (atts.Length > 0)
|
|
{
|
|
title = (atts[0] as System.Reflection.AssemblyTitleAttribute).Title;
|
|
}
|
|
|
|
if (tnParent == null)
|
|
{
|
|
if (tvComponents.Nodes.ContainsKey(title))
|
|
{
|
|
tnParent = tvComponents.Nodes[title];
|
|
}
|
|
else
|
|
{
|
|
tnParent = tvComponents.Nodes.Add(title, title, "LibraryClosed");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (tvComponents.Nodes.ContainsKey(title))
|
|
{
|
|
tnParent = tnParent.Nodes[title];
|
|
}
|
|
else
|
|
{
|
|
tnParent = tnParent.Nodes.Add(title, title, "LibraryClosed", "LibraryClosed");
|
|
}
|
|
}
|
|
tnParent.Tag = omr.ObjectModelType.Assembly;
|
|
|
|
foreach (string s in omr.Path)
|
|
{
|
|
if (tnParent == null)
|
|
{
|
|
if (tvComponents.Nodes.ContainsKey(s))
|
|
{
|
|
tnParent = tvComponents.Nodes[s];
|
|
}
|
|
else
|
|
{
|
|
tnParent = tvComponents.Nodes.Add(s, s, "generic-folder-closed", "generic-folder-closed");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (tnParent.Nodes.ContainsKey(s))
|
|
{
|
|
tnParent = tnParent.Nodes[s];
|
|
}
|
|
else
|
|
{
|
|
tnParent = tnParent.Nodes.Add(s, s, "generic-folder-closed", "generic-folder-closed");
|
|
}
|
|
}
|
|
|
|
if (Array.IndexOf<string>(omr.Path, s) == omr.Path.Length - 1)
|
|
{
|
|
tnParent.ImageKey = "ObjectModel";
|
|
tnParent.SelectedImageKey = "ObjectModel";
|
|
tnParent.Tag = omr;
|
|
|
|
DataFormatReference[] dfrs = UniversalEditor.Common.Reflection.GetAvailableDataFormats(omr);
|
|
if (dfrs.Length > 0)
|
|
{
|
|
TreeNode tnParentDataFormats = null;
|
|
if (!tnParent.Nodes.ContainsKey("DataFormats"))
|
|
{
|
|
tnParentDataFormats = new TreeNode();
|
|
tnParentDataFormats.Name = "DataFormats";
|
|
tnParentDataFormats.Text = "DataFormats";
|
|
tnParentDataFormats.ImageKey = "generic-folder-closed";
|
|
tnParentDataFormats.SelectedImageKey = "generic-folder-closed";
|
|
tnParent.Nodes.Add(tnParentDataFormats);
|
|
}
|
|
else
|
|
{
|
|
tnParentDataFormats = tnParent.Nodes["DataFormats"];
|
|
}
|
|
foreach (DataFormatReference dfr in dfrs)
|
|
{
|
|
if (!tnParentDataFormats.Nodes.ContainsKey(dfr.Title))
|
|
{
|
|
tnParentDataFormats.Nodes.Add(dfr.Title, dfr.Title, "DataFormat", "DataFormat");
|
|
tnParentDataFormats.Nodes[tnParentDataFormats.Nodes.Count - 1].Tag = dfr;
|
|
}
|
|
}
|
|
}
|
|
|
|
IEditorImplementation[] editors = UniversalEditor.UserInterface.Common.Reflection.GetAvailableEditors(omr);
|
|
if (editors.Length > 0)
|
|
{
|
|
TreeNode tnParentEditors = null;
|
|
if (!tnParent.Nodes.ContainsKey("Editors"))
|
|
{
|
|
tnParentEditors = new TreeNode();
|
|
tnParentEditors.Name = "Editors";
|
|
tnParentEditors.Text = "Editors";
|
|
tnParentEditors.ImageKey = "generic-folder-closed";
|
|
tnParentEditors.SelectedImageKey = "generic-folder-closed";
|
|
tnParent.Nodes.Add(tnParentEditors);
|
|
}
|
|
else
|
|
{
|
|
tnParentEditors = tnParent.Nodes["Editors"];
|
|
}
|
|
foreach (IEditorImplementation editor in editors)
|
|
{
|
|
if (!tnParentEditors.Nodes.ContainsKey(editor.Title))
|
|
{
|
|
tnParentEditors.Nodes.Add(editor.Title, editor.Title, "Editor", "Editor");
|
|
tnParentEditors.Nodes[tnParentEditors.Nodes.Count - 1].Tag = editor;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
tnParent = null;
|
|
}
|
|
}
|
|
#endregion
|
|
tvComponents.Sort();
|
|
}
|
|
|
|
private void tvComponents_AfterExpand(object sender, TreeViewEventArgs e)
|
|
{
|
|
UpdateNodeImage(e.Node);
|
|
}
|
|
private void tvComponents_AfterCollapse(object sender, TreeViewEventArgs e)
|
|
{
|
|
UpdateNodeImage(e.Node);
|
|
}
|
|
|
|
private void UpdateNodeImage(TreeNode node)
|
|
{
|
|
if (node == null) return;
|
|
switch (node.ImageKey)
|
|
{
|
|
case "LibraryClosed":
|
|
{
|
|
node.ImageKey = "LibraryOpen";
|
|
node.SelectedImageKey = "LibraryOpen";
|
|
break;
|
|
}
|
|
case "LibraryOpen":
|
|
{
|
|
node.ImageKey = "LibraryClosed";
|
|
node.SelectedImageKey = "LibraryClosed";
|
|
break;
|
|
}
|
|
case "generic-folder-closed":
|
|
{
|
|
node.ImageKey = "generic-folder-open";
|
|
node.SelectedImageKey = "generic-folder-open";
|
|
break;
|
|
}
|
|
case "generic-folder-open":
|
|
{
|
|
node.ImageKey = "generic-folder-closed";
|
|
node.SelectedImageKey = "generic-folder-closed";
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void tvComponents_AfterSelect(object sender, TreeViewEventArgs e)
|
|
{
|
|
if (e.Node == null) return;
|
|
|
|
pnlAssemblyInfo.Visible = false;
|
|
pnlAssemblyInfo.Enabled = false;
|
|
|
|
pnlObjectModelInfo.Visible = false;
|
|
pnlObjectModelInfo.Enabled = false;
|
|
|
|
pnlDataFormatInfo.Visible = false;
|
|
pnlDataFormatInfo.Enabled = false;
|
|
|
|
if (e.Node.Tag is System.Reflection.Assembly)
|
|
{
|
|
System.Reflection.Assembly asm = (e.Node.Tag as System.Reflection.Assembly);
|
|
|
|
txtAssemblyFullName.Text = asm.FullName;
|
|
txtAssemblyLocation.Text = asm.Location;
|
|
|
|
object[] atts = asm.GetCustomAttributes(typeof(System.Reflection.AssemblyDescriptionAttribute), false);
|
|
if (atts.Length > 0)
|
|
{
|
|
txtAssemblyDescription.Text = ((atts[0] as System.Reflection.AssemblyDescriptionAttribute).Description);
|
|
}
|
|
|
|
pnlAssemblyInfo.Enabled = true;
|
|
pnlAssemblyInfo.Visible = true;
|
|
}
|
|
else if (e.Node.Tag is ObjectModelReference)
|
|
{
|
|
ObjectModelReference omr = (e.Node.Tag as ObjectModelReference);
|
|
txtObjectModelID.Text = omr.ObjectModelID.ToString("B");
|
|
if (omr.ObjectModelTypeName == null)
|
|
{
|
|
txtObjectModelTypeName.Text = "(null)";
|
|
}
|
|
else
|
|
{
|
|
txtObjectModelTypeName.Text = omr.ObjectModelTypeName;
|
|
}
|
|
txtObjectModelTitle.Text = omr.Title;
|
|
|
|
pnlObjectModelInfo.Enabled = true;
|
|
pnlObjectModelInfo.Visible = true;
|
|
}
|
|
else if (e.Node.Tag is DataFormatReference)
|
|
{
|
|
DataFormatReference dfr = (e.Node.Tag as DataFormatReference);
|
|
txtDataFormatID.Text = dfr.ID.ToString("B");
|
|
if (dfr.DataFormatType != null)
|
|
{
|
|
txtDataFormatTypeName.Text = dfr.DataFormatType.FullName;
|
|
}
|
|
else
|
|
{
|
|
txtDataFormatTypeName.Text = "(null)";
|
|
}
|
|
|
|
lvDataFormatFilters.Items.Clear();
|
|
foreach (DataFormatFilter filter in dfr.Filters)
|
|
{
|
|
ListViewItem lvi = new ListViewItem();
|
|
lvi.Text = filter.Title;
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
foreach (string s in filter.FileNameFilters)
|
|
{
|
|
sb.Append(s);
|
|
if (filter.FileNameFilters.IndexOf(s) < filter.FileNameFilters.Count - 1)
|
|
{
|
|
sb.Append(", ");
|
|
}
|
|
}
|
|
lvi.SubItems.Add(sb.ToString());
|
|
lvDataFormatFilters.Items.Add(lvi);
|
|
}
|
|
foreach (string ct in dfr.ContentTypes)
|
|
{
|
|
ListViewItem lvi = new ListViewItem();
|
|
lvi.Text = ct;
|
|
lvDataFormatContentTypes.Items.Add(lvi);
|
|
}
|
|
|
|
pnlDataFormatInfo.Enabled = true;
|
|
pnlDataFormatInfo.Visible = true;
|
|
}
|
|
}
|
|
|
|
private void cmdOpenContainingFolder_Click(object sender, EventArgs e)
|
|
{
|
|
System.Diagnostics.Process.Start(System.IO.Path.GetDirectoryName(txtAssemblyLocation.Text));
|
|
}
|
|
|
|
}
|
|
} |