OSDN Git Service

na-get-lib,複数ソフトインストールかつハッシュ検証失敗したとき、ハッシュ検証成功したソフトの状態がおかしくなる不具合を修正
[applistation/AppliStation.git] / AppliStation / PackageListView.cs
index daf2a5a..484ceeb 100644 (file)
@@ -5,6 +5,7 @@ using System.Collections.Generic;
 using System.ComponentModel;\r
 using NaGet.Packages;\r
 using NaGet.Packages.Install;\r
+using AppliStation.PackageInfo;\r
 \r
 namespace AppliStation\r
 {\r
@@ -30,11 +31,14 @@ namespace AppliStation
                \r
                string filteringKeyword = null;\r
                \r
+               AppliStation.Util.ListViewItemSortComparer sortComparer;\r
+               \r
                [Category("Action")]\r
                public event EventHandler FilterUpdated;\r
                \r
                public PackageListView()\r
                {\r
+                       ListViewItemSorter = sortComparer = new AppliStation.Util.ListViewItemSortComparer();\r
                }\r
                \r
                /// <summary>\r
@@ -125,10 +129,18 @@ namespace AppliStation
                        string[] labels = new string[this.Columns.Count];\r
                        foreach (ColumnHeader header in this.Columns) {\r
                                string tag = header.Tag as string;\r
+                               \r
                                if (tag == "Name")                              labels[header.Index] = pkg.Name;\r
                                if (tag == "Version")                   labels[header.Index] = pkg.Version;\r
                                if (tag == "Summary")                   labels[header.Index] = pkg.Summary;\r
                                if (tag == "PackageListName")   labels[header.Index] = pkg.PackageListName;\r
+                               if (tag == "License")                   labels[header.Index] = PackageDescripter.GetLicenseValueLabel(pkg);\r
+                               if (tag == "InstallDate") {\r
+                                       InstalledPackage instPkg = pkg as InstalledPackage;\r
+                                       if (instPkg != null && instPkg.UninstallInfo.InstallDate.HasValue) {\r
+                                               labels[header.Index] = instPkg.UninstallInfo.InstallDate.Value.ToShortDateString();\r
+                                       }\r
+                               }\r
                        }\r
                        \r
                        ListViewItem item = new ListViewItem(labels);\r
@@ -153,7 +165,7 @@ namespace AppliStation
                        // ソフトリストの中身のパッケージ\r
                        if ((filteringType & PackageListViewPkgTypeFilter.NotInstalled) != 0) {\r
                                foreach (Package pkg in pkgListMan.AvailablePkgList.Search(keyword)) {\r
-                                       if (Installation.GetPreferInstallerIndex(pkg) >= 0) { // インストール可能\r
+                                       if (Installation.IsInstallablePackage(pkg)) { // インストール可能\r
                                                bool isInstalledAS = (pkgListMan.InstalledPkgList.GetPackageForName(pkg.Name) != null);\r
                                                bool isInstalledSys = (pkgListMan.SystemInstalledPkgList.GetPackageForName(pkg.Name) != null);\r
                                                \r
@@ -217,47 +229,54 @@ namespace AppliStation
                \r
                #region Sort関連\r
                \r
-               AppliStation.Util.ListViewItemSortComparer sortComparer;\r
-               \r
-               protected override void OnColumnClick(ColumnClickEventArgs e)\r
-               {\r
-                       if (this.HeaderStyle == ColumnHeaderStyle.Clickable) {\r
-                               onColumnClick(e);\r
+               /// <summary>\r
+               /// 選択しているコラムを設定あるいは取得を行う。\r
+               /// </summary>\r
+               public ColumnHeader SortColumn {\r
+                       get {\r
+                               return sortComparer.Column;\r
+                       }\r
+                       set {\r
+                               sortColumn(value);\r
                        }\r
-                       \r
-                       base.OnColumnClick(e);\r
                }\r
                \r
-               private void onColumnClick(ColumnClickEventArgs e)\r
+               protected void sortColumn(ColumnHeader column)\r
                {\r
+                       int columnIndex = (column != null)? column.Index : -1;\r
                        SortOrder order = SortOrder.None;\r
                        \r
-                       if (sortComparer == null) {\r
-                               order = SortOrder.Ascending;\r
-                               sortComparer = new AppliStation.Util.ListViewItemSortComparer(e.Column, order);\r
-                               ListViewItemSorter = sortComparer;\r
-                       } else {\r
-                               if (sortComparer.Column == e.Column) {\r
-                                       order = (sortComparer.Order == SortOrder.Ascending)? SortOrder.Descending : SortOrder.Ascending;\r
+                       if (columnIndex < 0) {\r
+                               sortComparer.Order = order = SortOrder.None;\r
+                       } else if (sortComparer.ColumnIndex == columnIndex) {\r
+                               order = (sortComparer.Order == SortOrder.Ascending)? SortOrder.Descending : SortOrder.Ascending;\r
                                        \r
-                                       sortComparer.Order = order;\r
-                               } else {\r
-                                       order = sortComparer.Order;\r
-                                       sortComparer.Column = e.Column;\r
-                               }\r
-                               \r
-                               Sort();\r
+                               sortComparer.Order = order;\r
+                       } else {\r
+                               order = SortOrder.Ascending;\r
+                               sortComparer.Column = column;\r
                        }\r
-                       AppliStation.Util.NativeMethods.ColumnHeader_SetSortState(this, e.Column, order);\r
+                       Sort();\r
+                       \r
+                       AppliStation.Util.NativeMethods.ColumnHeader_SetSortState(this, columnIndex, order);\r
                        \r
                        // ソート対象列の色付け\r
                        try {\r
-                               // SendMessage(hWnd, LVM_SETSELECTEDCOLUMN, column, NULL);\r
-                               AppliStation.Util.NativeMethods.SendMessage(this.Handle, 0x1000+140, new IntPtr(e.Column), IntPtr.Zero);\r
+                               // SendMessage(hWnd, LVM_SETSELECTEDCOLUMN, columnIndex, NULL);\r
+                               AppliStation.Util.NativeMethods.SendMessage(this.Handle, 0x1000+140, new IntPtr(columnIndex), IntPtr.Zero);\r
                        } catch (Exception) {   \r
                        }\r
                }\r
                \r
+               protected override void OnColumnClick(ColumnClickEventArgs e)\r
+               {\r
+                       if (this.HeaderStyle == ColumnHeaderStyle.Clickable) {\r
+                               sortColumn(this.Columns[e.Column]);\r
+                       }\r
+                       \r
+                       base.OnColumnClick(e);\r
+               }\r
+               \r
                #endregion\r
        }\r
 }\r