OSDN Git Service

Add Paste Command at shell extension.
[tortoisegit/TortoiseGitJp.git] / src / TortoiseShell / ContextMenu.cpp
index 43746b5..83ae0e2 100644 (file)
@@ -63,7 +63,7 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
        ITEMIS_INSVN|ITEMIS_GITSVN, 0, ITEMIS_FOLDERINSVN|ITEMIS_GITSVN, 0, 0, 0, 0, 0 },\r
 \r
        { ShellMenuGitSVNRebase,                                MENUSVNREBASE,          IDI_REBASE,                             IDS_MENUSVNREBASE,                              IDS_MENUSVNREBASE_DESC,\r
-       ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_GITSVN, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_GITSVN, 0, 0, 0, 0, 0},\r
+       ITEMIS_INSVN|ITEMIS_GITSVN, 0, ITEMIS_FOLDERINSVN|ITEMIS_GITSVN, 0, 0, 0, 0, 0},\r
 \r
        { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
 \r
@@ -93,7 +93,7 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
        ITEMIS_INSVN|ITEMIS_ONLYONE, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0},\r
 \r
        { ShellMenuRebase,                                          MENUREBASE,                 IDI_REBASE,                             IDS_MENUREBASE,                         IDS_MENUREBASE,\r
-       ITEMIS_INSVN|ITEMIS_ONLYONE, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0},\r
+       ITEMIS_INSVN, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0},\r
 \r
 //     { ShellMenuRevisionGraph,                               MENUREVISIONGRAPH,      IDI_REVISIONGRAPH,              IDS_MENUREVISIONGRAPH,          IDS_MENUDESCREVISIONGRAPH,\r
 //     ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED, 0, 0, 0, 0},\r
@@ -101,7 +101,9 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
        { ShellMenuStashSave,                               MENUSTASHSAVE,              IDI_COMMIT,                             IDS_MENUSTASHSAVE,                              IDS_MENUSTASHSAVE,\r
        ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
        { ShellMenuStashApply,                              MENUSTASHAPPLY,         IDI_RELOCATE,                       IDS_MENUSTASHAPPLY,                             IDS_MENUSTASHAPPLY,\r
-       ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
+       ITEMIS_INSVN|ITEMIS_STASH, 0, ITEMIS_FOLDERINSVN|ITEMIS_STASH, 0, 0, 0, 0, 0 },\r
+       { ShellMenuStashPop,                                MENUSTASHPOP,           IDI_RELOCATE,                       IDS_MENUSTASHPOP,                               IDS_MENUSTASHPOP,\r
+       ITEMIS_INSVN|ITEMIS_STASH, 0, ITEMIS_FOLDERINSVN|ITEMIS_STASH, 0, 0, 0, 0, 0 },\r
        { ShellMenuStashList,                               MENUSTASHAPPLY,         IDI_LOG,                            IDS_MENUSTASHLIST,                              IDS_MENUSTASHLIST,\r
        ITEMIS_INSVN|ITEMIS_EXTENDED, 0, ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 },\r
 \r
@@ -232,8 +234,8 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
 //     ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
 \r
        { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
-//     { ShellMenuClipPaste,                                   MENUCLIPPASTE,          IDI_CLIPPASTE,                  IDS_MENUCLIPPASTE,                      IDS_MENUDESCCLIPPASTE,\r
-//     ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_PATHINCLIPBOARD, 0, 0, 0, 0, 0, 0, 0 },\r
+       { ShellMenuClipPaste,                                   MENUCLIPPASTE,          IDI_CLIPPASTE,                  IDS_MENUCLIPPASTE,                      IDS_MENUDESCCLIPPASTE,\r
+       ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_PATHINCLIPBOARD, 0, 0, 0, 0, 0, 0, 0 },\r
 \r
        { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
 \r
@@ -384,17 +386,11 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder,
 \r
                                                        // TODO: should we really assume any sub-directory to be versioned\r
                                                        //       or only if it contains versioned files\r
-                                                       if ( askedpath.IsDirectory() )\r
-                                                       {\r
-                                                               if (askedpath.HasAdminDir())\r
-                                                                       itemStates |= ITEMIS_INSVN;\r
-                                                               if (askedpath.HasSubmodules())\r
-                                                               {\r
-                                                                       itemStates |= ITEMIS_SUBMODULE;\r
-                                                               }\r
-                                                       }\r
-                                                       if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none))\r
-                                                               itemStates |= ITEMIS_INSVN;\r
+                                                       itemStates |= askedpath.GetAdminDirMask();\r
+                                                       \r
+                                                       if ((status == git_wc_status_unversioned) || (status == git_wc_status_ignored) || (status == git_wc_status_none))\r
+                                                               itemStates &= ~ITEMIS_INSVN;\r
+\r
                                                        if (status == git_wc_status_ignored)\r
                                                                itemStates |= ITEMIS_IGNORED;\r
                                                        if (status == git_wc_status_normal)\r
@@ -495,19 +491,10 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder,
                                                                }\r
                                                        }\r
 \r
