joachim99@69
|
1 /***************************************************************************
|
joachim99@69
|
2 mergeresultwindow.h - description
|
joachim99@69
|
3 -------------------
|
joachim99@69
|
4 begin : Mon Mar 18 2002
|
joachim99@77
|
5 copyright : (C) 2002-2007 by Joachim Eibl
|
joachim99@69
|
6 email : joachim.eibl at gmx.de
|
joachim99@69
|
7 ***************************************************************************/
|
joachim99@69
|
8
|
joachim99@69
|
9 /***************************************************************************
|
joachim99@69
|
10 * *
|
joachim99@69
|
11 * This program is free software; you can redistribute it and/or modify *
|
joachim99@69
|
12 * it under the terms of the GNU General Public License as published by *
|
joachim99@69
|
13 * the Free Software Foundation; either version 2 of the License, or *
|
joachim99@69
|
14 * (at your option) any later version. *
|
joachim99@69
|
15 * *
|
joachim99@69
|
16 ***************************************************************************/
|
joachim99@69
|
17
|
joachim99@69
|
18 #ifndef MERGERESULTWINDOW_H
|
joachim99@69
|
19 #define MERGERESULTWINDOW_H
|
joachim99@69
|
20
|
joachim99@69
|
21 #include "diff.h"
|
joachim99@69
|
22
|
joachim99@75
|
23 #include <QWidget>
|
joachim99@75
|
24 #include <QPixmap>
|
joachim99@75
|
25 #include <QTimer>
|
joachim99@80
|
26 #include <QStatusBar>
|
joachim99@69
|
27
|
joachim99@69
|
28 class QPainter;
|
joachim99@69
|
29
|
joachim99@69
|
30 class Overview : public QWidget
|
joachim99@69
|
31 {
|
joachim99@69
|
32 Q_OBJECT
|
joachim99@69
|
33 public:
|
joachim99@75
|
34 Overview( OptionDialog* pOptions );
|
joachim99@69
|
35
|
joachim99@69
|
36 void init( Diff3LineList* pDiff3LineList, bool bTripleDiff );
|
joachim99@69
|
37 void reset();
|
joachim99@69
|
38 void setRange( int firstLine, int pageHeight );
|
joachim99@69
|
39 void setPaintingAllowed( bool bAllowPainting );
|
joachim99@69
|
40
|
joachim99@69
|
41 enum e_OverviewMode { eOMNormal, eOMAvsB, eOMAvsC, eOMBvsC };
|
joachim99@69
|
42 void setOverviewMode( e_OverviewMode eOverviewMode );
|
joachim99@69
|
43 e_OverviewMode getOverviewMode();
|
joachim99@69
|
44
|
joachim99@69
|
45 public slots:
|
joachim99@69
|
46 void setFirstLine(int firstLine);
|
joachim99@69
|
47 void slotRedraw();
|
joachim99@69
|
48 signals:
|
joachim99@69
|
49 void setLine(int);
|
joachim99@69
|
50 private:
|
joachim99@69
|
51 const Diff3LineList* m_pDiff3LineList;
|
joachim99@69
|
52 OptionDialog* m_pOptions;
|
joachim99@69
|
53 bool m_bTripleDiff;
|
joachim99@69
|
54 int m_firstLine;
|
joachim99@69
|
55 int m_pageHeight;
|
joachim99@69
|
56 QPixmap m_pixmap;
|
joachim99@69
|
57 bool m_bPaintingAllowed;
|
joachim99@69
|
58 e_OverviewMode m_eOverviewMode;
|
joachim99@69
|
59 int m_nofLines;
|
joachim99@69
|
60
|
joachim99@69
|
61 virtual void paintEvent( QPaintEvent* e );
|
joachim99@69
|
62 virtual void mousePressEvent( QMouseEvent* e );
|
joachim99@69
|
63 virtual void mouseMoveEvent( QMouseEvent* e );
|
joachim99@69
|
64 void drawColumn( QPainter& p, e_OverviewMode eOverviewMode, int x, int w, int h, int nofLines );
|
joachim99@69
|
65 };
|
joachim99@69
|
66
|
joachim99@69
|
67
|
joachim99@69
|
68 enum e_MergeDetails
|
joachim99@69
|
69 {
|
joachim99@69
|
70 eDefault,
|
joachim99@69
|
71 eNoChange,
|
joachim99@69
|
72 eBChanged,
|
joachim99@69
|
73 eCChanged,
|
joachim99@69
|
74 eBCChanged, // conflict
|
joachim99@69
|
75 eBCChangedAndEqual, // possible conflict
|
joachim99@69
|
76 eBDeleted,
|
joachim99@69
|
77 eCDeleted,
|
joachim99@69
|
78 eBCDeleted, // possible conflict
|
joachim99@69
|
79
|
joachim99@69
|
80 eBChanged_CDeleted, // conflict
|
joachim99@69
|
81 eCChanged_BDeleted, // conflict
|
joachim99@69
|
82 eBAdded,
|
joachim99@69
|
83 eCAdded,
|
joachim99@69
|
84 eBCAdded, // conflict
|
joachim99@69
|
85 eBCAddedAndEqual // possible conflict
|
joachim99@69
|
86 };
|
joachim99@69
|
87
|
joachim99@69
|
88 void mergeOneLine( const Diff3Line& d, e_MergeDetails& mergeDetails, bool& bConflict, bool& bLineRemoved, int& src, bool bTwoInputs );
|
joachim99@69
|
89
|
joachim99@69
|
90 enum e_MergeSrcSelector
|
joachim99@69
|
91 {
|
joachim99@69
|
92 A=1,
|
joachim99@69
|
93 B=2,
|
joachim99@69
|
94 C=3
|
joachim99@69
|
95 };
|
joachim99@69
|
96
|
joachim99@69
|
97 class MergeResultWindow : public QWidget
|
joachim99@69
|
98 {
|
joachim99@69
|
99 Q_OBJECT
|
joachim99@69
|
100 public:
|
joachim99@69
|
101 MergeResultWindow(
|
joachim99@69
|
102 QWidget* pParent,
|
joachim99@69
|
103 OptionDialog* pOptionDialog,
|
joachim99@69
|
104 QStatusBar* pStatusBar
|
joachim99@69
|
105 );
|
joachim99@69
|
106
|
joachim99@69
|
107 void init(
|
joachim99@69
|
108 const LineData* pLineDataA, int sizeA,
|
joachim99@69
|
109 const LineData* pLineDataB, int sizeB,
|
joachim99@69
|
110 const LineData* pLineDataC, int sizeC,
|
joachim99@69
|
111 const Diff3LineList* pDiff3LineList,
|
joachim99@75
|
112 TotalDiffStatus* pTotalDiffStatus
|
joachim99@69
|
113 );
|
joachim99@69
|
114
|
joachim99@69
|
115 void reset();
|
joachim99@69
|
116
|
joachim99@80
|
117 bool saveDocument( const QString& fileName, QTextCodec* pEncoding, e_LineEndStyle eLineEndStyle );
|
joachim99@69
|
118 int getNrOfUnsolvedConflicts(int* pNrOfWhiteSpaceConflicts=0);
|
joachim99@69
|
119 void choose(int selector);
|
joachim99@69
|
120 void chooseGlobal(int selector, bool bConflictsOnly, bool bWhiteSpaceOnly );
|
joachim99@69
|
121
|
joachim99@69
|
122 int getNofColumns();
|
joachim99@69
|
123 int getNofLines();
|
joachim99@69
|
124 int getNofVisibleColumns();
|
joachim99@69
|
125 int getNofVisibleLines();
|
joachim99@69
|
126 QString getSelection();
|
joachim99@69
|
127 void resetSelection();
|
joachim99@69
|
128 void showNrOfConflicts();
|
joachim99@69
|
129 bool isDeltaAboveCurrent();
|
joachim99@69
|
130 bool isDeltaBelowCurrent();
|
joachim99@69
|
131 bool isConflictAboveCurrent();
|
joachim99@69
|
132 bool isConflictBelowCurrent();
|
joachim99@77
|
133 bool isUnsolvedConflictAtCurrent();
|
joachim99@69
|
134 bool isUnsolvedConflictAboveCurrent();
|
joachim99@69
|
135 bool isUnsolvedConflictBelowCurrent();
|
joachim99@69
|
136 bool findString( const QString& s, int& d3vLine, int& posInLine, bool bDirDown, bool bCaseSensitive );
|
joachim99@69
|
137 void setSelection( int firstLine, int startPos, int lastLine, int endPos );
|
joachim99@69
|
138 void setOverviewMode( Overview::e_OverviewMode eOverviewMode );
|
joachim99@69
|
139 Overview::e_OverviewMode getOverviewMode();
|
joachim99@69
|
140 public slots:
|
joachim99@69
|
141 void setFirstLine(int firstLine);
|
joachim99@69
|
142 void setFirstColumn(int firstCol);
|
joachim99@69
|
143
|
joachim99@69
|
144 void slotGoCurrent();
|
joachim99@69
|
145 void slotGoTop();
|
joachim99@69
|
146 void slotGoBottom();
|
joachim99@69
|
147 void slotGoPrevDelta();
|
joachim99@69
|
148 void slotGoNextDelta();
|
joachim99@69
|
149 void slotGoPrevUnsolvedConflict();
|
joachim99@69
|
150 void slotGoNextUnsolvedConflict();
|
joachim99@69
|
151 void slotGoPrevConflict();
|
joachim99@69
|
152 void slotGoNextConflict();
|
joachim99@69
|
153 void slotAutoSolve();
|
joachim99@69
|
154 void slotUnsolve();
|
joachim99@69
|
155 void slotMergeHistory();
|
joachim99@69
|
156 void slotRegExpAutoMerge();
|
joachim99@69
|
157 void slotSplitDiff( int firstD3lLineIdx, int lastD3lLineIdx );
|
joachim99@69
|
158 void slotJoinDiffs( int firstD3lLineIdx, int lastD3lLineIdx );
|
joachim99@69
|
159 void slotSetFastSelectorLine(int);
|
joachim99@69
|
160 void setPaintingAllowed(bool);
|
joachim99@69
|
161 void updateSourceMask();
|
joachim99@69
|
162
|
joachim99@69
|
163 signals:
|
joachim99@69
|
164 void scroll( int deltaX, int deltaY );
|
joachim99@75
|
165 void modifiedChanged(bool bModified);
|
joachim99@69
|
166 void setFastSelectorRange( int line1, int nofLines );
|
joachim99@69
|
167 void sourceMask( int srcMask, int enabledMask );
|
joachim99@69
|
168 void resizeSignal();
|
joachim99@69
|
169 void selectionEnd();
|
joachim99@69
|
170 void newSelection();
|
joachim99@69
|
171 void updateAvailabilities();
|
joachim99@69
|
172 void showPopupMenu( const QPoint& point );
|
joachim99@69
|
173 void noRelevantChangesDetected();
|
joachim99@69
|
174
|
joachim99@69
|
175 private:
|
joachim99@69
|
176 void merge(bool bAutoSolve, int defaultSelector, bool bConflictsOnly=false, bool bWhiteSpaceOnly=false );
|
joachim99@69
|
177 QString getString( int lineIdx );
|
joachim99@69
|
178
|
joachim99@69
|
179 OptionDialog* m_pOptionDialog;
|
joachim99@69
|
180
|
joachim99@69
|
181 const LineData* m_pldA;
|
joachim99@69
|
182 const LineData* m_pldB;
|
joachim99@69
|
183 const LineData* m_pldC;
|
joachim99@69
|
184 int m_sizeA;
|
joachim99@69
|
185 int m_sizeB;
|
joachim99@69
|
186 int m_sizeC;
|
joachim99@69
|
187
|
joachim99@69
|
188 const Diff3LineList* m_pDiff3LineList;
|
joachim99@69
|
189 TotalDiffStatus* m_pTotalDiffStatus;
|
joachim99@69
|
190
|
joachim99@69
|
191 bool m_bPaintingAllowed;
|
joachim99@69
|
192 int m_delayedDrawTimer;
|
joachim99@69
|
193 Overview::e_OverviewMode m_eOverviewMode;
|
joachim99@69
|
194
|
joachim99@69
|
195 private:
|
joachim99@69
|
196 class MergeEditLine
|
joachim99@69
|
197 {
|
joachim99@69
|
198 public:
|
joachim99@69
|
199 MergeEditLine(Diff3LineList::const_iterator i, int src=0){m_id3l=i; m_src=src; m_bLineRemoved=false; }
|
joachim99@69
|
200 void setConflict() { m_src=0; m_bLineRemoved=false; m_str=QString(); }
|
joachim99@69
|
201 bool isConflict() { return m_src==0 && !m_bLineRemoved && m_str.isNull(); }
|
joachim99@69
|
202 void setRemoved(int src=0) { m_src=src; m_bLineRemoved=true; m_str=QString(); }
|
joachim99@69
|
203 bool isRemoved() { return m_bLineRemoved; }
|
joachim99@69
|
204 bool isEditableText() { return !isConflict() && !isRemoved(); }
|
joachim99@69
|
205 void setString( const QString& s ){ m_str=s; m_bLineRemoved=false; m_src=0; }
|
joachim99@69
|
206 QString getString( const MergeResultWindow* );
|
joachim99@69
|
207 bool isModified() { return ! m_str.isNull() || (m_bLineRemoved && m_src==0); }
|
joachim99@69
|
208
|
joachim99@69
|
209 void setSource( int src, bool bLineRemoved ) { m_src=src; m_bLineRemoved =bLineRemoved; }
|
joachim99@69
|
210 int src() { return m_src; }
|
joachim99@69
|
211 Diff3LineList::const_iterator id3l(){return m_id3l;}
|
joachim99@69
|
212 // getString() is implemented as MergeResultWindow::getString()
|
joachim99@69
|
213 private:
|
joachim99@69
|
214 Diff3LineList::const_iterator m_id3l;
|
joachim99@69
|
215 int m_src; // 1, 2 or 3 for A, B or C respectively, or 0 when line is from neither source.
|
joachim99@69
|
216 QString m_str; // String when modified by user or null-string when orig data is used.
|
joachim99@69
|
217 bool m_bLineRemoved;
|
joachim99@69
|
218 };
|
joachim99@69
|
219
|
joachim99@69
|
220 class MergeEditLineList : private std::list<MergeEditLine>
|
joachim99@69
|
221 { // I want to know the size immediately!
|
joachim99@69
|
222 private:
|
joachim99@69
|
223 typedef std::list<MergeEditLine> BASE;
|
joachim99@69
|
224 int m_size;
|
joachim99@69
|
225 int* m_pTotalSize;
|
joachim99@69
|
226 public:
|
joachim99@69
|
227 typedef std::list<MergeEditLine>::iterator iterator;
|
joachim99@77
|
228 typedef std::list<MergeEditLine>::reverse_iterator reverse_iterator;
|
joachim99@69
|
229 typedef std::list<MergeEditLine>::const_iterator const_iterator;
|
joachim99@69
|
230 MergeEditLineList(){m_size=0; m_pTotalSize=0; }
|
joachim99@69
|
231 void clear() { ds(-m_size); BASE::clear(); }
|
joachim99@69
|
232 void push_back( const MergeEditLine& m) { ds(+1); BASE::push_back(m); }
|
joachim99@69
|
233 void push_front( const MergeEditLine& m) { ds(+1); BASE::push_front(m); }
|
joachim99@98
|
234 void pop_back() { ds(-1); BASE::pop_back(); }
|
joachim99@69
|
235 iterator erase( iterator i ) { ds(-1); return BASE::erase(i); }
|
joachim99@69
|
236 iterator insert( iterator i, const MergeEditLine& m ) { ds(+1); return BASE::insert(i,m); }
|
joachim99@69
|
237 int size(){ if (!m_pTotalSize) m_size = BASE::size(); return m_size; }
|
joachim99@69
|
238 iterator begin(){return BASE::begin();}
|
joachim99@69
|
239 iterator end(){return BASE::end();}
|
joachim99@77
|
240 reverse_iterator rbegin(){return BASE::rbegin();}
|
joachim99@77
|
241 reverse_iterator rend(){return BASE::rend();}
|
joachim99@69
|
242 MergeEditLine& front(){return BASE::front();}
|
joachim99@69
|
243 MergeEditLine& back(){return BASE::back();}
|
joachim99@69
|
244 bool empty() { return m_size==0; }
|
joachim99@69
|
245 void splice(iterator destPos, MergeEditLineList& srcList, iterator srcFirst, iterator srcLast)
|
joachim99@69
|
246 {
|
joachim99@69
|
247 int* pTotalSize = getTotalSizePtr() ? getTotalSizePtr() : srcList.getTotalSizePtr();
|
joachim99@69
|
248 srcList.setTotalSizePtr(0); // Force size-recalc after splice, because splice doesn't handle size-tracking
|
joachim99@69
|
249 setTotalSizePtr(0);
|
joachim99@69
|
250 BASE::splice( destPos, srcList, srcFirst, srcLast );
|
joachim99@69
|
251 srcList.setTotalSizePtr( pTotalSize );
|
joachim99@69
|
252 setTotalSizePtr( pTotalSize );
|
joachim99@69
|
253 }
|
joachim99@69
|
254
|
joachim99@69
|
255 void setTotalSizePtr(int* pTotalSize)
|
joachim99@69
|
256 {
|
joachim99@69
|
257 if ( pTotalSize==0 && m_pTotalSize!=0 ) { *m_pTotalSize -= size(); }
|
joachim99@69
|
258 else if ( pTotalSize!=0 && m_pTotalSize==0 ) { *pTotalSize += size(); }
|
joachim99@69
|
259 m_pTotalSize = pTotalSize;
|
joachim99@69
|
260 }
|
joachim99@69
|
261 int* getTotalSizePtr()
|
joachim99@69
|
262 {
|
joachim99@69
|
263 return m_pTotalSize;
|
joachim99@69
|
264 }
|
joachim99@69
|
265
|
joachim99@69
|
266 private:
|
joachim99@69
|
267 void ds(int deltaSize)
|
joachim99@69
|
268 {
|
joachim99@69
|
269 m_size+=deltaSize;
|
joachim99@69
|
270 if (m_pTotalSize!=0) *m_pTotalSize+=deltaSize;
|
joachim99@69
|
271 }
|
joachim99@69
|
272 };
|
joachim99@69
|
273
|
joachim99@69
|
274 friend class MergeEditLine;
|
joachim99@69
|
275
|
joachim99@69
|
276 struct MergeLine
|
joachim99@69
|
277 {
|
joachim99@69
|
278 MergeLine()
|
joachim99@69
|
279 {
|
joachim99@69
|
280 srcSelect=0; mergeDetails=eDefault; d3lLineIdx = -1; srcRangeLength=0;
|
joachim99@69
|
281 bConflict=false; bDelta=false; bWhiteSpaceConflict=false;
|
joachim99@69
|
282 }
|
joachim99@69
|
283 Diff3LineList::const_iterator id3l;
|
joachim99@69
|
284 int d3lLineIdx; // Needed to show the correct window pos.
|
joachim99@69
|
285 int srcRangeLength; // how many src-lines have this properties
|
joachim99@69
|
286 e_MergeDetails mergeDetails;
|
joachim99@69
|
287 bool bConflict;
|
joachim99@69
|
288 bool bWhiteSpaceConflict;
|
joachim99@69
|
289 bool bDelta;
|
joachim99@69
|
290 int srcSelect;
|
joachim99@69
|
291 MergeEditLineList mergeEditLineList;
|
joachim99@69
|
292 void split( MergeLine& ml2, int d3lLineIdx2 ) // The caller must insert the ml2 after this ml in the m_mergeLineList
|
joachim99@69
|
293 {
|
joachim99@69
|
294 if ( d3lLineIdx2<d3lLineIdx || d3lLineIdx2 >= d3lLineIdx + srcRangeLength )
|
joachim99@69
|
295 return; //Error
|
joachim99@69
|
296 ml2.mergeDetails = mergeDetails;
|
joachim99@69
|
297 ml2.bConflict = bConflict;
|
joachim99@69
|
298 ml2.bWhiteSpaceConflict = bWhiteSpaceConflict;
|
joachim99@69
|
299 ml2.bDelta = bDelta;
|
joachim99@69
|
300 ml2.srcSelect = srcSelect;
|
joachim99@69
|
301
|
joachim99@69
|
302 ml2.d3lLineIdx = d3lLineIdx2;
|
joachim99@69
|
303 ml2.srcRangeLength = srcRangeLength - (d3lLineIdx2-d3lLineIdx);
|
joachim99@69
|
304 srcRangeLength = d3lLineIdx2-d3lLineIdx; // current MergeLine controls fewer lines
|
joachim99@69
|
305 ml2.id3l = id3l;
|
joachim99@69
|
306 for(int i=0; i<srcRangeLength; ++i)
|
joachim99@69
|
307 ++ml2.id3l;
|
joachim99@69
|
308
|
joachim99@69
|
309 ml2.mergeEditLineList.clear();
|
joachim99@69
|
310 // Search for best place to splice
|
joachim99@69
|
311 for(MergeEditLineList::iterator i=mergeEditLineList.begin(); i!=mergeEditLineList.end();++i)
|
joachim99@69
|
312 {
|
joachim99@69
|
313 if (i->id3l()==ml2.id3l)
|
joachim99@69
|
314 {
|
joachim99@69
|
315 ml2.mergeEditLineList.splice( ml2.mergeEditLineList.begin(), mergeEditLineList, i, mergeEditLineList.end() );
|
joachim99@69
|
316 return;
|
joachim99@69
|
317 }
|
joachim99@69
|
318 }
|
joachim99@69
|
319 ml2.mergeEditLineList.setTotalSizePtr( mergeEditLineList.getTotalSizePtr() );
|
joachim99@69
|
320 ml2.mergeEditLineList.push_back(MergeEditLine(ml2.id3l));
|
joachim99@69
|
321 }
|
joachim99@69
|
322 void join( MergeLine& ml2 ) // The caller must remove the ml2 from the m_mergeLineList after this call
|
joachim99@69
|
323 {
|
joachim99@69
|
324 srcRangeLength += ml2.srcRangeLength;
|
joachim99@69
|
325 ml2.mergeEditLineList.clear();
|
joachim99@69
|
326 mergeEditLineList.clear();
|
joachim99@69
|
327 mergeEditLineList.push_back(MergeEditLine(id3l)); // Create a simple conflict
|
joachim99@69
|
328 if ( ml2.bConflict ) bConflict = true;
|
joachim99@69
|
329 if ( !ml2.bWhiteSpaceConflict ) bWhiteSpaceConflict = false;
|
joachim99@69
|
330 if ( ml2.bDelta ) bDelta = true;
|
joachim99@69
|
331 }
|
joachim99@69
|
332 };
|
joachim99@69
|
333
|
joachim99@69
|
334 private:
|
joachim99@69
|
335 static bool sameKindCheck( const MergeLine& ml1, const MergeLine& ml2 );
|
joachim99@69
|
336 struct HistoryMapEntry
|
joachim99@69
|
337 {
|
joachim99@69
|
338 MergeEditLineList mellA;
|
joachim99@69
|
339 MergeEditLineList mellB;
|
joachim99@69
|
340 MergeEditLineList mellC;
|
joachim99@69
|
341 MergeEditLineList& choice( bool bThreeInputs );
|
joachim99@69
|
342 bool staysInPlace( bool bThreeInputs, Diff3LineList::const_iterator& iHistoryEnd );
|
joachim99@69
|
343 };
|
joachim99@69
|
344 typedef std::map<QString,HistoryMapEntry> HistoryMap;
|
joachim99@69
|
345 void collectHistoryInformation( int src, Diff3LineList::const_iterator iHistoryBegin, Diff3LineList::const_iterator iHistoryEnd, HistoryMap& historyMap, std::list< HistoryMap::iterator >& hitList );
|
joachim99@69
|
346
|
joachim99@69
|
347 typedef std::list<MergeLine> MergeLineList;
|
joachim99@69
|
348 MergeLineList m_mergeLineList;
|
joachim99@69
|
349 MergeLineList::iterator m_currentMergeLineIt;
|
joachim99@77
|
350 bool isItAtEnd( bool bIncrement, MergeLineList::iterator i )
|
joachim99@77
|
351 {
|
joachim99@77
|
352 if ( bIncrement ) return i!=m_mergeLineList.end();
|
joachim99@77
|
353 else return i!=m_mergeLineList.begin();
|
joachim99@77
|
354 }
|
joachim99@77
|
355
|
joachim99@69
|
356 int m_currentPos;
|
joachim99@69
|
357 bool checkOverviewIgnore(MergeLineList::iterator &i);
|
joachim99@69
|
358
|
joachim99@69
|
359 enum e_Direction { eUp, eDown };
|
joachim99@69
|
360 enum e_EndPoint { eDelta, eConflict, eUnsolvedConflict, eLine, eEnd };
|
joachim99@69
|
361 void go( e_Direction eDir, e_EndPoint eEndPoint );
|
joachim99@69
|
362 void calcIteratorFromLineNr(
|
joachim99@69
|
363 int line,
|
joachim99@69
|
364 MergeLineList::iterator& mlIt,
|
joachim99@69
|
365 MergeEditLineList::iterator& melIt
|
joachim99@69
|
366 );
|
joachim99@69
|
367 MergeLineList::iterator splitAtDiff3LineIdx( int d3lLineIdx );
|
joachim99@69
|
368
|
joachim99@69
|
369 virtual void paintEvent( QPaintEvent* e );
|
joachim99@69
|
370
|
joachim99@69
|
371
|
joachim99@69
|
372 void myUpdate(int afterMilliSecs);
|
joachim99@69
|
373 virtual void timerEvent(QTimerEvent*);
|
joachim99@69
|
374 void writeLine(
|
joachim99@69
|
375 MyPainter& p, int line, const QString& str,
|
joachim99@69
|
376 int srcSelect, e_MergeDetails mergeDetails, int rangeMark, bool bUserModified, bool bLineRemoved, bool bWhiteSpaceConflict
|
joachim99@69
|
377 );
|
joachim99@69
|
378 void setFastSelector(MergeLineList::iterator i);
|
joachim99@69
|
379 void convertToLinePos( int x, int y, int& line, int& pos );
|
joachim99@69
|
380 virtual void mousePressEvent ( QMouseEvent* e );
|
joachim99@69
|
381 virtual void mouseDoubleClickEvent ( QMouseEvent* e );
|
joachim99@69
|
382 virtual void mouseReleaseEvent ( QMouseEvent * );
|
joachim99@69
|
383 virtual void mouseMoveEvent ( QMouseEvent * );
|
joachim99@69
|
384 virtual void resizeEvent( QResizeEvent* e );
|
joachim99@69
|
385 virtual void keyPressEvent( QKeyEvent* e );
|
joachim99@69
|
386 virtual void wheelEvent( QWheelEvent* e );
|
joachim99@69
|
387 virtual void focusInEvent( QFocusEvent* e );
|
joachim99@69
|
388
|
joachim99@69
|
389 QPixmap m_pixmap;
|
joachim99@69
|
390 int m_firstLine;
|
joachim99@69
|
391 int m_firstColumn;
|
joachim99@69
|
392 int m_nofColumns;
|
joachim99@69
|
393 int m_nofLines;
|
joachim99@69
|
394 int m_totalSize; //Same as m_nofLines, but calculated differently
|
joachim99@69
|
395 bool m_bMyUpdate;
|
joachim99@69
|
396 bool m_bInsertMode;
|
joachim99@69
|
397 bool m_bModified;
|
joachim99@75
|
398 void setModified(bool bModified=true);
|
joachim99@69
|
399
|
joachim99@69
|
400 int m_scrollDeltaX;
|
joachim99@69
|
401 int m_scrollDeltaY;
|
joachim99@69
|
402 int m_cursorXPos;
|
joachim99@69
|
403 int m_cursorYPos;
|
joachim99@69
|
404 int m_cursorOldXPos;
|
joachim99@69
|
405 bool m_bCursorOn; // blinking on and off each second
|
joachim99@69
|
406 QTimer m_cursorTimer;
|
joachim99@69
|
407 bool m_bCursorUpdate;
|
joachim99@69
|
408 QStatusBar* m_pStatusBar;
|
joachim99@69
|
409
|
joachim99@69
|
410 Selection m_selection;
|
joachim99@69
|
411
|
joachim99@69
|
412 bool deleteSelection2( QString& str, int& x, int& y,
|
joachim99@69
|
413 MergeLineList::iterator& mlIt, MergeEditLineList::iterator& melIt );
|
joachim99@69
|
414 bool doRelevantChangesExist();
|
joachim99@69
|
415 public slots:
|
joachim99@69
|
416 void deleteSelection();
|
joachim99@69
|
417 void pasteClipboard(bool bFromSelection);
|
joachim99@69
|
418 private slots:
|
joachim99@69
|
419 void slotCursorUpdate();
|
joachim99@69
|
420 };
|
joachim99@69
|
421
|
joachim99@75
|
422 class QLineEdit;
|
joachim99@75
|
423 class QTextCodec;
|
joachim99@75
|
424 class QComboBox;
|
joachim99@75
|
425 class QLabel;
|
joachim99@75
|
426 class WindowTitleWidget : public QWidget
|
joachim99@75
|
427 {
|
joachim99@75
|
428 Q_OBJECT
|
joachim99@75
|
429 private:
|
joachim99@75
|
430 QLabel* m_pLabel;
|
joachim99@75
|
431 QLineEdit* m_pFileNameLineEdit;
|
joachim99@75
|
432 //QPushButton* m_pBrowseButton;
|
joachim99@75
|
433 QLabel* m_pModifiedLabel;
|
joachim99@80
|
434 QLabel* m_pLineEndStyleLabel;
|
joachim99@80
|
435 QComboBox* m_pLineEndStyleSelector;
|
joachim99@75
|
436 QLabel* m_pEncodingLabel;
|
joachim99@75
|
437 QComboBox* m_pEncodingSelector;
|
joachim99@75
|
438 OptionDialog* m_pOptionDialog;
|
joachim99@75
|
439 public:
|
joachim99@75
|
440 WindowTitleWidget(OptionDialog* pOptionDialog);
|
joachim99@75
|
441 QTextCodec* getEncoding();
|
joachim99@75
|
442 void setFileName(const QString& fileName );
|
joachim99@75
|
443 QString getFileName();
|
joachim99@75
|
444 void setEncodings( QTextCodec* pCodecForA, QTextCodec* pCodecForB, QTextCodec* pCodecForC );
|
joachim99@75
|
445 void setEncoding( QTextCodec* pCodec );
|
joachim99@80
|
446 void setLineEndStyles( e_LineEndStyle eLineEndStyleA, e_LineEndStyle eLineEndStyleB, e_LineEndStyle eLineEndStyleC);
|
joachim99@80
|
447 e_LineEndStyle getLineEndStyle();
|
joachim99@75
|
448
|
joachim99@75
|
449 bool eventFilter( QObject* o, QEvent* e );
|
joachim99@75
|
450 public slots:
|
joachim99@75
|
451 void slotSetModified( bool bModified );
|
joachim99@75
|
452 //private slots:
|
joachim99@75
|
453 // void slotBrowseButtonClicked();
|
joachim99@75
|
454
|
joachim99@75
|
455 };
|
joachim99@75
|
456
|
joachim99@69
|
457 #endif
|
joachim99@69
|
458
|