OSDN Git Service

Add View Patch & Hide Patch at commit dialog
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / CommitDlg.cpp
index 0dbf8e6..e1779b1 100644 (file)
@@ -59,6 +59,7 @@ CCommitDlg::CCommitDlg(CWnd* pParent /*=NULL*/)
        , m_bSelectFilesForCommit(TRUE)\r
 {\r
        this->m_bCommitAmend=FALSE;\r
+       m_bPushAfterCommit = FALSE;\r
 }\r
 \r
 CCommitDlg::~CCommitDlg()\r
@@ -81,12 +82,14 @@ void CCommitDlg::DoDataExchange(CDataExchange* pDX)
        DDX_Control(pDX, IDC_SPLITTER, m_wndSplitter);\r
        DDX_Check(pDX, IDC_KEEPLISTS, m_bKeepChangeList);\r
        DDX_Check(pDX,IDC_COMMIT_AMEND,m_bCommitAmend);\r
+       DDX_Control(pDX,IDC_VIEW_PATCH,m_ctrlShowPatch);\r
 }\r
 \r
 BEGIN_MESSAGE_MAP(CCommitDlg, CResizableStandAloneDialog)\r
        ON_BN_CLICKED(IDC_SELECTALL, OnBnClickedSelectall)\r
        ON_BN_CLICKED(IDHELP, OnBnClickedHelp)\r
        ON_BN_CLICKED(IDC_SHOWUNVERSIONED, OnBnClickedShowunversioned)\r
+       ON_NOTIFY(SCN_UPDATEUI, IDC_LOGMESSAGE, OnScnUpdateUI)\r
 //     ON_BN_CLICKED(IDC_HISTORY, OnBnClickedHistory)\r
        ON_BN_CLICKED(IDC_BUGTRAQBUTTON, OnBnClickedBugtraqbutton)\r
        ON_EN_CHANGE(IDC_LOGMESSAGE, OnEnChangeLogmessage)\r
@@ -103,6 +106,8 @@ BEGIN_MESSAGE_MAP(CCommitDlg, CResizableStandAloneDialog)
     ON_BN_CLICKED(IDC_COMMIT_AMEND, &CCommitDlg::OnBnClickedCommitAmend)\r
     ON_BN_CLICKED(IDC_WHOLE_PROJECT, &CCommitDlg::OnBnClickedWholeProject)\r
        ON_STN_CLICKED(IDC_BUGIDLABEL, &CCommitDlg::OnStnClickedBugidlabel)\r
+       ON_COMMAND(ID_FOCUS_MESSAGE,&CCommitDlg::OnFocusMessage)\r
+       ON_STN_CLICKED(IDC_VIEW_PATCH, &CCommitDlg::OnStnClickedViewPatch)\r
 END_MESSAGE_MAP()\r
 \r
 BOOL CCommitDlg::OnInitDialog()\r
@@ -117,9 +122,17 @@ BOOL CCommitDlg::OnInitDialog()
        m_regKeepChangelists = CRegDWORD(_T("Software\\TortoiseGit\\KeepChangeLists"), FALSE);\r
        m_bKeepChangeList = m_regKeepChangelists;\r
 \r
+       m_hAccel = LoadAccelerators(AfxGetResourceHandle(),MAKEINTRESOURCE(IDR_ACC_COMMITDLG));\r
+\r
 //     GitConfig config;\r
 //     m_bWholeProject = config.KeepLocks();\r
 \r
+       if(this->m_pathList.GetCount() == 0)\r
+               m_bWholeProject =true;\r
+       \r
+       if(this->m_pathList.GetCount() == 1 && m_pathList[0].IsEmpty())\r
+               m_bWholeProject =true;\r
+\r
        UpdateData(FALSE);\r
        \r
        m_ListCtrl.Init(SVNSLC_COLEXT | SVNSLC_COLSTATUS | SVNSLC_COLADD |SVNSLC_COLDEL, _T("CommitDlg"));\r
@@ -218,6 +231,7 @@ BOOL CCommitDlg::OnInitDialog()
 //     AddAnchor(IDC_HISTORY, TOP_LEFT);\r
        AddAnchor(IDC_LOGMESSAGE, TOP_LEFT, TOP_RIGHT);\r
        AddAnchor(IDC_SIGNOFF,   TOP_RIGHT);\r
+       AddAnchor(IDC_VIEW_PATCH,TOP_RIGHT);\r
        AddAnchor(IDC_LISTGROUP, TOP_LEFT, BOTTOM_RIGHT);\r
        AddAnchor(IDC_SPLITTER, TOP_LEFT, TOP_RIGHT);\r
        AddAnchor(IDC_FILELIST, TOP_LEFT, BOTTOM_RIGHT);\r
