OSDN Git Service

RefLogDlg: Show ref list at dropdownlist
authorFrank Li <lznuaa@gmail.com>
Sat, 14 Mar 2009 14:28:48 +0000 (22:28 +0800)
committerFrank Li <lznuaa@gmail.com>
Sat, 14 Mar 2009 14:28:48 +0000 (22:28 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Git/Git.cpp
src/Git/Git.h
src/Resources/TortoiseProcENG.rc
src/TortoiseProc/Commands/Command.cpp
src/TortoiseProc/Commands/RefLogCommand.cpp
src/TortoiseProc/RefLogDlg.cpp
src/TortoiseProc/RefLogDlg.h

index 5deef2f..917bb8e 100644 (file)
@@ -684,6 +684,30 @@ int CGit::GetRemoteList(STRING_VECTOR &list)
        return ret;\r
 }\r
 \r
+int CGit::GetRefList(STRING_VECTOR &list)\r
+{\r
+       int ret;\r
+       CString cmd,output;\r
+       cmd=_T("git show-ref -d");\r
+       ret=g_Git.Run(cmd,&output,CP_UTF8);\r
+       if(!ret)\r
+       {\r
+               int pos=0;\r
+               CString one;\r
+               while( pos>=0 )\r
+               {\r
+                       one=output.Tokenize(_T("\n"),pos);\r
+                       int start=one.Find(_T(" "),0);\r
+                       if(start>0)\r
+                       {\r
+                               CString name;\r
+                               name=one.Right(one.GetLength()-start-1);\r
+                               list.push_back(name);\r
+                       }\r
+               }\r
+       }\r
+       return ret;\r
+}\r
 int CGit::GetMapHashToFriendName(MAP_HASH_NAME &map)\r
 {\r
        int ret;\r
index 232ac02..87a8202 100644 (file)
@@ -104,6 +104,7 @@ public:
 \r
        BOOL IsInitRepos();\r
        int ListConflictFile(CTGitPathList &list,CTGitPath *path=NULL);\r
+       int GetRefList(STRING_VECTOR &list);\r
        \r
 };\r
 extern void GetTempPath(CString &path);\r
index 95736c0..4e340f4 100644 (file)
Binary files a/src/Resources/TortoiseProcENG.rc and b/src/Resources/TortoiseProcENG.rc differ
index 5cb7b74..042925d 100644 (file)
@@ -58,6 +58,8 @@
 #include "HelpCommand.h"\r
 #include "StashCommand.h"\r
 #include "SubmoduleCommand.h"\r
+#include "ReflogCommand.h"\r
+\r
 #if 0\r
 \r
 \r
@@ -169,6 +171,7 @@ typedef enum
        cmdStashList,\r
        cmdSubAdd,              \r
        cmdSubUpdate,   \r
+       cmdRefLog,\r
        \r
 } TGitCommand;\r
 \r
@@ -240,6 +243,7 @@ static const struct CommandInfo
        {       cmdStashList,           _T("stashlist")                 },\r
        {       cmdSubAdd,                      _T("subadd")                    },\r
        {       cmdSubUpdate,           _T("subupdate")                 },\r
+       {       cmdRefLog,                      _T("reflog")                    }\r
 };\r
 \r
 \r
@@ -341,6 +345,8 @@ Command * CommandServer::GetCommand(const CString& sCmd)
                return new SubmoduleAddCommand;\r
        case cmdSubUpdate:\r
                return new SubmoduleUpdateCommand;\r
+       case cmdRefLog:\r
+               return new RefLogCommand;\r
 \r
 #if 0\r
 \r
index 7228400..e2f48b3 100644 (file)
 #include "DirFileEnum.h"\r
 #include "ShellUpdater.h"\r
 #include "ChangedDlg.h"\r
+#include "RefLogDlg.h"\r
 \r
 bool RefLogCommand::Execute()\r
 {\r
        bool bRet = false;\r
 \r
-\r
+       CRefLogDlg dlg;\r
+       dlg.DoModal();\r
        return bRet;\r
 }\r
index 7802046..f0c9664 100644 (file)
@@ -4,14 +4,14 @@
 #include "stdafx.h"\r
 #include "resource.h"\r
 #include "RefLogDlg.h"\r
-\r
+#include "git.h"\r
 \r
 // CRefLogDlg dialog\r
 \r
-IMPLEMENT_DYNAMIC(CRefLogDlg, CDialog)\r
+IMPLEMENT_DYNAMIC(CRefLogDlg, CResizableStandAloneDialog)\r
 \r
 CRefLogDlg::CRefLogDlg(CWnd* pParent /*=NULL*/)\r
-       : CDialog(CRefLogDlg::IDD, pParent)\r
+       : CResizableStandAloneDialog(CRefLogDlg::IDD, pParent)\r
 {\r
 \r
 }\r
@@ -28,15 +28,34 @@ void CRefLogDlg::DoDataExchange(CDataExchange* pDX)
 }\r
 \r
 \r
-BEGIN_MESSAGE_MAP(CRefLogDlg, CDialog)\r
+BEGIN_MESSAGE_MAP(CRefLogDlg, CResizableStandAloneDialog)\r
        ON_BN_CLICKED(IDOK, &CRefLogDlg::OnBnClickedOk)\r
 END_MESSAGE_MAP()\r
 \r
+BOOL CRefLogDlg::OnInitDialog()\r
+{\r
+       CResizableStandAloneDialog::OnInitDialog();\r
+\r
+       AddAnchor(IDOK,BOTTOM_RIGHT);\r
+       AddAnchor(IDCANCEL,BOTTOM_RIGHT);\r
+       \r
+       AddAnchor(IDC_REFLOG_LIST,TOP_LEFT,BOTTOM_RIGHT);\r
+\r
+       AddOthersToAnchor();\r
+       this->EnableSaveRestore(_T("RefLogDlg"));\r
 \r
+       STRING_VECTOR list;\r
+       g_Git.GetRefList(list);\r
+\r
+       this->m_ChooseRef.AddString(list);\r
+       m_ChooseRef.SetMaxHistoryItems(0x7FFFFFFF);\r
+\r
+       return TRUE;\r
+}\r
 // CRefLogDlg message handlers\r
 \r
 void CRefLogDlg::OnBnClickedOk()\r
 {\r
        // TODO: Add your control notification handler code here\r
        OnOK();\r
-}\r
+}
\ No newline at end of file
index 3f9143a..4148acd 100644 (file)
@@ -1,10 +1,10 @@
 #pragma once\r
 #include "afxcmn.h"\r
-\r
-\r
+#include "StandAloneDlg.h"\r
+#include "HistoryCombo.h"\r
 // CRefLogDlg dialog\r
 \r
-class CRefLogDlg : public CDialog\r
+class CRefLogDlg : public CResizableStandAloneDialog\r
 {\r
        DECLARE_DYNAMIC(CRefLogDlg)\r
 \r
@@ -17,10 +17,11 @@ public:
 \r
 protected:\r
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support\r
+       BOOL OnInitDialog();\r
 \r
        DECLARE_MESSAGE_MAP()\r
 public:\r
-       CComboBoxEx m_ChooseRef;\r
+       CHistoryCombo m_ChooseRef;\r
 public:\r
        CListCtrl m_RefList;\r
 public:\r