OSDN Git Service

na-get-lib,パフォーマンスチューニングなど(動作変更なし)
[applistation/AppliStation.git] / AppliStation / AppliStation.Util / ToolStripPetitLauncherMenuItem.cs
index b90d674..be9e074 100644 (file)
@@ -81,24 +81,31 @@ namespace AppliStation.Util
                        }\r
                }\r
                \r
-               private void _insertItemFor(string filepath, ref bool cmdIsAdded)\r
+               private void _insertItemFor(string filepath, ref bool cmdIsAdded, string basedir)\r
                {\r
                        string extension = Path.GetExtension(filepath).ToLower();\r
+                       \r
+                       string dirname = Path.GetDirectoryName(filepath);\r
+                       string itemtext = NaGet.Utils.GetRelativePath(basedir, filepath);\r
+#if DEBUG\r
+Debug.Assert(! itemtext.Contains(".."), string.Format("{2} -- base:{0}, dirname:{1}", basedir, dirname, itemtext));\r
+#endif\r
+                       \r
                        if (extension == ".exe") {\r
                                switch (NaGet.InteropServices.PEFileInfoUtils.GetPEFileType(filepath)) {\r
-                                       case NaGet.InteropServices.PEFileInfoUtils.PEFileType.WinGUI:\r
-                                               _addToItemsInv(CreateMenuItemForFile(filepath));\r
+                                       case NaGet.InteropServices.PEFileType.WinGUI:\r
+                                               _addToItemsInv(CreateMenuItemForFile(filepath, itemtext));\r
                                                break;\r
-                                       case NaGet.InteropServices.PEFileInfoUtils.PEFileType.WinConsole:\r
-                                       case NaGet.InteropServices.PEFileInfoUtils.PEFileType.MSDosCom:\r
+                                       case NaGet.InteropServices.PEFileType.WinConsole:\r
+                                       case NaGet.InteropServices.PEFileType.MSDosCom:\r
                                                if (! cmdIsAdded) {\r
-                                                       _insertToItemsInv(0, CreateMenuItemForCmdAt(Path.GetDirectoryName(filepath)));\r
+                                                       _insertToItemsInv(0, CreateMenuItemForCmdAt(basedir));\r
                                                        cmdIsAdded = true;\r
                                                }\r
                                                break;\r
                                }\r
                        } else if ((extension == ".bat") || (extension == ".lnk")) {\r
-                               _addToItemsInv(CreateMenuItemForFile(filepath));\r
+                               _addToItemsInv(CreateMenuItemForFile(filepath, itemtext));\r
                        }\r
                }\r
                \r
@@ -106,7 +113,7 @@ namespace AppliStation.Util
                private void buildItems()\r
                {\r
                        try {\r
-                               string folderPath = baseFolderPath;\r
+                               string folderPath = Path.GetFullPath(baseFolderPath);\r
                                ToolStripSeparator sep = new ToolStripSeparator();\r
                                bool cmdIsAdded = false;\r
                                \r
@@ -117,7 +124,16 @@ namespace AppliStation.Util
                                        foreach (string filepath in Directory.GetFiles(folderPath)) {\r
                                                if (baseFolderPath != folderPath) return; // 途中でなんか操作されているならば終了\r
                                                \r
-                                               _insertItemFor(filepath, ref cmdIsAdded);\r
+                                               _insertItemFor(filepath, ref cmdIsAdded, folderPath);\r
+                                       }\r
+                                       \r
+                                       string bindir = Path.Combine(folderPath, "bin");\r
+                                       if (Directory.Exists(bindir)) {\r
+                                               foreach (string filepath in Directory.GetFiles(bindir)) {\r
+                                                       if (baseFolderPath != folderPath) return; // 途中でなんか操作されているならば終了\r
+                                                       \r
+                                                       _insertItemFor(filepath, ref cmdIsAdded, folderPath);\r
+                                               }\r
                                        }\r
                                }\r
                        } catch (ThreadInterruptedException) {}\r
@@ -132,9 +148,9 @@ namespace AppliStation.Util
                /// <returns></returns>\r
                public static ToolStripMenuItem CreateMenuItemForFolder(string folderPath)\r
                {\r
-                       ToolStripMenuItem item = CreateMenuItemForFile(folderPath);\r
+                       ToolStripMenuItem item = CreateMenuItemForFile(folderPath, "フォルダを開く(&O)");\r
                        item.Image = GUIUtils.GetShellIconForFolder().ToBitmap();\r
-                       item.Text = "フォルダを開く(&O)";\r
+                       item.ShowShortcutKeys = true;\r
                        return item;\r
                }\r
 \r
@@ -143,12 +159,11 @@ namespace AppliStation.Util
                /// </summary>\r
                /// <param name="filePath">ファイルパス</param>\r
                /// <returns>生成されたメニューアイテム</returns>\r
-               public static ToolStripMenuItem CreateMenuItemForFile(string filePath)\r
+               public static ToolStripMenuItem CreateMenuItemForFile(string filePath, string text)\r
                {\r
                        ToolStripMenuItem item = new ToolStripMenuItem();\r
-                       string fileName = Path.GetFileName(filePath);\r
                        \r
-                       item.Text = fileName;\r
+                       item.Text = text;\r
                        item.ShowShortcutKeys = false;\r
                        item.Tag = filePath;\r
                        item.Click += new System.EventHandler(menuItemForFileClicked);\r