joachim99@8
|
1 /***************************************************************************
|
joachim99@8
|
2 kdiff3.h - description
|
joachim99@8
|
3 -------------------
|
joachim99@8
|
4 begin : Don Jul 11 12:31:29 CEST 2002
|
joachim99@8
|
5 copyright : (C) 2002 by Joachim Eibl
|
joachim99@8
|
6 email : joachim.eibl@gmx.de
|
joachim99@8
|
7 ***************************************************************************/
|
joachim99@8
|
8
|
joachim99@8
|
9 /***************************************************************************
|
joachim99@8
|
10 * *
|
joachim99@8
|
11 * This program is free software; you can redistribute it and/or modify *
|
joachim99@8
|
12 * it under the terms of the GNU General Public License as published by *
|
joachim99@8
|
13 * the Free Software Foundation; either version 2 of the License, or *
|
joachim99@8
|
14 * (at your option) any later version. *
|
joachim99@8
|
15 * *
|
joachim99@8
|
16 ***************************************************************************/
|
joachim99@8
|
17
|
joachim99@8
|
18 #ifndef KDIFF3_H
|
joachim99@8
|
19 #define KDIFF3_H
|
joachim99@8
|
20
|
joachim99@8
|
21 #include "diff.h"
|
joachim99@8
|
22
|
joachim99@8
|
23 #ifdef HAVE_CONFIG_H
|
joachim99@8
|
24 #include <config.h>
|
joachim99@8
|
25 #endif
|
joachim99@8
|
26
|
joachim99@8
|
27 // include files for Qt
|
joachim99@8
|
28 #include <qdialog.h>
|
joachim99@8
|
29 #include <qsplitter.h>
|
joachim99@8
|
30
|
joachim99@8
|
31 // include files for KDE
|
joachim99@8
|
32 #include <kapplication.h>
|
joachim99@8
|
33 #include <kmainwindow.h>
|
joachim99@8
|
34 #include <kaccel.h>
|
joachim99@8
|
35 #include <kaction.h>
|
joachim99@8
|
36 #include <kurl.h>
|
joachim99@8
|
37 #include <kparts/mainwindow.h>
|
joachim99@8
|
38
|
joachim99@8
|
39
|
joachim99@8
|
40 // forward declaration of the KDiff3 classes
|
joachim99@8
|
41 class OptionDialog;
|
joachim99@8
|
42 class FindDialog;
|
joachim99@8
|
43
|
joachim99@8
|
44 class QScrollBar;
|
joachim99@8
|
45 class QComboBox;
|
joachim99@8
|
46 class QLineEdit;
|
joachim99@8
|
47 class QCheckBox;
|
joachim99@8
|
48 class QSplitter;
|
joachim99@8
|
49
|
joachim99@8
|
50
|
joachim99@8
|
51 class KDiff3Part;
|
joachim99@8
|
52 class DirectoryMergeWindow;
|
joachim99@8
|
53 class DirectoryMergeInfo;
|
joachim99@8
|
54
|
joachim99@8
|
55
|
joachim99@8
|
56 class KDiff3App : public QSplitter
|
joachim99@8
|
57 {
|
joachim99@8
|
58 Q_OBJECT
|
joachim99@8
|
59
|
joachim99@8
|
60 public:
|
joachim99@8
|
61 /** construtor of KDiff3App, calls all init functions to create the application.
|
joachim99@8
|
62 */
|
joachim99@8
|
63 KDiff3App( QWidget* parent, const char* name, KDiff3Part* pKDiff3Part );
|
joachim99@8
|
64 ~KDiff3App();
|
joachim99@8
|
65
|
joachim99@8
|
66 bool isPart();
|
joachim99@8
|
67
|
joachim99@8
|
68 /** initializes the KActions of the application */
|
joachim99@8
|
69 void initActions( KActionCollection* );
|
joachim99@8
|
70
|
joachim99@8
|
71 /** save general Options like all bar positions and status as well as the geometry
|
joachim99@8
|
72 and the recent file list to the configuration file */
|
joachim99@8
|
73 void saveOptions( KConfig* );
|
joachim99@8
|
74
|
joachim99@8
|
75 /** read general Options again and initialize all variables like the recent file list */
|
joachim99@8
|
76 void readOptions( KConfig* );
|
joachim99@8
|
77
|
joachim99@8
|
78 // Finish initialisation (virtual, so that it can be called from the shell too.)
|
joachim99@8
|
79 virtual void completeInit();
|
joachim99@8
|
80
|
joachim99@8
|
81 /** queryClose is called by KMainWindow on each closeEvent of a window. Against the
|
joachim99@8
|
82 * default implementation (only returns true), this calles saveModified() on the document object to ask if the document shall
|
joachim99@8
|
83 * be saved if Modified; on cancel the closeEvent is rejected.
|
joachim99@8
|
84 * @see KMainWindow#queryClose
|
joachim99@8
|
85 * @see KMainWindow#closeEvent
|
joachim99@8
|
86 */
|
joachim99@8
|
87 virtual bool queryClose();
|
joachim99@8
|
88
|
joachim99@8
|
89 protected:
|
joachim99@8
|
90 void initDirectoryMergeActions();
|
joachim99@8
|
91 /** sets up the statusbar for the main window by initialzing a statuslabel. */
|
joachim99@8
|
92 void initStatusBar();
|
joachim99@8
|
93
|
joachim99@8
|
94 /** creates the centerwidget of the KMainWindow instance and sets it as the view */
|
joachim99@8
|
95 void initView();
|
joachim99@8
|
96
|
joachim99@8
|
97 public slots:
|
joachim99@8
|
98
|
joachim99@8
|
99 /** open a file and load it into the document*/
|
joachim99@8
|
100 void slotFileOpen();
|
joachim99@8
|
101 void slotFileOpen2( QString fn1, QString fn2, QString fn3, QString ofn,
|
joachim99@8
|
102 QString an1, QString an2, QString an3 );
|
joachim99@8
|
103
|
joachim99@8
|
104 /** save a document */
|
joachim99@8
|
105 void slotFileSave();
|
joachim99@8
|
106 /** save a document by a new filename*/
|
joachim99@8
|
107 void slotFileSaveAs();
|
joachim99@8
|
108
|
joachim99@8
|
109 /** closes all open windows by calling close() on each memberList item until the list is empty, then quits the application.
|
joachim99@8
|
110 * If queryClose() returns false because the user canceled the saveModified() dialog, the closing breaks.
|
joachim99@8
|
111 */
|
joachim99@8
|
112 void slotFileQuit();
|
joachim99@8
|
113 /** put the marked text/object into the clipboard and remove
|
joachim99@8
|
114 * it from the document
|
joachim99@8
|
115 */
|
joachim99@8
|
116 void slotEditCut();
|
joachim99@8
|
117 /** put the marked text/object into the clipboard
|
joachim99@8
|
118 */
|
joachim99@8
|
119 void slotEditCopy();
|
joachim99@8
|
120 /** paste the clipboard into the document
|
joachim99@8
|
121 */
|
joachim99@8
|
122 void slotEditPaste();
|
joachim99@8
|
123 /** toggles the toolbar
|
joachim99@8
|
124 */
|
joachim99@8
|
125 void slotViewToolBar();
|
joachim99@8
|
126 /** toggles the statusbar
|
joachim99@8
|
127 */
|
joachim99@8
|
128 void slotViewStatusBar();
|
joachim99@8
|
129 /** changes the statusbar contents for the standard label permanently, used to indicate current actions.
|
joachim99@8
|
130 * @param text the text that is displayed in the statusbar
|
joachim99@8
|
131 */
|
joachim99@8
|
132 void slotStatusMsg(const QString &text);
|
joachim99@8
|
133
|
joachim99@8
|
134 private:
|
joachim99@8
|
135 /** the configuration object of the application */
|
joachim99@8
|
136 //KConfig *config;
|
joachim99@8
|
137
|
joachim99@8
|
138 // KAction pointers to enable/disable actions
|
joachim99@8
|
139 KAction* fileOpen;
|
joachim99@8
|
140 KAction* fileSave;
|
joachim99@8
|
141 KAction* fileSaveAs;
|
joachim99@8
|
142 KAction* fileQuit;
|
joachim99@8
|
143 KAction* fileReload;
|
joachim99@8
|
144 KAction* editCut;
|
joachim99@8
|
145 KAction* editCopy;
|
joachim99@8
|
146 KAction* editPaste;
|
joachim99@8
|
147 KToggleAction* viewToolBar;
|
joachim99@8
|
148 KToggleAction* viewStatusBar;
|
joachim99@8
|
149
|
joachim99@8
|
150 ////////////////////////////////////////////////////////////////////////
|
joachim99@8
|
151 // Special KDiff3 specific stuff starts here
|
joachim99@8
|
152 KAction *editFind;
|
joachim99@8
|
153 KAction *editFindNext;
|
joachim99@8
|
154
|
joachim99@8
|
155 KAction *goCurrent;
|
joachim99@8
|
156 KAction *goTop;
|
joachim99@8
|
157 KAction *goBottom;
|
joachim99@8
|
158 KAction *goPrevUnsolvedConflict;
|
joachim99@8
|
159 KAction *goNextUnsolvedConflict;
|
joachim99@8
|
160 KAction *goPrevConflict;
|
joachim99@8
|
161 KAction *goNextConflict;
|
joachim99@8
|
162 KAction *goPrevDelta;
|
joachim99@8
|
163 KAction *goNextDelta;
|
joachim99@8
|
164 KToggleAction *chooseA;
|
joachim99@8
|
165 KToggleAction *chooseB;
|
joachim99@8
|
166 KToggleAction *chooseC;
|
joachim99@8
|
167 KToggleAction *autoAdvance;
|
joachim99@51
|
168 KToggleAction *showWhiteSpaceCharacters;
|
joachim99@8
|
169 KToggleAction *showWhiteSpace;
|
joachim99@8
|
170 KToggleAction *showLineNumbers;
|
joachim99@51
|
171 KAction* chooseAEverywhere;
|
joachim99@51
|
172 KAction* chooseBEverywhere;
|
joachim99@51
|
173 KAction* chooseCEverywhere;
|
joachim99@51
|
174 KAction* chooseAForUnsolvedConflicts;
|
joachim99@51
|
175 KAction* chooseBForUnsolvedConflicts;
|
joachim99@51
|
176 KAction* chooseCForUnsolvedConflicts;
|
joachim99@51
|
177 KAction* chooseAForUnsolvedWhiteSpaceConflicts;
|
joachim99@51
|
178 KAction* chooseBForUnsolvedWhiteSpaceConflicts;
|
joachim99@51
|
179 KAction* chooseCForUnsolvedWhiteSpaceConflicts;
|
joachim99@8
|
180 KAction *autoSolve;
|
joachim99@8
|
181 KAction *unsolve;
|
joachim99@8
|
182 KToggleAction *showWindowA;
|
joachim99@8
|
183 KToggleAction *showWindowB;
|
joachim99@8
|
184 KToggleAction *showWindowC;
|
joachim99@8
|
185 KAction *winFocusNext;
|
joachim99@8
|
186 KAction *winFocusPrev;
|
joachim99@8
|
187 KAction* winToggleSplitOrientation;
|
joachim99@51
|
188 KToggleAction *dirShowBoth;
|
joachim99@51
|
189 KAction *dirViewToggle;
|
joachim99@8
|
190
|
joachim99@8
|
191 QPopupMenu* m_pMergeEditorPopupMenu;
|
joachim99@8
|
192
|
joachim99@8
|
193 QSplitter* m_pMainSplitter;
|
joachim99@8
|
194 QFrame* m_pMainWidget;
|
joachim99@8
|
195 QFrame* m_pMergeWindowFrame;
|
joachim99@8
|
196 QScrollBar* m_pHScrollBar;
|
joachim99@8
|
197 QScrollBar* m_pDiffVScrollBar;
|
joachim99@8
|
198 QScrollBar* m_pMergeVScrollBar;
|
joachim99@8
|
199
|
joachim99@8
|
200 DiffTextWindow* m_pDiffTextWindow1;
|
joachim99@8
|
201 DiffTextWindow* m_pDiffTextWindow2;
|
joachim99@8
|
202 DiffTextWindow* m_pDiffTextWindow3;
|
joachim99@8
|
203 QSplitter* m_pDiffWindowSplitter;
|
joachim99@8
|
204
|
joachim99@8
|
205 MergeResultWindow* m_pMergeResultWindow;
|
joachim99@8
|
206 bool m_bTripleDiff;
|
joachim99@8
|
207
|
joachim99@8
|
208 QSplitter* m_pDirectoryMergeSplitter;
|
joachim99@8
|
209 DirectoryMergeWindow* m_pDirectoryMergeWindow;
|
joachim99@8
|
210 DirectoryMergeInfo* m_pDirectoryMergeInfo;
|
joachim99@8
|
211 bool m_bDirCompare;
|
joachim99@8
|
212
|
joachim99@8
|
213 Overview* m_pOverview;
|
joachim99@8
|
214
|
joachim99@8
|
215 QWidget* m_pCornerWidget;
|
joachim99@51
|
216
|
joachim99@8
|
217 TotalDiffStatus m_totalDiffStatus;
|
joachim99@8
|
218
|
joachim99@8
|
219 SourceData m_sd1;
|
joachim99@8
|
220 SourceData m_sd2;
|
joachim99@8
|
221 SourceData m_sd3;
|
joachim99@8
|
222
|
joachim99@8
|
223 SourceData m_sdlm1; // SourceData for Line Matching only.
|
joachim99@8
|
224 SourceData m_sdlm2;
|
joachim99@8
|
225 SourceData m_sdlm3;
|
joachim99@8
|
226
|
joachim99@8
|
227 QString m_outputFilename;
|
joachim99@8
|
228 bool m_bDefaultFilename;
|
joachim99@8
|
229
|
joachim99@8
|
230 DiffList m_diffList12;
|
joachim99@8
|
231 DiffList m_diffList23;
|
joachim99@8
|
232 DiffList m_diffList13;
|
joachim99@8
|
233
|
joachim99@8
|
234 Diff3LineList m_diff3LineList;
|
joachim99@8
|
235 Diff3LineVector m_diff3LineVector;
|
joachim99@8
|
236
|
joachim99@8
|
237 int m_neededLines;
|
joachim99@8
|
238 int m_maxWidth;
|
joachim99@8
|
239 int m_DTWHeight;
|
joachim99@8
|
240 bool m_bOutputModified;
|
joachim99@8
|
241 bool m_bTimerBlock; // Synchronisation
|
joachim99@8
|
242
|
joachim99@8
|
243 OptionDialog* m_pOptionDialog;
|
joachim99@8
|
244 FindDialog* m_pFindDialog;
|
joachim99@8
|
245
|
joachim99@8
|
246 void init( bool bAuto=false );
|
joachim99@8
|
247
|
joachim99@8
|
248 virtual bool eventFilter( QObject* o, QEvent* e );
|
joachim99@8
|
249 virtual void resizeEvent(QResizeEvent*);
|
joachim99@8
|
250
|
joachim99@8
|
251 bool improveFilenames();
|
joachim99@8
|
252
|
joachim99@8
|
253 bool runDiff( LineData* p1, int size1, LineData* p2, int size2, DiffList& diffList );
|
joachim99@8
|
254 bool canContinue();
|
joachim99@8
|
255
|
joachim99@8
|
256
|
joachim99@8
|
257 KActionCollection* actionCollection();
|
joachim99@8
|
258 KStatusBar* statusBar();
|
joachim99@8
|
259 KToolBar* toolBar(const char*);
|
joachim99@8
|
260 KDiff3Part* m_pKDiff3Part;
|
joachim99@8
|
261 KParts::MainWindow* m_pKDiff3Shell;
|
joachim99@8
|
262 bool m_bAuto;
|
joachim99@8
|
263
|
joachim99@51
|
264 public slots:
|
joachim99@8
|
265 void resizeDiffTextWindow(int newWidth, int newHeight);
|
joachim99@8
|
266 void resizeMergeResultWindow();
|
joachim99@8
|
267
|
joachim99@8
|
268 void showPopupMenu( const QPoint& point );
|
joachim99@8
|
269
|
joachim99@8
|
270 void scrollDiffTextWindow( int deltaX, int deltaY );
|
joachim99@8
|
271 void scrollMergeResultWindow( int deltaX, int deltaY );
|
joachim99@8
|
272 void setDiff3Line( int line );
|
joachim99@8
|
273 void sourceMask( int srcMask, int enabledMask );
|
joachim99@8
|
274
|
joachim99@8
|
275 void slotDirShowBoth();
|
joachim99@8
|
276 void slotDirViewToggle();
|
joachim99@8
|
277
|
joachim99@8
|
278 void slotUpdateAvailabilities();
|
joachim99@8
|
279 void slotEditFind();
|
joachim99@8
|
280 void slotEditFindNext();
|
joachim99@8
|
281 void slotGoCurrent();
|
joachim99@8
|
282 void slotGoTop();
|
joachim99@8
|
283 void slotGoBottom();
|
joachim99@8
|
284 void slotGoPrevUnsolvedConflict();
|
joachim99@8
|
285 void slotGoNextUnsolvedConflict();
|
joachim99@8
|
286 void slotGoPrevConflict();
|
joachim99@8
|
287 void slotGoNextConflict();
|
joachim99@8
|
288 void slotGoPrevDelta();
|
joachim99@8
|
289 void slotGoNextDelta();
|
joachim99@8
|
290 void slotChooseA();
|
joachim99@8
|
291 void slotChooseB();
|
joachim99@8
|
292 void slotChooseC();
|
joachim99@8
|
293 void slotAutoSolve();
|
joachim99@8
|
294 void slotUnsolve();
|
joachim99@8
|
295 void slotChooseAEverywhere();
|
joachim99@8
|
296 void slotChooseBEverywhere();
|
joachim99@8
|
297 void slotChooseCEverywhere();
|
joachim99@51
|
298 void slotChooseAForUnsolvedConflicts();
|
joachim99@51
|
299 void slotChooseBForUnsolvedConflicts();
|
joachim99@51
|
300 void slotChooseCForUnsolvedConflicts();
|
joachim99@51
|
301 void slotChooseAForUnsolvedWhiteSpaceConflicts();
|
joachim99@51
|
302 void slotChooseBForUnsolvedWhiteSpaceConflicts();
|
joachim99@51
|
303 void slotChooseCForUnsolvedWhiteSpaceConflicts();
|
joachim99@8
|
304 void slotConfigure();
|
joachim99@8
|
305 void slotConfigureKeys();
|
joachim99@8
|
306 void slotRefresh();
|
joachim99@8
|
307 void slotSelectionEnd();
|
joachim99@8
|
308 void slotSelectionStart();
|
joachim99@8
|
309 void slotClipboardChanged();
|
joachim99@8
|
310 void slotOutputModified();
|
joachim99@8
|
311 void slotAfterFirstPaint();
|
joachim99@8
|
312 void slotMergeCurrentFile();
|
joachim99@8
|
313 void slotReload();
|
joachim99@8
|
314 void slotCheckIfCanContinue( bool* pbContinue );
|
joachim99@8
|
315 void slotShowWhiteSpaceToggled();
|
joachim99@8
|
316 void slotShowLineNumbersToggled();
|
joachim99@8
|
317 void slotAutoAdvanceToggled();
|
joachim99@8
|
318 void slotShowWindowAToggled();
|
joachim99@8
|
319 void slotShowWindowBToggled();
|
joachim99@8
|
320 void slotShowWindowCToggled();
|
joachim99@8
|
321 void slotWinFocusNext();
|
joachim99@8
|
322 void slotWinFocusPrev();
|
joachim99@8
|
323 void slotWinToggleSplitterOrientation();
|
joachim99@8
|
324 };
|
joachim99@8
|
325
|
joachim99@8
|
326
|
joachim99@8
|
327 class OpenDialog : public QDialog
|
joachim99@8
|
328 {
|
joachim99@8
|
329 Q_OBJECT
|
joachim99@8
|
330 public:
|
joachim99@8
|
331 OpenDialog(
|
joachim99@8
|
332 QWidget* pParent, const QString& n1, const QString& n2, const QString& n3,
|
joachim99@8
|
333 bool bMerge, const QString& outputName, const char* slotConfigure, OptionDialog* pOptions );
|
joachim99@8
|
334
|
joachim99@8
|
335 QComboBox* m_lineA;
|
joachim99@8
|
336 QComboBox* m_lineB;
|
joachim99@8
|
337 QComboBox* m_lineC;
|
joachim99@8
|
338 QComboBox* m_lineOut;
|
joachim99@8
|
339
|
joachim99@8
|
340 QCheckBox* m_pMerge;
|
joachim99@8
|
341 virtual void accept();
|
joachim99@8
|
342 private:
|
joachim99@8
|
343 OptionDialog* m_pOptions;
|
joachim99@8
|
344 void selectURL( QComboBox* pLine, bool bDir, int i, bool bSave );
|
joachim99@8
|
345 private slots:
|
joachim99@8
|
346 void selectFileA();
|
joachim99@8
|
347 void selectFileB();
|
joachim99@8
|
348 void selectFileC();
|
joachim99@8
|
349 void selectDirA();
|
joachim99@8
|
350 void selectDirB();
|
joachim99@8
|
351 void selectDirC();
|
joachim99@8
|
352 void selectOutputName();
|
joachim99@8
|
353 void selectOutputDir();
|
joachim99@8
|
354 void internalSlot(int);
|
joachim99@8
|
355 signals:
|
joachim99@8
|
356 void internalSignal(bool);
|
joachim99@8
|
357 };
|
joachim99@8
|
358
|
joachim99@8
|
359 class FindDialog : public QDialog
|
joachim99@8
|
360 {
|
joachim99@8
|
361 Q_OBJECT
|
joachim99@8
|
362 public:
|
joachim99@8
|
363 FindDialog(QWidget* pParent);
|
joachim99@8
|
364
|
joachim99@8
|
365 signals:
|
joachim99@8
|
366 void findNext();
|
joachim99@8
|
367
|
joachim99@8
|
368 public:
|
joachim99@8
|
369 QLineEdit* m_pSearchString;
|
joachim99@8
|
370 QCheckBox* m_pSearchInA;
|
joachim99@8
|
371 QCheckBox* m_pSearchInB;
|
joachim99@8
|
372 QCheckBox* m_pSearchInC;
|
joachim99@8
|
373 QCheckBox* m_pSearchInOutput;
|
joachim99@8
|
374 QCheckBox* m_pCaseSensitive;
|
joachim99@8
|
375
|
joachim99@8
|
376 int currentLine;
|
joachim99@8
|
377 int currentPos;
|
joachim99@8
|
378 int currentWindow;
|
joachim99@8
|
379 };
|
joachim99@8
|
380 #endif // KDIFF3_H
|