OSDN Git Service

context menu basic finished
authorFrank Li <lznuaa@gmail.com>
Sat, 8 Nov 2008 12:41:18 +0000 (20:41 +0800)
committerFrank Li <lznuaa@gmail.com>
Sat, 8 Nov 2008 12:41:18 +0000 (20:41 +0800)
12 files changed:
Resources/menuupdate.ico
TortoiseShell/ContextMenu.cpp
TortoiseShell/Globals.h
TortoiseShell/ShellCache.h
TortoiseShell/ShellExt.h
TortoiseShell/TortoiseShell.vcproj
TortoiseShell/resource.h
TortoiseShell/resource.rc
resources/checkout.ico [new file with mode: 0644]
resources/icon1.ico [new file with mode: 0644]
resources/pull1.ico [new file with mode: 0644]
resources/update1.ico [new file with mode: 0644]

index 7a71d9f..12bd4d7 100644 (file)
Binary files a/Resources/menuupdate.ico and b/Resources/menuupdate.ico differ
index 6f8267e..b6b55b3 100644 (file)
 int g_shellidlist=RegisterClipboardFormat(CFSTR_SHELLIDLIST);\r
 \r
 CShellExt::MenuInfo CShellExt::menuInfo[] =\r
-{\r
-       { ShellMenuCheckout,                                    MENUCHECKOUT,           IDI_CHECKOUT,                   IDS_MENUCHECKOUT,                       IDS_MENUDESCCHECKOUT,\r
+{      \r
+       { ShellMenuClone,                                               MENUCLONE,                      IDI_CLONE,                              IDS_MENUCLONE,                  IDS_MENUDESCCHECKOUT,\r
        ITEMIS_FOLDER, ITEMIS_INSVN|ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0, 0 },\r
 \r
-       { ShellMenuUpdate,                                              MENUUPDATE,                     IDI_UPDATE,                             IDS_MENUUPDATE,                         IDS_MENUDESCUPDATE,                             \r
-       ITEMIS_INSVN,   ITEMIS_ADDED, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
+       { ShellMenuPull,                                                MENUPULL,                       IDI_PULL,                               IDS_MENUPULL,\r
+       ITEMIS_INSVN,   ITEMIS_INSVN, ITEMIS_FOLDERINSVN, 0,0,0, 0,0,0},\r
+       { ShellMenuPush,                                                MENUPUSH,                       IDI_PUSH,                               IDS_MENUPUSH,\r
+       ITEMIS_INSVN,   ITEMIS_INSVN, ITEMIS_FOLDERINSVN, 0,0,0, 0,0,0},\r
+\r
+//     { ShellMenuCheckout,                                    MENUCHECKOUT,           IDI_CHECKOUT,                   IDS_MENUCHECKOUT,                       IDS_MENUDESCCHECKOUT,\r
+//     ITEMIS_FOLDER, ITEMIS_INSVN|ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0, 0 },\r
+\r
+//     { ShellMenuUpdate,                                              MENUUPDATE,                     IDI_UPDATE,                             IDS_MENUUPDATE,                         IDS_MENUDESCUPDATE,                             \r
+//     ITEMIS_INSVN,   ITEMIS_ADDED, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
 \r
        { ShellMenuCommit,                                              MENUCOMMIT,                     IDI_COMMIT,                             IDS_MENUCOMMIT,                         IDS_MENUDESCCOMMIT,\r
        ITEMIS_INSVN, 0, ITEMIS_FOLDERINSVN, 0, 0, 0, 0, 0 },\r
@@ -61,16 +69,16 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
        { ShellMenuShowChanged,                                 MENUSHOWCHANGED,        IDI_SHOWCHANGED,                IDS_MENUSHOWCHANGED,            IDS_MENUDESCSHOWCHANGED,\r
        ITEMIS_INSVN|ITEMIS_ONLYONE, 0, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 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
+//     { 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
 \r
        { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
 \r
        { ShellMenuConflictEditor,                              MENUCONFLICTEDITOR,     IDI_CONFLICT,                   IDS_MENUCONFLICT,                       IDS_MENUDESCCONFLICT,\r
        ITEMIS_INSVN|ITEMIS_CONFLICTED, ITEMIS_FOLDER, 0, 0, 0, 0, 0, 0 },\r
 \r
-       { ShellMenuResolve,                                             MENURESOLVE,            IDI_RESOLVE,                    IDS_MENURESOLVE,                        IDS_MENUDESCRESOLVE,\r
-       ITEMIS_INSVN|ITEMIS_CONFLICTED, 0, ITEMIS_INSVN|ITEMIS_FOLDER, 0, ITEMIS_FOLDERINSVN, 0, 0, 0 },\r
+//     { ShellMenuResolve,                                             MENURESOLVE,            IDI_RESOLVE,                    IDS_MENURESOLVE,                        IDS_MENUDESCRESOLVE,\r
+//     ITEMIS_INSVN|ITEMIS_CONFLICTED, 0, ITEMIS_INSVN|ITEMIS_FOLDER, 0, ITEMIS_FOLDERINSVN, 0, 0, 0 },\r
 \r
 //     { ShellMenuUpdateExt,                                   MENUUPDATEEXT,          IDI_UPDATE,                             IDS_MENUUPDATEEXT,                      IDS_MENUDESCUPDATEEXT,\r
 //     ITEMIS_INSVN, ITEMIS_ADDED, ITEMIS_FOLDERINSVN, ITEMIS_ADDED, 0, 0, 0, 0 },\r
@@ -119,10 +127,10 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
        ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, ITEMIS_ADDED, ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED, 0, 0, 0, 0, 0 },\r
 \r
        { ShellMenuExport,                                              MENUEXPORT,                     IDI_EXPORT,                             IDS_MENUEXPORT,                         IDS_MENUDESCEXPORT,\r
-       ITEMIS_FOLDER|ITEMIS_ONLYONE, 0, 0, 0, 0, 0, 0, 0 },\r
+       ITEMIS_INSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0, 0, 0 },\r
 \r
-       { ShellMenuRelocate,                                    MENURELOCATE,           IDI_RELOCATE,                   IDS_MENURELOCATE,                       IDS_MENUDESCRELOCATE,\r
-       ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0 },\r
+//     { ShellMenuRelocate,                                    MENURELOCATE,           IDI_RELOCATE,                   IDS_MENURELOCATE,                       IDS_MENUDESCRELOCATE,\r
+//     ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, 0, 0, 0, 0, 0 },\r
 \r
        { ShellSeparator, 0, 0, 0, 0, 0, 0, 0, 0},\r
 \r
@@ -132,8 +140,8 @@ CShellExt::MenuInfo CShellExt::menuInfo[] =
        { ShellMenuAdd,                                                 MENUADD,                        IDI_ADD,                                IDS_MENUADD,                            IDS_MENUDESCADD,\r
        ITEMIS_INVERSIONEDFOLDER, ITEMIS_INSVN, ITEMIS_INSVN|ITEMIS_FOLDER, 0, ITEMIS_IGNORED, 0, ITEMIS_DELETED, ITEMIS_FOLDER|ITEMIS_ONLYONE },\r
 \r
-       { ShellMenuAddAsReplacement,                    MENUADD,                        IDI_ADD,                                IDS_MENUADDASREPLACEMENT,       IDS_MENUADDASREPLACEMENT,\r
-       ITEMIS_DELETED|ITEMIS_ONLYONE, ITEMIS_FOLDER, 0, 0, 0, 0, 0, 0 },\r
+//     { ShellMenuAddAsReplacement,                    MENUADD,                        IDI_ADD,                                IDS_MENUADDASREPLACEMENT,       IDS_MENUADDASREPLACEMENT,\r
+//     ITEMIS_DELETED|ITEMIS_ONLYONE, ITEMIS_FOLDER, 0, 0, 0, 0, 0, 0 },\r
 \r
 //     { ShellMenuImport,                                              MENUIMPORT,                     IDI_IMPORT,                             IDS_MENUIMPORT,                         IDS_MENUDESCIMPORT,\r
 //     ITEMIS_FOLDER, ITEMIS_INSVN, 0, 0, 0, 0, 0, 0 },\r
@@ -159,8 +167,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
@@ -1759,6 +1767,27 @@ STDMETHODIMP CShellExt::InvokeCommand(LPCMINVOKECOMMANDINFO lpcmi)
                                }\r
                                else return NOERROR;\r
                                break;\r
+                       case ShellMenuClone:\r
+                               tempfile = WriteFileListToTempFile();\r
+                               svnCmd += _T("clone /pathfile:\"");\r
+                               svnCmd += tempfile;\r
+                               svnCmd += _T("\"");\r
+                               svnCmd += _T(" /deletepathfile");\r
+                               break;\r
+                       case ShellMenuPull:\r
+                               tempfile = WriteFileListToTempFile();\r
+                               svnCmd += _T("pull /pathfile:\"");\r
+                               svnCmd += tempfile;\r
+                               svnCmd += _T("\"");\r
+                               svnCmd += _T(" /deletepathfile");\r
+                               break;\r
+                       case ShellMenuPush:\r
+                               tempfile = WriteFileListToTempFile();\r
+                               svnCmd += _T("push /pathfile:\"");\r
+                               svnCmd += tempfile;\r
+                               svnCmd += _T("\"");\r
+                               svnCmd += _T(" /deletepathfile");\r
+                               break;\r
                        default:\r
                                break;\r
                                //#endregion\r
index 6612edb..351545d 100644 (file)
@@ -53,6 +53,9 @@
 #define MENUMERGEALL           0x0000000100000000\r
 #define MENUPREVDIFF           0x0000000200000000\r
 #define MENUCLIPPASTE          0x0000000400000000\r
+#define MENUPULL                       0x0000000800000000\r
+#define MENUPUSH                       0x0000001000000000\r
+#define MENUCLONE           0x0000002000000000\r
 \r
 #define MENUSETTINGS           0x2000000000000000\r
 #define MENUHELP                       0x4000000000000000\r
index c5d5639..69d768b 100644 (file)
@@ -82,8 +82,8 @@ public:
                getlocktopticker = cachetypeticker;\r
                excludedasnormalticker = cachetypeticker;\r
                excontextticker = cachetypeticker;\r
-               menulayoutlow = CRegStdWORD(_T("Software\\ToroiseGit\\ContextMenuEntries"), MENUCHECKOUT | MENUUPDATE | MENUCOMMIT);\r
-               menulayouthigh = CRegStdWORD(_T("Software\\ToroiseGit\\ContextMenuEntrieshigh"), 0);\r
+               menulayoutlow = CRegStdWORD(_T("Software\\ToroiseGit\\ContextMenuEntries"),               MENUCREATEREPOS|MENUCLONE|MENUPULL|MENUPUSH|MENUUPDATE|MENUCOMMIT);\r
+               menulayouthigh = CRegStdWORD(_T("Software\\ToroiseGit\\ContextMenuEntrieshigh"), (MENUCREATEREPOS|MENUCLONE|MENUPULL|MENUPUSH|MENUUPDATE|MENUCOMMIT)>>32);\r
                menumasklow_lm = CRegStdWORD(_T("Software\\ToroiseGit\\ContextMenuEntriesMaskLow"), 0, FALSE, HKEY_LOCAL_MACHINE);\r
                menumaskhigh_lm = CRegStdWORD(_T("Software\\ToroiseGit\\ContextMenuEntriesMaskHigh"), 0, FALSE, HKEY_LOCAL_MACHINE);\r
                menumasklow_cu = CRegStdWORD(_T("Software\\ToroiseGit\\ContextMenuEntriesMaskLow"), 0);\r
index 9ab6deb..16a4793 100644 (file)
@@ -147,6 +147,9 @@ protected:
                ShellMenuProperties,\r
                ShellMenuDelUnversioned,\r
                ShellMenuClipPaste,\r
+               ShellMenuPull,\r
+               ShellMenuPush,\r
+               ShellMenuClone,\r
                ShellMenuLastEntry                      // used to mark the menu array end\r
        };\r
 \r
index 6b9debe..bd9b3a9 100644 (file)
                        Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;jpg;jpeg;jpe;manifest"\r
                        >\r
                        <File\r
+                               RelativePath="..\Resources\checkout.ico"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\Resources\clipcopy.ico"\r
                                >\r
                        </File>\r
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\Resources\icon1.ico"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\Resources\menuabout.ico"\r
                                >\r
                        </File>\r
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\Resources\pull1.ico"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath=".\resource.rc"\r
                                >\r
                        </File>\r
                                RelativePath="..\Resources\tsvnmenumultiple.ico"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="..\Resources\update1.ico"\r
+                               >\r
+                       </File>\r
                </Filter>\r
                <File\r
                        RelativePath=".\ClassDiagram1.cd"\r
index 4c462b2..2cfe3a1 100644 (file)
@@ -2,6 +2,7 @@
 // Microsoft Visual C++ generated include file.\r
 // Used by resource.rc\r
 //\r
+#define IDI_PULL                        5\r
 #define IDD_PROPPAGE                    107\r
 #define IDI_APP                         108\r
 #define IDS_MENUCHECKOUT                120\r
 #define IDS_DROPEXPORTMENU              218\r
 #define IDS_DROPEXPORTEXTENDEDMENU      219\r
 #define IDS_MENUIGNOREMULTIPLEMASK      220\r
+#define IDS_MENUPULL                    221\r
+#define IDS_MENUPUSH                    222\r
+#define IDS_MENUCLONE                   223\r
 #define IDS_MENUCLIPPASTE               225\r
 #define IDS_MENUDESCCLIPPASTE           226\r
 #define IDS_ERR_PROPNOTONFILE           230\r
 #define IDI_DELUNVERSIONED              5159\r
 #define IDI_APPSMALL                    5160\r
 #define IDI_CLIPPASTE                   5164\r
+#define IDI_ICON1                       5165\r
+#define IDI_PUSH                        5166\r
+#define IDI_CLONE                       5167\r
 #define IDC_LOCKOWNER                   11019\r
 #define IDC_LOCKDATE                    11020\r
 #define IDC_EDITPROPERTIES              11021\r
 // \r
 #ifdef APSTUDIO_INVOKED\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
-#define _APS_NEXT_RESOURCE_VALUE        5165\r
+#define _APS_NEXT_RESOURCE_VALUE        5166\r
 #define _APS_NEXT_COMMAND_VALUE         40001\r
 #define _APS_NEXT_CONTROL_VALUE         11026\r
 #define _APS_NEXT_SYMED_VALUE           5101\r
index 62c3505..6f7a557 100644 (file)
@@ -28,6 +28,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
 \r
 // Icon with lowest ID value placed first to ensure application icon\r
 // remains consistent on all systems.\r
+IDI_PULL                ICON                    "..\\resources\\update1.ico"\r
 IDI_APP                 ICON                    "..\\Resources\\Tortoise.ico"\r
 IDI_CHECKOUT            ICON                    "..\\Resources\\menucheckout.ico"\r
 IDI_UPDATE              ICON                    "..\\Resources\\menuupdate.ico"\r
@@ -68,6 +69,8 @@ IDI_PROPERTIES          ICON                    "..\\Resources\\menuproperties.i
 IDI_DELUNVERSIONED      ICON                    "..\\Resources\\menudelunversioned.ico"\r
 IDI_APPSMALL            ICON                    "..\\Resources\\TortoiseSmall.ico"\r
 IDI_CLIPPASTE           ICON                    "..\\Resources\\clippaste.ico"\r
+IDI_PUSH                ICON                    "..\\resources\\pull1.ico"\r
+IDI_CLONE               ICON                    "..\\resources\\checkout.ico"\r
 #endif    // Neutral resources\r
 /////////////////////////////////////////////////////////////////////////////\r
 \r
@@ -83,6 +86,15 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
+// Icon\r
+//\r
+\r
+// Icon with lowest ID value placed first to ensure application icon\r
+// remains consistent on all systems.\r
+IDI_ICON1               ICON                    "..\\resources\\icon1.ico"\r
+\r
+/////////////////////////////////////////////////////////////////////////////\r
+//\r
 // Dialog\r
 //\r
 \r
@@ -204,7 +216,7 @@ BEGIN
     IDS_MENUEXPORT          "E&xport..."\r
     IDS_MENUSETTINGS        "&Settings"\r
     IDS_MENUABOUT           "A&bout"\r
-    IDS_MENUSUBMENU         "&TortoiseSVN"\r
+    IDS_MENUSUBMENU         "&TortoiseGit"\r
     IDS_MENUDESCCHECKOUT    "Check out a working copy from a repository"\r
     IDS_MENUDESCUPDATE      "Updates the working copy to the current revision"\r
     IDS_MENUDESCCOMMIT      "Commits your changes to the repository"\r
@@ -219,11 +231,11 @@ STRINGTABLE
 BEGIN\r
     IDS_MENUDESCIMPORT      "Imports the directory to a repository"\r
     IDS_MENUDESCEXPORT      "Exports a repository to a clean working copy without the svn administrative folders"\r
-    IDS_MENUDESCABOUT       "Shows information about TortoiseSVN"\r
+    IDS_MENUDESCABOUT       "Shows information about TortoiseGit"\r
     IDS_MENUDESCCREATEREPOS "Creates a repository database at the current location"\r
     IDS_MENUDESCCOPY        "Creates a 'cheap' copy inside the repository used for branches or tagging"\r
     IDS_MENUDESCMERGE       "Merges a branch into the main trunk"\r
-    IDS_MENUDESCSETTINGS    "Tweak TortoiseSVN"\r
+    IDS_MENUDESCSETTINGS    "Tweak TortoiseGit"\r
     IDS_MENUDESCDEFAULT     "no description for this command is available"\r
     IDS_STATUSNONE          " "\r
     IDS_STATUSUNVERSIONED   "non-versioned"\r
@@ -310,6 +322,9 @@ BEGIN
     IDS_DROPEXPORTMENU      "Git Export versioned items here"\r
     IDS_DROPEXPORTEXTENDEDMENU "Git Export all items here"\r
     IDS_MENUIGNOREMULTIPLEMASK "Ignore items by &extension"\r
+    IDS_MENUPULL            "Pull"\r
+    IDS_MENUPUSH            "Push"\r
+    IDS_MENUCLONE           "Clone"\r
 END\r
 \r
 STRINGTABLE \r
diff --git a/resources/checkout.ico b/resources/checkout.ico
new file mode 100644 (file)
index 0000000..8626b71
Binary files /dev/null and b/resources/checkout.ico differ
diff --git a/resources/icon1.ico b/resources/icon1.ico
new file mode 100644 (file)
index 0000000..f1282c6
Binary files /dev/null and b/resources/icon1.ico differ
diff --git a/resources/pull1.ico b/resources/pull1.ico
new file mode 100644 (file)
index 0000000..12bd4d7
Binary files /dev/null and b/resources/pull1.ico differ
diff --git a/resources/update1.ico b/resources/update1.ico
new file mode 100644 (file)
index 0000000..12bd4d7
Binary files /dev/null and b/resources/update1.ico differ