00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#include "katedialogs.h"
00026
#include "katedialogs.moc"
00027
00028
#include "katesyntaxdocument.h"
00029
#include "katedocument.h"
00030
#include "katefactory.h"
00031
#include "kateconfig.h"
00032
#include "kateschema.h"
00033
#include "kateautoindent.h"
00034
#include "kateview.h"
00035
00036
#include <kio/job.h>
00037
#include <kio/jobclasses.h>
00038
#include <kio/netaccess.h>
00039
00040
#include <kapplication.h>
00041
#include <kspell.h>
00042
#include <kbuttonbox.h>
00043
#include <kcharsets.h>
00044
#include <kcolorcombo.h>
00045
#include <kcolordialog.h>
00046
#include <kcombobox.h>
00047
#include <kdebug.h>
00048
#include <kprocess.h>
00049
#include <kglobal.h>
00050
#include <kglobalsettings.h>
00051
#include <kiconloader.h>
00052
#include <klineedit.h>
00053
#include <klocale.h>
00054
#include <kmessagebox.h>
00055
#include <knuminput.h>
00056
#include <kpopupmenu.h>
00057
#include <krun.h>
00058
#include <kstandarddirs.h>
00059
#include <kaccel.h>
00060
#include <kcharsets.h>
00061
#include <kcolorbutton.h>
00062
#include <kglobal.h>
00063
#include <kkeybutton.h>
00064
#include <kkeydialog.h>
00065
#include <klistview.h>
00066
#include <klocale.h>
00067
#include <kmessagebox.h>
00068
#include <kparts/componentfactory.h>
00069
#include <kregexpeditorinterface.h>
00070
#include <kcombobox.h>
00071
#include <kconfig.h>
00072
#include <kfontdialog.h>
00073
#include <knuminput.h>
00074
00075
#include <qcheckbox.h>
00076
#include <qcombobox.h>
00077
#include <qgroupbox.h>
00078
#include <qhbox.h>
00079
#include <qheader.h>
00080
#include <qhgroupbox.h>
00081
#include <qlabel.h>
00082
#include <qlayout.h>
00083
#include <qlineedit.h>
00084
#include <qlistview.h>
00085
#include <qmap.h>
00086
#include <qpainter.h>
00087
#include <qpointarray.h>
00088
#include <qpushbutton.h>
00089
#include <qtoolbutton.h>
00090
#include <qvbox.h>
00091
#include <qvgroupbox.h>
00092
#include <qwhatsthis.h>
00093
#include <qwidgetstack.h>
00094
#include <qbuttongroup.h>
00095
#include <qcheckbox.h>
00096
#include <qptrcollection.h>
00097
#include <qdialog.h>
00098
#include <qgrid.h>
00099
#include <qgroupbox.h>
00100
#include <qlabel.h>
00101
#include <qtextcodec.h>
00102
#include <qlayout.h>
00103
#include <qlineedit.h>
00104
#include <qlistbox.h>
00105
#include <qhbox.h>
00106
#include <qobjectlist.h>
00107
#include <qpushbutton.h>
00108
#include <qradiobutton.h>
00109
#include <qspinbox.h>
00110
#include <qstringlist.h>
00111
#include <qtabwidget.h>
00112
#include <qvbox.h>
00113
#include <qvgroupbox.h>
00114
#include <qwhatsthis.h>
00115
#include <qdom.h>
00116
00117
#define HLDOWNLOADPATH "http://www.kde.org/apps/kate/hl/update.xml"
00118
00119
00120 KateConfigPage::KateConfigPage (
QWidget *parent,
const char *name )
00121 : Kate::ConfigPage (parent,
name)
00122 , m_changed (false)
00123 {
00124 connect (
this, SIGNAL(changed()),
this, SLOT(somethingHasChanged ()));
00125 }
00126
00127 KateConfigPage::~KateConfigPage ()
00128 {
00129 }
00130
00131
void KateConfigPage::somethingHasChanged ()
00132 {
00133 m_changed =
true;
00134
kdDebug (13000) <<
"TEST: something changed on the config page: " <<
this <<
endl;
00135 }
00136
00137 SpellConfigPage::SpellConfigPage(
QWidget* parent )
00138 : KateConfigPage( parent)
00139 {
00140
QVBoxLayout* l =
new QVBoxLayout(
this );
00141 cPage =
new KSpellConfig(
this, 0L, 0L,
false );
00142 l->addWidget( cPage );
00143 connect( cPage, SIGNAL( configChanged() ),
this, SLOT( slotChanged() ) );
00144 }
00145
00146
void SpellConfigPage::apply ()
00147 {
00148
00149
if (!changed())
00150
return;
00151
00152
00153 cPage->writeGlobalSettings ();
00154 }
00155
00156
00157
const int IndentConfigTab::flags[] = {KateDocument::cfAutoIndent, KateDocument::cfSpaceIndent,
00158 KateDocument::cfBackspaceIndents,KateDocument::cfTabIndents, KateDocument::cfKeepIndentProfile, KateDocument::cfKeepExtraSpaces};
00159
00160 IndentConfigTab::IndentConfigTab(
QWidget *parent)
00161 : KateConfigPage(parent)
00162 {
00163
QVBoxLayout *layout =
new QVBoxLayout(
this, 0, KDialog::spacingHint() );
00164
int configFlags = KateDocumentConfig::global()->configFlags();
00165
00166
QVGroupBox *gbAuto =
new QVGroupBox(i18n(
"Automatic Indentation"),
this);
00167
00168 opt[0] =
new QCheckBox(i18n(
"A&ctivated"), gbAuto);
00169 opt[0]->setChecked(configFlags & flags[0]);
00170
00171
QHBox *e5Layout =
new QHBox(gbAuto);
00172
QLabel *e5Label =
new QLabel(i18n(
"&Indentation mode:"), e5Layout);
00173 m_indentMode =
new KComboBox (e5Layout);
00174 m_indentMode->insertStringList (KateAutoIndent::listModes());
00175 e5Label->
setBuddy(m_indentMode);
00176 layout->addWidget(gbAuto);
00177
00178 opt[4] =
new QCheckBox(i18n(
"Keep indent &profile"),
this);
00179 opt[4]->setChecked(configFlags & flags[4]);
00180 layout->addWidget(opt[4]);
00181
00182 opt[5] =
new QCheckBox(i18n(
"&Keep extra spaces"),
this);
00183 opt[5]->setChecked(configFlags & flags[5]);
00184 layout->addWidget(opt[5]);
00185
00186
QVGroupBox *gbWordWrap =
new QVGroupBox(i18n(
"Indentation with Spaces"),
this);
00187
00188 opt[1] =
new QCheckBox(i18n(
"Use &spaces instead of tabs to indent"), gbWordWrap );
00189 opt[1]->setChecked(configFlags & flags[1]);
00190 connect( opt[1], SIGNAL(toggled(
bool)),
this, SLOT(spacesToggled()));
00191
00192 indentationWidth =
new KIntNumInput(KateDocumentConfig::global()->indentationWidth(), gbWordWrap);
00193 indentationWidth->setRange(1, 16, 1,
false);
00194 indentationWidth->setLabel(i18n(
"Number of spaces:"), AlignVCenter);
00195
00196 layout->addWidget(gbWordWrap);
00197
00198
QVGroupBox *keys =
new QVGroupBox(i18n(
"Keys to Use"),
this);
00199
00200 opt[3] =
new QCheckBox(i18n(
"&Tab key indents"), keys);
00201 opt[3]->setChecked(configFlags & flags[3]);
00202
00203 opt[2] =
new QCheckBox(i18n(
"&Backspace key indents"), keys);
00204 opt[2]->setChecked(configFlags & flags[2]);
00205
00206 layout->addWidget(keys);
00207
00208
QRadioButton *rb1, *rb2, *rb3;
00209
00210 m_tabs =
new QButtonGroup( 1, Qt::Horizontal, i18n(
"Tab Key Mode if Nothing Selected"),
this );
00211 m_tabs->setRadioButtonExclusive(
true );
00212 m_tabs->insert( rb1=
new QRadioButton( i18n(
"Insert indent &characters"), m_tabs ), 0 );
00213 m_tabs->insert( rb2=
new QRadioButton( i18n(
"I&nsert tab character"), m_tabs ), 1 );
00214 m_tabs->insert( rb3=
new QRadioButton( i18n(
"Indent current &line"), m_tabs ), 2 );
00215
00216 layout->addWidget(m_tabs, 0 );
00217
00218 layout->addStretch();
00219
00220
00221
QWhatsThis::add(opt[0], i18n(
"When <b>Automatically indent</b> is on, KateView will indent new lines to equal the indentation on the previous line.<p>If the previous line is blank, the nearest line above with text is used."));
00222
QWhatsThis::add(opt[1], i18n(
"Check this if you want to indent with spaces rather than tabs."));
00223
QWhatsThis::add(opt[2], i18n(
"This allows the <b>Backspace</b> key to be used to decrease the indentation level."));
00224
QWhatsThis::add(opt[3], i18n(
"This allows the <b>Tab</b> key to be used to increase the indentation level."));
00225
QWhatsThis::add(opt[4], i18n(
"This retains current indentation settings for future documents."));
00226
QWhatsThis::add(opt[5], i18n(
"Indentations of more than the selected number of spaces will not be shortened."));
00227
QWhatsThis::add(indentationWidth, i18n(
"The number of spaces to indent with."));
00228
00229
reload ();
00230
00231
00232
00233
00234
00235 connect(m_indentMode, SIGNAL(activated(
int)),
this, SLOT(slotChanged()));
00236
00237 connect( opt[0], SIGNAL( toggled(
bool) ),
this, SLOT( slotChanged() ) );
00238 connect( opt[1], SIGNAL( toggled(
bool) ),
this, SLOT( slotChanged() ) );
00239 connect( opt[2], SIGNAL( toggled(
bool) ),
this, SLOT( slotChanged() ) );
00240 connect( opt[3], SIGNAL( toggled(
bool) ),
this, SLOT( slotChanged() ) );
00241 connect( opt[4], SIGNAL( toggled(
bool) ),
this, SLOT( slotChanged() ) );
00242 connect( opt[5], SIGNAL( toggled(
bool) ),
this, SLOT( slotChanged() ) );
00243
00244 connect(indentationWidth, SIGNAL(valueChanged(
int)),
this, SLOT(slotChanged()));
00245
00246 connect(rb1, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00247 connect(rb2, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00248 connect(rb3, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00249 }
00250
00251
void IndentConfigTab::spacesToggled() {
00252 indentationWidth->setEnabled(opt[1]->isChecked());
00253 }
00254
00255
void IndentConfigTab::apply ()
00256 {
00257
00258
if (!changed())
00259
return;
00260
00261 KateDocumentConfig::global()->configStart ();
00262
00263
int configFlags, z;
00264
00265 configFlags = KateDocumentConfig::global()->configFlags();
00266
for (z = 0; z < numFlags; z++) {
00267 configFlags &= ~flags[z];
00268
if (opt[z]->isChecked()) configFlags |= flags[z];
00269 }
00270
00271 KateDocumentConfig::global()->setConfigFlags(configFlags);
00272 KateDocumentConfig::global()->setIndentationWidth(indentationWidth->value());
00273
00274 KateDocumentConfig::global()->setIndentationMode(m_indentMode->currentItem());
00275
00276 KateDocumentConfig::global()->setConfigFlags (KateDocumentConfig::cfTabIndentsMode, 2 == m_tabs->id (m_tabs->selected()));
00277 KateDocumentConfig::global()->setConfigFlags (KateDocumentConfig::cfTabInsertsTab, 1 == m_tabs->id (m_tabs->selected()));
00278
00279 KateDocumentConfig::global()->configEnd ();
00280 }
00281
00282
void IndentConfigTab::reload ()
00283 {
00284
if (KateDocumentConfig::global()->configFlags() & KateDocumentConfig::cfTabIndentsMode)
00285 m_tabs->setButton (2);
00286
else if (KateDocumentConfig::global()->configFlags() & KateDocumentConfig::cfTabInsertsTab)
00287 m_tabs->setButton (1);
00288
else
00289 m_tabs->setButton (0);
00290
00291 m_indentMode->setCurrentItem (KateDocumentConfig::global()->indentationMode());
00292
00293 spacesToggled ();
00294 }
00295
00296
00297
00298 SelectConfigTab::SelectConfigTab(
QWidget *parent)
00299 : KateConfigPage(parent)
00300 {
00301
QVBoxLayout *layout =
new QVBoxLayout(
this, 0, KDialog::spacingHint() );
00302
00303
QRadioButton *rb1, *rb2;
00304
00305 m_tabs =
new QButtonGroup( 1, Qt::Horizontal, i18n(
"Selection Mode"),
this );
00306 layout->add (m_tabs);
00307
00308 m_tabs->setRadioButtonExclusive(
true );
00309 m_tabs->insert( rb1=
new QRadioButton( i18n(
"&Normal"), m_tabs ), 0 );
00310 m_tabs->insert( rb2=
new QRadioButton( i18n(
"&Persistent"), m_tabs ), 1 );
00311
00312
00313 layout->addStretch();
00314
00315
QWhatsThis::add(rb1, i18n(
"Selections will be overwritten by typed text and will be lost on cursor movement."));
00316
QWhatsThis::add(rb2, i18n(
"Selections will stay even after cursor movement and typing."));
00317
00318
reload ();
00319
00320
00321
00322
00323
00324 connect(rb1, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00325 connect(rb2, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00326 }
00327
00328
void SelectConfigTab::apply ()
00329 {
00330
00331
if (!changed())
00332
return;
00333
00334 KateDocumentConfig::global()->configStart ();
00335
00336
int configFlags = KateDocumentConfig::global()->configFlags();
00337
00338 configFlags &= ~KateDocumentConfig::cfPersistent;
00339
00340
if (m_tabs->id (m_tabs->selected()) == 1)
00341 configFlags |= KateDocumentConfig::cfPersistent;
00342
00343 KateDocumentConfig::global()->setConfigFlags(configFlags);
00344
00345 KateDocumentConfig::global()->configEnd ();
00346 }
00347
00348
void SelectConfigTab::reload ()
00349 {
00350
if (KateDocumentConfig::global()->configFlags() & KateDocumentConfig::cfPersistent)
00351 m_tabs->setButton (1);
00352
else
00353 m_tabs->setButton (0);
00354 }
00355
00356
00357
00358
const int EditConfigTab::flags[] = {KateDocument::cfWordWrap,
00359 KateDocument::cfAutoBrackets, KateDocument::cfShowTabs, KateDocument::cfSmartHome, KateDocument::cfWrapCursor};
00360
00361 EditConfigTab::EditConfigTab(
QWidget *parent)
00362 : KateConfigPage(parent)
00363 {
00364
QVBoxLayout *mainLayout =
new QVBoxLayout(
this, 0, KDialog::spacingHint() );
00365
int configFlags = KateDocumentConfig::global()->configFlags();
00366
00367
QVGroupBox *gbWhiteSpace =
new QVGroupBox(i18n(
"Tabulators"),
this);
00368
00369 opt[2] =
new QCheckBox(i18n(
"&Show tabs"), gbWhiteSpace);
00370 opt[2]->setChecked(configFlags & flags[2]);
00371 connect(opt[2], SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00372
00373 e2 =
new KIntNumInput(KateDocumentConfig::global()->tabWidth(), gbWhiteSpace);
00374 e2->setRange(1, 16, 1,
false);
00375 e2->setLabel(i18n(
"Tab width:"), AlignVCenter);
00376 connect(e2, SIGNAL(valueChanged(
int)),
this, SLOT(slotChanged()));
00377
00378 mainLayout->addWidget(gbWhiteSpace);
00379
00380
QVGroupBox *gbWordWrap =
new QVGroupBox(i18n(
"Static Word Wrap"),
this);
00381
00382 opt[0] =
new QCheckBox(i18n(
"Enable static &word wrap"), gbWordWrap);
00383 opt[0]->setChecked(KateDocumentConfig::global()->wordWrap());
00384 connect(opt[0], SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00385
00386 e1 =
new KIntNumInput(KateDocumentConfig::global()->wordWrapAt(), gbWordWrap);
00387 e1->setRange(20, 200, 1,
false);
00388 e1->setLabel(i18n(
"Wrap words at:"), AlignVCenter);
00389 connect(e1, SIGNAL(valueChanged(
int)),
this, SLOT(slotChanged()));
00390
00391 mainLayout->addWidget(gbWordWrap);
00392
00393
QVGroupBox *gbCursor =
new QVGroupBox(i18n(
"Text Cursor Movement"),
this);
00394
00395 opt[3] =
new QCheckBox(i18n(
"Smart ho&me"), gbCursor);
00396 opt[3]->setChecked(configFlags & flags[3]);
00397 connect(opt[3], SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00398
00399 opt[4] =
new QCheckBox(i18n(
"Wrap c&ursor"), gbCursor);
00400 opt[4]->setChecked(configFlags & flags[4]);
00401 connect(opt[4], SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00402
00403 e6 =
new QCheckBox(i18n(
"PageUp/PageDown moves cursor"), gbCursor);
00404 e6->setChecked(KateDocumentConfig::global()->pageUpDownMovesCursor());
00405 connect(e6, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00406
00407 e4 =
new KIntNumInput(KateViewConfig::global()->autoCenterLines(), gbCursor);
00408 e4->setRange(0, 1000000, 1,
false);
00409 e4->setLabel(i18n(
"Autocenter cursor (lines):"), AlignVCenter);
00410 connect(e4, SIGNAL(valueChanged(
int)),
this, SLOT(slotChanged()));
00411
00412 mainLayout->addWidget(gbCursor);
00413
00414 opt[1] =
new QCheckBox(i18n(
"Auto &brackets"),
this);
00415 mainLayout->addWidget(opt[1]);
00416 opt[1]->setChecked(configFlags & flags[1]);
00417 connect(opt[1], SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00418
00419 e3 =
new KIntNumInput(e2, KateDocumentConfig::global()->undoSteps(),
this);
00420 e3->setRange(0, 1000000, 1,
false);
00421 e3->setSpecialValueText( i18n(
"Unlimited") );
00422 e3->setLabel(i18n(
"Maximum undo steps:"), AlignVCenter);
00423 mainLayout->addWidget(e3);
00424 connect(e3, SIGNAL(valueChanged(
int)),
this, SLOT(slotChanged()));
00425
00426
QHBoxLayout *e5Layout =
new QHBoxLayout(mainLayout);
00427
QLabel *e5Label =
new QLabel(i18n(
"Smart search t&ext from:"),
this);
00428 e5Layout->addWidget(e5Label);
00429 e5 =
new KComboBox (
this);
00430 e5->insertItem( i18n(
"Nowhere") );
00431 e5->insertItem( i18n(
"Selection Only") );
00432 e5->insertItem( i18n(
"Selection, then Current Word") );
00433 e5->insertItem( i18n(
"Current Word Only") );
00434 e5->insertItem( i18n(
"Current Word, then Selection") );
00435 e5->setCurrentItem(KateViewConfig::global()->textToSearchMode());
00436 e5Layout->addWidget(e5);
00437 e5Label->
setBuddy(e5);
00438 connect(e5, SIGNAL(activated(
int)),
this, SLOT(slotChanged()));
00439
00440 mainLayout->addStretch();
00441
00442
00443
QWhatsThis::add(opt[0],
00444 i18n(
"Automatically start a new line of text when the current line exceeds the length specified by the <b>Wrap words at:</b> option.<p>This option does not wrap existing lines of text - use the <b>Apply Static Word Wrap</b> option in the <b>Tools</b> menu for that purpose.<p>If you want lines to be <i>visually wrapped</i> instead, according to the width of the view, enable <b>Dynamic Word Wrap</b> in the <b>View Defaults</b> config page."));
00445
QWhatsThis::add(e1, i18n(
"If the Word Wrap option is selected this entry determines the length (in characters) at which the editor will automatically start a new line."));
00446
QWhatsThis::add(opt[1], i18n(
"When the user types a left bracket ([,(, or {) KateView automatically enters the right bracket (}, ), or ]) to the right of the cursor."));
00447
QWhatsThis::add(opt[2], i18n(
"The editor will display a symbol to indicate the presence of a tab in the text."));
00448
QWhatsThis::add(opt[3], i18n(
"When selected, pressing the home key will cause the cursor to skip whitespace and go to the start of a line's text."));
00449
QWhatsThis::add(e3, i18n(
"Sets the number of undo/redo steps to record. More steps uses more memory."));
00450
QWhatsThis::add(e4, i18n(
"Sets the number of lines to maintain visible above and below the cursor when possible."));
00451
QWhatsThis::add(opt[4], i18n(
"When on, moving the insertion cursor using the <b>Left</b> and <b>Right</b> keys will go on to previous/next line at beginning/end of the line, similar to most editors.<p>When off, the insertion cursor cannot be moved left of the line start, but it can be moved off the line end, which can be very handy for programmers."));
00452
QWhatsThis::add(e6, i18n(
"Selects whether the PageUp and PageDown keys should alter the vertical position of the cursor relative to the top of the view."));
00453
QString gstfwt = i18n(
"This determines where KateView will get the search text from "
00454
"(this will be automatically entered into the Find Text dialog): "
00455
"<br>"
00456
"<ul>"
00457
"<li><b>Nowhere:</b> Don't guess the search text."
00458
"</li>"
00459
"<li><b>Selection Only:</b> Use the current text selection, "
00460
"if available."
00461
"</li>"
00462
"<li><b>Selection, then Current Word:</b> Use the current "
00463
"selection if available, otherwise use the current word."
00464
"</li>"
00465
"<li><b>Current Word Only:</b> Use the word that the cursor "
00466
"is currently resting on, if available."
00467
"</li>"
00468
"<li><b>Current Word, then Selection:</b> Use the current "
00469
"word if available, otherwise use the current selection."
00470
"</li>"
00471
"</ul>"
00472
"Note that, in all the above modes, if a search string has "
00473
"not been or cannot be determined, then the Find Text Dialog "
00474
"will fall back to the last search text.");
00475
QWhatsThis::add(e5Label, gstfwt);
00476
QWhatsThis::add(e5, gstfwt);
00477 }
00478
00479
void EditConfigTab::apply ()
00480 {
00481
00482
if (!changed())
00483
return;
00484
00485 KateViewConfig::global()->configStart ();
00486 KateDocumentConfig::global()->configStart ();
00487
00488
int configFlags, z;
00489
00490 configFlags = KateDocumentConfig::global()->configFlags();
00491
for (z = 1; z < numFlags; z++) {
00492 configFlags &= ~flags[z];
00493
if (opt[z]->isChecked()) configFlags |= flags[z];
00494 }
00495 KateDocumentConfig::global()->setConfigFlags(configFlags);
00496
00497 KateDocumentConfig::global()->setWordWrapAt(e1->value());
00498 KateDocumentConfig::global()->setWordWrap (opt[0]->isChecked());
00499 KateDocumentConfig::global()->setTabWidth(e2->value());
00500
00501
if (e3->value() <= 0)
00502 KateDocumentConfig::global()->setUndoSteps(0);
00503
else
00504 KateDocumentConfig::global()->setUndoSteps(e3->value());
00505
00506 KateViewConfig::global()->setAutoCenterLines(QMAX(0, e4->value()));
00507 KateViewConfig::global()->setTextToSearchMode(e5->currentItem());
00508 KateDocumentConfig::global()->setPageUpDownMovesCursor(e6->isChecked());
00509
00510 KateDocumentConfig::global()->configEnd ();
00511 KateViewConfig::global()->configEnd ();
00512 }
00513
00514
void EditConfigTab::reload ()
00515 {
00516
00517 }
00518
00519
00520
00521 ViewDefaultsConfig::ViewDefaultsConfig(
QWidget *parent)
00522 :KateConfigPage(parent)
00523 {
00524
QRadioButton *rb1;
00525
QRadioButton *rb2;
00526
00527
QVBoxLayout *blay=
new QVBoxLayout(
this,0,KDialog::spacingHint());
00528
00529
QVGroupBox *gbWordWrap =
new QVGroupBox(i18n(
"Word Wrap"),
this);
00530
00531 m_dynwrap=
new QCheckBox(i18n(
"&Dynamic word wrap"),gbWordWrap);
00532
00533
QHBox *m_dynwrapIndicatorsLay =
new QHBox (gbWordWrap);
00534 m_dynwrapIndicatorsLabel =
new QLabel( i18n(
"Dynamic word wrap indicators (if applicable):"), m_dynwrapIndicatorsLay );
00535 m_dynwrapIndicatorsCombo =
new KComboBox( m_dynwrapIndicatorsLay );
00536 m_dynwrapIndicatorsCombo->insertItem( i18n(
"Off") );
00537 m_dynwrapIndicatorsCombo->insertItem( i18n(
"Follow Line Numbers") );
00538 m_dynwrapIndicatorsCombo->insertItem( i18n(
"Always On") );
00539 m_dynwrapIndicatorsLabel->setBuddy(m_dynwrapIndicatorsCombo);
00540
00541 m_dynwrapAlignLevel =
new KIntNumInput(gbWordWrap);
00542 m_dynwrapAlignLevel->setLabel(i18n(
"Vertically align dynamically wrapped lines to indentation depth:"));
00543 m_dynwrapAlignLevel->setRange(0, 80, 10);
00544
00545 m_dynwrapAlignLevel->setSuffix(i18n(
"% of view width"));
00546 m_dynwrapAlignLevel->setSpecialValueText(i18n(
"Disabled"));
00547
00548 m_wwmarker =
new QCheckBox( i18n(
"Show static word wrap marker (if applicable)"), gbWordWrap );
00549
00550 blay->addWidget(gbWordWrap);
00551
00552
QVGroupBox *gbFold =
new QVGroupBox(i18n(
"Code Folding"),
this);
00553
00554 m_folding=
new QCheckBox(i18n(
"Show &folding markers (if available)"), gbFold );
00555 m_collapseTopLevel =
new QCheckBox( i18n(
"Collapse toplevel folding nodes"), gbFold );
00556 m_collapseTopLevel->hide ();
00557
00558 blay->addWidget(gbFold);
00559
00560
QVGroupBox *gbBar =
new QVGroupBox(i18n(
"Left Border"),
this);
00561
00562 m_icons=
new QCheckBox(i18n(
"Show &icon border"),gbBar);
00563 m_line=
new QCheckBox(i18n(
"Show &line numbers"),gbBar);
00564
00565 blay->addWidget(gbBar);
00566
00567 m_bmSort =
new QButtonGroup( 1, Qt::Horizontal, i18n(
"Sort Bookmarks Menu"),
this );
00568 m_bmSort->setRadioButtonExclusive(
true );
00569 m_bmSort->insert( rb1=
new QRadioButton( i18n(
"By &position"), m_bmSort ), 0 );
00570 m_bmSort->insert( rb2=
new QRadioButton( i18n(
"By c&reation"), m_bmSort ), 1 );
00571
00572 blay->addWidget(m_bmSort, 0 );
00573 blay->addStretch(1000);
00574
00575
QWhatsThis::add(m_dynwrap,i18n(
"If this option is checked, the text lines will be wrapped at the view border on the screen."));
00576
QString wtstr = i18n(
"Choose when the Dynamic Word Wrap Indicators should be displayed");
00577
QWhatsThis::add(m_dynwrapIndicatorsLabel, wtstr);
00578
QWhatsThis::add(m_dynwrapIndicatorsCombo, wtstr);
00579
00580
QWhatsThis::add(m_dynwrapAlignLevel, i18n(
"<p>Enables the start of dynamically wrapped lines to be aligned vertically to the indentation level of the first line. This can help to make code and markup more readable.</p><p>Additionally, this allows you to set a maximum width of the screen, as a percentage, after which dynamically wrapped lines will no longer be vertically aligned. For example, at 50%, lines whose indentation levels are deeper than 50% of the width of the screen will not have vertical alignment applied to subsequent wrapped lines.</p>"));
00581
QWhatsThis::add( m_wwmarker, i18n(
00582
"<p>If this option is checked, a vertical line will be drawn at the word "
00583
"wrap column as defined in the <strong>Editing</strong> properties."
00584
"<p>Note that the word wrap marker is only drawn if you use a fixed "
00585
"pitch font." ));
00586
QWhatsThis::add(m_line,i18n(
"If this option is checked, every new view will display line numbers on the left hand side."));
00587
QWhatsThis::add(m_icons,i18n(
"If this option is checked, every new view will display an icon border on the left hand side.<br><br>The icon border shows bookmark signs, for instance."));
00588
QWhatsThis::add(m_folding,i18n(
"If this option is checked, every new view will display marks for code folding, if code folding is available."));
00589
00590
QWhatsThis::add(m_bmSort,i18n(
"Choose how the bookmarks should be ordered in the <b>Bookmarks</b> menu."));
00591
QWhatsThis::add(rb1,i18n(
"The bookmarks will be ordered by the line numbers they are placed at."));
00592
QWhatsThis::add(rb2,i18n(
"Each new bookmark will be added to the bottom, independently from where it is placed in the document."));
00593
00594
reload();
00595
00596
00597
00598
00599
00600 connect(m_dynwrap, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00601 connect(m_dynwrapIndicatorsCombo, SIGNAL(activated(
int)),
this, SLOT(slotChanged()));
00602 connect(m_dynwrapAlignLevel, SIGNAL(valueChanged(
int)),
this, SLOT(slotChanged()));
00603 connect(m_wwmarker, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00604 connect(m_icons, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00605 connect(m_line, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00606 connect(m_folding, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00607 connect(m_collapseTopLevel, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()) );
00608 connect(rb1, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00609 connect(rb2, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00610 }
00611
00612 ViewDefaultsConfig::~ViewDefaultsConfig()
00613 {
00614 }
00615
00616
void ViewDefaultsConfig::apply ()
00617 {
00618
00619
if (!changed())
00620
return;
00621
00622 KateViewConfig::global()->configStart ();
00623 KateRendererConfig::global()->configStart ();
00624
00625 KateViewConfig::global()->setDynWordWrap (m_dynwrap->isChecked());
00626 KateViewConfig::global()->setDynWordWrapIndicators (m_dynwrapIndicatorsCombo->currentItem ());
00627 KateViewConfig::global()->setDynWordWrapAlignIndent(m_dynwrapAlignLevel->value());
00628 KateRendererConfig::global()->setWordWrapMarker (m_wwmarker->isChecked());
00629 KateViewConfig::global()->setLineNumbers (m_line->isChecked());
00630 KateViewConfig::global()->setIconBar (m_icons->isChecked());
00631 KateViewConfig::global()->setFoldingBar (m_folding->isChecked());
00632 KateViewConfig::global()->setBookmarkSort (m_bmSort->id (m_bmSort->selected()));
00633
00634 KateRendererConfig::global()->configEnd ();
00635 KateViewConfig::global()->configEnd ();
00636 }
00637
00638
void ViewDefaultsConfig::reload ()
00639 {
00640 m_dynwrap->setChecked(KateViewConfig::global()->dynWordWrap());
00641 m_dynwrapIndicatorsCombo->setCurrentItem( KateViewConfig::global()->dynWordWrapIndicators() );
00642 m_dynwrapAlignLevel->setValue(KateViewConfig::global()->dynWordWrapAlignIndent());
00643 m_wwmarker->setChecked( KateRendererConfig::global()->wordWrapMarker() );
00644 m_line->setChecked(KateViewConfig::global()->lineNumbers());
00645 m_icons->setChecked(KateViewConfig::global()->iconBar());
00646 m_folding->setChecked(KateViewConfig::global()->foldingBar());
00647 m_bmSort->setButton( KateViewConfig::global()->bookmarkSort() );
00648 }
00649
00650
void ViewDefaultsConfig::reset () {;}
00651
00652
void ViewDefaultsConfig::defaults (){;}
00653
00654
00655
00656
00657 EditKeyConfiguration::EditKeyConfiguration(
QWidget* parent, KateDocument* doc )
00658 : KateConfigPage( parent )
00659 {
00660 m_doc = doc;
00661 m_ready =
false;
00662 }
00663
00664
void EditKeyConfiguration::showEvent (
QShowEvent * )
00665 {
00666
if (!m_ready)
00667 {
00668 (
new QVBoxLayout(
this))->setAutoAdd(
true);
00669 KateView* view = (KateView*)m_doc->views().at(0);
00670 m_ac = view->editActionCollection();
00671 m_keyChooser =
new KKeyChooser( m_ac,
this,
false );
00672 connect( m_keyChooser, SIGNAL( keyChange() ),
this, SLOT( slotChanged() ) );
00673 m_keyChooser->show();
00674
00675 m_ready =
true;
00676 }
00677
00678
QWidget::show ();
00679 }
00680
00681
void EditKeyConfiguration::apply()
00682 {
00683
if (m_ready)
00684 {
00685 m_keyChooser->commitChanges();
00686 m_ac->writeShortcutSettings(
"Katepart Shortcuts" );
00687 }
00688 }
00689
00690
00691
00692 SaveConfigTab::SaveConfigTab(
QWidget *parent )
00693 : KateConfigPage( parent )
00694 {
00695
int configFlags = KateDocumentConfig::global()->configFlags();
00696
QVBoxLayout *layout =
new QVBoxLayout(
this, 0, KDialog::spacingHint() );
00697
00698
QVGroupBox *gbEnc =
new QVGroupBox(i18n(
"File Format"),
this);
00699 layout->addWidget( gbEnc );
00700
00701
QHBox *e5Layout =
new QHBox(gbEnc);
00702
QLabel *e5Label =
new QLabel(i18n(
"&Encoding:"), e5Layout);
00703 m_encoding =
new KComboBox (e5Layout);
00704 e5Label->
setBuddy(m_encoding);
00705
00706
00707 e5Layout =
new QHBox(gbEnc);
00708 e5Label =
new QLabel(i18n(
"End &of line:"), e5Layout);
00709 m_eol =
new KComboBox (e5Layout);
00710 e5Label->
setBuddy(m_eol);
00711
00712 m_eol->insertItem (i18n(
"Unix"));
00713 m_eol->insertItem (i18n(
"Dos/Windows"));
00714 m_eol->insertItem (i18n(
"Macintosh"));
00715
00716
QVGroupBox *gbWhiteSpace =
new QVGroupBox(i18n(
"Automatic Cleanups on Save"),
this);
00717 layout->addWidget( gbWhiteSpace );
00718
00719 replaceTabs =
new QCheckBox(i18n(
"Replace &tabs with spaces"), gbWhiteSpace);
00720 replaceTabs->setChecked(configFlags & KateDocument::cfReplaceTabs);
00721
00722
00723 removeSpaces =
new QCheckBox(i18n(
"Re&move trailing spaces"), gbWhiteSpace);
00724 removeSpaces->setChecked(configFlags & KateDocument::cfRemoveSpaces);
00725
00726
QGroupBox *gb =
new QGroupBox( 1, Qt::Horizontal, i18n(
"Backup on Save"),
this );
00727 layout->addWidget( gb );
00728 cbLocalFiles =
new QCheckBox( i18n(
"&Local files"), gb );
00729 cbRemoteFiles =
new QCheckBox( i18n(
"&Remote files"), gb );
00730
QHBox *hbBuSuffix =
new QHBox( gb );
00731
QLabel *lBuSuffix =
new QLabel( i18n(
"&Suffix:"), hbBuSuffix );
00732 leBuSuffix =
new QLineEdit( hbBuSuffix );
00733 lBuSuffix->
setBuddy( leBuSuffix );
00734
00735 layout->addStretch();
00736
00737
QWhatsThis::add(replaceTabs, i18n(
"KateView will replace any tabs with the number of spaces indicated in the Tab Width: entry."));
00738
QWhatsThis::add(removeSpaces, i18n(
"KateView will automatically eliminate extra spaces at the ends of lines of text."));
00739
00740
QWhatsThis::add( gb, i18n(
00741
"<p>Backing up on save will cause Kate to copy the disk file to "
00742
"'<filename><suffix>' before saving changes."
00743
"<p>The suffix defaults to <strong>~</strong>" ) );
00744
QWhatsThis::add( cbLocalFiles, i18n(
00745
"Check this if you want backups of local files when saving") );
00746
QWhatsThis::add( cbRemoteFiles, i18n(
00747
"Check this if you want backups of remote files when saving") );
00748
QWhatsThis::add( leBuSuffix, i18n(
00749
"Enter the suffix to add to the backup file names" ) );
00750
00751
reload();
00752
00753
00754
00755
00756
00757 connect(m_encoding, SIGNAL(activated(
int)),
this, SLOT(slotChanged()));
00758 connect(m_eol, SIGNAL(activated(
int)),
this, SLOT(slotChanged()));
00759 connect(replaceTabs, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00760 connect(removeSpaces, SIGNAL(toggled(
bool)),
this, SLOT(slotChanged()));
00761 connect( cbLocalFiles, SIGNAL( toggled(
bool) ),
this, SLOT( slotChanged() ) );
00762 connect( cbRemoteFiles, SIGNAL( toggled(
bool) ),
this, SLOT( slotChanged() ) );
00763 connect( leBuSuffix, SIGNAL( textChanged (
const QString & ) ),
this, SLOT( slotChanged() ) );
00764 }
00765
00766
void SaveConfigTab::apply()
00767 {
00768
00769
if (!changed())
00770
return;
00771
00772 KateDocumentConfig::global()->configStart ();
00773
00774
if ( leBuSuffix->text().isEmpty() ) {
00775
KMessageBox::information(
00776
this,
00777 i18n(
"You didn't provide a backup suffix. Using default: '~'"),
00778 i18n(
"No Backup Suffix")
00779 );
00780 leBuSuffix->setText(
"~" );
00781 }
00782
00783 uint f( 0 );
00784
if ( cbLocalFiles->isChecked() )
00785 f |= KateDocumentConfig::LocalFiles;
00786
if ( cbRemoteFiles->isChecked() )
00787 f |= KateDocumentConfig::RemoteFiles;
00788
00789 KateDocumentConfig::global()->setBackupFlags(f);
00790 KateDocumentConfig::global()->setBackupSuffix(leBuSuffix->text());
00791
00792
int configFlags = KateDocumentConfig::global()->configFlags();
00793
00794 configFlags &= ~KateDocument::cfReplaceTabs;
00795
if (replaceTabs->isChecked()) configFlags |= KateDocument::cfReplaceTabs;
00796
00797 configFlags &= ~KateDocument::cfRemoveSpaces;
00798
if (removeSpaces->isChecked()) configFlags |= KateDocument::cfRemoveSpaces;
00799
00800 KateDocumentConfig::global()->setConfigFlags(configFlags);
00801
00802 KateDocumentConfig::global()->setEncoding(KGlobal::charsets()->encodingForName(m_encoding->currentText()));
00803
00804 KateDocumentConfig::global()->setEol(m_eol->currentItem());
00805
00806 KateDocumentConfig::global()->configEnd ();
00807 }
00808
00809
void SaveConfigTab::reload()
00810 {
00811
00812 m_encoding->clear ();
00813
QStringList encodings (KGlobal::charsets()->descriptiveEncodingNames());
00814
int insert = 0;
00815
for (uint i=0; i < encodings.count(); i++)
00816 {
00817
bool found =
false;
00818
QTextCodec *codecForEnc =
KGlobal::charsets()->
codecForName(KGlobal::charsets()->encodingForName(encodings[i]), found);
00819
00820
if (found)
00821 {
00822 m_encoding->insertItem (encodings[i]);
00823
00824
if ( codecForEnc->
name() == KateDocumentConfig::global()->encoding() )
00825 {
00826 m_encoding->setCurrentItem(insert);
00827 }
00828
00829
insert++;
00830 }
00831 }
00832
00833
00834 m_eol->setCurrentItem(KateDocumentConfig::global()->eol());
00835
00836
00837 uint f ( KateDocumentConfig::global()->backupFlags() );
00838 cbLocalFiles->setChecked( f & KateDocumentConfig::LocalFiles );
00839 cbRemoteFiles->setChecked( f & KateDocumentConfig::RemoteFiles );
00840 leBuSuffix->setText( KateDocumentConfig::global()->backupSuffix() );
00841 }
00842
00843
void SaveConfigTab::reset()
00844 {
00845 }
00846
00847
void SaveConfigTab::defaults()
00848 {
00849 cbLocalFiles->setChecked(
true );
00850 cbRemoteFiles->setChecked(
false );
00851 leBuSuffix->setText(
"~" );
00852 }
00853
00854
00855
00856
00857
class KatePartPluginListItem :
public QCheckListItem
00858 {
00859
public:
00860 KatePartPluginListItem(
bool checked, uint i,
const QString &name,
QListView *parent);
00861 uint pluginIndex ()
const {
return index; }
00862
00863
protected:
00864
void stateChange(
bool);
00865
00866
private:
00867 uint index;
00868
bool silentStateChange;
00869 };
00870
00871 KatePartPluginListItem::KatePartPluginListItem(
bool checked, uint i,
const QString &name,
QListView *parent)
00872 :
QCheckListItem(parent,
name, CheckBox)
00873 , index(i)
00874 , silentStateChange(false)
00875 {
00876 silentStateChange =
true;
00877 setOn(checked);
00878 silentStateChange =
false;
00879 }
00880
00881
void KatePartPluginListItem::stateChange(
bool b)
00882 {
00883
if(!silentStateChange)
00884 static_cast<KatePartPluginListView *>(listView())->stateChanged(
this, b);
00885 }
00886
00887
00888
00889 KatePartPluginListView::KatePartPluginListView(
QWidget *parent,
const char *name)
00890 :
KListView(parent,
name)
00891 {
00892 }
00893
00894
void KatePartPluginListView::stateChanged(KatePartPluginListItem *item,
bool b)
00895 {
00896 emit stateChange(item, b);
00897 }
00898
00899
00900
00901 PluginConfigPage::PluginConfigPage (
QWidget *parent) : KateConfigPage (parent,
"")
00902 {
00903
00904
QGridLayout *grid =
new QGridLayout(
this, 1, 1 );
00905
00906 listView =
new KatePartPluginListView(
this);
00907 listView->addColumn(i18n(
"Name"));
00908 listView->addColumn(i18n(
"Comment"));
00909
00910 grid->
addWidget( listView, 0, 0);
00911
00912
for (uint i=0; i<KateFactory::self()->plugins().count(); i++)
00913 {
00914 KatePartPluginListItem *item =
new KatePartPluginListItem(KateDocumentConfig::global()->plugin(i), i, (KateFactory::self()->plugins())[i]->
name(), listView);
00915 item->setText(0, (KateFactory::self()->plugins())[i]->
name());
00916 item->setText(1, (KateFactory::self()->plugins())[i]->comment());
00917
00918 m_items.append (item);
00919 }
00920
00921 connect(listView, SIGNAL(stateChange(KatePartPluginListItem *,
bool)),
this, SLOT(slotChanged()));
00922 }
00923
00924 PluginConfigPage::~PluginConfigPage ()
00925 {
00926 }
00927
00928
void PluginConfigPage::apply ()
00929 {
00930
00931
if (!changed())
00932
return;
00933
00934 KateDocumentConfig::global()->configStart ();
00935
00936
for (uint i=0; i < m_items.count(); i++)
00937 KateDocumentConfig::global()->setPlugin (m_items.at(i)->pluginIndex(), m_items.at(i)->isOn());
00938
00939 KateDocumentConfig::global()->configEnd ();
00940 }
00941
00942
00943
00944 HlConfigPage::HlConfigPage (
QWidget *parent)
00945 : KateConfigPage (parent,
"")
00946 , hlData (0)
00947 {
00948
QVBoxLayout *layout =
new QVBoxLayout(
this, 0, KDialog::spacingHint() );
00949
00950
00951
QHBox *hbHl =
new QHBox(
this );
00952 layout->add (hbHl);
00953
00954 hbHl->
setSpacing( KDialog::spacingHint() );
00955
QLabel *lHl =
new QLabel( i18n(
"H&ighlight:"), hbHl );
00956 hlCombo =
new QComboBox(
false, hbHl );
00957 lHl->
setBuddy( hlCombo );
00958 connect( hlCombo, SIGNAL(activated(
int)),
00959
this, SLOT(hlChanged(
int)) );
00960
00961
for(
int i = 0; i < HlManager::self()->highlights(); i++) {
00962
if (HlManager::self()->hlSection(i).length() > 0)
00963 hlCombo->insertItem(HlManager::self()->hlSection(i) + QString (
"/") + HlManager::self()->hlName(i));
00964
else
00965 hlCombo->insertItem(HlManager::self()->hlName(i));
00966 }
00967 hlCombo->setCurrentItem(0);
00968
00969
QGroupBox *gbProps =
new QGroupBox( 1, Qt::Horizontal, i18n(
"Properties"),
this );
00970 layout->add (gbProps);
00971
00972
00973
QHBox *hbFE =
new QHBox( gbProps);
00974
QLabel *lFileExts =
new QLabel( i18n(
"File e&xtensions:"), hbFE );
00975 wildcards =
new QLineEdit( hbFE );
00976 lFileExts->
setBuddy( wildcards );
00977
00978
QHBox *hbMT =
new QHBox( gbProps );
00979
QLabel *lMimeTypes =
new QLabel( i18n(
"MIME &types:"), hbMT);
00980 mimetypes =
new QLineEdit( hbMT );
00981 lMimeTypes->
setBuddy( mimetypes );
00982
00983
QHBox *hbMT2 =
new QHBox( gbProps );
00984
QLabel *lprio =
new QLabel( i18n(
"Prio&rity:"), hbMT2);
00985 priority =
new KIntNumInput( hbMT2 );
00986
00987 lprio->
setBuddy( priority );
00988
00989
QToolButton *btnMTW =
new QToolButton(hbMT);
00990 btnMTW->
setIconSet(
QIconSet(SmallIcon(
"wizard")));
00991 connect(btnMTW, SIGNAL(clicked()),
this, SLOT(showMTDlg()));
00992
00993
00994
QHBox *hbBtns =
new QHBox(
this );
00995 layout->add (hbBtns);
00996
00997 ((
QBoxLayout*)hbBtns->layout())->addStretch(1);
00998 hbBtns->
setSpacing( KDialog::spacingHint() );
00999
QPushButton *btnDl =
new QPushButton(i18n(
"Do&wnload..."), hbBtns);
01000 connect( btnDl, SIGNAL(clicked()),
this, SLOT(hlDownload()) );
01001
01002 hlCombo->setCurrentItem( 0 );
01003 hlChanged(0);
01004
01005
QWhatsThis::add( hlCombo, i18n(
"Choose a <em>Syntax Highlight mode</em> from this list to view its properties below.") );
01006
QWhatsThis::add( wildcards, i18n(
"The list of file extensions used to determine which files to highlight using the current syntax highlight mode.") );
01007
QWhatsThis::add( mimetypes, i18n(
"The list of Mime Types used to determine which files to highlight using the current highlight mode.<p>Click the wizard button on the left of the entry field to display the MimeType selection dialog.") );
01008
QWhatsThis::add( btnMTW, i18n(
"Display a dialog with a list of all available mime types to choose from.<p>The <strong>File Extensions</strong> entry will automatically be edited as well.") );
01009
QWhatsThis::add( btnDl, i18n(
"Click this button to download new or updated syntax highlight descriptions from the Kate website.") );
01010
01011 layout->addStretch ();
01012
01013 connect( wildcards, SIGNAL( textChanged (
const QString & ) ),
this, SLOT( slotChanged() ) );
01014 connect( mimetypes, SIGNAL( textChanged (
const QString & ) ),
this, SLOT( slotChanged() ) );
01015 connect( priority, SIGNAL( valueChanged (
int ) ),
this, SLOT( slotChanged() ) );
01016 }
01017
01018 HlConfigPage::~HlConfigPage ()
01019 {
01020 }
01021
01022
void HlConfigPage::apply ()
01023 {
01024
01025
if (!changed())
01026
return;
01027
01028 writeback();
01029
01030
for (
QIntDictIterator<HlData> it( hlDataDict ); it.current(); ++it )
01031 HlManager::self()->getHl( it.currentKey() )->setData( it.current() );
01032
01033 HlManager::self()->getKConfig()->sync ();
01034 }
01035
01036
void HlConfigPage::reload ()
01037 {
01038 }
01039
01040
void HlConfigPage::hlChanged(
int z)
01041 {
01042 writeback();
01043
01044
if ( ! hlDataDict.find( z ) )
01045 hlDataDict.insert( z, HlManager::self()->getHl( z )->getData() );
01046
01047 hlData = hlDataDict.find( z );
01048 wildcards->setText(hlData->wildcards);
01049 mimetypes->setText(hlData->mimetypes);
01050 priority->setValue(hlData->priority);
01051 }
01052
01053
void HlConfigPage::writeback()
01054 {
01055
if (hlData)
01056 {
01057 hlData->wildcards = wildcards->text();
01058 hlData->mimetypes = mimetypes->text();
01059 hlData->priority = priority->value();
01060 }
01061 }
01062
01063
void HlConfigPage::hlDownload()
01064 {
01065 HlDownloadDialog diag(
this,
"hlDownload",
true);
01066 diag.exec();
01067 }
01068
01069
void HlConfigPage::showMTDlg()
01070 {
01071 QString text = i18n(
"Select the MimeTypes you want highlighted using the '%1' syntax highlight rules.\nPlease note that this will automatically edit the associated file extensions as well.").arg( hlCombo->currentText() );
01072
QStringList list =
QStringList::split(
QRegExp(
"\\s*;\\s*"), mimetypes->text() );
01073
KMimeTypeChooserDlg *d =
new KMimeTypeChooserDlg(
this, i18n(
"Select Mime Types"), text, list );
01074
01075
if ( d->
exec() == KDialogBase::Accepted ) {
01076
01077
01078 wildcards->setText(d->
patterns().
join(
";"));
01079 mimetypes->setText(d->
mimeTypes().
join(
";"));
01080 }
01081 }
01082
01083
01084
01085
01086
01087
01088 KMimeTypeChooser::KMimeTypeChooser(
QWidget *parent,
const QString &text,
const QStringList &selectedMimeTypes,
bool editbutton,
bool showcomment,
bool showpatterns)
01089 :
QVBox( parent )
01090 {
01091 setSpacing( KDialogBase::spacingHint() );
01092
01093
01094
01095
01096
01097
if ( !text.
isEmpty() ) {
01098
new QLabel( text,
this );
01099 }
01100
01101 lvMimeTypes =
new QListView(
this );
01102 lvMimeTypes->addColumn( i18n(
"Mime Type") );
01103
if ( showcomment )
01104 lvMimeTypes->addColumn( i18n(
"Comment") );
01105
if ( showpatterns )
01106 lvMimeTypes->addColumn( i18n(
"Patterns") );
01107 lvMimeTypes->setRootIsDecorated(
true );
01108
01109
01110
QMap<QString,QListViewItem*> groups;
01111
01112
KMimeType::List mimetypes =
KMimeType::allMimeTypes();
01113
QValueListIterator<KMimeType::Ptr> it(mimetypes.
begin());
01114
01115
QListViewItem *groupItem;
01116
bool agroupisopen =
false;
01117
QListViewItem *idefault = 0;
01118
for (; it != mimetypes.
end(); ++it) {
01119 QString
mimetype = (*it)->name();
01120
int index =
mimetype.find(
"/");
01121 QString maj =
mimetype.left(index);
01122 QString min =
mimetype.right(
mimetype.length() - (index+1));
01123
01124
QMapIterator<QString,QListViewItem*> mit = groups.
find( maj );
01125
if ( mit == groups.
end() ) {
01126 groupItem =
new QListViewItem( lvMimeTypes, maj );
01127 groups.
insert( maj, groupItem );
01128
if (maj ==
"text")
01129 idefault = groupItem;
01130 }
01131
else
01132 groupItem = mit.
data();
01133
01134
QCheckListItem *item =
new QCheckListItem( groupItem, min, QCheckListItem::CheckBox );
01135 item->setPixmap( 0, SmallIcon( (*it)->icon(QString::null,
false) ) );
01136
int cl = 1;
01137
if ( showcomment ) {
01138 item->setText( cl, (*it)->comment(QString::null,
false) );
01139 cl++;
01140 }
01141
if ( showpatterns )
01142 item->setText( cl, (*it)->patterns().join(
"; ") );
01143
if ( selectedMimeTypes.contains(mimetype) ) {
01144 item->
setOn(
true );
01145 groupItem->
setOpen(
true );
01146 agroupisopen =
true;
01147 lvMimeTypes->ensureItemVisible( item );
01148 }
01149 }
01150
01151
if (! agroupisopen)
01152 idefault->
setOpen(
true );
01153
01154
if (editbutton) {
01155
QHBox *btns =
new QHBox(
this );
01156 ((
QBoxLayout*)btns->layout())->addStretch(1);
01157 btnEditMimeType =
new QPushButton( i18n(
"&Edit..."), btns );
01158 connect( btnEditMimeType, SIGNAL(clicked()),
this, SLOT(editMimeType()) );
01159 btnEditMimeType->setEnabled(
false );
01160 connect( lvMimeTypes, SIGNAL( doubleClicked (
QListViewItem * )),
this, SLOT( editMimeType()));
01161 connect( lvMimeTypes, SIGNAL(currentChanged(QListViewItem*)),
this, SLOT(slotCurrentChanged(QListViewItem*)) );
01162
QWhatsThis::add( btnEditMimeType, i18n(
"Click this button to display the familiar KDE File Type Editor.<p><strong>Warning:</strong> if you change the file extensions, you need to restart this dialog, as it will not be aware that they have changed.") );
01163 }
01164 }
01165
01166
void KMimeTypeChooser::editMimeType()
01167 {
01168
if ( !(lvMimeTypes->
currentItem() && (lvMimeTypes->
currentItem())->parent()) )
return;
01169 QString mt = (lvMimeTypes->
currentItem()->parent())->text( 0 ) +
"/" + (lvMimeTypes->
currentItem())->text( 0 );
01170
01171 QString keditfiletype =
QString::fromLatin1(
"keditfiletype");
01172
KRun::runCommand( keditfiletype +
" " + KProcess::quote(mt),
01173 keditfiletype, keditfiletype );
01174 }
01175
01176
void KMimeTypeChooser::slotCurrentChanged(QListViewItem* i)
01177 {
01178 btnEditMimeType->setEnabled( i->
parent() );
01179 }
01180
01181
QStringList KMimeTypeChooser::selectedMimeTypesStringList()
01182 {
01183
QStringList l;
01184
QListViewItemIterator it( lvMimeTypes );
01185
for (; it.current(); ++it) {
01186
if ( it.current()->parent() && ((
QCheckListItem*)it.current())->isOn() )
01187 l << it.current()->parent()->text(0) +
"/" + it.current()->text(0);
01188 }
01189
return l;
01190 }
01191
01192
QStringList KMimeTypeChooser::patterns()
01193 {
01194
QStringList l;
01195
KMimeType::Ptr p;
01196 QString defMT =
KMimeType::defaultMimeType();
01197
QListViewItemIterator it( lvMimeTypes );
01198
for (; it.current(); ++it) {
01199
if ( it.current()->parent() && ((
QCheckListItem*)it.current())->isOn() ) {
01200 p =
KMimeType::mimeType( it.current()->parent()->text(0) +
"/" + it.current()->text(0) );
01201
if ( p->name() != defMT )
01202 l += p->patterns();
01203 }
01204 }
01205
return l;
01206 }
01207
01208
01209
01210
01211
01212
01213 KMimeTypeChooserDlg::KMimeTypeChooserDlg(
QWidget *parent,
01214
const QString &caption,
const QString& text,
01215
const QStringList &selectedMimeTypes,
01216
bool editbutton,
bool showcomment,
bool showpatterns )
01217 :
KDialogBase(parent, 0, true, caption, Cancel|Ok, Ok)
01218 {
01219
KConfig *config = kapp->config();
01220
01221 chooser =
new KMimeTypeChooser(
this, text, selectedMimeTypes, editbutton, showcomment, showpatterns);
01222 setMainWidget(chooser);
01223
01224 config->
setGroup(
"KMimeTypeChooserDlg");
01225 resize( config->
readSizeEntry(
"size",
new QSize(400,300)) );
01226 }
01227
01228 KMimeTypeChooserDlg::~KMimeTypeChooserDlg()
01229 {
01230
KConfig *config = kapp->config();
01231 config->
setGroup(
"KMimeTypeChooserDlg");
01232 config->
writeEntry(
"size", size());
01233 }
01234
01235
QStringList KMimeTypeChooserDlg::mimeTypes()
01236 {
01237
return chooser->
selectedMimeTypesStringList();
01238 }
01239
01240
QStringList KMimeTypeChooserDlg::patterns()
01241 {
01242
return chooser->
patterns();
01243 }
01244
01245
01246 HlDownloadDialog::HlDownloadDialog(
QWidget *parent,
const char *name,
bool modal)
01247 :
KDialogBase(
KDialogBase::Swallow, i18n(
"Highlight Download"), User1|Cancel, User1, parent,
name, modal,false,i18n(
"&Install"))
01248 {
01249 setMainWidget( list=
new QListView(
this));
01250 list->addColumn(i18n(
"Name"));
01251 list->addColumn(i18n(
"Installed"));
01252 list->addColumn(i18n(
"Latest"));
01253 list->addColumn(i18n(
"Release Date"));
01254 list->setSelectionMode(QListView::Multi);
01255
KIO::TransferJob *getIt=
KIO::get(
KURL(HLDOWNLOADPATH),
true,
true );
01256 connect(getIt,SIGNAL(data(
KIO::Job *,
const QByteArray &)),
01257
this, SLOT(listDataReceived(
KIO::Job *,
const QByteArray &)));
01258
01259 resize(450, 400);
01260 }
01261
01262 HlDownloadDialog::~HlDownloadDialog(){}
01263
01264
void HlDownloadDialog::listDataReceived(
KIO::Job *,
const QByteArray &data)
01265 {
01266 listData+=QString(data);
01267
kdDebug(13000)<<QString(
"CurrentListData: ")<<listData<<
endl<<
endl;
01268
kdDebug(13000)<<QString(
"Data length: %1").arg(data.size())<<
endl;
01269
kdDebug(13000)<<QString(
"listData length: %1").arg(listData.length())<<
endl;
01270
if (data.size()==0)
01271 {
01272
if (listData.length()>0)
01273 {
01274 QString installedVersion;
01275 HlManager *hlm=HlManager::self();
01276
QDomDocument doc;
01277 doc.
setContent(listData);
01278
QDomElement DocElem=doc.
documentElement();
01279
QDomNode n=DocElem.firstChild();
01280 Highlight *hl;
01281
01282
if (n.
isNull())
kdDebug(13000)<<
"There is no usable childnode"<<
endl;
01283
while (!n.
isNull())
01284 {
01285 installedVersion=
" --";
01286
01287
QDomElement e=n.
toElement();
01288
if (!e.isNull())
01289
kdDebug(13000)<<QString(
"NAME: ")<<e.
tagName()<<QString(
" - ")<<e.
attribute(
"name")<<
endl;
01290 n=n.
nextSibling();
01291
01292 QString Name=e.
attribute(
"name");
01293
01294
for (
int i=0;i<hlm->highlights();i++)
01295 {
01296 hl=hlm->getHl(i);
01297
if (hl->name()==Name)
01298 {
01299 installedVersion=
" "+hl->version();
01300
break;
01301 }
01302 }
01303
01304 (
void)
new QListViewItem(list,e.
attribute(
"name"),installedVersion,e.
attribute(
"version"),e.
attribute(
"date"),e.
attribute(
"url"));
01305 }
01306 }
01307 }
01308 }
01309
01310
void HlDownloadDialog::slotUser1()
01311 {
01312 QString destdir=
KGlobal::dirs()->
saveLocation(
"data",
"katepart/syntax/");
01313
for (QListViewItem *it=list->firstChild();it;it=it->
nextSibling())
01314 {
01315
if (list->isSelected(it))
01316 {
01317
KURL src(it->
text(4));
01318 QString filename=src.fileName(
false);
01319 QString dest = destdir+filename;
01320
01321
KIO::NetAccess::download(src,dest,
this);
01322 }
01323 }
01324
01325
01326
SyntaxDocument doc (
true);
01327 }
01328
01329
01330 GotoLineDialog::GotoLineDialog(
QWidget *parent,
int line,
int max)
01331 :
KDialogBase(parent, 0L, true, i18n(
"Go to Line"), Ok | Cancel, Ok) {
01332
01333
QWidget *page =
new QWidget(
this);
01334 setMainWidget(page);
01335
01336
QVBoxLayout *topLayout =
new QVBoxLayout( page, 0, spacingHint() );
01337 e1 =
new KIntNumInput(line, page);
01338 e1->setRange(1, max);
01339 e1->setEditFocus(
true);
01340
01341
QLabel *
label =
new QLabel( e1,i18n(
"&Go to line:"), page );
01342 topLayout->addWidget(label);
01343 topLayout->addWidget(e1);
01344 topLayout->addSpacing(spacingHint());
01345 topLayout->addStretch(10);
01346 e1->setFocus();
01347 }
01348
01349
int GotoLineDialog::getLine() {
01350
return e1->value();
01351 }
01352
01353
01354