OSDN Git Service

Remove "Next100" button. Add second menubutton Show Whole Project
authorFrank Li <lznuaa@gmail.com>
Fri, 30 Jan 2009 06:15:28 +0000 (14:15 +0800)
committerFrank Li <lznuaa@gmail.com>
Fri, 30 Jan 2009 06:15:28 +0000 (14:15 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Resources/TortoiseProcENG.rc
src/TortoiseProc/LogDlg.cpp
src/TortoiseProc/LogDlg.h
src/TortoiseProc/resource.h

index 73fd071..e74ca0b 100644 (file)
Binary files a/src/Resources/TortoiseProcENG.rc and b/src/Resources/TortoiseProcENG.rc differ
index e3e05bb..5123c53 100644 (file)
@@ -105,6 +105,7 @@ void CLogDlg::DoDataExchange(CDataExchange* pDX)
        DDX_Control(pDX, IDC_DATETO, m_DateTo);\r
        DDX_Control(pDX, IDC_HIDEPATHS, m_cHidePaths);\r
        DDX_Control(pDX, IDC_GETALL, m_btnShow);\r
+       DDX_Control(pDX, IDC_SHOWWHOLEPROJECT,m_btnShowWholeProject);\r
        DDX_Text(pDX, IDC_LOGINFO, m_sLogInfo);\r
        DDX_Check(pDX, IDC_INCLUDEMERGE, m_bIncludeMerges);\r
        DDX_Control(pDX, IDC_SEARCHEDIT, m_cFilter);\r
@@ -130,7 +131,7 @@ BEGIN_MESSAGE_MAP(CLogDlg, CResizableStandAloneDialog)
        ON_WM_TIMER()\r
        ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATETO, OnDtnDatetimechangeDateto)\r
        ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DATEFROM, OnDtnDatetimechangeDatefrom)\r
-       ON_BN_CLICKED(IDC_NEXTHUNDRED, OnBnClickedNexthundred)\r
+       ON_BN_CLICKED(IDC_SHOWWHOLEPROJECT, OnBnClickShowWholeProject)\r
        //ON_NOTIFY(NM_CUSTOMDRAW, IDC_LOGMSG, OnNMCustomdrawChangedFileList)\r
        //ON_NOTIFY(LVN_GETDISPINFO, IDC_LOGMSG, OnLvnGetdispinfoChangedFileList)\r
        ON_NOTIFY(LVN_COLUMNCLICK,IDC_LOGLIST   , OnLvnColumnclick)\r
