2 using System.Drawing;
\r
3 using System.Windows.Forms;
\r
5 using System.Text.RegularExpressions;
\r
7 using NaGet.Packages.Install;
\r
8 using NaGet.Packages;
\r
10 namespace AppliStation.PackageInfo
\r
13 /// Description of PackageInfoForm.
\r
15 public partial class PackageInfoForm : Form
\r
17 private Package pkg;
\r
19 public PackageInfoForm()
\r
21 InitializeComponent();
\r
25 /// 現在選択中(=表示中)のパッケージ
\r
27 public Package SelectedObject {
\r
31 updateSelectedObject();
\r
35 private void updateSelectedObject()
\r
37 InstalledPackage instPkg = pkg as InstalledPackage;
\r
38 bool isInstalledPackage = instPkg != null;
\r
40 iconLabel.Image = null;
\r
41 iconLabel.Size = Size.Empty;
\r
42 if (isInstalledPackage) {
\r
43 Icon icon = AppliStation.Util.GUIUtils.GetIconForPackage(instPkg);
\r
45 iconLabel.Image = icon.ToBitmap();
\r
46 iconLabel.Size = icon.Size;
\r
49 nameLabel.Text = string.Format("{0} ({1})", pkg.Name, pkg.Version);
\r
50 nameLabel.Font = new Font(SystemFonts.CaptionFont.FontFamily, SystemFonts.CaptionFont.Size*1.25f);
\r
52 summaryTextBox.Text = pkg.Summary;
\r
54 if (isInstalledPackage) {
\r
55 UninstallInformation uninstInfo = instPkg.UninstallInfo;
\r
57 string instPath = null;
\r
58 if ((pkg.Type == InstallerType.ARCHIVE)
\r
59 ||(pkg.Type == InstallerType.ITSELF)) {
\r
60 instPath = Path.Combine(NaGet.Env.ArchiveProgramFiles, pkg.Name);
\r
61 } else if (Directory.Exists(uninstInfo.InstallLocation)) {
\r
62 instPath = uninstInfo.InstallLocation;
\r
65 statusLinkLabel.Links.Clear();
\r
66 if (string.IsNullOrEmpty(instPath)) {
\r
67 statusLinkLabel.Text = "情報が提供されていません";
\r
68 statusLinkLabel.Enabled = false;
\r
70 statusLinkLabel.Text = instPath;
\r
71 statusLinkLabel.Enabled = true;
\r
72 statusLinkLabel.Links.Add(0, instPath.Length, instPath);
\r
75 urlLinkLabel.Links.Clear();
\r
76 if (pkg.Url != null) {
\r
77 urlLinkLabel.Text = pkg.Url.Href;
\r
78 urlLinkLabel.Links.Add(0, pkg.Url.Href.Length, pkg.Url.Href);
\r
79 urlLinkLabel.Enabled = true;
\r
80 urlLabel.Enabled = true;
\r
82 urlLinkLabel.Text = string.Empty;
\r
83 urlLinkLabel.Enabled = false;
\r
84 urlLabel.Enabled = false;
\r
86 tagsTextBox.Text = pkg.Tags;
\r
87 setLinkLabelFromLicense(licenseLinkLabel, pkg);
\r
88 typeValueLabel.Text = PackageDescripter.GetInstallerTypeLabel(pkg.Type);
\r
89 if (! string.IsNullOrEmpty(pkg.PackageListName)) {
\r
90 packageListNameValueLabel.Text = pkg.PackageListName;
\r
91 packageListNameValueLabel.Enabled = true;
\r
93 packageListNameValueLabel.Enabled = false;
\r
96 tabControl1.TabPages.Clear();
\r
97 if (isInstalledPackage && string.IsNullOrEmpty(pkg.Version)) {
\r
98 tabControl1.Visible = false;
\r
100 tabControl1.Visible = true;
\r
101 foreach (Installer inst in pkg.Installer) {
\r
102 TabPage page = new TabPage(string.Format("インストーラー その{0}", tabControl1.TabCount+1));
\r
103 page.Dock = DockStyle.Fill;
\r
105 InstallerInfoForm instForm = new InstallerInfoForm();
\r
106 instForm.SelectedObject = inst;
\r
107 instForm.Dock = DockStyle.Fill;
\r
108 page.Controls.Add(instForm);
\r
110 tabControl1.TabPages.Add(page);
\r
114 this.Size = new Size(this.Size.Width, (tabControl1.TabCount>0)? 380 : 250);
\r
118 /// インストーラーの種類についてラベルにテキストを設定する
\r
120 /// <param name="typeValueLabel">設定先のラベル</param>
\r
121 /// <param name="instType">インストーラーの種類</param>
\r
122 private static void setLinkLabelFromLicense(LinkLabel linklabel, Package pkg)
\r
124 linklabel.Enabled = true;
\r
127 LinkLabel.Link[] links;
\r
128 PackageDescripter.GetLicenseValueLabel(pkg, out text, out links);
\r
130 linklabel.Text = text;
\r
131 linklabel.Links.Clear();
\r
132 foreach (LinkLabel.Link link in links) {
\r
133 linklabel.Links.Add(link);
\r
137 private void linkLabelLinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
\r
139 string linkData = e.Link.LinkData.ToString();
\r
141 if (Directory.Exists(linkData)) {
\r
142 e.Link.Visited = true;
\r
143 System.Diagnostics.Process.Start(e.Link.LinkData.ToString());
\r
144 } else if (System.Text.RegularExpressions.Regex.IsMatch(linkData, @"^(https?|file)://")) {
\r
145 e.Link.Visited = true;
\r
147 System.Diagnostics.Process.Start(e.Link.LinkData.ToString());
\r
148 } catch (System.ComponentModel.Win32Exception) {
\r
149 MessageBox.Show(string.Format("{0}を開くのに失敗しました。", e.Link.LinkData), "ブラウザ起動エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r
154 void CloseButtonClick(object sender, EventArgs e)
\r
156 if (! this.Modal) {
\r
157 this.DialogResult = DialogResult.OK;
\r
162 void PackageInfoFormFormClosed(object sender, FormClosedEventArgs e)
\r
164 this.Dispose(true);
\r