@@ -225,6 +239,7 @@ BOOL CCommitDlg::OnInitDialog()
        AddAnchor(IDC_SELECTALL, BOTTOM_LEFT);\r
        AddAnchor(IDC_EXTERNALWARNING, BOTTOM_RIGHT);\r
        AddAnchor(IDC_STATISTICS, BOTTOM_LEFT, BOTTOM_RIGHT);\r
+       AddAnchor(IDC_TEXT_INFO,  TOP_RIGHT);\r
        AddAnchor(IDC_WHOLE_PROJECT, BOTTOM_LEFT);\r
        AddAnchor(IDC_KEEPLISTS, BOTTOM_LEFT);\r
        AddAnchor(IDOK, BOTTOM_RIGHT);\r
@@ -291,6 +306,8 @@ BOOL CCommitDlg::OnInitDialog()
        //this->m_bCommitAmend=FALSE;\r
        //this->UpdateData(FALSE);\r
 \r
+       this->m_ctrlShowPatch.SetURL(CString());\r
+\r
        return FALSE;  // return TRUE unless you set the focus to a control\r
        // EXCEPTION: OCX Property Pages should return FALSE\r
 }\r
@@ -499,10 +516,11 @@ void CCommitDlg::OnOK()
                cmd.Format(_T("git.exe commit %s -F \"%s\""),amend, tempfile);\r
                \r
                CProgressDlg progress;\r
+               progress.m_bBufferAll=true; // improve show speed when there are many file added. \r
                progress.m_GitCmd=cmd;\r
                progress.m_bShowCommand = FALSE;        // don't show the commit command\r
                progress.m_PreText = out;                       // show any output already generated in log window\r
-               progress.m_changeAbortButtonOnSuccessTo = "Push";\r
+               progress.m_changeAbortButtonOnSuccessTo = _T("&Push");\r
                DWORD userResponse = progress.DoModal();\r
                \r
                if(progress.m_GitStatus)\r
@@ -510,16 +528,18 @@ void CCommitDlg::OnOK()
                        bCloseCommitDlg = false;\r
                        this->Refresh();\r
                }\r
-               else if(userResponse == IDCANCEL)\r
+               else if(userResponse == IDC_PROGRESS_BUTTON1)\r
                {\r
                        //User pressed 'Push' button after successful commit.\r
-                       PushCommand cmdPush;\r
-                       cmdPush.Execute();\r
+                       m_bPushAfterCommit=true;\r
                }\r
 \r
                CFile::Remove(tempfile);\r
        }else\r
-               CMessageBox::Show(this->m_hWnd, _T("Nothing Commit"), _T("Commit Finish"), MB_OK | MB_ICONINFORMATION);\r
+       {\r
+               CMessageBox::Show(this->m_hWnd, IDS_ERROR_NOTHING_COMMIT, IDS_COMMIT_FINISH, MB_OK | MB_ICONINFORMATION);\r
+               bCloseCommitDlg=false;\r
+       }\r
 #if 0\r
        if (m_pathwatcher.GetNumberOfChangedPaths() && m_bRecursive)\r
        {\r
@@ -797,9 +817,11 @@ UINT CCommitDlg::StatusThread()
 void CCommitDlg::OnCancel()\r
 {\r
        m_bCancelled = true;\r
+       m_pathwatcher.Stop();\r
+\r
        if (m_bBlock)\r
                return;\r
-       m_pathwatcher.Stop();\r
+       \r
        if (m_bThreadRunning)\r
        {\r
                InterlockedExchange(&m_bRunThread, FALSE);\r
@@ -851,6 +873,14 @@ BOOL CCommitDlg::PreTranslateMessage(MSG* pMsg)
 {\r
        if (!m_bBlock)\r
                m_tooltips.RelayEvent(pMsg);\r
+       \r
+       if (m_hAccel)\r
+       {\r
+               int ret = TranslateAccelerator(m_hWnd, m_hAccel, pMsg);\r
+               if (ret)\r
+                       return TRUE;\r
+       }\r
+\r
        if (pMsg->message == WM_KEYDOWN)\r
        {\r
                switch (pMsg->wParam)\r
@@ -1253,6 +1283,11 @@ void CCommitDlg::InsertMenuItems(CMenu& mPopup, int& nCmd)
                sMenuItemText.LoadString(IDS_COMMITDLG_POPUP_PASTELASTMESSAGE);\r
                m_nPopupPasteLastMessage = nCmd++;\r
                mPopup.AppendMenu(MF_STRING | MF_ENABLED, m_nPopupPasteLastMessage, sMenuItemText);\r
+\r
+               sMenuItemText.LoadString(IDS_COMMITDLG_POPUP_LOGHISTORY);\r
+               m_nPopupRecentMessage = nCmd++;\r
+               mPopup.AppendMenu(MF_STRING | MF_ENABLED, m_nPopupRecentMessage, sMenuItemText);\r
+\r
        }\r
        \r
 }\r
@@ -1300,6 +1335,12 @@ bool CCommitDlg::HandleMenuItemClick(int cmd, CSciEdit * pSciEdit)
                pSciEdit->InsertText(logmsg);\r
                return true;\r
        }\r
+\r
+       if(cmd == m_nPopupRecentMessage )\r
+       {\r
+               OnBnClickedHistory();\r
+               return true;\r
+       }\r
        return false;\r
 }\r
 \r
@@ -1333,7 +1374,7 @@ void CCommitDlg::OnBnClickedHistory()
        m_tooltips.Pop();       // hide the tooltips\r
        if (m_pathList.GetCount() == 0)\r
                return;\r
-#if 0\r
+\r
        CHistoryDlg historyDlg;\r
        historyDlg.SetHistory(m_History);\r
        if (historyDlg.DoModal() != IDOK)\r
@@ -1355,7 +1396,7 @@ void CCommitDlg::OnBnClickedHistory()
 \r
        UpdateOKButton();\r
        GetDlgItem(IDC_LOGMESSAGE)->SetFocus();\r
-#endif\r
+\r
 }\r
 \r
 void CCommitDlg::OnBnClickedBugtraqbutton()\r
