annotate kdiff3/src/optiondialog.cpp @ 58:8af4bb9d9a5a

Version 0.9.83
author joachim99
date Sun, 07 Mar 2004 09:59:09 +0000
parents c59d5a3a8ff3
children efe33e938730
rev   line source
joachim99@8 1 /*
joachim99@8 2 * kdiff3 - Text Diff And Merge Tool
joachim99@8 3 * This file only: Copyright (C) 2002 Joachim Eibl, joachim.eibl@gmx.de
joachim99@8 4 *
joachim99@8 5 * This program is free software; you can redistribute it and/or modify
joachim99@8 6 * it under the terms of the GNU General Public License as published by
joachim99@8 7 * the Free Software Foundation; either version 2 of the License, or
joachim99@8 8 * (at your option) any later version.
joachim99@8 9 *
joachim99@8 10 * This program is distributed in the hope that it will be useful,
joachim99@8 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
joachim99@8 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
joachim99@8 13 * GNU General Public License for more details.
joachim99@8 14 *
joachim99@8 15 * You should have received a copy of the GNU General Public License
joachim99@8 16 * along with this program; if not, write to the Free Software
joachim99@8 17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
joachim99@8 18 *
joachim99@8 19 */
joachim99@8 20
joachim99@8 21 #include <qcheckbox.h>
joachim99@8 22 #include <qcombobox.h>
joachim99@8 23 #include <qfont.h>
joachim99@8 24 #include <qframe.h>
joachim99@8 25 #include <qlayout.h>
joachim99@8 26 #include <qlabel.h>
joachim99@8 27 #include <qlineedit.h>
joachim99@8 28 #include <qvbox.h>
joachim99@8 29 #include <qvalidator.h>
joachim99@8 30 #include <qtooltip.h>
joachim99@58 31 #include <qtextcodec.h>
joachim99@8 32
joachim99@8 33 #include <kapplication.h>
joachim99@8 34 #include <kcolorbtn.h>
joachim99@8 35 #include <kfontdialog.h> // For KFontChooser
joachim99@8 36 #include <kiconloader.h>
joachim99@8 37 #include <klocale.h>
joachim99@8 38 #include <kconfig.h>
joachim99@8 39 #include <kmessagebox.h>
joachim99@8 40 //#include <kkeydialog.h>
joachim99@58 41 #include <map>
joachim99@8 42
joachim99@8 43 #include "optiondialog.h"
joachim99@8 44 #include "diff.h"
joachim99@8 45
joachim99@8 46 void OptionDialog::addOptionItem(OptionItem* p)
joachim99@8 47 {
joachim99@8 48 m_optionItemList.push_back(p);
joachim99@8 49 }
joachim99@8 50
joachim99@8 51 class OptionItem
joachim99@8 52 {
joachim99@8 53 public:
joachim99@8 54 OptionItem( OptionDialog* pOptionDialog, QString saveName )
joachim99@8 55 {
joachim99@8 56 assert(pOptionDialog!=0);
joachim99@8 57 pOptionDialog->addOptionItem( this );
joachim99@8 58 m_saveName = saveName;
joachim99@8 59 }
joachim99@8 60 virtual ~OptionItem(){}
joachim99@8 61 virtual void setToDefault()=0;
joachim99@8 62 virtual void setToCurrent()=0;
joachim99@8 63 virtual void apply()=0;
joachim99@8 64 virtual void write(KConfig*)=0;
joachim99@8 65 virtual void read(KConfig*)=0;
joachim99@8 66 protected:
joachim99@8 67 QString m_saveName;
joachim99@8 68 };
joachim99@8 69
joachim99@8 70 class OptionCheckBox : public QCheckBox, public OptionItem
joachim99@8 71 {
joachim99@8 72 public:
joachim99@8 73 OptionCheckBox( QString text, bool bDefaultVal, const QString& saveName, bool* pbVar,
joachim99@8 74 QWidget* pParent, OptionDialog* pOD )
joachim99@8 75 : QCheckBox( text, pParent ), OptionItem( pOD, saveName )
joachim99@8 76 {
joachim99@8 77 m_pbVar = pbVar;
joachim99@8 78 m_bDefaultVal = bDefaultVal;
joachim99@8 79 }
joachim99@8 80 void setToDefault(){ setChecked( m_bDefaultVal ); }
joachim99@8 81 void setToCurrent(){ setChecked( *m_pbVar ); }
joachim99@8 82 void apply() { *m_pbVar = isChecked(); }
joachim99@8 83 void write(KConfig* config){ config->writeEntry(m_saveName, *m_pbVar ); }
joachim99@8 84 void read (KConfig* config){ *m_pbVar = config->readBoolEntry( m_saveName, *m_pbVar ); }
joachim99@8 85 private:
joachim99@8 86 OptionCheckBox( const OptionCheckBox& ); // private copy constructor without implementation
joachim99@8 87 bool* m_pbVar;
joachim99@8 88 bool m_bDefaultVal;
joachim99@8 89 };
joachim99@8 90
joachim99@51 91 class OptionToggleAction : public OptionItem
joachim99@51 92 {
joachim99@51 93 public:
joachim99@51 94 OptionToggleAction( bool bDefaultVal, const QString& saveName, bool* pbVar, OptionDialog* pOD )
joachim99@51 95 : OptionItem( pOD, saveName )
joachim99@51 96 {
joachim99@51 97 m_pbVar = pbVar;
joachim99@51 98 *m_pbVar = bDefaultVal;
joachim99@51 99 }
joachim99@51 100 void setToDefault(){}
joachim99@51 101 void setToCurrent(){}
joachim99@51 102 void apply() {}
joachim99@51 103 void write(KConfig* config){ config->writeEntry(m_saveName, *m_pbVar ); }
joachim99@51 104 void read (KConfig* config){ *m_pbVar = config->readBoolEntry( m_saveName, *m_pbVar ); }
joachim99@51 105 private:
joachim99@51 106 OptionToggleAction( const OptionToggleAction& ); // private copy constructor without implementation
joachim99@51 107 bool* m_pbVar;
joachim99@51 108 };
joachim99@51 109
joachim99@51 110
joachim99@8 111 class OptionColorButton : public KColorButton, public OptionItem
joachim99@8 112 {
joachim99@8 113 public:
joachim99@8 114 OptionColorButton( QColor defaultVal, const QString& saveName, QColor* pVar, QWidget* pParent, OptionDialog* pOD )
joachim99@8 115 : KColorButton( pParent ), OptionItem( pOD, saveName )
joachim99@8 116 {
joachim99@8 117 m_pVar = pVar;
joachim99@8 118 m_defaultVal = defaultVal;
joachim99@8 119 }
joachim99@8 120 void setToDefault(){ setColor( m_defaultVal ); }
joachim99@8 121 void setToCurrent(){ setColor( *m_pVar ); }
joachim99@8 122 void apply() { *m_pVar = color(); }
joachim99@8 123 void write(KConfig* config){ config->writeEntry(m_saveName, *m_pVar ); }
joachim99@8 124 void read (KConfig* config){ *m_pVar = config->readColorEntry( m_saveName, m_pVar ); }
joachim99@8 125 private:
joachim99@8 126 OptionColorButton( const OptionColorButton& ); // private copy constructor without implementation
joachim99@8 127 QColor* m_pVar;
joachim99@8 128 QColor m_defaultVal;
joachim99@8 129 };
joachim99@8 130
joachim99@58 131 class OptionLineEdit : public QComboBox, public OptionItem
joachim99@8 132 {
joachim99@8 133 public:
joachim99@8 134 OptionLineEdit( const QString& defaultVal, const QString& saveName, QString* pVar,
joachim99@8 135 QWidget* pParent, OptionDialog* pOD )
joachim99@58 136 : QComboBox( pParent ), OptionItem( pOD, saveName )
joachim99@8 137 {
joachim99@8 138 m_pVar = pVar;
joachim99@8 139 m_defaultVal = defaultVal;
joachim99@58 140 m_list.push_back(defaultVal);
joachim99@58 141 setEditable(true);
joachim99@8 142 }
joachim99@58 143 void setToDefault(){ setCurrentText( m_defaultVal ); }
joachim99@58 144 void setToCurrent(){ setCurrentText( *m_pVar ); }
joachim99@58 145 void apply() { *m_pVar = currentText(); insertText(); }
joachim99@58 146 void write(KConfig* config){ config->writeEntry( m_saveName, m_list, '|' ); }
joachim99@58 147 void read (KConfig* config){
joachim99@58 148 m_list = config->readListEntry( m_saveName, '|' );
joachim99@58 149 if ( !m_list.isEmpty() ) *m_pVar = m_list.front();
joachim99@58 150 clear();
joachim99@58 151 insertStringList(m_list);
joachim99@58 152 }
joachim99@8 153 private:
joachim99@58 154 void insertText()
joachim99@58 155 { // Check if the text exists. If yes remove it and
joachim99@58 156 QString current = currentText();
joachim99@58 157 m_list.remove( current );
joachim99@58 158 m_list.push_front( current );
joachim99@58 159 clear();
joachim99@58 160 if ( m_list.count()>10 ) m_list.erase( m_list.at(10), m_list.end() );
joachim99@58 161 insertStringList(m_list);
joachim99@58 162 }
joachim99@8 163 OptionLineEdit( const OptionLineEdit& ); // private copy constructor without implementation
joachim99@8 164 QString* m_pVar;
joachim99@8 165 QString m_defaultVal;
joachim99@58 166 QStringList m_list;
joachim99@8 167 };
joachim99@8 168
joachim99@8 169 #if defined QT_NO_VALIDATOR
joachim99@8 170 #error No validator
joachim99@8 171 #endif
joachim99@8 172 class OptionIntEdit : public QLineEdit, public OptionItem
joachim99@8 173 {
joachim99@8 174 public:
joachim99@8 175 OptionIntEdit( int defaultVal, const QString& saveName, int* pVar, int rangeMin, int rangeMax,
joachim99@8 176 QWidget* pParent, OptionDialog* pOD )
joachim99@8 177 : QLineEdit( pParent ), OptionItem( pOD, saveName )
joachim99@8 178 {
joachim99@8 179 m_pVar = pVar;
joachim99@8 180 m_defaultVal = defaultVal;
joachim99@51 181 QIntValidator* v = new QIntValidator(this);
joachim99@8 182 v->setRange( rangeMin, rangeMax );
joachim99@8 183 setValidator( v );
joachim99@8 184 }
joachim99@8 185 void setToDefault(){ QString s; s.setNum(m_defaultVal); setText( s ); }
joachim99@8 186 void setToCurrent(){ QString s; s.setNum(*m_pVar); setText( s ); }
joachim99@8 187 void apply() { const QIntValidator* v=static_cast<const QIntValidator*>(validator());
joachim99@8 188 *m_pVar = minMaxLimiter( text().toInt(), v->bottom(), v->top());
joachim99@8 189 setText( QString::number(*m_pVar) ); }
joachim99@8 190 void write(KConfig* config){ config->writeEntry(m_saveName, *m_pVar ); }
joachim99@8 191 void read (KConfig* config){ *m_pVar = config->readNumEntry( m_saveName, *m_pVar ); }
joachim99@8 192 private:
joachim99@8 193 OptionIntEdit( const OptionIntEdit& ); // private copy constructor without implementation
joachim99@8 194 int* m_pVar;
joachim99@8 195 int m_defaultVal;
joachim99@8 196 };
joachim99@8 197
joachim99@51 198 class OptionComboBox : public QComboBox, public OptionItem
joachim99@51 199 {
joachim99@51 200 public:
joachim99@58 201 OptionComboBox( int defaultVal, const QString& saveName, int* pVarNum,
joachim99@51 202 QWidget* pParent, OptionDialog* pOD )
joachim99@51 203 : QComboBox( pParent ), OptionItem( pOD, saveName )
joachim99@51 204 {
joachim99@58 205 m_pVarNum = pVarNum;
joachim99@58 206 m_pVarStr = 0;
joachim99@51 207 m_defaultVal = defaultVal;
joachim99@51 208 setEditable(false);
joachim99@51 209 }
joachim99@58 210 OptionComboBox( int defaultVal, const QString& saveName, QString* pVarStr,
joachim99@58 211 QWidget* pParent, OptionDialog* pOD )
joachim99@58 212 : QComboBox( pParent ), OptionItem( pOD, saveName )
joachim99@58 213 {
joachim99@58 214 m_pVarNum = 0;
joachim99@58 215 m_pVarStr = pVarStr;
joachim99@58 216 m_defaultVal = defaultVal;
joachim99@58 217 setEditable(false);
joachim99@58 218 }
joachim99@58 219 void setToDefault()
joachim99@58 220 {
joachim99@58 221 setCurrentItem( m_defaultVal );
joachim99@58 222 if (m_pVarStr!=0){ *m_pVarStr=currentText(); }
joachim99@58 223 }
joachim99@58 224 void setToCurrent()
joachim99@58 225 {
joachim99@58 226 if (m_pVarNum!=0) setCurrentItem( *m_pVarNum );
joachim99@58 227 else setText( *m_pVarStr );
joachim99@58 228 }
joachim99@58 229 void apply()
joachim99@58 230 {
joachim99@58 231 if (m_pVarNum!=0){ *m_pVarNum = currentItem(); }
joachim99@58 232 else { *m_pVarStr = currentText(); }
joachim99@58 233 }
joachim99@58 234 void write(KConfig* config)
joachim99@58 235 {
joachim99@58 236 if (m_pVarStr!=0) config->writeEntry(m_saveName, *m_pVarStr );
joachim99@58 237 else config->writeEntry(m_saveName, *m_pVarNum );
joachim99@58 238 }
joachim99@58 239 void read (KConfig* config)
joachim99@58 240 {
joachim99@58 241 if (m_pVarStr!=0) setText( config->readEntry( m_saveName, currentText() ) );
joachim99@58 242 else *m_pVarNum = config->readNumEntry( m_saveName, *m_pVarNum );
joachim99@58 243 }
joachim99@51 244 private:
joachim99@51 245 OptionComboBox( const OptionIntEdit& ); // private copy constructor without implementation
joachim99@58 246 int* m_pVarNum;
joachim99@58 247 QString* m_pVarStr;
joachim99@51 248 int m_defaultVal;
joachim99@58 249
joachim99@58 250 void setText(const QString& s)
joachim99@58 251 {
joachim99@58 252 // Find the string in the combobox-list, don't change the value if nothing fits.
joachim99@58 253 for( int i=0; i<count(); ++i )
joachim99@58 254 {
joachim99@58 255 if ( text(i)==s )
joachim99@58 256 {
joachim99@58 257 if (m_pVarNum!=0) *m_pVarNum = i;
joachim99@58 258 if (m_pVarStr!=0) *m_pVarStr = s;
joachim99@58 259 setCurrentItem(i);
joachim99@58 260 return;
joachim99@58 261 }
joachim99@58 262 }
joachim99@58 263 }
joachim99@51 264 };
joachim99@8 265
joachim99@8 266 OptionDialog::OptionDialog( bool bShowDirMergeSettings, QWidget *parent, char *name )
joachim99@8 267 :KDialogBase( IconList, i18n("Configure"), Help|Default|Apply|Ok|Cancel,
joachim99@8 268 Ok, parent, name, true /*modal*/, true )
joachim99@8 269 {
joachim99@8 270 setHelp( "kdiff3/index.html", QString::null );
joachim99@8 271
joachim99@8 272 setupFontPage();
joachim99@8 273 setupColorPage();
joachim99@8 274 setupEditPage();
joachim99@8 275 setupDiffPage();
joachim99@51 276 setupOtherOptions();
joachim99@8 277 if (bShowDirMergeSettings)
joachim99@8 278 setupDirectoryMergePage();
joachim99@58 279
joachim99@58 280 // setupRegionalPage();
joachim99@58 281
joachim99@8 282 //setupKeysPage();
joachim99@8 283
joachim99@8 284 // Initialize all values in the dialog
joachim99@8 285 resetToDefaults();
joachim99@8 286 slotApply();
joachim99@8 287 }
joachim99@8 288
joachim99@8 289 OptionDialog::~OptionDialog( void )
joachim99@8 290 {
joachim99@8 291 }
joachim99@8 292
joachim99@51 293 void OptionDialog::setupOtherOptions()
joachim99@51 294 {
joachim99@51 295 new OptionToggleAction( false, "AutoAdvance", &m_bAutoAdvance, this );
joachim99@51 296 new OptionToggleAction( true, "ShowWhiteSpaceCharacters", &m_bShowWhiteSpaceCharacters, this );
joachim99@51 297 new OptionToggleAction( true, "ShowWhiteSpace", &m_bShowWhiteSpace, this );
joachim99@51 298 new OptionToggleAction( false, "ShowLineNumbers", &m_bShowLineNumbers, this );
joachim99@51 299 new OptionToggleAction( true, "HorizDiffWindowSplitting", &m_bHorizDiffWindowSplitting, this );
joachim99@51 300 }
joachim99@8 301
joachim99@8 302 void OptionDialog::setupFontPage( void )
joachim99@8 303 {
joachim99@51 304 QFrame *page = addPage( i18n("Font"), i18n("Editor & Diff Output Font" ),
joachim99@8 305 BarIcon("fonts", KIcon::SizeMedium ) );
joachim99@8 306
joachim99@8 307 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@51 308
joachim99@8 309 m_fontChooser = new KFontChooser( page,"font",true/*onlyFixed*/,QStringList(),false,6 );
joachim99@8 310 topLayout->addWidget( m_fontChooser );
joachim99@8 311
joachim99@8 312 QGridLayout *gbox = new QGridLayout( 1, 2 );
joachim99@8 313 topLayout->addLayout( gbox );
joachim99@8 314 int line=0;
joachim99@8 315
joachim99@51 316 OptionCheckBox* pItalicDeltas = new OptionCheckBox( i18n("Italic font for deltas"), false, "ItalicForDeltas", &m_bItalicForDeltas, page, this );
joachim99@8 317 gbox->addMultiCellWidget( pItalicDeltas, line, line, 0, 1 );
joachim99@8 318 QToolTip::add( pItalicDeltas, i18n(
joachim99@8 319 "Selects the italic version of the font for differences.\n"
joachim99@8 320 "If the font doesn't support italic characters, then this does nothing.")
joachim99@8 321 );
joachim99@8 322 }
joachim99@8 323
joachim99@8 324
joachim99@8 325 void OptionDialog::setupColorPage( void )
joachim99@8 326 {
joachim99@51 327 QFrame *page = addPage( i18n("Color"), i18n("Colors in Editor & Diff Output"),
joachim99@8 328 BarIcon("colorize", KIcon::SizeMedium ) );
joachim99@8 329 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@8 330
joachim99@8 331 QGridLayout *gbox = new QGridLayout( 7, 2 );
joachim99@8 332 topLayout->addLayout(gbox);
joachim99@8 333
joachim99@8 334 QLabel* label;
joachim99@8 335 int line = 0;
joachim99@8 336
joachim99@8 337 int depth = QColor::numBitPlanes();
joachim99@8 338 bool bLowColor = depth<=8;
joachim99@8 339
joachim99@8 340 OptionColorButton* pFgColor = new OptionColorButton( black,"FgColor", &m_fgColor, page, this );
joachim99@8 341 label = new QLabel( pFgColor, i18n("Foreground color:"), page );
joachim99@8 342 gbox->addWidget( label, line, 0 );
joachim99@8 343 gbox->addWidget( pFgColor, line, 1 );
joachim99@8 344 ++line;
joachim99@8 345
joachim99@8 346 OptionColorButton* pBgColor = new OptionColorButton( white, "BgColor", &m_bgColor, page, this );
joachim99@8 347 label = new QLabel( pBgColor, i18n("Background color:"), page );
joachim99@8 348 gbox->addWidget( label, line, 0 );
joachim99@8 349 gbox->addWidget( pBgColor, line, 1 );
joachim99@8 350
joachim99@8 351 ++line;
joachim99@8 352
joachim99@8 353 OptionColorButton* pDiffBgColor = new OptionColorButton( lightGray, "DiffBgColor", &m_diffBgColor, page, this );
joachim99@8 354 label = new QLabel( pDiffBgColor, i18n("Diff background color:"), page );
joachim99@8 355 gbox->addWidget( label, line, 0 );
joachim99@8 356 gbox->addWidget( pDiffBgColor, line, 1 );
joachim99@8 357 ++line;
joachim99@8 358
joachim99@8 359 OptionColorButton* pColorA = new OptionColorButton(
joachim99@8 360 bLowColor ? qRgb(0,0,255) : qRgb(0,0,200)/*blue*/, "ColorA", &m_colorA, page, this );
joachim99@8 361 label = new QLabel( pColorA, i18n("Color A:"), page );
joachim99@8 362 gbox->addWidget( label, line, 0 );
joachim99@8 363 gbox->addWidget( pColorA, line, 1 );
joachim99@8 364 ++line;
joachim99@8 365
joachim99@8 366 OptionColorButton* pColorB = new OptionColorButton(
joachim99@8 367 bLowColor ? qRgb(0,128,0) : qRgb(0,150,0)/*green*/, "ColorB", &m_colorB, page, this );
joachim99@8 368 label = new QLabel( pColorB, i18n("Color B:"), page );
joachim99@8 369 gbox->addWidget( label, line, 0 );
joachim99@8 370 gbox->addWidget( pColorB, line, 1 );
joachim99@8 371 ++line;
joachim99@8 372
joachim99@8 373 OptionColorButton* pColorC = new OptionColorButton(
joachim99@8 374 bLowColor ? qRgb(128,0,128) : qRgb(150,0,150)/*magenta*/, "ColorC", &m_colorC, page, this );
joachim99@8 375 label = new QLabel( pColorC, i18n("Color C:"), page );
joachim99@8 376 gbox->addWidget( label, line, 0 );
joachim99@8 377 gbox->addWidget( pColorC, line, 1 );
joachim99@8 378 ++line;
joachim99@8 379
joachim99@8 380 OptionColorButton* pColorForConflict = new OptionColorButton( red, "ColorForConflict", &m_colorForConflict, page, this );
joachim99@51 381 label = new QLabel( pColorForConflict, i18n("Conflict color:"), page );
joachim99@8 382 gbox->addWidget( label, line, 0 );
joachim99@8 383 gbox->addWidget( pColorForConflict, line, 1 );
joachim99@8 384 ++line;
joachim99@8 385
joachim99@8 386 OptionColorButton* pColor = new OptionColorButton(
joachim99@8 387 bLowColor ? qRgb(192,192,192) : qRgb(220,220,100), "CurrentRangeBgColor", &m_currentRangeBgColor, page, this );
joachim99@8 388 label = new QLabel( pColor, i18n("Current range background color:"), page );
joachim99@8 389 gbox->addWidget( label, line, 0 );
joachim99@8 390 gbox->addWidget( pColor, line, 1 );
joachim99@8 391 ++line;
joachim99@8 392
joachim99@8 393 pColor = new OptionColorButton(
joachim99@8 394 bLowColor ? qRgb(255,255,0) : qRgb(255,255,150), "CurrentRangeDiffBgColor", &m_currentRangeDiffBgColor, page, this );
joachim99@8 395 label = new QLabel( pColor, i18n("Current range diff background color:"), page );
joachim99@8 396 gbox->addWidget( label, line, 0 );
joachim99@8 397 gbox->addWidget( pColor, line, 1 );
joachim99@8 398 ++line;
joachim99@8 399
joachim99@8 400 topLayout->addStretch(10);
joachim99@8 401 }
joachim99@8 402
joachim99@8 403
joachim99@8 404 void OptionDialog::setupEditPage( void )
joachim99@8 405 {
joachim99@51 406 QFrame *page = addPage( i18n("Editor"), i18n("Editor Behaviour"),
joachim99@8 407 BarIcon("edit", KIcon::SizeMedium ) );
joachim99@8 408 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@8 409
joachim99@8 410 QGridLayout *gbox = new QGridLayout( 4, 2 );
joachim99@8 411 topLayout->addLayout( gbox );
joachim99@8 412 QLabel* label;
joachim99@8 413 int line=0;
joachim99@8 414
joachim99@8 415 OptionCheckBox* pReplaceTabs = new OptionCheckBox( i18n("Tab inserts spaces"), false, "ReplaceTabs", &m_bReplaceTabs, page, this );
joachim99@8 416 gbox->addMultiCellWidget( pReplaceTabs, line, line, 0, 1 );
joachim99@8 417 QToolTip::add( pReplaceTabs, i18n(
joachim99@8 418 "On: Pressing tab generates the appropriate number of spaces.\n"
joachim99@8 419 "Off: A Tab-character will be inserted.")
joachim99@8 420 );
joachim99@8 421 ++line;
joachim99@8 422
joachim99@8 423 OptionIntEdit* pTabSize = new OptionIntEdit( 8, "TabSize", &m_tabSize, 1, 100, page, this );
joachim99@8 424 label = new QLabel( pTabSize, i18n("Tab size:"), page );
joachim99@8 425 gbox->addWidget( label, line, 0 );
joachim99@8 426 gbox->addWidget( pTabSize, line, 1 );
joachim99@8 427 ++line;
joachim99@8 428
joachim99@51 429 OptionCheckBox* pAutoIndentation = new OptionCheckBox( i18n("Auto indentation"), true, "AutoIndentation", &m_bAutoIndentation, page, this );
joachim99@8 430 gbox->addMultiCellWidget( pAutoIndentation, line, line, 0, 1 );
joachim99@8 431 QToolTip::add( pAutoIndentation, i18n(
joachim99@8 432 "On: The indentation of the previous line is used for a new line.\n"
joachim99@8 433 ));
joachim99@8 434 ++line;
joachim99@8 435
joachim99@51 436 OptionCheckBox* pAutoCopySelection = new OptionCheckBox( i18n("Auto copy selection"), false, "AutoCopySelection", &m_bAutoCopySelection, page, this );
joachim99@8 437 gbox->addMultiCellWidget( pAutoCopySelection, line, line, 0, 1 );
joachim99@8 438 QToolTip::add( pAutoCopySelection, i18n(
joachim99@8 439 "On: Any selection is immediately written to the clipboard.\n"
joachim99@8 440 "Off: You must explicitely copy e.g. via Ctrl-C."
joachim99@8 441 ));
joachim99@8 442 ++line;
joachim99@58 443
joachim99@58 444 label = new QLabel( i18n("Line End Style:"), page );
joachim99@58 445 gbox->addWidget( label, line, 0 );
joachim99@58 446 #ifdef _WIN32
joachim99@58 447 int defaultLineEndStyle = eLineEndDos;
joachim99@58 448 #else
joachim99@58 449 int defaultLineEndStyle = eLineEndUnix;
joachim99@58 450 #endif
joachim99@58 451 OptionComboBox* pLineEndStyle = new OptionComboBox( defaultLineEndStyle, "LineEndStyle", &m_lineEndStyle, page, this );
joachim99@58 452 gbox->addWidget( pLineEndStyle, line, 1 );
joachim99@58 453 pLineEndStyle->insertItem( "Unix", eLineEndUnix );
joachim99@58 454 pLineEndStyle->insertItem( "Dos/Windows", eLineEndDos );
joachim99@58 455 QToolTip::add( label, i18n(
joachim99@58 456 "Sets the line endings for when a edited file is saved.\n"
joachim99@58 457 "DOS/Windows: CR+LF; Unix: LF; with CR=0D, LF=0A")
joachim99@58 458 );
joachim99@58 459 ++line;
joachim99@58 460
joachim99@51 461 OptionCheckBox* pStringEncoding = new OptionCheckBox( i18n("Use locale encoding"), true, "LocaleEncoding", &m_bStringEncoding, page, this );
joachim99@51 462 gbox->addMultiCellWidget( pStringEncoding, line, line, 0, 1 );
joachim99@51 463 QToolTip::add( pStringEncoding, i18n(
joachim99@51 464 "Change this if non-ascii-characters aren't displayed correctly."
joachim99@51 465 ));
joachim99@51 466 ++line;
joachim99@51 467
joachim99@8 468 topLayout->addStretch(10);
joachim99@8 469 }
joachim99@8 470
joachim99@8 471
joachim99@8 472 void OptionDialog::setupDiffPage( void )
joachim99@8 473 {
joachim99@51 474 QFrame *page = addPage( i18n("Diff & Merge"), i18n("Diff & Merge Settings"),
joachim99@8 475 BarIcon("misc", KIcon::SizeMedium ) );
joachim99@8 476 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@8 477
joachim99@8 478 QGridLayout *gbox = new QGridLayout( 3, 2 );
joachim99@8 479 topLayout->addLayout( gbox );
joachim99@8 480 int line=0;
joachim99@8 481
joachim99@51 482 QLabel* label=0;
joachim99@51 483
joachim99@51 484 OptionCheckBox* pPreserveCarriageReturn = new OptionCheckBox( i18n("Preserve carriage return"), false, "PreserveCarriageReturn", &m_bPreserveCarriageReturn, page, this );
joachim99@51 485 gbox->addMultiCellWidget( pPreserveCarriageReturn, line, line, 0, 1 );
joachim99@51 486 QToolTip::add( pPreserveCarriageReturn, i18n(
joachim99@51 487 "Show carriage return characters '\\r' if they exist.\n"
joachim99@51 488 "Helps to compare files that were modified under different operating systems.")
joachim99@8 489 );
joachim99@8 490 ++line;
joachim99@8 491
joachim99@51 492 OptionCheckBox* pIgnoreNumbers = new OptionCheckBox( i18n("Ignore numbers"), false, "IgnoreNumbers", &m_bIgnoreNumbers, page, this );
joachim99@51 493 gbox->addMultiCellWidget( pIgnoreNumbers, line, line, 0, 1 );
joachim99@51 494 QToolTip::add( pIgnoreNumbers, i18n(
joachim99@51 495 "Ignore number characters during line matching phase. (Similar to Ignore white space.)\n"
joachim99@51 496 "Might help to compare files with numeric data.")
joachim99@8 497 );
joachim99@8 498 ++line;
joachim99@8 499
joachim99@51 500 OptionCheckBox* pIgnoreComments = new OptionCheckBox( i18n("Ignore C/C++ Comments"), false, "IgnoreComments", &m_bIgnoreComments, page, this );
joachim99@51 501 gbox->addMultiCellWidget( pIgnoreComments, line, line, 0, 1 );
joachim99@51 502 QToolTip::add( pIgnoreComments, i18n( "Treat C/C++ comments like white space.")
joachim99@8 503 );
joachim99@8 504 ++line;
joachim99@8 505
joachim99@51 506 OptionCheckBox* pUpCase = new OptionCheckBox( i18n("Convert to upper case"), false, "UpCase", &m_bUpCase, page, this );
joachim99@8 507 gbox->addMultiCellWidget( pUpCase, line, line, 0, 1 );
joachim99@51 508 QToolTip::add( pUpCase, i18n(
joachim99@51 509 "Turn all lower case characters to upper case on reading. (e.g.: 'a'->'A')")
joachim99@8 510 );
joachim99@8 511 ++line;
joachim99@8 512
joachim99@51 513 label = new QLabel( i18n("Preprocessor command:"), page );
joachim99@8 514 gbox->addWidget( label, line, 0 );
joachim99@8 515 OptionLineEdit* pLE = new OptionLineEdit( "", "PreProcessorCmd", &m_PreProcessorCmd, page, this );
joachim99@8 516 gbox->addWidget( pLE, line, 1 );
joachim99@8 517 QToolTip::add( label, i18n("User defined pre-processing. (See the docs for details.)") );
joachim99@8 518 ++line;
joachim99@8 519
joachim99@51 520 label = new QLabel( i18n("Line-matching preprocessor command:"), page );
joachim99@8 521 gbox->addWidget( label, line, 0 );
joachim99@8 522 pLE = new OptionLineEdit( "", "LineMatchingPreProcessorCmd", &m_LineMatchingPreProcessorCmd, page, this );
joachim99@8 523 gbox->addWidget( pLE, line, 1 );
joachim99@8 524 QToolTip::add( label, i18n("This pre-processor is only used during line matching.\n(See the docs for details.)") );
joachim99@8 525 ++line;
joachim99@8 526
joachim99@51 527 OptionCheckBox* pTryHard = new OptionCheckBox( i18n("Try hard (slower)"), true, "TryHard", &m_bTryHard, page, this );
joachim99@51 528 gbox->addMultiCellWidget( pTryHard, line, line, 0, 1 );
joachim99@51 529 QToolTip::add( pTryHard, i18n(
joachim99@51 530 "Enables the --minimal option for the external diff.\n"
joachim99@51 531 "The analysis of big files will be much slower.")
joachim99@8 532 );
joachim99@8 533 ++line;
joachim99@8 534
joachim99@51 535 label = new QLabel( i18n("Auto advance delay (ms):"), page );
joachim99@8 536 gbox->addWidget( label, line, 0 );
joachim99@8 537 OptionIntEdit* pAutoAdvanceDelay = new OptionIntEdit( 500, "AutoAdvanceDelay", &m_autoAdvanceDelay, 0, 2000, page, this );
joachim99@8 538 gbox->addWidget( pAutoAdvanceDelay, line, 1 );
joachim99@8 539 QToolTip::add( label,i18n(
joachim99@8 540 "When in Auto-Advance mode the result of the current selection is shown \n"
joachim99@8 541 "for the specified time, before jumping to the next conflict. Range: 0-2000 ms")
joachim99@8 542 );
joachim99@8 543 ++line;
joachim99@8 544
joachim99@51 545 label = new QLabel( i18n("White space 2-file merge default:"), page );
joachim99@51 546 gbox->addWidget( label, line, 0 );
joachim99@51 547 OptionComboBox* pWhiteSpace2FileMergeDefault = new OptionComboBox( 0, "WhiteSpace2FileMergeDefault", &m_whiteSpace2FileMergeDefault, page, this );
joachim99@51 548 gbox->addWidget( pWhiteSpace2FileMergeDefault, line, 1 );
joachim99@51 549 pWhiteSpace2FileMergeDefault->insertItem( i18n("Manual choice"), 0 );
joachim99@51 550 pWhiteSpace2FileMergeDefault->insertItem( "A", 1 );
joachim99@51 551 pWhiteSpace2FileMergeDefault->insertItem( "B", 2 );
joachim99@58 552 QToolTip::add( label, i18n(
joachim99@51 553 "Allow the merge algorithm to automatically select an input for "
joachim99@51 554 "white-space-only changes." )
joachim99@51 555 );
joachim99@51 556 ++line;
joachim99@51 557
joachim99@51 558 label = new QLabel( i18n("White space 3-file merge default:"), page );
joachim99@51 559 gbox->addWidget( label, line, 0 );
joachim99@51 560 OptionComboBox* pWhiteSpace3FileMergeDefault = new OptionComboBox( 0, "WhiteSpace3FileMergeDefault", &m_whiteSpace3FileMergeDefault, page, this );
joachim99@51 561 gbox->addWidget( pWhiteSpace3FileMergeDefault, line, 1 );
joachim99@51 562 pWhiteSpace3FileMergeDefault->insertItem( i18n("Manual choice"), 0 );
joachim99@51 563 pWhiteSpace3FileMergeDefault->insertItem( "A", 1 );
joachim99@51 564 pWhiteSpace3FileMergeDefault->insertItem( "B", 2 );
joachim99@51 565 pWhiteSpace3FileMergeDefault->insertItem( "C", 3 );
joachim99@58 566 QToolTip::add( label, i18n(
joachim99@51 567 "Allow the merge algorithm to automatically select an input for "
joachim99@51 568 "white-space-only changes." )
joachim99@51 569 );
joachim99@51 570 ++line;
joachim99@51 571
joachim99@8 572 topLayout->addStretch(10);
joachim99@8 573 }
joachim99@8 574
joachim99@8 575 void OptionDialog::setupDirectoryMergePage( void )
joachim99@8 576 {
joachim99@51 577 QFrame *page = addPage( i18n("Directory Merge"), i18n("Directory Merge"),
joachim99@8 578 BarIcon("folder", KIcon::SizeMedium ) );
joachim99@8 579 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@8 580
joachim99@8 581 QGridLayout *gbox = new QGridLayout( 11, 2 );
joachim99@8 582 topLayout->addLayout( gbox );
joachim99@8 583 int line=0;
joachim99@8 584
joachim99@51 585 OptionCheckBox* pRecursiveDirs = new OptionCheckBox( i18n("Recursive directories"), true, "RecursiveDirs", &m_bDmRecursiveDirs, page, this );
joachim99@8 586 gbox->addMultiCellWidget( pRecursiveDirs, line, line, 0, 1 );
joachim99@8 587 QToolTip::add( pRecursiveDirs, i18n("Whether to analyze subdirectories or not.") );
joachim99@8 588 ++line;
joachim99@51 589 QLabel* label = new QLabel( i18n("File pattern(s):"), page );
joachim99@8 590 gbox->addWidget( label, line, 0 );
joachim99@8 591 OptionLineEdit* pFilePattern = new OptionLineEdit( "*", "FilePattern", &m_DmFilePattern, page, this );
joachim99@8 592 gbox->addWidget( pFilePattern, line, 1 );
joachim99@8 593 QToolTip::add( label, i18n(
joachim99@8 594 "Pattern(s) of files to be analyzed. \n"
joachim99@8 595 "Wildcards: '*' and '?'\n"
joachim99@8 596 "Several Patterns can be specified by using the separator: ';'"
joachim99@8 597 ));
joachim99@8 598 ++line;
joachim99@8 599
joachim99@51 600 label = new QLabel( i18n("File-anti-pattern(s):"), page );
joachim99@8 601 gbox->addWidget( label, line, 0 );
joachim99@8 602 OptionLineEdit* pFileAntiPattern = new OptionLineEdit( "*.orig;*.o", "FileAntiPattern", &m_DmFileAntiPattern, page, this );
joachim99@8 603 gbox->addWidget( pFileAntiPattern, line, 1 );
joachim99@8 604 QToolTip::add( label, i18n(
joachim99@8 605 "Pattern(s) of files to be excluded from analysis. \n"
joachim99@8 606 "Wildcards: '*' and '?'\n"
joachim99@8 607 "Several Patterns can be specified by using the separator: ';'"
joachim99@8 608 ));
joachim99@8 609 ++line;
joachim99@8 610
joachim99@51 611 label = new QLabel( i18n("Dir-anti-pattern(s):"), page );
joachim99@8 612 gbox->addWidget( label, line, 0 );
joachim99@8 613 OptionLineEdit* pDirAntiPattern = new OptionLineEdit( "CVS;.deps", "DirAntiPattern", &m_DmDirAntiPattern, page, this );
joachim99@8 614 gbox->addWidget( pDirAntiPattern, line, 1 );
joachim99@8 615 QToolTip::add( label, i18n(
joachim99@8 616 "Pattern(s) of directories to be excluded from analysis. \n"
joachim99@8 617 "Wildcards: '*' and '?'\n"
joachim99@8 618 "Several Patterns can be specified by using the separator: ';'"
joachim99@8 619 ));
joachim99@8 620 ++line;
joachim99@8 621
joachim99@51 622 OptionCheckBox* pUseCvsIgnore = new OptionCheckBox( i18n("Use .cvsignore"), false, "UseCvsIgnore", &m_bDmUseCvsIgnore, page, this );
joachim99@8 623 gbox->addMultiCellWidget( pUseCvsIgnore, line, line, 0, 1 );
joachim99@8 624 QToolTip::add( pUseCvsIgnore, i18n(
joachim99@8 625 "Extends the antipattern to anything that would be ignored by CVS.\n"
joachim99@8 626 "Via local \".cvsignore\"-files this can be directory specific."
joachim99@8 627 ));
joachim99@8 628 ++line;
joachim99@8 629
joachim99@51 630 OptionCheckBox* pFindHidden = new OptionCheckBox( i18n("Find hidden files and directories"), true, "FindHidden", &m_bDmFindHidden, page, this );
joachim99@8 631 gbox->addMultiCellWidget( pFindHidden, line, line, 0, 1 );
joachim99@8 632 #ifdef _WIN32
joachim99@8 633 QToolTip::add( pFindHidden, i18n("Finds files and directories with the hidden attribute.") );
joachim99@8 634 #else
joachim99@8 635 QToolTip::add( pFindHidden, i18n("Finds files and directories starting with '.'.") );
joachim99@8 636 #endif
joachim99@8 637 ++line;
joachim99@8 638
joachim99@51 639 OptionCheckBox* pFollowFileLinks = new OptionCheckBox( i18n("Follow file links"), false, "FollowFileLinks", &m_bDmFollowFileLinks, page, this );
joachim99@8 640 gbox->addMultiCellWidget( pFollowFileLinks, line, line, 0, 1 );
joachim99@8 641 QToolTip::add( pFollowFileLinks, i18n(
joachim99@8 642 "On: Compare the file the link points to.\n"
joachim99@8 643 "Off: Compare the links."
joachim99@8 644 ));
joachim99@8 645 ++line;
joachim99@8 646
joachim99@51 647 OptionCheckBox* pFollowDirLinks = new OptionCheckBox( i18n("Follow directory links"), false, "FollowDirLinks", &m_bDmFollowDirLinks, page, this );
joachim99@8 648 gbox->addMultiCellWidget( pFollowDirLinks, line, line, 0, 1 );
joachim99@8 649 QToolTip::add( pFollowDirLinks, i18n(
joachim99@8 650 "On: Compare the directory the link points to.\n"
joachim99@8 651 "Off: Compare the links."
joachim99@8 652 ));
joachim99@8 653 ++line;
joachim99@8 654
joachim99@8 655 OptionCheckBox* pShowOnlyDeltas = new OptionCheckBox( i18n("List only deltas"),false,"ListOnlyDeltas", &m_bDmShowOnlyDeltas, page, this );
joachim99@8 656 gbox->addMultiCellWidget( pShowOnlyDeltas, line, line, 0, 1 );
joachim99@8 657 QToolTip::add( pShowOnlyDeltas, i18n(
joachim99@8 658 "Files and directories without change will not appear in the list."));
joachim99@8 659 ++line;
joachim99@8 660
joachim99@51 661 OptionCheckBox* pTrustDate = new OptionCheckBox( i18n("Trust the modification date (unsafe)"), false, "TrustDate", &m_bDmTrustDate, page, this );
joachim99@8 662 gbox->addMultiCellWidget( pTrustDate, line, line, 0, 1 );
joachim99@8 663 QToolTip::add( pTrustDate, i18n("Assume that files are equal if the modification date and file length are equal.\n"
joachim99@8 664 "Useful for big directories or slow networks.") );
joachim99@8 665 ++line;
joachim99@8 666
joachim99@51 667 OptionCheckBox* pTrustSize = new OptionCheckBox( i18n("Trust the size (unsafe)"), false, "TrustSize", &m_bDmTrustSize, page, this );
joachim99@51 668 gbox->addMultiCellWidget( pTrustSize, line, line, 0, 1 );
joachim99@51 669 QToolTip::add( pTrustSize, i18n("Assume that files are equal if their file lengths are equal.\n"
joachim99@51 670 "Useful for big directories or slow networks when the date is modified during download.") );
joachim99@51 671 ++line;
joachim99@51 672
joachim99@8 673 // Some two Dir-options: Affects only the default actions.
joachim99@51 674 OptionCheckBox* pSyncMode = new OptionCheckBox( i18n("Synchronize directories"), false,"SyncMode", &m_bDmSyncMode, page, this );
joachim99@8 675 gbox->addMultiCellWidget( pSyncMode, line, line, 0, 1 );
joachim99@8 676 QToolTip::add( pSyncMode, i18n(
joachim99@8 677 "Offers to store files in both directories so that\n"
joachim99@8 678 "both directories are the same afterwards.\n"
joachim99@8 679 "Works only when comparing two directories without specifying a destination." ) );
joachim99@8 680 ++line;
joachim99@8 681
joachim99@51 682 OptionCheckBox* pCopyNewer = new OptionCheckBox( i18n("Copy newer instead of merging (unsafe)"), false, "CopyNewer", &m_bDmCopyNewer, page, this );
joachim99@8 683 gbox->addMultiCellWidget( pCopyNewer, line, line, 0, 1 );
joachim99@8 684 QToolTip::add( pCopyNewer, i18n(
joachim99@8 685 "Don't look inside, just take the newer file.\n"
joachim99@8 686 "(Use this only if you know what you are doing!)\n"
joachim99@8 687 "Only effective when comparing two directories." ) );
joachim99@8 688 ++line;
joachim99@51 689
joachim99@8 690 OptionCheckBox* pCreateBakFiles = new OptionCheckBox( i18n("Backup files (.orig)"), true, "CreateBakFiles", &m_bDmCreateBakFiles, page, this );
joachim99@8 691 gbox->addMultiCellWidget( pCreateBakFiles, line, line, 0, 1 );
joachim99@8 692 QToolTip::add( pCreateBakFiles, i18n(
joachim99@8 693 "When a file would be saved over an old file, then the old file\n"
joachim99@8 694 "will be renamed with a '.orig'-extension instead of being deleted."));
joachim99@8 695 ++line;
joachim99@8 696
joachim99@8 697 topLayout->addStretch(10);
joachim99@8 698 }
joachim99@8 699
joachim99@58 700 static void insertCodecs(OptionComboBox* p)
joachim99@58 701 {
joachim99@58 702 std::multimap<QString,QString> m; // Using the multimap for case-insensitive sorting.
joachim99@58 703 int i;
joachim99@58 704 for(i=0;;++i)
joachim99@58 705 {
joachim99@58 706 QTextCodec* pCodec = QTextCodec::codecForIndex ( i );
joachim99@58 707 if ( pCodec != 0 ) m.insert( std::make_pair( QString(pCodec->mimeName()).upper(), pCodec->mimeName()) );
joachim99@58 708 else break;
joachim99@58 709 }
joachim99@58 710
joachim99@58 711 p->insertItem( i18n("Auto"), 0 );
joachim99@58 712 std::multimap<QString,QString>::iterator mi;
joachim99@58 713 for(mi=m.begin(), i=0; mi!=m.end(); ++mi, ++i)
joachim99@58 714 p->insertItem(mi->second, i+1);
joachim99@58 715 }
joachim99@58 716
joachim99@58 717 void OptionDialog::setupRegionalPage( void )
joachim99@58 718 {
joachim99@58 719 QFrame *page = addPage( i18n("Regional Settings"), i18n("Regional Settings"),
joachim99@58 720 BarIcon("locale"/*"charset"*/, KIcon::SizeMedium ) );
joachim99@58 721 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@58 722
joachim99@58 723 QGridLayout *gbox = new QGridLayout( 3, 2 );
joachim99@58 724 topLayout->addLayout( gbox );
joachim99@58 725 int line=0;
joachim99@58 726
joachim99@58 727 QLabel* label;
joachim99@58 728 #ifdef KREPLACEMENTS_H
joachim99@58 729 label = new QLabel( i18n("Language (restart required)"), page );
joachim99@58 730 gbox->addWidget( label, line, 0 );
joachim99@58 731 OptionComboBox* pLanguage = new OptionComboBox( 0, "Language", &m_language, page, this );
joachim99@58 732 gbox->addWidget( pLanguage, line, 1 );
joachim99@58 733 pLanguage->insertItem( i18n("Auto"), 0 );
joachim99@58 734 // Read directory: Find all kdiff3_*.qm-files and insert the found files here selection
joachim99@58 735 QToolTip::add( label, i18n(
joachim99@58 736 "Choose the language of the GUI-strings or \"Auto\".\n"
joachim99@58 737 "For a change of language to take place, quit and restart KDiff3.")
joachim99@58 738 );
joachim99@58 739 ++line;
joachim99@58 740 #endif
joachim99@58 741
joachim99@58 742 label = new QLabel( i18n("Codec for file contents"), page );
joachim99@58 743 gbox->addWidget( label, line, 0 );
joachim99@58 744 OptionComboBox* pFileCodec = new OptionComboBox( 0, "FileCodec", &m_fileCodec, page, this );
joachim99@58 745 gbox->addWidget( pFileCodec, line, 1 );
joachim99@58 746 insertCodecs( pFileCodec );
joachim99@58 747 QToolTip::add( label, i18n(
joachim99@58 748 "Choose the codec that should be used for your input files\n"
joachim99@58 749 "or \"Auto\" if unsure." )
joachim99@58 750 );
joachim99@58 751 ++line;
joachim99@58 752
joachim99@58 753 topLayout->addStretch(10);
joachim99@58 754 }
joachim99@58 755
joachim99@58 756
joachim99@8 757 void OptionDialog::setupKeysPage( void )
joachim99@8 758 {
joachim99@8 759 //QVBox *page = addVBoxPage( i18n("Keys"), i18n("KeyDialog" ),
joachim99@8 760 // BarIcon("fonts", KIcon::SizeMedium ) );
joachim99@8 761
joachim99@8 762 //QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@8 763 // new KFontChooser( page,"font",false/*onlyFixed*/,QStringList(),false,6 );
joachim99@8 764 //m_pKeyDialog=new KKeyDialog( false, 0 );
joachim99@8 765 //topLayout->addWidget( m_pKeyDialog );
joachim99@8 766 }
joachim99@8 767
joachim99@8 768 void OptionDialog::slotOk( void )
joachim99@8 769 {
joachim99@8 770 slotApply();
joachim99@8 771
joachim99@8 772 // My system returns variable width fonts even though I
joachim99@8 773 // disabled this. Even QFont::fixedPitch() doesn't work.
joachim99@8 774 QFontMetrics fm(m_font);
joachim99@8 775 if ( fm.width('W')!=fm.width('i') )
joachim99@8 776 {
joachim99@8 777 int result = KMessageBox::warningYesNo(this, i18n(
joachim99@8 778 "You selected a variable width font.\n\n"
joachim99@8 779 "Because this program doesn't handle variable width fonts\n"
joachim99@8 780 "correctly, you might experience problems while editing.\n\n"
joachim99@8 781 "Do you want to continue or do you want to select another font."),
joachim99@51 782 i18n("Incompatible Font"),
joachim99@51 783 i18n("Continue at Own Risk"), i18n("Select Another Font"));
joachim99@8 784 if (result==KMessageBox::No)
joachim99@8 785 return;
joachim99@8 786 }
joachim99@8 787
joachim99@8 788 accept();
joachim99@8 789 }
joachim99@8 790
joachim99@8 791
joachim99@8 792 /** Copy the values from the widgets to the public variables.*/
joachim99@8 793 void OptionDialog::slotApply( void )
joachim99@8 794 {
joachim99@8 795 std::list<OptionItem*>::iterator i;
joachim99@8 796 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
joachim99@8 797 {
joachim99@8 798 (*i)->apply();
joachim99@8 799 }
joachim99@8 800
joachim99@8 801 // FontConfigDlg
joachim99@8 802 m_font = m_fontChooser->font();
joachim99@8 803
joachim99@8 804 emit applyClicked();
joachim99@8 805 }
joachim99@8 806
joachim99@8 807 /** Set the default values in the widgets only, while the
joachim99@8 808 public variables remain unchanged. */
joachim99@8 809 void OptionDialog::slotDefault()
joachim99@8 810 {
joachim99@8 811 int result = KMessageBox::warningContinueCancel(this, i18n("This resets all options. Not only those of the current topic.") );
joachim99@8 812 if ( result==KMessageBox::Cancel ) return;
joachim99@8 813 else resetToDefaults();
joachim99@8 814 }
joachim99@8 815
joachim99@8 816 void OptionDialog::resetToDefaults()
joachim99@8 817 {
joachim99@8 818 std::list<OptionItem*>::iterator i;
joachim99@8 819 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
joachim99@8 820 {
joachim99@8 821 (*i)->setToDefault();
joachim99@8 822 }
joachim99@8 823
joachim99@30 824 #ifdef _WIN32
joachim99@30 825 m_fontChooser->setFont( QFont("Courier New", 10 ), true /*only fixed*/ );
joachim99@30 826 #else
joachim99@8 827 m_fontChooser->setFont( QFont("Courier", 10 ), true /*only fixed*/ );
joachim99@30 828 #endif
joachim99@8 829 }
joachim99@8 830
joachim99@8 831 /** Initialise the widgets using the values in the public varibles. */
joachim99@8 832 void OptionDialog::setState()
joachim99@8 833 {
joachim99@8 834 std::list<OptionItem*>::iterator i;
joachim99@8 835 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
joachim99@8 836 {
joachim99@8 837 (*i)->setToCurrent();
joachim99@8 838 }
joachim99@8 839
joachim99@8 840 m_fontChooser->setFont( m_font, true /*only fixed*/ );
joachim99@8 841 }
joachim99@8 842
joachim99@8 843 void OptionDialog::saveOptions( KConfig* config )
joachim99@8 844 {
joachim99@8 845 // No i18n()-Translations here!
joachim99@8 846
joachim99@8 847 config->setGroup("KDiff3 Options");
joachim99@8 848
joachim99@8 849 std::list<OptionItem*>::iterator i;
joachim99@8 850 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
joachim99@8 851 {
joachim99@8 852 (*i)->write(config);
joachim99@8 853 }
joachim99@8 854
joachim99@8 855 // FontConfigDlg
joachim99@8 856 config->writeEntry("Font", m_font );
joachim99@8 857
joachim99@8 858 // Recent files (selectable in the OpenDialog)
joachim99@8 859 config->writeEntry( "RecentAFiles", m_recentAFiles, '|' );
joachim99@8 860 config->writeEntry( "RecentBFiles", m_recentBFiles, '|' );
joachim99@8 861 config->writeEntry( "RecentCFiles", m_recentCFiles, '|' );
joachim99@8 862 config->writeEntry( "RecentOutputFiles", m_recentOutputFiles, '|' );
joachim99@8 863 }
joachim99@8 864
joachim99@8 865 void OptionDialog::readOptions( KConfig* config )
joachim99@8 866 {
joachim99@8 867 // No i18n()-Translations here!
joachim99@8 868
joachim99@8 869 config->setGroup("KDiff3 Options");
joachim99@8 870
joachim99@8 871 std::list<OptionItem*>::iterator i;
joachim99@8 872
joachim99@8 873 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
joachim99@8 874 {
joachim99@8 875 (*i)->read(config);
joachim99@8 876 }
joachim99@8 877
joachim99@8 878 // Use the current values as default settings.
joachim99@8 879
joachim99@8 880 // FontConfigDlg
joachim99@8 881 m_font = config->readFontEntry( "Font", &m_font);
joachim99@8 882
joachim99@8 883 // Recent files (selectable in the OpenDialog)
joachim99@8 884 m_recentAFiles = config->readListEntry( "RecentAFiles", '|' );
joachim99@8 885 m_recentBFiles = config->readListEntry( "RecentBFiles", '|' );
joachim99@8 886 m_recentCFiles = config->readListEntry( "RecentCFiles", '|' );
joachim99@8 887 m_recentOutputFiles = config->readListEntry( "RecentOutputFiles", '|' );
joachim99@8 888
joachim99@8 889 setState();
joachim99@8 890 }
joachim99@8 891
joachim99@8 892 void OptionDialog::slotHelp( void )
joachim99@8 893 {
joachim99@8 894 KDialogBase::slotHelp();
joachim99@8 895 }
joachim99@8 896
joachim99@8 897
joachim99@58 898
joachim99@8 899 #include "optiondialog.moc"