-                                                       // TODO: should we really assume any sub-directory to be versioned\r
-                                                       //       or only if it contains versioned files\r
-                                                       if ( strpath.IsDirectory() )\r
-                                                       {\r
-                                                               if (strpath.HasAdminDir())\r
-                                                                       itemStates |= ITEMIS_INSVN;\r
-                                                               if (strpath.HasSubmodules())\r
-                                                               {\r
-                                                                       itemStates |= ITEMIS_SUBMODULE;\r
-                                                               }\r
-                                                       }\r
-                                                       if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none))\r
-                                                               itemStates |= ITEMIS_INSVN;\r
+                                                       itemStates |= strpath.GetAdminDirMask();                \r
+                                                       \r
+                                                       if ((status == git_wc_status_unversioned)||(status == git_wc_status_ignored)||(status == git_wc_status_none))\r
+                                                               itemStates &= ~ITEMIS_INSVN;\r
                                                        if (status == git_wc_status_ignored)\r
                                                        {\r
                                                                itemStates |= ITEMIS_IGNORED;\r
@@ -527,6 +514,7 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder,
 //                                                                     }\r
 //                                                             }\r
                                                        }\r
+                                       \r
                                                        if (status == git_wc_status_normal)\r
                                                                itemStates |= ITEMIS_NORMAL;\r
                                                        if (status == git_wc_status_conflicted)\r
@@ -609,8 +597,8 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder,
                                }\r
                                \r
                                //if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none))\r
-                               if (askedpath.HasAdminDir())\r
-                                       itemStatesFolder |= ITEMIS_INSVN;\r
+                               itemStatesFolder |= askedpath.GetAdminDirMask();                                                        \r
+                               \r
                                if (status == git_wc_status_normal)\r
                                        itemStatesFolder |= ITEMIS_NORMAL;\r
                                if (status == git_wc_status_conflicted)\r
@@ -631,18 +619,8 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder,
                        status = fetchedstatus;\r
                }\r
                //if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none))\r
-               if (askedpath.HasAdminDir())\r
-               {\r
-                       itemStatesFolder |= ITEMIS_FOLDERINSVN;\r
-               }\r
-               if (askedpath.HasSubmodules())\r
-               {\r
-                       itemStatesFolder |= ITEMIS_SUBMODULE;\r
-               }\r
-               if (askedpath.HasGitSVNDir())\r
-               {\r
-                       itemStatesFolder |= ITEMIS_GITSVN;\r
-               }\r
+               itemStatesFolder |= askedpath.GetAdminDirMask();\r
+               \r
                if (status == git_wc_status_ignored)\r
                        itemStatesFolder |= ITEMIS_IGNORED;\r
                itemStatesFolder |= ITEMIS_FOLDER;\r
@@ -698,8 +676,8 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder,
                                        status = fetchedstatus;\r
                                }\r
                                //if ((status != git_wc_status_unversioned)&&(status != git_wc_status_ignored)&&(status != git_wc_status_none))\r
-                               if (askedpath.HasAdminDir())\r
-                                       itemStates |= ITEMIS_FOLDERINSVN;\r
+                               itemStates |= askedpath.GetAdminDirMask();\r
+                               \r
                                if (status == git_wc_status_ignored)\r
                                        itemStates |= ITEMIS_IGNORED;\r
                                itemStates |= ITEMIS_FOLDER;\r
@@ -707,6 +685,7 @@ STDMETHODIMP CShellExt::Initialize(LPCITEMIDLIST pIDFolder,
                                        itemStates |= ITEMIS_ADDED;\r
                                if (status == git_wc_status_deleted)\r
                                        itemStates |= ITEMIS_DELETED;\r
+\r
                        }\r
                }\r
        \r
@@ -1921,6 +1900,16 @@ STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
                                svnCmd += _T("\"");\r
                                break;\r
 \r
+                       case ShellMenuStashPop:\r
+                               svnCmd += _T("stashpop /path:\"");\r
+                               if (files_.size() > 0)\r
+                                       svnCmd += files_.front();\r
+                               else\r
+                                       svnCmd += folder_;\r
+                               svnCmd += _T("\"");\r
+                               break;\r
+\r
+\r
                        case ShellMenuStashList:\r
                                svnCmd += _T("reflog /path:\"");\r
                                if (files_.size() > 0)\r