From 8bf94811e3495d28d7be0fa3f2fc460b0d79265a Mon Sep 17 00:00:00 2001 From: Frank Li Date: Thu, 14 Feb 2013 17:05:49 +0800 Subject: [PATCH] GitTortoiseList: Finish rework task Put most function to CGitProgressList from CGitProgressDlg Signed-off-by: Frank Li Signed-off-by: Sven Strickroth --- src/TortoiseProc/GitProgressDlg.cpp | 44 +++++++++++++++- src/TortoiseProc/GitProgressDlg.h | 9 +++- src/TortoiseProc/GitProgressList.cpp | 97 +++++++++++++++++++----------------- src/TortoiseProc/GitProgressList.h | 8 ++- 4 files changed, 107 insertions(+), 51 deletions(-) diff --git a/src/TortoiseProc/GitProgressDlg.cpp b/src/TortoiseProc/GitProgressDlg.cpp index 3c2cde644..bfb5bc023 100644 --- a/src/TortoiseProc/GitProgressDlg.cpp +++ b/src/TortoiseProc/GitProgressDlg.cpp @@ -81,6 +81,9 @@ void CGitProgressDlg::DoDataExchange(CDataExchange* pDX) CResizableStandAloneDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_SVNPROGRESS, m_ProgList); DDX_Control(pDX, IDC_TITLE_ANIMATE, m_Animate); + DDX_Control(pDX, IDC_PROGRESSBAR, m_ProgCtrl); + DDX_Control(pDX, IDC_INFOTEXT, m_InfoCtrl); + DDX_Control(pDX, IDC_PROGRESSLABEL, m_ProgLableCtrl); } BEGIN_MESSAGE_MAP(CGitProgressDlg, CResizableStandAloneDialog) @@ -90,11 +93,12 @@ BEGIN_MESSAGE_MAP(CGitProgressDlg, CResizableStandAloneDialog) ON_EN_SETFOCUS(IDC_INFOTEXT, &CGitProgressDlg::OnEnSetfocusInfotext) ON_BN_CLICKED(IDC_NONINTERACTIVE, &CGitProgressDlg::OnBnClickedNoninteractive) ON_WM_CTLCOLOR() + ON_MESSAGE(WM_PROG_CMD_FINISH, OnCmdEnd) + ON_MESSAGE(WM_PROG_CMD_START, OnCmdStart) END_MESSAGE_MAP() - BOOL CGitProgressDlg::OnInitDialog() { __super::OnInitDialog(); @@ -115,12 +119,17 @@ BOOL CGitProgressDlg::OnInitDialog() m_Animate.Open(IDR_DOWNLOAD); m_ProgList.m_pAnimate = &m_Animate; + m_ProgList.m_pProgControl = &m_ProgCtrl; + m_ProgList.m_pProgressLabelCtrl = &m_ProgLableCtrl; + m_ProgList.m_pInfoCtrl = &m_InfoCtrl; if (hWndExplorer) CenterWindow(CWnd::FromHandle(hWndExplorer)); EnableSaveRestore(_T("GITProgressDlg")); m_background_brush.CreateSolidBrush(GetSysColor(COLOR_WINDOW)); + m_ProgList.Init(); + return TRUE; } @@ -274,4 +283,35 @@ HBRUSH CGitProgressDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) // TODO: Return a different brush if the default is not desired return hbr; -} \ No newline at end of file +} + +LRESULT CGitProgressDlg::OnCmdEnd(WPARAM wParam, LPARAM /*lParam*/) +{ + DialogEnableWindow(IDCANCEL, FALSE); + DialogEnableWindow(IDOK, TRUE); + + switch(wParam) + { + case CGitProgressList::GitProgress_Add: + case CGitProgressList::GitProgress_Revert: + this->GetDlgItem(IDC_LOGBUTTON)->SetWindowText(CString(MAKEINTRESOURCE(IDS_COMMITBUTTON))); + this->GetDlgItem(IDC_LOGBUTTON)->ShowWindow(SW_SHOW); + break; + } + + CWnd * pWndOk = GetDlgItem(IDOK); + if (pWndOk && ::IsWindow(pWndOk->GetSafeHwnd())) + { + SendMessage(DM_SETDEFID, IDOK); + GetDlgItem(IDOK)->SetFocus(); + } + + return 0; +} +LRESULT CGitProgressDlg::OnCmdStart(WPARAM /*wParam*/, LPARAM /*lParam*/) +{ + DialogEnableWindow(IDOK, FALSE); + DialogEnableWindow(IDCANCEL, TRUE); + + return 0; +} diff --git a/src/TortoiseProc/GitProgressDlg.h b/src/TortoiseProc/GitProgressDlg.h index 5f0672cb8..bedcbb2cf 100644 --- a/src/TortoiseProc/GitProgressDlg.h +++ b/src/TortoiseProc/GitProgressDlg.h @@ -102,15 +102,20 @@ protected: afx_msg void OnEnSetfocusInfotext(); afx_msg LRESULT OnCtlColorStatic(WPARAM wParam, LPARAM lParam); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); - + LRESULT OnCmdEnd(WPARAM wParam, LPARAM lParam); + LRESULT OnCmdStart(WPARAM wParam, LPARAM lParam); + DECLARE_MESSAGE_MAP() private: virtual void OnOK(); CAnimateCtrl m_Animate; + CProgressCtrl m_ProgCtrl; CGitProgressList m_ProgList; + CEdit m_InfoCtrl; + CStatic m_ProgLableCtrl; + CBrush m_background_brush; DWORD m_dwCloseOnEnd; - }; diff --git a/src/TortoiseProc/GitProgressList.cpp b/src/TortoiseProc/GitProgressList.cpp index 06ea26b05..e27700b48 100644 --- a/src/TortoiseProc/GitProgressList.cpp +++ b/src/TortoiseProc/GitProgressList.cpp @@ -81,7 +81,10 @@ CGitProgressList::CGitProgressList():CListCtrl() , m_AutoTag(GIT_REMOTE_DOWNLOAD_TAGS_AUTO) , m_options(ProgOptNone) { - + m_pInfoCtrl = nullptr; + m_pAnimate = nullptr; + m_pProgControl = nullptr; + m_pProgressLabelCtrl = nullptr; } CGitProgressList::~CGitProgressList() @@ -109,7 +112,6 @@ BEGIN_MESSAGE_MAP(CGitProgressList, CListCtrl) ON_WM_SIZE() ON_WM_TIMER() ON_WM_CONTEXTMENU() - ON_WM_CREATE() ON_WM_CLOSE() END_MESSAGE_MAP() @@ -524,10 +526,12 @@ BOOL CGitProgressList::Notify(const CTGitPath& path, git_wc_notify_action_t acti AddItemToList(); if ((!data->bAuxItem) && (m_itemCount > 0)) { - CProgressCtrl * progControl = (CProgressCtrl *)GetDlgItem(IDC_PROGRESSBAR); - progControl->ShowWindow(SW_SHOW); - progControl->SetPos(m_itemCount); - progControl->SetRange32(0, m_itemCountTotal); + if (m_pProgControl) + { + m_pProgControl->ShowWindow(SW_SHOW); + m_pProgControl->SetPos(m_itemCount); + m_pProgControl->SetRange32(0, m_itemCountTotal); + } if (m_pTaskbarList) { m_pTaskbarList->SetProgressState(m_hWnd, TBPF_NORMAL); @@ -819,10 +823,16 @@ UINT CGitProgressList::ProgressThread() bool bSuccess = false; m_AlwaysConflicted = false; -#if 0 //need - DialogEnableWindow(IDOK, FALSE); - DialogEnableWindow(IDCANCEL, TRUE); -#endif + CWnd *wnd = GetParent(); + if(wnd) + wnd->PostMessage(WM_PROG_CMD_START, m_Command); + + if(m_pProgressLabelCtrl) + { + m_pProgressLabelCtrl->ShowWindow(SW_SHOW); + m_pProgressLabelCtrl->SetWindowText(_T("")); + } + // SetAndClearProgressInfo(m_hWnd); m_itemCount = m_itemCountTotal; @@ -889,22 +899,13 @@ UINT CGitProgressList::ProgressThread() m_pTaskbarList->SetProgressState(m_hWnd, TBPF_NOPROGRESS); } -#if 0//need - DialogEnableWindow(IDCANCEL, FALSE); - DialogEnableWindow(IDOK, TRUE); -#endif - CString info = BuildInfoString(); if (!bSuccess) info.LoadString(IDS_PROGRS_INFOFAILED); - SetDlgItemText(IDC_INFOTEXT, info); + if (m_pInfoCtrl) + m_pInfoCtrl->SetWindowText(info); + ResizeColumns(); - CWnd * pWndOk = GetDlgItem(IDOK); - if (pWndOk && ::IsWindow(pWndOk->GetSafeHwnd())) - { - SendMessage(DM_SETDEFID, IDOK); - GetDlgItem(IDOK)->SetFocus(); - } CString sFinalInfo; if (!m_sTotalBytesTransferred.IsEmpty()) @@ -912,12 +913,17 @@ UINT CGitProgressList::ProgressThread() CTimeSpan time = CTime::GetCurrentTime() - startTime; temp.Format(IDS_PROGRS_TIME, (LONG)time.GetTotalMinutes(), (LONG)time.GetSeconds()); sFinalInfo.Format(IDS_PROGRS_FINALINFO, m_sTotalBytesTransferred, (LPCTSTR)temp); - SetDlgItemText(IDC_PROGRESSLABEL, sFinalInfo); + if (m_pProgressLabelCtrl) + m_pProgressLabelCtrl->SetWindowText(sFinalInfo); } else - GetDlgItem(IDC_PROGRESSLABEL)->ShowWindow(SW_HIDE); + { + if (m_pProgressLabelCtrl) + m_pProgressLabelCtrl->ShowWindow(SW_HIDE); + } - GetDlgItem(IDC_PROGRESSBAR)->ShowWindow(SW_HIDE); + if (m_pProgControl) + m_pProgControl->ShowWindow(SW_HIDE); if (!m_bFinishedItemAdded) { @@ -955,6 +961,10 @@ UINT CGitProgressList::ProgressThread() RefreshCursor(); #endif + CWnd *pwd = this->GetParent(); + if (pwd) + pwd->PostMessage(WM_PROG_CMD_FINISH, this->m_Command, 0L); + #if 0 DWORD dwAutoClose = CRegStdDWORD(_T("Software\\TortoiseGit\\AutoClose"), CLOSE_MANUAL); if (m_options & ProgOptDryRun) @@ -1176,22 +1186,25 @@ BOOL CGitProgressList::Notify(const git_wc_notify_action_t /*action*/, const git return TRUE; } - CProgressCtrl * progControl = (CProgressCtrl *)GetDlgItem(IDC_PROGRESSBAR); - int progress; progress = stat->received_objects + stat->indexed_objects; - if ((stat->total_objects > 1000) && (!progControl->IsWindowVisible())) + if ((stat->total_objects > 1000) && m_pProgControl && (!m_pProgControl->IsWindowVisible())) { - progControl->ShowWindow(SW_SHOW); + if (m_pProgControl) + m_pProgControl->ShowWindow(SW_SHOW); if (m_pTaskbarList) m_pTaskbarList->SetProgressState(m_hWnd, TBPF_NORMAL); } - if (!GetDlgItem(IDC_PROGRESSLABEL)->IsWindowVisible()) - GetDlgItem(IDC_PROGRESSLABEL)->ShowWindow(SW_SHOW); - progControl->SetPos(progress); - progControl->SetRange32(0, 2 * stat->total_objects); + if (m_pProgressLabelCtrl && m_pProgressLabelCtrl->IsWindowVisible()) + m_pProgressLabelCtrl->ShowWindow(SW_SHOW); + + if (m_pProgControl) + { + m_pProgControl->SetPos(progress); + m_pProgControl->SetRange32(0, 2 * stat->total_objects); + } if (m_pTaskbarList) { m_pTaskbarList->SetProgressState(m_hWnd, TBPF_NORMAL); @@ -1215,7 +1228,8 @@ BOOL CGitProgressList::Notify(const git_wc_notify_action_t /*action*/, const git str.Format(_T("%.2fMB/s"), speed / 1024000.0); progText.Format(IDS_SVN_PROGRESS_TOTALANDSPEED, (LPCTSTR)m_sTotalBytesTransferred, (LPCTSTR)str); - SetDlgItemText(IDC_PROGRESSLABEL, progText); + if (m_pProgressLabelCtrl) + m_pProgressLabelCtrl->SetWindowText(progText); return TRUE; } @@ -1271,7 +1285,9 @@ void CGitProgressList::OnTimer(UINT_PTR nIDEvent) CString progSpeed; progSpeed.Format(IDS_SVN_PROGRESS_BYTES_SEC, 0); progText.Format(IDS_SVN_PROGRESS_TOTALANDSPEED, (LPCTSTR)m_sTotalBytesTransferred, (LPCTSTR)progSpeed); - SetDlgItemText(IDC_PROGRESSLABEL, progText); + if (m_pProgressLabelCtrl) + m_pProgressLabelCtrl->SetWindowText(progText); + KillTimer(TRANSFERTIMER); } if (nIDEvent == VISIBLETIMER) @@ -1828,8 +1844,6 @@ bool CGitProgressList::CmdAdd(CString& sWindowTitle, bool& localoperation) CShellUpdater::Instance().AddPathsForUpdate(m_targetPathList); - this->GetDlgItem(IDC_LOGBUTTON)->SetWindowText(_T("Commit ...")); - this->GetDlgItem(IDC_LOGBUTTON)->ShowWindow(SW_SHOW); return true; } @@ -2000,9 +2014,6 @@ bool CGitProgressList::CmdResolve(CString& sWindowTitle, bool& localoperation) #endif CShellUpdater::Instance().AddPathsForUpdate(m_targetPathList); - this->GetDlgItem(IDC_LOGBUTTON)->SetWindowText(CString(MAKEINTRESOURCE(IDS_COMMITBUTTON))); - this->GetDlgItem(IDC_LOGBUTTON)->ShowWindow(SW_SHOW); - return true; } @@ -2364,10 +2375,8 @@ bool CGitProgressList::CmdFetch(CString& sWindowTitle, bool& /*localoperation*/) } -int CGitProgressList::OnCreate(LPCREATESTRUCT lpCreateStruct) +void CGitProgressList::Init() { - if (CListCtrl::OnCreate(lpCreateStruct) == -1) - return -1; // Let the TaskbarButtonCreated message through the UIPI filter. If we don't // do this, Explorer would be unable to send that message to our window if we @@ -2417,8 +2426,6 @@ int CGitProgressList::OnCreate(LPCREATESTRUCT lpCreateStruct) ResizeColumns(); SetTimer(VISIBLETIMER, 300, NULL); - - return 0; } diff --git a/src/TortoiseProc/GitProgressList.h b/src/TortoiseProc/GitProgressList.h index f9933b9a6..9afce83a2 100644 --- a/src/TortoiseProc/GitProgressList.h +++ b/src/TortoiseProc/GitProgressList.h @@ -87,6 +87,8 @@ typedef enum // CGitProgressList struct git_transfer_progress; #define WM_SHOWCONFLICTRESOLVER (WM_APP + 100) +#define WM_PROG_CMD_FINISH (WM_APP + 200) +#define WM_PROG_CMD_START (WM_APP + 201) class CGitProgressList : public CListCtrl { @@ -143,8 +145,10 @@ public: bool SetBackgroundImage(UINT nID); bool DidErrorsOccur() {return m_bErrorsOccurred;} bool m_bErrorsOccurred; - CWnd *m_pTextCtrl; + CWnd *m_pProgressLabelCtrl; + CWnd *m_pInfoCtrl; CAnimateCtrl *m_pAnimate; + CProgressCtrl *m_pProgControl; Command m_Command; virtual BOOL Cancel(); volatile BOOL IsCancelled() {return m_bCancelled;} @@ -376,7 +380,7 @@ private: CString m_RefSpec; int m_AutoTag; public: - afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); + void Init(); afx_msg void OnClose(); virtual BOOL PreTranslateMessage(MSG* pMsg); }; -- 2.11.4.GIT