joachim99@8
|
1 /***************************************************************************
|
joachim99@8
|
2 kdiff3.cpp - description
|
joachim99@8
|
3 -------------------
|
joachim99@8
|
4 begin : Don Jul 11 12:31:29 CEST 2002
|
joachim99@77
|
5 copyright : (C) 2002-2007 by Joachim Eibl
|
joachim99@69
|
6 email : joachim.eibl at 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@69
|
18 #include "difftextwindow.h"
|
joachim99@69
|
19 #include "mergeresultwindow.h"
|
joachim99@8
|
20
|
joachim99@8
|
21 #include <iostream>
|
joachim99@80
|
22 #include <assert.h>
|
joachim99@8
|
23
|
joachim99@8
|
24 // include files for QT
|
joachim99@8
|
25 #include <qdir.h>
|
joachim99@8
|
26 #include <qprinter.h>
|
joachim99@8
|
27 #include <qpainter.h>
|
joachim99@8
|
28 #include <qsplitter.h>
|
joachim99@8
|
29 #include <qlineedit.h>
|
joachim99@8
|
30 #include <qcheckbox.h>
|
joachim99@8
|
31 #include <qpushbutton.h>
|
joachim99@75
|
32 #include <QMenu>
|
joachim99@75
|
33 #include <QLabel>
|
joachim99@75
|
34 #include <QTextEdit>
|
joachim99@75
|
35 #include <QLayout>
|
joachim99@75
|
36 #include <QPaintDevice>
|
joachim99@75
|
37 #include <QStatusBar>
|
joachim99@70
|
38 #include <QDesktopWidget>
|
joachim99@80
|
39 #include <QPrinter>
|
joachim99@75
|
40 #include <QPrintDialog>
|
joachim99@8
|
41
|
joachim99@8
|
42 // include files for KDE
|
joachim99@8
|
43 #include <kiconloader.h>
|
joachim99@8
|
44 #include <kmessagebox.h>
|
joachim99@8
|
45 #include <kfiledialog.h>
|
joachim99@8
|
46 #include <kmenubar.h>
|
joachim99@8
|
47 #include <kstatusbar.h>
|
joachim99@8
|
48 #include <klocale.h>
|
joachim99@8
|
49 #include <kconfig.h>
|
joachim99@80
|
50 #include <kstandardaction.h>
|
joachim99@8
|
51 #include <kcmdlineargs.h>
|
joachim99@8
|
52 //#include <kkeydialog.h>
|
joachim99@80
|
53 #include <kglobal.h>
|
joachim99@80
|
54 #include <ktoggleaction.h>
|
joachim99@80
|
55 #include <ktoolbar.h>
|
joachim99@80
|
56 #include <kiconloader.h>
|
joachim99@80
|
57 #include <kactioncollection.h>
|
joachim99@8
|
58
|
joachim99@8
|
59 // application specific includes
|
joachim99@8
|
60 #include "kdiff3.h"
|
joachim99@8
|
61 #include "optiondialog.h"
|
joachim99@8
|
62 #include "fileaccess.h"
|
joachim99@8
|
63 #include "kdiff3_part.h"
|
joachim99@8
|
64 #include "directorymergewindow.h"
|
joachim99@69
|
65 #include "smalldialogs.h"
|
joachim99@80
|
66 #include "guiutils.h" // namespace KDiff3
|
joachim99@8
|
67
|
joachim99@8
|
68 #define ID_STATUS_MSG 1
|
joachim99@80
|
69 #define MAIN_TOOLBAR_NAME "mainToolBar"
|
joachim99@8
|
70
|
joachim99@8
|
71 KActionCollection* KDiff3App::actionCollection()
|
joachim99@8
|
72 {
|
joachim99@8
|
73 if ( m_pKDiff3Shell==0 )
|
joachim99@8
|
74 return m_pKDiff3Part->actionCollection();
|
joachim99@8
|
75 else
|
joachim99@8
|
76 return m_pKDiff3Shell->actionCollection();
|
joachim99@8
|
77 }
|
joachim99@8
|
78
|
joachim99@8
|
79 KStatusBar* KDiff3App::statusBar()
|
joachim99@8
|
80 {
|
joachim99@8
|
81 if ( m_pKDiff3Shell==0 )
|
joachim99@8
|
82 return 0;
|
joachim99@8
|
83 else
|
joachim99@8
|
84 return m_pKDiff3Shell->statusBar();
|
joachim99@8
|
85 }
|
joachim99@8
|
86
|
joachim99@8
|
87 KToolBar* KDiff3App::toolBar(const char* toolBarId )
|
joachim99@8
|
88 {
|
joachim99@8
|
89 if ( m_pKDiff3Shell==0 )
|
joachim99@8
|
90 return 0;
|
joachim99@8
|
91 else
|
joachim99@8
|
92 return m_pKDiff3Shell->toolBar( toolBarId );
|
joachim99@80
|
93 //return m_pKDiff3Shell->toolBar();
|
joachim99@8
|
94 }
|
joachim99@8
|
95
|
joachim99@8
|
96 bool KDiff3App::isPart()
|
joachim99@8
|
97 {
|
joachim99@8
|
98 return m_pKDiff3Shell==0;
|
joachim99@8
|
99 }
|
joachim99@8
|
100
|
joachim99@69
|
101 bool KDiff3App::isFileSaved()
|
joachim99@69
|
102 {
|
joachim99@69
|
103 return m_bFileSaved;
|
joachim99@69
|
104 }
|
joachim99@8
|
105
|
joachim99@80
|
106 bool KDiff3App::isDirComparison()
|
joachim99@80
|
107 {
|
joachim99@80
|
108 return m_bDirCompare;
|
joachim99@80
|
109 }
|
joachim99@80
|
110
|
joachim99@92
|
111 KDiff3App::KDiff3App(QWidget* pParent, const char* /*name*/, KDiff3Part* pKDiff3Part )
|
joachim99@75
|
112 : QSplitter(pParent) //previously KMainWindow
|
joachim99@8
|
113 {
|
joachim99@92
|
114 setObjectName( "KDiff3App" );
|
joachim99@8
|
115 m_pKDiff3Part = pKDiff3Part;
|
joachim99@8
|
116 m_pKDiff3Shell = dynamic_cast<KParts::MainWindow*>(pParent);
|
joachim99@8
|
117
|
joachim99@75
|
118 setWindowTitle( "KDiff3" );
|
joachim99@75
|
119 setOpaqueResize(false); // faster resizing
|
joachim99@80
|
120 setUpdatesEnabled(false);
|
joachim99@8
|
121
|
joachim99@8
|
122 m_pMainSplitter = 0;
|
joachim99@80
|
123 m_pDirectoryMergeSplitter = 0;
|
joachim99@8
|
124 m_pDirectoryMergeWindow = 0;
|
joachim99@8
|
125 m_pCornerWidget = 0;
|
joachim99@8
|
126 m_pMainWidget = 0;
|
joachim99@8
|
127 m_pDiffTextWindow1 = 0;
|
joachim99@8
|
128 m_pDiffTextWindow2 = 0;
|
joachim99@8
|
129 m_pDiffTextWindow3 = 0;
|
joachim99@69
|
130 m_pDiffTextWindowFrame1 = 0;
|
joachim99@69
|
131 m_pDiffTextWindowFrame2 = 0;
|
joachim99@69
|
132 m_pDiffTextWindowFrame3 = 0;
|
joachim99@8
|
133 m_pDiffWindowSplitter = 0;
|
joachim99@8
|
134 m_pOverview = 0;
|
joachim99@8
|
135 m_bTripleDiff = false;
|
joachim99@8
|
136 m_pMergeResultWindow = 0;
|
joachim99@8
|
137 m_pMergeWindowFrame = 0;
|
joachim99@8
|
138 m_bOutputModified = false;
|
joachim99@69
|
139 m_bFileSaved = false;
|
joachim99@8
|
140 m_bTimerBlock = false;
|
joachim99@68
|
141 m_pHScrollBar = 0;
|
joachim99@91
|
142 m_pDiffVScrollBar = 0;
|
joachim99@91
|
143 m_pMergeVScrollBar = 0;
|
joachim99@80
|
144 viewToolBar = 0;
|
joachim99@8
|
145
|
joachim99@51
|
146 // Needed before any file operations via FileAccess happen.
|
joachim99@69
|
147 if (!g_pProgressDialog)
|
joachim99@77
|
148 {
|
joachim99@69
|
149 g_pProgressDialog = new ProgressDialog(0);
|
joachim99@77
|
150 g_pProgressDialog->setStayHidden( true );
|
joachim99@77
|
151 }
|
joachim99@51
|
152
|
joachim99@58
|
153 // All default values must be set before calling readOptions().
|
joachim99@58
|
154 m_pOptionDialog = new OptionDialog( m_pKDiff3Shell!=0, this );
|
joachim99@80
|
155 connect( m_pOptionDialog, SIGNAL(applyDone()), this, SLOT(slotRefresh()) );
|
joachim99@68
|
156
|
joachim99@80
|
157 m_pOptionDialog->readOptions( isPart() ? m_pKDiff3Part->componentData().config() : KGlobal::config() );
|
joachim99@58
|
158
|
joachim99@69
|
159 // Option handling: Only when pParent==0 (no parent)
|
joachim99@69
|
160 KCmdLineArgs *args = isPart() ? 0 : KCmdLineArgs::parsedArgs();
|
joachim99@69
|
161
|
joachim99@69
|
162 if (args)
|
joachim99@69
|
163 {
|
joachim99@69
|
164 QString s;
|
joachim99@69
|
165 QString title;
|
joachim99@69
|
166 if ( args->isSet("confighelp") )
|
joachim99@69
|
167 {
|
joachim99@69
|
168 s = m_pOptionDialog->calcOptionHelp();
|
joachim99@69
|
169 title = i18n("Current Configuration:");
|
joachim99@69
|
170 }
|
joachim99@69
|
171 else
|
joachim99@69
|
172 {
|
joachim99@69
|
173 s = m_pOptionDialog->parseOptions( args->getOptionList("cs") );
|
joachim99@69
|
174 title = i18n("Config Option Error:");
|
joachim99@69
|
175 }
|
joachim99@69
|
176 if (!s.isEmpty())
|
joachim99@69
|
177 {
|
joachim99@95
|
178 #if defined(_WIN32) || defined(Q_OS_OS2)
|
joachim99@69
|
179 // A windows program has no console
|
joachim99@69
|
180 //KMessageBox::information(0, s,i18n("KDiff3-Usage"));
|
joachim99@75
|
181 QDialog* pDialog = new QDialog(this);
|
joachim99@75
|
182 pDialog->setAttribute( Qt::WA_DeleteOnClose );
|
joachim99@75
|
183 pDialog->setModal( true );
|
joachim99@75
|
184 pDialog->setWindowTitle(title);
|
joachim99@75
|
185 QVBoxLayout* pVBoxLayout = new QVBoxLayout( pDialog );
|
joachim99@75
|
186 QTextEdit* pTextEdit = new QTextEdit(pDialog);
|
joachim99@69
|
187 pTextEdit->setText(s);
|
joachim99@69
|
188 pTextEdit->setReadOnly(true);
|
joachim99@75
|
189 pTextEdit->setWordWrapMode(QTextOption::NoWrap);
|
joachim99@69
|
190 pVBoxLayout->addWidget(pTextEdit);
|
joachim99@69
|
191 pDialog->resize(600,400);
|
joachim99@69
|
192 pDialog->exec();
|
joachim99@69
|
193 #else
|
joachim99@75
|
194 std::cerr << title.toLatin1().constData() << std::endl;
|
joachim99@75
|
195 std::cerr << s.toLatin1().constData() << std::endl;
|
joachim99@69
|
196 #endif
|
joachim99@69
|
197 exit(1);
|
joachim99@69
|
198 }
|
joachim99@69
|
199 }
|
joachim99@69
|
200
|
joachim99@58
|
201 m_sd1.setOptionDialog(m_pOptionDialog);
|
joachim99@58
|
202 m_sd2.setOptionDialog(m_pOptionDialog);
|
joachim99@58
|
203 m_sd3.setOptionDialog(m_pOptionDialog);
|
joachim99@68
|
204
|
joachim99@8
|
205 if (args!=0)
|
joachim99@8
|
206 {
|
joachim99@8
|
207 m_outputFilename = args->getOption("output");
|
joachim99@8
|
208 if ( m_outputFilename.isEmpty() )
|
joachim99@8
|
209 m_outputFilename = args->getOption("out");
|
joachim99@8
|
210 }
|
joachim99@8
|
211
|
joachim99@77
|
212 m_bAutoFlag = args!=0 && args->isSet("auto");
|
joachim99@77
|
213 m_bAutoMode = m_bAutoFlag || m_pOptionDialog->m_bAutoSaveAndQuitOnMergeWithoutConflicts;
|
joachim99@77
|
214 if ( m_bAutoMode && m_outputFilename.isEmpty() )
|
joachim99@8
|
215 {
|
joachim99@77
|
216 if ( m_bAutoFlag )
|
joachim99@77
|
217 {
|
joachim99@77
|
218 //KMessageBox::information(this, i18n("Option --auto used, but no output file specified."));
|
joachim99@77
|
219 std::cerr << (const char*)i18n("Option --auto used, but no output file specified.").toLatin1() << std::endl;
|
joachim99@77
|
220 }
|
joachim99@77
|
221 m_bAutoMode = false;
|
joachim99@8
|
222 }
|
joachim99@77
|
223 g_pProgressDialog->setStayHidden( m_bAutoMode );
|
joachim99@8
|
224
|
joachim99@8
|
225 if ( m_outputFilename.isEmpty() && args!=0 && args->isSet("merge") )
|
joachim99@8
|
226 {
|
joachim99@8
|
227 m_outputFilename = "unnamed.txt";
|
joachim99@8
|
228 m_bDefaultFilename = true;
|
joachim99@8
|
229 }
|
joachim99@8
|
230 else
|
joachim99@8
|
231 m_bDefaultFilename = false;
|
joachim99@8
|
232
|
joachim99@8
|
233 g_bAutoSolve = args!=0 && !args->isSet("qall"); // Note that this is effective only once.
|
joachim99@8
|
234
|
joachim99@8
|
235 if ( args!=0 )
|
joachim99@8
|
236 {
|
joachim99@8
|
237 m_sd1.setFilename( args->getOption("base") );
|
joachim99@8
|
238 if ( m_sd1.isEmpty() )
|
joachim99@8
|
239 {
|
joachim99@51
|
240 if ( args->count() > 0 ) m_sd1.setFilename( args->url(0).url() ); // args->arg(0)
|
joachim99@51
|
241 if ( args->count() > 1 ) m_sd2.setFilename( args->url(1).url() );
|
joachim99@51
|
242 if ( args->count() > 2 ) m_sd3.setFilename( args->url(2).url() );
|
joachim99@8
|
243 }
|
joachim99@8
|
244 else
|
joachim99@8
|
245 {
|
joachim99@51
|
246 if ( args->count() > 0 ) m_sd2.setFilename( args->url(0).url() );
|
joachim99@51
|
247 if ( args->count() > 1 ) m_sd3.setFilename( args->url(1).url() );
|
joachim99@8
|
248 }
|
joachim99@8
|
249
|
joachim99@68
|
250
|
joachim99@80
|
251 QStringList aliasList = args->getOptionList("fname");
|
joachim99@80
|
252 QStringList::Iterator ali = aliasList.begin();
|
joachim99@68
|
253
|
joachim99@66
|
254 QString an1 = args->getOption("L1");
|
joachim99@66
|
255 if ( !an1.isEmpty() ) { m_sd1.setAliasName(an1); }
|
joachim99@66
|
256 else if ( ali != aliasList.end() ) { m_sd1.setAliasName(*ali); ++ali; }
|
joachim99@68
|
257
|
joachim99@66
|
258 QString an2 = args->getOption("L2");
|
joachim99@66
|
259 if ( !an2.isEmpty() ) { m_sd2.setAliasName(an2); }
|
joachim99@66
|
260 else if ( ali != aliasList.end() ) { m_sd2.setAliasName(*ali); ++ali; }
|
joachim99@68
|
261
|
joachim99@66
|
262 QString an3 = args->getOption("L3");
|
joachim99@66
|
263 if ( !an3.isEmpty() ) { m_sd3.setAliasName(an3); }
|
joachim99@66
|
264 else if ( ali != aliasList.end() ) { m_sd3.setAliasName(*ali); ++ali; }
|
joachim99@8
|
265 }
|
joachim99@80
|
266
|
joachim99@8
|
267 ///////////////////////////////////////////////////////////////////
|
joachim99@8
|
268 // call inits to invoke all other construction parts
|
joachim99@8
|
269 initActions(actionCollection());
|
joachim99@8
|
270 initStatusBar();
|
joachim99@8
|
271
|
joachim99@8
|
272 m_pFindDialog = new FindDialog( this );
|
joachim99@8
|
273 connect( m_pFindDialog, SIGNAL(findNext()), this, SLOT(slotEditFindNext()));
|
joachim99@8
|
274
|
joachim99@51
|
275 autoAdvance->setChecked( m_pOptionDialog->m_bAutoAdvance );
|
joachim99@51
|
276 showWhiteSpaceCharacters->setChecked( m_pOptionDialog->m_bShowWhiteSpaceCharacters );
|
joachim99@51
|
277 showWhiteSpace->setChecked( m_pOptionDialog->m_bShowWhiteSpace );
|
joachim99@51
|
278 showWhiteSpaceCharacters->setEnabled( m_pOptionDialog->m_bShowWhiteSpace );
|
joachim99@51
|
279 showLineNumbers->setChecked( m_pOptionDialog->m_bShowLineNumbers );
|
joachim99@66
|
280 wordWrap->setChecked( m_pOptionDialog->m_bWordWrap );
|
joachim99@69
|
281 if ( ! isPart() )
|
joachim99@69
|
282 {
|
joachim99@80
|
283 // TODO
|
joachim99@80
|
284 // viewToolBar->setChecked( m_pOptionDialog->m_bShowToolBar );
|
joachim99@80
|
285 // slotViewToolBar();
|
joachim99@80
|
286
|
joachim99@69
|
287 viewStatusBar->setChecked( m_pOptionDialog->m_bShowStatusBar );
|
joachim99@69
|
288 slotViewStatusBar();
|
joachim99@80
|
289 /*
|
joachim99@80
|
290 vrusu - commented out as new KToolBar does not hase setParPos
|
joachim99@80
|
291 TODO figure out how to restore bar position
|
joachim99@80
|
292 if( toolBar(MAIN_TOOLBAR_NAME)!=0 )
|
joachim99@80
|
293 toolBar(MAIN_TOOLBAR_NAME)->setBarPos( (KToolBar::BarPosition) m_pOptionDialog->m_toolBarPos );*/
|
joachim99@69
|
294 /* QSize size = m_pOptionDialog->m_geometry;
|
joachim99@69
|
295 QPoint pos = m_pOptionDialog->m_position;
|
joachim99@69
|
296 if(!size.isEmpty())
|
joachim99@69
|
297 {
|
joachim99@69
|
298 m_pKDiff3Shell->resize( size );
|
joachim99@69
|
299 QRect visibleRect = QRect( pos, size ) & QApplication::desktop()->rect();
|
joachim99@69
|
300 if ( visibleRect.width()>100 && visibleRect.height()>100 )
|
joachim99@69
|
301 m_pKDiff3Shell->move( pos );
|
joachim99@69
|
302 }*/
|
joachim99@69
|
303 }
|
joachim99@69
|
304 slotRefresh();
|
joachim99@51
|
305
|
joachim99@8
|
306 m_pMainSplitter = this; //new QSplitter(this);
|
joachim99@70
|
307 m_pMainSplitter->setOrientation( Qt::Vertical );
|
joachim99@8
|
308 // setCentralWidget( m_pMainSplitter );
|
joachim99@8
|
309 m_pDirectoryMergeSplitter = new QSplitter( m_pMainSplitter );
|
joachim99@92
|
310 m_pDirectoryMergeSplitter->setObjectName("DirectoryMergeSplitter");
|
joachim99@80
|
311 m_pMainSplitter->addWidget( m_pDirectoryMergeSplitter );
|
joachim99@70
|
312 m_pDirectoryMergeSplitter->setOrientation( Qt::Horizontal );
|
joachim99@8
|
313 m_pDirectoryMergeWindow = new DirectoryMergeWindow( m_pDirectoryMergeSplitter, m_pOptionDialog,
|
joachim99@80
|
314 KIconLoader::global() );
|
joachim99@80
|
315 m_pDirectoryMergeSplitter->addWidget(m_pDirectoryMergeWindow);
|
joachim99@8
|
316 m_pDirectoryMergeInfo = new DirectoryMergeInfo( m_pDirectoryMergeSplitter );
|
joachim99@8
|
317 m_pDirectoryMergeWindow->setDirectoryMergeInfo( m_pDirectoryMergeInfo );
|
joachim99@80
|
318 m_pDirectoryMergeSplitter->addWidget(m_pDirectoryMergeInfo);
|
joachim99@80
|
319
|
joachim99@66
|
320 connect( m_pDirectoryMergeWindow, SIGNAL(startDiffMerge(QString,QString,QString,QString,QString,QString,QString,TotalDiffStatus*)),
|
joachim99@66
|
321 this, SLOT( slotFileOpen2(QString,QString,QString,QString,QString,QString,QString,TotalDiffStatus*)));
|
joachim99@75
|
322 connect( m_pDirectoryMergeWindow, SIGNAL(itemSelectionChanged()), this, SLOT(slotUpdateAvailabilities()));
|
joachim99@75
|
323 connect( m_pDirectoryMergeWindow, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(slotUpdateAvailabilities()));
|
joachim99@8
|
324 connect( m_pDirectoryMergeWindow, SIGNAL(checkIfCanContinue(bool*)), this, SLOT(slotCheckIfCanContinue(bool*)));
|
joachim99@8
|
325 connect( m_pDirectoryMergeWindow, SIGNAL(updateAvailabilities()), this, SLOT(slotUpdateAvailabilities()));
|
joachim99@66
|
326 connect( m_pDirectoryMergeWindow, SIGNAL(statusBarMessage(const QString&)), this, SLOT(slotStatusMsg(const QString&)));
|
joachim99@8
|
327
|
joachim99@51
|
328 m_pDirectoryMergeWindow->initDirectoryMergeActions( this, actionCollection() );
|
joachim99@8
|
329
|
joachim99@8
|
330 if ( args!=0 ) args->clear(); // Free up some memory.
|
joachim99@8
|
331
|
joachim99@8
|
332 if (m_pKDiff3Shell==0)
|
joachim99@8
|
333 {
|
joachim99@8
|
334 completeInit();
|
joachim99@8
|
335 }
|
joachim99@8
|
336 }
|
joachim99@8
|
337
|
joachim99@8
|
338
|
joachim99@69
|
339 void KDiff3App::completeInit( const QString& fn1, const QString& fn2, const QString& fn3 )
|
joachim99@8
|
340 {
|
joachim99@8
|
341 if (m_pKDiff3Shell!=0)
|
joachim99@8
|
342 {
|
joachim99@69
|
343 QSize size=m_pOptionDialog->m_geometry;
|
joachim99@69
|
344 QPoint pos=m_pOptionDialog->m_position;
|
joachim99@8
|
345 if(!size.isEmpty())
|
joachim99@8
|
346 {
|
joachim99@8
|
347 m_pKDiff3Shell->resize( size );
|
joachim99@75
|
348
|
joachim99@69
|
349 QRect visibleRect = QRect( pos, size ) & QApplication::desktop()->rect();
|
joachim99@69
|
350 if ( visibleRect.width()>100 && visibleRect.height()>100 )
|
joachim99@69
|
351 m_pKDiff3Shell->move( pos );
|
joachim99@77
|
352 if (!m_bAutoMode)
|
joachim99@75
|
353 {
|
joachim99@75
|
354 if ( m_pOptionDialog->m_bMaximised )
|
joachim99@75
|
355 m_pKDiff3Shell->showMaximized();
|
joachim99@75
|
356 else
|
joachim99@75
|
357 m_pKDiff3Shell->show();
|
joachim99@75
|
358 }
|
joachim99@8
|
359 }
|
joachim99@8
|
360 }
|
joachim99@69
|
361 if ( ! fn1.isEmpty() ) { m_sd1.setFilename(fn1); }
|
joachim99@69
|
362 if ( ! fn2.isEmpty() ) { m_sd2.setFilename(fn2); }
|
joachim99@69
|
363 if ( ! fn3.isEmpty() ) { m_sd3.setFilename(fn3); }
|
joachim99@8
|
364
|
joachim99@69
|
365 bool bSuccess = improveFilenames(false);
|
joachim99@68
|
366
|
joachim99@77
|
367 if ( m_bAutoFlag && m_bAutoMode && m_bDirCompare )
|
joachim99@8
|
368 {
|
joachim99@75
|
369 std::cerr << (const char*)i18n("Option --auto ignored for directory comparison.").toLatin1()<<std::endl;
|
joachim99@77
|
370 m_bAutoMode = false;
|
joachim99@8
|
371 }
|
joachim99@8
|
372 if (!m_bDirCompare)
|
joachim99@8
|
373 {
|
joachim99@8
|
374 m_pDirectoryMergeSplitter->hide();
|
joachim99@8
|
375
|
joachim99@77
|
376 init( m_bAutoMode );
|
joachim99@77
|
377 if ( m_bAutoMode )
|
joachim99@8
|
378 {
|
joachim99@58
|
379 SourceData* pSD=0;
|
joachim99@8
|
380 if ( m_sd3.isEmpty() )
|
joachim99@8
|
381 {
|
joachim99@58
|
382 if ( m_totalDiffStatus.bBinaryAEqB ){ pSD = &m_sd1; }
|
joachim99@8
|
383 }
|
joachim99@8
|
384 else
|
joachim99@8
|
385 {
|
joachim99@58
|
386 if ( m_totalDiffStatus.bBinaryBEqC ){ pSD = &m_sd3; } // B==C (assume A is old)
|
joachim99@58
|
387 else if ( m_totalDiffStatus.bBinaryAEqB ){ pSD = &m_sd3; } // assuming C has changed
|
joachim99@58
|
388 else if ( m_totalDiffStatus.bBinaryAEqC ){ pSD = &m_sd2; } // assuming B has changed
|
joachim99@8
|
389 }
|
joachim99@8
|
390
|
joachim99@58
|
391 if ( pSD!=0 )
|
joachim99@8
|
392 {
|
joachim99@8
|
393 // Save this file directly, not via the merge result window.
|
joachim99@8
|
394 bool bSuccess = false;
|
joachim99@58
|
395 FileAccess fa( m_outputFilename );
|
joachim99@58
|
396 if ( m_pOptionDialog->m_bDmCreateBakFiles && fa.exists() )
|
joachim99@8
|
397 {
|
joachim99@8
|
398 QString newName = m_outputFilename + ".orig";
|
joachim99@58
|
399 if ( FileAccess::exists( newName ) ) FileAccess::removeFile( newName );
|
joachim99@58
|
400 if ( !FileAccess::exists( newName ) ) fa.rename( newName );
|
joachim99@8
|
401 }
|
joachim99@68
|
402
|
joachim99@58
|
403 bSuccess = pSD->saveNormalDataAs( m_outputFilename );
|
joachim99@8
|
404 if ( bSuccess ) ::exit(0);
|
joachim99@8
|
405 else KMessageBox::error( this, i18n("Saving failed.") );
|
joachim99@8
|
406 }
|
joachim99@8
|
407 else if ( m_pMergeResultWindow->getNrOfUnsolvedConflicts() == 0 )
|
joachim99@8
|
408 {
|
joachim99@80
|
409 bool bSuccess = m_pMergeResultWindow->saveDocument( m_pMergeResultWindowTitle->getFileName(), m_pMergeResultWindowTitle->getEncoding(), m_pMergeResultWindowTitle->getLineEndStyle() );
|
joachim99@8
|
410 if ( bSuccess ) ::exit(0);
|
joachim99@8
|
411 }
|
joachim99@8
|
412 }
|
joachim99@8
|
413 }
|
joachim99@77
|
414 m_bAutoMode = false;
|
joachim99@8
|
415
|
joachim99@69
|
416 if (m_pKDiff3Shell)
|
joachim99@77
|
417 {
|
joachim99@77
|
418 if ( m_pOptionDialog->m_bMaximised )
|
joachim99@77
|
419 m_pKDiff3Shell->showMaximized();
|
joachim99@77
|
420 else
|
joachim99@77
|
421 m_pKDiff3Shell->show();
|
joachim99@77
|
422 }
|
joachim99@77
|
423
|
joachim99@77
|
424 g_pProgressDialog->setStayHidden( false );
|
joachim99@69
|
425
|
joachim99@8
|
426 if (statusBar() !=0 )
|
joachim99@69
|
427 statusBar()->setSizeGripEnabled(true);
|
joachim99@8
|
428
|
joachim99@8
|
429 slotClipboardChanged(); // For initialisation.
|
joachim99@8
|
430
|
joachim99@8
|
431 slotUpdateAvailabilities();
|
joachim99@8
|
432
|
joachim99@8
|
433 if ( ! m_bDirCompare && m_pKDiff3Shell!=0 )
|
joachim99@8
|
434 {
|
joachim99@8
|
435 bool bFileOpenError = false;
|
joachim99@80
|
436 if ( (! m_sd1.isEmpty() && !m_sd1.hasData()) ||
|
joachim99@80
|
437 (! m_sd2.isEmpty() && !m_sd2.hasData()) ||
|
joachim99@80
|
438 (! m_sd3.isEmpty() && !m_sd3.hasData()) )
|
joachim99@8
|
439 {
|
joachim99@8
|
440 QString text( i18n("Opening of these files failed:") );
|
joachim99@8
|
441 text += "\n\n";
|
joachim99@58
|
442 if ( ! m_sd1.isEmpty() && !m_sd1.hasData() )
|
joachim99@8
|
443 text += " - " + m_sd1.getAliasName() + "\n";
|
joachim99@58
|
444 if ( ! m_sd2.isEmpty() && !m_sd2.hasData() )
|
joachim99@8
|
445 text += " - " + m_sd2.getAliasName() + "\n";
|
joachim99@58
|
446 if ( ! m_sd3.isEmpty() && !m_sd3.hasData() )
|
joachim99@8
|
447 text += " - " + m_sd3.getAliasName() + "\n";
|
joachim99@8
|
448
|
joachim99@51
|
449 KMessageBox::sorry( this, text, i18n("File Open Error") );
|
joachim99@8
|
450 bFileOpenError = true;
|
joachim99@8
|
451 }
|
joachim99@8
|
452
|
joachim99@8
|
453 if ( m_sd1.isEmpty() || m_sd2.isEmpty() || bFileOpenError )
|
joachim99@8
|
454 slotFileOpen();
|
joachim99@8
|
455 }
|
joachim99@66
|
456 else if ( !bSuccess ) // Directory open failed
|
joachim99@66
|
457 {
|
joachim99@66
|
458 slotFileOpen();
|
joachim99@66
|
459 }
|
joachim99@8
|
460 }
|
joachim99@8
|
461
|
joachim99@8
|
462 KDiff3App::~KDiff3App()
|
joachim99@8
|
463 {
|
joachim99@8
|
464
|
joachim99@8
|
465 }
|
joachim99@8
|
466
|
joachim99@80
|
467 /**
|
joachim99@80
|
468 * Helper function used to create actions into the ac collection
|
joachim99@80
|
469 */
|
joachim99@80
|
470
|
joachim99@8
|
471 void KDiff3App::initActions( KActionCollection* ac )
|
joachim99@8
|
472 {
|
joachim99@80
|
473 if (ac==0)
|
joachim99@80
|
474 KMessageBox::error(0, "actionCollection==0");
|
joachim99@8
|
475
|
joachim99@80
|
476 fileOpen = KStandardAction::open(this, SLOT(slotFileOpen()), ac);
|
joachim99@80
|
477 fileOpen->setStatusTip(i18n("Opens documents for comparison..."));
|
joachim99@69
|
478
|
joachim99@80
|
479 fileReload = KDiff3::createAction< KAction >( i18n("Reload"), KShortcut( Qt::Key_F5 ), this, SLOT(slotReload()), ac, "file_reload" );
|
joachim99@80
|
480
|
joachim99@80
|
481 fileSave = KStandardAction::save(this, SLOT(slotFileSave()), ac);
|
joachim99@80
|
482 fileSave->setStatusTip(i18n("Saves the merge result. All conflicts must be solved!"));
|
joachim99@80
|
483 fileSaveAs = KStandardAction::saveAs(this, SLOT(slotFileSaveAs()), ac);
|
joachim99@80
|
484 fileSaveAs->setStatusTip(i18n("Saves the current document as..."));
|
joachim99@95
|
485 #ifndef QT_NO_PRINTER
|
joachim99@80
|
486 filePrint = KStandardAction::print(this, SLOT(slotFilePrint()), ac);
|
joachim99@80
|
487 filePrint->setStatusTip(i18n("Print the differences"));
|
joachim99@95
|
488 #endif
|
joachim99@80
|
489 fileQuit = KStandardAction::quit(this, SLOT(slotFileQuit()), ac);
|
joachim99@80
|
490 fileQuit->setStatusTip(i18n("Quits the application"));
|
joachim99@80
|
491 editCut = KStandardAction::cut(this, SLOT(slotEditCut()), ac);
|
joachim99@80
|
492 editCut->setStatusTip(i18n("Cuts the selected section and puts it to the clipboard"));
|
joachim99@80
|
493 editCopy = KStandardAction::copy(this, SLOT(slotEditCopy()), ac);
|
joachim99@80
|
494 editCopy->setStatusTip(i18n("Copies the selected section to the clipboard"));
|
joachim99@80
|
495 editPaste = KStandardAction::paste(this, SLOT(slotEditPaste()), ac);
|
joachim99@80
|
496 editPaste->setStatusTip(i18n("Pastes the clipboard contents to actual position"));
|
joachim99@80
|
497 editSelectAll = KStandardAction::selectAll(this, SLOT(slotEditSelectAll()), ac);
|
joachim99@80
|
498 editSelectAll->setStatusTip(i18n("Select everything in current window"));
|
joachim99@80
|
499 editFind = KStandardAction::find(this, SLOT(slotEditFind()), ac);
|
joachim99@80
|
500 editFind->setStatusTip(i18n("Search for a string"));
|
joachim99@80
|
501 editFindNext = KStandardAction::findNext(this, SLOT(slotEditFindNext()), ac);
|
joachim99@80
|
502 editFindNext->setStatusTip(i18n("Search again for the string"));
|
joachim99@80
|
503 /* FIXME figure out how to implement this action
|
joachim99@80
|
504 viewToolBar = KStandardAction::showToolbar(this, SLOT(slotViewToolBar()), ac);
|
joachim99@80
|
505 viewToolBar->setStatusTip(i18n("Enables/disables the toolbar")); */
|
joachim99@80
|
506 viewStatusBar = KStandardAction::showStatusbar(this, SLOT(slotViewStatusBar()), ac);
|
joachim99@80
|
507 viewStatusBar->setStatusTip(i18n("Enables/disables the statusbar"));
|
joachim99@80
|
508 KStandardAction::keyBindings(this, SLOT(slotConfigureKeys()), ac);
|
joachim99@80
|
509 KAction* pAction = KStandardAction::preferences(this, SLOT(slotConfigure()), ac );
|
joachim99@8
|
510 if ( isPart() )
|
joachim99@51
|
511 pAction->setText(i18n("Configure KDiff3..."));
|
joachim99@8
|
512
|
joachim99@8
|
513
|
joachim99@8
|
514 #include "xpm/downend.xpm"
|
joachim99@8
|
515 #include "xpm/currentpos.xpm"
|
joachim99@8
|
516 #include "xpm/down1arrow.xpm"
|
joachim99@8
|
517 #include "xpm/down2arrow.xpm"
|
joachim99@8
|
518 #include "xpm/upend.xpm"
|
joachim99@8
|
519 #include "xpm/up1arrow.xpm"
|
joachim99@8
|
520 #include "xpm/up2arrow.xpm"
|
joachim99@8
|
521 #include "xpm/prevunsolved.xpm"
|
joachim99@8
|
522 #include "xpm/nextunsolved.xpm"
|
joachim99@8
|
523 #include "xpm/iconA.xpm"
|
joachim99@8
|
524 #include "xpm/iconB.xpm"
|
joachim99@8
|
525 #include "xpm/iconC.xpm"
|
joachim99@8
|
526 #include "xpm/autoadvance.xpm"
|
joachim99@8
|
527 #include "xpm/showwhitespace.xpm"
|
joachim99@58
|
528 #include "xpm/showwhitespacechars.xpm"
|
joachim99@8
|
529 #include "xpm/showlinenumbers.xpm"
|
joachim99@8
|
530 //#include "reload.xpm"
|
joachim99@8
|
531
|
joachim99@80
|
532 goCurrent = KDiff3::createAction< KAction >( i18n("Go to Current Delta"), QIcon(QPixmap(currentpos)), i18n("Current\nDelta"), KShortcut( Qt::CTRL+Qt::Key_Space ), this, SLOT(slotGoCurrent()), ac, "go_current");
|
joachim99@80
|
533
|
joachim99@80
|
534 goTop = KDiff3::createAction< KAction >(i18n("Go to First Delta"), QIcon(QPixmap(upend)), i18n("First\nDelta"), this, SLOT(slotGoTop()), ac, "go_top");
|
joachim99@80
|
535
|
joachim99@80
|
536 goBottom = KDiff3::createAction< KAction >(i18n("Go to Last Delta"), QIcon(QPixmap(downend)), i18n("Last\nDelta"), this, SLOT(slotGoBottom()), ac, "go_bottom");
|
joachim99@80
|
537
|
joachim99@68
|
538 QString omitsWhitespace = ".\n" + i18n("(Skips white space differences when \"Show White Space\" is disabled.)");
|
joachim99@69
|
539 QString includeWhitespace = ".\n" + i18n("(Does not skip white space differences even when \"Show White Space\" is disabled.)");
|
joachim99@80
|
540 goPrevDelta = KDiff3::createAction< KAction >(i18n("Go to Previous Delta"), QIcon(QPixmap(up1arrow)), i18n("Prev\nDelta"), KShortcut( Qt::CTRL+Qt::Key_Up), this, SLOT(slotGoPrevDelta()), ac, "go_prev_delta");
|
joachim99@68
|
541 goPrevDelta->setToolTip( goPrevDelta->text() + omitsWhitespace );
|
joachim99@80
|
542 goNextDelta = KDiff3::createAction< KAction >(i18n("Go to Next Delta"), QIcon(QPixmap(down1arrow)), i18n("Next\nDelta"), KShortcut( Qt::CTRL+Qt::Key_Down ), this, SLOT(slotGoNextDelta()), ac, "go_next_delta");
|
joachim99@68
|
543 goNextDelta->setToolTip( goNextDelta->text() + omitsWhitespace );
|
joachim99@80
|
544 goPrevConflict = KDiff3::createAction< KAction >(i18n("Go to Previous Conflict"), QIcon(QPixmap(up2arrow)), i18n("Prev\nConflict"), KShortcut( Qt::CTRL+Qt::Key_PageUp ), this, SLOT(slotGoPrevConflict()), ac, "go_prev_conflict");
|
joachim99@68
|
545 goPrevConflict->setToolTip( goPrevConflict->text() + omitsWhitespace );
|
joachim99@80
|
546 goNextConflict = KDiff3::createAction< KAction >(i18n("Go to Next Conflict"), QIcon(QPixmap(down2arrow)), i18n("Next\nConflict"), KShortcut( Qt::CTRL+Qt::Key_PageDown ), this, SLOT(slotGoNextConflict()), ac, "go_next_conflict");
|
joachim99@68
|
547 goNextConflict->setToolTip( goNextConflict->text() + omitsWhitespace );
|
joachim99@80
|
548 goPrevUnsolvedConflict = KDiff3::createAction< KAction >(i18n("Go to Previous Unsolved Conflict"), QIcon(QPixmap(prevunsolved)), i18n("Prev\nUnsolved"), this, SLOT(slotGoPrevUnsolvedConflict()), ac, "go_prev_unsolved_conflict");
|
joachim99@68
|
549 goPrevUnsolvedConflict->setToolTip( goPrevUnsolvedConflict->text() + includeWhitespace );
|
joachim99@80
|
550 goNextUnsolvedConflict = KDiff3::createAction< KAction >(i18n("Go to Next Unsolved Conflict"), QIcon(QPixmap(nextunsolved)), i18n("Next\nUnsolved"), this, SLOT(slotGoNextUnsolvedConflict()), ac, "go_next_unsolved_conflict");
|
joachim99@68
|
551 goNextUnsolvedConflict->setToolTip( goNextUnsolvedConflict->text() + includeWhitespace );
|
joachim99@80
|
552 chooseA = KDiff3::createAction< KToggleAction >(i18n("Select Line(s) From A"), QIcon(QPixmap(iconA)), i18n("Choose\nA"), KShortcut( Qt::CTRL+Qt::Key_1 ), this, SLOT(slotChooseA()), ac, "merge_choose_a");
|
joachim99@80
|
553 chooseB = KDiff3::createAction< KToggleAction >(i18n("Select Line(s) From B"), QIcon(QPixmap(iconB)), i18n("Choose\nB"), KShortcut( Qt::CTRL+Qt::Key_2 ), this, SLOT(slotChooseB()), ac, "merge_choose_b");
|
joachim99@80
|
554 chooseC = KDiff3::createAction< KToggleAction >(i18n("Select Line(s) From C"), QIcon(QPixmap(iconC)), i18n("Choose\nC"), KShortcut( Qt::CTRL+Qt::Key_3 ), this, SLOT(slotChooseC()), ac, "merge_choose_c");
|
joachim99@80
|
555 autoAdvance = KDiff3::createAction< KToggleAction >(i18n("Automatically Go to Next Unsolved Conflict After Source Selection"), QIcon(QPixmap(autoadvance)), i18n("Auto\nNext"), this, SLOT(slotAutoAdvanceToggled()), ac, "merge_autoadvance");
|
joachim99@51
|
556
|
joachim99@80
|
557 showWhiteSpaceCharacters = KDiff3::createAction< KToggleAction >(i18n("Show Space && Tabulator Characters for Differences"), QIcon(QPixmap(showwhitespacechars)), i18n("White\nCharacters"), this, SLOT(slotShowWhiteSpaceToggled()), ac, "diff_show_whitespace_characters");
|
joachim99@80
|
558 showWhiteSpace = KDiff3::createAction< KToggleAction >(i18n("Show White Space"), QIcon(QPixmap(showwhitespace)), i18n("White\nDeltas"), this, SLOT(slotShowWhiteSpaceToggled()), ac, "diff_show_whitespace");
|
joachim99@51
|
559
|
joachim99@80
|
560 showLineNumbers = KDiff3::createAction< KToggleAction >(i18n("Show Line Numbers"), QIcon(QPixmap(showlinenumbers)), i18n("Line\nNumbers"), this, SLOT(slotShowLineNumbersToggled()), ac, "diff_showlinenumbers");
|
joachim99@80
|
561 chooseAEverywhere = KDiff3::createAction< KAction >(i18n("Choose A Everywhere"), KShortcut( Qt::CTRL+Qt::SHIFT+Qt::Key_1 ), this, SLOT(slotChooseAEverywhere()), ac, "merge_choose_a_everywhere");
|
joachim99@80
|
562 chooseBEverywhere = KDiff3::createAction< KAction >(i18n("Choose B Everywhere"), KShortcut( Qt::CTRL+Qt::SHIFT+Qt::Key_2 ), this, SLOT(slotChooseBEverywhere()), ac, "merge_choose_b_everywhere");
|
joachim99@80
|
563 chooseCEverywhere = KDiff3::createAction< KAction >(i18n("Choose C Everywhere"), KShortcut( Qt::CTRL+Qt::SHIFT+Qt::Key_3 ), this, SLOT(slotChooseCEverywhere()), ac, "merge_choose_c_everywhere");
|
joachim99@80
|
564 chooseAForUnsolvedConflicts = KDiff3::createAction< KAction >(i18n("Choose A for All Unsolved Conflicts"), this, SLOT(slotChooseAForUnsolvedConflicts()), ac, "merge_choose_a_for_unsolved_conflicts");
|
joachim99@80
|
565 chooseBForUnsolvedConflicts = KDiff3::createAction< KAction >(i18n("Choose B for All Unsolved Conflicts"), this, SLOT(slotChooseBForUnsolvedConflicts()), ac, "merge_choose_b_for_unsolved_conflicts");
|
joachim99@80
|
566 chooseCForUnsolvedConflicts = KDiff3::createAction< KAction >(i18n("Choose C for All Unsolved Conflicts"), this, SLOT(slotChooseCForUnsolvedConflicts()), ac, "merge_choose_c_for_unsolved_conflicts");
|
joachim99@80
|
567 chooseAForUnsolvedWhiteSpaceConflicts = KDiff3::createAction< KAction >(i18n("Choose A for All Unsolved Whitespace Conflicts"), this, SLOT(slotChooseAForUnsolvedWhiteSpaceConflicts()), ac, "merge_choose_a_for_unsolved_whitespace_conflicts");
|
joachim99@80
|
568 chooseBForUnsolvedWhiteSpaceConflicts = KDiff3::createAction< KAction >(i18n("Choose B for All Unsolved Whitespace Conflicts"), this, SLOT(slotChooseBForUnsolvedWhiteSpaceConflicts()), ac, "merge_choose_b_for_unsolved_whitespace_conflicts");
|
joachim99@80
|
569 chooseCForUnsolvedWhiteSpaceConflicts = KDiff3::createAction< KAction >(i18n("Choose C for All Unsolved Whitespace Conflicts"), this, SLOT(slotChooseCForUnsolvedWhiteSpaceConflicts()), ac, "merge_choose_c_for_unsolved_whitespace_conflicts");
|
joachim99@80
|
570 autoSolve = KDiff3::createAction< KAction >(i18n("Automatically Solve Simple Conflicts"), this, SLOT(slotAutoSolve()), ac, "merge_autosolve");
|
joachim99@80
|
571 unsolve = KDiff3::createAction< KAction >(i18n("Set Deltas to Conflicts"), this, SLOT(slotUnsolve()), ac, "merge_autounsolve");
|
joachim99@80
|
572 mergeRegExp = KDiff3::createAction< KAction >(i18n("Run Regular Expression Auto Merge"), this, SLOT(slotRegExpAutoMerge()),ac, "merge_regexp_automerge" );
|
joachim99@80
|
573 mergeHistory = KDiff3::createAction< KAction >(i18n("Automatically Solve History Conflicts"), this, SLOT(slotMergeHistory()), ac, "merge_versioncontrol_history" );
|
joachim99@80
|
574 splitDiff = KDiff3::createAction< KAction >(i18n("Split Diff At Selection"), this, SLOT(slotSplitDiff()), ac, "merge_splitdiff");
|
joachim99@80
|
575 joinDiffs = KDiff3::createAction< KAction >(i18n("Join Selected Diffs"), this, SLOT(slotJoinDiffs()), ac, "merge_joindiffs");
|
joachim99@69
|
576
|
joachim99@80
|
577 showWindowA = KDiff3::createAction< KToggleAction >(i18n("Show Window A"), this, SLOT(slotShowWindowAToggled()), ac, "win_show_a");
|
joachim99@80
|
578 showWindowB = KDiff3::createAction< KToggleAction >(i18n("Show Window B"), this, SLOT(slotShowWindowBToggled()), ac, "win_show_b");
|
joachim99@80
|
579 showWindowC = KDiff3::createAction< KToggleAction >(i18n("Show Window C"), this, SLOT(slotShowWindowCToggled()), ac, "win_show_c");
|
joachim99@80
|
580 winFocusNext = KDiff3::createAction< KAction >(i18n("Focus Next Window"), KShortcut( Qt::ALT+Qt::Key_Right ), this, SLOT(slotWinFocusNext()), ac, "win_focus_next");
|
joachim99@68
|
581
|
joachim99@80
|
582 overviewModeNormal = KDiff3::createAction< KToggleAction >(i18n("Normal Overview"), this, SLOT(slotOverviewNormal()), ac, "diff_overview_normal");
|
joachim99@80
|
583 overviewModeAB = KDiff3::createAction< KToggleAction >(i18n("A vs. B Overview"), this, SLOT(slotOverviewAB()), ac, "diff_overview_ab");
|
joachim99@80
|
584 overviewModeAC = KDiff3::createAction< KToggleAction >(i18n("A vs. C Overview"), this, SLOT(slotOverviewAC()), ac, "diff_overview_ac");
|
joachim99@80
|
585 overviewModeBC = KDiff3::createAction< KToggleAction >(i18n("B vs. C Overview"), this, SLOT(slotOverviewBC()), ac, "diff_overview_bc");
|
joachim99@80
|
586 wordWrap = KDiff3::createAction< KToggleAction >(i18n("Word Wrap Diff Windows"), this, SLOT(slotWordWrapToggled()), ac, "diff_wordwrap");
|
joachim99@80
|
587 addManualDiffHelp = KDiff3::createAction< KAction >(i18n("Add Manual Diff Alignment"), KShortcut( Qt::CTRL+Qt::Key_Y ), this, SLOT(slotAddManualDiffHelp()), ac, "diff_add_manual_diff_help");
|
joachim99@80
|
588 clearManualDiffHelpList = KDiff3::createAction< KAction >(i18n("Clear All Manual Diff Alignments"), KShortcut( Qt::CTRL+Qt::SHIFT+Qt::Key_Y ), this, SLOT(slotClearManualDiffHelpList()), ac, "diff_clear_manual_diff_help_list");
|
joachim99@68
|
589
|
joachim99@95
|
590 #if defined(_WIN32) || defined(Q_OS_OS2)
|
joachim99@80
|
591 KDiff3::createAction< KAction >(i18n("Focus Next Window"), KShortcut(Qt::CTRL+Qt::Key_Tab), this, SLOT(slotWinFocusNext()), ac, "win_focus_next");
|
joachim99@26
|
592 #endif
|
joachim99@80
|
593 winFocusPrev = KDiff3::createAction< KAction >(i18n("Focus Prev Window"), KShortcut( Qt::ALT+Qt::Key_Left ), this, SLOT(slotWinFocusPrev()), ac, "win_focus_prev");
|
joachim99@80
|
594 winToggleSplitOrientation = KDiff3::createAction< KAction >(i18n("Toggle Split Orientation"), this, SLOT(slotWinToggleSplitterOrientation()), ac, "win_toggle_split_orientation");
|
joachim99@8
|
595
|
joachim99@80
|
596 dirShowBoth = KDiff3::createAction< KToggleAction >(i18n("Dir && Text Split Screen View"), this, SLOT(slotDirShowBoth()), ac, "win_dir_show_both");
|
joachim99@8
|
597 dirShowBoth->setChecked( true );
|
joachim99@80
|
598 dirViewToggle = KDiff3::createAction< KAction >(i18n("Toggle Between Dir && Text View"), this, SLOT(slotDirViewToggle()), ac, "win_dir_view_toggle");
|
joachim99@8
|
599
|
joachim99@75
|
600 m_pMergeEditorPopupMenu = new QMenu( this );
|
joachim99@80
|
601 /* chooseA->plug( m_pMergeEditorPopupMenu );
|
joachim99@8
|
602 chooseB->plug( m_pMergeEditorPopupMenu );
|
joachim99@80
|
603 chooseC->plug( m_pMergeEditorPopupMenu );*/
|
joachim99@80
|
604 m_pMergeEditorPopupMenu->addAction( chooseA );
|
joachim99@80
|
605 m_pMergeEditorPopupMenu->addAction( chooseB );
|
joachim99@80
|
606 m_pMergeEditorPopupMenu->addAction( chooseC );
|
joachim99@8
|
607 }
|
joachim99@8
|
608
|
joachim99@51
|
609
|
joachim99@8
|
610 void KDiff3App::showPopupMenu( const QPoint& point )
|
joachim99@8
|
611 {
|
joachim99@8
|
612 m_pMergeEditorPopupMenu->popup( point );
|
joachim99@8
|
613 }
|
joachim99@8
|
614
|
joachim99@8
|
615 void KDiff3App::initStatusBar()
|
joachim99@8
|
616 {
|
joachim99@8
|
617 ///////////////////////////////////////////////////////////////////
|
joachim99@8
|
618 // STATUSBAR
|
joachim99@8
|
619 if (statusBar() !=0 )
|
joachim99@75
|
620 statusBar()->showMessage( i18n("Ready.") );
|
joachim99@8
|
621 }
|
joachim99@8
|
622
|
joachim99@80
|
623 void KDiff3App::saveOptions( KSharedConfigPtr config )
|
joachim99@8
|
624 {
|
joachim99@77
|
625 if ( !m_bAutoMode )
|
joachim99@8
|
626 {
|
joachim99@77
|
627 if (!isPart())
|
joachim99@75
|
628 {
|
joachim99@77
|
629 m_pOptionDialog->m_bMaximised = m_pKDiff3Shell->isMaximized();
|
joachim99@77
|
630 if( ! m_pKDiff3Shell->isMaximized() && m_pKDiff3Shell->isVisible() )
|
joachim99@77
|
631 {
|
joachim99@77
|
632 m_pOptionDialog->m_geometry = m_pKDiff3Shell->size();
|
joachim99@77
|
633 m_pOptionDialog->m_position = m_pKDiff3Shell->pos();
|
joachim99@77
|
634 }
|
joachim99@80
|
635 /* TODO change this option as now KToolbar uses QToolbar positioning style
|
joachim99@80
|
636 if ( toolBar(MAIN_TOOLBAR_NAME)!=0 )
|
joachim99@80
|
637 m_pOptionDialog->m_toolBarPos = (int) toolBar(MAIN_TOOLBAR_NAME)->allowedAreas();*/
|
joachim99@75
|
638 }
|
joachim99@77
|
639
|
joachim99@77
|
640 m_pOptionDialog->saveOptions( config );
|
joachim99@8
|
641 }
|
joachim99@8
|
642 }
|
joachim99@8
|
643
|
joachim99@8
|
644
|
joachim99@8
|
645
|
joachim99@8
|
646
|
joachim99@8
|
647 bool KDiff3App::queryClose()
|
joachim99@8
|
648 {
|
joachim99@80
|
649 saveOptions( isPart() ? m_pKDiff3Part->componentData().config() : KGlobal::config() );
|
joachim99@8
|
650
|
joachim99@8
|
651 if(m_bOutputModified)
|
joachim99@8
|
652 {
|
joachim99@8
|
653 int result = KMessageBox::warningYesNoCancel(this,
|
joachim99@8
|
654 i18n("The merge result hasn't been saved."),
|
joachim99@80
|
655 i18n("Warning"),
|
joachim99@80
|
656 KGuiItem( i18n("Save && Quit") ),
|
joachim99@80
|
657 KGuiItem( i18n("Quit Without Saving") ) );
|
joachim99@8
|
658 if ( result==KMessageBox::Cancel )
|
joachim99@8
|
659 return false;
|
joachim99@8
|
660 else if ( result==KMessageBox::Yes )
|
joachim99@8
|
661 {
|
joachim99@8
|
662 slotFileSave();
|
joachim99@8
|
663 if ( m_bOutputModified )
|
joachim99@8
|
664 {
|
joachim99@8
|
665 KMessageBox::sorry(this, i18n("Saving the merge result failed."), i18n("Warning") );
|
joachim99@8
|
666 return false;
|
joachim99@8
|
667 }
|
joachim99@8
|
668 }
|
joachim99@8
|
669 }
|
joachim99@8
|
670
|
joachim99@8
|
671 m_bOutputModified = false;
|
joachim99@8
|
672
|
joachim99@8
|
673 if ( m_pDirectoryMergeWindow->isDirectoryMergeInProgress() )
|
joachim99@8
|
674 {
|
joachim99@8
|
675 int result = KMessageBox::warningYesNo(this,
|
joachim99@8
|
676 i18n("You are currently doing a directory merge. Are you sure, you want to abort?"),
|
joachim99@80
|
677 i18n("Warning"),
|
joachim99@80
|
678 KStandardGuiItem::quit(),
|
joachim99@80
|
679 KStandardGuiItem::cont() /* i18n("Continue Merging") */ );
|
joachim99@8
|
680 if ( result!=KMessageBox::Yes )
|
joachim99@8
|
681 return false;
|
joachim99@8
|
682 }
|
joachim99@8
|
683
|
joachim99@8
|
684 return true;
|
joachim99@8
|
685 }
|
joachim99@8
|
686
|
joachim99@8
|
687
|
joachim99@8
|
688 /////////////////////////////////////////////////////////////////////
|
joachim99@8
|
689 // SLOT IMPLEMENTATION
|
joachim99@8
|
690 /////////////////////////////////////////////////////////////////////
|
joachim99@8
|
691
|
joachim99@8
|
692
|
joachim99@8
|
693 void KDiff3App::slotFileSave()
|
joachim99@8
|
694 {
|
joachim99@8
|
695 if ( m_bDefaultFilename )
|
joachim99@8
|
696 {
|
joachim99@8
|
697 slotFileSaveAs();
|
joachim99@8
|
698 }
|
joachim99@8
|
699 else
|
joachim99@8
|
700 {
|
joachim99@8
|
701 slotStatusMsg(i18n("Saving file..."));
|
joachim99@8
|
702
|
joachim99@80
|
703 bool bSuccess = m_pMergeResultWindow->saveDocument( m_outputFilename, m_pMergeResultWindowTitle->getEncoding(), m_pMergeResultWindowTitle->getLineEndStyle() );
|
joachim99@8
|
704 if ( bSuccess )
|
joachim99@8
|
705 {
|
joachim99@69
|
706 m_bFileSaved = true;
|
joachim99@8
|
707 m_bOutputModified = false;
|
joachim99@8
|
708 if ( m_bDirCompare )
|
joachim99@75
|
709 m_pDirectoryMergeWindow->mergeResultSaved( m_outputFilename );
|
joachim99@8
|
710 }
|
joachim99@8
|
711
|
joachim99@8
|
712 slotStatusMsg(i18n("Ready."));
|
joachim99@8
|
713 }
|
joachim99@8
|
714 }
|
joachim99@8
|
715
|
joachim99@8
|
716 void KDiff3App::slotFileSaveAs()
|
joachim99@8
|
717 {
|
joachim99@8
|
718 slotStatusMsg(i18n("Saving file with a new filename..."));
|
joachim99@8
|
719
|
joachim99@80
|
720 QString s = KFileDialog::getSaveUrl( QDir::currentPath(), 0, this, i18n("Save As...") ).url();
|
joachim99@8
|
721 if(!s.isEmpty())
|
joachim99@8
|
722 {
|
joachim99@8
|
723 m_outputFilename = s;
|
joachim99@75
|
724 m_pMergeResultWindowTitle->setFileName( m_outputFilename );
|
joachim99@80
|
725 bool bSuccess = m_pMergeResultWindow->saveDocument( m_outputFilename, m_pMergeResultWindowTitle->getEncoding(), m_pMergeResultWindowTitle->getLineEndStyle() );
|
joachim99@8
|
726 if ( bSuccess )
|
joachim99@8
|
727 {
|
joachim99@8
|
728 m_bOutputModified = false;
|
joachim99@8
|
729 if ( m_bDirCompare )
|
joachim99@75
|
730 m_pDirectoryMergeWindow->mergeResultSaved( m_outputFilename );
|
joachim99@8
|
731 }
|
joachim99@8
|
732 //setCaption(url.fileName(),doc->isModified());
|
joachim99@8
|
733
|
joachim99@8
|
734 m_bDefaultFilename = false;
|
joachim99@8
|
735 }
|
joachim99@8
|
736
|
joachim99@8
|
737 slotStatusMsg(i18n("Ready."));
|
joachim99@8
|
738 }
|
joachim99@8
|
739
|
joachim99@8
|
740
|
joachim99@69
|
741 void printDiffTextWindow( MyPainter& painter, const QRect& view, const QString& headerText, DiffTextWindow* pDiffTextWindow, int line, int linesPerPage, QColor fgColor )
|
joachim99@69
|
742 {
|
joachim99@69
|
743 QRect clipRect = view;
|
joachim99@69
|
744 clipRect.setTop(0);
|
joachim99@69
|
745 painter.setClipRect( clipRect );
|
joachim99@69
|
746 painter.translate( view.left() , 0 );
|
joachim99@69
|
747 QFontMetrics fm = painter.fontMetrics();
|
joachim99@69
|
748 //if ( fm.width(headerText) > view.width() )
|
joachim99@69
|
749 {
|
joachim99@69
|
750 // A simple wrapline algorithm
|
joachim99@69
|
751 int l=0;
|
joachim99@70
|
752 for (int p=0; p<headerText.length(); )
|
joachim99@69
|
753 {
|
joachim99@69
|
754 QString s = headerText.mid(p);
|
joachim99@70
|
755 int i;
|
joachim99@69
|
756 for(i=2;i<s.length();++i)
|
joachim99@69
|
757 if (fm.width(s,i)>view.width())
|
joachim99@69
|
758 {
|
joachim99@69
|
759 --i;
|
joachim99@69
|
760 break;
|
joachim99@69
|
761 }
|
joachim99@69
|
762 //QString s2 = s.left(i);
|
joachim99@69
|
763 painter.drawText( 0, l*fm.height() + fm.ascent(), s.left(i) );
|
joachim99@69
|
764 p+=i;
|
joachim99@69
|
765 ++l;
|
joachim99@69
|
766 }
|
joachim99@69
|
767 painter.setPen( fgColor );
|
joachim99@69
|
768 painter.drawLine( 0, view.top()-2, view.width(), view.top()-2 );
|
joachim99@69
|
769 }
|
joachim99@69
|
770
|
joachim99@69
|
771 painter.translate( 0, view.top() );
|
joachim99@69
|
772 pDiffTextWindow->print( painter, view, line, linesPerPage );
|
joachim99@75
|
773 painter.resetMatrix();
|
joachim99@69
|
774 }
|
joachim99@69
|
775
|
joachim99@69
|
776 void KDiff3App::slotFilePrint()
|
joachim99@69
|
777 {
|
joachim99@69
|
778 if ( !m_pDiffTextWindow1 )
|
joachim99@69
|
779 return;
|
joachim99@95
|
780 #ifdef QT_NO_PRINTER
|
joachim99@95
|
781 slotStatusMsg( i18n( "Printing not implemented." ) );
|
joachim99@95
|
782 #endif
|
joachim99@95
|
783 #ifndef QT_NO_PRINTER
|
joachim99@80
|
784 QPrinter printer;
|
joachim99@75
|
785 QPrintDialog printDialog(&printer, this);
|
joachim99@69
|
786
|
joachim99@69
|
787 int firstSelectionD3LIdx = -1;
|
joachim99@69
|
788 int lastSelectionD3LIdx = -1;
|
joachim99@69
|
789 if ( m_pDiffTextWindow1 ) { m_pDiffTextWindow1->getSelectionRange(&firstSelectionD3LIdx, &lastSelectionD3LIdx, eD3LLineCoords); }
|
joachim99@69
|
790 if ( firstSelectionD3LIdx<0 && m_pDiffTextWindow2 ) { m_pDiffTextWindow2->getSelectionRange(&firstSelectionD3LIdx, &lastSelectionD3LIdx, eD3LLineCoords); }
|
joachim99@69
|
791 if ( firstSelectionD3LIdx<0 && m_pDiffTextWindow3 ) { m_pDiffTextWindow3->getSelectionRange(&firstSelectionD3LIdx, &lastSelectionD3LIdx, eD3LLineCoords); }
|
joachim99@69
|
792 #ifdef KREPLACEMENTS_H // Currently PrintSelection is not supported in KDEs print dialog.
|
joachim99@69
|
793 if ( firstSelectionD3LIdx>=0 )
|
joachim99@69
|
794 {
|
joachim99@75
|
795 printDialog.addEnabledOption(QPrintDialog::PrintSelection);
|
joachim99@80
|
796 //printer.setOptionEnabled(QPrinter::PrintSelection,true);
|
joachim99@80
|
797 printDialog.setPrintRange(QAbstractPrintDialog::Selection);
|
joachim99@69
|
798 }
|
joachim99@69
|
799 #endif
|
joachim99@69
|
800
|
joachim99@80
|
801 if ( firstSelectionD3LIdx == -1 )
|
joachim99@80
|
802 printDialog.setPrintRange(QAbstractPrintDialog::AllPages);
|
joachim99@80
|
803 //printDialog.setMinMax(0,0);
|
joachim99@80
|
804 printDialog.setFromTo(0,0);
|
joachim99@69
|
805
|
joachim99@69
|
806 int currentFirstLine = m_pDiffTextWindow1->getFirstLine();
|
joachim99@69
|
807 int currentFirstD3LIdx = m_pDiffTextWindow1->convertLineToDiff3LineIdx( currentFirstLine );
|
joachim99@69
|
808
|
joachim99@69
|
809 // do some printer initialization
|
joachim99@69
|
810 printer.setFullPage( false );
|
joachim99@69
|
811
|
joachim99@69
|
812 // initialize the printer using the print dialog
|
joachim99@75
|
813 if (printDialog.exec()== QDialog::Accepted)
|
joachim99@69
|
814 {
|
joachim99@69
|
815 slotStatusMsg( i18n( "Printing..." ) );
|
joachim99@69
|
816 // create a painter to paint on the printer object
|
joachim99@77
|
817 MyPainter painter( &printer, m_pOptionDialog->m_bRightToLeftLanguage, width(), fontMetrics().width('W') );
|
joachim99@69
|
818
|
joachim99@75
|
819 QPaintDevice* pPaintDevice = painter.device();
|
joachim99@75
|
820 int dpiy = pPaintDevice->logicalDpiY();
|
joachim99@69
|
821 int columnDistance = (int) ( (0.5/2.54)*dpiy ); // 0.5 cm between the columns
|
joachim99@69
|
822
|
joachim99@69
|
823 int columns = m_bTripleDiff ? 3 : 2;
|
joachim99@75
|
824 int columnWidth = ( pPaintDevice->width() - (columns-1)*columnDistance ) / columns;
|
joachim99@69
|
825
|
joachim99@69
|
826 QFont f = m_pOptionDialog->m_font;
|
joachim99@75
|
827 f.setPointSizeF(f.pointSizeF()-1); // Print with slightly smaller font.
|
joachim99@69
|
828 painter.setFont( f );
|
joachim99@69
|
829 QFontMetrics fm = painter.fontMetrics();
|
joachim99@69
|
830
|
joachim99@69
|
831 QString topLineText = i18n("Top line");
|
joachim99@69
|
832
|
joachim99@69
|
833 //int headerWidth = fm.width( m_sd1.getAliasName() + ", "+topLineText+": 01234567" );
|
joachim99@69
|
834 int headerLines = fm.width( m_sd1.getAliasName() + ", "+topLineText+": 01234567" )/columnWidth+1;
|
joachim99@69
|
835
|
joachim99@69
|
836 int headerMargin = headerLines * fm.height() + 3; // Text + one horizontal line
|
joachim99@69
|
837 int footerMargin = fm.height() + 3;
|
joachim99@69
|
838
|
joachim99@75
|
839 QRect view ( 0, headerMargin, pPaintDevice->width(), pPaintDevice->height() - (headerMargin + footerMargin) );
|
joachim99@75
|
840 QRect view1( 0*(columnWidth + columnDistance), view.top(), columnWidth, view.height() );
|
joachim99@75
|
841 QRect view2( 1*(columnWidth + columnDistance), view.top(), columnWidth, view.height() );
|
joachim99@75
|
842 QRect view3( 2*(columnWidth + columnDistance), view.top(), columnWidth, view.height() );
|
joachim99@69
|
843
|
joachim99@69
|
844 int linesPerPage = view.height() / fm.height();
|
joachim99@69
|
845 int charactersPerLine = columnWidth / fm.width("W");
|
joachim99@69
|
846 if ( m_pOptionDialog->m_bWordWrap )
|
joachim99@69
|
847 {
|
joachim99@69
|
848 // For printing the lines are wrapped differently (this invalidates the first line)
|
joachim99@69
|
849 recalcWordWrap( charactersPerLine );
|
joachim99@69
|
850 }
|
joachim99@69
|
851
|
joachim99@69
|
852 int totalNofLines = max2(m_pDiffTextWindow1->getNofLines(), m_pDiffTextWindow2->getNofLines());
|
joachim99@69
|
853 if ( m_bTripleDiff && m_pDiffTextWindow3)
|
joachim99@69
|
854 totalNofLines = max2(totalNofLines, m_pDiffTextWindow3->getNofLines());
|
joachim99@69
|
855
|
joachim99@80
|
856 QList<int> pageList;// = printer.pageList();
|
joachim99@69
|
857
|
joachim99@69
|
858 bool bPrintCurrentPage=false;
|
joachim99@69
|
859 bool bFirstPrintedPage = false;
|
joachim99@69
|
860
|
joachim99@69
|
861 bool bPrintSelection = false;
|
joachim99@69
|
862 int totalNofPages = (totalNofLines+linesPerPage-1) / linesPerPage;
|
joachim99@69
|
863 int line=-1;
|
joachim99@69
|
864 int selectionEndLine = -1;
|
joachim99@69
|
865
|
joachim99@69
|
866 #ifdef KREPLACEMENTS_H
|
joachim99@80
|
867 if ( printer.printRange()==QPrinter::AllPages )
|
joachim99@69
|
868 {
|
joachim99@69
|
869 pageList.clear();
|
joachim99@69
|
870 for(int i=0; i<totalNofPages; ++i)
|
joachim99@69
|
871 {
|
joachim99@69
|
872 pageList.push_back(i+1);
|
joachim99@69
|
873 }
|
joachim99@69
|
874 }
|
joachim99@80
|
875 else if ( printer.printRange()==QPrinter::PageRange )
|
joachim99@80
|
876 {
|
joachim99@80
|
877 pageList.clear();
|
joachim99@80
|
878 for(int i=printer.fromPage(); i<=printer.toPage(); ++i)
|
joachim99@80
|
879 {
|
joachim99@80
|
880 pageList.push_back(i);
|
joachim99@80
|
881 }
|
joachim99@80
|
882 }
|
joachim99@69
|
883
|
joachim99@80
|
884 if ( printer.printRange()==QPrinter::Selection )
|
joachim99@69
|
885 #else
|
joachim99@69
|
886 if ( !pageList.empty() && pageList.front()==9999 )
|
joachim99@69
|
887 #endif
|
joachim99@69
|
888 {
|
joachim99@69
|
889 bPrintSelection = true;
|
joachim99@69
|
890 if ( firstSelectionD3LIdx >=0 )
|
joachim99@69
|
891 {
|
joachim99@69
|
892 line = m_pDiffTextWindow1->convertDiff3LineIdxToLine( firstSelectionD3LIdx );
|
joachim99@69
|
893 selectionEndLine = m_pDiffTextWindow1->convertDiff3LineIdxToLine( lastSelectionD3LIdx+1 );
|
joachim99@69
|
894 totalNofPages = (selectionEndLine-line+linesPerPage-1) / linesPerPage;
|
joachim99@69
|
895 }
|
joachim99@69
|
896 }
|
joachim99@69
|
897
|
joachim99@69
|
898 int page = 1;
|
joachim99@69
|
899
|
joachim99@75
|
900 QList<int>::iterator pageListIt = pageList.begin();
|
joachim99@69
|
901 for(;;)
|
joachim99@69
|
902 {
|
joachim99@69
|
903 if (!bPrintSelection)
|
joachim99@69
|
904 {
|
joachim99@69
|
905 if (pageListIt==pageList.end())
|
joachim99@69
|
906 break;
|
joachim99@69
|
907 page = *pageListIt;
|
joachim99@69
|
908 line = (page - 1) * linesPerPage;
|
joachim99@69
|
909 if (page==10000) // This means "Print the current page"
|
joachim99@69
|
910 {
|
joachim99@69
|
911 bPrintCurrentPage=true;
|
joachim99@69
|
912 // Detect the first visible line in the window.
|
joachim99@69
|
913 line = m_pDiffTextWindow1->convertDiff3LineIdxToLine( currentFirstD3LIdx );
|
joachim99@69
|
914 }
|
joachim99@69
|
915 }
|
joachim99@69
|
916 else
|
joachim99@69
|
917 {
|
joachim99@69
|
918 if ( line>=selectionEndLine )
|
joachim99@69
|
919 {
|
joachim99@69
|
920 break;
|
joachim99@69
|
921 }
|
joachim99@69
|
922 else
|
joachim99@69
|
923 {
|
joachim99@69
|
924 if ( selectionEndLine-line < linesPerPage )
|
joachim99@69
|
925 linesPerPage=selectionEndLine-line;
|
joachim99@69
|
926 }
|
joachim99@69
|
927 }
|
joachim99@69
|
928 if (line>=0 && line<totalNofLines )
|
joachim99@69
|
929 {
|
joachim99@69
|
930
|
joachim99@69
|
931 if (bFirstPrintedPage)
|
joachim99@69
|
932 printer.newPage();
|
joachim99@69
|
933
|
joachim99@69
|
934 painter.setClipping(true);
|
joachim99@69
|
935
|
joachim99@69
|
936 painter.setPen( m_pOptionDialog->m_colorA );
|
joachim99@69
|
937 QString headerText1 = m_sd1.getAliasName() + ", "+topLineText+": " + QString::number(m_pDiffTextWindow1->calcTopLineInFile(line)+1);
|
joachim99@69
|
938 printDiffTextWindow( painter, view1, headerText1, m_pDiffTextWindow1, line, linesPerPage, m_pOptionDialog->m_fgColor );
|
joachim99@69
|
939
|
joachim99@69
|
940 painter.setPen( m_pOptionDialog->m_colorB );
|
joachim99@69
|
941 QString headerText2 = m_sd2.getAliasName() + ", "+topLineText+": " + QString::number(m_pDiffTextWindow2->calcTopLineInFile(line)+1);
|
joachim99@69
|
942 printDiffTextWindow( painter, view2, headerText2, m_pDiffTextWindow2, line, linesPerPage, m_pOptionDialog->m_fgColor );
|
joachim99@69
|
943
|
joachim99@69
|
944 if ( m_bTripleDiff && m_pDiffTextWindow3 )
|
joachim99@69
|
945 {
|
joachim99@69
|
946 painter.setPen( m_pOptionDialog->m_colorC );
|
joachim99@69
|
947 QString headerText3 = m_sd3.getAliasName() + ", "+topLineText+": " + QString::number(m_pDiffTextWindow3->calcTopLineInFile(line)+1);
|
joachim99@69
|
948 printDiffTextWindow( painter, view3, headerText3, m_pDiffTextWindow3, line, linesPerPage, m_pOptionDialog->m_fgColor );
|
joachim99@69
|
949 }
|
joachim99@69
|
950 painter.setClipping(false);
|
joachim99@69
|
951
|
joachim99@69
|
952 painter.setPen( m_pOptionDialog->m_fgColor );
|
joachim99@69
|
953 painter.drawLine( 0, view.bottom()+3, view.width(), view.bottom()+3 );
|
joachim99@69
|
954 QString s = bPrintCurrentPage ? QString("")
|
joachim99@69
|
955 : QString::number( page ) + "/" + QString::number(totalNofPages);
|
joachim99@69
|
956 if ( bPrintSelection ) s+=" (" + i18n("Selection") + ")";
|
joachim99@69
|
957 painter.drawText( (view.right() - painter.fontMetrics().width( s ))/2,
|
joachim99@69
|
958 view.bottom() + painter.fontMetrics().ascent() + 5, s );
|
joachim99@69
|
959
|
joachim99@69
|
960 bFirstPrintedPage = true;
|
joachim99@69
|
961 }
|
joachim99@69
|
962
|
joachim99@69
|
963 if ( bPrintSelection )
|
joachim99@69
|
964 {
|
joachim99@69
|
965 line+=linesPerPage;
|
joachim99@69
|
966 ++page;
|
joachim99@69
|
967 }
|
joachim99@69
|
968 else
|
joachim99@69
|
969 {
|
joachim99@69
|
970 ++pageListIt;
|
joachim99@69
|
971 }
|
joachim99@69
|
972 }
|
joachim99@69
|
973
|
joachim99@69
|
974 painter.end();
|
joachim99@69
|
975
|
joachim99@69
|
976 if ( m_pOptionDialog->m_bWordWrap )
|
joachim99@69
|
977 {
|
joachim99@69
|
978 recalcWordWrap();
|
joachim99@69
|
979 m_pDiffVScrollBar->setValue( m_pDiffTextWindow1->convertDiff3LineIdxToLine( currentFirstD3LIdx ) );
|
joachim99@69
|
980 }
|
joachim99@69
|
981
|
joachim99@69
|
982 slotStatusMsg( i18n( "Printing completed." ) );
|
joachim99@69
|
983 }
|
joachim99@69
|
984 else
|
joachim99@69
|
985 {
|
joachim99@69
|
986 slotStatusMsg( i18n( "Printing aborted." ) );
|
joachim99@69
|
987 }
|
joachim99@95
|
988 #endif
|
joachim99@69
|
989 }
|
joachim99@69
|
990
|
joachim99@8
|
991 void KDiff3App::slotFileQuit()
|
joachim99@8
|
992 {
|
joachim99@8
|
993 slotStatusMsg(i18n("Exiting..."));
|
joachim99@8
|
994
|
joachim99@8
|
995 if( !queryClose() )
|
joachim99@8
|
996 return; // Don't quit
|
joachim99@8
|
997
|
joachim99@80
|
998 KApplication::exit( isFileSaved() || isDirComparison() ? 0 : 1 );
|
joachim99@8
|
999 }
|
joachim99@8
|
1000
|
joachim99@8
|
1001
|
joachim99@8
|
1002
|
joachim99@8
|
1003 void KDiff3App::slotViewToolBar()
|
joachim99@8
|
1004 {
|
joachim99@80
|
1005 assert( viewToolBar != 0 );
|
joachim99@8
|
1006 slotStatusMsg(i18n("Toggling toolbar..."));
|
joachim99@69
|
1007 m_pOptionDialog->m_bShowToolBar = viewToolBar->isChecked();
|
joachim99@8
|
1008 ///////////////////////////////////////////////////////////////////
|
joachim99@8
|
1009 // turn Toolbar on or off
|
joachim99@80
|
1010 if ( toolBar(MAIN_TOOLBAR_NAME) !=0 )
|
joachim99@8
|
1011 {
|
joachim99@69
|
1012 if(!m_pOptionDialog->m_bShowToolBar)
|
joachim99@8
|
1013 {
|
joachim99@80
|
1014 toolBar(MAIN_TOOLBAR_NAME)->hide();
|
joachim99@8
|
1015 }
|
joachim99@8
|
1016 else
|
joachim99@8
|
1017 {
|
joachim99@80
|
1018 toolBar(MAIN_TOOLBAR_NAME)->show();
|
joachim99@8
|
1019 }
|
joachim99@8
|
1020 }
|
joachim99@8
|
1021
|
joachim99@8
|
1022 slotStatusMsg(i18n("Ready."));
|
joachim99@8
|
1023 }
|
joachim99@8
|
1024
|
joachim99@8
|
1025 void KDiff3App::slotViewStatusBar()
|
joachim99@8
|
1026 {
|
joachim99@8
|
1027 slotStatusMsg(i18n("Toggle the statusbar..."));
|
joachim99@69
|
1028 m_pOptionDialog->m_bShowStatusBar = viewStatusBar->isChecked();
|
joachim99@8
|
1029 ///////////////////////////////////////////////////////////////////
|
joachim99@8
|
1030 //turn Statusbar on or off
|
joachim99@8
|
1031 if (statusBar() !=0 )
|
joachim99@8
|
1032 {
|
joachim99@8
|
1033 if(!viewStatusBar->isChecked())
|
joachim99@8
|
1034 {
|
joachim99@8
|
1035 statusBar()->hide();
|
joachim99@8
|
1036 }
|
joachim99@8
|
1037 else
|
joachim99@8
|
1038 {
|
joachim99@8
|
1039 statusBar()->show();
|
joachim99@8
|
1040 }
|
joachim99@8
|
1041 }
|
joachim99@8
|
1042
|
joachim99@8
|
1043 slotStatusMsg(i18n("Ready."));
|
joachim99@8
|
1044 }
|
joachim99@8
|
1045
|
joachim99@8
|
1046
|
joachim99@8
|
1047 void KDiff3App::slotStatusMsg(const QString &text)
|
joachim99@8
|
1048 {
|
joachim99@8
|
1049 ///////////////////////////////////////////////////////////////////
|
joachim99@8
|
1050 // change status message permanently
|
joachim99@8
|
1051 if (statusBar() !=0 )
|
joachim99@8
|
1052 {
|
joachim99@75
|
1053 statusBar()->clearMessage();
|
joachim99@75
|
1054 statusBar()->showMessage( text );
|
joachim99@8
|
1055 }
|
joachim99@8
|
1056 }
|
joachim99@8
|
1057
|
joachim99@8
|
1058
|
joachim99@8
|
1059
|
joachim99@8
|
1060
|
joachim99@70
|
1061 //#include "kdiff3.moc"
|