+ /// 依存関係を解決する\r
+ /// </summary>\r
+ private void resolveDependecies()\r
+ {\r
+ if (requiredInstallations == null) {\r
+ Installation[] resolved, dependencies;\r
+ \r
+ instsListView.BeginUpdate();\r
+ \r
+ DependeciesResolver.ResolveInstallations(\r
+ selectedInstallations,\r
+ pkgListMan,\r
+ out resolved,\r
+ out dependencies);\r
+ \r
+ requiredInstallations = dependencies;\r
+ \r
+ addInstsListItemPerGroup(requiredInstallations, instsListView.Groups["requires"], true);\r
+ \r
+ InstsListViewItemChecked(instsListView, null);\r
+ updateSilentInstallAsPossibleCheckBox();\r
+ instsListView.EndUpdate();\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// 依存関係を確認してGUIに反映させる。\r
+ /// 選択されていないが依存関係上必要なソフトを探し出す。\r
+ /// </summary>\r
+ /// <returns>選択されていないが依存関係上必要なソフトの個数(何もない場合はゼロ)</returns>\r
+ private uint checkUnselectedDependencies()\r
+ {\r
+ uint retVal = 0;\r
+ \r
+ List<Package> instPkgs = new List<Package>();\r
+ foreach (Installation inst in Installations) {\r
+ instPkgs.Add(inst.InstalledPackage);\r
+ }\r
+ \r
+ List<Package> pkg = new List<Package>();\r
+ foreach (Installation inst in DependeciesResolver.CreateRequiresInstallations(CheckedInstallations, pkgListMan, instPkgs)) {\r
+ pkg.Add(inst.InstalledPackage);\r
+ }\r
+ \r
+ foreach (ListViewItem item in instsListView.Items) {\r
+ if ((pkg.IndexOf(((Installation) item.Tag).InstalledPackage) >= 0) && !item.Checked) {\r
+ item.ForeColor = Color.Red;\r
+ retVal++;\r
+ } else {\r
+ item.ForeColor = Color.Empty;\r
+ }\r
+ \r
+ }\r
+ return retVal;\r
+ }\r
+ \r
+ /// <summary>\r
+ /// インストールするよう選択されたパッケージの配列\r