/// </summary>\r
public partial class InstallationConfirmForm : Form\r
{\r
- private Installation[] requiredInstallations = null;\r
- \r
private Installation[] selectedInstallations = null;\r
\r
+ private Installation[] updateInstallations = null;\r
+ \r
+ private Installation[] requiredInstallations = null;\r
+ \r
private PackageListsManager pkgListMan;\r
\r
public IEnumerable<Installation> Installations {\r
get {\r
- return NaGet.Utils.MeargeEnumerable<Installation>(requiredInstallations, selectedInstallations);\r
+ return NaGet.Utils.MergeEnumerable<Installation>(requiredInstallations, selectedInstallations);\r
}\r
set {\r
+ List<Installation> selectedInstList = new List<Installation>();\r
+ List<Installation> updateInstList = new List<Installation>();\r
+ \r
requiredInstallations = null;\r
- selectedInstallations = NaGet.Utils.IEnumerable2Array<Installation>(value);\r
+ foreach (Installation inst in value) {\r
+ Package instPkg = pkgListMan.InstalledPkgList.GetPackageForName(inst.InstalledPackage.Name) ??\r
+ pkgListMan.SystemInstalledPkgList.GetPackageForName(inst.InstalledPackage.Name);\r
+ \r
+ if (instPkg != null) {\r
+ updateInstList.Add(inst);\r
+ } else {\r
+ selectedInstList.Add(inst);\r
+ }\r
+ }\r
+ selectedInstallations = selectedInstList.ToArray();\r
+ updateInstallations = updateInstList.ToArray();\r
\r
updateInstsListView();\r
}\r
/// </summary>\r
private void updateInstsListView()\r
{\r
- instsListView.Items.Clear();\r
+ if (instsListView.Items.Count > 0) {\r
+ instsListView.Items.Clear();\r
+ }\r
\r
addInstsListItemPerGroup(requiredInstallations, instsListView.Groups["requires"], true);\r
addInstsListItemPerGroup(selectedInstallations, instsListView.Groups["install"], false);\r
+ addInstsListItemPerGroup(updateInstallations, instsListView.Groups["update"], false);\r
\r
InstsListViewItemChecked(instsListView, null);\r
instsListView.Refresh();\r
string[] itemData = new string[instsListView.Columns.Count];\r
itemData[nameColumnHeader.Index] = pkg.Name;\r
\r
+ inst.Silent = true; // silent install as possible!\r
+ \r
Package curPkg = null;\r
if (pkgListMan != null) { \r
curPkg = pkgListMan.InstalledPkgList.GetPackageForName(pkg.Name) ??\r
itemData[versionColumnHeader.Index] = pkg.Version;\r
itemData[currentVersionColumnHeader.Index] = (curPkg != null)? curPkg.Version : "-";\r
// itemData[silentInstColumnHeader.Index] の設定は instViewUpdateSilentInstallView で\r
+ itemData[pkgListNameColumnHeader.Index] = pkg.PackageListName;\r
\r
ListViewItem item = new ListViewItem(itemData);\r
item.Tag = inst;\r
{\r
System.Windows.Forms.ListView.CheckedListViewItemCollection checkeds = instsListView.CheckedItems;\r
\r
+ runasCheckBox.Checked = GetShouldUseRunas();\r
+ updateUseRunas();\r
+ \r
okButton.Enabled = (checkeds != null) && (checkeds.Count > 0);\r
+ \r
+ checkUnselectedDependencies();\r
}\r
\r
void InstsListViewContextMenuStripOpening(object sender, System.ComponentModel.CancelEventArgs e)\r
\r
void InstallationConfirmFormShown(object sender, EventArgs e)\r
{\r
- System.Threading.Thread thread = new System.Threading.Thread(\r
- new System.Threading.ThreadStart(resolveDependecies));\r
- thread.Start();\r
+ if (InvokeRequired) {\r
+ Invoke(new MethodInvoker(resolveDependecies));\r
+ } else {\r
+ resolveDependecies();\r
+ }\r
}\r
\r
/// <summary>\r
\r
requiredInstallations = dependencies;\r
\r
- updateInstsListView();\r
+ addInstsListItemPerGroup(requiredInstallations, instsListView.Groups["requires"], true);\r
+ \r
+ InstsListViewItemChecked(instsListView, null);\r
+ instsListView.Refresh();\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
/// </summary>\r
public Installation[] CheckedInstallations {\r
\r
private void updateUseRunas()\r
{\r
- if (UseRunas) {\r
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InstallationConfirmForm));\r
- okButton.Image = ((System.Drawing.Bitmap)(resources.GetObject("okButton.Image")));\r
- } else {\r
- okButton.Image = null;\r
- }\r
+ AppliStation.Util.NativeMethods.Button_SetElevationRequiredState(okButton, UseRunas);\r
}\r
\r
#endregion\r
-\r
}\r
}\r