@@ -1533,12 +1574,19 @@ void CCommitDlg::DoSize(int delta)
        RemoveAnchor(IDC_COMMIT_AMEND);\r
        RemoveAnchor(IDC_LISTGROUP);\r
        RemoveAnchor(IDC_FILELIST);\r
+       RemoveAnchor(IDC_TEXT_INFO);\r
+       RemoveAnchor(IDC_VIEW_PATCH);\r
+\r
        CSplitterControl::ChangeHeight(&m_cLogMessage, delta, CW_TOPALIGN);\r
        CSplitterControl::ChangeHeight(GetDlgItem(IDC_MESSAGEGROUP), delta, CW_TOPALIGN);\r
        CSplitterControl::ChangeHeight(&m_ListCtrl, -delta, CW_BOTTOMALIGN);\r
        CSplitterControl::ChangeHeight(GetDlgItem(IDC_LISTGROUP), -delta, CW_BOTTOMALIGN);\r
        CSplitterControl::ChangePos(GetDlgItem(IDC_SIGNOFF),0,delta);\r
        CSplitterControl::ChangePos(GetDlgItem(IDC_COMMIT_AMEND),0,delta);\r
+       CSplitterControl::ChangePos(GetDlgItem(IDC_TEXT_INFO),0,delta);\r
+       CSplitterControl::ChangePos(GetDlgItem(IDC_VIEW_PATCH),0,delta);\r
+       \r
+       AddAnchor(IDC_VIEW_PATCH,TOP_RIGHT);\r
        AddAnchor(IDC_MESSAGEGROUP, TOP_LEFT, TOP_RIGHT);\r
        AddAnchor(IDC_LOGMESSAGE, TOP_LEFT, TOP_RIGHT);\r
        AddAnchor(IDC_SPLITTER, TOP_LEFT, TOP_RIGHT);\r
@@ -1546,6 +1594,7 @@ void CCommitDlg::DoSize(int delta)
        AddAnchor(IDC_FILELIST, TOP_LEFT, BOTTOM_RIGHT);\r
        AddAnchor(IDC_SIGNOFF,TOP_RIGHT);\r
        AddAnchor(IDC_COMMIT_AMEND,TOP_LEFT);\r
+       AddAnchor(IDC_TEXT_INFO,TOP_RIGHT);\r
        ArrangeLayout();\r
        // adjust the minimum size of the dialog to prevent the resizing from\r
        // moving the list control too far down.\r
@@ -1645,3 +1694,29 @@ void CCommitDlg::OnStnClickedBugidlabel()
 {\r
        // TODO: Add your control notification handler code here\r
 }\r
+\r
+void CCommitDlg::OnFocusMessage()\r
+{\r
+       m_cLogMessage.SetFocus();\r
+}\r
+\r
+void CCommitDlg::OnScnUpdateUI(NMHDR *pNMHDR, LRESULT *pResult)\r
+{\r
+       SCNotification *pHead =(SCNotification *)pNMHDR;\r
+       \r
+       int pos=this->m_cLogMessage.Call(SCI_GETCURRENTPOS);\r
+       int line=this->m_cLogMessage.Call(SCI_LINEFROMPOSITION,pos);\r
+       int column=this->m_cLogMessage.Call(SCI_GETCOLUMN,pos);\r
+\r
+       CString str;\r
+       str.Format(_T("%d/%d"),line+1,column+1);\r
+       this->GetDlgItem(IDC_TEXT_INFO)->SetWindowText(str);\r
+\r
+       if(*pResult)\r
+               *pResult=0;\r
+}\r
+void CCommitDlg::OnStnClickedViewPatch()\r
+{\r
+       // TODO: Add your control notification handler code here\r
+       this->m_ctrlShowPatch.SetWindowText(_T("Hide Patch<<"));\r
+}\r