annotate kdiff3/src/kdiff3.cpp @ 57:023fbd76c1e3

Translating some strings to french
author friseb123
date Sat, 31 Jan 2004 14:25:47 +0000
parents c59d5a3a8ff3
children 8af4bb9d9a5a
rev   line source
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@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 #include "diff.h"
joachim99@8 19
joachim99@8 20 #include <iostream>
joachim99@8 21
joachim99@8 22 // include files for QT
joachim99@8 23 #include <qdir.h>
joachim99@8 24 #include <qprinter.h>
joachim99@8 25 #include <qpainter.h>
joachim99@8 26 #include <qsplitter.h>
joachim99@8 27 #include <qlayout.h>
joachim99@8 28 #include <qlineedit.h>
joachim99@8 29 #include <qcheckbox.h>
joachim99@8 30 #include <qpushbutton.h>
joachim99@8 31 #include <qpopupmenu.h>
joachim99@8 32 #include <qlabel.h>
joachim99@8 33
joachim99@8 34 // include files for KDE
joachim99@8 35 #include <kiconloader.h>
joachim99@8 36 #include <kmessagebox.h>
joachim99@8 37 #include <kfiledialog.h>
joachim99@8 38 #include <kmenubar.h>
joachim99@8 39 #include <kstatusbar.h>
joachim99@8 40 #include <klocale.h>
joachim99@8 41 #include <kconfig.h>
joachim99@8 42 #include <kstdaction.h>
joachim99@8 43 #include <kcmdlineargs.h>
joachim99@8 44 //#include <kkeydialog.h>
joachim99@8 45
joachim99@8 46 // application specific includes
joachim99@8 47 #include "kdiff3.h"
joachim99@8 48 #include "optiondialog.h"
joachim99@8 49 #include "fileaccess.h"
joachim99@8 50 #include "kdiff3_part.h"
joachim99@8 51 #include "directorymergewindow.h"
joachim99@8 52
joachim99@8 53 #define ID_STATUS_MSG 1
joachim99@8 54
joachim99@8 55 KActionCollection* KDiff3App::actionCollection()
joachim99@8 56 {
joachim99@8 57 if ( m_pKDiff3Shell==0 )
joachim99@8 58 return m_pKDiff3Part->actionCollection();
joachim99@8 59 else
joachim99@8 60 return m_pKDiff3Shell->actionCollection();
joachim99@8 61 }
joachim99@8 62
joachim99@8 63 KStatusBar* KDiff3App::statusBar()
joachim99@8 64 {
joachim99@8 65 if ( m_pKDiff3Shell==0 )
joachim99@8 66 return 0;
joachim99@8 67 else
joachim99@8 68 return m_pKDiff3Shell->statusBar();
joachim99@8 69 }
joachim99@8 70
joachim99@8 71 KToolBar* KDiff3App::toolBar(const char* toolBarId )
joachim99@8 72 {
joachim99@8 73 if ( m_pKDiff3Shell==0 )
joachim99@8 74 return 0;
joachim99@8 75 else
joachim99@8 76 return m_pKDiff3Shell->toolBar( toolBarId );
joachim99@8 77 }
joachim99@8 78
joachim99@8 79 bool KDiff3App::isPart()
joachim99@8 80 {
joachim99@8 81 return m_pKDiff3Shell==0;
joachim99@8 82 }
joachim99@8 83
joachim99@8 84
joachim99@8 85 KDiff3App::KDiff3App(QWidget* pParent, const char* name, KDiff3Part* pKDiff3Part )
joachim99@8 86 :QSplitter(pParent, name) //previously KMainWindow
joachim99@8 87 {
joachim99@8 88 m_pKDiff3Part = pKDiff3Part;
joachim99@8 89 m_pKDiff3Shell = dynamic_cast<KParts::MainWindow*>(pParent);
joachim99@8 90
joachim99@8 91 setCaption( "KDiff3" );
joachim99@8 92
joachim99@8 93 m_pMainSplitter = 0;
joachim99@8 94 m_pDirectoryMergeWindow = 0;
joachim99@8 95 m_pCornerWidget = 0;
joachim99@8 96 m_pMainWidget = 0;
joachim99@8 97 m_pDiffTextWindow1 = 0;
joachim99@8 98 m_pDiffTextWindow2 = 0;
joachim99@8 99 m_pDiffTextWindow3 = 0;
joachim99@8 100 m_pDiffWindowSplitter = 0;
joachim99@8 101 m_pOverview = 0;
joachim99@8 102 m_bTripleDiff = false;
joachim99@8 103 m_pMergeResultWindow = 0;
joachim99@8 104 m_pMergeWindowFrame = 0;
joachim99@8 105 m_bOutputModified = false;
joachim99@8 106 m_bTimerBlock = false;
joachim99@8 107
joachim99@51 108 // Needed before any file operations via FileAccess happen.
joachim99@51 109 g_pProgressDialog = new ProgressDialog(this);
joachim99@51 110
joachim99@8 111 // Option handling: Only when pParent==0 (no parent)
joachim99@8 112 KCmdLineArgs *args = isPart() ? 0 : KCmdLineArgs::parsedArgs();
joachim99@8 113
joachim99@8 114 if (args!=0)
joachim99@8 115 {
joachim99@8 116 m_outputFilename = args->getOption("output");
joachim99@8 117 if ( m_outputFilename.isEmpty() )
joachim99@8 118 m_outputFilename = args->getOption("out");
joachim99@8 119 }
joachim99@8 120
joachim99@8 121 m_bAuto = args!=0 && args->isSet("auto");
joachim99@8 122 if ( m_bAuto && m_outputFilename.isEmpty() )
joachim99@8 123 {
joachim99@8 124 //KMessageBox::information(this, i18n("Option --auto used, but no output file specified."));
joachim99@8 125 std::cerr << i18n("Option --auto used, but no output file specified.").ascii()<<std::endl;
joachim99@8 126 m_bAuto = false;
joachim99@8 127 }
joachim99@8 128
joachim99@8 129 if ( m_outputFilename.isEmpty() && args!=0 && args->isSet("merge") )
joachim99@8 130 {
joachim99@8 131 m_outputFilename = "unnamed.txt";
joachim99@8 132 m_bDefaultFilename = true;
joachim99@8 133 }
joachim99@8 134 else
joachim99@8 135 m_bDefaultFilename = false;
joachim99@8 136
joachim99@8 137 g_bAutoSolve = args!=0 && !args->isSet("qall"); // Note that this is effective only once.
joachim99@8 138
joachim99@8 139 if ( args!=0 )
joachim99@8 140 {
joachim99@8 141 m_sd1.setFilename( args->getOption("base") );
joachim99@8 142 if ( m_sd1.isEmpty() )
joachim99@8 143 {
joachim99@51 144 if ( args->count() > 0 ) m_sd1.setFilename( args->url(0).url() ); // args->arg(0)
joachim99@51 145 if ( args->count() > 1 ) m_sd2.setFilename( args->url(1).url() );
joachim99@51 146 if ( args->count() > 2 ) m_sd3.setFilename( args->url(2).url() );
joachim99@8 147 }
joachim99@8 148 else
joachim99@8 149 {
joachim99@51 150 if ( args->count() > 0 ) m_sd2.setFilename( args->url(0).url() );
joachim99@51 151 if ( args->count() > 1 ) m_sd3.setFilename( args->url(1).url() );
joachim99@8 152 }
joachim99@8 153
joachim99@8 154 QCStringList aliasList = args->getOptionList("fname");
joachim99@8 155 QCStringList::Iterator ali = aliasList.begin();
joachim99@8 156 if ( ali != aliasList.end() ) { m_sd1.setAliasName(*ali); ++ali; }
joachim99@8 157 if ( ali != aliasList.end() ) { m_sd2.setAliasName(*ali); ++ali; }
joachim99@8 158 if ( ali != aliasList.end() ) { m_sd3.setAliasName(*ali); ++ali; }
joachim99@8 159 }
joachim99@8 160 ///////////////////////////////////////////////////////////////////
joachim99@8 161 // call inits to invoke all other construction parts
joachim99@8 162 initActions(actionCollection());
joachim99@8 163 initStatusBar();
joachim99@8 164
joachim99@8 165 m_pFindDialog = new FindDialog( this );
joachim99@8 166 connect( m_pFindDialog, SIGNAL(findNext()), this, SLOT(slotEditFindNext()));
joachim99@8 167
joachim99@8 168 // All default values must be set before calling readOptions().
joachim99@8 169 m_pOptionDialog = new OptionDialog( m_pKDiff3Shell!=0, this );
joachim99@8 170 connect( m_pOptionDialog, SIGNAL(applyClicked()), this, SLOT(slotRefresh()) );
joachim99@8 171
joachim99@8 172 readOptions( isPart() ? m_pKDiff3Part->instance()->config() : kapp->config() );
joachim99@8 173
joachim99@51 174 autoAdvance->setChecked( m_pOptionDialog->m_bAutoAdvance );
joachim99@51 175 showWhiteSpaceCharacters->setChecked( m_pOptionDialog->m_bShowWhiteSpaceCharacters );
joachim99@51 176 showWhiteSpace->setChecked( m_pOptionDialog->m_bShowWhiteSpace );
joachim99@51 177 showWhiteSpaceCharacters->setEnabled( m_pOptionDialog->m_bShowWhiteSpace );
joachim99@51 178 showLineNumbers->setChecked( m_pOptionDialog->m_bShowLineNumbers );
joachim99@51 179
joachim99@8 180 m_pMainSplitter = this; //new QSplitter(this);
joachim99@8 181 m_pMainSplitter->setOrientation( Vertical );
joachim99@8 182 // setCentralWidget( m_pMainSplitter );
joachim99@8 183 m_pDirectoryMergeSplitter = new QSplitter( m_pMainSplitter );
joachim99@8 184 m_pDirectoryMergeSplitter->setOrientation( Horizontal );
joachim99@8 185 m_pDirectoryMergeWindow = new DirectoryMergeWindow( m_pDirectoryMergeSplitter, m_pOptionDialog,
joachim99@8 186 KApplication::kApplication()->iconLoader() );
joachim99@8 187 m_pDirectoryMergeInfo = new DirectoryMergeInfo( m_pDirectoryMergeSplitter );
joachim99@8 188 m_pDirectoryMergeWindow->setDirectoryMergeInfo( m_pDirectoryMergeInfo );
joachim99@8 189 connect( m_pDirectoryMergeWindow, SIGNAL(startDiffMerge(QString,QString,QString,QString,QString,QString,QString)),
joachim99@8 190 this, SLOT( slotFileOpen2(QString,QString,QString,QString,QString,QString,QString)));
joachim99@8 191 connect( m_pDirectoryMergeWindow, SIGNAL(selectionChanged()), this, SLOT(slotUpdateAvailabilities()));
joachim99@8 192 connect( m_pDirectoryMergeWindow, SIGNAL(currentChanged(QListViewItem*)), this, SLOT(slotUpdateAvailabilities()));
joachim99@8 193 connect( m_pDirectoryMergeWindow, SIGNAL(checkIfCanContinue(bool*)), this, SLOT(slotCheckIfCanContinue(bool*)));
joachim99@8 194 connect( m_pDirectoryMergeWindow, SIGNAL(updateAvailabilities()), this, SLOT(slotUpdateAvailabilities()));
joachim99@8 195
joachim99@51 196 m_pDirectoryMergeWindow->initDirectoryMergeActions( this, actionCollection() );
joachim99@8 197
joachim99@8 198 if ( args!=0 ) args->clear(); // Free up some memory.
joachim99@8 199
joachim99@8 200 if (m_pKDiff3Shell==0)
joachim99@8 201 {
joachim99@8 202 completeInit();
joachim99@8 203 }
joachim99@8 204 }
joachim99@8 205
joachim99@8 206
joachim99@8 207 void KDiff3App::completeInit()
joachim99@8 208 {
joachim99@8 209 if (m_pKDiff3Shell!=0)
joachim99@8 210 {
joachim99@8 211 QSize size=kapp->config()->readSizeEntry("Geometry");
joachim99@8 212 QPoint pos=kapp->config()->readPointEntry("Position");
joachim99@8 213 if(!size.isEmpty())
joachim99@8 214 {
joachim99@8 215 m_pKDiff3Shell->resize( size );
joachim99@8 216 m_pKDiff3Shell->move( pos );
joachim99@8 217 }
joachim99@8 218 }
joachim99@8 219
joachim99@8 220 m_bDirCompare = improveFilenames();
joachim99@8 221 if ( m_bAuto && m_bDirCompare )
joachim99@8 222 {
joachim99@8 223 std::cerr << i18n("Option --auto ignored for directory comparison.").ascii()<<std::endl;
joachim99@8 224 m_bAuto = false;
joachim99@8 225 }
joachim99@8 226 if (!m_bDirCompare)
joachim99@8 227 {
joachim99@8 228 m_pDirectoryMergeSplitter->hide();
joachim99@8 229
joachim99@8 230 init( m_bAuto );
joachim99@8 231 if ( m_bAuto )
joachim99@8 232 {
joachim99@8 233 const char* pBuf = 0;
joachim99@8 234 unsigned int size = 0;
joachim99@8 235 if ( m_sd3.isEmpty() )
joachim99@8 236 {
joachim99@8 237 if ( m_totalDiffStatus.bBinaryAEqB ){ pBuf=m_sd1.m_pBuf; size=m_sd1.m_size; }
joachim99@8 238 }
joachim99@8 239 else
joachim99@8 240 {
joachim99@8 241 if ( m_totalDiffStatus.bBinaryBEqC ){ pBuf=m_sd3.m_pBuf; size=m_sd3.m_size; }
joachim99@8 242 else if ( m_totalDiffStatus.bBinaryAEqB ){ pBuf=m_sd3.m_pBuf; size=m_sd3.m_size; }
joachim99@8 243 else if ( m_totalDiffStatus.bBinaryAEqC ){ pBuf=m_sd2.m_pBuf; size=m_sd2.m_size; }
joachim99@8 244 }
joachim99@8 245
joachim99@8 246 if ( pBuf!=0 )
joachim99@8 247 {
joachim99@8 248 // Save this file directly, not via the merge result window.
joachim99@8 249 bool bSuccess = false;
joachim99@8 250 if ( m_pOptionDialog->m_bDmCreateBakFiles && QDir().exists( m_outputFilename ) )
joachim99@8 251 {
joachim99@8 252 QString newName = m_outputFilename + ".orig";
joachim99@8 253 if ( QDir().exists( newName ) ) QFile::remove(newName);
joachim99@8 254 if ( !QDir().exists( newName ) ) QDir().rename( m_outputFilename, newName );
joachim99@8 255 }
joachim99@8 256 QFile file( m_outputFilename );
joachim99@8 257 if ( file.open( IO_WriteOnly ) )
joachim99@8 258 {
joachim99@8 259 bSuccess = (long)size == file.writeBlock ( pBuf, size );
joachim99@8 260 file.close();
joachim99@8 261 }
joachim99@8 262 if ( bSuccess ) ::exit(0);
joachim99@8 263 else KMessageBox::error( this, i18n("Saving failed.") );
joachim99@8 264 }
joachim99@8 265 else if ( m_pMergeResultWindow->getNrOfUnsolvedConflicts() == 0 )
joachim99@8 266 {
joachim99@8 267 bool bSuccess = m_pMergeResultWindow->saveDocument( m_outputFilename );
joachim99@8 268 if ( bSuccess ) ::exit(0);
joachim99@8 269 }
joachim99@8 270 }
joachim99@8 271 }
joachim99@8 272
joachim99@8 273 if (statusBar() !=0 )
joachim99@8 274 statusBar()->setSizeGripEnabled(false);
joachim99@8 275
joachim99@8 276 slotClipboardChanged(); // For initialisation.
joachim99@8 277
joachim99@8 278 slotUpdateAvailabilities();
joachim99@8 279
joachim99@8 280 if ( ! m_bDirCompare && m_pKDiff3Shell!=0 )
joachim99@8 281 {
joachim99@8 282 bool bFileOpenError = false;
joachim99@8 283 if ( ! m_sd1.isEmpty() && m_sd1.m_pBuf==0 ||
joachim99@8 284 ! m_sd2.isEmpty() && m_sd2.m_pBuf==0 ||
joachim99@8 285 ! m_sd3.isEmpty() && m_sd3.m_pBuf==0 )
joachim99@8 286 {
joachim99@8 287 QString text( i18n("Opening of these files failed:") );
joachim99@8 288 text += "\n\n";
joachim99@8 289 if ( ! m_sd1.isEmpty() && m_sd1.m_pBuf==0 )
joachim99@8 290 text += " - " + m_sd1.getAliasName() + "\n";
joachim99@8 291 if ( ! m_sd2.isEmpty() && m_sd2.m_pBuf==0 )
joachim99@8 292 text += " - " + m_sd2.getAliasName() + "\n";
joachim99@8 293 if ( ! m_sd3.isEmpty() && m_sd3.m_pBuf==0 )
joachim99@8 294 text += " - " + m_sd3.getAliasName() + "\n";
joachim99@8 295
joachim99@51 296 KMessageBox::sorry( this, text, i18n("File Open Error") );
joachim99@8 297 bFileOpenError = true;
joachim99@8 298 }
joachim99@8 299
joachim99@8 300 if ( m_sd1.isEmpty() || m_sd2.isEmpty() || bFileOpenError )
joachim99@8 301 slotFileOpen();
joachim99@8 302 }
joachim99@8 303 }
joachim99@8 304
joachim99@8 305 KDiff3App::~KDiff3App()
joachim99@8 306 {
joachim99@8 307
joachim99@8 308 }
joachim99@8 309
joachim99@8 310 void KDiff3App::initActions( KActionCollection* ac )
joachim99@8 311 {
joachim99@8 312 if (ac==0) KMessageBox::error(0, "actionCollection==0");
joachim99@8 313
joachim99@8 314 fileOpen = KStdAction::open(this, SLOT(slotFileOpen()), ac);
joachim99@51 315 fileOpen->setStatusText(i18n("Opens documents for comparison..."));
joachim99@8 316 fileSave = KStdAction::save(this, SLOT(slotFileSave()), ac);
joachim99@8 317 fileSave->setStatusText(i18n("Saves the merge result. All conflicts must be solved!"));
joachim99@8 318 fileSaveAs = KStdAction::saveAs(this, SLOT(slotFileSaveAs()), ac);
joachim99@8 319 fileSaveAs->setStatusText(i18n("Saves the current document as..."));
joachim99@8 320 fileQuit = KStdAction::quit(this, SLOT(slotFileQuit()), ac);
joachim99@8 321 fileQuit->setStatusText(i18n("Quits the application"));
joachim99@8 322 editCut = KStdAction::cut(this, SLOT(slotEditCut()), ac);
joachim99@8 323 editCut->setStatusText(i18n("Cuts the selected section and puts it to the clipboard"));
joachim99@8 324 editCopy = KStdAction::copy(this, SLOT(slotEditCopy()), ac);
joachim99@8 325 editCopy->setStatusText(i18n("Copies the selected section to the clipboard"));
joachim99@8 326 editPaste = KStdAction::paste(this, SLOT(slotEditPaste()), ac);
joachim99@8 327 editPaste->setStatusText(i18n("Pastes the clipboard contents to actual position"));
joachim99@8 328 editFind = KStdAction::find(this, SLOT(slotEditFind()), ac);
joachim99@8 329 editFind->setStatusText(i18n("Search for a string"));
joachim99@8 330 editFindNext = KStdAction::findNext(this, SLOT(slotEditFindNext()), ac);
joachim99@8 331 editFindNext->setStatusText(i18n("Search again for the string"));
joachim99@8 332 viewToolBar = KStdAction::showToolbar(this, SLOT(slotViewToolBar()), ac);
joachim99@8 333 viewToolBar->setStatusText(i18n("Enables/disables the toolbar"));
joachim99@8 334 viewStatusBar = KStdAction::showStatusbar(this, SLOT(slotViewStatusBar()), ac);
joachim99@8 335 viewStatusBar->setStatusText(i18n("Enables/disables the statusbar"));
joachim99@8 336 KStdAction::keyBindings(this, SLOT(slotConfigureKeys()), ac);
joachim99@8 337 KAction* pAction = KStdAction::preferences(this, SLOT(slotConfigure()), ac );
joachim99@8 338 if ( isPart() )
joachim99@51 339 pAction->setText(i18n("Configure KDiff3..."));
joachim99@8 340
joachim99@8 341
joachim99@8 342 #include "xpm/downend.xpm"
joachim99@8 343 #include "xpm/currentpos.xpm"
joachim99@8 344 #include "xpm/down1arrow.xpm"
joachim99@8 345 #include "xpm/down2arrow.xpm"
joachim99@8 346 #include "xpm/upend.xpm"
joachim99@8 347 #include "xpm/up1arrow.xpm"
joachim99@8 348 #include "xpm/up2arrow.xpm"
joachim99@8 349 #include "xpm/prevunsolved.xpm"
joachim99@8 350 #include "xpm/nextunsolved.xpm"
joachim99@8 351 #include "xpm/iconA.xpm"
joachim99@8 352 #include "xpm/iconB.xpm"
joachim99@8 353 #include "xpm/iconC.xpm"
joachim99@8 354 #include "xpm/autoadvance.xpm"
joachim99@8 355 #include "xpm/showwhitespace.xpm"
joachim99@8 356 #include "xpm/showlinenumbers.xpm"
joachim99@8 357 //#include "reload.xpm"
joachim99@8 358
joachim99@8 359 goCurrent = new KAction(i18n("Go to Current Delta"), QIconSet(QPixmap(currentpos)), CTRL+Key_Space, this, SLOT(slotGoCurrent()), ac, "go_current");
joachim99@8 360 goTop = new KAction(i18n("Go to First Delta"), QIconSet(QPixmap(upend)), 0, this, SLOT(slotGoTop()), ac, "go_top");
joachim99@8 361 goBottom = new KAction(i18n("Go to Last Delta"), QIconSet(QPixmap(downend)), 0, this, SLOT(slotGoBottom()), ac, "go_bottom");
joachim99@51 362 goPrevDelta = new KAction(i18n("Go to Previous Delta"), QIconSet(QPixmap(up1arrow)), CTRL+Key_Up, this, SLOT(slotGoPrevDelta()), ac, "go_prev_delta");
joachim99@51 363 goNextDelta = new KAction(i18n("Go to Next Delta"), QIconSet(QPixmap(down1arrow)), CTRL+Key_Down, this, SLOT(slotGoNextDelta()), ac, "go_next_delta");
joachim99@8 364 goPrevConflict = new KAction(i18n("Go to Previous Conflict"), QIconSet(QPixmap(up2arrow)), CTRL+Key_PageUp, this, SLOT(slotGoPrevConflict()), ac, "go_prev_conflict");
joachim99@8 365 goNextConflict = new KAction(i18n("Go to Next Conflict"), QIconSet(QPixmap(down2arrow)), CTRL+Key_PageDown, this, SLOT(slotGoNextConflict()), ac, "go_next_conflict");
joachim99@8 366 goPrevUnsolvedConflict = new KAction(i18n("Go to Previous Unsolved Conflict"), QIconSet(QPixmap(prevunsolved)), 0, this, SLOT(slotGoPrevUnsolvedConflict()), ac, "go_prev_unsolved_conflict");
joachim99@8 367 goNextUnsolvedConflict = new KAction(i18n("Go to Next Unsolved Conflict"), QIconSet(QPixmap(nextunsolved)), 0, this, SLOT(slotGoNextUnsolvedConflict()), ac, "go_next_unsolved_conflict");
joachim99@51 368 chooseA = new KToggleAction(i18n("Select Line(s) From A"), QIconSet(QPixmap(iconA)), CTRL+Key_1, this, SLOT(slotChooseA()), ac, "merge_choose_a");
joachim99@51 369 chooseB = new KToggleAction(i18n("Select Line(s) From B"), QIconSet(QPixmap(iconB)), CTRL+Key_2, this, SLOT(slotChooseB()), ac, "merge_choose_b");
joachim99@51 370 chooseC = new KToggleAction(i18n("Select Line(s) From C"), QIconSet(QPixmap(iconC)), CTRL+Key_3, this, SLOT(slotChooseC()), ac, "merge_choose_c");
joachim99@51 371 autoAdvance = new KToggleAction(i18n("Automatically Go to Next Unsolved Conflict After Source Selection"), QIconSet(QPixmap(autoadvance)), 0, this, SLOT(slotAutoAdvanceToggled()), ac, "merge_autoadvance");
joachim99@51 372
joachim99@51 373 showWhiteSpaceCharacters = new KToggleAction(i18n("Show Space && Tabulator Characters for Differences"), QIconSet(QPixmap(showwhitespace)), 0, this, SLOT(slotShowWhiteSpaceToggled()), ac, "merge_show_whitespace_characters");
joachim99@51 374 showWhiteSpace = new KToggleAction(i18n("Show White Space"), 0, this, SLOT(slotShowWhiteSpaceToggled()), ac, "merge_show_whitespace");
joachim99@51 375
joachim99@51 376 showLineNumbers = new KToggleAction(i18n("Show Line Numbers"), QIconSet(QPixmap(showlinenumbers)), 0, this, SLOT(slotShowLineNumbersToggled()), ac, "merge_showlinenumbers");
joachim99@8 377 chooseAEverywhere = new KAction(i18n("Choose A Everywhere"), CTRL+SHIFT+Key_1, this, SLOT(slotChooseAEverywhere()), ac, "merge_choose_a_everywhere");
joachim99@8 378 chooseBEverywhere = new KAction(i18n("Choose B Everywhere"), CTRL+SHIFT+Key_2, this, SLOT(slotChooseBEverywhere()), ac, "merge_choose_b_everywhere");
joachim99@8 379 chooseCEverywhere = new KAction(i18n("Choose C Everywhere"), CTRL+SHIFT+Key_3, this, SLOT(slotChooseCEverywhere()), ac, "merge_choose_c_everywhere");
joachim99@51 380 chooseAForUnsolvedConflicts = new KAction(i18n("Choose A For All Unsolved Conflicts"), 0, this, SLOT(slotChooseAForUnsolvedConflicts()), ac, "merge_choose_a_for_unsolved_conflicts");
joachim99@51 381 chooseBForUnsolvedConflicts = new KAction(i18n("Choose B For All Unsolved Conflicts"), 0, this, SLOT(slotChooseBForUnsolvedConflicts()), ac, "merge_choose_b_for_unsolved_conflicts");
joachim99@51 382 chooseCForUnsolvedConflicts = new KAction(i18n("Choose C For All Unsolved Conflicts"), 0, this, SLOT(slotChooseCForUnsolvedConflicts()), ac, "merge_choose_c_for_unsolved_conflicts");
joachim99@51 383 chooseAForUnsolvedWhiteSpaceConflicts = new KAction(i18n("Choose A For All Unsolved Whitespace Conflicts"), 0, this, SLOT(slotChooseAForUnsolvedWhiteSpaceConflicts()), ac, "merge_choose_a_for_unsolved_whitespace_conflicts");
joachim99@51 384 chooseBForUnsolvedWhiteSpaceConflicts = new KAction(i18n("Choose B For All Unsolved Whitespace Conflicts"), 0, this, SLOT(slotChooseBForUnsolvedWhiteSpaceConflicts()), ac, "merge_choose_b_for_unsolved_whitespace_conflicts");
joachim99@51 385 chooseCForUnsolvedWhiteSpaceConflicts = new KAction(i18n("Choose C For All Unsolved Whitespace Conflicts"), 0, this, SLOT(slotChooseCForUnsolvedWhiteSpaceConflicts()), ac, "merge_choose_c_for_unsolved_whitespace_conflicts");
joachim99@51 386 autoSolve = new KAction(i18n("Automatically Solve Simple Conflicts"), 0, this, SLOT(slotAutoSolve()), ac, "merge_autosolve");
joachim99@51 387 unsolve = new KAction(i18n("Set Deltas to Conflicts"), 0, this, SLOT(slotUnsolve()), actionCollection(), "merge_autounsolve");
joachim99@51 388 fileReload = new KAction(i18n("Reload"), /*QIconSet(QPixmap(reloadIcon)),*/ Key_F5, this, SLOT(slotReload()), ac, "file_reload");
joachim99@8 389 showWindowA = new KToggleAction(i18n("Show Window A"), 0, this, SLOT(slotShowWindowAToggled()), ac, "win_show_a");
joachim99@8 390 showWindowB = new KToggleAction(i18n("Show Window B"), 0, this, SLOT(slotShowWindowBToggled()), ac, "win_show_b");
joachim99@8 391 showWindowC = new KToggleAction(i18n("Show Window C"), 0, this, SLOT(slotShowWindowCToggled()), ac, "win_show_c");
joachim99@8 392 winFocusNext = new KAction(i18n("Focus Next Window"), ALT+Key_Right, this, SLOT(slotWinFocusNext()), ac, "win_focus_next");
joachim99@26 393 #ifdef _WIN32
joachim99@26 394 new KAction(i18n("Focus Next Window"), CTRL+Key_Tab, this, SLOT(slotWinFocusNext()), ac, "win_focus_next", false, false);
joachim99@26 395 #endif
joachim99@8 396 winFocusPrev = new KAction(i18n("Focus Prev Window"), ALT+Key_Left, this, SLOT(slotWinFocusPrev()), ac, "win_focus_prev");
joachim99@8 397 winToggleSplitOrientation = new KAction(i18n("Toggle Split Orientation"), 0, this, SLOT(slotWinToggleSplitterOrientation()), ac, "win_toggle_split_orientation");
joachim99@8 398
joachim99@51 399 dirShowBoth = new KToggleAction(i18n("Dir && Text Split Screen View"), 0, this, SLOT(slotDirShowBoth()), ac, "win_dir_show_both");
joachim99@8 400 dirShowBoth->setChecked( true );
joachim99@51 401 dirViewToggle = new KAction(i18n("Toggle Between Dir && Text View"), 0, this, SLOT(slotDirViewToggle()), actionCollection(), "win_dir_view_toggle");
joachim99@8 402
joachim99@8 403 m_pMergeEditorPopupMenu = new QPopupMenu( this );
joachim99@8 404 chooseA->plug( m_pMergeEditorPopupMenu );
joachim99@8 405 chooseB->plug( m_pMergeEditorPopupMenu );
joachim99@8 406 chooseC->plug( m_pMergeEditorPopupMenu );
joachim99@8 407 }
joachim99@8 408
joachim99@51 409
joachim99@8 410 void KDiff3App::showPopupMenu( const QPoint& point )
joachim99@8 411 {
joachim99@8 412 m_pMergeEditorPopupMenu->popup( point );
joachim99@8 413 }
joachim99@8 414
joachim99@8 415 void KDiff3App::initStatusBar()
joachim99@8 416 {
joachim99@8 417 ///////////////////////////////////////////////////////////////////
joachim99@8 418 // STATUSBAR
joachim99@8 419 if (statusBar() !=0 )
joachim99@8 420 statusBar()->message( i18n("Ready.") );
joachim99@8 421 }
joachim99@8 422
joachim99@8 423 void KDiff3App::saveOptions( KConfig* config )
joachim99@8 424 {
joachim99@8 425 if ( !isPart() )
joachim99@8 426 {
joachim99@8 427 config->setGroup("General Options");
joachim99@8 428 config->writeEntry("Geometry", m_pKDiff3Shell->size());
joachim99@8 429 config->writeEntry("Position", m_pKDiff3Shell->pos());
joachim99@8 430 config->writeEntry("Show Toolbar", viewToolBar->isChecked());
joachim99@8 431 config->writeEntry("Show Statusbar",viewStatusBar->isChecked());
joachim99@8 432 if(toolBar("mainToolBar")!=0)
joachim99@8 433 config->writeEntry("ToolBarPos", (int) toolBar("mainToolBar")->barPos());
joachim99@8 434 }
joachim99@8 435
joachim99@8 436 m_pOptionDialog->saveOptions( config );
joachim99@8 437 }
joachim99@8 438
joachim99@8 439
joachim99@8 440 void KDiff3App::readOptions( KConfig* config )
joachim99@8 441 {
joachim99@8 442 if( !isPart() )
joachim99@8 443 {
joachim99@8 444 config->setGroup("General Options");
joachim99@8 445
joachim99@8 446 // bar status settings
joachim99@8 447 bool bViewToolbar = config->readBoolEntry("Show Toolbar", true);
joachim99@8 448 viewToolBar->setChecked(bViewToolbar);
joachim99@8 449 slotViewToolBar();
joachim99@8 450
joachim99@8 451 bool bViewStatusbar = config->readBoolEntry("Show Statusbar", true);
joachim99@8 452 viewStatusBar->setChecked(bViewStatusbar);
joachim99@8 453 slotViewStatusBar();
joachim99@8 454
joachim99@8 455
joachim99@8 456 // bar position settings
joachim99@8 457 KToolBar::BarPosition toolBarPos;
joachim99@8 458 toolBarPos=(KToolBar::BarPosition) config->readNumEntry("ToolBarPos", KToolBar::Top);
joachim99@8 459 if( toolBar("mainToolBar")!=0 )
joachim99@8 460 toolBar("mainToolBar")->setBarPos(toolBarPos);
joachim99@8 461
joachim99@8 462 QSize size=config->readSizeEntry("Geometry");
joachim99@8 463 QPoint pos=config->readPointEntry("Position");
joachim99@8 464 if(!size.isEmpty())
joachim99@8 465 {
joachim99@8 466 m_pKDiff3Shell->resize( size );
joachim99@8 467 m_pKDiff3Shell->move( pos );
joachim99@8 468 }
joachim99@8 469 }
joachim99@8 470 m_pOptionDialog->readOptions( config );
joachim99@8 471
joachim99@8 472 slotRefresh();
joachim99@8 473 }
joachim99@8 474
joachim99@8 475
joachim99@8 476 bool KDiff3App::queryClose()
joachim99@8 477 {
joachim99@8 478 saveOptions( isPart() ? m_pKDiff3Part->instance()->config() : kapp->config() );
joachim99@8 479
joachim99@8 480 if(m_bOutputModified)
joachim99@8 481 {
joachim99@8 482 int result = KMessageBox::warningYesNoCancel(this,
joachim99@8 483 i18n("The merge result hasn't been saved."),
joachim99@51 484 i18n("Warning"), i18n("Save && Quit"), i18n("Quit Without Saving") );
joachim99@8 485 if ( result==KMessageBox::Cancel )
joachim99@8 486 return false;
joachim99@8 487 else if ( result==KMessageBox::Yes )
joachim99@8 488 {
joachim99@8 489 slotFileSave();
joachim99@8 490 if ( m_bOutputModified )
joachim99@8 491 {
joachim99@8 492 KMessageBox::sorry(this, i18n("Saving the merge result failed."), i18n("Warning") );
joachim99@8 493 return false;
joachim99@8 494 }
joachim99@8 495 }
joachim99@8 496 }
joachim99@8 497
joachim99@8 498 m_bOutputModified = false;
joachim99@8 499
joachim99@8 500 if ( m_pDirectoryMergeWindow->isDirectoryMergeInProgress() )
joachim99@8 501 {
joachim99@8 502 int result = KMessageBox::warningYesNo(this,
joachim99@8 503 i18n("You are currently doing a directory merge. Are you sure, you want to abort?"),
joachim99@51 504 i18n("Warning"), i18n("Quit"), i18n("Continue Merging") );
joachim99@8 505 if ( result!=KMessageBox::Yes )
joachim99@8 506 return false;
joachim99@8 507 }
joachim99@8 508
joachim99@8 509 return true;
joachim99@8 510 }
joachim99@8 511
joachim99@8 512
joachim99@8 513 /////////////////////////////////////////////////////////////////////
joachim99@8 514 // SLOT IMPLEMENTATION
joachim99@8 515 /////////////////////////////////////////////////////////////////////
joachim99@8 516
joachim99@8 517
joachim99@8 518 void KDiff3App::slotFileSave()
joachim99@8 519 {
joachim99@8 520 if ( m_bDefaultFilename )
joachim99@8 521 {
joachim99@8 522 slotFileSaveAs();
joachim99@8 523 }
joachim99@8 524 else
joachim99@8 525 {
joachim99@8 526 slotStatusMsg(i18n("Saving file..."));
joachim99@8 527
joachim99@8 528 bool bSuccess = m_pMergeResultWindow->saveDocument( m_outputFilename );
joachim99@8 529 if ( bSuccess )
joachim99@8 530 {
joachim99@8 531 m_bOutputModified = false;
joachim99@8 532 if ( m_bDirCompare )
joachim99@8 533 m_pDirectoryMergeWindow->mergeResultSaved(m_outputFilename);
joachim99@8 534 }
joachim99@8 535
joachim99@8 536 slotStatusMsg(i18n("Ready."));
joachim99@8 537 }
joachim99@8 538 }
joachim99@8 539
joachim99@8 540 void KDiff3App::slotFileSaveAs()
joachim99@8 541 {
joachim99@8 542 slotStatusMsg(i18n("Saving file with a new filename..."));
joachim99@8 543
joachim99@51 544 QString s = KFileDialog::getSaveURL( QDir::currentDirPath(), 0, this, i18n("Save As...") ).url();
joachim99@8 545 if(!s.isEmpty())
joachim99@8 546 {
joachim99@8 547 m_outputFilename = s;
joachim99@8 548 bool bSuccess = m_pMergeResultWindow->saveDocument( m_outputFilename );
joachim99@8 549 if ( bSuccess )
joachim99@8 550 {
joachim99@8 551 m_bOutputModified = false;
joachim99@8 552 if ( m_bDirCompare )
joachim99@8 553 m_pDirectoryMergeWindow->mergeResultSaved(m_outputFilename);
joachim99@8 554 }
joachim99@8 555 //setCaption(url.fileName(),doc->isModified());
joachim99@8 556
joachim99@8 557 m_bDefaultFilename = false;
joachim99@8 558 }
joachim99@8 559
joachim99@8 560 slotStatusMsg(i18n("Ready."));
joachim99@8 561 }
joachim99@8 562
joachim99@8 563
joachim99@8 564 void KDiff3App::slotFileQuit()
joachim99@8 565 {
joachim99@8 566 slotStatusMsg(i18n("Exiting..."));
joachim99@8 567
joachim99@8 568 if( !queryClose() )
joachim99@8 569 return; // Don't quit
joachim99@8 570
joachim99@8 571 KApplication::exit(0);
joachim99@8 572 }
joachim99@8 573
joachim99@8 574
joachim99@8 575
joachim99@8 576 void KDiff3App::slotViewToolBar()
joachim99@8 577 {
joachim99@8 578 slotStatusMsg(i18n("Toggling toolbar..."));
joachim99@8 579 ///////////////////////////////////////////////////////////////////
joachim99@8 580 // turn Toolbar on or off
joachim99@8 581 if ( toolBar("mainToolBar") !=0 )
joachim99@8 582 {
joachim99@8 583 if(!viewToolBar->isChecked())
joachim99@8 584 {
joachim99@8 585 toolBar("mainToolBar")->hide();
joachim99@8 586 }
joachim99@8 587 else
joachim99@8 588 {
joachim99@8 589 toolBar("mainToolBar")->show();
joachim99@8 590 }
joachim99@8 591 }
joachim99@8 592
joachim99@8 593 slotStatusMsg(i18n("Ready."));
joachim99@8 594 }
joachim99@8 595
joachim99@8 596 void KDiff3App::slotViewStatusBar()
joachim99@8 597 {
joachim99@8 598 slotStatusMsg(i18n("Toggle the statusbar..."));
joachim99@8 599 ///////////////////////////////////////////////////////////////////
joachim99@8 600 //turn Statusbar on or off
joachim99@8 601 if (statusBar() !=0 )
joachim99@8 602 {
joachim99@8 603 if(!viewStatusBar->isChecked())
joachim99@8 604 {
joachim99@8 605 statusBar()->hide();
joachim99@8 606 }
joachim99@8 607 else
joachim99@8 608 {
joachim99@8 609 statusBar()->show();
joachim99@8 610 }
joachim99@8 611 }
joachim99@8 612
joachim99@8 613 slotStatusMsg(i18n("Ready."));
joachim99@8 614 }
joachim99@8 615
joachim99@8 616
joachim99@8 617 void KDiff3App::slotStatusMsg(const QString &text)
joachim99@8 618 {
joachim99@8 619 ///////////////////////////////////////////////////////////////////
joachim99@8 620 // change status message permanently
joachim99@8 621 if (statusBar() !=0 )
joachim99@8 622 {
joachim99@8 623 statusBar()->clear();
joachim99@8 624 statusBar()->message( text );
joachim99@8 625 }
joachim99@8 626 }
joachim99@8 627
joachim99@8 628
joachim99@8 629
joachim99@8 630 FindDialog::FindDialog(QWidget* pParent)
joachim99@8 631 : QDialog( pParent )
joachim99@8 632 {
joachim99@8 633 QGridLayout* layout = new QGridLayout( this );
joachim99@8 634 layout->setMargin(5);
joachim99@8 635 layout->setSpacing(5);
joachim99@8 636
joachim99@8 637 int line=0;
joachim99@8 638 layout->addMultiCellWidget( new QLabel(i18n("Searchtext:"),this), line,line,0,1 );
joachim99@8 639 ++line;
joachim99@8 640
joachim99@8 641 m_pSearchString = new QLineEdit( this );
joachim99@8 642 layout->addMultiCellWidget( m_pSearchString, line,line,0,1 );
joachim99@8 643 ++line;
joachim99@8 644
joachim99@51 645 m_pCaseSensitive = new QCheckBox(i18n("Case sensitive"),this);
joachim99@8 646 layout->addWidget( m_pCaseSensitive, line, 1 );
joachim99@8 647
joachim99@8 648 m_pSearchInA = new QCheckBox(i18n("Search A"),this);
joachim99@8 649 layout->addWidget( m_pSearchInA, line, 0 );
joachim99@8 650 m_pSearchInA->setChecked( true );
joachim99@8 651 ++line;
joachim99@8 652
joachim99@8 653 m_pSearchInB = new QCheckBox(i18n("Search B"),this);
joachim99@8 654 layout->addWidget( m_pSearchInB, line, 0 );
joachim99@8 655 m_pSearchInB->setChecked( true );
joachim99@8 656 ++line;
joachim99@8 657
joachim99@8 658 m_pSearchInC = new QCheckBox(i18n("Search C"),this);
joachim99@8 659 layout->addWidget( m_pSearchInC, line, 0 );
joachim99@8 660 m_pSearchInC->setChecked( true );
joachim99@8 661 ++line;
joachim99@8 662
joachim99@51 663 m_pSearchInOutput = new QCheckBox(i18n("Search output"),this);
joachim99@8 664 layout->addWidget( m_pSearchInOutput, line, 0 );
joachim99@8 665 m_pSearchInOutput->setChecked( true );
joachim99@8 666 ++line;
joachim99@51 667
joachim99@51 668 QPushButton* pButton = new QPushButton( i18n("&Search"), this );
joachim99@8 669 layout->addWidget( pButton, line, 0 );
joachim99@8 670 connect( pButton, SIGNAL(clicked()), this, SLOT(accept()));
joachim99@8 671
joachim99@51 672 pButton = new QPushButton( i18n("&Cancel"), this );
joachim99@8 673 layout->addWidget( pButton, line, 1 );
joachim99@8 674 connect( pButton, SIGNAL(clicked()), this, SLOT(reject()));
joachim99@8 675
joachim99@8 676 hide();
joachim99@8 677 }
joachim99@8 678
joachim99@8 679 #include "kdiff3.moc"