Add retry button when fetch failed
[TortoiseGit.git] / src / TortoiseMerge / RightView.cpp
blob1a4db7263f18201782e945e13fdf366e4ef1b003
1 // TortoiseGitMerge - a Diff/Patch program
3 // Copyright (C) 2006-2014 - TortoiseSVN
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 #include "stdafx.h"
20 #include "resource.h"
21 #include "AppUtils.h"
22 #if 0
23 #include "IconBitmapUtils.h"
24 #endif
26 #include "RightView.h"
27 #include "BottomView.h"
29 IMPLEMENT_DYNCREATE(CRightView, CBaseView)
31 CRightView::CRightView(void)
33 m_pwndRight = this;
34 m_pState = &m_AllState.right;
35 m_nStatusBarID = ID_INDICATOR_RIGHTVIEW;
38 CRightView::~CRightView(void)
42 void CRightView::UseBothLeftFirst()
44 if (!IsLeftViewGood())
45 return;
46 int nFirstViewLine = 0; // first view line in selection
47 int nLastViewLine = 0; // last view line in selection
49 if (!IsWritable())
50 return;
51 if (!GetViewSelection(nFirstViewLine, nLastViewLine))
52 return;
54 int nNextViewLine = nLastViewLine + 1; // first view line after selected block
56 CUndo::GetInstance().BeginGrouping();
58 // right original become added
59 for (int viewLine = nFirstViewLine; viewLine <= nLastViewLine; viewLine++)
61 if (!IsStateEmpty(GetViewState(viewLine)))
63 SetViewState(viewLine, DIFFSTATE_YOURSADDED);
66 SaveUndoStep();
68 for (int viewLine = nFirstViewLine; viewLine <= nLastViewLine; viewLine++)
70 viewdata line = m_pwndLeft->GetViewData(viewLine);
71 if (IsStateEmpty(line.state))
73 line.state = DIFFSTATE_EMPTY;
75 else
77 SetModified();
78 line.state = DIFFSTATE_THEIRSADDED;
80 InsertViewData(viewLine, line);
83 // now insert an empty block in left view
84 int nCount = nLastViewLine - nFirstViewLine + 1;
85 m_pwndLeft->InsertViewEmptyLines(nNextViewLine, nCount);
86 SaveUndoStep();
88 // clean up
89 int nRemovedLines = CleanEmptyLines();
90 SaveUndoStep();
91 UpdateViewLineNumbers();
92 SaveUndoStep();
94 CUndo::GetInstance().EndGrouping();
96 // final clean up
97 ClearSelection();
98 SetupAllViewSelection(nFirstViewLine, 2*nLastViewLine - nFirstViewLine - nRemovedLines + 1);
99 BuildAllScreen2ViewVector();
100 m_pwndLeft->Invalidate();
101 RefreshViews();
104 void CRightView::UseBothRightFirst()
106 if (!IsLeftViewGood())
107 return;
108 int nFirstViewLine = 0; // first view line in selection
109 int nLastViewLine = 0; // last view line in selection
111 if (!IsWritable())
112 return;
113 if (!GetViewSelection(nFirstViewLine, nLastViewLine))
114 return;
116 int nNextViewLine = nLastViewLine + 1; // first view line after selected block
118 CUndo::GetInstance().BeginGrouping();
120 // right original become added
121 for (int viewLine = nFirstViewLine; viewLine <= nLastViewLine; viewLine++)
123 if (!IsStateEmpty(GetViewState(viewLine)))
125 SetViewState(viewLine, DIFFSTATE_ADDED);
128 SaveUndoStep();
130 // your block is done, now insert their block
131 int viewindex = nNextViewLine;
132 for (int viewLine = nFirstViewLine; viewLine <= nLastViewLine; viewLine++)
134 viewdata line = m_pwndLeft->GetViewData(viewLine);
135 if (IsStateEmpty(line.state))
137 line.state = DIFFSTATE_EMPTY;
139 else
141 SetModified();
142 line.state = DIFFSTATE_THEIRSADDED;
144 InsertViewData(viewindex++, line);
146 SaveUndoStep();
148 // now insert an empty block in left view
149 int nCount = nLastViewLine - nFirstViewLine + 1;
150 m_pwndLeft->InsertViewEmptyLines(nFirstViewLine, nCount);
151 SaveUndoStep();
153 // clean up
154 int nRemovedLines = CleanEmptyLines();
155 SaveUndoStep();
156 UpdateViewLineNumbers();
157 SaveUndoStep();
159 CUndo::GetInstance().EndGrouping();
161 // final clean up
162 ClearSelection();
163 SetupAllViewSelection(nFirstViewLine, 2*nLastViewLine - nFirstViewLine - nRemovedLines + 1);
164 BuildAllScreen2ViewVector();
165 m_pwndLeft->Invalidate();
166 RefreshViews();
169 void CRightView::UseLeftBlock()
171 int nFirstViewLine = 0;
172 int nLastViewLine = 0;
174 if (!IsWritable())
175 return;
176 if (!GetViewSelection(nFirstViewLine, nLastViewLine))
177 return;
179 return UseViewBlock(m_pwndLeft, nFirstViewLine, nLastViewLine);
182 void CRightView::UseLeftFile()
184 int nFirstViewLine = 0;
185 int nLastViewLine = GetViewCount()-1;
187 if (!IsWritable())
188 return;
189 ClearSelection();
190 return UseViewBlock(m_pwndLeft, nFirstViewLine, nLastViewLine);
193 void CRightView::MarkBlock(bool marked)
195 int nFirstViewLine = 0;
196 int nLastViewLine = 0;
198 if (!IsWritable())
199 return;
200 if (!GetViewSelection(nFirstViewLine, nLastViewLine))
201 return;
202 CBaseView::MarkBlock(marked, nFirstViewLine, nLastViewLine);
205 void CRightView::UseViewFileExceptMarked()
207 CBaseView::UseViewFileExceptMarked(m_pwndLeft);
210 void CRightView::AddContextItems(CIconMenu& popup, DiffStates state)
212 const bool bShow = HasSelection() && (state != DIFFSTATE_UNKNOWN);
214 if (IsBottomViewGood())
216 if (bShow)
217 popup.AppendMenuIcon(POPUPCOMMAND_USEYOURBLOCK, IDS_VIEWCONTEXTMENU_USETHISBLOCK);
218 popup.AppendMenuIcon(POPUPCOMMAND_USEYOURFILE, IDS_VIEWCONTEXTMENU_USETHISFILE);
219 if (bShow)
221 popup.AppendMenuIcon(POPUPCOMMAND_USEYOURANDTHEIRBLOCK, IDS_VIEWCONTEXTMENU_USEYOURANDTHEIRBLOCK);
222 popup.AppendMenuIcon(POPUPCOMMAND_USETHEIRANDYOURBLOCK, IDS_VIEWCONTEXTMENU_USETHEIRANDYOURBLOCK);
225 else
227 if (bShow)
229 popup.AppendMenuIcon(POPUPCOMMAND_USELEFTBLOCK, IDS_VIEWCONTEXTMENU_USEOTHERBLOCK);
230 popup.AppendMenuIcon(POPUPCOMMAND_USEBOTHRIGHTFIRST, IDS_VIEWCONTEXTMENU_USEBOTHTHISFIRST);
231 popup.AppendMenuIcon(POPUPCOMMAND_USEBOTHLEFTFIRST, IDS_VIEWCONTEXTMENU_USEBOTHTHISLAST);
232 if (IsLeftViewGood() && !m_pwndLeft->IsReadonly())
234 popup.AppendMenu(MF_SEPARATOR, NULL);
235 popup.AppendMenuIcon(POPUPCOMMAND_PREPENDFROMRIGHT, IDS_VIEWCONTEXTMENU_PREPENDTHIS);
236 popup.AppendMenuIcon(POPUPCOMMAND_REPLACEBYRIGHT, IDS_VIEWCONTEXTMENU_USETHIS);
237 popup.AppendMenuIcon(POPUPCOMMAND_APPENDFROMRIGHT, IDS_VIEWCONTEXTMENU_APPENDTHIS);
239 popup.AppendMenu(MF_SEPARATOR, NULL);
242 int nFirstViewLine = 0;
243 int nLastViewLine = 0;
244 if (GetViewSelection(nFirstViewLine, nLastViewLine))
246 bool showMark = true;
247 bool showUnmark = true;
248 if (nFirstViewLine == nLastViewLine)
250 showUnmark = GetViewMarked(nFirstViewLine);
251 showMark = !showUnmark;
253 if (showMark)
254 popup.AppendMenuIcon(POPUPCOMMAND_MARKBLOCK, IDS_VIEWCONTEXTMENU_MARKBLOCK);
255 if (showUnmark)
256 popup.AppendMenuIcon(POPUPCOMMAND_UNMARKBLOCK, IDS_VIEWCONTEXTMENU_UNMARKBLOCK);
258 popup.AppendMenuIcon(POPUPCOMMAND_USELEFTFILEEXCEPTMARKED, IDS_VIEWCONTEXTMENU_USELEFTFILEEXCEPTMARKED);
259 popup.AppendMenuIcon(POPUPCOMMAND_USELEFTFILE, IDS_VIEWCONTEXTMENU_USEOTHERFILE);
260 if (IsLeftViewGood() && !m_pwndLeft->IsReadonly())
262 popup.AppendMenuIcon(POPUPCOMMAND_USERIGHTFILE, IDS_VIEWCONTEXTMENU_USETHISFILE);
266 CBaseView::AddContextItems(popup, state);