annotate kdiff3/src/optiondialog.cpp @ 66:efe33e938730

0.9.86
author joachim99
date Thu, 16 Sep 2004 02:40:08 +0000
parents 8af4bb9d9a5a
children d7cafcda8c99
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@66 32 #include <qradiobutton.h>
joachim99@66 33 #include <qvbuttongroup.h>
joachim99@8 34
joachim99@8 35 #include <kapplication.h>
joachim99@8 36 #include <kcolorbtn.h>
joachim99@8 37 #include <kfontdialog.h> // For KFontChooser
joachim99@8 38 #include <kiconloader.h>
joachim99@8 39 #include <klocale.h>
joachim99@8 40 #include <kconfig.h>
joachim99@8 41 #include <kmessagebox.h>
joachim99@8 42 //#include <kkeydialog.h>
joachim99@58 43 #include <map>
joachim99@8 44
joachim99@8 45 #include "optiondialog.h"
joachim99@8 46 #include "diff.h"
joachim99@8 47
joachim99@66 48 #ifndef KREPLACEMENTS_H
joachim99@66 49 #include <kglobalsettings.h>
joachim99@66 50 #endif
joachim99@66 51
joachim99@8 52 void OptionDialog::addOptionItem(OptionItem* p)
joachim99@8 53 {
joachim99@8 54 m_optionItemList.push_back(p);
joachim99@8 55 }
joachim99@8 56
joachim99@8 57 class OptionItem
joachim99@8 58 {
joachim99@8 59 public:
joachim99@8 60 OptionItem( OptionDialog* pOptionDialog, QString saveName )
joachim99@8 61 {
joachim99@8 62 assert(pOptionDialog!=0);
joachim99@8 63 pOptionDialog->addOptionItem( this );
joachim99@8 64 m_saveName = saveName;
joachim99@8 65 }
joachim99@8 66 virtual ~OptionItem(){}
joachim99@8 67 virtual void setToDefault()=0;
joachim99@8 68 virtual void setToCurrent()=0;
joachim99@8 69 virtual void apply()=0;
joachim99@8 70 virtual void write(KConfig*)=0;
joachim99@8 71 virtual void read(KConfig*)=0;
joachim99@8 72 protected:
joachim99@8 73 QString m_saveName;
joachim99@8 74 };
joachim99@8 75
joachim99@8 76 class OptionCheckBox : public QCheckBox, public OptionItem
joachim99@8 77 {
joachim99@8 78 public:
joachim99@8 79 OptionCheckBox( QString text, bool bDefaultVal, const QString& saveName, bool* pbVar,
joachim99@8 80 QWidget* pParent, OptionDialog* pOD )
joachim99@8 81 : QCheckBox( text, pParent ), OptionItem( pOD, saveName )
joachim99@8 82 {
joachim99@8 83 m_pbVar = pbVar;
joachim99@8 84 m_bDefaultVal = bDefaultVal;
joachim99@8 85 }
joachim99@8 86 void setToDefault(){ setChecked( m_bDefaultVal ); }
joachim99@8 87 void setToCurrent(){ setChecked( *m_pbVar ); }
joachim99@8 88 void apply() { *m_pbVar = isChecked(); }
joachim99@8 89 void write(KConfig* config){ config->writeEntry(m_saveName, *m_pbVar ); }
joachim99@8 90 void read (KConfig* config){ *m_pbVar = config->readBoolEntry( m_saveName, *m_pbVar ); }
joachim99@8 91 private:
joachim99@8 92 OptionCheckBox( const OptionCheckBox& ); // private copy constructor without implementation
joachim99@8 93 bool* m_pbVar;
joachim99@8 94 bool m_bDefaultVal;
joachim99@8 95 };
joachim99@8 96
joachim99@66 97 class OptionRadioButton : public QRadioButton, public OptionItem
joachim99@66 98 {
joachim99@66 99 public:
joachim99@66 100 OptionRadioButton( QString text, bool bDefaultVal, const QString& saveName, bool* pbVar,
joachim99@66 101 QWidget* pParent, OptionDialog* pOD )
joachim99@66 102 : QRadioButton( text, pParent ), OptionItem( pOD, saveName )
joachim99@66 103 {
joachim99@66 104 m_pbVar = pbVar;
joachim99@66 105 m_bDefaultVal = bDefaultVal;
joachim99@66 106 }
joachim99@66 107 void setToDefault(){ setChecked( m_bDefaultVal ); }
joachim99@66 108 void setToCurrent(){ setChecked( *m_pbVar ); }
joachim99@66 109 void apply() { *m_pbVar = isChecked(); }
joachim99@66 110 void write(KConfig* config){ config->writeEntry(m_saveName, *m_pbVar ); }
joachim99@66 111 void read (KConfig* config){ *m_pbVar = config->readBoolEntry( m_saveName, *m_pbVar ); }
joachim99@66 112 private:
joachim99@66 113 OptionRadioButton( const OptionRadioButton& ); // private copy constructor without implementation
joachim99@66 114 bool* m_pbVar;
joachim99@66 115 bool m_bDefaultVal;
joachim99@66 116 };
joachim99@66 117
joachim99@51 118 class OptionToggleAction : public OptionItem
joachim99@51 119 {
joachim99@51 120 public:
joachim99@51 121 OptionToggleAction( bool bDefaultVal, const QString& saveName, bool* pbVar, OptionDialog* pOD )
joachim99@51 122 : OptionItem( pOD, saveName )
joachim99@51 123 {
joachim99@51 124 m_pbVar = pbVar;
joachim99@51 125 *m_pbVar = bDefaultVal;
joachim99@51 126 }
joachim99@51 127 void setToDefault(){}
joachim99@51 128 void setToCurrent(){}
joachim99@51 129 void apply() {}
joachim99@51 130 void write(KConfig* config){ config->writeEntry(m_saveName, *m_pbVar ); }
joachim99@51 131 void read (KConfig* config){ *m_pbVar = config->readBoolEntry( m_saveName, *m_pbVar ); }
joachim99@51 132 private:
joachim99@51 133 OptionToggleAction( const OptionToggleAction& ); // private copy constructor without implementation
joachim99@51 134 bool* m_pbVar;
joachim99@51 135 };
joachim99@51 136
joachim99@51 137
joachim99@8 138 class OptionColorButton : public KColorButton, public OptionItem
joachim99@8 139 {
joachim99@8 140 public:
joachim99@8 141 OptionColorButton( QColor defaultVal, const QString& saveName, QColor* pVar, QWidget* pParent, OptionDialog* pOD )
joachim99@8 142 : KColorButton( pParent ), OptionItem( pOD, saveName )
joachim99@8 143 {
joachim99@8 144 m_pVar = pVar;
joachim99@8 145 m_defaultVal = defaultVal;
joachim99@8 146 }
joachim99@8 147 void setToDefault(){ setColor( m_defaultVal ); }
joachim99@8 148 void setToCurrent(){ setColor( *m_pVar ); }
joachim99@8 149 void apply() { *m_pVar = color(); }
joachim99@8 150 void write(KConfig* config){ config->writeEntry(m_saveName, *m_pVar ); }
joachim99@8 151 void read (KConfig* config){ *m_pVar = config->readColorEntry( m_saveName, m_pVar ); }
joachim99@8 152 private:
joachim99@8 153 OptionColorButton( const OptionColorButton& ); // private copy constructor without implementation
joachim99@8 154 QColor* m_pVar;
joachim99@8 155 QColor m_defaultVal;
joachim99@8 156 };
joachim99@8 157
joachim99@58 158 class OptionLineEdit : public QComboBox, public OptionItem
joachim99@8 159 {
joachim99@8 160 public:
joachim99@8 161 OptionLineEdit( const QString& defaultVal, const QString& saveName, QString* pVar,
joachim99@8 162 QWidget* pParent, OptionDialog* pOD )
joachim99@58 163 : QComboBox( pParent ), OptionItem( pOD, saveName )
joachim99@8 164 {
joachim99@8 165 m_pVar = pVar;
joachim99@8 166 m_defaultVal = defaultVal;
joachim99@58 167 m_list.push_back(defaultVal);
joachim99@58 168 setEditable(true);
joachim99@8 169 }
joachim99@58 170 void setToDefault(){ setCurrentText( m_defaultVal ); }
joachim99@58 171 void setToCurrent(){ setCurrentText( *m_pVar ); }
joachim99@58 172 void apply() { *m_pVar = currentText(); insertText(); }
joachim99@58 173 void write(KConfig* config){ config->writeEntry( m_saveName, m_list, '|' ); }
joachim99@58 174 void read (KConfig* config){
joachim99@58 175 m_list = config->readListEntry( m_saveName, '|' );
joachim99@58 176 if ( !m_list.isEmpty() ) *m_pVar = m_list.front();
joachim99@58 177 clear();
joachim99@58 178 insertStringList(m_list);
joachim99@58 179 }
joachim99@8 180 private:
joachim99@58 181 void insertText()
joachim99@58 182 { // Check if the text exists. If yes remove it and
joachim99@58 183 QString current = currentText();
joachim99@58 184 m_list.remove( current );
joachim99@58 185 m_list.push_front( current );
joachim99@58 186 clear();
joachim99@58 187 if ( m_list.count()>10 ) m_list.erase( m_list.at(10), m_list.end() );
joachim99@58 188 insertStringList(m_list);
joachim99@58 189 }
joachim99@8 190 OptionLineEdit( const OptionLineEdit& ); // private copy constructor without implementation
joachim99@8 191 QString* m_pVar;
joachim99@8 192 QString m_defaultVal;
joachim99@58 193 QStringList m_list;
joachim99@8 194 };
joachim99@8 195
joachim99@8 196 #if defined QT_NO_VALIDATOR
joachim99@8 197 #error No validator
joachim99@8 198 #endif
joachim99@8 199 class OptionIntEdit : public QLineEdit, public OptionItem
joachim99@8 200 {
joachim99@8 201 public:
joachim99@8 202 OptionIntEdit( int defaultVal, const QString& saveName, int* pVar, int rangeMin, int rangeMax,
joachim99@8 203 QWidget* pParent, OptionDialog* pOD )
joachim99@8 204 : QLineEdit( pParent ), OptionItem( pOD, saveName )
joachim99@8 205 {
joachim99@8 206 m_pVar = pVar;
joachim99@8 207 m_defaultVal = defaultVal;
joachim99@51 208 QIntValidator* v = new QIntValidator(this);
joachim99@8 209 v->setRange( rangeMin, rangeMax );
joachim99@8 210 setValidator( v );
joachim99@8 211 }
joachim99@8 212 void setToDefault(){ QString s; s.setNum(m_defaultVal); setText( s ); }
joachim99@8 213 void setToCurrent(){ QString s; s.setNum(*m_pVar); setText( s ); }
joachim99@8 214 void apply() { const QIntValidator* v=static_cast<const QIntValidator*>(validator());
joachim99@8 215 *m_pVar = minMaxLimiter( text().toInt(), v->bottom(), v->top());
joachim99@8 216 setText( QString::number(*m_pVar) ); }
joachim99@8 217 void write(KConfig* config){ config->writeEntry(m_saveName, *m_pVar ); }
joachim99@8 218 void read (KConfig* config){ *m_pVar = config->readNumEntry( m_saveName, *m_pVar ); }
joachim99@8 219 private:
joachim99@8 220 OptionIntEdit( const OptionIntEdit& ); // private copy constructor without implementation
joachim99@8 221 int* m_pVar;
joachim99@8 222 int m_defaultVal;
joachim99@8 223 };
joachim99@8 224
joachim99@51 225 class OptionComboBox : public QComboBox, public OptionItem
joachim99@51 226 {
joachim99@51 227 public:
joachim99@58 228 OptionComboBox( int defaultVal, const QString& saveName, int* pVarNum,
joachim99@51 229 QWidget* pParent, OptionDialog* pOD )
joachim99@51 230 : QComboBox( pParent ), OptionItem( pOD, saveName )
joachim99@51 231 {
joachim99@58 232 m_pVarNum = pVarNum;
joachim99@58 233 m_pVarStr = 0;
joachim99@51 234 m_defaultVal = defaultVal;
joachim99@51 235 setEditable(false);
joachim99@51 236 }
joachim99@58 237 OptionComboBox( int defaultVal, const QString& saveName, QString* pVarStr,
joachim99@58 238 QWidget* pParent, OptionDialog* pOD )
joachim99@58 239 : QComboBox( pParent ), OptionItem( pOD, saveName )
joachim99@58 240 {
joachim99@58 241 m_pVarNum = 0;
joachim99@58 242 m_pVarStr = pVarStr;
joachim99@58 243 m_defaultVal = defaultVal;
joachim99@58 244 setEditable(false);
joachim99@58 245 }
joachim99@58 246 void setToDefault()
joachim99@58 247 {
joachim99@58 248 setCurrentItem( m_defaultVal );
joachim99@58 249 if (m_pVarStr!=0){ *m_pVarStr=currentText(); }
joachim99@58 250 }
joachim99@58 251 void setToCurrent()
joachim99@58 252 {
joachim99@58 253 if (m_pVarNum!=0) setCurrentItem( *m_pVarNum );
joachim99@58 254 else setText( *m_pVarStr );
joachim99@58 255 }
joachim99@58 256 void apply()
joachim99@58 257 {
joachim99@58 258 if (m_pVarNum!=0){ *m_pVarNum = currentItem(); }
joachim99@58 259 else { *m_pVarStr = currentText(); }
joachim99@58 260 }
joachim99@58 261 void write(KConfig* config)
joachim99@58 262 {
joachim99@58 263 if (m_pVarStr!=0) config->writeEntry(m_saveName, *m_pVarStr );
joachim99@58 264 else config->writeEntry(m_saveName, *m_pVarNum );
joachim99@58 265 }
joachim99@58 266 void read (KConfig* config)
joachim99@58 267 {
joachim99@58 268 if (m_pVarStr!=0) setText( config->readEntry( m_saveName, currentText() ) );
joachim99@58 269 else *m_pVarNum = config->readNumEntry( m_saveName, *m_pVarNum );
joachim99@58 270 }
joachim99@51 271 private:
joachim99@51 272 OptionComboBox( const OptionIntEdit& ); // private copy constructor without implementation
joachim99@58 273 int* m_pVarNum;
joachim99@58 274 QString* m_pVarStr;
joachim99@51 275 int m_defaultVal;
joachim99@58 276
joachim99@58 277 void setText(const QString& s)
joachim99@58 278 {
joachim99@58 279 // Find the string in the combobox-list, don't change the value if nothing fits.
joachim99@58 280 for( int i=0; i<count(); ++i )
joachim99@58 281 {
joachim99@58 282 if ( text(i)==s )
joachim99@58 283 {
joachim99@58 284 if (m_pVarNum!=0) *m_pVarNum = i;
joachim99@58 285 if (m_pVarStr!=0) *m_pVarStr = s;
joachim99@58 286 setCurrentItem(i);
joachim99@58 287 return;
joachim99@58 288 }
joachim99@58 289 }
joachim99@58 290 }
joachim99@51 291 };
joachim99@8 292
joachim99@8 293 OptionDialog::OptionDialog( bool bShowDirMergeSettings, QWidget *parent, char *name )
joachim99@8 294 :KDialogBase( IconList, i18n("Configure"), Help|Default|Apply|Ok|Cancel,
joachim99@8 295 Ok, parent, name, true /*modal*/, true )
joachim99@8 296 {
joachim99@8 297 setHelp( "kdiff3/index.html", QString::null );
joachim99@8 298
joachim99@8 299 setupFontPage();
joachim99@8 300 setupColorPage();
joachim99@8 301 setupEditPage();
joachim99@8 302 setupDiffPage();
joachim99@51 303 setupOtherOptions();
joachim99@8 304 if (bShowDirMergeSettings)
joachim99@8 305 setupDirectoryMergePage();
joachim99@58 306
joachim99@66 307 #ifdef KREPLACEMENTS_H
joachim99@66 308 setupRegionalPage();
joachim99@66 309 #endif
joachim99@58 310
joachim99@8 311 //setupKeysPage();
joachim99@8 312
joachim99@8 313 // Initialize all values in the dialog
joachim99@8 314 resetToDefaults();
joachim99@8 315 slotApply();
joachim99@8 316 }
joachim99@8 317
joachim99@8 318 OptionDialog::~OptionDialog( void )
joachim99@8 319 {
joachim99@8 320 }
joachim99@8 321
joachim99@51 322 void OptionDialog::setupOtherOptions()
joachim99@51 323 {
joachim99@51 324 new OptionToggleAction( false, "AutoAdvance", &m_bAutoAdvance, this );
joachim99@51 325 new OptionToggleAction( true, "ShowWhiteSpaceCharacters", &m_bShowWhiteSpaceCharacters, this );
joachim99@51 326 new OptionToggleAction( true, "ShowWhiteSpace", &m_bShowWhiteSpace, this );
joachim99@51 327 new OptionToggleAction( false, "ShowLineNumbers", &m_bShowLineNumbers, this );
joachim99@51 328 new OptionToggleAction( true, "HorizDiffWindowSplitting", &m_bHorizDiffWindowSplitting, this );
joachim99@66 329 new OptionToggleAction( false, "WordWrap", &m_bWordWrap, this );
joachim99@51 330 }
joachim99@8 331
joachim99@8 332 void OptionDialog::setupFontPage( void )
joachim99@8 333 {
joachim99@51 334 QFrame *page = addPage( i18n("Font"), i18n("Editor & Diff Output Font" ),
joachim99@8 335 BarIcon("fonts", KIcon::SizeMedium ) );
joachim99@8 336
joachim99@8 337 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@51 338
joachim99@8 339 m_fontChooser = new KFontChooser( page,"font",true/*onlyFixed*/,QStringList(),false,6 );
joachim99@8 340 topLayout->addWidget( m_fontChooser );
joachim99@8 341
joachim99@8 342 QGridLayout *gbox = new QGridLayout( 1, 2 );
joachim99@8 343 topLayout->addLayout( gbox );
joachim99@8 344 int line=0;
joachim99@8 345
joachim99@51 346 OptionCheckBox* pItalicDeltas = new OptionCheckBox( i18n("Italic font for deltas"), false, "ItalicForDeltas", &m_bItalicForDeltas, page, this );
joachim99@8 347 gbox->addMultiCellWidget( pItalicDeltas, line, line, 0, 1 );
joachim99@8 348 QToolTip::add( pItalicDeltas, i18n(
joachim99@8 349 "Selects the italic version of the font for differences.\n"
joachim99@8 350 "If the font doesn't support italic characters, then this does nothing.")
joachim99@8 351 );
joachim99@8 352 }
joachim99@8 353
joachim99@8 354
joachim99@8 355 void OptionDialog::setupColorPage( void )
joachim99@8 356 {
joachim99@51 357 QFrame *page = addPage( i18n("Color"), i18n("Colors in Editor & Diff Output"),
joachim99@8 358 BarIcon("colorize", KIcon::SizeMedium ) );
joachim99@8 359 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@8 360
joachim99@8 361 QGridLayout *gbox = new QGridLayout( 7, 2 );
joachim99@8 362 topLayout->addLayout(gbox);
joachim99@8 363
joachim99@8 364 QLabel* label;
joachim99@8 365 int line = 0;
joachim99@8 366
joachim99@8 367 int depth = QColor::numBitPlanes();
joachim99@8 368 bool bLowColor = depth<=8;
joachim99@8 369
joachim99@8 370 OptionColorButton* pFgColor = new OptionColorButton( black,"FgColor", &m_fgColor, page, this );
joachim99@8 371 label = new QLabel( pFgColor, i18n("Foreground color:"), page );
joachim99@8 372 gbox->addWidget( label, line, 0 );
joachim99@8 373 gbox->addWidget( pFgColor, line, 1 );
joachim99@8 374 ++line;
joachim99@8 375
joachim99@8 376 OptionColorButton* pBgColor = new OptionColorButton( white, "BgColor", &m_bgColor, page, this );
joachim99@8 377 label = new QLabel( pBgColor, i18n("Background color:"), page );
joachim99@8 378 gbox->addWidget( label, line, 0 );
joachim99@8 379 gbox->addWidget( pBgColor, line, 1 );
joachim99@8 380
joachim99@8 381 ++line;
joachim99@8 382
joachim99@8 383 OptionColorButton* pDiffBgColor = new OptionColorButton( lightGray, "DiffBgColor", &m_diffBgColor, page, this );
joachim99@8 384 label = new QLabel( pDiffBgColor, i18n("Diff background color:"), page );
joachim99@8 385 gbox->addWidget( label, line, 0 );
joachim99@8 386 gbox->addWidget( pDiffBgColor, line, 1 );
joachim99@8 387 ++line;
joachim99@8 388
joachim99@8 389 OptionColorButton* pColorA = new OptionColorButton(
joachim99@8 390 bLowColor ? qRgb(0,0,255) : qRgb(0,0,200)/*blue*/, "ColorA", &m_colorA, page, this );
joachim99@8 391 label = new QLabel( pColorA, i18n("Color A:"), page );
joachim99@8 392 gbox->addWidget( label, line, 0 );
joachim99@8 393 gbox->addWidget( pColorA, line, 1 );
joachim99@8 394 ++line;
joachim99@8 395
joachim99@8 396 OptionColorButton* pColorB = new OptionColorButton(
joachim99@8 397 bLowColor ? qRgb(0,128,0) : qRgb(0,150,0)/*green*/, "ColorB", &m_colorB, page, this );
joachim99@8 398 label = new QLabel( pColorB, i18n("Color B:"), page );
joachim99@8 399 gbox->addWidget( label, line, 0 );
joachim99@8 400 gbox->addWidget( pColorB, line, 1 );
joachim99@8 401 ++line;
joachim99@8 402
joachim99@8 403 OptionColorButton* pColorC = new OptionColorButton(
joachim99@8 404 bLowColor ? qRgb(128,0,128) : qRgb(150,0,150)/*magenta*/, "ColorC", &m_colorC, page, this );
joachim99@8 405 label = new QLabel( pColorC, i18n("Color C:"), page );
joachim99@8 406 gbox->addWidget( label, line, 0 );
joachim99@8 407 gbox->addWidget( pColorC, line, 1 );
joachim99@8 408 ++line;
joachim99@8 409
joachim99@8 410 OptionColorButton* pColorForConflict = new OptionColorButton( red, "ColorForConflict", &m_colorForConflict, page, this );
joachim99@51 411 label = new QLabel( pColorForConflict, i18n("Conflict color:"), page );
joachim99@8 412 gbox->addWidget( label, line, 0 );
joachim99@8 413 gbox->addWidget( pColorForConflict, line, 1 );
joachim99@8 414 ++line;
joachim99@8 415
joachim99@8 416 OptionColorButton* pColor = new OptionColorButton(
joachim99@8 417 bLowColor ? qRgb(192,192,192) : qRgb(220,220,100), "CurrentRangeBgColor", &m_currentRangeBgColor, page, this );
joachim99@8 418 label = new QLabel( pColor, i18n("Current range background color:"), page );
joachim99@8 419 gbox->addWidget( label, line, 0 );
joachim99@8 420 gbox->addWidget( pColor, line, 1 );
joachim99@8 421 ++line;
joachim99@8 422
joachim99@8 423 pColor = new OptionColorButton(
joachim99@8 424 bLowColor ? qRgb(255,255,0) : qRgb(255,255,150), "CurrentRangeDiffBgColor", &m_currentRangeDiffBgColor, page, this );
joachim99@8 425 label = new QLabel( pColor, i18n("Current range diff background color:"), page );
joachim99@8 426 gbox->addWidget( label, line, 0 );
joachim99@8 427 gbox->addWidget( pColor, line, 1 );
joachim99@8 428 ++line;
joachim99@8 429
joachim99@8 430 topLayout->addStretch(10);
joachim99@8 431 }
joachim99@8 432
joachim99@8 433
joachim99@8 434 void OptionDialog::setupEditPage( void )
joachim99@8 435 {
joachim99@51 436 QFrame *page = addPage( i18n("Editor"), i18n("Editor Behaviour"),
joachim99@8 437 BarIcon("edit", KIcon::SizeMedium ) );
joachim99@8 438 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@8 439
joachim99@8 440 QGridLayout *gbox = new QGridLayout( 4, 2 );
joachim99@8 441 topLayout->addLayout( gbox );
joachim99@8 442 QLabel* label;
joachim99@8 443 int line=0;
joachim99@8 444
joachim99@8 445 OptionCheckBox* pReplaceTabs = new OptionCheckBox( i18n("Tab inserts spaces"), false, "ReplaceTabs", &m_bReplaceTabs, page, this );
joachim99@8 446 gbox->addMultiCellWidget( pReplaceTabs, line, line, 0, 1 );
joachim99@8 447 QToolTip::add( pReplaceTabs, i18n(
joachim99@8 448 "On: Pressing tab generates the appropriate number of spaces.\n"
joachim99@8 449 "Off: A Tab-character will be inserted.")
joachim99@8 450 );
joachim99@8 451 ++line;
joachim99@8 452
joachim99@8 453 OptionIntEdit* pTabSize = new OptionIntEdit( 8, "TabSize", &m_tabSize, 1, 100, page, this );
joachim99@8 454 label = new QLabel( pTabSize, i18n("Tab size:"), page );
joachim99@8 455 gbox->addWidget( label, line, 0 );
joachim99@8 456 gbox->addWidget( pTabSize, line, 1 );
joachim99@8 457 ++line;
joachim99@8 458
joachim99@51 459 OptionCheckBox* pAutoIndentation = new OptionCheckBox( i18n("Auto indentation"), true, "AutoIndentation", &m_bAutoIndentation, page, this );
joachim99@8 460 gbox->addMultiCellWidget( pAutoIndentation, line, line, 0, 1 );
joachim99@8 461 QToolTip::add( pAutoIndentation, i18n(
joachim99@8 462 "On: The indentation of the previous line is used for a new line.\n"
joachim99@8 463 ));
joachim99@8 464 ++line;
joachim99@8 465
joachim99@51 466 OptionCheckBox* pAutoCopySelection = new OptionCheckBox( i18n("Auto copy selection"), false, "AutoCopySelection", &m_bAutoCopySelection, page, this );
joachim99@8 467 gbox->addMultiCellWidget( pAutoCopySelection, line, line, 0, 1 );
joachim99@8 468 QToolTip::add( pAutoCopySelection, i18n(
joachim99@8 469 "On: Any selection is immediately written to the clipboard.\n"
joachim99@8 470 "Off: You must explicitely copy e.g. via Ctrl-C."
joachim99@8 471 ));
joachim99@8 472 ++line;
joachim99@58 473
joachim99@58 474 label = new QLabel( i18n("Line End Style:"), page );
joachim99@58 475 gbox->addWidget( label, line, 0 );
joachim99@58 476 #ifdef _WIN32
joachim99@58 477 int defaultLineEndStyle = eLineEndDos;
joachim99@58 478 #else
joachim99@58 479 int defaultLineEndStyle = eLineEndUnix;
joachim99@58 480 #endif
joachim99@58 481 OptionComboBox* pLineEndStyle = new OptionComboBox( defaultLineEndStyle, "LineEndStyle", &m_lineEndStyle, page, this );
joachim99@58 482 gbox->addWidget( pLineEndStyle, line, 1 );
joachim99@58 483 pLineEndStyle->insertItem( "Unix", eLineEndUnix );
joachim99@58 484 pLineEndStyle->insertItem( "Dos/Windows", eLineEndDos );
joachim99@58 485 QToolTip::add( label, i18n(
joachim99@58 486 "Sets the line endings for when a edited file is saved.\n"
joachim99@58 487 "DOS/Windows: CR+LF; Unix: LF; with CR=0D, LF=0A")
joachim99@58 488 );
joachim99@58 489 ++line;
joachim99@58 490
joachim99@51 491 OptionCheckBox* pStringEncoding = new OptionCheckBox( i18n("Use locale encoding"), true, "LocaleEncoding", &m_bStringEncoding, page, this );
joachim99@51 492 gbox->addMultiCellWidget( pStringEncoding, line, line, 0, 1 );
joachim99@51 493 QToolTip::add( pStringEncoding, i18n(
joachim99@66 494 "Change this if non-ASCII characters are not displayed correctly."
joachim99@51 495 ));
joachim99@51 496 ++line;
joachim99@51 497
joachim99@8 498 topLayout->addStretch(10);
joachim99@8 499 }
joachim99@8 500
joachim99@8 501
joachim99@8 502 void OptionDialog::setupDiffPage( void )
joachim99@8 503 {
joachim99@51 504 QFrame *page = addPage( i18n("Diff & Merge"), i18n("Diff & Merge Settings"),
joachim99@8 505 BarIcon("misc", KIcon::SizeMedium ) );
joachim99@8 506 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@8 507
joachim99@8 508 QGridLayout *gbox = new QGridLayout( 3, 2 );
joachim99@8 509 topLayout->addLayout( gbox );
joachim99@8 510 int line=0;
joachim99@8 511
joachim99@51 512 QLabel* label=0;
joachim99@51 513
joachim99@51 514 OptionCheckBox* pPreserveCarriageReturn = new OptionCheckBox( i18n("Preserve carriage return"), false, "PreserveCarriageReturn", &m_bPreserveCarriageReturn, page, this );
joachim99@51 515 gbox->addMultiCellWidget( pPreserveCarriageReturn, line, line, 0, 1 );
joachim99@51 516 QToolTip::add( pPreserveCarriageReturn, i18n(
joachim99@51 517 "Show carriage return characters '\\r' if they exist.\n"
joachim99@51 518 "Helps to compare files that were modified under different operating systems.")
joachim99@8 519 );
joachim99@8 520 ++line;
joachim99@8 521
joachim99@51 522 OptionCheckBox* pIgnoreNumbers = new OptionCheckBox( i18n("Ignore numbers"), false, "IgnoreNumbers", &m_bIgnoreNumbers, page, this );
joachim99@51 523 gbox->addMultiCellWidget( pIgnoreNumbers, line, line, 0, 1 );
joachim99@51 524 QToolTip::add( pIgnoreNumbers, i18n(
joachim99@51 525 "Ignore number characters during line matching phase. (Similar to Ignore white space.)\n"
joachim99@51 526 "Might help to compare files with numeric data.")
joachim99@8 527 );
joachim99@8 528 ++line;
joachim99@8 529
joachim99@51 530 OptionCheckBox* pIgnoreComments = new OptionCheckBox( i18n("Ignore C/C++ Comments"), false, "IgnoreComments", &m_bIgnoreComments, page, this );
joachim99@51 531 gbox->addMultiCellWidget( pIgnoreComments, line, line, 0, 1 );
joachim99@51 532 QToolTip::add( pIgnoreComments, i18n( "Treat C/C++ comments like white space.")
joachim99@8 533 );
joachim99@8 534 ++line;
joachim99@8 535
joachim99@66 536 OptionCheckBox* pIgnoreCase = new OptionCheckBox( i18n("Ignore case"), false, "IgnoreCase", &m_bIgnoreCase, page, this );
joachim99@66 537 gbox->addMultiCellWidget( pIgnoreCase, line, line, 0, 1 );
joachim99@66 538 QToolTip::add( pIgnoreCase, i18n(
joachim99@66 539 "Treat case differences like white space changes. ('a'<=>'A')")
joachim99@8 540 );
joachim99@8 541 ++line;
joachim99@8 542
joachim99@51 543 label = new QLabel( i18n("Preprocessor command:"), page );
joachim99@8 544 gbox->addWidget( label, line, 0 );
joachim99@8 545 OptionLineEdit* pLE = new OptionLineEdit( "", "PreProcessorCmd", &m_PreProcessorCmd, page, this );
joachim99@8 546 gbox->addWidget( pLE, line, 1 );
joachim99@8 547 QToolTip::add( label, i18n("User defined pre-processing. (See the docs for details.)") );
joachim99@8 548 ++line;
joachim99@8 549
joachim99@51 550 label = new QLabel( i18n("Line-matching preprocessor command:"), page );
joachim99@8 551 gbox->addWidget( label, line, 0 );
joachim99@8 552 pLE = new OptionLineEdit( "", "LineMatchingPreProcessorCmd", &m_LineMatchingPreProcessorCmd, page, this );
joachim99@8 553 gbox->addWidget( pLE, line, 1 );
joachim99@8 554 QToolTip::add( label, i18n("This pre-processor is only used during line matching.\n(See the docs for details.)") );
joachim99@8 555 ++line;
joachim99@8 556
joachim99@51 557 OptionCheckBox* pTryHard = new OptionCheckBox( i18n("Try hard (slower)"), true, "TryHard", &m_bTryHard, page, this );
joachim99@51 558 gbox->addMultiCellWidget( pTryHard, line, line, 0, 1 );
joachim99@51 559 QToolTip::add( pTryHard, i18n(
joachim99@51 560 "Enables the --minimal option for the external diff.\n"
joachim99@51 561 "The analysis of big files will be much slower.")
joachim99@8 562 );
joachim99@8 563 ++line;
joachim99@8 564
joachim99@51 565 label = new QLabel( i18n("Auto advance delay (ms):"), page );
joachim99@8 566 gbox->addWidget( label, line, 0 );
joachim99@8 567 OptionIntEdit* pAutoAdvanceDelay = new OptionIntEdit( 500, "AutoAdvanceDelay", &m_autoAdvanceDelay, 0, 2000, page, this );
joachim99@8 568 gbox->addWidget( pAutoAdvanceDelay, line, 1 );
joachim99@8 569 QToolTip::add( label,i18n(
joachim99@8 570 "When in Auto-Advance mode the result of the current selection is shown \n"
joachim99@8 571 "for the specified time, before jumping to the next conflict. Range: 0-2000 ms")
joachim99@8 572 );
joachim99@8 573 ++line;
joachim99@8 574
joachim99@51 575 label = new QLabel( i18n("White space 2-file merge default:"), page );
joachim99@51 576 gbox->addWidget( label, line, 0 );
joachim99@51 577 OptionComboBox* pWhiteSpace2FileMergeDefault = new OptionComboBox( 0, "WhiteSpace2FileMergeDefault", &m_whiteSpace2FileMergeDefault, page, this );
joachim99@51 578 gbox->addWidget( pWhiteSpace2FileMergeDefault, line, 1 );
joachim99@51 579 pWhiteSpace2FileMergeDefault->insertItem( i18n("Manual choice"), 0 );
joachim99@51 580 pWhiteSpace2FileMergeDefault->insertItem( "A", 1 );
joachim99@51 581 pWhiteSpace2FileMergeDefault->insertItem( "B", 2 );
joachim99@58 582 QToolTip::add( label, i18n(
joachim99@51 583 "Allow the merge algorithm to automatically select an input for "
joachim99@51 584 "white-space-only changes." )
joachim99@51 585 );
joachim99@51 586 ++line;
joachim99@51 587
joachim99@51 588 label = new QLabel( i18n("White space 3-file merge default:"), page );
joachim99@51 589 gbox->addWidget( label, line, 0 );
joachim99@51 590 OptionComboBox* pWhiteSpace3FileMergeDefault = new OptionComboBox( 0, "WhiteSpace3FileMergeDefault", &m_whiteSpace3FileMergeDefault, page, this );
joachim99@51 591 gbox->addWidget( pWhiteSpace3FileMergeDefault, line, 1 );
joachim99@51 592 pWhiteSpace3FileMergeDefault->insertItem( i18n("Manual choice"), 0 );
joachim99@51 593 pWhiteSpace3FileMergeDefault->insertItem( "A", 1 );
joachim99@51 594 pWhiteSpace3FileMergeDefault->insertItem( "B", 2 );
joachim99@51 595 pWhiteSpace3FileMergeDefault->insertItem( "C", 3 );
joachim99@58 596 QToolTip::add( label, i18n(
joachim99@51 597 "Allow the merge algorithm to automatically select an input for "
joachim99@51 598 "white-space-only changes." )
joachim99@51 599 );
joachim99@51 600 ++line;
joachim99@51 601
joachim99@8 602 topLayout->addStretch(10);
joachim99@8 603 }
joachim99@8 604
joachim99@8 605 void OptionDialog::setupDirectoryMergePage( void )
joachim99@8 606 {
joachim99@51 607 QFrame *page = addPage( i18n("Directory Merge"), i18n("Directory Merge"),
joachim99@8 608 BarIcon("folder", KIcon::SizeMedium ) );
joachim99@8 609 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@8 610
joachim99@8 611 QGridLayout *gbox = new QGridLayout( 11, 2 );
joachim99@8 612 topLayout->addLayout( gbox );
joachim99@8 613 int line=0;
joachim99@8 614
joachim99@51 615 OptionCheckBox* pRecursiveDirs = new OptionCheckBox( i18n("Recursive directories"), true, "RecursiveDirs", &m_bDmRecursiveDirs, page, this );
joachim99@8 616 gbox->addMultiCellWidget( pRecursiveDirs, line, line, 0, 1 );
joachim99@8 617 QToolTip::add( pRecursiveDirs, i18n("Whether to analyze subdirectories or not.") );
joachim99@8 618 ++line;
joachim99@51 619 QLabel* label = new QLabel( i18n("File pattern(s):"), page );
joachim99@8 620 gbox->addWidget( label, line, 0 );
joachim99@8 621 OptionLineEdit* pFilePattern = new OptionLineEdit( "*", "FilePattern", &m_DmFilePattern, page, this );
joachim99@8 622 gbox->addWidget( pFilePattern, line, 1 );
joachim99@8 623 QToolTip::add( label, i18n(
joachim99@8 624 "Pattern(s) of files to be analyzed. \n"
joachim99@8 625 "Wildcards: '*' and '?'\n"
joachim99@8 626 "Several Patterns can be specified by using the separator: ';'"
joachim99@8 627 ));
joachim99@8 628 ++line;
joachim99@8 629
joachim99@51 630 label = new QLabel( i18n("File-anti-pattern(s):"), page );
joachim99@8 631 gbox->addWidget( label, line, 0 );
joachim99@8 632 OptionLineEdit* pFileAntiPattern = new OptionLineEdit( "*.orig;*.o", "FileAntiPattern", &m_DmFileAntiPattern, page, this );
joachim99@8 633 gbox->addWidget( pFileAntiPattern, line, 1 );
joachim99@8 634 QToolTip::add( label, i18n(
joachim99@8 635 "Pattern(s) of files to be excluded from analysis. \n"
joachim99@8 636 "Wildcards: '*' and '?'\n"
joachim99@8 637 "Several Patterns can be specified by using the separator: ';'"
joachim99@8 638 ));
joachim99@8 639 ++line;
joachim99@8 640
joachim99@51 641 label = new QLabel( i18n("Dir-anti-pattern(s):"), page );
joachim99@8 642 gbox->addWidget( label, line, 0 );
joachim99@8 643 OptionLineEdit* pDirAntiPattern = new OptionLineEdit( "CVS;.deps", "DirAntiPattern", &m_DmDirAntiPattern, page, this );
joachim99@8 644 gbox->addWidget( pDirAntiPattern, line, 1 );
joachim99@8 645 QToolTip::add( label, i18n(
joachim99@8 646 "Pattern(s) of directories to be excluded from analysis. \n"
joachim99@8 647 "Wildcards: '*' and '?'\n"
joachim99@8 648 "Several Patterns can be specified by using the separator: ';'"
joachim99@8 649 ));
joachim99@8 650 ++line;
joachim99@8 651
joachim99@51 652 OptionCheckBox* pUseCvsIgnore = new OptionCheckBox( i18n("Use .cvsignore"), false, "UseCvsIgnore", &m_bDmUseCvsIgnore, page, this );
joachim99@8 653 gbox->addMultiCellWidget( pUseCvsIgnore, line, line, 0, 1 );
joachim99@8 654 QToolTip::add( pUseCvsIgnore, i18n(
joachim99@8 655 "Extends the antipattern to anything that would be ignored by CVS.\n"
joachim99@8 656 "Via local \".cvsignore\"-files this can be directory specific."
joachim99@8 657 ));
joachim99@8 658 ++line;
joachim99@8 659
joachim99@51 660 OptionCheckBox* pFindHidden = new OptionCheckBox( i18n("Find hidden files and directories"), true, "FindHidden", &m_bDmFindHidden, page, this );
joachim99@8 661 gbox->addMultiCellWidget( pFindHidden, line, line, 0, 1 );
joachim99@8 662 #ifdef _WIN32
joachim99@8 663 QToolTip::add( pFindHidden, i18n("Finds files and directories with the hidden attribute.") );
joachim99@8 664 #else
joachim99@8 665 QToolTip::add( pFindHidden, i18n("Finds files and directories starting with '.'.") );
joachim99@8 666 #endif
joachim99@8 667 ++line;
joachim99@8 668
joachim99@51 669 OptionCheckBox* pFollowFileLinks = new OptionCheckBox( i18n("Follow file links"), false, "FollowFileLinks", &m_bDmFollowFileLinks, page, this );
joachim99@8 670 gbox->addMultiCellWidget( pFollowFileLinks, line, line, 0, 1 );
joachim99@8 671 QToolTip::add( pFollowFileLinks, i18n(
joachim99@8 672 "On: Compare the file the link points to.\n"
joachim99@8 673 "Off: Compare the links."
joachim99@8 674 ));
joachim99@8 675 ++line;
joachim99@8 676
joachim99@51 677 OptionCheckBox* pFollowDirLinks = new OptionCheckBox( i18n("Follow directory links"), false, "FollowDirLinks", &m_bDmFollowDirLinks, page, this );
joachim99@8 678 gbox->addMultiCellWidget( pFollowDirLinks, line, line, 0, 1 );
joachim99@8 679 QToolTip::add( pFollowDirLinks, i18n(
joachim99@8 680 "On: Compare the directory the link points to.\n"
joachim99@8 681 "Off: Compare the links."
joachim99@8 682 ));
joachim99@8 683 ++line;
joachim99@8 684
joachim99@8 685 OptionCheckBox* pShowOnlyDeltas = new OptionCheckBox( i18n("List only deltas"),false,"ListOnlyDeltas", &m_bDmShowOnlyDeltas, page, this );
joachim99@8 686 gbox->addMultiCellWidget( pShowOnlyDeltas, line, line, 0, 1 );
joachim99@8 687 QToolTip::add( pShowOnlyDeltas, i18n(
joachim99@8 688 "Files and directories without change will not appear in the list."));
joachim99@8 689 ++line;
joachim99@8 690
joachim99@66 691 QVButtonGroup* pBG = new QVButtonGroup(i18n("File Comparison Mode"),page);
joachim99@66 692 gbox->addMultiCellWidget( pBG, line, line, 0, 1 );
joachim99@66 693 ++line;
joachim99@66 694
joachim99@66 695 OptionRadioButton* pBinaryComparison = new OptionRadioButton( i18n("Binary Comparison"), true, "BinaryComparison", &m_bDmBinaryComparison, pBG, this );
joachim99@66 696 QToolTip::add( pBinaryComparison, i18n("Binary comparison of each file. (Default)") );
joachim99@66 697
joachim99@66 698 OptionRadioButton* pFullAnalysis = new OptionRadioButton( i18n("Full Analysis"), false, "FullAnalysis", &m_bDmFullAnalysis, pBG, this );
joachim99@66 699 QToolTip::add( pFullAnalysis, i18n("Do a full analysis and show statistics information in extra columns.\n"
joachim99@66 700 "(Slower than a binary comparison, much slower for binary files.)") );
joachim99@66 701
joachim99@66 702 OptionRadioButton* pTrustDate = new OptionRadioButton( i18n("Trust the modification date (unsafe)"), false, "TrustDate", &m_bDmTrustDate, pBG, this );
joachim99@8 703 QToolTip::add( pTrustDate, i18n("Assume that files are equal if the modification date and file length are equal.\n"
joachim99@8 704 "Useful for big directories or slow networks.") );
joachim99@8 705
joachim99@66 706 OptionRadioButton* pTrustSize = new OptionRadioButton( i18n("Trust the size (unsafe)"), false, "TrustSize", &m_bDmTrustSize, pBG, this );
joachim99@51 707 QToolTip::add( pTrustSize, i18n("Assume that files are equal if their file lengths are equal.\n"
joachim99@51 708 "Useful for big directories or slow networks when the date is modified during download.") );
joachim99@51 709
joachim99@8 710 // Some two Dir-options: Affects only the default actions.
joachim99@51 711 OptionCheckBox* pSyncMode = new OptionCheckBox( i18n("Synchronize directories"), false,"SyncMode", &m_bDmSyncMode, page, this );
joachim99@8 712 gbox->addMultiCellWidget( pSyncMode, line, line, 0, 1 );
joachim99@8 713 QToolTip::add( pSyncMode, i18n(
joachim99@8 714 "Offers to store files in both directories so that\n"
joachim99@8 715 "both directories are the same afterwards.\n"
joachim99@8 716 "Works only when comparing two directories without specifying a destination." ) );
joachim99@8 717 ++line;
joachim99@8 718
joachim99@51 719 OptionCheckBox* pCopyNewer = new OptionCheckBox( i18n("Copy newer instead of merging (unsafe)"), false, "CopyNewer", &m_bDmCopyNewer, page, this );
joachim99@8 720 gbox->addMultiCellWidget( pCopyNewer, line, line, 0, 1 );
joachim99@8 721 QToolTip::add( pCopyNewer, i18n(
joachim99@8 722 "Don't look inside, just take the newer file.\n"
joachim99@8 723 "(Use this only if you know what you are doing!)\n"
joachim99@8 724 "Only effective when comparing two directories." ) );
joachim99@8 725 ++line;
joachim99@51 726
joachim99@8 727 OptionCheckBox* pCreateBakFiles = new OptionCheckBox( i18n("Backup files (.orig)"), true, "CreateBakFiles", &m_bDmCreateBakFiles, page, this );
joachim99@8 728 gbox->addMultiCellWidget( pCreateBakFiles, line, line, 0, 1 );
joachim99@8 729 QToolTip::add( pCreateBakFiles, i18n(
joachim99@8 730 "When a file would be saved over an old file, then the old file\n"
joachim99@8 731 "will be renamed with a '.orig'-extension instead of being deleted."));
joachim99@8 732 ++line;
joachim99@8 733
joachim99@8 734 topLayout->addStretch(10);
joachim99@8 735 }
joachim99@66 736 /*
joachim99@58 737 static void insertCodecs(OptionComboBox* p)
joachim99@58 738 {
joachim99@58 739 std::multimap<QString,QString> m; // Using the multimap for case-insensitive sorting.
joachim99@58 740 int i;
joachim99@58 741 for(i=0;;++i)
joachim99@58 742 {
joachim99@58 743 QTextCodec* pCodec = QTextCodec::codecForIndex ( i );
joachim99@58 744 if ( pCodec != 0 ) m.insert( std::make_pair( QString(pCodec->mimeName()).upper(), pCodec->mimeName()) );
joachim99@58 745 else break;
joachim99@58 746 }
joachim99@58 747
joachim99@58 748 p->insertItem( i18n("Auto"), 0 );
joachim99@58 749 std::multimap<QString,QString>::iterator mi;
joachim99@58 750 for(mi=m.begin(), i=0; mi!=m.end(); ++mi, ++i)
joachim99@58 751 p->insertItem(mi->second, i+1);
joachim99@58 752 }
joachim99@66 753 */
joachim99@58 754
joachim99@58 755 void OptionDialog::setupRegionalPage( void )
joachim99@58 756 {
joachim99@66 757 #ifdef KREPLACEMENTS_H
joachim99@66 758
joachim99@66 759 static char* countryMap[]={
joachim99@66 760 "af Afrikaans",
joachim99@66 761 "ar Arabic",
joachim99@66 762 "az Azerbaijani",
joachim99@66 763 "be Belarusian",
joachim99@66 764 "bg Bulgarian",
joachim99@66 765 "bn Bengali",
joachim99@66 766 "bo Tibetan",
joachim99@66 767 "br Breton",
joachim99@66 768 "bs Bosnian",
joachim99@66 769 "ca Catalan",
joachim99@66 770 "cs Czech",
joachim99@66 771 "cy Welsh",
joachim99@66 772 "da Danish",
joachim99@66 773 "de German",
joachim99@66 774 "el Greek",
joachim99@66 775 "en_GB British English",
joachim99@66 776 "eo Esperanto",
joachim99@66 777 "es Spanish",
joachim99@66 778 "et Estonian",
joachim99@66 779 "eu Basque",
joachim99@66 780 "fa Farsi (Persian)",
joachim99@66 781 "fi Finnish",
joachim99@66 782 "fo Faroese",
joachim99@66 783 "fr French",
joachim99@66 784 "ga Irish Gaelic",
joachim99@66 785 "gl Galician",
joachim99@66 786 "gu Gujarati",
joachim99@66 787 "he Hebrew",
joachim99@66 788 "hi Hindi",
joachim99@66 789 "hr Croatian",
joachim99@66 790 "hsb Upper Sorbian",
joachim99@66 791 "hu Hungarian",
joachim99@66 792 "id Indonesian",
joachim99@66 793 "is Icelandic",
joachim99@66 794 "it Italian",
joachim99@66 795 "ja Japanese",
joachim99@66 796 "ko Korean",
joachim99@66 797 "ku Kurdish",
joachim99@66 798 "lo Lao",
joachim99@66 799 "lt Lithuanian",
joachim99@66 800 "lv Latvian",
joachim99@66 801 "mi Maori",
joachim99@66 802 "mk Macedonian",
joachim99@66 803 "mn Mongolian",
joachim99@66 804 "ms Malay",
joachim99@66 805 "mt Maltese",
joachim99@66 806 "nb Norwegian Bookmal",
joachim99@66 807 "nds Low Saxon",
joachim99@66 808 "nl Dutch",
joachim99@66 809 "nn Norwegian Nynorsk",
joachim99@66 810 "nso Northern Sotho",
joachim99@66 811 "oc Occitan",
joachim99@66 812 "pl Polish",
joachim99@66 813 "pt Portuguese",
joachim99@66 814 "pt_BR Brazilian Portuguese",
joachim99@66 815 "ro Romanian",
joachim99@66 816 "ru Russian",
joachim99@66 817 "se Northern Sami",
joachim99@66 818 "sk Slovak",
joachim99@66 819 "sl Slovenian",
joachim99@66 820 "sq Albanian",
joachim99@66 821 "sr Serbian",
joachim99@66 822 "ss Swati",
joachim99@66 823 "sv Swedish",
joachim99@66 824 "ta Tamil",
joachim99@66 825 "tg Tajik",
joachim99@66 826 "th Thai",
joachim99@66 827 "tr Turkish",
joachim99@66 828 "uk Ukrainian",
joachim99@66 829 "uz Uzbek",
joachim99@66 830 "ven Venda",
joachim99@66 831 "vi Vietnamese",
joachim99@66 832 "wa Walloon",
joachim99@66 833 "xh Xhosa",
joachim99@66 834 "zh_CN Chinese Simplified",
joachim99@66 835 "zh_TW Chinese Traditional",
joachim99@66 836 "zu Zulu"
joachim99@66 837 };
joachim99@66 838
joachim99@58 839 QFrame *page = addPage( i18n("Regional Settings"), i18n("Regional Settings"),
joachim99@58 840 BarIcon("locale"/*"charset"*/, KIcon::SizeMedium ) );
joachim99@58 841 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@58 842
joachim99@58 843 QGridLayout *gbox = new QGridLayout( 3, 2 );
joachim99@58 844 topLayout->addLayout( gbox );
joachim99@58 845 int line=0;
joachim99@58 846
joachim99@58 847 QLabel* label;
joachim99@58 848 label = new QLabel( i18n("Language (restart required)"), page );
joachim99@58 849 gbox->addWidget( label, line, 0 );
joachim99@58 850 OptionComboBox* pLanguage = new OptionComboBox( 0, "Language", &m_language, page, this );
joachim99@58 851 gbox->addWidget( pLanguage, line, 1 );
joachim99@66 852 pLanguage->insertItem( "Auto", 0 ); // Must not translate, won't work otherwise!
joachim99@66 853 pLanguage->insertItem( "en_orig" );
joachim99@66 854
joachim99@66 855 // Read directory: Find all kdiff3_*.qm-files and insert the found files here selection
joachim99@66 856 FileAccess fa( getTranslationDir() );
joachim99@66 857 t_DirectoryList dirList;
joachim99@66 858 fa.listDir( &dirList, false, false, "kdiff3_*.qm", "", "*", false, false );
joachim99@66 859 t_DirectoryList::iterator i;
joachim99@66 860 for( i=dirList.begin(); i!=dirList.end(); ++i)
joachim99@66 861 {
joachim99@66 862 QString fileName = i->fileName();
joachim99@66 863 // Skip the "kdiff3_" and omit the .qm
joachim99@66 864 QString languageId = fileName.mid(7, fileName.length()-10 );
joachim99@66 865
joachim99@66 866 unsigned int countryIdx=0;
joachim99@66 867 for(countryIdx=0; countryIdx< sizeof(countryMap)/sizeof(countryMap[0]); ++countryIdx )
joachim99@66 868 {
joachim99@66 869 QString fullName = countryMap[countryIdx];
joachim99@66 870 if ( languageId+" " == fullName.left(languageId.length()+1) )
joachim99@66 871 {
joachim99@66 872 languageId += " (" + fullName.mid(languageId.length()+1) + ")";
joachim99@66 873 }
joachim99@66 874 }
joachim99@66 875
joachim99@66 876 pLanguage->insertItem( languageId );
joachim99@66 877 }
joachim99@66 878
joachim99@58 879 QToolTip::add( label, i18n(
joachim99@58 880 "Choose the language of the GUI-strings or \"Auto\".\n"
joachim99@58 881 "For a change of language to take place, quit and restart KDiff3.")
joachim99@58 882 );
joachim99@58 883 ++line;
joachim99@66 884 /*
joachim99@58 885 label = new QLabel( i18n("Codec for file contents"), page );
joachim99@58 886 gbox->addWidget( label, line, 0 );
joachim99@58 887 OptionComboBox* pFileCodec = new OptionComboBox( 0, "FileCodec", &m_fileCodec, page, this );
joachim99@58 888 gbox->addWidget( pFileCodec, line, 1 );
joachim99@58 889 insertCodecs( pFileCodec );
joachim99@58 890 QToolTip::add( label, i18n(
joachim99@58 891 "Choose the codec that should be used for your input files\n"
joachim99@58 892 "or \"Auto\" if unsure." )
joachim99@58 893 );
joachim99@58 894 ++line;
joachim99@66 895 */
joachim99@58 896 topLayout->addStretch(10);
joachim99@66 897 #endif
joachim99@58 898 }
joachim99@58 899
joachim99@58 900
joachim99@8 901 void OptionDialog::setupKeysPage( void )
joachim99@8 902 {
joachim99@8 903 //QVBox *page = addVBoxPage( i18n("Keys"), i18n("KeyDialog" ),
joachim99@8 904 // BarIcon("fonts", KIcon::SizeMedium ) );
joachim99@8 905
joachim99@8 906 //QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
joachim99@8 907 // new KFontChooser( page,"font",false/*onlyFixed*/,QStringList(),false,6 );
joachim99@8 908 //m_pKeyDialog=new KKeyDialog( false, 0 );
joachim99@8 909 //topLayout->addWidget( m_pKeyDialog );
joachim99@8 910 }
joachim99@8 911
joachim99@8 912 void OptionDialog::slotOk( void )
joachim99@8 913 {
joachim99@8 914 slotApply();
joachim99@8 915
joachim99@8 916 // My system returns variable width fonts even though I
joachim99@8 917 // disabled this. Even QFont::fixedPitch() doesn't work.
joachim99@8 918 QFontMetrics fm(m_font);
joachim99@8 919 if ( fm.width('W')!=fm.width('i') )
joachim99@8 920 {
joachim99@8 921 int result = KMessageBox::warningYesNo(this, i18n(
joachim99@8 922 "You selected a variable width font.\n\n"
joachim99@8 923 "Because this program doesn't handle variable width fonts\n"
joachim99@8 924 "correctly, you might experience problems while editing.\n\n"
joachim99@8 925 "Do you want to continue or do you want to select another font."),
joachim99@51 926 i18n("Incompatible Font"),
joachim99@51 927 i18n("Continue at Own Risk"), i18n("Select Another Font"));
joachim99@8 928 if (result==KMessageBox::No)
joachim99@8 929 return;
joachim99@8 930 }
joachim99@8 931
joachim99@8 932 accept();
joachim99@8 933 }
joachim99@8 934
joachim99@8 935
joachim99@8 936 /** Copy the values from the widgets to the public variables.*/
joachim99@8 937 void OptionDialog::slotApply( void )
joachim99@8 938 {
joachim99@8 939 std::list<OptionItem*>::iterator i;
joachim99@8 940 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
joachim99@8 941 {
joachim99@8 942 (*i)->apply();
joachim99@8 943 }
joachim99@8 944
joachim99@8 945 // FontConfigDlg
joachim99@8 946 m_font = m_fontChooser->font();
joachim99@8 947
joachim99@8 948 emit applyClicked();
joachim99@8 949 }
joachim99@8 950
joachim99@8 951 /** Set the default values in the widgets only, while the
joachim99@8 952 public variables remain unchanged. */
joachim99@8 953 void OptionDialog::slotDefault()
joachim99@8 954 {
joachim99@8 955 int result = KMessageBox::warningContinueCancel(this, i18n("This resets all options. Not only those of the current topic.") );
joachim99@8 956 if ( result==KMessageBox::Cancel ) return;
joachim99@8 957 else resetToDefaults();
joachim99@8 958 }
joachim99@8 959
joachim99@8 960 void OptionDialog::resetToDefaults()
joachim99@8 961 {
joachim99@8 962 std::list<OptionItem*>::iterator i;
joachim99@8 963 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
joachim99@8 964 {
joachim99@8 965 (*i)->setToDefault();
joachim99@8 966 }
joachim99@8 967
joachim99@30 968 #ifdef _WIN32
joachim99@30 969 m_fontChooser->setFont( QFont("Courier New", 10 ), true /*only fixed*/ );
joachim99@66 970 #elif defined( KREPLACEMENTS_H )
joachim99@66 971 m_fontChooser->setFont( QFont("Courier", 10 ), true /*only fixed*/ );
joachim99@30 972 #else
joachim99@66 973 m_fontChooser->setFont( KGlobalSettings::fixedFont(), true /*only fixed*/ );
joachim99@30 974 #endif
joachim99@8 975 }
joachim99@8 976
joachim99@8 977 /** Initialise the widgets using the values in the public varibles. */
joachim99@8 978 void OptionDialog::setState()
joachim99@8 979 {
joachim99@8 980 std::list<OptionItem*>::iterator i;
joachim99@8 981 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
joachim99@8 982 {
joachim99@8 983 (*i)->setToCurrent();
joachim99@8 984 }
joachim99@8 985
joachim99@8 986 m_fontChooser->setFont( m_font, true /*only fixed*/ );
joachim99@8 987 }
joachim99@8 988
joachim99@8 989 void OptionDialog::saveOptions( KConfig* config )
joachim99@8 990 {
joachim99@8 991 // No i18n()-Translations here!
joachim99@8 992
joachim99@8 993 config->setGroup("KDiff3 Options");
joachim99@8 994
joachim99@8 995 std::list<OptionItem*>::iterator i;
joachim99@8 996 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
joachim99@8 997 {
joachim99@8 998 (*i)->write(config);
joachim99@8 999 }
joachim99@8 1000
joachim99@8 1001 // FontConfigDlg
joachim99@8 1002 config->writeEntry("Font", m_font );
joachim99@8 1003
joachim99@8 1004 // Recent files (selectable in the OpenDialog)
joachim99@8 1005 config->writeEntry( "RecentAFiles", m_recentAFiles, '|' );
joachim99@8 1006 config->writeEntry( "RecentBFiles", m_recentBFiles, '|' );
joachim99@8 1007 config->writeEntry( "RecentCFiles", m_recentCFiles, '|' );
joachim99@8 1008 config->writeEntry( "RecentOutputFiles", m_recentOutputFiles, '|' );
joachim99@8 1009 }
joachim99@8 1010
joachim99@8 1011 void OptionDialog::readOptions( KConfig* config )
joachim99@8 1012 {
joachim99@8 1013 // No i18n()-Translations here!
joachim99@8 1014
joachim99@8 1015 config->setGroup("KDiff3 Options");
joachim99@8 1016
joachim99@8 1017 std::list<OptionItem*>::iterator i;
joachim99@8 1018
joachim99@8 1019 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
joachim99@8 1020 {
joachim99@8 1021 (*i)->read(config);
joachim99@8 1022 }
joachim99@8 1023
joachim99@8 1024 // Use the current values as default settings.
joachim99@8 1025
joachim99@8 1026 // FontConfigDlg
joachim99@8 1027 m_font = config->readFontEntry( "Font", &m_font);
joachim99@8 1028
joachim99@8 1029 // Recent files (selectable in the OpenDialog)
joachim99@8 1030 m_recentAFiles = config->readListEntry( "RecentAFiles", '|' );
joachim99@8 1031 m_recentBFiles = config->readListEntry( "RecentBFiles", '|' );
joachim99@8 1032 m_recentCFiles = config->readListEntry( "RecentCFiles", '|' );
joachim99@8 1033 m_recentOutputFiles = config->readListEntry( "RecentOutputFiles", '|' );
joachim99@8 1034
joachim99@8 1035 setState();
joachim99@8 1036 }
joachim99@8 1037
joachim99@8 1038 void OptionDialog::slotHelp( void )
joachim99@8 1039 {
joachim99@8 1040 KDialogBase::slotHelp();
joachim99@8 1041 }
joachim99@8 1042
joachim99@8 1043
joachim99@58 1044
joachim99@8 1045 #include "optiondialog.moc"