@@ -166,6 +167,7 @@ void CLogDlg::SetParams(const CTGitPath& path, GitRev pegrev, GitRev startrev, G
 \r
 BOOL CLogDlg::OnInitDialog()\r
 {\r
+       CString temp;\r
        CResizableStandAloneDialog::OnInitDialog();\r
 \r
        m_hAccel = LoadAccelerators(AfxGetResourceHandle(),MAKEINTRESOURCE(IDR_ACC_LOGDLG));\r
@@ -181,14 +183,7 @@ BOOL CLogDlg::OnInitDialog()
        if (!m_bStrict)\r
                m_bStrict = m_regLastStrict;\r
        UpdateData(FALSE);\r
-       CString temp;\r
-       if (m_limit)\r
-               temp.Format(IDS_LOG_SHOWNEXT, m_limit);\r
-       else\r
-               temp.Format(IDS_LOG_SHOWNEXT, (int)(DWORD)CRegDWORD(_T("Software\\TortoiseGit\\NumberOfLogs"), 100));\r
-\r
-       SetDlgItemText(IDC_NEXTHUNDRED, temp);\r
-\r
+       \r
        // set the font to use in the log message view, configured in the settings dialog\r
        CAppUtils::CreateFontForLogs(m_logFont);\r
        GetDlgItem(IDC_MSGVIEW)->SetFont(&m_logFont);\r
@@ -270,7 +265,7 @@ BOOL CLogDlg::OnInitDialog()
        AddAnchor(IDC_CHECK_STOPONCOPY, BOTTOM_LEFT);\r
        AddAnchor(IDC_INCLUDEMERGE, BOTTOM_LEFT);\r
        AddAnchor(IDC_GETALL, BOTTOM_LEFT);\r
-       AddAnchor(IDC_NEXTHUNDRED, BOTTOM_LEFT);\r
+       AddAnchor(IDC_SHOWWHOLEPROJECT, BOTTOM_LEFT);\r
        AddAnchor(IDC_REFRESH, BOTTOM_LEFT);\r
        AddAnchor(IDC_STATBUTTON, BOTTOM_RIGHT);\r
        AddAnchor(IDC_PROGRESS, BOTTOM_LEFT, BOTTOM_RIGHT);\r
@@ -339,10 +334,23 @@ BOOL CLogDlg::OnInitDialog()
        // set the choices for the "Show All" button\r
        temp.LoadString(IDS_LOG_SHOWALL);\r
        m_btnShow.AddEntry(temp);\r
-       temp.LoadString(IDS_LOG_SHOW_WHOLE);\r
+       CString format;\r
+       format.LoadString(IDS_LOG_SHOW_CURRENT_BRANCH);\r
+       temp.Format(format,g_Git.GetCurrentBranch());\r
        m_btnShow.AddEntry(temp);\r
        m_btnShow.SetCurrentEntry((LONG)CRegDWORD(_T("Software\\TortoiseGit\\ShowAllEntry")));\r
 \r
+       temp.LoadString(IDS_LOG_SHOW_WHOLE);\r
+       this->m_btnShowWholeProject.AddEntry(temp);\r
+       format.LoadString(IDS_LOG_SHOW_CURRENT_PATH);\r
+       temp.Format(format,m_path.GetGitPathString());\r
+       if(!m_path.IsEmpty())\r
+       {\r
+               this->m_btnShowWholeProject.AddEntry(temp);\r
+               this->m_btnShowWholeProject.SetCurrentEntry((LONG)CRegDWORD(_T("Software\\TortoiseGit\\ShowWholeProject")));\r
+       }\r
+\r
+\r
        m_mergedRevs.clear();\r
 \r
        // first start a thread to obtain the log messages without\r
@@ -381,7 +389,7 @@ LRESULT CLogDlg::OnLogListLoading(WPARAM wParam, LPARAM lParam)
                GetDlgItem(IDC_PROGRESS)->ShowWindow(TRUE);\r
 \r
                //DialogEnableWindow(IDC_GETALL, FALSE);\r
-               DialogEnableWindow(IDC_NEXTHUNDRED, FALSE);\r
+               //DialogEnableWindow(IDC_SHOWWHOLEPROJECT, FALSE);\r
                DialogEnableWindow(IDC_CHECK_STOPONCOPY, FALSE);\r
                DialogEnableWindow(IDC_INCLUDEMERGE, FALSE);\r
                DialogEnableWindow(IDC_STATBUTTON, FALSE);\r
@@ -392,8 +400,8 @@ LRESULT CLogDlg::OnLogListLoading(WPARAM wParam, LPARAM lParam)
        if( cur == GITLOG_END)\r
        {\r
                \r
-               if (!m_bShowedAll)\r
-                       DialogEnableWindow(IDC_NEXTHUNDRED, TRUE);\r
+               //if (!m_bShowedAll)\r
+               DialogEnableWindow(IDC_SHOWWHOLEPROJECT, TRUE);\r
 \r
                DialogEnableWindow(IDC_GETALL, TRUE);\r
                //DialogEnableWindow(IDC_INCLUDEMERGE, TRUE);\r
@@ -600,26 +608,42 @@ void CLogDlg::OnBnClickedGetall()
        GetAll();\r
 }\r
 \r
-void CLogDlg::GetAll(bool bForceAll /* = false */)\r
+void CLogDlg::GetAll(bool bIsShowProjectOrBranch)\r
 {\r
 \r
        // fetch all requested log messages, either the specified range or\r
        // really *all* available log messages.\r
        ///UpdateData();\r
-       INT_PTR entry = m_btnShow.GetCurrentEntry();\r
-       if (bForceAll)\r
-               entry = 0;\r
+       if(bIsShowProjectOrBranch)\r
+       {\r
+               INT_PTR entry = this->m_btnShowWholeProject.GetCurrentEntry();\r
+               switch (entry)\r
+               {\r
+                       case 0: // show whole Project\r
+                               m_LogList.m_Path.Reset();\r
+                               SetWindowText(m_sTitle + _T(" - ")+_T("whole project"));\r
+                               break;\r
+                       case 1: // show whole project\r
+                               m_LogList.m_Path=this->m_path;\r
+                               SetWindowText(m_sTitle + _T(" - ")+this->m_path.GetGitPathString());\r
+                               break;\r
+               }\r
 \r
-       switch (entry)\r
+       }else\r
        {\r
-       case 0: // show all branch;\r
-               m_LogList.m_bAllBranch=true;\r
-               break;\r
-       case 1: // show whole project\r
-               m_LogList.m_Path.Reset();\r
-               SetWindowText(m_sTitle + _T(" - "));\r
-               break;\r
+               INT_PTR entry = m_btnShow.GetCurrentEntry();\r
+               switch (entry)\r
+               {\r
+                       case 0: // show all branch\r
+                               m_LogList.m_bAllBranch=true;\r
+                               break;\r
+                       case 1: // show current branch\r
+                               m_LogList.m_bAllBranch=false;\r
+                               \r
+                               break;\r
+               }\r
        }\r
+\r
        m_LogList.m_bExitThread=TRUE;\r
        DWORD ret =::WaitForSingleObject(m_LogList.m_LoadingThread->m_hThread,20000);\r
        if(ret == WAIT_TIMEOUT)\r
@@ -641,51 +665,9 @@ void CLogDlg::Refresh (bool autoGoOnline)
        m_LogList.Refresh();\r
 }\r
 \r
-void CLogDlg::OnBnClickedNexthundred()\r
+void CLogDlg::OnBnClickShowWholeProject()\r
 {\r
-#if 0\r
-       UpdateData();\r
-       // we have to fetch the next X log messages.\r
-       if (m_logEntries.size() < 1)\r
-       {\r
-               // since there weren't any log messages fetched before, just\r
-               // fetch all since we don't have an 'anchor' to fetch the 'next'\r
-               // messages from.\r
-               return GetAll(true);\r
-       }\r
-       git_revnum_t rev = m_logEntries[m_logEntries.size()-1]->Rev;\r
-\r
-       if (rev < 1)\r
-               return;         // do nothing! No more revisions to get\r
-\r
-       m_startrev = rev;\r
-       m_endrev = 0;\r
-       m_bCancelled = FALSE;\r
-\r
-    // rev is is revision we already have and we will receive it again\r
-    // -> fetch one extra revision to get NumberOfLogs *new* revisions\r
-\r
-       m_limit = (int)(DWORD)CRegDWORD(_T("Software\\TortoiseGit\\NumberOfLogs"), 100) +1;\r
-       InterlockedExchange(&m_bNoDispUpdates, TRUE);\r
-       SetSortArrow(&m_LogList, -1, true);\r
-       InterlockedExchange(&m_bThreadRunning, TRUE);\r
-       // We need to create CStoreSelection on the heap or else\r
-       // the variable will run out of the scope before the\r
-       // thread ends. Therefore we let the thread delete\r
-       // the instance.\r
-       m_pStoreSelection = new CStoreSelection(this);\r
-\r
-       // since we fetch the log from the last revision we already have,\r
-       // we have to remove that revision entry to avoid getting it twice\r
-       m_logEntries.pop_back();\r
-       if (AfxBeginThread(LogThreadEntry, this)==NULL)\r
-       {\r
-               InterlockedExchange(&m_bThreadRunning, FALSE);\r
-               CMessageBox::Show(NULL, IDS_ERR_THREADSTARTFAILED, IDS_APPNAME, MB_OK | MB_ICONERROR);\r
-       }\r
-       InterlockedExchange(&m_bNoDispUpdates, TRUE);\r
-       GetDlgItem(IDC_LOGLIST)->UpdateData(FALSE);\r
-#endif\r
+       GetAll(true);\r
 }\r
 \r
 BOOL CLogDlg::Cancel()\r
@@ -734,8 +716,13 @@ void CLogDlg::OnCancel()
        UpdateData();\r
        if (m_bSaveStrict)\r
                m_regLastStrict = m_bStrict;\r
+       \r
        CRegDWORD reg = CRegDWORD(_T("Software\\TortoiseGit\\ShowAllEntry"));\r
        reg = m_btnShow.GetCurrentEntry();\r
+\r
+       reg = CRegDWORD(_T("Software\\TortoiseGit\\ShowWholeProject"));\r
+       reg = m_btnShowWholeProject.GetCurrentEntry();\r
+\r
        SaveSplitterPos();\r
        __super::OnCancel();\r
 }\r
@@ -2550,16 +2537,7 @@ void CLogDlg::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)
        SortShownListArray();\r
        m_LogList.Invalidate();\r
        UpdateLogInfoLabel();\r
