kate Library API Documentation

kateschema.cpp

00001 /* This file is part of the KDE libraries
00002    Copyright (C) 2001-2003 Christoph Cullmann <cullmann@kde.org>
00003    Copyright (C) 2002, 2003 Anders Lund <anders.lund@lund.tdcadsl.dk>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License version 2 as published by the Free Software Foundation.
00008 
00009    This library is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012    Library General Public License for more details.
00013 
00014    You should have received a copy of the GNU Library General Public License
00015    along with this library; see the file COPYING.LIB.  If not, write to
00016    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00017    Boston, MA 02111-1307, USA.
00018 */
00019 
00020 #include "kateschema.h"
00021 #include "kateschema.moc"
00022 
00023 #include "kateconfig.h"
00024 #include "katefactory.h"
00025 #include "kateview.h"
00026 #include "katerenderer.h"
00027 
00028 #include <klocale.h>
00029 #include <kdialog.h>
00030 #include <kcolorbutton.h>
00031 #include <kcombobox.h>
00032 #include <kinputdialog.h>
00033 #include <kfontdialog.h>
00034 #include <kdebug.h>
00035 #include <kiconloader.h>
00036 #include <kmessagebox.h>
00037 #include <kpopupmenu.h>
00038 #include <kcolordialog.h>
00039 #include <kapplication.h>
00040 #include <kaboutdata.h>
00041 
00042 #include <qbuttongroup.h>
00043 #include <qcheckbox.h>
00044 #include <qptrcollection.h>
00045 #include <qdialog.h>
00046 #include <qgrid.h>
00047 #include <qgroupbox.h>
00048 #include <qlabel.h>
00049 #include <qtextcodec.h>
00050 #include <qlayout.h>
00051 #include <qlineedit.h>
00052 #include <qheader.h>
00053 #include <qlistbox.h>
00054 #include <qhbox.h>
00055 #include <qpainter.h>
00056 #include <qobjectlist.h>
00057 #include <qpushbutton.h>
00058 #include <qradiobutton.h>
00059 #include <qspinbox.h>
00060 #include <qstringlist.h>
00061 #include <qtabwidget.h>
00062 #include <qvbox.h>
00063 #include <qvgroupbox.h>
00064 #include <qwhatsthis.h>
00065 
00066 /*
00067     QListViewItem subclass to display/edit a style, bold/italic is check boxes,
00068     normal and selected colors are boxes, which will display a color chooser when
00069     activated.
00070     The context name for the style will be drawn using the editor default font and
00071     the chosen colors.
00072     This widget id designed to handle the default as well as the individual hl style
00073     lists.
00074     This widget is designed to work with the KateStyleListView class exclusively.
00075     Added by anders, jan 23 2002.
00076 */
00077 class KateStyleListItem : public QListViewItem
00078 {
00079   public:
00080     KateStyleListItem( QListView *parent=0, const QString & stylename=0,
00081                    class KateAttribute* defaultstyle=0, class ItemData *data=0 );
00082     ~KateStyleListItem() { if (st) delete is; };
00083 
00084     /* mainly for readability */
00085     enum Property { ContextName, Bold, Italic, Underline, Strikeout, Color, SelColor, BgColor, SelBgColor, UseDefStyle };
00086 
00087     /* updates the hldata's style */
00088     void updateStyle();
00089     /* reimp */
00090     virtual int width ( const QFontMetrics & fm, const QListView * lv, int c ) const;
00091     /* calls changeProperty() if it makes sense considering pos. */
00092     void activate( int column, const QPoint &localPos );
00093     /* For bool fields, toggles them, for color fields, display a color chooser */
00094     void changeProperty( Property p );
00095     /* style context name */
00096     QString contextName() { return text(0); };
00097     /* only true for a hl mode item using it's default style */
00098     bool defStyle();
00099     /* true for default styles */
00100     bool isDefault();
00101     /* whichever style is active (st for hl mode styles not using
00102        the default style, ds otherwise) */
00103     class KateAttribute* style() { return is; };
00104 
00105   protected:
00106     /* reimp */
00107     void paintCell(QPainter *p, const QColorGroup& cg, int col, int width, int align);
00108 
00109   private:
00110     /* private methods to change properties */
00111     void toggleDefStyle();
00112     void setColor( int );
00113     /* helper function to copy the default style into the ItemData,
00114        when a property is changed and we are using default style. */
00115     void setCustStyle();
00116 
00117     class KateAttribute *is, // the style currently in use
00118               *ds;           // default style for hl mode contexts and default styles
00119     class ItemData *st;      // itemdata for hl mode contexts
00120 };
00121 
00122 QString KateSchemaManager::normalSchema ()
00123 {
00124   return KApplication::kApplication()->aboutData()->appName () + QString (" - Normal");
00125 }
00126 
00127 QString KateSchemaManager::printingSchema ()
00128 {
00129   return KApplication::kApplication()->aboutData()->appName () + QString (" - Printing");
00130 }
00131 
00132 KateSchemaManager::KateSchemaManager ()
00133   : m_config ("kateschemarc", false, false)
00134 {
00135   update ();
00136 }
00137 
00138 KateSchemaManager::~KateSchemaManager ()
00139 {
00140 }
00141 
00142 //
00143 // read the types from config file and update the internal list
00144 //
00145 void KateSchemaManager::update (bool readfromfile)
00146 {
00147   if (readfromfile)
00148     m_config.reparseConfiguration ();
00149 
00150   m_schemas = m_config.groupList();
00151   m_schemas.sort ();
00152 
00153   m_schemas.remove (printingSchema());
00154   m_schemas.remove (normalSchema());
00155   m_schemas.prepend (printingSchema());
00156   m_schemas.prepend (normalSchema());
00157 }
00158 
00159 //
00160 // get the right group
00161 // special handling of the default schemas ;)
00162 //
00163 KConfig *KateSchemaManager::schema (uint number)
00164 {
00165   if ((number>1) && (number < m_schemas.count()))
00166     m_config.setGroup (m_schemas[number]);
00167   else if (number == 1)
00168     m_config.setGroup (printingSchema());
00169   else
00170     m_config.setGroup (normalSchema());
00171 
00172   return &m_config;
00173 }
00174 
00175 void KateSchemaManager::addSchema (const QString &t)
00176 {
00177   m_config.setGroup (t);
00178   m_config.writeEntry("Color Background", KGlobalSettings::baseColor());
00179 
00180   update (false);
00181 }
00182 
00183 void KateSchemaManager::removeSchema (uint number)
00184 {
00185   if (number >= m_schemas.count())
00186     return;
00187 
00188   if (number < 2)
00189     return;
00190 
00191   m_config.deleteGroup (name (number));
00192 
00193   update (false);
00194 }
00195 
00196 bool KateSchemaManager::validSchema (uint number)
00197 {
00198   if (number < m_schemas.count())
00199     return true;
00200 
00201   return false;
00202 }
00203 
00204 uint KateSchemaManager::number (const QString &name)
00205 {
00206   if (name == normalSchema())
00207     return 0;
00208 
00209   if (name == printingSchema())
00210     return 1;
00211 
00212   int i;
00213   if ((i = m_schemas.findIndex(name)) > -1)
00214     return i;
00215 
00216   return 0;
00217 }
00218 
00219 QString KateSchemaManager::name (uint number)
00220 {
00221   if ((number>1) && (number < m_schemas.count()))
00222     return m_schemas[number];
00223   else if (number == 1)
00224     return printingSchema();
00225 
00226   return normalSchema();
00227 }
00228 
00229 //
00230 //
00231 //
00232 // DIALOGS !!!
00233 //
00234 //
00235 
00236 //BEGIN KateSchemaConfigColorTab
00237 KateSchemaConfigColorTab::KateSchemaConfigColorTab( QWidget *parent, const char * )
00238   : QWidget (parent)
00239 {
00240   QHBox *b;
00241   QLabel *label;
00242 
00243   QVBoxLayout *blay=new QVBoxLayout(this, 0, KDialog::spacingHint());
00244 
00245   QVGroupBox *gbTextArea = new QVGroupBox(i18n("Text Area Background"), this);
00246 
00247   b = new QHBox (gbTextArea);
00248   label = new QLabel( i18n("Normal text:"), b);
00249   label->setAlignment( AlignLeft|AlignVCenter);
00250   m_back = new KColorButton(b);
00251   connect( m_back, SIGNAL( changed( const QColor & ) ), parent->parentWidget(), SLOT( slotChanged() ) );
00252 
00253   b = new QHBox (gbTextArea);
00254   label = new QLabel( i18n("Selected text:"), b);
00255   label->setAlignment( AlignLeft|AlignVCenter);
00256   m_selected = new KColorButton(b);
00257   connect( m_selected, SIGNAL( changed( const QColor & ) ), parent->parentWidget(), SLOT( slotChanged() ) );
00258 
00259   b = new QHBox (gbTextArea);
00260   label = new QLabel( i18n("Current line:"), b);
00261   label->setAlignment( AlignLeft|AlignVCenter);
00262   m_current = new KColorButton(b);
00263   connect( m_current, SIGNAL( changed( const QColor & ) ), parent->parentWidget(), SLOT( slotChanged() ) );
00264 
00265   blay->addWidget(gbTextArea);
00266 
00267   QVGroupBox *gbBorder = new QVGroupBox(i18n("Additional Elements"), this);
00268 
00269   b = new QHBox (gbBorder);
00270   label = new QLabel( i18n("Left border background:"), b);
00271   label->setAlignment( AlignLeft|AlignVCenter);
00272   m_iconborder = new KColorButton(b);
00273   connect( m_iconborder, SIGNAL( changed( const QColor & ) ), parent->parentWidget(), SLOT( slotChanged() ) );
00274 
00275   b = new QHBox (gbBorder);
00276   label = new QLabel( i18n("Bracket highlight:"), b);
00277   label->setAlignment( AlignLeft|AlignVCenter);
00278   m_bracket = new KColorButton(b);
00279   connect( m_bracket, SIGNAL( changed( const QColor & ) ), parent->parentWidget(), SLOT( slotChanged() ) );
00280 
00281   b = new QHBox (gbBorder);
00282   label = new QLabel( i18n("Word wrap markers:"), b);
00283   label->setAlignment( AlignLeft|AlignVCenter);
00284   m_wwmarker = new KColorButton(b);
00285   connect( m_wwmarker, SIGNAL( changed( const QColor & ) ), parent->parentWidget(), SLOT( slotChanged() ) );
00286 
00287   b = new QHBox (gbBorder);
00288   label = new QLabel( i18n("Tab markers:"), b);
00289   label->setAlignment( AlignLeft|AlignVCenter);
00290   m_tmarker = new KColorButton(b);
00291   connect( m_tmarker, SIGNAL( changed( const QColor & ) ), parent->parentWidget(), SLOT( slotChanged() ) );
00292 
00293   blay->addWidget(gbBorder);
00294 
00295   blay->addStretch();
00296 
00297   // QWhatsThis help
00298   QWhatsThis::add(m_back, i18n("<p>Sets the background color of the editing area.</p>"));
00299   QWhatsThis::add(m_selected, i18n("<p>Sets the background color of the selection.</p>"
00300         "<p>To set the text color for selected text, use the \"<b>Configure "
00301         "Highlighting</b>\" dialog.</p>"));
00302   QWhatsThis::add(m_current, i18n("<p>Sets the background color of the currently "
00303         "active line, which means the line where your cursor is positioned.</p>"));
00304   QWhatsThis::add(m_bracket, i18n("<p>Sets the bracket matching color. This means, "
00305         "if you place the cursor e.g. at a <b>(</b>, the matching <b>)</b> will "
00306         "be highlighted with this color.</p>"));
00307   QWhatsThis::add(m_wwmarker, i18n(
00308         "<p>Sets the color of Word Wrap-related markers:</p>"
00309         "<dl><dt>Static Word Wrap</dt><dd>A vertical line which shows the column where "
00310         "text is going to be wrapped</dd>"
00311         "<dt>Dynamic Word Wrap</dt><dd>An arrow shown to the left of "
00312         "visually-wrapped lines</dd></dl>"));
00313   QWhatsThis::add(m_tmarker, i18n(
00314         "<p>Sets the color of the tabulator marks:</p>"));
00315 }
00316 
00317 KateSchemaConfigColorTab::~KateSchemaConfigColorTab()
00318 {
00319 }
00320 
00321 void KateSchemaConfigColorTab::readConfig (KConfig *config)
00322 {
00323   QColor tmp0 (KGlobalSettings::baseColor());
00324   QColor tmp1 (KGlobalSettings::highlightColor());
00325   QColor tmp2 (KGlobalSettings::alternateBackgroundColor());
00326   QColor tmp3 ( "#FFFF99" );
00327   QColor tmp4 (tmp2.dark());
00328   QColor tmp5 ( KGlobalSettings::textColor() );
00329   QColor tmp6 ( "#EAE9E8" );
00330 
00331   m_back->setColor(config->readColorEntry("Color Background", &tmp0));
00332   m_selected->setColor(config->readColorEntry("Color Selection", &tmp1));
00333   m_current->setColor(config->readColorEntry("Color Highlighted Line", &tmp2));
00334   m_bracket->setColor(config->readColorEntry("Color Highlighted Bracket", &tmp3));
00335   m_wwmarker->setColor(config->readColorEntry("Color Word Wrap Marker", &tmp4));
00336   m_tmarker->setColor(config->readColorEntry("Color Tab Marker", &tmp5));
00337   m_iconborder->setColor(config->readColorEntry("Color Icon Bar", &tmp6));
00338 }
00339 
00340 void KateSchemaConfigColorTab::writeConfig (KConfig *config)
00341 {
00342   config->writeEntry("Color Background", m_back->color());
00343   config->writeEntry("Color Selection", m_selected->color());
00344   config->writeEntry("Color Highlighted Line", m_current->color());
00345   config->writeEntry("Color Highlighted Bracket", m_bracket->color());
00346   config->writeEntry("Color Word Wrap Marker", m_wwmarker->color());
00347   config->writeEntry("Color Tab Marker", m_tmarker->color());
00348   config->writeEntry("Color Icon Bar", m_iconborder->color());
00349 }
00350 
00351 //END KateSchemaConfigColorTab
00352 
00353 //BEGIN KateSchemaConfigFontTab
00354 KateSchemaConfigFontTab::KateSchemaConfigFontTab( QWidget *parent, const char * )
00355   : QWidget (parent)
00356 {
00357     // sizemanagment
00358   QGridLayout *grid = new QGridLayout( this, 1, 1 );
00359 
00360   m_fontchooser = new KFontChooser ( this, 0L, false, QStringList(), false );
00361   m_fontchooser->enableColumn(KFontChooser::StyleList, false);
00362   grid->addWidget( m_fontchooser, 0, 0);
00363 
00364   connect (m_fontchooser, SIGNAL (fontSelected( const QFont & )), this, SLOT (slotFontSelected( const QFont & )));
00365   connect (m_fontchooser, SIGNAL (fontSelected( const QFont & )), parent->parentWidget(), SLOT (slotChanged()));
00366 }
00367 
00368 KateSchemaConfigFontTab::~KateSchemaConfigFontTab()
00369 {
00370 }
00371 
00372 void KateSchemaConfigFontTab::slotFontSelected( const QFont &font )
00373 {
00374   myFont = font;
00375 }
00376 
00377 void KateSchemaConfigFontTab::readConfig (KConfig *config)
00378 {
00379   QFont f (KGlobalSettings::fixedFont());
00380 
00381   m_fontchooser->setFont (config->readFontEntry("Font", &f));
00382 }
00383 
00384 void KateSchemaConfigFontTab::writeConfig (KConfig *config)
00385 {
00386   config->writeEntry("Font", myFont);
00387 }
00388 
00389 //END KateSchemaConfigFontTab
00390 
00391 //BEGIN KateSchemaConfigFontTab
00392 KateSchemaConfigFontColorTab::KateSchemaConfigFontColorTab( QWidget *parent, const char * )
00393   : QWidget (parent)
00394 {
00395   m_defaultStyleLists.setAutoDelete(true);
00396 
00397   // sizemanagment
00398   QGridLayout *grid = new QGridLayout( this, 1, 1 );
00399 
00400   m_defaultStyles = new KateStyleListView( this, false );
00401   grid->addWidget( m_defaultStyles, 0, 0);
00402 
00403   connect (m_defaultStyles, SIGNAL (changed()), parent->parentWidget(), SLOT (slotChanged()));
00404 }
00405 
00406 KateSchemaConfigFontColorTab::~KateSchemaConfigFontColorTab()
00407 {
00408 }
00409 
00410 KateAttributeList *KateSchemaConfigFontColorTab::attributeList (uint schema)
00411 {
00412   if (!m_defaultStyleLists[schema])
00413   {
00414     KateAttributeList *list = new KateAttributeList ();
00415     HlManager::self()->getDefaults(schema, *list);
00416 
00417     m_defaultStyleLists.insert (schema, list);
00418   }
00419 
00420   return m_defaultStyleLists[schema];
00421 }
00422 
00423 void KateSchemaConfigFontColorTab::schemaChanged (uint schema)
00424 {
00425   m_defaultStyles->clear ();
00426 
00427   KateAttributeList *l = attributeList (schema);
00428 
00429   // set colors
00430   QPalette p ( m_defaultStyles->palette() );
00431   QColor _c ( KGlobalSettings::baseColor() );
00432   p.setColor( QPalette::Normal, QColorGroup::Base,
00433     KateFactory::self()->schemaManager()->schema(schema)->
00434      readColorEntry( "Color Background", &_c ) );
00435   _c = KGlobalSettings::highlightColor();
00436   p.setColor( QPalette::Normal, QColorGroup::Highlight,
00437     KateFactory::self()->schemaManager()->schema(schema)->
00438       readColorEntry( "Color Selection", &_c ) );
00439   _c = l->at(0)->textColor(); // not quite as much of an assumption ;)
00440   p.setColor( QPalette::Normal, QColorGroup::Text, _c );
00441   m_defaultStyles->viewport()->setPalette( p );
00442 
00443   for ( uint i = 0; i < HlManager::self()->defaultStyles(); i++ )
00444   {
00445     m_defaultStyles->insertItem( new KateStyleListItem( m_defaultStyles, HlManager::self()->defaultStyleName(i),
00446                               l->at( i ) ) );
00447   }
00448 }
00449 
00450 void KateSchemaConfigFontColorTab::reload ()
00451 {
00452   m_defaultStyles->clear ();
00453   m_defaultStyleLists.clear ();
00454 }
00455 
00456 void KateSchemaConfigFontColorTab::apply ()
00457 {
00458   for ( QIntDictIterator<KateAttributeList> it( m_defaultStyleLists ); it.current(); ++it )
00459     HlManager::self()->setDefaults(it.currentKey(), *(it.current()));
00460 }
00461 
00462 //END KateSchemaConfigFontColorTab
00463 
00464 //BEGIN KateSchemaConfigFontColorTab
00465 KateSchemaConfigHighlightTab::KateSchemaConfigHighlightTab( QWidget *parent, const char *, KateSchemaConfigFontColorTab *page )
00466   : QWidget (parent)
00467 {
00468   m_defaults = page;
00469 
00470   m_schema = 0;
00471   m_hl = 0;
00472 
00473   m_hlDict.setAutoDelete (true);
00474 
00475   QVBoxLayout *layout = new QVBoxLayout(this, 0, KDialog::spacingHint() );
00476 
00477   // hl chooser
00478   QHBox *hbHl = new QHBox( this );
00479   layout->add (hbHl);
00480 
00481   hbHl->setSpacing( KDialog::spacingHint() );
00482   QLabel *lHl = new QLabel( i18n("H&ighlight:"), hbHl );
00483   hlCombo = new QComboBox( false, hbHl );
00484   lHl->setBuddy( hlCombo );
00485   connect( hlCombo, SIGNAL(activated(int)),
00486            this, SLOT(hlChanged(int)) );
00487 
00488   for( int i = 0; i < HlManager::self()->highlights(); i++) {
00489     if (HlManager::self()->hlSection(i).length() > 0)
00490       hlCombo->insertItem(HlManager::self()->hlSection(i) + QString ("/") + HlManager::self()->hlName(i));
00491     else
00492       hlCombo->insertItem(HlManager::self()->hlName(i));
00493   }
00494   hlCombo->setCurrentItem(0);
00495 
00496   // styles listview
00497   m_styles = new KateStyleListView( this, true );
00498   layout->addWidget (m_styles, 999);
00499 
00500   hlCombo->setCurrentItem ( 0 );
00501   hlChanged ( 0 );
00502 
00503   QWhatsThis::add( m_styles,  i18n("This list displays the contexts of the current syntax highlight mode and offers the means to edit them. The context name reflects the current style settings.<p>To edit using the keyboard, press <strong>&lt;SPACE&gt;</strong> and choose a property from the popup menu.<p>To edit the colors, click the colored squares, or select the color to edit from the popup menu.") );
00504 
00505   connect (m_styles, SIGNAL (changed()), parent->parentWidget(), SLOT (slotChanged()));
00506 }
00507 
00508 KateSchemaConfigHighlightTab::~KateSchemaConfigHighlightTab()
00509 {
00510 }
00511 
00512 void KateSchemaConfigHighlightTab::hlChanged(int z)
00513 {
00514   m_hl = z;
00515 
00516   schemaChanged (m_schema);
00517 }
00518 
00519 void KateSchemaConfigHighlightTab::schemaChanged (uint schema)
00520 {
00521   m_schema = schema;
00522 
00523   kdDebug () << "NEW SCHEMA: " << m_schema << " NEW HL: " << m_hl << endl;
00524 
00525   m_styles->clear ();
00526 
00527   if (!m_hlDict[m_schema])
00528   {
00529     kdDebug () << "NEW SCHEMA, create dict" << endl;
00530 
00531     m_hlDict.insert (schema, new QIntDict<ItemDataList>);
00532     m_hlDict[m_schema]->setAutoDelete (true);
00533   }
00534 
00535   if (!m_hlDict[m_schema]->find(m_hl))
00536   {
00537     kdDebug () << "NEW HL, create list" << endl;
00538 
00539     ItemDataList *list = new ItemDataList ();
00540     HlManager::self()->getHl( m_hl )->getItemDataListCopy (m_schema, *list);
00541     m_hlDict[m_schema]->insert (m_hl, list);
00542   }
00543 
00544   KateAttributeList *l = m_defaults->attributeList (schema);
00545 
00546   // Set listview colors
00547   // We do that now, because we can now get the "normal text" color.
00548   // TODO this reads of the KConfig object, which should be changed when
00549   // the color tab is fixed.
00550   QPalette p ( m_styles->palette() );
00551   QColor _c ( KGlobalSettings::baseColor() );
00552   p.setColor( QPalette::Normal, QColorGroup::Base,
00553     KateFactory::self()->schemaManager()->schema(m_schema)->
00554       readColorEntry( "Color Background", &_c ) );
00555   _c = KGlobalSettings::highlightColor();
00556   p.setColor( QPalette::Normal, QColorGroup::Highlight,
00557     KateFactory::self()->schemaManager()->schema(m_schema)->
00558       readColorEntry( "Color Selection", &_c ) );
00559   // ahem, *assuming* that normal text is the first item :o
00560   _c = m_hlDict[m_schema]->find(m_hl)->first()->textColor();
00561   if ( ! _c.isValid() )
00562     _c = l->at(0)->textColor(); // not quite as much of an assumption ;)
00563   p.setColor( QPalette::Normal, QColorGroup::Text, _c );
00564   m_styles->viewport()->setPalette( p );
00565 
00566 
00567   for ( ItemData *itemData = m_hlDict[m_schema]->find(m_hl)->first();
00568         itemData != 0L;
00569         itemData = m_hlDict[m_schema]->find(m_hl)->next())
00570   {
00571     kdDebug () << "insert items " << itemData->name << endl;
00572 
00573     m_styles->insertItem( new KateStyleListItem( m_styles, itemData->name,
00574                           l->at(itemData->defStyleNum), itemData ) );
00575 
00576   }
00577 }
00578 
00579 void KateSchemaConfigHighlightTab::reload ()
00580 {
00581   m_styles->clear ();
00582   m_hlDict.clear ();
00583 
00584   hlChanged (0);
00585 }
00586 
00587 void KateSchemaConfigHighlightTab::apply ()
00588 {
00589   for ( QIntDictIterator< QIntDict<ItemDataList> > it( m_hlDict ); it.current(); ++it )
00590     for ( QIntDictIterator< ItemDataList > it2( *it.current() ); it2.current(); ++it2 )
00591        HlManager::self()->getHl( it2.currentKey() )->setItemDataList (it.currentKey(), *(it2.current()));
00592 }
00593 
00594 //END KateSchemaConfigHighlightTab
00595 
00596 KateSchemaConfigPage::KateSchemaConfigPage( QWidget *parent )
00597   : KateConfigPage( parent ),
00598     m_lastSchema (-1)
00599 {
00600   QVBoxLayout *layout = new QVBoxLayout(this, 0, KDialog::spacingHint() );
00601 
00602   QHBox *hbHl = new QHBox( this );
00603   layout->add (hbHl);
00604   hbHl->setSpacing( KDialog::spacingHint() );
00605   QLabel *lHl = new QLabel( i18n("&Schema:"), hbHl );
00606   schemaCombo = new QComboBox( false, hbHl );
00607   lHl->setBuddy( schemaCombo );
00608   connect( schemaCombo, SIGNAL(activated(int)),
00609            this, SLOT(schemaChanged(int)) );
00610 
00611   btndel = new QPushButton( i18n("&Delete"), hbHl );
00612   connect( btndel, SIGNAL(clicked()), this, SLOT(deleteSchema()) );
00613 
00614   QPushButton *btnnew = new QPushButton( i18n("&New..."), hbHl );
00615   connect( btnnew, SIGNAL(clicked()), this, SLOT(newSchema()) );
00616 
00617   m_tabWidget = new QTabWidget ( this );
00618   m_tabWidget->setMargin (KDialog::marginHint());
00619   layout->add (m_tabWidget);
00620 
00621   connect (m_tabWidget, SIGNAL (currentChanged (QWidget *)), this, SLOT (newCurrentPage (QWidget *)));
00622 
00623   m_colorTab = new KateSchemaConfigColorTab (m_tabWidget);
00624   m_tabWidget->addTab (m_colorTab, i18n("Colors"));
00625 
00626   m_fontTab = new KateSchemaConfigFontTab (m_tabWidget);
00627   m_tabWidget->addTab (m_fontTab, i18n("Font"));
00628 
00629   m_fontColorTab = new KateSchemaConfigFontColorTab (m_tabWidget);
00630   m_tabWidget->addTab (m_fontColorTab, i18n("Normal Text Styles"));
00631 
00632   m_highlightTab = new KateSchemaConfigHighlightTab (m_tabWidget, "", m_fontColorTab);
00633   m_tabWidget->addTab (m_highlightTab, i18n("Highlighting Text Styles"));
00634 
00635   hbHl = new QHBox( this );
00636   layout->add (hbHl);
00637   hbHl->setSpacing( KDialog::spacingHint() );
00638   lHl = new QLabel( i18n("&Default schema for %1:").arg(KApplication::kApplication()->aboutData()->programName ()), hbHl );
00639   defaultSchemaCombo = new QComboBox( false, hbHl );
00640   lHl->setBuddy( defaultSchemaCombo );
00641 
00642   reload();
00643 
00644   connect( defaultSchemaCombo, SIGNAL(activated(int)),
00645            this, SLOT(slotChanged()) );
00646 }
00647 
00648 KateSchemaConfigPage::~KateSchemaConfigPage ()
00649 {
00650   // just reload config from disc
00651   KateFactory::self()->schemaManager()->update ();
00652 }
00653 
00654 void KateSchemaConfigPage::apply()
00655 {
00656   if (m_lastSchema > -1)
00657   {
00658     m_colorTab->writeConfig (KateFactory::self()->schemaManager()->schema(m_lastSchema));
00659     m_fontTab->writeConfig (KateFactory::self()->schemaManager()->schema(m_lastSchema));
00660   }
00661 
00662   // just sync the config
00663   KateFactory::self()->schemaManager()->schema (0)->sync();
00664   KateFactory::self()->schemaManager()->update ();
00665 
00666   KateRendererConfig::global()->setSchema (defaultSchemaCombo->currentItem());
00667 
00668   // special for the highlighting stuff
00669   m_fontColorTab->apply ();
00670   m_highlightTab->apply ();
00671 
00672   // sync the hl config for real
00673   HlManager::self()->getKConfig()->sync ();
00674 }
00675 
00676 void KateSchemaConfigPage::reload()
00677 {
00678   // just reload the config from disc
00679   KateFactory::self()->schemaManager()->update ();
00680 
00681   // special for the highlighting stuff
00682   m_fontColorTab->reload ();
00683 
00684   update ();
00685 
00686   defaultSchemaCombo->setCurrentItem (KateRendererConfig::global()->schema());
00687 }
00688 
00689 void KateSchemaConfigPage::reset()
00690 {
00691   reload ();
00692 }
00693 
00694 void KateSchemaConfigPage::defaults()
00695 {
00696   reload ();
00697 }
00698 
00699 void KateSchemaConfigPage::update ()
00700 {
00701   // soft update, no load from disk
00702   KateFactory::self()->schemaManager()->update (false);
00703 
00704   schemaCombo->clear ();
00705   schemaCombo->insertStringList (KateFactory::self()->schemaManager()->list ());
00706 
00707   defaultSchemaCombo->clear ();
00708   defaultSchemaCombo->insertStringList (KateFactory::self()->schemaManager()->list ());
00709 
00710   schemaCombo->setCurrentItem (0);
00711   schemaChanged (0);
00712 
00713   schemaCombo->setEnabled (schemaCombo->count() > 0);
00714 }
00715 
00716 void KateSchemaConfigPage::deleteSchema ()
00717 {
00718   int t = schemaCombo->currentItem ();
00719 
00720   KateFactory::self()->schemaManager()->removeSchema (t);
00721 
00722   update ();
00723 }
00724 
00725 void KateSchemaConfigPage::newSchema ()
00726 {
00727   QString t = KInputDialog::getText (i18n("Name for New Schema"), i18n ("Name:"), i18n("New Schema"), 0, this);
00728 
00729   KateFactory::self()->schemaManager()->addSchema (t);
00730 
00731   // soft update, no load from disk
00732   KateFactory::self()->schemaManager()->update (false);
00733   int i = KateFactory::self()->schemaManager()->list ().findIndex (t);
00734 
00735   update ();
00736   if (i > -1)
00737   {
00738     schemaCombo->setCurrentItem (i);
00739     schemaChanged (i);
00740   }
00741 }
00742 
00743 void KateSchemaConfigPage::schemaChanged (int schema)
00744 {
00745   if (schema < 2)
00746   {
00747     btndel->setEnabled (false);
00748   }
00749   else
00750   {
00751     btndel->setEnabled (true);
00752   }
00753 
00754   if (m_lastSchema > -1)
00755   {
00756     m_colorTab->writeConfig (KateFactory::self()->schemaManager()->schema(m_lastSchema));
00757     m_fontTab->writeConfig (KateFactory::self()->schemaManager()->schema(m_lastSchema));
00758   }
00759 
00760   m_colorTab->readConfig (KateFactory::self()->schemaManager()->schema(schema));
00761   m_fontTab->readConfig (KateFactory::self()->schemaManager()->schema(schema));
00762   m_fontColorTab->schemaChanged (schema);
00763   m_highlightTab->schemaChanged (schema);
00764 
00765   m_lastSchema = schema;
00766 }
00767 
00768 void KateSchemaConfigPage::newCurrentPage (QWidget *w)
00769 {
00770   if (w == m_highlightTab)
00771     m_highlightTab->schemaChanged (m_lastSchema);
00772 }
00773 
00774 // BEGIN SCHEMA ACTION
00775 void KateViewSchemaAction::init()
00776 {
00777   m_view = 0;
00778   last = 0;
00779 
00780   connect(popupMenu(),SIGNAL(aboutToShow()),this,SLOT(slotAboutToShow()));
00781 }
00782 
00783 void KateViewSchemaAction::updateMenu (KateView *view)
00784 {
00785   m_view = view;
00786 }
00787 
00788 void KateViewSchemaAction::slotAboutToShow()
00789 {
00790   KateView *view=m_view;
00791   int count = KateFactory::self()->schemaManager()->list().count();
00792 
00793   for (int z=0; z<count; z++)
00794   {
00795     QString hlName = KateFactory::self()->schemaManager()->list().operator[](z);
00796 
00797     if (names.contains(hlName) < 1)
00798     {
00799       names << hlName;
00800       popupMenu()->insertItem ( hlName, this, SLOT(setSchema(int)), 0,  z+1);
00801     }
00802   }
00803 
00804   if (!view) return;
00805 
00806   popupMenu()->setItemChecked (last, false);
00807   popupMenu()->setItemChecked (view->renderer()->config()->schema()+1, true);
00808 
00809   last = view->renderer()->config()->schema()+1;
00810 }
00811 
00812 void KateViewSchemaAction::setSchema (int mode)
00813 {
00814   KateView *view=m_view;
00815 
00816   if (view)
00817     view->renderer()->config()->setSchema (mode-1);
00818 }
00819 // END SCHEMA ACTION
00820 
00821 //BEGIN KateStyleListView
00822 KateStyleListView::KateStyleListView( QWidget *parent, bool showUseDefaults )
00823     : QListView( parent )
00824 {
00825   addColumn( i18n("Context") );
00826   addColumn( SmallIconSet("text_bold"), QString::null );
00827   addColumn( SmallIconSet("text_italic"), QString::null );
00828   addColumn( SmallIconSet("text_under"), QString::null );
00829   addColumn( SmallIconSet("text_strike"), QString::null );
00830   addColumn( i18n("Normal") );
00831   addColumn( i18n("Selected") );
00832   addColumn( i18n("Background") );
00833   addColumn( i18n("Background Selected") );
00834   if ( showUseDefaults )
00835     addColumn( i18n("Use Default Style") );
00836   connect( this, SIGNAL(mouseButtonPressed(int, QListViewItem*, const QPoint&, int)),
00837            this, SLOT(slotMousePressed(int, QListViewItem*, const QPoint&, int)) );
00838   connect( this, SIGNAL(spacePressed(QListViewItem*)),
00839            this, SLOT(showPopupMenu(QListViewItem*)) );
00840   // grap the bg color, selected color and default font
00841   normalcol = KGlobalSettings::textColor();
00842   bgcol = *KateRendererConfig::global()->backgroundColor();
00843   selcol = *KateRendererConfig::global()->selectionColor();
00844   docfont = *KateRendererConfig::global()->font();
00845 
00846   viewport()->setPaletteBackgroundColor( bgcol );
00847 }
00848 
00849 void KateStyleListView::showPopupMenu( KateStyleListItem *i, const QPoint &globalPos, bool showtitle )
00850 {
00851   KPopupMenu m( this );
00852   KateAttribute *is = i->style();
00853   int id;
00854   // the title is used, because the menu obscures the context name when
00855   // displayed on behalf of spacePressed().
00856   QPixmap cl(16,16);
00857   cl.fill( i->style()->textColor() );
00858   QPixmap scl(16,16);
00859   scl.fill( i->style()->selectedTextColor() );
00860   if ( showtitle )
00861     m.insertTitle( i->contextName(), KateStyleListItem::ContextName );
00862   id = m.insertItem( i18n("&Bold"), this, SLOT(mSlotPopupHandler(int)), 0, KateStyleListItem::Bold );
00863   m.setItemChecked( id, is->bold() );
00864   id = m.insertItem( i18n("&Italic"), this, SLOT(mSlotPopupHandler(int)), 0, KateStyleListItem::Italic );
00865   m.setItemChecked( id, is->italic() );
00866   m.insertItem( QIconSet(cl), i18n("Normal &Color..."), this, SLOT(mSlotPopupHandler(int)), 0, KateStyleListItem::Color );
00867   m.insertItem( QIconSet(scl), i18n("&Selected Color..."), this, SLOT(mSlotPopupHandler(int)), 0, KateStyleListItem::SelColor );
00868   if ( ! i->isDefault() ) {
00869     id = m.insertItem( i18n("Use &Default Style"), this, SLOT(mSlotPopupHandler(int)), 0, KateStyleListItem::UseDefStyle );
00870     m.setItemChecked( id, i->defStyle() );
00871   }
00872   m.exec( globalPos );
00873 }
00874 
00875 void KateStyleListView::showPopupMenu( QListViewItem *i )
00876 {
00877   showPopupMenu( (KateStyleListItem*)i, viewport()->mapToGlobal(itemRect(i).topLeft()), true );
00878 }
00879 
00880 void KateStyleListView::mSlotPopupHandler( int z )
00881 {
00882   ((KateStyleListItem*)currentItem())->changeProperty( (KateStyleListItem::Property)z );
00883 }
00884 
00885 // Because QListViewItem::activatePos() is going to become deprecated,
00886 // and also because this attempt offers more control, I connect mousePressed to this.
00887 void KateStyleListView::slotMousePressed(int btn, QListViewItem* i, const QPoint& pos, int c)
00888 {
00889   if ( i ) {
00890     if ( btn == Qt::RightButton ) {
00891       showPopupMenu( (KateStyleListItem*)i, /*mapToGlobal(*/pos/*)*/ );
00892     }
00893     else if ( btn == Qt::LeftButton && c > 0 ) {
00894       // map pos to item/column and call KateStyleListItem::activate(col, pos)
00895       ((KateStyleListItem*)i)->activate( c, viewport()->mapFromGlobal( pos ) - QPoint( 0, itemRect(i).top() ) );
00896     }
00897   }
00898 }
00899 
00900 //END
00901 
00902 //BEGIN KateStyleListItem
00903 static const int BoxSize = 16;
00904 static const int ColorBtnWidth = 32;
00905 
00906 KateStyleListItem::KateStyleListItem( QListView *parent, const QString & stylename,
00907                               KateAttribute *style, ItemData *data )
00908         : QListViewItem( parent, stylename ),
00909           ds( style ),
00910           st( data )
00911 {
00912   if (!st)
00913     is = ds;
00914   else
00915   {
00916     is = new KateAttribute (*style);
00917 
00918     if (data->isSomethingSet())
00919       *is += *data;
00920   }
00921 }
00922 
00923 void KateStyleListItem::updateStyle()
00924 {
00925   // nothing there, not update it, will crash
00926   if (!st)
00927     return;
00928 
00929   if ( is->itemSet(KateAttribute::Weight) )
00930   {
00931     if ( is->weight() != st->weight())
00932       st->setWeight( is->weight() );
00933   }
00934 
00935   if ( is->itemSet(KateAttribute::Italic) )
00936   {
00937     if ( is->italic() != st->italic())
00938       st->setItalic( is->italic() );
00939   }
00940 
00941   if ( is->itemSet(KateAttribute::StrikeOut) )
00942   {
00943     if ( is->strikeOut() != st->strikeOut())
00944 
00945       st->setStrikeOut( is->strikeOut() );
00946   }
00947 
00948   if ( is->itemSet(KateAttribute::Underline) )
00949   {
00950     if ( is->underline() != st->underline())
00951       st->setUnderline( is->underline() );
00952   }
00953 
00954   if ( is->itemSet(KateAttribute::Outline) )
00955   {
00956     if ( is->outline() != st->outline())
00957       st->setOutline( is->outline() );
00958   }
00959 
00960   if ( is->itemSet(KateAttribute::TextColor) )
00961   {
00962     if ( is->textColor() != st->textColor())
00963       st->setTextColor( is->textColor() );
00964   }
00965 
00966   if ( is->itemSet(KateAttribute::SelectedTextColor) )
00967   {
00968     if ( is->selectedTextColor() != st->selectedTextColor())
00969       st->setSelectedTextColor( is->selectedTextColor() );
00970   }
00971 
00972   if ( is->itemSet(KateAttribute::BGColor) )
00973   {
00974     if ( is->bgColor() != st->bgColor())
00975       st->setBGColor( is->bgColor() );
00976   }
00977 
00978   if ( is->itemSet(KateAttribute::SelectedBGColor) )
00979   {
00980     if ( is->selectedBGColor() != st->selectedBGColor())
00981       st->setSelectedBGColor( is->selectedBGColor() );
00982   }
00983   //kdDebug()<<"after update: "<<st->itemsSet()<<endl;
00984   //kdDebug()<<"bold: "<<st->bold()<<" ("<<is->bold()<<")"<<endl;
00985 }
00986 
00987 /* only true for a hl mode item using it's default style */
00988 bool KateStyleListItem::defStyle() { return st && st->isSomethingSet(); }
00989 
00990 /* true for default styles */
00991 bool KateStyleListItem::isDefault() { return st ? false : true; }
00992 
00993 int KateStyleListItem::width( const QFontMetrics & /*fm*/, const QListView * lv, int col ) const
00994 {
00995   int m = lv->itemMargin() * 2;
00996   switch ( col ) {
00997     case ContextName:
00998       // FIXME: width for name column should reflect bold/italic
00999       // (relevant for non-fixed fonts only - nessecary?)
01000       return QFontMetrics( ((KateStyleListView*)lv)->docfont).width( text(0) ) + m;
01001     case Bold:
01002     case Italic:
01003     case UseDefStyle:
01004       return BoxSize + m;
01005     case Color:
01006     case SelColor:
01007     case BgColor:
01008     case SelBgColor:
01009       return ColorBtnWidth +m;
01010     default:
01011       return 0;
01012   }
01013 }
01014 
01015 void KateStyleListItem::activate( int column, const QPoint &localPos )
01016 {
01017   QListView *lv = listView();
01018   int x = 0;
01019   for( int c = 0; c < column-1; c++ )
01020     x += lv->columnWidth( c );
01021   int w;
01022   switch( column ) {
01023     case Bold:
01024     case Italic:
01025     case Underline:
01026     case Strikeout:
01027     case UseDefStyle:
01028       w = BoxSize;
01029       break;
01030     case Color:
01031     case SelColor:
01032     case BgColor:
01033     case SelBgColor:
01034       w = ColorBtnWidth;
01035       break;
01036     default:
01037       return;
01038   }
01039   if ( !QRect( x, 0, w, BoxSize ).contains( localPos ) )
01040   changeProperty( (Property)column );
01041 }
01042 
01043 void KateStyleListItem::changeProperty( Property p )
01044 {
01045   if ( p == Bold )
01046     is->setBold( ! is->bold() );
01047   else if ( p == Italic )
01048     is->setItalic( ! is->italic() );
01049   else if ( p == Underline )
01050     is->setUnderline( ! is->underline() );
01051   else if ( p == Strikeout )
01052     is->setStrikeOut( ! is->strikeOut() );
01053   else if ( p == UseDefStyle )
01054     toggleDefStyle();
01055   else
01056     setColor( p );
01057 
01058   updateStyle ();
01059 
01060   ((KateStyleListView*)listView())->emitChanged();
01061 }
01062 
01063 void KateStyleListItem::toggleDefStyle()
01064 {
01065   if ( *is == *ds ) {
01066     KMessageBox::information( listView(),
01067          i18n("\"Use Default Style\" will be automatically unset when you change any style properties."),
01068          i18n("Kate Styles"),
01069          "Kate hl config use defaults" );
01070   }
01071   else {
01072     delete is;
01073     is = new KateAttribute( *ds );
01074     repaint();
01075   }
01076 }
01077 
01078 void KateStyleListItem::setColor( int column )
01079 {
01080   QColor c;
01081   if ( column == Color) c = is->textColor();
01082   else if ( column == SelColor ) c = is->selectedTextColor();
01083   else if ( column == BgColor ) c = is->bgColor();
01084   else if ( column == SelBgColor ) c = is->selectedBGColor();
01085 
01086   if ( KColorDialog::getColor( c, listView() ) != QDialog::Accepted) return;
01087 
01088   //if (st && st->isSomethingSet()) setCustStyle();
01089 
01090   if ( column == Color) is->setTextColor( c );
01091   else if ( column == SelColor ) is->setSelectedTextColor( c );
01092   else if ( column == BgColor ) is->setBGColor( c );
01093   else if ( column == SelBgColor ) is->setSelectedBGColor( c );
01094 
01095   repaint();
01096 }
01097 
01098 void KateStyleListItem::setCustStyle()
01099 {
01100 //   is = st;
01101 //   *is += *ds;
01102 //  st->defStyle = 0;
01103 }
01104 
01105 void KateStyleListItem::paintCell( QPainter *p, const QColorGroup& /*cg*/, int col, int width, int align )
01106 {
01107 
01108   if ( !p )
01109     return;
01110 
01111   QListView *lv = listView();
01112   if ( !lv )
01113     return;
01114   Q_ASSERT( lv ); //###
01115 
01116   p->fillRect( 0, 0, width, height(), QBrush( ((KateStyleListView*)lv)->bgcol ) );
01117 
01118   // use a private color group and set the text/highlighted text colors
01119   QColorGroup mcg = lv->viewport()->colorGroup();
01120 
01121   if ( col ) // col 0 is drawn by the superclass method
01122     p->fillRect( 0, 0, width, height(), QBrush( mcg.base() ) );
01123 
01124 
01125   int marg = lv->itemMargin();
01126 
01127   QColor c;
01128 
01129   switch ( col )
01130   {
01131     case ContextName:
01132     {
01133       mcg.setColor(QColorGroup::Text, is->textColor());
01134       mcg.setColor(QColorGroup::HighlightedText, is->selectedTextColor());
01135       // text background color
01136       c = is->bgColor();
01137       if ( c.isValid() )
01138         mcg.setColor( QColorGroup::Base, c );
01139       if ( isSelected() )
01140       {
01141         c = is->selectedBGColor();
01142         if ( c.isValid() )
01143           mcg.setColor( QColorGroup::Highlight, c );
01144       }
01145       QFont f ( ((KateStyleListView*)lv)->docfont );
01146       p->setFont( is->font(f) );
01147       // FIXME - repainting when text is cropped, and the column is enlarged is buggy.
01148       // Maybe I need painting the string myself :(
01149       QListViewItem::paintCell( p, mcg, col, width, align );
01150     }
01151     break;
01152     case Bold:
01153     case Italic:
01154     case Underline:
01155     case Strikeout:
01156     case UseDefStyle:
01157     {
01158       // Bold/Italic/use default checkboxes
01159       // code allmost identical to QCheckListItem
01160       int x = 0;
01161       if ( align == AlignCenter ) {
01162         QFontMetrics fm( lv->font() );
01163         x = (width - BoxSize - fm.width(text(0)))/2;
01164       }
01165       int y = (height() - BoxSize) / 2;
01166 
01167       if ( isEnabled() )
01168         p->setPen( QPen( mcg.text(), 2 ) );
01169       else
01170         p->setPen( QPen( lv->palette().color( QPalette::Disabled, QColorGroup::Text ), 2 ) );
01171 
01172 /*      if ( isSelected() && lv->header()->mapToSection( 0 ) != 0 )
01173       {
01174         p->fillRect( 0, 0, x + marg + BoxSize + 4, height(),
01175               mcg.brush( QColorGroup::Highlight ) );
01176         if ( isEnabled() )
01177           p->setPen( QPen( mcg.highlightedText(), 2 ) ); // FIXME! - use defaultstyles[0].selecol. luckily not used :)
01178       }*/
01179       p->drawRect( x+marg, y+2, BoxSize-4, BoxSize-4 );
01180       x++;
01181       y++;
01182       if ( (col == Bold && is->bold()) ||
01183           (col == Italic && is->italic()) ||
01184           (col == Underline && is->underline()) ||
01185           (col == Strikeout && is->strikeOut()) ||
01186           (col == UseDefStyle && *is == *ds ) )
01187       {
01188         QPointArray a( 7*2 );
01189         int i, xx, yy;
01190         xx = x+1+marg;
01191         yy = y+5;
01192         for ( i=0; i<3; i++ ) {
01193           a.setPoint( 2*i,   xx, yy );
01194           a.setPoint( 2*i+1, xx, yy+2 );
01195           xx++; yy++;
01196         }
01197         yy -= 2;
01198         for ( i=3; i<7; i++ ) {
01199           a.setPoint( 2*i,   xx, yy );
01200           a.setPoint( 2*i+1, xx, yy+2 );
01201           xx++; yy--;
01202         }
01203         p->drawLineSegments( a );
01204       }
01205     }
01206     break;
01207     case Color:
01208     case SelColor:
01209     case BgColor:
01210     case SelBgColor:
01211     {
01212       if ( col == Color) c = is->textColor();
01213       else if ( col == SelColor ) c = is->selectedTextColor();
01214       else if ( col == BgColor ) c = is->itemSet(KateAttribute::BGColor) ? is->bgColor() : mcg.base();
01215       else if ( col == SelBgColor ) c = is->itemSet(KateAttribute::SelectedBGColor) ? is->selectedBGColor(): mcg.base();
01216       // color "buttons"
01217       int x = 0;
01218       int y = (height() - BoxSize) / 2;
01219       if ( isEnabled() )
01220         p->setPen( QPen( mcg.text(), 2 ) );
01221       else
01222         p->setPen( QPen( lv->palette().color( QPalette::Disabled, QColorGroup::Text ), 2 ) );
01223 
01224       p->drawRect( x+marg, y+2, ColorBtnWidth-4, BoxSize-4 );
01225       p->fillRect( x+marg+1,y+3,ColorBtnWidth-7,BoxSize-7,QBrush( c ) );
01226     }
01227     //case default: // no warning...
01228   }
01229 }
01230 //END
01231 
01232 // kate: space-indent on; indent-width 2; replace-tabs on;
KDE Logo
This file is part of the documentation for kate Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Feb 14 09:19:00 2006 by doxygen 1.3.6 written by Dimitri van Heesch, © 1997-2003