1 // RebaseDlg.cpp : implementation file
\r
5 #include "TortoiseProc.h"
\r
6 #include "RebaseDlg.h"
\r
11 IMPLEMENT_DYNAMIC(CRebaseDlg, CResizableStandAloneDialog)
\r
13 CRebaseDlg::CRebaseDlg(CWnd* pParent /*=NULL*/)
\r
14 : CResizableStandAloneDialog(CRebaseDlg::IDD, pParent)
\r
16 , m_bSquashAll(FALSE)
\r
22 CRebaseDlg::~CRebaseDlg()
\r
26 void CRebaseDlg::DoDataExchange(CDataExchange* pDX)
\r
28 CDialog::DoDataExchange(pDX);
\r
29 DDX_Control(pDX, IDC_REBASE_PROGRESS, m_ProgressBar);
\r
30 DDX_Control(pDX, IDC_STATUS_STATIC, m_CtrlStatusText);
\r
31 DDX_Check(pDX, IDC_PICK_ALL, m_bPickAll);
\r
32 DDX_Check(pDX, IDC_SQUASH_ALL, m_bSquashAll);
\r
33 DDX_Check(pDX, IDC_EDIT_ALL, m_bEditAll);
\r
34 DDX_Control(pDX, IDC_REBASE_SPLIT, m_wndSplitter);
\r
35 DDX_Control(pDX,IDC_COMMIT_LIST,m_CommitList);
\r
36 DDX_Control(pDX,IDC_REBASE_COMBOXEX_BRANCH, this->m_BranchCtrl);
\r
37 DDX_Control(pDX,IDC_REBASE_COMBOXEX_UPSTREAM, this->m_UpstreamCtrl);
\r
42 BEGIN_MESSAGE_MAP(CRebaseDlg, CResizableStandAloneDialog)
\r
43 ON_BN_CLICKED(IDC_PICK_ALL, &CRebaseDlg::OnBnClickedPickAll)
\r
44 ON_BN_CLICKED(IDC_SQUASH_ALL, &CRebaseDlg::OnBnClickedSquashAll)
\r
45 ON_BN_CLICKED(IDC_EDIT_ALL, &CRebaseDlg::OnBnClickedEditAll)
\r
46 ON_BN_CLICKED(IDC_REBASE_SPLIT, &CRebaseDlg::OnBnClickedRebaseSplit)
\r
50 void CRebaseDlg::AddRebaseAnchor()
\r
52 AddAnchor(IDC_REBASE_TAB,TOP_LEFT,BOTTOM_RIGHT);
\r
53 AddAnchor(IDC_COMMIT_LIST,TOP_LEFT, TOP_RIGHT);
\r
54 AddAnchor(IDC_REBASE_SPLIT,TOP_LEFT, TOP_RIGHT);
\r
55 AddAnchor(IDC_STATUS_STATIC, BOTTOM_LEFT,BOTTOM_RIGHT);
\r
56 AddAnchor(IDC_REBASE_CONTINUE,BOTTOM_RIGHT);
\r
57 AddAnchor(IDC_REBASE_ABORT, BOTTOM_RIGHT);
\r
58 AddAnchor(IDC_REBASE_PROGRESS,BOTTOM_LEFT, BOTTOM_RIGHT);
\r
59 AddAnchor(IDC_PICK_ALL,TOP_LEFT);
\r
60 AddAnchor(IDC_SQUASH_ALL,TOP_LEFT);
\r
61 AddAnchor(IDC_EDIT_ALL,TOP_LEFT);
\r
62 AddAnchor(IDC_REBASE_COMBOXEX_UPSTREAM,TOP_LEFT);
\r
63 AddAnchor(IDC_REBASE_COMBOXEX_BRANCH,TOP_LEFT);
\r
64 AddAnchor(IDC_REBASE_STATIC_UPSTREAM,TOP_LEFT);
\r
65 AddAnchor(IDC_REBASE_STATIC_BRANCH,TOP_LEFT);
\r
69 BOOL CRebaseDlg::OnInitDialog()
\r
71 CResizableStandAloneDialog::OnInitDialog();
\r
74 //IDC_REBASE_DUMY_TAB
\r
76 GetClientRect(m_DlgOrigRect);
\r
77 m_CommitList.GetClientRect(m_CommitListOrigRect);
\r
79 CWnd *pwnd=this->GetDlgItem(IDC_REBASE_DUMY_TAB);
\r
80 pwnd->GetWindowRect(&rectDummy);
\r
83 rectDummy.bottom-=20;
\r
88 if (!m_ctrlTabCtrl.Create(CMFCTabCtrl::STYLE_FLAT, rectDummy, this, IDC_REBASE_TAB))
\r
90 TRACE0("Failed to create output tab window\n");
\r
91 return FALSE; // fail to create
\r
93 m_ctrlTabCtrl.SetResizeMode(CMFCTabCtrl::RESIZE_NO);
\r
94 // Create output panes:
\r
95 //const DWORD dwStyle = LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL;
\r
96 const DWORD dwStyle =LVS_REPORT | LVS_SHOWSELALWAYS | LVS_ALIGNLEFT | LVS_OWNERDATA | WS_BORDER | WS_TABSTOP |LVS_SINGLESEL |WS_CHILD | WS_VISIBLE;
\r
98 if (! this->m_FileListCtrl.Create(dwStyle,rectDummy,&this->m_ctrlTabCtrl,0) )
\r
100 TRACE0("Failed to create output windows\n");
\r
101 return FALSE; // fail to create
\r
104 if( ! this->m_LogMessageCtrl.Create(_T("Scintilla"),_T("source"),0,rectDummy,&m_ctrlTabCtrl,0,0) )
\r
106 TRACE0("Failed to create log message control");
\r
110 m_FileListCtrl.Init(SVNSLC_COLEXT | SVNSLC_COLSTATUS , _T("RebaseDlg"));
\r
112 m_ctrlTabCtrl.AddTab(&m_FileListCtrl,_T("Modified File"));
\r
113 m_ctrlTabCtrl.AddTab(&m_LogMessageCtrl,_T("Log Message"),1);
\r
117 EnableSaveRestore(_T("RebaseDlg"));
\r
119 DWORD yPos = CRegDWORD(_T("Software\\TortoiseGit\\TortoiseProc\\ResizableState\\RebaseDlgSizer"));
\r
120 RECT rcDlg, rcLogMsg, rcFileList;
\r
121 GetClientRect(&rcDlg);
\r
122 m_CommitList.GetWindowRect(&rcLogMsg);
\r
123 ScreenToClient(&rcLogMsg);
\r
124 this->m_ctrlTabCtrl.GetWindowRect(&rcFileList);
\r
125 ScreenToClient(&rcFileList);
\r
129 m_wndSplitter.GetWindowRect(&rectSplitter);
\r
130 ScreenToClient(&rectSplitter);
\r
131 int delta = yPos - rectSplitter.top;
\r
132 if ((rcLogMsg.bottom + delta > rcLogMsg.top)&&(rcLogMsg.bottom + delta < rcFileList.bottom - 30))
\r
134 m_wndSplitter.SetWindowPos(NULL, 0, yPos, 0, 0, SWP_NOSIZE);
\r
142 // CRebaseDlg message handlers
\r
144 void CRebaseDlg::OnBnClickedPickAll()
\r
146 // TODO: Add your control notification handler code here
\r
149 void CRebaseDlg::OnBnClickedSquashAll()
\r
151 // TODO: Add your control notification handler code here
\r
154 void CRebaseDlg::OnBnClickedEditAll()
\r
156 // TODO: Add your control notification handler code here
\r
159 void CRebaseDlg::OnBnClickedRebaseSplit()
\r
161 // TODO: Add your control notification handler code here
\r
164 LRESULT CRebaseDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
\r
168 if (wParam == IDC_REBASE_SPLIT)
\r
170 SPC_NMHDR* pHdr = (SPC_NMHDR*) lParam;
\r
171 DoSize(pHdr->delta);
\r
176 return __super::DefWindowProc(message, wParam, lParam);
\r
179 void CRebaseDlg::DoSize(int delta)
\r
182 this->RemoveAllAnchors();
\r
184 CSplitterControl::ChangeHeight(GetDlgItem(IDC_COMMIT_LIST), delta, CW_TOPALIGN);
\r
185 //CSplitterControl::ChangeHeight(GetDlgItem(), delta, CW_TOPALIGN);
\r
186 CSplitterControl::ChangeHeight(GetDlgItem(IDC_REBASE_TAB), -delta, CW_BOTTOMALIGN);
\r
187 //CSplitterControl::ChangeHeight(GetDlgItem(), -delta, CW_BOTTOMALIGN);
\r
188 CSplitterControl::ChangePos(GetDlgItem(IDC_SQUASH_ALL),0,delta);
\r
189 CSplitterControl::ChangePos(GetDlgItem(IDC_PICK_ALL),0,delta);
\r
190 CSplitterControl::ChangePos(GetDlgItem(IDC_EDIT_ALL),0,delta);
\r
192 this->AddRebaseAnchor();
\r
193 // adjust the minimum size of the dialog to prevent the resizing from
\r
194 // moving the list control too far down.
\r
196 m_CommitList.GetClientRect(rcLogMsg);
\r
197 SetMinTrackSize(CSize(m_DlgOrigRect.Width(), m_DlgOrigRect.Height()-m_CommitListOrigRect.Height()+rcLogMsg.Height()));
\r
199 SetSplitterRange();
\r
200 // m_CommitList.Invalidate();
\r
202 // GetDlgItem(IDC_LOGMESSAGE)->Invalidate();
\r
204 this->m_ctrlTabCtrl.Invalidate();
\r
205 this->m_CommitList.Invalidate();
\r
206 this->m_FileListCtrl.Invalidate();
\r
207 this->m_LogMessageCtrl.Invalidate();
\r
211 void CRebaseDlg::SetSplitterRange()
\r
213 if ((m_CommitList)&&(m_ctrlTabCtrl))
\r
216 m_CommitList.GetWindowRect(rcTop);
\r
217 ScreenToClient(rcTop);
\r
219 m_ctrlTabCtrl.GetWindowRect(rcMiddle);
\r
220 ScreenToClient(rcMiddle);
\r
221 if (rcMiddle.Height() && rcMiddle.Width())
\r
222 m_wndSplitter.SetRange(rcTop.top+60, rcMiddle.bottom-80);
\r
226 void CRebaseDlg::OnSize(UINT nType,int cx, int cy)
\r
228 // first, let the resizing take place
\r
229 __super::OnSize(nType, cx, cy);
\r
232 SetSplitterRange();
\r
235 void CRebaseDlg::SaveSplitterPos()
\r
239 CRegDWORD regPos = CRegDWORD(_T("Software\\TortoiseGit\\TortoiseProc\\ResizableState\\RebaseDlgSizer"));
\r
241 m_wndSplitter.GetWindowRect(&rectSplitter);
\r
242 ScreenToClient(&rectSplitter);
\r
243 regPos = rectSplitter.top;
\r