-       // the "next 100" button only makes sense if the log messages\r
-       // are sorted by revision in descending order\r
-       if ((m_nSortColumn)||(m_bAscending))\r
-       {\r
-               DialogEnableWindow(IDC_NEXTHUNDRED, false);\r
-       }\r
-       else\r
-       {\r
-               DialogEnableWindow(IDC_NEXTHUNDRED, true);\r
-       }\r
+       \r
        *pResult = 0;\r
 }\r
 \r
index ad6a278..c023cea 100644 (file)
@@ -128,7 +128,7 @@ protected:
        afx_msg void OnDtnDatetimechangeDatefrom(NMHDR *pNMHDR, LRESULT *pResult);\r
        afx_msg void OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult);\r
        afx_msg void OnLvnColumnclickChangedFileList(NMHDR *pNMHDR, LRESULT *pResult);\r
-       afx_msg void OnBnClickedNexthundred();\r
+       afx_msg void OnBnClickShowWholeProject();\r
        afx_msg void OnBnClickedHidepaths();\r
        afx_msg void OnBnClickedCheckStoponcopy();\r
        \r
@@ -178,7 +178,7 @@ private:
        void SortByColumn(int nSortColumn, bool bAscending);\r
        \r
        void EnableOKButton();\r
-       void GetAll(bool bForceAll = false);\r
+       void GetAll(bool bIsShowProjectOrBranch = false);\r
        void UpdateLogInfoLabel();\r
        void SaveSplitterPos();\r
        bool ValidateRegexp(LPCTSTR regexp_str, tr1::wregex& pat, bool bMatchCase);\r
@@ -217,6 +217,7 @@ private:
        CFilterEdit                     m_cFilter;\r
        CProgressCtrl           m_LogProgress;\r
        CMenuButton                     m_btnShow;\r
+       CMenuButton                     m_btnShowWholeProject;\r
        CTGitPath                       m_path;\r
        CTGitPath                       m_mergePath;\r
        GitRev                          m_pegrev;\r
index 63938bb..7ef0435 100644 (file)
Binary files a/src/TortoiseProc/resource.h and b/src/TortoiseProc/resource.h differ