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"
|