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