/// </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
+ private ushort instslistviewitemcheckedguardcounter = 0;\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.BeginUpdate();\r
+ \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
+ updateCheckBoxStatuses();\r
+ updateSilentInstallAsPossibleCheckBox();\r
\r
- InstsListViewItemChecked(instsListView, null);\r
- instsListView.Refresh();\r
+ instsListView.EndUpdate();\r
}\r
\r
/// <summary>\r
// まず所属グループのアイテムをすべて削除する\r
if (insts == null) return;\r
\r
+ instsListView.BeginUpdate();\r
+ \r
List<ListViewItem> itemsToAdd = new List<ListViewItem>();\r
foreach (Installation inst in insts) {\r
Package pkg = inst.InstalledPackage;\r
inst.Silent = true; // silent install as possible!\r
\r
Package curPkg = null;\r
- if (pkgListMan != null) { \r
+ if (pkgListMan != null) {\r
curPkg = pkgListMan.InstalledPkgList.GetPackageForName(pkg.Name) ??\r
pkgListMan.SystemInstalledPkgList.GetPackageForName(pkg.Name);\r
}\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
} else {\r
instsListView.Items.AddRange(itemsToAdd.ToArray());\r
}\r
+ \r
+ instsListView.EndUpdate();\r
}\r
\r
#endregion\r
/// <summary>\r
/// アイテムのサイレントインストール部分の表示の更新を行う。\r
/// </summary>\r
- /// <param name="item">対象のインストーラのリストアイテム</param>\r
+ /// <param name="item">対象ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83©ã\83¼ã\81®ã\83ªã\82¹ã\83\88ã\82¢ã\82¤ã\83\86ã\83 </param>\r
private void instViewUpdateSilentInstallView(ListViewItem item)\r
{\r
Installation inst = (Installation) item.Tag;\r
\r
#endregion\r
\r
- void InstsListViewItemChecked(object sender, ItemCheckedEventArgs e)\r
+ private void updateCheckBoxStatuses()\r
{\r
+ System.Windows.Forms.ListView.ListViewItemCollection items = instsListView.Items;\r
System.Windows.Forms.ListView.CheckedListViewItemCollection checkeds = instsListView.CheckedItems;\r
\r
+ instslistviewitemcheckedguardcounter ++;\r
+ \r
+ // すべて選択/非選択\r
+ selectAllCheckBox.CheckState =\r
+ (checkeds == null || checkeds.Count == 0)? CheckState.Unchecked :\r
+ (checkeds.Count == items.Count)? CheckState.Checked :\r
+ CheckState.Indeterminate;\r
+ \r
+ // runas情報\r
runasCheckBox.Checked = GetShouldUseRunas();\r
updateUseRunas();\r
- \r
+ \r
+ // インストール可能か\r
okButton.Enabled = (checkeds != null) && (checkeds.Count > 0);\r
\r
checkUnselectedDependencies();\r
+ \r
+ instslistviewitemcheckedguardcounter --;\r
}\r
- \r
+ \r
+ void InstsListViewItemChecked(object sender, ItemCheckedEventArgs e)\r
+ {\r
+ if (instslistviewitemcheckedguardcounter == 0) {\r
+ updateCheckBoxStatuses();\r
+ }\r
+ }\r
+ \r
void InstsListViewContextMenuStripOpening(object sender, System.ComponentModel.CancelEventArgs e)\r
{\r
System.Windows.Forms.ListView.CheckedIndexCollection chkIdxes = instsListView.CheckedIndices;\r
break;\r
}\r
}\r
+ } else {\r
+ e.Cancel = true;\r
}\r
- instListToolStripSeparator.Visible = selIdxes.Count > 0;\r
- \r
- \r
- selectAllInstsStripMenuItem.Enabled = chkIdxes.Count < instsListView.Items.Count;\r
- unselectAllInstsStripMenuItem.Enabled = chkIdxes.Count > 0;\r
}\r
\r
void SilentInstallStripMenuItemClick(object sender, EventArgs e)\r
{\r
+ instsListView.BeginUpdate();\r
bool silent = ! silentInstallStripMenuItem.Checked;\r
foreach (ListViewItem item in instsListView.SelectedItems) {\r
((Installation) item.Tag).Silent = silent;\r
instViewUpdateSilentInstallView(item);\r
}\r
+ updateSilentInstallAsPossibleCheckBox();\r
+ instsListView.EndUpdate();\r
}\r
- \r
- void SelectAllInstsStripMenuItemClick(object sender, EventArgs e)\r
+ \r
+ void SelectAllCheckBoxCheckedChanged(object sender, EventArgs e)\r
{\r
+ instsListView.BeginUpdate();\r
+ \r
+ instslistviewitemcheckedguardcounter ++;\r
+ \r
+ if (selectAllCheckBox.CheckState == CheckState.Checked) {\r
+ foreach (ListViewItem item in instsListView.Items) {\r
+ item.Checked = true;\r
+ }\r
+ }\r
+ if (selectAllCheckBox.CheckState == CheckState.Unchecked) {\r
+ foreach (ListViewItem item in instsListView.Items) {\r
+ item.Checked = false;\r
+ }\r
+ }\r
+ \r
+ instslistviewitemcheckedguardcounter --;\r
+ \r
+ updateCheckBoxStatuses();\r
+ \r
+ instsListView.EndUpdate();\r
+ }\r
+ \r
+ void updateSilentInstallAsPossibleCheckBox()\r
+ {\r
+ bool isAllSilentAsPossible = true;\r
+ bool isAllNotSilentAsPossible = true;\r
+ bool canChangeSilent = false;\r
+ \r
foreach (ListViewItem item in instsListView.Items) {\r
- item.Checked = true;\r
+ Installation inst = item.Tag as Installation;\r
+ if (inst != null) {\r
+ if (inst.Silent) {\r
+ if (! inst.SupportsSilentOnly) {\r
+ isAllNotSilentAsPossible = false;\r
+ canChangeSilent = true;\r
+ }\r
+ } else {\r
+ if (inst.IsSupportsSilent) {\r
+ isAllSilentAsPossible = false;\r
+ canChangeSilent = true;\r
+ }\r
+ }\r
+ }\r
}\r
- instsListView.Refresh();\r
+ \r
+ silentInstallAsPossibleCheckBox.Enabled = canChangeSilent;\r
+ silentInstallAsPossibleCheckBox.CheckState =\r
+ (isAllSilentAsPossible)? CheckState.Checked :\r
+ (isAllNotSilentAsPossible)? CheckState.Unchecked :\r
+ CheckState.Indeterminate;\r
}\r
\r
- void UnselectAllInstsStripMenuItemClick(object sender, EventArgs e)\r
+ void SilentInstallAsPossibleCheckBoxCheckedChanged(object sender, EventArgs e)\r
{\r
- foreach (ListViewItem item in instsListView.CheckedItems) {\r
- item.Checked = false;\r
+ instsListView.BeginUpdate();\r
+ if (silentInstallAsPossibleCheckBox.CheckState == CheckState.Checked) {\r
+ foreach (ListViewItem item in instsListView.Items) {\r
+ Installation inst = item.Tag as Installation;\r
+ if (inst != null) {\r
+ if (inst.IsSupportsSilent && inst.Silent == false) {\r
+ inst.Silent = true;\r
+ instViewUpdateSilentInstallView(item);\r
+ }\r
+ }\r
+ }\r
}\r
- instsListView.Refresh();\r
+ if (silentInstallAsPossibleCheckBox.CheckState == CheckState.Unchecked) {\r
+ foreach (ListViewItem item in instsListView.Items) {\r
+ Installation inst = item.Tag as Installation;\r
+ if (inst != null) {\r
+ if ((!inst.SupportsSilentOnly) && inst.Silent == true) {\r
+ inst.Silent = false;\r
+ instViewUpdateSilentInstallView(item);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ instsListView.EndUpdate();\r
}\r
\r
void InstallationConfirmFormShown(object sender, EventArgs e)\r
if (requiredInstallations == null) {\r
Installation[] resolved, dependencies;\r
\r
+ instsListView.BeginUpdate();\r
+ \r
DependeciesResolver.ResolveInstallations(\r
selectedInstallations,\r
pkgListMan,\r
\r
addInstsListItemPerGroup(requiredInstallations, instsListView.Groups["requires"], true);\r
\r
- InstsListViewItemChecked(instsListView, null);\r
- instsListView.Refresh();\r
+ updateCheckBoxStatuses();\r
+ updateSilentInstallAsPossibleCheckBox();\r
+ instsListView.EndUpdate();\r
}\r
}\r
\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)) {\r
+ foreach (Installation inst in DependeciesResolver.CreateRequiresInstallations(CheckedInstallations, pkgListMan, instPkgs)) {\r
pkg.Add(inst.InstalledPackage);\r
}\r
\r
} else {\r
item.ForeColor = Color.Empty;\r
}\r
- \r
+ \r
}\r
return retVal;\r
}\r
{\r
if (NaGet.Utils.IsAdministrators()) {\r
// 管理者権限で動いている場合は不要\r
- return false; \r
+ return false;\r
} else if (NaGet.Utils.IsUACEnabled()) {\r
// UACが適用されている場合は標準では不要とする\r
- return false; \r
+ return false;\r
}\r
\r
- // ひとつでもPCターゲットなインストーラがあれば必要とする\r
+ // ã\81²ã\81¨ã\81¤ã\81§ã\82\82PCã\82¿ã\83¼ã\82²ã\83\83ã\83\88ã\81ªã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83©ã\83¼ã\81\8cã\81\82ã\82\8cã\81°å¿\85è¦\81ã\81¨ã\81\99ã\82\8b\r
foreach (Installation inst in CheckedInstallations) {\r
if (inst.TargetPC) return true;\r
}\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