OSDN Git Service

AppliStation-GUI,ヘッダ部を右クリックしたときの動作を変更し、コラム表示などのメニューが表示されるようにした。
authorttp <ttp@users.sourceforge.jp>
Mon, 23 Nov 2009 11:16:36 +0000 (20:16 +0900)
committerttp <ttp@users.sourceforge.jp>
Mon, 23 Nov 2009 11:16:36 +0000 (20:16 +0900)
AppliStation/AppliStation.Util/NativeMethods.cs
AppliStation/PackageListViewForm.cs

index 5d46eb6..2bd8d06 100644 (file)
@@ -214,6 +214,28 @@ namespace AppliStation.Util
                        }\r
                }\r
                \r
+               /// <summary>\r
+               /// ヘッダ部のサイズを返す\r
+               /// </summary>\r
+               /// <param name="listView">ListView</param>\r
+               /// <returns>ヘッダ部のクライアントサイズ</returns>\r
+               public static Size ColumnHeader_GetSize(ListView listView)\r
+               {\r
+                       LRECT lrect;\r
+                       \r
+                       try {\r
+                               // SendMessage(hWnd, LVM_GETHEADER, NULL, NULL);\r
+                               IntPtr hWnd = SendMessage(listView.Handle, 0x101F, IntPtr.Zero, IntPtr.Zero);\r
+                               GetClientRect(hWnd, out lrect);\r
+                       } catch {\r
+                               lrect.Left = lrect.Right = lrect.Top = lrect.Bottom = 0;\r
+                       }\r
+                       \r
+                       Size size = new Size(lrect.Right - lrect.Left,\r
+                                       lrect.Bottom - lrect.Top);\r
+                       return size;\r
+               }\r
+               \r
                #endregion\r
                \r
                #endregion\r
@@ -396,5 +418,16 @@ namespace AppliStation.Util
                [DllImport("uxtheme.dll", ExactSpelling=true, CharSet=CharSet.Unicode)]\r
                internal static extern int SetWindowTheme(IntPtr hWnd, String pszSubAppName, String pszSubIdList);\r
                \r
+               [Serializable]\r
+               [StructLayout(LayoutKind.Sequential)]\r
+               private struct LRECT {\r
+                       public int Left;\r
+                       public int Top;\r
+                       public int Right;\r
+                       public int Bottom;\r
+               }\r
+               \r
+               [DllImport("user32.dll")]\r
+               private static extern bool GetClientRect(IntPtr hWnd, out LRECT lpRect);\r
        }\r
 }\r
index 4a5b13d..9433fab 100644 (file)
@@ -521,8 +521,22 @@ namespace AppliStation
                        bool selectionIsOnlyOne = packageListView.SelectedItems.Count == 1;\r
                        bool hasSelection = packageListView.SelectedItems.Count > 0;\r
                        \r
-                       // インストール先のフォルダの設定\r
-                       updateLauncherMenuItem(installedDirectoryToolStripMenuItem);\r
+                       updateSelectedPackages();\r
+                       \r
+                       if (packageListView.View == View.Details) {\r
+                               // ヘッダ部がクリックされたとき、パッケージが選択されていないものとして扱って処理をする。\r
+                               int headerHeight = AppliStation.Util.NativeMethods.ColumnHeader_GetSize(packageListView).Height;\r
+                               if (packageListView.PointToClient(packageListContextMenuStrip.Location).Y < headerHeight) {\r
+                                       selectionIsOnlyOne = hasSelection = false;\r
+                                       installToolStripMenuItem.Visible = false;\r
+                                       uninstallToolStripMenuItem.Visible = false;\r
+                               }\r
+                       }\r
+                       \r
+                       if (selectionIsOnlyOne) {\r
+                               // インストール先のフォルダの設定\r
+                               updateLauncherMenuItem(installedDirectoryToolStripMenuItem);\r
+                       }\r
                        \r
                        packageListContextMenuStripSeparator.Visible = selectionIsOnlyOne;\r
                        webResourceToolStripMenuItem.Visible = selectionIsOnlyOne;\r