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@68
|
293 class OptionEncodingComboBox : public QComboBox, public OptionItem
|
joachim99@68
|
294 {
|
joachim99@68
|
295 std::vector<QTextCodec*> m_codecVec;
|
joachim99@68
|
296 QTextCodec** m_ppVarCodec;
|
joachim99@68
|
297 public:
|
joachim99@68
|
298 OptionEncodingComboBox( const QString& saveName, QTextCodec** ppVarCodec,
|
joachim99@68
|
299 QWidget* pParent, OptionDialog* pOD )
|
joachim99@68
|
300 : QComboBox( pParent ), OptionItem( pOD, saveName )
|
joachim99@68
|
301 {
|
joachim99@68
|
302 m_ppVarCodec = ppVarCodec;
|
joachim99@68
|
303 insertCodec( i18n("Unicode, 8 bit"), QTextCodec::codecForName("UTF-8") );
|
joachim99@68
|
304 insertCodec( i18n("Unicode"), QTextCodec::codecForName("iso-10646-UCS-2") );
|
joachim99@68
|
305 insertCodec( i18n("Latin1"), QTextCodec::codecForName("iso 8859-1") );
|
joachim99@68
|
306
|
joachim99@68
|
307 // First sort codec names:
|
joachim99@68
|
308 std::map<QString, QTextCodec*> names;
|
joachim99@68
|
309 int i;
|
joachim99@68
|
310 for(i=0;;++i)
|
joachim99@68
|
311 {
|
joachim99@68
|
312 QTextCodec* c = QTextCodec::codecForIndex(i);
|
joachim99@68
|
313 if ( c==0 ) break;
|
joachim99@68
|
314 else names[QString(c->name()).upper()]=c;
|
joachim99@68
|
315 }
|
joachim99@68
|
316
|
joachim99@68
|
317 std::map<QString, QTextCodec*>::iterator it;
|
joachim99@68
|
318 for(it=names.begin();it!=names.end();++it)
|
joachim99@68
|
319 {
|
joachim99@68
|
320 insertCodec( "", it->second );
|
joachim99@68
|
321 }
|
joachim99@68
|
322
|
joachim99@68
|
323 QToolTip::add( this, i18n(
|
joachim99@68
|
324 "Change this if non-ASCII characters are not displayed correctly."
|
joachim99@68
|
325 ));
|
joachim99@68
|
326 }
|
joachim99@68
|
327 void insertCodec( const QString& visibleCodecName, QTextCodec* c )
|
joachim99@68
|
328 {
|
joachim99@68
|
329 if (c!=0)
|
joachim99@68
|
330 {
|
joachim99@68
|
331 for( unsigned int i=0; i<m_codecVec.size(); ++i )
|
joachim99@68
|
332 {
|
joachim99@68
|
333 if ( c==m_codecVec[i] )
|
joachim99@68
|
334 return; // don't insert any codec twice
|
joachim99@68
|
335 }
|
joachim99@68
|
336 insertItem( visibleCodecName.isEmpty() ? QString(c->name()) : visibleCodecName+" ("+c->name()+")", m_codecVec.size() );
|
joachim99@68
|
337 m_codecVec.push_back( c );
|
joachim99@68
|
338 }
|
joachim99@68
|
339 }
|
joachim99@68
|
340 void setToDefault()
|
joachim99@68
|
341 {
|
joachim99@68
|
342 setCurrentItem( 0 );
|
joachim99@68
|
343 if (m_ppVarCodec!=0){ *m_ppVarCodec=m_codecVec[0]; }
|
joachim99@68
|
344 }
|
joachim99@68
|
345 void setToCurrent()
|
joachim99@68
|
346 {
|
joachim99@68
|
347 if (m_ppVarCodec!=0)
|
joachim99@68
|
348 {
|
joachim99@68
|
349 for(unsigned int i=0; i<m_codecVec.size(); ++i)
|
joachim99@68
|
350 {
|
joachim99@68
|
351 if ( *m_ppVarCodec==m_codecVec[i] )
|
joachim99@68
|
352 {
|
joachim99@68
|
353 setCurrentItem( i );
|
joachim99@68
|
354 break;
|
joachim99@68
|
355 }
|
joachim99@68
|
356 }
|
joachim99@68
|
357 }
|
joachim99@68
|
358 }
|
joachim99@68
|
359 void apply()
|
joachim99@68
|
360 {
|
joachim99@68
|
361 if (m_ppVarCodec!=0){ *m_ppVarCodec = m_codecVec[ currentItem() ]; }
|
joachim99@68
|
362 }
|
joachim99@68
|
363 void write(KConfig* config)
|
joachim99@68
|
364 {
|
joachim99@68
|
365 if (m_ppVarCodec!=0) config->writeEntry(m_saveName, (*m_ppVarCodec)->name() );
|
joachim99@68
|
366 }
|
joachim99@68
|
367 void read (KConfig* config)
|
joachim99@68
|
368 {
|
joachim99@68
|
369 QString codecName = config->readEntry( m_saveName, m_codecVec[ currentItem() ]->name() );
|
joachim99@68
|
370 for(unsigned int i=0; i<m_codecVec.size(); ++i)
|
joachim99@68
|
371 {
|
joachim99@68
|
372 if ( codecName == m_codecVec[i]->name() )
|
joachim99@68
|
373 {
|
joachim99@68
|
374 setCurrentItem( i );
|
joachim99@68
|
375 if (m_ppVarCodec!=0) *m_ppVarCodec = m_codecVec[i];
|
joachim99@68
|
376 break;
|
joachim99@68
|
377 }
|
joachim99@68
|
378 }
|
joachim99@68
|
379 }
|
joachim99@68
|
380 };
|
joachim99@68
|
381
|
joachim99@68
|
382
|
joachim99@8
|
383 OptionDialog::OptionDialog( bool bShowDirMergeSettings, QWidget *parent, char *name )
|
joachim99@8
|
384 :KDialogBase( IconList, i18n("Configure"), Help|Default|Apply|Ok|Cancel,
|
joachim99@8
|
385 Ok, parent, name, true /*modal*/, true )
|
joachim99@8
|
386 {
|
joachim99@68
|
387 setHelp( "kdiff3/index.html", QString::null );
|
joachim99@8
|
388
|
joachim99@68
|
389 setupFontPage();
|
joachim99@68
|
390 setupColorPage();
|
joachim99@68
|
391 setupEditPage();
|
joachim99@68
|
392 setupDiffPage();
|
joachim99@68
|
393 setupOtherOptions();
|
joachim99@68
|
394 if (bShowDirMergeSettings)
|
joachim99@68
|
395 setupDirectoryMergePage();
|
joachim99@58
|
396
|
joachim99@68
|
397 setupRegionalPage();
|
joachim99@8
|
398
|
joachim99@68
|
399 //setupKeysPage();
|
joachim99@68
|
400
|
joachim99@68
|
401 // Initialize all values in the dialog
|
joachim99@68
|
402 resetToDefaults();
|
joachim99@68
|
403 slotApply();
|
joachim99@8
|
404 }
|
joachim99@8
|
405
|
joachim99@8
|
406 OptionDialog::~OptionDialog( void )
|
joachim99@8
|
407 {
|
joachim99@8
|
408 }
|
joachim99@8
|
409
|
joachim99@51
|
410 void OptionDialog::setupOtherOptions()
|
joachim99@51
|
411 {
|
joachim99@51
|
412 new OptionToggleAction( false, "AutoAdvance", &m_bAutoAdvance, this );
|
joachim99@51
|
413 new OptionToggleAction( true, "ShowWhiteSpaceCharacters", &m_bShowWhiteSpaceCharacters, this );
|
joachim99@51
|
414 new OptionToggleAction( true, "ShowWhiteSpace", &m_bShowWhiteSpace, this );
|
joachim99@51
|
415 new OptionToggleAction( false, "ShowLineNumbers", &m_bShowLineNumbers, this );
|
joachim99@51
|
416 new OptionToggleAction( true, "HorizDiffWindowSplitting", &m_bHorizDiffWindowSplitting, this );
|
joachim99@66
|
417 new OptionToggleAction( false, "WordWrap", &m_bWordWrap, this );
|
joachim99@51
|
418 }
|
joachim99@8
|
419
|
joachim99@8
|
420 void OptionDialog::setupFontPage( void )
|
joachim99@8
|
421 {
|
joachim99@51
|
422 QFrame *page = addPage( i18n("Font"), i18n("Editor & Diff Output Font" ),
|
joachim99@8
|
423 BarIcon("fonts", KIcon::SizeMedium ) );
|
joachim99@8
|
424
|
joachim99@8
|
425 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
|
joachim99@51
|
426
|
joachim99@8
|
427 m_fontChooser = new KFontChooser( page,"font",true/*onlyFixed*/,QStringList(),false,6 );
|
joachim99@8
|
428 topLayout->addWidget( m_fontChooser );
|
joachim99@8
|
429
|
joachim99@8
|
430 QGridLayout *gbox = new QGridLayout( 1, 2 );
|
joachim99@8
|
431 topLayout->addLayout( gbox );
|
joachim99@8
|
432 int line=0;
|
joachim99@8
|
433
|
joachim99@51
|
434 OptionCheckBox* pItalicDeltas = new OptionCheckBox( i18n("Italic font for deltas"), false, "ItalicForDeltas", &m_bItalicForDeltas, page, this );
|
joachim99@8
|
435 gbox->addMultiCellWidget( pItalicDeltas, line, line, 0, 1 );
|
joachim99@8
|
436 QToolTip::add( pItalicDeltas, i18n(
|
joachim99@8
|
437 "Selects the italic version of the font for differences.\n"
|
joachim99@8
|
438 "If the font doesn't support italic characters, then this does nothing.")
|
joachim99@8
|
439 );
|
joachim99@8
|
440 }
|
joachim99@8
|
441
|
joachim99@8
|
442
|
joachim99@8
|
443 void OptionDialog::setupColorPage( void )
|
joachim99@8
|
444 {
|
joachim99@51
|
445 QFrame *page = addPage( i18n("Color"), i18n("Colors in Editor & Diff Output"),
|
joachim99@8
|
446 BarIcon("colorize", KIcon::SizeMedium ) );
|
joachim99@8
|
447 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
|
joachim99@8
|
448
|
joachim99@8
|
449 QGridLayout *gbox = new QGridLayout( 7, 2 );
|
joachim99@8
|
450 topLayout->addLayout(gbox);
|
joachim99@8
|
451
|
joachim99@8
|
452 QLabel* label;
|
joachim99@8
|
453 int line = 0;
|
joachim99@8
|
454
|
joachim99@8
|
455 int depth = QColor::numBitPlanes();
|
joachim99@8
|
456 bool bLowColor = depth<=8;
|
joachim99@8
|
457
|
joachim99@8
|
458 OptionColorButton* pFgColor = new OptionColorButton( black,"FgColor", &m_fgColor, page, this );
|
joachim99@8
|
459 label = new QLabel( pFgColor, i18n("Foreground color:"), page );
|
joachim99@8
|
460 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
461 gbox->addWidget( pFgColor, line, 1 );
|
joachim99@8
|
462 ++line;
|
joachim99@8
|
463
|
joachim99@8
|
464 OptionColorButton* pBgColor = new OptionColorButton( white, "BgColor", &m_bgColor, page, this );
|
joachim99@8
|
465 label = new QLabel( pBgColor, i18n("Background color:"), page );
|
joachim99@8
|
466 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
467 gbox->addWidget( pBgColor, line, 1 );
|
joachim99@8
|
468
|
joachim99@8
|
469 ++line;
|
joachim99@8
|
470
|
joachim99@8
|
471 OptionColorButton* pDiffBgColor = new OptionColorButton( lightGray, "DiffBgColor", &m_diffBgColor, page, this );
|
joachim99@8
|
472 label = new QLabel( pDiffBgColor, i18n("Diff background color:"), page );
|
joachim99@8
|
473 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
474 gbox->addWidget( pDiffBgColor, line, 1 );
|
joachim99@8
|
475 ++line;
|
joachim99@8
|
476
|
joachim99@8
|
477 OptionColorButton* pColorA = new OptionColorButton(
|
joachim99@8
|
478 bLowColor ? qRgb(0,0,255) : qRgb(0,0,200)/*blue*/, "ColorA", &m_colorA, page, this );
|
joachim99@8
|
479 label = new QLabel( pColorA, i18n("Color A:"), page );
|
joachim99@8
|
480 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
481 gbox->addWidget( pColorA, line, 1 );
|
joachim99@8
|
482 ++line;
|
joachim99@8
|
483
|
joachim99@8
|
484 OptionColorButton* pColorB = new OptionColorButton(
|
joachim99@8
|
485 bLowColor ? qRgb(0,128,0) : qRgb(0,150,0)/*green*/, "ColorB", &m_colorB, page, this );
|
joachim99@8
|
486 label = new QLabel( pColorB, i18n("Color B:"), page );
|
joachim99@8
|
487 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
488 gbox->addWidget( pColorB, line, 1 );
|
joachim99@8
|
489 ++line;
|
joachim99@8
|
490
|
joachim99@8
|
491 OptionColorButton* pColorC = new OptionColorButton(
|
joachim99@8
|
492 bLowColor ? qRgb(128,0,128) : qRgb(150,0,150)/*magenta*/, "ColorC", &m_colorC, page, this );
|
joachim99@8
|
493 label = new QLabel( pColorC, i18n("Color C:"), page );
|
joachim99@8
|
494 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
495 gbox->addWidget( pColorC, line, 1 );
|
joachim99@8
|
496 ++line;
|
joachim99@8
|
497
|
joachim99@8
|
498 OptionColorButton* pColorForConflict = new OptionColorButton( red, "ColorForConflict", &m_colorForConflict, page, this );
|
joachim99@51
|
499 label = new QLabel( pColorForConflict, i18n("Conflict color:"), page );
|
joachim99@8
|
500 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
501 gbox->addWidget( pColorForConflict, line, 1 );
|
joachim99@8
|
502 ++line;
|
joachim99@8
|
503
|
joachim99@8
|
504 OptionColorButton* pColor = new OptionColorButton(
|
joachim99@8
|
505 bLowColor ? qRgb(192,192,192) : qRgb(220,220,100), "CurrentRangeBgColor", &m_currentRangeBgColor, page, this );
|
joachim99@8
|
506 label = new QLabel( pColor, i18n("Current range background color:"), page );
|
joachim99@8
|
507 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
508 gbox->addWidget( pColor, line, 1 );
|
joachim99@8
|
509 ++line;
|
joachim99@8
|
510
|
joachim99@8
|
511 pColor = new OptionColorButton(
|
joachim99@8
|
512 bLowColor ? qRgb(255,255,0) : qRgb(255,255,150), "CurrentRangeDiffBgColor", &m_currentRangeDiffBgColor, page, this );
|
joachim99@8
|
513 label = new QLabel( pColor, i18n("Current range diff background color:"), page );
|
joachim99@8
|
514 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
515 gbox->addWidget( pColor, line, 1 );
|
joachim99@8
|
516 ++line;
|
joachim99@8
|
517
|
joachim99@8
|
518 topLayout->addStretch(10);
|
joachim99@8
|
519 }
|
joachim99@8
|
520
|
joachim99@8
|
521
|
joachim99@8
|
522 void OptionDialog::setupEditPage( void )
|
joachim99@8
|
523 {
|
joachim99@68
|
524 QFrame *page = addPage( i18n("Editor"), i18n("Editor Behavior"),
|
joachim99@8
|
525 BarIcon("edit", KIcon::SizeMedium ) );
|
joachim99@8
|
526 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
|
joachim99@8
|
527
|
joachim99@8
|
528 QGridLayout *gbox = new QGridLayout( 4, 2 );
|
joachim99@8
|
529 topLayout->addLayout( gbox );
|
joachim99@8
|
530 QLabel* label;
|
joachim99@8
|
531 int line=0;
|
joachim99@8
|
532
|
joachim99@8
|
533 OptionCheckBox* pReplaceTabs = new OptionCheckBox( i18n("Tab inserts spaces"), false, "ReplaceTabs", &m_bReplaceTabs, page, this );
|
joachim99@8
|
534 gbox->addMultiCellWidget( pReplaceTabs, line, line, 0, 1 );
|
joachim99@8
|
535 QToolTip::add( pReplaceTabs, i18n(
|
joachim99@8
|
536 "On: Pressing tab generates the appropriate number of spaces.\n"
|
joachim99@8
|
537 "Off: A Tab-character will be inserted.")
|
joachim99@8
|
538 );
|
joachim99@8
|
539 ++line;
|
joachim99@8
|
540
|
joachim99@8
|
541 OptionIntEdit* pTabSize = new OptionIntEdit( 8, "TabSize", &m_tabSize, 1, 100, page, this );
|
joachim99@8
|
542 label = new QLabel( pTabSize, i18n("Tab size:"), page );
|
joachim99@8
|
543 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
544 gbox->addWidget( pTabSize, line, 1 );
|
joachim99@8
|
545 ++line;
|
joachim99@8
|
546
|
joachim99@51
|
547 OptionCheckBox* pAutoIndentation = new OptionCheckBox( i18n("Auto indentation"), true, "AutoIndentation", &m_bAutoIndentation, page, this );
|
joachim99@8
|
548 gbox->addMultiCellWidget( pAutoIndentation, line, line, 0, 1 );
|
joachim99@8
|
549 QToolTip::add( pAutoIndentation, i18n(
|
joachim99@8
|
550 "On: The indentation of the previous line is used for a new line.\n"
|
joachim99@8
|
551 ));
|
joachim99@8
|
552 ++line;
|
joachim99@8
|
553
|
joachim99@51
|
554 OptionCheckBox* pAutoCopySelection = new OptionCheckBox( i18n("Auto copy selection"), false, "AutoCopySelection", &m_bAutoCopySelection, page, this );
|
joachim99@8
|
555 gbox->addMultiCellWidget( pAutoCopySelection, line, line, 0, 1 );
|
joachim99@8
|
556 QToolTip::add( pAutoCopySelection, i18n(
|
joachim99@8
|
557 "On: Any selection is immediately written to the clipboard.\n"
|
joachim99@8
|
558 "Off: You must explicitely copy e.g. via Ctrl-C."
|
joachim99@8
|
559 ));
|
joachim99@8
|
560 ++line;
|
joachim99@58
|
561
|
joachim99@68
|
562 label = new QLabel( i18n("Line end style:"), page );
|
joachim99@58
|
563 gbox->addWidget( label, line, 0 );
|
joachim99@58
|
564 #ifdef _WIN32
|
joachim99@58
|
565 int defaultLineEndStyle = eLineEndDos;
|
joachim99@58
|
566 #else
|
joachim99@58
|
567 int defaultLineEndStyle = eLineEndUnix;
|
joachim99@58
|
568 #endif
|
joachim99@58
|
569 OptionComboBox* pLineEndStyle = new OptionComboBox( defaultLineEndStyle, "LineEndStyle", &m_lineEndStyle, page, this );
|
joachim99@58
|
570 gbox->addWidget( pLineEndStyle, line, 1 );
|
joachim99@58
|
571 pLineEndStyle->insertItem( "Unix", eLineEndUnix );
|
joachim99@58
|
572 pLineEndStyle->insertItem( "Dos/Windows", eLineEndDos );
|
joachim99@58
|
573 QToolTip::add( label, i18n(
|
joachim99@68
|
574 "Sets the line endings for when an edited file is saved.\n"
|
joachim99@68
|
575 "DOS/Windows: CR+LF; UNIX: LF; with CR=0D, LF=0A")
|
joachim99@58
|
576 );
|
joachim99@58
|
577 ++line;
|
joachim99@58
|
578
|
joachim99@8
|
579 topLayout->addStretch(10);
|
joachim99@8
|
580 }
|
joachim99@8
|
581
|
joachim99@8
|
582
|
joachim99@8
|
583 void OptionDialog::setupDiffPage( void )
|
joachim99@8
|
584 {
|
joachim99@51
|
585 QFrame *page = addPage( i18n("Diff & Merge"), i18n("Diff & Merge Settings"),
|
joachim99@8
|
586 BarIcon("misc", KIcon::SizeMedium ) );
|
joachim99@8
|
587 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
|
joachim99@8
|
588
|
joachim99@8
|
589 QGridLayout *gbox = new QGridLayout( 3, 2 );
|
joachim99@8
|
590 topLayout->addLayout( gbox );
|
joachim99@8
|
591 int line=0;
|
joachim99@8
|
592
|
joachim99@51
|
593 QLabel* label=0;
|
joachim99@51
|
594
|
joachim99@51
|
595 OptionCheckBox* pPreserveCarriageReturn = new OptionCheckBox( i18n("Preserve carriage return"), false, "PreserveCarriageReturn", &m_bPreserveCarriageReturn, page, this );
|
joachim99@51
|
596 gbox->addMultiCellWidget( pPreserveCarriageReturn, line, line, 0, 1 );
|
joachim99@51
|
597 QToolTip::add( pPreserveCarriageReturn, i18n(
|
joachim99@51
|
598 "Show carriage return characters '\\r' if they exist.\n"
|
joachim99@51
|
599 "Helps to compare files that were modified under different operating systems.")
|
joachim99@8
|
600 );
|
joachim99@8
|
601 ++line;
|
joachim99@8
|
602
|
joachim99@51
|
603 OptionCheckBox* pIgnoreNumbers = new OptionCheckBox( i18n("Ignore numbers"), false, "IgnoreNumbers", &m_bIgnoreNumbers, page, this );
|
joachim99@51
|
604 gbox->addMultiCellWidget( pIgnoreNumbers, line, line, 0, 1 );
|
joachim99@51
|
605 QToolTip::add( pIgnoreNumbers, i18n(
|
joachim99@51
|
606 "Ignore number characters during line matching phase. (Similar to Ignore white space.)\n"
|
joachim99@51
|
607 "Might help to compare files with numeric data.")
|
joachim99@8
|
608 );
|
joachim99@8
|
609 ++line;
|
joachim99@8
|
610
|
joachim99@68
|
611 OptionCheckBox* pIgnoreComments = new OptionCheckBox( i18n("Ignore C/C++ comments"), false, "IgnoreComments", &m_bIgnoreComments, page, this );
|
joachim99@51
|
612 gbox->addMultiCellWidget( pIgnoreComments, line, line, 0, 1 );
|
joachim99@51
|
613 QToolTip::add( pIgnoreComments, i18n( "Treat C/C++ comments like white space.")
|
joachim99@8
|
614 );
|
joachim99@8
|
615 ++line;
|
joachim99@8
|
616
|
joachim99@66
|
617 OptionCheckBox* pIgnoreCase = new OptionCheckBox( i18n("Ignore case"), false, "IgnoreCase", &m_bIgnoreCase, page, this );
|
joachim99@66
|
618 gbox->addMultiCellWidget( pIgnoreCase, line, line, 0, 1 );
|
joachim99@66
|
619 QToolTip::add( pIgnoreCase, i18n(
|
joachim99@66
|
620 "Treat case differences like white space changes. ('a'<=>'A')")
|
joachim99@8
|
621 );
|
joachim99@8
|
622 ++line;
|
joachim99@8
|
623
|
joachim99@51
|
624 label = new QLabel( i18n("Preprocessor command:"), page );
|
joachim99@8
|
625 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
626 OptionLineEdit* pLE = new OptionLineEdit( "", "PreProcessorCmd", &m_PreProcessorCmd, page, this );
|
joachim99@8
|
627 gbox->addWidget( pLE, line, 1 );
|
joachim99@8
|
628 QToolTip::add( label, i18n("User defined pre-processing. (See the docs for details.)") );
|
joachim99@8
|
629 ++line;
|
joachim99@8
|
630
|
joachim99@51
|
631 label = new QLabel( i18n("Line-matching preprocessor command:"), page );
|
joachim99@8
|
632 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
633 pLE = new OptionLineEdit( "", "LineMatchingPreProcessorCmd", &m_LineMatchingPreProcessorCmd, page, this );
|
joachim99@8
|
634 gbox->addWidget( pLE, line, 1 );
|
joachim99@8
|
635 QToolTip::add( label, i18n("This pre-processor is only used during line matching.\n(See the docs for details.)") );
|
joachim99@8
|
636 ++line;
|
joachim99@8
|
637
|
joachim99@51
|
638 OptionCheckBox* pTryHard = new OptionCheckBox( i18n("Try hard (slower)"), true, "TryHard", &m_bTryHard, page, this );
|
joachim99@51
|
639 gbox->addMultiCellWidget( pTryHard, line, line, 0, 1 );
|
joachim99@51
|
640 QToolTip::add( pTryHard, i18n(
|
joachim99@51
|
641 "Enables the --minimal option for the external diff.\n"
|
joachim99@51
|
642 "The analysis of big files will be much slower.")
|
joachim99@8
|
643 );
|
joachim99@8
|
644 ++line;
|
joachim99@8
|
645
|
joachim99@51
|
646 label = new QLabel( i18n("Auto advance delay (ms):"), page );
|
joachim99@8
|
647 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
648 OptionIntEdit* pAutoAdvanceDelay = new OptionIntEdit( 500, "AutoAdvanceDelay", &m_autoAdvanceDelay, 0, 2000, page, this );
|
joachim99@8
|
649 gbox->addWidget( pAutoAdvanceDelay, line, 1 );
|
joachim99@8
|
650 QToolTip::add( label,i18n(
|
joachim99@8
|
651 "When in Auto-Advance mode the result of the current selection is shown \n"
|
joachim99@8
|
652 "for the specified time, before jumping to the next conflict. Range: 0-2000 ms")
|
joachim99@8
|
653 );
|
joachim99@8
|
654 ++line;
|
joachim99@8
|
655
|
joachim99@51
|
656 label = new QLabel( i18n("White space 2-file merge default:"), page );
|
joachim99@51
|
657 gbox->addWidget( label, line, 0 );
|
joachim99@51
|
658 OptionComboBox* pWhiteSpace2FileMergeDefault = new OptionComboBox( 0, "WhiteSpace2FileMergeDefault", &m_whiteSpace2FileMergeDefault, page, this );
|
joachim99@51
|
659 gbox->addWidget( pWhiteSpace2FileMergeDefault, line, 1 );
|
joachim99@68
|
660 pWhiteSpace2FileMergeDefault->insertItem( i18n("Manual Choice"), 0 );
|
joachim99@51
|
661 pWhiteSpace2FileMergeDefault->insertItem( "A", 1 );
|
joachim99@51
|
662 pWhiteSpace2FileMergeDefault->insertItem( "B", 2 );
|
joachim99@58
|
663 QToolTip::add( label, i18n(
|
joachim99@51
|
664 "Allow the merge algorithm to automatically select an input for "
|
joachim99@51
|
665 "white-space-only changes." )
|
joachim99@51
|
666 );
|
joachim99@51
|
667 ++line;
|
joachim99@51
|
668
|
joachim99@51
|
669 label = new QLabel( i18n("White space 3-file merge default:"), page );
|
joachim99@51
|
670 gbox->addWidget( label, line, 0 );
|
joachim99@51
|
671 OptionComboBox* pWhiteSpace3FileMergeDefault = new OptionComboBox( 0, "WhiteSpace3FileMergeDefault", &m_whiteSpace3FileMergeDefault, page, this );
|
joachim99@51
|
672 gbox->addWidget( pWhiteSpace3FileMergeDefault, line, 1 );
|
joachim99@68
|
673 pWhiteSpace3FileMergeDefault->insertItem( i18n("Manual Choice"), 0 );
|
joachim99@51
|
674 pWhiteSpace3FileMergeDefault->insertItem( "A", 1 );
|
joachim99@51
|
675 pWhiteSpace3FileMergeDefault->insertItem( "B", 2 );
|
joachim99@51
|
676 pWhiteSpace3FileMergeDefault->insertItem( "C", 3 );
|
joachim99@58
|
677 QToolTip::add( label, i18n(
|
joachim99@51
|
678 "Allow the merge algorithm to automatically select an input for "
|
joachim99@51
|
679 "white-space-only changes." )
|
joachim99@51
|
680 );
|
joachim99@51
|
681 ++line;
|
joachim99@51
|
682
|
joachim99@8
|
683 topLayout->addStretch(10);
|
joachim99@8
|
684 }
|
joachim99@8
|
685
|
joachim99@8
|
686 void OptionDialog::setupDirectoryMergePage( void )
|
joachim99@8
|
687 {
|
joachim99@51
|
688 QFrame *page = addPage( i18n("Directory Merge"), i18n("Directory Merge"),
|
joachim99@8
|
689 BarIcon("folder", KIcon::SizeMedium ) );
|
joachim99@8
|
690 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
|
joachim99@8
|
691
|
joachim99@8
|
692 QGridLayout *gbox = new QGridLayout( 11, 2 );
|
joachim99@8
|
693 topLayout->addLayout( gbox );
|
joachim99@8
|
694 int line=0;
|
joachim99@8
|
695
|
joachim99@51
|
696 OptionCheckBox* pRecursiveDirs = new OptionCheckBox( i18n("Recursive directories"), true, "RecursiveDirs", &m_bDmRecursiveDirs, page, this );
|
joachim99@8
|
697 gbox->addMultiCellWidget( pRecursiveDirs, line, line, 0, 1 );
|
joachim99@8
|
698 QToolTip::add( pRecursiveDirs, i18n("Whether to analyze subdirectories or not.") );
|
joachim99@8
|
699 ++line;
|
joachim99@51
|
700 QLabel* label = new QLabel( i18n("File pattern(s):"), page );
|
joachim99@8
|
701 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
702 OptionLineEdit* pFilePattern = new OptionLineEdit( "*", "FilePattern", &m_DmFilePattern, page, this );
|
joachim99@8
|
703 gbox->addWidget( pFilePattern, line, 1 );
|
joachim99@8
|
704 QToolTip::add( label, i18n(
|
joachim99@8
|
705 "Pattern(s) of files to be analyzed. \n"
|
joachim99@8
|
706 "Wildcards: '*' and '?'\n"
|
joachim99@8
|
707 "Several Patterns can be specified by using the separator: ';'"
|
joachim99@8
|
708 ));
|
joachim99@8
|
709 ++line;
|
joachim99@8
|
710
|
joachim99@51
|
711 label = new QLabel( i18n("File-anti-pattern(s):"), page );
|
joachim99@8
|
712 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
713 OptionLineEdit* pFileAntiPattern = new OptionLineEdit( "*.orig;*.o", "FileAntiPattern", &m_DmFileAntiPattern, page, this );
|
joachim99@8
|
714 gbox->addWidget( pFileAntiPattern, line, 1 );
|
joachim99@8
|
715 QToolTip::add( label, i18n(
|
joachim99@8
|
716 "Pattern(s) of files to be excluded from analysis. \n"
|
joachim99@8
|
717 "Wildcards: '*' and '?'\n"
|
joachim99@8
|
718 "Several Patterns can be specified by using the separator: ';'"
|
joachim99@8
|
719 ));
|
joachim99@8
|
720 ++line;
|
joachim99@8
|
721
|
joachim99@51
|
722 label = new QLabel( i18n("Dir-anti-pattern(s):"), page );
|
joachim99@8
|
723 gbox->addWidget( label, line, 0 );
|
joachim99@8
|
724 OptionLineEdit* pDirAntiPattern = new OptionLineEdit( "CVS;.deps", "DirAntiPattern", &m_DmDirAntiPattern, page, this );
|
joachim99@8
|
725 gbox->addWidget( pDirAntiPattern, line, 1 );
|
joachim99@8
|
726 QToolTip::add( label, i18n(
|
joachim99@8
|
727 "Pattern(s) of directories to be excluded from analysis. \n"
|
joachim99@8
|
728 "Wildcards: '*' and '?'\n"
|
joachim99@8
|
729 "Several Patterns can be specified by using the separator: ';'"
|
joachim99@8
|
730 ));
|
joachim99@8
|
731 ++line;
|
joachim99@8
|
732
|
joachim99@51
|
733 OptionCheckBox* pUseCvsIgnore = new OptionCheckBox( i18n("Use .cvsignore"), false, "UseCvsIgnore", &m_bDmUseCvsIgnore, page, this );
|
joachim99@8
|
734 gbox->addMultiCellWidget( pUseCvsIgnore, line, line, 0, 1 );
|
joachim99@8
|
735 QToolTip::add( pUseCvsIgnore, i18n(
|
joachim99@8
|
736 "Extends the antipattern to anything that would be ignored by CVS.\n"
|
joachim99@8
|
737 "Via local \".cvsignore\"-files this can be directory specific."
|
joachim99@8
|
738 ));
|
joachim99@8
|
739 ++line;
|
joachim99@8
|
740
|
joachim99@51
|
741 OptionCheckBox* pFindHidden = new OptionCheckBox( i18n("Find hidden files and directories"), true, "FindHidden", &m_bDmFindHidden, page, this );
|
joachim99@8
|
742 gbox->addMultiCellWidget( pFindHidden, line, line, 0, 1 );
|
joachim99@8
|
743 #ifdef _WIN32
|
joachim99@8
|
744 QToolTip::add( pFindHidden, i18n("Finds files and directories with the hidden attribute.") );
|
joachim99@8
|
745 #else
|
joachim99@8
|
746 QToolTip::add( pFindHidden, i18n("Finds files and directories starting with '.'.") );
|
joachim99@8
|
747 #endif
|
joachim99@8
|
748 ++line;
|
joachim99@8
|
749
|
joachim99@51
|
750 OptionCheckBox* pFollowFileLinks = new OptionCheckBox( i18n("Follow file links"), false, "FollowFileLinks", &m_bDmFollowFileLinks, page, this );
|
joachim99@8
|
751 gbox->addMultiCellWidget( pFollowFileLinks, line, line, 0, 1 );
|
joachim99@8
|
752 QToolTip::add( pFollowFileLinks, i18n(
|
joachim99@8
|
753 "On: Compare the file the link points to.\n"
|
joachim99@8
|
754 "Off: Compare the links."
|
joachim99@8
|
755 ));
|
joachim99@8
|
756 ++line;
|
joachim99@8
|
757
|
joachim99@51
|
758 OptionCheckBox* pFollowDirLinks = new OptionCheckBox( i18n("Follow directory links"), false, "FollowDirLinks", &m_bDmFollowDirLinks, page, this );
|
joachim99@8
|
759 gbox->addMultiCellWidget( pFollowDirLinks, line, line, 0, 1 );
|
joachim99@8
|
760 QToolTip::add( pFollowDirLinks, i18n(
|
joachim99@8
|
761 "On: Compare the directory the link points to.\n"
|
joachim99@8
|
762 "Off: Compare the links."
|
joachim99@8
|
763 ));
|
joachim99@8
|
764 ++line;
|
joachim99@8
|
765
|
joachim99@8
|
766 OptionCheckBox* pShowOnlyDeltas = new OptionCheckBox( i18n("List only deltas"),false,"ListOnlyDeltas", &m_bDmShowOnlyDeltas, page, this );
|
joachim99@8
|
767 gbox->addMultiCellWidget( pShowOnlyDeltas, line, line, 0, 1 );
|
joachim99@8
|
768 QToolTip::add( pShowOnlyDeltas, i18n(
|
joachim99@8
|
769 "Files and directories without change will not appear in the list."));
|
joachim99@8
|
770 ++line;
|
joachim99@8
|
771
|
joachim99@66
|
772 QVButtonGroup* pBG = new QVButtonGroup(i18n("File Comparison Mode"),page);
|
joachim99@66
|
773 gbox->addMultiCellWidget( pBG, line, line, 0, 1 );
|
joachim99@66
|
774 ++line;
|
joachim99@66
|
775
|
joachim99@68
|
776 OptionRadioButton* pBinaryComparison = new OptionRadioButton( i18n("Binary comparison"), true, "BinaryComparison", &m_bDmBinaryComparison, pBG, this );
|
joachim99@66
|
777 QToolTip::add( pBinaryComparison, i18n("Binary comparison of each file. (Default)") );
|
joachim99@66
|
778
|
joachim99@68
|
779 OptionRadioButton* pFullAnalysis = new OptionRadioButton( i18n("Full analysis"), false, "FullAnalysis", &m_bDmFullAnalysis, pBG, this );
|
joachim99@66
|
780 QToolTip::add( pFullAnalysis, i18n("Do a full analysis and show statistics information in extra columns.\n"
|
joachim99@66
|
781 "(Slower than a binary comparison, much slower for binary files.)") );
|
joachim99@66
|
782
|
joachim99@66
|
783 OptionRadioButton* pTrustDate = new OptionRadioButton( i18n("Trust the modification date (unsafe)"), false, "TrustDate", &m_bDmTrustDate, pBG, this );
|
joachim99@8
|
784 QToolTip::add( pTrustDate, i18n("Assume that files are equal if the modification date and file length are equal.\n"
|
joachim99@8
|
785 "Useful for big directories or slow networks.") );
|
joachim99@8
|
786
|
joachim99@66
|
787 OptionRadioButton* pTrustSize = new OptionRadioButton( i18n("Trust the size (unsafe)"), false, "TrustSize", &m_bDmTrustSize, pBG, this );
|
joachim99@51
|
788 QToolTip::add( pTrustSize, i18n("Assume that files are equal if their file lengths are equal.\n"
|
joachim99@51
|
789 "Useful for big directories or slow networks when the date is modified during download.") );
|
joachim99@51
|
790
|
joachim99@8
|
791 // Some two Dir-options: Affects only the default actions.
|
joachim99@51
|
792 OptionCheckBox* pSyncMode = new OptionCheckBox( i18n("Synchronize directories"), false,"SyncMode", &m_bDmSyncMode, page, this );
|
joachim99@8
|
793 gbox->addMultiCellWidget( pSyncMode, line, line, 0, 1 );
|
joachim99@8
|
794 QToolTip::add( pSyncMode, i18n(
|
joachim99@8
|
795 "Offers to store files in both directories so that\n"
|
joachim99@8
|
796 "both directories are the same afterwards.\n"
|
joachim99@8
|
797 "Works only when comparing two directories without specifying a destination." ) );
|
joachim99@8
|
798 ++line;
|
joachim99@8
|
799
|
joachim99@68
|
800 // Allow white-space only differences to be considered equal
|
joachim99@68
|
801 OptionCheckBox* pWhiteSpaceDiffsEqual = new OptionCheckBox( i18n("White space differences considered equal"), false,"WhiteSpaceEqual", &m_bDmWhiteSpaceEqual, page, this );
|
joachim99@68
|
802 gbox->addMultiCellWidget( pWhiteSpaceDiffsEqual, line, line, 0, 1 );
|
joachim99@68
|
803 QToolTip::add( pWhiteSpaceDiffsEqual, i18n(
|
joachim99@68
|
804 "If files differ only by white space consider them equal.\n"
|
joachim99@68
|
805 "This is only active when full analysis is chosen." ) );
|
joachim99@68
|
806 connect(pFullAnalysis, SIGNAL(toggled(bool)), pWhiteSpaceDiffsEqual, SLOT(setEnabled(bool)));
|
joachim99@68
|
807 pWhiteSpaceDiffsEqual->setEnabled(false);
|
joachim99@68
|
808 ++line;
|
joachim99@68
|
809
|
joachim99@51
|
810 OptionCheckBox* pCopyNewer = new OptionCheckBox( i18n("Copy newer instead of merging (unsafe)"), false, "CopyNewer", &m_bDmCopyNewer, page, this );
|
joachim99@8
|
811 gbox->addMultiCellWidget( pCopyNewer, line, line, 0, 1 );
|
joachim99@8
|
812 QToolTip::add( pCopyNewer, i18n(
|
joachim99@8
|
813 "Don't look inside, just take the newer file.\n"
|
joachim99@8
|
814 "(Use this only if you know what you are doing!)\n"
|
joachim99@8
|
815 "Only effective when comparing two directories." ) );
|
joachim99@8
|
816 ++line;
|
joachim99@51
|
817
|
joachim99@8
|
818 OptionCheckBox* pCreateBakFiles = new OptionCheckBox( i18n("Backup files (.orig)"), true, "CreateBakFiles", &m_bDmCreateBakFiles, page, this );
|
joachim99@8
|
819 gbox->addMultiCellWidget( pCreateBakFiles, line, line, 0, 1 );
|
joachim99@8
|
820 QToolTip::add( pCreateBakFiles, i18n(
|
joachim99@8
|
821 "When a file would be saved over an old file, then the old file\n"
|
joachim99@8
|
822 "will be renamed with a '.orig'-extension instead of being deleted."));
|
joachim99@8
|
823 ++line;
|
joachim99@8
|
824
|
joachim99@8
|
825 topLayout->addStretch(10);
|
joachim99@8
|
826 }
|
joachim99@66
|
827 /*
|
joachim99@58
|
828 static void insertCodecs(OptionComboBox* p)
|
joachim99@58
|
829 {
|
joachim99@58
|
830 std::multimap<QString,QString> m; // Using the multimap for case-insensitive sorting.
|
joachim99@58
|
831 int i;
|
joachim99@58
|
832 for(i=0;;++i)
|
joachim99@58
|
833 {
|
joachim99@58
|
834 QTextCodec* pCodec = QTextCodec::codecForIndex ( i );
|
joachim99@58
|
835 if ( pCodec != 0 ) m.insert( std::make_pair( QString(pCodec->mimeName()).upper(), pCodec->mimeName()) );
|
joachim99@58
|
836 else break;
|
joachim99@58
|
837 }
|
joachim99@58
|
838
|
joachim99@58
|
839 p->insertItem( i18n("Auto"), 0 );
|
joachim99@58
|
840 std::multimap<QString,QString>::iterator mi;
|
joachim99@58
|
841 for(mi=m.begin(), i=0; mi!=m.end(); ++mi, ++i)
|
joachim99@58
|
842 p->insertItem(mi->second, i+1);
|
joachim99@58
|
843 }
|
joachim99@66
|
844 */
|
joachim99@58
|
845
|
joachim99@58
|
846 void OptionDialog::setupRegionalPage( void )
|
joachim99@58
|
847 {
|
joachim99@68
|
848 QFrame *page = addPage( i18n("Regional Settings"), i18n("Regional Settings"),
|
joachim99@68
|
849 BarIcon("locale"/*"charset"*/, KIcon::SizeMedium ) );
|
joachim99@68
|
850 QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
|
joachim99@68
|
851
|
joachim99@68
|
852 QGridLayout *gbox = new QGridLayout( 3, 2 );
|
joachim99@68
|
853 topLayout->addLayout( gbox );
|
joachim99@68
|
854 int line=0;
|
joachim99@68
|
855
|
joachim99@68
|
856 QLabel* label;
|
joachim99@68
|
857
|
joachim99@66
|
858 #ifdef KREPLACEMENTS_H
|
joachim99@66
|
859
|
joachim99@66
|
860 static char* countryMap[]={
|
joachim99@66
|
861 "af Afrikaans",
|
joachim99@66
|
862 "ar Arabic",
|
joachim99@66
|
863 "az Azerbaijani",
|
joachim99@66
|
864 "be Belarusian",
|
joachim99@66
|
865 "bg Bulgarian",
|
joachim99@66
|
866 "bn Bengali",
|
joachim99@66
|
867 "bo Tibetan",
|
joachim99@66
|
868 "br Breton",
|
joachim99@66
|
869 "bs Bosnian",
|
joachim99@66
|
870 "ca Catalan",
|
joachim99@66
|
871 "cs Czech",
|
joachim99@66
|
872 "cy Welsh",
|
joachim99@66
|
873 "da Danish",
|
joachim99@66
|
874 "de German",
|
joachim99@66
|
875 "el Greek",
|
joachim99@66
|
876 "en_GB British English",
|
joachim99@66
|
877 "eo Esperanto",
|
joachim99@66
|
878 "es Spanish",
|
joachim99@66
|
879 "et Estonian",
|
joachim99@66
|
880 "eu Basque",
|
joachim99@66
|
881 "fa Farsi (Persian)",
|
joachim99@66
|
882 "fi Finnish",
|
joachim99@66
|
883 "fo Faroese",
|
joachim99@66
|
884 "fr French",
|
joachim99@66
|
885 "ga Irish Gaelic",
|
joachim99@66
|
886 "gl Galician",
|
joachim99@66
|
887 "gu Gujarati",
|
joachim99@66
|
888 "he Hebrew",
|
joachim99@66
|
889 "hi Hindi",
|
joachim99@66
|
890 "hr Croatian",
|
joachim99@66
|
891 "hsb Upper Sorbian",
|
joachim99@66
|
892 "hu Hungarian",
|
joachim99@66
|
893 "id Indonesian",
|
joachim99@66
|
894 "is Icelandic",
|
joachim99@66
|
895 "it Italian",
|
joachim99@66
|
896 "ja Japanese",
|
joachim99@66
|
897 "ko Korean",
|
joachim99@66
|
898 "ku Kurdish",
|
joachim99@66
|
899 "lo Lao",
|
joachim99@66
|
900 "lt Lithuanian",
|
joachim99@66
|
901 "lv Latvian",
|
joachim99@66
|
902 "mi Maori",
|
joachim99@66
|
903 "mk Macedonian",
|
joachim99@66
|
904 "mn Mongolian",
|
joachim99@66
|
905 "ms Malay",
|
joachim99@66
|
906 "mt Maltese",
|
joachim99@66
|
907 "nb Norwegian Bookmal",
|
joachim99@66
|
908 "nds Low Saxon",
|
joachim99@66
|
909 "nl Dutch",
|
joachim99@66
|
910 "nn Norwegian Nynorsk",
|
joachim99@66
|
911 "nso Northern Sotho",
|
joachim99@66
|
912 "oc Occitan",
|
joachim99@66
|
913 "pl Polish",
|
joachim99@66
|
914 "pt Portuguese",
|
joachim99@66
|
915 "pt_BR Brazilian Portuguese",
|
joachim99@66
|
916 "ro Romanian",
|
joachim99@66
|
917 "ru Russian",
|
joachim99@66
|
918 "se Northern Sami",
|
joachim99@66
|
919 "sk Slovak",
|
joachim99@66
|
920 "sl Slovenian",
|
joachim99@66
|
921 "sq Albanian",
|
joachim99@66
|
922 "sr Serbian",
|
joachim99@66
|
923 "ss Swati",
|
joachim99@66
|
924 "sv Swedish",
|
joachim99@66
|
925 "ta Tamil",
|
joachim99@66
|
926 "tg Tajik",
|
joachim99@66
|
927 "th Thai",
|
joachim99@66
|
928 "tr Turkish",
|
joachim99@66
|
929 "uk Ukrainian",
|
joachim99@66
|
930 "uz Uzbek",
|
joachim99@66
|
931 "ven Venda",
|
joachim99@66
|
932 "vi Vietnamese",
|
joachim99@66
|
933 "wa Walloon",
|
joachim99@66
|
934 "xh Xhosa",
|
joachim99@66
|
935 "zh_CN Chinese Simplified",
|
joachim99@66
|
936 "zh_TW Chinese Traditional",
|
joachim99@66
|
937 "zu Zulu"
|
joachim99@66
|
938 };
|
joachim99@66
|
939
|
joachim99@58
|
940 label = new QLabel( i18n("Language (restart required)"), page );
|
joachim99@58
|
941 gbox->addWidget( label, line, 0 );
|
joachim99@58
|
942 OptionComboBox* pLanguage = new OptionComboBox( 0, "Language", &m_language, page, this );
|
joachim99@58
|
943 gbox->addWidget( pLanguage, line, 1 );
|
joachim99@66
|
944 pLanguage->insertItem( "Auto", 0 ); // Must not translate, won't work otherwise!
|
joachim99@66
|
945 pLanguage->insertItem( "en_orig" );
|
joachim99@66
|
946
|
joachim99@66
|
947 // Read directory: Find all kdiff3_*.qm-files and insert the found files here selection
|
joachim99@66
|
948 FileAccess fa( getTranslationDir() );
|
joachim99@66
|
949 t_DirectoryList dirList;
|
joachim99@66
|
950 fa.listDir( &dirList, false, false, "kdiff3_*.qm", "", "*", false, false );
|
joachim99@66
|
951 t_DirectoryList::iterator i;
|
joachim99@66
|
952 for( i=dirList.begin(); i!=dirList.end(); ++i)
|
joachim99@66
|
953 {
|
joachim99@66
|
954 QString fileName = i->fileName();
|
joachim99@66
|
955 // Skip the "kdiff3_" and omit the .qm
|
joachim99@66
|
956 QString languageId = fileName.mid(7, fileName.length()-10 );
|
joachim99@66
|
957
|
joachim99@66
|
958 unsigned int countryIdx=0;
|
joachim99@66
|
959 for(countryIdx=0; countryIdx< sizeof(countryMap)/sizeof(countryMap[0]); ++countryIdx )
|
joachim99@66
|
960 {
|
joachim99@66
|
961 QString fullName = countryMap[countryIdx];
|
joachim99@66
|
962 if ( languageId+" " == fullName.left(languageId.length()+1) )
|
joachim99@66
|
963 {
|
joachim99@66
|
964 languageId += " (" + fullName.mid(languageId.length()+1) + ")";
|
joachim99@66
|
965 }
|
joachim99@66
|
966 }
|
joachim99@66
|
967
|
joachim99@66
|
968 pLanguage->insertItem( languageId );
|
joachim99@66
|
969 }
|
joachim99@66
|
970
|
joachim99@58
|
971 QToolTip::add( label, i18n(
|
joachim99@58
|
972 "Choose the language of the GUI-strings or \"Auto\".\n"
|
joachim99@58
|
973 "For a change of language to take place, quit and restart KDiff3.")
|
joachim99@58
|
974 );
|
joachim99@58
|
975 ++line;
|
joachim99@66
|
976 /*
|
joachim99@58
|
977 label = new QLabel( i18n("Codec for file contents"), page );
|
joachim99@58
|
978 gbox->addWidget( label, line, 0 );
|
joachim99@58
|
979 OptionComboBox* pFileCodec = new OptionComboBox( 0, "FileCodec", &m_fileCodec, page, this );
|
joachim99@58
|
980 gbox->addWidget( pFileCodec, line, 1 );
|
joachim99@58
|
981 insertCodecs( pFileCodec );
|
joachim99@58
|
982 QToolTip::add( label, i18n(
|
joachim99@58
|
983 "Choose the codec that should be used for your input files\n"
|
joachim99@58
|
984 "or \"Auto\" if unsure." )
|
joachim99@58
|
985 );
|
joachim99@58
|
986 ++line;
|
joachim99@66
|
987 */
|
joachim99@68
|
988 #endif
|
joachim99@68
|
989
|
joachim99@68
|
990 m_pSameEncoding = new OptionCheckBox( i18n("Use the same encoding for everything:"), true, "SameEncoding", &m_bSameEncoding, page, this );
|
joachim99@68
|
991 gbox->addMultiCellWidget( m_pSameEncoding, line, line, 0, 1 );
|
joachim99@68
|
992 QToolTip::add( m_pSameEncoding, i18n(
|
joachim99@68
|
993 "Enable this allows to change all encodings by changing the first only.\n"
|
joachim99@68
|
994 "Disable this if different individual settings are needed."
|
joachim99@68
|
995 ) );
|
joachim99@68
|
996 ++line;
|
joachim99@68
|
997
|
joachim99@68
|
998 label = new QLabel( i18n("Note: Local Encoding is ") + QTextCodec::codecForLocale()->name(), page );
|
joachim99@68
|
999 gbox->addWidget( label, line, 0 );
|
joachim99@68
|
1000 ++line;
|
joachim99@68
|
1001
|
joachim99@68
|
1002 label = new QLabel( i18n("File Encoding for A:"), page );
|
joachim99@68
|
1003 gbox->addWidget( label, line, 0 );
|
joachim99@68
|
1004 m_pEncodingAComboBox = new OptionEncodingComboBox( "EncodingForA", &m_pEncodingA, page, this );
|
joachim99@68
|
1005 gbox->addWidget( m_pEncodingAComboBox, line, 1 );
|
joachim99@68
|
1006 ++line;
|
joachim99@68
|
1007 label = new QLabel( i18n("File Encoding for B:"), page );
|
joachim99@68
|
1008 gbox->addWidget( label, line, 0 );
|
joachim99@68
|
1009 m_pEncodingBComboBox = new OptionEncodingComboBox( "EncodingForB", &m_pEncodingB, page, this );
|
joachim99@68
|
1010 gbox->addWidget( m_pEncodingBComboBox, line, 1 );
|
joachim99@68
|
1011 ++line;
|
joachim99@68
|
1012 label = new QLabel( i18n("File Encoding for C:"), page );
|
joachim99@68
|
1013 gbox->addWidget( label, line, 0 );
|
joachim99@68
|
1014 m_pEncodingCComboBox = new OptionEncodingComboBox( "EncodingForC", &m_pEncodingC, page, this );
|
joachim99@68
|
1015 gbox->addWidget( m_pEncodingCComboBox, line, 1 );
|
joachim99@68
|
1016 ++line;
|
joachim99@68
|
1017 label = new QLabel( i18n("File Encoding for Merge Output and Saving:"), page );
|
joachim99@68
|
1018 gbox->addWidget( label, line, 0 );
|
joachim99@68
|
1019 m_pEncodingOutComboBox = new OptionEncodingComboBox( "EncodingForOutput", &m_pEncodingOut, page, this );
|
joachim99@68
|
1020 gbox->addWidget( m_pEncodingOutComboBox, line, 1 );
|
joachim99@68
|
1021 ++line;
|
joachim99@68
|
1022 label = new QLabel( i18n("File Encoding for Preprocessor Files:"), page );
|
joachim99@68
|
1023 gbox->addWidget( label, line, 0 );
|
joachim99@68
|
1024 m_pEncodingPPComboBox = new OptionEncodingComboBox( "EncodingForPP", &m_pEncodingPP, page, this );
|
joachim99@68
|
1025 gbox->addWidget( m_pEncodingPPComboBox, line, 1 );
|
joachim99@68
|
1026 ++line;
|
joachim99@68
|
1027
|
joachim99@68
|
1028 connect(m_pSameEncoding, SIGNAL(toggled(bool)), this, SLOT(slotEncodingChanged()));
|
joachim99@68
|
1029 connect(m_pEncodingAComboBox, SIGNAL(activated(int)), this, SLOT(slotEncodingChanged()));
|
joachim99@68
|
1030
|
joachim99@68
|
1031 OptionCheckBox* pRightToLeftLanguage = new OptionCheckBox( i18n("Right To Left Language"), false, "RightToLeftLanguage", &m_bRightToLeftLanguage, page, this );
|
joachim99@68
|
1032 gbox->addMultiCellWidget( pRightToLeftLanguage, line, line, 0, 1 );
|
joachim99@68
|
1033 QToolTip::add( pRightToLeftLanguage, i18n(
|
joachim99@68
|
1034 "Some languages are read from right to left.\n"
|
joachim99@68
|
1035 "This setting will change the viewer and editor accordingly."));
|
joachim99@68
|
1036 ++line;
|
joachim99@68
|
1037
|
joachim99@68
|
1038
|
joachim99@58
|
1039 topLayout->addStretch(10);
|
joachim99@58
|
1040 }
|
joachim99@58
|
1041
|
joachim99@68
|
1042 void OptionDialog::slotEncodingChanged()
|
joachim99@68
|
1043 {
|
joachim99@68
|
1044 if ( m_pSameEncoding->isChecked() )
|
joachim99@68
|
1045 {
|
joachim99@68
|
1046 m_pEncodingBComboBox->setEnabled( false );
|
joachim99@68
|
1047 m_pEncodingBComboBox->setCurrentItem( m_pEncodingAComboBox->currentItem() );
|
joachim99@68
|
1048 m_pEncodingCComboBox->setEnabled( false );
|
joachim99@68
|
1049 m_pEncodingCComboBox->setCurrentItem( m_pEncodingAComboBox->currentItem() );
|
joachim99@68
|
1050 m_pEncodingOutComboBox->setEnabled( false );
|
joachim99@68
|
1051 m_pEncodingOutComboBox->setCurrentItem( m_pEncodingAComboBox->currentItem() );
|
joachim99@68
|
1052 m_pEncodingPPComboBox->setEnabled( false );
|
joachim99@68
|
1053 m_pEncodingPPComboBox->setCurrentItem( m_pEncodingAComboBox->currentItem() );
|
joachim99@68
|
1054 }
|
joachim99@68
|
1055 else
|
joachim99@68
|
1056 {
|
joachim99@68
|
1057 m_pEncodingBComboBox->setEnabled( true );
|
joachim99@68
|
1058 m_pEncodingCComboBox->setEnabled( true );
|
joachim99@68
|
1059 m_pEncodingOutComboBox->setEnabled( true );
|
joachim99@68
|
1060 m_pEncodingPPComboBox->setEnabled( true );
|
joachim99@68
|
1061 }
|
joachim99@68
|
1062 }
|
joachim99@58
|
1063
|
joachim99@8
|
1064 void OptionDialog::setupKeysPage( void )
|
joachim99@8
|
1065 {
|
joachim99@8
|
1066 //QVBox *page = addVBoxPage( i18n("Keys"), i18n("KeyDialog" ),
|
joachim99@8
|
1067 // BarIcon("fonts", KIcon::SizeMedium ) );
|
joachim99@8
|
1068
|
joachim99@8
|
1069 //QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
|
joachim99@8
|
1070 // new KFontChooser( page,"font",false/*onlyFixed*/,QStringList(),false,6 );
|
joachim99@8
|
1071 //m_pKeyDialog=new KKeyDialog( false, 0 );
|
joachim99@8
|
1072 //topLayout->addWidget( m_pKeyDialog );
|
joachim99@8
|
1073 }
|
joachim99@8
|
1074
|
joachim99@8
|
1075 void OptionDialog::slotOk( void )
|
joachim99@8
|
1076 {
|
joachim99@8
|
1077 slotApply();
|
joachim99@8
|
1078
|
joachim99@8
|
1079 // My system returns variable width fonts even though I
|
joachim99@8
|
1080 // disabled this. Even QFont::fixedPitch() doesn't work.
|
joachim99@8
|
1081 QFontMetrics fm(m_font);
|
joachim99@8
|
1082 if ( fm.width('W')!=fm.width('i') )
|
joachim99@8
|
1083 {
|
joachim99@8
|
1084 int result = KMessageBox::warningYesNo(this, i18n(
|
joachim99@8
|
1085 "You selected a variable width font.\n\n"
|
joachim99@8
|
1086 "Because this program doesn't handle variable width fonts\n"
|
joachim99@8
|
1087 "correctly, you might experience problems while editing.\n\n"
|
joachim99@8
|
1088 "Do you want to continue or do you want to select another font."),
|
joachim99@51
|
1089 i18n("Incompatible Font"),
|
joachim99@51
|
1090 i18n("Continue at Own Risk"), i18n("Select Another Font"));
|
joachim99@8
|
1091 if (result==KMessageBox::No)
|
joachim99@8
|
1092 return;
|
joachim99@8
|
1093 }
|
joachim99@8
|
1094
|
joachim99@8
|
1095 accept();
|
joachim99@8
|
1096 }
|
joachim99@8
|
1097
|
joachim99@8
|
1098
|
joachim99@8
|
1099 /** Copy the values from the widgets to the public variables.*/
|
joachim99@8
|
1100 void OptionDialog::slotApply( void )
|
joachim99@8
|
1101 {
|
joachim99@8
|
1102 std::list<OptionItem*>::iterator i;
|
joachim99@8
|
1103 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
|
joachim99@8
|
1104 {
|
joachim99@8
|
1105 (*i)->apply();
|
joachim99@8
|
1106 }
|
joachim99@8
|
1107
|
joachim99@8
|
1108 // FontConfigDlg
|
joachim99@8
|
1109 m_font = m_fontChooser->font();
|
joachim99@8
|
1110
|
joachim99@8
|
1111 emit applyClicked();
|
joachim99@8
|
1112 }
|
joachim99@8
|
1113
|
joachim99@8
|
1114 /** Set the default values in the widgets only, while the
|
joachim99@8
|
1115 public variables remain unchanged. */
|
joachim99@8
|
1116 void OptionDialog::slotDefault()
|
joachim99@8
|
1117 {
|
joachim99@8
|
1118 int result = KMessageBox::warningContinueCancel(this, i18n("This resets all options. Not only those of the current topic.") );
|
joachim99@8
|
1119 if ( result==KMessageBox::Cancel ) return;
|
joachim99@8
|
1120 else resetToDefaults();
|
joachim99@8
|
1121 }
|
joachim99@8
|
1122
|
joachim99@8
|
1123 void OptionDialog::resetToDefaults()
|
joachim99@8
|
1124 {
|
joachim99@8
|
1125 std::list<OptionItem*>::iterator i;
|
joachim99@8
|
1126 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
|
joachim99@8
|
1127 {
|
joachim99@8
|
1128 (*i)->setToDefault();
|
joachim99@8
|
1129 }
|
joachim99@8
|
1130
|
joachim99@30
|
1131 #ifdef _WIN32
|
joachim99@30
|
1132 m_fontChooser->setFont( QFont("Courier New", 10 ), true /*only fixed*/ );
|
joachim99@66
|
1133 #elif defined( KREPLACEMENTS_H )
|
joachim99@66
|
1134 m_fontChooser->setFont( QFont("Courier", 10 ), true /*only fixed*/ );
|
joachim99@30
|
1135 #else
|
joachim99@66
|
1136 m_fontChooser->setFont( KGlobalSettings::fixedFont(), true /*only fixed*/ );
|
joachim99@30
|
1137 #endif
|
joachim99@68
|
1138 slotEncodingChanged();
|
joachim99@8
|
1139 }
|
joachim99@8
|
1140
|
joachim99@8
|
1141 /** Initialise the widgets using the values in the public varibles. */
|
joachim99@8
|
1142 void OptionDialog::setState()
|
joachim99@8
|
1143 {
|
joachim99@8
|
1144 std::list<OptionItem*>::iterator i;
|
joachim99@8
|
1145 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
|
joachim99@8
|
1146 {
|
joachim99@8
|
1147 (*i)->setToCurrent();
|
joachim99@8
|
1148 }
|
joachim99@8
|
1149
|
joachim99@8
|
1150 m_fontChooser->setFont( m_font, true /*only fixed*/ );
|
joachim99@68
|
1151 slotEncodingChanged();
|
joachim99@8
|
1152 }
|
joachim99@8
|
1153
|
joachim99@8
|
1154 void OptionDialog::saveOptions( KConfig* config )
|
joachim99@8
|
1155 {
|
joachim99@8
|
1156 // No i18n()-Translations here!
|
joachim99@8
|
1157
|
joachim99@8
|
1158 config->setGroup("KDiff3 Options");
|
joachim99@8
|
1159
|
joachim99@8
|
1160 std::list<OptionItem*>::iterator i;
|
joachim99@8
|
1161 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
|
joachim99@8
|
1162 {
|
joachim99@8
|
1163 (*i)->write(config);
|
joachim99@8
|
1164 }
|
joachim99@8
|
1165
|
joachim99@8
|
1166 // FontConfigDlg
|
joachim99@8
|
1167 config->writeEntry("Font", m_font );
|
joachim99@8
|
1168
|
joachim99@8
|
1169 // Recent files (selectable in the OpenDialog)
|
joachim99@8
|
1170 config->writeEntry( "RecentAFiles", m_recentAFiles, '|' );
|
joachim99@8
|
1171 config->writeEntry( "RecentBFiles", m_recentBFiles, '|' );
|
joachim99@8
|
1172 config->writeEntry( "RecentCFiles", m_recentCFiles, '|' );
|
joachim99@8
|
1173 config->writeEntry( "RecentOutputFiles", m_recentOutputFiles, '|' );
|
joachim99@8
|
1174 }
|
joachim99@8
|
1175
|
joachim99@8
|
1176 void OptionDialog::readOptions( KConfig* config )
|
joachim99@8
|
1177 {
|
joachim99@8
|
1178 // No i18n()-Translations here!
|
joachim99@8
|
1179
|
joachim99@8
|
1180 config->setGroup("KDiff3 Options");
|
joachim99@8
|
1181
|
joachim99@8
|
1182 std::list<OptionItem*>::iterator i;
|
joachim99@8
|
1183
|
joachim99@8
|
1184 for(i=m_optionItemList.begin(); i!=m_optionItemList.end(); ++i)
|
joachim99@8
|
1185 {
|
joachim99@8
|
1186 (*i)->read(config);
|
joachim99@8
|
1187 }
|
joachim99@8
|
1188
|
joachim99@8
|
1189 // Use the current values as default settings.
|
joachim99@8
|
1190
|
joachim99@8
|
1191 // FontConfigDlg
|
joachim99@8
|
1192 m_font = config->readFontEntry( "Font", &m_font);
|
joachim99@8
|
1193
|
joachim99@8
|
1194 // Recent files (selectable in the OpenDialog)
|
joachim99@8
|
1195 m_recentAFiles = config->readListEntry( "RecentAFiles", '|' );
|
joachim99@8
|
1196 m_recentBFiles = config->readListEntry( "RecentBFiles", '|' );
|
joachim99@8
|
1197 m_recentCFiles = config->readListEntry( "RecentCFiles", '|' );
|
joachim99@8
|
1198 m_recentOutputFiles = config->readListEntry( "RecentOutputFiles", '|' );
|
joachim99@8
|
1199
|
joachim99@8
|
1200 setState();
|
joachim99@8
|
1201 }
|
joachim99@8
|
1202
|
joachim99@8
|
1203 void OptionDialog::slotHelp( void )
|
joachim99@8
|
1204 {
|
joachim99@8
|
1205 KDialogBase::slotHelp();
|
joachim99@8
|
1206 }
|
joachim99@8
|
1207
|
joachim99@8
|
1208 #include "optiondialog.moc"
|