2 using System.Drawing;
\r
3 using System.Windows.Forms;
\r
6 using NaGet.Packages.Install;
\r
7 using NaGet.Packages;
\r
9 namespace AppliStation
\r
12 /// Description of PackageInfoForm.
\r
14 public partial class PackageInfoForm : Form
\r
16 private Package pkg;
\r
18 public PackageInfoForm()
\r
20 InitializeComponent();
\r
24 /// 現在選択中(=表示中)のパッケージ
\r
26 public Package SelectedObject {
\r
30 updateSelectedObject();
\r
34 private void updateSelectedObject()
\r
36 bool isInstalledPackage = pkg is InstalledPackage;
\r
38 iconLabel.Image = null;
\r
39 iconLabel.Size = Size.Empty;
\r
40 if (isInstalledPackage) {
\r
41 Icon icon = AppliStation.Util.GUIUtils.GetIconForPackage((InstalledPackage) pkg);
\r
43 iconLabel.Image = icon.ToBitmap();
\r
44 iconLabel.Size = icon.Size;
\r
47 nameLabel.Text = string.Format("{0} ({1})", pkg.Name, pkg.Version);
\r
48 nameLabel.Font = new Font(SystemFonts.CaptionFont.FontFamily, SystemFonts.CaptionFont.Size*1.25f);
\r
50 summaryTextBox.Text = pkg.Summary;
\r
52 if (isInstalledPackage) {
\r
53 UninstallInformation uninstInfo = ((InstalledPackage) pkg).UninstallInfo;
\r
55 string instPath = null;
\r
56 if ((pkg.Type == InstallerType.ARCHIVE)
\r
57 ||(pkg.Type == InstallerType.ITSELF)) {
\r
58 instPath = Path.Combine(NaGet.Env.ArchiveProgramFiles, pkg.Name);
\r
59 } else if (Directory.Exists(uninstInfo.InstallLocation)) {
\r
60 instPath = uninstInfo.InstallLocation;
\r
63 statusLinkLabel.Links.Clear();
\r
64 if (string.IsNullOrEmpty(instPath)) {
\r
65 statusLinkLabel.Text = "情報が提供されていません";
\r
66 statusLinkLabel.Enabled = false;
\r
68 statusLinkLabel.Text = instPath;
\r
69 statusLinkLabel.Enabled = true;
\r
71 addLinkToLinkLabel(statusLinkLabel, uninstInfo.InstallLocation, uninstInfo.InstallLocation);
\r
74 urlLinkLabel.Links.Clear();
\r
75 if (pkg.Url != null) {
\r
76 urlLinkLabel.Text = pkg.Url.Href;
\r
77 urlLinkLabel.Links.Add(0, pkg.Url.Href.Length, pkg.Url.Href);
\r
78 urlLinkLabel.Enabled = true;
\r
79 urlLabel.Enabled = true;
\r
81 urlLinkLabel.Text = string.Empty;
\r
82 urlLinkLabel.Enabled = false;
\r
83 urlLabel.Enabled = false;
\r
85 tagsTextBox.Text = pkg.Tags;
\r
86 setLinkLabelFromLicense(licenseLinkLabel, pkg.License, (pkg.Url!=null)?pkg.Url.Href:string.Empty);
\r
87 setTypeValueLabel(typeValueLabel, pkg.Type);
\r
88 if (! string.IsNullOrEmpty(pkg.PackageListName)) {
\r
89 packageListNameValueLabel.Text = pkg.PackageListName;
\r
90 packageListNameValueLabel.Enabled = true;
\r
92 packageListNameValueLabel.Enabled = false;
\r
95 tabControl1.TabPages.Clear();
\r
96 if (pkg is InstalledPackage && string.IsNullOrEmpty(pkg.Version)) {
\r
97 tabControl1.Visible = false;
\r
99 tabControl1.Visible = true;
\r
100 foreach (Installer inst in pkg.Installer) {
\r
101 TabPage page = new TabPage(string.Format("インストーラー その{0}", tabControl1.TabCount+1));
\r
102 page.Dock = DockStyle.Fill;
\r
104 InstallerInfoForm instForm = new InstallerInfoForm();
\r
105 instForm.SelectedObject = inst;
\r
106 instForm.Dock = DockStyle.Fill;
\r
107 page.Controls.Add(instForm);
\r
109 tabControl1.TabPages.Add(page);
\r
113 this.Size = new Size(this.Size.Width, (tabControl1.TabCount>0)? 380 : 250);
\r
117 /// インストーラーの種類についてラベルにテキストを設定する
\r
119 /// <param name="typeValueLabel">設定先のラベル</param>
\r
120 /// <param name="instType">インストーラーの種類</param>
\r
121 private static void setLinkLabelFromLicense(LinkLabel linklabel, string license, string publicSiteUrl)
\r
123 linklabel.Enabled = true;
\r
124 switch (license ?? string.Empty) {
\r
126 if (string.IsNullOrEmpty(publicSiteUrl)) {
\r
127 linklabel.Text = "フリーソフトウェア (無償)";
\r
128 linklabel.Enabled = false;
\r
130 linklabel.Text = "フリーソフトウェア (詳細は公式サイトなどで確認してください)";
\r
131 addLinkToLinkLabel(linklabel, "公式サイト", publicSiteUrl);
\r
134 #region オープンソースかつコピーレフト
\r
136 linklabel.Text = "GPL (オープンソース)";
\r
137 addLinkToLinkLabel(linklabel, "GPL", @"http://www.opensource.jp/gpl/gpl.ja.html");
\r
138 addLinkToLinkLabel(linklabel, "オープンソース", @"http://creativecommons.org/licenses/GPL/2.0/deed.ja");
\r
142 linklabel.Text = "GPLv2 (オープンソース)";
\r
143 addLinkToLinkLabel(linklabel, "GPLv2", @"http://www.gnu.org/licenses/gpl-2.0.txt");
\r
147 linklabel.Text = "GPLv3 (オープンソース)";
\r
148 addLinkToLinkLabel(linklabel, "GPLv3", @"http://www.gnu.org/licenses/gpl-3.0.txt");
\r
151 linklabel.Text = "LGPL (オープンソース)";
\r
152 addLinkToLinkLabel(linklabel, "LGPL", @"http://www.opensource.jp/lesser/lgpl.ja.html");
\r
153 addLinkToLinkLabel(linklabel, "オープンソース", @"http://creativecommons.org/licenses/LGPL/2.1/deed.ja");
\r
157 linklabel.Text = "LGPLv2 (オープンソース)";
\r
158 addLinkToLinkLabel(linklabel, "LGPLv2", @"http://www.gnu.org/licenses/lgpl-2.1.txt");
\r
162 linklabel.Text = "LGPLv3 (オープンソース)";
\r
163 addLinkToLinkLabel(linklabel, "LGPLv3", @"http://www.gnu.org/licenses/lgpl-3.0.txt");
\r
167 linklabel.Text = "AGPLv3 (オープンソース)";
\r
168 addLinkToLinkLabel(linklabel, "AGPLv3", @"http://www.gnu.org/licenses/agpl-3.0.txt");
\r
171 linklabel.Text = "MPL (オープンソース)";
\r
172 addLinkToLinkLabel(linklabel, "MPL", @"http://www.mozilla.org/MPL/MPL-1.1.html");
\r
175 linklabel.Text = "CPL (オープンソース)";
\r
176 linklabel.Links.Add(0, linklabel.Text.Length, @"http://sourceforge.jp/projects/opensource/wiki/licenses%2FCommon_Public_License");
\r
179 linklabel.Text = "Artisticライセンス (オープンソース)";
\r
180 addLinkToLinkLabel(linklabel, "Artisticライセンス", @"http://www.perlfoundation.org/artistic_license_2_0");
\r
183 #region オープンソースだが、コピーレフトでない著名なライセンス
\r
185 linklabel.Text = "MITライセンス (オープンソース)";
\r
186 addLinkToLinkLabel(linklabel, "MITライセンス", @"http://www.opensource.org/licenses/mit-license.php");
\r
189 linklabel.Text = "修正済BSDライセンス (オープンソース)";
\r
190 addLinkToLinkLabel(linklabel, "BSDライセンス", @"http://www.opensource.org/licenses/bsd-license.php");
\r
195 linklabel.Text = "Apacheライセンス (オープンソース)";
\r
196 addLinkToLinkLabel(linklabel, "Apacheライセンス", @"http://www.apache.org/licenses/LICENSE-2.0.txt");
\r
199 linklabel.Text = "zlibライセンス";
\r
200 linklabel.Links.Add(0, linklabel.Text.Length, @"http://opentechpress.jp/docs/licenses/zlib-license.shtml");
\r
205 linklabel.Text = "WTFPL";
\r
206 linklabel.Links.Add(0, linklabel.Text.Length, @"http://sam.zoy.org/wtfpl/");
\r
209 linklabel.Text = "煮るなり焼くなり好きにしろライセンス";
\r
210 linklabel.Links.Add(0, linklabel.Text.Length, @"http://www.kmonos.net/nysl/NYSL_withfaq.TXT");
\r
212 case "Public Domain":
\r
213 linklabel.Text = "パブリックドメイン (著作権帰属なし)";
\r
214 linklabel.Links.Add(0, linklabel.Text.Length, @"http://e-words.jp/w/E38391E38396E383AAE38383E382AFE38389E383A1E382A4E383B3.html");
\r
217 if (license.StartsWith("http://")) {
\r
218 linklabel.Text = license;
\r
219 linklabel.Links.Add(0, license.Length, license);
\r
221 linklabel.Text = license;
\r
222 linklabel.Links.Add(0, 0, string.Empty);
\r
230 /// インストーラーの種類についてラベルにテキストを設定する
\r
232 /// <param name="typeValueLabel">設定先のラベル</param>
\r
233 /// <param name="instType">インストーラーの種類</param>
\r
234 private static void setTypeValueLabel(Label typeValueLabel, InstallerType instType)
\r
236 switch (instType) {
\r
237 case InstallerType.ARCHIVE:
\r
238 typeValueLabel.Text = "自己解凍書庫または書庫";
\r
240 case InstallerType.EXEC_INSTALLER:
\r
241 typeValueLabel.Text = "インストーラー形式";
\r
243 case InstallerType.MSI_PACKAGE:
\r
244 typeValueLabel.Text = "MSIファイル形式";
\r
246 case InstallerType.ITSELF:
\r
247 typeValueLabel.Text = "単体の実行ファイル";
\r
250 typeValueLabel.Text = "不明なインストール形式(インストール不能)";
\r
256 /// リンクラベルのリンク挿入便利メソッド
\r
258 /// <param name="linkLabel">対象リンクラベル</param>
\r
259 /// <param name="word">リンク対象文字列</param>
\r
260 /// <param name="link">リンクオブジェクト</param>
\r
261 private static void addLinkToLinkLabel(LinkLabel linkLabel, string word, string link)
\r
263 int pos = linkLabel.Text.IndexOf(word, 0);
\r
265 linkLabel.Links.Add(pos, word.Length, link);
\r
266 } else throw new ArgumentException(string.Format("label text \"{0}\" does not contain \"{1}\"!", linkLabel.Text, word));
\r
269 private void linkLabelLinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
\r
271 string linkData = e.Link.LinkData.ToString();
\r
273 if (Directory.Exists(linkData)) {
\r
274 e.Link.Visited = true;
\r
275 System.Diagnostics.Process.Start(e.Link.LinkData.ToString());
\r
276 } else if (System.Text.RegularExpressions.Regex.IsMatch(linkData, @"^(https?|file)://")) {
\r
277 e.Link.Visited = true;
\r
279 System.Diagnostics.Process.Start(e.Link.LinkData.ToString());
\r
280 } catch (System.ComponentModel.Win32Exception) {
\r
281 MessageBox.Show(string.Format("{0}を開くのに失敗しました。", e.Link.LinkData), "ブラウザ起動エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
\r