00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#include "kateschema.h"
00022
#include "kateschema.moc"
00023
00024
#include "kateconfig.h"
00025
#include "katedocument.h"
00026
#include "katefactory.h"
00027
#include "kateview.h"
00028
#include "katerenderer.h"
00029
00030
#include <klocale.h>
00031
#include <kdialogbase.h>
00032
#include <kcolorbutton.h>
00033
#include <kcombobox.h>
00034
#include <kinputdialog.h>
00035
#include <kfontdialog.h>
00036
#include <kdebug.h>
00037
#include <kiconloader.h>
00038
#include <kmessagebox.h>
00039
#include <kpopupmenu.h>
00040
#include <kcolordialog.h>
00041
#include <kapplication.h>
00042
#include <kaboutdata.h>
00043
#include <ktexteditor/markinterface.h>
00044
00045
#include <qbuttongroup.h>
00046
#include <qcheckbox.h>
00047
#include <qptrcollection.h>
00048
#include <qdialog.h>
00049
#include <qgrid.h>
00050
#include <qgroupbox.h>
00051
#include <qlabel.h>
00052
#include <qtextcodec.h>
00053
#include <qlayout.h>
00054
#include <qlineedit.h>
00055
#include <qheader.h>
00056
#include <qlistbox.h>
00057
#include <qhbox.h>
00058
#include <qpainter.h>
00059
#include <qobjectlist.h>
00060
#include <qpixmap.h>
00061
#include <qpushbutton.h>
00062
#include <qradiobutton.h>
00063
#include <qspinbox.h>
00064
#include <qstringlist.h>
00065
#include <qtabwidget.h>
00066
#include <qvbox.h>
00067
#include <qvgroupbox.h>
00068
#include <qwhatsthis.h>
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
class KateStyleListItem :
public QListViewItem
00084 {
00085
public:
00086 KateStyleListItem(
QListViewItem *parent=0,
const QString & stylename=0,
00087
class KateAttribute* defaultstyle=0,
class KateHlItemData *data=0 );
00088 KateStyleListItem(
QListView *parent,
const QString & stylename=0,
00089
class KateAttribute* defaultstyle=0,
class KateHlItemData *data=0 );
00090 ~KateStyleListItem() {
if (st)
delete is; };
00091
00092
00093
enum Property { ContextName, Bold, Italic, Underline, Strikeout, Color, SelColor, BgColor, SelBgColor, UseDefStyle };
00094
00095
00096
void initStyle();
00097
00098
void updateStyle();
00099
00100
virtual int width (
const QFontMetrics & fm,
const QListView * lv,
int c )
const;
00101
00102
void activate(
int column,
const QPoint &localPos );
00103
00104
void changeProperty( Property p );
00108
void unsetColor(
int c );
00109
00110
QString contextName() {
return text(0); };
00111
00112
bool defStyle();
00113
00114
bool isDefault();
00115
00116
00117
class KateAttribute* style() {
return is; };
00118
00119
protected:
00120
00121
void paintCell(
QPainter *p,
const QColorGroup& cg,
int col,
int width,
int align);
00122
00123
private:
00124
00125
void toggleDefStyle();
00126
void setColor(
int );
00127
00128
00129
00130
class KateAttribute *is,
00131 *ds;
00132
class KateHlItemData *st;
00133 };
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
class KateStyleListCaption :
public QListViewItem
00145 {
00146
public:
00147 KateStyleListCaption(
QListView *parent,
const QString & name );
00148 ~KateStyleListCaption() {};
00149
00150
protected:
00151
void paintCell(
QPainter *p,
const QColorGroup& cg,
int col,
int width,
int align);
00152 };
00153
00154
00155
00156
QString KateSchemaManager::normalSchema ()
00157 {
00158
return KApplication::kApplication()->
aboutData()->
appName () +
QString (
" - Normal");
00159 }
00160
00161
QString KateSchemaManager::printingSchema ()
00162 {
00163
return KApplication::kApplication()->
aboutData()->
appName () +
QString (
" - Printing");
00164 }
00165
00166 KateSchemaManager::KateSchemaManager ()
00167 : m_config ("kateschemarc", false, false)
00168 {
00169 update ();
00170 }
00171
00172 KateSchemaManager::~KateSchemaManager ()
00173 {
00174 }
00175
00176
00177
00178
00179
void KateSchemaManager::update (
bool readfromfile)
00180 {
00181
if (readfromfile)
00182 m_config.reparseConfiguration ();
00183
00184 m_schemas = m_config.groupList();
00185 m_schemas.sort ();
00186
00187 m_schemas.remove (printingSchema());
00188 m_schemas.remove (normalSchema());
00189 m_schemas.prepend (printingSchema());
00190 m_schemas.prepend (normalSchema());
00191 }
00192
00193
00194
00195
00196
00197
KConfig *KateSchemaManager::schema (uint number)
00198 {
00199
if ((
number>1) && (
number < m_schemas.count()))
00200 m_config.setGroup (m_schemas[number]);
00201
else if (
number == 1)
00202 m_config.setGroup (printingSchema());
00203
else
00204 m_config.setGroup (normalSchema());
00205
00206
return &m_config;
00207 }
00208
00209
void KateSchemaManager::addSchema (
const QString &t)
00210 {
00211 m_config.setGroup (t);
00212 m_config.writeEntry(
"Color Background", KGlobalSettings::baseColor());
00213
00214 update (
false);
00215 }
00216
00217
void KateSchemaManager::removeSchema (uint number)
00218 {
00219
if (
number >= m_schemas.count())
00220
return;
00221
00222
if (
number < 2)
00223
return;
00224
00225 m_config.deleteGroup (name (number));
00226
00227 update (
false);
00228 }
00229
00230
bool KateSchemaManager::validSchema (uint number)
00231 {
00232
if (
number < m_schemas.count())
00233
return true;
00234
00235
return false;
00236 }
00237
00238 uint KateSchemaManager::number (
const QString &name)
00239 {
00240
if (
name == normalSchema())
00241
return 0;
00242
00243
if (
name == printingSchema())
00244
return 1;
00245
00246
int i;
00247
if ((i = m_schemas.findIndex(name)) > -1)
00248
return i;
00249
00250
return 0;
00251 }
00252
00253
QString KateSchemaManager::name (uint number)
00254 {
00255
if ((
number>1) && (
number < m_schemas.count()))
00256
return m_schemas[
number];
00257
else if (
number == 1)
00258
return printingSchema();
00259
00260
return normalSchema();
00261 }
00262
00263
00264
00265
00266
00267
00268
00269 KateSchemaConfigColorTab::KateSchemaConfigColorTab(
QWidget *parent,
const char * )
00270 :
QWidget (parent)
00271 {
00272 m_schema = -1;
00273
00274
QHBox *b;
00275
QLabel *
label;
00276
00277
QVBoxLayout *blay=
new QVBoxLayout(
this, 0, KDialog::spacingHint());
00278
00279
QVGroupBox *gbTextArea =
new QVGroupBox(i18n(
"Text Area Background"),
this);
00280
00281 b =
new QHBox (gbTextArea);
00282 b->
setSpacing(KDialog::spacingHint());
00283
label =
new QLabel( i18n(
"Normal text:"), b);
00284
label->setAlignment( AlignLeft|AlignVCenter);
00285 m_back =
new KColorButton(b);
00286
00287 b =
new QHBox (gbTextArea);
00288 b->
setSpacing(KDialog::spacingHint());
00289
label =
new QLabel( i18n(
"Selected text:"), b);
00290
label->setAlignment( AlignLeft|AlignVCenter);
00291 m_selected =
new KColorButton(b);
00292
00293 b =
new QHBox (gbTextArea);
00294 b->
setSpacing(KDialog::spacingHint());
00295
label =
new QLabel( i18n(
"Current line:"), b);
00296
label->setAlignment( AlignLeft|AlignVCenter);
00297 m_current =
new KColorButton(b);
00298
00299
00300 b =
new QHBox (gbTextArea);
00301 b->
setSpacing(KDialog::spacingHint());
00302 m_combobox =
new KComboBox(b,
"color_combo_box");
00303
00304 m_combobox->insertItem(i18n(
"Bookmark"));
00305 m_combobox->insertItem(i18n(
"Active Breakpoint"));
00306 m_combobox->insertItem(i18n(
"Reached Breakpoint"));
00307 m_combobox->insertItem(i18n(
"Disabled Breakpoint"));
00308 m_combobox->insertItem(i18n(
"Execution"));
00309 m_combobox->insertItem(i18n(
"Warning"));
00310 m_combobox->insertItem(i18n(
"Error"));
00311 m_combobox->setCurrentItem(0);
00312 m_markers =
new KColorButton(b,
"marker_color_button");
00313 connect( m_combobox, SIGNAL( activated(
int ) ), SLOT( slotComboBoxChanged(
int ) ) );
00314
00315 blay->addWidget(gbTextArea);
00316
00317 QVGroupBox *gbBorder =
new QVGroupBox(i18n(
"Additional Elements"),
this);
00318
00319 b =
new QHBox (gbBorder);
00320 b->
setSpacing(KDialog::spacingHint());
00321
label =
new QLabel( i18n(
"Left border background:"), b);
00322
label->setAlignment( AlignLeft|AlignVCenter);
00323 m_iconborder =
new KColorButton(b);
00324
00325 b =
new QHBox (gbBorder);
00326 b->
setSpacing(KDialog::spacingHint());
00327
label =
new QLabel( i18n(
"Line numbers:"), b);
00328
label->setAlignment( AlignLeft|AlignVCenter);
00329 m_linenumber =
new KColorButton(b);
00330
00331 b =
new QHBox (gbBorder);
00332 b->
setSpacing(KDialog::spacingHint());
00333
label =
new QLabel( i18n(
"Bracket highlight:"), b);
00334
label->setAlignment( AlignLeft|AlignVCenter);
00335 m_bracket =
new KColorButton(b);
00336
00337 b =
new QHBox (gbBorder);
00338 b->
setSpacing(KDialog::spacingHint());
00339
label =
new QLabel( i18n(
"Word wrap markers:"), b);
00340
label->setAlignment( AlignLeft|AlignVCenter);
00341 m_wwmarker =
new KColorButton(b);
00342
00343 b =
new QHBox (gbBorder);
00344 b->
setSpacing(KDialog::spacingHint());
00345
label =
new QLabel( i18n(
"Tab markers:"), b);
00346
label->setAlignment( AlignLeft|AlignVCenter);
00347 m_tmarker =
new KColorButton(b);
00348
00349 blay->addWidget(gbBorder);
00350
00351 blay->addStretch();
00352
00353
00354 connect(
this, SIGNAL( changed() ), parent->
parentWidget(), SLOT( slotChanged() ) );
00355
00356
00357
QWhatsThis::add(m_back, i18n(
"<p>Sets the background color of the editing area.</p>"));
00358
QWhatsThis::add(m_selected, i18n(
"<p>Sets the background color of the selection.</p>"
00359
"<p>To set the text color for selected text, use the \"<b>Configure "
00360
"Highlighting</b>\" dialog.</p>"));
00361
QWhatsThis::add(m_markers, i18n(
"<p>Sets the background color of the selected "
00362
"marker type.</p><p><b>Note</b>: The marker color is displayed lightly because "
00363
"of transparency.</p>"));
00364
QWhatsThis::add(m_combobox, i18n(
"<p>Select the marker type you want to change.</p>"));
00365
QWhatsThis::add(m_current, i18n(
"<p>Sets the background color of the currently "
00366
"active line, which means the line where your cursor is positioned.</p>"));
00367
QWhatsThis::add( m_linenumber, i18n(
00368
"<p>This color will be used to draw the line numbers (if enabled) and the "
00369
"lines in the code-folding pane.</p>" ) );
00370
QWhatsThis::add(m_bracket, i18n(
"<p>Sets the bracket matching color. This means, "
00371
"if you place the cursor e.g. at a <b>(</b>, the matching <b>)</b> will "
00372
"be highlighted with this color.</p>"));
00373
QWhatsThis::add(m_wwmarker, i18n(
00374
"<p>Sets the color of Word Wrap-related markers:</p>"
00375
"<dl><dt>Static Word Wrap</dt><dd>A vertical line which shows the column where "
00376
"text is going to be wrapped</dd>"
00377
"<dt>Dynamic Word Wrap</dt><dd>An arrow shown to the left of "
00378
"visually-wrapped lines</dd></dl>"));
00379
QWhatsThis::add(m_tmarker, i18n(
00380
"<p>Sets the color of the tabulator marks:</p>"));
00381 }
00382
00383 KateSchemaConfigColorTab::~KateSchemaConfigColorTab()
00384 {
00385 }
00386
00387
void KateSchemaConfigColorTab::schemaChanged (
int newSchema )
00388 {
00389
00390
if ( m_schema > -1 )
00391 {
00392 m_schemas[ m_schema ].back = m_back->color();
00393 m_schemas[ m_schema ].selected = m_selected->color();
00394 m_schemas[ m_schema ].current = m_current->color();
00395 m_schemas[ m_schema ].bracket = m_bracket->color();
00396 m_schemas[ m_schema ].wwmarker = m_wwmarker->color();
00397 m_schemas[ m_schema ].iconborder = m_iconborder->color();
00398 m_schemas[ m_schema ].tmarker = m_tmarker->color();
00399 m_schemas[ m_schema ].linenumber = m_linenumber->color();
00400 }
00401
00402
if ( newSchema == m_schema )
return;
00403
00404
00405 m_schema = newSchema;
00406
00407
00408 m_back ->disconnect( SIGNAL( changed(
const QColor & ) ) );
00409 m_selected ->disconnect( SIGNAL( changed(
const QColor & ) ) );
00410 m_current ->disconnect( SIGNAL( changed(
const QColor & ) ) );
00411 m_bracket ->disconnect( SIGNAL( changed(
const QColor & ) ) );
00412 m_wwmarker ->disconnect( SIGNAL( changed(
const QColor & ) ) );
00413 m_iconborder->disconnect( SIGNAL( changed(
const QColor & ) ) );
00414 m_tmarker ->disconnect( SIGNAL( changed(
const QColor & ) ) );
00415 m_markers ->disconnect( SIGNAL( changed(
const QColor & ) ) );
00416 m_linenumber->disconnect( SIGNAL( changed(
const QColor & ) ) );
00417
00418
00419
if ( ! m_schemas.contains( newSchema ) )
00420 {
00421
00422
QColor tmp0 (KGlobalSettings::baseColor());
00423
QColor tmp1 (KGlobalSettings::highlightColor());
00424
QColor tmp2 (KGlobalSettings::alternateBackgroundColor());
00425
QColor tmp3 (
"#FFFF99" );
00426
QColor tmp4 (tmp2.
dark());
00427
QColor tmp5 ( KGlobalSettings::textColor() );
00428
QColor tmp6 (
"#EAE9E8" );
00429
QColor tmp7 (
"#000000" );
00430
00431
00432 QValueVector <QColor> mark(KTextEditor::MarkInterface::reservedMarkersCount());
00433 Q_ASSERT(mark.
size() > 6);
00434 mark[0] = Qt::blue;
00435 mark[1] = Qt::red;
00436 mark[2] = Qt::yellow;
00437 mark[3] = Qt::magenta;
00438 mark[4] = Qt::gray;
00439 mark[5] = Qt::green;
00440 mark[6] = Qt::red;
00441
00442 SchemaColors c;
00443
KConfig *
config = KateFactory::self()->schemaManager()->schema(newSchema);
00444
00445 c.back= config->
readColorEntry(
"Color Background", &tmp0);
00446 c.selected = config->
readColorEntry(
"Color Selection", &tmp1);
00447 c.current = config->
readColorEntry(
"Color Highlighted Line", &tmp2);
00448 c.bracket = config->
readColorEntry(
"Color Highlighted Bracket", &tmp3);
00449 c.wwmarker = config->
readColorEntry(
"Color Word Wrap Marker", &tmp4);
00450 c.tmarker = config->
readColorEntry(
"Color Tab Marker", &tmp5);
00451 c.iconborder = config->
readColorEntry(
"Color Icon Bar", &tmp6);
00452 c.linenumber = config->
readColorEntry(
"Color Line Number", &tmp7);
00453
00454
for (
int i = 0; i < KTextEditor::MarkInterface::reservedMarkersCount(); i++)
00455 c.markerColors[i] = config->
readColorEntry(
QString(
"Color MarkType%1").arg(i+1), &mark[i] );
00456
00457 m_schemas[ newSchema ] = c;
00458 }
00459
00460 m_back->setColor( m_schemas[ newSchema ].back);
00461 m_selected->setColor( m_schemas [ newSchema ].selected );
00462 m_current->setColor( m_schemas [ newSchema ].current );
00463 m_bracket->setColor( m_schemas [ newSchema ].bracket );
00464 m_wwmarker->setColor( m_schemas [ newSchema ].wwmarker );
00465 m_tmarker->setColor( m_schemas [ newSchema ].tmarker );
00466 m_iconborder->setColor( m_schemas [ newSchema ].iconborder );
00467 m_linenumber->setColor( m_schemas [ newSchema ].linenumber );
00468
00469
00470
for (
int i = 0; i < KTextEditor::MarkInterface::reservedMarkersCount(); i++)
00471 {
00472
QPixmap pix(16, 16);
00473 pix.
fill( m_schemas [ newSchema ].markerColors[i]);
00474 m_combobox->changeItem(pix, m_combobox->text(i), i);
00475 }
00476 m_markers->setColor( m_schemas [ newSchema ].markerColors[ m_combobox->currentItem() ] );
00477
00478 connect( m_back , SIGNAL( changed(
const QColor& ) ), SIGNAL( changed() ) );
00479 connect( m_selected , SIGNAL( changed(
const QColor& ) ), SIGNAL( changed() ) );
00480 connect( m_current , SIGNAL( changed(
const QColor& ) ), SIGNAL( changed() ) );
00481 connect( m_bracket , SIGNAL( changed(
const QColor& ) ), SIGNAL( changed() ) );
00482 connect( m_wwmarker , SIGNAL( changed(
const QColor& ) ), SIGNAL( changed() ) );
00483 connect( m_iconborder, SIGNAL( changed(
const QColor& ) ), SIGNAL( changed() ) );
00484 connect( m_tmarker , SIGNAL( changed(
const QColor& ) ), SIGNAL( changed() ) );
00485 connect( m_linenumber, SIGNAL( changed(
const QColor& ) ), SIGNAL( changed() ) );
00486 connect( m_markers , SIGNAL( changed(
const QColor& ) ), SLOT( slotMarkerColorChanged(
const QColor& ) ) );
00487 }
00488
00489
void KateSchemaConfigColorTab::apply ()
00490 {
00491 schemaChanged( m_schema );
00492
QMap<int,SchemaColors>::Iterator it;
00493
for ( it = m_schemas.
begin(); it != m_schemas.
end(); ++it )
00494 {
00495
kdDebug(13030)<<
"APPLY scheme = "<<it.key()<<
endl;
00496
KConfig *config = KateFactory::self()->schemaManager()->schema( it.key() );
00497
kdDebug(13030)<<
"Using config group "<<config->
group()<<
endl;
00498 SchemaColors c = it.data();
00499
00500 config->
writeEntry(
"Color Background", c.back);
00501 config->
writeEntry(
"Color Selection", c.selected);
00502 config->
writeEntry(
"Color Highlighted Line", c.current);
00503 config->
writeEntry(
"Color Highlighted Bracket", c.bracket);
00504 config->
writeEntry(
"Color Word Wrap Marker", c.wwmarker);
00505 config->
writeEntry(
"Color Tab Marker", c.tmarker);
00506 config->
writeEntry(
"Color Icon Bar", c.iconborder);
00507 config->
writeEntry(
"Color Line Number", c.linenumber);
00508
00509
for (
int i = 0; i < KTextEditor::MarkInterface::reservedMarkersCount(); i++)
00510 {
00511 config->
writeEntry(
QString(
"Color MarkType%1").arg(i + 1), c.markerColors[i]);
00512 }
00513 }
00514 }
00515
00516
void KateSchemaConfigColorTab::slotMarkerColorChanged(
const QColor& color)
00517 {
00518
int index = m_combobox->currentItem();
00519 m_schemas[ m_schema ].markerColors[ index ] = color;
00520
QPixmap pix(16, 16);
00521 pix.
fill(color);
00522 m_combobox->changeItem(pix, m_combobox->text(index), index);
00523
00524 emit changed();
00525 }
00526
00527
void KateSchemaConfigColorTab::slotComboBoxChanged(
int index)
00528 {
00529
00530 m_markers->disconnect( SIGNAL( changed(
const QColor& ) ) );
00531 m_markers->setColor( m_schemas[m_schema].markerColors[index] );
00532 connect( m_markers, SIGNAL( changed(
const QColor& ) ), SLOT( slotMarkerColorChanged(
const QColor& ) ) );
00533 }
00534
00535
00536
00537
00538 KateSchemaConfigFontTab::KateSchemaConfigFontTab(
QWidget *parent,
const char * )
00539 :
QWidget (parent)
00540 {
00541
00542
QGridLayout *grid =
new QGridLayout(
this, 1, 1 );
00543
00544 m_fontchooser =
new KFontChooser (
this, 0L,
false,
QStringList(),
false );
00545 m_fontchooser->enableColumn(KFontChooser::StyleList,
false);
00546 grid->
addWidget( m_fontchooser, 0, 0);
00547
00548 connect (
this, SIGNAL( changed()), parent->
parentWidget(), SLOT (slotChanged()));
00549 m_schema = -1;
00550 }
00551
00552 KateSchemaConfigFontTab::~KateSchemaConfigFontTab()
00553 {
00554 }
00555
00556
void KateSchemaConfigFontTab::slotFontSelected(
const QFont &font )
00557 {
00558
if ( m_schema > -1 )
00559 {
00560 m_fonts[m_schema] = font;
00561 emit changed();
00562 }
00563 }
00564
00565
void KateSchemaConfigFontTab::apply()
00566 {
00567 FontMap::Iterator it;
00568
for ( it = m_fonts.begin(); it != m_fonts.end(); ++it )
00569 {
00570 KateFactory::self()->schemaManager()->schema( it.key() )->
writeEntry(
"Font", it.data() );
00571 }
00572 }
00573
00574
void KateSchemaConfigFontTab::schemaChanged(
int newSchema )
00575 {
00576
if ( m_schema > -1 )
00577 m_fonts[ m_schema ] = m_fontchooser->font();
00578
00579 m_schema = newSchema;
00580
00581
QFont f (KGlobalSettings::fixedFont());
00582
00583 m_fontchooser->disconnect (
this );
00584 m_fontchooser->setFont ( KateFactory::self()->schemaManager()->schema( newSchema )->readFontEntry(
"Font", &f) );
00585 m_fonts[ newSchema ] = m_fontchooser->font();
00586 connect (m_fontchooser, SIGNAL (fontSelected(
const QFont & )),
this, SLOT (slotFontSelected(
const QFont & )));
00587 }
00588
00589
00590
00591 KateSchemaConfigFontColorTab::KateSchemaConfigFontColorTab(
QWidget *parent,
const char * )
00592 :
QWidget (parent)
00593 {
00594 m_defaultStyleLists.setAutoDelete(
true);
00595
00596
00597 QGridLayout *grid =
new QGridLayout(
this, 1, 1 );
00598
00599 m_defaultStyles =
new KateStyleListView(
this,
false );
00600 grid->
addWidget( m_defaultStyles, 0, 0);
00601
00602 connect (m_defaultStyles, SIGNAL (changed()), parent->
parentWidget(), SLOT (slotChanged()));
00603
00604
QWhatsThis::add( m_defaultStyles, i18n(
00605
"This list displays the default styles for the current schema and "
00606
"offers the means to edit them. The style name reflects the current "
00607
"style settings."
00608
"<p>To edit the colors, click the colored squares, or select the color "
00609
"to edit from the popup menu.<p>You can unset the Background and Selected "
00610
"Background colors from the popup menu when appropriate.") );
00611 }
00612
00613 KateSchemaConfigFontColorTab::~KateSchemaConfigFontColorTab()
00614 {
00615 }
00616
00617
KateAttributeList *KateSchemaConfigFontColorTab::attributeList (uint schema)
00618 {
00619
if (!m_defaultStyleLists[schema])
00620 {
00621
KateAttributeList *list =
new KateAttributeList ();
00622 KateHlManager::self()->getDefaults(schema, *list);
00623
00624 m_defaultStyleLists.insert (schema, list);
00625 }
00626
00627
return m_defaultStyleLists[schema];
00628 }
00629
00630
void KateSchemaConfigFontColorTab::schemaChanged (uint schema)
00631 {
00632 m_defaultStyles->clear ();
00633
00634
KateAttributeList *l = attributeList (schema);
00635
00636
00637
QPalette p ( m_defaultStyles->palette() );
00638
QColor _c ( KGlobalSettings::baseColor() );
00639 p.
setColor( QColorGroup::Base,
00640 KateFactory::self()->schemaManager()->schema(schema)->
00641 readColorEntry(
"Color Background", &_c ) );
00642 _c =
KGlobalSettings::highlightColor();
00643 p.
setColor( QColorGroup::Highlight,
00644 KateFactory::self()->schemaManager()->schema(schema)->
00645 readColorEntry(
"Color Selection", &_c ) );
00646 _c = l->
at(0)->textColor();
00647 p.
setColor( QColorGroup::Text, _c );
00648 m_defaultStyles->viewport()->setPalette( p );
00649
00650
00651
for (
int i = KateHlManager::self()->defaultStyles() - 1; i >= 0; i-- )
00652 {
00653
new KateStyleListItem( m_defaultStyles, KateHlManager::self()->defaultStyleName(i,
true), l->
at( i ) );
00654 }
00655 }
00656
00657
void KateSchemaConfigFontColorTab::reload ()
00658 {
00659 m_defaultStyles->clear ();
00660 m_defaultStyleLists.clear ();
00661 }
00662
00663
void KateSchemaConfigFontColorTab::apply ()
00664 {
00665
for (
QIntDictIterator<KateAttributeList> it( m_defaultStyleLists ); it.
current(); ++it )
00666 KateHlManager::self()->setDefaults(it.
currentKey(), *(it.
current()));
00667 }
00668
00669
00670
00671
00672 KateSchemaConfigHighlightTab::KateSchemaConfigHighlightTab(
QWidget *parent,
const char *, KateSchemaConfigFontColorTab *page, uint hl )
00673 :
QWidget (parent)
00674 {
00675 m_defaults = page;
00676
00677 m_schema = 0;
00678 m_hl = 0;
00679
00680 m_hlDict.setAutoDelete (
true);
00681
00682 QVBoxLayout *layout =
new QVBoxLayout(
this, 0, KDialog::spacingHint() );
00683
00684
00685 QHBox *hbHl =
new QHBox(
this );
00686 layout->add (hbHl);
00687
00688 hbHl->
setSpacing( KDialog::spacingHint() );
00689 QLabel *lHl =
new QLabel( i18n(
"H&ighlight:"), hbHl );
00690 hlCombo =
new QComboBox(
false, hbHl );
00691 lHl->
setBuddy( hlCombo );
00692 connect( hlCombo, SIGNAL(activated(
int)),
00693
this, SLOT(hlChanged(
int)) );
00694
00695
for(
int i = 0; i < KateHlManager::self()->highlights(); i++) {
00696
if (KateHlManager::self()->hlSection(i).length() > 0)
00697 hlCombo->insertItem(KateHlManager::self()->hlSection(i) +
QString (
"/") + KateHlManager::self()->hlNameTranslated(i));
00698
else
00699 hlCombo->insertItem(KateHlManager::self()->hlNameTranslated(i));
00700 }
00701 hlCombo->setCurrentItem(0);
00702
00703
00704 m_styles =
new KateStyleListView(
this,
true );
00705 layout->addWidget (m_styles, 999);
00706
00707 hlCombo->setCurrentItem ( hl );
00708 hlChanged ( hl );
00709
00710
QWhatsThis::add( m_styles, i18n(
00711
"This list displays the contexts of the current syntax highlight mode and "
00712
"offers the means to edit them. The context name reflects the current "
00713
"style settings.<p>To edit using the keyboard, press "
00714
"<strong><SPACE></strong> and choose a property from the popup menu."
00715
"<p>To edit the colors, click the colored squares, or select the color "
00716
"to edit from the popup menu.<p>You can unset the Background and Selected "
00717
"Background colors from the context menu when appropriate.") );
00718
00719 connect (m_styles, SIGNAL (changed()), parent->
parentWidget(), SLOT (slotChanged()));
00720 }
00721
00722 KateSchemaConfigHighlightTab::~KateSchemaConfigHighlightTab()
00723 {
00724 }
00725
00726
void KateSchemaConfigHighlightTab::hlChanged(
int z)
00727 {
00728 m_hl = z;
00729
00730 schemaChanged (m_schema);
00731 }
00732
00733
void KateSchemaConfigHighlightTab::schemaChanged (uint schema)
00734 {
00735 m_schema = schema;
00736
00737
kdDebug(13030) <<
"NEW SCHEMA: " << m_schema <<
" NEW HL: " << m_hl <<
endl;
00738
00739 m_styles->clear ();
00740
00741
if (!m_hlDict[m_schema])
00742 {
00743
kdDebug(13030) <<
"NEW SCHEMA, create dict" <<
endl;
00744
00745 m_hlDict.insert (schema,
new QIntDict<KateHlItemDataList>);
00746 m_hlDict[m_schema]->setAutoDelete (
true);
00747 }
00748
00749
if (!m_hlDict[m_schema]->find(m_hl))
00750 {
00751
kdDebug(13030) <<
"NEW HL, create list" <<
endl;
00752
00753
KateHlItemDataList *list =
new KateHlItemDataList ();
00754 KateHlManager::self()->getHl( m_hl )->getKateHlItemDataListCopy (m_schema, *list);
00755 m_hlDict[m_schema]->insert (m_hl, list);
00756 }
00757
00758
KateAttributeList *l = m_defaults->attributeList (schema);
00759
00760
00761
00762
00763
00764
QPalette p ( m_styles->palette() );
00765
QColor _c ( KGlobalSettings::baseColor() );
00766 p.
setColor( QColorGroup::Base,
00767 KateFactory::self()->schemaManager()->schema(m_schema)->
00768 readColorEntry(
"Color Background", &_c ) );
00769 _c =
KGlobalSettings::highlightColor();
00770 p.
setColor( QColorGroup::Highlight,
00771 KateFactory::self()->schemaManager()->schema(m_schema)->
00772 readColorEntry(
"Color Selection", &_c ) );
00773 _c = l->
at(0)->textColor();
00774 p.
setColor( QColorGroup::Text, _c );
00775 m_styles->viewport()->setPalette( p );
00776
00777
QDict<KateStyleListCaption> prefixes;
00778
for ( KateHlItemData *itemData = m_hlDict[m_schema]->find(m_hl)->last();
00779 itemData != 0L;
00780 itemData = m_hlDict[m_schema]->find(m_hl)->prev())
00781 {
00782
kdDebug(13030) <<
"insert items " << itemData->name <<
endl;
00783
00784
00785
00786
int c = itemData->name.find(
':');
00787
if ( c > 0 ) {
00788 QString prefix = itemData->name.left(c);
00789 QString
name = itemData->name.
mid(c+1);
00790
00791 KateStyleListCaption *parent = prefixes.
find( prefix );
00792
if ( ! parent )
00793 {
00794 parent =
new KateStyleListCaption( m_styles, prefix );
00795 parent->setOpen(
true);
00796 prefixes.
insert( prefix, parent );
00797 }
00798
new KateStyleListItem( parent, name, l->
at(itemData->defStyleNum), itemData );
00799 }
else {
00800
new KateStyleListItem( m_styles, itemData->name, l->
at(itemData->defStyleNum), itemData );
00801 }
00802 }
00803 }
00804
00805
void KateSchemaConfigHighlightTab::reload ()
00806 {
00807 m_styles->clear ();
00808 m_hlDict.clear ();
00809
00810 hlChanged (0);
00811 }
00812
00813
void KateSchemaConfigHighlightTab::apply ()
00814 {
00815
for (
QIntDictIterator< QIntDict<KateHlItemDataList> > it( m_hlDict ); it.
current(); ++it )
00816
for (
QIntDictIterator< KateHlItemDataList > it2( *it.
current() ); it2.
current(); ++it2 )
00817 KateHlManager::self()->getHl( it2.
currentKey() )->setKateHlItemDataList (it.
currentKey(), *(it2.
current()));
00818 }
00819
00820
00821
00822
00823 KateSchemaConfigPage::KateSchemaConfigPage(
QWidget *parent, KateDocument *doc )
00824 : KateConfigPage( parent ),
00825 m_lastSchema (-1)
00826 {
00827 QVBoxLayout *layout =
new QVBoxLayout(
this, 0, KDialog::spacingHint() );
00828
00829 QHBox *hbHl =
new QHBox(
this );
00830 layout->add (hbHl);
00831 hbHl->
setSpacing( KDialog::spacingHint() );
00832 QLabel *lHl =
new QLabel( i18n(
"&Schema:"), hbHl );
00833 schemaCombo =
new QComboBox(
false, hbHl );
00834 lHl->
setBuddy( schemaCombo );
00835 connect( schemaCombo, SIGNAL(activated(
int)),
00836
this, SLOT(schemaChanged(
int)) );
00837
00838
QPushButton *btnnew =
new QPushButton( i18n(
"&New..."), hbHl );
00839 connect( btnnew, SIGNAL(clicked()),
this, SLOT(newSchema()) );
00840
00841 btndel =
new QPushButton( i18n(
"&Delete"), hbHl );
00842 connect( btndel, SIGNAL(clicked()),
this, SLOT(deleteSchema()) );
00843
00844 m_tabWidget =
new QTabWidget (
this );
00845 m_tabWidget->setMargin (KDialog::marginHint());
00846 layout->add (m_tabWidget);
00847
00848 connect (m_tabWidget, SIGNAL (currentChanged (
QWidget *)),
this, SLOT (newCurrentPage (QWidget *)));
00849
00850 m_colorTab =
new KateSchemaConfigColorTab (m_tabWidget);
00851 m_tabWidget->addTab (m_colorTab, i18n(
"Colors"));
00852
00853 m_fontTab =
new KateSchemaConfigFontTab (m_tabWidget);
00854 m_tabWidget->addTab (m_fontTab, i18n(
"Font"));
00855
00856 m_fontColorTab =
new KateSchemaConfigFontColorTab (m_tabWidget);
00857 m_tabWidget->addTab (m_fontColorTab, i18n(
"Normal Text Styles"));
00858
00859 uint hl = doc ? doc->hlMode() : 0;
00860 m_highlightTab =
new KateSchemaConfigHighlightTab (m_tabWidget,
"", m_fontColorTab, hl );
00861 m_tabWidget->addTab (m_highlightTab, i18n(
"Highlighting Text Styles"));
00862
00863 hbHl =
new QHBox(
this );
00864 layout->add (hbHl);
00865 hbHl->
setSpacing( KDialog::spacingHint() );
00866 lHl =
new QLabel( i18n(
"&Default schema for %1:").arg(KApplication::kApplication()->aboutData()->programName ()), hbHl );
00867 defaultSchemaCombo =
new QComboBox(
false, hbHl );
00868 lHl->
setBuddy( defaultSchemaCombo );
00869
00870
00871 m_defaultSchema = (doc && doc->activeView()) ? doc->activeView()->renderer()->config()->schema() : KateRendererConfig::global()->schema();
00872
00873
reload();
00874
00875 connect( defaultSchemaCombo, SIGNAL(activated(
int)),
00876
this, SLOT(slotChanged()) );
00877 }
00878
00879 KateSchemaConfigPage::~KateSchemaConfigPage ()
00880 {
00881
00882 KateFactory::self()->schemaManager()->update ();
00883 }
00884
00885
void KateSchemaConfigPage::apply()
00886 {
00887 m_colorTab->apply();
00888 m_fontTab->apply();
00889 m_fontColorTab->apply ();
00890 m_highlightTab->apply ();
00891
00892
00893 KateFactory::self()->schemaManager()->schema (0)->
sync();
00894
00895 KateFactory::self()->schemaManager()->update ();
00896 KateRendererConfig::global()->setSchema (defaultSchemaCombo->currentItem());
00897 KateRendererConfig::global()->reloadSchema();
00898
00899
00900 KateHlManager::self()->getKConfig()->sync ();
00901 }
00902
00903
void KateSchemaConfigPage::reload()
00904 {
00905
00906 KateFactory::self()->schemaManager()->update ();
00907
00908
00909 m_fontColorTab->reload ();
00910
00911 update ();
00912
00913 defaultSchemaCombo->setCurrentItem (KateRendererConfig::global()->schema());
00914
00915
00916 schemaCombo->setCurrentItem( m_defaultSchema );
00917 schemaChanged( m_defaultSchema );
00918 }
00919
00920
void KateSchemaConfigPage::reset()
00921 {
00922
reload ();
00923 }
00924
00925
void KateSchemaConfigPage::defaults()
00926 {
00927
reload ();
00928 }
00929
00930
void KateSchemaConfigPage::update ()
00931 {
00932
00933 KateFactory::self()->schemaManager()->update (
false);
00934
00935 schemaCombo->clear ();
00936 schemaCombo->insertStringList (KateFactory::self()->schemaManager()->list ());
00937
00938 defaultSchemaCombo->clear ();
00939 defaultSchemaCombo->insertStringList (KateFactory::self()->schemaManager()->list ());
00940
00941 schemaCombo->setCurrentItem (0);
00942 schemaChanged (0);
00943
00944 schemaCombo->setEnabled (schemaCombo->count() > 0);
00945 }
00946
00947
void KateSchemaConfigPage::deleteSchema ()
00948 {
00949
int t = schemaCombo->currentItem ();
00950
00951 KateFactory::self()->schemaManager()->removeSchema (t);
00952
00953 update ();
00954 }
00955
00956
void KateSchemaConfigPage::newSchema ()
00957 {
00958 QString t =
KInputDialog::getText (i18n(
"Name for New Schema"), i18n (
"Name:"), i18n(
"New Schema"), 0,
this);
00959
00960 KateFactory::self()->schemaManager()->addSchema (t);
00961
00962
00963 KateFactory::self()->schemaManager()->update (
false);
00964
int i = KateFactory::self()->schemaManager()->list ().findIndex (t);
00965
00966 update ();
00967
if (i > -1)
00968 {
00969 schemaCombo->setCurrentItem (i);
00970 schemaChanged (i);
00971 }
00972 }
00973
00974
void KateSchemaConfigPage::schemaChanged (
int schema)
00975 {
00976 btndel->setEnabled( schema > 1 );
00977
00978 m_colorTab->schemaChanged( schema );
00979 m_fontTab->schemaChanged( schema );
00980 m_fontColorTab->schemaChanged (schema);
00981 m_highlightTab->schemaChanged (schema);
00982
00983 m_lastSchema = schema;
00984 }
00985
00986
void KateSchemaConfigPage::newCurrentPage (QWidget *w)
00987 {
00988
if (w == m_highlightTab)
00989 m_highlightTab->schemaChanged (m_lastSchema);
00990 }
00991
00992
00993
00994
void KateViewSchemaAction::init()
00995 {
00996 m_view = 0;
00997 last = 0;
00998
00999 connect(popupMenu(),SIGNAL(aboutToShow()),
this,SLOT(slotAboutToShow()));
01000 }
01001
01002
void KateViewSchemaAction::updateMenu (KateView *view)
01003 {
01004 m_view = view;
01005 }
01006
01007
void KateViewSchemaAction::slotAboutToShow()
01008 {
01009 KateView *view=m_view;
01010
int count = KateFactory::self()->schemaManager()->list().count();
01011
01012
for (
int z=0; z<count; z++)
01013 {
01014 QString hlName = KateFactory::self()->schemaManager()->list().operator[](z);
01015
01016
if (names.contains(hlName) < 1)
01017 {
01018 names << hlName;
01019 popupMenu()->insertItem ( hlName,
this, SLOT(setSchema(
int)), 0, z+1);
01020 }
01021 }
01022
01023
if (!view)
return;
01024
01025 popupMenu()->setItemChecked (last,
false);
01026 popupMenu()->setItemChecked (view->renderer()->config()->schema()+1,
true);
01027
01028 last = view->renderer()->config()->schema()+1;
01029 }
01030
01031
void KateViewSchemaAction::setSchema (
int mode)
01032 {
01033 KateView *view=m_view;
01034
01035
if (view)
01036 view->renderer()->config()->setSchema (mode-1);
01037 }
01038
01039
01040
01041 KateStyleListView::KateStyleListView( QWidget *parent,
bool showUseDefaults )
01042 :
QListView( parent )
01043 {
01044 setSorting( -1 );
01045 addColumn( i18n(
"Context") );
01046 addColumn( SmallIconSet(
"text_bold"), QString::null );
01047 addColumn( SmallIconSet(
"text_italic"), QString::null );
01048 addColumn( SmallIconSet(
"text_under"), QString::null );
01049 addColumn( SmallIconSet(
"text_strike"), QString::null );
01050 addColumn( i18n(
"Normal") );
01051 addColumn( i18n(
"Selected") );
01052 addColumn( i18n(
"Background") );
01053 addColumn( i18n(
"Background Selected") );
01054
if ( showUseDefaults )
01055 addColumn( i18n(
"Use Default Style") );
01056 connect(
this, SIGNAL(mouseButtonPressed(
int,
QListViewItem*,
const QPoint&,
int)),
01057
this, SLOT(slotMousePressed(
int,
QListViewItem*,
const QPoint&,
int)) );
01058 connect(
this, SIGNAL(contextMenuRequested(
QListViewItem*,
const QPoint&,
int)),
01059
this, SLOT(showPopupMenu(
QListViewItem*,
const QPoint&)) );
01060
01061 normalcol =
KGlobalSettings::textColor();
01062 bgcol = KateRendererConfig::global()->backgroundColor();
01063 selcol = KateRendererConfig::global()->selectionColor();
01064 docfont = *KateRendererConfig::global()->font();
01065
01066 viewport()->setPaletteBackgroundColor( bgcol );
01067 }
01068
01069
void KateStyleListView::showPopupMenu( KateStyleListItem *i,
const QPoint &globalPos,
bool showtitle )
01070 {
01071
if ( !dynamic_cast<KateStyleListItem*>(i) )
return;
01072
01073
KPopupMenu m(
this );
01074
KateAttribute *is = i->style();
01075
int id;
01076
01077
01078
QPixmap cl(16,16);
01079 cl.
fill( i->style()->textColor() );
01080
QPixmap scl(16,16);
01081 scl.
fill( i->style()->selectedTextColor() );
01082
QPixmap bgcl(16,16);
01083 bgcl.
fill( i->style()->itemSet(KateAttribute::BGColor) ? i->style()->bgColor() : viewport()->colorGroup().base() );
01084
QPixmap sbgcl(16,16);
01085 sbgcl.
fill( i->style()->itemSet(KateAttribute::SelectedBGColor) ? i->style()->selectedBGColor() : viewport()->colorGroup().base() );
01086
01087
if ( showtitle )
01088 m.
insertTitle( i->contextName(), KateStyleListItem::ContextName );
01089
id = m.
insertItem( i18n(
"&Bold"),
this, SLOT(mSlotPopupHandler(
int)), 0, KateStyleListItem::Bold );
01090 m.
setItemChecked(
id, is->
bold() );
01091
id = m.
insertItem( i18n(
"&Italic"),
this, SLOT(mSlotPopupHandler(
int)), 0, KateStyleListItem::Italic );
01092 m.
setItemChecked(
id, is->
italic() );
01093
id = m.
insertItem( i18n(
"&Underline"),
this, SLOT(mSlotPopupHandler(
int)), 0, KateStyleListItem::Underline );
01094 m.
setItemChecked(
id, is->
underline() );
01095
id = m.
insertItem( i18n(
"S&trikeout"),
this, SLOT(mSlotPopupHandler(
int)), 0, KateStyleListItem::Strikeout );
01096 m.
setItemChecked(
id, is->
strikeOut() );
01097
01098 m.
insertSeparator();
01099
01100 m.
insertItem(
QIconSet(cl), i18n(
"Normal &Color..."),
this, SLOT(mSlotPopupHandler(
int)), 0, KateStyleListItem::Color );
01101 m.
insertItem(
QIconSet(scl), i18n(
"&Selected Color..."),
this, SLOT(mSlotPopupHandler(
int)), 0, KateStyleListItem::SelColor );
01102 m.
insertItem(
QIconSet(bgcl), i18n(
"&Background Color..."),
this, SLOT(mSlotPopupHandler(
int)), 0, KateStyleListItem::BgColor );
01103 m.
insertItem(
QIconSet(sbgcl), i18n(
"S&elected Background Color..."),
this, SLOT(mSlotPopupHandler(
int)), 0, KateStyleListItem::SelBgColor );
01104
01105
01106
01107
01108
01109
KateAttribute *style = i->style();
01110
if ( style->
itemSet( KateAttribute::BGColor) || style->
itemSet( KateAttribute::SelectedBGColor ) )
01111 {
01112 m.
insertSeparator();
01113
if ( style->
itemSet( KateAttribute::BGColor) )
01114 m.
insertItem( i18n(
"Unset Background Color"),
this, SLOT(unsetColor(
int)), 0, 100 );
01115
if ( style->
itemSet( KateAttribute::SelectedBGColor ) )
01116 m.
insertItem( i18n(
"Unset Selected Background Color"),
this, SLOT(unsetColor(
int)), 0, 101 );
01117 }
01118
01119
if ( ! i->isDefault() && ! i->defStyle() ) {
01120 m.
insertSeparator();
01121
id = m.
insertItem( i18n(
"Use &Default Style"),
this, SLOT(mSlotPopupHandler(
int)), 0, KateStyleListItem::UseDefStyle );
01122 m.
setItemChecked(
id, i->defStyle() );
01123 }
01124 m.
exec( globalPos );
01125 }
01126
01127
void KateStyleListView::showPopupMenu(
QListViewItem *i,
const QPoint &pos )
01128 {
01129
if ( dynamic_cast<KateStyleListItem*>(i) )
01130 showPopupMenu( (KateStyleListItem*)i, pos,
true );
01131 }
01132
01133
void KateStyleListView::mSlotPopupHandler(
int z )
01134 {
01135 ((KateStyleListItem*)currentItem())->changeProperty( (KateStyleListItem::Property)z );
01136 }
01137
01138
void KateStyleListView::unsetColor(
int c )
01139 {
01140 ((KateStyleListItem*)currentItem())->unsetColor( c );
01141 emitChanged();
01142 }
01143
01144
01145
01146
void KateStyleListView::slotMousePressed(
int btn,
QListViewItem* i,
const QPoint& pos,
int c)
01147 {
01148
if ( dynamic_cast<KateStyleListItem*>(i) ) {
01149
if ( btn == Qt::LeftButton && c > 0 ) {
01150
01151 ((KateStyleListItem*)i)->activate( c, viewport()->mapFromGlobal( pos ) -
QPoint( 0, itemRect(i).top() ) );
01152 }
01153 }
01154 }
01155
01156
01157
01158
01159
static const int BoxSize = 16;
01160
static const int ColorBtnWidth = 32;
01161
01162 KateStyleListItem::KateStyleListItem(
QListViewItem *parent,
const QString & stylename,
01163
KateAttribute *style, KateHlItemData *data )
01164 :
QListViewItem( parent, stylename ),
01165 ds( style ),
01166 st( data )
01167 {
01168 initStyle();
01169 }
01170
01171 KateStyleListItem::KateStyleListItem(
QListView *parent,
const QString & stylename,
01172
KateAttribute *style, KateHlItemData *data )
01173 :
QListViewItem( parent, stylename ),
01174 ds( style ),
01175 st( data )
01176 {
01177 initStyle();
01178 }
01179
01180
void KateStyleListItem::initStyle()
01181 {
01182
if (!st)
01183 is = ds;
01184
else
01185 {
01186 is =
new KateAttribute (*ds);
01187
01188
if (st->isSomethingSet())
01189 *is += *st;
01190 }
01191 }
01192
01193
void KateStyleListItem::updateStyle()
01194 {
01195
01196
if (!st)
01197
return;
01198
01199
if ( is->
itemSet(KateAttribute::Weight) )
01200 {
01201
if ( is->
weight() != st->weight())
01202 st->
setWeight( is->
weight() );
01203 }
01204
01205
if ( is->
itemSet(KateAttribute::Italic) )
01206 {
01207
if ( is->
italic() != st->italic())
01208 st->setItalic( is->
italic() );
01209 }
01210
01211
if ( is->
itemSet(KateAttribute::StrikeOut) )
01212 {
01213
if ( is->
strikeOut() != st->strikeOut())
01214
01215 st->setStrikeOut( is->
strikeOut() );
01216 }
01217
01218
if ( is->
itemSet(KateAttribute::Underline) )
01219 {
01220
if ( is->
underline() != st->underline())
01221 st->setUnderline( is->
underline() );
01222 }
01223
01224
if ( is->
itemSet(KateAttribute::Outline) )
01225 {
01226
if ( is->
outline() != st->outline())
01227 st->setOutline( is->
outline() );
01228 }
01229
01230
if ( is->
itemSet(KateAttribute::TextColor) )
01231 {
01232
if ( is->
textColor() != st->textColor())
01233 st->setTextColor( is->
textColor() );
01234 }
01235
01236
if ( is->
itemSet(KateAttribute::SelectedTextColor) )
01237 {
01238
if ( is->
selectedTextColor() != st->selectedTextColor())
01239 st->setSelectedTextColor( is->
selectedTextColor() );
01240 }
01241
01242
if ( is->
itemSet(KateAttribute::BGColor) )
01243 {
01244
if ( is->
bgColor() != st->bgColor())
01245 st->setBGColor( is->
bgColor() );
01246 }
01247
01248
if ( is->
itemSet(KateAttribute::SelectedBGColor) )
01249 {
01250
if ( is->
selectedBGColor() != st->selectedBGColor())
01251 st->setSelectedBGColor( is->
selectedBGColor() );
01252 }
01253 }
01254
01255
01256
bool KateStyleListItem::defStyle() {
return st && st->itemsSet() != ds->itemsSet(); }
01257
01258
01259
bool KateStyleListItem::isDefault() {
return st ?
false :
true; }
01260
01261
int KateStyleListItem::width(
const QFontMetrics & ,
const QListView * lv,
int col )
const
01262
{
01263
int m = lv->
itemMargin() * 2;
01264
switch ( col ) {
01265
case ContextName:
01266
01267
01268
return QListViewItem::width(
QFontMetrics( ((KateStyleListView*)lv)->docfont), lv, col);
01269
case Bold:
01270
case Italic:
01271
case UseDefStyle:
01272
return BoxSize + m;
01273
case Color:
01274
case SelColor:
01275
case BgColor:
01276
case SelBgColor:
01277
return ColorBtnWidth +m;
01278
default:
01279
return 0;
01280 }
01281 }
01282
01283
void KateStyleListItem::activate(
int column,
const QPoint &localPos )
01284 {
01285
QListView *lv = listView();
01286
int x = 0;
01287
for(
int c = 0; c < column-1; c++ )
01288 x += lv->
columnWidth( c );
01289
int w;
01290
switch( column ) {
01291
case Bold:
01292
case Italic:
01293
case Underline:
01294
case Strikeout:
01295
case UseDefStyle:
01296 w = BoxSize;
01297
break;
01298
case Color:
01299
case SelColor:
01300
case BgColor:
01301
case SelBgColor:
01302 w = ColorBtnWidth;
01303
break;
01304
default:
01305
return;
01306 }
01307
if ( !
QRect( x, 0, w, BoxSize ).contains( localPos ) )
01308 changeProperty( (Property)column );
01309 }
01310
01311
void KateStyleListItem::changeProperty( Property p )
01312 {
01313
if ( p == Bold )
01314 is->
setBold( ! is->
bold() );
01315
else if ( p == Italic )
01316 is->
setItalic( ! is->
italic() );
01317
else if ( p == Underline )
01318 is->
setUnderline( ! is->
underline() );
01319
else if ( p == Strikeout )
01320 is->
setStrikeOut( ! is->
strikeOut() );
01321
else if ( p == UseDefStyle )
01322 toggleDefStyle();
01323
else
01324 setColor( p );
01325
01326 updateStyle ();
01327
01328 ((KateStyleListView*)listView())->emitChanged();
01329 }
01330
01331
void KateStyleListItem::toggleDefStyle()
01332 {
01333
if ( *is == *ds ) {
01334
KMessageBox::information( listView(),
01335 i18n(
"\"Use Default Style\" will be automatically unset when you change any style properties."),
01336 i18n(
"Kate Styles"),
01337
"Kate hl config use defaults" );
01338 }
01339
else {
01340
delete is;
01341 is =
new KateAttribute( *ds );
01342 repaint();
01343 }
01344 }
01345
01346
void KateStyleListItem::setColor(
int column )
01347 {
01348
QColor c;
01349
QColor d;
01350
if ( column == Color)
01351 {
01352 c = is->
textColor();
01353 d = ds->textColor();
01354 }
01355
else if ( column == SelColor )
01356 {
01357 c = is->
selectedTextColor();
01358 d = is->
selectedTextColor();
01359 }
01360
else if ( column == BgColor )
01361 {
01362 c = is->
bgColor();
01363 d = ds->bgColor();
01364 }
01365
else if ( column == SelBgColor )
01366 {
01367 c = is->
selectedBGColor();
01368 d = ds->selectedBGColor();
01369 }
01370
01371
if (
KColorDialog::getColor( c, d, listView() ) != QDialog::Accepted)
return;
01372
01373
bool def = ! c.
isValid();
01374
01375
01376
01377
01378
switch (column)
01379 {
01380
case Color:
01381
if ( def )
01382 {
01383
if ( ds->itemSet(KateAttribute::TextColor) )
01384 is->
setTextColor( ds->textColor());
01385
else
01386 is->
clearAttribute(KateAttribute::TextColor);
01387 }
01388
else
01389 is->
setTextColor( c );
01390
break;
01391
case SelColor:
01392
if ( def )
01393 {
01394
if ( ds->itemSet(KateAttribute::SelectedTextColor) )
01395 is->
setSelectedTextColor( ds->selectedTextColor());
01396
else
01397 is->
clearAttribute(KateAttribute::SelectedTextColor);
01398 }
01399
else
01400 is->
setSelectedTextColor( c );
01401
break;
01402
case BgColor:
01403
if ( def )
01404 {
01405
if ( ds->itemSet(KateAttribute::BGColor) )
01406 is->
setBGColor( ds->bgColor());
01407
else
01408 is->
clearAttribute(KateAttribute::BGColor);
01409 }
01410
else
01411 is->
setBGColor( c );
01412
break;
01413
case SelBgColor:
01414
if ( def )
01415 {
01416
if ( ds->itemSet(KateAttribute::SelectedBGColor) )
01417 is->
setSelectedBGColor( ds->selectedBGColor());
01418
else
01419 is->
clearAttribute(KateAttribute::SelectedBGColor);
01420 }
01421
else
01422 is->
setSelectedBGColor( c );
01423
break;
01424 }
01425
01426 repaint();
01427 }
01428
01429
void KateStyleListItem::unsetColor(
int c )
01430 {
01431
if ( c == 100 && is->
itemSet(KateAttribute::BGColor) )
01432 is->
clearAttribute(KateAttribute::BGColor);
01433
else if ( c == 101 && is->
itemSet(KateAttribute::SelectedBGColor) )
01434 is->
clearAttribute(KateAttribute::SelectedBGColor);
01435 }
01436
01437
void KateStyleListItem::paintCell(
QPainter *p,
const QColorGroup& ,
int col,
int width,
int align )
01438 {
01439
01440
if ( !p )
01441
return;
01442
01443
QListView *lv = listView();
01444
if ( !lv )
01445
return;
01446 Q_ASSERT( lv );
01447
01448
01449
QColorGroup mcg = lv->viewport()->colorGroup();
01450
01451
if ( col )
01452 p->
fillRect( 0, 0, width, height(),
QBrush( mcg.
base() ) );
01453
01454
int marg = lv->
itemMargin();
01455
01456
QColor c;
01457
01458
switch ( col )
01459 {
01460
case ContextName:
01461 {
01462 mcg.
setColor(QColorGroup::Text, is->
textColor());
01463 mcg.
setColor(QColorGroup::HighlightedText, is->
selectedTextColor());
01464
01465 c = is->
bgColor();
01466
if ( c.
isValid() && is->
itemSet(KateAttribute::BGColor) )
01467 mcg.
setColor( QColorGroup::Base, c );
01468
if ( isSelected() && is->
itemSet(KateAttribute::SelectedBGColor) )
01469 {
01470 c = is->
selectedBGColor();
01471
if ( c.
isValid() )
01472 mcg.
setColor( QColorGroup::Highlight, c );
01473 }
01474 QFont f ( ((KateStyleListView*)lv)->docfont );
01475 p->
setFont( is->
font(f) );
01476
01477
01478
01479
QListViewItem::paintCell( p, mcg, col, width, align );
01480 }
01481
break;
01482
case Bold:
01483
case Italic:
01484
case Underline:
01485
case Strikeout:
01486
case UseDefStyle:
01487 {
01488
01489
01490
int x = 0;
01491
int y = (height() - BoxSize) / 2;
01492
01493
if ( isEnabled() )
01494 p->
setPen(
QPen( mcg.
text(), 2 ) );
01495
else
01496 p->
setPen(
QPen( lv->palette().color( QPalette::Disabled, QColorGroup::Text ), 2 ) );
01497
01498 p->
drawRect( x+marg, y+2, BoxSize-4, BoxSize-4 );
01499 x++;
01500 y++;
01501
if ( (col == Bold && is->
bold()) ||
01502 (col == Italic && is->
italic()) ||
01503 (col == Underline && is->
underline()) ||
01504 (col == Strikeout && is->
strikeOut()) ||
01505 (col == UseDefStyle && *is == *ds ) )
01506 {
01507
QPointArray a( 7*2 );
01508
int i, xx, yy;
01509 xx = x+1+marg;
01510 yy = y+5;
01511
for ( i=0; i<3; i++ ) {
01512 a.
setPoint( 2*i, xx, yy );
01513 a.
setPoint( 2*i+1, xx, yy+2 );
01514 xx++; yy++;
01515 }
01516 yy -= 2;
01517
for ( i=3; i<7; i++ ) {
01518 a.
setPoint( 2*i, xx, yy );
01519 a.
setPoint( 2*i+1, xx, yy+2 );
01520 xx++; yy--;
01521 }
01522 p->
drawLineSegments( a );
01523 }
01524 }
01525
break;
01526
case Color:
01527
case SelColor:
01528
case BgColor:
01529
case SelBgColor:
01530 {
01531
bool set(
false );
01532
if ( col == Color)
01533 {
01534 c = is->
textColor();
01535 set = is->
itemSet(KateAttribute::TextColor);
01536 }
01537
else if ( col == SelColor )
01538 {
01539 c = is->
selectedTextColor();
01540 set = is->
itemSet( KateAttribute::SelectedTextColor);
01541 }
01542
else if ( col == BgColor )
01543 {
01544 set = is->
itemSet(KateAttribute::BGColor);
01545 c = set ? is->
bgColor() : mcg.base();
01546 }
01547
else if ( col == SelBgColor )
01548 {
01549 set = is->
itemSet(KateAttribute::SelectedBGColor);
01550 c = set ? is->
selectedBGColor(): mcg.base();
01551 }
01552
01553
01554
int x = 0;
01555
int y = (height() - BoxSize) / 2;
01556
if ( isEnabled() )
01557 p->
setPen(
QPen( mcg.
text(), 2 ) );
01558
else
01559 p->
setPen(
QPen( lv->palette().color( QPalette::Disabled, QColorGroup::Text ), 2 ) );
01560
01561 p->
drawRect( x+marg, y+2, ColorBtnWidth-4, BoxSize-4 );
01562 p->
fillRect( x+marg+1,y+3,ColorBtnWidth-7,BoxSize-7,
QBrush( c ) );
01563
01564
if ( ! set )
01565 p->
drawLine( x+marg-1, BoxSize-3, ColorBtnWidth-4, y+1 );
01566 }
01567
01568 }
01569 }
01570
01571
01572
01573 KateStyleListCaption::KateStyleListCaption(
QListView *parent,
const QString & name )
01574 :
QListViewItem( parent,
name )
01575 {
01576 }
01577
01578
void KateStyleListCaption::paintCell(
QPainter *p,
const QColorGroup& ,
int col,
int width,
int align )
01579 {
01580
QListView *lv = listView();
01581
if ( !lv )
01582
return;
01583 Q_ASSERT( lv );
01584
01585
01586
QColorGroup mcg = lv->viewport()->colorGroup();
01587
01588
QListViewItem::paintCell( p, mcg, col, width, align );
01589 }
01590
01591
01592